Sistema de archivos ROM (RFS)

Descripcion general

El Rom Filing System (RFS) es un paquete de firmware escrito en lenguaje ensamblador Z80 que proporciona un monitor interactivo con sistema de archivos en almacenamiento masivo, inicio de aplicaciones, utilidades de memoria y herramientas de depuracion para el Sharp MZ-80A y hardware compatible.
RFS reemplaza la ROM Monitor y la ROM de Usuario de la maquina anfitriona mediante adaptadores de socket conectados a la tarjeta de expansion. Se presenta al usuario como una version mejorada del programa monitor SA-1510 original con el familiar indicador * , todos los comandos originales intactos y un conjunto completo de nuevos comandos para gestion de archivos en tarjeta SD y ROM, inicio de CP/M, carga de BASIC y mucho mas.
El firmware soporta cuatro plataformas de hardware, cada una seleccionada en tiempo de compilacion mediante un indicador en rfs_definitions.asm:
  • Tarjeta RomDisk — el objetivo original. Hasta 4×512 KB de Flash RAM, 512 KB de RAM estatica y un lector de tarjetas SDXC. La ROM Monitor y la ROM de Usuario se conmutan por bancos a traves de la Flash RAM.
  • SFD-700 — la tarjeta de interfaz de disquete Sharp. RFS ocupa el espacio CPLD/ROM del SFD-700 y proporciona monitor, carga de BASIC e inicio desde disquete.
  • tranZPUter FusionX — la tarjeta de mejora Z80 basada en FPGA. RFS se ejecuta en su espacio Flash ROM.
  • picoZ80 — la tarjeta de reemplazo/emulador Z80 basada en Raspberry Pi Pico. En el picoZ80, RFS se ejecuta bajo la persona de maquina presentada al anfitrion — ademas del MZ-80A esto ahora incluye el 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).

Monitor RFS

Al arrancar aparece el familiar banner de inicio SA-1510, complementado con "+ RFS" cuando el sistema de archivos se ha inicializado correctamente. El conjunto completo de comandos SA-1510 original esta totalmente disponible junto con un conjunto de comandos extendidos. Algunos comandos extendidos (operaciones con tarjeta SD, seleccion de unidad) solo estan presentes en la compilacion RomDisk / picoZ80. Un ensamblador y desensamblador Z80 integrados estan disponibles en todas las compilaciones.
El conjunto completo de comandos se enumera a continuacion. Los comandos marcados con (R) solo estan presentes en la compilacion RomDisk / picoZ80.
Comando Parametros Descripcion
0 .. 9 (R) Seleccionar la unidad de tarjeta SD RFS activa (0–9).
40 (R) Cambiar al modo de visualizacion de 40 columnas (requiere la actualizacion Kuma 40/80 o el Video Module).
80 (R) Cambiar al modo de visualizacion de 80 columnas (requiere la actualizacion Kuma 40/80 o el Video Module).
ASM <address> Ensamblador Z80 interactivo. Introducir mnemonicos de ensamblador directamente en memoria a partir de la direccion indicada.
B Activar/desactivar el sonido del teclado.
BASIC Buscar BASIC SA-5510 en la unidad SD activa o ROM, cargarlo y ejecutarlo.
C [<valor 8 bits>] Inicializar memoria desde 0x1200 hasta el tope de RAM con 0x00 o el valor de byte proporcionado.
CP <src> <dst> <size> Copiar un bloque de memoria. Los tres argumentos son valores hexadecimales de 4 digitos: direccion origen, direccion destino, cantidad de bytes.
CPM Buscar CP/M 2.2 en la unidad SD activa o ROM, cargarlo e iniciarlo.
D <addr> [<addr2>] Volcado de memoria desde <addr> hasta <addr2> (o 20 lineas) en hexadecimal y ASCII. La salida se pausa en cada pantalla llena; presionar una tecla para continuar, ‘U’ para pagina anterior, ‘X’ para salir. Repetir ‘D’ sin direccion continua desde la ultima posicion mostrada.
DASM <addr> [<addr2>] Desensamblar codigo maquina Z80 desde <addr> hasta <addr2>.
DUC (R) [H|T] <name> o <n° archivo> Mostrar el contenido de un archivo de la tarjeta SD. Predeterminado: volcado hexadecimal. DUCH: volcado hexadecimal con informacion de cabecera MZF (direccion de carga, direccion de ejecucion, tamano). DUCT: volcado de texto (solo caracteres ASCII imprimibles).
EC (R) <name> o <n° archivo> Borrar un archivo de la unidad de tarjeta SD activa por nombre o numero de archivo.
F / FL [<drive>] Arrancar desde la unidad de disquete especificada. Si se omite, se solicita un numero de unidad.
FD [<drive>] Mostrar el listado del directorio de un disquete. El numero de unidad opcional selecciona la unidad 1–4 (predeterminado: 1).
FC <start> <end> <exec> Guardar un rango de memoria en un archivo de disquete.
FD2T <name> o <n° archivo> Copiar un archivo del disquete a la cinta.
T2FD Cargar desde cinta y guardar en disquete.
f Ejecutar el codigo de arranque AFI de disquete original en 0xF000.
H Mostrar la pantalla de ayuda de comandos (paginada, presionar Espacio para continuar).
IC (R) Listado paginado de archivos en la unidad de tarjeta SD activa. Cada entrada muestra un numero de archivo hexadecimal y el nombre del archivo.
IN <port>[,<port>…] Leer uno o mas puertos de E/S. Cada puerto es una direccion hexadecimal de 2 o 4 digitos. Los valores se imprimen como hexadecimal de 2 digitos, separados por espacios.
IR Listado paginado de programas almacenados en las unidades Flash ROM.
J <address> Saltar a (ejecutar desde) la direccion indicada.
L | LT [<filename>] Cargar un archivo desde la cinta (CMT) y ejecutarlo.
LTNX [<filename>] Cargar un archivo desde la cinta (CMT) sin ejecutarlo.
LR <name> o <n° archivo> Cargar un programa desde ROM por nombre o numero de archivo y ejecutarlo.
LRNX <name> o <n° archivo> Cargar un programa desde ROM por nombre o numero de archivo sin ejecutarlo.
LC (R) <name> o <n° archivo> Cargar un programa desde la tarjeta SD y ejecutarlo.
LCNX (R) <name> o <n° archivo> Cargar un programa desde la tarjeta SD sin ejecutarlo.
M <address> Editor de memoria interactivo a partir de <address>.
OUT <port>:<value>[,<port>:<value>…] Escribir en uno o mas puertos de E/S. Cada puerto es una direccion hexadecimal de 2 o 4 digitos seguida de dos puntos y un valor hexadecimal de 2 digitos.
P Ejecutar una prueba en la impresora conectada.
R Ejecutar una prueba de memoria DRAM.
S | ST <start> <end> <exec> Guardar un rango de memoria en cinta (CMT). Se solicita un nombre de archivo. Ejemplo: S120020001203 guarda desde 0x1200 hasta 0x2000 con direccion de ejecucion 0x1203.
SC (R) <start> <end> <exec> Guardar un rango de memoria en la unidad de tarjeta SD activa. Se solicita un nombre de archivo.
SD2T (R) <name> o <n° archivo> Copiar un archivo de la tarjeta SD a la cinta en el CMT.
T Probar el chip temporizador 8253.
T2SD (R) Cargar un programa desde la cinta y escribirlo en la unidad de tarjeta SD activa.
V Verificar una grabacion en cinta comparandola con los datos actualmente en memoria.
X (R) Cambiar a la variante ROM hi-load para que la DRAM cubra 0x0000–0xCFFF.

