picoZ80 Manual de Usuario

picoZ80 Manual de Usuario

El picoZ80 es un reemplazo directo para una CPU Z80 en cualquier ordenador con zocalo DIP-40. Se conecta directamente al zocalo Z80 de su ordenador vintage y — sin ninguna modificacion al ordenador anfitrion — proporciona memoria expandida, perifericos virtuales, emulacion de disquete y QuickDisk, sistemas de archivos, y una interfaz de gestion basada en navegador mediante WiFi.
Este manual cubre la placa fisica, la configuracion inicial, la conexion a un ordenador anfitrion, y el uso de la interfaz web. Para detalles de arquitectura, referencia de configuracion e informacion de desarrollo consulte la Guia Tecnica picoZ80.

Descripcion General de la Placa

La PCB del picoZ80 esta disenada para caber dentro de las dimensiones de un paquete DIP de 40 pines estandar. Los 40 pines DIP emergen de la parte inferior de la placa, coincidiendo exactamente con la distribucion de pines de un Z80 real, por lo que se inserta directamente en cualquier zocalo Z80 sin doblar ni adaptar.
La superficie superior de la placa aloja todos los componentes activos. La placa es mas estrecha que las holguras internas de la mayoria de los ordenadores Z80, y la altura sobre el zocalo esta dentro de las dimensiones de un CI estandar con un zocalo DIP-40 montado debajo.

Conectores e Indicadores

La placa picoZ80 expone los siguientes conectores e indicadores:
Elemento Descripcion
6-pin Debug Header Situado en el borde de la placa. Proporciona acceso SWD (Serial Wire Debug) al RP2350, lineas BOOTSEL y Reset para la programacion inicial, y Reset para el ESP32. Consulte Debug Header Pinout a continuacion.
USB Port (Mini-B) Conectividad USB para programacion de firmware via almacenamiento masivo USB (flash inicial) y para puente USB-UART al ESP32. En revisiones de placa v2.3a y posteriores, un segundo puerto USB dedicado para el ESP32 tambien puede estar presente.
SD Card Slot Ranura para tarjeta SD de tamano completo gestionada por el ESP32. Contiene config.json, imagenes ROM, imagenes de disco y arboles de sistema de archivos.

Debug Header Pinout

El conector de 6 pines es la interfaz hardware principal para la programacion inicial y la depuracion a nivel de codigo fuente. Los pines se numeran desde el Pin 1 en el extremo mas cercano al marcador del borde de la placa.
Pin Signal Funcion
1 SWCLK Serial Wire Debug clock (ARM SWD)
2 SWDIO Serial Wire Debug data (ARM SWD)
3 Reset RP2350 Reset activo-bajo para el RP2350. Poner a nivel bajo para reiniciar el RP2350.
4 Reset ESP32 Reset activo-bajo para el ESP32. Poner a nivel bajo para mantener el ESP32 en reset.
5 GND Referencia de tierra
6 BOOTSEL Seleccion de modo de arranque del RP2350. Mantener a nivel bajo durante el encendido/reset para entrar en modo de almacenamiento masivo USB.

NB. Los pines 1, 2 y 5 se utilizan para depuracion SWD (SWCLK, SWDIO, GND). Los pines 3 y 6 se utilizan solo para la programacion inicial. El pin 4 se usa cuando se necesita impedir que el ESP32 arranque durante el inicio del RP2350 (p. ej. durante la programacion inicial del firmware del ESP32).


Primeros Pasos

Siga estos pasos en orden la primera vez que configure una placa picoZ80:
  1. Programar el bootloader del RP2350 via modo de almacenamiento masivo USB (BOOTSEL).
  2. Programar el firmware del ESP32 via esptool.
  3. Preparar una tarjeta SD con config.json y las imagenes ROM/disco necesarias.
  4. Instalar el picoZ80 en el zocalo Z80 de su ordenador anfitrion.
  5. Encender, conectarse a la interfaz web del picoZ80 y configurar segun sea necesario.

Paso 1 — Programar el Bootloader del RP2350

El RP2350 no tiene botones fisicos de BOOTSEL ni Reset. Ambas senales estan disponibles en el conector de depuracion de 6 pines. Para entrar en el bootloader de almacenamiento masivo USB:
  1. No inserte el picoZ80 en un ordenador anfitrion todavia — conectelo a un PC solo mediante cable USB.
  2. Usando un jumper o sonda, mantenga el Pin 6 (BOOTSEL) a nivel bajo.
  3. Aplique alimentacion al puerto USB — el RP2350 comienza a arrancar.
  4. Suelte BOOTSEL inmediatamente despues de que la placa se enumere como dispositivo de almacenamiento masivo USB. (Si mantiene BOOTSEL demasiado tiempo despues del reset, el RP2350 no puede acceder al chip Flash.)
  5. El PC montara una unidad etiquetada como RPI-RP2 (o similar).
  6. Copie Bootloader_<version>.uf2 a la unidad montada. El RP2350 se autoprograma y reinicia automaticamente.
Tras programar el bootloader, todas las actualizaciones posteriores del firmware del RP2350 pueden realizarse de forma inalambrica mediante la pagina web OTA — no necesitara tocar el conector de depuracion de nuevo para actualizaciones normales de firmware.

Paso 2 — Programar el Firmware del ESP32

El firmware del ESP32 se programa usando esptool. En revisiones de placa v2.3a y posteriores, el ESP32 tiene su propio puerto USB y aparece de forma independiente en el PC. En revisiones anteriores (v2.0 – v2.2), se accede al ESP32 a traves del RP2350 actuando como puente USB-UART.
Configure el entorno Python (solo una vez):
python3 -m venv ./venv/
source ./venv/bin/activate
cd $HOME/esptool
Luego programe los cuatro componentes del firmware del ESP32. Ajuste PORT al nodo de dispositivo asignado por su sistema operativo:
PORT=/dev/ttyUSB0       # Linux — ajustar segun sea necesario
# PORT=/dev/tty.usbmodem141403  # macOS

BINPATH=/path/to/esp32/build

python3 ./esptool.py \
  -p ${PORT} -b 115200 \
  --before default_reset --after hard_reset \
  --chip esp32s3 \
  write_flash \
  --flash_mode dio --flash_size 4MB --flash_freq 80m \
  0x0     ${BINPATH}/bootloader.bin \
  0x8000  ${BINPATH}/partition-table.bin \
  0x9000  ${BINPATH}/ota_data_initial.bin \
  0x10000 ${BINPATH}/sd_card.bin

NB. Todas las actualizaciones posteriores del firmware del ESP32 pueden realizarse a traves de la pagina web OTA (ota-esp32.htm) una vez completada la programacion inicial.

Paso 3 — Preparar la Tarjeta SD

La tarjeta SD es el medio de almacenamiento principal para el picoZ80. Contiene el archivo de configuracion, imagenes ROM, imagenes de disco y directorios del sistema de archivos.
Requisitos de formato:
  • Sistema de archivos FAT32.
  • Cualquier capacidad compatible con FAT32 (se recomienda tipicamente hasta 32GB para un formateo fiable).
Archivos minimos requeridos:
  • config.json en la raiz de la tarjeta SD — el archivo de configuracion principal. Consulte Configuracion Basica para un ejemplo minimo.
  • Directorio webfs/ — los recursos de la interfaz web del ESP32. Copie el contenido del directorio webfs/ del repositorio del proyecto a la raiz de la tarjeta SD.
Directorios opcionales pero recomendados:
Directorio Contenido
MZF/ Archivos de programa en formato MZF para carga mediante el sistema de archivos
ROM/ Imagenes ROM referenciadas por config.json
DSK/ Imagenes de disquete (formato DSK) para emulacion WD1773
QD/ Imagenes QuickDisk para emulacion de QuickDisk
TZFS/ Arboles del TranZPUter Filing System
RFS/ Arboles de programas del ROM Filing System
La tarjeta SD puede gestionarse completamente a traves del Gestor de Archivos web una vez que el picoZ80 esta en funcionamiento — puede subir imagenes ROM, editar `config.json` y crear directorios desde el navegador sin necesidad de extraer fisicamente la tarjeta.

Paso 4 — Instalar en el Ordenador Anfitrion

La seguridad primero: Apague siempre y desenchufe el ordenador anfitrion antes de instalar o retirar el picoZ80. La placa opera internamente a 3,3V; los pines DIP-40 se conectan al bus de 5V del anfitrion a traves de circuitos de interfaz apropiados, pero la placa nunca debe insertarse ni retirarse mientras esta alimentada.
Procedimiento de instalacion:
  1. Apague el ordenador anfitrion y descargue cualquier electricidad estatica.
  2. Retire el chip Z80 CPU existente de su zocalo DIP-40. Se recomienda una herramienta extractora de chips para evitar doblar los pines.
  3. Inserte la tarjeta SD en la ranura de tarjeta SD del picoZ80.
  4. Alinee el picoZ80 con el zocalo Z80, asegurandose de que el Pin 1 del picoZ80 (marcado con un punto o muesca) se alinee con el Pin 1 del zocalo (tambien marcado, y tipicamente adyacente a la muesca en la serigrafia del contorno del CI).
  5. Presione el picoZ80 suave y uniformemente en el zocalo. Asegurese de que los 40 pines estan asentados. No fuerce — si siente resistencia, retire y verifique la alineacion de los pines.
  6. Encienda el ordenador anfitrion.
En el primer encendido tras una instalacion de firmware nueva, el ESP32 arrancara en modo Punto de Acceso, emitiendo una red WiFi llamada picoZ80. Conectese a esta red para acceder a la interfaz web y completar la configuracion WiFi inicial.

NB. El picoZ80 se alimenta del suministro de 5V en el pin VCC del zocalo Z80. El convertidor buck integrado suministra 3,3V a todos los componentes de la placa. Asegurese de que la fuente de 5V de su ordenador anfitrion pueda entregar al menos 500mA — el picoZ80 puede consumir hasta 400mA bajo carga maxima (RP2350 a 300MHz con WiFi activo).


