Memory Maps¶
Tiny Board¶
The TINY board uses a flat 64 KiB memory map typical of
65C02-based systems. The first 256 bytes ($0000–$00FF
) are Zero Page RAM,
followed by the stack at $0100–$01FF
. The range $0200–$03FF
is reserved for
OS use, while $0400–$7EFF
serves as general-purpose RAM.
A small I/O region at $7F00–$7FFF
includes only $7F04–$7F07
, which is
connected to a 65C51 ACIA UART for serial communication. The remainder of
the I/O space is currently unused but mapped to RAM, meaning it is technically
accessible for reads and writes. However, using this area is not
recommended, as future hardware revisions may repurpose it. Users may also
reconfigure the address decoding logic by updating the ATF22V10 chip to
change or expand the I/O mapping as needed.
The upper 32 KiB ($8000–$FFFF
) is mapped to ROM, containing system
firmware such as a monitor or BASIC interpreter.
Address Range | Size | Description |
---|---|---|
$0000-$00FF |
256 bytes | Zero Page RAM |
$0100-$01FF |
256 bytes | Stack |
$0200-$03FF |
512 bytes | Reserved (OS Use) |
$0400-$7EFF |
~31 KiB | General Purpose RAM |
$7F00-$7F03 |
4 bytes | Unused / Reserved |
$7F04-$7F07 |
4 bytes | ACIA (UART) |
$7F08-$7FFF |
248 bytes | Unused / Reserved |
$8000-$FFFF |
32 KiB | ROM |
Mini Board¶
The MINI board features a flexible 64 KiB memory map
designed to support both fixed and bank-switched memory regions. The lower
memory ($0000–$7EFF
) is primarily RAM, with the first 256 bytes
($0000–$00FF
) allocated as Zero Page, and the next 256 bytes
($0100–$01FF
) serving as the stack. Addresses $0200–$07FF
are reserved for
OS-level functionality, while the remainder up to $7EFF
is available as
general-purpose RAM, implemented across fixed banks 0–3.
The region $7F00–$7FFF
is dedicated to memory-mapped I/O, divided into
four 64-byte blocks using only address lines A6 and A7. The first block
($7F00–$7F3F
) connects to a 65C51 ACIA for serial communication, while the
second ($7F40–$7F7F
) maps to a 6522 VIA. The remaining two blocks
($7F80–$7FBF
and $7FC0–$7FFF
) are used to write to the ROM and RAM
bank registers, respectively.
The upper half of the address space is split between banked and fixed
ROM/RAM. The ranges $8000–$9FFF
and $A000–$BFFF
are bank-switched RAM
and ROM windows, supporting 64 banks each. The final 16 KiB ($C000–$FFFF
) is
mapped to fixed ROM, permanently connected to banks 0 and 1, containing
critical system firmware.
Warning
The bank-switched ROM and RAM regions ($A000–$BFFF
and
$8000–$9FFF
) share the same physical memory space as the fixed ROM
($C000–$FFFF
) and fixed RAM ($0000–$7EFF
), respectively. This means that
selecting ROM banks 0–1 or RAM banks 0–3 will expose the same
physical memory already mapped in the fixed regions. For example, if RAM
bank 0 is selected, writes may unintentionally modify the stack or zero
page; selecting ROM bank 0 might interfere with the interrupt vectors or
firmware routines.
While overlapping ROM banks are less problematic—since ROM is typically read-only and cannot be written to—it can still cause confusion or redundancy if the same code or data appears in both fixed and banked areas. It is strongly recommended to begin using RAM banks from 4 upwards and ROM banks from 2 upwards to avoid overlapping with fixed memory areas and ensure predictable behavior.
Address Range | Size | Description |
---|---|---|
$0000-$00FF |
256 bytes | Zero Page RAM |
$0100-$01FF |
256 bytes | Stack |
$0200-$07FF |
512 bytes | Reserved (used by BCOS) |
$0800-$7EFF |
30 KiB | General Purpose RAM (Fixed, Banks 0–3) |
$7F00-$7F3F |
64 bytes | ACIA (UART) |
$7F40-$7F7F |
64 bytes | VIA |
$7F80-$7FBF |
64 bytes | ROM Bank Register |
$7FC0-$7FFF |
64 bytes | RAM Bank Register |
$8000-$9FFF |
8 KiB | Bank-switched RAM Window (Banks 0–63) |
$A000-$BFFF |
8 KiB | Bank-switched ROM Window (Banks 0–63) |
$C000-$FFFF |
16 KiB | Fixed ROM (Banks 0–1 mapped permanently) |