GDG chip obsahuje I/O adresní dekodéry pro všechny periferie MZ-800, včetně tech, které nejsou osazený na základní desce. Dva chip-select výstupy jsou na desce MZ-800 nezapojený:
| Pin | Signál | Adresy | Popis v GDG.vhd |
|---|---|---|---|
| 88 | nCRS | B0H-B7H | "I/O $B0 - $B3 chip enabled - NOT CONNECTED" |
| 89 | nSIO | F4H-F7H | "I/O $F4 - $F7 chip enabled - NOT CONNECTED" |
Klíčová otazka: Pro jake periferie byly tyto dekodéry určený?
-- radek 6944: vystup
o_nCRS <= net_F202_125_5_out NAND net_F102_82_3_out;
-- radek 6941: adresni dekoder
net_F202_125_5_out <= net_F304_131_2_out NOR net_F302_117_3_in2;
-- radek 7661: NAND4 detekce hornich bitu
net_F304_131_2_out <= NOT ( i_AD(4) AND i_AD(5) AND NOT(i_AD(6)) AND i_AD(7) );
-- radek 7449: bit 3
net_F302_117_3_in2 <= i_AD(3);
NOR(A, B) = NOT(A) AND NOT(B), proto:
net_F202_125_5_out = NOT(net_F304_131_2_out) AND NOT(i_AD(3))
= (AD(4) AND AD(5) AND NOT AD(6) AND AD(7)) AND NOT AD(3)
| AD bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Hodnota | 1 | 0 | 1 | 1 | 0 | x | x | x |
Binárně 10110xxx = B0H-B7H. Dekodér nekontroluje bity AD(2:0),
takže aktivuje nCRS pro celych 8 adres. V praxi jsou definovany
pouze 4 porty (B0H-B3H) — B4H-B7H jsou zrcadla.
Dokumentace (Porty.txt) popisuje:
| Port | Funkce |
|---|---|
| B0H | Data pro RS1 (kanal 1) |
| B1H | Řídící registr pro RS1 |
| B2H | Data pro RS2 (kanal 2) |
| B3H | Řídící registr pro RS2 |
Rozlozeni (data + control × 2 kanaly) je typické pro Z80-SIO nebo Intel 8251 USART. Označení "RS1"/"RS2" přímo odkazuje na RS-232C seriove kanaly.
-- radek 6947: vystup
o_nSIO <= net_F202_118_3_out NAND net_F102_82_3_out;
-- radek 7455: adresni dekoder
net_F202_118_3_out <= net_F202_118_3_in1 NOR net_F304_123_2_out;
-- radek 7452: dolni bity
net_F202_118_3_in1 <= NOT ( i_AD(2) AND NOT(i_AD(3)) );
-- radek 7668: NAND4 detekce hornich bitu
net_F304_123_2_out <= NOT ( i_AD(4) AND i_AD(5) AND i_AD(6) AND i_AD(7) );
net_F202_118_3_out = NOT(net_F202_118_3_in1) AND NOT(net_F304_123_2_out)
= (AD(2) AND NOT AD(3)) AND (AD(4) AND AD(5) AND AD(6) AND AD(7))
| AD bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Hodnota | 1 | 1 | 1 | 1 | 0 | 1 | x | x |
Binárně 111101xx = F4H-F7H. Dekodér nekontroluje bity AD(1:0),
takže přesně pokryva 4 adresy.
| Port | Funkce (Porty.txt) | Funkce (ROM EQU) |
|---|---|---|
| F4H | Data kanal A | SIOAD — data kanalu A |
| F5H | Řídící registr A | SIOBD — data kanalu B |
| F6H | Data kanal B | SIOAC — řízení kanalu A |
| F7H | Řídící registr B | SIOBC — řízení kanalu B |
Pozn.: Porty.txt a ROM EQU se liší v přiřazení kanalu/funkci. ROM používá nestandardni mapování: A data (F4H), B data (F5H), A control (F6H), B control (F7H).
Oba dekodéry sdili stejný gating signál net_F102_82_3_out:
-- radek 7511:
net_F102_82_3_out <= NOT net_F202_6_2_in2;
-- radek 7414:
net_F202_6_2_in2 <= i_nM1 NAND NOT(i_nIORQ);
Zjednoduseni:
net_F102_82_3_out = NOT(i_nM1 NAND NOT(i_nIORQ))
= i_nM1 AND NOT(i_nIORQ)
Chip-select je aktivní (LOW) když: - nIORQ = 0 (I/O operace aktivní) - nM1 = 1 (není M1 cyklus — rozlišení od interrupt acknowledge, kdy jsou nM1 i nIORQ oba LOW)
Stejný gating signál používají i ostatní chip-selecty (/KEY, /C53, /JOY, /CPR, /PSG).
V GDG.vhd jsou nCRS a nSIO deklarovany jako inout (obousmerne):
nCRS : inout STD_LOGIC; -- pin 88
nSIO : inout STD_LOGIC; -- pin 89
GDG_core ma pro každý signál vstupní i výstupní cestu:
-- vystupy (dekodery)
o_nCRS : out STD_LOGIC;
o_nSIO : out STD_LOGIC;
-- vstupy (zpetne cteni)
i_nCRS : in STD_LOGIC;
i_nSIO : in STD_LOGIC;
Rideni tri-state (GDG.vhd):
nCRS <= s_o_nCRS when s_KCS5_oe = '1' else 'Z';
nSIO <= s_o_nSIO when s_KCS5_oe = '1' else 'Z';
Oba piny jsou součástí output-enable skupiny KCS5 (společně s nKEY a C53G). Když KCS5_oe = '0', piny jsou ve stavu vysoké impedance.
GDG_core zpětně čte stav pinu:
-- radek 4960: nCRS vstup
net_F302_31_16_in2 <= i_nCRS NAND net_F101_37_17_out;
-- radek 5188: nSIO vstup
net_F961_15_8_en <= i_nSIO OR net_F212_44_16_in2;
nSIO vstupní cesta řídí enable signál čítače F961 (řádkový čítač
pro video časování). Na nezapojené desce MZ-800 je nSIO = 'Z' (pull-up
na '1'), takže net_F961_15_8_en je trvale '1' (čítač enable
kontrolovan pouze druhou cestou net_F212_44_16_in2).
Rozlozeni portů (2 kanaly × data + control) je typické pro Z80-SIO nebo Intel 8251 USART slouzici jako RS-232C seriove rozhrani.
V ROM není jediný přístup na porty B0H-B3H. Žádný driver, žádná inicializace, žádné EQU definice. Tento seriovy port nikdy nebyl realizovan — ani na základní desce, ani jako rozsirujici karta s oficialnim ROM driverem.
Sharp pozdeji nabidl RS-232C rozšíření MZ-1E05, ale to pouzivalo jiné adresy a vlastní dekódování.
Na rozdíl od nCRS je SIO na F4H-F7H plně podporovan v ROM. Slouzi jako rozhrani pro Quick Disk MZ-1F11 — 2.8" disketa se seriovym přístupem (sektor = 1 bajt).
ROM komentuje: "Staci mu jen jeden jediný I/O obvod s oznacenim SIO. To je ale možné jen proto, protože velikost sektoru je právě jeden byte."
Kompletní ROM driver:
| Rutina | Adresa | Funkce |
|---|---|---|
| @SIOIN | E2D8H | Inicializace SIO (OTIR z tabulky) |
| !SIOLD | E421H | Inicializacni tabulka pro čtení |
| !SIOSD | E42CH | Inicializacni tabulka pro zápis |
| @MTON | E29BH | Zapnuti motoru QD + init SIO |
| @MTOFF | E2E8H | Vypnuti motoru QD |
| @QRBYT | E3F0H | Čtení bajtů z QD |
| @QWBYT | E3DBH | Zápis bajtů na QD |
| @SYNCA | E3A3H | Synchronizace (hledani sync znacky) |
| @SBRK | E39AH | Break signál |
| @???QD | EB13H | Detekce pritomnosti QD (WR/RD interrupt vector) |
| QREDY | E23CH | Test pripravenosti QD |
Boot sekvence (E844H-E847H) při studenem startu vypina QD motor:
E844 LD A, 1
E846 OUT (F7H), A ; SIO kanal B WR1 = 0 (disable interrupts)
E848 XOR A
E849 OUT (F7H), A ; SIO kanal B: motor OFF
Ale GDG chip-select nSIO (pin 89) je nezapojen! Quick Disk MZ-1F11 je externí periferie pripojitelna přes expansion konektor na zadni strane MZ-800. Ma vlastní desku s vlastnim adresnim dekoderem — chip-select z GDG nepotrebuje.
GDG gate-array obsahuje dekodéry pro celý I/O adresní prostor MZ-800. Porovnání zapojenych a nezapojenych výstupu:
| Chip-select | Pin | Periferie | Na desce | Pin zapojen |
|---|---|---|---|---|
| /KEY | 82 | 8255 PPI | Ano | Ano |
| /C53 | 99 | 8253 Timer | Ano | Ano |
| /CPR | 95 | Z80A PIO | Ano | Ano |
| /PSG | 96 | SN76489 | Ano | Ano |
| /JOY | 94 | Joystick | Ano | Ano |
| CRS | 88 | RS-232C | Ne | Ne |
| SIO | 89 | Z80-SIO (QD) | Ne | Ne |
Důvod: přidání dekodéru do gate-array stoji jen par hradel navíc v jednom čipu. To je vyrazne levnejsi než pridavat diskretni dekodovaci logiku na každou rozsirujici kartu. Sharp pravděpodobně pocital s tim, ze rozsirujici karty vyuziji tyto chip-selecty, ale v praxi mely vlastní dekódování.
Pro CSR (B0-B3) nebyla nikdy vyrobena odpovídající periferie s ROM driverem. Pravděpodobně sel o planovany seriovy port přímo na základní desce, který byl skrtnut při optimalizaci nakladu.
V docs-ai/02_gdg_piny.md je pin 88 popsaný jako "I/O $80-$B4 chip enable". Toto je chyba — skutečný dekodér kontroluje AD(7:3) = 10110, což odpovídá rozsahu B0H-B7H (ne 80H-B4H). GDG.vhd správně uvádí "I/O $B0 - $B3".
V dokumentaci se vyskytuje nekonzistentni pojmenovani: - CRS — signál v GDG.vhd a na pinoutu (pin 88) - CSR — v Porty.txt a scav dokumentaci
Jde o stejný signál. Puvodne pravděpodobně Communication Serial Register nebo podobny akronym.
HDL analýza: Kompletní trasovani dekodovaci logiky pro oba chip-selecty v GDG_core.vhd. Potvrzeno: - nCRS dekóduje B0H-B7H (AD(7:3) = 10110) - nSIO dekóduje F4H-F7H (AD(7:2) = 111101) - Společný gating: nIORQ=0 AND nM1=1 - Bidirekční piny (inout) se zpetnym ctenim v GDG_core - Oba součástí output-enable skupiny KCS5
ROM analýza: Porty B0-B3 nemají v ROM žádnou referenci. Porty F4-F7 mají kompletní driver pro Quick Disk.
Reálně HW: Oba piny jsou na desce MZ-800 nezapojený (ověřeno ze schematu v Service Manual).