MZ-80A RomDisk — Guida Tecnica

Guida Tecnica del RomDisk

Questa guida documenta il design hardware del PCB Sharp MZ-80A RomDisk, l'architettura della memoria, i meccanismi di controllo dei banchi, le opzioni dell'interfaccia SPI, il layout dei moduli software, il design del SD Card Filing System, l'implementazione CP/M e il sistema di compilazione completo. E' destinata agli utenti che desiderano comprendere il funzionamento del RomDisk a livello di sistema, compilare il firmware dal codice sorgente o sviluppare nuovo software che utilizzi l'ambiente ROM a banchi.
Per l'uso quotidiano e il riferimento ai comandi del monitor, consultare il Manuale Utente RFS. Per le spiegazioni del codice sorgente assemblativo Z80, consultare la Guida per Sviluppatori RFS.

Versioni Hardware

Il PCB RomDisk e' una scheda figlia per lo Sharp MZ-80A. Si inserisce nel connettore di espansione dell'MZ-80A e utilizza zoccoli rialzati per intercettare le linee chip-select del Monitor ROM (4 KB a 0x0000-0x0FFF) e dello User ROM (2 KB a 0xE800-0xEFFF), sostituendo entrambi con Flash RAM paginata. Sono state prodotte tre revisioni hardware.

Versione 1.1
La scheda di produzione originale. Caratteristiche principali:
  • Una Flash RAM SST39SF040 da 512 KB nello zoccolo Monitor ROM (U1) -- fornisce otto slot di banco da 4 KB.
  • Una Flash RAM da 512 KB nello zoccolo User ROM (U4) -- fornisce 256 slot di banco da due kilobyte, sebbene RFS utilizzi solo i primi dodici.
  • Semplice latch di tipo D per la selezione del banco -- il registro di banco e' permanentemente accessibile senza meccanismo di protezione.
  • Accesso alla scheda SD tramite SPI software bitbang attraverso i pin della porta parallela stampante dello Sharp MZ-80A. Questo metodo e' funzionale ma lento rispetto all'SPI hardware successivo.
Le schede v1.1 utilizzano il flag di compilazione PP_SPI_ENA. Non c'e' un latch codificato; i registri di banco possono essere scritti in qualsiasi momento.

Versione 2.0
Una revisione significativa che aggiunge SPI hardware, slot Flash aggiuntivi, SRAM opzionale e un meccanismo di sicurezza per i registri di banco:
  • Latch codificato -- un contatore ascendente a 4 bit 74HCT191 controlla la logica di decodifica del registro di controllo I/O. All'accensione, o dopo una lettura di reset, il contatore e' a 0 e i registri di banco sono inaccessibili (le letture da 0xEFF8-0xEFFF restituiscono dati Flash ROM normali). I registri di controllo diventano attivi solo dopo esattamente 16 letture sequenziali nell'intervallo 0xEFF8-0xEFFF che incrementano il contatore fino alla sua uscita Terminal Count.
  • Circuito SPI hardware -- registro a scorrimento seriale-parallelo 74HCT595 (uscita MOSI/CLK) e registro a scorrimento parallelo-seriale 74HCT165 (ingresso MISO), cadenzato a 8 MHz da un oscillatore a cristallo da 16 MHz. Zoccolo per scheda SD montato direttamente sul PCB.
  • Secondo e terzo slot Flash User ROM (U5 e U6) -- ciascuno un ulteriore SST39SF040 da 512 KB. I bit BK2A19/BK2A20 nel registro BNKCTRL selezionano quale dei tre chip User ROM e' attivo.
  • SRAM opzionale da 512 KB -- AS6C4008, su zoccolo. Destinata a uso futuro come spazio di lavoro paginato aggiuntivo.
  • Il ponticello a saldare JP6 seleziona se e' installato il circuito SPI hardware o il circuito SPI software bitbang.
