Ultimate C64 Memory Map

The system software of the Commodore 64 has been extensively reverse-engineered. Next to disassemblies of the ROM, several “memory maps” have been published: tables that document system variables in the first kilobyte of RAM, and how to tweak the system software with PEEK and POKE. Now, I’m presenting the Ultimate C64 Memory Map: A C64 memory reference that shows eight sources side-by-side.

These are the references that have been adapted for this:

You can enable and disable columns by clicking the checkboxes next to the sources, and you can expand/collapse all details with the corresponding button above the table. Here are four different expanded explanations of the STATUS byte:

And here is the collapsed version of the range $2B-$48, comparing the comments in the original sources with the Programmer’s Reference Manual:

The symbols (second column) are taken from the original sources. Sometimes, a single memory location has several meanings and thus several symbols. Some descriptions have been adapted to describe the different meanings independently:

KERNAL and BASIC ROM addresses link to the respective spots in the disassembly:

And in the disassembly, zero page addresses (like $CC) and symbols (like BLNSW) link back to the memory map:

The memory map table is generated from independent formatted ASCII files that look like this:

It consists of three columns: the address range in hex, the symbol name and the description in MarkDown format.

The Ultimate C64 Reference is being developed as an open source project at github.com/mist64/c64ref – contributions in the form of additions, corrections etc. are welcome!

10 thoughts on “Ultimate C64 Memory Map”

  1. Thanks so much for putting this together. Very useful.

    I notice that you’ve made some corrections, where the original text in the 64’er Magazin was (likely) incorrect. For example, the entry for $0002, in the magazine, should have been under $0001 (I believe), since $0002 really is unused. I’m reading through the article myself (and comparing with the older set from 64’er 1984/04 bis 1986/07), but using Google Translate (from German to English) is slow and tedious. Are there any other places where you’ve found errors in the original? Maybe it’s mentioned in a subsequent issue, I just haven’t got there yet…

    That 64’er magazine is chock full of good info. While translating it, I might learn me some serviceable technical German, but still be unable to carry out a social conversation!

    Danke viel!

    Reply
  2. Exzellentes Projekt, super gemacht! Aber bereits bei einer der wichtigsten Speicherstellen $0001 fehlt leider die Wiedergabe der im 64´er Sonderheft 7/1986 angegebenen und entscheidenden Tabelle für die GEMEINSAME Auswirkung der Bits 0,1,2.
    Meines Wissens nach ist dies offenbar nach wie vor eine “Geheiminformation für Hacker”, die so nirgendwoanders jemals abgedruckt wurde! Jeder glaubt die Bits togglen unabhängig Bereiche zwischen ROM/RAM, aber in Wahrheit sind sie gekoppelt wirksam.
    Interessiert halt nur Hacker, in welcher Speicherkonfiguration ein Programm vorliegt, ob und welches ROM es benutzt, etc., aber habt doch auch ein Herz für solche Menschen!

    Reply
  3. After all these years I still have this problem. Your Memory Map output is very wide (though I shut off the German columns) but there is never any left-right drag bar at the bottom of the browser window on Ultimate C64 Memory Map. So I can’t drag to see columns on the right. I am stuck doing CTRL – (and CTRL + or CTRL 0 to get back to normal ) to shrink page output to be able to fit just 4 columns on a 1920 pixel wide laptop screen.

    What’s the trick with this? How do I get the tradition scroll bar at page bottom? People must have to use very wide monitors indeed to use the Ultimate C64 Memory Map. So not too laptop friendly currently.

    Reply

Leave a Comment