Personal computer/Mapping: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pizeta (discussione | contributi)
m divido due categorie
Pizeta (discussione | contributi)
Riga 293:
 
== Gestione delle interfacce tramite programma ==
 
Una generica interfaccia ha dei registri interni che possono essere ''buffer'' dati (ingresso/uscita), registri di stato, di controllo, e che devono essere mappati nello spazio di I/O ed accessibili dalla CPU.
 
Ipotizziamo le seguenti associazioni
'''Buffer Ingresso''' registro all'indirizzo 80H
'''Buffer Uscita''' registro all'indirizzo 81H
'''Status''' registro all'indirizzo 82H
'''Control''' registro all'indirizzo 83H
'''Control Word''' dato binario che è necessario scrivere nel registro di controllo per assicurare il corretto
funzionamento dell'interfaccia, valore D4H
 
Il programma per prima cosa dovrà inizializzare l'interfaccia
BufferIn EQU 80H ; l'istruzione EQU definisce degli identificatori
BufferOut EQU 81H ; associati a delle costanti
StatusRegister EQU 82H
ControlRegister EQU 83H
ControlWord EQU D4H
MOV AL, ControlWord ; carica in AL la costante ControlWord
OUT ControlRegister, AL ; e trasferiscila nel registro associato a ControlRegister
 
Una volta inizializzata l'interfaccia sono possibili le operazioni di
 
'''Lettura dello stato'''
IN AL, StatusRegister ; carica in AL il contenuto del registro di stato dell'interfaccia
 
'''Lettura di un dato, ''Input'' '''
IN AL, BufferIn ; Preleva dal Buffer il contenuto del registro
MOV Dati[SI], AL ; memorizzane il valore nel vettore Dati all'indirizzo SI
INC SI ; incrementa l'indice del vettore per poter prelevare un altro dato dal buffer
 
'''Scrittura di un dato, ''Output'' '''
MOV AL, Dati[SI] ; Copia il valore della cella del vettore da trasferire
OUT BufferOut, AL ; memorizzala nel registro Buffer Out
INC SI ; incrementa l'indice del vettore per poter trasferire un altro dato del vettore
 
Le operazioni di lettura e scrittura necessitano una '''sincronizzazione''', l'interfaccia deve comunicare alla CPU che è disponibile un dato nel Buffer Input o che il Buffer Output è vuoto e quindi scrivibile.
 
La sincronizzazione, come visto in generale per le [[Personal_computer/Architettura/IO|interfacce di I/O]] può avvenire per
* '''polling''' o a controllo del programma
* '''interrupt''' o con interruzioni
 
=== Gestione a Polling ===
 
=== Gestione ad Interrupt
[[Categoria:Informatica]][[Categoria:Personal Computer]]