Releases: mstan/GumshoeNESRecomp
Release list
v1.3 — Gumshoe (stack-idiom + flicker fixes)
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)
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'sfixed_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.cSHA-256 byte-identical pre/post-fix (none are mapper 66, so the fix's else branch preserves original behavior). dispatch_miss_inforeports 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)
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=$8031but 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 infixed_bankinstead 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)
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.