← News

Bizmuth 1.0.0-beta1 is available

August 23, 2026Bizmuth beta

Bizmuth 1.0.0-beta1 is available to download — the first beta of the 1.0 line, and the release where Bizmuth starts running on hg80, our own Z80 and Z80N CPU core.

Our own CPU

Bizmuth now runs on hg80, the core we published to crates.io in August, replacing the LGPL-licensed z80emu it used until now. hg80 is a hardware model rather than an interpreter — stepped one clock edge at a time, checked against published test vectors, an HDL simulation of the T80/T80N FPGA core, seeded register probes and a save/restore round-trip.

The practical consequences:

  • The CPU no longer ships as a separate library. z80_ffi.dll, libz80_ffi.so and libz80_ffi.dylib existed to honour the LGPL’s relinking requirement. hg80 is MIT OR Apache-2.0, so that library — and the obligation behind it — is gone.
  • The emulator and the assembler now share one CPU. FantASM’s !test blocks run on hg80 as of 1.8.0, so a routine tested at assembly time and the same routine running in Bizmuth are executed by the same core.

Starting faster

--load starts a program from a cached post-boot state instead of booting NextZXOS first. ScrollNutter runs in 1.3 s rather than 3.3 s, and the resulting frame is byte-identical to the boot path. The state is captured on the first slow load and keyed to your card, boot ROM and machine, so a changed card recaptures it; it is never shipped with the emulator. --no-boot-cache forces the full boot.

--nex also injects once NextZXOS settles rather than after a fixed 1300 frames — roughly 10 s instead of 26.

Headless runs can do more

  • --wav-sources works headless, so per-source audio (beeper, AY, DAC — unity-gain mono, raw f32) can be captured with no window. That’s the basis for an audio regression check.
  • Key injection covers the whole ZX keyboard, with + chords — key sym+p is the double-quote. A script can type LOAD "", not just press menu keys.
  • --keys accepts chords like caps+0, and names any token it can’t use. Previously a missing colon, a non-numeric frame or an unknown key left a headless run exiting 0 having pressed nothing.

Also new

  • --config <path> uses a different config file for reading and writing, so a scratch or scripted run can’t disturb your saved settings.
  • --no-rtc runs the Next as a board with no DS1307 fitted, which not every Next has.
  • --tape-mode fast|real from the command line, and the Tape menu’s choice now persists instead of being reset by the next tape load.
  • TurboSound per-chip stereo enables — a chip panned to one side no longer plays in both.
  • The status bar shows the CPU clock beside the speed percentage (100% 28MHz), and its fields now adapt to the machine rather than showing cells that can never apply.

Renamed flags

--nex and --snapshot are now --load — it takes .nex, .sna, .snx and .z80, so neither old name was right — and --dump-snapshot is --inspect-snapshot, having been one keystroke from --snapshot, which did the opposite. Every old spelling still works.

Fixed

The ones most likely to have cost you something:

  • --sd-ro turned the saved card read-only for good — one run with the flag made every later launch discard guest writes, so saves silently stopped persisting.
  • A HALT was never woken by a pending interrupt in IM2 hardware mode — it waited forever on an interrupt that could never be asserted.
  • Nextreg $C0 never reported the CPU’s interrupt mode, which is the only way a program can ask — the Z80 has no instruction for it. A dot command saving and restoring the mode handed NextZXOS back in IM 0 instead of IM 1.
  • Video-timing changes now take effect at the frame boundary, as the hardware does, rather than on the write.
  • Nextreg $68 bit 4 cancels the extended keys’ contribution to the $FE matrix instead of blanking the $B0/$B1 readback.

The full changelog has the rest.

Bizmuth is free, and still in beta. Get it from the Downloads page.