Under the Hood of the CBM 610


The 610 is a member of the Commodore 600/700 family of computers. There were several models available:

610128k memory
620256k memory
630256k memory, coprocessor card
710128k memory
720256k memory
730256k memory, coprocessor card

While the CBM720 is known to exist, I've never seen a CBM620 myself. Some time ago, I claimed that there haven't been any CBM620s at all. In the meantime, some people have told me that they have seen or owned one. But beware: Because it is really easy to make a 620 from a 610 (just add 16 4164 RAM chips and replace the BASIC ROMs) some people claiming to have a 620 may actually have upgraded 610 machines. This is especially true, if the machine in question is lacking the model/serial number plate.

The Commodore 600/700 computers were designed as business computers. They had a fast CPU (2MHz), Extended BASIC 4.0, more than 64K memory, an 80 character display and an UART chip, allowing baud rates up to 19.2kbit/s.

The 700 family had a builtin monitor like the 8032SK (in fact, for the 8032SK, Commodore used the case of the 7x0 machines).


The machines had a CPU produced by CSG (Commodore Semiconductor Group) named 6509, running at 2MHz. The 6509 was based on the 6502 core but was modified to allow access to more than 64K memory using a strange bank switching scheme. Four additional address lines were available, allowing up to 1MB of memory. However, only 64K could be addressed directly. To access more data, there was an additional register located in the zero page at $01. The contents of this register were used as the value for the high four address lines when using the two instructions

lda (zp),y and
sta (zp),y

An additional register located at $00 determined the execution bank, the 64K bank in memory where the CPU fetches instructions from. These registers do not contain zero after a reset (as one could assume) but $0F. Consequently, the system bank (the bank that contains the kernal) is bank 15.

Apart from the strange memory banking, the CPU is a 6502. If you leave the registers at $00 and $01 alone, the CPU may be programmed like a vanilla 6502. However, the additional memory is not accessible in this case.

The 600/700 family had a SID - something very unusual for a business computer. The 6545 (a slightly enhanced 6845) was used as CRTC, so there was no graphics mode.

Memory map

Here is the memory map of the system bank:

$E000 - $FFFFKernal ROM
$DF00TPI 6525 (keyboard)
$DE00TPI 6525 (IEEE-488)
$DD00UART 6551
$DC00CIA 6526 (IEEE-488, user port)
$DB00External port (on coprocessor board)
$DA00SID 6581
$D900Reserved for disk units
$D800CRTC 6545
$D000 - $D7FFVideo RAM (2KB)
$C000 - $CFFFUnused (4KB)
$A000 - $BFFFBASIC ROM high
$8000 - $9FFFBASIC ROM low
$6000 - $7FFFCartridge bank 3
$4000 - $5FFFCartridge bank 2
$2000 - $3FFFCartridge bank 1
$1000 - $1FFFReserved for disk ROM
$0800 - $0FFFexternal buffer RAM (2KB) (on coprocessor board)
$0400 - $07FFRAM, available for user programs
$0002 - $03FFRAM, used by the system
$0001Indirect segment register
$0000Execution segment register

The memory map for the other segments is rather boring: All segments are completely used for BASIC programs and/or variables (with the exception of the first two memory locations in each bank). The last segment was also used to store the function key strings and to hold the receive buffer for the serial port (256 bytes).

The BASIC worked similar to the BASIC of the C128: The first bank was used for the actual program, the other banks were used to store variables.

System Software and Programming

The 600 and 700 computers had the same kernal. There were two BASIC versions, one for the 128K models (610/710) and one for the 256K models (620/630/720/730).

Programming the machine was - strange, even for a 6502 system. There was not enough memory in the system bank to do anything serious (about 1K free memory, many people had a 4K internal RAM extension at $C000 - see photo), and accessing the memory in the other banks was clumsy. Calling subroutines in other banks was a nightmare and slow like hell. Because the kernal was not available when executing code in another bank, your program had to run without the kernal (and with interrupts disabled if you did not supply your own interrupt handler), or include custom kernal replacement routines.

I've done a complete kernal disassembly many years ago. Unfortunately, the comments are in german. However, it should give you a good starting point for your own work. The assembler used is ca65, the assembler that comes with the cc65 C compiler Click here to download a ZIP archive with the sources and a working binary of the kernal. The disassembled kernal version was version 3. I've seen a version 4 at funet, but I don't know the exact differences. If you know more, please tell me!

Photo safari

