diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index ece5ab8a4f4..1c2de8763d8 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -2545,6 +2545,8 @@ files { MAME_DIR .. "src/mame/machine/k573fpga.h", MAME_DIR .. "src/mame/machine/k573kara.cpp", MAME_DIR .. "src/mame/machine/k573kara.h", + MAME_DIR .. "src/mame/machine/k573mcal.cpp", + MAME_DIR .. "src/mame/machine/k573mcal.h", MAME_DIR .. "src/mame/machine/k573mcr.cpp", MAME_DIR .. "src/mame/machine/k573mcr.h", MAME_DIR .. "src/mame/machine/k573msu.cpp", diff --git a/src/devices/machine/x76f041.cpp b/src/devices/machine/x76f041.cpp index 03fb5b65bf9..06b831eeda6 100644 --- a/src/devices/machine/x76f041.cpp +++ b/src/devices/machine/x76f041.cpp @@ -48,13 +48,15 @@ x76f041_device::x76f041_device( const machine_config &mconfig, const char *tag, m_bit( 0 ), m_byte( 0 ), m_command( 0 ), - m_address( 0 ) + m_address( 0 ), + m_is_password_accepted ( false ) { } void x76f041_device::device_start() { - memset( m_write_buffer, 0, sizeof( m_write_buffer ) ); + std::fill( std::begin( m_write_buffer ), std::end( m_write_buffer ), 0 ); + std::fill( std::begin( m_password_temp ), std::end( m_password_temp ), 0 ); save_item( NAME( m_cs ) ); save_item( NAME( m_rst ) ); @@ -67,6 +69,7 @@ void x76f041_device::device_start() save_item( NAME( m_byte ) ); save_item( NAME( m_command ) ); save_item( NAME( m_address ) ); + save_item( NAME( m_is_password_accepted ) ); save_item( NAME( m_write_buffer ) ); save_item( NAME( m_response_to_reset ) ); save_item( NAME( m_write_password ) ); @@ -74,6 +77,26 @@ void x76f041_device::device_start() save_item( NAME( m_configuration_password ) ); save_item( NAME( m_configuration_registers ) ); save_item( NAME( m_data ) ); + save_item( NAME( m_password_temp ) ); +} + +void x76f041_device::device_reset() +{ + std::fill( std::begin( m_write_buffer ), std::end( m_write_buffer ), 0 ); + std::fill( std::begin( m_password_temp ), std::end( m_password_temp ), 0 ); + + m_cs = 0; + m_rst = 0; + m_scl = 0; + m_sdaw = 0; + m_sdar = 0; + m_state = STATE_STOP; + m_shift = 0; + m_bit = 0; + m_byte = 0; + m_command = 0; + m_address = 0; + m_is_password_accepted = false; } WRITE_LINE_MEMBER( x76f041_device::write_cs ) @@ -128,6 +151,15 @@ uint8_t *x76f041_device::password() case COMMAND_READ: return m_read_password; + case COMMAND_CONFIGURATION: + if( m_address == CONFIGURATION_PROGRAM_WRITE_PASSWORD ) + return m_write_password; + + if( m_address == CONFIGURATION_PROGRAM_READ_PASSWORD ) + return m_read_password; + + return m_configuration_password; + default: return m_configuration_password; } @@ -135,6 +167,9 @@ uint8_t *x76f041_device::password() void x76f041_device::password_ok() { + if( m_configuration_registers[ CONFIG_CR ] & CR_RETRY_COUNTER_RESET_BIT ) + m_configuration_registers[ CONFIG_RC ] = 0; + switch( m_command & 0xe0 ) { case COMMAND_WRITE: @@ -144,7 +179,7 @@ void x76f041_device::password_ok() m_state = STATE_READ_DATA; break; case COMMAND_WRITE_USE_CONFIGURATION_PASSWORD: - m_state = STATE_WRITE_DATA; + m_state = STATE_CONFIGURATION_WRITE_DATA; break; case COMMAND_READ_USE_CONFIGURATION_PASSWORD: m_state = STATE_READ_DATA; @@ -153,14 +188,22 @@ void x76f041_device::password_ok() switch( m_address ) { case CONFIGURATION_PROGRAM_WRITE_PASSWORD: + m_state = STATE_PROGRAM_WRITE_PASSWORD; + m_byte = 0; break; case CONFIGURATION_PROGRAM_READ_PASSWORD: + m_state = STATE_PROGRAM_READ_PASSWORD; + m_byte = 0; break; case CONFIGURATION_PROGRAM_CONFIGURATION_PASSWORD: + m_state = STATE_PROGRAM_CONFIGURATION_PASSWORD; + m_byte = 0; break; case CONFIGURATION_RESET_WRITE_PASSWORD: + m_state = STATE_RESET_WRITE_PASSWORD; break; case CONFIGURATION_RESET_READ_PASSWORD: + m_state = STATE_RESET_READ_PASSWORD; break; case CONFIGURATION_PROGRAM_CONFIGURATION_REGISTERS: m_state = STATE_WRITE_CONFIGURATION_REGISTERS; @@ -171,8 +214,10 @@ void x76f041_device::password_ok() m_byte = 0; break; case CONFIGURATION_MASS_PROGRAM: + m_state = STATE_MASS_PROGRAM; break; case CONFIGURATION_MASS_ERASE: + m_state = STATE_MASS_ERASE; break; default: break; @@ -182,21 +227,56 @@ void x76f041_device::password_ok() void x76f041_device::load_address() { - /* todo: handle other bcr bits */ - int bcr; - m_address = m_shift; verboselog( 1, "-> address: %02x\n", m_address ); - if( ( m_command & 1 ) == 0 ) + if( ( m_configuration_registers[ CONFIG_CR ] & CR_RETRY_COUNTER_ENABLE_BIT ) != 0 && + m_configuration_registers[ CONFIG_RR ] == m_configuration_registers[ CONFIG_RC ] && + ( m_configuration_registers[ CONFIG_CR ] & CR_UNAUTHORIZED_ACCESS_BITS ) == 0x80 ) { - bcr = m_configuration_registers[ CONFIG_BCR1 ]; + // No commands are allowed + verboselog( 1, "unauthorized access rejected\n" ); + m_state = STATE_STOP; + m_sdar = 1; + m_byte = 0; + return; } - else + + if( ( m_command & 0xe0 ) == COMMAND_CONFIGURATION ) { - bcr = m_configuration_registers[ CONFIG_BCR2 ]; + // Configuration commands can be used regardless of array control register bits + if( m_address == CONFIGURATION_RESET_WRITE_PASSWORD || + m_address == CONFIGURATION_RESET_READ_PASSWORD || + m_address == CONFIGURATION_MASS_PROGRAM || + m_address == CONFIGURATION_MASS_ERASE ) + { + verboselog( 1, "password not required\n" ); + password_ok(); + } + else + { + verboselog( 1, "send password\n" ); + m_state = STATE_LOAD_PASSWORD; + m_byte = 0; + } + + return; } + + if( ( m_configuration_registers[ CONFIG_CR ] & CR_RETRY_COUNTER_ENABLE_BIT ) != 0 && + m_configuration_registers[ CONFIG_RR ] == m_configuration_registers[ CONFIG_RC ] && + ( m_configuration_registers[ CONFIG_CR ] & CR_UNAUTHORIZED_ACCESS_BITS ) != 0x80 ) + { + // Only configuration commands are allowed + verboselog( 1, "unauthorized access rejected\n" ); + m_state = STATE_STOP; + m_sdar = 1; + m_byte = 0; + return; + } + + int bcr = m_configuration_registers[ ( m_command & 1 ) ? CONFIG_BCR2 : CONFIG_BCR1 ]; if( ( m_address & 0x80 ) != 0 ) { bcr >>= 4; @@ -208,7 +288,8 @@ void x76f041_device::load_address() /* todo: find out when this is really checked. */ verboselog( 1, "command not allowed\n" ); m_state = STATE_STOP; - m_sdar = 0; + m_sdar = 1; + m_byte = 0; } else if( ( ( m_command & 0xe0 ) == COMMAND_WRITE && ( bcr & BCR_X ) == 0 ) || ( ( m_command & 0xe0 ) == COMMAND_READ && ( bcr & BCR_Y ) == 0 ) ) @@ -272,7 +353,15 @@ WRITE_LINE_MEMBER( x76f041_device::write_scl ) case STATE_LOAD_PASSWORD: case STATE_VERIFY_PASSWORD: case STATE_WRITE_DATA: + case STATE_CONFIGURATION_WRITE_DATA: case STATE_WRITE_CONFIGURATION_REGISTERS: + case STATE_PROGRAM_WRITE_PASSWORD: + case STATE_PROGRAM_READ_PASSWORD: + case STATE_PROGRAM_CONFIGURATION_PASSWORD: + case STATE_RESET_WRITE_PASSWORD: + case STATE_RESET_READ_PASSWORD: + case STATE_MASS_PROGRAM: + case STATE_MASS_ERASE: if( m_scl == 0 && state != 0 ) { if( m_bit < 8 ) @@ -311,6 +400,16 @@ WRITE_LINE_MEMBER( x76f041_device::write_scl ) if( m_byte == sizeof( m_write_buffer ) ) { m_state = STATE_VERIFY_PASSWORD; + + // Perform the password acceptance check before verify password because + // password verify ack is spammed and will quickly overflow the + // retry counter. + m_is_password_accepted = memcmp( password(), m_write_buffer, sizeof( m_write_buffer ) ) == 0; + if( !m_is_password_accepted ) + { + if( m_configuration_registers[ CONFIG_CR ] & CR_RETRY_COUNTER_ENABLE_BIT ) + m_configuration_registers[ CONFIG_RC ]++; + } } break; @@ -321,7 +420,7 @@ WRITE_LINE_MEMBER( x76f041_device::write_scl ) if( m_shift == 0xc0 ) { /* todo: this should take 10ms before it returns ok. */ - if( memcmp( password(), m_write_buffer, sizeof( m_write_buffer ) ) == 0 ) + if( m_is_password_accepted ) { password_ok(); } @@ -338,6 +437,36 @@ WRITE_LINE_MEMBER( x76f041_device::write_scl ) if( m_byte == sizeof( m_write_buffer ) ) { + int bcr = m_configuration_registers[ ( m_command & 1 ) ? CONFIG_BCR2 : CONFIG_BCR1 ]; + if( ( m_address & 0x80 ) != 0 ) + { + bcr >>= 4; + } + + if( ( bcr & ( BCR_Z | BCR_T ) ) == BCR_T ) + { + // Bits in the data can only be set, not cleared, when in program only mode + bool is_unauthorized_write = false; + + for( m_byte = 0; m_byte < sizeof( m_write_buffer ); m_byte++ ) + { + int offset = data_offset(); + if( m_write_buffer[ m_byte ] < m_data[ offset ] ) + { + verboselog( 1, "tried to unset bits while in program only mode\n" ); + is_unauthorized_write = true; + break; + } + } + + if( is_unauthorized_write ) + { + m_sdar = 1; + m_byte = 0; + break; + } + } + for( m_byte = 0; m_byte < sizeof( m_write_buffer ); m_byte++ ) { int offset = data_offset(); @@ -350,6 +479,15 @@ WRITE_LINE_MEMBER( x76f041_device::write_scl ) } break; + + case STATE_CONFIGURATION_WRITE_DATA: + // Unlike normal writes, configuration writes aren't required to be exactly 8 bytes + // TODO: Store data in a temporary buffer until the proper end of the command before writing + verboselog( 2, "-> data: %02x\n", m_shift ); + m_data[ data_offset() ] = m_shift; + m_byte++; + break; + case STATE_WRITE_CONFIGURATION_REGISTERS: verboselog( 1, "-> configuration register[ %d ]: %02x\n", m_byte, m_shift ); /* todo: write after all bytes received? */ @@ -360,6 +498,90 @@ WRITE_LINE_MEMBER( x76f041_device::write_scl ) m_byte = 0; } break; + + case STATE_PROGRAM_WRITE_PASSWORD: + verboselog( 1, "-> program write password[ %d ]: %02x\n", m_byte, m_shift ); + m_password_temp[ m_byte++ ] = m_shift; + + if( m_byte == sizeof( m_password_temp ) ) + { + // Read in the password twice and if the two copies match then write it to the password field + if( memcmp( &m_password_temp[ 0 ], &m_password_temp[ 8 ], sizeof( m_write_password ) ) == 0 ) + { + std::copy_n( std::begin( m_password_temp ), sizeof( m_write_password ), std::begin ( m_write_password ) ); + } + else { + m_sdar = 1; + } + + std::fill( std::begin( m_password_temp ), std::end( m_password_temp ), 0 ); + + m_byte = 0; + } + break; + + case STATE_PROGRAM_READ_PASSWORD: + verboselog( 1, "-> program read password[ %d ]: %02x\n", m_byte, m_shift ); + m_password_temp[ m_byte++ ] = m_shift; + + if( m_byte == sizeof( m_password_temp ) ) + { + if( memcmp( &m_password_temp[ 0 ], &m_password_temp[ 8 ], sizeof( m_read_password ) ) == 0 ) + { + std::copy_n( std::begin( m_password_temp ), sizeof( m_read_password ), std::begin ( m_read_password ) ); + } + else { + m_sdar = 1; + } + + std::fill( std::begin( m_password_temp ), std::end( m_password_temp ), 0 ); + + m_byte = 0; + } + break; + + case STATE_PROGRAM_CONFIGURATION_PASSWORD: + verboselog( 1, "-> program configuration password[ %d ]: %02x\n", m_byte, m_shift ); + m_password_temp[ m_byte++ ] = m_shift; + + if( m_byte == sizeof( m_password_temp ) ) + { + if( memcmp( &m_password_temp[ 0 ], &m_password_temp[ 8 ], sizeof( m_configuration_password ) ) == 0 ) + { + std::copy_n( std::begin( m_password_temp ), sizeof( m_configuration_password ), std::begin ( m_configuration_password ) ); + } + else { + m_sdar = 1; + } + + std::fill( std::begin( m_password_temp ), std::end( m_password_temp ), 0 ); + + m_byte = 0; + } + break; + + case STATE_RESET_WRITE_PASSWORD: + verboselog( 1, "-> reset write password\n" ); + std::fill( std::begin( m_write_password ), std::end( m_write_password ), 0 ); + break; + + case STATE_RESET_READ_PASSWORD: + verboselog( 1, "-> reset read password\n" ); + std::fill( std::begin( m_read_password ), std::end( m_read_password ), 0 ); + break; + + case STATE_MASS_PROGRAM: + case STATE_MASS_ERASE: + { + const uint8_t fill = m_state == STATE_MASS_ERASE ? 0xff : 0; + verboselog( 1, "-> mass erase %02x\n", fill ); + std::fill( std::begin( m_data ), std::end( m_data ), fill ); + std::fill( std::begin( m_configuration_password ), std::end( m_configuration_password ), fill ); + std::fill( std::begin( m_configuration_registers ), std::end( m_configuration_registers ), fill ); + std::fill( std::begin( m_write_password ), std::end( m_write_password ), fill ); + std::fill( std::begin( m_read_password ), std::end( m_read_password ), fill ); + break; + } } m_bit = 0; diff --git a/src/devices/machine/x76f041.h b/src/devices/machine/x76f041.h index af487f75a1d..44f6baf52db 100644 --- a/src/devices/machine/x76f041.h +++ b/src/devices/machine/x76f041.h @@ -29,6 +29,7 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; // device_nvram_interface overrides virtual void nvram_default() override; @@ -44,11 +45,24 @@ private: enum configuration_register_t { - CONFIG_BCR1 = 0, - CONFIG_BCR2 = 1, - CONFIG_CR = 2, - CONFIG_RR = 3, - CONFIG_RC = 4 + // If set to 1, retry counter is incremented when an invalid password is provided + CR_RETRY_COUNTER_ENABLE_BIT = 0x04, + + // If set to 1, retry counter will be reset when a correct password is provided + CR_RETRY_COUNTER_RESET_BIT = 0x08, + + // 10 = If retry counter is enabled, deny all commands when retry register equals retry counter + // 00, 01, 11 = If retry counter is enabled, allow only configuration commands when retry register equals retry counter + CR_UNAUTHORIZED_ACCESS_BITS = 0xc0, + }; + + enum configuration_registers_t + { + CONFIG_BCR1 = 0, // Array Control Register + CONFIG_BCR2 = 1, // Array Control Register 2 + CONFIG_CR = 2, // Configuration Register + CONFIG_RR = 3, // Retry Register + CONFIG_RC = 4 // Reset Counter }; enum bcr_t @@ -91,8 +105,18 @@ private: STATE_VERIFY_PASSWORD, STATE_READ_DATA, STATE_WRITE_DATA, + STATE_CONFIGURATION_WRITE_DATA, STATE_READ_CONFIGURATION_REGISTERS, - STATE_WRITE_CONFIGURATION_REGISTERS + STATE_WRITE_CONFIGURATION_REGISTERS, + + STATE_PROGRAM_WRITE_PASSWORD, + STATE_PROGRAM_READ_PASSWORD, + STATE_PROGRAM_CONFIGURATION_PASSWORD, + + STATE_RESET_WRITE_PASSWORD, + STATE_RESET_READ_PASSWORD, + STATE_MASS_PROGRAM, + STATE_MASS_ERASE }; optional_memory_region m_region; @@ -109,6 +133,7 @@ private: int m_byte; int m_command; int m_address; + bool m_is_password_accepted; uint8_t m_write_buffer[ 8 ]; uint8_t m_response_to_reset[ 4 ]; uint8_t m_write_password[ 8 ]; @@ -116,6 +141,7 @@ private: uint8_t m_configuration_password[ 8 ]; uint8_t m_configuration_registers[ 8 ]; uint8_t m_data[ 512 ]; + uint8_t m_password_temp[ 16 ]; }; diff --git a/src/devices/machine/x76f100.cpp b/src/devices/machine/x76f100.cpp index 4c74bb5b7ad..b03829265ac 100644 --- a/src/devices/machine/x76f100.cpp +++ b/src/devices/machine/x76f100.cpp @@ -45,13 +45,15 @@ x76f100_device::x76f100_device( const machine_config &mconfig, const char *tag, m_shift( 0 ), m_bit( 0 ), m_byte( 0 ), - m_command( 0 ) + m_command( 0 ), + m_password_retry_counter( 0 ), + m_is_password_accepted ( false ) { } void x76f100_device::device_start() { - memset( m_write_buffer, 0, sizeof( m_write_buffer ) ); + std::fill( std::begin( m_write_buffer ), std::end( m_write_buffer ), 0 ); save_item( NAME( m_cs ) ); save_item( NAME( m_rst ) ); @@ -63,6 +65,8 @@ void x76f100_device::device_start() save_item( NAME( m_bit ) ); save_item( NAME( m_byte ) ); save_item( NAME( m_command ) ); + save_item( NAME( m_password_retry_counter ) ); + save_item( NAME( m_is_password_accepted ) ); save_item( NAME( m_write_buffer ) ); save_item( NAME( m_response_to_reset ) ); save_item( NAME( m_write_password ) ); @@ -70,6 +74,24 @@ void x76f100_device::device_start() save_item( NAME( m_data ) ); } +void x76f100_device::device_reset() +{ + std::fill( std::begin( m_write_buffer ), std::end( m_write_buffer ), 0 ); + + m_cs = 0; + m_rst = 0; + m_scl = 0; + m_sdaw = 0; + m_sdar = 0; + m_state = STATE_STOP; + m_shift = 0; + m_bit = 0; + m_byte = 0; + m_command = 0; + m_password_retry_counter = 0; + m_is_password_accepted = false; +} + WRITE_LINE_MEMBER( x76f100_device::write_cs ) { if( m_cs != state ) @@ -124,11 +146,13 @@ uint8_t *x76f100_device::password() void x76f100_device::password_ok() { - if( ( m_command & 0xe1 ) == COMMAND_READ ) + m_password_retry_counter = 0; + + if( ( m_command & 0x81 ) == COMMAND_READ ) { m_state = STATE_READ_DATA; } - else if( ( m_command & 0xe1 ) == COMMAND_WRITE ) + else if( ( m_command & 0x81 ) == COMMAND_WRITE ) { m_state = STATE_WRITE_DATA; } @@ -141,8 +165,15 @@ void x76f100_device::password_ok() int x76f100_device::data_offset() { int block_offset = ( m_command >> 1 ) & 0x0f; + int offset = ( block_offset * sizeof( m_write_buffer ) ) + m_byte; - return ( block_offset * sizeof( m_write_buffer ) ) + m_byte; + // Technically there are 4 bits assigned to sector values but since the data array is only 112 bytes, + // it will try reading out of bounds when the sector is 14 (= starts at 112) or 15 (= starts at 120). + // TODO: Verify what happens on real hardware when reading/writing sectors 14 and 15 + if( offset >= sizeof ( m_data ) ) + return -1; + + return offset; } WRITE_LINE_MEMBER( x76f100_device::write_scl ) @@ -223,6 +254,25 @@ WRITE_LINE_MEMBER( x76f100_device::write_scl ) if( m_byte == sizeof( m_write_buffer ) ) { m_state = STATE_VERIFY_PASSWORD; + + // Perform the password acceptance check before verify password because + // password verify ack is spammed and will quickly overflow the + // retry counter. This becomes an issue with System 573 games that use the + // X76F100 as an install cartridge. The boot process first tries to use the + // game cartridge password and if not accepted will try the install cartridge + // password and then enter installation mode if accepted. + m_is_password_accepted = memcmp( password(), m_write_buffer, sizeof( m_write_buffer ) ) == 0; + if( !m_is_password_accepted ) + { + m_password_retry_counter++; + if( m_password_retry_counter >= 8 ) + { + std::fill( std::begin( m_read_password ), std::end( m_read_password ), 0 ); + std::fill( std::begin( m_write_password ), std::end( m_write_password ), 0 ); + std::fill( std::begin( m_data ), std::end( m_data ), 0 ); + m_password_retry_counter = 0; + } + } } break; @@ -233,7 +283,7 @@ WRITE_LINE_MEMBER( x76f100_device::write_scl ) if( m_shift == COMMAND_ACK_PASSWORD ) { /* todo: this should take 10ms before it returns ok. */ - if( memcmp( password(), m_write_buffer, sizeof( m_write_buffer ) ) == 0 ) + if( m_is_password_accepted ) { password_ok(); } @@ -250,11 +300,31 @@ WRITE_LINE_MEMBER( x76f100_device::write_scl ) if( m_byte == sizeof( m_write_buffer ) ) { - for( m_byte = 0; m_byte < sizeof( m_write_buffer ); m_byte++ ) + if( m_command == COMMAND_CHANGE_WRITE_PASSWORD ) { - int offset = data_offset(); - verboselog( 1, "-> data[ %03x ]: %02x\n", offset, m_write_buffer[ m_byte ] ); - m_data[ offset ] = m_write_buffer[ m_byte ]; + std::copy( std::begin( m_write_buffer ), std::end( m_write_buffer ), std::begin( m_write_password ) ); + } + else if( m_command == COMMAND_CHANGE_READ_PASSWORD ) + { + std::copy( std::begin( m_write_buffer ), std::end( m_write_buffer ), std::begin( m_read_password ) ); + } + else + { + for( m_byte = 0; m_byte < sizeof( m_write_buffer ); m_byte++ ) + { + int offset = data_offset(); + + if( offset != -1 ) + { + verboselog( 1, "-> data[ %03x ]: %02x\n", offset, m_write_buffer[ m_byte ] ); + m_data[ offset ] = m_write_buffer[ m_byte ]; + } + else + { + verboselog( 1, "-> attempted to write %02x out of bounds\n", m_write_buffer[m_byte] ); + break; + } + } } m_byte = 0; @@ -283,8 +353,18 @@ WRITE_LINE_MEMBER( x76f100_device::write_scl ) { case STATE_READ_DATA: offset = data_offset(); - m_shift = m_data[ offset ]; - verboselog( 1, "<- data[ %02x ]: %02x\n", offset, m_shift ); + + if( offset != -1 ) + { + m_shift = m_data[ offset ]; + verboselog( 1, "<- data[ %02x ]: %02x\n", offset, m_shift ); + } + else + { + m_shift = 0; + verboselog( 1, "<- attempted to read out of bounds\n" ); + } + break; } } diff --git a/src/devices/machine/x76f100.h b/src/devices/machine/x76f100.h index acec66e9c62..63f51815ec2 100644 --- a/src/devices/machine/x76f100.h +++ b/src/devices/machine/x76f100.h @@ -28,6 +28,7 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; // device_nvram_interface overrides virtual void nvram_default() override; @@ -74,6 +75,8 @@ private: int m_bit; int m_byte; int m_command; + int m_password_retry_counter; + bool m_is_password_accepted; uint8_t m_write_buffer[ 8 ]; uint8_t m_response_to_reset[ 4 ]; uint8_t m_write_password[ 8 ]; diff --git a/src/mame/drivers/ksys573.cpp b/src/mame/drivers/ksys573.cpp index ab6c0fddda3..f86a3ef43ef 100644 --- a/src/mame/drivers/ksys573.cpp +++ b/src/mame/drivers/ksys573.cpp @@ -356,6 +356,7 @@ G: gun mania only, drives air soft gun (this game uses real BB bullet) #include "machine/linflash.h" #include "machine/k573cass.h" #include "machine/k573dio.h" +#include "machine/k573mcal.h" #include "machine/k573mcr.h" #include "machine/k573msu.h" #include "machine/k573npu.h" @@ -2412,6 +2413,10 @@ void ksys573_state::konami573(machine_config &config) adc.set_input_callback(FUNC(ksys573_state::analogue_inputs_callback)); SYS573_JVS_HOST(config, m_sys573_jvs_host, 0); + + // Uncomment for generating new security cartridges + // Warning: Does not play well with memory card reader (JVS chaining issue?) + //KONAMI_573_MASTER_CALENDAR(config, "k573mcal", 0, m_sys573_jvs_host); } // Variants with additional digital sound board @@ -3533,7 +3538,7 @@ ROM_START( animechmp ) ROM_CONTINUE( 0x000000, 0x100000 ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca07ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(e230ceb6) SHA1(af0f0e74af62e813ba5b40e6767856d2866c5324) ) + ROM_LOAD( "gca07ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(845e2907) SHA1(bf278d3eb35eaa233ccedf54bfee313b6ae772e0) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gca07ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -3543,7 +3548,7 @@ ROM_START( bassangl ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge765ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(ee1b32a7) SHA1(c0f6b14b054f5a95ce474e794a3e0ca78faac681) ) + ROM_LOAD( "ge765ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(98141cc7) SHA1(79ed944c556671a00af995e054b9aeafee245015) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "765jaa02", 0, SHA1(dfcf62581e0d0e994945cc2c37ef86827d511628) ) @@ -3553,7 +3558,7 @@ ROM_START( bassang2 ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc865ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(095cbfb5) SHA1(529ce0a7b0986cf7e64c37f466d6c2dac95cea7f) ) + ROM_LOAD( "gc865ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(0a25aec3) SHA1(7b3c4da67f862d8d17e84cf5b9fbb3f7554cc409) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "865jaa02", 0, BAD_DUMP SHA1(b98d9aa54f13aa73bea580d6494cb6a7f3217be3) ) @@ -3577,7 +3582,7 @@ ROM_START( darkhleg ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx706ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(72b42574) SHA1(79dc959f0ce95ccb9ac0dbf0a72aec973e91bc56) ) + ROM_LOAD( "gx706ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(04bb0b14) SHA1(6cdedee6b1e169e0be6e065f93263abd3285a21a) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "706jaa02", 0, SHA1(10101952fad80b7a10b1299158081bf86ce8cbe6) ) @@ -3586,8 +3591,8 @@ ROM_END ROM_START( ddrextrm ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc36ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(c1601287) SHA1(929691a78f7bb6dd830f832f301116df0da1619b) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc36ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(197845c2) SHA1(c6c1c192f69331232a93ec6c690257e57a244e25) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcc36ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -3600,7 +3605,7 @@ ROM_START( ddru ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn845ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(c9e7fced) SHA1(aac4dde100091bc64d397f53484a0ffbf68b8101) ) + ROM_LOAD( "gn845ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(a248d576) SHA1(081bcc86c72314159c6560681b4d03cef9e231a7) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "845uaa02", 0, BAD_DUMP SHA1(d3f9290d4dadb5e9b82ebe77abf7b99d1a89f716) ) @@ -3610,7 +3615,7 @@ ROM_START( ddrj ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc845jb.u1", 0x000000, 0x000224, BAD_DUMP CRC(a16f42b8) SHA1(da4f1eb3eb2b28cb3a0bc74bb9b9945970f56ac2) ) + ROM_LOAD( "gc845jb.u1", 0x000000, 0x000224, BAD_DUMP CRC(cac06b23) SHA1(6df13364d07308c19d4d4c3c92730637989619f1) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "845jba02", 0, SHA1(e4be989f6a655857af8e7336c9a7acf82e51f123) ) @@ -3680,7 +3685,7 @@ ROM_START( ddra ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn845aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(327c4851) SHA1(f0939224af706fd103a67aae9c96518c1db90ac9) ) + ROM_LOAD( "gn845aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(59d361ca) SHA1(7014768c660e591f63622442c842f442c0d8e0ea) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "845aaa02", 0, SHA1(9b786de9b1085009c088de0d40425976c1f8df7b) ) @@ -3690,7 +3695,7 @@ ROM_START( ddrkara ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq921jbb.u1", 0x000000, 0x000224, BAD_DUMP CRC(4c91aecf) SHA1(4b8318523d6691b2124afceafba78e6bac8ba75f) ) + ROM_LOAD( "gq921jbb.u1", 0x000000, 0x000224, BAD_DUMP CRC(56fe552c) SHA1(51ccf6a64b478fd44a8e2d64c7a0f34138b680d2) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq921jbb.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3703,7 +3708,7 @@ ROM_START( ddr2m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn895jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(363f427e) SHA1(adec886a07b9bd91f142f286b04fc6582205f037) ) + ROM_LOAD( "gn895jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(5d906be5) SHA1(4ea9c5506aaaf1726f2a39d0a37a8df35a6aad47) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "895jaa02", 0, BAD_DUMP SHA1(cfe3a6f3ed62ba388b07045e29e22472d17dcfe4) ) @@ -3713,7 +3718,7 @@ ROM_START( ddr2mc ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn896ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(cbc984c5) SHA1(6c0cd78a41000999b4ffbd9fb3707738b50a9b50) ) + ROM_LOAD( "gn896ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(5d906be5) SHA1(4ea9c5506aaaf1726f2a39d0a37a8df35a6aad47) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "896jaa01", 0, BAD_DUMP SHA1(f802a0e2ba0147eb71c54d92af409c3010a5715f) ) @@ -3726,7 +3731,7 @@ ROM_START( ddr2mc2 ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge984ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(cbc984c5) SHA1(6c0cd78a41000999b4ffbd9fb3707738b50a9b50) ) + ROM_LOAD( "ge984ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(a066ad5e) SHA1(1783c62d7396e4e7f8d723b7bc07e45285dc122d) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "ge984a01,ddr", 0, SHA1(badd15656f2316f81b0a45026b5ef10287d1480b) ) @@ -3739,7 +3744,7 @@ ROM_START( ddr2ml ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge885jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(cbc984c5) SHA1(6c0cd78a41000999b4ffbd9fb3707738b50a9b50) ) + ROM_LOAD( "ge885jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(a066ad5e) SHA1(1783c62d7396e4e7f8d723b7bc07e45285dc122d) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "885jab01", 0, SHA1(c2bbb9e2e6f34e07f57e7076726af81df39f55c9) ) @@ -3752,7 +3757,7 @@ ROM_START( ddr2mla ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge885jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(cbc984c5) SHA1(6c0cd78a41000999b4ffbd9fb3707738b50a9b50) ) + ROM_LOAD( "ge885jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(a066ad5e) SHA1(1783c62d7396e4e7f8d723b7bc07e45285dc122d) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "885jaa02", 0, SHA1(f02bb09f41533c6ec496a662d815e85b304fcc72) ) @@ -3762,10 +3767,10 @@ ROM_START( ddr3ma ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge887aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(4ce86d32) SHA1(94cdb9873a7f7503acc3b763e9b49ec6af53533f) ) + ROM_LOAD( "ge887aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(68e01a7b) SHA1(a0094ae0f78ef4246957f998b1493973b3bb67ec) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn887aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(bb14f9bd) SHA1(9d0adf5a32d8bbcaaea2f701f5c7a5d51ee0b8bf) ) + ROM_LOAD( "gn887aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(0c095e3d) SHA1(0a5b3d4ba917f55b29ad80d989c20675c14b3cad) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge887aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3781,10 +3786,10 @@ ROM_START( ddr3mj ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge887ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(3a377cec) SHA1(5bf3107a89547bd7697d9f0ab8f67240e101a559) ) + ROM_LOAD( "ge887ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(cc8838ee) SHA1(b4db610103c0c5ba473f725b3b8b7f987ac3eaec) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn887ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(2f633432) SHA1(bce44f20a5a7318af6aea4fdfa8af64ddb76047c) ) + ROM_LOAD( "gn887ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(987e93b2) SHA1(9892b479fdc2c54b2e23783c69e270aa60596673) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge887ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3800,10 +3805,10 @@ ROM_START( ddr3mk ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge887kb.u1", 0x000000, 0x000084, BAD_DUMP CRC(4ce86d32) SHA1(94cdb9873a7f7503acc3b763e9b49ec6af53533f) ) + ROM_LOAD( "ge887kb.u1", 0x000000, 0x000084, BAD_DUMP CRC(68e01a7b) SHA1(a0094ae0f78ef4246957f998b1493973b3bb67ec) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn887kb.u1", 0x000000, 0x000084, BAD_DUMP CRC(bb14f9bd) SHA1(9d0adf5a32d8bbcaaea2f701f5c7a5d51ee0b8bf) ) + ROM_LOAD( "gn887kb.u1", 0x000000, 0x000084, BAD_DUMP CRC(0c095e3d) SHA1(0a5b3d4ba917f55b29ad80d989c20675c14b3cad) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge887kb.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3819,10 +3824,10 @@ ROM_START( ddr3mka ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge887ka.u1", 0x000000, 0x000084, BAD_DUMP CRC(4ce86d32) SHA1(94cdb9873a7f7503acc3b763e9b49ec6af53533f) ) + ROM_LOAD( "ge887ka.u1", 0x000000, 0x000084, BAD_DUMP CRC(68e01a7b) SHA1(a0094ae0f78ef4246957f998b1493973b3bb67ec) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn887ka.u1", 0x000000, 0x000084, BAD_DUMP CRC(bb14f9bd) SHA1(9d0adf5a32d8bbcaaea2f701f5c7a5d51ee0b8bf) ) + ROM_LOAD( "gn887ka.u1", 0x000000, 0x000084, BAD_DUMP CRC(0c095e3d) SHA1(0a5b3d4ba917f55b29ad80d989c20675c14b3cad) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge887ka.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3838,10 +3843,10 @@ ROM_START( ddr3mp ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "gea22ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(ef370ff7) SHA1(cb7a043f8bfa535e54ae9af728031d1018ed0734) ) + ROM_LOAD( "gea22ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(adfc9021) SHA1(bb161b9c1bd358cb72e61197a9fafd58c44adb7c) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca22ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(6883c82c) SHA1(6fef1dc7150066eee427db685b6c5fb350b7768d) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca22ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(02f8ba64) SHA1(3d1b660ff7c98de7f6386fc4d3300dc4205b5a3a) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "gea22ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3857,10 +3862,10 @@ ROM_START( ddr4m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "gea33aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(7bd2a24f) SHA1(62c73a54c4ed7697cf81ddbf3d13d4b0ca827be5) ) + ROM_LOAD( "gea33aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(a9bf9a0e) SHA1(7210ff9606746bc94bfba28e3522ee79222da32c) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca33aa.u1", 0x000000, 0x001014, BAD_DUMP CRC(f6feb2bd) SHA1(dfd5bd532338849289e2e4c155c0ca86e79b9ae5) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca33aa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(284effe1) SHA1(bdaeef1b47b643d9ad0ebac82651e60752565fcb) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "gea33aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3876,10 +3881,10 @@ ROM_START( ddr4mj ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "a33jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(10f1e9b8) SHA1(985bd26638964beebba5de4c7cda772b402d2e59) ) + ROM_LOAD( "a33jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(adfc9021) SHA1(bb161b9c1bd358cb72e61197a9fafd58c44adb7c) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca33ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(e5230867) SHA1(44aea9ccc90d81e7f41e5e9a62b28fcbdd75363b) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca33ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(3a291fea) SHA1(15e777d2137313e925d922e7289dd46c00838211) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "a33jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3895,10 +3900,10 @@ ROM_START( ddr4ms ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "gea33ab.u1", 0x000000, 0x000224, BAD_DUMP CRC(32fb3d13) SHA1(3ca6c77438f96b13d2c05f13a10fcff89a1403a2) ) + ROM_LOAD( "gea33ab.u1", 0x000000, 0x000224, BAD_DUMP CRC(4ca14f40) SHA1(90cdcaea12f1305c1068496df80ef1069625e398) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca33ab.u1", 0x000000, 0x001014, BAD_DUMP CRC(312ac13f) SHA1(05d733edc03cfc5ea03db6c683f59ed6ff860b5a) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca33ab.u1", 0x000000, 0x00008c, BAD_DUMP CRC(15d7ccf0) SHA1(2bda973c83cf2b042753492201a51db2e415338e) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "gea33ab.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3914,10 +3919,10 @@ ROM_START( ddr4msj ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "a33jba.u1", 0x000000, 0x000224, BAD_DUMP CRC(babf6fdb) SHA1(a2ef6b855d42072f0d3c72c8de9aff1f867de3f7) ) + ROM_LOAD( "a33jba.u1", 0x000000, 0x000224, BAD_DUMP CRC(b458d46a) SHA1(791b938e0a65131238e66fe86efa5f83d9225332) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca33jb.u1", 0x000000, 0x001014, BAD_DUMP CRC(00e4b531) SHA1(f421fc33642c5a3cd89fb14dc8cd601bdddd1f55) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca33jb.u1", 0x000000, 0x00008c, BAD_DUMP CRC(07b02cfb) SHA1(291d654d9dec8180f48a9da1cb71f4a4f7e86c26) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "a33jba.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3933,10 +3938,10 @@ ROM_START( ddr4mp ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "gea34ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(10f1e9b8) SHA1(985bd26638964beebba5de4c7cda772b402d2e59) ) + ROM_LOAD( "gea34ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(adfc9021) SHA1(bb161b9c1bd358cb72e61197a9fafd58c44adb7c) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca34ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(e9b6ce56) SHA1(f040fba2b2b446baa840026dcd10f9785f8cc0a3) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca34ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(e7f5f795) SHA1(cf942ed741d9605aaa1d99bfa848cc13f3f87b1b) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "gea34ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3955,10 +3960,10 @@ ROM_START( ddr4mps ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "gea34jb.u1", 0x000000, 0x000224, BAD_DUMP CRC(babf6fdb) SHA1(a2ef6b855d42072f0d3c72c8de9aff1f867de3f7) ) + ROM_LOAD( "gea34jb.u1", 0x000000, 0x000224, BAD_DUMP CRC(b458d46a) SHA1(791b938e0a65131238e66fe86efa5f83d9225332) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca34jb.u1", 0x000000, 0x001014, BAD_DUMP CRC(0c717300) SHA1(00d21f39fe90494ffec2f8799767cc46a9cd2b00) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca34jb.u1", 0x000000, 0x00008c, BAD_DUMP CRC(da6cc484) SHA1(1fe1aa95bbee1de7fd4930e6883f99768486da2a) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "gea34jb.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -3976,8 +3981,8 @@ ROM_END ROM_START( ddr5m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca27ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(ec526036) SHA1(f47d94d19268fdfa3ae9d42db9f2e2f9be318f2b) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca27ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(0044c64d) SHA1(ac25b51125675ccca992d60b12396b3b370c6368) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gca27ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -3990,7 +3995,7 @@ ROM_START( ddrbocd ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn895jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(363f427e) SHA1(adec886a07b9bd91f142f286b04fc6582205f037) ) + ROM_LOAD( "gn895jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(5d906be5) SHA1(4ea9c5506aaaf1726f2a39d0a37a8df35a6aad47) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "892jaa01", 0, BAD_DUMP SHA1(46ace0feef48a2a6643c3cb4ac9164ba0beeea94) ) @@ -4003,10 +4008,10 @@ ROM_START( ddrs2k ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge905aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(36d18e2f) SHA1(e976047dfbee62de9ad9e5de8e7629a24c29d581) ) + ROM_LOAD( "ge905aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(b7a75390) SHA1(8ad65f4d9fa949296b5b21e7a12be0bde8ffec38) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc905aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(21073a3e) SHA1(afa12404ceb462b9016a41c40775da87aa09cfeb) ) + ROM_LOAD( "gc905aa.u1", 0x000000, 0x000084, BAD_DUMP CRC(961a9dbe) SHA1(c112af1da26eee8da237655ed28d9bae2bc5728a) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge905aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -4021,8 +4026,8 @@ ROM_END ROM_START( ddrmax ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb19ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(2255626a) SHA1(cb70c4b551265ffc6cc41f7bd2678696e8067060) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb19ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(680a3288) SHA1(b413c6c43c4a18c5c713049a9c2fbde2d98e36bc) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcb19ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4034,8 +4039,8 @@ ROM_END ROM_START( ddrmax2 ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb20ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(fb7e0f58) SHA1(e6da23257a2a2ba7c69e817a91a0a8864f009386) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb20ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(169be875) SHA1(de40794ebf9190fe3676326d21150fd6aa72dc25) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcb20ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4048,10 +4053,10 @@ ROM_START( ddrs2kj ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge905ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(a077b0a1) SHA1(8f247b38c933a104a325ebf1f1691ef260480e1a) ) + ROM_LOAD( "ge905ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(f3b65e55) SHA1(24656affd3fe3a0a594e2cd0aeb91eb6ceb996b8) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc905ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(b7a104b0) SHA1(0f6901e41640f729f8a084a33148a9b900475594) ) + ROM_LOAD( "gc905ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(00bca330) SHA1(c83bd38846698cdfba9d7d40c51a59720a75bfee) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge905ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -4067,7 +4072,7 @@ ROM_START( ddrsbm ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq894ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(cc3a47de) SHA1(f6e2e101870370b1e295a4a9ed546aa2d8bc2010) ) + ROM_LOAD( "gq894ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(10b85f6b) SHA1(c15ec333c8bb0c33edb8d31bf4f309aa0db9ff55) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq894ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4079,8 +4084,8 @@ ROM_END ROM_START( ddrusa ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gka44ua.u1", 0x000000, 0x001014, BAD_DUMP CRC(2ef7c4f1) SHA1(9004d27179ece86883d01b3e6bbfeebc1b478d57) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gka44ua.u1", 0x000000, 0x00008c, BAD_DUMP CRC(ca12febe) SHA1(3bd01332e5b20420ec195ab125671cb212a8f5f2) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gka44ua.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4093,7 +4098,7 @@ ROM_START( drmn ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq881ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(7dca0b3f) SHA1(db6d5c527e2a99133b516e01433024d3173848c6) ) + ROM_LOAD( "gq881ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(ff3a2868) SHA1(3949fe928cc435ceca8bb2fe8b5a558d91542dfd) ) ROM_REGION( 0x200000, "29f016a.31h", 0 ) /* onboard flash */ ROM_LOAD( "gq881ja.31h", 0x000000, 0x200000, CRC(a5b86ece) SHA1(9696f0c512501574bae6e436306675894bb2352e) ) @@ -4111,7 +4116,7 @@ ROM_START( drmna ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq881ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(7dca0b3f) SHA1(db6d5c527e2a99133b516e01433024d3173848c6) ) + ROM_LOAD( "gq881ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(ff3a2868) SHA1(3949fe928cc435ceca8bb2fe8b5a558d91542dfd) ) ROM_REGION( 0x200000, "29f016a.31h", 0 ) /* onboard flash */ ROM_LOAD( "gq881ja.31h", 0x000000, 0x200000, CRC(a5b86ece) SHA1(9696f0c512501574bae6e436306675894bb2352e) ) @@ -4133,10 +4138,10 @@ ROM_START( drmn2m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge912ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(1246fe5b) SHA1(b58d4f4c95e13abf639d645223565544bd79a58a) ) + ROM_LOAD( "ge912ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(508d618d) SHA1(d30ba54ccc86072c10962632603028206ff08d4b) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn912ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(34deea99) SHA1(f179e22eaf30453bb94177ed9c25d7996f020c99) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gn912ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(952f4681) SHA1(667fc5ef07517801496444a91b6f1d88c8d0b9d2) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge912ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -4152,10 +4157,10 @@ ROM_START( drmn2mpu ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge912ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(1246fe5b) SHA1(b58d4f4c95e13abf639d645223565544bd79a58a) ) + ROM_LOAD( "ge912ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(508d618d) SHA1(d30ba54ccc86072c10962632603028206ff08d4b) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn912ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(34deea99) SHA1(f179e22eaf30453bb94177ed9c25d7996f020c99) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gn912ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(952f4681) SHA1(667fc5ef07517801496444a91b6f1d88c8d0b9d2) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge912ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -4174,10 +4179,10 @@ ROM_START( drmn3m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "a23jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(90e544fa) SHA1(1feb617c36bad41aa720a6e5d3ec9e5cb2030567) ) + ROM_LOAD( "a23jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(508d618d) SHA1(d30ba54ccc86072c10962632603028206ff08d4b) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca23ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(5af1b5da) SHA1(cf862ef9ab60e8da89af96266943137827e4a261) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca23ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(e78225db) SHA1(0870cfb01cd3f940812b842b315bc6329e956d88) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "a23jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -4192,8 +4197,8 @@ ROM_END ROM_START( drmn4m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gea25jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(356bbbf4) SHA1(a20a8fcaed2dce50451346b1683739c96067feb1) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gea25jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(8ee64348) SHA1(9c02096c94da68d096efc225f19e420cb9445820) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gea25jaa.31m", 0x000000, 0x200000, CRC(a0dd0ef4) SHA1(be4c1d3f2eb3c484b515be12b692c30cc780c36c) ) @@ -4213,8 +4218,8 @@ ROM_END ROM_START( drmn5m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb05jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(6b629d68) SHA1(d01ef0677cd72c05f5f354fc6c4d9022b3506c1e) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb05jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(1f0e9f51) SHA1(64f9ae6c2d9a6264b09c1b66ae2acac9db9ada32) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcb05jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4229,8 +4234,8 @@ ROM_END ROM_START( drmn6m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb16jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(f6933041) SHA1(1839bb99d2db9413c58a2ed95e9039d2c7dd62ba) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb16jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(a8ab305d) SHA1(7815ec63fa419174d689f237bcb3ec2372fb6baa) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcb16jaa.31m", 0x000000, 0x200000, CRC(19de3e53) SHA1(bbb7a247bdd617a124330a946c2e8dd565b2a09c) ) @@ -4250,8 +4255,8 @@ ROM_END ROM_START( drmn7m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc07jba.u1", 0x000000, 0x001014, BAD_DUMP CRC(8d9bcf10) SHA1(3d486df924ba41669675d62982396aebf8d12052) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc07jba.u1", 0x000000, 0x00008c, BAD_DUMP CRC(9b85fd8a) SHA1(34fc42389fc5eb5d09a0a7b6b4c4b4597b1f6849) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcc07jba.31m", 0x000000, 0x200000, CRC(7120d1ce) SHA1(4df9828150120762b99c5b212bc7a91b0d525bce) ) @@ -4271,8 +4276,8 @@ ROM_END ROM_START( drmn7ma ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc07jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(b675b39b) SHA1(9639db913821641cee619d7cc520de5d0c3ae7fa) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc07jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(a5477405) SHA1(f532bba5f089a263bbfd07bb66f028663c659a84) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcc07jaa.31m", 0x000000, 0x200000, CRC(1e1cbfe3) SHA1(6c942820f915ea0e01f0e736d70780ad8408aa69) ) @@ -4292,8 +4297,8 @@ ROM_END ROM_START( drmn8m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc38jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(aaa03630) SHA1(4976b0c2e1b4458840a165bd889861d62289ad89) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc38jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(c2895619) SHA1(49dcebd44435760dde02638b0e0a89b743064e69) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcc38jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4308,8 +4313,8 @@ ROM_END ROM_START( drmn9m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd09jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(a1201529) SHA1(4a82f2ee9b049a16c00b7dcd905c43c1a06d60ee) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd09jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(f73f2f6b) SHA1(30abe964fcef3901b2098e32946568f4a7c617d7) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd09jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4324,8 +4329,8 @@ ROM_END ROM_START( drmn10m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd40jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(ef0983a7) SHA1(06127b9fd786eca64eea50c40f7f73717b631e59) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd40jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(d98d4aa5) SHA1(7142c1e6291fdaac726477662487c7600c048e0a) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd40jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4340,8 +4345,8 @@ ROM_END ROM_START( dmx ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge874ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(c5536373) SHA1(1492221f7dd9485f7745ecb0a982a88c8e768e53) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "ge874ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(f27cfd58) SHA1(4d8a61bdf2c5f3bebcb37cb2bac1e3de90a9a30e) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "ge874ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4353,8 +4358,8 @@ ROM_END ROM_START( dmx2m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca39ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(ecc75eb7) SHA1(af66ced28ba5e79ae32ae0ef12d2ebe4207f3822) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca39ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(7f1e7a66) SHA1(65afe81544e096769c4b7ecf9ffde760f69dc331) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gca39ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4366,8 +4371,8 @@ ROM_END ROM_START( dmx2majp ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca38ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(99a746b8) SHA1(333236e59a707ecaf840a66f9b947ceade2cf2c9) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca38ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(34d8db6f) SHA1(7936b7e1e464ce1738f38f9a0960507404735e86) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gca38ja.31m", 0x000000, 0x200000, CRC(a0f54ab5) SHA1(a5ae67d7619393779c79a2e227cac0675eeef538) ) @@ -4384,8 +4389,8 @@ ROM_END ROM_START( dncfrks ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gk874ka.u1", 0x000000, 0x001014, BAD_DUMP CRC(7a6f4672) SHA1(2e009e57760e92f48070a69cff5597c37a4783a2) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gk874ka.u1", 0x000000, 0x00008c, BAD_DUMP CRC(43244ec6) SHA1(07040d4bc491274d39d6c5d39e346c0905892cb4) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gk874ka.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4398,7 +4403,7 @@ ROM_START( dsem ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge936ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(0f5b7ae3) SHA1(646dd49da1216cc2d3d6920bc9b3447d55ebfbf0) ) + ROM_LOAD( "ge936ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(c7e3a7f9) SHA1(7120c0ef3c3dac23713922f9447d5eac1b91c54d) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "ge936ea.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4411,8 +4416,8 @@ ROM_START( dsem2 ) SYS573_BIOS_A ROM_DEFAULT_BIOS("dsem2") - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gkc23ea.u1", 0x000000, 0x001014, BAD_DUMP CRC(aec2421a) SHA1(5ea9e9ce6161ebc99a50db0b7304385511bd4553) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gkc23ea.u1", 0x000000, 0x00008c, BAD_DUMP CRC(107e9868) SHA1(02a0f92fc3167d37818818332bf189f39e3c25fc) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gkc23ea.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4425,10 +4430,10 @@ ROM_START( dsfdct ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge887ja_gn887ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(08a60147) SHA1(0d39dca5e9e17fff0e64f296c8416e4ca23fdc1b) ) + ROM_LOAD( "ge887ja_gn887ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(bfbba6c7) SHA1(eb082fe7bb1bbc3656391a0617075010281b8726) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc910jc.u1", 0x000000, 0x000084, BAD_DUMP CRC(3c1ca973) SHA1(32211a72e3ac88b2723f82dac0b26f93031b3a9c) ) + ROM_LOAD( "gc910jc.u1", 0x000000, 0x000084, BAD_DUMP CRC(e09eb1c6) SHA1(046d5552c774ea2b9141fff45c13a926c18f705c) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge887ja_gn887ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4444,10 +4449,10 @@ ROM_START( dsfdcta ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:install:eeprom", 0 ) - ROM_LOAD( "gn884ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(ce6b98ce) SHA1(75549d9470345ce06d2706d373b19416d97e5b9a) ) + ROM_LOAD( "gn884ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(12e9807b) SHA1(4bbd4696b9345030daf8922775463cea3ee792c5) ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc910ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(59a23808) SHA1(fcff1c68ff6cfbd391ac997a40fb5253fc62de82) ) + ROM_LOAD( "gc910ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(eebf9f88) SHA1(afc5f63f4b4251edfe12e9bbc6a788ddb76c0985) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "gn884ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4463,10 +4468,10 @@ ROM_START( dsfdr ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "gea37ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(5321055e) SHA1(d06b0dca9caba8249d71340469ad9083b02fd087) ) + ROM_LOAD( "gea37ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(adfc9021) SHA1(bb161b9c1bd358cb72e61197a9fafd58c44adb7c) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca37ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(b6d9e7f9) SHA1(bc5f491de53a96d46745df09bc94e7853052296c) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca37ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(d7df793c) SHA1(3b85ef84edda34dce13fcafb7f6c77f4154eee5d) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "gea37ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -4482,7 +4487,7 @@ ROM_START( dsftkd ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn884ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(ce6b98ce) SHA1(75549d9470345ce06d2706d373b19416d97e5b9a) ) + ROM_LOAD( "gn884ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(12e9807b) SHA1(4bbd4696b9345030daf8922775463cea3ee792c5) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gn884ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4495,7 +4500,7 @@ ROM_START( dstage ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn845eb.u1", 0x000000, 0x000084, BAD_DUMP CRC(82b52af5) SHA1(3fb9efe76439fa17a9a759aaebc3dc066b432947) ) + ROM_LOAD( "gn845eb.u1", 0x000000, 0x000084, BAD_DUMP CRC(35a88d75) SHA1(122317074a96f36cdfc33cd26851bab3d514da3c) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gn884eb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4508,7 +4513,7 @@ ROM_START( dstagea ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn845ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(db643af7) SHA1(881221da640b883302e657b906ea0a4e74555679) ) + ROM_LOAD( "gn845ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(b0cb136c) SHA1(ff9471517d94caaf6f8e07c0aa4f70762cbcd6ee) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "845uaa02", 0, BAD_DUMP SHA1(d3f9290d4dadb5e9b82ebe77abf7b99d1a89f716) ) @@ -4518,7 +4523,7 @@ ROM_START( fbait2bc ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc865ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(ea8f0b4b) SHA1(363b1ea1a520b239ba8bca867366bbe8a9977a43) ) + ROM_LOAD( "gc865ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(e9f61a3d) SHA1(367914f142811ca592700c43570b4498a32434cd) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "865uab02", 0, BAD_DUMP SHA1(d14dc066d4c16fba1e9b31d5f042ad249c4b5137) ) @@ -4528,7 +4533,7 @@ ROM_START( fbaitbc ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge765ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(588748c6) SHA1(ea1ead61e0dcb324ef7b6106cae00bcf6702d6c4) ) + ROM_LOAD( "ge765ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(5bfe59b0) SHA1(a15ae8e95a4fe6a3fa212297af8324b075b315c9) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "765uab02", 0, BAD_DUMP SHA1(07b09e763e4b90108aa924b518221b16667a7133) ) @@ -4538,7 +4543,7 @@ ROM_START( fbaitmc ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx889ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(753ad84e) SHA1(e024cefaaee7c9945ccc1f9a3d896b8560adce2e) ) + ROM_LOAD( "gx889ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(ceadb821) SHA1(12da44b0c4f4d4af133d1e8e0089602c0a3d8411) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "889ea", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) ) @@ -4548,7 +4553,7 @@ ROM_START( fbaitmca ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx889aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(9c22aae8) SHA1(c107b0bf7fa76708f2d4f6aaf2cf27b3858378a3) ) + ROM_LOAD( "gx889aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(27b5ca87) SHA1(5c3c822b1bd8c03aabdebcd927cf4479fdfc3bff) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "889aa", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) ) @@ -4558,7 +4563,7 @@ ROM_START( fbaitmcj ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx889ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(6278603c) SHA1(d6b59e270cfe4016e12565aedec8a4f0702e1a6f) ) + ROM_LOAD( "gx889ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(d9ef0053) SHA1(56503e668693af092e680fada47314ca4dcfea5f) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "889ja", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) ) @@ -4568,7 +4573,7 @@ ROM_START( fbaitmcu ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx889ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(67b91e54) SHA1(4d94bfab08e2bf6e34ee606dd3c4e345d8e5d158) ) + ROM_LOAD( "gx889ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(dc2e7e3b) SHA1(461910918392037f9e33eb7ed2ac8e494c141fe1) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "889ua", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) ) @@ -4578,7 +4583,7 @@ ROM_START( fghtmn ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq918eaa.u1", 0x000000, 0x000224, CRC(f3342ff5) SHA1(d3d6ecc22396f74b99ad7aab7908cd542c518977) ) + ROM_LOAD( "gq918eaa.u1", 0x000000, 0x000224, CRC(4bf384d9) SHA1(094d541efb27ad4f2faf799b141069b78db6ad6b) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gq918xxb.31m", 0x000000, 0x200000, CRC(3653b5d7) SHA1(1deb44335b7a38506fb30da40e0ca61b96aea7bb) ) @@ -4596,7 +4601,7 @@ ROM_START( fghtmna ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq918aaa.u1", 0x000000, 0x000224, CRC(1a2c5d53) SHA1(ab7e44a83e8cd271e2bf8580881a3050d35641df) ) + ROM_LOAD( "gq918aaa.u1", 0x000000, 0x000224, CRC(a2ebf67f) SHA1(e845ffd517c23f5d577898267bec1572bb9559ef) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gq918xxb.31m", 0x000000, 0x200000, CRC(3653b5d7) SHA1(1deb44335b7a38506fb30da40e0ca61b96aea7bb) ) @@ -4614,7 +4619,7 @@ ROM_START( fghtmnk ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq918kaa.u1", 0x000000, 0x000224, CRC(cf32990b) SHA1(bf49b8560f008696b45a3f7f03fa7b3395635b0f) ) + ROM_LOAD( "gq918kaa.u1", 0x000000, 0x000224, CRC(77f53227) SHA1(649d3fbf47369487f366a8d6192e79612be4ec83) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gq918xxb.31m", 0x000000, 0x200000, CRC(3653b5d7) SHA1(1deb44335b7a38506fb30da40e0ca61b96aea7bb) ) @@ -4632,7 +4637,7 @@ ROM_START( fghtmnu ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq918uaa.u1", 0x000000, 0x000224, CRC(e1b7e9ef) SHA1(5767f47cb9a689601fb92c6a494563c5ffdde04c) ) + ROM_LOAD( "gq918uaa.u1", 0x000000, 0x000224, CRC(597042c3) SHA1(5bc16259c0c0d55bbb2142bae79cc9be3dc52304) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gq918xxb.31m", 0x000000, 0x200000, CRC(3653b5d7) SHA1(1deb44335b7a38506fb30da40e0ca61b96aea7bb) ) @@ -4714,7 +4719,7 @@ ROM_START( gbbchmp ) ROM_CONTINUE( 0x000000, 0x100000 ) ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb48ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(500b8b5b) SHA1(82dc5ace95b37034b9527dd3f74e2bd289dd6838) ) + ROM_LOAD( "gcb48ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(879ff48d) SHA1(c548173c5adfda08a82a04e0d0fbcfc529ed41a0) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcb48ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4774,14 +4779,14 @@ ROM_START( gchgchmp ) ROM_CONTINUE( 0x000000, 0x100000 ) ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge877jaa.u1", 0x000000, 0x000224, CRC(06d0e427) SHA1(cf61c421c0ea236b492d49a00b4608062bbe9063) ) + ROM_LOAD( "ge877jaa.u1", 0x000000, 0x000224, CRC(6e2f06ff) SHA1(79901dfcc5b1bd89cf464246c27fc9657aff3f05) ) ROM_END ROM_START( gtrfrks ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886eac.u1", 0x000000, 0x000224, BAD_DUMP CRC(06bd6c4f) SHA1(61930e467ad135e2f31393ff5af981ed52f3bef9) ) + ROM_LOAD( "gq886eac.u1", 0x000000, 0x000224, BAD_DUMP CRC(3b38dccf) SHA1(c313d025b4faed73ab021b76dbf0c51c9d701eb3) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) ) @@ -4791,7 +4796,7 @@ ROM_START( gtrfrksu ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886uac.u1", 0x000000, 0x000224, BAD_DUMP CRC(143eaa55) SHA1(51a4fa3693f1cb1646a8986003f9b6cc1ae8b630) ) + ROM_LOAD( "gq886uac.u1", 0x000000, 0x000224, BAD_DUMP CRC(29bb1ad5) SHA1(797ba61b6407fc0d0531e58129a9230e1484dc11) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) ) @@ -4801,7 +4806,7 @@ ROM_START( gtrfrksj ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886jac.u1", 0x000000, 0x000224, BAD_DUMP CRC(11ffd43d) SHA1(27f4f4d782604379254fb98c3c57e547aa4b321f) ) + ROM_LOAD( "gq886jac.u1", 0x000000, 0x000224, BAD_DUMP CRC(2c7a64bd) SHA1(01bd46989a897dbd023603e5cabbd7deb85825ff) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) ) @@ -4811,7 +4816,7 @@ ROM_START( gtrfrksa ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886aac.u1", 0x000000, 0x000224, BAD_DUMP CRC(efa51ee9) SHA1(3374d936de69c287e0161bc526546441c2943555) ) + ROM_LOAD( "gq886aac.u1", 0x000000, 0x000224, BAD_DUMP CRC(d220ae69) SHA1(dfdd29197222cb621b05f9b9091cff9a20cd846e) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) ) @@ -4821,7 +4826,7 @@ ROM_START( gtrfrksc ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886eac.u1", 0x000000, 0x000224, BAD_DUMP CRC(06bd6c4f) SHA1(61930e467ad135e2f31393ff5af981ed52f3bef9) ) + ROM_LOAD( "gq886eac.u1", 0x000000, 0x000224, BAD_DUMP CRC(3b38dccf) SHA1(c313d025b4faed73ab021b76dbf0c51c9d701eb3) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) ) @@ -4831,7 +4836,7 @@ ROM_START( gtrfrksuc ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886uac.u1", 0x000000, 0x000224, BAD_DUMP CRC(143eaa55) SHA1(51a4fa3693f1cb1646a8986003f9b6cc1ae8b630) ) + ROM_LOAD( "gq886uac.u1", 0x000000, 0x000224, BAD_DUMP CRC(29bb1ad5) SHA1(797ba61b6407fc0d0531e58129a9230e1484dc11) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) ) @@ -4841,7 +4846,7 @@ ROM_START( gtrfrksjc ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886jac.u1", 0x000000, 0x000224, BAD_DUMP CRC(11ffd43d) SHA1(27f4f4d782604379254fb98c3c57e547aa4b321f) ) + ROM_LOAD( "gq886jac.u1", 0x000000, 0x000224, BAD_DUMP CRC(2c7a64bd) SHA1(01bd46989a897dbd023603e5cabbd7deb85825ff) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) ) @@ -4851,17 +4856,17 @@ ROM_START( gtrfrksac ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq886aac.u1", 0x000000, 0x000224, BAD_DUMP CRC(efa51ee9) SHA1(3374d936de69c287e0161bc526546441c2943555) ) + ROM_LOAD( "gq886aac.u1", 0x000000, 0x000224, BAD_DUMP CRC(d220ae69) SHA1(dfdd29197222cb621b05f9b9091cff9a20cd846e) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) ) ROM_END -ROM_START(gtrfrk2m) +ROM_START( gtrfrk2m ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883jad.u1", 0x000000, 0x000084, BAD_DUMP CRC(687868c4) SHA1(1230e74e4cf17953febe501df56d8bbec1de9356) ) + ROM_LOAD( "gq883jad.u1", 0x000000, 0x000084, BAD_DUMP CRC(3b4f65b0) SHA1(ddec1da89feb848ba412b70064bf45ca4ba50426) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4874,7 +4879,7 @@ ROM_START( gtrfrk2ma ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883eaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(4440ab9f) SHA1(74742e850d17daf09941482d93bf0ac1912dbb7f) ) + ROM_LOAD( "gq883eaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(1777a6eb) SHA1(6d5fd8fd63bf96de31a1b2d6e372aa728b5deaab) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4887,7 +4892,7 @@ ROM_START( gtrfrk2mua ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883uaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(3f9697a6) SHA1(a05c0e4bb934cc24fe851475a250b70551aac5dd) ) + ROM_LOAD( "gq883uaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(6ca19ad2) SHA1(5ef4a1c65966b646a8808ec1d97893d3df40819f) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4900,7 +4905,7 @@ ROM_START( gtrfrk2mja ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883jaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(687868c4) SHA1(1230e74e4cf17953febe501df56d8bbec1de9356) ) + ROM_LOAD( "gq883jaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(3b4f65b0) SHA1(ddec1da89feb848ba412b70064bf45ca4ba50426) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4913,7 +4918,7 @@ ROM_START( gtrfrk2mka ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883kaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(67e71110) SHA1(29da052c30109ebb9695721da83cd9019fae3a6d) ) + ROM_LOAD( "gq883kaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(34d01c64) SHA1(98fa0ff0d1f7f179648d4c37dd89d0cf5a322e64) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4926,7 +4931,7 @@ ROM_START( gtrfrk2maa ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883aaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(2c696501) SHA1(2f0930f77ae68641ecf02ea3b129e1716467cddb) ) + ROM_LOAD( "gq883aaa.u1", 0x000000, 0x000084, BAD_DUMP CRC(7f5e6875) SHA1(44a217e674c82443a7876dab46dc56af75010ccf) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4939,7 +4944,7 @@ ROM_START( gtrfrk2ml1 ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883jad.u1", 0x000000, 0x000084, BAD_DUMP CRC(687868c4) SHA1(1230e74e4cf17953febe501df56d8bbec1de9356) ) + ROM_LOAD( "gq883jad.u1", 0x000000, 0x000084, BAD_DUMP CRC(3b4f65b0) SHA1(ddec1da89feb848ba412b70064bf45ca4ba50426) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4952,7 +4957,7 @@ ROM_START( gtrfrk2ml2 ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq883jad.u1", 0x000000, 0x000084, BAD_DUMP CRC(687868c4) SHA1(1230e74e4cf17953febe501df56d8bbec1de9356) ) + ROM_LOAD( "gq883jad.u1", 0x000000, 0x000084, BAD_DUMP CRC(3b4f65b0) SHA1(ddec1da89feb848ba412b70064bf45ca4ba50426) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -4965,10 +4970,10 @@ ROM_START( gtrfrk3m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "949jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(96c21d71) SHA1(871f1f0429154a486e547e182534db1557008dd6) ) + ROM_LOAD( "949jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(e98b0389) SHA1(bbc5d54946625d140b1b431cbbb09118b49d39f1) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge949jab.u1", 0x000000, 0x001014, BAD_DUMP CRC(8645e17f) SHA1(e8a833384cb6bdb05870fcd44e7c8ed48a03c852) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "ge949jab.u1", 0x000000, 0x00008c, BAD_DUMP CRC(e7bd2ccc) SHA1(93721ef9fcd65073438c60fc4403293a7670811a) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "949jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -4987,10 +4992,10 @@ ROM_START( gtfrk3ma ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "949jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(96c21d71) SHA1(871f1f0429154a486e547e182534db1557008dd6) ) + ROM_LOAD( "949jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(e98b0389) SHA1(bbc5d54946625d140b1b431cbbb09118b49d39f1) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge949jab.u1", 0x000000, 0x001014, BAD_DUMP CRC(8645e17f) SHA1(e8a833384cb6bdb05870fcd44e7c8ed48a03c852) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "ge949jab.u1", 0x000000, 0x00008c, BAD_DUMP CRC(e7bd2ccc) SHA1(93721ef9fcd65073438c60fc4403293a7670811a) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "949jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -5005,8 +5010,8 @@ ROM_END ROM_START( gtfrk3mb ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "ge949jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(61f35ee1) SHA1(0a2b66742364d76ec18647b2761590bd49229625) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "ge949jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(e7bd2ccc) SHA1(93721ef9fcd65073438c60fc4403293a7670811a) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "ge949jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5019,10 +5024,10 @@ ROM_START( gtrfrk4m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "a24jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(29e326fe) SHA1(41a600105b08accc9d7ebd2b8ae08c0863758aa0) ) + ROM_LOAD( "a24jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(e98b0389) SHA1(bbc5d54946625d140b1b431cbbb09118b49d39f1) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gea24ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(d1fccf11) SHA1(6dcd79f3171d6e4bd7e1149901638f8ea58ff623) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gea24ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(6a6bb4b5) SHA1(a7ae107e42201f694a99e7c58b0f5b26d147b3d4) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "a24jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -5037,8 +5042,8 @@ ROM_END ROM_START( gtrfrk5m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gea26jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(c2725fca) SHA1(b70a3266c61af5cbe0478a6f3dd850ebcab980dc) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gea26jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(5e16a3f1) SHA1(629dce132588035cea20d1fe92e0f17f90d0ef60) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gea26jaa.31m", 0x000000, 0x200000, CRC(1a25e660) SHA1(dbd8fad0bac307723c70d00763cadf4261a7ed73) ) @@ -5055,8 +5060,8 @@ ROM_END ROM_START( gtrfrk6m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb06ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(673c98ab) SHA1(b1d889bf4fc5e425056acb6b72b2c563966fb7d7) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb06ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(6a4b2436) SHA1(c9ad3b9b1c1b58c70b7ceb0332e8904f62cd56f9) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcb06ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5068,8 +5073,8 @@ ROM_END ROM_START( gtrfrk7m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb17jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(5a338c31) SHA1(0fd9ee306335858dd6bef680a62557a8bf055cc3) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb17jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(3e08140c) SHA1(8ba94ced641edab17a61e25b890985280bf5d30b) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcb17jaa.31m", 0x000000, 0x200000, CRC(1e1cbfe3) SHA1(6c942820f915ea0e01f0e736d70780ad8408aa69) ) @@ -5086,8 +5091,8 @@ ROM_END ROM_START( gtrfrk8m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc08jba.u1", 0x000000, 0x001014, BAD_DUMP CRC(db4b3027) SHA1(65ca32fcacda18954a4e8352dbb9bf583dfdd121) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc08jba.u1", 0x000000, 0x00008c, BAD_DUMP CRC(b7da7085) SHA1(19702458b22dc49e5475ee6e39b02cca9b626122) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcc08jba.31m", 0x000000, 0x200000, CRC(ddef5efe) SHA1(7c3a219eacf63f55894e81cb0e41753176191708) ) @@ -5104,8 +5109,8 @@ ROM_END ROM_START( gtrfrk8ma ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc08jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(9c58f22b) SHA1(41ade23bac86e437b1f12c5730b8cce292ffe4f8) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc08jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(e35a6b58) SHA1(a10f670adae91efbef09b2a1c8c29e1ccb1036bc) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcc08jaa.31m", 0x000000, 0x200000, CRC(aa723d4c) SHA1(5f55ddaf7f21b624deac99cc40b89989cd6f3a3d) ) @@ -5122,8 +5127,8 @@ ROM_END ROM_START( gtrfrk9m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc39jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(afb75814) SHA1(027dc2ae3444d10c14169f1f354ffcc928f62fb3) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc39jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(865d2191) SHA1(9f5226d01164d83c36fde315de2d15a2f3b61604) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcc39jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5135,8 +5140,8 @@ ROM_END ROM_START( gtfrk10m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd10jab.u1", 0x000000, 0x001014, BAD_DUMP CRC(43520577) SHA1(a0749e766688032fe6558707b564288b95da9b8d) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd10jab.u1", 0x000000, 0x00008c, BAD_DUMP CRC(4147d6fb) SHA1(35877a6c295369f3c6857f6e33fad80abf111156) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd10jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5151,8 +5156,8 @@ ROM_END ROM_START( gtfrk10ma ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd10jaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(43520577) SHA1(a0749e766688032fe6558707b564288b95da9b8d) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd10jaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(97b5afc8) SHA1(ac57ac0dfb0ee73ad5e0819505153fe9d7da9dc9) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd10jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5164,8 +5169,8 @@ ROM_END ROM_START( gtfrk10mb ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd10jab.u1", 0x000000, 0x001014, BAD_DUMP CRC(43520577) SHA1(a0749e766688032fe6558707b564288b95da9b8d) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd10jab.u1", 0x000000, 0x00008c, BAD_DUMP CRC(4147d6fb) SHA1(35877a6c295369f3c6857f6e33fad80abf111156) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd10jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5177,8 +5182,8 @@ ROM_END ROM_START( gtfrk11m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd39ja.u1", 0x000000, 0x001014, BAD_DUMP CRC(9bd81d0a) SHA1(c95f6d7317bf88177f7217de4ba4376485d5cdbf) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd39ja.u1", 0x000000, 0x00008c, BAD_DUMP CRC(809301a6) SHA1(718e646bc6e72d89e78b771fb64374f77c5662a0) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd39ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5400,7 +5405,7 @@ ROM_START( hypbbc2p ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx908ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(fb6c0635) SHA1(0d974462a0a244ffb1a651adb316242cde427756) ) + ROM_LOAD( "gx908ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(8900eaff) SHA1(aea4449c2453875694dfa92451d46dace710faf2) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "908a02", 0, BAD_DUMP SHA1(573194ca9938c30415fc88dcc0c0152dd3024d71) ) @@ -5410,7 +5415,7 @@ ROM_START( hypbbc2pk ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx908ka.u1", 0x000000, 0x000084, BAD_DUMP CRC(f4f37fe1) SHA1(30f90cdb2d092e4f8d6c14cfd4ca4945e6d352cb) ) + ROM_LOAD( "gx908ka.u1", 0x000000, 0x000084, BAD_DUMP CRC(869f932b) SHA1(db5f96536ede2c16fc5fd5ab6a8efdf0f03be43b) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "908a02", 0, BAD_DUMP SHA1(573194ca9938c30415fc88dcc0c0152dd3024d71) ) @@ -5420,7 +5425,7 @@ ROM_START( jppyex98 ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc811ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(e0f93270) SHA1(02a110bf692d5d1aa15e66132e3c4f60aa3f0f3c) ) + ROM_LOAD( "gc811ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(fd70efbe) SHA1(206fd4a6424723f082856c19617461897d127638) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "811jaa02", 0, BAD_DUMP SHA1(e9580172d58b38841f643651ae0bcaf24fd5f118) ) @@ -5430,7 +5435,7 @@ ROM_START( konam80a ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc826aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(9b38b959) SHA1(6b4fca340a9b1c2ae21ad3903c1ac1e39ab08b1a) ) + ROM_LOAD( "gc826aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(da4cff17) SHA1(9a7b074d15b7d861132d9588c753cd18a469590f) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "826aaa01", 0, BAD_DUMP SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) ) @@ -5440,7 +5445,7 @@ ROM_START( konam80j ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc826ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(e9e861e8) SHA1(45841db0b42d096213d9539a8d076d39391dca6d) ) + ROM_LOAD( "gc826ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(0479ef71) SHA1(043c01f115dd1434273729d06be3ba9c2d7b7a86) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "826jaa01", 0, SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) ) @@ -5450,7 +5455,7 @@ ROM_START( konam80k ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc826ka.u1", 0x000000, 0x000224, BAD_DUMP CRC(d41f7e38) SHA1(73e2bb132e23be72e72ea5b0686ccad28e47574a) ) + ROM_LOAD( "gc826ka.u1", 0x000000, 0x000224, BAD_DUMP CRC(b4d57749) SHA1(8edbc08bc160350aa45dc4eb75dff29bcfd3d8f0) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "826kaa01", 0, BAD_DUMP SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) ) @@ -5460,7 +5465,7 @@ ROM_START( konam80s ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc826ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(6ce4c619) SHA1(d2be08c213c0a74e30b7ebdd93946374cc64457f) ) + ROM_LOAD( "gc826ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(7c12ec3f) SHA1(7989ed47fe551116a821c7d4bc4de6bbb22eff29) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "826eaa01", 0, BAD_DUMP SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) ) @@ -5470,7 +5475,7 @@ ROM_START( konam80u ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gc826ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(0577379b) SHA1(3988a2a5ef1f1d5981c4767cbed05b73351be903) ) + ROM_LOAD( "gc826ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(077fefab) SHA1(2b3db957b6b767854ffeb99edd767040cb981489) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "826uaa01", 0, SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) ) @@ -5479,8 +5484,8 @@ ROM_END ROM_START( mamboagg ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gqa40jab.u1", 0x000000, 0x001014, BAD_DUMP CRC(fd9e7c1f) SHA1(6dd4790589d48803f58328d099c908f0565b2c01) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gqa40jab.u1", 0x000000, 0x00008c, BAD_DUMP CRC(bbb6033d) SHA1(22f3d0e9541be7c24338e97a8c29f0baadf40557) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gqa40jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5492,8 +5497,8 @@ ROM_END ROM_START( mamboagga ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gqa40jrb.u1", 0x000000, 0x001014, BAD_DUMP CRC(367e4c0c) SHA1(bad21aa8818749282dd97cf00c34b7b049096ceb) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gqa40jrb.u1", 0x000000, 0x00008c, BAD_DUMP CRC(313b5685) SHA1(8df9cab660af8f9d057a1360ec4dc9f9ed50e185) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gqa40jrb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5505,8 +5510,8 @@ ROM_END ROM_START( mrtlbeat ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "geb47jb.u1", 0x000000, 0x001014, BAD_DUMP CRC(90079ff5) SHA1(8273ee3349dd13207836b0ebf72ad5fa67fef68a) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "geb47jb.u1", 0x000000, 0x00008c, BAD_DUMP CRC(83de7dd1) SHA1(cc9afd1f8f93829e845dbbb9e27eb786525e9d66) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "geb47jb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5519,7 +5524,7 @@ ROM_START( powyakex ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gx802ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(ea8bdda3) SHA1(780034ab08871631ef0e3e9b779ca89e016c26a8) ) + ROM_LOAD( "gx802ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(82743f7b) SHA1(9019de5f38e79477327e4dde23e1e572e8450d67) ) DISK_REGION( "cdrom0" ) DISK_IMAGE_READONLY( "802jab02", 0, SHA1(460cc9f0b2514ec1da06b0a1d7b52fe43220d181) ) @@ -5529,7 +5534,7 @@ ROM_START( pcnfrk ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq881ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(6a88b34d) SHA1(2cc454ae099e948d5c5728c821484ddab195ad94) ) + ROM_LOAD( "gq881ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(e878901a) SHA1(5c58c6b580b6d864d42e1fc0dd4852cfe4bbe02b) ) ROM_REGION( 0x200000, "29f016a.31h", 0 ) /* onboard flash */ ROM_LOAD( "gq881ea.31h", 0x000000, 0x200000, CRC(a5b86ece) SHA1(9696f0c512501574bae6e436306675894bb2352e) ) @@ -5547,7 +5552,7 @@ ROM_START( pcnfrka ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq881aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(8390c1eb) SHA1(9ad0385c319aae318bc6efdd705a459957c669da) ) + ROM_LOAD( "gq881aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(0160e2bc) SHA1(d18cb24c1ebf4ab4492ab2a2d863e522a7b47692) ) ROM_REGION( 0x200000, "29f016a.31h", 0 ) /* onboard flash */ ROM_LOAD( "gq881aa.31h", 0x000000, 0x200000, CRC(a5b86ece) SHA1(9696f0c512501574bae6e436306675894bb2352e) ) @@ -5565,7 +5570,7 @@ ROM_START( pcnfrkk ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq881ka.u1", 0x000000, 0x000224, BAD_DUMP CRC(568e05b3) SHA1(37fdf0ca45b9303bdd4e38990f9e91ff7de2a82c) ) + ROM_LOAD( "gq881ka.u1", 0x000000, 0x000224, BAD_DUMP CRC(d47e26e4) SHA1(c74209be867eeb4196e2c3a6cf2ef6c89ba9faf4) ) ROM_REGION( 0x200000, "29f016a.31h", 0 ) /* onboard flash */ ROM_LOAD( "gq881ka.31h", 0x000000, 0x200000, CRC(a5b86ece) SHA1(9696f0c512501574bae6e436306675894bb2352e) ) @@ -5583,7 +5588,7 @@ ROM_START( drmnu ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq881ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(780b7557) SHA1(37f10437cf42310caf9ed8ea03e3ea342d59e59f) ) + ROM_LOAD( "gq881ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(fafb5600) SHA1(b18c0ca09e563be710f3c3fcfc408a62131c6d18) ) ROM_REGION( 0x200000, "29f016a.31h", 0 ) /* onboard flash */ ROM_LOAD( "gq881ua.31h", 0x000000, 0x200000, CRC(a5b86ece) SHA1(9696f0c512501574bae6e436306675894bb2352e) ) @@ -5601,10 +5606,10 @@ ROM_START( pcnfrk2m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge912aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(22c34654) SHA1(8173bde15b2fb89a72752253d832e05074ae3484) ) + ROM_LOAD( "ge912aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(aed7ab59) SHA1(41103d383c35dab0b074e336b1b07dd346a855ee) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn912aa.u1", 0x000000, 0x001014, BAD_DUMP CRC(431b76c8) SHA1(fc4b20ad05b09b127918ee24634984cfa3df3647) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gn912aa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(89928c8b) SHA1(5999e5366ae12c24d7a68fad4f1e12dbee6ef7b2) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge912aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -5620,10 +5625,10 @@ ROM_START( pcnfrk2mk ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "ge912ka.u1", 0x000000, 0x000224, BAD_DUMP CRC(b3d5ca9a) SHA1(3dd9034e1a3a78a03bef975186b7ac6b01e3131a) ) + ROM_LOAD( "ge912ka.u1", 0x000000, 0x000224, BAD_DUMP CRC(7bc96f01) SHA1(ea6a51a6b10c56beb68c949b6939e9d2fef3f44e) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gn912ka.u1", 0x000000, 0x001014, BAD_DUMP CRC(c6af0c1a) SHA1(042d23bcfabc2a7fb6d7a038978805968e229395) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gn912ka.u1", 0x000000, 0x00008c, BAD_DUMP CRC(bd67eb6b) SHA1(35e3434effaae1222b9e72886fa6ae28a74b9a42) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "ge912ka.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -5639,10 +5644,10 @@ ROM_START( pcnfrk3m ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "a23aaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(01dfcff6) SHA1(c2c86074fcf82b75a7c7aa56cf6daaae1646443c) ) + ROM_LOAD( "a23aaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(aed7ab59) SHA1(41103d383c35dab0b074e336b1b07dd346a855ee) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca23aa.u1", 0x000000, 0x001014, BAD_DUMP CRC(6b3fc1d4) SHA1(f8e58d4af3663914b8c0e94e7078b6360728edc1) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca23aa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(f5e5c5d0) SHA1(8a27fbb3ac32bc4be9dad97bb3c428bb4bc60b24) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "a23aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -5658,10 +5663,10 @@ ROM_START( pcnfrk3mk ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:install:eeprom", 0 ) - ROM_LOAD( "a23kaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(d71c4b5c) SHA1(3911c5dd933c30e6e44c8cf417bb4c284ecb4b80) ) + ROM_LOAD( "a23kaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(7bc96f01) SHA1(ea6a51a6b10c56beb68c949b6939e9d2fef3f44e) ) - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca23ka.u1", 0x000000, 0x001014, BAD_DUMP CRC(f392349c) SHA1(e7eb7979db276de560d5820163a70d97e6c023d8) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gca23ka.u1", 0x000000, 0x00008c, BAD_DUMP CRC(ee247c6f) SHA1(e6aa6b45e8151ea6d84834be93c831c6394864e7) ) ROM_REGION( 0x000008, "cassette:install:id", 0 ) ROM_LOAD( "a23kaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) ) @@ -5676,8 +5681,8 @@ ROM_END ROM_START( pcnfrk4m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gea25aaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(04a5cffa) SHA1(ce7316ebdddeee326b0f4301f9a7c56498a95e70) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gea25aaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(9c81a343) SHA1(1ad243e4905e5c7ee1355221759f337bdec5bb58) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gea25aaa.31m", 0x000000, 0x200000, CRC(557093c2) SHA1(80e8eecf3248e890f9cce70859b6092725c4918c) ) @@ -5697,8 +5702,8 @@ ROM_END ROM_START( pcnfrk4mk ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gka25kaa.u1", 0x000000, 0x001014, CRC(c30f390a) SHA1(a67a4639539b65d17486667fbf13e298cd337470) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gka25kaa.u1", 0x000000, 0x00008c, CRC(2b0efc90) SHA1(84bfc8dd365e9d51d248d4dbc09274aa3dff345f) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gka25kaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5710,8 +5715,8 @@ ROM_END ROM_START( pcnfrk5m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb05aaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(db30ec65) SHA1(5c6c0906feda1400961a9214b2dcd3a8f498dc48) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb05aaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(484ba0d3) SHA1(4d24a38e0975449dd0f155021d9c804b7547354a) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcb05aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5723,8 +5728,8 @@ ROM_END ROM_START( pcnfrk5mk ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb05kaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(f2a0e121) SHA1(d6ffa3513885a78662bcac9db4f17f0c10951962) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb05kaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(6fd59b3f) SHA1(5118a56f4303dce78a806b49ff9e834be85528a7) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcb05kaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5736,8 +5741,8 @@ ROM_END ROM_START( pcnfrk6m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcb16aaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(da44cbd5) SHA1(aa64758524998c001791ffc4095b89e7ae1a6d8e) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcb16aaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(95f80e09) SHA1(14e7998baf42bc8610638a4e5aa13ba1afb361e2) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcb16aaa.31m", 0x000000, 0x200000, CRC(52c9334b) SHA1(2288f729611aefe93a470f8ef88a211582136e86) ) @@ -5754,8 +5759,8 @@ ROM_END ROM_START( pcnfrk7m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc07aaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(9aa2480f) SHA1(d9e82294323500c8e9d6012d2fe0d033c3afd4d0) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc07aaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(98144a51) SHA1(376d265a0f897ad116cdd88a673f6e20d880204a) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gcc07aaa.31m", 0x000000, 0x200000, CRC(e32a680d) SHA1(fcdf8bc9ff2290350b2653588047c78ec6c5f4a8) ) @@ -5772,8 +5777,8 @@ ROM_END ROM_START( pcnfrk8m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcc38aaa.u1", 0x000000, 0x001014, BAD_DUMP CRC(98eba308) SHA1(46a58a747c2e5fc5889dca9f0f555740c4983a83) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcc38aaa.u1", 0x000000, 0x00008c, BAD_DUMP CRC(5a3611fe) SHA1(279dbad199abdaa947f8c1e39cf08385d9e102ab) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcc38aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5785,8 +5790,8 @@ ROM_END ROM_START( pcnfrk9m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd09aba.u1", 0x000000, 0x001014, BAD_DUMP CRC(315336e6) SHA1(83bc64ef952460e28b5a7b237746e2813c9ce632) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd09aba.u1", 0x000000, 0x00008c, BAD_DUMP CRC(1fe73b91) SHA1(b3c49b84295b9dfc946b12a53bdec5cd24541c98) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd09aba.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5798,8 +5803,8 @@ ROM_END ROM_START( pcnfrk10m ) SYS573_BIOS_A - ROM_REGION( 0x0001014, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gcd40aca.u1", 0x000000, 0x001014, BAD_DUMP CRC(dec7f7a9) SHA1(d88e003faefe7ad41e2ba049a07188ec4243d932) ) + ROM_REGION( 0x000008c, "cassette:game:eeprom", 0 ) + ROM_LOAD( "gcd40aca.u1", 0x000000, 0x00008c, BAD_DUMP CRC(cbeaaaae) SHA1(ccc6c47b20ab847859ec37c9c45dc90b24a232b5) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gcd40aca.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5812,7 +5817,7 @@ ROM_START( pnchmn ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq918jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(e4769787) SHA1(d60c6598c7c58b5cd8f86350ebf7f3f32c1ebe9b) ) + ROM_LOAD( "gq918jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(5cb13cab) SHA1(7b4e084df560c317f5530d6d5f4052ec51ecc683) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gq918xxb.31m", 0x000000, 0x200000, CRC(3653b5d7) SHA1(1deb44335b7a38506fb30da40e0ca61b96aea7bb) ) @@ -5830,7 +5835,7 @@ ROM_START( pnchmna ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq918jab.u1", 0x000000, 0x000224, BAD_DUMP CRC(e4769787) SHA1(d60c6598c7c58b5cd8f86350ebf7f3f32c1ebe9b) ) + ROM_LOAD( "gq918jab.u1", 0x000000, 0x000224, BAD_DUMP CRC(5cb13cab) SHA1(7b4e084df560c317f5530d6d5f4052ec51ecc683) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gq918xxb.31m", 0x000000, 0x200000, CRC(3653b5d7) SHA1(1deb44335b7a38506fb30da40e0ca61b96aea7bb) ) @@ -5848,7 +5853,7 @@ ROM_START( pnchmn2 ) SYS573_BIOS_A ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gqa09ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(e1e4108f) SHA1(0605e2c7a7dcb2f4928350e96d2ffcc2ede4a762) ) + ROM_LOAD( "gqa09ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(5923bba3) SHA1(97b099779f20f4169c3171c73f55048fb5314c50) ) ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */ ROM_LOAD( "gqa09ja.31m", 0x000000, 0x200000, CRC(b1043a91) SHA1(b474439c1a7da7855d9b6d2162d4a522f499d6ab) ) @@ -5866,7 +5871,7 @@ ROM_START( salarymc ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gca18jaa.u1", 0x000000, 0x000084, CRC(c9197f67) SHA1(8e95a89008f756a79295f2cb557c39efca1351e7) ) + ROM_LOAD( "gca18jaa.u1", 0x000000, 0x000084, CRC(c4e827e3) SHA1(9429eedcc793d84223c5494b50e64b906e2fa8e1) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gca18jaa.u6", 0x000000, 0x000008, CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) @@ -5879,7 +5884,7 @@ ROM_START( stepchmp ) SYS573_BIOS_A ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 ) - ROM_LOAD( "gq930ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(de141979) SHA1(fc91a8384852cb940ec1461c8a561118e9850c85) ) + ROM_LOAD( "gq930ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(d3e541fd) SHA1(157812a2afeb287804c659115a2a7f8bb7fd2ee9) ) ROM_REGION( 0x000008, "cassette:game:id", 0 ) ROM_LOAD( "gq930ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) ) diff --git a/src/mame/machine/k573mcal.cpp b/src/mame/machine/k573mcal.cpp new file mode 100644 index 00000000000..097e80e66fe --- /dev/null +++ b/src/mame/machine/k573mcal.cpp @@ -0,0 +1,227 @@ +// license:BSD-3-Clause +// copyright-holders:windyfairy +/* + * Konami 573 Master Calendar + * + * This device was made for development/factory use only. + * It will override the game when connected and always boot into the master calendar-specific code. + * Every game has a master calendar-specific boot sequence but a few that don't have code to initialize security cartridges. + * + * The only games that this does not work on that have a security cart are ddr2mc2, ddr2ml, and ddr2mla (all variants of 885jaa02). + * Those games will boot into a screen that shows the game code, clock, and date with nothing else. + * For these games it's possible to set Sys573 DIPSW 1 with the master calendar connected and it will do a checksum of the game's data + * and attempt to write it to "c:/tmp/chksum.dat" on the host debugger PC but will crash in MAME. + * + * DIPSW 2 and 3 on the System 573 directly are also used to specify the "spec" of the game. + * For example, setting DIPSW allows you to switch between GN and GE specs in earlier games. + * + * Some games require you to hold service/F2 (and set Sys573 DIPSW 3?) during boot to initialize the installation cartridge. + * + */ + +#include "emu.h" +#include "k573mcal.h" + +#include "machine/timehelp.h" + +k573mcal_device::k573mcal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + jvs_device(mconfig, KONAMI_573_MASTER_CALENDAR, tag, owner, clock), + m_in1(*this, "IN1"), + seconds(0), + mainId(0), + subId(0) +{ +} + +void k573mcal_device::device_start() +{ + jvs_device::device_start(); +} + +void k573mcal_device::device_reset() +{ + seconds = 0; + + // Randomly picked values + // Is rendered in-game as x41-6379 where the x is generated based on the value of the main ID + mainId = 41; // valid range 0 - 99 + subId = 6379; // valid range 0 - 9999 + + jvs_device::device_reset(); +} + +const char *k573mcal_device::device_id() +{ + return "KONAMI CO.,LTD.;Master Calendar;Ver1.0;"; +} + +uint8_t k573mcal_device::command_format_version() +{ + return 0x11; +} + +uint8_t k573mcal_device::jvs_standard_version() +{ + return 0x20; +} + +uint8_t k573mcal_device::comm_method_version() +{ + return 0x10; +} + +int k573mcal_device::handle_message(const uint8_t* send_buffer, uint32_t send_size, uint8_t*& recv_buffer) +{ + switch (send_buffer[0]) { + case 0xf0: + // msg: f0 d9 + device_reset(); + break; + + case 0x70: { + // msg: 70 + // Writes to RTC chip + + system_time systime; + machine().base_datetime(systime); + + uint8_t resp[] = { + 0x01, // status, must be 1 + uint8_t(systime.local_time.year % 100), + uint8_t(systime.local_time.month + 1), + systime.local_time.mday, + systime.local_time.weekday, + systime.local_time.hour, + systime.local_time.minute, + seconds // Can't be the same value twice in a row + }; + + seconds = (seconds + 1) % 60; + + memcpy(recv_buffer, resp, sizeof(resp)); + recv_buffer += sizeof(resp); + return 1; + } + + case 0x71: { + // msg: 71 ff ff 01 + + uint8_t resp[] = { + 0x01, // status, must be 1 + uint8_t(m_in1->read() & 0x0f), // Area specification + }; + + memcpy(recv_buffer, resp, sizeof(resp)); + recv_buffer += sizeof(resp); + return 4; + } + + case 0x7c: { + // msg: 7c 7f 00 04 + const uint16_t val = (send_buffer[1] << 8) | send_buffer[2]; + + if (val == 0x7f00) { + // Return main ID + uint8_t resp[] = { + 0x01, // status, must be 1 + uint8_t((mainId >> 24) & 0xff), uint8_t((mainId >> 16) & 0xff), uint8_t((mainId >> 8) & 0xff), uint8_t(mainId & 0xff), + }; + + memcpy(recv_buffer, resp, sizeof(resp)); + recv_buffer += sizeof(resp); + } + else if (val == 0x8000) { + // Return sub ID + uint8_t resp[] = { + 0x01, // status, must be 1 + '<', 'I', 'N', 'I', 'T', ' ', 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', '!', '>', + uint8_t((subId >> 24) & 0xff), uint8_t((subId >> 16) & 0xff), uint8_t((subId >> 8) & 0xff), uint8_t(subId & 0xff), + uint8_t((~subId >> 24) & 0xff), uint8_t((~subId >> 16) & 0xff), uint8_t((~subId >> 8) & 0xff), uint8_t(~subId & 0xff), + }; + + memcpy(recv_buffer, resp, sizeof(resp)); + recv_buffer += sizeof(resp); + } + + return 4; + } + + case 0x7d: { + // msg: 7d 80 10 08 00 00 00 01 ff ff ff fe + const uint16_t val = (send_buffer[1] << 8) | send_buffer[2]; + + if (val == 0x8010) { + // Set next sub ID + subId = (send_buffer[4] << 24) | (send_buffer[5] << 16) | (send_buffer[6] << 8) | send_buffer[7]; + + uint8_t resp[] = { + 0x01, // status, must be 1 + }; + + memcpy(recv_buffer, resp, sizeof(resp)); + recv_buffer += sizeof(resp); + } + + return 12; + } + + case 0x7e: { + // This builds some buffer that creates data like this: @2B0001:020304050607:BC9A78563412:000000000000B5 + // 2B0001 is ??? + // 020304050607 is the machine SID + // BC9A78563412 is the machine XID + // 000000000000B5 is ??? + + // msg: 7e xx + uint8_t resp[] = { + // 0x01 - Breaks loop, sends next byte + // 0x04 - Resends byte + 0x01, + }; + + memcpy(recv_buffer, resp, sizeof(resp)); + recv_buffer += sizeof(resp); + + return 2; + } + + case 0x7f: + // TODO: Where is this used? + // The command existed in the command list for a few games (starting at Drummania?) but was never referenced and then disappeared around DDR 3rd mix. + break; + } + + // Command not recognized, pass it off to the base message handler + return jvs_device::handle_message(send_buffer, send_size, recv_buffer); +} + +INPUT_PORTS_START( k573mcal ) + PORT_START("IN1") + // Default the area to 3 because it's unused and will force you to actively select the region to initialize. + // For all but the earliest games it will show a message saying "this game only supports regions x, y, z". + // This is also a good way to discover new bootable variants that exist on the disc but were previously unknown. + PORT_DIPNAME(0x0f, 0x03, "Area") + PORT_DIPSETTING(0x00, "JA") + PORT_DIPSETTING(0x01, "UA") + PORT_DIPSETTING(0x02, "EA") + PORT_DIPSETTING(0x03, "3") // Unused + PORT_DIPSETTING(0x04, "AA") + PORT_DIPSETTING(0x05, "KA") + PORT_DIPSETTING(0x06, "JY/AY") + PORT_DIPSETTING(0x07, "JR") + PORT_DIPSETTING(0x08, "JB") + PORT_DIPSETTING(0x09, "UB") + PORT_DIPSETTING(0x0a, "EB") + PORT_DIPSETTING(0x0b, "11") // Unused + PORT_DIPSETTING(0x0c, "AB") + PORT_DIPSETTING(0x0d, "KB") + PORT_DIPSETTING(0x0e, "JZ/AZ") + PORT_DIPSETTING(0x0f, "JS") +INPUT_PORTS_END + +ioport_constructor k573mcal_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(k573mcal); +} + +DEFINE_DEVICE_TYPE(KONAMI_573_MASTER_CALENDAR, k573mcal_device, "k573mcal", "Konami 573 Master Calendar") diff --git a/src/mame/machine/k573mcal.h b/src/mame/machine/k573mcal.h new file mode 100644 index 00000000000..8400a19038e --- /dev/null +++ b/src/mame/machine/k573mcal.h @@ -0,0 +1,52 @@ +// license:BSD-3-Clause +// copyright-holders:windyfairy +/* + * Konami 573 Master Calendar + * + */ +#ifndef MAME_MACHINE_K573_MCAL_H +#define MAME_MACHINE_K573_MCAL_H + +#pragma once + +#include "machine/jvsdev.h" +#include "machine/timer.h" + +class k573mcal_device : public jvs_device +{ +public: + template + k573mcal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&jvs_host_tag) + : k573mcal_device(mconfig, tag, owner, clock) + { + host.set_tag(std::forward(jvs_host_tag)); + } + + k573mcal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual ioport_constructor device_input_ports() const override; + +protected: + template void set_port_tags() { } + + virtual void device_start() override; + virtual void device_reset() override; + + // JVS device overrides + virtual const char *device_id() override; + virtual uint8_t command_format_version() override; + virtual uint8_t jvs_standard_version() override; + virtual uint8_t comm_method_version() override; + virtual int handle_message(const uint8_t *send_buffer, uint32_t send_size, uint8_t *&recv_buffer) override; + +private: + required_ioport m_in1; + + uint8_t seconds; + uint32_t mainId; + uint32_t subId; +}; + +DECLARE_DEVICE_TYPE(KONAMI_573_MASTER_CALENDAR, k573mcal_device) + +#endif // MAME_MACHINE_K573_MCAL_H diff --git a/src/mame/machine/zs01.cpp b/src/mame/machine/zs01.cpp index 3ce573892e5..c5e4606ec91 100644 --- a/src/mame/machine/zs01.cpp +++ b/src/mame/machine/zs01.cpp @@ -7,6 +7,8 @@ * * This is a high level emulation of the PIC used in some of the System 573 security cartridges. * + * Referred to internally in game code as "NS2K001". + * */ #include "emu.h" @@ -43,7 +45,8 @@ zs01_device::zs01_device( const machine_config &mconfig, const char *tag, device m_state( STATE_STOP ), m_shift( 0 ), m_bit( 0 ), - m_byte( 0 ) + m_byte( 0 ), + m_previous_byte( 0 ) { } @@ -65,6 +68,7 @@ void zs01_device::device_start() save_item( NAME( m_shift ) ); save_item( NAME( m_bit ) ); save_item( NAME( m_byte ) ); + save_item( NAME( m_previous_byte ) ); save_item( NAME( m_write_buffer ) ); save_item( NAME( m_read_buffer ) ); save_item( NAME( m_response_key ) ); @@ -72,6 +76,25 @@ void zs01_device::device_start() save_item( NAME( m_command_key ) ); save_item( NAME( m_data_key ) ); save_item( NAME( m_data ) ); + save_item( NAME( m_configuration_registers ) ); +} + +void zs01_device::device_reset() +{ + memset( m_write_buffer, 0, sizeof( m_write_buffer ) ); + memset( m_read_buffer, 0, sizeof( m_read_buffer ) ); + memset( m_response_key, 0, sizeof( m_response_key ) ); + + m_cs = 0; + m_rst = 0; + m_scl = 0; + m_sdaw = 0; + m_sdar = 0; + m_state = STATE_STOP; + m_shift = 0; + m_bit = 0; + m_byte = 0; + m_previous_byte = 0; } WRITE_LINE_MEMBER( zs01_device::write_rst ) @@ -309,9 +332,7 @@ uint16_t zs01_device::calc_crc( uint8_t *buffer, uint32_t length ) int zs01_device::data_offset() { - int block = ( ( m_write_buffer[ 0 ] & 2 ) << 7 ) | m_write_buffer[ 1 ]; - - return block * SIZE_DATA_BUFFER; + return m_write_buffer[ 1 ] * SIZE_DATA_BUFFER; } WRITE_LINE_MEMBER( zs01_device::write_scl ) @@ -386,50 +407,94 @@ WRITE_LINE_MEMBER( zs01_device::write_scl ) { decrypt( m_write_buffer, m_write_buffer, sizeof( m_write_buffer ), m_command_key, 0xff ); + // TODO: What is bit 1 of m_write_buffer[0]? + + // Bit 2 seems to be set when the sector is >= 4 and the sector is not 0xfc if( ( m_write_buffer[ 0 ] & 4 ) != 0 ) { - decrypt2( &m_write_buffer[ 2 ], &m_write_buffer[ 2 ], SIZE_DATA_BUFFER, m_data_key, 0x00 ); + decrypt2( &m_write_buffer[ 2 ], &m_write_buffer[ 2 ], SIZE_DATA_BUFFER, m_data_key, m_previous_byte ); } uint16_t crc = calc_crc( m_write_buffer, 10 ); + uint16_t msg_crc = ( ( m_write_buffer[ 10 ] << 8 ) | m_write_buffer[ 11 ] ); - if( crc == ( ( m_write_buffer[ 10 ] << 8 ) | m_write_buffer[ 11 ] ) ) + verboselog( 1, "-> command: %02x (%s)\n", m_write_buffer[ 0 ], ( m_write_buffer[ 0 ] & 1 ) ? "READ" : "WRITE" ); + verboselog( 1, "-> address: %04x (%02x)\n", data_offset(), m_write_buffer[ 1 ] ); + verboselog( 1, "-> data: %02x%02x%02x%02x%02x%02x%02x%02x\n", + m_write_buffer[ 2 ], m_write_buffer[ 3 ], m_write_buffer[ 4 ], m_write_buffer[ 5 ], + m_write_buffer[ 6 ], m_write_buffer[ 7 ], m_write_buffer[ 8 ], m_write_buffer[ 9 ] ); + verboselog( 1, "-> crc: %04x vs %04x %s\n", crc, msg_crc, crc == msg_crc ? "" : "(BAD)"); + + if( crc == msg_crc ) { - verboselog( 1, "-> command: %02x\n", m_write_buffer[ 0 ] ); - verboselog( 1, "-> address: %02x\n", m_write_buffer[ 1 ] ); - verboselog( 1, "-> data: %02x%02x%02x%02x%02x%02x%02x%02x\n", - m_write_buffer[ 2 ], m_write_buffer[ 3 ], m_write_buffer[ 4 ], m_write_buffer[ 5 ], - m_write_buffer[ 6 ], m_write_buffer[ 7 ], m_write_buffer[ 8 ], m_write_buffer[ 9 ] ); - verboselog( 1, "-> crc: %02x%02x\n", m_write_buffer[ 10 ], m_write_buffer[ 11 ] ); + m_configuration_registers[ CONFIG_RC ] = 0; // Reset password fail counter switch( m_write_buffer[ 0 ] & 1 ) { case COMMAND_WRITE: - memcpy( &m_data[ data_offset() ], &m_write_buffer[ 2 ], SIZE_DATA_BUFFER ); - - /* todo: find out what should be returned. */ memset( &m_read_buffer[ 0 ], 0, sizeof( m_write_buffer ) ); + m_read_buffer[ 0 ] = STATUS_OK; + + if ( m_write_buffer[ 1 ] == 0xfd ) + { + // Erase + std::fill( std::begin( m_data ), std::end( m_data ), 0 ); + std::fill( std::begin( m_data_key ), std::end( m_data_key ), 0 ); + } + else if ( m_write_buffer[ 1 ] == 0xfe ) + { + // Configuration register + memcpy( m_configuration_registers, &m_write_buffer[ 2 ], SIZE_DATA_BUFFER ); + } + else if ( m_write_buffer[ 1 ] == 0xff ) + { + // Set password + memcpy( m_data_key, &m_write_buffer[ 2 ], SIZE_DATA_BUFFER ); + } + else if ( data_offset() < sizeof ( m_data ) ) + { + memcpy( &m_data[ data_offset() ], &m_write_buffer[ 2 ], SIZE_DATA_BUFFER ); + } + else + { + verboselog( 1, "-> unknown write offset: %04x (%02x)\n", data_offset(), m_write_buffer[ 1 ] ); + } + break; case COMMAND_READ: - /* todo: find out what should be returned. */ - memset( &m_read_buffer[ 0 ], 0, 2 ); + m_read_buffer[ 0 ] = STATUS_OK; - switch( m_write_buffer[ 1 ] ) + if ( m_write_buffer[ 1 ] == 0xfc ) { - case 0xfd: + // TODO: Unknown serial + // The serial is verified by the same algorithm as the one read from 0x7e8 (DS2401 serial), but the serial is different. + for (int i = 0; i < SIZE_DATA_BUFFER; i++) { - /* TODO: use read/write to talk to the ds2401, which will require a timer. */ - for( int i = 0; i < SIZE_DATA_BUFFER; i++ ) - { - m_read_buffer[ 2 + i ] = m_ds2401->direct_read( SIZE_DATA_BUFFER - i - 1 ); - } + m_read_buffer[2 + i] = m_ds2401->direct_read(SIZE_DATA_BUFFER - i - 1); } - break; - - default: + } + else if ( m_write_buffer[ 1 ] == 0xfd ) + { + // DS2401 serial + /* TODO: use read/write to talk to the ds2401, which will require a timer. */ + for( int i = 0; i < SIZE_DATA_BUFFER; i++ ) + { + m_read_buffer[ 2 + i ] = m_ds2401->direct_read( SIZE_DATA_BUFFER - i - 1 ); + } + } + else if ( m_write_buffer[ 1 ] == 0xfe ) + { + // Configuration register + memcpy( &m_read_buffer[ 2 ], m_configuration_registers, SIZE_DATA_BUFFER ); + } + else if ( data_offset() < sizeof ( m_data ) ) + { memcpy( &m_read_buffer[ 2 ], &m_data[ data_offset() ], SIZE_DATA_BUFFER ); - break; + } + else + { + verboselog( 1, "-> unknown read offset: %04x (%02x)\n", data_offset(), m_write_buffer[ 1 ] ); } memcpy( m_response_key, &m_write_buffer[ 2 ], sizeof( m_response_key ) ); @@ -439,18 +504,25 @@ WRITE_LINE_MEMBER( zs01_device::write_scl ) else { verboselog( 0, "bad crc\n" ); + m_read_buffer[ 0 ] = STATUS_ERROR; - /* todo: find out what should be returned. */ - memset( &m_read_buffer[ 0 ], 0xff, 2 ); + m_configuration_registers[ CONFIG_RC ]++; + if ( m_configuration_registers[ CONFIG_RC ] >= m_configuration_registers[ CONFIG_RR ] ) + { + // Too many bad reads, erase data + std::fill( std::begin( m_data ), std::end( m_data ), 0 ); + std::fill( std::begin( m_data_key ), std::end( m_data_key ), 0 ); + } } - verboselog( 1, "<- status: %02x%02x\n", - m_read_buffer[ 0 ], m_read_buffer[ 1 ] ); + verboselog( 1, "<- status: %02x\n", m_read_buffer[ 0 ] ); verboselog( 1, "<- data: %02x%02x%02x%02x%02x%02x%02x%02x\n", m_read_buffer[ 2 ], m_read_buffer[ 3 ], m_read_buffer[ 4 ], m_read_buffer[ 5 ], m_read_buffer[ 6 ], m_read_buffer[ 7 ], m_read_buffer[ 8 ], m_read_buffer[ 9 ] ); + m_previous_byte = m_read_buffer[ 1 ]; + crc = calc_crc( m_read_buffer, 10 ); m_read_buffer[ 10 ] = crc >> 8; m_read_buffer[ 11 ] = crc & 255; @@ -574,12 +646,25 @@ READ_LINE_MEMBER( zs01_device::read_sda ) void zs01_device::nvram_default() { - memset( m_response_to_reset, 0, sizeof( m_response_to_reset ) ); - memset( m_command_key, 0, sizeof( m_command_key ) ); + m_response_to_reset[ 0 ] = 0x5a; + m_response_to_reset[ 1 ] = 0x53; + m_response_to_reset[ 2 ] = 0x00; + m_response_to_reset[ 3 ] = 0x01; + + m_command_key[ 0 ] = 0xed; + m_command_key[ 1 ] = 0x68; + m_command_key[ 2 ] = 0x50; + m_command_key[ 3 ] = 0x4b; + m_command_key[ 4 ] = 0xc6; + m_command_key[ 5 ] = 0x44; + m_command_key[ 6 ] = 0x48; + m_command_key[ 7 ] = 0x3e; + memset( m_data_key, 0, sizeof( m_data_key ) ); + memset( m_configuration_registers, 0, sizeof( m_configuration_registers ) ); memset( m_data, 0, sizeof( m_data ) ); - int expected_bytes = sizeof( m_response_to_reset ) + sizeof( m_command_key ) + sizeof( m_data_key ) + sizeof( m_data ); + int expected_bytes = sizeof( m_response_to_reset ) + sizeof( m_command_key ) + sizeof( m_data_key ) + sizeof( m_configuration_registers ) + sizeof( m_data ); if (!m_region.found()) { @@ -596,6 +681,7 @@ void zs01_device::nvram_default() memcpy( m_response_to_reset, region, sizeof( m_response_to_reset ) ); region += sizeof( m_response_to_reset ); memcpy( m_command_key, region, sizeof( m_command_key ) ); region += sizeof( m_command_key ); memcpy( m_data_key, region, sizeof( m_data_key ) ); region += sizeof( m_data_key ); + memcpy( m_configuration_registers, region, sizeof( m_configuration_registers ) ); region += sizeof( m_configuration_registers ); memcpy( m_data, region, sizeof( m_data ) ); region += sizeof( m_data ); } } @@ -605,6 +691,7 @@ void zs01_device::nvram_read( emu_file &file ) file.read( m_response_to_reset, sizeof( m_response_to_reset ) ); file.read( m_command_key, sizeof( m_command_key ) ); file.read( m_data_key, sizeof( m_data_key ) ); + file.read( m_configuration_registers, sizeof( m_configuration_registers ) ); file.read( m_data, sizeof( m_data ) ); } @@ -613,5 +700,6 @@ void zs01_device::nvram_write( emu_file &file ) file.write( m_response_to_reset, sizeof( m_response_to_reset ) ); file.write( m_command_key, sizeof( m_command_key ) ); file.write( m_data_key, sizeof( m_data_key ) ); + file.write( m_configuration_registers, sizeof( m_configuration_registers ) ); file.write( m_data, sizeof( m_data ) ); } diff --git a/src/mame/machine/zs01.h b/src/mame/machine/zs01.h index 75b8f40784c..715228798a9 100644 --- a/src/mame/machine/zs01.h +++ b/src/mame/machine/zs01.h @@ -38,6 +38,7 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; // device_nvram_interface overrides virtual void nvram_default() override; @@ -72,6 +73,18 @@ private: STATE_READ_DATA }; + enum status_t + { + STATUS_OK, + STATUS_ERROR = 2, + }; + + enum configuration_registers_t + { + CONFIG_RR = 4, // Retry Register + CONFIG_RC = 5 // Reset Counter + }; + // internal state optional_device m_ds2401; optional_memory_region m_region; @@ -85,13 +98,15 @@ private: int m_shift; int m_bit; int m_byte; + int m_previous_byte; uint8_t m_write_buffer[ 12 ]; uint8_t m_read_buffer[ 12 ]; uint8_t m_response_key[ 8 ]; uint8_t m_response_to_reset[ 4 ]; uint8_t m_command_key[ 8 ]; uint8_t m_data_key[ 8 ]; - uint8_t m_data[ 4096 ]; + uint8_t m_configuration_registers[ 8 ]; + uint8_t m_data[ 112 ]; };