tranZPUter FusionX Guia del Desarrollador
Descripcion general
El stack de software del tranZPUter FusionX esta organizado en tres capas distintas que juntas forman un sistema completo de emulacion Z80 y hardware virtual. Cada capa tiene una responsabilidad claramente definida, y agregar soporte para una nueva maquina host — o extender una existente — requiere cambios coordinados en las tres capas.
- Modulos del kernel Linux (
z80drv.ko,ttymzdrv.ko) — escritos en C, compilados contra el arbol del kernel Linux 4.9-rt de SigmaStar.z80drvejecuta el bucle de despacho de emulacion Z80 en un nucleo de CPU aislado y se comunica con el CPLD a traves de SPI y GPIO.ttymzdrvproporciona una interfaz TTY al teclado y pantalla de caracteres del Sharp MZ. - Utilidades de espacio de usuario (
z80ctrl,k64fcpu,sharpbiter) — escritas en C, compiladas cruzadas conarm-linux-gnueabihf-gcc. - RTL CPLD (VHDL) — compilado con Altera Quartus II 13.0.1 SP1 Web Edition. El CPLD se encuentra directamente en el bus Z80 de la maquina host y actua como interfaz de hardware entre las senales fisicas del bus Z80 y el SOM SigmaStar.
Agregar soporte para una nueva maquina requiere cambios en las tres capas: una nueva definicion de mapa de memoria y modulo de hardware virtual en el controlador del kernel, una nueva variante VHDL CPLD compilada para el pinout del bus y la temporizacion de la maquina objetivo, y un script de inicio que los conecta.
Arbol de fuentes
FusionX/
├── CPLD/
│ └── v1.0/
│ ├── MZ80A/build/ Quartus II project for Sharp MZ-80A
│ ├── MZ700/build/ Quartus II project for Sharp MZ-700
│ ├── MZ2000/build/ Quartus II project for Sharp MZ-2000
│ ├── PCW8256/build/ Quartus II project for Amstrad PCW-8256
│ ├── tzpuFusionX.vhd Main RTL (FSMs, SPI, bus interface, video/audio)
│ ├── tzpuFusionX_Toplevel.vhd Top-level entity and I/O pin assignments
│ └── tzpuFusionX_pkg.vhd Shared package (types, constants, generics)
└── software/
├── linux/
│ └── Build_FusionX.sh Master build script (U-boot + kernel + rootfs + apps)
└── FusionX/
└── src/
├── z80drv/
│ ├── src.mz80a/ Makefile and symlinks for MZ-80A build variant
│ ├── src.mz700/ MZ-700 build variant
│ ├── src.mz2000/ MZ-2000 build variant
│ ├── src.pcw/ PCW-8256 build variant
│ └── src/ Common source files
├── ttymz/
│ └── ttymzdrv.c MZ keyboard/display TTY driver
└── utils/
├── z80ctrl.c z80drv control utility
├── k64fcpu.c K64F virtual CPU daemon
└── sharpbiter.c Keyboard/display arbiter daemon
Configuracion del entorno de desarrollo
El entorno de compilacion del FusionX requiere tres cadenas de herramientas separadas: un compilador cruzado ARM, el SDK de SigmaStar y Altera Quartus II para la sintesis del CPLD.
Configuracion y compilacion automatizadas (recomendado)
Todo lo que los pasos manuales de mas abajo instalan a mano — el compilador cruzado ARM, el entorno de ejecucion de Java para el ensamblador GLASS, las dependencias de compilacion del kernel y la cadena de herramientas Quartus II — se instala y ejecuta automaticamente mediante el script de configuracion incluido para su plataforma. Cada script es autonomo: copie el unico archivo correspondiente a su plataforma y ejecutelo. Instala los requisitos previos, clona el repositorio con sus submodulos (por defecto
~/FusionX), descarga el paquete de contenido de SharpSoft (TZFS_Files.zip, ~110 MB), prepara la cadena de herramientas y ofrece ejecutar la primera compilacion. Uselo para obtener un entorno funcional en un solo paso; las instrucciones manuales detalladas que siguen continuan siendo la referencia para configuraciones personalizadas, para comprender las herramientas individuales y para CI.
# Linux / macOS chmod +x setup_FusionX.sh ./setup_FusionX.sh # Windows 10/11 (nativo, sin WSL2) Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\setup_FusionX_windows_native.ps1
La compilacion la dirige
build.sh, que selecciona una cadena de herramientas nativa, una imagen Docker o una distribucion WSL1 por componente segun el host. Ejecutelo sin argumentos para compilar todo, o pase un indicador para un solo componente. Prefiere instalar la cadena de herramientas usted mismo, o necesita una configuracion personalizada o de CI? Los pasos manuales de mas abajo instalan exactamente lo que los scripts automatizan.
sudo apt update
sudo apt install -y make bc libssl-dev git default-jre docker.io u-boot-tools
# Descargar Linaro GCC 5.5-2017.10 para ARM hard-float
wget https://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/arm-linux-gnueabihf/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz
sudo mkdir -p /opt/arm-linux-gnueabihf
sudo tar xJf gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz \
-C /opt/arm-linux-gnueabihf --strip-components=1
export PATH="/opt/arm-linux-gnueabihf/bin:$PATH"
Clonacion y compilacion
git clone https://git.eaw.app/eaw/tzpuFusionX.git cd tzpuFusionX git submodule update --init --recursive ./build.sh --all
Para los Dockerfiles completos de Quartus II, scripts del pipeline de Jenkins, configuracion de webhooks de Gitea y documentacion detallada de contenedores hermanos, consulte la Guia del desarrollador en ingles.
Estructuras de datos clave
typedef struct {
uint32_t baseAddr; // Inicio del espacio de direcciones Z80
uint32_t size; // Tamano de la region en bytes
uint8_t *data; // Puntero al buffer de memoria emulada
uint8_t type; // MEM_ROM, MEM_RAM, MEM_VHARDWARE, MEM_PHYSICAL
void (*read_fn)(uint16_t addr, uint8_t *data);
void (*write_fn)(uint16_t addr, uint8_t data);
} t_memRegion;
Agregar una nueva maquina
Agregar soporte para una nueva maquina host es la tarea de desarrollo mas comun. El proceso implica cinco pasos discretos que abarcan las tres capas del stack de software:
- Definir el mapa de memoria en
z80driver.h - Crear el modulo de hardware virtual (
z80vhw_*.c) - Crear el directorio de variante de compilacion
- Crear la variante VHDL CPLD
- Crear el script de inicio
Para ejemplos de codigo detallados de cada paso (incluyendo una implementacion completa de la ULA del ZX Spectrum 48K), consulte la Guia del desarrollador en ingles.
Errores comunes
- Bloqueo en CPU0 en z80drv: cualquier llamada al sistema Linux desde codigo ejecutandose en el bucle de despacho z80drv en la CPU1 arriesga la preemption del planificador o un deadlock.
- Desajuste de variante del bitstream CPLD: compilar el CPLD con las asignaciones de pines del MZ-80A y programarlo en hardware conectado a un MZ-700 causa temporizacion del bus y decodificacion de direcciones incorrectas.
- Aislamiento de CPU no activo: si
isolcpus=1no esta presente en los argumentos de arranque del kernel, el planificador Linux interrumpira el hilo de despacho z80drv. - Imagen ROM faltante: siempre verifique con
dmesg | grep z80drvque el modulo del kernel reporte una carga de ROM exitosa antes de iniciar el Z80.
Sitios de referencia
| Recurso | Enlace |
|---|---|
| Pagina del proyecto tranZPUter FusionX | /tranzputer-fusionx/ |
| Manual de usuario tranZPUter FusionX | /tranzputer-fusionx-usermanual/ |
| Guia tecnica tranZPUter FusionX | /tranzputer-fusionx-technicalguide/ |
Aviso regulatorio inalambrico
Este dispositivo incorpora un transceptor inalambrico SSW101B 2,4 GHz IEEE 802.11 b/g/n (integrado en el SOM SigmaStar SSD202), lo que lo convierte en un emisor intencional bajo las regulaciones de radiofrecuencia a nivel mundial.
Responsabilidad del constructor
Es responsabilidad exclusiva del constructor asegurar que cualquier dispositivo construido a partir de estos disenos cumpla con todas las regulaciones de radiofrecuencia aplicables en su jurisdiccion.
Es responsabilidad exclusiva del constructor asegurar que cualquier dispositivo construido a partir de estos disenos cumpla con todas las regulaciones de radiofrecuencia aplicables en su jurisdiccion.