Configuracion WiFi

La conectividad WiFi requiere que la red de adaptacion de antena este poblada en la PCB y que el firmware del ESP32 este compilado con WiFi habilitado. Consulte el Aviso Regulatorio a continuacion. Si utiliza firmware solo NCM, omita esta seccion y use la conexion USB NCM en su lugar.
El coprocesador ESP32 del picoZ80 proporciona conectividad WiFi. En el primer arranque (o cuando no se han guardado credenciales WiFi) el ESP32 arranca en modo Punto de Acceso (AP) para que pueda conectarse desde cualquier dispositivo con navegador y configurar los ajustes de su red domestica.

Conexion en Modo Punto de Acceso

  1. En su telefono, tableta u ordenador portatil, abra los ajustes WiFi y busque una red llamada picoZ80 (o segun lo configurado en el campo esp32.wifi.ssid de su config.json cuando esta en modo AP).
  2. Conectese a la red picoZ80. La contrasena AP por defecto es pZ80pZ80 (consulte las notas de version de su firmware si esto ha cambiado).
  3. Abra un navegador y navegue a http://192.168.4.1 — esta es la direccion IP por defecto en modo AP. Aparecera la interfaz web del picoZ80.
  4. Navegue a la pagina del WiFi Manager para introducir el SSID y la contrasena de su red domestica.
  5. Haga clic en Save & Connect. El ESP32 se reiniciara y se conectara a su red domestica como cliente.

Modo Cliente (Station)

Una vez configurado en modo cliente, el ESP32 se une a su red WiFi domestica y es accesible en la direccion IP mostrada en la pagina del Panel de Control. Si configuro una IP fija en `config.json` (recomendado para facilitar el acceso), navegue directamente a:
http://192.168.1.192
Sustituya la direccion IP que configuro. Si esta usando DHCP, busque la direccion asignada en la lista de clientes DHCP de su router.
La interfaz web se ejecuta completamente en su navegador. No se requiere software adicional. El servidor web del picoZ80 funciona en el puerto 80.

Conexion USB NCM (Sin WiFi Necesario)
Si la placa esta compilada con el firmware NCM (sdkconfig.mode_ncm_only o sdkconfig.mode_wifi_and_ncm), un adaptador Ethernet virtual aparece en el ordenador anfitrion cuando se conecta el puerto USB del ESP32. El servidor DHCP integrado del picoZ80 asigna automaticamente una direccion IP al anfitrion — no se necesita configuracion de red manual.
  1. Conecte un cable USB desde el ordenador anfitrion al puerto USB del ESP32 en el picoZ80.
  2. Espere unos segundos para que el sistema operativo del anfitrion detecte el nuevo adaptador de red.
  3. Abra un navegador web y navegue a http://192.168.7.1.
  4. Deberia aparecer la pagina del Panel de Control del picoZ80.
Este modo proporciona acceso completo a todas las funciones de la interfaz web: edicion de configuracion, actualizaciones de firmware, gestion de archivos y seleccion de personalidad. No se requieren componentes de antena ni radio WiFi.

Interfaz Web

La interfaz web del picoZ80 es una aplicacion Bootstrap 4 de ocho paginas servida por el ESP32. Todas las paginas — incluyendo el nuevo editor de configuracion GUI — son accesibles desde la barra de navegacion en la parte superior de cada pagina. Los recursos web se almacenan en el directorio webfs/ de la tarjeta SD y pueden actualizarse de forma independiente al firmware.

Panel de Control (index.htm)

El Panel de Control es la pagina principal de la interfaz web. Muestra informacion del sistema en tiempo real y proporciona una vision general rapida del estado del picoZ80.
La informacion mostrada en el Panel de Control incluye:
  • Firmware Version — la version del firmware del RP2350 actualmente en ejecucion y la fecha de compilacion.
  • ESP32 Version — la version del firmware del coprocesador ESP32.
  • Active Partition — cual de las dos ranuras de firmware (1 o 2) esta actualmente activa.
  • Active Persona — la personalidad de maquina actualmente cargada (p. ej. MZ-700, MZ-80A).
  • RP2350 Clock — frecuencia actual de la CPU en MHz.
  • PSRAM Clock — frecuencia actual del reloj SPI de la PSRAM.
  • WiFi Status / Network Status — en modos WiFi: modo (AP o cliente), SSID y direccion IP asignada. En modo solo NCM: este panel se titula Network Configuration y muestra el estado de la red USB NCM (direccion IP, mascara de red) — no hay campos relacionados con WiFi.
  • WiFi RSSI (solo modos WiFi) — indicador de intensidad de senal recibida en tiempo real (dBm) que se actualiza automaticamente cada tres segundos. Codificado por color: verde (≥ -50 dBm, excelente), azul (≥ -70 dBm, bueno), naranja (≥ -80 dBm, regular), o rojo (< -80 dBm, deficiente). No se muestra en modo solo NCM.
  • WiFi TX Power (solo modos WiFi) — potencia de transmision actual en dBm, tambien actualizada en tiempo real. No se muestra en modo solo NCM.
  • SD Card — si hay una tarjeta SD presente y el estado de montaje del sistema de archivos.
  • Uptime — tiempo desde el ultimo reinicio.
El Panel de Control tambien proporciona botones para reiniciar el RP2350 y para activar una recarga de configuracion desde la tarjeta SD sin un reinicio completo.
Dos menus desplegables en la esquina superior derecha de la barra de navegacion estan disponibles en cada pagina:
  • Menu Actions
    - Change Floppy Disk 1 / 2 — seleccionar un nuevo archivo de imagen DSK de la tarjeta SD y montarlo en la ranura 1 o 2 del controlador de disquete virtual WD1773 sin reiniciar. El nombre del archivo de imagen de disco actualmente cargado se muestra junto a cada entrada (o "none" si no hay imagen cargada). Cuando el controlador de disquete activo soporta mas de dos unidades, tambien aparecen Change Floppy Disk 3 y 4 (de lo contrario permanecen ocultas).
    - Change QD Disk — intercambiar el archivo de imagen QuickDisk activo al vuelo. El nombre del archivo de imagen QD actualmente cargado se muestra junto a la entrada.
    - Reload RP2350 Config — enviar un comando de recarga al RP2350 a traves del UART ESP32–RP2350; el RP2350 reanaliza config.json y reaplicala configuracion del mapa de memoria y controladores sin un ciclo completo de apagado y encendido.
  • Menu Reboot
    - ESP32 — reinicio suave del coprocesador ESP32 (reinicia el servidor web y la pila WiFi, el RP2350 no se ve afectado).
    - RP2350B — reiniciar el procesador RP2350 (re-ejecuta el bootloader y recarga la ranura de firmware activa, la CPU del anfitrion se pausa durante el reinicio).
    - Host — activar la linea de reset del ordenador anfitrion, reiniciando el ordenador vintage en el zocalo Z80 sin afectar a la propia placa picoZ80.
    - IPL Reset — realizar un reinicio IPL (Initial Program Load) conmutando el bit 3 del Puerto C del 8255 PPI, devolviendo la maquina al modo de arranque (BST). Disponible en las personalidades MZ-80B, MZ-2000, MZ-2200 y MZ-2500 — equivalente a pulsar el boton IPL en el hardware original.
    - RP2350 UF2 Boot / RP2350 UF2 Boot (App) — reiniciar el RP2350 en su bootloader USB (BOOTSEL) para poder arrastrar y soltar un firmware .uf2 sobre la unidad montada. La variante simple entra en el bootloader directamente; la variante (App) vuelve a entrar en el desde la ranura de aplicacion en ejecucion.

Editor de Configuracion (config.htm)

La pagina del Editor de Configuracion proporciona un editor en el navegador para el archivo config.json almacenado en la tarjeta SD. El editor incluye resaltado de sintaxis y validacion basica de JSON.
Para editar la configuracion:
  1. Navegue a la pagina del Editor de Configuracion.
  2. El config.json actual se carga en el editor automaticamente.
  3. Realice sus cambios. El editor resaltara los errores de sintaxis en rojo.
  4. Haga clic en Save para escribir el archivo actualizado de vuelta a la tarjeta SD.
  5. Haga clic en Apply (o reinicie) para aplicar la nueva configuracion. El RP2350 lee la configuracion al arrancar, la minifica y la almacena en Flash — los arranques posteriores usan la copia en Flash si no hay tarjeta SD presente.
Los cambios en el mapa de memoria, imagenes ROM y mapa de E/S surten efecto en el siguiente reinicio del RP2350. Los cambios en los ajustes WiFi del bloque esp32.wifi surten efecto en el siguiente reinicio del ESP32.

NB. El Editor de Configuracion opera directamente sobre el archivo de la tarjeta SD. Es buena practica mantener una copia de seguridad de un config.json funcional en su PC antes de realizar cambios significativos.

Configuracion GUI (configgui.htm)

La pagina de Configuracion GUI proporciona una alternativa grafica al Editor de Configuracion JSON en bruto. Todos los ajustes de configuracion se presentan como campos de entrada etiquetados, menus desplegables y tablas editables, organizados en cuatro pestanas:
  • RP2350 Global — ajustes globales de voltaje del nucleo, frecuencia de CPU y frecuencia de PSRAM que se aplican a ambas particiones.
  • Partition 1 / Partition 2 — mapa de memoria por particion (direccion, tamano, tipo, estados de espera, banco, archivo ROM), mapa de puertos E/S (direccion, tamano, tipo, handler), y configuracion de controladores (p. ej. MZ80AFI, RFS, MZ-1E30, Celestite, PCW9512) con controles de activar/desactivar y un boton Add Driver para el conjunto completo de controladores de interfaz disponibles. Cada seccion tiene botones de agregar/eliminar filas. Los ajustes del nucleo tambien incluyen controles de intensidad de conduccion y velocidad de cambio del bus GPIO (addrDrive/addrSlew, dataDrive/dataSlew, ctrlDrive/ctrlSlew) para ajustar las caracteristicas electricas del bus por maquina anfitriona — el valor por defecto es 2mA slew lento (menor EMI).
  • ESP32 — tipo de dispositivo ESP32, controles de interfaz de red (WiFi Enable, NCM Enable, NCM Retries, NCM Retry Period), y configuracion WiFi (SSID, contrasena, direccion IP, mascara de red, modo AP/Cliente, DHCP, TX power). Ademas de los campos WiFi puede establecer la direccion IP NCM y la mascara de red USB, y un nombre de producto USB personalizado — util para distinguir varias placas conectadas al mismo anfitrion.
