Skip to content

Releases: danielgatis/go-headless-nes

Release list

v1.0.4

Choose a tag to compare

@danielgatis danielgatis released this 26 Jul 00:40
feat: MapperInfo bank maps for every board via a generic probe

Replace the per-board BankMapper (six mappers) with a generic
mapper.ProbeBankMap that covers essentially all of them. The shared bank
helper `window` becomes the base method `win`, which records the ROM offset
and window size it resolves while a per-board probe flag is set; ProbeBankMap
snapshots the board, reads one byte per CPU/PPU window to capture the banks,
then restores it, so a read side effect (an MMC2/MMC4 CHR latch) leaves no
net change. The probe state lives on the board, so probing one console never
races another.

NROM and CNROM route their fixed PRG through `win` so the probe sees it too.
A window a board maps without the helper reports -1 (honest "unknown").

Across the 303 supported mapper configurations the probe reports PRG banks
for 302 and CHR banks for 291, with none panicking. The `win` rename touches
every board's hot read path; benchmarked at ~1.49 ms/frame, unchanged from
the baseline, and the accuracy floors (AccuracyCoin 141/141, nestest,
blargg) plus the 200+ board smoke suite still pass. Race-checked.

v1.0.3

Choose a tag to compare

@danielgatis danielgatis released this 25 Jul 23:32
refactor: library-only core with a debug observation surface

Drop the wire protocol (proto/server/cmd/nesd) and its docs. The only
consumer was cmd/nesd; the examples and the WASM build already use the
Console Go API directly, so the emulator is now a pure in-process library.

Move the public package from the module root into nes/ so the import path
basename matches the package name and consumers no longer alias the import.
Remove the stale /nes rule from .gitignore, which had started shadowing the
new package directory.

Add the observation surface an external debugger builds on, all zero-cost
when unused: an optional bus Observer (every CPU read/write), a MemFilter
(Game Genie reads, value locks and blocks), and OAM/PaletteRAM/SetRegister
accessors. Covered by new tests; the full suite still passes 436/436 with
the accuracy floors (AccuracyCoin 141/141, nestest, blargg) intact.