# Prompt64 0.2 memory map | Range | Use | | --- | --- | | `$0801-$85FF` | PRG header, text, constants, initialized data, BSS budget | | `$8600-$87FF` | enforced low-memory growth reserve | | `$8800-$89FF` | top border sprite buffer | | `$8A00-$8BFF` | bottom sprite buffer A | | `$8C00-$8DFF` | bottom sprite buffer B | | `$8E00-$8FFF` | guard/free area | | `$9000-$A3FF` | NOLOAD 64×40 transcript characters and colors | | `$A400-$A7FF` | 40×25 VIC-II screen | | `$A800-$BFFF` | NOLOAD dashboard row store and remaining high RAM | | `$C000-$CFFF` | NOLOAD compiler scratch; software stack grows below `$D000` | | `$D000-$DFFF` | I/O window | The project-owned `client/link.ld` shadows Rust-MOS's C64 script but retains its `unmap-basic.o` startup and `$D000` stack policy. Prompt64 does not add duplicate `$01` banking. The screen moved from `$8400` to `$A400` so low code and BSS can grow toward the fixed sprite buffers without reducing the transcript. VIC-II memory control selects the `$A400` screen and the character ROM visible at `$9000`; the screen's sprite-pointer table is at `$A7F8`. The transcript and dashboard are explicitly initialized at runtime because their sections are NOLOAD. The build emits `build/PROMPT64.map`, limits the PRG to 32,257 bytes, asserts that low sections end before `$8600`, and checks every fixed NOLOAD region. The physical sprite boundary is `$8800`, so both the PRG size gate and linker assertion preserve a 512-byte reserve.