CP/M v2.23

English

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.

Processo di avvio CP/M

L’avvio di CP/M avviene in due fasi:

  1. Lettura di un settore di boot invertito con il software di controllo AFI, verifica del codice 0x02 + “IPLPRO” a 0x0000
  2. 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.