13 — Nedokumentované DMD režimy (Display Mode Register)

Základní informace

DMD (Display Mode Register) se zapisuje na port CEH a ma 4 bity [3:0]. Existuje 16 moznych kombinací (0x00-0x0F), ale oficialni dokumentace uvádí jen 10 z nich. Tato studie systematicky testuje všech 16 hodnot v gate-level HDL simulací.

Bitová struktura DMD

Bit 3 (DMD3): MZ-700 rezim (1 = textovy rezim, 0 = graficky)
Bit 2 (DMD2): Rozliseni (1 = 640x200, 0 = 320x200) — jen pri DMD3=0
Bit 1 (DMD1): Rezim rovin / Frame B
Bit 0 (DMD0): Vyber Frame A/B

Oficialni režimy

DMD Režim Roviny Pixel CLK Popis
00H 320x200/4c I, II (VA) CLK0/2 Frame A
01H 320x200/4c III, IV (VC) CLK0/2 Frame B
02H 320x200/16c I-IV (VA+VC) CLK0/2 Obe framy
04H 640x200/2c I (VA) CLK0 Frame A
05H 640x200/2c III (VC) CLK0 Frame B
06H 640x200/4c I (VA), III (VC) CLK0 Smisene roviny
08H-0BH 40x25 text DRAM+CG CLK0/2 MZ-700 kompatibilni

Nedokumentované režimy

DMD Bity [3:2:1:0] Status
03H 0011 Nedokumentovaný — 320x200 s bits[1:0]=11
07H 0111 Nedokumentovaný — 640x200 s bits[1:0]=11
0CH 1100 Nedokumentovaný — DMD3=1, DMD2=1, bits[1:0]=00
0DH 1101 Nedokumentovaný — DMD3=1, DMD2=1, bits[1:0]=01
0EH 1110 Nedokumentovaný — DMD3=1, DMD2=1, bits[1:0]=10
0FH 1111 Nedokumentovaný — DMD3=1, DMD2=1, bits[1:0]=11

Zjištění — DMD bit 3 je "master switch"

Klíčové zjištění: DMD bit 3 je dominantni — když DMD3=1, ostatní bity nemají meritelny vliv na chování. Všechny režimy 0x08-0x0F se chovaji identický jako MZ-700 textový režim.

DMD3=0: Graficke rezimy MZ-800 (bits [2:1:0] urcuji konkretni rezim)
DMD3=1: MZ-700 textovy rezim (bits [2:1:0] ignorovany!)

Ověření: DMD 0x0C-0x0F = MZ-700 text

Vlastnost 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F
DRAM čtení 222 222 222 222 222 222 220* 222
Sloupců 82 82 82 82 82 82 81* 82
Čtení/sl 2 2 2 2 2 2 2 2
ČAS zaklady 22/32/84/BE = = = = = = =
C53G 0 0 0 0 0 0 0 0

(*) Drobne odchylky v 0x0E jsou pravděpodobně artefakty časování vzorkovani, ne reálně rozdily.

Zaver: DMD 0x0C-0x0F jsou identický s MZ-700 textovym rezimem. Bit DMD2 nemá žádný vliv když DMD3=1.

Zjištění — DMD=0x03 (320x200, bits[1:0]=11)

Porovnání s oficialnim 16c rezimem (0x02)

Vlastnost 0x02 (16c) 0x03 (nedokum.) Rozdíl
Pixel clock CLK0/2 (320) CLK0/2 (320) Shodný
Video čtení 78 284 4x vice!
Mystery čtení 206 0 Žádné mystery
Celkem čtení 284 284 Shodný
Sloupců 39 81 2x vice
Čtení/sloupec 2 2 Shodný
ČAS zaklady 0A, 4A 0A, 4A, BE, FE + Frame B adresy
IGRB (VA=55/AA, VC=AA/55) {15: 322, 12: 318} {4: 320, 12: 320} Odlišně barvy

Analýza

DMD=0x03 je hybridni režim který kombinuje: - ČAS adresy z Frame A (0x0A, 0x4A) i Frame B (0xBE, 0xFE) - Žádné mystery reads (na rozdíl od 0x00 a 0x02) - Dvojnasobny počet sloupců (81 vs 39)

DRAM fetch pattern je identický s DMD=0x01 (Frame B): 284 video čtení, 0 mystery reads, 81 sloupců.

