Progetto Aleph: 16 Mb possono bastare allo Z80 ?

E’ ufficiale, la CPU Z80 può indirizzare 16 Mb senza bank switch

INTRODUZIONE

In questi anni l’emulazione nelle sue varie forme è stata fonte di ispirazione per la progettazione dei sistemi più disparati dove ogni progettista ha dovuto cercare piccole/grandi soluzioni per lo sviluppo del progetto. Oggi abbiamo il piacere di ospitare sulle nostre pagine un progetto di italico ingegno per il quale è ancora mantenuto uno stretto riserbo a riguardo delle soluzioni adottate. Il progettista inizia a renderle pubbliche attraverso questa intervista.

IL PROGETTO

si chiama Aleph ed il suo progettista è l’eclettico Isacco Luongo. Per chi volesse sapere di più dei suoi interessi può accedere liberamente al suo blog ricco di interessanti articoli.

All’inizio dell’intervista Isacco ha tenuto a precisare che questi esperimenti sono stati eseguiti nell’estate del 2017 ed affidati ad appassionati del settore con l’intento di promuoverli in modo efficace. Purtroppo questo non è accaduto, l’autore non ha avuto alcun contatto e quasi nessuno si è accorto delle novità. Così il nuovo progetto ha dovuto segnare il passo, chiuso in una anonima nota di redazione.
Oggi riprendiamo la cronologia degli eventi da quel punto in modo da divulgare com completezza di dettagli il valore e gli obiettivi del progetto Aleph.

Come sappiamo il microprocessore Zilog Z80 è classificato come cpu a 16 bit di indirizzamento e 8 bit dati, quindi può indirizzare solo 65.536 bytes di memoria complessiva, che sia essa ram e/o rom. E’ una CPU che esiste da oltre 40 anni ed è stata studiata in modo approfondito da eminenti studiosi di tutto il mondo. La lista di home computer dotati del processore Z80 è molto lunga e balzò anche all’attenzione dell’ing. Kazuhiko Nishi che realizzò lo standard MSX. Questa CPU per lungo tempo è stata il cavallo di battaglia dell’anglosassone Sir Clive Sinclair, inventore dello ZX Spectrum, l’anti-commodore per eccellenza prima ancora delle dispute Atari-Amiga.

Chiaramente, continua Isacco, il declino delle vendite di questo gioiello di tecnologia dal cuore italiano ha una data ben precisa, 12 agosto 1981 e coincide con la nascita del microprocessore intel 8088 e del primo computer IBM con indirizzamento a 20 bit. Questa data segnerà la nascita del duopolio Intel-Microsoft. L’universo dei sistemi satellite basati sulle varianti del sistema CP/M come Osborne, North-Star, Cromemco che realizzò “Dazzler” la prima scheda video a colori della storia del computer, finì per soccombere con la nuova creatura di IBM.

Cosa aveva quel computer che agli altri mancava ?

Quelli sono i tempi in cui Bill Gates pronuncia la frase infelice “640Kb di memoria RAM possono bastare a chiunque”. Ecco cosa mancava agli altri computer, la memoria che secondo il mito dell’epoca IBM quasi la regalava.

Isacco ci rivela che il motivo per cui tante aziende fallirono in America ed altrove è perché non sono riuscite a fare pieno uso delle caratteristiche della CPU Z80, è stato un errore dalle origini lontane, da ricercare nel patriottismo del militare della marina statunitense Gary Kildall. Egli, dice Isacco Luongo, non basò il sistema operativo CP/M sul microprocessore Z80 ma sul suo antenato 8080 di intel, così quelle caratteristiche ed innovazioni volute dal fisico veneziano Federico Faggin furono escluse dai sistemi basati su CP/M, da cui l’epilogo.

Torniamo ai nostri giorni, oggi dopo 37 anni da quel fatidico 12 agosto 1981 scopriamo che grazie alle ricerche di uno studioso autodidatta, con precisi accorgimenti la CPU Z80 può arrivare ad indirizzare fino a 32 megabyte di memoria.

