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).
| 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 |
| Subsystém | Stav | Důvod |
|---|---|---|
| IGRB výstup | vždy 0000 (černá) | výchozí paleta = samé nuly |
| Border barva | černá | border color registr = 0x0 |
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í".
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 |
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 = další nPORT pulz za běhu (po předchozí inicializaci).
| 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á |
| 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 |
| 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 |
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í.
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 |
| 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 |
sim/test_video.py — test test_post_reset_mode