2011-12-14 8 views
6

Zauważam z arkusza danych Ziloga na Z80, że z grupą instrukcji I/O (IN i OUT) zawartość różnych rejestrów często umieszczana jest w 8 najlepszych bitach szyny adresowej (w zależności od instrukcji), przy 8 bitach niższych, wybierając jedno z maksymalnie 256 teoretycznie podłączonych urządzeń.Nieudokumentowane 16-bitowe adresowanie I/O na Z80

Moje pytanie brzmi: jaki jest cel robienia tego z tymi górnymi 8 bitami? Wiem, że niektóre maszyny używają tego w jakiś sposób w związku ze zmniejszającą się złożonością dekodowania, ale czy są one do czegokolwiek poważnie wykorzystywane? Chcę zaimplementować instrukcje dokładnie tak, jak sugeruje Z80, ale nie widzę sensu w implementowaniu tego zachowania, ponieważ jest ono niestandardowe. To zachowanie jest opisane jako nieudokumentowane, więc na przykład w "systemie Sega Master", czy uda mi się temu uciec? Wielkie dzięki.

Pozdrawiam, Phil Potter

+1

Nieudokumentowane, ale na arkuszu danych? – chance

+0

Przykro mi, co mam na myśli, chociaż to zachowanie jest normalne - adresowanie urządzeń wejścia/wyjścia jest oficjalnie tylko 8-bitowe. – PhilPotter1987

Odpowiedz

5

zachowanie jest w pełni documented przez Zilog (strony 269-287).

Sądzę, że niektóre urządzenia peryferyjne mogą wykorzystywać górne bity A8..A15 szyny adresowej jako rodzaj 8-bitowego parametru.

+0

Dzięki :-) Lepiej wtedy naśladuj to zachowanie. – PhilPotter1987

+1

"Zmniejszająca się złożoność dekodowania", o której pisał Phil, jest najczęstszym zastosowaniem - użycie pojedynczej linii adresu bezpośrednio, ponieważ włączanie/wyłączanie urządzenia jest tańsze niż logiczne łączenie kilku i nie jest zbyt niepotrzebne, gdy jest ich 16. Klawiatury na 8-bitowych mikroprocesorach mają tendencję do wykorzystywania tego zachowania w celu potraktowania części adresu portu jako pewnego rodzaju parametru, z wyjątkiem tego, że włączasz lub wyłączasz linie klawiatury z liniami adresu (więc jest to jak maska), a wynik kończy się logiczne AND wszystkich dotkniętych linii (nie celowo, tylko dlatego, że tablica była i tak otwarta). – Tommy

2

Niektóre systemy wykorzystują górne 8 bitów jako adres, a niższe 8 bitów jako parametr. Głównym przykładem jest Amstrad CPC. To sprawia, że ​​OUT (C), r jest prawie jedyną użyteczną instrukcją, chociaż oczywiście działa ona teraz jako OUT (B), r; C jest często używane jako parametr dla wygody. Następstwem jest to, że OUT (n), A staje się niemal całkowicie bezużyteczne, chyba że zdarzy ci się chce wysłać do portu 0x34 0x34 itp

+1

Amstrad w rzeczywistości ma sporo [portów] (http://www.cpcwiki.eu/index.php/I/O_Port_Summary), gdzie wszystkie 16 bitów musi być użyte. –

0

Na ZX Spectrum klawiatura może być odczytana tylko przez odczyt z portu 0xfe while najwyższe 8 linii adresowych wybiera jedną z 8 grup po 5 klawiszy. Na przykład, jeśli chce skanować klucze Q, W, E, R i T górne 8 bitów magistrali adresowej musi być 0xfb:

ld bc,#fbfe 
    in a,(c)  ; reading from port 0xfe while upper 8 address lines are 0xfb 

to jest dokładnie taka sama, jak:

ld a,#fb 
    in a,(#fe)  ; reading from port 0xfe while upper 8 address lines are 0xfb 

niektórych maszyn arcade z lat 80. komunikować się z DODATKOWE sprzętowy, wysyłając więcej niż 8 bitów jednocześnie za pomocą jednej instrukcji out - dodatkowe bity są odczytywane z górnych linii adresu.