# Level-1 test sequence — and which tests need real peripherals Source: `docs/EK-V1000-SV-002_service-guide.txt` (Table 2–2 = "the 15 level 1 tests", Table 2–4 = NCP test numbers, Table 2–5 = P3 mode bits, Table 3–4 = screen error messages). ## The 15 level-1 tests (Table 2–2) Listed in the guide as two columns; the true execution order is not certain from this table alone. Reading the columns separately: | Left column | Right column | |---|---| | Video RAM test | DUART1 timer test | | Video test | Keyboard port test | | NVR checksum test | Mouse port test | | Ethernet address ROM test | DUART2 timer test | | Option RAM test (if present) | Ethernet port (LANCE) test | | Host port test | Mouse test | | Printer port test | Keyboard test | | Image test (if installed) | | ## The distinction that matters: port tests vs device tests These are **different tests**, not two names for the same thing. | Test | Error code | Requirement | |---|---|---| | Host port test | 15 | host UART **local loopback** — no external equipment | | Printer port test | 16 | printer UART **local loopback** — no external equipment | | Keyboard **port** test | 18 | keyboard UART **local loopback** — no device | | Mouse **port** test | 19 | mouse UART **local loopback** — no device | | DUART timer 1 / 2 | 17 / 21 | the DUARTs themselves | | Ethernet port (LANCE) test | 24 | the LANCE chip's own loopback | | **Keyboard test** | **27** | **the real keyboard** | | **Mouse test** | **26** | **the real mouse / tablet** | The guide's own wording draws the line: > **Host Port Test** — Verifies the internal data paths of the host port's universal > asynchronous receiver transmitter (UART) **by using its local loopback mode**. If you > also choose the external loopback test, this test checks the driver and receiver > hardware as well. > **Keyboard Port Test** — Verifies the internal data paths of the keyboard UART **by > using its local loopback mode**. **There is no external loopback test for the keyboard > port.** > **Keyboard Test** — **Firmware requests that the keyboard do its self-test** and > display any error code. > **Mouse Test** — **Firmware requests that the mouse or tablet do its self-test** and > display any error code. So a *port* test drives the UART and needs nothing attached. A *device* test asks the attached device to run its own self-test and report back — which **requires the real device on the other end of the serial line**. External loopback is always a **separate opt-in**, not the default: P3 mode bits (Table 2–5) are `bit 0` = host port, `bit 1` = printer port, `bit 2` = mouse port, `bit 3` = LANCE. Default (P3 = 0) is local loopback only. ## The peripherals are serial devices, on DUART2 The VT1200 keyboard and mouse are serial devices, and the ROM's own test list names their ports directly: ``` E - DUART1, CHANNEL A (HOST) H - DUART2, CHANNEL A (KEYBOARD) I - DUART2, CHANNEL B (MOUSE) ``` So DUART1 = host + printer, DUART2 = keyboard + mouse — matching the split already used in `harness/mame/vt1200.cpp`. ## Consequence for this project 1. **The current gate is not a peripheral problem.** The host port test (error 15) is host-UART local loopback. It needs no external responder, and the host is not a keyboard or mouse in any case. This confirms the "ORCHESTRATOR CORRECTION" in `harness/mame/DUART_REPORT.md`. 2. **But two level-1 tests do need the devices** — *Keyboard test* (27) and *Mouse test* (26) are in the level-1 list. The harness will have to model the LK201-style keyboard and mouse. Best source for that is **not invention**: capture the real devices' serial behaviour from the live terminal, the same way the earlier live-hardware work captured other traffic. 3. **Keep the models from leaking between tests.** The port tests are loopback; if a keyboard model answers during the *keyboard port* test, that test can pass for the wrong reason (and the reverse). The existing DUART TX→RX loopback wiring is already selectable per DUART for exactly this reason (`VT1200_DUART_LB1`/`LB2`). ## Related open question (level 0) `DUART_REPORT.md` §3 reports that the **level-0** I/O data-path test (`L3FDCE470`) writes `0xE1` to DUART2 channel A and then requires a **10-byte reply**. On real hardware the keyboard channel is answered by the keyboard. Note the anomaly: level 0 currently **passes** with the *board model* (which fabricates read values) but **fails** with a *real* DUART (which correctly reports "no data") — i.e. the fake is accidentally satisfying the test. Resolve when the DUART work resumes: either it is a loopback the firmware drives itself, or it needs the keyboard device model.