Commodore 64 Guides

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

Having recently 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 pristine 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 limited spiral bound printing to 470 pages and the Reference Guide comes in at 504. I could have printed the User’s Guide spiral bound but as I wanted a matching set, hardback it was.

The PDF files I used for printing are below.

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 you.


  • 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

Commodore 64 User's Guide
This version last updated 4th January 2024 (See Errata at bottom of page)

Main Body Text PDF
Cover Graphic PDF

Commodore 64 Programmer's Reference Guide 
This version last updated 28th March 2024 (See Errata at bottom of page)

Main Body Text PDF
Cover Graphic PDF

Quick Reference Card

Main PDF



I used to print my copies and was delighted with the results. Your mileage may vary and obviously I can't be responsible for them messing up. However, I've had a few books printed with them now and I've had no issues.

NB - different Print on Demand (POD) companies have different requirements and guidelines. I specifically designed these guidebooks to meet the guidelines outlined by lulu. If you choose to use another POD company you may well find these PDFs do not meet their criteria.

The process is reasonably straightforward if you have a lulu account: simply follow the instructions on the site to Start a Project and select "Print Book" from amongst the options:

Under "Select a Goal" select the option: "Print Your Book. Your book will be uploaded to your account and available only to you for purchasing copies in any quantity you desire."

Give your project a name and then press the "Design Your Project" button.

A new page will open.

Under "Interior File Upload" upload the PDF with the main body text.

This will take a few moments. When it is uploaded you will see some warnings:

Do not be alarmed. This is normal. I ignored these warnings and the final print I received was absolutely fine.

You then need to select the options for the book paper type, colour etc. This is important. I used:

It is imperative you select 80# Coated White paper or else the cover file provided will not work (the weight of the paper determines thickness of the spine and the cover has been designed specifically for these settings.)

Under "Design Your Cover" upload the cover graphic PDF.

And that pretty much concludes the process. You can then preview the book then step through the final options and confirm specifications to order it.

Simply repeat this process as required for different books.


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:

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:

         and Line 3 now reads:

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 - "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 - "4x4096" corrected to "1x4096"
  • 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 to the correct
  • 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" corrected to "Ref"
  • 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

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):
  • P25 - "123E+17" corrected to " 1.23E+17 "

9th January 2023 - (Revision R230109-01):
  • P51 - "CHRS" corrected to "CHR$"
  • P63 - "55296 - X + (40*Y)" corrected to"55296 + X + (40*Y)"
  • P73 - "11 POKE v+21,28" corrected to "11 POKE V+21,28"
  • P74 - "25 V+23,12" corrected to "25 POKE V+23,12"
  • P102 - "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 - 22:26hrs (Revision R220123):
  • Page 73 - "11 POKE v+21,8" corrected to "11 POKE v+21,28"
18th January 2022 - 18:29hrs (Revision R220118):
  • Page 149 - "KPRNMZ" corrected to "KPMMZ"
13th January 2022 - 20:54hrs (Revision R220113):
  • Page 149 - "D,JWJM" corrected to "DJWJM"

11th December 2021 - 03:30hrs (Revision R211211):
  • Added Revision Number to page ii
  • Page 112 - "line 10 handles that" corrected to "Line 20 handles that"

Popular Posts