tranZPUter SW

English

Prefacio

El tranZPUter y el tranZPUter SW estan en desarrollo activo y los cambios se reflejan regularmente en la documentacion.

El tranZPUter SW es un derivado del proyecto tranZPUter y utiliza un procesador Freescale K64F como procesador de control IO en lugar de la ZPU en el proyecto tranZPUter original.

Durante las pruebas del tranZPUter v1.0 y con la llegada del upgrade RFS v2.0 con CP/M, se establecio que el tranZPUter debia actualizarse para que el Z80 tuviera memoria adicional y pudiera funcionar a frecuencias de reloj mas altas. Tambien debia funcionar independientemente del procesador IO de control, es decir, la ZPU Evo en fabric FPGA o el K64F.

La v1.0 del tranZPUter tenia limitaciones de diseno que francamente hacian el proyecto mucho mas dificil. Para avanzar el concepto y el diseno, di un paso atras y opte por una potente mini placa de desarrollo, el Teensy 3.5, que tiene mas que suficientes pines I/O de proposito general y es tolerante a 5V -- de ahi este diseno intermedio (que en realidad es mejor para cualquiera que sea programador de software y no este familiarizado con electronica o VHDL, pero aun quiera expandir una maquina Z80).

Todo esta escrito en C/C++ y una vez que funcione, puedo dar el valiente paso de especificar un tranZPUter v2.0 con un BGA, ya que la ZPU ejecutara todo el software recien escrito.

Vision general

El Sharp MZ80A esta basado en la CPU Z80 a 2MHz. Es vintage (aunque el Z80 todavia se usa ampliamente en nuevos disenos industriales a 33MHz y mas) y esta infrapotenciado en comparacion con los ordenadores modernos. Ademas del valor historico, tiene una base de software que de vez en cuando es util. Se podria escribir un emulador de software para prolongar el uso del software, pero hay algo especial en usar el hardware original, y esta es una alternativa para mantener la maquina original proporcionando al mismo tiempo un upgrade que puede impulsar la maquina con potencia de procesamiento adicional, memoria y varias CPUs diferentes basadas en software. Esto se logra a traves del bus mastering, donde la CPU original se pone en tri-state y el K64F toma el control del bus y de los perifericos originales de la placa base.

El upgrade tambien extiende las capacidades hardware del Z80 con RAM adicional para una version de 64K de CP/M y para aumentar la velocidad del procesador manteniendo la velocidad original al acceder a los perifericos de la placa base del Sharp MZ80A.

Este diseno esta en progreso y avanza en paralelo al tranZPUter. El software de control escrito en C/C++ para el tranZPUter SW esta destinado a funcionar tambien en el tranZPUter bajo la ZPU.

Dado que el diseno reemplaza un Z80 in situ, no esta limitado al MZ80A sino que puede usarse en cualquier ordenador basado en Z80 con las modificaciones de software adecuadas, por ejemplo el MZ-700 o MZ-80B.

tranZPUter SW

El tranZPUter deriva su nombre de: Un TRANsformable ZPU CompuTER, ya que la CPU base en el tranZPUter original es la ZPU Evo. La ZPU Evo proporciona los servicios previstos de menu, SD, superposicion de video para el Sharp MZ80A poniendo en tri-state el Z80 original y accediendo a la memoria y perifericos del MZ80A como si fueran dispositivos ZPU.

El tranZPUter SW se basa en el diseno del tranZPUter en sus objetivos mientras mejora el hardware Z80 subyacente. Utiliza un Freescale K64F ARM Cortex-M4 en lugar de la ZPU Evo ya que el tranZPUter SW es mas una solucion de software para el requisito. El proyecto anade el sufijo SW de *S*oft*W*are para distinguir los dos disenos.

Para proporcionar diferentes CPUs, solo es necesario tomar emuladores de CPU existentes y adaptarlos para usar las senales de CPU en el bus MZ80A a traves de la interfaz de este diseno.

Hardware

Los fundamentos de este diseno residen en el bus mastering del Z80, es decir, la capacidad de sacar el Z80 del circuito y controlar el hardware restante del ordenador segun sea necesario. El bus mastering fue tipicamente utilizado por dispositivos como DMA para la transferencia rapida de datos desde un dispositivo I/O a la memoria o de memoria a memoria para aplicaciones como video/graficos.

El bus mastering se usa para tomar el control del bus Z80 y transferir datos entre la memoria principal y una tarjeta SD o entre el procesador I/O y el buffer de la pantalla de video para la visualizacion de menus. Tambien se usa cuando un soft-procesador pone completamente en reposo al Z80 hardware y actua como CPU principal del ordenador.