Bug noto: Lo Z80 esegue cicli di refresh DRAM utilizzando i pin del bus indirizzi A0-A7 (l'indirizzo di refresh). Quando questi cicli generavano un indirizzo nell'intervallo 0xEFF8-0xEFFF, il contatore 74HCT191 si incrementava in modo spurio, causando l'apertura inaspettata del latch codificato e permettendo scritture accidentali nei registri di banco.

Versione 2.1 (Attuale)
Una revisione mirata alla correzione del bug dell'indirizzo di refresh della v2.0. Modifiche rispetto alla v2.0:
  • Porta AND da diodi discreti (D1/D2) aggiunta all'ingresso clock del contatore. La porta combina il segnale di decodifica dell'indirizzo con il segnale /MREQ dello Z80, in modo che solo i veri cicli di lettura memoria del bus (non i cicli di refresh) possano incrementare il contatore 74HCT191. I cicli di refresh asseriscono /RFSH e deasseriscono /MREQ, quindi vengono bloccati.
  • 0xEFF9 ricablato come indirizzo dedicato di azzeramento del latch codificato. Una singola lettura a 0xEFF9 resetta il contatore 74HCT191 a 0 e disattiva l'accesso ai registri di controllo I/O.
  • Serigrafia del PCB riordinata -- designazioni di riferimento dei componenti corrette.
La versione 2.1 e' la versione attualmente raccomandata. Tutte le nuove costruzioni dovrebbero utilizzare la v2.1.

Architettura della Memoria

La CPU Z80 dello Sharp MZ-80A indirizza 64 KB di memoria. Il RomDisk sostituisce entrambe le finestre ROM con Flash RAM paginata e aggiunge otto registri di controllo I/O negli otto byte superiori dell'intervallo di indirizzi User ROM. L'intero intervallo 0x1200-0xCFFF rimane disponibile per i programmi utente.

Layout dello Spazio Indirizzi Z80
Address     Size    Contents
─────────────────────────────────────────────────────────────────────────────
0x0000      4 KB    Monitor ROM window — 4 KB page into 512 KB MROM Flash (U1)
                    Banks: 0 = SA-1510 (40-col, default on power-on)
                           1 = SA-1510 80-column
                           2 = CP/M CBIOS kernel
                           3 = RFS Monitor ROM utilities
                           4 = 1Z-013A MZ-700 monitor
                           5 = 1Z-013A 80-column
                           6 = IPL (Initial Program Loader)
                           7 = (empty)
0x1000      256 B   MZ-80A system variables and stack
0x1200    ~46 KB    User RAM (main program area, 0x1200–0xCFFF)
0xCFFF
0xD000      12 KB   Video RAM + memory-mapped I/O (Sharp MZ-80A mainboard hardware)
0xE800       2 KB   User ROM window — 2 KB page into 512 KB UROM Flash (U4/U5/U6)
                    Banks 0–7:  RFS firmware modules
                    Banks 8–11: CP/M CBIOS modules
0xEFF8       8 B    Coded latch read region (v2+): 16 reads here unlock control registers
                    Also Flash RAM data when latch is closed
0xEFF9       1 B    Coded latch reset: one read re-locks the control registers (v2.1+)
0xEFFB       1 B    HWSPIDATA  — Hardware SPI data register (v2+)
0xEFFC       1 B    HWSPISTART — Hardware SPI start/trigger register (v2+)
0xEFFD       1 B    BNKSELMROM — Monitor ROM bank select register
0xEFFE       1 B    BNKSELUSER — User ROM bank select register
0xEFFF       1 B    BNKCTRL    — Bank control register
0xF000       4 KB   Floppy AFI ROM space (original Sharp floppy controller ROM)
─────────────────────────────────────────────────────────────────────────────

Banchi Monitor ROM (4 KB ciascuno)
La finestra Monitor ROM a 0x0000-0x0FFF e' commutata tra otto banchi da 4 KB memorizzati nel chip Flash MROM a U1. Il banco 0 e' selezionato al reset all'accensione.
Bank Module Description
0 monitor_sa1510.asm Original SA-1510 40-column monitor. The default bank on power-on.
1 monitor_80c_sa1510.asm SA-1510 patched for 80-column display (requires Kuma 80-column upgrade).
2 cbios.asm CP/M 2.2 CBIOS kernel — relocated to 0xC000–0xCFFF at runtime during CP/M boot.
3 rfs_mrom.asm RFS Monitor ROM utilities — MZF image scanning and loading. Runs from MROM space so it can page the User ROM without paging itself out.
4 monitor_1z-013a.asm MZ-700 1Z-013A monitor variant.
5 monitor_80c_1z-013a.asm 1Z-013A monitor patched for 80-column display.
6 ipl.asm Initial Program Loader.
7 (empty) Unused.

Banchi User ROM (2 KB ciascuno)
La finestra User ROM a 0xE800-0xEFFF e' commutata tra 12 banchi attivi distribuiti sui tre chip Flash User ROM (U4, U5, U6). Il registro BNKSELUSER seleziona la pagina da 2 KB all'interno del chip attivo; i bit BK2A19 e BK2A20 in BNKCTRL selezionano quale chip e' indirizzato.
Bank Module Description
0 rfs.asm Primary RFS entry point, command dispatcher, command table, bank-switch infrastructure shared by all banks.
1 rfs_bank1.asm Floppy disk controller (FDC) functions — drive selection and FDC boot.
2 rfs_bank2.asm SD card controller — SPI driver, SD card initialisation, SDCFS directory and file read/write.
3 rfs_bank3.asm Memory utilities — hex dump (D), memory edit (M), memory copy (CP), tape↔SD copy (T2SD/SD2T).
4 rfs_bank4.asm CMT (cassette) controller — tape load, save, and verify.
5 rfs_bank5.asm (Reserved / unused.)
6 rfs_bank6.asm Help screen, message strings, ASCII↔Sharp character set conversion table.
7 rfs_bank7.asm Memory test (R), 8253 timer test (T).
8 cbios_bank1.asm CP/M CBIOS — audio functions and low-level utilities.
9 cbios_bank2.asm CP/M CBIOS — screen driver and ANSI terminal emulation.
10 cbios_bank3.asm CP/M CBIOS — SD card disk driver (CP/M drives A:–G:).
11 cbios_bank4.asm CP/M CBIOS — floppy disk controller.

Controllo dei Banchi

Meccanismo del Latch Codificato
Sulle schede v2.0 e v2.1 i registri di controllo dei banchi sono protetti da un contatore ascendente a 4 bit 74HCT191 che funge da latch codificato. Il meccanismo impedisce al codice Z80 in esecuzione dalla RAM programma di commutare accidentalmente i banchi ROM semplicemente leggendo o scrivendo un indirizzo che ricade nell'intervallo 0xEFF8-0xEFFF.
Funzionamento:
  1. All'accensione o dopo una lettura di reset del latch, il contatore 74HCT191 e' a 0. La logica di decodifica dei registri di controllo I/O e' disabilitata -- le letture da 0xEFF8-0xEFFF restituiscono dati Flash ROM normali, e le scritture a BNKSELMROM/BNKSELUSER/BNKCTRL non hanno effetto.
  2. Per sbloccare i registri di controllo: eseguire esattamente 16 cicli di lettura a qualsiasi indirizzo nell'intervallo 0xEFF8-0xEFFF. Ogni lettura incrementa il contatore di uno. Sulle schede v2.1 solo i veri cicli di lettura memoria del bus (con /MREQ asserito) contano; i cicli di refresh DRAM dello Z80 (che asseriscono /RFSH e deasseriscono /MREQ) sono bloccati dalla porta AND D1/D2 e non incrementano il contatore.
  3. Quando il contatore raggiunge il Terminal Count (16), l'uscita TC si attiva e abilita la logica di decodifica dei registri di controllo I/O. I registri di selezione dei banchi sono ora scrivibili.
  4. Per ribloccare: leggere dall'indirizzo 0xEFF9 una volta. Questo asserisce la linea di caricamento/reset del contatore, riporta il contatore a 0 e disattiva immediatamente i registri di controllo I/O.
Il numero di letture necessarie per lo sblocco puo' essere regolato tramite i bit CDLTCH1-3 nel registro BNKCTRL, che configurano l'offset iniziale del contatore (permettendo effettivamente di richiedere da 1 a 16 letture). Il firmware predefinito utilizza la sequenza completa di 16 letture.

Registro di Controllo dei Banchi (BNKCTRL, 0xEFFF)
Il registro BNKCTRL controlla i segnali SPI bitbang, il chip select della scheda SD, la configurazione del latch codificato e la selezione del chip User ROM. E' di sola scrittura (dopo che il latch codificato e' stato sbloccato).
Bits Name Description
0 BBCLK BitBang SPI Clock output. Toggled by software SPI routines to generate the SPI clock signal.
1 SDCS SD Card Chip Select — active low. Set to 0 to select the SD card, 1 to deselect.
2 BBMOSI BitBang SPI MOSI data output. Set to the bit value before toggling BBCLK.
5:3 CDLTCH1–3 Coded latch configuration bits. Sets the initial counter offset, controlling how many reads to 0xEFF8–0xEFFF are required to unlock the registers. Default 0 = 16 reads required.
6 BK2A19 User ROM device/address select bit 0. Combined with BNKSELUSER to address the full 512 KB of each User ROM chip, and to select between U4, U5, and U6.
7 BK2A20 User ROM device/address select bit 1. See BK2A19.
I bit BK2A19/BK2A20 estendono lo spazio di indirizzi effettivo dello User ROM oltre i 256 banchi da due kilobyte disponibili dal solo BNKSELUSER. Insieme a BNKSELUSER formano un indirizzo composito nei tre chip Flash User ROM, selezionando quale chip e' attivo (U4, U5 o U6) e quale pagina da 2 KB al suo interno e' mappata nella finestra 0xE800-0xEFFF.