Barevná kompozice se liší od 0x02 (16c) — plane-to-palette mapování je odlišně. Se sachovnicovym vzorem VA=0x55/VC=0xAA: - 0x02 produkuje palette indexy 3 a 12 (IGRB: bílá + seda) - 0x03 produkuje palette indexy 0 a 12 (IGRB: zelená + seda)

Interpretace: DMD=0x03 je pravděpodobně varianta 16-barevneho režimu s odlisnym prirazenim rovin k paletovým bitum, pouzivajici Frame B adresy pro čtení. Efektivně se jedna o "16c Frame B" — režim který není v oficalni dokumentaci uveden.

Zjištění — DMD=0x07 (640x200, bits[1:0]=11)

Porovnání s oficialnim 640/4c (0x06)

Vlastnost 0x06 (640/4c) 0x07 (nedokum.) Rozdíl
Pixel clock CLK0 (640) CLK0 (640) Shodný
Video čtení 182 182 Shodný
Mystery čtení 0 0 Shodný
Sloupců 81 81 Shodný
Čtení/sloupec 2 2 Shodný
ČAS zaklady 0A, 4A, FE 0A, 4A, FE Shodný
IGRB (VA=55/AA, VC=AA/55) {2: 319, 1: 319} {15: 319, 4: 319} Odlišně barvy!

Analýza

DMD=0x07 čte identická DRAM data jako 0x06 (stejně adresy, stejný počet čtení), ale interpretuje je jinak při kompozici pixelove barvy:

0x06 (640/4c): palette index = (plane_III, plane_I)
  VA=55h (I=0), VC=AAh (III=1) → index 10b = 2 → palette 2 (modra)
  VA=55h (I=1), VC=AAh (III=0) → index 01b = 1 → palette 1 (cervena)

0x07 (nedokum.): palette index = (plane_III, plane_III) — PLANE I IGNOROVAN
  VC=AAh (III=1) → index 11b = 3 → palette 3 (bila)
  VC=AAh (III=0) → index 00b = 0 → palette 0 (zelena)

Interpretace: DMD=0x07 používá VC bus (plane III) pro oba bity paletoveho indexu. Plane I (VA bus) je ignorovan. Výsledek je efektivně 640x200 mono režim přes Frame B (VC), ale s 4-barevnou paletou kde každý pixel používá palety 0 a 3 místo 0 a 1.

Praktické důsledky

Bez rozšířené VRAM (VC = 0xFF): - 0x07 zobrazuje palette 3 pro všechny pixely (bílé) - Chování je identický s 0x05 (Frame B mono) v případě chybějící exVRAM

C53G — maskovani zvuku (8253 gate)

Mechanismus v HDL

o_C53G <= DMD(3)_registered NAND nO_of_CKSW_latch

Po resetu: CKSW latch = 0, nO = 1. Takže: C53G = DMD(3) NAND 1 = NOT(DMD(3))

DMD(3) C53G Zvuk 8253
0 (MZ-800) 1 Vždy zapnuty
1 (MZ-700) 0 Zamutovany po resetu

Měření

DMD C53G (100 vzorku) Stav zvuku
0x00-0x07 1 (100/100) Zvuk ON
0x08-0x0F 0 (97-100/100) Zvuk MUTED

Zaver: C53G je plně rideny bitem DMD(3). V MZ-800 grafických režimech (DMD3=0) je 8253 gate signál vždy aktivní — zvuk není maskovany. V MZ-700 textovém režimu (DMD3=1) je zvuk po resetu zamutovany.

Prakticky dopad

Toto vysvětluje, proč přepnutí z MZ-800 grafickeho režimu do MZ-700 textového režimu ztisi zvuk generovany 8253:

  1. Software nastaví DMD=0x08 (MZ-700 text)
  2. C53G padne na 0 → 8253 counter 0 gate se zavre
  3. 8253 prestane generovat melodii
  4. Navrat na DMD=0x00 (MZ-800 grafika) → C53G = 1 → zvuk se obnovi

CKSW registr (port CF07H): Ověření vlivu CKSW zápisu na C53G nepotvrdilo změnu v simulací. Bud je adresní dekodér složitější než predpokladame, nebo CKSW ovlivňuje C53G jen za specifickych podminek. Vyžaduje další vyzkum.

