Emulador de Cromemco Z-1 con Teensy 4.1

En este artículo vamos a emular el Cromenco Z-1 sobre una Teensy 4.1.

Sobre Cromenco Z-1

Si IMSAI 8080 es considerado el primer clon de la historia, Cromenco Z-1 podría ser la primera versión mejorada de un clon. La empresa Cromenco, especializada en diseño y fabricación de placas electrónicas compatibles con el bus S-100 para el Altair 8800, decide diseñar su propio ordenador enfocándose en la robustez. Como curiosidad, Cromemco utilizó el mismo chasis que montaba el IMSAI 8080, de ahí su similitud estética.

Desde Cromemco plantean una arquitectura hardware basada en Zilog Z80A, que mejora al Intel 8080, a velocidades de 2 y 4 Mhz, seleccionables por interruptor, 8 KB de RAM y 8 KB de PROM en su tarjeta Bytesaver. Este último permitía volcar el contenido de la RAM en los chips de PROM, para así poder recuperar el trabajo en un próximo encendido. Nótese que los primeros Z-1 venían sin disquetes para guardado.

Emulador

Utilizaremos como base el emulador de Cromemco integrado en Z80pack.

Cambios en nuestro emulador

Se realizan cambios en el código original incluyendo:

  • Se deshabilita el panel LED y switches.
  • Se excluye el core 8080.
  • Integración de TinyBASIC en el emulador.
    • Entrada teclado no bloqueante por puerto 0x05 en src/io_minimal.c.
    • Redirección de salida TinyBASIC por puerto 0x00 en src/io_minimal.c.

Entorno e instalación del emulador

Elementos

Vamos a necesitar tan solo la placa Teensy 4.1.

Instalación

Nos basta con descargar el código fuente de GitHub.

$ git clone https://github.com/RafaGS/cromemco4Teensy.git

Editamos el archivo platform.io y descomentamos el flag CROMEMCO_BOOT_DEFAULT con el valor Z1.

build_flags = -DCORE_DEBUG_LEVEL=0 -DUSB_SERIAL -DEXCLUDE_I8080 -I./src -I./z80core -DCROMEMCO_SERIAL_WAIT_MS=4000 ; Auto-boot profile (optional). Leave undefined to show menu. -DCROMEMCO_BOOT_DEFAULT=Z1 ; -DCROMEMCO_BOOT_DEFAULT=Z2 ; -DCROMEMCO_BOOT_DEFAULT=ST ; Optional tuning: ; -DCROMEMCO_MENU_TIMEOUT_MS=2000 ; -DCROMEMCO_SERIAL_WAIT_MS=300

Construimos los binarios y los subimos a la placa.

Emulación

Una vez realizada la subida a la Teensy, nos conectamos vía serie. Aparecerá información sobre el emulador. Pulsaremos una tecla para comenzar la emulación.

Aparecerá la versión del monitor ROM de Z-1.

CROMEMCO ZM1.4

Dispondremos de un prompt en forma de dos puntos.

Monitor

El monitor por defecto para los primeros Z-1 era el Z1MON, muy limitado en cuanto a que no tiene capacidad de gestionar discos, limitándose sus capacidades a examinar/modificar memoria, cargar binarios por puerto serie y ejecutar código. Para poder tener capacidades de manejo de discos era necesario actualizar a RDOS.

En el monitor podemos realizar operaciones sencillas como mostrar los registros del Z80 con DR.

:DR A=01 B=57 C=74 D=64 E=C4 F=28 HL=AF15
I=00 N=00 P=0128 S=702C X=D5A8 Y=004E
A'A4 B'E9 C'57 D'DB E'5E F'38 HL'20FB

O realizar un volcado de memoria con DM.

:DM 0 10 0000: 31 FF FF 3E FF C3 03 06 E3 EF BE C3 66 00 3E 0D
0010: F5

BASIC

Una práctica común en la época era disponer del intérprete BASIC vía ROM o serie a través de cintas perforadas. En nuestro caso, hemos precargado una versión de TinyBASIC para Z80. Podemos iniciar este lenguaje de programación desde el monitor con la instrucción G.

:G 0

Inmediatamente aparecerá el banner de inicio de este BASIC.

Y, por supuesto, podremos jugar con él.

#1976 #Cromemco #PJRCTeensy41 #ZilogZ80A