Haga clic en Save Configuration para escribir los cambios en config.json (la version anterior se respalda) y recargar automaticamente la configuracion del RP2350. Haga clic en Reload para releer el config.json actual de la tarjeta SD, descartando los cambios no guardados. Para edicion avanzada mas alla de lo que expone la GUI, use el Editor de Configuracion para modificar el JSON en bruto directamente.
Ajuste del bus GPIO. Los ajustes del nucleo por particion le permiten ajustar las caracteristicas electricas del bus Z80 de forma independiente para cada uno de los tres grupos del bus — Address, Data y Control. Para cada grupo puede establecer la intensidad de conduccion (2 / 4 / 8 / 12 mA), la velocidad de cambio (lenta = bajo EMI, o rapida), la entrada Schmitt-trigger (on / off) y la resistencia de pull (flotante / arriba / abajo). Una tabla opcional de anulacion por pin le permite anular cualquiera de estos para pines GPIO individuales cuando una maquina anfitriona concreta lo necesita. El valor por defecto es conduccion de 2 mA con cambio lento (menor EMI). Los ajustes del nucleo tambien exponen el valor de refresco Z80: 0 deshabilita el refresco DRAM, 1 emite un refresco en cada busqueda de opcode, y N emite un refresco cada N busquedas — permitiendo equilibrar la actividad de refresco con la temporizacion de los perifericos.
Explorador de archivos. Los campos de ROM e imagen de disco proporcionan un boton Browse que abre un selector de archivos de la tarjeta SD, para que pueda seleccionar un archivo sin escribir su ruta. La ruta elegida se almacena de forma relativa a la raiz de la tarjeta SD.
Puerto de tarjeta serie. Las interfaces serie RS-232C MZ-8BIO3 y MZ-1E24 admiten un parametro port — la direccion base de E/S de la tarjeta (por defecto 0xB0) — que es editable en la fila del controlador.
Serie de controlador y Puerto Base de E/S. El menu desplegable Add Driver ofrece solo los controladores validos para el firmware en ejecucion — la pagina detecta si el firmware es una version Sharp, Amstrad, Tatung u Open (experimentador). Para las tarjetas de interfaz reubicables — MZ-1R12, MZ-1R18, MZ-1R23, MZ-1R37, PIO-3034, MZ-8BIO3, MZ-1E24, MZ-1E05 y Celestite — se muestra un unico campo Base I/O Port, prerrellenado con la base autentica de la tarjeta. Cambielo para mover los puertos de la tarjeta cuando el picoZ80 se usa en una placa de su propio diseno; la GUI escribe el mapeo correcto automaticamente. Cada controlador tambien puede cargar sus propias imagenes de System ROM, que sobrescriben las ROM del anfitrion cuando el controlador esta activado.
Modo demo. Un asistente de presentacion opcional que oculta campos sensibles — SSID y contrasena WiFi, y direcciones IP/gateway — de las paginas web, para que la interfaz pueda mostrarse de forma segura en capturas de pantalla o grabaciones de pantalla sin exponer los detalles de su red.

Gestor de Archivos (filemanager.htm)

El Gestor de Archivos proporciona una vista basada en navegador del contenido de la tarjeta SD. Puede navegar por directorios, subir nuevos archivos (imagenes ROM, imagenes de disco, archivos de programa MZF), descargar archivos existentes a su PC, crear nuevos directorios y eliminar archivos y directorios.
Tareas comunes en el Gestor de Archivos:
  • Subir una imagen ROM — navegue al directorio ROM/ y use el boton Upload para transferir el archivo ROM desde su PC.
  • Subir una imagen de disco — navegue a DSK/ (disquete) o QD/ (QuickDisk) y suba el archivo de imagen. Una vez cargado, el nombre del archivo de imagen de disco actual se muestra en el menu Actions junto a cada ranura de disquete y QD para referencia rapida.
  • Subir programas MZF — navegue a MZF/ o al directorio del sistema de archivos correspondiente y suba sus archivos MZF.
  • Respaldar config.json — haga clic en el icono de descarga junto a config.json para guardar una copia en su PC.
  • Respaldar Tarjeta SD — haga clic en el boton Backup SD para descargar todo el contenido de la tarjeta SD como un unico archivo comprimido a su ordenador local. Esto es particularmente util cuando el picoZ80 esta instalado dentro de un ordenador anfitrion y extraer fisicamente la tarjeta SD no es practico. La copia de seguridad captura todos los archivos de configuracion, imagenes ROM, imagenes de disco y datos del sistema de archivos en una sola operacion.
Las operaciones de archivo se realizan directamente en la tarjeta SD a traves del ESP32. Las subidas de archivos grandes pueden tardar unos segundos dependiendo del tamano del archivo y la calidad de la senal WiFi.

Seleccion de Personalidad (personality.htm)

La pagina de Seleccion de Personalidad le permite elegir que personalidad de maquina (persona) presenta el picoZ80 al ordenador anfitrion. Diferentes personalidades cargan diferentes mapas de memoria, imagenes ROM y vinculaciones de controladores virtuales desde la configuracion.
Personalidades actualmente soportadas:
  • MZ-700 — personalidad MZ-700 completa con conmutacion de bancos, video virtual, E/S de teclado, emulacion de disquete WD1773, emulacion de QuickDisk y ROM Filing System. Incluye CP/M v2.23 (48K), SA-1510 BASIC y Microsoft BASIC v4.7, todos con acceso de lectura/escritura a tarjeta SD.
  • MZ-80K — personalidad Sharp MZ-80K con monitor SP-1002, 8255 PPI, 8253 PIT y teclado LS367. Hay dos interfaces de disquete disponibles: la nativa MZ80FIO (Toshiba T3444M) — la interfaz de disco MZ-80FD original, que arranca y lee todos los discos del MZ-80K (juegos, aplicaciones, BASIC y CP/M); y la tarjeta MZ80AFI (el FDC del MZ-80A) — usada para CP/M, que puede arrancar CP/M del MZ-80K y leer discos CP/M originales del MZ-80K desde dentro de CP/M como las unidades C:/D:. La personalidad puede ademas vincular las demas tarjetas de interfaz del MZ-80A (RFS, MZ-1E14/E19, MZ-1R12/R18/R37, PIO-3034). CP/M requiere el modo de personalidad virtual.
  • MZ-80A — personalidad MZ-80A (en desarrollo).
  • MZ-80B — personalidad MZ-80B (en desarrollo).
  • MZ-800 — personalidad Sharp MZ-800 — maquina de doble modo que funciona en modo de compatibilidad MZ-700 o en modo nativo MZ-800 (graficos 320×200 / 640×200, paleta de 4/16 colores mediante el GDG), sonido PSG SN76489, disquete WD1773 y QuickDisk. Cambia de modo al vuelo. Puede vincular el conjunto completo de tarjetas de interfaz del MZ-80A/MZ-700 mas las tarjetas serie RS-232C MZ-8BIO3 / MZ-1E24.
  • PCW-9512 — personalidad Amstrad PCW-9512 con gate array, uPD765 FDC, 512KB de RAM paginada y controlador de impresora de margarita.
  • Basic CPU — un Z80 puro en el zocalo sin controladores especificos de maquina, para un reemplazo directo simple o desarrollo Z80 generico.
  • OpenZ80 — la personalidad de experimentador para una placa de su propio diseno o una maquina no soportada (vease Otras Maquinas). A diferencia de las personalidades anteriores, es una version de firmware dedicada en lugar de una seleccion en esta pagina: programe el firmware OpenZ80 en una particion usando las paginas de Actualizaciones de Firmware, luego agregue sus tarjetas de interfaz y establezca sus puertos base de E/S en la pagina de Configuracion GUI.
Cambiar de personalidad modifica el mapa de memoria activo y las imagenes ROM cargadas sin reiniciar el anfitrion. El picoZ80 reinicializa su gestion de bancos de memoria a la configuracion de la nueva personalidad y el anfitrion ve el nuevo esquema de memoria en la siguiente transaccion del bus Z80.

Actualizaciones de Firmware (OTA)

El firmware tanto del RP2350 como del ESP32 puede actualizarse de forma inalambrica (OTA) desde la interfaz web sin ningun acceso fisico al conector de depuracion.

Actualizacion OTA del RP2350 (ota-rp2350.htm)
  1. Compile el firmware del RP2350 usando los scripts de compilacion — el binario de salida estara en fw/bin/ con un nombre de archivo con sello de version (p. ej. BaseZ80_v3.009.bin).
  2. Navegue a http://<device-ip>/ota-rp2350.htm.
  3. Seleccione a que ranura de particion actualizar (Slot 1 o Slot 2). La ranura actualmente activa se muestra en el Panel de Control — es buena practica actualizar la ranura inactiva para que el firmware existente permanezca disponible si la actualizacion falla. Hay dos casillas opcionales disponibles: Clear App Config borra las imagenes ROM y los datos de configuracion de la ranura destino, y Clear Flash Header restablece la tabla de particiones a los valores de fabrica — use estas opciones al actualizar a una version de firmware con un esquema de configuracion incompatible.
  4. Haga clic en Choose File, seleccione el archivo .bin, luego haga clic en Upload.
  5. Espere a que se completen la subida y la verificacion. La pagina confirmara el exito y mostrara la nueva particion como disponible.
  6. Para activar el nuevo firmware, navegue a la seccion de seleccion de particion de la misma pagina, elija la ranura recien actualizada y haga clic en Set Active & Reboot. El RP2350 se reinicia con el nuevo firmware.
