Skip to content

Commodore 64 Guides

JUMP TO…


PREAMBLE

In 2021 I embarked on a personal project a long time in the making.

Having then returned my Breadbin to perfect working order, I also wanted brand new copies of the C64 User’s Guide, and Programmer’s Reference Guide to complete the set.

I could have simply printed one of the scans of these guides from the internet but where is the fun in that? In truth, I have found all these scans somewhat disappointing – very often indistinct and not always complete. Instead, I did the only sensible option: I re-wrote them from scratch using my copies of the originals as source. I reconstructed every graphic (including front and back covers), every register map, every block diagram, every table and every paragraph to have a clean final result. This took months. Literally.

Finally, after further weeks of proofing I had a couple of copies printed. Sadly (and this really annoyed me) the printing company limits coil binding to 470 pages and the Programmer’s Reference Guide comes in at 504. After holding a poll on this page between 23rd February 2026 and 24th March 2026, you voted overwhelmingly to split the Programmer’s Reference Guide into two volumes (Main and Appendices) to allow coil bound printing, and, having heard you loud and clear, hardback, and coil bound options are now available to download below. The Hardback Programmer’s Reference Guide remains one volume, only the coil bound option has been split.

I want to extend my sincere thanks to the small army of amazing and eagle eyed people from all over the world who have sent both words of encouragement and who have reported errors. The ever improving condition of these guides is testament to your diligence and enthusiasm and I am very grateful to all of you.


IMPORTANT NOTES

  • The Programmer’s Reference Guide I have rewritten is pretty much faithful, page for page, to the original. It does not contain the fold out Commodore 64 diagram at the rear of the original as that is beyond printing capabilities and the Quick Reference card is a separate PDF, which can be printed separately.
  • The User’s Guide deviates slightly from the original page numbering in Appendices F through J – this is because I added full and working versions of the example BASIC programs which were incomplete in the original. If this bothers you, please don’t download and use. Remember this was originally a personal project – for me alone. This leads nicely to styling:
  • I made some stylistic choices when I re-wrote the guides. I wanted to retain the look and feel of the originals but present them in a manner I liked. I’ve chosen fonts which are similar, but not identical, to the original. I’ve chosen certain line spacing and paragraph options which improve readability for me but which may not be to your taste. Again, I did what I thought looked good whilst still retaining all the information in basically the same place.
  • I may have missed something in my proof reading! It is entirely possible I have introduced inadvertent errors – please contact me if you find an error and I will make the correction (don’t be offended if I do not reply directly – I get a lot of emails and it’s not always possible to get back to everyone). Updates made to the guides are listed at the bottom of this page.
  • In both guides I have added PAL Oscillator Frequencies to the Musical Note Values appendix – the original English language guides only have NTSC values. My calculations for these PAL values differ from the PAL values printed in the German version of the User Guide. If someone wants to check my work, I have a simple C64 BASIC program which demonstrates exactly how I arrived at the PAL values in these guides, and contains all the calculations. I am happy for my logic to be checked and corrected.

Please check back periodically to ensure
you have the latest copy with errors fixed


COIL BOUND

COMMODORE 64 USER’S GUIDE

Last updated: 6th May 2026 (See Errata)

Commodore 64 User's Guide Hardback

COMMODORE 64 PROGRAMMER’S REFERENCE GUIDE

Last updated: 27th March 2026 (See Errata )

Commodore 64 Programmer's Reference Guide and User's Guide Coil Bound

HARDBACK

COMMODORE 64 USER’S GUIDE

Last updated: 6th May 2026 (See Errata )

Commodore 64 User's Guide Hardback

COMMODORE 64 PROGRAMMER’S REFERENCE GUIDE

Last updated: 27th March 2026 (See Errata )

Commodore 64 Programmer's Reference Guide Hardback

QUICK REFERENCE CARD


PRINTING INSTRUCTIONS

Please see this page which provides full guidance on printing.


ERRATA

As more people view these guides, errors will be found (and hopefully) reported. Below is a list of errors found and fixed so far.

PROGRAMMER’S REFERENCE GUIDE:


27th March 2026 – (Revision R260327-01)
P130 – Missing NEXT added to line 90 of example code

