Stránka 1 z 2
Neúplná adresace periferií u ZX Spectra
Napsal: 06 led 2017, 19:21
od forbidden
Pořídil jsem si ZX Spectrum, víceméně na hraní, než na nějaký hloubání nad historickou architekturou. Potřebuju si k němu ale udělat rozhraní na joystick, to by sám o sobě nebyl problém, schémat je všude dost. Ale mate mě, že se často mluví o neúplné adresaci. Co to přesně je a proč se používá? Zběžně jsem se díval, že Z80 má 16 b adresovou sběrnici, to je podle mě prostoru až až, aby se nemuselo šetřit s adresama periferií.
Obkreslil jsem si schéma rozhraní Dipra, co tu mám, to má údajně neúplnou adresaci a pak jsem na netu vybral dvě zapojení s úplnou adresací. Jedno z toho bych asi udělal. Žádný z nich ale nepoužívá 8 b adresu a přesto mají údajně plnou adresaci. Podle mě by tam těch adresových vstupů mělo být víc a reagovat až na úplnou adresu. Může mi to někdo trochu objasnit?
Díky.
Napsal: 06 led 2017, 19:59
od Kremik
Je to jenom kvůli jednoduchosti. Myslím, že Z80 adresuje periferie osmi bity. Takže pokud se mluví o úplné adresaci, myslí se asi jen těch 8 bitů. Vůbec bych to neřešil, 256 periferií je přece dost.
Napsal: 06 led 2017, 20:18
od forbidden
Určitě je to dost, ale proč tomu teda říkají full adress decoding, když očekávají log 0 pouze na A5, A6 a A7 v lepším případě, v horším pouze na A5. Vždyť to může kolidovat se spoustou jiných adres.
Napsal: 06 led 2017, 20:22
od Hill
Když navrhovali ZX Spectrum, nikoho nenapadlo, že by se k němu připojovalo víc, než nějakých 8 periferií, tak nebylo třeba víc řešit.
Napsal: 06 led 2017, 20:25
od lesana87
Tady je seznam různých periferií a adresy, na které reagují.
http://www.worldofspectrum.org/faq/reference/ports.htm
Napsal: 06 led 2017, 20:33
od forbidden
OK, dík za ten seznam, prostuduju to. Třeba časem Spectrum využiju i k něčemu užitečnýmu.

