pico6502 Guia Tecnica

English

Nota: El proyecto pico6502 esta en fase de desarrollo inicial. Hardware, interfaz de bus PIO, modelo de memoria y sistema de compilacion estan completamente implementados y funcionales. Los drivers de persona de maquina estan en etapa inicial. Esta guia describe la arquitectura tecnica tal como existe hoy.

Vision general

La arquitectura tecnica del pico6502 es identica a la del picoZ80 en todos los aspectos excepto la interfaz de bus CPU. El mismo procesador de doble nucleo RP2350B, el mismo modelo de memoria PSRAM, el mismo layout Flash, el mismo coprocesador ESP32 y el mismo framework de drivers son compartidos entre ambos productos. Esta guia se centra en las diferencias especificas del 6502 y hace referencia a la Guia tecnica del picoZ80 para los temas completamente compartidos.

Arquitectura de hardware

Diagrama de bloques

┌─────────────────────────────────────────────────────────────────────────┐
│                            pico6502 Board (v2.2)                        │
│                                                                         │
│  ┌───────────────┐   PIO 0: A0–A15, D0–D7      ┌───────────────────┐   │
│  │               │◄──────────────────────────►│  DIP-40 Interface │   │
│  │   RP2350B     │   PIO 1: cycle/ctrl/irq     │   (6502 socket)   │   │
│  │  (300 MHz)    │◄──────────────────────────►│  A0–A15, D0–D7   │   │
│  │               │   PIO 2: PHI1/PHI2 clock ──►│  PHI0/RNW/SYNC   │   │
│  │  Core 0       │                             │  IRQ/NMI/RDY/SO  │   │
│  │  (USB/IO/ESP) │                             └───────────────────┘   │
│  │               │◄──QSPI──►[ 8MB PSRAM ]                             │
│  │  Core 1       │◄──SPI───►[ 16MB Flash ]                             │
│  │  (6502 loop)  │                                                     │
│  │               │◄──FSPI──►┌───────────┐                              │
│  │               │◄──UART──►│   ESP32   │◄──SPI──►[ SD Card ]         │
│  └───────────────┘          │  (WiFi)   │──────────[ Web Server ]     │
│                             └───────────┘                              │
│  [ USB Hub ]──USB──►[ RP2350 USB Bridge ]                             │
└─────────────────────────────────────────────────────────────────────────┘

Componentes principales

Componente Referencia Especificacion
Procesador principal RP2350B Doble Cortex-M33, hasta 300 MHz, 512 KB SRAM, 48 GPIO
PSRAM SPI PSRAM 8 MB, interfaz QSPI, hasta 133 MHz
Flash SPI NOR Flash 16 MB, XIP (ejecucion en su lugar)
Coprocesador ESP32-S3 WiFi, tarjeta SD, servidor web, UART 460,8 kbaud hacia RP2350
Tarjeta SD FAT32 Imagenes ROM, imagenes disco, config.json, archivos web
Interfaz bus Red de resistencias Resistencias en serie para traduccion de nivel 5 V / 3,3 V
Alimentacion TLV62590BV Buck sincrono, 5 V (pin VCC) a 3,3 V
USB Hub integrado Puente almacenamiento masivo USB RP2350 para flasheo firmware

Asignacion de GPIO

GPIO Senal Direccion Notas
0–15 A0–A15 Salida Bus de direcciones 6502 — controlado por PIO 0 m6502_addr
16–23 D0–D7 Bidir Bus de datos 6502 — controlado/muestreado por PIO 0 m6502_data
24 PHI0 Entrada Entrada de reloj externo hacia PIO 2
25 PHI1 Salida Salida de reloj fase 1 — generado por PIO 2
26 PHI2 Salida Salida de reloj fase 2 — generado por PIO 2
27 RNW Entrada Read/Not-Write — muestreado por PIO 1
28 SYNC Salida Indicador de captura de opcode — controlado por PIO 1
29 IRQ Entrada Interrupcion enmascarable (activo bajo) — monitoreado por PIO 1
30 NMI Entrada Interrupcion no enmascarable (activo bajo) — monitoreado por PIO 1
31 RDY Entrada Senal Ready — muestreado por PIO 1
32 SO Entrada Set Overflow — monitoreado por PIO 1
33 RESET Bidir Reset del sistema (activo bajo)
34–39 Flash Flash SPI NOR (XIP)
40–45 PSRAM PSRAM QSPI
46–47 ESP32 FSPI SCLK, CS hacia ESP32
48–49 ESP32 UART TX/RX 460,8 kbaud hacia ESP32

