pico6502 Guia Tecnica
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
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.
- 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).
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.