microCP/M: il software

di | 16 Maggio 2020

Nella prima parte abbiamo visto come assemblare l’hardware, passiamo ora alla preparazione del software.

MicroCP/M utilizza una emulazione definita bare metal, che non si appoggia quindi ad un sistema operativo esterno, per cui la scheda SD utilizzata come memoria di massa contiene solo ed esclusivamente materiale CP/M. Ha bisogno di essere preparata con una singola partizione FAT, mentre nella directory radice devono essere copiati i file della sottodirectory CCP dei sorgenti di RunCPM.
Sulla SD sarà poi necessario creare una directory chiamata A, e dentro di questa una sottodirectory chiamata 0 (il numero zero).
All’interno di questa bisognerà scompattare il file A.ZIP che è nei sorgenti (directory DISK)
Vedremo più avanti il perchè di questa organizzazione apparentemente strana.
Preparata la scheda possiamo inserirla nel lettore. A questo punto siamo pronti a dare fuoco alle polveri.
Ci manca però ancora un elemento. Come accadeva per i computer dei primi anni ’70, l’Altair 8800 e l’IMSAI 8080, al MicroCP/M non può essere direttamente collegata nè tastiera, nè un monitor. Per usarlo bisogna impiegare un terminale, collegato sulla interfaccia seriale virtuale (la stessa utilizzata dall’IDE di Arduino).
Ovviamente a questo scopo utilizzeremo un emulatore software. Per windows, suggerisco di scaricare putty da https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html. Putty non ha bisogno di installazione, basta salvare l’exe e lanciarlo direttamente. La configurazione avviene da una comoda interfaccia grafica, su cui è necessario selezionare una connessione Serial, baud rate 9600, indicando come Serial line il nome della porta virtuale (nel mio caso COM3).

Per linux va benissimo invece minicom, che è peraltro solitamente disponibile nelle varie distribuzioni, ed è installabile direttamente dal package manager. E’ un programma che va lanciato da shell con il comando

minicom -D /dev/ttyUSB0 -b 9600

Minicom non ha una interfaccia grafica, ma una serie di menù accessibile attraverso il comando CTRL-A. Un aiuto sui comandi è visualizzabile con CTRL-A Z. CTRL-A X è invece il comando per uscire dall’emulazione e trstituire il controllo alla shell.

Se l’emulatore di terminale è configurato correttamente, ci ritroveremo con la schermata di benvenuto. Nel caso fosse necessario resettare l’emulatore, sarà sufficiente cliccare sul pulsantino enable (EN). Per verificare se tutto è ok, basterà digitare DIR: dovremmo vedere l’elenco dei file del disco A sullo schermo.


Perfetto: il sistema funziona!

Una breve digressione per chi fosse completamente a digiuno di CP/M, aiuterà a comprendere come è implementato nel nostro sistema.  E’ evidente che se comparato all’informatica moderna, il CP/M appare un prodotto a dir poco rudimentale. All’epoca bisognava però fare i conti con il fatto che le risorse a disposizione erano estremamente limitate: la memoria (sia centrale che di massa) era un bene prezioso, così come la potenza di calcolo. L’Altair 8800 quando uscì nel 1974 aveva di base solo 1kByte di memoria, mentre pochi sistemi evoluti in quegli anni arrivavano a superare la barriera dei 64kByte di memoria centrale. I supporto magnetici erano floppy disk da 8″ o 5.25″ con capacità fra i 70 ed i 300 kByte. Gli hard-disk, da 5 o 10 MByte, erano così costosi da essere delle chimere.
A questo si aggiungeva il fatto che non esistevano standard: in un’era così pioneristica ogni produttore sceglieva architetture diverse ed implementazioni originali.
CP/M si impose in questo mercato grazie alla sua organizzazione a due strati. Quello a livello più alto, il BDOS (Basic Disk Operating System) forniva servizi ai programmi operativi, mentre il BIOS (Basic Input/Output System ) si occupava di gestire l’hardware.  CP/M aveva poi un terzo strato, il CCP (Console Command Processor), che si occupava di eseguire i comandi impartiti, e che veniva caricato in memoria solo quando serviva.
Con questo accorgimento, ripreso poi in toto da MsDos, era possibile schermare i programmi applicativi dalle differenti implementazioni hardware.
Questo semplificava la vita ai produttori di software, ma non garantiva affatto la facile portabilità da un sistema ad un’altro. Esistevano, infatti, altre due aree di grande difformità; il formato dei supporti magnetici, e la gestione dell’inferaccia video.

