Sistema di archiviazione ROM (RFS)

Panoramica

Il Rom Filing System (RFS) e un pacchetto firmware scritto in linguaggio assembly Z80 che fornisce un monitor interattivo con file system su memoria di massa, avvio applicazioni, utilita di memoria e strumenti di debug per lo Sharp MZ-80A e hardware compatibile.
RFS sostituisce la ROM Monitor e la ROM Utente della macchina host tramite adattatori socket collegati alla scheda di espansione. Si presenta all'utente come una versione migliorata del programma monitor SA-1510 originale con il familiare prompt * , tutti i comandi originali intatti e un ampio set di nuovi comandi per la gestione dei file su scheda SD e ROM, l'avvio di CP/M, il caricamento BASIC e molto altro.
Il firmware supporta quattro piattaforme hardware, ognuna selezionata al momento della compilazione tramite un flag in rfs_definitions.asm:
  • Scheda RomDisk — il target originale. Fino a 4×512 KB di Flash RAM, 512 KB di RAM statica e un lettore di schede SDXC. La ROM Monitor e la ROM Utente vengono commutate tramite bank switching attraverso la Flash RAM.
  • SFD-700 — la scheda di interfaccia floppy disk Sharp. RFS occupa lo spazio CPLD/ROM dell'SFD-700 e fornisce monitor, caricamento BASIC e avvio floppy.
  • tranZPUter FusionX — la scheda di potenziamento Z80 basata su FPGA. RFS viene eseguito nel suo spazio Flash ROM.
  • picoZ80 — la scheda di sostituzione/emulazione Z80 basata su Raspberry Pi Pico. Sul picoZ80, RFS viene eseguito sotto la persona macchina presentata all'host — oltre all'MZ-80A questa include ora anche lo Sharp MZ-80K, che puo utilizzare 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).

Monitor RFS

All'avvio appare il familiare banner di accesso SA-1510, integrato con "+ RFS" quando il file system e stato inizializzato con successo. Il set completo di comandi SA-1510 originali e disponibile insieme a un set di comandi estesi. Alcuni comandi estesi (operazioni su scheda SD, selezione unita) sono presenti solo nella build RomDisk / picoZ80. Un assemblatore e disassemblatore Z80 integrato e disponibile in tutte le build.
Il set completo dei comandi e elencato di seguito. I comandi contrassegnati con (R) sono presenti solo nella build RomDisk / picoZ80.
Comando Parametri Descrizione
0 .. 9 (R) Selezionare l’unita scheda SD RFS attiva (0–9).
40 (R) Passare alla modalita di visualizzazione a 40 colonne (richiede l’upgrade Kuma 40/80 o il Video Module).
80 (R) Passare alla modalita di visualizzazione a 80 colonne (richiede l’upgrade Kuma 40/80 o il Video Module).
ASM <address> Assemblatore Z80 interattivo. Inserire mnemonici assembly direttamente in memoria a partire dall’indirizzo indicato.
B Attivare/disattivare il segnale acustico della tastiera.
BASIC Cercare BASIC SA-5510 sull’unita SD attiva o nella ROM, caricarlo ed eseguirlo.
C [<valore 8 bit>] Inizializzare la memoria da 0x1200 alla cima della RAM con 0x00 o il valore byte fornito.
CP <src> <dst> <size> Copiare un blocco di memoria. Tutti e tre gli argomenti sono valori esadecimali a 4 cifre: indirizzo sorgente, indirizzo destinazione, conteggio byte.
CPM Cercare CP/M 2.2 sull’unita SD attiva o nella ROM, caricarlo e avviarlo.
D <addr> [<addr2>] Dump della memoria da <addr> a <addr2> (o 20 righe) in esadecimale e ASCII. L’output si interrompe ad ogni schermata piena; premere un tasto per continuare, ‘U’ per pagina precedente, ‘X’ per uscire. Ripetere ‘D’ senza indirizzo continua dall’ultima posizione visualizzata.
DASM <addr> [<addr2>] Disassemblare il codice macchina Z80 da <addr> a <addr2>.
DUC (R) [H|T] <name> o <n° file> Visualizzare il contenuto di un file della scheda SD. Predefinito: dump esadecimale. DUCH: dump esadecimale con informazioni header MZF (indirizzo di caricamento, indirizzo di esecuzione, dimensione). DUCT: dump testo (solo caratteri ASCII stampabili).
EC (R) <name> o <n° file> Cancellare un file dall’unita scheda SD attiva per nome o numero di file.
F / FL [<drive>] Avviare dall’unita floppy specificata. Se omesso, viene richiesto un numero di unita.
FD [<drive>] Visualizzare l’elenco della directory di un floppy disk. Il numero di unita opzionale seleziona l’unita 1–4 (predefinito: 1).
FC <start> <end> <exec> Salvare un’area di memoria in un file su floppy disk.
FD2T <name> o <n° file> Copiare un file dal floppy disk al nastro.
T2FD Caricare dal nastro e salvare su floppy disk.
f Eseguire il codice di avvio floppy AFI originale a 0xF000.
H Visualizzare la schermata di aiuto dei comandi (paginata, premere Spazio per continuare).
IC (R) Elenco paginato dei file sull’unita scheda SD attiva. Ogni voce mostra un numero di file esadecimale e il nome del file.
IN <port>[,<port>…] Leggere una o piu porte I/O. Ogni porta e un indirizzo esadecimale a 2 o 4 cifre. I valori vengono stampati come esadecimali a 2 cifre, separati da spazi.
IR Elenco paginato dei programmi memorizzati nelle unita Flash ROM.
J <address> Saltare a (eseguire da) l’indirizzo indicato.
L | LT [<filename>] Caricare un file dal nastro (CMT) ed eseguirlo.
LTNX [<filename>] Caricare un file dal nastro (CMT) senza eseguirlo.
LR <name> o <n° file> Caricare un programma dalla ROM per nome o numero di file ed eseguirlo.
LRNX <name> o <n° file> Caricare un programma dalla ROM per nome o numero di file senza eseguirlo.
LC (R) <name> o <n° file> Caricare un programma dalla scheda SD ed eseguirlo.
LCNX (R) <name> o <n° file> Caricare un programma dalla scheda SD senza eseguirlo.
M <address> Editor di memoria interattivo a partire da <address>.
OUT <port>:<value>[,<port>:<value>…] Scrivere su una o piu porte I/O. Ogni porta e un indirizzo esadecimale a 2 o 4 cifre seguito da due punti e un valore esadecimale a 2 cifre.
P Eseguire un test sulla stampante collegata.
R Eseguire un test della memoria DRAM.
S | ST <start> <end> <exec> Salvare un’area di memoria su nastro (CMT). Viene richiesto un nome di file. Esempio: S120020001203 salva da 0x1200 a 0x2000 con indirizzo di esecuzione 0x1203.
SC (R) <start> <end> <exec> Salvare un’area di memoria sull’unita scheda SD attiva. Viene richiesto un nome di file.
SD2T (R) <name> o <n° file> Copiare un file dalla scheda SD al nastro nel CMT.
T Testare il chip timer 8253.
T2SD (R) Caricare un programma dal nastro e scriverlo sull’unita scheda SD attiva.
V Verificare un salvataggio su nastro confrontandolo con i dati attualmente in memoria.
X (R) Passare alla variante ROM hi-load affinche la DRAM copra 0x0000–0xCFFF.

