Sistema de archivos ROM (RFS)
Descripcion general
* , 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
+ 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
Sharp BASIC SA-5510
| 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
- 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
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)
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)
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
| 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
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)
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:
- Compila
cpmtoolsdesde el codigo fuente (solo en la primera ejecucion) y agrega el resultado alPATH. tools/assemble_rfs.sh— ensamblarfs.asmyrfs_mrom.asmenroms/rfs.romyroms/rfs_mrom.rom.tools/assemble_cpm.sh— ensambla el CBIOS CP/M 2.2 (cbios.asm,cbios_bank1–4.asm,cpm22.asm) enroms/*.rom.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.) enroms/yMZB/.tools/make_roms.sh— empaqueta las ROM ensambladas y aplicaciones MZF en imagenes Flash ROM (vease Archivos de salida mas abajo).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.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.asm → roms/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
Estructura SDCFS
| 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
| 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
Licencias
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 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/.