Interfaccia SPI

Sono supportate tre implementazioni SPI, selezionate al momento della compilazione impostando esattamente un flag a 1 in rfs_definitions.asm. Solo uno puo' essere abilitato in una data compilazione del firmware.
Flag Value Method Speed Hardware Required
HW_SPI_ENA 1 Hardware SPI — 74HCT595/74HCT165 shift registers, 16 MHz crystal 8 MHz — comparable to Flash ROM access speed v2.0/v2.1 PCB with JP6 fitted for hardware SPI
SW_SPI_ENA 1 Software bitbang SPI via Z80 I/O port bit manipulation of BNKCTRL ~300 KB/s — faster than floppy, slower than ROM v2.0/v2.1 PCB with JP6 fitted for software SPI
PP_SPI_ENA 1 Parallel printer port bitbang (original v1.1 method) Slowest v1.1 PCB only
Funzionamento SPI hardware (schede v2.0/v2.1):
  1. Scrivere il byte di dati in HWSPIDATA (0xEFFB). Il registro a scorrimento 74HCT595 carica il byte pronto per la trasmissione.
  2. Scrivere un valore qualsiasi in HWSPISTART (0xEFFC) per avviare il trasferimento. Il registro a scorrimento trasmette il byte sulla linea MOSI sincronizzato all'oscillatore da 16 MHz, mentre il 74HCT165 contemporaneamente riceve i bit MISO dalla scheda SD.
  3. Leggere HWSPIDATA (0xEFFB) per recuperare il byte ricevuto. Lo scambio completo a 8 bit si completa in meno tempo di un singolo ciclo di lettura memoria dello Z80 -- ecco perche' il throughput SPI hardware e' paragonabile alla velocita' di accesso alla Flash ROM.
