Skip to content


Category: Commodore

To create a cartridge for your C64 in the simplest form, is wiring a 8K ROM to the expansion port.

The CPU can only see a maximum of 65536 bytes. Adding a cartridge will not give you additional memory, instead it will replace memory at $8000, $A000 or $E000 depending on how ROML, ROMH, EXROM and GAME lines are being handled in the expansion port.

It is possible to bank in and out ROML/ROMH areas to gain access to different banks or RAM. This is how EasyFlash cartriges provide 1MB to the C64, it however only sees 16K of the 1MB at a time.



There are basically three types of cartridges for the C64:

8K Cartridge, $8000-$9FFF (ROML).
GAME = 1, EXROM = 0
ROML is read only. Basic ROM and Kernal ROM are available.

16K Cartridge, $8000-$9FFF / $A000-$BFFF (ROML / ROMH).
GAME = 0, EXROM = 0
ROML/ROMH are read only, Basic ROM is overwritten by ROMH.

16K Cartridge, $8000-$9FFF / $E000-$FFFF (ROML / ROMH). Ultimax mode.
GAME = 0, EXROM = 1
Ultimax mode is an emulation of the Japanese CBM machine called “MAX”. It is a predecessor of the C64 with less RAM. In Ultimax mode ROMH replaces the kernal at $E000. You do not need ROML for a cartridge to function and can be left out.



Cartridge autostart
When starting up, the CPU will load the reset vector from $FFFC/$FFFD into the program counter and continue from there. If a normal cartridge is present, it executes the kernal and checks for a cartridge identifier string.

Kernal will look for the string “CBM80” at $8004- and will do a “JMP($8000)” if found.

If an Ultimax cartridge is inserted, the kernel is overwritten by ROMH and therefor $FFFC/$FFFD must point to your code.

8/16K Cartridge code example



Test the code above with WinVICE:



Commodore 64 Expansion port pinout:

Expansion Port



8K Cartridge $8000-$9FFF


16K Cartridge $8000-$BFFF

16K Cartridge $8000-$BFFF (Single chip version)

16K cartrige at $8000-$bfff

A 27128 chip and a two input AND gate consisting of two diodes and a resistor. You can also use a 74LS08.


8K Cartridge $e000-$FFFF (Ultimax, no ROML at $8000)
You can create a 16K Ultimax cartridge by adding a 8K EPROM and connect it to ROML($8000-$9FFF).

8K cartrige at $e000 (ultimax)


Check out SukkoPera’s Open Hardware 8Kb Cartridge at:


Update 2015.12: Corrected an error in the 16K cart schematic. EXROM/GAME should be connected and not IO2/EXROM. Text was correct but QC slipped on the drawing. Thanks to mATE for notifying me about it.
Update 2016.01: Updated Ultimax cart schematic with $e000-$ffff. Text was correct but again QC has slipped on the drawing. Thanks to Bart for the heads up.
Update 2017.12: Added single chip 16K schematic.

RapiDOS professional is a floppy speeder based on the Professional DOS by Klaus Roreger. More information on Professional DOS can be found at : and

RapiDOS was sold in the US by Chip Level Designs with kernel code written by Lawrence Hiller (aka Mr.Nike). Mitch/ESI gave ideas and feedback to the code resulting in RapiDOS having lots of “hacker enhancements” over Professional DOS, for example the built in monitor. It also functions on PAL (50Hz) Machines.

On this page you will find pictures of the RapiDOS hardware. The ROMs are also available for download.

Thanks to Mitch / ESI for information and for the hardware/ROMs !

Update: Added a .pdf with all reviews and advertisements regarding RapiDOS from Ahoy/Info/Gazette Magazines. Thanks to Stone Oakvalley for the information 🙂

Interesting to note is that Compute Gazette Issue 51 (1987-09) has an advertisement saying RapiDOS is “soon coming” and in Issue 54(1987-12) it is available. Later on C128 and CP/M is mentioned to be supported.



1541 with RapiDOS professional
Drive controller board and the CIA board installed. The wire lead is used for switching the RapiDOS on and off through the User-port board.


RapiDOS Professional User-port Board.
Switch to the left turns on/off the RapiDOS in both the C64 and the 1541.