Se e installato l’upgrade Kuma 40/80 colonne o il Video Module, digitando 4 si passa alla visualizzazione a 40 colonne e 8 alla visualizzazione a 80 colonne. In modalita 80 colonne i comandi di elenco directory (IC / IR) visualizzano quattro colonne.


Applicazioni aggiornate

La serie Sharp MZ e nota come "macchine pulite" — quasi nessun software risiede permanentemente nella ROM; tutto viene caricato dal nastro o dal floppy. Le applicazioni esistenti non avevano quindi conoscenza dello storage esteso fornito da RFS, se non la possibilita di essere caricate rapidamente dal monitor RFS.
Per rendere le macchine piu utilizzabili, le applicazioni chiave sono state aggiornate per utilizzare RFS nativamente e l'interprete Microsoft BASIC e stato portato sulla piattaforma. CP/M 2.2 e stato implementato tramite un CBIOS personalizzato che utilizza le funzionalita RFS. Il CBIOS ora rileva e legge automaticamente anche i dischi CP/M MZ-80K originali (non convertiti) tramite la scheda floppy MZ80AFI, montandoli direttamente come unita CP/M C: e D: — vedere la guida CP/M per RFS per i dettagli.

Sharp BASIC SA-5510

Il BASIC Sharp SA-5510 originale e stato disassemblato ed esteso con comandi LOAD, SAVE e DIR compatibili con RFS. Il layout dei byte dell'interprete e preservato in modo che i programmi che dipendono da indirizzi fissi noti continuino a funzionare. Le estensioni vengono applicate al di fuori dell'immagine principale dell'interprete.
La versione estesa porta il nome SA-5510RFS sull'unita ROM e sull'unita SD. All'avvio utilizza l'unita SD attiva (unita 0–9) per tutte le operazioni sui file. La sintassi standard LOAD e SAVE e invariata; il prefisso qualificatore di unita e l'unica aggiunta.
Comando Parametro Descrizione
LOAD "TEST" Cercare un programma denominato TEST sull’unita attiva, caricarlo ed eseguirlo.
LOAD   Caricare il file sequenziale successivo dall’unita attiva. Se il file 5 e stato caricato per ultimo, viene caricato il file 6.
LOAD "3:TEST" Caricare TEST dall’unita RFS 3, rendendo l’unita 3 attiva.
LOAD "C:TEST" Caricare TEST dalla cassetta interna (CMT), rendendo il CMT l’unita attiva.
SAVE "TEST" Sovrascrivere un file esistente denominato TEST sull’unita attiva, o crearlo se assente. Su CMT, scrive immediatamente alla posizione corrente del nastro.
SAVE   Salvare il programma corrente con un nome generato automaticamente DEFAULT<n>, dove <n> e il numero di sequenza corrente.
SAVE "3:TEST" Salvare/creare TEST sull’unita RFS 3 e rendere l’unita 3 attiva.
SAVE "C:TEST" Salvare su CMT con il nome TEST e rendere il CMT attivo.
DIR   Elencare la directory della scheda SD per l’unita attiva in formato RFS (numero file + nome file).
DIR "3:" Elencare la directory dell’unita 3 e rendere l’unita 3 attiva.

Vedere Organizzazione della scheda SD di seguito per il layout predefinito delle unita.

Microsoft BASIC

Mentre la maggior parte degli interpreti BASIC dell'MZ-80A sono disponibili solo come binari, Microsoft BASIC (NASCOM 4.7b) ha codice sorgente liberamente disponibile e una vasta libreria di programmi esistenti. RFS include una versione portata ed estesa che supporta lo storage RFS nativo in tre configurazioni corrispondenti all'hardware target:
  • MS-BASIC(MZ-80A) — per hardware MZ-80A originale, solo storage su cassetta.
  • MS-BASIC(RFS40) — RFS con display a 40 colonne; aggiunge comandi scheda SD, CLOAD, CSAVE, DIR.
  • MS-BASIC(RFS80) — RFS con display a 80 colonne; aggiunge comandi scheda SD, CLOAD, CSAVE, DIR.

Ogni variante appare sull’unita ROM RFS e sull’unita SD. Consultare il NASCOM Basic Manual per il set completo di comandi standard. La tabella seguente elenca le estensioni aggiunte per RFS.