Las particiones de aplicacion usan formato binario puro (no UF2) porque residen en direcciones Flash no estandar. El bootloader verifica la suma de comprobacion de la imagen antes de activar la nueva particion — si la verificacion falla, la ranura activa existente permanece en uso.

Actualizacion OTA del ESP32 (ota-esp32.htm)
  1. Compile el firmware del ESP32 — el binario de salida es esp32/build/tzpuPico_esp32.bin.
  2. Navegue a http://<device-ip>/ota-esp32.htm.
  3. Haga clic en Choose File, seleccione el archivo .bin, luego haga clic en Upload.
  4. El ESP32 se reinicia automaticamente con el nuevo firmware tras una subida exitosa.
La pagina OTA tambien acepta un archivo FilePack para actualizar los recursos de la interfaz web almacenados en el directorio webfs/ de la tarjeta SD. Esto permite actualizar la interfaz web de forma independiente al binario del firmware del ESP32.

WiFi Manager (wifimanager.htm)

Nota: La pagina WiFi Manager solo esta disponible cuando el firmware del ESP32 esta compilado con WiFi habilitado (sdkconfig.mode_wifi_only o sdkconfig.mode_wifi_and_ncm). En modo solo NCM esta pagina no esta presente — la conectividad de red se proporciona automaticamente via USB NCM sin necesidad de configuracion por parte del usuario.
La pagina WiFi Manager configura los ajustes de red inalambrica del ESP32. Los cambios realizados aqui se persisten en el NVS (almacenamiento no volatil) del ESP32 y surten efecto en el siguiente reinicio.
Ajustes disponibles:
  • WiFi ModeAccess Point (el picoZ80 crea su propia red) o Client (el picoZ80 se une a una red existente).
  • SSID — el nombre de la red a crear (modo AP) o a la que unirse (modo cliente).
  • Password — la frase de contrasena WiFi.
  • IP Address / Netmask / Gateway — ajustes de IP fija para modo cliente (recomendado para acceso consistente).
  • DHCP — habilitar para obtener una direccion de su router automaticamente; deshabilitar para usar los ajustes de IP fija anteriores.
  • TX Power — potencia de transmision WiFi en unidades de 0,25 dBm (rango 8–84, es decir 2–21 dBm). Configurar a 0 para usar el valor por defecto especifico de la region. La PCB del picoZ80 esta disenada para una emision minima de RF, asi que cuando la placa esta instalada dentro de una carcasa metalica de ordenador, la senal al router puede ser debil. Aumentar TX Power puede mejorar la conectividad a expensas de un consumo ligeramente mayor; disminuirla puede reducir interferencias en entornos con muchos dispositivos WiFi. El RSSI actual y la TX Power efectiva se muestran en el Panel de Control y en esta pagina, actualizados en tiempo real cada tres segundos.
Despues de guardar, haga clic en Reboot ESP32 para aplicar los nuevos ajustes. El ESP32 se reiniciara y se conectara usando la nueva configuracion. Si la conexion en modo cliente falla (SSID o contrasena incorrectos), el ESP32 volvera al modo Punto de Acceso tras un tiempo de espera, permitiendole reconectarse y corregir los ajustes.

Configuracion Basica

Todo el comportamiento del picoZ80 se controla mediante config.json en la tarjeta SD. Lo siguiente es una configuracion minima funcional para un Sharp MZ-700. Consulte la Guia Tecnica — Referencia de Configuracion para una descripcion completa de todas las opciones.
{
  "esp32": {
    "core": {
      "device": "Z80",
      "mode":   0
    },
    "wifi": {
      "override":  1,
      "wifimode":  "client",
      "ssid":      "YourNetwork",
      "password":  "YourPassword",
      "ip":        "192.168.1.192",
      "netmask":   "255.255.255.0",
      "gateway":   "192.168.1.1",
      "dhcp":      0,
      "webfs":     "webfs",
      "persist":   0
    }
  },
  "rp2350": {
    "core": {
      "cpufreq":   300000000,
      "psramfreq": 133000000,
      "voltage":   1.10
    },
    "z80": [
      {
        "memory": [
          {
            "enable":   1,
            "addr":     "0x0000",
            "size":     "0x1000",
            "type":     "ROM",
            "bank":     0,
            "tcycwait": 0,
            "tcycsync": 0,
            "task":     "",
            "file":     "/ROM/mz700.rom",
            "fileofs":  0
          },
          {
            "enable":   1,
            "addr":     "0x1000",
            "size":     "0xCFFF",
            "type":     "RAM",
            "bank":     0,
            "tcycwait": 0,
            "tcycsync": 0,
            "task":     "",
            "file":     "",
            "fileofs":  0
          },
          {
            "enable":   1,
            "addr":     "0xD000",
            "size":     "0x3000",
            "type":     "PHYSICAL_VRAM",
            "bank":     0,
            "tcycwait": 2,
            "tcycsync": 1,
            "task":     "",
            "file":     "",
            "fileofs":  0
          }
        ],
        "io":      [],
        "drivers": []
      }
    ]
  }
}
Este ejemplo mapea:
  • 0x0000 – 0x0FFF — 4KB de ROM cargada desde /ROM/mz700.rom en la tarjeta SD al banco 0 de PSRAM.
  • 0x1000 – 0xCFFF — 48KB de RAM en el banco 0 de PSRAM (lectura/escritura, cero estados de espera).
  • 0xD000 – 0xFFFF — 12KB pasados al hardware fisico del anfitrion (VRAM y registros de E/S), con 2 estados de espera y sincronizacion T1 habilitada.

Configuracion del Servidor de Archivos en Red

El picoZ80 puede cargar, guardar y listar programas BASIC a traves de la red usando el prefijo de dispositivo NETx: en Sharp MZ BASIC. Esto requiere tres componentes: la interfaz virtual Celestite (configurada en el JSON de la personalidad), el picoZ80 conectado a la misma red que el PC (via WiFi o USB NCM) y el servidor de archivos Python netfs.py ejecutandose en el PC.

Prerrequisitos
  • Python 3.6 o posterior instalado en el PC.
  • La personalidad del picoZ80 debe incluir la interfaz Celestite en su configuracion de controladores de config.json.
  • La interfaz Celestite debe tener el parametro ip configurado con la direccion IP del PC y el puerto de netfs.py en config.json.
  • El picoZ80 y el PC deben estar en la misma red (modo cliente WiFi o USB NCM).
  • Un directorio en el PC que contenga archivos de programa MZF para servir.

Iniciar el Servidor de Archivos
El servidor de archivos se encuentra en tools/NetFileServer/netfs.py en el repositorio del picoZ80. Inicielo desde un terminal:
# Servir archivos desde el directorio actual en el puerto predeterminado 6800:
python3 netfs.py --dir ./mzf_files

# Servir archivos en un puerto personalizado con multiples directorios de unidad:
python3 netfs.py --port 6800 --dir ./games --dir2 ./utilities --dir3 ./basic_programs

# Cada --dirN se asigna a NETx: en BASIC (--dir = NET1:, --dir2 = NET2:, etc.)
El servidor soporta unidades 1–7 (NET1: a NET7:), cada una mapeada a un directorio separado en el PC. Escucha conexiones TCP en el puerto 6800 (configurable con --port). El servidor es multi-hilo y gestiona el analisis de cabeceras MZF automaticamente.
Formatos de archivo soportados: .mzf, .mzt, .m12 (formato de cinta Sharp MZ con cabecera de 128 bytes), y archivos binarios sin formato (.bin, .rom, .dat).

Uso de NETx: en BASIC
Una vez que el servidor de archivos esta en ejecucion en el PC, use el prefijo de dispositivo NETx: en los comandos BASIC. El controlador W5100 Celestite del picoZ80 se conecta al PC automaticamente:
DIR NET1:                  Listar archivos en la unidad de red 1 (directorio del PC)
LOAD "NET1:MYPROG"         Cargar un programa desde el PC
SAVE "NET1:MYPROG"         Guardar un programa en el PC
LOAD "NET3:GAME"           Cargar desde la unidad 3 (asignada a --dir3)
Solucion de Problemas: Si la conexion falla, verifique que la direccion IP del picoZ80 puede alcanzar el PC (compruebe la pagina de estado del Panel de Control para la IP asignada), asegurese de que ningun firewall esta bloqueando el puerto 6800, y confirme que el servidor de archivos esta en ejecucion. El servidor imprime informacion de conexion en el terminal cuando un cliente se conecta.

Controladores e Interfaces

El picoZ80 utiliza una arquitectura de controladores modular. Cada maquina anfitriona se implementa como un controlador de personalidad que define el mapa de memoria, los handlers de E/S y los perifericos soportados. El hardware de expansion se implementa como controladores de interfaz que se conectan a una personalidad. Todos los controladores se configuran via JSON en config.json en la tarjeta SD. Los controladores de personalidad se agrupan por fabricante a continuacion.

Sharp MZ / X1 Series

Las maquinas de las series Sharp MZ y X1 son los objetivos principales del proyecto picoZ80. Cada modelo de maquina tiene un controlador de personalidad dedicado con soporte para su conjunto especifico de perifericos.