C64 ROM Adaptor board

[No picture available]
The C64 ROM Adaptor board has a wire lead connected to the User-port board.


More pictures of RapiDOS Professional.




Replacing a 2364 ROM with a 2764 EPROM requires an adapter. You can use a 2364 to 27128 adapter to be able to switch between two different ROMs (ex: cbm original and a floppy speeder kernal).


2364 to 2764 adapter



2364 to 27128 adapter

2364 to 27128

R1 = 4.7k ohm
J1 = Switch


While making backups of some disks(Commodore 5,25 disks with a Zoomfloppy) I noticed that the reading error-rate was very high. The disks are from the mid 80;s but they can survive depending on how they have been stored and what not.

I could get a big variety of errors on totally different sectors while (re-)reading a disk. I cleaned the R/W head, disks, used different transfer-programs, speeds, copied disks to another media on the native system etc. (even had some ridiculous amounts of read retries) and yet nothing helped.

Another thing that was a bit concerning was the mylar coating (recording media) took some serious beating for every read. I could see on the surface where the R/W head had passed. Some disks even lost the coating, leaving a transparent plastic behind.


…condition after a couple of reads, Track 18 “visible” in the middle.


It was obvious that these disks didn’t have unlimited reads and with the varying read results I decided to gather some data.

To make a long story short… the disks are stored as image-files ( .d64) and include a separate block for the error-information. This is where I started looking.

First I made a tool to visualize the data and then I extended it to gather sectors from different disk images(same content) and combine them to as close to a whole image as possible.
Read # 1. Errors: 26


Read # 2. Errors: 10


Read #3. Errors: 10


Images 1 and 3 combined. Errors: 7


Images 1, 2 and 3 combined. Errors: 1


Combining the data from the three images resulted in an image with (just)one bad block.





* Version v1.0 does not support 40 track disks.



C64 (Breadbox)

Kernal: 8K 2364 ROM chip 901226-0x, where revision number is “x”. Available revisions are : 1,2 or 3(latest).
0000-1FFF = Kernal ROM (901227-03), located at $E000-$FFFF.

This is a 2364 ROM and is NOT pincompatible with a 2764. You will need an adapter to replace the ROM with an EPROM.


C64C (C64E, Short board)

Basic and Kernal combined on a 16K chip, U4, 251913-01.
0000-1FFF = Basic ROM (same as 901226-01), located at $A000-$BFFF
2000-3FFF = Kernal ROM (same as 901227-03), located at $E000-$FFFF
Pincompatible with a 27128 eprom.


Use 251913-01 ROM or combine basic and kernal yourself:


Custom C64-E ROM (32K, switchable between standard and dolphin dos2):

0000-1FFF = Basic ROM (same as 901226-01), located at $A000-$BFFF
2000-3FFF = Kernal ROM (same as 901227-03), located at $E000-$FFFF
4000-5FFF = Basic ROM (same as 901226-01), located at $A000-$BFFF
6000-7FFF = Dolphin DOS 2 Kernal, located at $E000-$FFFF






Commodore Techtopics were newsletters sent out to Commodore service technicians.

Below you can find PDF-scans of the techtopics that I have. These particular ones were sent out as xeroxed copies.





A couple of pictures of my SD2IEC case.





The case is aluminum, i gave it a bit of dremel and drill, that did the trick :) . Power is taken from the cassette port. The switch on the back side is device 8/9. Button on the front is disk-switch. Two LEDs to the left, red(error) and green(activity).


Diagnostic cartridges for the Commodore 64 / 128.

A bunch of diagnostic carts. Some of the material below is from the web and some of them are from my own collection.

You will probably be fine with the C64 Dead Test (Rev 781220) and C64 Diagnostic Kit 326070-1 (Rev 586220/588220) for the C64. Use the C64 Dead Test if you got a blank(black) screen, it will flash the border according to which RAM circuit is broken.

If you got a C128 with a blank(blank) screen you can use the C64 Dead Test to find faulty (low) memory. When the C64 side is working, use the C128 Diagnostics to verify the upper memory. It is also possible to rewire the high and low memory and then give the C64 Dead Test a second run. C128 Diagnostic Carts use the same harness as the C64 Rev.586220 (326070-01) but with a different keyboard adapter.

