JNEXT
Skip to content

Video

Video panel

The state of the whole display pipeline, and a picture of each layer on its own.

Where the beam is, and what the ULA is doing

The header shows the raster position while paused, and it shows it in every coordinate system that matters, because the hardware has four of them and they do not agree:

Line Counter Origin
raw The frame counters hc / vc Top-left of the whole frame, blanking included
ULA hc_ula / vc_ula The ULA's own counters: both read 0 at the start of the display area
Copper cvc vc_ula plus the NR 0x64 copper offset as it stood at the start of the display area (a mid-frame write shows from the next frame) — this is the counter NR 0x1E/0x1F report
Pixel phc / vc_ula The pixel being generated: 0,0 is the top-left paper pixel

Read the labels. vc 100 and cvc 36 can be the same instant on a 128K machine; a program that polls NR 0x1F sees the second number, and comparing it against the first is a classic way to lose an afternoon. Pixel x goes negative in the left border, which is deliberate: -12 means twelve pixel clocks before the first paper pixel of the line.

Region says whether the beam is in Paper, Border or Blanking, and the diagram beside the numbers shows the same thing spatially — the frame with its blanking (dark), border (mid) and 256×192 paper (light) areas, and a marker on the current scanline at the current column.

ULA fetch says whether the ULA is reading display memory right now, and what: a Bitmap byte, an Attribute byte, or Idle. This is the piece you cannot get from NR 0x1E/0x1F, and it is usually the answer you want: if you have just broken on a write to an attribute byte, it tells you whether the ULA had already read that byte for this line.

The two are independent, and that is not a bug in the display. The ULA runs twelve pixel clocks ahead of the beam, so at the start of every display line it is already fetching while the beam is still painting the left border, and at the end of the line it has stopped fetching while the last twelve pixels are still being shifted out. In Timex hi-colour and hi-res modes the attribute slots fetch a second bitmap plane instead, and the panel says Bitmap for them.

All of this is derived from the emulator's own timing model, so the numbers, the regions and the fetch schedule follow the selected machine — 48K, 128K, +3 and Pentagon have different line lengths, display origins and blanking windows. Switch to Pentagon and the diagram changes shape: its horizontal blanking is narrower than the other machines' and its vertical blanking is taller.

Layers and palette

At all times the header also shows which layers are enabled (green) or disabled (grey), which of the six priority orders SLU LSU SUL LUS USL ULS is selected, and the 32 reachable entries of the active ULA palette as swatches.

Below that, one tab per view:

Tab Shows
All layers The full composite — the same picture as the emulator window
ULA The ULA screen, with Primary (bank 5) / Shadow (bank 7) selectable
Layer2 Layer 2, with Active bank / Shadow bank selectable
Sprites The sprite layer alone
TileMap The tilemap layer alone
Background The NR 0x4A fallback colour — the one thing on screen that belongs to no layer

Two conventions to know. Rows the raster has not yet reached in the current frame are drawn dark, so you can see exactly how much of the frame is done at the point you stopped — pause mid-frame and the bottom of the picture is dark, with a red line at the raster. A pause between two frames, which is where an ordinary Break usually lands, shows the whole frame that has just ended, with no red line. A pause above the top of the picture in a frame already under way (after stepping into it) has drawn nothing of it yet, so that picture is all dark. Transparent pixels — including whatever a layer's clip window cuts away — are drawn as a light checkerboard, the way an image editor shows them, which makes it obvious whether a layer is empty or merely transparent.

The views replay the frame's per-scanline register changes rather than drawing everything with the register values that happen to be live at the pause. That is what makes raster effects — Layer 2 parallax splits, per-line palette gradients, tilemap scroll splits — appear here as they do on screen. Only the visible tab is rendered.