Commodore VIC-20 Memory Configuration at Power On
This article details the default memory map and hardware configuration of the Commodore VIC-20 computer immediately following a power-on reset. It outlines the specific allocation of RAM, ROM, and I/O registers that define the system’s initial state, including the amount of memory available to the BASIC interpreter and the addresses reserved for system functions. Understanding this baseline configuration is essential for developers and enthusiasts working with original hardware or accurate emulation.
Upon switching on the VIC-20, the system initializes with a specific memory map determined by the state of the processor and the I/O registers. The machine features a total of 6KB of RAM installed on the motherboard, though not all of this is available for user programs. The memory is organized into a 16-bit address space ranging from $0000 to $FFFF. Immediately after power-on, the ROM chips are enabled, and the I/O block is configured to its default state, making the system ready to accept BASIC commands.
The RAM configuration occupies the lowest segment of the memory map. Addresses from $0000 to $1FFF are designated for the primary RAM block. However, only the first 6KB ($0000 to $17FF) are physically populated on an unexpanded unit. Within this range, the zero page, stack, and interrupt vectors reside at the very bottom from $0000 to $03FF. The BASIC program storage area typically begins at $0400. A portion of this RAM block is also used for screen memory, which defaults to $1000 through $13FF, consuming 1KB of the available user space.
High memory is reserved for ROM and I/O operations. The range from $8000 to $8FFF contains the Character Generator ROM, which defines the petSCII font. The I/O area is located between $9000 and $9FFF. This critical block includes the VIC video chip registers, the CIA I/O chip, the SID sound chip, and the Color RAM, which occupies $9000 to $93FF. Above this, the BASIC interpreter ROM is mapped from $A000 to $BFFF, and the Kernal operating system ROM occupies the top segment from $C000 to $FFFF.
When the BASIC interpreter starts, it calculates the available free
memory based on this configuration. Although 6KB of RAM is physically
present, 1KB is dedicated to system variables and screen storage.
Consequently, the VIC-20 reports 5KB of RAM available for BASIC programs
in total specification sheets, but the FRE(0) command
typically reports 3583 bytes free. This discrepancy exists because the
default screen memory setup resides within the user RAM block, reducing
the immediate space available for code and variables until the screen
memory is relocated via expansion or software manipulation.