MZ-80A RomDisk — Guia Tecnica

Guia Tecnica del RomDisk

Esta guia documenta el diseno hardware de la PCB Sharp MZ-80A RomDisk, la arquitectura de memoria, los mecanismos de control de bancos, las opciones de interfaz SPI, la disposicion de modulos software, el diseno del SD Card Filing System, la implementacion CP/M y el sistema de compilacion completo. Esta destinada a usuarios que deseen comprender como funciona el RomDisk a nivel de sistema, compilar firmware desde el codigo fuente o desarrollar nuevo software que utilice el entorno ROM con bancos.
Para el uso diario y la referencia de comandos del monitor, consulte el Manual de Usuario RFS. Para explicaciones del codigo fuente ensamblador Z80, consulte la Guia del Desarrollador RFS.

Versiones de Hardware

La PCB RomDisk es una tarjeta hija para el Sharp MZ-80A. Se conecta al conector de expansion del MZ-80A y utiliza zocalos elevadores para interceptar las lineas chip-select del Monitor ROM (4 KB en 0x0000-0x0FFF) y del User ROM (2 KB en 0xE800-0xEFFF), reemplazando ambos con Flash RAM paginada. Se han producido tres revisiones de hardware.

Version 1.1
La tarjeta de produccion original. Caracteristicas principales:
  • Una Flash RAM SST39SF040 de 512 KB en el zocalo Monitor ROM (U1) -- proporciona ocho ranuras de banco de 4 KB.
  • Una Flash RAM de 512 KB en el zocalo User ROM (U4) -- proporciona 256 ranuras de banco de dos kilobytes, aunque RFS solo utiliza las primeras doce.
  • Simple latch tipo D para seleccion de banco -- el registro de banco es permanentemente accesible sin mecanismo de proteccion.
  • Acceso a tarjeta SD mediante SPI software bitbang a traves de los pines del puerto paralelo de impresora del Sharp MZ-80A. Este metodo es funcional pero lento en comparacion con el SPI hardware posterior.
Las tarjetas v1.1 utilizan el flag de compilacion PP_SPI_ENA. No hay latch codificado; los registros de banco pueden escribirse en cualquier momento.

Version 2.0
Una revision significativa que anade SPI hardware, ranuras Flash adicionales, SRAM opcional y un mecanismo de seguridad para los registros de banco:
  • Latch codificado -- un contador ascendente de 4 bits 74HCT191 controla la logica de decodificacion del registro de control I/O. Al encenderse, o despues de una lectura de reset, el contador esta en 0 y los registros de banco son inaccesibles (las lecturas de 0xEFF8-0xEFFF devuelven datos Flash ROM normales). Los registros de control se activan solo despues de exactamente 16 lecturas secuenciales al rango 0xEFF8-0xEFFF que incrementan el contador hasta su salida Terminal Count.
  • Circuito SPI hardware -- registro de desplazamiento serie-paralelo 74HCT595 (salida MOSI/CLK) y registro de desplazamiento paralelo-serie 74HCT165 (entrada MISO), sincronizado a 8 MHz desde un oscilador de cristal de 16 MHz. Zocalo para tarjeta SD montado directamente en la PCB.
  • Segunda y tercera ranura Flash User ROM (U5 y U6) -- cada una un SST39SF040 adicional de 512 KB. Los bits BK2A19/BK2A20 en el registro BNKCTRL seleccionan cual de los tres chips User ROM esta activo.
  • SRAM opcional de 512 KB -- AS6C4008, en zocalo. Destinada para uso futuro como espacio de trabajo paginado adicional.
  • El puente de soldadura JP6 selecciona si esta instalado el circuito SPI hardware o el circuito SPI software bitbang.
Error conocido: El Z80 realiza ciclos de refresco DRAM utilizando los pines del bus de direcciones A0-A7 (la direccion de refresco). Cuando estos ciclos generaban una direccion en el rango 0xEFF8-0xEFFF, el contador 74HCT191 se incrementaba de forma espuria, causando la apertura inesperada del latch codificado y permitiendo escrituras accidentales en los registros de banco.

