Repository navigation
Releases
Mario's Tennis v0.2.3
All seven characters reach singles and corrected four-player doubles courts with zero fallback. A fresh independent Beetle run matches ten bracket/court/rally/pause checkpoints across nine state/output comparisons.
Uses the shared build helper, whole-function native partitions and updated engine/UI dependencies. The complete production ZIP passes extraction, dependency/hash checks, invalid frame-limit rejection, clean finite exits and 300 native boot frames with zero fallback. TCP debugging and CPU recording are omitted. The optional full-color package remains version 0.2.2 and starts disabled. Tournament completions and complete color-art coverage are outside this pass.
Extract the entire Windows ZIP, run the game executable, select your own extracted supported cartridge and press Play. No ROM is included. Normal player audio is enabled. Keep your settings, saves and installed mods when updating. See the included coverage documentation for scope and reproduction commands.
The final archives were checked to exclude CD Speed and Fast Loading packages. SHA256SUMS.txt covers the ZIP and independently versioned optional packages.
Mario Tennis Recompiled v0.2.2
Mario's Tennis Recompiled now has a Virtual Boy launcher, a ROM-preserving mod ecosystem, and an optional full-color renderer.
Download and play
- Download MarioTennisVirtualBoyRecomp-windows-x64.zip and extract the entire ZIP.
- Run MarioTennisVirtualBoyRecomp.exe and select your own original Mario's Tennis ROM. No ROM is included.
- For color, open Mods, import the included marios-tennis-full-color-0.2.2.vbmod, enable its full-color feature, and press Play. Color is off by default; the original ROM is never modified.
The standalone .vbmod download is the same package included in the ZIP. SHA256SUMS.txt contains hashes for both downloads. This release provides a Windows x64 binary; Linux and macOS build scripts are available in the source tree.
What changed
- Shared recomp-ui launcher integration, persistent settings, controller configuration, and mod management.
- A dedicated black-and-crimson Virtual Boy theme and Mario's Tennis box art with attribution.
- Optional full-color court, characters, portraits, and HUD, using original-art-aware material assignments.
- Additional Mario and Luigi animation coverage, including overhand recovery poses, plus improved Lakitu and scoreboard transparency.
- Production build excludes the game's developer TCP server and missing-pose recorder.
The color mod remains experimental: untested character poses may still need refinement.
Validation
- Fresh production Release build: all 3 CTest tests passed.
- Extracted Windows ZIP: launcher/theme/box art inspected; stock and explicitly enabled color gameplay both started and exited cleanly using only packaged dependencies and Windows system libraries.
- Development color validation: native A/B checks and 14,036 recorded eye-frames across Mario and Luigi routes with no unknown material poses in those routes.
- Package checked for matching executable and dependency revisions, default-off mod manifest, and absence of ROMs, user settings, and developer captures.
Built from game commit 670861ff404683b1987da19b8bd0c0d34b2fd6be, vbrecomp 137ae3b9dce46febc65a21af558b0d95b16e5212, and recomp-ui bca0bcc3949ef6f9bbb6b7b021b1ba50c13db4cb.
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.
Mario's Tennis — Linux (AppImage, initial/experimental)
Initial experimental Linux release — x86_64 AppImage.
Bring your own ROM. Place your legally-dumped Mario's Tennis (.vb) ROM in the same folder as the AppImage; it's auto-detected at launch. No ROM is included.
Run it
chmod +x MariosTennis-x86_64.AppImage
./MariosTennis-x86_64.AppImage # add --appimage-extract-and-run if FUSE is unavailable
Steam Deck / controllers — the AppImage reads the controller natively. In Desktop mode, launch through Gaming Mode (or set a Gamepad controller layout) so face buttons aren't remapped to keyboard keys.
Production build — no debug server / tooling. Early, experimental Linux port; expect rough edges. Source: this repo.
Mario's Tennis v0.1.0 — first VB recompile
First binary release of Mario's Tennis recompiled from the original
Virtual Boy cartridge via the vbrecomp
static V810-to-C recompiler framework. The cart's CPU code is now
native x86-64 Windows; no V810 interpreter at runtime.
What's in the zip
MarioTennisVirtualBoyRecomp.exe— recompiled cart + runtime (~2 MB)SDL2.dll— window / audio / inputREADME.txt— usage + controls
How to run
You need to provide your own Mario's Tennis ROM dump:
- CRC32:
0x7CE7460D - SHA-256:
5dc5e6b5d5f538f56b3b9727db1c7931d9dfe1bbd0743f698897e0fd90e70101 - Size: 524 288 bytes
MarioTennisVirtualBoyRecomp.exe --rom path/to/marios_tennis.vb
The runtime CRC32-verifies the ROM at startup and refuses to run on
mismatch.
Controls
- Keyboard: Arrows = L D-pad, WASD = R D-pad, X/Z = A/B, Q/E = L/R,
Enter/RShift = Start/Select, TAB = turbo, Esc = quit - XInput (Xbox controller, player 1) is also supported
What's verified
- Decoder coverage: 100% (0 unknown encodings across 33 057 walked
instructions) - Dispatch coverage: 100% (no JAL/JR target outside the recompiled set)
- Framebuf diff vs Beetle VB oracle on boot screen: 0/86 016 pixels
differ at zero tolerance - Full match completed without crash
- 77/77 framework Python tests pass
ROM not included. Mario's Tennis is © 1995 Nintendo.
macOS (Apple Silicon) build — MarioTennisVirtualBoyRecomp-macos-arm64.zip
Native arm64 .app (SDL2 bundled, ad-hoc signed). ROM not included.