v0.2.0 — Accuracy release (correct play speed)
The headline fix: correct play speed
Mario's Tennis previously ran ~2× too fast. It now runs at exactly 50.27 Hz — real Virtual Boy hardware speed. (The windowed runtime paced presents to 50.27 Hz, but the dispatch loop over-advanced emulated cycles per present, so the internal game clock ran roughly double. Delivering interrupts at device-event granularity fixed it — and the same change locked the audio to the oracle.)
Full accuracy burndown (7 axes, validated vs the Beetle/Mednafen VB oracle)
| Area | Result |
|---|---|
| Audio | waveshape NCC 0.09 → 0.98 (STRONG MATCH); tempo drift → 0; band-limited VSU output (Blip) |
| Speed | ~2× fast → 50.27 Hz, 1.000× hardware |
| Video | framebuffer pixel-exact (0/86016) + draw-timing phase-matched (DPSTTS/XPSTTS) |
| CPU | 1.4M instructions match the oracle exactly; latent MUL/DIV emitter bugs (Z-flag, r30 write order, ÷0 trap) fixed + validated |
| Memory | WRAM stays region-lockstep with the oracle through gameplay |
This is a statically recompiled cart (native C compiled from the V810 ROM), not an emulator. Built against vbrecomp framework master @37a2444.