Viewing Issue Advanced Details Jump to Notes ] model3.cpp
ID Category [?] Severity [?] Reproducibility Date Submitted Last Update
06615 Graphics Major Always Jun 11, 2017, 23:42 11 days ago
Tester john_iv View Status Public Platform MAME (Self-compiled)
Assigned To Resolution Open OS Windows 10 (64-bit)
Status [?] Confirmed   Driver model3.cpp
Version 0.186 Fixed in Version Build 64-bit
Summary 06615: scud: Scud Racer regression, now just a black screen on launch.
Description As before, I use the 'scud' set to benchmark. Phil fixed it a few revs. back when it was crashing. Now however it just displays a black screen when attempting to play (fwiw, the bench results are off too if run as 'mame64.exe scud -bench 90').

http://mametesters.org/view.php?id=6492
Steps To Reproduce 1. mame64 scud

Expected:
Launch scud and display demo.

Actual:
Black screen.
Additional Information
Flags
Regression Version 0.185
Affected Sets / Systems scud
Attached Files
 

- Relationships
related to 06492ResolvedPhil Bennett scud: Crash running scud with -bench 90, regression. 

-  Notes
User avatar
No.13983
Phil Bennett
(Developer)
11 days ago
PPC execution is stuck on this instruction:

FFF00174 mftb r5,tbl


This issue is a side-effect of this change:

"Convert Sega Model 1 Sound Board and Z80-based Digital Sound Board to use proper UART-based serial interfaces"
https://github.com/mamedev/mame/commit/8275551541111567becbee88ff485c1314c85916


The UART introduced a high-frequency clock (500KHz), which has caused the scheduling quanta to be greatly reduced. The mftb instruction requires 100 cycles to execute but due to the way it is handled in the PPC DRC, there are never enough cycles in a scheduling period for it to execute and thus advance to the next instruction.

Moving generate_update_cycles() to the end of the instruction sequence of mftb resolves the issue but I'm not familiar enough with PowerPC or MAME's DRC to be confident that this is the correct fix.
User avatar
No.13984
Phil Bennett
(Developer)
11 days ago
Yeah, that's not correct.

Perhaps all that is required is to change the allow_exception parameter of the early call to generate_update_cycles() to false to allow the instruction to run regardless of the cycles remaining?