tranZPUter SW-700 — Guia Tecnica
Guia Tecnica del tranZPUter SW-700 (Version Actual)
Esta guia documenta la arquitectura de hardware, el mecanismo de bus mastering, los modos de gestion de memoria, los registros del sistema, la API de servicio K64F, la conmutacion de CPU, el modulo de video, las especificaciones FPGA y el sistema de compilacion para la version actual del tranZPUter SW-700 — la placa de expansion que agrega un procesador de E/S K64F, un CPLD y un FPGA Altera al Sharp MZ-700 (y, en la version actual, tambien al Sharp MZ-2000).
La version actual soporta la emulacion de hardware del MZ-2000 y utiliza FPGAs mas grandes (Cyclone IV EP4CE75 o EP4CE115) en comparacion con la base v1.2 (Cyclone III EP3C25). Todo en esta guia se aplica al hardware actual a menos que se indique explicitamente un calificador de version (v1.2 / v1.3).
Para el uso diario y la referencia de comandos TZFS, consulte el Manual de Usuario. Para explicaciones del codigo fuente Z80 y FPGA, consulte la Guia del Desarrollador.
Bus Mastering
El tranZPUter SW-700 se conecta al bus de expansion del Sharp MZ-700 (o MZ-2000). Su CPLD monitorea el bus y puede activar la linea
/BUSRQ del Z80 en cualquier momento. Cuando se activa /BUSRQ, el Z80 completa su ciclo de maquina actual y luego pone sus buses de direccion, datos y control en alta impedancia, senalando la liberacion del bus via /BUSAK.
Una vez que el Z80 libera el bus, el FPGA toma posesion de los tres buses. En este estado el FPGA puede actuar como:
- Un motor DMA — transferencia masiva de datos entre los 512 KB de SRAM y la memoria de la placa base sin participacion del Z80.
- Una CPU por software — los nucleos T80 o ZPU Evolution se ejecutan directamente desde la SRAM, direccionando todo el espacio de memoria como si fueran la CPU del sistema.
/BUSRQ, el Z80 recupera sus buses y reanuda la ejecucion exactamente desde el punto donde fue suspendido — todo el estado de los registros se preserva porque el Z80 nunca fue reiniciado. El contenido de la SRAM tambien se preserva durante la transferencia.
El CPLD maneja la traduccion de nivel entre las senales del bus MZ a 5 V y las lineas de E/S del FPGA a 3,3 V, y realiza la decodificacion de direcciones para que los registros del tranZPUter aparezcan en el espacio de E/S del Z80 sin conflicto con los perifericos de la placa base MZ.
Componentes de Hardware
K64F ARM Cortex-M4 (Procesador de E/S)
El NXP/Freescale K64F funciona a 120 MHz y actua como procesador de E/S del sistema. Opera independientemente del Z80 y del FPGA, ejecutando el sistema operativo embebido zOS. Sus responsabilidades son:
MAX 7000A CPLD (512 Macro Cells)
- Gestion de tarjeta SD — proporciona acceso al sistema de archivos FAT32 en la tarjeta SD.
- Carga de firmware/ROM — lee imagenes ROM y bitstreams FPGA desde la tarjeta SD y los carga en los 512 KB de SRAM o en el flash de configuracion del FPGA.
- API de servicio TZFS — maneja las solicitudes de programas Z80 ejecutandose bajo TZFS. El Z80 escribe un comando y parametros en una region de memoria compartida en 0xED80, luego activa el K64F via el registro SVCREQ en el puerto de E/S 0x68.
- Sintesis de frecuencia de CPU — genera un reloj de CPU alternativo que puede conmutarse al Z80 bajo demanda.
El Altera MAX 7000A es un CPLD tolerante a 5 V con 512 macroceldas. Se ubica directamente en el bus de expansion MZ y cumple tres funciones:
Altera FPGA
- Traduccion de nivel — conecta las senales del bus MZ-700/MZ-2000 a 5 V con las lineas de E/S del FPGA a 3,3 V.
- Logica de bus mastering — activa
/BUSRQhacia el Z80 y monitorea/BUSAKpara arbitrar la propiedad del bus entre Z80 y FPGA. - Decodificacion de direcciones — mapea los registros de E/S del tranZPUter (0x60–0x6F, 0xA8–0xAD, 0xF0, etc.) en el espacio de E/S del Z80 y conmuta la SRAM en el espacio de direcciones del Z80 segun el modo de gestion de memoria TZMM activo.
Se utilizan dos variantes de FPGA en las diferentes revisiones de placas:
| Version | Device | Logic Elements | BRAM | Package |
|---|---|---|---|---|
| v1.2 | Cyclone III EP3C25E144C8 | 25K LE | 76 KB | 144-pin TQFP |
| v1.3 | Cyclone IV EP4CE75F484C8 | 75K LE | 360 KB | 484-pin BGA |
| v1.3 | Cyclone IV EP4CE115F484C8 | 115K LE | 480 KB | 484-pin BGA |
El FPGA implementa:
512 KB de RAM Estatica (AS6C4008)
- T80 Soft Z80 — un nucleo CPU compatible con Z80 sintetizado que toma el control de los buses cuando el bus mastering esta activo.
- ZPU Evolution Soft CPU — un procesador de software de 32 bits basado en pila que puede ejecutar binarios ZPU desde la SRAM.
- Controlador de video — soporta todos los modos de video Sharp MZ y proporciona salida VGA (ver Modulo de Video).
- GPU — primitivas graficas aceleradas por hardware (borrado de VRAM, relleno de rectangulo, borrado de GRAM).
Un unico componente SRAM AS6C4008 de 512 KB x 8 proporciona la memoria expandida del tranZPUter. El CPLD pagina diferentes regiones de esta SRAM en el espacio de direcciones de 64 KB del Z80 dependiendo del modo TZMM activo (ver Modos de Gestion de Memoria).
Fuente de Alimentacion
Tres reguladores LDO integrados derivan los rieles de alimentacion requeridos de la alimentacion de 5 V del bus de expansion MZ:
| Rail | Consumers |
|---|---|
| 3.3 V | CPLD, K64F, general I/O, SRAM |
| 2.5 V | FPGA I/O banks |
| 1.2 V | FPGA core |
Modos de Gestion de Memoria
El CPLD implementa una unidad de gestion de memoria controlada escribiendo un valor de modo en el puerto de E/S 0x60. Cada modo determina como las regiones de los 512 KB de SRAM se paginan en el espacio de direcciones de 64 KB del Z80, y si la ROM y RAM de la placa base MZ o la SRAM del tranZPUter atiende cada rango de direcciones.
El registro de modo se denomina registro TZMM (tranZPUter Memory Mode). Los modos principales son:
| Mode | Value | Description |
|---|---|---|
| TZMM_ORIG | 0x00 | Original MZ-700 mode — mainboard IPL ROM, DRAM, and VRAM visible as normal. tranZPUter SRAM inactive. |
| TZMM_BOOT | 0x01 | tranZPUter SRAM mapped at 0xE800–0xEFFF to hold the TZFS bootstrap. |
| TZMM_TZFS | 0x22 | TZFS mode — entire 64 KB address space served from tranZPUter SRAM. |
| TZMM_CPM | 0x26 | CP/M mode — full 64 KB SRAM mapped, CBIOS and CCP loaded by K64F. |
| TZMM_MZ2000 | — | MZ-2000 compatibility paging. Current version only. |
Al encender, el CPLD arranca en el modo TZMM_ORIG (0x00), presentando el mapa de memoria estandar del MZ-700. La ROM bootstrap TZFS en 0xE800 cambia a TZMM_BOOT para hacerse visible, luego cambia a TZMM_TZFS una vez que el K64F ha cargado la imagen TZFS completa en la SRAM.
TZMM_ORIG (0x00) — Original MZ-700 layout 0x0000–0x0FFF MZ mainboard IPL ROM 0x1000–0xCFFF MZ mainboard DRAM 0xD000–0xDFFF MZ mainboard VRAM / memory-mapped I/O 0xE000–0xE7FF MZ mainboard VRAM extension / I/O 0xE800–0xEFFF MZ mainboard ROM (User ROM area) 0xF000–0xFFFF MZ mainboard ROM / unused TZMM_TZFS (0x22) — Full SRAM mode 0x0000–0xFFFF tranZPUter 512 KB SRAM (64 KB window) TZMM_CPM (0x26) — CP/M mode 0x0000–0xFFFF tranZPUter 512 KB SRAM (64 KB window)
Registros del Sistema
El tranZPUter mapea sus registros de control en el espacio de direcciones de E/S del Z80. Todos los registros se acceden con instrucciones Z80
Mapa de Registros
IN y OUT. El CPLD decodifica las direcciones de E/S y enruta los accesos al hardware apropiado.
Port Register R/W Description ────────────────────────────────────────────────────────────────────────────── 0x60 Memory Management Config W TZMM mode select (see Memory Modes) 0x62 Set CPU Alt Frequency W Switch Z80 clock to K64F-generated alternate frequency 0x64 Set CPU Base Frequency W Switch Z80 clock back to MZ mainboard frequency 0x68 Service Request (SVCREQ) W Trigger K64F service request 0x6B System Command Register W System-level commands (reset, mode changes) 0x6C CPU Configuration R/W Select active CPU core (Z80, T80, ZPU Evolution) 0x6D CPU Information R Read available CPU capabilities and soft-CPU presence 0xA8 Video Control R/W Machine model, column width, colour enable, PCG, VGA mode 0xA9 Video Graphics Mode R/W GRAM bank select, VRAM/GRAM output enable, blend operator 0xAA-AC Colour Writer R/G/B W 8-pixel channel filter masks for indirect GRAM writes 0xAD Memory Page / Status R/W GRAM/CGROM CPU enable; H/V blanking status ──────────────────────────────────────────────────────────────────────────────
API de Servicio K64F
El K64F expone una API de servicio para los programas Z80 que se ejecutan bajo TZFS. El mecanismo es una region de memoria compartida en la SRAM — el Z80 escribe un comando y parametros en la region, activa el K64F y espera la finalizacion. No se requiere bus mastering; el Z80 y el K64F se comunican mediante lecturas y escrituras de memoria ordinarias mientras el K64F monitorea el registro SVCREQ.
Shared memory base: 0xED80 Z80 procedure: 1. Write command code to TZSVCCMD (0xED80). 2. Write parameters to TZSVCP1 onwards. 3. OUT (0x68), A ; assert SVCREQ — wakes K64F 4. Poll TZSVCSTS until non-zero (K64F has completed the request). 5. Read result data from shared memory.Referencia de Comandos de Servicio
La siguiente tabla lista los principales comandos de servicio. Los detalles de los parametros estan documentados en el codigo fuente del firmware TZFS.
| Command | Category | Description |
|---|---|---|
| READDIR | File I/O | Read directory entries from the SD card FAT32 volume |
| LOADFILE | File I/O | Load a named file from SD card into SRAM |
| SAVEFILE | File I/O | Save a region of SRAM as a named file on SD card |
| CPU_SETZ80 | CPU Switch | Activate the physical Z80 (release bus mastering) |
| CPU_SETT80 | CPU Switch | Load T80 firmware and activate the T80 soft Z80 in FPGA |
| CPU_SETZPUEVO | CPU Switch | Load ZPU Evolution firmware and activate the ZPU soft CPU |
| EMU_SETMZ80K | Emulation | Configure FPGA video and I/O to emulate MZ-80K |
| EMU_SETMZ700 | Emulation | Configure FPGA to emulate MZ-700 |
| EMU_SETMZ2000 | Emulation | Configure FPGA to emulate MZ-2000 (current version only) |
Conmutacion de CPU
El tranZPUter puede operar con tres opciones de CPU: el Z80 fisico en la placa base MZ, el T80 soft Z80 implementado en el FPGA, y la CPU de software de 32 bits ZPU Evolution implementada en el FPGA. La conmutacion de CPU se coordina entre el programa Z80, el K64F y el FPGA.
Procedimiento de Conmutacion
- El programa Z80 emite una solicitud de servicio
CPU_SETT80oCPU_SETZPUEVOa traves de la API K64F (puerto 0x68). - El K64F carga la imagen de firmware requerida para la CPU objetivo desde la tarjeta SD en los 512 KB de SRAM.
- El K64F senala al FPGA para activar el nuevo nucleo de CPU. El CPLD activa
/BUSRQhacia el Z80. - Una vez que el Z80 libera el bus (
/BUSAKactivado), la CPU de software del FPGA toma posesion de los buses y comienza la ejecucion desde la SRAM. - El Z80 fisico permanece en estado de bus liberado durante toda la ejecucion de la CPU de software.
- Para volver a la ejecucion Z80, el programa en ejecucion (o el K64F) emite
CPU_SETZ80, lo que causa que el FPGA libere/BUSRQ. El Z80 recupera sus buses y reanuda. El contenido de la SRAM se preserva.
| Core | Port 0x6C bits 2:0 | Notes |
|---|---|---|
| Z80 (hard) | 000 | Physical Z80 on MZ mainboard. Default after reset. |
| T80 | 001 | Synthesised Z80-compatible core in FPGA fabric. Full Z80 instruction set. |
| ZPU Evolution | 010 | 32-bit stack-based soft CPU in FPGA. Executes ZPU binaries. |
Modulo de Video
El FPGA implementa un controlador de video completo que soporta todos los modos de visualizacion Sharp MZ y agrega un framebuffer grafico con salida VGA. Los registros de video estan mapeados en el espacio de E/S del Z80 en 0xA8–0xAD (control primario), con registros adicionales en 0xD0–0xD7 (paleta y parametros de modo) y 0xF3, 0xF5 (borde VGA y seleccion de paleta).
En la version actual, el soporte para hardware de video MZ-2000 esta incluido junto con todos los modelos MZ previamente soportados.
Framebuffer Grafico
El FPGA implementa una capa grafica de 640x200 (o 320x200) junto con la pantalla de caracteres. El framebuffer esta organizado como tres bancos independientes de 16 KB — Rojo, Verde y Azul — proporcionando datos de pixel de 3 bits (8 colores).
| VGA Mode (bits 7:6) | Output Resolution | Refresh |
|---|---|---|
| 00 | 640 × 480 | 60 Hz |
| 01 | 800 × 600 | 60 Hz |
| 10 | 1024 × 768 | 60 Hz |
Especificaciones FPGA
| Feature | v1.2 (EP3C25) | v1.3 (EP4CE75 / EP4CE115) |
|---|---|---|
| Logic elements | 25K | 75K / 115K |
| On-chip BRAM | 76 KB | 360 KB / 480 KB |
| Package | 144-pin TQFP | 484-pin BGA |
| Soft CPUs | T80, ZPU Evolution | T80, ZPU Evolution |
| MZ video models | MZ-80K/C/1200/80A/700/800/80B | + MZ-2000 (current) |
| VGA output | 640×480, 800×600, 1024×768 | 640×480, 800×600, 1024×768 |
Sistema de Compilacion
El firmware del tranZPUter SW-700 abarca tres componentes, cada uno con su propia cadena de herramientas: bitstream FPGA (Quartus Prime), firmware K64F (ARM GCC) y software Z80 (ensamblador GLASS). Todo el desarrollo se realiza bajo Linux.
La forma recomendada de obtener una compilacion funcional es el script de configuracion automatizada para su plataforma — consulte Configuracion y compilacion automatizada justo debajo. Instala las cadenas de herramientas, construye las imagenes Docker de Quartus y obtiene las fuentes por usted. El detalle componente por componente que sigue explica que produce la compilacion y como ejecutar las herramientas manualmente.
Configuracion y compilacion automatizada (recomendado)
La forma recomendada de obtener una compilacion funcional es el script de configuracion automatizada para su plataforma — consulte Configuracion y compilacion automatizada justo debajo. Instala las cadenas de herramientas, construye las imagenes Docker de Quartus y obtiene las fuentes por usted. El detalle componente por componente que sigue explica que produce la compilacion y como ejecutar las herramientas manualmente.
En lugar de instalar tres versiones de Quartus, las cadenas de herramientas ARM GCC y Java y Docker manualmente, ejecute el script de configuracion incluido para su plataforma. Instala las herramientas base, instala Java (JRE) para el ensamblador GLASS de Z80 y Docker, construye tres imagenes Docker de Quartus reproducibles, clona el repositorio
--recurse-submodules (TZFS, zSoft/zOS, zpu), y ofrece ejecutar la primera compilacion (./build.sh -t all). Quartus en si no se instala en el host — las compilaciones de CPLD y FPGA se ejecutan dentro de las imagenes Docker. Cada script es autonomo.
| Script | Platform | Notes |
|---|---|---|
setup_tranZPUter.sh |
Linux / macOS | Installs base tools + Java (JRE) + Docker, builds the three Quartus images, clones into ~/tranZPUter, offers ./build.sh -t all. |
setup_tranZPUter_windows.cmd |
Windows 10 / 11 | Double-click launcher — runs the .ps1 non-interactively and logs to setup_tranZPUter_log.txt. |
setup_tranZPUter_windows_native.ps1 |
Windows 10 / 11 | winget installs Git for Windows + Docker Desktop, builds the Quartus images, clones into %HOME%\tranZPUter, runs ./build.sh -t all via Git Bash. |
Linux / macOS:
chmod +x setup_tranZPUter.sh
./setup_tranZPUter.sh
Windows — haga doble clic en setup_tranZPUter_windows.cmd, o desde PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_tranZPUter_windows_native.ps1
La configuracion construye tres imagenes Docker de Quartus gratuitas (Web/Lite Edition, sin licencia):
tzpu-quartus:13.0.1 (CPLDs MAX7000), tzpu-quartus:13.1 (Cyclone III, SW-700 v1.2) y tzpu-quartus:17.1 (Cyclone IV, SW-700 v1.3 / Fusion). La compilacion se controla luego mediante build.sh, que ejecuta Quartus de forma nativa si encuentra una version compatible, de lo contrario dentro de estas imagenes (Java/GLASS siempre se ejecuta de forma nativa). Las salidas (.pof, .sof, flash de arranque .jic, imagenes ROM/TZFS/CP/M) se recopilan en ./build/output/.
./build.sh -t all # CPLD + FPGA + software (default: -V v1.3 -M all -D E115 -C emuMZ)
./build.sh -h # list all targets and options
Sobreescrituras utiles de variables de entorno:
| Variable (alias) | Purpose |
|---|---|
TZPU_REPO_URL (tranZPUter_REPO_URL) |
Repository URL to clone. Default https://git.eaw.app/eaw/tranZPUter.git. |
TZPU_DIR (tranZPUter_DIR) |
Build in an existing checkout instead of cloning. |
TZPU_ASSUME_YES (tranZPUter_ASSUME_YES)=1 |
Non-interactive; accept all defaults. |
TZPU_QUARTUS_CPLD_IMAGE (tranZPUter_CPLD_IMAGE) |
Override the CPLD image (default tzpu-quartus:13.0.1). |
TZPU_QUARTUS_C3_IMAGE (tranZPUter_FPGA_IMAGE) |
Override the Cyclone III image (default tzpu-quartus:13.1). |
TZPU_QUARTUS_C4_IMAGE |
Override the Cyclone IV image (default tzpu-quartus:17.1). |
El detalle de compilacion manual componente por componente que aparece debajo sigue siendo totalmente compatible para usuarios avanzados y recompilaciones parciales.
| Board Version | FPGA Device | Quartus Version |
|---|---|---|
| v1.2 | Cyclone III EP3C25 | 13.1 (last version with Cyclone III support) |
| v1.3 | Cyclone IV EP4CE75 / EP4CE115 | Current Quartus Prime Lite / Standard |
Sitios de Referencia
| Resource | Link |
|---|---|
| tranZPUter SW-700 project page | /sharpmz-upgrades-tranzputer-sw700/ |
| tranZPUter SW-700 User Manual | /sharpmz-upgrades-tranzputer-sw700-usermanual/ |
| tranZPUter SW-700 Developer’s Guide | /sharpmz-upgrades-tranzputer-sw700-developersguide/ |
| Sharp MZ-700 hardware reference | MZ-700 Technical Manual |
| GLASS Z80 Assembler | Bundled in tools/glass.jar |
| Quartus Prime (Intel FPGA) | https://www.intel.com/content/www/us/en/collections/products/fpga/software/downloads.html |