For all those who have never seen a CBM 610 (this machine was called B128 in the US), here's a nice front picture. This was my development machine many years ago. It was used a lot and got several hardware extensions, from expansion modules to internal modifications. It is in good condition (I've replaced the keyboard a few months ago) but has some signs of use. If you look closer, you will notice a small area in the lower left corner where the color of the case is missing. You will see more such things later. I have also a second machine that is in much better condition (it's nearly unused), but it is stored away safely. Full view

Here is a back view of the CBM 610. In fact, what you see here is not exactly the back view of the CBM 610, it's a 610 with the backplane of the 510. I got my hands on this backplane some time in 1986 and swapped it against the original one, since the 510 has two additional holes for 9 pin DSUB connectors that are used for the joystick connections. The CBM 610 has no external user port, but there's an internal connector located behind these holes. At that time, my machine had these additional connectors, but I've removed them for a reason I do not remember. Apart from the holes for the joystick connectors, the backplanes were identical.

Rear view

Closeup Another view from the front. The slots in the rear are not only decoration. The power supply is located on the left side as you will see when we open the case.

A first look into the case. Mounted on the left of the top case is the power supply. The piece of insulating tape in height of the transformer works around a design problem: When the case is closed, the power supply will touch the keyboard connector and may even cause a short circuit. The metal box on the left of the mainboard contains the master oscillator (it runs with 18 MHz and is divided by 9 using a shift register). In the mid of the mainboard the kernal and basic eproms are located (this machine had eproms, there were also boards with ROMs - more on that later). The RAM banks are located on the right of the board. As you can see, the machine was extended to 256K of internal RAM (all four RAM banks used). The CPU (the legendary 6509 running at 2MHz) is hidden behind the cable tree in the center. The big gray component behind the RAMs is the crystal used for the UART (the 610 has a 6551 chip and is capable of doing up to 19200bps). Open case

A picture of the ROMs. My machine (as many others) was equipped with EPROMs instead of ROMs. The reason for this was that Commodore had some problems with the software, and the numbers sold were very low. The adapter sockets were made by Commodore. Behind the EPROMs, the character ROM and the 6545 video RAM are visible.

Eprom view

Another picture with a better look on the adapter sockets. On the left side, you see a 4K RAM extension at $C000 using two additional 2K static RAMs. The machines had full address decoding for the additional RAMs. The connector in the background is the keyboard connector.

Eprom view

A view on the main CPU. To the right of the 6509 CPU, the 6581 SID (Sound Interface Device - this was the same chip as in the C64). The SID was a 1MHz device but running at 2MHz, so it was not possible to read the SID registers because of timing problems. The big chip on the left of the 6509 is the 6545 CRTC. Below the SID, you see a 6525 TPI (Triport interface) that was used as a keyboard interface. The connector above the CPU is the expansion port. The two connectors partially visible on the upper right are for a internal memory expansion and for the coprozessor card (the 600/700 machines could be equipped with a Z80 or 8088 coprozessor, but I'm not sure if these cards were only planned or actually sold by Commodore).
If you look at the manufacturing dates printed on the chips, you will notice that they differ greatly. These chips are not the original ones, they were replaced by me at some time. Especially the SID had a second life as a music device in a 68008 computer for some time.

Memory bank view A closeup of the four RAM banks. The original board had only the lower two banks installed, the others were originally empty. Above the RAMs on the left side, the PLA (an address decoder for the dynamic RAMs), more on the left, the 6551 UART and the 1.8MHz crystal. To the left of the RAMs, the 6525 TPI used for the keyboard, and in the top left corner (again) the 6581 SID.
Between the RAMs and the 6525 TPI, you can see the PAL/NTSC bridge. It changes the level on an input port of the TPI and is read by the kernal on startup. Opening this connection is all that is needed to switch the machine to NTSC.
The connector in the front is also used for the internal RAM expansion.

Upper part of case Before having a look at another board, a short view of the upper case. The power supply was a switching power supply. On the left side of the PS (not visible in the picture) a small internal speaker was mounted that was driven by the SID. So the 600 family was able to produce sounds without a sound capable monitor (in difference to the C64 and C128).
On the lower left, the unused holes (see above) are visible. The connector just in front of these holes is the userport connector that does not have a connection to the outside.

Here is a picture of a second board (it's a spare board, I do not have a case for it, but it's fully functional. So if you have a spare case to offer, please send me a mail!). It is interesting to look for the differences. This board has only 128K of memory, it's equipped with ROMs instead of EPROMs, and it has a 6526 in a ceramic case (in the top left corner). Another very interesting thing is, that the SID has no socket! I've never seen this before, not in the C64 and not in any other 610.

Another board
IEEE-488 interface Ok, last photo. This is the IEEE488 port of the 610, in front of it, another 6525 that controls the port. On the left, the connector for the userport. The AMP connector on the right is the expansion connector, below of it (right to left), SID, 6509 and 6545. The small connector between the IEEE488 and the AMP is the sound output.


* Heute schon geust?! Nr. 0
Issue zero of an old club magzine named "Heute schon geust?!" (in German). Contains detailed instructions on how to extend a CBM610 to 1MB internally using 41256 RAM chips.
* Heute schon geust?! Nr. 1
Issue one of the same magazine (in German).
* Heute schon geust?! Nr. 2
"Heute schon geust?!", issue number two.
* Internal 1MB memory expansion for the CBM 6x0 and 7x0.
A translation of the article from HSG0 into english.

The press

* MC 8/1983, page 10
An announcement of the B series (in german). The CPU is improperly specified as an 6809.


Valid HTML 4.01! index.php; last change: 09-Nov-2012