Kompletní srovnavaci tabulka všech 16 DMD režimu

DRAM fetch pattern

DMD Režim Vid.čtení Mystery Sloupců ČAS zaklady
00H 320/4c Frame A 78 206 39 1E, 5E
01H 320/4c Frame B 284 0 81 62, A2, BE, FE
02H 320/16c 78 206 39 0A, 4A
03H 320/??? [NEDOK.] 284 0 81 0A, 4A, BE, FE
04H 640/2c Frame A 182 0 81 0A, 4A, FE
05H 640/2c Frame B 182 0 81 0A, 4A, FE
06H 640/4c 182 0 81 0A, 4A, FE
07H 640/??? [NEDOK.] 182 0 81 0A, 4A, FE
08H MZ-700 text 222 0 82 22, 32, 84, BE
09H = 08H = = = =
0AH = 08H = = = =
0BH = 08H = = = =
0CH = 08H = = = =
0DH = 08H = = = =
0EH = 08H = = = =
0FH = 08H = = = =

Video výstup (IGRB)

VRAM: sachovnice VA=0x55/0xAA, VC=0xAA/0x55 po 8B blocich. Paleta: 0=zelená, 1=červená, 2=modra, 3=bílá.

DMD IGRB barvy (canvas) Přechodu Rozlišení
00H {F: 319, 2: 319, 0: 2} 318 320px
01H {2: 319, 1: 319, 0: 2} 319 320px
02H {F: 322, C: 318} 319 320px
03H {4: 320, C: 320} 319 320px
04H {4: 319, 1: 319, 0: 2} 638 640px
05H {0: 640} 0 640px*
06H {2: 319, 1: 319, 0: 2} 638 640px
07H {F: 319, 4: 319, 0: 2} 638 640px
08H-0BH {D: 640} 0 text
0CH-0FH {D: 638, 0: 2} ~1 text

(*) DMD=0x05 zobrazuje černé (palette 0) protože VC=0xAA/0x55 dava jiný výsledek než VA.

Signály

DMD C53G (zvuk) nCROM Pixel CLK
00H-07H 1 (ON) neaktivní CLK0/2 (320) nebo CLK0 (640)
08H-0FH 0 (MUTED) neaktivní CLK0/2 (text)

DMD bity [1:0] — dekodovaci logika

Z porovnání všech 16 režimu vyplyva toto mapování:

Při DMD[3:2] = 00 (320x200 grafický):

DMD[1:0] Režim Použité roviny DRAM fetch
00 4c Frame A I+II (VA) 78 vid + 206 mystery
01 4c Frame B III+IV (VC) 284 vid
10 16c I+II+III+IV 78 vid + 206 mystery
11 16c variant všechny (odlišně) 284 vid

Při DMD[3:2] = 01 (640x200 grafický):

DMD[1:0] Režim Použité roviny DRAM fetch
00 2c Frame A I (VA) 182 vid
01 2c Frame B III (VC) 182 vid
10 4c I+III (VA+VC) 182 vid
11 mono via VC III pro oba bity 182 vid

Při DMD[3:2] = 1x (MZ-700):

DMD[1:0] Režim Efekt
xx MZ-700 text DMD[1:0] ignorovany

Stav ověření

Simulace (HDL): Všechny hodnoty pochází z gate-level simulace (GDG_core.vhd + cocotb testbench test_dmd_undocumented.py).

Ověřeno: - Všech 16 DMD hodnot: IGRB výstup, DRAM fetch, C53G, nCROM - DMD=0x03: odlišný DRAM pattern od 0x02, odlišná barevná kompozice - DMD=0x07: shodný DRAM pattern s 0x06, odlišná barevná kompozice - DMD=0x0C-0x0F: identický s MZ-700 text (0x08) - C53G: čistě řízený DMD(3), stabilní po celou dobu - Mystery reads: pouze v DMD=0x00 a 0x02 (Frame A režimy)

Částečně ověřeno: - CKSW vliv na C53G (v simulací se neprojevil — vyžaduje další vyzkum) - Přesně přiřazení rovin k paletovým bitum v DMD=0x03 a 0x07 (vyžaduje test s různými VRAM vzory a izolovanymi rovinami)

Reálně HW: Ještě neověřeno.