Skip to content
cccskills
FreePublished on GitHub

zx80-video-audit

Validate and implement Sinclair ZX80 video emulation in the EMULATORS repository, including CPU-driven display generation, display-file execution, Z80 M1/refresh/HALT/INT interactions, character and inverse-video fetches, line counter and shift register behavior, horizontal and vertical sync, collapsed display files, PAL timing, flicker, and cassette/video coupling. Use when Codex reviews or edits namespace ZX81 code for the /mZX80 model, especially ULA, ULARegisters, MemoryVideoCode, Memory, PortManager, Screen, CPU interrupt timing, raster, or video tests.

The English summary is being prepared. Showing the original description.

See how to install

Files included (3)

  • SKILL.md4.5 KB
  • agents/openai.yaml205 B
  • references/zx80-video.md10.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

ZX80 Video Audit

Core Workflow

Treat ZX80 video as a cycle-sensitive collaboration between the Z80, ROM software, memory aliases, and discrete TTL logic, not as a conventional framebuffer.

  1. Read references/zx80-video.md before judging behavior.
  2. Inspect .codex/docs/ZX80Video.pdf when circuit diagrams, oscilloscope traces, pixel synchronization, or porch behavior matter. Render relevant pages because the PDF contains no extractable text.
  3. Confirm the selected machine is /mZX80 (ZX81::Type::_ZX80). Do not silently apply ZX81 NMI or ULA behavior.
  4. Inspect the local implementation paths:
    • include/ZX81/ULA.hpp, src/ZX81/ULA.cpp
    • include/ZX81/ULARegisters.hpp, src/ZX81/ULARegisters.cpp
    • include/ZX81/Memory.hpp, src/ZX81/Memory.cpp
    • include/ZX81/ZX81.hpp, src/ZX81/ZX81.cpp
    • include/ZX81/PortManager.hpp, src/ZX81/PortManager.cpp
    • include/ZX81/Screen.hpp, src/ZX81/Screen.cpp
    • Z80 M1, refresh, HALT, WAIT, INT, and instruction-cycle code under include/FZ80 and src/FZ80
  5. When changing C++ code, also use $emulators-framework-cpp-style.
  6. Separate observed hardware behavior, ROM-dependent scheduling, and host-window cropping. A plausible screenshot does not prove correct bus or interrupt timing.

Audit Priorities

Prioritize correctness in this order:

  • 6.5 MHz pixel clock, 3.25 MHz CPU clock, and two pixels per CPU T-state.
  • Display-file echo and opcode-fetch qualification: address decoding, /M1, memory read, character-byte capture, and forced NOP behavior.
  • Bit 6 pass-through, HALT end-of-line handling, repeated HALT M1/refresh cycles, R-register progression, A6-driven maskable interrupt, and interrupt acknowledge.
  • Character address formation from I=0x0E, character bits 0-5, scanline counter 0-7, ROM glyph fetch, and bit 7 inverse video.
  • Eight-pixel shift-register output without gaps, overlaps, stale bytes, or off-by-one pixels.
  • Collapsed and expanded display-file rows, left alignment, 32-character maximum, and blank remainder after HALT.
  • Horizontal sync placement and line completion; vertical sync and keyboard/cassette coupling.
  • ZX80 flicker semantics: ordinary program execution and key processing pre-empt video generation.
  • PAL frame geometry. Treat the repository's current PAL-only and unexpanded restrictions as implementation scope, not universal hardware facts.

Validation Strategy

Build evidence at three levels:

  1. Bus trace: record CPU cycles with PC, address bus, data before/after interception, /M1, /MREQ, /RFSH, /HALT, /INT, interrupt acknowledge, I, R, and line counter.
  2. Signal trace: record pixel clock, character load, shift output, HSYNC, VSYNC, and composite level transitions.
  3. Rendered result: compare full, collapsed, short, inverse, and checkerboard rows; also test the transition from display generation to user code.

Use small deterministic fixtures before whole programs:

  • One row containing a single normal character followed by HALT.
  • The same glyph inverted with bit 7.
  • Empty, partially expanded, and fully expanded rows.
  • Codes with bit 6 clear versus set, including 0x76.
  • Alternating/checkerboard glyphs to expose pixel-width jitter.
  • A key-processing or computation interval that must blank the ZX80 display.

Report timing with an explicit convention: CPU T-states versus 6.5 MHz pixel/logic clocks, inclusive counter values versus elapsed cycles, and the edge used as line origin.