Ma torniamo a MicroCP/M. A differenza di altri emulatori, che utilizzano immagini dei dischi nel formato originale del sistema emulato, MicroCP/M accede direttamente ai file presenti sulla scheda SD. Questa deve essere organizzata in un modo specifico: avere in radice il file del CPP ed una directory per ogni unità a disco che si desidera implementare, denominata con una lettera da A a Z.  Nei sistemi CP/M, infatti, ad ogni unità a disco era assegnata una lettera, partendo proprio da A. All’interno di ognuna di queste directory è necessario poi creare un ulteriore livello di struttura, quella degli user. Il CP/M, infatti, non ha la nozione di directory, come in linux o in windows: tutti i file sono allo stesso livello. Esistono però 16 aree utente, fra cui è possibile suddividere i dati memorizzati. Si passa dall’una all’altra con il comando user <n>, ove n è un numero da 0 a 15. Su MicroCPM ogni area utente è implementata con una subdirectory denominata con il numero dell’area, e quindi ogni disco avrà sicuramente almeno l’area 0 (zero). Alla fine del lavoro ci ritroveremo con una scheda SD con una organizzazione simile a questa:

Radice
| CONFIG.SYS
| AUTOEXEC.BAT
| CPP-DR.64K
| (...)
+---B
| +---0
| | TURBO.COM
| | TURBO.OVR
| | (...)
+---C
| +---0
| | ADVENT.COM
| | ADVENT.DAT
| | (...)
| +---1
| | ZORK1.COM
| | ZORK1.DAT

Dove recuperare software adatto a microCP/M? Dal punto di vista funzionale il sistema può essere considerato equivalente ad un Altair 8800 o ad un IMSAI 8080 dotato di terminale DEC Vt100 oppure Ansi. Una ricerca su un motore restituirà una marea di risultati. E’ però facile che il software che troverete sia disponibile come immagini dei dischi.  Sarà quindi necessario estrarre i file dalle immagini per memorizzarli sulla SD card.
In base al formato del disco, che è solitamente dichiarato, possiamo usare due strategie.
Se il disco è in formato simh, come quelli presenti su schorn.ch, la cosa più semplice è quella di utilizzare l’emulatore stesso, che ha un comando specifico per memorizzare i file presenti su un disco emulato nella directory del sistema operativo ospite. L’eseguibile (altairz80) è scaricabile sia dal gihub che da schorn.ch, assieme all’immagine del CP/M 2.2. Dopo aver scaricato e scompattato uno dei vari archivi disponibili, es ws33, basta inserire i due file – uno senza estenzione, l’altro .dsk – nella stessa directory di altairz80 e dell’immagine del CP/M  e lanciare l’emulatore da shell con il comando altairz80 <file senza estenzione>.  Una volta nell’emulatore, con il comando W B:*.* potremo copiare tutti i file presenti sul disco B (user 0) nella directory da cui avevamo lanciato l’emulatore.

A>w B:*.*

WRITE V-1.17 (01-Mar-08) SIMH Interface V004
Write "B:CD.COM" to "CD.COM".
Switched to binary mode.
5.5kB written (Binary).
Write "B:FORMAT.FMT" to "FORMAT.FMT".
0.375kB written (Binary).
Write "B:MACHINES.TXT" to "MACHINES.TXT".

Altri formati di immagine possono invece essere manipolati usando cpmtools, una utilità nativa linux, ma disponibile anche per windows. Ad esempio, l’immagine del disco di Turbo Pascal su retroarchive (tp301a.dsk) è in formato IBM3740, ed il suo contenuto può essere estratto nella subdirectory turbo, precedentemente creata, con il comando

cpmcp -f ibm-3740 tp301a.dsk 0:*.* turbo

Le definizioni dei formati di disco supportati sono nel file [/etc/]diskdefs, è quindi possibile integrarle facilmente nel caso dovesse presentarsi un formato nuovo.

Una vera miniera di programmi public domain, come si chiamavano una volta, sono i CD che fino alla fine degli anni ’80 erano il veicolo preferenziale di diffusione del software che oggi potremo definire libero. Una bella collezione è reperibile su internet archive, ed un ottimo punto di partenza è il CD CP/M di Walnut Creek.

Credo che a questo punto dovreste avere disponibili tutti gli elementi per esplorare, qualora lo voleste, il magico mondo dell’era pionieristica dell’informatica, per cui non mi resta che augurarvi buon retrocomputing.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *