Personal computer/Mapping: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pizeta (discussione | contributi)
Nessun oggetto della modifica
Pizeta (discussione | contributi)
decodifica degli indirizzi
Riga 23:
**[[Personal_computer/Mapping/Interfacce#PIC_8259|PIC 8259]]
 
 
== Decodifica degli indirizzi ==
 
Qualsiasi dispositivo fisico, che sia una memoria o una interfaccia, per essere accessibile dal software deve poter essere indirizzato, ovvero deve occupare una finestra dello spazio di indirizzamento.
 
Il '''mapping''' consiste nell'associare ad un dispositivo una porzione dello spazio di indirizzamento e di generare, a partire dai bit sul bus degli indirizzi e dai segnali di comando, un segnale di selezione per quel dispositivo.
 
Sia un'interfaccia che una memoria, ma vale lo stesso discorso per qualsiasi agente master indirizzabile (controller DMA, controller hard disk, ...), occupa n=2^k posizioni nello spazio di indirizzamento. ''n'' rappresenta il numero di oggetti (ad esempio un registro) di 8 bit indirizzabili, ''k'' il numero di bit di indirizzo per il dispositivo.
 
Avendo a disposizione ''k'' indirizzi, che si traducono in ''k'' connessioni, qualsiasi dispositivo ha al suo interno un decoder di k variabili con un ''ingresso di enable'' detto ''chip select'' o ''chip enable'' che consente alla CPU di abilitare soltanto il dispositivo selezionato.
 
Quasi sempre il mapping dei dispositivi è '''allineato''', ovvero l'indirizzo più basso tra tutti quelli associati al dispositivo è un multiplo della dimensione in byte dello stesso. L'allineamento semplifica notevolmente la decodifica degli indirizzi. Supponiamo infatti di avere un dispositivo con ''A'' indirizzi mappato in uno spazio di indirizzamento da ''2^a'' bit (''a'' bit di indirizzo), posto ''i'' = ''A'' - ''a'' esistono 2^i posizioni in cui poter mappare il dispositivo, tuttavia soltanto se questo è allineato gli ''a'' indirizzi dello spazio di indirizzamento possono essere considerati come il concatenamento di ''A'' e ''i''.
Supponendo di avere uno spazio di indirizzamento di 10 bit e voler mappare un dispositivo da 256 byte = 2^8. Allineando il dispositivo i due bit più significativi dello spazio di indirizzamento indicano che sono possibili 4 finestre (2^2) che sono appunto i byte da 0-255, 256-511, 512-767, 768-1024. Osservando la configurazione binaria degli indirizzi le quattro finestre sono (in parentesi l'indirizzo esadecimale)
00 0000 0000 ( 0 00H )
00 1111 1111 ( 0 FFH )
01 0000 0000 ( 1 00H )
01 1111 1111 ( 1 FFH )
10 0000 0000 ( 2 00H )
10 0000 0000 ( 2 FFH )
11 0000 0000 ( 3 00H )
11 1111 1111 ( 3 00H )
Gli 8 bit più significativi saranno decodificati internamente al dispositivo per selezionare il relativo elemento di memoria, i due bit più significativi serviranno invece per selezionare il dispositivo in una delle quattro finestre.
 
Sono possibili due tipi di decodifica degli indirizzi:
* decodifica completa
* decodifica semplificata
 
=== Decodifica completa ===
=== Decodifica semplificata ===
 
== Gestione delle interfacce tramite programma ==