Comando Parametri Versione Descrizione
CLOAD "<filename>" MZ-80A Caricare un programma BASIC tokenizzato dalla cassetta.
CSAVE "<filename>" MZ-80A Salvare il programma BASIC corrente su cassetta in formato tokenizzato.
CLOAD "[<drive>:]<filename>" RFS40, RFS80 Caricare dal nastro o dalla scheda SD. <drive> e 0–9; <filename> e un nome MZ di 17 caratteri o un numero esadecimale RFS a 2 cifre. Esempio: CLOAD "8:13" o CLOAD "8:othello".
CSAVE "[<drive>:]<filename>" RFS40, RFS80 Salvare su nastro o scheda SD con qualificatore di unita opzionale.
DIR "[<drive>:]" RFS40, RFS80 Visualizzare il contenuto dell’unita RFS attiva o specificata.
ANSITERM 0 = Disattivato, 1 = Attivato Tutte Attivare o disattivare (predefinito: attivato) il processore di terminale ANSI integrato. Questo traduce le sequenze di escape ANSI in azioni sullo schermo, consentendo l’esecuzione senza modifiche di programmi BASIC portabili. (Il programma BASIC Star Trek V2 utilizza sequenze di escape ANSI.)
Convertitore di immagine cassetta NASCOM
I programmi NASCOM BASIC sono comunemente distribuiti come file di immagine cassetta contenenti dati di framing del nastro che avvolgono BASIC tokenizzato. Lo strumento nasconv fornito rimuove il framing del nastro e ricostruisce il codice BASIC in un formato caricabile sull'MZ-80A sotto RFS. Rimappa inoltre automaticamente i valori dei token, poiche l'estensione MS-BASIC di RFS aggiunge nuovi token che spostano la tabella.
nasconv v1.0

Required:
  -i | --image  <file>   Cassette image file to convert.
  -o | --output <file>   Output file for converted BASIC data.

Options:
  -l | --loadaddr <addr> MZ-80A BASIC start address.
  -n | --nasaddr  <addr> Original NASCOM BASIC start address.
  -h | --help            Show this help.
  -v | --verbose         Verbose output.

Example:
  nasconv --image 3dnc.cas --output 3dnc.bas \
          --nasaddr 0x10fa --loadaddr 0x4341

BASIC MZ-5Z008 (Quick Disk)

Il BASIC Sharp MZ-5Z008 Quick Disk originale e stato aggiornato per supportare lo storage su scheda SD RFS e l'accesso ai file di rete oltre ai dispositivi nativi Floppy Disk, Quick Disk e Cassetta. La versione RFS si avvia con il titolo "BASIC 5Z-008BRFS". Questo BASIC funziona anche sull'MZ-1500 tramite la persona picoZ80 MZ-1500, fornendo lo stesso supporto dispositivi incluso l'accesso di rete NETx:. I programmi possono essere caricati, salvati ed elencati su tutti i dispositivi supportati utilizzando un prefisso di dispositivo nel nome del file.
Comando Parametro Descrizione
LOAD "RFSx:filename" Caricare un programma BASIC dall’unita scheda SD RFS x (1–7, mappata sulle unita SD 4–10).
SAVE "RFSx:filename" Salvare il programma BASIC corrente sull’unita scheda SD RFS specificata.
DIR RFSx: Visualizzare l’elenco della directory dell’unita scheda SD RFS specificata.
LOAD "FDx:filename" Caricare un programma BASIC dall’unita floppy disk x.
SAVE "FDx:filename" Salvare il programma BASIC corrente sull’unita floppy disk x.
DIR FDx: Visualizzare l’elenco della directory del floppy disk.
LOAD "QDx:filename" Caricare un programma BASIC dall’unita Quick Disk x.
SAVE "QDx:filename" Salvare il programma BASIC corrente sull’unita Quick Disk x.
DIR QDx: Visualizzare l’elenco della directory del Quick Disk.
LOAD "NETx:filename" Caricare un programma BASIC dal server di file di rete unita x (1–7). Richiede una scheda Celestite e netfs.py su un PC.
SAVE "NETx:filename" Salvare il programma BASIC corrente sul server di file di rete unita x.
DIR NETx: Visualizzare l’elenco della directory dal server di file di rete unita x.
LOAD "CMT:filename" Caricare un programma BASIC dal nastro cassetta.
SAVE "CMT:filename" Salvare il programma BASIC corrente su nastro cassetta.

BASIC MZ-2Z009E (Floppy Disk)

Il BASIC Sharp MZ-2Z009E Floppy Disk originale e stato aggiornato per supportare lo storage su scheda SD RFS oltre ai dispositivi nativi Floppy Disk e Quick Disk. La versione RFS si avvia con il titolo "BASIC 2Z-009ERFS". I programmi possono essere caricati, salvati ed elencati su tutti i dispositivi supportati utilizzando un prefisso di dispositivo nel nome del file.
Comando Parametro Descrizione
LOAD "RFSx:filename" Caricare un programma BASIC dall’unita scheda SD RFS x (1–7, mappata sulle unita SD 4–10).
SAVE "RFSx:filename" Salvare il programma BASIC corrente sull’unita scheda SD RFS specificata.
DIR RFSx: Visualizzare l’elenco della directory dell’unita scheda SD RFS specificata.
LOAD "FDx:filename" Caricare un programma BASIC dall’unita floppy disk x.
SAVE "FDx:filename" Salvare il programma BASIC corrente sull’unita floppy disk x.
DIR FDx: Visualizzare l’elenco della directory del floppy disk.
LOAD "QDx:filename" Caricare un programma BASIC dall’unita Quick Disk x.
SAVE "QDx:filename" Salvare il programma BASIC corrente sull’unita Quick Disk x.
DIR QDx: Visualizzare l’elenco della directory del Quick Disk.

Architettura software