Version 2.1 (Actual)
Una revision dirigida a corregir el problema de direccion de refresco de la v2.0. Cambios respecto a la v2.0:
  • Puerta AND de diodos discretos (D1/D2) anadida a la entrada de reloj del contador. La puerta combina la senal de decodificacion de direccion con la senal /MREQ del Z80, de modo que solo los verdaderos ciclos de lectura de memoria del bus (no los ciclos de refresco) pueden incrementar el contador 74HCT191. Los ciclos de refresco activan /RFSH y desactivan /MREQ, por lo que quedan bloqueados.
  • 0xEFF9 recableado como direccion dedicada de borrado del latch codificado. Una sola lectura a 0xEFF9 reinicia el contador 74HCT191 a 0 y desactiva el acceso a los registros de control I/O.
  • Serigrafia de la PCB ordenada -- designaciones de referencia de componentes corregidas.
La version 2.1 es la version recomendada actualmente. Todas las nuevas construcciones deben usar la v2.1.

Arquitectura de Memoria

La CPU Z80 del Sharp MZ-80A direcciona 64 KB de memoria. El RomDisk reemplaza ambas ventanas ROM con Flash RAM paginada y anade ocho registros de control I/O en los ocho bytes superiores del rango de direcciones User ROM. El rango completo 0x1200-0xCFFF permanece disponible para programas de usuario.

Distribucion del Espacio de Direcciones 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)
─────────────────────────────────────────────────────────────────────────────

Bancos Monitor ROM (4 KB cada uno)
La ventana Monitor ROM en 0x0000-0x0FFF se conmuta entre ocho bancos de 4 KB almacenados en el chip Flash MROM en U1. El banco 0 se selecciona al encender.
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.

Bancos User ROM (2 KB cada uno)
La ventana User ROM en 0xE800-0xEFFF se conmuta entre 12 bancos activos distribuidos en los tres chips Flash User ROM (U4, U5, U6). El registro BNKSELUSER selecciona la pagina de 2 KB dentro del chip activo; los bits BK2A19 y BK2A20 en BNKCTRL seleccionan que chip se direcciona.
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.

Control de Bancos

Mecanismo del Latch Codificado
En las tarjetas v2.0 y v2.1 los registros de control de banco estan protegidos por un contador ascendente de 4 bits 74HCT191 que actua como latch codificado. El mecanismo impide que el codigo Z80 ejecutandose desde la RAM de programa conmute accidentalmente los bancos ROM simplemente leyendo o escribiendo una direccion que cae en el rango 0xEFF8-0xEFFF.
Funcionamiento:
  1. Al encenderse o despues de una lectura de reset del latch, el contador 74HCT191 esta en 0. La logica de decodificacion de los registros de control I/O esta deshabilitada -- las lecturas de 0xEFF8-0xEFFF devuelven datos Flash ROM normales, y las escrituras a BNKSELMROM/BNKSELUSER/BNKCTRL no tienen efecto.
  2. Para desbloquear los registros de control: realizar exactamente 16 ciclos de lectura a cualquier direccion en el rango 0xEFF8-0xEFFF. Cada lectura incrementa el contador en uno. En las tarjetas v2.1 solo los verdaderos ciclos de lectura de memoria del bus (con /MREQ activado) cuentan; los ciclos de refresco DRAM del Z80 (que activan /RFSH y desactivan /MREQ) son bloqueados por la puerta AND D1/D2 y no incrementan el contador.
  3. Cuando el contador alcanza el Terminal Count (16), la salida TC se activa y habilita la logica de decodificacion de los registros de control I/O. Los registros de seleccion de banco son ahora escribibles.
  4. Para rebloquear: leer de la direccion 0xEFF9 una vez. Esto activa la linea de carga/reset del contador, devuelve el contador a 0 y desactiva inmediatamente los registros de control I/O.
El numero de lecturas necesarias para el desbloqueo puede ajustarse mediante los bits CDLTCH1-3 en el registro BNKCTRL, que configuran el offset inicial del contador (permitiendo efectivamente requerir de 1 a 16 lecturas). El firmware predeterminado utiliza la secuencia completa de 16 lecturas.

Registro de Control de Bancos (BNKCTRL, 0xEFFF)
El registro BNKCTRL controla las senales SPI bitbang, el chip select de la tarjeta SD, la configuracion del latch codificado y la seleccion del chip User ROM. Es de solo escritura (despues de que el latch codificado haya sido desbloqueado).
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.
Los bits BK2A19/BK2A20 extienden el espacio de direcciones efectivo del User ROM mas alla de los 256 bancos de dos kilobytes disponibles solo desde BNKSELUSER. Junto con BNKSELUSER forman una direccion compuesta en los tres chips Flash User ROM, seleccionando que chip esta activo (U4, U5 o U6) y que pagina de 2 KB dentro de el se mapea a la ventana 0xE800-0xEFFF.