10th January 2026 – (Revision R260110-01)
P9 – because arrays start at zero, the original text “sets the 5th element in the 1 dimensional array called “A” equal to zero” is incorrect. changed to “sets the element in row position 5 in the 1 dimensional array called “A” equal to zero.”
P18 – original text “… and the integer result is less than or equal…” is flawed because it fails to account for negative numbers and the mathematical definition of “less than”. This has been changed to “… and a positive integer result is less then or equal…”
P58 – corrected missing space at “…Commodore 64.This…”
P60 – corrected “Loads” to uppercase “LOADs”
P70 – corrected “though” to “through”
P76 – removed incorrect ” after CR$ and incorrect , between “FFF” and CR$
P85 – “REM HANDLE I/O ERROR” corrected to “REM HANDLE FILE I/O ERROR”
P91 – corrected “SEARCHING” to occupy its own row.
P105 – corrected “without” to be italicized
P225 – corrected “LDA ($02,X)” to “LDA ($01,X)”.
Throughout: fixed inconsistent use of <file name> and <file-name>, <file number> and <file-number>, <device name> and <device-name> , <line number> and <line-number>

28th March 2024 – (Revision R240328-01 )
Piii – misspelled “snd” corrected to “and”.

24th March 2024 – (Revision R240324-01 )
P104 – Erroneous £ sign replaced by correct $ sign.