Si la actualizacion Kuma 40/80 columnas o el Video Module esta instalado, escribir 4 cambia a la visualizacion de 40 columnas y 8 cambia a la visualizacion de 80 columnas. En modo de 80 columnas, los comandos de listado de directorio (IC / IR) muestran cuatro columnas.


Aplicaciones mejoradas

La serie Sharp MZ es conocida como "maquinas limpias" — casi ningun software reside permanentemente en la ROM; todo se carga desde cinta o disquete. Las aplicaciones que existian no tenian conocimiento del almacenamiento mejorado que proporciona RFS, aparte de poder ser cargadas rapidamente desde el monitor RFS.
Para hacer las maquinas mas utiles, las aplicaciones clave han sido actualizadas para usar RFS de forma nativa y el interprete Microsoft BASIC ha sido portado a la plataforma. CP/M 2.2 tambien ha sido implementado mediante un CBIOS personalizado que utiliza las funcionalidades de RFS. El CBIOS ahora tambien detecta y lee automaticamente los discos CP/M originales (sin convertir) del MZ-80K a traves de la tarjeta de disquete MZ80AFI, montandolos directamente como las unidades CP/M C: y D: — vease la guia CP/M para RFS para mas detalles.

Sharp BASIC SA-5510

El BASIC Sharp SA-5510 original ha sido desensamblado y extendido con comandos LOAD, SAVE y DIR compatibles con RFS. La disposicion de bytes del interprete se preserva para que los programas que dependen de direcciones fijas conocidas sigan funcionando. Las extensiones se aplican fuera de la imagen principal del interprete.
La version extendida lleva el nombre SA-5510RFS en la unidad ROM y la unidad SD. Al iniciar, utiliza la unidad SD activa (unidades 0–9) para todas las operaciones de archivos. La sintaxis estandar de LOAD y SAVE no cambia; el prefijo calificador de unidad es la unica adicion.
Comando Parametro Descripcion
LOAD "TEST" Buscar un programa llamado TEST en la unidad activa, cargarlo y ejecutarlo.
LOAD   Cargar el siguiente archivo secuencial de la unidad activa. Si el archivo 5 fue el ultimo cargado, esto carga el archivo 6.
LOAD "3:TEST" Cargar TEST desde la unidad RFS 3, haciendo la unidad 3 activa.
LOAD "C:TEST" Cargar TEST desde la casete interna (CMT), haciendo CMT la unidad activa.
SAVE "TEST" Sobrescribir un archivo existente llamado TEST en la unidad activa, o crearlo si no existe. En CMT, escribe inmediatamente en la posicion actual de la cinta.
SAVE   Guardar el programa actual con un nombre generado automaticamente DEFAULT<n>, donde <n> es el numero de secuencia actual.
SAVE "3:TEST" Guardar/crear TEST en la unidad RFS 3 y hacer la unidad 3 activa.
SAVE "C:TEST" Guardar en CMT con el nombre TEST y hacer CMT activo.
DIR   Listar el directorio de la tarjeta SD para la unidad activa en formato RFS (numero de archivo + nombre de archivo).
DIR "3:" Listar el directorio de la unidad 3 y hacer la unidad 3 activa.

Vease Organizacion de la tarjeta SD mas abajo para la disposicion predeterminada de las unidades.

Microsoft BASIC

