diff options
| author | 2010-04-17 17:11:10 +0000 | |
|---|---|---|
| committer | 2010-04-17 17:11:10 +0000 | |
| commit | ac631caa2368971e1ec3655e2ab79b3b6955efad (patch) | |
| tree | f7cd1861e6713abc33c82f1256fc3b0d8cfb3d7c /src | |
| parent | 3f2d7f957bfbcd8d23aa227ff265e3b05026cff9 (diff) | |
mpu4drvr.c: Fixed 68000 device resets [Phil Bennett]
Diffstat (limited to 'src')
| -rw-r--r-- | src/mame/drivers/mpu4drvr.c | 90 |
1 files changed, 51 insertions, 39 deletions
diff --git a/src/mame/drivers/mpu4drvr.c b/src/mame/drivers/mpu4drvr.c index 34b99dd1a71..f3f9dc80b45 100644 --- a/src/mame/drivers/mpu4drvr.c +++ b/src/mame/drivers/mpu4drvr.c @@ -167,7 +167,13 @@ IRQ line connected to CPU C000-FFFF | R | D D D D D D D D | ROM -----------+---+-----------------+-------------------------------------------------------------------------- TODO: - - MPU4 Master clock value taken from schematic, but 68k value is not. + - Correctly implement characteriser protection for each game. + - Hook up trackball control for The Crystal Maze and The Mating Game + - Finish AVDC implementation to support split-screen interrupts (needed for mid-screen palette changes) + - Hook up OKIM6376 sound in The Mating Game + - Get the BwB games running + - Find out what causes the games to reset in service mode (see jump taken at CPU1:c8e8) + - Deal 'Em lockouts vary on certain cabinets (normally connected to AUX2, but not there?) - Deal 'Em has bad tiles (apostrophe, logo, bottom corner), black should actually be transparent to give black on green. @@ -1120,31 +1126,31 @@ static READ16_HANDLER( ef9369_r ) static INPUT_PORTS_START( crmaze ) PORT_START("ORANGE1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("00") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("01") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("02") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("03") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("04") - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("05") - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("06") - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("07") +// PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("00") +// PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("01") +// PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("02") +// PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("03") +// PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("04") +// PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("05") +// PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("06") +// PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("07") PORT_START("ORANGE2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("08") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("09") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("11") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("12") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("13") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("14") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("200p?") +// PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("08") +// PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("09") +// PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10") +// PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("11") +// PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("12") +// PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("13") +// PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("14") +// PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("200p?") PORT_START("BLACK1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("16") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("17") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("18") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("19") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("20") +// PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("16") +// PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("17") +// PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("18") +// PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("19") +// PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("20") PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Test Switch") PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Refill Key") PORT_CODE(KEYCODE_R) PORT_TOGGLE PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Door Switch?") PORT_TOGGLE @@ -1226,10 +1232,10 @@ static INPUT_PORTS_START( crmaze ) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SPECIAL) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")PORT_IMPULSE(5) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")PORT_IMPULSE(5) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")PORT_IMPULSE(5) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")PORT_IMPULSE(5) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p") INPUT_PORTS_END static INPUT_PORTS_START( mating ) @@ -1271,7 +1277,7 @@ static INPUT_PORTS_START( mating ) PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Red") PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Getout Yellow") PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Getout Red")/* Labelled Escape on cabinet */ - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("100p Service?")PORT_IMPULSE(100) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("100p Service?") PORT_START("DIL1") PORT_DIPNAME( 0x01, 0x00, "DIL101" ) PORT_DIPLOCATION("DIL1:01") @@ -1340,10 +1346,10 @@ static INPUT_PORTS_START( mating ) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SPECIAL) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")PORT_IMPULSE(5) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")PORT_IMPULSE(5) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")PORT_IMPULSE(5) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")PORT_IMPULSE(5) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p") INPUT_PORTS_END @@ -1479,15 +1485,20 @@ INPUT_PORTS_END /* OKI M6376 (for Mating Game) FIXME */ static READ16_DEVICE_HANDLER( oki_r ) { - return okim6376_r(device, 0); + return mame_rand(device->machine); } static WRITE16_DEVICE_HANDLER( oki_w ) { - okim6376_w(device, 0, data & 0xff); + // 0x10: .xxx xxxx OKIM6736 I6-I0 + // 0x12: .... ...x OKIM6736 /ST } - +static void video_reset(running_device *device) +{ + devtag_get_device(device->machine, "6840ptm_68k")->reset(); + devtag_get_device(device->machine, "acia6850_1")->reset(); +} /* machine start (called only once) */ static MACHINE_START( mpu4_vid ) @@ -1501,15 +1512,16 @@ static MACHINE_START( mpu4_vid ) Mechmtr_init(8); /* setup 4 reels (for hybrid machines) */ - stepper_config(machine, 0, &barcrest_reel_interface); stepper_config(machine, 1, &barcrest_reel_interface); stepper_config(machine, 2, &barcrest_reel_interface); stepper_config(machine, 3, &barcrest_reel_interface); /* setup the standard oki MSC1937 display */ - ROC10937_init(0, MSC1937, 0); + + /* Hook the reset line */ + m68k_set_reset_callback(devtag_get_device(machine, "video"), video_reset); } static MACHINE_RESET( mpu4_vid ) @@ -1782,8 +1794,8 @@ static MACHINE_DRIVER_START( mpu4_vid ) /* Present on all video cards */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SOUND_ADD("saa", SAA1099, 8000000) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) + MDRV_SOUND_ROUTE(0, "lspeaker", 0.5) + MDRV_SOUND_ROUTE(1, "rspeaker", 0.5) MDRV_ACIA6850_ADD("acia6850_0", m6809_acia_if) MDRV_ACIA6850_ADD("acia6850_1", m68k_acia_if) @@ -1792,7 +1804,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( mating ) MDRV_IMPORT_FROM( mpu4_vid ) - MDRV_SOUND_ADD("oki", OKIM6376, 4000000) //? + MDRV_SOUND_ADD("oki", OKIM6376, 64000) //? MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_DRIVER_END |