4th January 2024 – (Revision R240104-01 )
Appendix A – corrected an error where SPC and TAB tokens on page 375 were missing the opening parenthesis. Specifically: pressing T SHIFT-A is the shortcut for TAB( and not TAB; pressing S SHIFT-P is the shortcut for SPC( and not SPC.

4th March 2023 – (Revision R230304-01 )
P287 – Corrected an error from original document: code example for LOAD was incorrect.
Line 2 now reads:
“LDA #FILENO ;SET LOGICAL FILE NUMBER”
and Line 3 now reads:
“LDX #DEVICE1 ;SET DEVICE NUMBER

16th December 2022 – (Revision R221216-01 )
P4 – Added missing “the”
P9 – “to” corrected to “through” (original spelling “thru” considered nonstandard)
P9 – corrected incorrect capitalization of “In” to “in”
P9 – Added missing “equal”
P10 – “on” corrected to “an”
P11 – Added missing “used as”
P13 – “are” corrected to “is”
P14 – “A-32” corrected to “A=32”
P17 – aligned code comments for clarity
P17 – Added missing note
P18 – removed erroneous “/” from “prompt/question”
P20 – Added missing notes
P21 – “Expenses” corrected to “Expense”
P23 – “IFTI$” corrected to “IF TI$” to reflect original document spacing and clarity
P25 – “REMSTATEMENTS” corrected to “REM STATEMENTS”
P25 – Hyphens corrected
Italics corrected throughout CH1.
P64 – erroneous hyphen remove from “ON-“
P118 – Added missing notes
P119 – Added missing note
P139 – Added missing note
P142 – Added missing notes
P147 – Added missing notes
P153 – Added missing note
P159 – Added missing note
P160 – Added missing note
P161 – Added missing note
P163 – Added missing note
P165 – Added missing note
P167 – Added missing note
P181 – Added missing note
P341 – “us” corrected to “use”
P343 – incorrected spelling of “paddles” fixed
P343 – added “$” to “DC00” for consistency
P345 – on line 1220 “DY=0” corrected to “DY=1”
P347 – on line 1350 “ORA#80” corrected to “ORA#$80”
P347 – Added missing note
P349 – corrected incorrect spacing in “first-in/first- out”
P351 – “Transmitted” spelling error in Fig.6-2 corrected
P353 – “Data Set” corrected to “DataSette”
P354 – “multi- lines” corrected to “multi-lines”
P355 – corrected “Sin” and “Sout” (removed capitalization)
P355 – added missing closing parenthesis in Fig.6-3
P357 – “REBUF” corrected to “RIBUF”
P360 – “CIA #1” references corrected
P360 – Error to Pin “J” reference corrected (was incorrectly “I”)
P361 – in formula example “*” corrected to “×”
P363 – “operations – input” corrected to “operation – 3 input”
P365 – “SERIAL ATN OUT: (SERIAL ATTENTION OUT)” corrected to “SERIAL ATN IN/OUT: (SERIAL ATTENTION IN/OUT)”
P365 – “pre-set” corrected to “preset”
P366-P367 – fixed paragraph error and numerous issues with Pin Description table formatting.
P368 – “fines” corrected to “lines”
P371 – Line 210: “OF” corrected to “OFF”

11th December 2022 – (Revision R221211-01 )
P290 – “X register” corrected to “.X register”
P290 – “Y register” corrected to “.Y register”
P293 – “A register” corrected to “.A register”
P296 – “can NOT” corrected to “canNOT”
P299 – “JSR SETNA” corrected to “JSR SETNAM”
P302 – “Send a secondary address to a device commanded to TALK” compressed to one line
P303 – “JSR TALKSA” corrected to “JSR TKSA”
P306 – “Illegal device memory” corrected to “Illegal device number”
P311 – “Jump Vector: Convert Floating-Integer” corrected to “Jump Vector: Convert Integer-Floating”
P311 – “Garbage call” corrected to “Garbage coll”
P312 – “highest” corrected to “Highest”
P313 – “FBUFT” corrected to “FBUFPT”
P313 – Decimal location for STATUS corrected to 144
P314 – “Byte Received” corrected to “Byte-Received”
P314 – Hex Address for LA corrected to “00B8”
P315 – Description for RVS corrected to “No Used”
P317 – Description for M51CTR corrected to “6551”
P317 – Description for M51CDR corrected to “6551”
P317 – Description for BITNUM: “BITS” corrected to “Bits”
P319 – Description for CINV: “Hardware Interrupt” corrected to “Hardware IRQ Interrupt”
P319 – “Vector” added to all descriptions where it had been omitted.
P319 – Decimal Location of ILOAD corrected to “816-817”
P325 – “Disable Oscillator 1” corrected to “Disable Oscillator 2”
P326 – “Disable Oscillator 1” corrected to “Disable Oscillator 3”
P327 – “54285” corrected to “54292”
P330 – Bit 6 Description: “Serial Port I/O Mode Output, 0 = Input” corrected to “Serial Port I/O Mode: 1 = Output, 0 = Input”
P333 – Bit 6 Description: “Serial Port I/O Mode Output, 0 = Input” corrected to “Serial Port I/O Mode: 1 = Output, 0 = Input”
P336 – “decision” corrected to “decisions”
P336 – “for us” corrected to “to us”
P336 – Second paragraph was missing 36 words. Now corrected.
P336 – “format information” corrected to “format the information”
P337 – “border color” corrected to “border colors”
P337 – “to talk one” corrected to “to talk to one”
P338 – “0 = Upper Graphics” corrected to “0 = Upper/Graphics”

2nd December 2022 – (Revision R221202-01 )
P216 – “fails” corrected to “falls”
P217 – “4×4096” corrected to “1×4096”
P226 – “instructions)” corrected to “instruction(s)”
P227 – “back- ward” corrected to “backward”
P228 – “Sub- Routine” corrected to “SubRoutine”
P228 – “Hi” corrected to “HI”
P246 – Addressing Mode for LDY: “Zero Page, Y” corrected to “Zero Page, X”
P260 – “which” corrected to “that”
P260 – corrected new paragraph starting “The lines in the 6510″…

24th October 2022 – (Revision R221024-01 )
P184 – “Programmers” corrected to “Programmer’s”
P184 – “Well” corrected to “We’ll”
P185 – REM statements added to Example Program 1
P185 – Paragraph format correction
P187 – “POKEL,10” corrected to “POKEL,0”
P203 – “LF=LQAND255” corrected to “LF=FQAND255”
P203 – “550 DATA 8583,12” corrected to “550 DATA 9634,4,8583,12”
P205 – “Set Sustain/Release for voice l” corrected to “Set Sustain/Release for voice 1”
P206 – “Set Attack/Decay for voice l” corrected to “Set Attack/Decay for voice 1”

2nd September 2022 – (Revision R220902-01 )
P32-34 – Numerous corrections made to errors throughout TABLE 2-1
P37 – “30 J = ASC(J$ +CHR$(0)” corrected to “30 J = ASC(J$ +CHR$(0))”
P41 – “30 FOR I = 1 TO 100” corrected to “30 FOR L = 1 TO 100” and “40 PRINT I” corrected to “40 PRINT L”
P53 – paragraph spacing corrected
P74 – “printed” corrected to “PRINTed”
P76 – Example 2 corrected to replicate original layout
P83 – “235 AA-SIN(1.5): PRINT AA” corrected to “235 AA = SIN(1.5): PRINT AA”
P86 – Some formatting fixes.

27th August 2022 – (Revision R220827-01 )
P114 – “NEXTJ, I” corrected to “NEXTJ, NEXTI”
P120 – “back-ground” corrected to “background”
P128 – “($0011)” corrected to “($D011)”
P128 – “($0016)” CORRECTED TO “($D016)”
P128 – Missing parenthesis added to “Color nybble (nybble = ½ byte = 4 bits”
P135 – “$0015” corrected to “$D015”
P136 – “POKE 53276, PEEK(53276) AND (255-↑SN)” corrected to “POKE 53276, PEEK(53276) AND (255-2↑SN)”
P139 – Paragraphing corrected.
P142 – “60 POKE V + 39,1” corrected to “60 POKE V + 39,1: POKE V + 23,1: POKE V + 29,1”
P156 – “20 FOR S = 832 TO 894: POKE S, 255: NEXT: POKE V, 24: POKE Y + 1, 100” corrected to “20 FOR S = 832 TO 894: POKE S, 255: NEXT: POKE V, 24: POKE V + 1, 100”
P165 – Missing comma added to line 100 of sample program.
P168 – “POKE 5” corrected to “POKE S”
p168 – Erroneous inverted comma removed.
P169 – Erroneous space removed
P170 – “(52)” corrected to “(S2)”
P173 – “451” corrected to “45?”
P181 – In line 60140 “Q” corrected to “•”
Changes made throughout CH3 to ensure consistent use of “multicolor” rather than occasional use of “multi-color” AND “multicolor”.

3rd August 2022 – (Revision R220803-01 )
Pxi – “STOCK FOL1O” corrected to “STOCK FOLIO”
P235 – Erroneous asterisk removed from No. of cycles of (Indirect),Y in the AND table.

20th July 2022 – (Revision R220720-01 )
P153 – BASIC program line 20 “POKE2030,13” corrected to “POKE2040,13”
P153 – BASIC program line 50 “POKEV+31,1” corrected to “POKEV+21,1”

26th May 2022 – (Revision R220526-01 )
P309 – “POKE55,1” corrected to “POKE55,L” and “POKE5110” corrected to “POKE51,0” and “POKE5510” corrected to “POKE55,0”

18th April 2022 – (Revision R220418-01 )
P395 – “BUTTON B’LP” corrected to “BUTTON B”

5th March 2022 – (Revision R220305-01 )
P380 – Spelling error “SWITH” corrected to “SWITCH”

21st February 2022 – (Revision R220221-01 )
P127 – Multi-Color Bitmap Mode PEEK corrected to “53265”

8th February 2022 – (Revision R220208-01 )
P101 – “or $DDOO HEX” corrected to “or $DD00 HEX”

3rd February 2022 – (Revision R220203-01 )
P235 to P253 – All references (ie. “Ref: x.x.x” numbers) checked and 13 incorrect references found and fixed. These now correctly reference the MCS6500 Microcomputer Family Programming Manual available here.

2nd February 2022 – (Revision R220202-01 )
P197 – Missing full stops added to “register. Decay” and “be. Release”
P235 – AND reference changed from 2.2.3.0 to the correct 2.2.4.1
P236 – BCS “Add 2 if branch occurs to next page” changed to “Add 2 if branch occurs to different page”
P237 – BEQ “Add 2 if branch occurs to next page” changed to “Add 2 if branch occurs to different page”
P417 – Spelling of “Occurs” corrected; spelling of “Borrow” corrected; spelling of “Accumulator” corrected; spelling of “Effective” corrected.

25th January 2022 – 21:23 hrs (Revision R220125-01)
P157 – In figure 3-5 “Poke V-16,1” corrected to “POKE V+16,1”

18th December 2021 – 16:19 hrs (Revision R211218-01)
P235 – ADC, Absolute X No. of bytes corrected to 3
P236 – BCS, “branch occurs to different page” corrected to “branch occurs to next page”
P237 – BEQ, “Ref 4.1.1.4” corrected to “Ref 4.1.1.5”
P238 – BNE, “Z=1” corrected to “Z=0”
P240 – CLV, “Clear Interrupt Disable Bit” corrected to “Clear Overflow Flag”
P241 – CPX, “Absolute CPX OPER,X” corrected to “Absolute CPX OPER”
P241 – CPY, “Absolute CPY OPER,X” corrected to “Absolute CPY OPER”
P244 – JSR, “Absolute JSR (Oper)” corrected to “Absolute JSR Oper”
P245 – LDX, “Add 1 if” corrected to “Add 1 when”
P246 – LDY, “Add 1 if” corrected to “Add 1 when”
P247 – ORA, “Add 1 if page boundary is crossed” corrected to “Add 1 on page crossing”
P248 – ROL, All OP CODES were incorrect. Now corrected
P249 – RTI, Number of cycles corrected from “1” to “6”
P250 – SBC, “Add 1 if” corrected to “Add 1 when”
P253 – TXS, “Ref: 7.12” corrected to “Ref 8.8”

11th December 2021 – 20:02 hrs (Revision R211211-01)
P428 – “DARA” corrected to “DATA”

7th December 2021 – 10:20 hrs (Revision R211207)
P264 – “This is the default BASIC memory map which provides BASIC 2.0 and 38K contiguous bytes of user RAM.” corrected to “This map provides 60K bytes of RAM and I/O devices. The user must write his own I/O driver routines.”

14th November 2021 – 20:37 hrs (Revision R211114)
Added Revision Number to page ii
Page 242 – At DEC corrected “Y – 1 -> M” to “M – 1 -> M”
Page 252 – At STY corrected “X -> M” to “Y -> M”
Pages 239 to 240 Removed erroneous “Branch to” from operations

12th November 2021 – 11:23 hrs:
Page 278 – Missing parenthesis added to “(See READST”
Page 282 – Line spacing corrected between “LDA #15” and “JSR CLOSE”
Page 284 – “I/0” corrected to “I/O”
Page 284 – “SET DDR TO” corrected to “SET DDR TO 0”
Page 294 – “TXTTA B+1” corrected to “TXTTAB+1”
Page 294 – “<TXTTA” corrected to “<TXTTAB”
Page 302 – “$FFBA” corrected to “$FFB4”
Page 303 – Added missing .X to UDTIM Registers affected
Pages 274 to 306 – All A, X and Y registers now prefixed with period: “.A, .X, .Y”

11th November 2021 – 14:20 hrs:
Incorrect parenthesis on pages 245, 246 and 248 removed.

USER’S GUIDE


6th May 2026 – (Revision R260506-01)
Index – Correction to page number of Hyperbolic functions and Mathematics function table (P140 corrected to P139).

11th January 2026 – (Revision R260111-01)
P58 – semicolon added after CHR$(147) to ensure program starts in top-left corner
P78 – corrected missing space on line 50 before BINARY
P87 – Voice 1’s Poke Number corrected to 54273
P99 – corrected non-functioning CHR$(147) by adding it to new line 5
P146 – corrected lines 100 to 120 of Piano program
P158 – removed erroneous comma

2nd November 2025 – (Revision R251103-01 )
Page 101 – incorrect “cub” fixed to “club”
Page 103 – in code example, line 130, an incorrect ” removed.
Page 140 – apostrophe in the entry for Pin 6 of Control Port 2 fixed to / to match Port 1

2nd May 2025 – (Revision R250502-01 )
Page 27 – ± 2.93873588-39 corrected to ± 2.93873588E-39

24th September 2024 – (Revision R240924-01 )
Page 51 – on line 90 of the code corrected RN$ to AN$

4th January 2024 – (Revision R240104-01 )
Appendix D – corrected an error where SPC and TAB tokens on page 131 were missing the opening parenthesis. Specifically: pressing T SHIFT-A is the shortcut for TAB( and not TAB; pressing S SHIFT-P is the shortcut for SPC( and not SPC.

21st May 2023 – (Revision R230521-01):
Page 43 – Erroneous space found in original document in “CRSR LEFT/ RIGHT key” removed
Page 46 – “on more check” corrected to “one more check”
Page 48 – Error in original document found: “an easier way to call upon” corrected to “an easier way is to call upon”
Page 49 – Error in original document found: In the example for “PRINT 6*RND(1),” two impossible values are shown: “9.32527884” and “8.40850227”. This code cannot produce an output greater than 6 therefor these values have been replaced with values which are possible: “1.32527884” and “2.40850227”
Page 51 – line 65 of the program contained “: CN :”, corrected to “; CN ;”
Page 66 – Use of the word “changes” in the sentence “Lines 85 and 105 check (PEEK) to see if the ball is about to bounce into a block, and changes the ball’s direction if so.” is grammatically questionable. Amended to “Lines 85 and 105 check (PEEK) to see if the ball is about to bounce into a block, and change the ball’s direction if so.”
Page 71 – “1 bytes” corrected to “1 byte”
Page 73 – “X coordinates represents” corrected to “X coordinate represents”
Page 73 – “Y coordinates represent” corrected to “Y coordinate represents”
Page 75 – “never moved to right-hand edge” corrected to “never moved to the right-hand edge”
Page 79 – “Sample Sound Effect To Try” corrected to “Sample Sound Effects To Try”
Pages 80 to 90 – Removed all hyphens from references to “High-Frequency” and “Low-Frequency”. There is inconsistent use of the hyphen in the original document associated with these words. Doing this ensures consistent use throughout.
Pages 80-90 – All references to “Waveform” capitalisation have been changed to match the original document.
Page 80 – Capitalisation of “high and low frequency”, and “waveform control”. corrected to match original document
Page 80 – “Clear the Sound Chip.” corrected to “First clear sound chip.”
Page 80 – commas removed from “a note rises to, and falls, from” to match original document
Page 81 – missing parenthesis added to “can affect the timing.”
Page 81 – “Set volume at highest setting” corrected to “Sets volume at highest setting”
Page 81 – “Sets Attack/Decay” corrected to “Sets Attack/Decay Sustain/Release level (each note).”
Page 82 – “Loop back to reset CONTROL” corrected to “Loops back to reset CONTROL”
Page 82 – “triangle” corrected to “triangular”
Page 84 – “High Atack” in table header corrected to “High Attack”

18th March 2023 – (Revision R230318-01M):
This is a major revision. The entire guide has been revised and repaginated to more closely match the original document. Incorrect Appendix order has been fixed. Index has been rebuilt to more closely match the original. Callouts have been added to example code throughout to reflect the same in the original and “tips” boxes are now bounded in blue.

15th March 2023 – (Revision R230315-01):
Page 25 – “123E+17″ corrected to ” 1.23E+17 “

9th January 2023 – (Revision R230109-01):
Page 51 – “CHRS” corrected to “CHR$”
Page 63 – “55296 – X + (40Y)” corrected to”55296 + X + (40Y)”
Page 73 – “11 POKE v+21,28” corrected to “11 POKE V+21,28”
Page 74 – “25 V+23,12” corrected to “25 POKE V+23,12”
Page 102 – “NUMBR” corrected to “NUMBER”
Curly quotes “ replaced with straight quotes ” throughout for consistency

30th November 2022 – (Revision R221130):
Page 78 – “NEXT TL” corrected to “NEXT X”

25th August 2022 – (Revision R220825):
Pages 41 & 42 – “CRSR/DOWN” changed to “CRSR DOWN” aligning style with “CRSR LEFT” which has no forward slash.

3rd February 2022 – (Revision R220203):
Pages 149 to 150 – Fixes to Jotto: Line 440 “IF T = L” corrected to “IF T>= 1”; Line 580 “RN” corrected to “M”; Line 680 “H+L” corrected to “H+1”

23rd January 2022 (Revision R220123):
Page 73 – “11 POKE v+21,8” corrected to “11 POKE v+21,28”

18th January 2022 (Revision R220118):
Page 149 – “KPRNMZ” corrected to “KPMMZ”

13th January 2022 (Revision R220113):
Page 149 – “D,JWJM” corrected to “DJWJM”

11th December 2021 (Revision R211211):
Added Revision Number to page ii
Page 112 – “line 10 handles that” corrected to “Line 20 handles that”