01 — Reset a inicializace GDG

Power-on reset

GDG je gate-array (WHID 65040-032) bez mikrokódu — nemá definovaný power-on stav v HW smyslu. V simulací jsou všechny flip-flopy inicializovány na '0'.

Reset se provádí pulzem na pinu nPORT (active low).

Stav po resetu (bez jakéhokoliv I/O zápisu)

Co funguje ihned

Subsystém Stav Poznámka
HSYNC generátor běží H-total = 1136 CLK0, HSYNC = 80 CLK0
V-čítač běží nVBLN cykluje (V-blank ↔ canvas)
DRAM refresh běží VRAM se čte na různých adresách
CPU clock (pin CPU) běží CLK0 ÷ 5 = 3.547 MHz

Co nefunguje

Subsystém Stav Důvod
IGRB výstup vždy 0000 (černá) výchozí paleta = samé nuly
Border barva černá border color registr = 0x0

Klíčové zjištění

GDG NENÍ v zombie stavu po resetu. Video generátor (sync, čítače, VRAM čtení) běží ihned od prvního CLK0 taktu. Obraz je černý pouze proto, že výchozí paleta mapuje všechny indexy na IGRB = 0000 (černá). Jakmile ROM naprogramuje paletu, barvy se "objeví".

Efekt I/O zápisů na GDG porty

Pozorování ze simulace

Testováno pořadí zápisů po resetu s VRAM = 0xFF:

Fáze I/O zápis Canvas IGRB nVBLN sync VRAM adresy
Po resetu, žádný zápis 0 (černá) OK 2239 unikátních
Jen paleta (port F0) 4× zápis F0 TIMEOUT
Paleta + DMD (port CE) F0 + CE 15 (bílá) OK po ~125 řádcích 5120 unikátních

Alternativní pořadí (DMD první):

Fáze I/O zápis Canvas IGRB nVBLN sync
Jen DMD (port CE) CE = 0x00 TIMEOUT
DMD + paleta CE + F0 15 (bílá) OK po ~125 řádcích

Pravidlo

Interpretace

První I/O zápis na GDG pravděpodobně resetuje nebo rekonfiguruje vertikální čítač. Druhý zápis (nebo uplynutí dostatečného času) umožní čítači doběhnout do stabilního stavu.

Na reálném MZ-800 ROM provádí sekvenci I/O zápisů (DMD, paleta, scroll registry, border), takže GDG dostane dostatek zápisů pro stabilizaci před zobrazením prvního snímku.

Teplý reset (RESET tlačítko)

Teplý reset = další nPORT pulz za běhu (po předchozí inicializaci).

Co nPORT resetuje

Registr Resetován? Důsledek
Paleta (port F0) ANO všechny indexy → IGRB 0000
DMD (port CE) ANO režim zpět na výchozí
Border color (CF06H) ANO border → černá

Co nPORT NERESETUJE

Subsystém Resetován? Důsledek
H-čítač NE HSYNC běží nepřetržitě
V-čítač NE nVBLN cykluje bez přerušení
DRAM refresh NE VRAM obsah zachován

Klíčový rozdíl: studený vs teplý start

Studený start Teplý reset
Paleta nuly (černá) nuly (černá)
DMD registr nuly (= 320×200@4) nuly (= 320×200@4)
V-čítač běží, ale 1. I/O zápis ho rozhodí běží stabilně, I/O zápis ho nerozhodí
Co je potřeba zapsat DMD + paleta (≥2 zápisy) jen paleta
Obnovení obrazu po ≥2 I/O zápisech + ~125 řádků stabilizace ihned po zápisu palety

Co je minimálně potřeba pro obraz

Prakticky: Po stisku RESET na MZ-800 obrazovka zčerná (paleta = nuly), ale sync signál pro monitor zůstane stabilní. Stačí zapsat paletu a obraz se okamžitě obnoví.

Testováno

VRAM = 0xFF, sekvence: plná inicializace → nPORT pulz → postupné zápisy:

Fáze I/O zápis Canvas IGRB Sync
Před resetem (DMD + paleta) [15] bílá OK
Po teplém resetu (nic) [0] černá OK
Jen paleta (bez DMD) F0 [15] bílá OK
Paleta + DMD F0 + CE [15] bílá OK

Rozdíly oproti Service Manual

Téma Service Manual Skutečnost (simulace)
Stav po resetu Nespecifikováno Video generátor běží, paleta = nuly → černý obraz
I/O zápis po studeném startu Nespecifikováno První zápis rozhodí V-čítač na ~1 snímek
Teplý vs studený reset Nespecifikováno Teplý reset neresetuje čítače, studený ano
Paleta po resetu Nespecifikováno Všechny indexy → IGRB 0000
DMD zápis "Nastaví zobrazovací režim" Navíc rozhodí V-čítač při studeném startu

Testovací soubor

sim/test_video.py — test test_post_reset_mode