Mientras que la mayoria de los interpretes BASIC del MZ-80A solo estan disponibles como binarios, Microsoft BASIC (NASCOM 4.7b) tiene codigo fuente libremente disponible y una gran biblioteca de programas existentes. RFS incluye una version portada y extendida que soporta almacenamiento RFS nativo en tres configuraciones que corresponden al hardware objetivo:
  • MS-BASIC(MZ-80A) — para hardware MZ-80A original, solo almacenamiento en casete.
  • MS-BASIC(RFS40) — RFS con pantalla de 40 columnas; agrega tarjeta SD, CLOAD, CSAVE, DIR.
  • MS-BASIC(RFS80) — RFS con pantalla de 80 columnas; agrega tarjeta SD, CLOAD, CSAVE, DIR.

Cada variante aparece en la unidad ROM y la unidad SD de RFS. Consulte el NASCOM Basic Manual para el conjunto completo de comandos estandar. La tabla siguiente enumera las extensiones agregadas para RFS.

Comando Parametros Version Descripcion
CLOAD "<filename>" MZ-80A Cargar un programa BASIC tokenizado desde casete.
CSAVE "<filename>" MZ-80A Guardar el programa BASIC actual en casete en formato tokenizado.
CLOAD "[<drive>:]<filename>" RFS40, RFS80 Cargar desde cinta o tarjeta SD. <drive> es 0–9; <filename> es un nombre MZ de 17 caracteres o un numero hexadecimal RFS de 2 digitos. Ejemplo: CLOAD "8:13" o CLOAD "8:othello".
CSAVE "[<drive>:]<filename>" RFS40, RFS80 Guardar en cinta o tarjeta SD con calificador de unidad opcional.
DIR "[<drive>:]" RFS40, RFS80 Mostrar el contenido de la unidad RFS activa o especificada.
ANSITERM 0 = Desactivado, 1 = Activado Todas Activar o desactivar (activado por defecto) el procesador de terminal ANSI integrado. Este traduce secuencias de escape ANSI en acciones de pantalla, permitiendo que programas BASIC portables se ejecuten sin modificaciones. (El programa BASIC Star Trek V2 usa secuencias de escape ANSI.)
Convertidor de imagen de casete NASCOM
Los programas NASCOM BASIC se distribuyen comunmente como archivos de imagen de casete que contienen datos de enmarcado de cinta envolviendo BASIC tokenizado. La herramienta nasconv incluida elimina el enmarcado de cinta y reconstruye el codigo BASIC en un formato cargable en el MZ-80A bajo RFS. Tambien reasigna automaticamente los valores de tokens, ya que la extension MS-BASIC de RFS agrega nuevos tokens que desplazan la tabla.
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)

El BASIC Sharp MZ-5Z008 Quick Disk original ha sido mejorado para soportar almacenamiento en tarjeta SD RFS y acceso a archivos de red ademas de sus dispositivos nativos Disquete, Quick Disk y Casete. La version RFS arranca con el titulo "BASIC 5Z-008BRFS". Este BASIC tambien se ejecuta en el MZ-1500 a traves de la persona picoZ80 MZ-1500, proporcionando el mismo soporte de dispositivos incluyendo acceso de red NETx:. Los programas pueden ser cargados, guardados y listados en todos los dispositivos soportados usando un prefijo de dispositivo en el nombre del archivo.
Comando Parametro Descripcion
LOAD "RFSx:filename" Cargar un programa BASIC desde la unidad de tarjeta SD RFS x (1–7, mapeada a las unidades SD 4–10).
SAVE "RFSx:filename" Guardar el programa BASIC actual en la unidad de tarjeta SD RFS especificada.
DIR RFSx: Mostrar el listado del directorio de la unidad de tarjeta SD RFS especificada.
LOAD "FDx:filename" Cargar un programa BASIC desde la unidad de disquete x.
SAVE "FDx:filename" Guardar el programa BASIC actual en la unidad de disquete x.
DIR FDx: Mostrar el listado del directorio del disquete.
LOAD "QDx:filename" Cargar un programa BASIC desde la unidad Quick Disk x.
SAVE "QDx:filename" Guardar el programa BASIC actual en la unidad Quick Disk x.
DIR QDx: Mostrar el listado del directorio del Quick Disk.
LOAD "NETx:filename" Cargar un programa BASIC desde el servidor de archivos de red unidad x (1–7). Requiere una tarjeta Celestite y netfs.py en un PC.
SAVE "NETx:filename" Guardar el programa BASIC actual en el servidor de archivos de red unidad x.
DIR NETx: Mostrar el listado del directorio del servidor de archivos de red unidad x.
LOAD "CMT:filename" Cargar un programa BASIC desde la cinta de casete.
SAVE "CMT:filename" Guardar el programa BASIC actual en la cinta de casete.

BASIC MZ-2Z009E (Floppy Disk)

El BASIC Sharp MZ-2Z009E Floppy Disk original ha sido mejorado para soportar almacenamiento en tarjeta SD RFS ademas de sus dispositivos nativos Disquete y Quick Disk. La version RFS arranca con el titulo "BASIC 2Z-009ERFS". Los programas pueden ser cargados, guardados y listados en todos los dispositivos soportados usando un prefijo de dispositivo en el nombre del archivo.
Comando Parametro Descripcion
LOAD "RFSx:filename" Cargar un programa BASIC desde la unidad de tarjeta SD RFS x (1–7, mapeada a las unidades SD 4–10).
SAVE "RFSx:filename" Guardar el programa BASIC actual en la unidad de tarjeta SD RFS especificada.
DIR RFSx: Mostrar el listado del directorio de la unidad de tarjeta SD RFS especificada.
LOAD "FDx:filename" Cargar un programa BASIC desde la unidad de disquete x.
SAVE "FDx:filename" Guardar el programa BASIC actual en la unidad de disquete x.
DIR FDx: Mostrar el listado del directorio del disquete.
LOAD "QDx:filename" Cargar un programa BASIC desde la unidad Quick Disk x.
SAVE "QDx:filename" Guardar el programa BASIC actual en la unidad Quick Disk x.
DIR QDx: Mostrar el listado del directorio del Quick Disk.

