| Range | What it is |
|---|---|
| $0000–$00FF | Zero page — Kernal, BASIC and Monitor workspace |
| $0100–$01FF | The 6502 stack |
| $0200–$07FF | Kernal and BASIC buffers — not yours |
| $0800–$7FFF | Your program, your variables, your strings |
| $8000–$9FFF | The I/O window — eight cards, 1 KB each |
| $A000–$B7FF | Kernal |
| $B800–$BFFF | Character set |
| $C000–$EDFF | BASIC |
| $EE00–$FEFF | Monitor |
| $FF00–$FFF9 | Wozmon |
| $FFFA–$FFFF | NMI, RESET and IRQ vectors |
$0800 and grows up; the string heap starts at $8000 and grows down. When they meet you get ?OUT OF MEMORY ERROR.$003A up is unclaimed by the Kernal — but only for a program that has taken the machine over. Underneath a running BASIC it is in use, and a POKE there will not stick.| Range | Size | What lives there |
|---|---|---|
| $0000–$00FF | 256 B | Kernal, BASIC, Monitor and XModem workspace; $003A-$00FF is unclaimed by the Kernal |
| $0100–$01FF | 256 B | Hardware stack; BASIC keeps its FOR and GOSUB frames here |
| $0200–$02FF | 256 B | 256-byte input buffer filled by the encoders, drained by Chrin |
| $0300–$03FF | 256 B | Interrupt vectors, cursor, HW_PRESENT, CF_DISK, BOOT_VECTOR, RTC and filesystem state, BASIC runtime pointers |
| $0400–$05FF | 512 B | BAS_LINBUF raw input line ($0400) and BAS_TOKBUF tokenized scratch ($0500) |
| $0600–$07FF | 512 B | 512-byte sector buffer; any filesystem call clobbers it |
| $0800–$7FFF | 30 KB | BASIC program text grows up from $0800; variables, then arrays, then the string heap growing down from $8000 |
| Range | Size | Segment |
|---|---|---|
| $A000–$B7FF | 6 KB | KERNAL |
| $B800–$BFFF | 2 KB | CHARS |
| $C000–$EDFF | 11.5 KB | BASIC |
| $EE00–$FEFF | 4.3 KB | MONITOR |
| $FF00–$FFF9 | 250 B | WOZMON |
| $FFFA–$FFFF | 6 B | VECTORS |
| Slot | Range | Bit | Card |
|---|---|---|---|
| 1 | $8000–$83FF | $01 | RAM Card — AS6C4008 banked SRAM (low) |
| 2 | $8400–$87FF | $02 | RAM Card — AS6C4008 banked SRAM (high) |
| 3 | $8800–$8BFF | $04 | RTC Card — DS1511Y |
| 4 | $8C00–$8FFF | $08 | Storage Card — CompactFlash (8-bit True IDE) |
| 5 | $9000–$93FF | $10 | Serial Card — R65C51 / W65C51 ACIA |
| 6 | $9400–$97FF | $20 | GPIO Card / Input Board — W65C22 VIA |
| 7 | $9800–$9BFF | $40 | Sound Card — MOS 6581 SID / ARMSID |
| 8 | $9C00–$9FFF | $80 | Video Card / VGA Card — TMS9918A / Pico9918 |
$030D holds one bit per slot, written by the probe at reset. MEM prints it as HW=$xx; PEEK(781) reads it from BASIC.| Address | Register |
|---|---|
| $9800 | SID_V1_FREQ_LO — Voice 1 Frequency Low |
| $9801 | SID_V1_FREQ_HI — Voice 1 Frequency High |
| $9802 | SID_V1_PW_LO — Voice 1 Pulse Width Low |
| $9803 | SID_V1_PW_HI — Voice 1 Pulse Width High |
| $9804 | SID_V1_CTRL — Voice 1 Control Register |
| $9805 | SID_V1_AD — Voice 1 Attack/Decay |
| $9806 | SID_V1_SR — Voice 1 Sustain/Release |
| $9807 | SID_V2_FREQ_LO — Voice 2 Frequency Low |
| $9808 | SID_V2_FREQ_HI — Voice 2 Frequency High |
| $9809 | SID_V2_PW_LO — Voice 2 Pulse Width Low |
| $980A | SID_V2_PW_HI — Voice 2 Pulse Width High |
| $980B | SID_V2_CTRL — Voice 2 Control Register |
| $980C | SID_V2_AD — Voice 2 Attack/Decay |
| $980D | SID_V2_SR — Voice 2 Sustain/Release |
| $980E | SID_V3_FREQ_LO — Voice 3 Frequency Low |
| $980F | SID_V3_FREQ_HI — Voice 3 Frequency High |
| $9810 | SID_V3_PW_LO — Voice 3 Pulse Width Low |
| $9811 | SID_V3_PW_HI — Voice 3 Pulse Width High |
| $9812 | SID_V3_CTRL — Voice 3 Control Register |
| $9813 | SID_V3_AD — Voice 3 Attack/Decay |
| $9814 | SID_V3_SR — Voice 3 Sustain/Release |
| $9815 | SID_FC_LO — Filter Cutoff Low |
| $9816 | SID_FC_HI — Filter Cutoff High |
| $9817 | SID_RES_FILT — Resonance/Filter |
| $9818 | SID_MODE_VOL — Filter Mode/Volume |
| $9819 | SID_PADDLE_X — Paddle X (Read-only) |
| $981A | SID_PADDLE_Y — Paddle Y (Read-only) |
| $981B | SID_OSC3 — Oscillator 3 (Read-only) |
| $981C | SID_ENV3 — Envelope 3 (Read-only) |
| Address | Register |
|---|---|
| $8800 | RTC_SEC |
| $8801 | RTC_MIN |
| $8802 | RTC_HR |
| $8803 | RTC_DAY |
| $8804 | RTC_DATE |
| $8805 | RTC_MON |
| $8806 | RTC_YR |
| $8807 | RTC_CENT |
| $8808 | RTC_ALARM_SEC |
| $8809 | RTC_ALARM_MIN |
| $880A | RTC_ALARM_HR |
| $880B | RTC_ALARM_DATE |
| $880C | RTC_WD_L |
| $880D | RTC_WD_H |
| $880E | RTC_CTRL_A |
| $880F | RTC_CTRL_B |
| $8810 | RTC_RAM_ADDR |
| $8813 | RTC_RAM_DATA |
| Address | Register |
|---|---|
| $8C00 | ST_DATA — R/W |
| $8C01 | ST_ERROR — Read |
| $8C01 | ST_FEATURE — Write |
| $8C02 | ST_SECT_CNT — R/W |
| $8C03 | ST_LBA_0 — R/W |
| $8C04 | ST_LBA_1 — R/W |
| $8C05 | ST_LBA_2 — R/W |
| $8C06 | ST_LBA_3 — R/W |
| $8C07 | ST_STATUS — Read |
| $8C07 | ST_CMD — Write |
| Address | Register |
|---|---|
| $9400 | GPIO_PORTB |
| $9401 | GPIO_PORTA |
| $9402 | GPIO_DDRB |
| $9403 | GPIO_DDRA |
| $9404 | GPIO_T1CL |
| $9405 | GPIO_T1CH |
| $9406 | GPIO_T1LL |
| $9407 | GPIO_T1LH |
| $9408 | GPIO_T2CL |
| $9409 | GPIO_T2CH |
| $940A | GPIO_SR |
| $940B | GPIO_ACR |
| $940C | GPIO_PCR |
| $940D | GPIO_IFR |
| $940E | GPIO_IER |
| $940F | GPIO_ORA |
| Address | Register |
|---|---|
| $9000 | SC_DATA — R/W |
| $9001 | SC_RESET — Write |
| $9001 | SC_STATUS — Read |
| $9002 | SC_CMD — R/W |
| $9003 | SC_CTRL — R/W |
| Address | Register |
|---|---|
| $9C00 | VC_DATA — R/W |
| $9C01 | VC_REG — Write |
| $9C01 | VC_STATUS — Read |
| Address | Register |
|---|---|
| $8000 | RAM_DATA_L — R/W ($8000-$83FE) |
| $83FF | RAM_BANK_L — Write-only RAM bank latch, value ($00-$FF) sets which of 256 ~1K banks of RAM is selected |
| $8400 | RAM_DATA_H — R/W ($8400-$87FE) |
| $87FF | RAM_BANK_H — Write-only RAM bank latch, value ($00-$FF) sets which of 256 ~1K banks of RAM is selected |
BANK n.