Skip to content

Releases

v1.5.3

Choose a tag to compare

@mstan mstan released this 01 Nov 02:40

Owner approved all five NES title builds after the final combined technical gate. This release includes the qualified native execution/presentation optimization package. Exact scoped measurements and limitations: https://github.com/mstan/nesrecomp/blob/886692b/docs/validation/2026-10-31-final-campaign-handoff.md

Updated nesrecomp pin, qualified per-title optimization policy and verified Windows runtime dependencies. Final standard-game comparisons are neutral/inconclusive; gains from separate scoped workloads are not attributed to every title.

SHA256 (GumshoeRecomp-windows-x64.zip): 1c22d22df567edb19d59a3f15225cba9245a4fcba4ee0c9c1d15b174f14676bd. No ROM is included; use your own supported dump. Native saves/settings are preserved.

Gumshoe 1.5.2

Choose a tag to compare

@mstan mstan released this 27 Oct 16:55

Updated to NESRecomp 0.4.3 at 721c68c313e729710203f6825e9bcb9042eb5bcc. This Windows x64 build retains the qualified native PPU/APU services and packed PPU path. The combined native-service/HLE/MMC1/expanded-ROM-seed package has a 12.88% median CPU reduction in the matched stock workload. No separate seed-only gain is claimed.

Performance figures describe five alternating 1,200-frame gameplay pairs with independent pre/post baseline controls on the same host, SDL software rendering and emulated/mixed/queued audio through dummy output. Expanded custom-mode timing is unverified; no every-mode performance claim.

All 124 generated C units across the release suite match the qualified generator output. This exact shipping executable passes 720-frame old/new hardware, PCM, picture and current-build save/load replay comparisons, in addition to the earlier full 13-profile feature gate and owner visual approval. Native in-game saves remain separate from disposable build-specific execution snapshots.

One archive contains the game, required runtime libraries and optional mod catalog. No ROM, owner settings or saves are included.

Full validation and measured scope.

Title commit: 867a0091f3e2381d5507df3a95f24acb1b133465.

v1.5.1 - cartridge header compatibility

Choose a tag to compare

@mstan mstan released this 19 Oct 18:26
559f89f

Fixes launcher verification succeeding but Play rejecting equivalent original ROM headers. This build uses the shared cartridge correction and regenerated native code. Legacy iNES, NES 2.0 and multi-region containers are accepted for the matching game data and resolved board; board/RAM/console/program-data checks and qualified regional timing remain enforced. No player setting is required.

