| ▲ | deadxwarrior 4 hours ago | |
Thanks:) it isn't cycle-accurate, and for the games i have tried so far it hasnt needed to be. EE code is translated AOT, and each block subtracts its instruction count from a cycle budget. Interrupts, timers, DMA and vblank are events on one emulated clock, delivered at block boundaries, so the order is right and the timing is approximate. Most games sync on interrupts and semaphores rather than cycle counts. When one does depend on timing, it shows up as a specific bug i can fix.for example, ran off an HBLANK timer I had set to the PAL period on an NTSC game. VU programs are not really part of the executable; games upload them over DMA. So i record each microprogram the first time its uploaded and compile it aot, and in the browser i JIT any program i havent seen to wasm. The pipeline details games actually observe are modeled: MAC/status/clip flags become visible four instructions late (getting that wrong put blotches on GT4s cars), and PS2 floats, which are nott IEEE (no inf/NaN, clamping instead), are done bit-exact. VU1 runs on its own thread, synced to the EE through the VIF/GIF streams | ||
| ▲ | 1500100900 31 minutes ago | parent [-] | |
Are you sure about bit-exact floats? Can you show where Booth's multiplication is done? | ||