Napsal: 06 led 2017, 20:47
od Hill
To je ale seznam všech periferií všech verzí Spectra včetně Pluska 128k a speciálních periferií potřebných pro komunikaci s ZX Microdrive a ZX Printer, tříplusjednokanálovým generátorem zvuku a šumů, jako byl ZX Interface nebo disketové řadiče Dataputer, z nichž některé obsahovaly další paměťovou banku, generátor zvuků, MIDI rozhraní a kdo ví, co ještě.
Verze se lišily především obvodem ULA podle televizní normy, pro kterou byly určené, v našich končinách to byla ISSUE TWO.
Původní ZX Spectrum například četlo Sinclair joystick na stejných adresách, na nichž četlo z klávesnice kurzory a tuším nulu. To neúplné dekódování mělo výhodu v tom, že po nevyužívaných bitech sběrnice mohlo probíhat něco jiného (například v době snímkového intervalu, kdy ULA nezobrazovala obsah videoram, se po horních třech adresních bitech posílal stav obsah registru přerušení).
Jo, kdybych si tak všechno pamatoval...
Napsal: 06 led 2017, 20:48
od lesana87
Jinak, Z80 umí adresovat periferie 16-bitově. Při použití instrukcí in r,(C) / out (C),r je na horní polovinu adresy použit registr B a na dolní C. Při použití instrukcí in A,port / out port,A je na horní polovinu adresy použit samotný registr A a na dolní hodnota port. Instrukce in A,port se teda dá použít libovolně na 16-bitové adresování periferií, instrukce out port,A jen omezeně. Instrukce pro blokový přenost z/do periferie používají pro adresaci také pár BC, ale zároveň používají B jako počítadlo bytů, takže použití pro 16-bitově adresované periferie je ještě omezenější.
Napsal: 06 led 2017, 21:13
od forbidden
Hill píše:To neúplné dekódování mělo výhodu v tom, že po nevyužívaných bitech sběrnice mohlo probíhat něco jiného (například v době snímkového intervalu, kdy ULA nezobrazovala obsah videoram, se po horních třech adresních bitech posílal stav obsah registru přerušení)
Takže je docela dobře možný, že kdybych opravdu trval na úplné osmibitové adrese třeba toho Kempston joysticku (0x1F), tak by mohlo docházet ke kolizím, nebo by se spíš port nepřečetl nikdy.
Jinak já mám ISSUE 3, ale vyřadil jsem hned modulátor a použil kompozitní signál.
Napsal: 06 led 2017, 21:27
od lesana87
forbidden píše:Takže je docela dobře možný, že kdybych opravdu trval na úplné osmibitové adrese třeba toho Kempston joysticku (0x1F), tak by mohlo docházet ke kolizím, nebo by se spíš port nepřečetl nikdy.
Adresa na sběrnici bude přeci pořád stejná, takže adresní vodiče na které periferie reaguje budou mít stejnou hodnotu a ostatní jsou jí jedno, a u ostatních periferií není důvod, aby začly reagovat na adresu, na kterou nereagovaly.
Napsal: 06 led 2017, 22:06
od Kremik
lesana87 píše:Jinak, Z80 umí adresovat periferie 16-bitově.
Aha, děkuju, ještě že Tě tu máme. Dobrý procesorek.. Jenom škoda, že ten čas tak letí.
Napsal: 06 led 2017, 22:25
od PotPalo
V jednoduchosti: napríklad Kempston joystick používa port 31, neúplnú adresáciu. Teda signály zbernice A0 až A7 udávajú číslo 31. Signály A8 až A15 sa nepoužívajú, teda sa ignoruje ich stav. Takže logicky tým blokuje peknú časť zbernice (256 portov), nielen vstup 31. Keď napríklad načítam port 2079, je to zase len port 31, lebo A0 až A7 mi udáva číslo 31. Binárne asi takto: xxxxxxxx 00011111. Interface sleduje len A0 až A7 (A8 až A15 sa ignoruje), a keď je tam 31 (plus signál IORQ a ešte neviem čo), tak vyšle D0 až D7. To už som písal, nie?
Spectrum 128KB používa úplnú adresáciu portov na stránkovanie pamäte.
edit: Kempston a úplná adresácia. To by nešlo, napríklad hry čítajú port 31 (IN 31), ale v A registry môže byť predtým čokoľvek. Pri úplnej adresácii by tam muselo byť vždy 0, aby to čítalo PRESNE port 31.
edit2: tak teraz neviem, asi som napísal blud. Najlepšie je sa pozrieť do schémy zapojenia Didaktik M, ako je to vlastne zapojené a teda aj adresované.
Napsal: 06 led 2017, 22:34
od Sendyx
Pokud si vzpomínám, tak opravdu "plný dekodér" používal pouze /IORQ, A5, A6, A7 a RD a WR. Některé joystickové interface - třeba Cheetah - používaly pouze IORQ a A6, dokonce ani RD nedetekovaly. Na nějaké datové kolize výrobci často kašlali a fungovalo to, pochopitelně pokud nebyla použita žádná další periferie.
Napsal: 06 led 2017, 22:39
od PotPalo
Keď to detekovalo iba A5, tak to obsadzovalo 32768 portov, no nádhera. To potom bolo ťažké sa netrafiť
Ešte že klávesnica mala vlastnú adresnú zbernicu.
Ešte doplním, že keď nebol na Didaktiku kempston interface a čítal sa port 31, výsledkom bolo náhodné číslo (teda náhodne prečítané zo SCREEN pamäti). To potom v hre behali postavičky sami.

Na tomto princípe je detektor kempston joysticku: obrazovka sa zaplní napríklad #ff, prečíta sa niekoľko krát port 31, a keď je tam #ff, tak joystick nieje pripojený a treba ho v hre vypnúť. O synchronizácii obrazovky pomocou portu 255 ani nehovorím, na spectre to fungovalo, ale u didaktiku to nebolo zapojené a buď to blikalo, alebo hra zamrzla a vôbec nešla.
Napsal: 06 led 2017, 23:29
od forbidden
lesana87 píše:Adresa na sběrnici bude přeci pořád stejná, takže adresní vodiče na které periferie reaguje budou mít stejnou hodnotu a ostatní jsou jí jedno, a u ostatních periferií není důvod, aby začly reagovat na adresu, na kterou nereagovaly.
Já to myslel tak, že pokud by periferie očekávala opravdu 0x1F (00011111), ale software by poslal na adresní sběrnici jen 000XXXXX, protože očekává, že periferii stačí A5 v log 0 a případně to RD a IORQ a ty A0-A4 využívá na jiný věci jak psal Hill, tak by to moje trvání na plné adresaci bylo vlastně kontraproduktivní. Je v tom pěknej bordel se mi zdá.
Nebo Hill myslel nevyužívaný bity A8-A15?