Controladores de Personalidad de Maquina
Cada controlador de personalidad emula un ordenador Sharp MZ completo. La personalidad se selecciona mediante la pagina web de Seleccion de Personalidad o editando el campo "name" en el array "drivers" de config.json.
Persona Driver Descripcion
MZ-700 MZ700 Sharp MZ-700 con memoria conmutada por bancos, VRAM, E/S de teclado, 8253 PIT. La personalidad por defecto.
MZ-1500 MZ1500 Superset del MZ-700 con Quick Disk integrado, PCG, PSG estereo (SN76489AN), impresora Z80 PIO.
MZ-80K MZ80K Sharp MZ-80K con monitor SP-1002, 8253 PIT, 8255 PPI, teclado LS367, disquete nativo MZ-80FD (T3444M) y MEMSW para CP/M. Puede usar el conjunto completo de tarjetas de interfaz del MZ-80A. CP/M requiere modo virtual.
MZ-800 MZ800 Sharp MZ-800. Doble modo (compatible MZ-700 + graficos GDG nativos de 320/640 de ancho, 4/16 colores), PSG SN76489, FDC WD1773 + QuickDisk. Ejecuta software MZ-700 y CP/M.
MZ-80A MZ80A Sharp MZ-80A con monitor SA-1510, 8253 PIT, 8255 PPI, MEMSW para CP/M.
MZ-2000 MZ2000 Sharp MZ-2000 con ROM IPL, conmutacion de modo BST/NST, overlay de VRAM, MB8866 FDC.
MZ-2200 MZ2200 Sharp MZ-2200, variante del MZ-2000 con la misma arquitectura.
MZ-80B MZ80B Sharp MZ-80B. ROM IPL de 2K, modos BST/NST, monocromo con doble pagina GRPH, 8253 PIT, 8255 PPI, Z80 PIO.
MZ-2500 MZ2500 Sharp MZ-2500 (SuperMZ). MMU de 8 paginas, modos de compatibilidad MZ-2000/MZ-80B, YM2203 FM+PSG, G-CRTC, MB8876 FDC. El modo virtual soporta software controlado por interrupciones, formato de disco nativo D88 y supresion de interrupciones de un solo disparo.

Controladores de Interfaz
Los controladores de interfaz se agregan a una personalidad mediante el array "if" en la configuracion JSON del controlador. Cada interfaz puede habilitarse o deshabilitarse de forma independiente y tiene su propia configuracion de ROM, imagen de disco y E/S.
Interfaz JSON Name I/O Ports Descripcion
ROM Filing System RFS 0x51–0x53, 0xC1–0xC8, 0xEFF8–0xEFFF Monitor mejorado con almacenamiento en tarjeta SD, arranque CP/M, gestion de bancos ROM.
TranZPUter Filing System TZFS 0x60 (modos de memoria), 0x68 (procesador de servicio) Monitor multibanco + sistema de archivos CP/M para la personalidad MZ-700 (mutuamente excluyente con RFS). Arranca CP/M; las imagenes de unidad se establecen por unidad mediante los campos file de param.
Floppy Controller (MZ-700) MZ-1E05 0xD8–0xDE FDC basado en WD1773. Hasta 4 unidades. Imagenes DSK/RAW/D88.
Floppy Controller (MZ-80K) MZ80FIO 0xF8–0xFB, 0xF000–0xF3FF Interfaz nativa MZ-80FD/MZ-80FIO que controla un FDC Toshiba T3444M. Sectores FM de 128 bytes, hasta 4 unidades, imagenes DSK extendidas CPC.
Floppy Controller (MZ-80A) MZ80AFI 0xD8–0xDE, 0xF3FE–0xF3FF MZ-80A AFI con conmutacion A10 basada en DRQ para operacion a 2 MHz.
Floppy Controller (MZ-2000) MZ-8BFI o E0054PA 0xD8–0xDE MB8866 FDC sin ROM de controlador (codigo en IPL). Soporte D88.
QuickDisk (con ROM) MZ-1E14 0xF4–0xF7 Controlador QD con BIOS ROM para MZ-700/MZ-800.
QuickDisk (sin ROM) MZ-1E19 0xF4–0xF7 Controlador QD para MZ-800/MZ-2000/MZ-2200/MZ-2500.
32KB Battery RAM MZ-1R12 0xF8–0xFA SRAM CMOS con respaldo de bateria, persistida en tarjeta SD. Hasta 2 instancias.
64KB RAM Board MZ-1R18 0xEA–0xEB Expansion de RAM utilizada como disco RAMFILE.
Kanji ROM MZ-1R23 0xB8–0xB9 ROM Kanji de 128KB (16x16 JIS) + ROM de diccionario opcional de 256KB.
640KB EMM MZ-1R37 0xAC–0xAD Expanded Memory Manager con espacio de direcciones de 20 bits.
320KB EMM PIO-3034 configurable IO DATA EMM con puerto de datos de auto-incremento.
Celestite LAN Celestite 0x60–0x6F Ethernet W5100, controlador de interrupciones, UFM, MZ-1R12/MZ-1R37 integrados. IP del servidor configurable via parametro JSON ip.
SASI Hard Disk MZ-1E30 0xA4–0xA5, 0xA8–0xA9 Controlador de disco duro SASI MZ-1E30 (MZ-2500/MZ-80B). Hasta 4 discos (~21,4 MB cada uno). ROM IPL de 32KB. Imagenes de disco en tarjeta SD.
RS-232C Serial (BI) MZ-8BIO3 0xB0–0xB3 (configurable) Tarjeta RS-232C de doble canal (Z80 SIO emulado). Los canales A/B se conectan a los puertos serie USB CDC 2 y 3. Cableado de conector “BI”.
RS-232C Serial (ST) MZ-1E24 0xB0–0xB3 (configurable) Como MZ-8BIO3 pero con cableado de conector Sharp “ST”.

TZFS y CP/M (personalidad MZ-700)
TZFS es un monitor de bajo nivel y sistema de archivos ofrecido como una interfaz seleccionable en la personalidad MZ-700 (en la practica se usa en lugar de RFS — habilite uno u otro). Mas alla del monitor, arranca y ejecuta CP/M. TZFS se distribuye en la configuracion del MZ-700 pero esta desactivado por defecto: habilitelo estableciendo "enable": 1 en el bloque de interfaz TZFS en config.json, o activandolo desde la pagina de Configuracion de la GUI web. Su ROM (roms/tzfs.bin) debe estar presente en la tarjeta SD.
Las imagenes de disco CP/M se configuran por unidad mediante el array param de la interfaz — cada entrada param[].file da la ruta de un archivo de imagen completa en la tarjeta SD para esa unidad. Cuando una unidad no tiene una entrada file explicita, se usa la plantilla de ruta de reserva CPM/SDC16M/RAW/CPMDSK<nn>.RAW. picoZ80 no tiene acceso directo a la SD, por lo que estos sectores se leen y escriben a traves del ESP32.

Compatibilidad Personalidad–Interfaz
No todos los controladores de interfaz estan disponibles para cada personalidad. La tabla a continuacion muestra que interfaces pueden usarse con cada personalidad de maquina mediante el array "if".
Interface MZ-700 MZ-1500 MZ-80K MZ-800 MZ-80A MZ-2000 MZ-2200 MZ-80B MZ-2500
RFS Si Si Si Si Si Si
TZFS Si
MZ-1E05 Si Si Si
MZ80FIO Si Si
MZ80AFI Si Si Si
MZ-8BFI / E0054PA Si Si Si Si Si
MZ-1E14 Si Si Si Si Si Si
MZ-1E19 Si Si Si Si Si Si Si Si
MZ-1R12 Si Si Si Si Si Si Si Si Si
MZ-1R18 Si Si Si Si Si Si Si Si Si
MZ-1R23 Si Si Si Si
MZ-1R37 Si Si Si Si Si
PIO-3034 Si Si Si Si Si
Celestite Si Si Si Si
MZ-1E30 Si Si
MZ-8BIO3 Si Si Si Si
MZ-1E24 Si Si Si Si

Ejemplo de Configuracion JSON
El siguiente ejemplo muestra como configurar una personalidad MZ-700 con RFS, un controlador de disquete y una unidad QuickDisk. Esto se coloca en el array "drivers" dentro del bloque z80 de la particion en config.json:
"drivers": [
  {
    "name": "MZ700",
    "enable": 1,
    "type": "VIRTUAL",
    "if": [
      {
        "name": "RFS",
        "type": "VIRTUAL",
        "enable": 1,
        "rom": [
          {
            "file": "roms/MROM_PICOZ80_256.bin",
            "enable": 1,
            "loadaddr": [
              { "enable": 1, "position": "0x0", "addr": "0x0",
                "bank": 32, "size": "0x80000", "tcycwait": 0, "tcycsync": 0 }
            ]
          },
          {
            "file": "roms/USER_ROM_PICOZ80_256.bin",
            "enable": 1,
            "loadaddr": [
              { "enable": 1, "position": "0x0", "addr": "0x0",
                "bank": 40, "size": "0x80000", "tcycwait": 0, "tcycsync": 0 }
            ]
          }
        ]
      },
      {
        "name": "MZ-1E05",
        "type": "VIRTUAL",
        "enable": 1,
        "param": [
          { "file": "dsk/MZ-2Z009-RFS.dsk", "enable": 1 }
        ]
      },
      {
        "name": "MZ-1E19",
        "type": "VIRTUAL",
        "enable": 1,
        "param": [
          { "file": "qd/BASIC_5Z008A_RFS.qd", "enable": 1 },
          { "file": "qd/BASIC_5Z008B.qd", "enable": 1 }
        ]
      },
      {
        "name": "Celestite",
        "type": "VIRTUAL",
        "enable": 1,
        "param": [
          { "file": "ram/celestite_r12.ram", "enable": 1 },
          { "file": "ram/celestite_r37.ram", "enable": 1 },
          { "ip": "192.168.1.210:6800", "enable": 1 }
        ]
      }
    ]
  }
]
Configuracion de la direccion del servidor de archivos: Agregue una entrada ip al array param de la interfaz Celestite en config.json, especificando la direccion IP del PC y el puerto de netfs.py:
{ "ip": "192.168.1.210:6800", "enable": 1 }
Configuracion del disco duro SASI MZ-1E30: Agregue una interfaz MZ-1E30 al array "if" de la personalidad. La entrada rom proporciona la ROM IPL de 32KB, y las entradas param especifican las imagenes de disco duro (hasta 4):
{
  "name": "MZ-1E30",
  "type": "VIRTUAL",
  "enable": 1,
  "rom": [{ "file": "roms/MZ-1E30.ROM", "enable": 1 }],
  "param": [
    { "file": "hdd/boot.hdd", "enable": 1 },
    { "file": "hdd/data.hdd", "enable": 1 }
  ]
}
Campos JSON clave:
  • name — nombre de la personalidad o interfaz (debe coincidir con un controlador compilado).
  • enable — establecer a 1 para activar, 0 para omitir.
  • type"VIRTUAL" (emulado en PSRAM) o "PHYSICAL" (paso directo al hardware real).
  • rom — array de imagenes ROM a cargar. Cada entrada tiene una ruta file (relativa a la raiz de la tarjeta SD) y un array loadaddr que especifica donde colocar los datos (direccion Z80, banco PSRAM, tamano).
  • param — array de archivos de imagen de disco/RAM. param[0].file es el primer disco, param[1].file el segundo, etc.
  • addrmap — remapeo de direcciones opcional (origen a destino).
  • iomap — remapeo de puertos de E/S opcional.
