Neúplná adresace periferií u ZX Spectra

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
forbidden
Příspěvky: 9442
Registrován: 14 úno 2005, 00:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

Neúplná adresace periferií u ZX Spectra

#1 Příspěvek 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.
Přílohy
Kempston Joystick interface.gif
joy2
(11.68 KiB) Staženo 258 x
Kempston Joystick IC.gif
joy1
(39.27 KiB) Staženo 256 x
Interface pro Spectrum Dipra.gif
Dipra
(13.71 KiB) Staženo 273 x
Kremik
Příspěvky: 3885
Registrován: 30 bře 2012, 00:00
Bydliště: Havířov

#2 Příspěvek 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.
Uživatelský avatar
forbidden
Příspěvky: 9442
Registrován: 14 úno 2005, 00:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#3 Příspěvek 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.
Uživatelský avatar
Hill
Administrátor
Příspěvky: 21236
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#4 Příspěvek 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.
Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#5 Příspěvek od lesana87 »

Tady je seznam různých periferií a adresy, na které reagují. http://www.worldofspectrum.org/faq/reference/ports.htm
Uživatelský avatar
forbidden
Příspěvky: 9442
Registrován: 14 úno 2005, 00:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#6 Příspěvek od forbidden »

OK, dík za ten seznam, prostuduju to. Třeba časem Spectrum využiju i k něčemu užitečnýmu. :)
Uživatelský avatar
Hill
Administrátor
Příspěvky: 21236
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#7 Příspěvek 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...
Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#8 Příspěvek 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ší.
Uživatelský avatar
forbidden
Příspěvky: 9442
Registrován: 14 úno 2005, 00:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#9 Příspěvek 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.
Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#10 Příspěvek 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.
Kremik
Příspěvky: 3885
Registrován: 30 bře 2012, 00:00
Bydliště: Havířov

#11 Příspěvek 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í.
Uživatelský avatar
PotPalo
Příspěvky: 6018
Registrován: 13 kvě 2009, 00:00
Bydliště: BA

#12 Příspěvek 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é.
Naposledy upravil(a) PotPalo dne 06 led 2017, 22:35, celkem upraveno 1 x.
Je na čase vymeniť primátora Bratislavy, a celú tú neschopnú pakáž okolo.
Uživatelský avatar
Sendyx
Příspěvky: 12454
Registrován: 05 čer 2005, 00:00
Bydliště: Ostrava

#13 Příspěvek 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.
Curvetraceristé všech zemí spojte se!
Uživatelský avatar
PotPalo
Příspěvky: 6018
Registrován: 13 kvě 2009, 00:00
Bydliště: BA

#14 Příspěvek od PotPalo »

Keď to detekovalo iba A5, tak to obsadzovalo 32768 portov, no nádhera. To potom bolo ťažké sa netrafiť :lol:
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. :lol: 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.
Je na čase vymeniť primátora Bratislavy, a celú tú neschopnú pakáž okolo.
Uživatelský avatar
forbidden
Příspěvky: 9442
Registrován: 14 úno 2005, 00:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#15 Příspěvek 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?
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“