Viewing Issue Advanced Details
ID Category [?] Severity [?] Reproducibility Date Submitted Last Update
09228 Misc. Major Always 9 days ago 3 hours ago
Tester M.A.S.H. View Status Public Platform MAME (Self-compiled)
Assigned To cuavas Resolution Fixed OS Windows 32-bit
Status [?] Resolved Driver
Version 0.278 Fixed in Version 0.280GIT Build 32-bit
Fixed in Git Commit 9b26298 Github Pull Request #
Summary 09228: poosho: Broken collision detection with drcbex86
Description Start game. Ball didn't break the bricks. Broken collision detection or hyperstone E1-16 bug?
Steps To Reproduce
Additional Information
Github Commit
Flags 32-bit specific
Regression Version 0.277
Affected Sets / Systems poosho
Attached Files
 
Relationships
There are no relationship linked to this issue.
Notes
9
User avatar
No.23541
Robbbert
Moderator
9 days ago
Seems to work ok. Perhaps you can give an example?
User avatar
No.23542
hap
Developer
8 days ago
Unable to confirm either, on both 0.277 (the one you claim is the regression version) and also on current. Ball breaks the bricks. With either -nodrc or -drc.
User avatar
No.23543
M.A.S.H.
Senior Tester
8 days ago
Didn't test the 64bit version. Changed report to 32bit MAME version. Sorry for that!.
User avatar
No.23545
hap
Developer
8 days ago
Probably a regression with drcbex86.cpp then.
Or, does the bug happen with -nodrc as well?
User avatar
No.23549
M.A.S.H.
Senior Tester
7 days ago
@hap
The 32bit MAME version worked with mame poosho -nodrc
Thx for the info!
User avatar
No.23563
Robbbert
Moderator
3 days ago
I've set it to confirmed, and Vas can decide what he wants to do about it.
User avatar
No.23564
cuavas
Administrator
3 days ago
It’s another case of something that was always broken in the i686 recompiler back-end but wasn’t obviously getting hit by any CPU cores before. Any 64-bit rotate on UML register I1 would nuke the low 32 bits of the result.
User avatar
No.23565
M.A.S.H.
Senior Tester
3 days ago
MAME 32-bit compiled and tested with “Poosho Poosho” – works. Thx hap and Vas!
User avatar
No.23571
cuavas
Administrator
10 hours ago
I really shouldn’t have looked at drcbex86.cpp – there are so many cases where it doesn’t correctly clear the upper half of a register after a 32-bit load, but it also clears the upper half of “hot” registers excessively. Its be_parameter class needs to be reworked to fix this, and it needs to track additional state across instructions. Speaking of which, the way it tracks what memory values it’s got in temporary registers is horrible and needs to be completely changed, too. It’s a hot mess and almost not worth trying to fix. At least x86-64 and AArch64 are in better condition.