El diseno gira en torno a elevar el Z80 original a una placa hija y redirigir varias de sus senales para que puedan controlarse segun sea necesario.

Esquema v1.0 Z80 Upgrade

Sheet 1

Para permitir la ejecucion de programas para otros modelos Sharp (por ejemplo, MZ-700) o CP/M de 64K, el diseno anade un dispositivo de RAM estatica de 512KB con la logica de paginacion necesaria. Dado que el diseno en esta etapa necesita ser flexible en la reorganizacion de la memoria, se utiliza un decodificador programable en forma de Flash RAM. Esto permite la maxima flexibilidad durante el desarrollo.

Esquema v1.0 Teensy 3.5

Sheet 2

El segundo esquema muestra la placa de desarrollo Teensy 3.5, que viene en un paquete DIL de 48 pines e ideal para colocacion en una placa de proyecto como el tranZPUter. Contiene el procesador Freescale K64F, una tarjeta SD y logica USB.

Esquema v1.1 Z80 Upgrade

Las revisiones de hardware adicionales (v1.1, v2.0, v2.1, v2.2) con layouts de PCB y esquemas estan documentadas en la version en ingles.


Detalles del diseno

Esta seccion proporciona informacion interna del diseno para comprender las operaciones del tranZPUter y sus interacciones entre el host (el ordenador original, actualmente probado en un Sharp MZ-80A y un MZ-700), la placa hija tranZPUter SW y el procesador K64F.

K64F Z80 Host API

La API se basa en un bloque de RAM compartida en el espacio de memoria de 64K del Z80, a traves del cual tiene lugar la comunicacion entre procesadores. En el K64F esto se declara en C como una estructura y en el Z80 como referencia de ensamblador a variables de memoria.

La estructura completa de la API, la lista de comandos y la lista de resultados son identicas a la version en ingles y estan documentadas alli.

La comunicacion es enteramente iniciada por el Z80. Cuando necesita un servicio, escribe un comando en el campo svcControl.cmd y establece el campo svcControl.result en REQUEST. El Z80 luego escribe en un puerto de salida (configurable, pero tipicamente 0x68), que a su vez envia una interrupcion al K64F.


Organizacion GPIO

En este diseno, el K64F opera en un rol de supervision y servicio. El Z80 puede funcionar de forma autonoma sin el K64F, dejando la maquina host completamente original, y ademas la placa tranZPUter tambien proporciona algunos upgrades nuevos como 512K de RAM estatica que el Z80 puede usar segun sea necesario.

Cuando se necesitan servicios avanzados como acceso a tarjeta SD o emulacion de hardware, se necesita el K64F para proporcionar estos servicios. El Z80 ve al K64F como una extension de hardware -- hace una solicitud de I/O y recibe funcionalidad a cambio.

Las tablas completas de asignacion GPIO (asignacion de puertos y bits del K64F, asignacion de bits GPIO a lineas de direccion y datos del Z80) son identicas a la version en ingles.


Modos de memoria

Una de las caracteristicas del diseno hardware del tranZPUterSW es la capacidad de crear libremente mapas de memoria dentro de los 512K de Flash RAM. Estos mapas se asignan a un modo de memoria y se seleccionan mediante el latch del modo de memoria. Definen como la memoria del tranZPUter SW se mapea en el espacio de direcciones de memoria del Z80 junto con los componentes originales de la placa base.

La tabla completa de modos de memoria (modos 0-14 incluyendo Original, TZFS, CP/M, MZ-700 y MZ-80B) es identica a la version en ingles.


Conmutacion de frecuencia de la CPU Z80

Para hacer el tranZPUter SW compatible con otras maquinas, es necesario hacer funcionar la CPU a la velocidad de esa maquina. Tambien es deseable hacer funcionar la CPU lo mas rapido posible cuando se usa software como CP/M para maximo rendimiento.

Uno de los principales problemas con la conmutacion de frecuencia es que el host subyacente no puede cambiar su frecuencia -- el host tipicamente genera el reloj y sus circuitos estan disenados para operar dentro de sus tolerancias de reloj.

Para satisfacer el requisito de una frecuencia de CPU Z80 conmutable, se implemento un conmutador de frecuencia activado por flanco positivo, que usa la frecuencia del host como una entrada y un generador de onda cuadrada del K64F como segunda entrada.

Las pruebas actuales en una CPU CMOS Z84C0020 de 20MHz muestran las siguientes observaciones:
  • tranZPUter fiable en el rango de 1Hz a 20MHz para toda la funcionalidad.
  • tranZPUter fiable a 24MHz en la placa tranZPUter v2.1.
