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:
- Reference from Mapping the Commodore 64 by Sheldon Leemon, ISBN 0-942386-23-X.
- German-language reference from Memory Map mit Wandervorschlägen by Dr. H. Hauck, in 64’er Sonderheft 1986/07.
- German-language reference from Das neue Commodore-64-intern-Buch by Data Becker, ISBN 3890113079.
- Reference by Joe Forster/STA, with awsm’s changes applied.
- Comments from the original M6502 BASIC source by Microsoft and the original C64 KERNAL source by Commodore
- Reference from Commodore 64 Programmer’s Reference Guide.
- Reference as found in Commodore 64 Memory Maps.txt by anonymous.
- Reference by Jim Butterfield in COMPUTE! #29 (October 1982).
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!
Very nice work, thanks Michael
Will you include the hardware registers in a different map?
Yes!
Thank you for putting this together, very helpful and informative!
Thank you for article, very helpful for me!
Thank you
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!
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!
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.
Please try the newest version – it might work better?