Full Changelog: v2.7...v2.7.1
Added
HLE BIOS: link cable support. The COM group (0x10–0x1A) is now a real ring driver, so two-player link works with no BIOS dump, at the retail BIOS's own byte rate.
HLE BIOS: in-game saves. Real flash driver , including the second die of 4 MiB cartridges. Saves now work with no BIOS dump.
Three BIOS slots with a selector (Settings > Console): colour NGPC dump, monochrome NGP dump, or the built-in HLE image. The emulator identifies each image and says which console it belongs to; an empty slot falls back and tells you.
Monochrome NGP console. The 3-bit LUT level resolves straight to one of eight greys, and cartridge writes to the colour palette and mode register are discarded, as on K1GE silicon.
Link tab in the debugger (F1). Per-stage byte counts, CTS/RTS with hold times, both serial interrupts, plus a one-sentence verdict naming the earliest blocked stage. Byte injection, loopback (echo/sink) and impairment (latency, loss, cut) let you test with one console.
Graphics filter plugins. Point a setting at your own folder; each plugin is one Python file (NAME, SCALE, apply). None are shipped (the good scalers are copyleft, this project is MIT). Plugins are smoke-tested at load and rejected with a reason.
Cartridge language setting (system byte 0x6F87). Bilingual games used to run in Japanese by accident; English is now the default.
Manual clock mode. Set the console's date and time by hand — the only way to set it under the HLE image, which has no setup screen.
Library: a Regenerate covers button, full file name kept when two dumps share a title, full path on hover.
Fixed
Save corruption from the second session on under-filled cartridges: the .ngc was rewritten at the guessed capacity, the 0xFF padding then counted as ROM image, and later saves were ANDed into an unerased block. Already-inflated files repair themselves on next load.
Card-type byte could outlive the block map, so a game asking for its 8 KB save block could erase 64 KB of its own code.
Auto flash size is now derived from the block number the game passes to the BIOS, before the erase happens. Setting the size by hand should no longer be needed.
BIOS settings are persisted as the BIOS left them: language no longer reverts, the colour theme sticks, and a first boot no longer re-runs the setup wizard every time.
Covers are no longer discarded when the BIOS changes.
Library scan no longer follows junctions and symlinks (duplicate entries, or a scan cut short).
A failed ROM open shows a dialog instead of aborting the process from a Qt slot.
INTLVSET now writes through its work-RAM shadow (0x6C24–0x6C2B), which is what games actually read.
Metal Slug — 2nd Mission now play
Known limitations
The monochrome NGP is a restricted K2GE, not a K1GE implementation: a game probing the video chip still finds a K2GE, and the NEG (inverted display) bit is not applied. Checked on a few titles only.
A game reading BIOS work RAM directly, instead of calling the API, sees our layout rather than SNK's.