CP/M v2.23
Panoramica
Linux e Windows sono ora i sistemi operativi standard, ma anni fa tutto e iniziato quando Digital Research ha creato il Control Program/Monitor (CP/M). CP/M e stato uno dei primi veri sistemi operativi per microcomputer, fornendo mezzi comuni per eseguire applicazioni su hardware diverso. Ho sviluppato la scheda di aggiornamento a 80 colonne a colori e il Rom Filing System con l'obiettivo primario di realizzare CP/M sull'MZ80A.
Ho infine deciso di scrivere la mia versione ROM del CBIOS e combinarla con il BDOS+CCP di CP/M v2.23.
Ho infine deciso di scrivere la mia versione ROM del CBIOS e combinarla con il BDOS+CCP di CP/M v2.23.
Processo di avvio CP/M
L’avvio di CP/M avviene in due fasi:
- Lettura di un settore di boot invertito con il software di controllo AFI, verifica del codice 0x02 + “IPLPRO” a 0x0000
- Caricamento di CCP, BDOS e CBIOS a partire da 0x9C00
CBIOS
CP/M e composto da 3 moduli distinti: CCP, BDOS e CBIOS. Il CBIOS e personalizzato secondo l'hardware sottostante.
| Metodo API | Descrizione |
|---|---|
| BOOT | Avvio a freddo, inizializzare tutto l’hardware. |
| WBOOT | Avvio a caldo, ricaricare CCP+BDOS. |
| CONST | Stato della console. |
| CONIN | Input console. |
| CONOUT | Output console. |
| HOME | Portare la testina del disco alla traccia 0. |
| SELDSK | Selezionare un disco. |
| READ | Leggere un settore. |
| WRITE | Scrivere un settore. |
| SECTRN | Traduzione di settore (da logico a fisico). |
| ROM | Indirizzo | Descrizione |
|---|---|---|
| 4K MROM | 0xC000 - 0xCFFF | CBIOS con API CP/M, routine di inizializzazione, controller ROM Disk. |
| 2K Paged ROM | Bank 8 | Audio, RTC, tastiera. |
| 2K Paged ROM | Bank 9 | I/O schermo e parser terminale ANSI. |
| 2K Paged ROM | Bank 10 | Funzionalita controller scheda SD. |
| 2K Paged ROM | Bank 11 | Funzionalita controller floppy disk. |
*Funzionalita*
- Real Time Clock con granularita di 50ms
- Tastiera pilotata da interrupt con buffer e ripetizione automatica
- Funzionalita terminale ANSI
- Drive floppy disk configurabili (1.44M, 720K, 320K)
- Dischi rigidi SD Card da 16MB configurabili
- Uscita al monitor tramite SHIFT+GRAPH+BREAK
Configurazione e compilazione automatizzate (consigliato)
CP/M per il tranZPUter viene assemblato e pacchettizzato come parte della normale compilazione di TZFS, quindi il modo piu semplice per produrre il CBIOS, l'applicazione MZF CP/M e le immagini disco CP/M e lo script di configurazione automatizzata per la propria piattaforma. Ogni script e autonomo — e sufficiente copiare il singolo file per il proprio OS ed eseguirlo. Installa i prerequisiti, clona il repository TZFS, scarica il bundle di contenuti da ~110 MB (
TZFS_Files.zip, che include il software CP/M) e puo eseguire la compilazione per voi, senza richiedere una conoscenza approfondita della toolchain. I passaggi manuali, strumento per strumento, piu in basso sono destinati agli utenti avanzati e alle ricompilazioni parziali.
| Script | Piattaforma | Note |
|---|---|---|
setup_TZFS.sh |
macOS / Linux / WSL | Installa un JRE Java (assemblatore GLASS), una toolchain C + make (per compilare il sottomodulo cpmtools incluso), perl, git e (su macOS) GNU coreutils e bash 4 tramite un tzfs_env.sh generato. |
setup_TZFS_windows.ps1 |
Windows 10 / 11 — Git Bash nativo, senza WSL | Usa winget per installare Git for Windows e un JRE Temurin 17, quindi compila tramite Git Bash. Nessun compilatore C necessario — un tools\cpmcp.exe precompilato e incluso. |
macOS / Linux / WSL — setup_TZFS.sh
chmod +x setup_TZFS.sh
./setup_TZFS.sh
Windows 10 / 11 (Git Bash nativo) — setup_TZFS_windows.ps1, da un prompt PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_TZFS_windows.ps1
Gli script rispettano le variabili d’ambiente TZFS_REPO_URL (predefinito https://git.eaw.app/eaw/TZFS.git) e TZFS_FILES_URL (posizione del bundle di contenuti) per sovrascrivere i prompt interattivi. La compilazione scrive la ROM TZFS, il CBIOS/MZF CP/M e le immagini disco CP/M nella directory roms/; copiarli su una scheda SD formattata FAT32 con tools/copytosd.sh. Per la procedura completa passo passo, vedere la Guida tecnica TZFS — Sistema di compilazione.
Compilazione di CPM
cd <software>
tools/assemble_cpm.sh
Formati disco
diskdef MZ80A-A
seclen 256
tracks 40
sectrk 32
blocksize 2048
maxdir 64
boottrk 1
os 2.2
end
diskdef MZ80A-1440
seclen 512
tracks 80
sectrk 36
blocksize 2048
maxdir 128
boottrk 0
os 2.2
end
diskdef MZ80A-SDC16M
seclen 512
tracks 1024
sectrk 32
blocksize 8192
maxdir 512
boottrk 0
os 2.2
end
Estrarre dischi CP/M MZ80A
Lo Sharp MZ-80A memorizza i dati in formato invertito -- ogni byte e il complemento bit a bit. I dati grezzi devono essere invertiti prima che CPMTools possa leggerli.
samdisk copy <MZ80A DISK NAME>.DSK <MZ80A DISK NAME>.RAW --cyls=40 --head=2 --sectors=16 --size=256
python3 -c "import sys; sys.stdout.buffer.write(bytes(~b & 0xFF for b in open('<MZ80A DISK NAME>.RAW','rb').read()))" > <MZ80A DISK NAME>_normal.RAW
cpmls -f MZ80A-A <MZ80A DISK NAME>_normal.RAW
Guida per sviluppatori
Una Guida per sviluppatori CP/M completa e disponibile.
Licenze
Questo design e licenziato sotto la GNU Public Licence v3.