Port Function
0x62 Switch Z80 CPU frequency to the second source, ie. the frequency generated by the K64F or external oscillator.
0x64 Switch Z80 CPU frequency to default host source. This is the default on RESET.

Configuracion del sistema

El CPLD mantiene un registro de configuracion interno para modificar como opera con el host subyacente. Las tablas de registros de configuracion (System Configuration Register 0x6E y System Information Register 0x6F) son identicas a la version en ingles.


Modo Sharp MZ-700

Uno de los objetivos del tranZPUter era ejecutar tanto software como fuera posible de otros modelos en el host. El host original es un MZ-80A y el objetivo era ejecutar software para un MZ-700/MZ-800/MZ-80B en esta maquina. El propio tranZPUter puede insertarse en un Sharp MZ-700 o MZ-80B real y ha sido probado en estas maquinas.

La tabla comparativa de diferencias entre MZ-80A y MZ-700 y los detalles sobre la implementacion de la compatibilidad (tranZPUter v1.1 y v2.1) estan documentados en la version en ingles.


Modo Sharp MZ-80B

Los detalles sobre el modo de compatibilidad MZ-80B estan documentados en la version en ingles.


Lenguaje de descripcion de hardware

A partir de la version 2.0 del tranZPUter SW, toda la logica discreta en la placa fue reemplazada por un unico CPLD (Altera EPM7128), programado en VHDL. Todas las funciones como decodificacion de memoria, control del bus, conmutacion de frecuencia y configuracion del sistema estan implementadas en el archivo VHDL.

Complex Logic Device - MAX 7000A

Los detalles del CPLD y las instrucciones de build del bitstream estan documentados en la version en ingles.

Software

El software del tranZPUter SW esta estructurado de forma modular y consiste en varios componentes que trabajan juntos para proporcionar la funcionalidad extendida.

zOS

zOS es el sistema operativo que funciona en el procesador K64F. Proporciona servicios al host Z80, incluyendo acceso a tarjeta SD, gestion de memoria, control de frecuencia de CPU y emulacion de hardware. La documentacion completa de zOS, incluyendo comandos, comandos tranZPUter, asignaciones de teclas y detalles de API, esta disponible en la [version en ingles](/sharpmz-upgrades-tranzputer-sw/).

*T*ran*Z*puter *F*iling *S*ystem

TZFS (tranZPUter Filing System) es un sistema de archivos que hace que la tarjeta SD este disponible para el Z80. Reemplaza la ROM Monitor del Sharp MZ-80A y ofrece funciones extendidas como la carga y almacenamiento de programas desde/en la tarjeta SD, listados de directorios y mas.

Los comandos y detalles completos de TZFS estan documentados en la version en ingles.

CP/M

CP/M 2.2 se ha portado para el tranZPUter SW. El tranZPUter proporciona 64K de RAM necesarios para el funcionamiento de CP/M, y el K64F emula unidades de disquete usando archivos en la tarjeta SD.

Los comandos y detalles de CP/M estan documentados en la version en ingles.

TZFS Monitor

La referencia completa de comandos del monitor TZFS esta documentada en la version en ingles.

Sharp BASIC SA-5510

Los detalles sobre Sharp BASIC en el tranZPUter estan documentados en la version en ingles.

Microsoft BASIC

Los detalles sobre Microsoft BASIC en el tranZPUter estan documentados en la version en ingles.

Memory Decoder Tool

La herramienta Memory Decoder se usa para generar las tablas de decodificacion de memoria en la Flash RAM. Los detalles completos estan documentados en la version en ingles.

Build del software tranZPUter SW

Esta seccion describe como construir el software para el tranZPUter SW. Todo el desarrollo se realizo en Linux.

Rutas

La tabla completa de rutas esta documentada en la version en ingles.

Herramientas

Las herramientas necesarias estan documentadas en la version en ingles.

Build de zOS

Las instrucciones de build para zOS estan documentadas en la version en ingles.

Build de TZFS

Las instrucciones de build para TZFS estan documentadas en la version en ingles.

Build del Memory Decoder

Las instrucciones de build para el Memory Decoder estan documentadas en la version en ingles.

Build de CPM

Las instrucciones de build para CPM estan documentadas en la version en ingles.

Un build tipico

La descripcion de un proceso de build tipico esta documentada en la version en ingles.

Flashear el K64F MPU

Las instrucciones para flashear el K64F estan documentadas en la version en ingles.

Flashear el Teensy3.5

Las instrucciones para flashear el Teensy3.5 estan documentadas en la version en ingles.

Agradecimientos

Los agradecimientos y licencias son identicos a la version en ingles.

Licencias

La GNU Public License v3

Este proyecto esta licenciado bajo la GPLv3. Los detalles se encuentran en la version en ingles.