- --
Viewing Issue Advanced Details
ID | Category [?] | Severity [?] | Reproducibility | Date Submitted | Last Update |
---|---|---|---|---|---|
03476 | Crash/Freeze | Critical (emulation) | Always | Oct 15, 2009, 21:11 | May 15, 2010, 23:13 |
Tester | M.A.S.H. | View Status | Public | Platform | MAME (Self-compiled) |
Assigned To | AWJ | Resolution | Fixed | OS | Windows XP (32-bit) |
Status [?] | Resolved | Driver | |||
Version | 0.134u3 | Fixed in Version | 0.138u1 | Build | Normal |
Fixed in Git Commit | Github Pull Request # | ||||
Summary | 03476: quartet, quarteta, dumpmtmt: Games do not start. | ||||
Description |
Quartet (Rev A, 8751 315-5194) and clone Quartet (8751 315-5194) doesn't start since MAME 0.131u3 (black screen). WhatsNew - 0.131u3: Aaron Giles and Dr. Decapitator added/hooked MCU dump in clone Quartet 2 (8751 317-0010). In both games the i8751 MCU is missing and there are changes in the source drivers\segas16a.c line 1035 from: static ADDRESS_MAP_START( mcu_io_map, ADDRESS_SPACE_DATA, 8 ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_END to 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) AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READNOP AM_WRITE(mcu_control_w) AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READNOP /* read during jb int0 */ ADDRESS_MAP_END These additional changes doesn't work for both Quartet games. I added a new MACHINE_DRIVER_START without the 'mcu_io_map' entry and changed quartet and quarteta to use it. This works fine. >>>> static MACHINE_DRIVER_START( system16a_no8751 ) MDRV_IMPORT_FROM(system16a) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_VBLANK_INT("screen", i8751_main_cpu_vblank) MDRV_CPU_ADD("mcu", I8751, 8000000) MDRV_CPU_VBLANK_INT("screen", mcu_irq_assert) MACHINE_DRIVER_END GAME( 1986, quartet, 0, system16a_no8751, quartet, quartet, ROT0, "Sega", "Quartet (Rev A, 8751 315-5194)", GAME_UNEMULATED_PROTECTION ) GAME( 1986, quarteta, quartet, system16a_no8751, quartet, quartet, ROT0, "Sega", "Quartet (8751 315-5194)", GAME_UNEMULATED_PROTECTION ) |
||||
Steps To Reproduce | |||||
Additional Information | |||||
Github Commit | |||||
Flags | |||||
Regression Version | 0.131u3 | ||||
Affected Sets / Systems | quartet, quarteta, dumpmtmt | ||||
Attached Files
|
|||||
Relationships
There are no relationship linked to this issue. |
Notes
3
No.05074
etabeta Developer
Oct 27, 2009, 21:49
|
I'm not sure this is a bug: isn't the UNEMULATED_PROTECTION flag set exactly because the MCU is not emulated yet? |
---|---|
No.05075
Tafoid Administrator
Oct 27, 2009, 22:39
|
The flag was added, yes. I'm not sure if Aaron intended this set and clone to become unplayable when it used to work before the emu was needed. It was simulated before, I think. |
No.05986
AWJ Developer
Apr 17, 2010, 23:18
edited on: Apr 17, 2010, 23:36 |
dumpmtmt has the same problem. This is happening because even though the i8751 MCU is disabled, it writes to each of its special I/O ports during its CPU_RESET and in the case of segas16a.c this causes the 68000 RESET line to get set and never cleared: static CPU_RESET( mcs51 ) { (snip) /* set the port configurations to all 1's */ SET_P3(0xff); SET_P2(0xff); SET_P1(0xff); SET_P0(0xff); To fix the problem, two things need to be done: First, either the MAME core needs to be made not to call CPU_RESET functions for CPUs that are disabled, or individual CPU cores such as mcs51 have to be made to check whether they are disabled and if they are, not call any functions at reset that can affect the machine at large. I'm not sure which is the right approach--Aaron? Second, in drivers that have an i8751 that needs to be disabled (because we don't have a dump and are using simulation) the i8751 needs to be disabled at the driver level using MDRV_CPU_FLAGS(CPU_DISABLE) rather than at runtime using cpu_suspend(). Suspending the CPU at runtime doesn't happen until after the various reset functions have already been called, so even if one of the fixes above is applied it won't help quartet or dumpmtmt. |