Con precisi accorgimenti si intendono complesse logiche in tecnologia FPGA o dispositivi di terze parti che svolgono il lavoro al posto della CPU ?

Nulla di tutto questo, risponde il progettista Isacco Luongo, nel mio progetto ci sono solo porte logiche e qualche comparatore di uguaglianza. Il lavoro lo esegue tutto il microprocessore Z80 che ha un registro speciale per indirizzare le pagine di memoria estesa. Un indirizzo esteso ha la stessa forma di un indirizzo intel 8088 in modalità reale, solo che Aleph non segmenta la memoria e gli indirizzi sono univoci. Soffermiamoci su questo aspetto: la CPU intel 8088 può mappare la stessa locazione di memoria in 4096 modi diversi e solo gli otto bit più a sinistra del byte di segmento sono realmente significativi; invece per Aleph ad ogni valore corrisponde un indirizzo diverso, quindi è un indirizzamento lineare, non segmentato e contiguo. Ad esempio per mappare l’indirizzo posto a 256Kb dall’indirizzo nullo su un intel 8088 scriveremmo in hex 4000:0000h, in ambiente Aleph lo stesso indirizzo lo rappresentiamo con una coppia di registri dello Z80 che contiene il seguente indirizzo hex 04:0000h oppure linearmente come accade con il MC68000 in hex 4.0000h. Naturalmente l’indirizzo più alto ottenibile in questo modo sarebbe hex 0FF:FFFFh, ovvero quell’indirizzo di memoria che dista 16.777.215 bytes dall’indirizzo NULL. Con il sistema Aleph per eseguire il dump della memoria si esegue il comando: “dump PP.AAAA “, analogamente per inserire in memoria un testo ascii si esegue il comando “insert PP.AAAA “, dove PP è il numero di pagina ad 8 bit e AAAA che rappresenta l’offset a 16 bit, per un totale di 24 bit lineari di indirizzamento, con pagine di 64Kb ciascuna. Chiaramente nello spazio dei 16 Megabyte è possibile avere il codice in una pagina ed i dati in un’altra, non solo lo Z80 può caricare programmi e dati che si estendono su più pagine di 64Kb, può saltare da una pagina ad una subroutine che si trova in un qualsiasi indirizzo dei 16 Megabyte. Tutto questo si poteva fare già nell’anno 1981. Ho usato solo componenti che già esistevano in quegli anni, per dimostrare che la CPU Z80 poteva fare molto di più e che di fatto gli si chiedeva solo di di funzionare solo in modo parziale. Lo Z80 ha un doppio set di registri, è una sorta di Pentium 4 Hyper-Trading, un dual core 8080 con una CPU fisica ed un core virtuale in una memoria/registro selezionabile per cambiare task o contesto di sistema.

L’ideatore di Aleph divaga raccontando di essere un amighista purosangue che per colpa del professore di sistemi, Giuseppe Pastena, all’Istituto Tecnico Industriale di Avellino ha finito per studiare la CPU Z80 che per lui era l’anti-Commodore, ma poi ha dovuto rivedere la sua posizione almeno per quanto riguarda il processore.

Poi continua: “Aleph non è più solo un progetto su carta, è cresciuto e non basta più una scrivania per contenere le schede”

BOT-Aleph-Y with M.M.U
BOT-R.E.C.I
BOT-Term

Fig.1 – Lo hardware Aleph-Y con M.M.U. (Memory Managment Unit)
Fig.2 – Terminale R.E.C.I.
Fig.3 – Il test eseguito con Termite manda in crash il programma, nasce l’esigenza di perfezionare R.E.C.I.