Interfaz SPI

Se soportan tres implementaciones SPI, seleccionadas en tiempo de compilacion estableciendo exactamente un flag a 1 en rfs_definitions.asm. Solo uno puede estar habilitado en una compilacion de firmware dada.
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
Funcionamiento SPI hardware (tarjetas v2.0/v2.1):
  1. Escribir el byte de datos en HWSPIDATA (0xEFFB). El registro de desplazamiento 74HCT595 carga el byte listo para transmision.
  2. Escribir cualquier valor en HWSPISTART (0xEFFC) para iniciar la transferencia. El registro de desplazamiento transmite el byte en la linea MOSI sincronizado con el oscilador de 16 MHz, mientras el 74HCT165 simultaneamente recibe los bits MISO de la tarjeta SD.
  3. Leer HWSPIDATA (0xEFFB) para recuperar el byte recibido. El intercambio completo de 8 bits se completa en menos tiempo que un solo ciclo de lectura de memoria del Z80 -- por eso el throughput SPI hardware es comparable a la velocidad de acceso a la Flash ROM.
Funcionamiento SPI software bitbang: El firmware manipula directamente los campos BBCLK (bit 0), BBMOSI (bit 2) y SDCS (bit 1) del registro BNKCTRL en un bucle cerrado, conmutando BBCLK una vez por bit mientras establece BBMOSI al valor del bit de salida. El MISO se muestrea desde un bit dedicado del puerto de entrada. Esto alcanza aproximadamente 300 KB/s, que es adecuado para transferencias de tarjeta SD.
Bitbang puerto paralelo (solo v1.1): Utiliza las lineas de datos y estado del puerto paralelo de impresora Centronics del Sharp MZ-80A como senales SPI. Funcional pero la mas lenta de las tres opciones debido a los tiempos I/O del puerto de impresora.

Arquitectura de Software

La tabla completa de modulos -- cada archivo fuente, su chip Flash de destino, banco ROM y funcion:
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.
Dado que el Z80 solo puede ver una porcion de 2 KB del User ROM a la vez, cada banco User ROM contiene una copia del stub de conmutacion de banco en una direccion fija dentro de la ventana. Cuando el banco 0 necesita llamar a una rutina en el banco 3, escribe el numero del banco de destino en BNKSELUSER, salta al punto de entrada conocido en el banco recien mapeado, ejecuta el codigo requerido, reescribe el banco 0 en BNKSELUSER y retorna. Este mecanismo hace accesibles todos los 12 x 2 KB = 24 KB de codigo User ROM desde cualquier contexto de ejecucion.
Restriccion importante en tarjetas v2.0/v2.1: ninguna secuencia de instrucciones en bucle cerrado en el codigo del banco User ROM puede abarcar el rango de direcciones 0xEFF8-0xEFFF, ya que lecturas repetidas a ese rango incrementaran el contador del latch codificado y eventualmente desbloquearan los registros de banco inesperadamente.

SD Card Filing System (SDCFS)

En lugar de implementar FAT (que seria demasiado grande para caber en los bancos ROM disponibles de 2 KB), el firmware RomDisk utiliza un sistema de archivos especialmente disenado llamado SD Card Filing System (SDCFS). El diseno prioriza la simplicidad y un minimo uso de ROM sobre la flexibilidad.
La tarjeta SD se utiliza en modo raw -- no se escribe ninguna tabla de particiones. La imagen SDCFS comienza en el byte 0 (sector 0) de la tarjeta. Las imagenes de disco CP/M se colocan en el limite de 256 MB para asegurar que las 10 unidades RFS tengan espacio independientemente de lo llenas que esten.