Arquitectura de software

El espacio User ROM en 0xE800 esta dividido en bancos de 2 KB, cada uno conteniendo una copia del stub de conmutacion de bancos para que cualquier banco pueda llamar codigo en cualquier otro banco sin perturbar el flujo de ejecucion. RFS ocupa 12 bancos User ROM (0–11, 24 KB); otros 4 bancos (12–15) contienen el CBIOS CP/M. El espacio Monitor ROM en 0xC000 / 0xF000 esta dividido en 16 × 4 KB paginas; tres de ellas (bancos 6, 7 y 9) estan dedicadas a RFS, conteniendo las tablas de opcodes del ensamblador/desensamblador Z80 y las cadenas de mensajes. En conjunto, la ROM con bancos proporciona 32 KB de User ROM y 64 KB de Monitor ROM de espacio de programa sin consumir RAM.
La siguiente tabla enumera cada modulo fuente, su ROM objetivo, banco y funcion:
Modulo ROM objetivo Tamano Banco Descripcion
rfs.asm User 2 KB 0 Punto de entrada principal de RFS, despachador de comandos y tabla de comandos. Contiene la infraestructura de conmutacion de bancos compartida por todos los bancos.
rfs_bank1.asm User 2 KB 1 Funciones del controlador de disquete (FDC). Gestiona seleccion de unidad, arranque, copia de disquete (FC), disquete-a-cinta (FD2T) y cinta-a-disquete (T2FD).
rfs_bank2.asm User 2 KB 2 Controlador de tarjeta SD. Controlador SPI, inicializacion de tarjeta SD, directorio SDCFS y lectura/escritura de archivos.
rfs_bank3.asm User 2 KB 3 Utilidades de memoria del monitor: volcado hexadecimal, editor de memoria, copia de memoria, volcado de archivo SD (DUC), lectura/escritura de puertos E/S (IN / OUT), copia cinta-SD (T2SD / SD2T), prueba de impresora.
rfs_bank4.asm User 2 KB 4 Controlador CMT (casete): carga, guardado y verificacion de cinta.
rfs_bank5.asm User 2 KB 5 Funciones de utilidad generales: impresion formateada, rutinas de cadenas y codigo auxiliar compartido.
rfs_bank6.asm User 2 KB 6 Tabla de opcodes 1 del ensamblador/desensamblador Z80, funcion PRINTMSG e infraestructura de cadenas de mensajes.
rfs_bank7.asm User 2 KB 7 Tabla de opcodes 2 del ensamblador/desensamblador Z80, desensamblador Z80 (DASM), prueba de memoria DRAM y prueba del temporizador 8253.
rfs_bank8.asm User 2 KB 8 Ensamblador Z80 interactivo (ASM).
rfs_bank9.asm User 2 KB 9 Directorio ROM, busqueda de archivos, funciones de carga e impresion (movidas del banco 0 para liberar espacio).
rfs_bank10.asm User 2 KB 10 Reservado / libre.
rfs_bank11.asm User 2 KB 11 Pantalla de ayuda.
cbios_bank1.asm User 2 KB 12 CP/M CBIOS: funciones de audio, RTC, teclado y utilidades de bajo nivel.
cbios_bank2.asm User 2 KB 13 CP/M CBIOS: controlador de pantalla y emulacion de terminal ANSI.
cbios_bank3.asm User 2 KB 14 CP/M CBIOS: controlador de tarjeta SD (proporciona las unidades CP/M A:–G:).
cbios_bank4.asm User 2 KB 15 CP/M CBIOS: controlador de disquete.
monitor_sa1510.asm Monitor 4 KB 0 ROM monitor SA-1510 original (40 columnas).
monitor_80c_sa1510.asm Monitor 4 KB 1 Monitor SA-1510 adaptado para pantalla de 80 columnas.
cbios.asm Monitor 4 KB 2 Kernel CBIOS CP/M 2.2 (cargado en 0xC000–0xCFFF).
rfs_mrom.asm Monitor 4 KB 3 Utilidades Monitor ROM de RFS. Dado que el codigo ejecutado desde la User ROM no puede conmutarse a si mismo para escanear el resto de la ROM, estas rutinas se ejecutan desde la Monitor ROM banco 3 para escanear y cargar los archivos MZF almacenados en la Flash RAM de la 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 MZ-1Z-013A adaptado para pantalla de 80 columnas.
rfs_mrom_bank6.asm Monitor 4 KB 6 Tabla de opcodes 1 del ensamblador/desensamblador Z80 (copia MROM).
rfs_mrom_bank7.asm Monitor 4 KB 7 Tabla de opcodes 2 del ensamblador/desensamblador Z80 (copia MROM).
ipl.asm Monitor 4 KB 8 Initial Program Loader.
rfs_mrom_bank9.asm Monitor 4 KB 9 Repositorio de cadenas de mensajes RFS.

CP/M 2.2 es soportado con 47 KB de RAM de programa utilizable. Solo el CCP y BDOS residen en RAM (y pueden ser sobrescritos por las aplicaciones); el CBIOS mismo reside en la Monitor ROM banco 2 y los bancos User ROM 12–15, sin consumir RAM de programa en absoluto.

La Monitor ROM tambien proporciona varias imagenes de monitor variantes compiladas al mismo tiempo: un SA-1510 estandar, un SA-1510 de 80 columnas, una version Kuma-80 (seleccionada mediante el indicador KUMA80_ENA en rfs_definitions.asm), y variantes hi-load de SA-1510 y SA-1510 de 80 columnas utilizadas cuando la DRAM necesita cubrir todo el rango 0x0000–0xCFFF.

