21 — Nezapojené chip-select výstupy nCRS a nSIO

Základní informace

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ý?

Dekodér nCRS (pin 88)

HDL analýza

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

Zjednoduseni

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)

Dekodovany rozsah

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.

Port mapa

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.

Dekodér nSIO (pin 89)

HDL analýza

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

Zjednoduseni

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

Dekodovany rozsah

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 mapa

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

Společný gating signál

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

Bidirekční charakter pinu

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.

Vstupní cesty

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

Zamýšlené periferie

B0H-B3H (nCRS): Nerealizovany RS-232C

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

F4H-F7H (nSIO): Z80-SIO pro Quick Disk

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.

Proč jsou dekodéry v GDG

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.

Korekce dokumentace

Rozsah nCRS

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

Název CSR vs CRS

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.

Stav ověření

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