586220 Harness
Check out Sven’s page for an excellent resource about the harness! He has also remedied a problem where the keyboard dongle falsifying passes the user and control port tests. Otherwise you must run the test a second time without the keyboard dongle, this is not mentioned in the manual.

Testing in VICE
You can test the carts in vice:
C64: x64.exe -cartcrt [cartname].crt
C128: x128.exe -extfunc -extfrom [romname].bin

2014-11: I have now included both C128 and C128D keyboard connector schematics for Rev.785260 to avoid misunderstandings. There are also some notes about the connector at position 1.4.8 in the manual.
2015-01: Added disassembly of the C-64 Diagnostic Rev 4.1.0. This was a bit tricky to disassemble(reassemble) as it crossreferences code between $8000/$1000.
2015-01: Added C-64 Diagnostic (Box) (324528-02). Thanks to SLC and Zoran.
2015-01: Added C-128 DCR Integral Diag 1.0 and C-128 Diag Rev.588121. Thanks to Zoran.
2015-01: Thanks to Boulderdash for the info about the C128 Serial Adapter.
2015-10: On request, I made a disassembly of the C64 Diag 781220 deadtest.
2016-11: Added Rossmöller / Roßmöller Doctor64 diagnostic. Thanks to DOC64 and Sierohpätsch.
2018-12: Added C-64 Diagnostic Rev 4.1.1 and Import Test Diag.
2018-12: Added C-64 Diagnostic Rev 3.7.3. At a meeting held by the Dutch Commodore Club, Jeroen Vlasveld noticed a diagnostic harness not present on this page. He sent over the diagnostic Rev 3.7.3 ROM, a picture and a schematic of the harness. Thanks!
2020-04: Added information about the diagnostic falsifying passing tests due to the keyboard dongle and a link to Sven’s page for the 586220 harness. Thanks to Sinan and Sven for the information.
2020-05: Added download for C128 Diagnostic 588121B which will work as internal (U36) ROM and external function/cart ROM. Thanks to Bart ( for the update.
2020-05: Together with Bart, we patched more C128 diagnostics carts to work as internal (U36) ROM and external function/cart ROM. Added download for C128 Diagnostic Rev 789010JB.
2020-05: Added C64GS Diagnostic Rev 1.1 and Rev 2.0 ROM:s.
2020-09: Added 4 Burn-In ROMs.
2020-10: Added C64 Burn In R2.1. Thanks to Jeroen Vlasveld.


Don’t miss the updated Diagnostic 586220 with kernel detection and other fixes.

Additional credits:
Peter Schepers, Nicolas Welte, DLH’s Commodore Archive, SLC, Zoran, Doc64, Sierohpätsch, Jeroen Vlasveld (, Dutch Commodore Club, Bart (


C-64 Dead Test Kit (CBM 314139-03)

dead test
Rev. 781220. Located at $E000 in memory(ultimax) and boots before kernal ROM.

Cartridge ROM: C64 Dead Test Rev 781220 Diagnostic Cartridge (314139-01)
Manual: C64 Dead Test Diagnostic Manual (314139-02)



C-64 Diagnostic Assembly Kit (CBM 326070-01)


Rev. 586220 (c64)  and 588220 (sx64)

Located at $8000 in memory and requires a harness (some tests work without the harness).
Note: There are atleast 3 variations of the schematic on the net, two of them are missing an interconnected wire in the casetteport.

Cartridge ROM: C64 Diagnostic Rev 586220/588220 Cartridge (314061-01)
Manual: C64 Diagnostic Instruction and Troubleshooting Manual (314061-05)
Harness Schematic: C64 Diagnostic Harness Schematic (314061-02/03/04)

I disassembled the cartridge for studying purposes. It can be compiled(assembled) with 64tass.



C-64 Diagnostic Rev 3.7.3, Rev 4.1.0, Rev 4.1.1 and Import Test Diag
C-64 GS Diagnostic Rev 1.0, Rev 2.0

Located at $8000- in memory and use harness 251169-02.

C-64/C-64 GS Diagnostic Rev x ROMs. I dug out all diagnostics visually alike and disassembled them, after aligning code and comparing routines it became obvious these four were from the same code base. Import Test Diag is modified to work without a harness. C-64 GS Diagnostics are also on the same code base, some tests omitted due to the fact it does not have all peripheral ports.



C-64 Diagnostic (Box) (CBM 324517-02)

Located at $8000- in memory and uses its own harness. See also Roßmöller Doctor64 below.
Cartridge ROM: Prog. for Diagnostic Box (324528-02)

Roßmöller Doctor64

Located at $8000- in memory and uses same harness as Diagnostic Box (324528-02).
The Roßmöller will give a false “Interrupt BAD” on C64C models. Interesting is that the Diagnostic Box (324528-02), which can be found on a Commodore spare parts list, has identical check routines as Doctor64 except for the Interrupt part.



C-128 Diagnostic Rev. 588121

Rev. 588121
Uses the same harness as the C64 Rev.586220 (326070-01).

Modified to work as internal (U36) and external (Cart) function ROM.



C-128 Diagnostic Assembly Kit (314060-01)


Rev. 785260
Uses the same harness as the C64 Rev.586220 (326070-01).

Cartridge ROM: C128/128D Diagnostic Rev 785260 Cartridge (314061-06)
Manual: C128 Diagnostic Instruction and Troubleshooting Manual (314061-09)
C128 Diagnostic Keyboard Adapter (314061-07).
C128D Diagnostic Keyboard Adapter (314987-01).
Note: C128 Serial Port Connector has Pins 1 and 5 connected.



C-128 Diagnostic Rev. 789010


Rev. 789010
Uses the same harness as the C64 Rev.586220 (326070-01).

Modified to work as internal (U36) and external (Cart) function ROM.


C-128 Diagnostic Rev 1.1 and 1.4 (325099-01)

C-128 Diagnostic Rev 1.x Uses its own Cart and harness.



C-128 DCR Integral Diag 1.0 (325109-01)

Cartridge ROM: C-128 DCR Integral Diag 1.0 ROM (325109-10)


C-64 “Burn In”
Burn-in is the process by which components of a system are exercised.

Even though the screenshot says diagnostic, these ROMs come from cartridges labeled “Burn In”. The basecode is the same but there has been a lot of patching/adding/omitting done.

C64 Burn In Cart – Screens 1,2,3. (Keys F1/F3 to loop/continue test).
C64 Burn In “Hot Burn In” – Screens 3,4,5. (F1/F3/F5-keys have been disabled).
C64 Burn In “Rev 7.2” – Screens 3,4,5. (F5 key to skip test).
C64 Burn In “Final Rev 3.0” – Screens 3,4,5,6. (F5 key to skip test). Diagnostic routines in this ROM are identical to the ones in “C-64 Diagnostic Rev 3.7.3”.


C-64 Burn In R2.1



A machine displaying less than 38911 free bytes or “?Out of memory error in 0” is often an indication of malfunctioning RAM. If several RAM-chips are broken, or shorted, you will be greeted with a blank(black) screen.

Free basic memory is verified when the computer boots up. It starts checking the memory from location 2049($0801) and goes upwards. If you get “3 bytes free”, it indicates a problem at address position 2049+3=2052($0804).

Even if RAM-chips are failing, it does not mean that every byte has a failing bit, this is why you need to test a larger area of memory. In the example above, 3 bytes passed the test.

Many fastload cartridges(The Final Cartridge or Action Replay etc.) skip the RAM-test to speed up the boot sequence. These will always display “38911 Basic Bytes free” regardless of RAM status.

Broken RAM is usually a sign of a bad powersupply. The components inside the PSU deteriorates and therefor delivers higher voltage than it should. RAM circuits are sensitive to overvoltage and are often the first to go.

Failed RAM can get very hot(burn-your-fingers-hot) and is easy to find, but that is not always the case. Some machines can even have broken memory that are a mix of “hot and cold” chips.

Depending on the C64 motherboard revision, you either have 2 or 8 RAM-chips. For the C128 it is 4 or  16 chips.
C64: 2 x 41464 (64kbit x 4) / 8 x 4164 (64kbit x 1)
C128: 4  x 41464 (64kbit x 4) / 16 x 4164 (64kbit x 1)

Replacing two chips is not that much of a work, but with 8 or 16 chips you want to know which one(s) are broken.

C64s with 8 memory chips also have two multiplexers; MOS7708(identical to 74257) located at U13 and U25. It is more seldom these fail but they should not be neglected.


There are a couple of ways finding failing RAM:


1. Piggybacking.
You insert a known working chip on top of a chip on the PCB. All legs must have good contact, bend the legs slightly inwards on the piggyback chip and work your way through all RAM. You can piggyback several IC;s, just make sure your equipment is powered off and that your PSU is working properly(so it won’t burn even more RAM). If the amount of free RAM changes when turning on the computer, replace that RAM-chip.



2. Calculating BITS

Each BIT on every BYTE is handled by a RAM-chip. Depending on which BIT is malfunctioning, you can determine which RAM-chip is broken.

Test every memoryposition with the byte combinations in TABLE 1. After that use TABLE 2 to determine which chip has failed. Remember that bit 0 is the rightmost and bit 7 is the leftmost bit.

The behavior of the “wrong bits” are because the broken RAM-chip either keep a data line high or low when it shouldn’t.

A couple of ways to figure out which bit is failing:

Visually check bytes on the screen
Inspect the start-up screen(or whats left of it). It is normally mostly filled with “space”-character (hex 0x20). If there are other chars than space, for example “!”-character (hex 0x21) you can determine that there is a failing RAM that handles bit 0, another example is a “%”-character (hex 0x25) indicating that bits 0 and 2 are failing in that specific memory location.

Action Replay monitor (or any other cart)
Use a machine code monitor to fill the memory and find the differing bytes.

Use basic routines POKE and PEEK
In the first example, with problems at address 2052($0804), use the following command: “POKE 2052,x : PRINT PEEK (2052)” where x is from TABLE 1. The result in and out should be the same, if not, take the differing bits and check with TABLE 2.

TABLE 1 – test bytes

binary hex dec binary hex dec
00000000 $00 000 11111111 $FF 255
00000001 $01 001 11111110 $FE 254
00000010 $02 002 11111101 $FD 253
00000100 $04 004 11111011 $FB 251
00001000 $08 008 11110111 $F7 247
00010000 $10 016 11101111 $EF 239
00100000 $20 032 11011111 $DF 223
01000000 $40 064 10111111 $BF 191
10000000 $80 128 01111111 $7F 127
10101010 $AA 170 01010101 $55 085

TABLE 2 – bits vs chips

BIT C64A,B C64B3 C64E C128,C128D C128DCR
0 U21 U10 U10 U38/U46 U38/U40
1 U9 U10 U10 U39/U47 U38/U40
2 U22 U10 U10 U40/U48 U38/U40
3 U10 U10 U10 U41/D49 U38/U40
4 U23 U9 U11 U42/U50 U39/U41
5 U11 U9 U11 U43/U51 U39/U41
6 U24 U9 U11 U44/U52 U39/U41
7 U12 U9 U11 U45/U53 U39/U41



3. Use a diagnostic program or cart
There are several diagnostic programs that test the memory for you. The Commodore diagnostic cartridges “C64 Dead Test Rev.781220” and “Diagnostic Rev.586220” are both good for this.

The “C64 Dead Test Rev.781220” cartridge is able to find broken RAM even with a blank(black) screen. It flashes the screen according to which bit fails. This one will save you a lot of time and work 🙂

Both cartridges are available at the Diagnostic Carts and Manuals page.
If you are interested to see how the memory is verified, there is also a disassembly of the Diagnostic Rev.586220 cartridge.



Parallell cable for Oceanic (OC-118) / Excelerator Plus drive.

You need to connect the following pins (identical to 1541). This drive works with Zoomfloppy.


There are four screws that hold the bottom plate, turn the drive upside down and remove the screws. Now you have access to the PCB.


Locate the correct chip by the pictures below (i soldered the wires directly to the legs).

Parallell cable for Oceanic (OC-118) / Excelerator Plus


Parallell cable for Oceanic (OC-118) / Excelerator Plus closeup