Funzionamento SPI software bitbang: Il firmware manipola direttamente i campi BBCLK (bit 0), BBMOSI (bit 2) e SDCS (bit 1) del registro BNKCTRL in un ciclo stretto, commutando BBCLK una volta per bit mentre imposta BBMOSI al valore del bit in uscita. Il MISO viene campionato da un bit dedicato della porta di ingresso. Questo raggiunge circa 300 KB/s, che e' adeguato per i trasferimenti della scheda SD.
Bitbang porta parallela (solo v1.1): Utilizza le linee dati e stato della porta parallela stampante Centronics dello Sharp MZ-80A come segnali SPI. Funzionale ma la piu' lenta delle tre opzioni a causa dei tempi I/O della porta stampante.

Architettura Software

La tabella completa dei moduli -- ogni file sorgente, il suo chip Flash di destinazione, banco ROM e funzione:
Module Flash Chip Bank Size Description
rfs.asm User (U4) 0 2 KB Command dispatcher, command table, bank-switch infrastructure.
rfs_bank1.asm User (U4) 1 2 KB Floppy disk controller — drive select and FDC boot.
rfs_bank2.asm User (U4) 2 2 KB SD card controller — SPI driver, SDCFS directory, file read/write.
rfs_bank3.asm User (U4) 3 2 KB Memory utilities — D, M, CP, T2SD, SD2T.
rfs_bank4.asm User (U4) 4 2 KB CMT controller — tape load, save, verify.
rfs_bank5.asm User (U4) 5 2 KB (Reserved / unused.)
rfs_bank6.asm User (U4) 6 2 KB Help screen, message strings, character set conversion.
rfs_bank7.asm User (U4) 7 2 KB Memory test (R), timer test (T).
cbios_bank1.asm User (U4) 8 2 KB CP/M CBIOS — audio, low-level utilities.
cbios_bank2.asm User (U4) 9 2 KB CP/M CBIOS — screen driver, ANSI terminal emulator.
cbios_bank3.asm User (U4) 10 2 KB CP/M CBIOS — SD card disk driver (drives A:–G:).
cbios_bank4.asm User (U4) 11 2 KB CP/M CBIOS — floppy disk controller.
monitor_sa1510.asm Monitor (U1) 0 4 KB Original SA-1510 monitor ROM (40-column).
monitor_80c_sa1510.asm Monitor (U1) 1 4 KB SA-1510 patched for 80-column display.
cbios.asm Monitor (U1) 2 4 KB CP/M 2.2 CBIOS kernel (relocated to 0xC000 during CP/M boot).
rfs_mrom.asm Monitor (U1) 3 4 KB RFS Monitor ROM utilities — ROM scanning, MZF loading.
monitor_1z-013a.asm Monitor (U1) 4 4 KB MZ-700 1Z-013A monitor variant.
monitor_80c_1z-013a.asm Monitor (U1) 5 4 KB 1Z-013A patched for 80-column display.
ipl.asm Monitor (U1) 6 4 KB Initial Program Loader.
Poiche' lo Z80 puo' vedere solo una porzione di 2 KB dello User ROM alla volta, ogni banco User ROM contiene una copia dello stub di commutazione banco a un indirizzo fisso all'interno della finestra. Quando il banco 0 deve chiamare una routine nel banco 3, scrive il numero del banco di destinazione in BNKSELUSER, salta al punto di ingresso noto nel banco appena mappato, esegue il codice richiesto, riscrive il banco 0 in BNKSELUSER e ritorna. Questo meccanismo rende accessibili tutti i 12 x 2 KB = 24 KB di codice User ROM da qualsiasi contesto di esecuzione.
Vincolo importante sulle schede v2.0/v2.1: nessuna sequenza di istruzioni in ciclo stretto nel codice del banco User ROM puo' attraversare l'intervallo di indirizzi 0xEFF8-0xEFFF, poiche' letture ripetute in quell'intervallo incrementeranno il contatore del latch codificato e alla fine sbloccheranno i registri di banco inaspettatamente.

