Releases: mstan/MarioTennisVirtualBoyRecomp
Release list
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.