Sistema di archiviazione ROM (RFS) — Guida tecnica
Guida tecnica RFS
Questa guida documenta l'integrazione hardware del Rom Filing System, l'architettura di memoria, il layout dei moduli software, il design del SD Card Filing System, l'implementazione CP/M e il sistema di build completo. E destinata agli utenti che desiderano comprendere il funzionamento di RFS a livello di sistema, portare RFS su nuovo hardware o eseguire una build completa dai sorgenti.
Per l'uso quotidiano e il riferimento ai comandi del monitor, vedere il
Manuale utente. Per le descrizioni dettagliate del codice sorgente in assembler Z80, vedere la
Guida per sviluppatori.
RFS supporta quattro piattaforme hardware. Ciascuna viene selezionata alla compilazione tramite un flag in asm/include/rfs_definitions.asm. Le immagini binarie risultanti differiscono per il layout dei banchi, l'insieme delle funzionalita e gli indirizzi ROM utilizzati.
Scheda RomDisk
Il target RFS originale e piu capace. Il PCB RomDisk si inserisce nello slot di espansione dello Sharp MZ-80A e fornisce:
- Fino a 4 x 512 KB SST39SF040 Flash RAM — sostituiscono la Monitor ROM e forniscono tre chip User ROM, offrendo fino a 2 MB di storage ROM basato su Flash.
- 512 KB di RAM statica — disponibile come ulteriore spazio di lavoro paginato (uso futuro).
- Lettore di schede SDXC con interfaccia SPI hardware (schede v2+) o SPI software a bit-bang (schede v1, tramite la porta parallela della stampante).
- Un latch codificato (schede v2.0+) che protegge i registri di controllo dei banchi — il latch si apre solo dopo una sequenza fissa di letture agli 8 byte superiori dell'intervallo di indirizzi User ROM (0xEFF8–0xEFFF), impedendo commutazioni accidentali dei banchi durante il funzionamento normale.
Il chip Monitor ROM (a 0x0000–0x0FFF sull'MZ-80A) viene sostituito da uno zoccolo Flash RAM paginato adattato per apparire come una finestra di 4 KB sull'intero chip da 512 KB. Analogamente la User ROM (a 0xE800–0xEFFF) viene sostituita da una finestra paginata di 2 KB.
Interfaccia floppy SFD-700
La scheda di interfaccia floppy disk SFD-700 mkII include una Flash ROM da 512 KB. RFS occupa pagine di questa Flash ROM accanto al codice di avvio floppy AFI:
- 0x00000–0x00FFF — ROM di avvio floppy AFI MZ-80A (originale, necessaria per il trucco DRQ a 2 MHz).
- 0x01000–0x01FFF — ROM di avvio floppy AFI MZ-700.
- 0x02000–0x0BFFF — Firmware RFS (10 x 2 KB banchi User ROM, equivalenti ai banchi User ROM 0–4).
- 0x0C000 in poi — File system ROM (programmi memorizzati come immagini MZF).
Nella build SFD-700 il codice della User ROM viene assemblato per iniziare a 0xE000 e allinearsi a 0xE300 (rispettando l'intervallo I/O mappato in memoria dell'MZ-700). Non e presente alcuna scheda SD; i comandi della scheda SD sono esclusi da questa build.
picoZ80
La scheda picoZ80 (sostituzione Z80 basata su RP2350) emula la mappa di memoria completa dell'MZ-80A in PSRAM e Flash. RFS viene eseguito all'interno dello spazio ROM emulato, utilizzando gli stessi indirizzi di banco della build RomDisk. La picoZ80 fornisce il proprio storage su scheda SD connesso via SPI, quindi l'intero insieme di funzionalita RomDisk (unita su scheda SD, copia nastro↔SD, ecc.) e disponibile.
RFS viene eseguito sotto qualsiasi persona macchina che la picoZ80 presenta all'host. Oltre all'MZ-80A, questa ora include la persona Sharp MZ-80K, che puo' collegare le stesse schede di interfaccia Sharp dell'MZ-80A (RFS, MZ80AFI, MZ-1E14/E19, MZ-1R12/R18/R37, PIO-3034) oltre al proprio controller floppy nativo MZ-80FD (T3444M). Con una scheda MZ80AFI, il CBIOS CP/M di RFS rileva automaticamente i dischi CP/M originali dell'MZ-80K (settori da 128 byte, non invertiti) e li monta come unita' CP/M C:/D:.
Architettura di memoria
La CPU Z80 dello Sharp MZ-80A indirizza 64 KB di memoria. RFS colloca l'intero firmware nelle due finestre ROM senza consumare RAM, lasciando l'intero intervallo 0x1200–0xCFFF per i programmi utente.
Layout dello spazio di indirizzamento Z80
Address Size Contents
─────────────────────────────────────────────────────────────────────
0x0000 4 KB Monitor ROM (MROM) — 4 KB window into 512 KB Flash
Paged across 16 banks:
banks 0–5 = monitor variants + CP/M CBIOS + RFS mrom utils,
banks 6–7 = ASM/DASM opcode tables,
bank 8 = IPL, bank 9 = RFS message strings,
banks 10–15 = reserved
0x1000 256 B MZ-80A system variables / stack
0x1200 ~46 KB User RAM (main program area)
0xCFFF
0xD000 12 KB Video RAM + memory-mapped I/O (MZ-80A hardware)
0xE800 2 KB User ROM (UROM) — 2 KB window into 512 KB Flash
Paged: banks 0–11 = RFS modules,
banks 12–15 = CP/M CBIOS banks
Note: on the SFD-700 build the UROM window starts at
0xE300 (0xE000–0xE2FF is MZ-700 memory-mapped I/O).
The command table (CMDTABLE2) is placed at 0xE300 and
the main bank code remains at 0xE800 as on other builds.
0xEFFF
0xF000 4 KB Floppy AFI ROM / FDC ROM (SFD-700 MROM location)
─────────────────────────────────────────────────────────────────────
Banchi Monitor ROM (4 KB ciascuno)
La finestra Monitor ROM a 0x0000–0x0FFF viene commutata tra 16 pagine memorizzate nel chip Flash della Monitor ROM. Di queste, tre pagine (banchi 6, 7 e 9) sono dedicate a RFS — contengono rispettivamente le tabelle di opcode dell'assemblatore/disassemblatore Z80 e le stringhe di messaggi:
| Banco |
Modulo |
Descrizione |
| 0 |
monitor_sa1510.asm |
ROM monitor SA-1510 originale — 40 colonne. Il banco predefinito all’accensione. |
| 1 |
monitor_80c_sa1510.asm |
SA-1510 adattato per display a 80 colonne (richiede l’upgrade Kuma). |
| 2 |
cbios.asm |
Kernel CBIOS CP/M 2.2 — qui rilocato durante l’avvio CP/M. |
| 3 |
rfs_mrom.asm |
Utilita’ Monitor ROM di RFS. Viene eseguito dallo spazio MROM per scansionare e caricare i file MZF memorizzati nella Flash User ROM, poiche’ il codice User ROM non puo’ paginare se stesso fuori. |
| 4 |
monitor_1z-013a.asm |
Monitor MZ-1Z-013A (variante MZ-700 / MZ-1200). |
| 5 |
monitor_80c_1z-013a.asm |
Monitor 1Z-013A adattato per display a 80 colonne. |
| 6 |
rfs_mrom_bank6.asm |
Tabella opcode 1 assemblatore/disassemblatore Z80. |
| 7 |
rfs_mrom_bank7.asm |
Tabella opcode 2 assemblatore/disassemblatore Z80. |
| 8 |
ipl.asm |
Initial Program Loader. |
| 9 |
rfs_mrom_bank9.asm |
Repository delle stringhe di messaggi RFS. |
| 10–15 |
— |
Riservato / libero. |
Banchi User ROM (2 KB ciascuno)
La finestra User ROM a 0xE800–0xEFFF viene commutata tra 16 banchi nei chip Flash della User ROM — 12 banchi per RFS (banchi 0–11) e 4 banchi per il CBIOS CP/M (banchi 12–15):
| Banco |
Modulo |
Descrizione |
| 0 |
rfs.asm |
Punto di ingresso principale RFS, dispatcher dei comandi, tabella dei comandi, infrastruttura di commutazione banchi condivisa da tutti i banchi. |
| 1 |
rfs_bank1.asm |
Funzioni del controller floppy disk (FDC) — avvio floppy (FL), directory floppy (FD), copia floppy (FC), floppy-a-nastro (FD2T), nastro-a-floppy (T2FD) e selezione unita’. L’intero set di comandi FDC viene assemblato in tutte le build. |
| 2 |
rfs_bank2.asm |
Controller scheda SD — driver SPI, inizializzazione scheda SD, directory SDCFS e lettura/scrittura file. Non assemblato nella build SFD-700 (nessun hardware scheda SD). |
| 3 |
rfs_bank3.asm |
Utilita’ di memoria del monitor — dump esadecimale (D), modifica memoria (M), copia memoria (CP), dump file scheda SD (DUC), lettura/scrittura porte I/O (IN / OUT). La copia nastro↔SD (T2SD/SD2T) e inclusa solo nelle build RomDisk / picoZ80. |
| 4 |
rfs_bank4.asm |
Controller CMT (cassetta) — caricamento, salvataggio e verifica nastro. |
| 5 |
rfs_bank5.asm |
Funzioni di utilita’ generale — stampa formattata, routine per stringhe, codice helper condiviso. |
| 6 |
rfs_bank6.asm |
Tabella opcode 1 assemblatore/disassemblatore Z80, funzione PRINTMSG e infrastruttura delle stringhe di messaggi. |
| 7 |
rfs_bank7.asm |
Tabella opcode 2 assemblatore/disassemblatore Z80, disassemblatore Z80 (DASM), test memoria DRAM, test timer 8253. |
| 8 |
rfs_bank8.asm |
Assemblatore Z80 interattivo (ASM). |
| 9 |
rfs_bank9.asm |
Directory ROM, ricerca file, funzioni di caricamento e stampa (spostate dal banco 0 per liberare spazio). |
| 10 |
rfs_bank10.asm |
Riservato / libero. |
| 11 |
rfs_bank11.asm |
Schermata di aiuto. |
| 12 |
cbios_bank1.asm |
CBIOS CP/M — funzioni audio, RTC, tastiera e utilita’ di basso livello. |
| 13 |
cbios_bank2.asm |
CBIOS CP/M — driver schermo ed emulazione terminale ANSI. |
| 14 |
cbios_bank3.asm |
CBIOS CP/M — driver scheda SD (fornisce le unita’ CP/M A:–G:). |
| 15 |
cbios_bank4.asm |
CBIOS CP/M — controller floppy disk. Rileva automaticamente la dimensione del settore tramite la scheda MZ80AFI (dischi MZ-80A da 256 byte vs dischi MZ-80K da 128 byte) e puo’ leggere direttamente i dischi CP/M originali dell’MZ-80K, mappandoli sulle unita’ CP/M C:/D:. |
Meccanismo di commutazione banchi
Poiche' lo Z80 puo' vedere solo una fetta di 2 KB della User ROM in un dato momento, ogni banco contiene una copia dello
stub di commutazione banchi — un piccolo blocco fisso di codice a un indirizzo noto all'interno della finestra di 2 KB. Quando il banco 0 deve chiamare una routine nel banco 3:
- Scrive il numero del banco di destinazione nel registro di latch hardware dei banchi.
- Salta al punto di ingresso ben noto nel banco appena mappato.
- Esegue la routine richiesta.
- Riscrive il banco 0 nel latch e ritorna.
Questo meccanismo fa si' che tutti i 12 banchi RFS (12 x 2 KB = 24 KB) piu i 4 banchi CBIOS (4 x 2 KB = 8 KB) — 32 KB in totale — siano accessibili da qualsiasi contesto di esecuzione, anche se solo 2 KB sono visibili alla volta. Lo stub di commutazione banchi occupa i primi 32 byte di ciascun banco (0xE800–0xE81F), e la tabella di commutazione banchi inizia a 0xE800 + 0xB0. In modo critico: nessuna istruzione di loop deve mai estendersi sull'intervallo 0xEFF8–0xEFFF sulle schede RomDisk v2+, poiche' quegli indirizzi attivano la sequenza di sblocco del latch codificato.
Architettura software
La tabella completa dei moduli — ogni file sorgente, la sua ROM di destinazione, il banco e la funzione:
| Modulo |
ROM |
Banco |
Dimensione |
Descrizione |
| rfs.asm |
User |
0 |
2 KB |
Dispatcher dei comandi, tabella dei comandi, infrastruttura di commutazione banchi. |
| rfs_bank1.asm |
User |
1 |
2 KB |
Controller floppy disk — selezione unita’, avvio FDC, copia floppy (FC), floppy-a-nastro (FD2T), nastro-a-floppy (T2FD) (RomDisk/picoZ80); solo salto FDCK AFI (SFD-700). |
| rfs_bank2.asm |
User |
2 |
2 KB |
Controller scheda SD — SPI, directory SDCFS, lettura/scrittura file. Non assemblato nella build SFD-700. |
| rfs_bank3.asm |
User |
3 |
2 KB |
Utilita’ di memoria — D, M, CP, DUC, IN, OUT (tutte le build); T2SD, SD2T (solo RomDisk / picoZ80). |
| rfs_bank4.asm |
User |
4 |
2 KB |
Controller CMT — caricamento, salvataggio, verifica nastro. |
| rfs_bank5.asm |
User |
5 |
2 KB |
Utilita’ generali — routine di stampa, helper per stringhe. |
| rfs_bank6.asm |
User |
6 |
2 KB |
Tabella opcode 1 assemblatore/disassemblatore Z80, funzione PRINTMSG, infrastruttura stringhe di messaggi. |
| rfs_bank7.asm |
User |
7 |
2 KB |
Tabella opcode 2 assemblatore/disassemblatore Z80, DASM, test DRAM, test timer. |
| rfs_bank8.asm |
User |
8 |
2 KB |
Assemblatore Z80 interattivo (ASM). |
| rfs_bank9.asm |
User |
9 |
2 KB |
Directory ROM, ricerca file, funzioni di caricamento e stampa (spostate dal banco 0). |
| rfs_bank10.asm |
User |
10 |
2 KB |
Riservato / libero. |
| rfs_bank11.asm |
User |
11 |
2 KB |
Schermata di aiuto. |
| cbios_bank1.asm |
User |
12 |
2 KB |
CBIOS CP/M — audio, RTC, tastiera, utilita’ di basso livello. |
| cbios_bank2.asm |
User |
13 |
2 KB |
CBIOS CP/M — driver schermo, emulatore terminale ANSI. |
| cbios_bank3.asm |
User |
14 |
2 KB |
CBIOS CP/M — driver scheda SD (unita’ CP/M A:–G:). |
| cbios_bank4.asm |
User |
15 |
2 KB |
CBIOS CP/M — controller floppy disk. |
| monitor_sa1510.asm |
Monitor |
0 |
4 KB |
ROM monitor SA-1510 originale (40 colonne). |
| monitor_80c_sa1510.asm |
Monitor |
1 |
4 KB |
SA-1510 adattato per display a 80 colonne. |
| cbios.asm |
Monitor |
2 |
4 KB |
Kernel CBIOS CP/M 2.2 (rilocato a 0xC000 durante l’avvio CP/M). |
| rfs_mrom.asm |
Monitor |
3 |
4 KB |
Utilita’ Monitor ROM di RFS — scansione ROM, caricamento MZF. |
| monitor_1z-013a.asm |
Monitor |
4 |
4 KB |
Monitor MZ-1Z-013A (variante MZ-700 / MZ-1200). |
| monitor_80c_1z-013a.asm |
Monitor |
5 |
4 KB |
1Z-013A adattato per display a 80 colonne. |
| rfs_mrom_bank6.asm |
Monitor |
6 |
4 KB |
Tabella opcode 1 assemblatore/disassemblatore Z80. |
| rfs_mrom_bank7.asm |
Monitor |
7 |
4 KB |
Tabella opcode 2 assemblatore/disassemblatore Z80. |
| ipl.asm |
Monitor |
8 |
4 KB |
Initial Program Loader. |
| rfs_mrom_bank9.asm |
Monitor |
9 |
4 KB |
Repository delle stringhe di messaggi RFS. |
CP/M 2.2 offre 47 KB di RAM programma utilizzabile. CCP e BDOS risiedono in RAM e possono essere sovrascritti da applicazioni di grandi dimensioni (vengono ricaricati al warm boot). Il CBIOS risiede interamente nel banco 2 della Monitor ROM e nei banchi 12–15 della User ROM, senza consumare RAM programma.
La Monitor ROM produce inoltre, in fase di build, diverse immagini varianti aggiuntive: le varianti hi-load di SA-1510 e 80c SA-1510 (usate quando la DRAM deve estendersi su 0x0000–0xCFFF), e le varianti Kuma-80 (selezionate tramite il flag
KUMA80_ENA).
SD Card Filing System (SDCFS)
Anziche' implementare FAT (che sarebbe troppo grande per i banchi ROM da 2 KB disponibili), RFS utilizza un file system appositamente progettato chiamato SD Card Filing System (SDCFS). Il design privilegia la semplicita' e un'occupazione ROM ridotta rispetto alla flessibilita'.
Struttura della directory
Ogni immagine di unita' SDCFS contiene una directory piatta di massimo 256 voci. Ogni voce e esattamente di 32 byte, basata sul formato standard dell'intestazione del nastro MZF:
| Campo |
Byte |
Descrizione |
| FLAG1 |
1 |
Bit 7 = 1: voce valida. Bit 7 = 0: inattiva / eliminata. |
| FLAG2 |
1 |
Tipo di esecuzione MZF (0x01 = programma binario). |
| FILE NAME |
17 |
Nome file MZF standard di 17 caratteri (codifica caratteri Sharp). |
| START SECTOR |
4 |
Primo settore all’interno di questa immagine di unita’ in cui inizia il blocco dati del file. |
| SIZE |
2 |
Conteggio byte effettivo dei dati del file. |
| LOAD ADDR |
2 |
Indirizzo RAM Z80 dove caricare i dati del file. |
| EXEC ADDR |
2 |
Indirizzo di esecuzione automatica per file binari (salto dopo il caricamento). |
| RESERVED |
3 |
Non utilizzato attualmente. |
La directory occupa i primi 8 KB di ogni immagine di unita' (256 voci x 32 byte). I dati dei file seguono immediatamente, a partire dal 256-esimo limite di 32 byte. A ogni file viene allocato un blocco fisso di 64 KB — corrispondente alla dimensione massima del blocco di nastro CMT — il che mantiene il layout banalmente semplice e rende la copia SD↔nastro un trasferimento diretto byte per byte.
Layout della scheda SD
ADDRESS CONTENT
────────────────────────────────────────────────────────────
0x00000000 RFS DRIVE 0
0x00000000–0x00001FE0 Directory (256 × 32 B)
0x00002000–0xFF2000 File blocks (256 × 64 KB)
0x01002000 RFS DRIVE 1 (same structure)
...
0x09012000 RFS DRIVE 9 (same structure)
0x0A014000 (padding to 256 MB boundary)
────────────────────────────────────────────────────────────
0x10000000 CP/M DISK IMAGE 0 (16 MB — 32 sectors × 1024 tracks)
0x11000000 CP/M DISK IMAGE 1
...
0xXX000000 CP/M DISK IMAGE 6
────────────────────────────────────────────────────────────
Non viene scritta alcuna tabella delle partizioni. L'immagine SDCFS inizia al byte 0 della scheda SD. Le immagini disco CP/M iniziano al limite di 256 MB per lasciare spazio a tutte le 10 unita' RFS indipendentemente da quanto siano piene.
Implementazione CP/M 2.2
Processo di avvio
L'avvio CP/M su RFS avviene in due fasi:
- Fase 1 — avvio AFI: Il codice ROM AFI (Auto Floppy Interface) MZ-80A originale a 0xF000 legge il primo settore del floppy o il blocco di avvio della scheda SD. Verifica la presenza dei byte marcatori
0x02 + "IPLPRO" al byte 0 (la firma dei dischi avviabili CP/M dell'MZ-80A). Se trovata, passa il controllo al loader di secondo stadio incapsulato in quel settore.
- Fase 2 — caricamento CCP+BDOS+CBIOS: Il loader di secondo stadio legge CCP, BDOS e CBIOS dal disco nella RAM a partire da 0x9C00. Una volta caricati, viene chiamato il punto di ingresso cold-boot del CBIOS. Il CBIOS configura l'hardware (tastiera, schermo, unita' disco) e passa il controllo al CCP a 0x9C00.
Architettura del CBIOS
Il Custom BIOS (CBIOS) e suddiviso in cinque moduli ROM per rientrare nello spazio di banco disponibile:
| Modulo |
Posizione ROM |
Contenuto |
cbios.asm |
MROM banco 2 (0xC000–0xCFFF) |
Punti di ingresso CBIOS (tutti i 17 vettori API), cold/warm boot, gestore interrupt, controller del disco ROM, tabelle dei parametri del disco. |
cbios_bank1.asm |
UROM banco 12 |
Audio (campanello, melodia), routine dell’orologio in tempo reale, gestore tastiera con auto-ripetizione. |
cbios_bank2.asm |
UROM banco 13 |
Driver schermo (output caratteri, scroll, cursore), emulatore terminale ANSI (sottoinsieme VT52/VT100). |
cbios_bank3.asm |
UROM banco 14 |
Driver disco scheda SD — legge e scrive settori CP/M da 128 byte dalle immagini di unita’ SDCFS a partire dal limite di 256 MB. |
cbios_bank4.asm |
UROM banco 15 |
Controller floppy disk — supporto standard per unita’ da 8 pollici/5,25 pollici per dischi CP/M fisici. |
API del CBIOS
Il CBIOS CP/M implementa tutti i 17 punti di ingresso API standard di CP/M 2.2:
| Punto di ingresso |
Descrizione |
| BOOT |
Avvio a freddo — inizializza tutto l’hardware, imposta le tabelle dei parametri del disco, chiama il CCP. |
| WBOOT |
Avvio a caldo — ripristina lo stato dell’hardware, ricarica CCP+BDOS dal disco, chiama il CCP. |
| CONST |
Stato console — restituisce 0xFF se un tasto e in attesa, 0x00 altrimenti. |
| CONIN |
Input console — attende la pressione di un tasto e restituisce il codice ASCII. |
| CONOUT |
Output console — scrive un carattere sullo schermo. |
| LIST |
Output stampante — invia un carattere alla stampante collegata. |
| PUNCH |
Output perforatore/nastro — invia al dispositivo perforatore di nastro. |
| READER |
Input lettore — legge dal dispositivo lettore di nastro. |
| HOME |
Posiziona la testina sulla traccia 0 del disco attualmente selezionato. |
| SELDSK |
Seleziona un’unita’ disco (A:–G:) e restituisce l’indirizzo del Disk Parameter Header. |
| SETTRK |
Imposta la traccia del disco per la successiva operazione di lettura o scrittura. |
| SETSEC |
Imposta il settore del disco per la successiva operazione di lettura o scrittura. |
| SETDMA |
Imposta il Disk Memory Address — dove i dati verranno letti o scritti. |
| READ |
Legge un settore da 128 byte dal disco selezionato nel buffer DMA. |
| WRITE |
Scrive un settore da 128 byte dal buffer DMA al disco selezionato. |
| LISTST |
Stato stampante — restituisce lo stato di pronto del dispositivo di stampa. |
| SECTRN |
Traduzione settore — mappa i numeri di settore logici sulle posizioni fisiche usando la skew table del disco. |
Configurazione delle unita' CP/M
Le unita' CP/M vengono create dinamicamente durante il cold boot dal CBIOS, a seconda dei controller disco disponibili. La mappatura standard delle unita' su un sistema RomDisk / picoZ80 completamente equipaggiato e:
| Unita’ CP/M |
Controller |
Immagine |
| A: |
Scheda SD |
CPM_SYSTEM — programmi OS, Turbo Pascal, Hi-Soft C, Fortran 80, MS-BASIC 80 |
| B: |
Scheda SD |
Pascal MTP v5.61, Turbo Pascal v3.00a, dischi Pascal User Group |
| C: |
Scheda SD |
PLI, PLM 80, WordStar v3.0/v3.3/v4.0 |
| D:–G: |
Scheda SD |
Dischi della collezione CP/M di Grant Searle C0–F9 |
Sistema di build
RFS si compila su
Linux (Debian/Ubuntu),
macOS e
Windows (tramite WSL2). Il sistema di build e quasi interamente autonomo all'interno del repository. Il modo consigliato per compilare e lo
script di setup automatizzato per la propria piattaforma (vedere
Setup e build automatizzati di seguito); i flag e i passaggi manuali che seguono sono per utenti avanzati e ricostruzioni parziali.
Prerequisiti
| Strumento |
Scopo |
| Java JRE 8+ |
Esegue l’assemblatore Z80 GLASS (tools/glass.jar). java deve essere nel PATH. |
| bash |
Tutti gli script di build sono script shell bash. |
| perl |
Richiesto da tools/mzftool.pl per la manipolazione dei file MZF. |
| gcc / make |
Compila cpmtools dai sorgenti alla prima build (automatico). |
| dd, cat, stat |
Utilita’ Linux standard usate dagli script di packaging. |
L'assemblatore Z80 GLASS e incluso in tools/glass.jar — non e richiesta alcuna installazione separata.
Setup e build automatizzati (consigliato)
Lo script di setup automatizzato per la propria piattaforma installa i prerequisiti, clona il repository (se non vi trovate gia all'interno di un checkout), scarica le immagini dei contenuti, scrive il file di ambiente e propone di eseguire la prima build — il tutto in modo interattivo, con valori predefiniti ragionevoli che potete accettare premendo Invio. Ogni script e autonomo: copiate il singolo file relativo alla vostra piattaforma ed eseguitelo.
macOS / Linux / WSL — setup_RFS.sh
chmod +x setup_RFS.sh
./setup_RFS.sh
Windows 10 / 11 — setup_RFS_windows_native.ps1 (consigliato — nativo, senza WSL). Da una PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows_native.ps1
Lo script nativo usa winget per installare Git for Windows (bash, coreutils, perl, curl) e una Temurin JRE (per l’assemblatore GLASS), clona il repo, scarica il bundle dei contenuti ed esegue ./build.sh tramite Git Bash — senza WSL, Docker o riavvio. Due strumenti host precompilati (tools/cpmcp.exe, tools/sdtool.exe) sono inclusi, quindi non serve un compilatore C su Windows.
Windows 10 / 11 — setup_RFS_windows.ps1 (alternativa — WSL2 / Ubuntu). Da una PowerShell con privilegi di Amministratore:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows.ps1
Questa variante WSL installa WSL2 + Ubuntu se non sono gia presenti (riavvio una tantum richiesto — riavviate, avviate Ubuntu una volta per creare il vostro utente Linux, quindi rieseguite), poi esegue setup_RFS.sh all’interno di Ubuntu. Preferite lo script nativo a meno che non desideriate specificamente un ambiente WSL.
Domande poste dal setup, e cosa fare. Ogni richiesta ha un valore predefinito sicuro tra parentesi — la lettera maiuscola e il valore predefinito, quindi premendo Invio lo si accetta.
Solo Windows (PowerShell, prima dell’esecuzione del setup Linux):
| Richiesta |
Predefinito |
Cosa fare |
Continue anyway? [y/N] (se non avviato come Amministratore) |
No |
N, quindi riaprire PowerShell come Amministratore — l’installazione di WSL richiede i privilegi di amministratore. |
Install WSL2 + Ubuntu now? [y/N] (se WSL/Ubuntu manca) |
No |
y — Windows installa WSL2 + Ubuntu, quindi chiede di riavviare; in seguito avviare Ubuntu una volta per creare il vostro utente e rieseguire. |
Repo URL [https://git.eaw.app/eaw/RFS.git] |
repo pubblico |
Invio per il repo pubblico, oppure incollare un URL diverso (ad es. il repo di sviluppo privato). |
macOS / Linux / WSL (shell Linux/Ubuntu):
| Richiesta |
Predefinito |
Cosa fare |
Install now? [Y/n] (se mancano strumenti) |
Si |
Invio — installa gli strumenti mancanti tramite apt/dnf/pacman o Homebrew (macOS); potrebbe richiedere sudo. Su macOS attiva anche gli Xcode CLT e richiede Homebrew. |
Repo URL [https://git.eaw.app/eaw/RFS.git]: (se non gia in un checkout) |
repo pubblico |
Invio per il pubblico, oppure incollare l’URL del repo privato. (Saltata su Windows — gia scelto.) |
Install directory [~/RFS]: (in fase di clonazione) |
~/RFS |
Invio per ~/RFS, oppure digitare un percorso. |
Remove <dir> and re-clone …? [y/N] (se quella dir contiene un repo diverso) |
No |
y solo se sicuri; altrimenti N e scegliere un’altra directory. |
Download and install them now? [Y/n] (contenuti ~110 MB) |
Si |
Invio per scaricare i contenuti MZF/disco/CP/M/BASIC (necessari per una build completa); n solo se un checkout SharpSoft adiacente li fornisce gia. |
Run the first build now (./build.sh -m …)? [Y/n] |
Si |
Invio per compilare subito (verifica l’ambiente). La prima build usa -m per elaborare MZF → MZB/. |
Potrebbe inoltre esservi richiesta la password sudo e le vostre credenziali git (repo privato).
Dopo il setup, ricompilate con ./build.sh -m (prima build) poi ./build.sh; su macOS eseguite prima source ./rfs_env.sh. build.sh compila tutte le varianti per impostazione predefinita; passate un nome di variante (sfd700, romdisk_mz80a, picoz80_mz80a, picoz80_kuma, picoz80_mz700, picoz80_mz1500, picoz80_mz80k) per compilarne una sola — la selezione di una variante configura automaticamente i flag di build. Opzioni: -m (elabora MZF), -s (salta l'assemblaggio condiviso), -c (clean), -v (verbose), -h (help).
Avanzato: flag di build (manuale)
Per la maggior parte delle build non serve questa sezione — build.sh <variant> imposta questi flag automaticamente. Per configurare un target a mano, modifica asm/include/rfs_definitions.asm e imposta esattamente un flag di target a 1 (tutti gli altri devono essere 0):
| Flag |
Target |
BUILD_ROMDISK EQU 1 |
Scheda RomDisk |
BUILD_SFD700 EQU 1 |
Interfaccia floppy SFD-700 |
BUILD_PICOZ80 EQU 1 |
Scheda picoZ80 |
Flag di funzionalita' opzionali aggiuntivi:
| Flag |
Default |
Descrizione |
KUMA80_ENA |
0 |
Impostare a 1 se e installato l’upgrade Kuma 40/80 colonne. |
VIDEOMODULE_ENA |
0 |
Impostare a 1 se e installato il Video Module a colori 40/80. |
FUSIONX_ENA |
0 |
Impostare a 1 quando si esegue sulla scheda tranZPUter FusionX. |
HW_SPI_ENA |
1 |
SPI hardware (PCB RomDisk v2+). Lasciare a 1 per tutte le schede attuali. |
SW_SPI_ENA |
0 |
SPI software a bit-bang (RomDisk v1 tramite porta parallela). |
ENADEBUG |
0 |
Abilita l’output di debug in fase di assemblaggio. |
Passaggi di build manuali e cosa fa build.sh
Se preferite non usare lo script di setup (o state automatizzando una build CI), clonate e compilate direttamente. Dovete gia avere i prerequisiti installati e, su un clone standalone appena creato, scaricare voi stessi le immagini dei contenuti (oppure eseguire setup_RFS.sh, che lo fa per voi).
git clone --recurse-submodules https://git.eaw.app/eaw/RFS.git
cd RFS
# Full build — assembles all ROMs, packages images, builds SD card image:
./build.sh
# Full build including reprocessing all MZF application files
# (only needed when files in MZF/ have changed):
./build.sh -m
build.sh esegue i seguenti passaggi in ordine:
- Compila
cpmtools dai sorgenti (solo alla prima esecuzione) e lo aggiunge al PATH.
tools/assemble_rfs.sh — assembla rfs.asm e rfs_mrom.asm in roms/rfs.rom e roms/rfs_mrom.rom.
tools/assemble_cpm.sh — assembla il CBIOS CP/M 2.2 e CCP+BDOS in roms/*.rom.
tools/assemble_roms.sh — assembla tutte le varianti del monitor e le applicazioni MZF. Gestisce le quattro varianti di build MS-BASIC scrivendo un BUILD_VERSION EQU in include/msbasic_buildversion.asm prima di ogni passata.
tools/make_roms.sh — impacchetta i binari ROM e MZF in immagini Flash ROM per ciascun target.
tools/make_cpmdisks.sh — crea le immagini disco CP/M in formato RAW (per scheda SD) e in CPC Extended Disk Format (per gli emulatori floppy).
tools/make_sdcard.sh — combina 10 immagini di unita' RFS e 7 immagini disco CP/M nell'immagine finale della scheda SD.
File di output
Dopo una build riuscita la directory roms/ contiene:
| File |
Chip Flash |
Descrizione |
MROM_ROMDISK_256.bin |
Flash Monitor ROM |
Monitor ROM per RomDisk: SA-1510, 80c SA-1510, CBIOS CP/M, utilita’ mrom RFS, monitor 1Z-013A, tabelle opcode ASM/DASM, IPL e stringhe di messaggi su 16x4 KB pagine. |
MROM_PICOZ80_256.bin |
Flash Monitor ROM |
Monitor ROM per picoZ80 (l’ordine dei banchi differisce da RomDisk). |
USER_ROM_256.bin |
Flash User ROM 1 |
Banchi RFS 0–11, banchi CBIOS CP/M 12–15, immagine CP/M 2.2, applicazioni MZF impacchettate. |
USER_ROM_II_256.bin |
Flash User ROM 2 |
Applicazioni MZF aggiuntive. |
USER_ROM_III_256.bin |
Flash User ROM 3 |
Applicazioni MZF aggiuntive. |
SFD700_256.bin |
Flash SFD-700 |
ROM AFI + firmware RFS + file system ROM. |
SHARP_MZ80A_RFS_IMAGE_0–9.img |
Scheda SD |
Immagini individuali delle unita’ RFS (una per unita’ 0–9). |
SHARP_MZ80A_RFS_CPM_IMAGE_1.img |
Scheda SD |
Immagine combinata: 10 unita’ RFS + 7 immagini disco CP/M. Scrivere questa sulla scheda SD. |
Aggiungere applicazioni alle unita' ROM
I file applicativi in formato MZF devono essere convertiti in immagini binarie con padding a settore prima di essere inclusi nelle unita' ROM. Posizionare i file MZF nella sottodirectory appropriata sotto MZF/ quindi eseguire:
tools/processMZFfiles.sh
Questo produce immagini con padding a settore da 128 byte e 256 byte in MZB/. Per scegliere quali applicazioni appaiono in ciascuna unita' ROM, modificare tools/make_roms.sh e regolare le chiamate addMZFToROMImageList:
# Format: addMZFToROMImageList <ROMDISK> <SFD700> <picoZ80> <reserved> "<path>"
#
# Include in all builds:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"
#
# RomDisk and picoZ80 only (no SFD700 — needs SD card):
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"
Le applicazioni vengono impacchettate nell'ordine elencato, riempiendo prima la User ROM 1, poi la User ROM 2 e 3. Posizionare le applicazioni usate piu di frequente in cima all'elenco.
Riferimento degli strumenti di build
| Strumento |
Descrizione |
build.sh |
Script di build di livello superiore. Passare -m per rielaborare anche i file MZF. |
tools/assemble_rfs.sh |
Assembla i moduli core di RFS. |
tools/assemble_cpm.sh |
Assembla il CBIOS CP/M 2.2 e il kernel. |
tools/assemble_roms.sh |
Assembla le varianti del monitor e i binari delle applicazioni MZF. |
tools/make_roms.sh |
Impacchetta i binari in immagini Flash ROM. |
tools/make_cpmdisks.sh |
Crea le immagini disco CP/M. |
tools/make_sdcard.sh |
Combina le immagini nell’immagine finale della scheda SD. |
tools/processMZFfiles.sh |
Converte i file MZF in binari con padding a settore in MZB/. |
tools/mzftool.pl |
Crea, estrae e ispeziona immagini in formato MZF. |
tools/sdtool |
Costruisce la directory della scheda SD RFS e la popola con i file. |
tools/nasconv |
Converte le immagini di cassetta NASCOM in formato caricabile MZ-80A, rimappando i token MS-BASIC. |
tools/glass.jar |
Assemblatore Z80 GLASS incluso (Java). Usato da tutti gli script di assemblaggio. |
tools/MZFD/MZFDTool |
Crea e gestisce immagini floppy disk raw per l’FDC MZ-700. Comandi: format, dir, add, extract, boot. Immagine predefinita: MZ700.img. |
tools/MZQD/MZQDTool |
Crea e gestisce immagini QD per il sistema Quick Disk MZ-700. Comandi: format, dir, add. Immagine predefinita: MZ700.qd. |
cpmtools/ |
Sorgenti di cpmcp, cpmls, cpmrm, ecc. Compilati alla prima build. |
Link di riferimento