Arquitectura del firmware

Disposicion de la memoria Flash

Identico al layout del picoZ80:
Particion Rango de direcciones Tamano Contenido
Bootloader 0x10000000–0x1001FFFF 128 KB Puente USB, actualizacion firmware, selector particion
App Slot 1 0x10020000–0x1051FFFF 5 MB Firmware principal 6502 (particion 1)
App Slot 2 0x10520000–0x10A1FFFF 5 MB Firmware principal 6502 (particion 2)
App Config 1 0x10A20000–0x10C9FFFF 2,5 MB Imagenes ROM + JSON configuracion minificado (slot 1)
App Config 2 0x10CA0000–0x10F1FFFF 2,5 MB Imagenes ROM + JSON configuracion minificado (slot 2)
General Config 0x10F20000–0x10FFEFFF 892 KB Configuracion principal, espacio de trabajo
Partition Table 0x10FFF000–0x11000000 4 KB Slot activo, checksums, metadatos

Interfaz de bus PIO

La interfaz de bus 6502 esta implementada en M6502.pio a traves de los tres bloques PIO del RP2350. La diferencia clave con la interfaz Z80 es el esquema de reloj bifasico no superpuesto del 6502: PHI0 es una entrada de reloj externo; PIO 2 genera PHI1 y PHI2 a partir de ella. Esto garantiza un timing de bus 6502 correcto independientemente de la programacion del Core 1.

Programas PIO

Bloque PIO Programa Maquinas de estado Funcion
PIO 0 m6502_addr SM 0 Emite direccion 16 bits A0-A15; senala IRQ 0 (inicio ciclo)
PIO 0 m6502_data SM 1 Controla o muestrea D0-D7; senala IRQ 1 (fase datos); control tri-state via RNW
PIO 1 m6502_cycle SM 0 Secuenciador de ciclo de bus de nivel superior; IRQ 7 = salida del bucle
PIO 1 m6502_fetch SM 1 Ciclo de captura de opcode (SYNC activo, PHI2 alto, RNW=1)
PIO 1 m6502_read SM 1 Ciclo de lectura de memoria
PIO 1 m6502_write SM 2 Ciclo de escritura de memoria
PIO 1 m6502_irq SM 2 Monitorea pin IRQ; senala PIO IRQ 5
PIO 1 m6502_nmi SM 3 Monitorea pin NMI; senala PIO IRQ 4
PIO 1 m6502_so SM 3 Monitorea pin SO (Set Overflow); senala PIO IRQ 6
PIO 2 m6502_clock_6502 SM 0 Genera relojes bifasicos PHI1/PHI2 desde entrada PHI0 externa

Modelo de memoria

El modelo de memoria del pico6502 es estructuralmente identico al del picoZ80 con una diferencia critica: el 6502 no tiene un espacio de direcciones I/O separado. No hay un array ioPtr[] en t_6502PSRAM y ninguna seccion JSON iomap. Todos los registros de perifericos estan mapeados en el espacio de direcciones de memoria de 64 KB usando bloques tipo FUNC.

Tipos de bloques de memoria

Constante Valor Comportamiento
MEMBANK_TYPE_PHYSICAL 0 Pass-through hacia hardware real del host — RP2350 libera el bus
MEMBANK_TYPE_PHYSICAL_VRAM 1 RAM de video del host con estados de espera configurables
MEMBANK_TYPE_RAM 2 Lectura/escritura — respaldada por banco PSRAM
MEMBANK_TYPE_ROM 3 Solo lectura — respaldada por banco PSRAM; escrituras descartadas
MEMBANK_TYPE_VRAM 4 Mirror RAM video PSRAM con estados de espera
MEMBANK_TYPE_FUNC 5 Periferico virtual — handler memioPtr[addr] llamado en cada acceso
MEMBANK_TYPE_PTR 6 Redireccion por byte — handler memPtr[addr] usado para lecturas

