# Bizmuth 1.0.0-beta2

174 changes since beta 1. Mostly correctness: 123 fixes, a lot of them hardware behaviour that had
been quietly wrong on the classic machines.

## Breaking

- Save states from beta 1 won't load. Format is v16; take a fresh one.
- `--wav`/`--wav-sources` write WAVE files, not raw floats. Per-source files are now
  `beeper.wav`/`ay.wav`/`dac.wav`.
- Breakpoint conditions read memory as `mem[addr]`, not `(addr)`. `( )` only groups now.
- Script I/O handlers need `watch_io`, as memory ones have always needed `watch_mem`.

## Added

- ESP bridging and emulation — `.http` and `.getit` work with no extra hardware [`--esp`]
- Source-level debugging: symbol names as arguments, `file:line` on every stop [`--sld`]
- `assert` and `debug` in FantASM source become breakpoints; headless reports every failure
- Serial fault injection — dropped bytes, overruns, framing errors, a silent far end [`serial`]
- Mouse injection, live and scheduled [`--mouse`, ADP `mouse`, Rhai `mouse()`]
- Breakpoint conditions: arithmetic, shifts, `phys[]`, `port[]`, widths, symbols
- Scripts can read every port the CPU can, without disturbing it
- Log to a file — the only way to capture one on Windows [`--log-file`]
- Show/hide the toolbar [View ▸ Toolbar]
- RTC fitted, and hide the status bar in full screen [Preferences]
- Boot cap split out of the overloaded `--auto-keys` [`--max-boot-frames`]

## Fixed

- **17 nasty crash and hang bugs** — malformed `.dsk`, `.z80`, TZX and SD images, a looping directory
  tree, a poisoned UI mutex that killed the whole window, out-of-range floppy commands
- **24 debugger fixes** — conditional breakpoints and `bt()` did nothing at all on the classic
  machines; breakpoints and symbols were lost on a machine switch; a paused ADP session hung DeZog
- **14 timing and contention fixes** — a +2A/+3 stalled 1 T-state in 8 where hardware stalls 7;
  memory above `$BFFF` ran untimed on the 128K/+2A/+3; the floating bus was 60 T-states out
- **13 +3 floppy fixes** — FORMAT TRACK didn't format, multi-sector writes wrote one sector, a +2A
  answered floppy ports it hasn't got
- **12 UART fixes** — wrong reset values, no flow control, no error bits, no transmit FIFO
- **12 video fixes** — Layer 2 banks ≥ `$80` read the wrong 16K, 640×256 X-scroll moved 1px not 2,
  writes to the off-screen bank painted over the display
- **11 interface fixes** — Full Screen only maximised, Next Navigation had no menu item, Preferences
  tabs were clipped, the Wayland pointer wandered off-window
- **6 tape fixes** — the Next refused tapes outright; 6 TZX block types read as truncated
- **6 paging and reset fixes** — `OUT ($0FFD),A` repaged a +2A/+3; reset ejected the tape
- **5 CLI/headless fixes** — flags accepted and silently ignored on paths that never applied them
- Plus: 128K `.sna` files of 147487 bytes load, the CTC vector is taken only from channel 0, and
  nextreg `$11` reads back what the hardware reports

## Internal

- hg80 0.9.0 → 1.0.0, its first public release. FUSE (1356 vectors) and the workspace pass unchanged
- Breakpoint checking is flat in the number armed — at 200, 210 ns/instruction becomes 2.5 ns
- macOS builds no longer disable library validation
- wxDragon 0.9.19 → 0.9.21

Full detail in `HISTORY.md`.
