tranZPUter SW-700 — Guia Tecnica

English

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.
Cuando el FPGA libera /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:
  • 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.

MAX 7000A CPLD (512 Macro Cells)
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:
  • 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 /BUSRQ hacia el Z80 y monitorea /BUSAK para 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.

Altera FPGA
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:
  • 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).
La configuracion del FPGA se almacena en Flash SPI: EPCS16 (v1.2) o EPCS64 (v1.3).

512 KB de RAM Estatica (AS6C4008)
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 IN y OUT. El CPLD decodifica las direcciones de E/S y enruta los accesos al hardware apropiado.

Mapa de Registros
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
  1. El programa Z80 emite una solicitud de servicio CPU_SETT80 o CPU_SETZPUEVO a traves de la API K64F (puerto 0x68).
  2. El K64F carga la imagen de firmware requerida para la CPU objetivo desde la tarjeta SD en los 512 KB de SRAM.
  3. El K64F senala al FPGA para activar el nuevo nucleo de CPU. El CPLD activa /BUSRQ hacia el Z80.
  4. Una vez que el Z80 libera el bus (/BUSAK activado), la CPU de software del FPGA toma posesion de los buses y comienza la ejecucion desde la SRAM.
  5. El Z80 fisico permanece en estado de bus liberado durante toda la ejecucion de la CPU de software.
  6. 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)
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