Todas las rutas de archivo son relativas al directorio raiz de la tarjeta SD (p. ej. "roms/MROM_PICOZ80_256.bin").

Amstrad PCW Series

El picoZ80 soporta el Amstrad PCW-9512 y el Tatung Einstein TC-01 ademas de la serie Sharp MZ.

Controladores de Personalidad de Maquina
Cada controlador de personalidad Amstrad emula una maquina Amstrad completa. La personalidad se selecciona mediante la pagina web de Seleccion de Personalidad o editando el campo "name" en el array "drivers" de config.json.
Persona Driver Descripcion
PCW-9512 PCW9512 Amstrad PCW-9512. Z80A @ 4MHz, 512KB de RAM con paginacion de 4 bancos de 16KB (puertos F0-F3), gate array (ASIC) para video/reloj del sistema/enrutamiento FDC/control de motor, NEC uPD765 FDC con soporte de formato CPC DSK, controlador de impresora de margarita 8041. Modos virtual y fisico soportados.
Einstein TC-01 EinsteinTC01 Tatung Einstein TC-01. Z80A @ 4MHz, 64KB RAM + 8KB ROM conmutable, WD1770 FDC, TMS9129 VDP, AY-3-8910 PSG, Z80 CTC, Z80 PIO. Modos virtual y fisico soportados.
La personalidad PCW-9512 incluye una emulacion completa de la secuencia de arranque: el flujo de bytes del gate array carga el BIOS, que luego carga CP/M desde disco. Los comandos del gate array incluyen fin de arranque, reinicio, enrutamiento de interrupciones FDC (NMI/INT/ignorar), terminal count y motor encendido/apagado.
Creacion de imagenes de disco: El picoZ80 puede crear imagenes de disquetes fisicos cuando se ejecuta con la personalidad PCW-9512. El comando ICE dskimage inyecta codigo Z80 que lee todas las pistas mediante el FDC del anfitrion y guarda el resultado como un archivo CPC DSK en la tarjeta SD. Consulte la Referencia de Comandos ICE para detalles de uso.

Tatung Einstein Series

El picoZ80 soporta el Tatung Einstein TC-01 — un ordenador domestico basado en Z80A con unidad de disquete integrada.
Controladores de Personalidad de Maquina
Cada controlador de personalidad Tatung emula una maquina Tatung completa. La personalidad se selecciona mediante la pagina web de Seleccion de Personalidad o editando el campo "name" en el array "drivers" de config.json.
Persona Driver Descripcion
Einstein TC-01 EinsteinTC01 Tatung Einstein TC-01. Z80A @ 4MHz, 64KB RAM + 8KB ROM conmutable (X-TAL MOS), conmutacion ROM/RAM via puerto 0x24 (cualquier acceso conmuta; las escrituras siempre van a RAM), WD1770 FDC con soporte de disco virtual (40 pistas, 1 cabeza, 10 sectores, 512 bytes — discos de 200KB), TMS9129 VDP (procesador de visualizacion de video) con aplicacion de temporizado entre accesos (~2us de separacion), AY-3-8910 PSG (sonido de 3 canales) en puertos 0x02-0x03, Z80 CTC (4 canales) en puertos 0x28-0x2B, Z80 PIO en puertos 0x30-0x33, interfaz de teclado en puerto 0x20. Creacion de imagenes de disco fisico: lectura de disquete fisico a DSK, escritura de DSK a disquete fisico. Modos virtual y fisico soportados.
Creacion de imagenes de disco: La personalidad Einstein TC-01 soporta la creacion de imagenes de disco fisico mediante el comando ICE dskimage con los subcomandos read y write. dskimage read crea una imagen de un disquete fisico a un archivo DSK en la tarjeta SD, mientras que dskimage write escribe un archivo DSK desde la tarjeta SD a un disquete fisico.

Otras Maquinas

El soporte para maquinas adicionales basadas en Z80 esta planificado. Cada nueva maquina seguira la misma arquitectura de controlador de personalidad — un controlador de personalidad dedicado que implementa el mapa de memoria, E/S y perifericos de la maquina, con controladores de interfaz para hardware de expansion. Consulte el repositorio del proyecto para la lista mas actualizada de maquinas soportadas.
OpenZ80 — para su propia placa o una maquina no soportada. Si esta construyendo su propia placa Z80, o tiene un ordenador Z80 que aun no dispone de una personalidad picoZ80 dedicada, use la version de firmware OpenZ80. Su principal atractivo es que le permite agregar tarjetas de interfaz virtuales tomadas de otras maquinas Sharp, Amstrad y Tatung a su ordenador Z80 a medida o desconocido, de modo que puede escribir nuevo software para esas tarjetas — o adaptar software existente para que funcione en su maquina. OpenZ80 se comporta como un Z80 puro: en modo fisico transfiere todo el espacio de memoria y E/S de 64K a su placa, y en modo virtual presenta una RAM plana de 64K en la que puede cargar sus propias imagenes ROM. Expone solo las tarjetas de interfaz agnosticas de maquina (las tarjetas de memoria MZ-1R12/1R18/1R23/1R37, la tarjeta paralela PIO-3034, las tarjetas serie RS-232C MZ-8BIO3 / MZ-1E24, la interfaz de disquete MZ-1E05 y la placa LAN Celestite), y cada una de estas puede tener su Base I/O Port reubicado para coincidir con su placa en la pagina de Configuracion GUI. Para adaptar una de las maquinas existentes, los desarrolladores pueden tomar cualquiera de los controladores suministrados y el codigo fuente de su ROM monitor / IPL / BIOS (suministrado como ensamblador Z80 en los directorios asm/ de los proyectos RFS y TZFS) como punto de partida — vease la Guia del Desarrollador.

ICE (Shell de Depuracion)

El picoZ80 incluye un shell de depuracion interactivo integrado (ICE — In-Circuit Emulator) para la inspeccion y control en tiempo real de la emulacion de CPU Z80.
El shell de depuracion ICE esta incluido en la variante de firmware DBGSH. Si utiliza el firmware estandar, el shell de depuracion no esta disponible. Programe la variante DBGSH para habilitar la funcionalidad ICE.
Conexion: El shell de depuracion esta disponible en el segundo puerto serie USB. Cuando el picoZ80 esta conectado via USB, aparecen dos puertos serie en el ordenador anfitrion — el primero es la salida estandar del registro de depuracion, el segundo es el shell de depuracion. Abralo con cualquier emulador de terminal a 115200 baudios, 8N1. El prompt dbg> aparece cuando se conecta.
Capacidades principales:
  • Inspeccion de registrosregs muestra todos los registros Z80, flags y conteo de ciclos.
  • Volcado de memoriadm p 0000 100 vuelca 256 bytes desde la direccion 0x0000 via el bus fisico; dm v 0000 100 lee la PSRAM virtual directamente.
  • Breakpointsbp E800 establece un breakpoint en 0xE800. Hasta 8 breakpoints. bl los lista, bc * los elimina todos.
  • Ejecucion paso a pasohold pausa la CPU, luego step ejecuta una instruccion mostrando el estado de los registros antes/despues.
  • Traza de ejecuciontrace on graba cada instruccion ejecutada. trace dump 20 muestra las ultimas 20 con desensamblado.
  • Desensambladodis v E800 20 desensambla 32 instrucciones desde 0xE800.
  • Acceso de E/Sin D8 lee el puerto 0xD8; out D8 03 escribe 0x03 en el puerto 0xD8.
  • Informacion del sistemastatus muestra la frecuencia de la CPU, reloj PSRAM, velocidad de emulacion y tiempo activo. drivers lista los controladores activos.
Escriba help en el prompt para un resumen rapido.

