Skip to content

Releases: mstan/GumshoeNESRecomp

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.