20 — Chování MZ-800 bez rozšířené VRAM

Základní informace

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ě.

Fyzická organizace VRAM

Základní VRAM (vždy pritomna)

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

Rozšířená VRAM (volitelna — prazdne sockety)

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

Sdilena infrastruktura

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).

Chování bez rozšířené VRAM

VC bus = 0xFF

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á:

Vizuální výstup po režimech

Režimy NEOVLIVNENE chybějící exVRAM

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.

Režimy OVLIVNENE chybějící exVRAM

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)

Detailní popis každého režimu

Frame B (DMD=01H) — celý bílý

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 (DMD=02H) — omezene barvy

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/4c (DMD=06H) — omezene barvy

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)

DRAM fetch pattern — Frame A vs Frame B

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 neexistujicim rovinam

Preliminarni měření

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.

Ocekavane chování (teoreticky)

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í

Praktické dopady

Hry a software bez exVRAM

  1. Software pouzivajici jen Frame A (DMD=00H, 04H): Plně funkcni, žádný vliv chybějící exVRAM.

  2. 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.

  3. 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ě.

  4. 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.

Detekce pritomnosti exVRAM

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).

Porovnání všech režimu

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

Stav ověření

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.