SD Card Filing System (SDCFS)

Piuttosto che implementare FAT (che sarebbe troppo grande per essere contenuto nei banchi ROM disponibili da 2 KB), il firmware RomDisk utilizza un file system appositamente progettato chiamato SD Card Filing System (SDCFS). Il design privilegia la semplicita' e un ingombro ROM minimo rispetto alla flessibilita'.
La scheda SD viene utilizzata in modalita' raw -- non viene scritta alcuna tabella delle partizioni. L'immagine SDCFS inizia al byte 0 (settore 0) della scheda. Le immagini disco CP/M sono posizionate al confine dei 256 MB per garantire che tutti i 10 drive RFS abbiano spazio indipendentemente da quanto siano pieni.

Struttura della Directory
Ogni drive SDCFS contiene una directory piatta di massimo 256 voci. Ogni voce e' esattamente di 32 byte, utilizzando una struttura derivata dal formato standard dell'intestazione nastro MZF (lo stesso layout a 32 byte utilizzato sui nastri a cassetta Sharp MZ):
Field Bytes Description
FLAG1 1 Bit 7 = 1: valid entry. Bit 7 = 0: inactive / deleted.
FLAG2 1 MZF execution type (0x01 = binary program).
FILE NAME 17 Standard 17-character MZF filename (Sharp character encoding).
START SECTOR 4 First SD card sector within this drive image where the file’s data block begins.
SIZE 2 Actual byte count of the file data.
LOAD ADDR 2 Z80 RAM address to load the file data to.
EXEC ADDR 2 Auto-execution address for binary files (jumped to after load if non-zero).
RESERVED 3 Not currently used.
La directory occupa i primi 8 KB di ogni immagine drive (256 voci x 32 byte). I dati dei file seguono immediatamente. A ogni file viene allocato un blocco fisso di 64 KB -- corrispondente alla dimensione massima del blocco nastro a cassetta Sharp MZ -- che mantiene il layout su disco banalmente semplice e rende la copia SD/nastro un trasferimento diretto byte per byte allineato ai settori.

