diff options
author | Aaron Giles <aaron@aarongiles.com> | 2009-05-11 09:14:26 +0000 |
---|---|---|
committer | Aaron Giles <aaron@aarongiles.com> | 2009-05-11 09:14:26 +0000 |
commit | 00c5f34211241e2d3dcaa2d93000ecb1585aa225 (patch) | |
tree | 1d158bb0fd03931b279269f992d3121c44aa1b94 | |
parent | a95bed239b34c8c873a0b7f35a7b9ab22b3d7f5f (diff) |
MCS-51 fixes:
* jb int0,<self> loops are now broken out of if int0 comes and is taken
* externally-clocked counters only count when enabled
System 1 changes:
* hooked up 8751 properly
* removed old 8751 hacks
* shuffled Shooting Master sets
New Games Marked Working
------------------------
Choplifter (8751 315-5151)
Shooting Master (EVG, 8751 315-5159a)
-rw-r--r-- | src/emu/cpu/mcs51/mcs51.c | 10 | ||||
-rw-r--r-- | src/mame/drivers/system1.c | 503 | ||||
-rw-r--r-- | src/mame/mamedriv.c | 4 |
3 files changed, 204 insertions, 313 deletions
diff --git a/src/emu/cpu/mcs51/mcs51.c b/src/emu/cpu/mcs51/mcs51.c index 67dc4a59e97..63190ddf19f 100644 --- a/src/emu/cpu/mcs51/mcs51.c +++ b/src/emu/cpu/mcs51/mcs51.c @@ -1728,6 +1728,10 @@ static void check_irqs(mcs51_state_t *mcs51_state) return; } + /* also break out of jb int0,<self> loops */ + if (ROP(PC) == 0x20 && ROP_ARG(PC+1) == 0xb2 && ROP_ARG(PC+2) == 0xfd) + PC += 3; + //Save current pc to stack, set pc to new interrupt vector push_pc(mcs51_state); PC = int_vec; @@ -1858,19 +1862,19 @@ static void mcs51_set_irq_line(mcs51_state_t *mcs51_state, int irqline, int stat break; case MCS51_T0_LINE: - if (GET_BIT(tr_state, MCS51_T0_LINE)) + if (GET_BIT(tr_state, MCS51_T0_LINE) && GET_TR0) mcs51_state->t0_cnt++; break; case MCS51_T1_LINE: - if (GET_BIT(tr_state, MCS51_T1_LINE)) + if (GET_BIT(tr_state, MCS51_T1_LINE) && GET_TR1) mcs51_state->t1_cnt++; break; case MCS51_T2_LINE: if (mcs51_state->features & FEATURE_I8052) { - if (GET_BIT(tr_state, MCS51_T2_LINE)) + if (GET_BIT(tr_state, MCS51_T2_LINE) && GET_TR1) mcs51_state->t2_cnt++; } else diff --git a/src/mame/drivers/system1.c b/src/mame/drivers/system1.c index fc7a599c5dd..628f1a81fc7 100644 --- a/src/mame/drivers/system1.c +++ b/src/mame/drivers/system1.c @@ -203,13 +203,12 @@ Notes: #define SOUND_CLOCK XTAL_8MHz -static void (*i8751_run)(running_machine *machine, int init); static void (*videomode_custom)(running_machine *machine, UINT8 data, UINT8 prevdata); static UINT8 *system1_ram; static UINT8 dakkochn_mux_data; static UINT8 videomode_prev; -static UINT8 i8751_active; +static UINT8 mcu_control; @@ -357,95 +356,13 @@ static MACHINE_START( system1 ) state_save_register_global(machine, dakkochn_mux_data); state_save_register_global(machine, videomode_prev); + state_save_register_global(machine, mcu_control); } static MACHINE_RESET( system1 ) { dakkochn_mux_data = 0; - i8751_active = FALSE; - if (i8751_run != NULL) - (*i8751_run)(machine, TRUE); -} - - -static INTERRUPT_GEN( vblank_irq ) -{ - irq0_line_hold(device); - - if (i8751_run != NULL && i8751_active) - (*i8751_run)(device->machine, FALSE); -} - - - -/************************************* - * - * Game-specific initialization - * - *************************************/ - -static void choplift_i8751_run(running_machine *machine, int init) -{ - if (init) - { - const device_config *ppi = devtag_get_device(machine, "ppi"); - - /* the 8751 seems to do the 8255 initialization among other things */ - ppi8255_w(ppi, 3, 0xc0); - ppi8255_w(ppi, 2, 0x00); - } - else - { - const UINT8 *rom = memory_region(machine, "maincpu"); - system1_ram[0x88] = 0x01; - system1_ram[0x89] = 0xff; - memcpy(&system1_ram[0x90], &rom[0x1f8e], 16); - videoram[0x740] = 0x01; - videoram[0x742] = 0x01; - videoram[0x744] = 0x01; - videoram[0x746] = 0x01; - } -} - - -/* protection values from real hardware, these were verified to be the same on the title - screen and in the first level... they're all jumps that the MCU appears to put in RAM - at some point */ -static const int shtngtab[]= -{ - 0xC3,0xC1,0x39, - 0xC3,0x6F,0x0A, - 0xC3,0x56,0x39, - 0xC3,0x57,0x0C, - 0xC3,0xE2,0x0B, - 0xC3,0x68,0x03, - 0xC3,0xF1,0x06, - 0xC3,0xCA,0x06, - 0xC3,0xC4,0x06, - 0xC3,0xD6,0x07, - 0xC3,0x89,0x13, - 0xC3,0x75,0x13, - 0xC3,0x9F,0x13, - 0xC3,0xFF,0x38, - 0xC3,0x60,0x13, - 0xC3,0x62,0x00, - 0xC3,0x39,0x04, - -1 -}; - -static WRITE8_HANDLER(mcuenable_hack_w) -{ - //in fact it's gun feedback write, not mcu related - int i=0; - while(shtngtab[i]>=0) - { - system1_ram[i+0x40]=shtngtab[i]; - i++; - } - - system1_ram[0x2ff]=0x49; // I ? - system1_ram[0x3ff]=0x54; // T ? } @@ -472,8 +389,11 @@ static void bank0c_custom_w(running_machine *machine, UINT8 data, UINT8 prevdata static WRITE8_HANDLER( videomode_w ) { - if ((data & 0x40) && !(videomode_prev & 0x40)) - i8751_active = TRUE; + const device_config *i8751 = cputag_get_cpu(space->machine, "mcu"); + + /* bit 6 is connected to the 8751 IRQ */ + if (i8751 != NULL) + cpu_set_input_line(i8751, MCS51_INT1_LINE, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE); /* handle any custom banking or other stuff */ if (videomode_custom != NULL) @@ -588,6 +508,95 @@ static WRITE_LINE_DEVICE_HANDLER( pio_ready_w ) /************************************* * + * MCU I/O + * + *************************************/ + +static WRITE8_HANDLER( mcu_control_w ) +{ + /* + Bit 7 -> connects to TD62003 pins 5 & 6 @ IC151 + Bit 6 -> via PLS153, when high, asserts the BUSREQ signal, halting the Z80 + Bit 5 -> n/c + Bit 4 -> (with bit 3) Memory select: 0=Z80 program space, 1=banked ROM, 2=Z80 I/O space, 3=watchdog? + Bit 3 -> + Bit 2 -> n/c + Bit 1 -> n/c + Bit 0 -> Directly connected to Z80 /INT line + */ + mcu_control = data; + cputag_set_input_line(space->machine, "maincpu", INPUT_LINE_HALT, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(space->machine, "maincpu", 0, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE); +} + + +static WRITE8_HANDLER( mcu_io_w ) +{ + switch ((mcu_control >> 3) & 3) + { + case 0: + memory_write_byte(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), offset, data); + break; + + case 2: + memory_write_byte(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_IO), offset, data); + break; + + default: + logerror("%03X: MCU movx write mode %02X offset %04X = %02X\n", + cpu_get_pc(space->cpu), mcu_control, offset, data); + break; + } +} + + +static READ8_HANDLER( mcu_io_r ) +{ + switch ((mcu_control >> 3) & 3) + { + case 0: + return memory_read_byte(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), offset); + + case 1: + return memory_region(space->machine, "maincpu")[offset + 0x10000]; + + case 2: + return memory_read_byte(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_IO), offset); + + default: + logerror("%03X: MCU movx read mode %02X offset %04X\n", + cpu_get_pc(space->cpu), mcu_control, offset); + return 0xff; + } +} + + +static INTERRUPT_GEN( mcu_irq_assert ) +{ + /* toggle the INT0 line on the MCU */ + cpu_set_input_line(device, MCS51_INT0_LINE, ASSERT_LINE); + cpu_set_input_line(device, MCS51_INT0_LINE, CLEAR_LINE); + + /* boost interleave to ensure that the MCU can break the Z80 out of a HALT */ + cpuexec_boost_interleave(device->machine, attotime_zero, ATTOTIME_IN_USEC(10)); +} + + +static TIMER_DEVICE_CALLBACK( mcu_t0_callback ) +{ + /* the T0 line is clocked by something; if it is not clocked fast + enough, the MCU will fail; on shtngmst this happens after 3 + VBLANKs without a tick */ + + const device_config *mcu = cputag_get_cpu(timer->machine, "mcu"); + cpu_set_input_line(mcu, MCS51_T0_LINE, ASSERT_LINE); + cpu_set_input_line(mcu, MCS51_T0_LINE, CLEAR_LINE); +} + + + +/************************************* + * * Generic port definitions * *************************************/ @@ -703,97 +712,6 @@ ADDRESS_MAP_END * *************************************/ -static UINT8 mcu_control; - -static WRITE8_HANDLER( mcu_control_w ) -{ - mcu_control = data; -} - -static WRITE8_HANDLER( mcu_io_w ) -{ - switch (mcu_control) - { - case 0x01: - if (offset >= 0xc000 && offset < 0xd000) - memory_write_byte(cpu_get_address_space(space->machine->cpu[0], ADDRESS_SPACE_PROGRAM), offset, data); - else - logerror("%03X: MCU movx write mode %02X offset %04X = %02X\n", - cpu_get_pc(space->cpu), mcu_control, offset, data); - break; - - case 0x51: - memory_write_byte(cpu_get_address_space(space->machine->cpu[0], ADDRESS_SPACE_IO), offset, data); - break; - - default: - logerror("%03X: MCU movx write mode %02X offset %04X = %02X\n", - cpu_get_pc(space->cpu), mcu_control, offset, data); - break; - } -} - -static READ8_HANDLER( mcu_io_r ) -{ - switch (mcu_control) - { - case 0x01: - if (offset >= 0xc000) - return memory_read_byte(cpu_get_address_space(space->machine->cpu[0], ADDRESS_SPACE_PROGRAM), offset); - else - { - logerror("%03X: MCU movx read mode %02X offset %04X\n", - cpu_get_pc(space->cpu), mcu_control, offset); - return 0xff; - } - - case 0x47: - return memory_region(space->machine, "maincpu")[offset + 0x00000]; - - case 0x4f: - return memory_region(space->machine, "maincpu")[offset + 0x10000]; - - case 0x51: - return memory_read_byte(cpu_get_address_space(space->machine->cpu[0], ADDRESS_SPACE_IO), offset); - - case 0x59: /* read after each byte of internal checksum */ - case 0x5f: /* read after each pair of bytes during main CPU checksum */ - return 0xff; - - default: - logerror("%03X: MCU movx read mode %02X offset %04X\n", - cpu_get_pc(space->cpu), mcu_control, offset); - return 0xff; - } -} - -/* - - +------------- HALT? - | +----------- I/O? - | | +--------- ROM bank select - | | | -01 0000 0001 = read/write to Z80 program space -51 0101 0001 = read/write to Z80 I/O space -41 0100 0001 = write at initialization time -47 0100 0111 = read from ROM 00000-07FFF -4F 0100 1111 = read from ROM 10000-1FFFF -5F 0101 1111 = read during ROM checksum -19 0001 1001 = reads here before doing shorter loops -59 0101 1001 = reads here during checksum, and in infinite loop on checksum error - - -When P1 = $01, movx writes to ???, reads from ??? -When P1 = $19, movx reads from ??? -When P1 = $41, movx writes to ??? (done at init, with no dptr) -When P1 = $47, movx reads from ROM 00000-07FFF -When P1 = $4F, movx reads from ROM 10000-1FFFF -When P1 = $51, movx writes to ??? (address $17, $14, $15, $16) -When P1 = $59, movx reads from ??? (done on error, and on each byte of internal checksum) -When P1 = $5F, movx reads from ??? (when after each pair of bytes during checksum) -When P1 = $FF, default state -*/ - static ADDRESS_MAP_START( mcu_io_map, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xffff) AM_READWRITE(mcu_io_r, mcu_io_w) @@ -2108,7 +2026,7 @@ static MACHINE_DRIVER_START( sys1ppi ) MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK) /* not really, see notes above */ MDRV_CPU_PROGRAM_MAP(system1_map) MDRV_CPU_IO_MAP(system1_ppi_io_map) - MDRV_CPU_VBLANK_INT("screen", vblank_irq) + MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) MDRV_CPU_ADD("soundcpu", Z80, SOUND_CLOCK/2) MDRV_CPU_PROGRAM_MAP(sound_map) @@ -2175,6 +2093,21 @@ MACHINE_DRIVER_END +/* this describes the additional 8751 MCU when present */ +static MACHINE_DRIVER_START( mcu ) + + /* basic machine hardware */ + MDRV_CPU_MODIFY("maincpu") + MDRV_CPU_VBLANK_INT(NULL, NULL) + + MDRV_CPU_ADD("mcu", I8751, SOUND_CLOCK) + MDRV_CPU_IO_MAP(mcu_io_map) + MDRV_CPU_VBLANK_INT("screen", mcu_irq_assert) + + MDRV_TIMER_ADD_PERIODIC("mcu_t0", mcu_t0_callback, MSEC(20)) /* ??? actual clock unknown */ +MACHINE_DRIVER_END + + /* alternate program map with RAM/collision swapped */ static MACHINE_DRIVER_START( nob ) @@ -2187,11 +2120,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( nobm ) MDRV_IMPORT_FROM( nob ) - - /* basic machine hardware */ - MDRV_CPU_ADD("mcu", I8751, 8000000 /* unknown speed */) - MDRV_CPU_IO_MAP(mcu_io_map) - MDRV_CPU_VBLANK_INT("screen", irq0_line_pulse) + MDRV_IMPORT_FROM( mcu ) MACHINE_DRIVER_END @@ -2207,11 +2136,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( sys2m ) MDRV_IMPORT_FROM( sys2 ) - - /* basic machine hardware */ - MDRV_CPU_ADD("mcu", I8751, 8000000 /* unknown speed */) - MDRV_CPU_IO_MAP(mcu_io_map) - MDRV_CPU_VBLANK_INT("screen", irq0_line_pulse) + MDRV_IMPORT_FROM( mcu ) MACHINE_DRIVER_END /* system2 with rowscroll */ @@ -2224,11 +2149,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( sys2rowm ) MDRV_IMPORT_FROM( sys2row ) - - /* basic machine hardware */ - MDRV_CPU_ADD("mcu", I8751, 8000000 /* unknown speed */) - MDRV_CPU_IO_MAP(mcu_io_map) - MDRV_CPU_VBLANK_INT("screen", irq0_line_pulse) + MDRV_IMPORT_FROM( mcu ) MACHINE_DRIVER_END @@ -3294,17 +3215,13 @@ ROM_END /* - Shooting Master (SEGA) - Rev A, 8751 315-5159a - Year: 1985 - System 2 - Main Board 834-5719 Light Gun Board? 834-5720 */ ROM_START( shtngmst ) ROM_REGION( 0x20000, "maincpu", 0 ) /* This rom is located on the daughter board. */ - ROM_LOAD( "epr7100a.ic18", 0x00000, 0x8000, BAD_DUMP CRC(661f0b6e) SHA1(a1d064839c95d8a6f6d89b0894259f666d637ec4) ) + ROM_LOAD( "epr7100.ic18", 0x00000, 0x8000, CRC(45e64431) SHA1(7edf818dc1f65365641e51abc197d13db7a8d4d9) ) /* These roms are located on the main board. */ ROM_LOAD( "epr7101.ic91", 0x10000, 0x8000, CRC(ebf5ff72) SHA1(13ae06e3a81cf00b80ec939d5baf30143d61d480) ) ROM_LOAD( "epr7102.ic92", 0x18000, 0x8000, CRC(c890a4ad) SHA1(4b59d37902ace3a69b380ff40652ee37c85f0e9d) ) @@ -3315,7 +3232,7 @@ ROM_START( shtngmst ) /* This mcu is located on the main board. */ ROM_REGION( 0x1000, "mcu", 0 ) - ROM_LOAD( "315-5159a.ic74", 0x00000, 0x1000, BAD_DUMP CRC(1f774912) SHA1(34d12756735514bea5a513fdf441ae93318747b2) ) + ROM_LOAD( "315-5159.ic74", 0x00000, 0x1000, NO_DUMP ) /* These roms are located on the main board. */ ROM_REGION( 0x18000, "tiles", 0 ) @@ -3353,46 +3270,57 @@ ROM_START( shtngmst ) ROM_END /* - Shooting Master (SEGA) - Set 1, 8751 315-5159 - Year: 1985 - System 2 - - Main Board 834-5719 - Light Gun Board? 834-5720 + Shooting Master (EVG) + Year: 1985 + Manufacturer: E.V.G. SRL Milano made in Italy (Sega license) + + CPU + 1x Z8400AB1-Z80ACPU-Y28548 (main board) + 1x iC8751H-88-L5310039 (main board) + 1x AMD P8255A-8526YP (main board) + 1x SEGA 315-5012-8605P5 (main board) + 1x SEGA 315-5011-8549X5 (main board) + 1x SEGA 315-5049-8551PX (main board) + 1x SEGA 315-5139-8537-CK2605-V-J (main board) + 1x oscillator 20.000MHz (main board) + 1x SYS Z8400AB1-Z80ACPU-Y28535 (upper board) + 1x NEC D8255AC-2 (upper board) + 1x oscillator 4.9152MHz (upper board) + + ROMs + 1x HN27256G-25 (7043)(main board close to Z80) + 2x HN27256G-25 (7101-7102)(main board close to C8751) + 3x HN27256G-25 (7040-7041-7042)(main board close to 315-5049) + 2x PAL16R4A (315-5137 and 315-5138) + 1x HN27256G-25 (7100)(upper board close to oscillator) + 7x HN27256G-25 (7104 to 7110)(upper board close to Z80 and 8255) */ -ROM_START( shtngmst1 ) +ROM_START( shtngmste ) ROM_REGION( 0x20000, "maincpu", 0 ) - /* This rom is located on the daughter board. */ - ROM_LOAD( "epr7100.ic18", 0x00000, 0x8000, CRC(45e64431) SHA1(7edf818dc1f65365641e51abc197d13db7a8d4d9) ) - /* These roms are located on the main board. */ - ROM_LOAD( "epr7101.ic91", 0x10000, 0x8000, CRC(ebf5ff72) SHA1(13ae06e3a81cf00b80ec939d5baf30143d61d480) ) - ROM_LOAD( "epr7102.ic92", 0x18000, 0x8000, CRC(c890a4ad) SHA1(4b59d37902ace3a69b380ff40652ee37c85f0e9d) ) + ROM_LOAD( "epr7100.ic18", 0x00000, 0x8000, CRC(268ecb1d) SHA1(a9274c9718f7244235cc6df76331d6a0b7e4e4c8) ) + ROM_LOAD( "epr7101.ic91", 0x10000, 0x8000, CRC(ebf5ff72) SHA1(13ae06e3a81cf00b80ec939d5baf30143d61d480) ) + ROM_LOAD( "epr7102.ic92", 0x18000, 0x8000, CRC(c890a4ad) SHA1(4b59d37902ace3a69b380ff40652ee37c85f0e9d) ) - /* This rom is located on the main board. */ ROM_REGION( 0x10000, "soundcpu", 0 ) ROM_LOAD( "epr7043.ic126", 0x0000, 0x8000, CRC(99a368ab) SHA1(a9451f39ee2613e5c3e2791d4d8d837b4a3ab666) ) - /* This mcu is located on the main board. */ ROM_REGION( 0x1000, "mcu", 0 ) - ROM_LOAD( "315-5159.ic74", 0x00000, 0x1000, BAD_DUMP CRC(1f774912) SHA1(34d12756735514bea5a513fdf441ae93318747b2) ) + ROM_LOAD( "315-5159a.ic74", 0x00000, 0x1000, BAD_DUMP CRC(1f774912) SHA1(34d12756735514bea5a513fdf441ae93318747b2) ) - /* These roms are located on the main board. */ ROM_REGION( 0x18000, "tiles", 0 ) ROM_LOAD( "epr7040.ic4", 0x00000, 0x8000, CRC(f30769fa) SHA1(366c1fbe4e1c8943b209f6c831c9a6b7e4372105) ) ROM_LOAD( "epr7041.ic5", 0x08000, 0x8000, CRC(f3e273f9) SHA1(b8715c528299dc1e4f0c19c50d91ca9861a423a1) ) ROM_LOAD( "epr7042.ic6", 0x10000, 0x8000, CRC(6841c917) SHA1(6553843eea0131eb7b5a9aa29dddf641e41d8cc3) ) - /* These roms are located on the daughter board. */ ROM_REGION( 0x40000, "sprites", ROMREGION_ERASEFF ) - ROM_LOAD( "epr7110.ic26", 0x00000, 0x8000, CRC(5d1a5048) SHA1(d1626ab1981080451c912df7e4ad7f76c0cb3459) ) - ROM_LOAD( "epr7106.ic22", 0x08000, 0x8000, CRC(ae7ab7a2) SHA1(153691e468d29d21b95f1fbffb6896a3140d7e14) ) - ROM_LOAD( "epr7108.ic24", 0x10000, 0x8000, CRC(816180ac) SHA1(a59670ec77d4359041ebf12dae5b74add55d82ac) ) - ROM_LOAD( "epr7104.ic20", 0x18000, 0x8000, CRC(84a679c5) SHA1(19a21b1b33fc215f606093bfd61d597e4bd0b3d0) ) - ROM_LOAD( "epr7109.ic25", 0x20000, 0x8000, CRC(097f7481) SHA1(4d93ea01b811af1cd3e136116625e4b8e06358a2) ) - ROM_LOAD( "epr7105.ic21", 0x28000, 0x8000, CRC(13111729) SHA1(57ca2b945db36b056d0e40a39456fd8bf9d0a3ec) ) - ROM_LOAD( "epr7107.ic23", 0x30000, 0x8000, CRC(8f50ea24) SHA1(781687e202dedca7b72c9bd5b97d9d46fcfd601c) ) + ROM_LOAD( "epr7110", 0x00000, 0x8000, CRC(5d1a5048) SHA1(d1626ab1981080451c912df7e4ad7f76c0cb3459) ) + ROM_LOAD( "epr7106", 0x08000, 0x8000, CRC(ae7ab7a2) SHA1(153691e468d29d21b95f1fbffb6896a3140d7e14) ) + ROM_LOAD( "epr7108", 0x10000, 0x8000, CRC(816180ac) SHA1(a59670ec77d4359041ebf12dae5b74add55d82ac) ) + ROM_LOAD( "epr7104", 0x18000, 0x8000, CRC(84a679c5) SHA1(19a21b1b33fc215f606093bfd61d597e4bd0b3d0) ) + ROM_LOAD( "epr7109", 0x20000, 0x8000, CRC(097f7481) SHA1(4d93ea01b811af1cd3e136116625e4b8e06358a2) ) + ROM_LOAD( "epr7105", 0x28000, 0x8000, CRC(13111729) SHA1(57ca2b945db36b056d0e40a39456fd8bf9d0a3ec) ) + ROM_LOAD( "epr7107", 0x30000, 0x8000, CRC(8f50ea24) SHA1(781687e202dedca7b72c9bd5b97d9d46fcfd601c) ) - /* These proms are located on the main board. */ ROM_REGION( 0x0300, "palette", 0 ) ROM_LOAD( "epr7113.ic20", 0x00000, 0x0100, CRC(5c0e1360) SHA1(2011b3eef2a58f9bd3f3b1bb9e6c201db85727c2) ) /* palette red component */ ROM_LOAD( "epr7112.ic14", 0x00100, 0x0100, CRC(46fbd351) SHA1(1fca7fbc5d5f8e13e58bbac735511bd0af392446) ) /* palette green component */ @@ -3401,88 +3329,48 @@ ROM_START( shtngmst1 ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "epr5317.ic37", 0x00000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* N82S129AN */ - /* These pld's are located on the main board. */ - ROM_REGION( 0x0618, "plds", 0 ) + ROM_REGION( 0x0400, "plds", 0 ) ROM_LOAD( "315-5137.bin", 0x00000, 0x0104, CRC(6ffd9e6f) SHA1(a60a3a2ec5bc256b18bfff0fec0172ee2e4fd955) ) /* TI PAL16R4A-2CN Located at IC10 */ ROM_LOAD( "315-5138.bin", 0x00000, 0x0104, CRC(dd223015) SHA1(8d70f91b118e8653dda1efee3eaea287ae63809f) ) /* TI PAL16R4ACN Located at IC11 */ - ROM_LOAD( "315-5139.bin", 0x00000, 0x0104, NO_DUMP ) /* CK2605 located at IC50 */ - ROM_LOAD( "315-5155.bin", 0x00000, 0x0104, NO_DUMP ) /* Located at IC7 */ - ROM_LOAD( "315-5155.bin", 0x00000, 0x0104, NO_DUMP ) /* Located at IC13 */ - ROM_LOAD( "315-5155.bin", 0x00000, 0x0104, NO_DUMP ) /* Located at IC19 */ ROM_END /* + Shooting Master (SEGA) - Rev A + Year: 1985 + System 2 -Shooting Master (EVG) -Year: 1985 -Manufacturer: E.V.G. SRL Milano made in Italy (Sega license) - -CPU -1x Z8400AB1-Z80ACPU-Y28548 (main board) -1x iC8751H-88-L5310039 (main board) -1x AMD P8255A-8526YP (main board) -1x SEGA 315-5012-8605P5 (main board) -1x SEGA 315-5011-8549X5 (main board) -1x SEGA 315-5049-8551PX (main board) -1x SEGA 315-5139-8537-CK2605-V-J (main board) -1x oscillator 20.000MHz (main board) -1x SYS Z8400AB1-Z80ACPU-Y28535 (upper board) -1x NEC D8255AC-2 (upper board) -1x oscillator 4.9152MHz (upper board) - -ROMs -1x HN27256G-25 (7043)(main board close to Z80) -2x HN27256G-25 (7101-7102)(main board close to C8751) -3x HN27256G-25 (7040-7041-7042)(main board close to 315-5049) -2x PAL16R4A (315-5137 and 315-5138) -1x HN27256G-25 (7100)(upper board close to oscillator) -7x HN27256G-25 (7104 to 7110)(upper board close to Z80 and 8255) - -7040.4 = epr7040 Shooting Master -7041.5 = epr7041 Shooting Master -7042.6 = epr7042 Shooting Master -7043.126 = epr7043 Shooting Master -7100.18 NO MATCH -7101.91 = epr7101 Shooting Master -7102.92 = epr7102 Shooting Master -7104.20 = epr7104 Shooting Master -7105.21 = epr7105 Shooting Master -7106.22 = epr7106 Shooting Master -7107.23 = epr7107 Shooting Master -7108.24 = epr7108 Shooting Master -7109.25 = epr7109 Shooting Master -7110.26 = epr7110 Shooting Master -8751.74.bad.dump NO MATCH -pal16r4a(315-5137).jed NOT A ROM --> converted into bin format on 20060915 -pal16r4a(315-5138).jed = pal16r4a.ic9 Choplifter - = pal16r4a.ic9 Choplifter (bootleg) - -this set seems to hang sometimes, is it bad, it could be hacked and failing checks hidden in the game. - + Main Board 834-5719 + Light Gun Board? 834-5720 */ -ROM_START( shtngmsta ) +ROM_START( shtngmstu ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "7100.18", 0x00000, 0x8000, CRC(268ecb1d) SHA1(a9274c9718f7244235cc6df76331d6a0b7e4e4c8) ) // different.. + /* This rom is located on the daughter board. */ + ROM_LOAD( "epr7100a.ic18", 0x00000, 0x8000, BAD_DUMP CRC(661f0b6e) SHA1(a1d064839c95d8a6f6d89b0894259f666d637ec4) ) + /* These roms are located on the main board. */ ROM_LOAD( "epr7101.ic91", 0x10000, 0x8000, CRC(ebf5ff72) SHA1(13ae06e3a81cf00b80ec939d5baf30143d61d480) ) ROM_LOAD( "epr7102.ic92", 0x18000, 0x8000, CRC(c890a4ad) SHA1(4b59d37902ace3a69b380ff40652ee37c85f0e9d) ) + /* This rom is located on the main board. */ ROM_REGION( 0x10000, "soundcpu", 0 ) ROM_LOAD( "epr7043.ic126", 0x0000, 0x8000, CRC(99a368ab) SHA1(a9451f39ee2613e5c3e2791d4d8d837b4a3ab666) ) + /* These roms are located on the main board. */ ROM_REGION( 0x18000, "tiles", 0 ) ROM_LOAD( "epr7040.ic4", 0x00000, 0x8000, CRC(f30769fa) SHA1(366c1fbe4e1c8943b209f6c831c9a6b7e4372105) ) ROM_LOAD( "epr7041.ic5", 0x08000, 0x8000, CRC(f3e273f9) SHA1(b8715c528299dc1e4f0c19c50d91ca9861a423a1) ) ROM_LOAD( "epr7042.ic6", 0x10000, 0x8000, CRC(6841c917) SHA1(6553843eea0131eb7b5a9aa29dddf641e41d8cc3) ) + /* These roms are located on the daughter board. */ ROM_REGION( 0x40000, "sprites", ROMREGION_ERASEFF ) - ROM_LOAD( "epr7110", 0x00000, 0x8000, CRC(5d1a5048) SHA1(d1626ab1981080451c912df7e4ad7f76c0cb3459) ) - ROM_LOAD( "epr7106", 0x08000, 0x8000, CRC(ae7ab7a2) SHA1(153691e468d29d21b95f1fbffb6896a3140d7e14) ) - ROM_LOAD( "epr7108", 0x10000, 0x8000, CRC(816180ac) SHA1(a59670ec77d4359041ebf12dae5b74add55d82ac) ) - ROM_LOAD( "epr7104", 0x18000, 0x8000, CRC(84a679c5) SHA1(19a21b1b33fc215f606093bfd61d597e4bd0b3d0) ) - ROM_LOAD( "epr7109", 0x20000, 0x8000, CRC(097f7481) SHA1(4d93ea01b811af1cd3e136116625e4b8e06358a2) ) - ROM_LOAD( "epr7105", 0x28000, 0x8000, CRC(13111729) SHA1(57ca2b945db36b056d0e40a39456fd8bf9d0a3ec) ) - ROM_LOAD( "epr7107", 0x30000, 0x8000, CRC(8f50ea24) SHA1(781687e202dedca7b72c9bd5b97d9d46fcfd601c) ) + ROM_LOAD( "epr7110.ic26", 0x00000, 0x8000, CRC(5d1a5048) SHA1(d1626ab1981080451c912df7e4ad7f76c0cb3459) ) + ROM_LOAD( "epr7106.ic22", 0x08000, 0x8000, CRC(ae7ab7a2) SHA1(153691e468d29d21b95f1fbffb6896a3140d7e14) ) + ROM_LOAD( "epr7108.ic24", 0x10000, 0x8000, CRC(816180ac) SHA1(a59670ec77d4359041ebf12dae5b74add55d82ac) ) + ROM_LOAD( "epr7104.ic20", 0x18000, 0x8000, CRC(84a679c5) SHA1(19a21b1b33fc215f606093bfd61d597e4bd0b3d0) ) + ROM_LOAD( "epr7109.ic25", 0x20000, 0x8000, CRC(097f7481) SHA1(4d93ea01b811af1cd3e136116625e4b8e06358a2) ) + ROM_LOAD( "epr7105.ic21", 0x28000, 0x8000, CRC(13111729) SHA1(57ca2b945db36b056d0e40a39456fd8bf9d0a3ec) ) + ROM_LOAD( "epr7107.ic23", 0x30000, 0x8000, CRC(8f50ea24) SHA1(781687e202dedca7b72c9bd5b97d9d46fcfd601c) ) + /* These proms are located on the main board. */ ROM_REGION( 0x0300, "palette", 0 ) ROM_LOAD( "epr7113.ic20", 0x00000, 0x0100, CRC(5c0e1360) SHA1(2011b3eef2a58f9bd3f3b1bb9e6c201db85727c2) ) /* palette red component */ ROM_LOAD( "epr7112.ic14", 0x00100, 0x0100, CRC(46fbd351) SHA1(1fca7fbc5d5f8e13e58bbac735511bd0af392446) ) /* palette green component */ @@ -3491,9 +3379,14 @@ ROM_START( shtngmsta ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "epr5317.ic37", 0x00000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* N82S129AN */ - ROM_REGION( 0x0400, "plds", 0 ) + /* These pld's are located on the main board. */ + ROM_REGION( 0x0618, "plds", 0 ) ROM_LOAD( "315-5137.bin", 0x00000, 0x0104, CRC(6ffd9e6f) SHA1(a60a3a2ec5bc256b18bfff0fec0172ee2e4fd955) ) /* TI PAL16R4A-2CN Located at IC10 */ ROM_LOAD( "315-5138.bin", 0x00000, 0x0104, CRC(dd223015) SHA1(8d70f91b118e8653dda1efee3eaea287ae63809f) ) /* TI PAL16R4ACN Located at IC11 */ + ROM_LOAD( "315-5139.bin", 0x00000, 0x0104, NO_DUMP ) /* CK2605 located at IC50 */ + ROM_LOAD( "315-5155.bin", 0x00000, 0x0104, NO_DUMP ) /* Located at IC7 */ + ROM_LOAD( "315-5155.bin", 0x00000, 0x0104, NO_DUMP ) /* Located at IC13 */ + ROM_LOAD( "315-5155.bin", 0x00000, 0x0104, NO_DUMP ) /* Located at IC19 */ ROM_END @@ -4574,9 +4467,9 @@ ROM_END * *************************************/ -static DRIVER_INIT( bank00 ) { i8751_run = NULL; videomode_custom = NULL; } -static DRIVER_INIT( bank44 ) { i8751_run = NULL; videomode_custom = bank44_custom_w; } -static DRIVER_INIT( bank0c ) { i8751_run = NULL; videomode_custom = bank0c_custom_w; } +static DRIVER_INIT( bank00 ) { videomode_custom = NULL; } +static DRIVER_INIT( bank44 ) { videomode_custom = bank44_custom_w; } +static DRIVER_INIT( bank0c ) { videomode_custom = bank0c_custom_w; } static DRIVER_INIT( regulus ) { DRIVER_INIT_CALL(bank00); regulus_decode(machine, "maincpu"); } static DRIVER_INIT( mrviking ) { DRIVER_INIT_CALL(bank00); mrviking_decode(machine, "maincpu"); } @@ -4716,14 +4609,19 @@ static DRIVER_INIT( bootlegb ) static DRIVER_INIT( choplift ) { + UINT8 *mcurom = memory_region(machine, "mcu"); + + /* the ROM dump we have is bad; the following patches make it work */ + mcurom[0x100] = 0x55; /* D5 in current dump */ + mcurom[0x27b] = 0xfb; /* F2 in current dump */ + mcurom[0x2ff] = 0xff - 9; /* fix up checksum; means there's still something incorrect */ + DRIVER_INIT_CALL(bank0c); - i8751_run = choplift_i8751_run; } -static DRIVER_INIT( shtngmst1 ) +static DRIVER_INIT( shtngmst ) { const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO); - memory_install_write8_handler(space, 0x10, 0x10, 0x00, 0x00, mcuenable_hack_w); memory_install_read_port_handler(space, 0x12, 0x12, 0x00, 0x00, "TRIGGER"); memory_install_read_port_handler(space, 0x18, 0x18, 0x00, 0x03, "18"); memory_install_read_port_handler(space, 0x1c, 0x1c, 0x00, 0x02, "GUNX"); @@ -4731,17 +4629,6 @@ static DRIVER_INIT( shtngmst1 ) DRIVER_INIT_CALL(bank0c); } -static DRIVER_INIT( shtngmst ) -{ - UINT8 *rom = memory_region(machine, "maincpu"); - int addr; - - // this is not right, but works for a decent amount of the data - for (addr = 0; addr < 0x8000; addr++) - rom[addr] ^= 0x04; - DRIVER_INIT_CALL(shtngmst1); -} - /************************************* @@ -4809,12 +4696,12 @@ GAME( 1986, gardia, 0, sys1pio, gardia, gardia, ROT270, "Sega / GAME( 1986, brain, 0, sys1pio, brain, bank44, ROT0, "Coreland / Sega", "Brain", GAME_SUPPORTS_SAVE ) /* System 2 */ -GAME( 1985, choplift, 0, sys2rowm, choplift, choplift, ROT0, "Sega", "Choplifter (8751 315-5151)", GAME_UNEMULATED_PROTECTION | GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) +GAME( 1985, choplift, 0, sys2rowm, choplift, choplift, ROT0, "Sega", "Choplifter (8751 315-5151)", GAME_SUPPORTS_SAVE ) GAME( 1985, chopliftu, choplift, sys2row, choplift, bank0c, ROT0, "Sega", "Choplifter (unprotected)", GAME_SUPPORTS_SAVE ) GAME( 1985, chopliftbl, choplift, sys2row, choplift, bank0c, ROT0, "bootleg", "Choplifter (bootleg)", GAME_SUPPORTS_SAVE ) -GAME( 1985, shtngmst, 0, sys2m, shtngmst, shtngmst, ROT0, "Sega", "Shooting Master (Rev A, 8751 315-5159a)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) -GAME( 1985, shtngmst1, shtngmst, sys2m, shtngmst, shtngmst1,ROT0, "Sega", "Shooting Master (8751 315-5159)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) -GAME( 1985, shtngmsta, shtngmst, sys2, shtngmst, shtngmst1,ROT0, "Sega [EVG]", "Shooting Master (EVG, 8751 315-5159)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) +GAME( 1985, shtngmst, 0, sys2m, shtngmst, shtngmst, ROT0, "Sega", "Shooting Master (8751 315-5159)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) +GAME( 1985, shtngmste, shtngmst, sys2m, shtngmst, shtngmst, ROT0, "Sega [EVG]", "Shooting Master (EVG, 8751 315-5159a)", GAME_SUPPORTS_SAVE ) +GAME( 1985, shtngmstu, shtngmst, sys2, shtngmst, shtngmst, ROT0, "Sega", "Shooting Master (unprotected)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) GAME( 1986, gardiab, gardia, sys2, gardia, gardiab, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) GAME( 1986, wboysys2, wboy, sys2, wboysys2, wboysys2, ROT0, "Sega (Escape license)", "Wonder Boy (system 2)", GAME_SUPPORTS_SAVE ) GAME( 1987, tokisens, 0, sys2, tokisens, bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index c8a850eb8c4..1d2a3febe1c 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -3524,8 +3524,8 @@ V-V TP-027 DRIVER( sscandal ) /* 834-5755 (c) 1985 Coreland / Sega (S1) */ DRIVER( myherok ) /* 834-5755 (c) 1985 Coreland / Sega (S1) */ DRIVER( shtngmst ) /* 834-5719/5720 (c) 1985 (S2) */ - DRIVER( shtngmst1 ) /* 834-5719/5720 (c) 1985 (S2) */ - DRIVER( shtngmsta ) /* 834-5719/5720 (c) 1985 (S2) */ + DRIVER( shtngmste ) /* 834-5719/5720 (c) 1985 (S2) */ + DRIVER( shtngmstu ) /* 834-5719/5720 (c) 1985 (S2) */ DRIVER( choplift ) /* 834-5795 (c) 1985, (c) 1982 Dan Gorlin (S2) */ DRIVER( chopliftu ) /* 834-5795 (c) 1985, (c) 1982 Dan Gorlin (S2) */ DRIVER( chopliftbl )/* bootleg (S2) */ |