“Ha molte funzionalità, a breve sarà dotato di una propria scheda video e si potrà tagliare definitivamente il “cordone ombelicale” ovvero i cavi null-modem che collegano Aleph al mondo esterno. Per quanto riguarda il software sto scrivendo la prima versione dello assembly a 24 bit per CPU Z80, sarà così possibile eseguire programmi complessi con eseguibili di dimensioni sino a 16 o 32 megabytes, dipende solo da come utilizzerò l’ultimo bit di indirizzamento.
Al momento il sistema comunica per mezzo di R.E.C.I. v.1.0s, è un terminale che ho scritto per DOS/freeDOS il cui codice sorgente e grande quanto il dizionario di greco di mia figlia Sara. Bene! Questa è solo un’anteprima del sistema, ma prometto che vi terrò aggiornati anche sul gruppo Facebook: Planet Aleph-Z80 (All Retrocomputers Included).”

IL TEST DI TRASFERIMENTO DATI

E’ stato realizzato un semplice test di trasmissioni dati verso il dispositivo remoto collegato via porta seriale per mezzo di un cavo null-modem. Il file trasterito è il file di testo RECI1E.ASM (un sorgente in assembly i8088) di 292 Kb. Da un lato abbiamo la scheda-madre prototipo con la scheda MMU collegata alla Kio board (keyboard AT/PS2) e doppia porta seriale RS-232/C, dall’altro un comune PC-intel based (Pentium IV) con freeDOS ed il programma R.E.C.I. che permette la trasmissione di dati in pacchetti di 64 Kb con verifica mediante checksum. La configurazione della connessione seriale è quella standard: 9600 baud, dati a 8 bit, nessuna parità ed 1 Stop bit. Il file è trasferito da un sistema freeDos (FAT32) alla memoria ram di Aleph a partire dall’indirizzo fisico 03:0000h che corrisponde all’indirizzo lineare 03.0000h. L’unico difetto è nel checksum di risposta da remoto che viene tagliato per overrun della linea seriale, sembra che Aleph trasmetta troppo velocemente ed il videoterminale emulato da un Pentium IV non riesca a stare al passo con l’I/O dello Z80. Questo problema in realtà è una virtù di Aleph che tende a saturare la banda-passante del canale di trasmissione, infatti alcuni terminali testati su PC-Windows si bloccano perché non riescono a gestire correttamente la comunicazione in ambiente multitask/time-sharing come nel caso di Termite che si blocca in ricezione. Per questo motivo è stato sviluppato R.E.C.I. in ambiente freeDOS e modalità esclusiva, nonostante tutto ogni tanto si notano casi isolati di overrun.
Il file trasferito è visualizzato in ambiente Aleph-Z80 mediante i tool di sistema di Aleph-RomSystem. Si esegue il comando “TYPE 03:0000” per visualizzare i dati del file inviato nella memoria dello Z80. Naturalmente è stato eseguito il comando “MEM” per verificare la memoria di sistema e tutte le pagine di 64Kb, sono stati eseguiti i dump intrapagina per visualizzare il corretto allineamento dei dati del file ricevuto ed anche in questo caso con esito positivo, non ci sono stati problemi di overlap.
“Lo Z80 può indirizzare ufficialmente 32 Mb ma preferisco usare solo 16 Mb, in futuro vi dirò il perchè …”

Cosi conclude l’ideatore del progetto Aleph e restiamo in attesa di nuovi sviluppi!

eNJoy aND STay TuNeD WiTH uS!

Raffaele “MOS” Sanapo

DISCLAIMER

Questo è un articolo con finalità didattiche e le informazioni sono fornite “così come sono”. I link ai contenuti verso siti web di terzi sono forniti con finalità informative. Non c’è alcun controllo e non si assume alcuna responsabilità dei contenuti o siti web altrui che sono collegati. Tutti i nomi di prodotti, schemi, loghi e marchi sono di proprietà dei legittimi proprietari. L’ uso di questi non implica approvazione degli stessi.

Raffaele Sanapo

“We don't stop playing because we grow old; we grow old because we stop playing.” (George Bernard Shaw)

Share
Share

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie, cliccando su "Accetta" o continuando la navigazione permetti il loro utilizzo.

Chiudi