Estructura del Directorio
Cada unidad SDCFS contiene un directorio plano de hasta 256 entradas. Cada entrada tiene exactamente 32 bytes, utilizando una estructura derivada del formato estandar de cabecera de cinta MZF (el mismo diseno de 32 bytes utilizado en las cintas de casete 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.
El directorio ocupa los primeros 8 KB de cada imagen de unidad (256 entradas x 32 bytes). Los datos de archivos siguen inmediatamente. A cada archivo se le asigna un bloque fijo de 64 KB -- coincidiendo con el tamano maximo del bloque de cinta de casete Sharp MZ -- lo que mantiene la disposicion en disco trivialmente simple y hace que la copia SD/cinta sea una transferencia directa byte por byte alineada a sectores.

Distribucion de la Tarjeta 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
────────────────────────────────────────────────────────────────────────

Implementacion CP/M 2.2

CP/M 2.2 esta disponible en el RomDisk como capacidad integrada. Al escribir CPM en el prompt del monitor RFS se inicia CP/M directamente desde la tarjeta SD. El TPA de CP/M es de 47 KB; el CCP se encuentra en 0x9C00 con el BDOS encima, mientras que todo el CBIOS reside en ROM (Monitor ROM banco 2 mas User ROM bancos 8-11) y no consume RAM de programa.
Proceso de Arranque
  1. El comando RFS CPM conmuta el Monitor ROM al banco 2 (el kernel CBIOS), que contiene el punto de entrada cold-boot de CP/M en 0x0000.
  2. La rutina cold-boot del CBIOS inicializa todo el hardware (teclado, pantalla, tarjeta SD, disquetera si esta presente) y construye los Disk Parameter Headers para cada unidad disponible.
  3. El CBIOS lee las imagenes CCP y BDOS del disco de sistema CP/M en la tarjeta SD a la RAM en 0x9C00.
  4. El control pasa al CCP en 0x9C00. CP/M esta ahora en ejecucion.
En el warm boot (por ejemplo, despues de que una aplicacion grande haya sobreescrito el CCP), el vector warm-boot del CBIOS en 0x0003 recarga el CCP y el BDOS desde el disco y reingresa al CCP.
Distribucion de Modulos CBIOS
El Custom BIOS esta dividido en cinco modulos ROM de manera que ningun banco individual de 2 KB sea excedido:
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.
Configuracion de Unidades CP/M
Las unidades CP/M se mapean a imagenes de disco de la tarjeta SD durante el cold-boot del CBIOS. El mapeo estandar de unidades es:
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 de Compilacion

Todo el desarrollo se realiza en Linux (Debian/Ubuntu). El sistema de compilacion es autocontenido dentro del repositorio. El punto de entrada principal es build.sh en el directorio software/RFS/.

Prerrequisitos
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.
El ensamblador GLASS Z80 esta incluido como tools/glass.jar -- no se requiere ninguna instalacion por separado.

Flags de Compilacion
Editar asm/include/rfs_definitions.asm antes de compilar. Los flags de interfaz SPI son mutuamente excluyentes -- establecer exactamente 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.

Pasos de Compilacion
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 ejecuta los siguientes pasos en orden:
  1. Compila cpmtools desde el codigo fuente si aun no esta compilado, y lo anade al PATH.
  2. tools/assemble_rfs.sh -- ensambla todos los bancos de firmware RFS (rfs.asm, rfs_bank1-7.asm) en imagenes ROM individuales.
  3. tools/assemble_cpm.sh -- ensambla el CBIOS CP/M 2.2 (cbios.asm, cbios_bank1-4.asm) y el kernel CCP+BDOS CP/M.
  4. tools/assemble_roms.sh -- ensambla todas las variantes del monitor (SA-1510, 80c, 1Z-013A, IPL) y los binarios de aplicaciones MZF.
  5. tools/processMZFfiles.sh (solo con el flag -m) -- convierte archivos MZF sin procesar de MZF/ en imagenes con sectores rellenados a 128 bytes y 256 bytes en MZB/.
  6. tools/make_roms.sh -- empaqueta las imagenes ROM ensambladas y los binarios de aplicaciones MZF en imagenes Flash ROM de 512 KB para cada chip Flash.
  7. tools/make_cpmdisks.sh -- crea imagenes de disco CP/M en formato RAW (para tarjeta SD) y formato CPC Extended Disk (para emuladores de disquetera).
  8. tools/make_sdcard.sh -- combina las 10 imagenes de unidad RFS y las 7 imagenes de disco CP/M en la imagen final de la tarjeta SD.

Archivos de Salida
Despues de una compilacion exitosa el directorio 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.
Para programar los chips Flash, utilizar un programador compatible SST39SF040. Escribir MROM_ROMDISK_256.bin en U1, USER_ROM_256.bin en U4, y las imagenes de desbordamiento en U5 y U6 si estan instalados. Para escribir la imagen de la tarjeta SD usar dd:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512 status=progress

Sitios de Referencia

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