Referencia de configuracion

El pico6502 usa el mismo mecanismo de configuracion JSON que el picoZ80. La seccion especifica CPU usa la clave "6502". Como el 6502 no tiene espacio I/O no hay array "io" — solo un array "memory".

rp2350.6502.memory[ ]

Clave Tipo Descripcion
enable 0/1 Si esta entrada esta activa.
addr hex string Direccion inicial en el espacio de direcciones del 6502.
size hex string Tamano de la region en bytes.
type string PHYSICAL, PHYSICAL_VRAM, RAM, ROM, FUNC o PTR.
bank integer Numero de banco PSRAM para tipos RAM/ROM (0-63).
tcycwait integer Estados de espera a insertar (estiramiento RDY) para esta region.
task string Tarea/handler driver nombrado para bloques tipo FUNC.
file string Ruta en tarjeta SD hacia imagen ROM a cargar al inicio (tipo ROM).

Framework de perifericos virtuales

El framework de perifericos virtuales es estructuralmente identico al del picoZ80 descrito en la Guia tecnica del picoZ80. La diferencia clave es que todos los perifericos virtuales se registran en memioPtr[] — no hay equivalente ioPtr[] para el 6502.
typedef uint8_t (*MemoryFunc)(M6502CPU *cpu, bool read, uint16_t addr, uint8_t data);
typedef int (*VirtualFunc)(M6502CPU *cpu, t_drvConfig *drvConfig, int pass);
Consulte la Guia del desarrollador pico6502 para un ejemplo completo incluyendo una implementacion de periferico VIA6522.

Coprocesador ESP32

El coprocesador ESP32 es identico en funcion e implementacion al del picoZ80 — consulte la Guia tecnica del picoZ80 — Coprocesador ESP32 para la descripcion completa.

Sistema de compilacion

El sistema de compilacion es identico al del picoZ80 — CMake con Pico SDK 2.x apuntando al RP2350. El pico6502 no requiere la biblioteca del emulador Zeta Z80. Consulte la Guia tecnica del picoZ80 — Sistema de compilacion para la descripcion completa.
Objetivo Salida Descripcion
BaseM6502 BaseM6502_0x10020000.uf2 Firmware principal 6502 — direccion carga Slot 1
BaseM6502 BaseM6502_0x10520000.uf2 Firmware principal 6502 — direccion carga Slot 2
Bootloader Bootloader.uf2 Bootloader compartido (mismo del picoZ80)
ESP32 main.bin Firmware ESP32 (compartido con picoZ80)

Sitios de referencia

Recurso Enlace
Pagina del proyecto pico6502 /pico6502/
Manual de usuario pico6502 /pico6502-usermanual/
Guia del desarrollador pico6502 /pico6502-developersguide/
Guia tecnica picoZ80 /picoz80-technicalguide/
Hoja de datos RP2350 datasheets.raspberrypi.com
Hoja de datos MOS 6502 archive.org

Aviso regulatorio inalambrico

Este dispositivo incorpora un modulo inalambrico ESP32-S3-PICO-1 que transmite en la banda ISM de 2,4 GHz, convirtiendolo en un emisor intencional segun las regulaciones de radiofrecuencia a nivel mundial.
Limitaciones importantes
  • Los dispositivos ensamblados no deben ser vendidos o distribuidos a terceros sin autorizacion de equipo propia.
  • La construccion para uso personal en cantidades limitadas esta generalmente permitida bajo disposiciones para aficionados (ej. FCC § 15.23).
Responsabilidad del constructor
Es responsabilidad exclusiva del constructor asegurarse de que cualquier dispositivo construido a partir de estos disenos cumpla con todas las regulaciones de radiofrecuencia aplicables en su jurisdiccion.