Validation: 900-frame native/interpreter/header comparisons and real launcher Play pass. Extracted production ZIPs pass dependency and header-boot checks. Existing UI pin, renderer, enhancements and normal player audio defaults are retained. Automated tests use muted output. These checks cover header/startup regression, not a new complete mechanics audit. Native Linux x86_64 recheck passed under Ubuntu/WSL with system SDL2 selected explicitly: released-source game builds, 900-frame legacy/NES 2.0/multi-region native/interpreter comparisons with matching Windows state hashes and pixels, and real SDL/recomp-ui launcher Play under private Xvfb/software OpenGL. Linux GCC/Clang header contracts and source CLI generation/static-library checks also pass. The published Windows archives are unchanged. Default SDL2 discovery is fixed on current engine/game source branches (mstan/nesrecomp#77). For immutable release-tag source, explicitly set SDL2_DIR to the native system SDL2 CMake package, or build the latest source branch for automatic detection.

Extract the entire Windows ZIP and select your own matching original ROM. USA retail inputs are preferred where available. No ROM, player settings, saves, logs or dumps are included. CD Speed and Fast Loading packages are absent. SHA256SUMS.txt covers every archive.

Source changes: #2.

v1.5.0 — adaptive widescreen (experimental)

Choose a tag to compare

@mstan mstan released this 05 Oct 20:25

Adds an experimental, opt-in adaptive widescreen mod. Enable Widescreen (Experimental) in the launcher's or in-game Mods screen, then pick Fit window, 16:9, 21:9 or 32:9.

  • The stage extends past both screen edges. The ground ahead is built by the game's own level code; the ground already passed comes from what the game drew.
  • Balloons and other objects crossing the screen edges are drawn whole, and ones that leave on the left drift off into the margin.
  • Camera: stay inside the stage edges (default) or keep the native screen centered. Timer and shots: screen edge (default) or original position.
  • Zapper: the mouse aims at what you see, wherever the native screen sits. Shots in the margins miss, like aiming away from a TV; only targets on the native screen can be hit. The crosshair follows the mouse everywhere.
  • Off by default. With it off, the game runs exactly as v1.4.0; with it on, game logic and timing are unchanged.

Validation: automated checks of the stock machine state, the extended scenery in all three stage banks at every aspect, long played routes, save states, Mods settings, Fit resizing, and Zapper aim and crosshair. Not yet covered by automated play: the end of each stage and every stage of a full run. Details: docs/WIDESCREEN.md.

The archive contains no ROM or personal save data. Select your original ROM at first launch.

Source: master at a861e2f.

v1.4.0 — cycle CPU default

Choose a tag to compare

@mstan mstan released this 05 Oct 06:06

The cycle CPU backend is now the default. The former backend remains available through explicit source-build selection.

Preserves mouse aiming, crosshair and timed Zapper shots/jumping. The owner playtest passed. Adaptive widescreen is a separate follow-up, excluded from this release.

Validation covers the recorded short owner playtests and focused automated checks. Full-game completion and new Linux/macOS runtime qualification are not claimed by this Windows release.

Game archives contain no ROM or personal save data. Select the matching original ROM at first launch. Legacy binary save states require the retained legacy backend; they do not load in cycle mode. Existing cartridge battery/password progress is preserved through the documented storage/import workflow.

Source default: master at c2fe4ad8b8d03480486e1379b3f7a151a65c765d.

v1.3 — Gumshoe (stack-idiom + flicker fixes)

Choose a tag to compare

@mstan mstan released this 01 Jul 07:04

Native PC build of Gumshoe (NES, Zapper) via NESRecomp.

Changes since v1.2

  • Stack-idiom fix: the recompiler now correctly models the 6502 "PLA/PLA/RTS = return two levels up" abort-caller idiom (9 sites in Gumshoe), preventing stack-pointer underflow.
  • Flicker fix: suppressed a spurious sprite-0 scroll split driven by the Zapper's heavy $2002 polling that jittered the platforms/ground frame-to-frame.

Install

  • Windows x64. Unzip and run GumshoeRecomp.exe. No ROM included — select your legally-obtained Gumshoe (USA/Europe) ROM on first launch.
  • Zapper: mouse mode is enabled — aim with the mouse, left-click to shoot.
  • Controls rebindable in keybinds.ini; F5 turbo, F6/F7 save/load state, F11/Alt+Enter fullscreen.

v1.2 — HUD fix (timer + shot counter render)

Choose a tag to compare

@mstan mstan released this 05 May 03:46

Status

Gumshoe is now fully playable end-to-end with HUD rendering correctly.

What changed since v1.1

Pins nesrecomp at 47b4ab7 which closes the static-JSR side of the GxROM bank-pairing fix:

  • GxROM static JSR to \$C000+ now resolves to the source's paired upper bank (bank | 1) rather than the recompiler's fixed_bank. Previously every JSR from a low-half bank to \$C000+ linked to bank 7's body, so Gumshoe's per-frame HUD render call (bank00:\$82B5: JSR \$D158) executed bank 7's button-state EOR diff loop instead of bank 1's HUD render.

This mirrors the call_by_address pairing fix in nesrecomp 49f9fe3 — that one fixed dynamic dispatch, this one fixes static JSR.

What this restores

  • Top-center timer "M:SS" countdown (sprite slots 56-59 at Y=\$10)
  • Top-right shot counter "=NNN" (sprite slots 60-63 at Y=\$18)
  • Top-left portrait icon

Validation

  • Visual: HUD elements render and update during gameplay.
  • Smoke matrix: regenerated Faxanadu (mapper 4), Zelda/Metroid/Yoshi (mapper 1), Duck Hunt (mapper 0) against the new nesrecomp tip — generated *_full.c SHA-256 byte-identical pre/post-fix (none are mapper 66, so the fix's else branch preserves original behavior).
  • dispatch_miss_info reports zero misses during gameplay.

Install

Download `GumshoeNESRecomp-windows-x64.zip`, extract, run `GumshoeRecomp.exe`, select your `Gumshoe (USA, Europe)` ROM when prompted.

ROM not included — provide your own dump of the original cartridge.


macOS (Apple Silicon) build — GumshoeNESRecomp-macos-arm64.zip

Native arm64 .app (SDL2 bundled, ad-hoc signed). ROM not included.

Status: Light-gun (Zapper) game: aim with the mouse, left-click to shoot (enabled by default).

v1.1 — Playable end-to-end (HUD cosmetic bug)

Choose a tag to compare

@mstan mstan released this 05 May 02:41

Status

Gumshoe boots past the title screen and is playable end-to-end with mouse-as-Zapper input.

What changed since v1.0

This release pins nesrecomp at 07d1130 which adds two GxROM (Mapper 66) recompiler fixes that unlock playable gameplay:

  • GxROM per-window NMI vector dispatch. Each 32KB window has its own $FFFA-$FFFB. Previously the recompiler picked one window's vector at codegen time and used it for every NMI fire — which skipped OAM DMA + register saves on every frame for Gumshoe (boots into window 0 with NMI=$8031 but the recompiler defaulted to window 3's $8047).
  • GxROM-aware dispatch-table size scan. The inline_dispatch table-size scanner was looking up $C000+ targets in fixed_bank instead of the paired upper bank, truncating Gumshoe's 24-entry game-mode table at 18 entries — six gameplay states never executed.

Known issue

  • Top-left HUD elements (timer, shot counter) do not render. Gameplay itself is fully functional; this is cosmetic. Tracked in ISSUES.md.

Install

Download GumshoeNESRecomp-windows-x64.zip, extract, run GumshoeRecomp.exe, select your Gumshoe (USA, Europe) ROM when prompted.

ROM not included — provide your own dump of the original cartridge.

Gumshoe — 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 Gumshoe (.nes) ROM in the same folder as the AppImage; it's auto-detected at launch. No ROM is included.

Run it

chmod +x Gumshoe-x86_64.AppImage
./Gumshoe-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.