Lo spazio User ROM a 0xE800 e diviso in banchi da 2 KB, ciascuno contenente una copia dello stub di commutazione banchi, in modo che qualsiasi banco possa chiamare codice in qualsiasi altro banco senza disturbare il flusso di esecuzione. RFS occupa 12 banchi User ROM (0–11, 24 KB); altri 4 banchi (12–15) contengono il CBIOS CP/M. Lo spazio Monitor ROM a 0xC000 / 0xF000 e diviso in 16 × 4 KB pagine; tre di queste (banchi 6, 7 e 9) sono dedicate a RFS, contenendo le tabelle opcode dell'assemblatore/disassemblatore Z80 e le stringhe di messaggi. Complessivamente la ROM a banchi fornisce 32 KB di User ROM e 64 KB di Monitor ROM di spazio programma senza consumare RAM.
La tabella seguente elenca ogni modulo sorgente, la sua ROM target, il banco e la funzione:
Modulo ROM target Dimensione Banco Descrizione
rfs.asm User 2 KB 0 Punto di ingresso principale RFS, dispatcher dei comandi e tabella dei comandi. Contiene l’infrastruttura di commutazione banchi condivisa da tutti i banchi.
rfs_bank1.asm User 2 KB 1 Funzioni del controller floppy disk (FDC). Gestisce selezione unita, avvio, copia floppy (FC), floppy-su-nastro (FD2T) e nastro-su-floppy (T2FD).
rfs_bank2.asm User 2 KB 2 Controller scheda SD. Driver SPI, inizializzazione scheda SD, directory SDCFS e lettura/scrittura file.
rfs_bank3.asm User 2 KB 3 Utilita di memoria del monitor: dump esadecimale, editor di memoria, copia di memoria, dump file SD (DUC), lettura/scrittura porte I/O (IN / OUT), copia nastro-SD (T2SD / SD2T), test stampante.
rfs_bank4.asm User 2 KB 4 Controller CMT (cassetta): caricamento, salvataggio e verifica nastro.
rfs_bank5.asm User 2 KB 5 Funzioni di utilita generali: stampa formattata, routine per stringhe e codice di supporto condiviso.
rfs_bank6.asm User 2 KB 6 Tabella opcode 1 dell’assemblatore/disassemblatore Z80, funzione PRINTMSG e infrastruttura stringhe di messaggi.
rfs_bank7.asm User 2 KB 7 Tabella opcode 2 dell’assemblatore/disassemblatore Z80, disassemblatore Z80 (DASM), test memoria DRAM e test timer 8253.
rfs_bank8.asm User 2 KB 8 Assemblatore Z80 interattivo (ASM).
rfs_bank9.asm User 2 KB 9 Directory ROM, ricerca file, funzioni di caricamento e stampa (spostati dal banco 0 per liberare spazio).
rfs_bank10.asm User 2 KB 10 Riservato / libero.
rfs_bank11.asm User 2 KB 11 Schermata di aiuto.
cbios_bank1.asm User 2 KB 12 CP/M CBIOS: funzioni audio, RTC, tastiera e utilita di basso livello.
cbios_bank2.asm User 2 KB 13 CP/M CBIOS: driver dello schermo e emulazione terminale ANSI.
cbios_bank3.asm User 2 KB 14 CP/M CBIOS: driver scheda SD (fornisce le unita CP/M A:–G:).
cbios_bank4.asm User 2 KB 15 CP/M CBIOS: controller floppy disk.
monitor_sa1510.asm Monitor 4 KB 0 ROM monitor SA-1510 originale (40 colonne).
monitor_80c_sa1510.asm Monitor 4 KB 1 Monitor SA-1510 adattato per display a 80 colonne.
cbios.asm Monitor 4 KB 2 Kernel CBIOS CP/M 2.2 (caricato a 0xC000–0xCFFF).
rfs_mrom.asm Monitor 4 KB 3 Utilita Monitor ROM RFS. Poiche il codice eseguito dalla User ROM non puo commutare se stesso per scansionare il resto della ROM, queste routine vengono eseguite dalla Monitor ROM banco 3 per scansionare e caricare i file MZF memorizzati nella Flash RAM User ROM.
monitor_1z-013a.asm Monitor 4 KB 4 ROM monitor MZ-1Z-013A (variante MZ-700 / MZ-1200).
monitor_80c_1z-013a.asm Monitor 4 KB 5 Monitor 1Z-013A adattato per display a 80 colonne.
rfs_mrom_bank6.asm Monitor 4 KB 6 Tabella opcode 1 dell’assemblatore/disassemblatore Z80 (copia MROM).
rfs_mrom_bank7.asm Monitor 4 KB 7 Tabella opcode 2 dell’assemblatore/disassemblatore Z80 (copia MROM).
ipl.asm Monitor 4 KB 8 Initial Program Loader.
rfs_mrom_bank9.asm Monitor 4 KB 9 Repository stringhe di messaggi RFS.

CP/M 2.2 e supportato con 47 KB di RAM programma utilizzabile. Solo CCP e BDOS risiedono nella RAM (e possono essere sovrascritti dalle applicazioni); il CBIOS stesso risiede nella Monitor ROM banco 2 e nei banchi User ROM 12–15, senza consumare RAM programma.

La Monitor ROM produce anche diverse varianti aggiuntive di monitor compilate contemporaneamente: un SA-1510 standard, un SA-1510 a 80 colonne, una versione Kuma-80 (selezionata tramite il flag KUMA80_ENA in rfs_definitions.asm), e varianti hi-load di SA-1510 e SA-1510 a 80 colonne utilizzate quando la DRAM deve coprire l'intero intervallo 0x0000–0xCFFF.

Sistema di build

