Commodore 16 Screen Memory Address Range in Hexadecimal
The Commodore 16 utilizes a specific memory map managed by the TED chip, differing significantly from its predecessor, the Commodore 64. This article details the exact hexadecimal address range allocated for screen memory on the Commodore 16, explains the relationship between screen and color RAM, and provides context for programmers accessing these locations via BASIC or machine language. Understanding these addresses is essential for direct memory manipulation and graphics programming on the platform.
The primary screen memory for the Commodore 16 in standard 40-column text mode begins at hexadecimal address $0C00. Since the display consists of 25 rows with 40 columns each, the total screen size occupies 1000 bytes. Consequently, the screen memory range extends from $0C00 to $0FE7. This block of RAM stores the PETASCII character codes that appear on the display.
Unlike the VIC-II chip in the Commodore 64, the TED chip in the Commodore 16 and Plus/4 separates color information into a distinct memory area known as Color RAM. This color memory is located at hexadecimal addresses $0800 through $0BE7. Each byte in this range corresponds to the same position in the screen memory, defining the foreground color for each character cell. When programming, it is crucial to distinguish between these two ranges to avoid visual glitches or data corruption.
Accessing these memory locations can be achieved through BASIC commands such as POKE and PEEK. For example, to change the character at the top-left corner of the screen, a user would POKE the value into address 3072, which is the decimal equivalent of $0C00. Machine language programmers can load these addresses directly into index registers for fast screen updates. Knowing the precise hexadecimal boundaries ensures that software does not overwrite critical system variables or BASIC program storage located elsewhere in the RAM map.