Sistema de compilacion

RFS se compila en **Linux** (Debian / Ubuntu), **macOS** y **Windows** (mediante WSL2). La construccion de RFS implica ensamblar el codigo fuente Z80, empaquetar las imagenes ROM y crear imagenes de tarjeta SD. La cadena de herramientas esta casi completamente contenida en el repositorio.

La forma recomendada de compilar RFS es el script de configuracion automatizada para su plataforma (vease Configuracion y compilacion automatizada mas abajo) — instala las pocas herramientas externas necesarias, descarga el contenido, prepara el entorno y puede ejecutar la primera compilacion por usted, sin requerir conocimientos profundos de las herramientas ni de la configuracion. Los pasos manuales mas abajo son para usuarios avanzados y recompilaciones parciales.

Requisitos previos

Herramienta Notas
Java (JRE 8+) Requerido para ejecutar el ensamblador GLASS Z80. java debe estar en el PATH.
bash Todos los scripts de compilacion son en bash.
perl Requerido por mzftool.pl.
gcc / make Requerido para compilar cpmtools desde el codigo fuente (se hace automaticamente en la primera compilacion).
dd, cat, stat Utilidades Linux estandar utilizadas por los scripts de empaquetado.

El ensamblador GLASS Z80 (glass.jar) esta incluido en el directorio tools/ — no se necesita instalacion separada.

Configuracion y compilacion automatizada (recomendado)

La forma recomendada de compilar RFS es el script de configuracion automatizada para su plataforma. Comprueba e 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 un simbolo de PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows_native.ps1

El script nativo usa winget para instalar Git for Windows (que proporciona bash, coreutils, perl y curl) y un Temurin JRE (Java, para el ensamblador GLASS), clona el repo, obtiene el paquete de contenido y ejecuta ./build.sh a traves de Git Bash — sin necesidad de WSL, Docker ni reinicio. El build de RFS no necesita compilador C en Windows porque se incluyen dos herramientas de host precompiladas (tools/cpmcp.exe y tools/sdtool.exe).

