Changelog

[0.9.5-beta5] - 2026-07-28

Added

  • SD-card activity indicator — status-bar icon per Next slot: empty / read / write / unsaved-changes; tooltip shows file name + RO/RW mode.
  • Corrupt-card warning — a corrupt/unformatted Next SD card raises a dialog (+ red status icon) instead of a blank “Error Mounting” guest screen.
  • Scan / Fix SD Card — Media ▸ SD0/SD1 ▸ Scan / Fix…: FAT consistency check, with reformat-to-fix for an unreadable card.

Fixed

  • Z80N flag accuracy: ADD HL/DE/BC,A now clear the carry and LDWS computes it, matching the FPGA — programs branching on the carry after these no longer take the wrong path.
  • LGPL corresponding-source artifacts regenerated — the published z80emu patch and z80-ffi bridge source had drifted from the shipping library (missing Z80::set_halt and the z80ffi_im export); both now reproduce it, verified by rebuilding the library from them alone.
  • First-run setup no longer recurs each launch — onboarding’s installed SD path is now persisted to the config.
  • DZRP debugging fixed — the previous implementation was non-conformant and could not connect; DeZog now attaches, reads registers and memory, and stops at breakpoints.
  • --nex was silently ignored outside --screenshot; the windowed and --headless paths now load it too.
  • IM2 daisy controller was gated on a stale interrupt mode in default (dynamic-link) builds — the bus mirrored Cpu::inner()’s mode, so a program’s IM n went unseen; a cheap im() read was added to the CPU library and the bus now mirrors the live mode.
  • Debugger reported stale (≈reset) CPU registers while the machine was running, in default (dynamic-link) builds only — Cpu::inner() never pulled from the dlopen’d z80-ffi library; ADP reg/state/get cpu.* and Rhai reg() now read live state.

Changed

  • Emulation is substantially faster — measured end to end on two machines (AMD x86_64 / Apple M4 Pro): TX-1696 +163% / +112%, NXModPlayer +111% / +81%, scrollnutter +92% / +66%. Interrupt-heavy and sprite-heavy programs gain most; output is byte-identical in every case.
  • Save states now use the .bzst extension (was .azst); the file format is unchanged, so existing states load under either name.

[0.9.4-beta4] - 2026-07-23

Added

  • Save State / Load State — the File menu now saves the full machine state to a file and restores it later (the --savestate/--loadstate capability, now available interactively).
  • Re-runnable setupHelp ▸ Run Setup… (re-)downloads or locates the ROMs and Next SD card at any time, not just on first launch.

Changed

  • The executable is now named bizmuth (was azimuth), matching the app name — so the Linux command and the application-menu title read “Bizmuth” consistently.
  • The Z80/Z80N CPU core now ships as a separate, replaceable library installed alongside Bizmuth (z80_ffi.dll on Windows, libz80_ffi.so on Linux, libz80_ffi.dylib on macOS) instead of being compiled in — so the open-source (LGPL) CPU core can be swapped for your own build. If that library is missing from the install, Bizmuth will not start.
  • Faster interrupt-heavy programs — the IM2 daisy-chain interrupt controller no longer re-evaluates every peripheral on every bus cycle, giving roughly a 20% speed-up on interrupt-driven programs such as NXModPlayer and TX-1696 (output is byte-identical).
  • Calmer idle screen — the no-machine screen is now a softer “No Input” backdrop with a bottom-left caption (was a bright “No ROMs!” test pattern), shown from launch until a machine boots so the window is never a plain black rectangle.

Fixed

  • No more silent black screen when a Next can’t boot — a Next needs a bootable SD card in slot 0; if it’s missing or misconfigured (or ROMs are absent), Bizmuth now shows a clear dialog with Download / Preferences… / Quit and boots in place once you fix it, instead of a blank or near-blank screen. Config paths (ROM folder, SD images) are now stored and resolved as absolute, so launching from Finder or a different folder no longer fails to find them. A missing or unreadable boot ROM surfaces an error rather than a black screen.
  • Menu tick marks stay correct — the Disk Write-Protect, Sprite RAM, Capture Mouse and SD Read-Only menu items now keep their check marks in sync with the actual state (previously only some menus reconciled, so these could show the wrong state after a change made outside the menu).
  • Save-state restore fidelity — restoring a state while a program was running no longer leaves the machine slow or flickery: the CPU-speed, memory-wait and IM2-daisy settings, and any in-flight DMA→DAC audio stream, are now carried across the load. (The save-state format is now v2; states written by earlier builds can no longer be loaded.)
  • Audio on high-rate USB DACs — the audio buffer is now sized by time rather than a fixed sample count, so it no longer under-runs (crackle/dropouts under load) on output devices running at high sample rates (96/192/384 kHz).
  • Windows: no longer opens a console window on launch (runs as a GUI app); logs still print when started from a terminal.

[0.9.3-beta3] - 2026-07-20

Added

  • In-app update check — on startup Bizmuth checks for a newer release and shows a notification (with a Preferences toggle to turn it off). The About box and --version now report the exact build version, date and commit.
  • ADP debugger: page-qualified breakpoints (page:off) for debugging banked memory, plus a headless server mode and a pause stop-event.

Changed

  • Reworked the About box into a custom dialog (logo, tagline, version, and a Check-for-updates link).

[0.9.1-beta2] - 2026-07-17

Added

  • Emulates the 16K Spectrum (Machine menu / --machine 16k).
  • ADP debugger: asynchronous *stopped events (breakpoint hits reported without polling), mem write (poke), and step-over (next); command paths are now quote-aware.

Changed

  • Every distribution now bundles a THIRD-PARTY-LICENSES file.

[0.9.0-beta1] - 2026-07-15

First public beta — a ZX Spectrum Next emulator built for developers.

Added

  • Emulates the 48K, 128K, +2A and +3 Spectrums, and the full ZX Spectrum Next core (Z80N, Layer 2, sprites, tilemap, copper, DMA, CTC, audio) — verified against the FPGA.
  • Source-level debugging: the ADP protocol (TCP :11001), DZRP for DeZog, a GUI debugger window, conditional breakpoints, memory watchpoints and Rhai event scripting.
  • Loads .nex, .sna/.snx/.z80 snapshots, .tap/.tzx tapes and .dsk disks; NextZXOS SD-card images; full save-states; headless capture and scripting.
  • First-run setup assistant (fetches the ROM pack + SD image); keyboard, Kempston mouse and gamepad input.
  • macOS (signed + notarised .dmg), Windows (installer + portable zip) and Linux (AppImage / .deb / Arch package).