Change Guardrails

  • Preserve the shared ZX81 namespace while keeping _ZX80 branches explicit where hardware differs.
  • Do not add an NMI generator to ZX80 behavior.
  • Do not replace CPU/bus-driven behavior with direct display-file rendering when cycle-visible effects are in scope.
  • Do not assume standard broadcast porches that the original circuit did not generate.
  • If a source and a trace disagree, preserve the trace, identify model/circuit revision and measurement points, and state the uncertainty.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Validate Commodore 1540/1541/1541C/1541-II compatible disk-drive behavior in EMULATORS, including IEC serial bus protocol, device numbers, KERNAL traps, CBM DOS commands/status, D64 image parsing, BAM/directory/file chains, PETSCII filenames, 6502 drive CPU/ROM/RAM expectations, 6522 VIA wiring, GCR/track/sector geometry, motor/head timing, and compatibility boundaries for 1541-like devices. Use when Codex reviews or edits C64, VIC-20, C264, COMMODORE disk, serial I/O, D64, CBM DOS, IEC, VIA, GCR, or 1541 drive code.

The English summary is being prepared. Showing the original description.

Commnets/EMULATORS10Updated Oct 18, 2026

Validate Commodore 64 CIA 6526 emulation in EMULATORS, including CIA1/CIA2 $DC00/$DD00 register behavior, ports, DDRs, keyboard/joystick matrix, IEC/user port, VIC bank selection, timers A/B, underflow timing, PB toggle/pulse output, TOD clock/alarm, serial shift register, FLAG, ICR masks and IRQ/NMI lines. Use when Codex reviews or edits C64 CIA, timers, ports, keyboard, joystick, serial bus, interrupts, TOD, or VIC bank control.

The English summary is being prepared. Showing the original description.

Commnets/EMULATORS10Updated Oct 18, 2026

Validate Commodore 64 memory map, PLA/bank switching, 6510 port $0000/$0001 behavior, VIC bank selection, color RAM, ROM/RAM overlays, cartridge mapping, and mirrored I/O in the EMULATORS C64 namespace. Use when Codex reviews or edits C64 memory, PLA, CPU-visible address decoding, VIC-visible memory, color memory, char ROM, cartridge, expansion I/O, or mapped chip register behavior.

The English summary is being prepared. Showing the original description.

Commnets/EMULATORS10Updated Oct 18, 2026

Validate Commodore MPS-801 serial dot matrix printer behavior in EMULATORS, including SerialPrinterMPS801 classes and their MatrixPrinterEmulation and SerialPrinterPeripheralSimulation hierarchy, IEC/KERNAL-trap printer routing, device numbers, secondary addresses, PETSCII/character sets, 6x7 glyphs, double width, graphics mode, reverse field, tab and dot positioning, line/page geometry, PostScript output, and fidelity boundaries. Use when Codex reviews or edits COMMODORE MPS801 printer code, generated printer output, PostScript printer templates, C64/VIC-20/C264 serial-printer behavior, or compares implementation against .codex/docs/MPS801.pdf and historical MPS-801 sources.

The English summary is being prepared. Showing the original description.

Commnets/EMULATORS10Updated Oct 18, 2026

Validate Commodore MPS-802 and 1526 serial dot matrix printer behavior in EMULATORS, including SerialPrinterMPS802 classes and their MatrixPrinterEmulation and SerialPrinterPeripheralSimulation hierarchy, IEC/KERNAL-trap printer routing, device numbers, secondary-address functions, PETSCII/character sets, 8x8 glyphs, enhanced width, reverse and paging modes, formatter strings, programmable characters, line/page geometry, PostScript output, and fidelity boundaries. Use when Codex reviews or edits COMMODORE MPS802 printer code, generated printer output, PostScript printer templates, C64/VIC-20/C264 serial-printer behavior, or compares implementation against .codex/docs/MPS802.pdf, the MPS-802 user guide, and 1526/MPS-802/4023 service information.

The English summary is being prepared. Showing the original description.

Commnets/EMULATORS10Updated Oct 18, 2026

Validate Commodore 64 SID 6581/8580 sound emulation in EMULATORS, including $D400-$D7FF register decoding, voices, frequency, pulse width, control bits, ADSR/envelope behavior, oscillator sync/ring/noise/test, filters, volume DAC/sample clicks, paddles, read-only registers, mirrors, and reSID integration. Use when Codex reviews or edits SID, Sound, audio wrapper, register, filter, waveform, envelope, or mapped SID behavior.

The English summary is being prepared. Showing the original description.

Commnets/EMULATORS10Updated Oct 18, 2026

See all skills by Commnets

Report a problem with this skill