# Personal computer/Mapping/Interfacce

Personal computer
* Storia dei calcolatoriPersonal computer/Storia
* Architettura del calcolatorePersonal computer/Architettura
** CPUPersonal computer/Architettura/CPU
** MemoriaPersonal computer/Architettura/Memoria
** Input/OutputPersonal computer/Architettura/IO
* Linguaggio MacchinaPersonal computer/Linguaggio Macchina
** DLXPersonal computer/Linguaggio Macchina/DLX
*** Operazioni DLXPersonal computer/Linguaggio Macchina/DLX/Operazioni
*** DLX sequenzialePersonal computer/Linguaggio Macchina/DLX/DLX_sequenziale
*** DLX in pipelinePersonal computer/Linguaggio Macchina/DLX/DLX_pipeline
** 8086-8088Personal computer/Linguaggio Macchina/8086
* Mapping di Memorie ed InterfaccePersonal computer/Mapping
** Integrati NotevoliPersonal computer/Mapping#Caratteristiche_e_funzionamento_degli_integrati_notevoli
*** DriverPersonal computer/Mapping/Driver
*** CPUPersonal computer/Mapping/CPU
*** Memoria PrincipalePersonal computer/Mapping/Memorie
*** Interfacce I/OPersonal computer/Mapping/Interfacce
** Gestione delle interfacce tramite programmaPersonal computer/Mapping#Gestione_delle_interfacce_tramite_programma
* Standard alla base di un personal computerPersonal computer/Standard
* Appendici e RiassuntoPersonal computer/Appendici
Modifica il sommario
Le interfacce di I/O permettono la comunicazione tra CPU e dispositivi periferici. Qualsiasi dispositivo di interfacciamento ha quindi due interfacce, una rivolta verso il bus di sistema e quindi standard, l'altra specifica per il dispositivo periferico e quindi dipendente dal tipo di unità.
Per quanto riguarda un'interfaccia ad 8 bit, considerando soltanto la parte rivolta verso il bus dati, saranno sicuramente presenti i pin:

### 8255 - Interfaccia Parallela

L'interfaccia parallela 8255 gestisce tre porte bidirezionali (input/output) in 3 modalità di funzionamento: è quindi un'interfaccia programmabile. Dispone di 4 registri interni per lo scambio di:
* dati (un registro in ingresso ed uno in uscita)
* informazioni di controllo, programmazione (un registro)
* informazioni di stato
Avendo soltanto quattro porte, i bit di indirizzo sono due (A0 e A1), con le configurazioni:
I pin di comunicazione del bus sono in tri-state, sia quando il CS* è al valore logico alto (è un segnale attivo basso), sia quando entrambi i segnali RD* e WR* sono alti.
Le tre modalità di funzionamento sono:
* Modo 0: Basic Input/Output La CPU legge/scrive sulle porte senza alcun meccanismo di sincronizzazione con l'unità periferica collegata all'interfaccia parallela.
* Modo 1: Strobed Input/Output La CPU si sincronizza al dispositivo periferico tramite un protocollo di handshake attraverso l'interrupt.
* Modo 2: Strobed Bi-directional I/O La comunicazione tra CPU e dispositivi è bidirezionale.
Tutte le tre porte possono essere programmate in modalità 0, mentre solo A e B possono esserlo in modalità 1. La porta C avrà sui bit da 4 a 7 (PC7-4) i segnali per la gestione del protocollo di handshake, se la porta A è in modalità 1; e sui bit da 0 a 3 (PC3-0) i segnali per la gestione del protocollo di handshake, se la porta B è in modalità 1.
Il registro di controllo conterrà una control word i cui bit sono:
Per cui, se volessimo programmare i pin “liberi” della porta C (lower) in input, la porta B in modo 1-output, i pin “liberi” della porta C (upper) in output, e la porta A in modo 0-input, avremo:
10010101.

### PIC 8259 (Programmable Interrupt Controller)

L'integrato 8259 riesce a gestire singolarmente fino a 8 richieste di interruzioni da dispositivi esterni (IR0..IR7),e fino a 64 con un utilizzo di altri 8 8259 in cascata.
Caratteristiche generali:
* L'8259 occupa due byte nello spazio di indirizzamento, utilizzati per la programmazione
* Possibilità i mascherare le richieste di interruzione dall'esterno
* Possibilità di modificare le priorità di gestione delle interruzioni dei dispositivi
* Possibilità di mettere in esecuzione e gestire più interruzioni contemporaneamente(Fully Nested Mode).
* L'8259 non ha il segnale di RESET ergo al riavvio della macchina rimane la sua programmazione interna (non una di default come nei normali dispositivi), deve essere necessariamente riprogrammato in fase di avvio del sistema insieme agli altri dispositivi se si vuole un comportamento diverso.
Funzionamento Interno:
All'interno l'8259 ha 3 registri da 8 bit non indirizzabili dal processore ma riservati per la gestione interna.
* IMR (Interrupt Mask Register) è utilizzato per mascherare le richieste di interruzione
* IRR (Interrupt Request Register) quando le richieste arrivano all' 8259 vengono campionate in questo registro
* ISR (In Service Register) in modalità normale EOI memorizza quale interruzione è eventualmente in servizio
* Priority Resolution che si occupa di gestire la corretta gestione tra i registri e risolvere i conflitti.
Programmazione del PIC:
I due byte di indirizzo, sono utilizzati per la programmazione dell'8259 con diverse parole di controllo le Initialization control word ICW1,ICW2,ICW3(master e slave),ICW4 e le operation control word OCW1,OCW2. La programmazione avviene in maniera sequenziale, la prima control word ha il bit4=1 e A0=0, l'8259 comincia così la riprogrammazione, le prossime saranno la ICW2, ICW3(se siamo in configurazione Master/Slave) e la ICW4. Le OCW1 e OCW2 sono utilizzate per il normale funzionamento, la prima stabilisce quali interrupt sono mascherati ovvero non vengono considerati e la seconda può modificare l'ISR e modificare la gestione delle priorità delle IR.
Per A0=0
* OCW2 conterrà una control word i cui bit sono:
Per A0=1
* ICW2 conterrà una control word i cui bit sono:
* ICW4 conterrà una control word i cui bit sono:
* OCW1 conterrà una control word i cui bit sono:
Gestione In Master Slave ....to be continued