Viewing Issue Advanced Details
ID Category [?] Severity [?] Reproducibility Date Submitted Last Update
06615 Graphics Major Always Jun 11, 2017, 23:42 Jul 17, 2017, 01:12
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
2
User avatar
No.13983
Phil Bennett
Developer
Jul 17, 2017, 00:50
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
Jul 17, 2017, 01:12
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?