Observar un Z80 desde un RP2350: capturar el bus con una Raspberry Pi Pico

Fuentes: Watching a Z80 from an RP2350
Imagen generada por IA con el prompt: Close-up of a Raspberry Pi Pico PCB wired with colorful jumper cables to a vintage Z80 CPU on a breadboard, retro computing lab setup, soft LED glow, technical workbench
Imagen generada con IA

Un proyecto de electrónica DIY explora cómo conectar el microcontrolador Raspberry Pi RP2350 al bus de un procesador Zilog Z80 para observar su actividad. Documentado en el blog DIY Electro Music, el trabajo utiliza una placa PGA2350 de Pimoroni sobre una PCB de ruptura personalizada y se apoya en el SDK C/C++ de Pico y, parcialmente, en el núcleo Arduino de Earle Philhower.

El Z80 dispone de un bus de direcciones de 16 bits (A0-A15) y un bus de datos de 8 bits (D0-D7), además de líneas de control como /RD, /WR, /MREQ, /IORQ, /M1, /HALT, /RFSH, /WAIT, /INT, /NMI, /RESET, /BUSRQ, /BUSACK y /CLK. El autor mapea cada una de estas señales a pines GPIO concretos del RP2350 (del 0 al 38), siguiendo el esquema empleado por el proyecto picoZ80. Para leer varias líneas a la vez recurre a las funciones gpio_init_mask, gpio_set_dir_in_masked, gpio_clr_mask, gpio_set_mask y gpio_get_all, que operan sobre máscaras de 32 bits.

El RP2350B, con 48 GPIO, introduce el concepto de "base" GPIO (0 para pines 0-31 y 1 para pines 32-63). Esta abstracción mantiene la compatibilidad con el RP2040 y permite aprovechar instrucciones de 32 bits, pero la API resultante es desigual: PIO usa una base diferente (0 cubre 0-31 y 1 cubre 16-47) y algunas funciones carecen de variante para la base 1.

El artículo también analiza la temporización del Z80. A partir del datasheet del Z80A deduce que un pulso en alto de hasta 200 µs y un pulso en bajo máximo de 2 µs producen un periodo de reloj mínimo cercano a 203 µs (unos 5 kHz). Subraya que RESET debe mantenerse al menos tres ciclos de reloj y diferencia entre ciclos T (relojes) y ciclos M (máquina). Por último, presenta un primer programa que muestra en LED el contenido del bus de datos, reconociendo que no está sincronizado con las señales de control y solo sirve como prueba de cableado.