Memory Map

The CPU sees a single 64 KB address space split by A15, which doubles as the chip-select. No external address decoder is required.

$0000 ─┬─────────────────┐
       │   RAM (HM62256) │   A15 = 0
       │                 │
$7FFF ─┤                 │
$8000 ─┼─────────────────┤
       │   ROM (Pico)    │   A15 = 1
       │                 │
$FFFF ─┴─────────────────┘
  • When A15 = 0 → RAM is selected ($0000–$7FFF). The Pico keeps its data pins Hi-Z.

  • When A15 = 1 → the Pico (acting as ROM) drives the bus ($8000–$FFFF), serving rom_image[addr & 0x7FFF].

A15 itself does all the decoding: it drives the RAM’s active-low CE# directly, so A15 = 0 selects the RAM and A15 = 1 deselects it — a perfect match with no inverter.

Virtual print port

The demo program stores results at $4000. Use the Hardware API read or monitor commands to observe CPU stores over USB. Avoid addresses whose high byte matches common data values on a noisy breadboard (for example, $5000 often reads back as $50 due to address-line crosstalk onto D0–D7).