2011-12-14 11 views
6

Mi accorgo dalla scheda tecnica Zilog sulla Z80 che con il gruppo di istruzioni I/O (IN e OUT), i contenuti di vari registri sono spesso collocati nei primi 8 bit del bus di indirizzo (a seconda dell'istruzione), con gli 8 bit più bassi selezionando uno tra 256 dispositivi connessi teoricamente.Indirizzamento I/O a 16 bit non documentato su Z80

La mia domanda è: che senso ha farlo con questi 8 bit superiori? So che alcune macchine lo usano in qualche modo collegato alla decrescente complessità della decodifica, ma sono seriamente usate per qualcosa? Voglio implementare le istruzioni esattamente come suggerisce lo Z80, ma non vedo il punto nell'attuazione di questo comportamento in quanto non standard. Questo comportamento è descritto come non documentato, per esempio su un 'Sega Master System', riuscirò a farla franca? Grazie molto.

saluti, Phil Potter

+1

Non documentato ma sulla scheda tecnica? – chance

+0

Mi spiace, ma questo comportamento è normale: l'indirizzamento dei dispositivi I/O è ufficialmente solo a 8 bit. – PhilPotter1987

risposta

5

Il comportamento è completamente documented da Zilog (pagine 269-287).

Immagino che alcune periferiche possano utilizzare i bit superiori A8..A15 del bus di indirizzi come una sorta di parametro a 8 bit.

+0

Grazie :-) Meglio emulare questo comportamento comunque. – PhilPotter1987

+1

La "complessità decrescente di decifrazione" suggerita da Phil è l'uso più comune: utilizzare una singola riga di indirizzo direttamente come abilita/disabilita il dispositivo è più economico che combinare logicamente diversi e non sembra troppo dispendioso quando ce ne sono 16. Le tastiere su micros a 8 bit tendono a sfruttare questo comportamento per trattare parte dell'indirizzo di porta come una sorta di parametro, tranne che abiliti o disabiliti le linee di tastiera con le linee di indirizzo (quindi è come una maschera) e il risultato finisce per essere l'AND logico di tutte le linee interessate (non di proposito, solo perché la scheda era comunque open collector). – Tommy

2

Alcuni sistemi utilizzano gli 8 bit superiori come indirizzo e gli 8 bit inferiori come parametro. Il CPC di Amstrad è l'esempio principale. Questo rende OUT (C), quasi l'unica istruzione utilizzabile, sebbene naturalmente ora agisca effettivamente come OUT (B), r; C viene spesso utilizzato come parametro per comodità. Il corollario è che OUT (n), A diventa quasi del tutto inutile, a meno che non vi capita di voler inviare 0x34 a 0x34 porto, ecc

+1

Amstrad ha in effetti alcune [porte] (http://www.cpcwiki.eu/index.php/I/O_Port_Summary) dove tutti i 16 bit devono essere usati. –

0

Sulla ZX Spectrum la tastiera può essere letto solo con la lettura dal porto 0xfe mentre le 8 linee di indirizzo più alte selezionano uno degli 8 gruppi di 5 tasti. Ad esempio, se si desidera acquisire i tasti Q, W, E, R e T superiori 8 bit del bus indirizzi devono essere 0xfb:

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

Questo è esattamente lo stesso come:

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

Alcune macchine arcade degli anni '80 comunicare con l'additio hardware nale emettendo più di 8 bit alla volta con un'istruzione out - i bit aggiuntivi vengono letti dalle righe dell'indirizzo superiore.