Referencia de Comandos
El conjunto completo de comandos ICE se lista a continuacion. Todos los valores de direccion y datos se introducen en hexadecimal sin prefijo 0x.
Command Parameters Descripcion
help Mostrar un resumen de todos los comandos disponibles.
regs Volcar el conjunto completo de registros Z80: registros principales (AF, BC, DE, HL), registros alternativos (AF’, BC’, DE’, HL’), registros indice (IX, IY), pila y contador de programa (SP, PC), estado de interrupciones (I, R, IM, IFF1, IFF2), flags decodificados (S, Z, H, P/V, N, C), estado de la linea HALT, MEMPTR y el conteo acumulado de ciclos T.
dm <p|f|v|r> <addr> [len] Volcar memoria en hexadecimal y ASCII. Cuatro modos: p (fisico) lee via el bus Z80 activando hardware real; f (fetch) lee usando ciclos de busqueda M1; v (virtual) lee PSRAM directamente sin actividad de bus; r (RP2350) lee el propio espacio de direcciones del microcontrolador (Flash, SRAM, perifericos). addr es la direccion de inicio, len es el numero de bytes (por defecto 256).
search [p|v] <start> <end> <hex..>|"text" Buscar en memoria un patron de bytes o cadena de texto ASCII. p = bus fisico, v = PSRAM virtual, omitir para mapeado (sigue el mapa de memoria). Especifique el patron como bytes hex (p. ej. ED 4D 00) o una cadena ASCII entre comillas (p. ej. "HELLO"). Las coincidencias se muestran con 8 bytes de contexto antes y despues. Pausa automatica de CPU para acceso fisico/mapeado. Longitud de patron hasta 32 bytes.
cmp [f] <phys> <virt> <len> Comparar memoria del bus fisico con PSRAM virtual. El f opcional usa ciclos de busqueda (M1) en lugar de ciclos de lectura. Reporta discrepancias con direcciones y valores.
dis [p|v] [addr] [count] Desensamblar codigo maquina Z80. p lee opcodes del bus fisico, v de la PSRAM virtual (por defecto). addr por defecto es el PC actual. count es el numero de instrucciones (por defecto 16). El PC actual se marca con >.
asm [addr] Entrar al ensamblador interactivo Z80 en addr (por defecto: PC actual). Escriba mnemonicos Z80 uno por linea; los bytes ensamblados se escriben en la PSRAM virtual y la direccion avanza. Soporta directivas db y dw/defw. Introduzca una linea vacia o . para salir.
memmap [block] Mostrar la tabla de punteros de bloques de memoria SRAM. Cada entrada muestra el numero de bloque, rango de direcciones Z80, tipo de memoria (PHYSICAL, RAM, ROM, FUNC), numero de banco y offset PSRAM. Si se proporciona block, mostrar solo ese bloque de 512 bytes.
memptr [addr] Mostrar las tablas memPtr/memioPtr de PSRAM para la direccion dada, mostrando el puntero a la funcion handler y los atributos.
iomap [port] Mostrar la tabla de handlers de puertos E/S. Cada entrada muestra la direccion del puerto, funcion handler y direccion (lectura/escritura/ambos). Si se proporciona port, mostrar solo ese puerto.
status Vision general del estado del sistema: frecuencia de CPU del RP2350, reloj SPI de PSRAM, reloj Z80 del anfitrion, ratio de velocidad de emulacion, SRAM libre y tiempo activo.
ver Mostrar version del firmware, fecha de compilacion, esquema de particiones Flash (direccion, tamano, checksum, flag activo), autor y licencia.
drivers Listar todos los controladores de personalidad de maquina activos y sus sub-interfaces, mostrando el estado de inicializacion.
hold Pausar la emulacion de CPU Z80. El nucleo 1 termina la instruccion actual y deja de buscar. El shell espera a que la pausa sea confirmada antes de retornar. Requerido antes de usar out u otros comandos que modifican el estado en ejecucion.
release Reanudar la emulacion de CPU Z80 desde el punto en que fue pausada. Los breakpoints permanecen activos.
go Continuar la ejecucion (igual que release). Si posteriormente se alcanza un breakpoint, la CPU se pausara automaticamente de nuevo.
cont Alias de go. Continuar la ejecucion desde el punto de pausa actual. Los breakpoints permanecen activos.
step [n] Ejecutar paso a paso una instruccion (o n instrucciones). Para cada paso el shell muestra el estado de los registros antes de la ejecucion, la instruccion desensamblada con bytes hex, y el estado de los registros despues de la ejecucion. La CPU debe estar pausada previamente. Si se alcanza un breakpoint durante pasos multiples, la ejecucion se detiene anticipadamente.
bp <addr> Establecer un breakpoint en la direccion Z80 dada. Hasta 8 breakpoints pueden estar activos simultaneamente. Cuando el PC coincide con una direccion de breakpoint durante la busqueda de opcode, la CPU se pausa automaticamente y se reporta la coincidencia. Las direcciones duplicadas se rechazan.
bc <n|*> Eliminar la ranura de breakpoint n (0–7) o todos los breakpoints (*).
bl Listar todos los breakpoints activos mostrando numero de ranura y direccion.
wm [p|v] <addr> <byte> [byte]... Escribir uno o mas bytes en memoria. p = bus fisico Z80, v = PSRAM virtual, omitir para automatico (sigue el mapa de memoria). Se pueden especificar multiples bytes separados por espacios. Pausa automatica de CPU para escrituras fisicas/mapeadas.
fill [p|v] <addr> <len> [w|d] <val> Rellenar una region de memoria con un valor constante. p = fisico, v = virtual, omitir para automatico. Por defecto 8 bits; w = 16 bits, d = 32 bits (little-endian). Pausa automatica de CPU cuando es necesario.
copy <pv|fp|vp> <src> <len> <dst> Copiar memoria entre fisico y virtual. pv = lectura fisica a virtual, fp = busqueda fisica a virtual, vp = virtual a escritura fisica. Pausa automatica de CPU.
memtest <addr> <len> [pattern] Probar memoria fisica con tres pasadas: escritura+lectura, escritura+busqueda, intercalada. Patron por defecto: bytes ascendentes. Reporta errores por pasada.
in <port> Leer un puerto de E/S Z80. Ejecuta un ciclo real de bus IORQ+RD y muestra el byte leido.
out <port> <byte> Escribir un byte en un puerto de E/S Z80. La CPU debe estar pausada previamente. Ejecuta un ciclo real de bus IORQ+WR.
trace <on|off|dump [n]|clear|rt|byte ...> Controlar la traza de ejecucion. on habilita la grabacion de cada instruccion ejecutada en un buffer circular de 512 entradas (PC, opcode, flags). off deshabilita la grabacion. dump muestra las ultimas n entradas (por defecto: todas) con desensamblado y flags decodificados. clear reinicia el buffer. rt habilita la salida de traza en tiempo real a la consola de depuracion mientras se ejecutan instrucciones. byte habilita la traza a nivel de bytes de transacciones de memoria/E/S.
verify <on|off> Activar/desactivar la verificacion completa de busqueda de opcodes. Cuando esta activada, cada busqueda se verifica contra readPhysicalMem (reduccion del 50% en velocidad). Cuando esta desactivada (por defecto), solo verifica opcodes 0x00/0xFF.
fwait <0-4> Forzar estados de espera adicionales en ciclos M1 (busqueda de opcode). <n> son 0–4 T-estados adicionales (0 = desactivado, por defecto). Util para depurar codigo que se comporta de forma diferente con estados de espera — algunos perifericos o dispositivos de memoria requieren margenes de temporizado especificos. Sin parametro, muestra la configuracion actual.
iowait <0-8> Forzar estados de espera adicionales en ciclos de lectura y escritura de E/S. <n> son 0–8 T-estados adicionales (0 = desactivado, por defecto). Extiende los ciclos de E/S para diagnosticar perifericos con tiempos de respuesta lentos. Sin parametro, muestra la configuracion actual.
corrupt [clear] Mostrar corrupciones de busqueda detectadas (PC, opcode buscado, opcode verificado). clear reinicia el registro.
fdctrace <on|off|dump> Habilitar, deshabilitar o volcar la traza de E/S del FDC. on/off controla la grabacion de accesos a registros del WD1773 FDC en un buffer circular de 64 entradas. dump muestra las ultimas 64 operaciones, mostrando el nombre del registro (Status/Command, Track, Sector, Data, DriveSel, SideSel, DDEN), direccion de lectura o escritura, valor del byte y estado del FDC.
qdtrace <on|off|dump> Habilitar, deshabilitar o volcar la traza de E/S del Quick Disk. on/off controla la grabacion de accesos a registros SIO del QD en un buffer circular de 64 entradas. dump muestra las ultimas 64 operaciones, mostrando puerto, direccion, valor del byte y posicion de la cinta (offset en bytes).
piodbg [clear] Mostrar diagnosticos del hardware PIO del RP2350 para los tres bloques PIO (PIO 0, PIO 1, PIO 2). Muestra flags de error persistentes de FDEBUG (stall, RX underflow, TX overflow), estado FSTAT, niveles de llenado del FIFO, contadores de programa por maquina de estado, mascara de habilitacion de salida GPIO y niveles de pines GPIO. clear reinicia los flags persistentes de FDEBUG. Util para diagnosticar bloqueos de maquinas de estado PIO o contenciones de bus.
load <p|v> <file> <addr> [len] [ofs] Cargar un archivo desde la tarjeta SD del ESP32 a la memoria Z80. p = escribir al bus fisico, v = escribir a PSRAM virtual banco 0. file es relativo a /sdcard/ en el ESP32. addr es la direccion Z80 de inicio. Si se omite len se carga el archivo completo (hasta 64KB); si se especifica, carga esa cantidad de bytes (max 1MB). El ofs opcional es el offset del archivo desde donde comenzar a leer. Pausa automatica de CPU para escrituras fisicas. Usa el banco 63 de PSRAM como buffer temporal.
save <p|pf|v> <file> <addr> <len> Guardar memoria Z80 a un archivo en la tarjeta SD del ESP32. p = leer via bus fisico, pf = leer via busqueda fisica (ciclos M1), v = leer desde PSRAM virtual banco 0. file es relativo a /sdcard/. addr es la direccion Z80 de inicio, len son los bytes a guardar (max 64KB). Pausa automatica de CPU para lecturas fisicas. Realiza refresco periodico de DRAM durante lecturas fisicas.
dir [path] Listar archivos en la tarjeta SD del ESP32. La ruta opcional es relativa a /sdcard/. Muestra nombres de archivo y tamanos.
echo [on|off] Activar/desactivar o establecer el eco de caracteres. Cuando esta activado (por defecto), los caracteres escritos se repiten de vuelta al terminal.
reset Forzar un reinicio inmediato de la CPU Z80. La emulacion se reinicia desde el vector de reset (tipicamente 0x0000).
set <reg|flags|memmap|memptr|iomap> <idx> <val> Modificar un registro Z80, flags, mapa de memoria, memPtr de PSRAM o entrada del mapa de puertos de E/S en tiempo de ejecucion. reg establece un registro Z80, flags establece el registro de flags, memmap/memptr/iomap modifican la configuracion de memoria o E/S. idx es el nombre del registro o indice de la tabla (decimal o hex), val es el nuevo valor. Esto permite parchear en caliente registros y configuracion de memoria/E/S sin recargar config.json.
hist [n] Mostrar el buffer de historial de comandos. Muestra los ultimos n comandos (por defecto: todas las entradas, hasta 16). El historial se preserva entre ciclos de encendido via almacenamiento NVS del ESP32.
savehst Forzar el guardado inmediato del historial de comandos actual al almacenamiento NVS del ESP32. El historial normalmente se guarda automaticamente en el apagado ordenado; este comando fuerza un guardado inmediato.
ipl Realizar un reinicio IPL (modo BST) conmutando el bit 3 del Puerto C del 8255 PPI. Reinicia la maquina al modo de arranque sin un reinicio completo del Z80. Util para maquinas MZ-80B, MZ-2000 y MZ-2500 que distinguen entre modos BST (arranque) y NST (normal).
mmutrace Volcar informacion de traza especifica de la maquina como el estado de la MMU e instantaneas de registros de E/S. La salida varia segun la personalidad — cada controlador registra su propio handler de traza, por lo que la informacion mostrada depende de la personalidad de maquina activa.
intcount Mostrar el conteo de reconocimiento de interrupciones y el estado actual de las interrupciones. Util para depurar software controlado por interrupciones — muestra cuantos ciclos de reconocimiento de interrupciones han ocurrido y si las interrupciones estan actualmente pendientes o habilitadas.
psync [start end] Sincronizar memoria fisica a PSRAM leyendo el bus fisico y escribiendo a memoria virtual. Los parametros opcionales start y end especifican un rango de direcciones; si se omiten, se sincroniza todo el espacio de direcciones. Util para diagnosticos despues de operaciones DMA o cuando la memoria fisica y virtual pueden haber divergido.
dskimage read <filename> [cylinders] [heads] / write <filename> Crear imagen de un disquete fisico a un archivo DSK en la tarjeta SD (read), o escribir un archivo DSK desde la tarjeta SD a un disquete fisico (write). dskimage <filename> por defecto ejecuta read (compatible con versiones anteriores). filename es la ruta del archivo DSK relativa a /sdcard/. Si se omiten cylinders y heads para read, la geometria se autodetecta. La CPU debe estar pausada previamente. Se reporta el progreso durante la creacion de la imagen.
busdiag Mostrar diagnosticos del bus incluyendo estado del PIO, niveles de senal y estado de contencion del bus. Util para diagnosticar problemas electricos con la conexion del bus del anfitrion.
fdcimage Mostrar estado y progreso de la creacion de imagenes FDC.
fdcdiag Mostrar informacion de diagnostico del FDC (estado del controlador, volcado de registros).
gadiag Mostrar informacion de diagnostico del gate array (estado de comandos, enrutamiento de interrupciones).
Flujo de trabajo de depuracion tipico:
  1. Conecte un terminal al segundo puerto serie USB (115200, 8N1).
  2. hold — pausar la CPU.
  3. regs — inspeccionar el estado actual de los registros.
  4. dis v — desensamblar codigo en el PC actual.
  5. bp E800 — establecer un breakpoint.
  6. go — reanudar. La CPU se detendra cuando alcance 0xE800.
  7. step 5 — ejecutar 5 instrucciones paso a paso desde el breakpoint.
  8. dm v D000 80 — inspeccionar el contenido de la VRAM.
  9. trace on / go / trace dump 50 — trazar y revisar el historial de ejecucion.

