Sistema de archivos ROM (RFS) — Guia tecnica
Guia tecnica RFS
Esta guia documenta la integracion de hardware del Rom Filing System, la arquitectura de memoria, la disposicion de los modulos de software, el diseno del SD Card Filing System, la implementacion de CP/M y el sistema de compilacion completo. Esta destinada a usuarios que desean comprender como funciona RFS a nivel de sistema, portar RFS a nuevo hardware o realizar una compilacion completa desde el codigo fuente.
Para el uso diario y la referencia de comandos del monitor, vease el
Manual del usuario. Para los recorridos del codigo fuente en ensamblador Z80, vease la
Guia del desarrollador.
RFS soporta cuatro plataformas de hardware. Cada una se selecciona en tiempo de compilacion mediante un indicador en asm/include/rfs_definitions.asm. Las imagenes binarias resultantes difieren en la disposicion de bancos, el conjunto de caracteristicas y las direcciones ROM utilizadas.
Tarjeta RomDisk
El objetivo RFS original y mas capaz. El PCB RomDisk se conecta al slot de expansion del Sharp MZ-80A y proporciona:
- Hasta 4 x 512 KB SST39SF040 Flash RAM — reemplaza la ROM del Monitor y proporciona tres chips de User ROM, ofreciendo hasta 2 MB de almacenamiento ROM basado en Flash.
- 512 KB de RAM estatica — disponible como espacio de trabajo paginado adicional (uso futuro).
- Lector de tarjetas SDXC con interfaz SPI hardware (tarjetas v2+) o SPI por bit-bang software (tarjetas v1, usando el puerto paralelo de impresora).
- Un latch codificado (tarjetas v2.0+) que protege los registros de control de bancos — el latch solo se abre tras una secuencia fija de lecturas a los 8 bytes superiores del rango de direcciones de la User ROM (0xEFF8–0xEFFF), evitando conmutaciones de banco accidentales durante el funcionamiento normal.
El chip de ROM del Monitor (en 0x0000–0x0FFF en el MZ-80A) se reemplaza por un socket Flash RAM paginado adaptado para aparecer como una ventana de 4 KB hacia el chip completo de 512 KB. De forma similar, la User ROM (en 0xE800–0xEFFF) se reemplaza por una ventana paginada de 2 KB.
Interfaz de disquete SFD-700
La tarjeta de interfaz de disquete SFD-700 mkII incluye una Flash ROM de 512 KB. RFS ocupa paginas de esta Flash ROM junto al codigo de arranque AFI de disquete:
- 0x00000–0x00FFF — ROM de arranque de disquete AFI del MZ-80A (original, necesaria para el truco de DRQ a 2 MHz).
- 0x01000–0x01FFF — ROM de arranque de disquete AFI del MZ-700.
- 0x02000–0x0BFFF — firmware RFS (10 x 2 KB de bancos de User ROM, equivalente a los bancos de User ROM 0–4).
- 0x0C000 en adelante — sistema de archivos ROM (programas almacenados como imagenes MZF).
En la compilacion SFD-700, el codigo de la User ROM se ensambla para comenzar en 0xE000 y se alinea a 0xE300 (respetando el rango de I/O mapeado en memoria del MZ-700). No hay tarjeta SD; los comandos de tarjeta SD se excluyen de esta compilacion.
picoZ80
La tarjeta picoZ80 (reemplazo Z80 basado en RP2350) emula el mapa de memoria completo del MZ-80A en PSRAM y Flash. RFS se ejecuta dentro del espacio ROM emulado, usando las mismas direcciones de banco que la compilacion RomDisk. La picoZ80 proporciona su propio almacenamiento de tarjeta SD conectado por SPI, de modo que el conjunto completo de caracteristicas de RomDisk (unidades de tarjeta SD, copia cinta-a-SD, etc.) esta disponible.
RFS se ejecuta bajo cualquiera de las personalidades de maquina que la picoZ80 presenta al anfitrion. Ademas del MZ-80A, esto ahora incluye la personalidad Sharp MZ-80K, que puede usar las mismas tarjetas de interfaz Sharp que el MZ-80A (RFS, MZ80AFI, MZ-1E14/E19, MZ-1R12/R18/R37, PIO-3034) asi como su propio controlador de disquete nativo MZ-80FD (T3444M). Con una tarjeta MZ80AFI, el CBIOS CP/M de RFS detecta automaticamente los discos CP/M originales del MZ-80K (sectores de 128 bytes, no invertidos) y los monta como unidades CP/M C:/D:.
Arquitectura de memoria
La CPU Z80 del Sharp MZ-80A direcciona 64 KB de memoria. RFS encaja todo su firmware en las dos ventanas ROM sin consumir nada de RAM, dejando libre el rango completo 0x1200–0xCFFF para programas de usuario.
Disposicion del espacio de direcciones Z80
Address Size Contents
─────────────────────────────────────────────────────────────────────
0x0000 4 KB Monitor ROM (MROM) — 4 KB window into 512 KB Flash
Paged across 16 banks:
banks 0–5 = monitor variants + CP/M CBIOS + RFS mrom utils,
banks 6–7 = ASM/DASM opcode tables,
bank 8 = IPL, bank 9 = RFS message strings,
banks 10–15 = reserved
0x1000 256 B MZ-80A system variables / stack
0x1200 ~46 KB User RAM (main program area)
0xCFFF
0xD000 12 KB Video RAM + memory-mapped I/O (MZ-80A hardware)
0xE800 2 KB User ROM (UROM) — 2 KB window into 512 KB Flash
Paged: banks 0–11 = RFS modules,
banks 12–15 = CP/M CBIOS banks
Note: on the SFD-700 build the UROM window starts at
0xE300 (0xE000–0xE2FF is MZ-700 memory-mapped I/O).
The command table (CMDTABLE2) is placed at 0xE300 and
the main bank code remains at 0xE800 as on other builds.
0xEFFF
0xF000 4 KB Floppy AFI ROM / FDC ROM (SFD-700 MROM location)
─────────────────────────────────────────────────────────────────────
Bancos Monitor ROM (4 KB cada uno)
La ventana de la Monitor ROM en 0x0000–0x0FFF se conmuta entre 16 paginas almacenadas en el chip Flash de la Monitor ROM. De estas, tres paginas (bancos 6, 7 y 9) estan dedicadas a RFS — conteniendo respectivamente las tablas de opcodes del ensamblador/desensamblador Z80 y las cadenas de mensajes:
| Banco |
Modulo |
Descripcion |
| 0 |
monitor_sa1510.asm |
ROM monitor SA-1510 original — 40 columnas. El banco predeterminado al encender. |
| 1 |
monitor_80c_sa1510.asm |
SA-1510 adaptado para pantalla de 80 columnas (requiere la mejora Kuma). |
| 2 |
cbios.asm |
Kernel CBIOS CP/M 2.2 — reubicado aqui durante el arranque de CP/M. |
| 3 |
rfs_mrom.asm |
Utilidades Monitor ROM RFS. Se ejecuta desde el espacio MROM para escanear y cargar archivos MZF almacenados en la Flash de la User ROM, ya que el codigo de la User ROM no puede paginarse a si mismo fuera. |
| 4 |
monitor_1z-013a.asm |
Monitor MZ-1Z-013A (variante MZ-700 / MZ-1200). |
| 5 |
monitor_80c_1z-013a.asm |
Monitor 1Z-013A adaptado para pantalla de 80 columnas. |
| 6 |
rfs_mrom_bank6.asm |
Tabla de opcodes 1 del ensamblador/desensamblador Z80. |
| 7 |
rfs_mrom_bank7.asm |
Tabla de opcodes 2 del ensamblador/desensamblador Z80. |
| 8 |
ipl.asm |
Initial Program Loader. |
| 9 |
rfs_mrom_bank9.asm |
Repositorio de cadenas de mensajes RFS. |
| 10–15 |
— |
Reservado / libre. |
Bancos User ROM (2 KB cada uno)
La ventana de la User ROM en 0xE800–0xEFFF se conmuta entre 16 bancos en los chips Flash de la User ROM — 12 bancos para RFS (bancos 0–11) y 4 bancos para el CBIOS CP/M (bancos 12–15):
| Banco |
Modulo |
Descripcion |
| 0 |
rfs.asm |
Punto de entrada principal RFS, despachador de comandos, tabla de comandos, infraestructura de conmutacion de bancos compartida por todos los bancos. |
| 1 |
rfs_bank1.asm |
Funciones del controlador de disquete (FDC) — arranque de disquete (FL), directorio de disquete (FD), copia de disquete (FC), disquete-a-cinta (FD2T), cinta-a-disquete (T2FD) y seleccion de unidad. El conjunto completo de comandos FDC se ensambla en todas las compilaciones. |
| 2 |
rfs_bank2.asm |
Controlador de tarjeta SD — driver SPI, inicializacion de tarjeta SD, directorio SDCFS y lectura/escritura de archivos. No se ensambla en la compilacion SFD-700 (sin hardware de tarjeta SD). |
| 3 |
rfs_bank3.asm |
Utilidades de memoria del monitor — volcado hexadecimal (D), edicion de memoria (M), copia de memoria (CP), volcado de archivo de tarjeta SD (DUC), lectura/escritura de puerto I/O (IN / OUT). La copia cinta-a-SD (T2SD/SD2T) se incluye solo en las compilaciones RomDisk / picoZ80. |
| 4 |
rfs_bank4.asm |
Controlador CMT (cassette) — carga, guardado y verificacion de cinta. |
| 5 |
rfs_bank5.asm |
Funciones de utilidad general — impresion formateada, rutinas de cadenas, codigo auxiliar compartido. |
| 6 |
rfs_bank6.asm |
Tabla de opcodes 1 del ensamblador/desensamblador Z80, funcion PRINTMSG e infraestructura de cadenas de mensajes. |
| 7 |
rfs_bank7.asm |
Tabla de opcodes 2 del ensamblador/desensamblador Z80, desensamblador Z80 (DASM), prueba de memoria DRAM, prueba del timer 8253. |
| 8 |
rfs_bank8.asm |
Ensamblador Z80 interactivo (ASM). |
| 9 |
rfs_bank9.asm |
Directorio ROM, busqueda de archivos, funciones de carga e impresion (movidas del banco 0 para liberar espacio). |
| 10 |
rfs_bank10.asm |
Reservado / libre. |
| 11 |
rfs_bank11.asm |
Pantalla de ayuda. |
| 12 |
cbios_bank1.asm |
CBIOS CP/M — funciones de audio, RTC, teclado y utilidades de bajo nivel. |
| 13 |
cbios_bank2.asm |
CBIOS CP/M — driver de pantalla y emulacion de terminal ANSI. |
| 14 |
cbios_bank3.asm |
CBIOS CP/M — driver de tarjeta SD (proporciona las unidades CP/M A:–G:). |
| 15 |
cbios_bank4.asm |
CBIOS CP/M — controlador de disquete. Detecta automaticamente el tamano de sector mediante la tarjeta MZ80AFI (256 bytes del MZ-80A frente a 128 bytes del MZ-80K) y puede leer discos CP/M originales del MZ-80K directamente, asignandolos a las unidades CP/M C:/D:. |
Mecanismo de conmutacion de bancos
Como el Z80 solo puede ver una porcion de 2 KB de la User ROM a la vez, cada banco contiene una copia del
stub de conmutacion de bancos — un pequeno bloque fijo de codigo en una direccion conocida dentro de la ventana de 2 KB. Cuando el banco 0 necesita llamar a una rutina del banco 3:
- Escribe el numero del banco de destino en el registro de latch de bancos del hardware.
- Salta al punto de entrada conocido en el banco recien mapeado.
- Ejecuta la rutina requerida.
- Escribe el banco 0 de vuelta en el latch y retorna.
Este mecanismo significa que los 12 bancos RFS (12 x 2 KB = 24 KB) mas los 4 bancos CBIOS (4 x 2 KB = 8 KB) — 32 KB en total — son accesibles desde cualquier contexto de ejecucion, aunque solo 2 KB sean visibles a la vez. El stub de conmutacion de bancos ocupa los primeros 32 bytes de cada banco (0xE800–0xE81F), y la tabla de conmutacion de bancos comienza en 0xE800 + 0xB0. Es critico que ninguna instruccion de bucle abarque jamas el rango 0xEFF8–0xEFFF en las tarjetas RomDisk v2+, ya que esas direcciones disparan la secuencia de desbloqueo del latch codificado.
Arquitectura de software
La tabla completa de modulos — cada archivo fuente, su ROM de destino, banco y funcion:
| Modulo |
ROM |
Banco |
Tamano |
Descripcion |
| rfs.asm |
User |
0 |
2 KB |
Despachador de comandos, tabla de comandos, infraestructura de conmutacion de bancos. |
| rfs_bank1.asm |
User |
1 |
2 KB |
Controlador de disquete — seleccion de unidad, arranque FDC, copia de disquete (FC), disquete-a-cinta (FD2T), cinta-a-disquete (T2FD) (RomDisk/picoZ80); solo salto AFI FDCK (SFD-700). |
| rfs_bank2.asm |
User |
2 |
2 KB |
Controlador de tarjeta SD — SPI, directorio SDCFS, lectura/escritura de archivos. No se ensambla en la compilacion SFD-700. |
| rfs_bank3.asm |
User |
3 |
2 KB |
Utilidades de memoria — D, M, CP, DUC, IN, OUT (todas las compilaciones); T2SD, SD2T (solo RomDisk / picoZ80). |
| rfs_bank4.asm |
User |
4 |
2 KB |
Controlador CMT — carga, guardado, verificacion de cinta. |
| rfs_bank5.asm |
User |
5 |
2 KB |
Utilidades generales — rutinas de impresion, auxiliares de cadenas. |
| rfs_bank6.asm |
User |
6 |
2 KB |
Tabla de opcodes 1 del ensamblador/desensamblador Z80, funcion PRINTMSG, infraestructura de cadenas de mensajes. |
| rfs_bank7.asm |
User |
7 |
2 KB |
Tabla de opcodes 2 del ensamblador/desensamblador Z80, DASM, prueba DRAM, prueba del timer. |
| rfs_bank8.asm |
User |
8 |
2 KB |
Ensamblador Z80 interactivo (ASM). |
| rfs_bank9.asm |
User |
9 |
2 KB |
Directorio ROM, busqueda de archivos, funciones de carga e impresion (movidas del banco 0). |
| rfs_bank10.asm |
User |
10 |
2 KB |
Reservado / libre. |
| rfs_bank11.asm |
User |
11 |
2 KB |
Pantalla de ayuda. |
| cbios_bank1.asm |
User |
12 |
2 KB |
CBIOS CP/M — audio, RTC, teclado, utilidades de bajo nivel. |
| cbios_bank2.asm |
User |
13 |
2 KB |
CBIOS CP/M — driver de pantalla, emulador de terminal ANSI. |
| cbios_bank3.asm |
User |
14 |
2 KB |
CBIOS CP/M — driver de tarjeta SD (unidades CP/M A:–G:). |
| cbios_bank4.asm |
User |
15 |
2 KB |
CBIOS CP/M — controlador de disquete. |
| monitor_sa1510.asm |
Monitor |
0 |
4 KB |
ROM monitor SA-1510 original (40 columnas). |
| monitor_80c_sa1510.asm |
Monitor |
1 |
4 KB |
SA-1510 adaptado para pantalla de 80 columnas. |
| cbios.asm |
Monitor |
2 |
4 KB |
Kernel CBIOS CP/M 2.2 (reubicado a 0xC000 durante el arranque de CP/M). |
| rfs_mrom.asm |
Monitor |
3 |
4 KB |
Utilidades Monitor ROM RFS — escaneo de ROM, carga de MZF. |
| monitor_1z-013a.asm |
Monitor |
4 |
4 KB |
Monitor MZ-1Z-013A (variante MZ-700 / MZ-1200). |
| monitor_80c_1z-013a.asm |
Monitor |
5 |
4 KB |
1Z-013A adaptado para pantalla de 80 columnas. |
| rfs_mrom_bank6.asm |
Monitor |
6 |
4 KB |
Tabla de opcodes 1 del ensamblador/desensamblador Z80. |
| rfs_mrom_bank7.asm |
Monitor |
7 |
4 KB |
Tabla de opcodes 2 del ensamblador/desensamblador Z80. |
| ipl.asm |
Monitor |
8 |
4 KB |
Initial Program Loader. |
| rfs_mrom_bank9.asm |
Monitor |
9 |
4 KB |
Repositorio de cadenas de mensajes RFS. |
CP/M 2.2 ofrece 47 KB de RAM de programa utilizable. El CCP y el BDOS residen en RAM y pueden ser sobrescritos por aplicaciones grandes (se recargan en el arranque en caliente). El CBIOS reside enteramente en el banco 2 de la Monitor ROM y en los bancos 12–15 de la User ROM, sin consumir RAM de programa.
La Monitor ROM tambien produce varias imagenes variantes adicionales en tiempo de compilacion: variantes de carga alta (hi-load) de SA-1510 y de 80c SA-1510 (usadas cuando la DRAM debe abarcar 0x0000–0xCFFF), y variantes Kuma-80 (seleccionadas mediante el indicador
KUMA80_ENA).
SD Card Filing System (SDCFS)
En lugar de implementar FAT (que seria demasiado grande para los bancos ROM de 2 KB disponibles), RFS utiliza un sistema de archivos disenado especificamente llamado SD Card Filing System (SDCFS). El diseno prioriza la simplicidad y una huella ROM reducida sobre la flexibilidad.
Estructura del directorio
Cada imagen de unidad SDCFS contiene un directorio plano de hasta 256 entradas. Cada entrada tiene exactamente 32 bytes, basada en el formato estandar de cabecera de cinta MZF:
| Campo |
Bytes |
Descripcion |
| FLAG1 |
1 |
Bit 7 = 1: entrada valida. Bit 7 = 0: inactiva / eliminada. |
| FLAG2 |
1 |
Tipo de ejecucion MZF (0x01 = programa binario). |
| FILE NAME |
17 |
Nombre de archivo MZF estandar de 17 caracteres (codificacion de caracteres Sharp). |
| START SECTOR |
4 |
Primer sector dentro de esta imagen de unidad donde comienza el bloque de datos del archivo. |
| SIZE |
2 |
Conteo real de bytes de los datos del archivo. |
| LOAD ADDR |
2 |
Direccion RAM Z80 donde cargar los datos del archivo. |
| EXEC ADDR |
2 |
Direccion de ejecucion automatica para archivos binarios (se salta a ella tras la carga). |
| RESERVED |
3 |
No utilizado actualmente. |
El directorio ocupa los primeros 8 KB de cada imagen de unidad (256 entradas x 32 bytes). Los datos de archivo siguen inmediatamente, comenzando en el limite de 32 bytes numero 256. A cada archivo se le asigna un bloque fijo de 64 KB — coincidiendo con el tamano maximo de bloque de cinta CMT — lo que mantiene la disposicion trivialmente simple y hace que la copia SD-a-cinta sea una transferencia byte a byte directa.
Disposicion de la tarjeta SD
ADDRESS CONTENT
────────────────────────────────────────────────────────────
0x00000000 RFS DRIVE 0
0x00000000–0x00001FE0 Directory (256 × 32 B)
0x00002000–0xFF2000 File blocks (256 × 64 KB)
0x01002000 RFS DRIVE 1 (same structure)
...
0x09012000 RFS DRIVE 9 (same structure)
0x0A014000 (padding to 256 MB boundary)
────────────────────────────────────────────────────────────
0x10000000 CP/M DISK IMAGE 0 (16 MB — 32 sectors × 1024 tracks)
0x11000000 CP/M DISK IMAGE 1
...
0xXX000000 CP/M DISK IMAGE 6
────────────────────────────────────────────────────────────
No se escribe tabla de particiones. La imagen SDCFS comienza en el byte 0 de la tarjeta SD. Las imagenes de disco CP/M comienzan en el limite de 256 MB para dejar espacio a las 10 unidades RFS independientemente de lo llenas que esten.
Implementacion CP/M 2.2
Proceso de arranque
El arranque de CP/M en RFS ocurre en dos fases:
- Fase 1 — arranque AFI: el codigo ROM AFI (Auto Floppy Interface) original del MZ-80A en 0xF000 lee el primer sector del disquete o el bloque de arranque de la tarjeta SD. Comprueba los bytes marcadores
0x02 + "IPLPRO" en el byte 0 (la firma de disco arrancable CP/M del MZ-80A). Si los encuentra, pasa el control al cargador de segunda etapa encapsulado en ese sector.
- Fase 2 — carga de CCP+BDOS+CBIOS: el cargador de segunda etapa lee el CCP, el BDOS y el CBIOS desde el disco a la RAM comenzando en 0x9C00. Una vez cargados, se llama al punto de entrada de arranque en frio del CBIOS. El CBIOS configura el hardware (teclado, pantalla, unidades de disco) y pasa el control al CCP en 0x9C00.
Arquitectura del CBIOS
El BIOS personalizado (CBIOS) se divide en cinco modulos ROM para caber en el espacio de banco disponible:
| Modulo |
Ubicacion ROM |
Contenido |
cbios.asm |
MROM banco 2 (0xC000–0xCFFF) |
Puntos de entrada del CBIOS (los 17 vectores API), arranque en frio/en caliente, manejador de interrupciones, controlador de disco ROM, tablas de parametros de disco. |
cbios_bank1.asm |
UROM banco 12 |
Audio (campana, melodia), rutinas de reloj en tiempo real, manejador de teclado con auto-repeticion. |
cbios_bank2.asm |
UROM banco 13 |
Driver de pantalla (salida de caracteres, scroll, cursor), emulador de terminal ANSI (subconjunto VT52/VT100). |
cbios_bank3.asm |
UROM banco 14 |
Driver de disco de tarjeta SD — lee y escribe sectores CP/M de 128 bytes desde las imagenes de unidad SDCFS que comienzan en el limite de 256 MB. |
cbios_bank4.asm |
UROM banco 15 |
Controlador de disquete — soporte estandar de unidades de 8 pulgadas/5,25 pulgadas para discos CP/M fisicos. |
API del CBIOS
El CBIOS CP/M implementa los 17 puntos de entrada API estandar de CP/M 2.2:
| Punto de entrada |
Descripcion |
| BOOT |
Arranque en frio — inicializa todo el hardware, configura las tablas de parametros de disco, llama al CCP. |
| WBOOT |
Arranque en caliente — restaura el estado del hardware, recarga CCP+BDOS desde el disco, llama al CCP. |
| CONST |
Estado de consola — devuelve 0xFF si hay una tecla esperando, 0x00 si no. |
| CONIN |
Entrada de consola — espera una pulsacion de tecla y devuelve el codigo ASCII. |
| CONOUT |
Salida de consola — escribe un caracter en la pantalla. |
| LIST |
Salida de impresora — envia un caracter a la impresora conectada. |
| PUNCH |
Salida de perforadora/cinta — envia al dispositivo perforador de cinta. |
| READER |
Entrada de lector — lee desde el dispositivo lector de cinta. |
| HOME |
Busca la pista 0 en el disco seleccionado actualmente. |
| SELDSK |
Selecciona una unidad de disco (A:–G:) y devuelve la direccion del Disk Parameter Header. |
| SETTRK |
Establece la pista de disco para la siguiente operacion de lectura o escritura. |
| SETSEC |
Establece el sector de disco para la siguiente operacion de lectura o escritura. |
| SETDMA |
Establece la Disk Memory Address — donde se leeran o desde donde se escribiran los datos. |
| READ |
Lee un sector de 128 bytes del disco seleccionado al buffer DMA. |
| WRITE |
Escribe un sector de 128 bytes del buffer DMA al disco seleccionado. |
| LISTST |
Estado de impresora — devuelve el estado de disponibilidad del dispositivo de lista. |
| SECTRN |
Traduccion de sector — mapea numeros logicos de sector a posiciones fisicas usando la tabla de skew del disco. |
Configuracion de unidades CP/M
Las unidades CP/M se crean dinamicamente durante el arranque en frio por el CBIOS, dependiendo de que controladores de disco esten disponibles. El mapeo de unidades estandar en un sistema RomDisk / picoZ80 totalmente equipado es:
| Unidad CP/M |
Controlador |
Imagen |
| A: |
Tarjeta SD |
CPM_SYSTEM — programas del OS, Turbo Pascal, Hi-Soft C, Fortran 80, MS-BASIC 80 |
| B: |
Tarjeta SD |
Pascal MTP v5.61, Turbo Pascal v3.00a, Pascal User Group disks |
| C: |
Tarjeta SD |
PLI, PLM 80, WordStar v3.0/v3.3/v4.0 |
| D:–G: |
Tarjeta SD |
Discos de la coleccion Grant Searle CP/M C0–F9 |
Sistema de compilacion
RFS se compila en **Linux** (Debian/Ubuntu), **macOS** y **Windows** (mediante WSL2). El sistema de compilacion esta casi completamente contenido en el repositorio. La forma recomendada de compilar es el
script de configuracion automatizada para su plataforma (vease
Configuracion y compilacion automatizada mas abajo); los indicadores y pasos manuales que siguen son para usuarios avanzados y recompilaciones parciales.
Requisitos previos
| Herramienta |
Proposito |
| Java JRE 8+ |
Ejecuta el ensamblador Z80 GLASS (tools/glass.jar). java debe estar en el PATH. |
| bash |
Todos los scripts de compilacion son scripts de shell bash. |
| perl |
Requerido por tools/mzftool.pl para la manipulacion de archivos MZF. |
| gcc / make |
Compila cpmtools desde el codigo fuente en la primera compilacion (automatico). |
| dd, cat, stat |
Utilidades estandar de Linux usadas por los scripts de empaquetado. |
El ensamblador Z80 GLASS viene incluido en tools/glass.jar — no se requiere instalacion por separado.
Configuracion y compilacion automatizada (recomendado)
El script de configuracion automatizada para su plataforma instala los requisitos previos, clona el repositorio (si aun no se encuentra dentro de una copia), descarga las imagenes de contenido, escribe el archivo de entorno y ofrece ejecutar la primera compilacion — todo de forma interactiva, con valores predeterminados sensatos que puede aceptar pulsando Enter. Cada script es autocontenido: copie solo el unico archivo para su plataforma y ejecutelo.
macOS / Linux / WSL — setup_RFS.sh
chmod +x setup_RFS.sh
./setup_RFS.sh
Windows 10 / 11 — setup_RFS_windows_native.ps1 (recomendado — nativo, sin WSL). Desde PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows_native.ps1
El script nativo usa winget para instalar Git for Windows (bash, coreutils, perl, curl) y un Temurin JRE (para el ensamblador GLASS), clona el repo, obtiene el paquete de contenido y ejecuta ./build.sh a traves de Git Bash — sin WSL, Docker ni reinicio. Se incluyen dos herramientas de host precompiladas (tools/cpmcp.exe, tools/sdtool.exe), por lo que no se necesita compilador C en Windows.
Windows 10 / 11 — setup_RFS_windows.ps1 (alternativa — WSL2 / Ubuntu). Desde una PowerShell de Administrador:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows.ps1
Esta variante WSL instala WSL2 + Ubuntu si aun no estan presentes (se requiere un reinicio unico — reinicie, inicie Ubuntu una vez para crear su usuario de Linux, y luego vuelva a ejecutar), despues ejecuta setup_RFS.sh dentro de Ubuntu. Prefiera el script nativo a menos que quiera especificamente un entorno WSL.
Preguntas que hace la configuracion, y que hacer. Cada indicacion tiene un valor predeterminado seguro entre corchetes — la letra en mayuscula es el predeterminado, asi que pulsar Enter lo acepta.
Solo Windows (PowerShell, antes de ejecutarse la configuracion de Linux):
| Indicacion |
Predeterminado |
Que hacer |
Continue anyway? [y/N] (si no se inicio como Administrador) |
No |
N, luego vuelva a abrir PowerShell como Administrador — instalar WSL requiere permisos de administrador. |
Install WSL2 + Ubuntu now? [y/N] (si falta WSL/Ubuntu) |
No |
y — Windows instala WSL2 + Ubuntu, y luego le pide reiniciar; despues inicie Ubuntu una vez para crear su usuario y vuelva a ejecutar. |
Repo URL [https://git.eaw.app/eaw/RFS.git] |
repo publico |
Enter para el repo publico, o pegue una URL diferente (p. ej. el repo de desarrollo privado). |
macOS / Linux / WSL (shell de Linux/Ubuntu):
| Indicacion |
Predeterminado |
Que hacer |
Install now? [Y/n] (si faltan herramientas) |
Si |
Enter — instala las herramientas que faltan mediante apt/dnf/pacman o Homebrew (macOS); puede pedir sudo. macOS tambien lanza las Xcode CLT y necesita Homebrew. |
Repo URL [https://git.eaw.app/eaw/RFS.git]: (si aun no se esta en una copia) |
repo publico |
Enter para publico, o pegue la URL del repo privado. (Se omite en Windows — ya elegido.) |
Install directory [~/RFS]: (al clonar) |
~/RFS |
Enter para ~/RFS, o escriba una ruta. |
Remove <dir> and re-clone …? [y/N] (si ese dir contiene un repo diferente) |
No |
y solo si esta seguro; de lo contrario N y elija otro directorio. |
Download and install them now? [Y/n] (~110 MB de contenido) |
Si |
Enter para descargar el contenido MZF/disco/CP/M/BASIC (necesario para una compilacion completa); n solo si una copia hermana de SharpSoft ya lo proporciona. |
Run the first build now (./build.sh -m …)? [Y/n] |
Si |
Enter para compilar de inmediato (verifica el entorno). La primera compilacion usa -m para procesar MZF → MZB/. |
Tambien se le puede pedir su contrasena de sudo y sus credenciales de git (repo privado).
Tras la configuracion, recompile con ./build.sh -m (primera compilacion) y luego ./build.sh; en macOS ejecute antes source ./rfs_env.sh. build.sh compila todas las variantes de forma predeterminada; pase un nombre de variante (sfd700, romdisk_mz80a, picoz80_mz80a, picoz80_kuma, picoz80_mz700, picoz80_mz1500, picoz80_mz80k) para compilar una sola — seleccionar una variante configura los indicadores de compilacion automaticamente. Opciones: -m (procesar MZF), -s (omitir ensamblaje compartido), -c (limpiar), -v (detallado), -h (ayuda).
Avanzado: indicadores de compilacion (manual)
Para la mayoria de las compilaciones no necesita esto — build.sh <variant> los establece automaticamente. Para configurar un objetivo a mano, edite asm/include/rfs_definitions.asm y ponga exactamente un indicador de destino a 1 (todos los demas deben ser 0):
| Indicador |
Destino |
BUILD_ROMDISK EQU 1 |
Tarjeta RomDisk |
BUILD_SFD700 EQU 1 |
Interfaz de disquete SFD-700 |
BUILD_PICOZ80 EQU 1 |
Tarjeta picoZ80 |
Indicadores opcionales de caracteristicas adicionales:
| Indicador |
Predeterminado |
Descripcion |
KUMA80_ENA |
0 |
Ponga a 1 si esta instalada la mejora de 40/80 columnas Kuma. |
VIDEOMODULE_ENA |
0 |
Ponga a 1 si esta instalado el Modulo de Video a color de 40/80. |
FUSIONX_ENA |
0 |
Ponga a 1 cuando se ejecute en la tarjeta tranZPUter FusionX. |
HW_SPI_ENA |
1 |
SPI hardware (PCB RomDisk v2+). Dejelo en 1 para todas las tarjetas actuales. |
SW_SPI_ENA |
0 |
SPI por bit-bang software (RomDisk v1 mediante puerto paralelo). |
ENADEBUG |
0 |
Habilita la salida de depuracion en tiempo de ensamblado. |
Pasos de compilacion manual y que hace build.sh
Si prefiere no usar el script de configuracion (o esta automatizando una compilacion CI), clone y compile directamente. Debe tener ya instalados los requisitos previos y, en una copia independiente nueva, descargar usted mismo las imagenes de contenido (o ejecutar setup_RFS.sh, que lo hace por usted).
git clone --recurse-submodules https://git.eaw.app/eaw/RFS.git
cd RFS
# Full build — assembles all ROMs, packages images, builds SD card image:
./build.sh
# Full build including reprocessing all MZF application files
# (only needed when files in MZF/ have changed):
./build.sh -m
build.sh ejecuta los siguientes pasos en orden:
- Compila
cpmtools desde el codigo fuente (solo en la primera ejecucion) y lo agrega al PATH.
tools/assemble_rfs.sh — ensambla rfs.asm y rfs_mrom.asm en roms/rfs.rom y roms/rfs_mrom.rom.
tools/assemble_cpm.sh — ensambla el CBIOS y el CCP+BDOS de CP/M 2.2 en roms/*.rom.
tools/assemble_roms.sh — ensambla todas las variantes del monitor y las aplicaciones MZF. Maneja las cuatro variantes de compilacion de MS-BASIC escribiendo un BUILD_VERSION EQU en include/msbasic_buildversion.asm antes de cada pasada.
tools/make_roms.sh — empaqueta los binarios ROM y MZF en imagenes Flash ROM para cada destino.
tools/make_cpmdisks.sh — construye imagenes de disco CP/M en formato RAW (para tarjeta SD) y en CPC Extended Disk Format (para emuladores de disquete).
tools/make_sdcard.sh — combina 10 imagenes de unidad RFS y 7 imagenes de disco CP/M en la imagen final de la tarjeta SD.
Archivos de salida
Tras una compilacion exitosa, el directorio roms/ contiene:
| Archivo |
Chip Flash |
Descripcion |
MROM_ROMDISK_256.bin |
Flash Monitor ROM |
Monitor ROM para RomDisk: SA-1510, 80c SA-1510, CBIOS CP/M, utilidades mrom RFS, monitores 1Z-013A, tablas de opcodes ASM/DASM, IPL y cadenas de mensajes a lo largo de 16x4 KB de paginas. |
MROM_PICOZ80_256.bin |
Flash Monitor ROM |
Monitor ROM para picoZ80 (el orden de bancos difiere del de RomDisk). |
USER_ROM_256.bin |
Flash User ROM 1 |
Bancos RFS 0–11, bancos CBIOS CP/M 12–15, imagen CP/M 2.2, aplicaciones MZF empaquetadas. |
USER_ROM_II_256.bin |
Flash User ROM 2 |
Aplicaciones MZF adicionales. |
USER_ROM_III_256.bin |
Flash User ROM 3 |
Aplicaciones MZF adicionales. |
SFD700_256.bin |
Flash SFD-700 |
ROMs AFI + firmware RFS + sistema de archivos ROM. |
SHARP_MZ80A_RFS_IMAGE_0–9.img |
Tarjeta SD |
Imagenes de unidad RFS individuales (una por unidad 0–9). |
SHARP_MZ80A_RFS_CPM_IMAGE_1.img |
Tarjeta SD |
Imagen combinada: 10 unidades RFS + 7 imagenes de disco CP/M. Escriba esta en la tarjeta SD. |
Agregar aplicaciones a las unidades ROM
Los archivos de aplicacion en formato MZF deben convertirse a imagenes binarias con relleno de sector antes de su inclusion en las unidades ROM. Coloque los archivos MZF en el subdirectorio apropiado bajo MZF/ y luego ejecute:
tools/processMZFfiles.sh
Esto produce imagenes con relleno de sector de 128 bytes y 256 bytes en MZB/. Para elegir que aplicaciones aparecen en cada unidad ROM, edite tools/make_roms.sh y ajuste las llamadas a addMZFToROMImageList:
# Format: addMZFToROMImageList <ROMDISK> <SFD700> <picoZ80> <reserved> "<path>"
#
# Include in all builds:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"
#
# RomDisk and picoZ80 only (no SFD700 — needs SD card):
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"
Las aplicaciones se empaquetan en el orden listado, llenando primero la User ROM 1, luego la User ROM 2 y la 3. Coloque las aplicaciones de uso mas frecuente al principio de la lista.
Referencia de herramientas de compilacion
| Herramienta |
Descripcion |
build.sh |
Script de compilacion de nivel superior. Pase -m para reprocesar tambien los archivos MZF. |
tools/assemble_rfs.sh |
Ensambla los modulos centrales de RFS. |
tools/assemble_cpm.sh |
Ensambla el CBIOS y el kernel de CP/M 2.2. |
tools/assemble_roms.sh |
Ensambla las variantes del monitor y los binarios de aplicacion MZF. |
tools/make_roms.sh |
Empaqueta los binarios en imagenes Flash ROM. |
tools/make_cpmdisks.sh |
Crea las imagenes de disco CP/M. |
tools/make_sdcard.sh |
Combina las imagenes en la imagen final de la tarjeta SD. |
tools/processMZFfiles.sh |
Convierte los archivos MZF a binarios con relleno de sector en MZB/. |
tools/mzftool.pl |
Crea, extrae e inspecciona imagenes en formato MZF. |
tools/sdtool |
Construye el directorio de la tarjeta SD RFS y lo rellena con archivos. |
tools/nasconv |
Convierte imagenes de cassette NASCOM a formato cargable del MZ-80A, remapeando los tokens de MS-BASIC. |
tools/glass.jar |
Ensamblador Z80 GLASS incluido (Java). Usado por todos los scripts de ensamblado. |
tools/MZFD/MZFDTool |
Crea y gestiona imagenes de disquete raw para el FDC del MZ-700. Comandos: format, dir, add, extract, boot. Imagen predeterminada: MZ700.img. |
tools/MZQD/MZQDTool |
Crea y gestiona imagenes QD para el sistema Quick Disk del MZ-700. Comandos: format, dir, add. Imagen predeterminada: MZ700.qd. |
cpmtools/ |
Codigo fuente de cpmcp, cpmls, cpmrm, etc. Compilado en la primera compilacion. |
Enlaces de referencia