Windows 10 / 11 — setup_RFS_windows.ps1 (alternativa — compila dentro de 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 (esto requiere un reinicio unico — reinicie, inicie Ubuntu una vez desde el Menu Inicio para crear su nombre de usuario/contrasena de Linux, y luego vuelva a ejecutar el script), y luego ejecuta setup_RFS.sh dentro de Ubuntu. Prefiera el script nativo de arriba a menos que quiera especificamente un entorno WSL.

Preguntas que hace la configuracion, y que hacer

Cada indicacion tiene un valor predeterminado seguro mostrado entre corchetes — la letra en mayuscula es el predeterminado, asi que pulsar Enter lo acepta. Las indicaciones aparecen en este orden:

Solo Windows (en PowerShell, antes de ejecutarse la configuracion de Linux):

Indicacion Predeterminado Que hacer
Continue anyway? [y/N] (solo si no se inicio como Administrador) No Responda N, vuelva a abrir PowerShell con Ejecutar como administrador y empiece de nuevo — instalar WSL requiere permisos de administrador.
Install WSL2 + Ubuntu now? [y/N] (solo si falta WSL / Ubuntu) No Responda y. Windows instala WSL2 + Ubuntu, y luego le pide reiniciar. Despues de reiniciar, inicie Ubuntu una vez para crear su usuario de Linux, y luego vuelva a ejecutar el script.
Repo URL [https://git.eaw.app/eaw/RFS.git] repo publico Pulse Enter para el repositorio publico de RFS, o pegue una URL diferente (p. ej. el repositorio de desarrollo privado).

macOS / Linux / WSL (en el shell de Linux / Ubuntu):

Indicacion Predeterminado Que hacer
Install now? [Y/n] (solo si faltan herramientas) Si Pulse Enter. El script instala las herramientas que faltan con su gestor de paquetes (apt / dnf / pacman, o Homebrew en macOS); puede que se le pida su contrasena de sudo. En macOS primero lanza el instalador de las Xcode Command Line Tools y requiere Homebrew.
Repo URL [https://git.eaw.app/eaw/RFS.git]: (solo cuando aun no se esta dentro de una copia) repo publico Pulse Enter para el repo publico, o pegue la URL del repo privado. (Se omite en Windows — el paso de PowerShell ya transmitio su eleccion.)
Install directory [~/RFS]: (solo al clonar) ~/RFS Pulse Enter para clonar en ~/RFS, o escriba otra ruta.
Remove <dir> and re-clone …? [y/N] (solo si ese directorio ya contiene un repositorio diferente) No Responda y solo si esta seguro de que desea borrar ese directorio y volver a clonar; de lo contrario N y elija un directorio de instalacion diferente.
Download and install them now? [Y/n] (imagenes de contenido, ~110 MB) Si Pulse Enter para descargar el contenido MZF / disco / CP/M / BASIC desde RFS_Files.zip — requerido para una compilacion completa. Responda n solo si ya lo tiene mediante una copia hermana de SharpSoft.
Run the first build now (./build.sh -m …)? [Y/n] Si Pulse Enter para compilar de inmediato — esto verifica todo el entorno. La primera compilacion usa -m para procesar los fuentes MZF en MZB/ y es mas lenta que las compilaciones posteriores.

Tambien se le puede pedir su contrasena de sudo (instalacion de paquetes) y sus credenciales de git si eligio un repositorio privado.

Despues de la configuracion — compilar de nuevo

Cuando la configuracion finaliza, imprime la ruta de la copia. Para recompilar mas tarde:

cd ~/RFS                 # o el directorio que eligio
source ./rfs_env.sh      # solo macOS (anade GNU coreutils + el JRE al PATH); inofensivo en otros sistemas
./build.sh -m            # PRIMERA compilacion: procesa MZF -> MZB, luego compila todo
./build.sh               # compilaciones posteriores (vuelva a ejecutar -m solo cuando cambien los fuentes MZF)
./build.sh -h            # lista variantes y opciones

En Windows, abra la terminal de Ubuntu (Menu Inicio → “Ubuntu”, o escriba wsl en PowerShell) y ejecute los mismos comandos dentro de ~/RFS. Las imagenes ROM aparecen en ~/RFS/roms.

build.sh compila todas las variantes de hardware de forma predeterminada; pase uno o mas nombres de variante (sfd700, romdisk_mz80a, picoz80_mz80a, picoz80_kuma, picoz80_mz700, picoz80_mz1500, picoz80_mz80k, o all) para compilar solo esas. Seleccionar una variante lo configura todo automaticamente — no se necesita editar el codigo fuente. Opciones: -m (procesar MZF), -s (omitir ensamblaje compartido), -c (limpiar), -v (detallado), -h (ayuda).

Avanzado: indicadores de objetivo de compilacion

Para la mayoria de las compilaciones no necesita esta seccion — seleccionar una variante con build.sh (arriba) lo configura todo automaticamente. El mecanismo subyacente es un conjunto de indicadores en asm/include/rfs_definitions.asm; exactamente uno de los siguientes se establece a 1 (todos los demas a 0) para un objetivo dado, lo cual build.sh hace por usted segun la variante. Editelos a mano solo para una configuracion personalizada:

Indicador Objetivo Descripcion
BUILD_ROMDISK Tarjeta RomDisk MZ-80A con 4×512 KB Flash RAM + expansion tarjeta SDXC.
BUILD_SFD700 SFD-700 Tarjeta de interfaz de disquete Sharp. Sin tarjeta SD.
BUILD_PICOZ80 picoZ80 Tarjeta de reemplazo Z80 basada en Raspberry Pi Pico.

Indicadores opcionales adicionales en el mismo archivo:

Indicador Predeterminado Descripcion
KUMA80_ENA 0 Establecer a 1 si la actualizacion Kuma 40/80 columnas esta instalada.
VIDEOMODULE_ENA 0 Establecer a 1 si el Video Module de color 40/80 columnas esta instalado.
FUSIONX_ENA 0 Establecer a 1 al ejecutar RFS en la tarjeta tranZPUter FusionX.
HW_SPI_ENA 1 SPI hardware (PCB RomDisk v2+). Dejar en 1 para todas las tarjetas actuales.
ENADEBUG 0 Habilitar registro de depuracion durante el ensamblaje.

Compilacion manual y que hace build.sh

Si prefiere no usar el script de configuracion (o esta automatizando una compilacion CI), puede clonar y compilar directamente — aun debe tener los requisitos previos instalados 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

# Compilacion completa (ensambla todas las ROM, empaqueta imagenes ROM, crea imagen de tarjeta SD):
./build.sh

# Compilacion completa incluyendo reprocesamiento de todos los archivos de aplicacion MZF
# (solo necesario cuando los archivos fuente MZF en MZF/ han cambiado):
./build.sh -m

build.sh ejecuta los siguientes pasos en orden:

  1. Compila cpmtools desde el codigo fuente (solo en la primera ejecucion) y agrega el resultado al PATH.
  2. tools/assemble_rfs.sh — ensambla rfs.asm y rfs_mrom.asm en roms/rfs.rom y roms/rfs_mrom.rom.
  3. tools/assemble_cpm.sh — ensambla el CBIOS CP/M 2.2 (cbios.asm, cbios_bank1–4.asm, cpm22.asm) en roms/*.rom.
  4. tools/assemble_roms.sh — ensambla todas las variantes del monitor (SA-1510, 80c SA-1510, 1Z-013A, variantes hi-load, version Kuma, IPL) y los archivos de aplicacion MZF (SA-5510, variantes MS-BASIC, etc.) en roms/ y MZB/.
  5. tools/make_roms.sh — empaqueta las ROM ensambladas y aplicaciones MZF en imagenes Flash ROM (vease Archivos de salida mas abajo).
  6. tools/make_cpmdisks.sh — crea imagenes de disco CP/M en formato RAW y CPC Extended Disk Format para cada uno de los conjuntos de unidades CP/M pre-poblados.
  7. tools/make_sdcard.sh — ensambla la imagen final de tarjeta SD combinando 10 imagenes de unidad RFS y 7 imagenes de disco CP/M.

Los scripts individuales tambien pueden ejecutarse directamente desde el directorio tools/ para compilaciones parciales.

Archivos de salida

Despues de una compilacion exitosa, el directorio roms/ contiene:

Archivo Chip Flash Descripcion
MROM_ROMDISK_256.bin SST39SF040 (Monitor ROM) Imagen Monitor ROM para la compilacion RomDisk. Contiene SA-1510, 80c SA-1510, CBIOS CP/M, utilidades mrom de RFS, monitores 1Z-013A, tablas de opcodes del ensamblador/desensamblador, IPL y cadenas de mensajes en 16×4 KB paginas.
MROM_PICOZ80_256.bin SST39SF040 (Monitor ROM) Imagen Monitor ROM para la compilacion picoZ80 (orden de bancos diferente de ROMDISK).
USER_ROM_256.bin SST39SF040 (User ROM 1) User ROM 1: bancos RFS 0–11, bancos CP/M CBIOS 12–15, imagen CP/M 2.2 y un conjunto empaquetado de aplicaciones MZF.
USER_ROM_II_256.bin SST39SF040 (User ROM 2) User ROM 2: aplicaciones MZF adicionales.
USER_ROM_III_256.bin SST39SF040 (User ROM 3) User ROM 3: aplicaciones MZF adicionales.
SFD700_256.bin SST39SF040 ROM SFD-700: ROM disquete AFI MZ-80A (0x00000–0x00FFF), ROM disquete MZ-700 (0x01000–0x01FFF), firmware RFS (0x02000–0x0BFFF), luego sistema de archivos ROM.
SHARP_MZ80A_RFS_IMAGE_0–9.img Tarjeta SD Diez imagenes de unidad RFS (una por unidad 0–9).
SHARP_MZ80A_RFS_CPM_IMAGE_1.img Tarjeta SD Imagen combinada de tarjeta SD: 10 unidades RFS seguidas de 7 imagenes de disco CP/M. Copiar directamente en una tarjeta SD.

Programacion de las Flash ROM

Las imagenes ROM se escriben en chips Flash RAM SST39SF040 (512 KB) usando un programador TL866 o compatible:

# Monitor ROM (compilacion 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

Escritura de la imagen de tarjeta SD

Escriba la imagen combinada de tarjeta SD directamente en la tarjeta SD con dd:

# Reemplace /dev/sdX con su dispositivo de tarjeta SD:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512
sync

No se requiere particionamiento. La imagen SDCFS comienza en el sector 0. Inserte la tarjeta SD en el lector de la tarjeta RomDisk.

Agregar aplicaciones a las unidades ROM

Las aplicaciones almacenadas en las unidades Flash ROM deben primero convertirse del formato MZF a imagenes binarias alineadas por sector. Coloque los archivos MZF en el subdirectorio apropiado bajo MZF/ y ejecute:

tools/processMZFfiles.sh

Esto convierte todos los archivos MZF en imagenes alineadas por sector de 128 bytes y 256 bytes almacenadas en MZB/. Luego son recogidas automaticamente por make_roms.sh.

Para elegir que aplicaciones aparecen en cada unidad ROM, edite tools/make_roms.sh y ajuste las llamadas addMZFToROMImageList. Cada llamada toma cuatro indicadores (incluir en compilacion ROMDISK, incluir en compilacion SFD700, incluir en compilacion picoZ80, reservado) y la ruta al binario alineado por sector:

# Format:
#   addMZFToROMImageList  <ROMDISK>  <SFD700>  <picoZ80>  <reserved>  "<MZB path>"
#
# Example — include in all builds:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"

# Example — RomDisk and picoZ80 only:
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 3. Coloque las aplicaciones que siempre quiera tener disponibles al principio de la lista.

Referencia de herramientas de compilacion

Script / Herramienta Descripcion
build.sh Script de compilacion de nivel superior. Ejecuta todos los pasos siguientes en orden. Pase -m para tambien reprocesar archivos de aplicacion MZF.
tools/assemble_rfs.sh Ensambla rfs.asm y rfs_mrom.asmroms/rfs.rom, roms/rfs_mrom.rom.
tools/assemble_cpm.sh Ensambla el CBIOS y kernel CP/M 2.2 → roms/*.rom.
tools/assemble_roms.sh Ensambla todas las variantes ROM del monitor y binarios de aplicacion MZF. Gestiona las cuatro variantes de compilacion MS-BASIC mediante un EQU BUILD_VERSION escrito en include/msbasic_buildversion.asm antes de cada pasada.
tools/make_roms.sh Empaqueta binarios ROM y MZF en imagenes Flash ROM para los objetivos ROMDISK, SFD700 y picoZ80.
tools/make_cpmdisks.sh Crea imagenes de disco CP/M en formato RAW (para tarjeta SD) y CPC Extended Disk Format (para emuladores de disquete o copiado fisico).
tools/make_sdcard.sh Combina imagenes de unidad RFS e imagenes de disco CP/M en una sola imagen de tarjeta SD.
tools/processMZFfiles.sh Convierte archivos de aplicacion MZF en imagenes alineadas por sector de 128 bytes y 256 bytes en MZB/.
tools/mzftool.pl Script Perl para crear, extraer e inspeccionar imagenes en formato MZF.
tools/sdtool Herramienta binaria que construye la estructura de directorio de la tarjeta SD RFS y la llena con aplicaciones MZF / binarias.
tools/nasconv Convierte archivos de imagen de casete NASCOM al formato cargable en MZ-80A, reasignando valores de tokens MS-BASIC segun sea necesario.
tools/glass.jar Ensamblador GLASS Z80 incluido (Java). Usado por los tres scripts de ensamblaje.
tools/MZFD/MZFDTool Crea y gestiona imagenes de disquete raw para el FDC MZ-700. Comandos: format (crear imagen en blanco), dir (listar directorio), add (agregar archivo MZF), extract (extraer archivo a MZF), boot (establecer programa de arranque). Imagen predeterminada: MZ700.img.
tools/MZQD/MZQDTool Crea y gestiona imagenes Quick Disk (QD) para el MZ-700. Comandos: format (crear imagen en blanco), dir (listar directorio), add (agregar archivo MZF). Imagen predeterminada: MZ700.qd.
cpmtools/ Fuente cpmtools (cpmcp, cpmls, cpmrm, etc.). Compilado automaticamente en la primera compilacion e instalado en tools/.

SD Card Filing System

En lugar de implementar un sistema de archivos FAT (que seria demasiado grande para los bancos ROM de 2 KB y 4 KB), RFS utiliza un sistema de archivos simple disenado especificamente llamado SD Card Filing System (SDCFS). Las primeras tarjetas v1 usaban una interfaz SPI por software bit-bang; la PCB v2.0 agrego SPI por hardware, proporcionando velocidades de acceso a nivel ROM.

Estructura SDCFS

Cada imagen SDCFS contiene un directorio de 32 bytes por entrada para hasta 256 archivos, seguido de 256 bloques de archivo de tamano fijo. Diez imagenes SDCFS (unidades 0–9) se almacenan al inicio de la tarjeta SD. El resto de la tarjeta SD contiene las imagenes de disco CP/M.
Cada entrada de directorio esta basada en la cabecera MZF estandar:
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 Descripcion
FLAG1 Bit 7 = 1: entrada valida. Bit 7 = 0: inactiva / eliminada.
FLAG2 Tipo de ejecucion MZF (0x01 = binario).
FILE NAME Nombre de archivo MZF estandar de 17 caracteres.
START SECTOR Primer sector dentro de esta imagen de unidad donde comienzan los datos del archivo.
SIZE Conteo real de bytes de los datos del archivo.
LOAD ADDR Direccion RAM donde cargar los datos del archivo.
EXEC ADDR Direccion de ejecucion automatica para archivos binarios.
RESERVED No utilizado actualmente.

Cada bloque de archivo tiene un tamano fijo de 64 KB, correspondiente al tamano maximo del bloque CMT (cinta). Esto mantiene el diseno simple y permite leer o escribir archivos exactamente como si estuvieran en cinta, habilitando operaciones de copia SD-CMT transparentes.

Disposicion de la tarjeta 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  └─────────────────────────────────────────────────────────────┘
                  ...  (las unidades RFS 1–8 siguen el mismo patron)
09012000   48090  ┌─────────────────────────────────────────────────────────────┐
                  │  RFS DRIVE 9                                                │
0A013FFF   5009F  └─────────────────────────────────────────────────────────────┘
                  ... relleno hasta el limite de 256 MB ...
10000000   80000  ┌─────────────────────────────────────────────────────────────┐
                  │  CP/M DISK IMAGE 0   (16 MB, 32 sectors × 1024 tracks)     │
11000000   88000  ├─────────────────────────────────────────────────────────────┤
                  │  CP/M DISK IMAGE 1                                          │
                  │  ...                                                        │
XX000000          │  CP/M DISK IMAGE n                                          │
                  └─────────────────────────────────────────────────────────────┘

Organizacion de la tarjeta SD

La imagen de tarjeta SD construida por las herramientas del repositorio esta pre-poblada de la siguiente manera:

Unidad RFS Contenido
0 Programas en codigo maquina comunes y MZ-80A.
1 Programas en codigo maquina MZ-80K.
2 Programas en codigo maquina MZ-700.
3 Programas en codigo maquina MZ-800 / MZ-1500.
4 Programas en codigo maquina MZ-80B / MZ-2000.
5 Programas BASIC, tipo 2 (MZ-80A).
6 Programas BASIC, tipo 2 (MZ-80K).
7 Programas BASIC, tipo 5 (MZ-700 / MZ-800).
8 Otros programas / varios.
9 Otros programas / varios.
Unidad CP/M User# Imagen de disco Contenido
0 0 CPM00_SYSTEM Programas de 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 Utilidades de disco
  11 CPM11_MAC80 Macro Assembler 80
  12 CPM29_ZSID_v14 ZSID Debugger
  13–14 CPM32–33_ZCPR3 Mejora 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 Coleccion Grant Searle CP/M discos C0–F9

Manuales

La documentacion detallada del Rom Filing System esta disponible en tres manuales separados:
Manual Descripcion
Manual del usuario Obtener RFS, referencia de comandos del monitor, uso de las unidades SD, BASIC, CP/M y solucion de problemas
Guia tecnica Plataformas de hardware, arquitectura de memoria, conmutacion de bancos, diseno SDCFS, CBIOS CP/M y referencia completa del sistema de compilacion
Guia del desarrollador Introduccion al ensamblador Z80, recorridos completos de los modulos fuente (incluyendo los mecanismos internos de conmutacion de bancos), y guias para agregar nuevos comandos y objetivos de hardware

Agradecimientos

Cuando un componente esta basado en o derivado de un diseno de terceros, el aviso de copyright del autor original esta incluido en la cabecera del archivo fuente correspondiente. Todo el software de terceros es, hasta donde se sabe, de codigo abierto y de uso libre. Si se encuentra que algun componente tiene restricciones de licencia, sera eliminado y en su lugar se proporcionara un enlace apropiado.

Licencias

Este diseno, hardware y software, esta licenciado bajo la GNU Public Licence v3.

No se permite ningun uso comercial de este diseno o de cualquier componente de hardware/firmware sin el permiso expreso del autor. Esta condicion prevalece sobre cualquier derecho otorgado por la licencia GNU GPL 3.

La Licencia Publica General GNU v3

Los archivos fuente y binarios en este proyecto marcados como GPL v3 son software libre: puede redistribuirlos y/o modificarlos bajo los terminos de la Licencia Publica General GNU tal como fue publicada por la Free Software Foundation, ya sea la version 3 de la Licencia, o (a su eleccion) cualquier version posterior.

Los archivos fuente se distribuyen con la esperanza de que sean utiles, pero SIN NINGUNA GARANTIA; sin siquiera la garantia implicita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPOSITO PARTICULAR. Vea la Licencia Publica General GNU para mas detalles.

Deberia haber recibido una copia de la Licencia Publica General GNU junto con este programa. Si no es asi, vea http://www.gnu.org/licenses/.