MZ-800 se prodaval s volitelnymi sockety pro rozsirenou VRAM (roviny III+IV). Sockety mohly zustat prazdne — počítač sel do distribuce i bez nich. GDG nemá žádný konfigurační registr pro detekci pritomnosti rozšířené VRAM. Proste čte co je na sbernici.
Klíčová otazka: Jak se chovaji rozšířené grafické režimy (Frame B, 16 barev, 640x200/4c) když nejsou osazený VC čipy?
Odpoved: Obraz je defektni ale predikovatelny. VC bus čte 0xFF (pull-up), což znamená ze roviny III+IV mají všechny bity = 1. Režimy pouzivajici jen základní VRAM (Frame A, 640/mono) fungují normálně.
VA bus (piny 55-62): 8 chipu 4164C-3 (64Kx1)
Rovina I: 8 KB — soucast CPU prostoru 8000H-9FFFH
Rovina II: 8 KB — soucast CPU prostoru A000H-BFFFH
Celkem: 16 KB
VC bus (piny 63-70): 8 chipu 4164C-3 (64Kx1)
Rovina III: 8 KB — pristupna pres WF/RF registr (B/A bit)
Rovina IV: 8 KB — pristupna pres WF/RF registr (B/A bit)
Celkem: 16 KB
Oba busy sdili: - VAD[7:0] (piny 43-50): multiplexovana adresa (RAS, pak ČAS) - /VRAS (pin 41), /VCAS (pin 42): řádkový a sloupcovy strobe - /VRWR (pin 54), /VOE (pin 51): řízení čtení/zápisu
Při každém DRAM cyklů reagují všechny DRAM čipy současně. GDG dostava data z VA i VC busu pro kazde čtení — vybírá, který bus pouzije, podle režimu (DMD).
Když nejsou osazený VC sockety, datovy bus VC[7:0] je trvale v úrovni 0xFF (pull-up rezistory na desce, nebo CMOS vstupy plovouci na log. 1). To znamená:
| DMD | Režim | Roviny | Bus | Dopad |
|---|---|---|---|---|
| 00H | 320x200/4c Frame A | I, II | VA | Žádný — VC není pouzivan |
| 04H | 640x200/2c | I | VA | Žádný — VC není pouzivan |
| 08H+ | MZ-700 text | — | — | Žádný — znakový režim |
Tyto režimy používají výhradně VA bus a fungují identický s/bez rozšířené VRAM.
| DMD | Režim | Roviny | Dopad bez exVRAM |
|---|---|---|---|
| 01H | 320x200/4c Frame B | III, IV | Celý bílý (palette 3) |
| 02H | 320x200/16c | I-IV | Jen 4 z 16 barev (12-15) |
| 03H | 320/nedok. (VC only) | III, IV | Celý bílý (palette 3) |
| 06H | 640x200/4c | I, III | Jen 2 z 4 barev (2, 3) |
| 07H | 640/nedok. (VC oba bity) | III | Celý bílý (palette 3) |
Frame B čte výhradně z VC busu (roviny III+IV). Bez exVRAM: - Oba plany = 11 (binary) → palette index 3 - Všechny pixely zobrazuji palette 3 (typicky bílá) - Obrazovka je uniformne jednobarevna
Mereni (VA=0x55/0xAA sachovnice, VC=0xFF):
S exVRAM: 320 px palette 3 + 320 px palette 0 (sachovnice)
Bez exVRAM: 640 px palette 3 (cele bile)
16-barevný režim používá všechny 4 roviny. Palette index:
4-bit index = (plane_IV, plane_III, plane_II, plane_I)
Bez exVRAM: plane III = 1, plane IV = 1 (VC=0xFF), takže:
index = 11xx (binary) = 12, 13, 14, nebo 15 (decimal)
Jen horní ctvrtina palety (indexy 12-15) je dosazitelna. Dolnich 12 barev (indexy 0-11) nelze nikdy zobrazit.
Mereni (VA=0x55/0xAA sachovnice, VC=0xFF):
S exVRAM: palette 15 (320 px) + palette 12 (320 px)
Bez exVRAM: palette 15 (320 px) + palette 12 (320 px)
=> STEJNY obraz! (pro tento konkretni VA vzor)
Pozn.: V tomto měření se obrazy shodly, protože invertovaný VC vzor (0xAA/0x55) nahodou produkoval stejně horní bity jako 0xFF. S jiným VC vzorem by se lisily.
640x200 se 4 barvami používá plane I (VA) + plane III (VC). Palette index:
2-bit index = (plane_III, plane_I)
Bez exVRAM: plane III = 1 (VC=0xFF), takže:
index = 1x (binary) = 2 nebo 3
Jen 2 z 4 barev jsou dosazitelne (palette 2 a 3). Palette 0 a 1 nelze nikdy zobrazit.
Mereni (VA=0x55/0xAA sachovnice, VC=0xFF):
Radek: palette 3 (319 px) + palette 2 (319 px) + cerna (2 px)
Frame A a Frame B používají odlišně ČAS adresy pro video fetch:
| Režim | ČAS základ (bez bit 0) | Počet čtení/řádek |
|---|---|---|
| Frame A (320x200/4c) | 0x1E, 0x5E, 0xBE, 0xFE | 282 |
| Frame B (320x200/4c) | 0xA2, 0xBE, 0xE2, 0xFE | 284 |
Odlišně ČAS adresy potvrzuji, ze GDG přistupuje k jiným DRAM oblastem pro Frame A a Frame B. Sdilene hodnoty (0xBE, 0xFE) mohou byt refresh nebo společně řídící čtení.
CPU přístup k VRAM přes WF/RF registry v simulací ukazuje neocekavane výsledky — čtení vraci prevazne 0xFF nebo 0x00 bez ohledu na zapsána data. Toto je pravděpodobně způsobeno slozitostí nelinearniho CPU→DRAM mapování, kde CPU adresa 0x8000 nemapuje primocare na DRAM adresu.
| Operace | RF | Výsledek | Poznámka |
|---|---|---|---|
| Čtení roviny I (po zápisu 0xAA) | 0x01 | 0xFF | DRAM mapování? |
| Čtení roviny II | 0x02 | 0xFF | |
| Čtení roviny III (chybí) | 0x04 | 0xFF | Ocekavane |
| Čtení roviny IV (chybí) | 0x08 | 0xFF | Ocekavane |
| Čtení I+III současně | 0x05 | 0x00 | Prekvapive |
Pozn.: CPU VRAM čtení/zápis vyžaduje další vyzkum (mapování CPU adresy na DRAM RAS/ČAS, WF/RF pipeline). Zde uvedene hodnoty jsou ze simulace ale neodpovidaji jednoduche interpretaci.
Bez rozšířené VRAM by CPU melo: - Čtení rovin III/IV: vždy 0xFF (VC bus pull-up) - Zápis do rovin III/IV: zápis se ztrati (žádný čip) - Následně čtení: stále 0xFF (nezavisne na zapsanych datech) - Roviny I/II: neposkozeny — rozšířená VRAM neovlivnuje základní
Software pouzivajici jen Frame A (DMD=00H, 04H): Plně funkcni, žádný vliv chybějící exVRAM.
Software s double-bufferingem (Frame A/B): Frame A (lichy snímek) = normální obraz. Frame B (sudy snímek) = bílé (palette 3). Výsledek: blikání — každý druhý snímek je bílý. Hra je „hratelna" ale vizuálně nepohodlna.
Software v 16-barevném režimu (DMD=02H): Jen 4 barvy z 16 jsou dostupné (indexy 12-15). Obraz není prazdny — zobrazuji se data z rovin I+II, ale se spatnymi barvami (všechny posunuty do horní ctvrtiny palety). Hra je hratelna ale barvy jsou špatně.
Software v 640x200/4c režimu (DMD=06H): Jen 2 barvy z 4 (indexy 2, 3). Chybí palette 0 a 1. Obraz je citelny ale s omezenymi barvami.
Software může detekovat přítomnost rozšířené VRAM: 1. Zapsat testovací vzor do roviny III (WF=0x04, B/A=1) 2. Zpětně precist (RF=0x04) 3. Pokud precteny vzor odpovídá → exVRAM pritomna 4. Pokud precteny vzor = 0xFF → exVRAM chybí
Pozn.: Tento postup predpoklada správně CPU→DRAM mapování, které je v simulací ještě neoverene (viz předchozí sekce).
| DMD | Režim | Používá VC? | Bez exVRAM | Hratelnost |
|---|---|---|---|---|
| 00H | 320x200/4c Frame A | Ne | Normální | Plna |
| 01H | 320x200/4c Frame B | Ano (výhradně) | Bílé | Nepouz. |
| 02H | 320x200/16c | Ano (společně) | 4/16 barev | Omezena |
| 03H | 320/nedok. (VC only) | Ano (výhradně) | Bílé | Nepouz. |
| 04H | 640x200/2c | Ne | Normální | Plna |
| 05H | 640x200/2c Frame B | Ano (výhradně) | Bílé | Nepouz. |
| 06H | 640x200/4c | Ano (společně) | 2/4 barvy | Omezena |
| 07H | 640/nedok. (VC oba bity) | Ano (výhradně) | Bílé | Nepouz. |
| 08H | MZ-700 text | Ne | Normální | Plna |
Simulace (HDL): Všechny hodnoty pochází z gate-level simulace
(GDG_core.vhd + cocotb testbench test_exvram_missing.py).
VRAM model s parametrem vc_installed=False simuluje prazdne
sockety (VC bus = 0xFF).
Ověřeno: - Frame A (DMD=00H): IGRB shodný s/bez exVRAM - 640x200/2c (DMD=04H): IGRB shodný s/bez exVRAM - Frame B (DMD=01H): všechny pixely palette 3 (bílé) - 16-barevný (DMD=02H): jen palety 12-15 (horní 2 bity vynucene) - 640x200/4c (DMD=06H): jen palety 2-3 (horní bit vynuceny) - Frame A/B DRAM fetch: odlišně ČAS adresy potvrzeny - Frame A neposkozeny po přepnutí na Frame B a zpet
Částečně ověřeno: - CPU čtení/zápis neexistujicich rovin (neshoda s ocekavanim — pravděpodobně kvuli nelinearnimu DRAM mapování)
Reálně HW: Ještě neověřeno.