Closed dmrlawson closed 4 years ago
This is a JAL instruction it makes the program unconditionally jumps with a delay of one instruction. The address of the instruction after the delay slot is placed in the link register r31. The problem here is that the delay slot is using r31 as source register. I don't think that's valid, did you test on real hardware?
I'm not able to test on real hardware, but I'm under the impression that it works. The rom is from here: https://64dd.org/dumps_p.html
Japanese or English version?
I've been trying the English one
ok thanks I'll check
Just for the record here's the disassembly of the recompiled block: 0x80757690.txt
The new dynarec fails to recompile the following because r31 is used as the source register of the JAL delay slot instruction:
So I tested a bit more. If I compile without DEBUG=1
I can run some of the other cartridge ports (Simcity 64 and Mario Artist Paint Studio), but with DEBUG=1
the asserts are checked and it fails with the same error. I'm not sure what's different about F-Zero X but it seems like maybe the JAL instruction is not an issue, but F-Zero X does something else which results in it getting stuck.
What would you suggest trying next?
If the assert is triggered and the game works nevertheless it's just luck trust me ;-)
I'd like to investigate further but I'm not sure where to start. I understand that this ROM works on hardware but I don't have a flash cart to test with. It looks to me like it gets stuck waiting for something but I'm not sure what that could be.
I think this works now
Hi,
I'm trying to get the F-Zero X Expansion kit cartridge hack to work the new dynarec. It works with the old one but not the new one.
If I compile mupen64plus-core with
DEBUG=1
it fails on an assert:I added a log line just before the assert:
and saw that
rs1[i+1]
equals 31, making it failIf I understand correctly this is a BEQL instruction, but I don't understand why the operands cannot be 31, is this a special value if there's an overflow?
If I compile without
DEBUG=1
it gets a bit further but seems to get stuck in a loop somewhere.I'm not sure how to debug further, any help would be greatly appreciated.