La scheda GPC-F2 della Grifo, nella versione utilizzata, monta una EPROM da 32 KB ed una RAM da 64 KB. La mappa di memoria utilizzata è la seguente:
XDATA | CODE | |
---|---|---|
FFFFh | I/O Mappato | Vuoto |
FA00h | ||
F9FFh | RAM | |
8000h | ||
7FFFh | RAM | ROM |
0000h |
Come si può vedere, la RAM dall'indirizzo 8000h all'indirizzo F9FFh
(la h stà per hexadecimal, esadecimale) può essere sia letta e scritta
nello spazio XDATA, sia letta ed eseguita nello spazio CODE.
Un monitor è allora in grado di caricare in quest'area un programma, ricevuto
tramite la seriale, e di mandarlo in esecuzione, magari modificandolo per inserirvi
dei breackpoint.
Nel nostro caso, il monitor Mo52 utilizza i primi 80 byte, da 8000h ad 804Fh, per
le sue variabili. Il programma verrà quindi caricato all'inidirizzo 8050h.
Per consentire di scrivere programmi che utilizzino interrupt, i vettori di interruzione
vengono rilocati nell'area del programma:
Vettore | Normale | Reindirizzato da Mo52 |
---|---|---|
External Interrupt 0 | 0003h | 8053h |
Timer Interrupt 0 | 000Bh | 8053h |
External Interrupt 1 | 0013h | 8063h |
Timer Interrupt 1 | 001Bh | 806Bh |
Serial Interrupt | 0003h | 8053h |
Per quanto riguarda l'I/O incorporato nell'8051, solo due dei piedini del Port 1 sono connessi esternamente:
Port | Bit | I/O |
---|---|---|
P1 | 2 | LED Giallo + Beeper |
P1 | 5 | LED Verde |
Il resto dell'I/O è mappato nello spazio XDATA, dall'indirizzo FA00h all'indirizzo FFFFh. I dispositivi di I/O installati sono i seguenti:
Indirizzo | Dispositivo | |
---|---|---|
FA00h ... FA3Fh | PPI 8255 | Emulato |
FA40h ... FA7Fh | Timer 82c54 (Primo) | Non Emulato |
FA80h ... FABFh | Timer 82c54 (Secondo) | Non Emulato |
FAC0h ... FAFFh | RTC 6242b | Non Emulato |
FB00h ... FFFFh | Bus di sistema Grifo | Non Emulato |
Veniamo ora al PPI 8255 (l'unica periferica esterna che tratteremo, perchè è l'unica emulata). I suoi registri sono:
Indirizzo | Registro | Descrizione |
---|---|---|
FA00h | PDA | Registro dati del port A |
FA01h | PDB | Registro dati del port B |
FA02h | PDC | Registro dati del port C |
FA03h | CNT | Registro di controllo |
Scrivendo nei registri PDA, PDB o PDC i dati scritti vanno nel relativo
port (A, B o C), se il port è configurato come uscita. Leggendo dai registri
PDA, PDB o PDC si ottiene il dato in ingresso (se il relativo port è
configurato come ingresso) o il dato scritto in precedenza (se il port è configurato
come uscita).
Per i port A e B la direzione (ingresso o uscita) viene programmata
per l'intero port. Nel port C invece la direzione può essere programmata
indipendentemente per i bit da 0 a 3 (metà bassa) ed i bit da 4 a 7
(metà alta). Vediamo ora il significato dei bit del registro di configurazione CNT:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||||||||||
Direzione Port C 0..3 | 0 = Uscita | |||||||||||||||||
1 = Ingresso | ||||||||||||||||||
Direzione Port B | 0 = Uscita | |||||||||||||||||
1 = Ingresso | ||||||||||||||||||
Modo Port B | 0 = Modo 0 - I/O di base | |||||||||||||||||
1 = Modo 1 - Monodirezionale con handshake | ||||||||||||||||||
Direzione Port C 4..7 | 0 = Uscita | |||||||||||||||||
1 = Ingresso | ||||||||||||||||||
Direzione Port A | 0 = Uscita | |||||||||||||||||
1 = Ingresso | ||||||||||||||||||
Modo Port A | 00 = Modo 0 - I/O di base | |||||||||||||||||
01 = Modo 1 - Monodirezionale con handshake | ||||||||||||||||||
10 = Modo 2 - Bidirezionale con handshake | ||||||||||||||||||
11 = Modo 2 - Bidirezionale con handshake | ||||||||||||||||||
Programmazione | 0 = Accende o spegne i singoli bit del port C | |||||||||||||||||
1 = programma il modo dei port |
Il port B è connesso al banco di DIP Switch, quindi và sempre
programmato in ingresso (bit 1 ad 1) e, dato che non utilizza l'handshake
(segnali di controllo) và anche impostato in modo 0 (bit 2 a 0).
Per il resto, i port possono essere programmati come si vuole. Per approfondimenti rimando alla documentazione originale (Datasheet originale Intel 82C55A CHMOS Programmable
Peripheral Interface)
Prof. Stefano Salvi