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í.
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
| 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 |
| 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 |
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!)
| 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.
| 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 |
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.
| 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! |
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.
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
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 |
| 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.
Toto vysvětluje, proč přepnutí z MZ-800 grafickeho režimu do MZ-700 textového režimu ztisi zvuk generovany 8253:
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.
| 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 | = | = | = | = |
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.
| 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) |
Z porovnání všech 16 režimu vyplyva toto mapování:
| 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 |
| 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 |
| DMD[1:0] | Režim | Efekt |
|---|---|---|
| xx | MZ-700 text | DMD[1:0] ignorovany |
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.