RFS si compila su **Linux** (Debian / Ubuntu), **macOS** e **Windows** (tramite WSL2). La costruzione di RFS comporta l'assemblaggio del codice sorgente Z80, il confezionamento delle immagini ROM e la creazione di immagini per scheda SD. La toolchain e quasi interamente contenuta nel repository.

Il modo consigliato per compilare RFS e lo script di setup automatizzato per la propria piattaforma (vedere Setup e build automatizzati di seguito) — installa i pochi strumenti esterni necessari, scarica i contenuti, prepara l'ambiente e puo eseguire la prima build per voi, senza richiedere una conoscenza approfondita degli strumenti o della configurazione. I passaggi manuali piu in basso sono per utenti avanzati e ricostruzioni parziali.

Prerequisiti

Strumento Note
Java (JRE 8+) Richiesto per eseguire l’assemblatore GLASS Z80. java deve essere nel PATH.
bash Tutti gli script di build sono in bash.
perl Richiesto da mzftool.pl.
gcc / make Richiesto per compilare cpmtools dai sorgenti (avviene automaticamente alla prima build).
dd, cat, stat Utilita Linux standard utilizzate dagli script di confezionamento.

L’assemblatore GLASS Z80 (glass.jar) e incluso nella directory tools/ — non e necessaria un’installazione separata.

Setup e build automatizzati (consigliato)

Il modo consigliato per compilare RFS e lo script di setup automatizzato per la propria piattaforma. Verifica e 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 (che fornisce bash, coreutils, perl e curl) e una Temurin JRE (Java, per l’assemblatore GLASS), clona il repo, scarica il bundle dei contenuti ed esegue ./build.sh tramite Git Bash — senza WSL, Docker o riavvio. La build RFS non richiede un compilatore C su Windows perche due strumenti host precompilati (tools/cpmcp.exe e tools/sdtool.exe) sono inclusi.

