Sistema senza ROM
Caricabile dalla porta stampante

AVVERTENZA: Il sistema presentato il queste pagine è uno studio
teorico, non l'ho mai costruito e potrebbero esserci degli errori.

Sfruttando i segnali dello Z80 e il suo comportamento all'accensione (o dopo un RESET) è possibile realizzare un sistema senza ROM (o EPROM) caricabile attraverso la porta stampante di un PC.
Usando un sistema con un solo chip di memoria RAM non è necessario alcun address decoder. Il segnale MREQ può comandare direttamente le due porte OR per l'"accesso sicuro" alla memoria. 

Il chip si trova mappato agli indirizzi compresi tra 0 e 32767. Il sistema dispone di soli 32K e il bit A15 non viene usato. 

All'accensione o dopo un RESET lo Z80 cerca la prima istruzione da eseguire all'indirizzo 0 della memoria. Per fare questo pone il valore binario 0 sui fili A0..A15 (BUS indirizzi) e abbassa MREQ e RD. Poi attende per 1,5 cicli di clock e legge il BUS dati. 

All' accensione questa memoria contiene però valori casuali, pertanto la CPU non trova alcun programma valido da eseguire.

Deviando il segnale RD verso un buffer three state (SN74HC244) è possibile far arrivare alla CPU un byte dall'esterno come se arrivasse dalla memoria. 

In questo disegno il deviatore è posto nella posizione di accesso alla memoria. Se viene commutato i valori vengono letti dal buffer di ingresso. 

La CPU si aspetta di trovare un dato valido entro 1,5 cicli di clock ma difficilmente il circuito esterno sarà veloce come la vera memoria, per questo motivo è necessario sospendere l'attività della CPU finchè il dato non è pronto. Il pin WAIT dello Z80 serve proprio per l'accesso a dispositivi "lenti", portando WAIT a 0 il processore aspetta. Il fronte di discesa di RD può quindi essere usato per comandare un flip flop collegato a WAIT. 

In questo schema i due deviatori in realtà sono un unico deviatore due vie due posizioni. Qui è disegnato nella posizione di lavoro (RUN) in cui RD arriva alla memoria e WAIT è fisso a 1. Commutandolo nella posizione di caricamento (LOAD) RD arriva al buffer di ingresso e WAIT viene controllato dal flip flop. 

Il circuito esterno deve osservare il livello di WAIT per capire quando la CPU richiede un dato. A questo punto può inviare il dato sugli ingressi del buffer three state e generare un segnale di strobe che resetti il flip flop e riporti alto WAIT. Quando WAIT torna alto la CPU legge il dato e prosegue con le sue operazioni. 

Usando la porta stampante si possono inviare i dati sugli 8 fili D0..D7, leggere lo stato di WAIT attraverso il pin BUSY e inviare l'impulso di conferma attraverso il pin STROBE.

 
 

Il sistema va usato nel seguente modo: si avvia l'apposito programma su PC per il caricamento, si pone il deviatore su LOAD e si accende il modulo. Si avvia il trasferimento dal programma su PC e quando il trasferimento è terminato si preme il pulsante di reset del modulo. Tenendolo premuto, si commuta il deviatore su RUN, a questo punto quando si rilascia reset parte il programma che abbiamo caricato all'indirizzo 0.

In questo modo, usando un programma su PC, è possibile inviare alla CPU i codici operativi di qualsiasi istruzione e fargli eseguire passo passo un programma che carichi in memoria i valori che vogliamo (solo la lettura dalla memoria è deviata, la scrittura funziona benissimo). L'unica limitazione è che questo programma di caricamento deve essere rigorosamente sequenziale (niente salti o CALL).

Questo programma rimane in RAM fino a quando non si toglie l'alimentazione e ad ogni pressione di reset riparte dall'inizio.

Se vogliamo per esempio caricare 1000 byte all'indirizzo zero possiamo inviare come prima cosa le istruzioni:

    LD HL,0
    LD DE,0
    LD BC,1000
    LDIR
Queste istruzioni rappresentate in esadecimale sono gli 11 byte: 21 00 00 11 00 00 01 E8 03 ED B0.

A questo punto la CPU si attende i 1000 byte che andrà a scrivere in memoria a partire dall'indirizzo 0.

Volendo poi si può terminare il processo di caricamento inviando un 76H (istruzione HALT) che arresta l'esecuzione del programma (e quindi la CPU non cerca di leggere altri dati).

Impiegando un integrato di I/O di tipo 8255 è possibile realizzare un sistema completo (con tre porte di ingresso/uscita) e un numero limitato di componenti. Visto che ad ogni accensione questo sistema richiede il caricamento dalla porta stampante, è adatto per prove o come elemento programmabile esterno da usare assieme al PC. Non è invece adatto ad essere usato come modulo autonomo. 

E'da notare che la porta stampante serve solo per il boot, se il PC deve interagire con il modulo durante il suo funzionamento deve farlo per altre vie (es: porta seriale). 


Cliccare sul disegno per vedere lo schema elettrico
Integrato SN7400


Pagina e disegni realizzati da Claudio Fin
Ultimo aggiornamento 23-9-2000