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:

CommandShows
sprites / sprthe 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)

The sprite RAM — the uploaded sprite pattern graphics

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:

CommandEffect
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 only

Below, the SHOW512 demo composited normally:

A Next demo (SHOW512) — the composited frame

DMA & copper

CommandShows
dmarecent zxnDMA transfers — src[mode] dest[mode] count plus the I/O-port flags
copper / copcopper 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.