YAZE: un ottimo emulatore Z80 + CP/M
di Francesco Sblendorio
Per chi vuole cimentarsi con l’utilizzo e lo sviluppo su sistemi CP/M ci sono essenzialmente due possibilità: usare una macchina reale oppure un emulatore. In questo articolo segnalo un ottimo emulatore di una “generica” macchina equipaggiata di CPU Z80 nonché del sistema operativo CP/M, che utilizza come input/output la finestra di terminale del nostro sistema operativo preferito (che sia Linux, Windows, Mac OS X).
L’emulatore in quesitone si chiama YAZE, ed è di un certo pregio in quanto, oltre a una perfetta emulazione della CPU Z80, consente in maniera relativamente semplice lo scambio di file col sistema host, e viene già fornito di un certo numero di software interessanti, preinstallati e funzionanti, tra cui i compilatori HiTech C e Turbo Modula-2 di Borland.
Download e build
YAZE è multipiattaforma, potete scaricarne i sorgenti da questo sito, da cui suggerisco di scegliere l’ultima versione disponibile (a oggi la 2.40.2):
http://www.mathematik.uni-ulm.de/users/ag/yaze-ag/
Le istruzioni per compilarlo sono molto semplici: bisogna prima di tutto scegliere per quale piattaforma vogliamo compilare. Lanciando un “ls -l Make_*
” dalla cartella principale otteniamo l’elenco delle piattaforme disponibili:
La prima operazione da fare è copiare il Makefile corretto in quello effettivo, per esempio per una macchina Linux con processore Intel i7 lanceremo:
cp Makefile_linux_64_intel_corei7 Makefile
NOTA BENE: Sembra non essere disponibile l’opzione per compilare per Mac OS X. In realtà è sufficiente utilizzare il makefile “Makefile_solaris_gcc
“, quindi il comando da lanciare sarà il seguente:
cp Makefile_solaris_gcc Makefile
A questo punto si lancia “make
“, e dopo qualche secondo/minuto sarà disponibile nella cartella il file “yaze_bin
“, che conviene lanciare tramite lo script “yaze
” (per piattaforme UNIX) oppure “yaze.bat
” (per Windows). Supponendo di essere su Mac OS X lanceremo:
sh yaze
Per comodità fornisco una versione precompilata per Mac OS X, basta cliccare qui.
Esecuzione e feature built-in
Al momento dell’esecuzione viene creato un ambiente completo: viene eseguito il sistema operativo CP/M e vengono montati una serie di immagini di floppy disk (sono presenti nella distribuzione con estensione .ydsk). L’avvio si presenta con un ricco README che descrive questa fase. I floppy che vengono montati automaticamente sono presenti in altrettanti drive virtuali, e sono i seguenti:
Drive | Immagine | Contenuto | Spazio libero |
---|---|---|---|
A: | BOOT_UTILS | Disco di boot con CCP.COM (processore dei comandi) | 3434 kB |
B: | CPM3_SYS | Utility di sistema CP/M | 492 kB |
C: | ./disksort/ | Link alla cartella ./disksort | read-only |
D: | DISKSORT | File batch di esempio per l’utility disksort | 138 kB |
F: | ZINC | Utility ZINC di John Elliott | 136 kB |
G: | TEST-UTILS-1.10 | Utility di test per la vecchia versione 1.10 di Yaze | 88 kB |
H: | HI-C-Z280-Compiler | Compilatore C di HiTech Soft | 1056 kB |
I: | UNIXLIKE | Utility UNIX-like | 124 kB |
J: | MMU-Utils | Test per la Memory Management Unit | 118 kB |
K: | Kermit_SZRZ | Kermit | 926 kB |
L: | spl | Ambiente di sviluppo per compilare sorgenti .spl | 146 kB |
M: | Turbo-Modula-2 | Compilatore Modula-2 di Borland | 44 kB |
N: | testdsk | testdisk | 64 kB |
P: | BIOS3 | Sorgenti del BIOS di YAZE | 136 kB |
Di particolare interesse segnalo il compilatore Modula-2 (sul drive M:) di Borland per una serie di ragioni: è un IDE completo (editor + compilatore), è stato sul mercato per un brevissimo lasso di tempo, è stato scritto da Martin Odersky (il papà di Scala), e smanettandoci un po’ si nota che l’evoluzione del Pascal in Turbo Pascal (dalla versione 4 in poi, che include il concetto di UNIT) è stata chiaramente ispirata da questo linguaggio. Un esempio di progetto in Modula-2 è il mio porting di “Gorillas”, il classico gioco presente nei floppy di MS-DOS.
Interessante è anche il compilatore HiTech C (sul drive H:), che è standard ANSI e consente quindi il porting dei propri software su CP/M in maniera relativamente semplice.
Come si nota dall’ultima colonna della tabella, il drive A: è quello che ha più spazio libero (ben 3.4 MB). Consiglio pertanto di utilizzare questo come “posto” per scrivere i propri file.
Tipo di terminale utilizzato
YAZE prevede come terminale quello emulato dal sistema operativo host: di conseguenza si tratta dello standard VT100/ANSI in quanto Windows, Linux e Mac OS X implementano tale standard nei loro programmi di emulazione terminale.
Questo deve fortemente essere tenuto in considerazione nel caso in cui si decida di utilizzare l’emulatore con software che fanno uso di editor a tutto schermo (vanno configurati per supportare tale standard) o se si vuole sviluppare qualcosa. Ricordo che CP/M è “agnostico” sul terminale usato ed è quindi a carico del programmatore stabilire quali standard si vogliono supportare.
È fortemente consigliato “allungare” la finestra del terminale in modo da avere 25 righe (su Windows è già così, su Linux e Mac OS X di default si hanno 24 righe) in quanto ai programmi che utilizzano l’intero schermo (per esempio l’editor di Modula-2) viene “comunicato” tale valore come altezza dello schermo.
Personalmente consiglio inoltre di impostare caratteri bianchi su sfondo nero, ma solo se in qualche modo si voglia “giocare” con il colore durante la programmazione.
Lettura/Scrittura dal file system locale
Il sistema operativo CP/M pre-installato mette a disposizione 4 comandi aggiuntivi (W, R, mount, E) due dei quali servono per leggere/scrivere dal file system host, e altri due sono di servizio.
Comando W. Esportazione YAZE -> Sistema host
Copia uno o più file (usando la wildcard “*“) presente sul file system virtuale di YAZE sul disco del sistema host. Sintassi:
W <filename> [B|T]
il secondo parametro specifica se si tratta di un file binario (B) o di testo (T), nel secondo caso infatti ci sarà la traduzione della sequenza <CR><LF> in <LF>. Il valore di default è B, cioè binario quindi una copia esatta. Qui un approfondimento sul modo di andare “a capo” nei file di testo, su CP/M e non solo.
Lanciato senza parametri fornisce un HELP sulla sintassi.
Comando R. Importazione Sistema host -> YAZE
Copia uno o più file (usando la wildcard “*“) presente nel sistema host sul file system virtuale di YAZE. Sintassi:
R <filename> [U]
Il secondo parametro specifica se il nome del file è case sensitive. La copia viene effettuata in modalità binaria, quindi copia esatta byte-per-byte.
Lanciato senza parametri fornisce un HELP sulla sintassi.
Comando mount. Visualizzazione dischi virtuali
Non ha parametri e visualizza l’assegnazione dei dischi virtuali ai file immagine dei floppy:
Comando E. Uscita da YAZE
No comment: si lancia senza parametri e si ritorna al prompt dei comandi del sistema host.
Ultime note sull’utilizzo
Nel caso di operazioni sul file system virtuale di YAZE, è bene non lanciarne istanze multiple, in quando gli accessi in scrittura sulle varie istanze e sullo stesso file immagine produrrebbero effetti imprevedibili.
Buon divertimento!
(l’immagine introduttiva è la copertina del libro “CP/M Il sistema operativo per microcomputer” di Thom Hogan, ed. Zanichelli)
Link esterni
- Sito ufficiale di YAZE, Yet Another Z80 Emulator
- Link a YAZE pre-compilato per Mac OS X
- Modi di andare a capo
Commenti
Posta un commento