Windows 10 / 11 — setup_RFS_windows.ps1 (alternativa — compila all’interno di 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 (questo richiede un riavvio una tantum — riavviate, avviate Ubuntu una volta dal menu Start per creare il vostro nome utente/password Linux, quindi rieseguite lo script), poi esegue setup_RFS.sh all’interno di Ubuntu. Preferite lo script nativo sopra a meno che non desideriate specificamente un ambiente WSL.

Domande poste dal setup, e cosa fare

Ogni richiesta ha un valore predefinito sicuro mostrato tra parentesi — la lettera maiuscola e il valore predefinito, quindi premendo Invio lo si accetta. Le richieste compaiono in questo ordine:

Solo Windows (in PowerShell, prima dell’esecuzione del setup Linux):

Richiesta Predefinito Cosa fare
Continue anyway? [y/N] (solo se non avviato come Amministratore) No Rispondere N, riaprire PowerShell con Esegui come amministratore e ricominciare — l’installazione di WSL richiede i privilegi di amministratore.
Install WSL2 + Ubuntu now? [y/N] (solo se WSL / Ubuntu manca) No Rispondere y. Windows installa WSL2 + Ubuntu, quindi chiede di riavviare. Dopo il riavvio, avviare Ubuntu una volta per creare il vostro utente Linux, quindi rieseguire lo script.
Repo URL [https://git.eaw.app/eaw/RFS.git] repo pubblico Premere Invio per il repository RFS pubblico, oppure incollare un URL diverso (ad es. il repository di sviluppo privato).

macOS / Linux / WSL (nella shell Linux / Ubuntu):

Richiesta Predefinito Cosa fare
Install now? [Y/n] (solo se mancano degli strumenti) Si Premere Invio. Lo script installa gli strumenti mancanti con il vostro gestore di pacchetti (apt / dnf / pacman, oppure Homebrew su macOS); potrebbe esservi richiesta la password sudo. Su macOS attiva prima l’installer degli Xcode Command Line Tools e richiede Homebrew.
Repo URL [https://git.eaw.app/eaw/RFS.git]: (solo se non vi trovate gia all’interno di un checkout) repo pubblico Premere Invio per il repo pubblico, oppure incollare l’URL del repo privato. (Saltata su Windows — il passaggio PowerShell ha gia trasmesso la vostra scelta.)
Install directory [~/RFS]: (solo in fase di clonazione) ~/RFS Premere Invio per clonare in ~/RFS, oppure digitare un altro percorso.
Remove <dir> and re-clone …? [y/N] (solo se quella directory contiene gia un repo diverso) No Rispondere y solo se siete sicuri di voler eliminare quella directory e riclonare; altrimenti N e scegliere una directory di installazione diversa.
Download and install them now? [Y/n] (immagini dei contenuti, ~110 MB) Si Premere Invio per scaricare i contenuti MZF / disco / CP/M / BASIC da RFS_Files.zip — necessari per una build completa. Rispondere n solo se li avete gia tramite un checkout SharpSoft adiacente.
Run the first build now (./build.sh -m …)? [Y/n] Si Premere Invio per compilare subito — questo verifica l’intero ambiente. La prima build usa -m per elaborare i sorgenti MZF in MZB/ ed e piu lenta delle successive.

Potrebbe inoltre esservi richiesta la password sudo (installazione dei pacchetti) e le vostre credenziali git se avete scelto un repository privato.

Dopo il setup — compilare di nuovo

Al termine il setup stampa il percorso del checkout. Per ricompilare in seguito:

cd ~/RFS                 # o la directory che avete scelto
source ./rfs_env.sh      # solo macOS (aggiunge GNU coreutils + la JRE al PATH); innocuo altrove
./build.sh -m            # PRIMA build: elabora MZF -> MZB, poi compila tutto
./build.sh               # build successive (rieseguire -m solo quando i sorgenti MZF cambiano)
./build.sh -h            # elenca varianti e opzioni

Su Windows, aprite il terminale Ubuntu (menu Start → “Ubuntu”, oppure digitate wsl in PowerShell) ed eseguite gli stessi comandi in ~/RFS. Le immagini ROM compaiono in ~/RFS/roms.

build.sh compila tutte le varianti hardware per impostazione predefinita; passate uno o piu nomi di variante (sfd700, romdisk_mz80a, picoz80_mz80a, picoz80_kuma, picoz80_mz700, picoz80_mz1500, picoz80_mz80k, oppure all) per compilare solo quelle. La selezione di una variante configura tutto automaticamente — nessuna modifica ai sorgenti necessaria. Opzioni: -m (elabora MZF), -s (salta l’assemblaggio condiviso), -c (clean), -v (verbose), -h (help).

Avanzato: flag del target di build

Per la maggior parte delle build non serve questa sezione — selezionare una variante con build.sh (sopra) configura tutto automaticamente. Il meccanismo sottostante e un insieme di flag in asm/include/rfs_definitions.asm; esattamente uno dei seguenti viene impostato a 1 (tutti gli altri a 0) per un dato target, cosa che build.sh fa per voi in base alla variante. Modificateli a mano solo per una configurazione personalizzata:

Flag Target Descrizione
BUILD_ROMDISK Scheda RomDisk MZ-80A con 4x512 KB Flash RAM + espansione scheda SDXC.
BUILD_SFD700 SFD-700 Scheda di interfaccia floppy disk Sharp. Nessuna scheda SD.
BUILD_PICOZ80 picoZ80 Scheda di sostituzione Z80 basata su Raspberry Pi Pico.

Flag opzionali aggiuntivi nello stesso file:

Flag Predefinito Descrizione
KUMA80_ENA 0 Impostare a 1 se l’upgrade Kuma 40/80 colonne e installato.
VIDEOMODULE_ENA 0 Impostare a 1 se il Video Module colore 40/80 colonne e installato.
FUSIONX_ENA 0 Impostare a 1 quando si esegue RFS sulla scheda tranZPUter FusionX.
HW_SPI_ENA 1 SPI hardware (PCB RomDisk v2+). Lasciare a 1 per tutte le schede attuali.
ENADEBUG 0 Abilitare l’output di debug durante l’assemblaggio.

Build manuale e cosa fa build.sh

Se preferite non usare lo script di setup (o state automatizzando una build CI), potete clonare e compilare direttamente — dovete comunque 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

# Build completa (assembla tutte le ROM, confeziona le immagini ROM, crea l'immagine della scheda SD):
./build.sh

# Build completa inclusa la rielaborazione di tutti i file applicazione MZF
# (necessario solo quando i file sorgente MZF in MZF/ sono cambiati):
./build.sh -m

build.sh esegue i seguenti passaggi nell’ordine:

  1. Compila cpmtools dai sorgenti (solo alla prima esecuzione) e aggiunge il risultato al PATH.
  2. tools/assemble_rfs.sh — assembla rfs.asm e rfs_mrom.asm in roms/rfs.rom e roms/rfs_mrom.rom.
  3. tools/assemble_cpm.sh — assembla il CBIOS CP/M 2.2 (cbios.asm, cbios_bank1–4.asm, cpm22.asm) in roms/*.rom.
  4. tools/assemble_roms.sh — assembla tutte le varianti del monitor (SA-1510, 80c SA-1510, 1Z-013A, varianti hi-load, versione Kuma, IPL) e i file applicazione MZF (SA-5510, varianti MS-BASIC, ecc.) in roms/ e MZB/.
  5. tools/make_roms.sh — confeziona le ROM assemblate e le applicazioni MZF in immagini Flash ROM (vedere File di output di seguito).
  6. tools/make_cpmdisks.sh — crea immagini disco CP/M in formato RAW e CPC Extended Disk Format per ciascuno dei set di unita CP/M pre-popolati.
  7. tools/make_sdcard.sh — assembla l’immagine finale della scheda SD combinando 10 immagini di unita RFS e 7 immagini disco CP/M.

Gli script individuali possono anche essere eseguiti direttamente dalla directory tools/ per build parziali.

File di output

Dopo una build riuscita la directory roms/ contiene:

File Chip Flash Descrizione
MROM_ROMDISK_256.bin SST39SF040 (Monitor ROM) Immagine Monitor ROM per la build RomDisk. Contiene SA-1510, 80c SA-1510, CP/M CBIOS, utilita RFS MROM, monitor 1Z-013A, tabelle opcode assemblatore/disassemblatore, IPL e stringhe di messaggi su 16x4 KB pagine.
MROM_PICOZ80_256.bin SST39SF040 (Monitor ROM) Immagine Monitor ROM per la build picoZ80 (ordine dei banchi diverso da ROMDISK).
USER_ROM_256.bin SST39SF040 (User ROM 1) User ROM 1: banchi RFS 0–11, banchi CP/M CBIOS 12–15, immagine CP/M 2.2 e set compresso di applicazioni MZF.
USER_ROM_II_256.bin SST39SF040 (User ROM 2) User ROM 2: applicazioni MZF aggiuntive.
USER_ROM_III_256.bin SST39SF040 (User ROM 3) User ROM 3: applicazioni MZF aggiuntive.
SFD700_256.bin SST39SF040 ROM SFD-700: ROM floppy AFI MZ-80A (0x00000–0x00FFF), ROM floppy MZ-700 (0x01000–0x01FFF), firmware RFS (0x02000–0x0BFFF), poi file system ROM.
SHARP_MZ80A_RFS_IMAGE_0–9.img Scheda SD Dieci immagini di unita RFS (una per unita 0–9).
SHARP_MZ80A_RFS_CPM_IMAGE_1.img Scheda SD Immagine combinata della scheda SD: 10 unita RFS seguite da 7 immagini disco CP/M. Copiare direttamente su una scheda SD.

Programmazione delle Flash ROM

Le immagini ROM vengono scritte su chip Flash RAM SST39SF040 (512 KB) utilizzando un programmatore TL866 o compatibile:

# Monitor ROM (build RomDisk):
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/MROM_ROMDISK_256.bin

# User ROM 1:
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/USER_ROM_256.bin

# SFD-700:
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/SFD700_256.bin

Scrittura dell'immagine della scheda SD

Scrivere l’immagine combinata della scheda SD direttamente sulla scheda SD con dd:

# Sostituire /dev/sdX con il dispositivo della scheda SD:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512
sync

Nessun partizionamento richiesto. L’immagine SDCFS inizia al settore 0. Inserire la scheda SD nel lettore sulla scheda RomDisk.

Aggiunta di applicazioni alle unita ROM

Le applicazioni memorizzate nelle unita Flash ROM devono prima essere convertite dal formato MZF in immagini binarie allineate per settore. Posizionare i file MZF nella sottodirectory appropriata sotto MZF/ ed eseguire:

tools/processMZFfiles.sh

Questo converte tutti i file MZF in immagini allineate per settore da 128 byte e 256 byte in MZB/. Vengono poi automaticamente presi in carico da make_roms.sh.

Per scegliere quali applicazioni appaiono in ogni unita ROM, modificare tools/make_roms.sh e regolare le chiamate addMZFToROMImageList:

# Formato:
#   addMZFToROMImageList  <ROMDISK>  <SFD700>  <picoZ80>  <reserved>  "<MZB path>"
#
# Esempio — includere in tutte le build:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"

# Esempio — solo RomDisk e picoZ80:
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"

Le applicazioni vengono compresse nell’ordine indicato, riempiendo prima User ROM 1, poi User ROM 2 e 3. Posizionare le applicazioni che si desidera sempre disponibili in cima alla lista.

Riferimento strumenti di build

Script / Strumento Descrizione
build.sh Script di build di primo livello. Esegue tutti i passaggi seguenti nell’ordine. Passare -m per rielaborare anche i file applicazione MZF.
tools/assemble_rfs.sh Assembla rfs.asm e rfs_mrom.asmroms/rfs.rom, roms/rfs_mrom.rom.
tools/assemble_cpm.sh Assembla il CBIOS e il kernel CP/M 2.2 → roms/*.rom.
tools/assemble_roms.sh Assembla tutte le varianti ROM del monitor e i binari applicazione MZF. Gestisce le quattro varianti di build MS-BASIC tramite una EQU BUILD_VERSION scritta in include/msbasic_buildversion.asm prima di ogni passata.
tools/make_roms.sh Confeziona i binari ROM e MZF in immagini Flash ROM per i target ROMDISK, SFD700 e picoZ80.
tools/make_cpmdisks.sh Crea immagini disco CP/M in formato RAW (per scheda SD) e CPC Extended Disk Format (per emulatori floppy o copia fisica).
tools/make_sdcard.sh Combina le immagini di unita RFS e le immagini disco CP/M in una singola immagine di scheda SD.
tools/processMZFfiles.sh Converte i file applicazione MZF in immagini allineate per settore da 128 byte e 256 byte in MZB/.
tools/mzftool.pl Script Perl per creare, estrarre e ispezionare immagini in formato MZF.
tools/sdtool Strumento binario che costruisce la struttura directory della scheda SD RFS e la popola con applicazioni MZF / binarie.
tools/nasconv Converte i file immagine cassetta NASCOM nel formato caricabile su MZ-80A, rimappando i valori dei token MS-BASIC se necessario.
tools/glass.jar Assemblatore GLASS Z80 fornito (Java). Utilizzato da tutti e tre gli script di assemblaggio.
tools/MZFD/MZFDTool Crea e gestisce immagini floppy disk raw per il FDC MZ-700. Comandi: format (crea immagine vuota), dir (elenca directory), add (aggiunge file MZF), extract (estrae file in MZF), boot (imposta programma di avvio). Immagine predefinita: MZ700.img.
tools/MZQD/MZQDTool Crea e gestisce immagini Quick Disk (QD) per l’MZ-700. Comandi: format (crea immagine vuota), dir (elenca directory), add (aggiunge file MZF). Immagine predefinita: MZ700.qd.
cpmtools/ Sorgente cpmtools (cpmcp, cpmls, cpmrm, ecc.). Compilato automaticamente alla prima build e installato in tools/.

SD Card Filing System

Anziche implementare un file system FAT (che sarebbe troppo grande per i banchi ROM da 2 KB e 4 KB), RFS utilizza un file system semplice appositamente progettato chiamato SD Card Filing System (SDCFS). Le prime schede v1 utilizzavano un'interfaccia SPI software bit-bang; la scheda v2.0 ha aggiunto l'SPI hardware, offrendo velocita di accesso a livello ROM.

Struttura SDCFS

Ogni immagine SDCFS contiene una directory con voci da 32 byte per un massimo di 256 file, seguita da 256 blocchi file a dimensione fissa. Dieci immagini SDCFS (unita 0–9) sono memorizzate all'inizio della scheda SD. Il resto della scheda SD contiene le immagini disco CP/M.
Ogni voce di directory e basata sull'header MZF standard:
FLAG1 FLAG2 FILE NAME START SECTOR SIZE LOAD ADDR EXEC ADDR RESERVED
1 Byte 1 Byte 17 Bytes 4 Bytes 2 Bytes 2 Bytes 2 Bytes 3 Bytes
Campo Descrizione
FLAG1 Bit 7 = 1: voce valida. Bit 7 = 0: inattiva / eliminata.
FLAG2 Tipo di esecuzione MZF (0x01 = binario).
FILE NAME Nome file MZF standard di 17 caratteri.
START SECTOR Primo settore all’interno di questa immagine di unita dove iniziano i dati del file.
SIZE Conteggio byte effettivo dei dati del file.
LOAD ADDR Indirizzo RAM in cui caricare i dati del file.
EXEC ADDR Indirizzo di esecuzione automatica per file binari.
RESERVED Non utilizzato attualmente.

Ogni blocco file e di dimensione fissa 64 KB, corrispondente alla dimensione massima del blocco CMT (cassetta). Questo mantiene il layout semplice e permette di leggere o scrivere file esattamente come se fossero su nastro, consentendo operazioni di copia SD-CMT trasparenti.

Layout della scheda SD

ADDRESS    SECTOR   CONTENT
00000000   00000  +-------------------------------------------------------------+
                  |  RFS DRIVE 0                                                |
00000000   00000  |  Directory entry 000 (32 bytes)                             |
                  |  ...                                                        |
00001FE0   0000F  |  Directory entry 255 (32 bytes)                             |
00002000   00010  |  File block 0     (64 KB)                                   |
                  |  ...                                                        |
00FF2000   7FF90  |  File block 255   (64 KB)                                   |
01001FFF   8000F  +-------------------------------------------------------------+
                  ...  (le unita RFS 1–8 seguono lo stesso schema)
09012000   48090  +-------------------------------------------------------------+
                  |  RFS DRIVE 9                                                |
0A013FFF   5009F  +-------------------------------------------------------------+
                  ... riempimento fino al limite di 256 MB ...
10000000   80000  +-------------------------------------------------------------+
                  |  CP/M DISK IMAGE 0   (16 MB, 32 sectors x 1024 tracks)     |
11000000   88000  +-------------------------------------------------------------+
                  |  CP/M DISK IMAGE 1                                          |
                  |  ...                                                        |
XX000000          |  CP/M DISK IMAGE n                                          |
                  +-------------------------------------------------------------+

Organizzazione della scheda SD

L’immagine della scheda SD costruita dagli strumenti del repository e pre-popolata come segue:

Unita RFS Contenuto
0 Programmi in codice macchina comuni e MZ-80A.
1 Programmi in codice macchina MZ-80K.
2 Programmi in codice macchina MZ-700.
3 Programmi in codice macchina MZ-800 / MZ-1500.
4 Programmi in codice macchina MZ-80B / MZ-2000.
5 Programmi BASIC, tipo 2 (MZ-80A).
6 Programmi BASIC, tipo 2 (MZ-80K).
7 Programmi BASIC, tipo 5 (MZ-700 / MZ-800).
8 Altri programmi / vari.
9 Altri programmi / vari.
Unita CP/M User# Immagine disco Contenuto
0 0 CPM00_SYSTEM Programmi di sistema CP/M
  1 CPM01_TURBOP Turbo Pascal
  2 CPM02_HI_C Hi-Soft C
  3 CPM03_FORTRAN80 Fortran 80
  4 CPM04_MBASIC Microsoft BASIC 80/85
  5–7 CPM05–07_COBOL80 Cobol v1.3, v2.0, Cobol 80
  8 CPM08_Z80FORTH Z80 Forth
  9 CPM09_CPMTEX CP/M TeX
  10 CPM10_DISKUTILFUNC5 Utilita disco
  11 CPM11_MAC80 Macro Assembler 80
  12 CPM29_ZSID_v14 ZSID Debugger
  13–14 CPM32–33_ZCPR3 Miglioramento CCP ZCPR3
1 0 CPM12_PASCALMTP_v561 Pascal v5.61
  1 CPM26_TPASCAL_v300a Turbo Pascal v3.00a
  2–11 CPM13–22_MTPUG_01–10 Pascal User Group Disks 01–10
2 0–2 CPM23–25_PLI / PLI80 PLI Compiler, PLI 80 v1.3, v1.4
  3 CPM28_PLM80 PLM 80
  4–6 CPM27,30,31_WORDSTAR WordStar v3.0, v3.3, v4.0
3–6 0–9 CPM_MC_C0–F9 Collezione Grant Searle CP/M dischi C0–F9

Manuali

La documentazione dettagliata per il Rom Filing System e disponibile in tre manuali separati:
Manuale Descrizione
Manuale utente Ottenere RFS, riferimento comandi del monitor, utilizzo delle unita SD, BASIC, CP/M e risoluzione dei problemi
Guida tecnica Piattaforme hardware, architettura di memoria, commutazione banchi, progettazione SDCFS, CBIOS CP/M e riferimento completo del sistema di build
Guida per sviluppatori Introduzione all’assemblatore Z80, percorsi completi dei moduli sorgente (inclusi i meccanismi interni di commutazione banchi), e guide per l’aggiunta di nuovi comandi e target hardware

Ringraziamenti

Quando un componente e basato su o derivato da un progetto di terze parti, l'avviso di copyright dell'autore originale e incluso nell'intestazione del file sorgente pertinente. Tutto il software di terze parti e, per quanto a nostra conoscenza, open source e liberamente utilizzabile. Se un componente dovesse risultare soggetto a restrizioni di licenza, verra rimosso e al suo posto verra fornito un link appropriato.

Licenze

Questo progetto, hardware e software, e concesso in licenza sotto la GNU Public Licence v3.

Nessun uso commerciale di questo progetto o di qualsiasi componente hardware/firmware senza l'esplicita autorizzazione dell'autore. Questa condizione prevale su qualsiasi diritto concesso dalla licenza GNU GPL 3.

La GNU General Public License v3

I file sorgente e binari in questo progetto contrassegnati come GPL v3 sono software libero: e possibile ridistribuirli e/o modificarli secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation, sia nella versione 3 della Licenza, sia (a propria scelta) in qualsiasi versione successiva.

I file sorgente sono distribuiti nella speranza che siano utili, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITA o IDONEITA A UN PARTICOLARE SCOPO. Vedere la GNU General Public License per maggiori dettagli.

Si dovrebbe aver ricevuto una copia della GNU General Public License insieme a questo programma. In caso contrario, vedere http://www.gnu.org/licenses/.