summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit00c5f34211241e2d3dcaa2d93000ecb1585aa225 (patch)
tree1d158bb0fd03931b279269f992d3121c44aa1b94
parenta95bed239b34c8c873a0b7f35a7b9ab22b3d7f5f (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.c10
-rw-r--r--src/mame/drivers/system1.c503
-rw-r--r--src/mame/mamedriv.c4
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) */