Skip to content

Releases: mstan/MarioTennisVirtualBoyRecomp

Mario Tennis Recompiled v0.2.2

Choose a tag to compare

@mstan mstan released this 08 Sep 18:50

Mario's Tennis Recompiled now has a Virtual Boy launcher, a ROM-preserving mod ecosystem, and an optional full-color renderer.

Download and play

  1. Download MarioTennisVirtualBoyRecomp-windows-x64.zip and extract the entire ZIP.
  2. Run MarioTennisVirtualBoyRecomp.exe and select your own original Mario's Tennis ROM. No ROM is included.
  3. 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)

Choose a tag to compare

@mstan mstan released this 29 Jun 03:48

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)

Choose a tag to compare

@mstan mstan released this 14 Jun 22:10

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

Choose a tag to compare

@mstan mstan released this 21 May 17:33

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 / input
  • README.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.