Inspecting hardware
Beyond registers and memory, Bizmuth can visualise the Next’s graphics and hardware state — useful when a demo or game renders differently than you expect. Everything here is reachable over ADP (so it works headlessly) and, for the event-driven pieces, from a Rhai script.
Sprites
The Sprite RAM viewer (View → Sprite RAM) renders the uploaded sprite pattern memory as an image, using the live palette. Over ADP:
| Command | Shows |
|---|---|
sprites / spr | the visible sprites — raw attributes plus resolved anchor/relative position, transform and pattern |
sprslots <start> [end] | sprite pattern slots start..=end as JSON (256 bytes per slot) |
sprram <path.png> | render the whole pattern RAM to a colour PNG (what the viewer shows) |
![]()
Layers
Each display plane — ULA, LoRes, tilemap, Layer 2, sprites — can be isolated and captured on its own, so you can see exactly what each contributes to the final frame:
| Command | Effect |
|---|---|
layer / ly [name] [on|off] | list layer visibility, or isolate/toggle one plane |
screenshot <path.png> [layers] | save the frame; layers = a comma list (ula,lores,tilemap,layer2,sprites) to capture only those planes |
bankshot <page> <path.png> | render a physical RAM page as the ULA/Timex screen — view an off-screen buffer bank |
screenshot /tmp/sprites.png sprites # just the sprite plane
screenshot /tmp/bg.png layer2,tilemap # background planes onlyBelow, the SHOW512 demo composited normally:

DMA & copper
| Command | Shows |
|---|---|
dma | recent zxnDMA transfers — src[mode] dest[mode] count plus the I/O-port flags |
copper / cop | copper state — mode / exec address and the decoded WAIT/MOVE/NOP program |
For DMA as it happens, a Rhai script catches each transfer at its boundaries with on_dma_xfer_start(d) / on_dma_xfer_end(d) — the d state-map carries src/dest/count/prescaler and the address modes.
Paging
The MMU slot map is visible several ways: ADP overlays (which ROM/overlay owns $0000–$3FFF), get bus.memory.mmu.slots (the eight 8 KB slot banks), or, live, the Rhai on_paging(d) event — which fires on every remap with the slot, the new bank and the mechanism that caused it. Pair it with on_divmmc(d) / on_rst(vector, d) to trace DivMMC automap timing.