Layout della Scheda SD
ADDRESS       CONTENT
────────────────────────────────────────────────────────────────────────
0x00000000    RFS DRIVE 0  (16 MB)
                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  (A:)  — 16 MB
0x11000000    CP/M DISK IMAGE 1  (B:)  — 16 MB
...
0x16000000    CP/M DISK IMAGE 6  (G:)  — 16 MB
────────────────────────────────────────────────────────────────────────

Implementazione CP/M 2.2

CP/M 2.2 e' disponibile sul RomDisk come funzionalita' integrata. Digitando CPM al prompt del monitor RFS si avvia CP/M direttamente dalla scheda SD. Il TPA CP/M e' di 47 KB; il CCP si trova a 0x9C00 con il BDOS sopra, mentre l'intero CBIOS risiede in ROM (Monitor ROM banco 2 piu' User ROM banchi 8-11) e non consuma RAM programma.
Processo di Avvio
  1. Il comando RFS CPM commuta il Monitor ROM al banco 2 (il kernel CBIOS), che contiene il punto di ingresso cold-boot CP/M a 0x0000.
  2. La routine cold-boot del CBIOS inizializza tutto l'hardware (tastiera, schermo, scheda SD, floppy se presente) e costruisce i Disk Parameter Header per ogni drive disponibile.
  3. Il CBIOS legge le immagini CCP e BDOS dal disco di sistema CP/M sulla scheda SD nella RAM a 0x9C00.
  4. Il controllo passa al CCP a 0x9C00. CP/M e' ora in esecuzione.
Al warm boot (ad esempio, dopo che un'applicazione grande ha sovrascritto il CCP), il vettore warm-boot del CBIOS a 0x0003 ricarica il CCP e il BDOS dal disco e rientra nel CCP.
Layout dei Moduli CBIOS
Il Custom BIOS e' suddiviso in cinque moduli ROM in modo che nessun singolo banco da 2 KB venga superato:
Module ROM Location Contents
cbios.asm Monitor ROM bank 2 (0x0000–0x0FFF while active) All 17 CP/M CBIOS API vectors, cold/warm boot handlers, interrupt handler, disk parameter tables.
cbios_bank1.asm User ROM bank 8 Audio (bell, melody), real-time clock routines, low-level keyboard handler.
cbios_bank2.asm User ROM bank 9 Screen driver (character output, scroll, cursor control), ANSI/VT100 terminal emulator.
cbios_bank3.asm User ROM bank 10 SD card disk driver — translates CP/M 128-byte sector reads and writes to SDCFS drive images at the 256 MB boundary.
cbios_bank4.asm User ROM bank 11 Floppy disk controller — supports physical CP/M floppy disks.
Configurazione dei Drive CP/M
I drive CP/M sono mappati alle immagini disco della scheda SD durante il cold-boot del CBIOS. La mappatura standard dei drive e':
CP/M Drive Image Contents
A: CP/M Disk Image 0 OS programs, Turbo Pascal, Hi-Soft C, Fortran 80, MS-BASIC 80.
B: CP/M Disk Image 1 Pascal MTP v5.61, Turbo Pascal v3.00a, Pascal User Group disks.
C: CP/M Disk Image 2 PLI, PLM 80, WordStar v3.0/v3.3/v4.0.
D:–G: CP/M Disk Images 3–6 Grant Searle CP/M collection disks.

Sistema di Compilazione

Tutto lo sviluppo viene effettuato su Linux (Debian/Ubuntu). Il sistema di compilazione e' autonomo all'interno del repository. Il punto di ingresso principale e' build.sh nella directory software/RFS/.

Prerequisiti
Tool Purpose
Java JRE 8+ Runs the GLASS Z80 assembler (tools/glass.jar). java must be on PATH.
bash All build scripts are bash shell scripts.
perl Required by tools/mzftool.pl for MZF file manipulation.
gcc / make Compiles cpmtools from source on first build (automatic).
dd, cat, stat Standard Linux utilities used by the packaging scripts.
L'assemblatore GLASS Z80 e' incluso come tools/glass.jar -- non e' necessaria alcuna installazione separata.

Flag di Compilazione
Modificare asm/include/rfs_definitions.asm prima della compilazione. I flag dell'interfaccia SPI sono mutuamente esclusivi -- impostarne esattamente uno a 1:
Flag Default Description
HW_SPI_ENA 1 Hardware SPI (v2.0/v2.1 PCB, JP6 configured for hardware SPI). Default for all current boards.
SW_SPI_ENA 0 Software bitbang SPI (v2.0/v2.1 PCB, JP6 configured for software SPI).
PP_SPI_ENA 0 Parallel port bitbang SPI. For v1.1 boards only.
FUSIONX_ENA 1 Include tranZPUter FusionX support.
ENADEBUG 0 Enable assembly-time debug output.

Passaggi di Compilazione
git clone https://git.eaw.app/eaw/RFS.git
cd RFS/software/RFS

# Full build — assembles all ROMs, packages Flash 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:
  1. Compila cpmtools dal sorgente se non ancora compilato, e lo aggiunge al PATH.
  2. tools/assemble_rfs.sh -- assembla tutti i banchi firmware RFS (rfs.asm, rfs_bank1-7.asm) in immagini ROM individuali.
  3. tools/assemble_cpm.sh -- assembla il CBIOS CP/M 2.2 (cbios.asm, cbios_bank1-4.asm) e il kernel CCP+BDOS CP/M.
  4. tools/assemble_roms.sh -- assembla tutte le varianti del monitor (SA-1510, 80c, 1Z-013A, IPL) e i binari delle applicazioni MZF.
  5. tools/processMZFfiles.sh (solo con il flag -m) -- converte i file MZF grezzi da MZF/ in immagini con settori imbottiti a 128 byte e 256 byte in MZB/.
  6. tools/make_roms.sh -- confeziona le immagini ROM assemblate e i binari delle applicazioni MZF in immagini Flash ROM da 512 KB per ciascun chip Flash.
  7. tools/make_cpmdisks.sh -- crea immagini disco CP/M in formato RAW (per scheda SD) e formato CPC Extended Disk (per emulatori floppy).
  8. tools/make_sdcard.sh -- combina le 10 immagini drive RFS e le 7 immagini disco CP/M nell'immagine finale della scheda SD.

File di Output
Dopo una compilazione riuscita la directory roms/ contiene:
File Target Chip Description
MROM_ROMDISK_256.bin Monitor ROM Flash (U1) Monitor ROM image: SA-1510, 80c SA-1510, CP/M CBIOS, RFS mrom utils, 1Z-013A monitors, IPL across 7 × 4 KB banks.
USER_ROM_256.bin User ROM Flash U4 RFS banks 0–7, CP/M CBIOS banks 8–11, packed MZF applications.
USER_ROM_II_256.bin User ROM Flash U5 Additional MZF applications (overflow from U4).
USER_ROM_III_256.bin User ROM Flash U6 Additional MZF applications (overflow from U5).
SHARP_MZ80A_RFS_IMAGE_0–9.img SD card Individual RFS drive images, one per drive (drives 0–9).
SHARP_MZ80A_RFS_CPM_IMAGE_1.img SD card Combined image: 10 RFS drives + 7 CP/M disk images. Write this file to the SD card.
Per programmare i chip Flash, utilizzare un programmatore compatibile SST39SF040. Scrivere MROM_ROMDISK_256.bin in U1, USER_ROM_256.bin in U4, e le immagini di overflow in U5 e U6 se installati. Per scrivere l'immagine della scheda SD usare dd:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512 status=progress

Siti di Riferimento

Resource Link
RomDisk project page /sharpmz-upgrades-romdisk/
RFS project page /sharpmz-upgrades-rfs/
RFS User Manual /sharpmz-upgrades-rfs-usermanual/
RFS Developer’s Guide /sharpmz-upgrades-rfs-developersguide/
RFS Technical Guide /sharpmz-upgrades-rfs-technicalguide/
RFS Gallery /sharpmz-upgrades-rfs-gallery/
SFD-700 mkII Technical Guide /sfd700-technicalguide/
picoZ80 Technical Guide /picoz80-technicalguide/
GLASS Z80 Assembler Bundled in tools/glass.jar
SST39SF040 Flash datasheet Microchip / Greenliant product page
AS6C4008 SRAM datasheet Alliance Memory product page