tranZPUter SW
Prefacio
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 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 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
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

Esquema v1.0 Teensy 3.5

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
K64F Z80 Host API
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
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
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
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
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
Complex Logic Device - MAX 7000A
Los detalles del CPLD y las instrucciones de build del bitstream estan documentados en la version en ingles.
Software
zOS
*T*ran*Z*puter *F*iling *S*ystem
Los comandos y detalles completos de TZFS estan documentados en la version en ingles.
CP/M
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
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.