Solucion de Problemas

El ordenador anfitrion no arranca

  • Verificar orientacion — asegurese de que el Pin 1 del picoZ80 se alinea con el Pin 1 del zocalo. Insertar la placa al reves danara tanto el picoZ80 como el ordenador anfitrion.
  • Verificar asentamiento — retire el picoZ80 y reinsertelo, asegurandose de que los 40 pines estan completamente asentados y ninguno esta doblado debajo de la placa.
  • Verificar la tarjeta SD — si config.json falta o esta malformado, el firmware intentara usar la configuracion Flash previamente almacenada en cache. Si no existe una configuracion valida, el RP2350 no inicializara el mapa de memoria y el anfitrion vera un bus abierto.
  • Confirmar que el firmware esta programado — intente conectar el picoZ80 via USB (sin insertarlo en el anfitrion) y verifique que la placa se enumera en el PC.
  • Verificar la fuente de alimentacion del anfitrion — el picoZ80 puede consumir hasta 400mA del rail de 5V. Algunos ordenadores vintage tienen fuentes de alimentacion marginales; verifique el voltaje del rail de 5V bajo carga con un multimetro.

No se puede conectar a la interfaz web

  • Verificar modo WiFi — en el primer arranque o tras un restablecimiento de fabrica, el ESP32 arranca en modo AP. Conectese primero a la red WiFi picoZ80, luego navegue a http://192.168.4.1.
  • Verificar direccion IP configurada — si el modo cliente esta configurado con una IP fija, verifique que la IP coincide con la subred de su red.
  • Verificar que la tarjeta SD esta presente — los recursos web en webfs/ de la tarjeta SD son necesarios. Sin la tarjeta SD el servidor web no puede servir ninguna pagina.
  • Verificar el directorio webfs — confirme que el directorio webfs/ existe en la tarjeta SD y contiene los archivos HTML/CSS/JS del repositorio del proyecto.
  • Restablecimiento de fabrica WiFi — si las credenciales se han perdido, reprograme el firmware del ESP32 para borrar los ajustes NVS y comenzar de nuevo.

Tarjeta SD no reconocida

  • Asegurese de que la tarjeta SD esta formateada como FAT32. NTFS, exFAT y FAT16 no estan soportados.
  • Pruebe con una tarjeta SD diferente — algunas tarjetas de alta capacidad o alta velocidad pueden tener problemas de compatibilidad con la interfaz SD SPI del ESP32.
  • Las tarjetas de hasta 32GB estan bien soportadas. Las tarjetas muy grandes (>32GB) pueden requerir un formateo especial.
  • Reinserte la tarjeta SD — extraigala y vuelvala a insertar para asegurar un buen contacto.

Las imagenes ROM no cargan

  • Verifique que la ruta del archivo en config.json coincide exactamente con la ubicacion del archivo en la tarjeta SD (las rutas distinguen entre mayusculas y minusculas).
  • Confirme que el archivo de imagen ROM esta presente en la tarjeta SD — use el Gestor de Archivos para navegar a la ubicacion esperada.
  • Verifique el valor de fileofs — un offset incorrecto cargara datos basura en el banco ROM.
  • Verifique que el campo size en la entrada del mapa de memoria no es mayor que el archivo de imagen ROM. Los mapeos sobredimensionados se rellenaran con datos indefinidos.

La placa se reinicia inesperadamente

  • El picoZ80 tiene un temporizador watchdog hardware que reinicia automaticamente el RP2350 si el firmware se bloquea durante el arranque o la operacion normal. Si la placa se reinicia repetidamente, el watchdog se esta activando porque una etapa de arranque no se completa a tiempo.
  • Verificar la tarjeta SD — un config.json faltante o corrupto puede causar que la secuencia de arranque se detenga durante el analisis de configuracion.
  • Verificar los ajustes WiFi — si el ESP32 no puede establecer una conexion, el handshake SPI entre el RP2350 y el ESP32 puede expirar, activando el watchdog.
  • Usar depuracion SWD — conecte una sonda de depuracion e inspeccione los registros scratch del watchdog (watchdog_hw->scratch[5] a scratch[7]). El codigo de progreso de arranque en scratch[6] indica a que etapa llego el firmware antes de que se activara el watchdog, y scratch[0–3] contienen un historial de los ultimos cuatro intentos de reinicio.
  • Verificar el registro persistente — el firmware escribe mensajes criticos de arranque en los ultimos 4KB de PSRAM usando plogf(). Estos mensajes sobreviven al reinicio del watchdog y se vuelcan a la consola de depuracion en el siguiente arranque exitoso, revelando lo que sucedio antes del reinicio.

La actualizacion OTA falla

  • Asegurese de que esta subiendo un archivo .bin (no un .uf2) para actualizaciones OTA del RP2350.
  • Asegurese de que esta subiendo a la ranura inactiva para preservar el firmware funcional.
  • Si la actualizacion OTA falla o resulta en una particion que no arranca, el bootloader mantendra la ranura activa anterior en funcionamiento — repita el proceso de subida.
  • Para fallos en OTA del ESP32, reprograme via esptool usando la conexion USB del conector de depuracion.

Sitios de Referencia

Recurso Enlace
Pagina del proyecto picoZ80 /es/picoz80/
Guia Tecnica picoZ80 /es/picoz80-technicalguide/
Pagina del proyecto pico6502 /es/pico6502/
Hoja de datos RP2350 datasheets.raspberrypi.com
Documentacion Pico SDK raspberrypi.github.io/pico-sdk-doxygen
Referencia Tecnica ESP32-S3 docs.espressif.com
Vista previa del proyecto en X (Twitter) engineerswork1

Aviso Regulatorio FCC / RED

La placa picoZ80 no ha sido presentada para certificacion de radiador intencional FCC (EE.UU.) ni RED (UE). Tal como se entrega, la placa debe tener los componentes de adaptacion de antena WiFi sin poblar y el firmware del ESP32 compilado con la configuracion NCM Only. En este estado no se emite energia de radiofrecuencia y la placa no cae bajo las regulaciones de radiadores intencionales.
Los usuarios finales que deseen usar WiFi pueden poblar la red de adaptacion de antena, compilar la variante de firmware WiFi y operar bajo la exencion de hobbista/experimental aplicable en su jurisdiccion. Cualquier parte que desee vender la placa comercialmente con WiFi habilitado debe obtener primero la certificacion FCC y/o RED para el ensamblaje completo.