Fix It Guide: Coleco Adam Controller

The extra line is the Smart Basic cursor being caught by my screen capture program.

I have added a new video on YouTube on my Retro System Rescue channel that gives details on how to disassemble and recondition the Adam controller. In this video I make use of a simple program I wrote that lets you test all aspects of the controller in Smart Basic.

Here is the program for you to type in if you want to test your controller:

In this program I am using the values of the controller to make characters inverse if the controller is being activated. For instance on line 200 I take the value of PDL(5) and compare it to the value of 1. If they match then the result is 1 and I multiple it by 128 and add this to the ASCII value of the letter U to get an inverse U if the controller is being press up. Any other value returned by PDL(5) will cause this formula to show a normal letter U.  If you wonder why I use an ‘*’ for the ‘#’ sign on the controller this is because the number sign has the ASCII value of 35 and when you add 128 this actually tells smart basic to backspace on the screen. So I used the ‘*’.

64 MB Hard Disk for your Adam!

I have been experimenting with MicroFox’s Floppy Disk Emulator, also known as the Virtual Disk Drive (VDD). Using some software I wrote on my PC I was able to create a 64mb disk image that the VDD would open (64mb is the limit it appears) and then initialize it with EOS and it is recognized as a 64MB disk. The AdamEM emulator on the other hand doesn’t like it, but that is ok.

Here is a copy of this blank, initialized disk image. Copy some files to it, let me know how it works out.

Type In – A DDP Verifier

In the late 70’s, early 80’s there were many magazines and books devoted to the personal computers of the time that contained programs that you could type into your computer, save and use. Though tedious it was often the only way many people could get new software for their orphaned systems. With this in mind I present DDP Verify, a small type in that will let you non-destructively verify if your tapes are good or not.

Let’s Make a Tape – Squashing a Bug

To begin with you will need a blank tape and a tape containing a copy of Smart Basic. The reason for two tapes is we will be creating a quick booting tape that will be used to verify other tapes. If you happen to run any of the programs with the Smart Basic tape in drive 1 IT WILL ERASE you Smart Basic tape. If you have an original Colecovision Smart Basic version 1.0 you will want to do something before you get started. You will want to squash a bug!

There is a bug in Smart Basic in that every time you load a program with a REM or DATA statement it will add an extra space after the REM or DATA, eventually pushing your code off the line and ruining the code. To fix this is easy:

  1. Start Smart Basic
  2. Type the following code:10 PRINT “Data bump bug fix”
    20 POKE 15830,8
    30 POKE 15831,55
    40 POKE 15832,19
    50 POKE 15824,216
    60 NEW
  3. Save the code as HELLO on the tape using save HELLO (it is case sensitive)
  4. Reboot your tape and it should tell you the data bug is fixed, if not then you saved it with the wrong name

If you already have a HELLO program on your tape, load it and add the code above to it in the beginning. You can eliminate line 10 and line 60 if you want and combine all the POKEs onto one line.

Typing in the Program

Now we are ready to start typing in earnest! To create the DDP Verify tape we need to type in the loader which reads the data and the data statements which holds the program. First I will explain the loader:


1 HIMEM :39000: R = 40004: B = 40128
2 DATA 1,0,0,17,0,0,62,8,33,192,156,205,246,252,201
3 FOR K = 40000 TO 40014: READ D: POKE K,D: NEXT K
6 IF A = -3 THEN CALL 40000: PRINT " DONE":END
8 IF A = -1 THEN READ A: FOR K = 0 TO 15: POKE B,A: B = B + 1: NEXT K: GOTO 5
9 POKE B,A: B = B + 1: GOTO 5

How it works:

1 > Tell SB to not touch memory above 39000 and set up the variables R and B. R holds where we will poke tape records and B is where our tape record buffer is.

2 > This is a small machine language (ML) code that we use to access the EOS routines to write a block to tape. The variable R which we defined in line 1 points to the block low byte. Here is the code:

LD BC,0 ;Block High Byte
LD DE,0 ;Block Low Byte
LD A,8 ;Tape drive 1
LD HL,40128 ;Buffer
CALL 0FCF6h ;Write one block

3 > This line reads in the ML in line 2 and pokes it into memory starting at address 40128 which we defined on line 1

4 > This line pauses and prompts you to put in the blank tape we will be turning into a the Verify tape – PLEASE follow this instruction.

5 > This reads in a byte from the data statements. The byte can have one of 4 values:

0 – 255 = This is a byte that will be poked into memory
-1 = This tells the loader that the next byte to be read gets poked into memory 16 times – This saves on typing
-2 = This tells the loader that the next byte contains the record number this block of data gets saved to
-3 = This tells the loader we are done, write the block to tape and end

6 – 8 > These lines process the data that is read as described above

9 > Pokes the data into memory at B, increments B and then loops back to line 5 to do more

Once you have typed in the LOADER program save it. Now we will type in the code:

DDP Verify

30 DATA -2,0
31 DATA 243,049,142,211,120,050,255,255,033,050,201,017,088,246,001,003
32 DATA 000,237,176,001,000,000,205,032,253,001,192,001,205,032,253,033
33 DATA 000,000,062,003,205,041,253,033,000,008,062,002,205,041,253,205
34 DATA 056,253,017,000,004,033,000,000,001,128,000,205,023,253,033,192
35 DATA 011,062,004,205,041,253,033,000,056,062,001,205,041,253,033,128
36 DATA 056,175,205,041,253,001,001,007,205,032,253,014,003,006,001,022
37 DATA 000,030,000,033,192,011,025,017,032,000,121,203,007,203,007,203
38 DATA 007,203,007,128,205,038,253,006,031,014,023,022,000,030,000,033
39 DATA 000,008,205,054,252,062,032,017,000,003,033,000,008,205,038,253
40 DATA 062,000,050,053,201,033,054,201,205,041,201,033,187,201,205,013
41 DATA 201,205,108,252,033,005,202,205,013,201,062,028,022,000,030,006
42 DATA 205,057,252,006,255,014,001,017,000,000,197,033,184,201,205,041
43 DATA 201,001,000,000,058,255,255,033,000,001,205,243,252,032,004,062
44 DATA 079,024,020,033,110,202,205,013,201,205,108,252,033,005,202,205
45 DATA 013,201,062,127,050,053,201,205,051,252,193,019,016,204,062,001
46 DATA 185,032,006,014,000,006,001,024,193,033,007,202,058,053,201,183
47 DATA 040,003,033,059,202,205,013,201,205,108,252,024,131,058,166,254
48 DATA 087,058,165,254,095,213,062,028,022,000,030,020,205,057,252,205
49 DATA 041,201,209,062,028,205,057,252,201,126,183,200,205,057,252,035
50 DATA 024,247,000,000,000,000,012,043,045,045,045,045,045,045,045,045
51 DATA 045,045,045,045,045,045,045,045,045,045,045,045,045,045,045,045
52 DATA 045,045,045,045,045,045,043,124,032,068,068,080,032,086,101,114
53 DATA 105,102,121,032,040,099,041,032,087,105,108,108,105,097,109,032
54 DATA 072,105,099,107,115,032,124,043,045,045,045,045,045,045,045,045
55 DATA 045,045,045,045,045,045,045,045,045,045,045,045,045,045,045,045
56 DATA 045,045,045,045,045,045,043,013,010,032,111,032,061,032,082,101
57 DATA 097,100,105,110,103,032,079,032,061,032,080,097,115,115,032,127
58 DATA 032,061,032,070,097,105,108,000,111,008,000,032,082,101,112,108
59 DATA 097,099,101,032,116,097,112,101,032,119,105,116,104,032,116,104
60 DATA 101,032,116,097,112,101,013,010,032,116,111,032,098,101,032,118
61 DATA 101,114,105,102,105,101,100,032,097,110,100,032,116,104,101,110
62 DATA 013,010,032,112,114,101,115,115,032,097,110,121,032,107,101,121
63 DATA 046,046,046,032,000,024,000,032,078,111,032,101,114,114,111,114
64 DATA 115,032,112,114,101,115,101,110,116,044,032,112,114,101,115,115
65 DATA 032,097,110,121,013,010,032,107,101,121,032,116,111,032,099,111
66 DATA 110,116,105,110,117,101,046,046,046,032,000,032,069,114,114,111
67 DATA 114,040,115,041,032,112,114,101,115,101,110,116,044,032,112,114
68 DATA 101,115,115,032,097,110,121,013,010,032,107,101,121,032,116,111
69 DATA 032,099,111,110,116,105,110,117,101,046,046,046,032,000,032,065
70 DATA 100,106,117,115,116,032,116,097,112,101,032,116,104,101,110,032
71 DATA 112,114,101,115,115,013,010,032,097,110,121,032,107,101,121,032
72 DATA 116,111,032,099,111,110,116,105,110,117,101,046,046,046,032,000
73 DATA -3

This is the code for DDP – Verify. Once you have typed in it save it as VERIFY. DO NOT RUN IT – If you do it will ruin the tape you have in the drive.

After saving VERIFY remove the SMART BASIC tape and put in the blank INITIALIZED one you made. Run VERIFY and follow the prompts. When done you should be able to reset the system and DDP Verify will start. You can then follow the prompts on the screen to start verifying your tapes.

The Screen

When DDP Verify is running it will show a ‘o’ as it is reading a block, and a ‘O’ if the block passes or the checkerboard if it doesn’t. If you want to know which block it is you can  count them on the screen. Each line is 32 blocks long so if you fail on the first column on row 3 then you failed on 2 * 32 + 1 or block 65. I kept things simple to decrease the amount of code and typing in.


If you decide to do this let me know.


  • Disk & Tape images to use in an emulator and the DDP Verify basic code VERIFY.ZIP

Make Your Own 5 Minute Data Pack

This is a very brief post that I will give more information on later:

As part of the first of many new games that I will be selling for the Adam this year I have come up with a way of creating quick data packs to hold these games. My games (and other software) are standalone products and as such do not need a complete 256kb data pack to hold them. So to make it easier I have figured out how to make a data pack in 5 minutes that will hold about 20kb of data. To do this is easy, but before you do you may wish to read this post on making a true data pack as you will be doing the same thing with some minor changes.

What you need:

  • An original super game pack, buck rogers, donkey kong junior,  or the like. It can not be a normal data pack
  • a new blank audio tape – any size is ok
  • a compatible tape deck
  • a copy of file manager

Making a new tape:

To make a 5 minute tape you are going to do what is detailed in the post about making data packs from audio tapes with the exception that you will need a timer. Set the timer for 5 minutes then start recording side A. When the time goes off. stop both decks, flip both tapes and record side B. Then follow the steps in the previous post about making the holes in the new tape.

Putting software on the new tape:

You can use File Manager to copy up to 23 blocks on the new tape you created. The first block is the code that loads when you reset the Adam and needs to be on block 0. The remaining blocks hold code that you would load with a loader routine that is part of the block 0 code. I will detail how this can be done later.

Help – resolved

Can you do the following and let me know your results:

  1. Download this zip file
  2. Unzip it and start AdamEm with File Manager as disk 1 and the image called Heather as disk 2
  3. Press F5 to switch to disk 2, F2 for Media Functions and F4 for edit
  4. Press F3 for Block Number and type in a 2 and hit enter.
  5. Press Enter again
  6. Now you are looking at Block 2 Sector 0. On a real Adam press Home and Up arrow until you are looking at Sector 4. In the emulator press the “5” on the keypad and the up Arrow (at same time)
  7. Does it look like the screen shot to the right? All zeros?
  8. If it doesn’t let me know
  9. If it does then  humor me and go to Hex Edit and upload the file called HEATHER.DSK and then scroll down till you get to the section starting with 00000A00
  10. You will see that there is code there, but the same corresponding bytes in the image are zeros. You can verify this by scrolling up a to sector 3 in the image on the emulator and seeing the last of the code that loads

Please let me know your results – either here or on Facebook


Thanks to the information from Eric I was able to determine that I was not taking into account the interleaving of the data on a disk image. The tape images do not use that so it confused me when I started working with disk images. If you are curious how it works here it is where the first number is a 256 byte sector and the second number is the actual sector it should go in. This is using 4kb blocks:

0 -> 0
1 -> 1
2 -> 10
3 -> 11
4 -> 4
5 -> 5
6 -> 14
7 -> 15
8 -> 8
9 -> 9
10 -> 2
11 -> 3
12 -> 12
13 -> 13
14 -> 6
15 -> 7


Converting an Audio Tape Into a Digital Data Pack

If you are using an Adam computer with just a digital data drive you will eventually come to a point where you will need more data packs. There are a few possibilities available, you can purchase used ones and hope they are still good, you can buy NOS (New / Old Stock) (ANN sells them here) or you can make your own!

Getting started:

To get started making your own you will need a few things:

  1. A dual cassette tape deck, the simpler the better. Those with complicated levels and equalizers will make it hard for you to get it right. I use a $5 all-in-one system (Record, Radio, Dual Cassette) I got at a yard sale and it works flawlessly
  2. A good digital data pack to use as a master that has a holes in it for the capstan
  3. 60 minute blank cassettes. I have used Scotch, JVC and Maxwell but others will work too
  4. A simple soldering iron (or a drill with 1/4″ bit) and a utility knife or exacto-knife

Step 1: Preparing the audio and testing

We need to prepare the audio tape as follows:

  1. Turn tape over so side B is showing
  2. Plug in soldering iron
  3. When iron is hot we will melt two holes in the top of the case right below the record enable tabs, refer to the pictures and an original data pack. Do not go through the other side, just the B side
  4. Once plastic is cool use the utility knife to clean off any excess

Now we want to test if the tape will work in an Adam. Some tapes are made cheaply and they bounce around at high speed. To test it:

  1. Turn on your Adam
  2. Press Escape / WP to get into word processor mode
  3. Put in the new tape into drive A, it should go in easy, if it is hard to get in make sure the holes are big enough and that you cleaned away all the debris
  4. Press Store / Get
  5. Press VI (Get)
  6. Press III (Drive A)

The tape should fast forward to the beginning and back a few times before Smart Write gives up. You want to listen to be sure that the tape is not bouncing around. If it is do not use that tape, if it isn’t then we can proceed.

Step 2: Testing the Master Data Pack

We need to make sure the data pack will work in your tape recorder. Original Coleco data packs will not without doing a little “surgery” to the case. Before we do this check all of the data packs you have and look for ones that have 4 holes in the tape read area. The Coleco packs had 2 next to the place where the read head goes and the markings for the other 2. If you do a side by side comparison of the data packs and the audio tape you will immediately see the holes I am talking about. If you do not have a data pack with the necessary holes you can create them with a drill but you have to be very careful and pull the tape away from the hole.

Once you have located or created a Master Data Pack, put it in the tape record and make sure that it will go in correctly like an audio tape will.

Step 3: Setting up the Tapes for Copying

Before copying we need to get the tapes into position. To do this:

  1. Rewind both tapes on Side A – (on a data pack, Side A is the side without the two holes on top – the side you see when it is in the Adam)
  2. Use a pen or pencil to slowly advance the tape until the leader is just about ready to go around the roller

Step 4: Copying

I am going to use my tape deck setup as the example.

  1. Put the audio tape in the record deck. Press Pause and then the Record / Play button
  2. Put the Master tape into the play back deck
  3. Press Play on the master, the record deck starts automatically
  4. Once the master is done playing stop the record deck
  5. Rewind the master a bit and listen for the high pitched sound of the data. Keep doing this till you find it and then let it play till it stops and go about 5 seconds further. Press stop and flip the tape over
  6. Rewind the audio tape the same as you did with the master, listening for the end of the data and then go about 5 seconds further. Press stop and flip over
  7. Press Pause and then the Record / Play button on the audio tape
  8. Press Play on the master

Step 5: Did It Work

If all has gone well you should now have a copy of the master on the audio tape. You can try to use it in the Adam now but I have learned that the copies are not faithful. But this is ok, we really only wanted the index marks that the Adam reads on the data pack from the master data pack, not the data. So my next step involves using CP/M to format and then verify the tape. The reason I use CP/M is that the verify actually verifies every block where as the INIT (initialize) in Smart Basic only initializes the directory. You can use Smart Basic if that is all you have, or even TDOS or File Manager.

Over the past 2 days I have made 12 Audio Data Packs, seven from older audio tapes I had and 5 from brand new ones. Of the older tapes, 2 failed. Of the new tapes all 5 worked.

Good Luck 🙂

P.S. The beautiful woman in the pictures is my wife Heather <3

P.S.S. Let me know if in the comments if you try this and the results you get.

MakeRRom – a simple utility

Based on a conversation I had on FaceBook and after reviewing the disassembly of the program written by Stephen Munnings in 1985 called GameSave that would dump the contents of a cartridge plugged into the Adam to a file in CP/M that you could then execute I have created a newer hybrid version of this: MakeRRom.

MakeRRom (Make Run-able ROM) is a program written in Turbo Basic, an old MS-DOS compiler created by Borland that I have been using for almost 30 years. MakeRRom will take a PC file that contains a ROM cartridge dump and create a CP/M (or TDOS) compatible program that you can then import into a disk image for use in the ADAMEm emulator or copy over to your real Adam. Unlike GameSave you do not have to have the cartridge and you create your files on your PC.

How it works:

The heart of MakeRRom is a 32 byte Z80 assembler routine that handles setting up the Adam to execute the file as if it was a ROM cartridge:

The program MakeRRom then takes this code, appends the code for the ROM cartridge and then saves it as a .COM file to be used in CP/M or TDOS.

When you run the created file the Z80 code will copy the appended ROM data to 8000H (the upper 32KB bank of RAM) and then copy the small loader called JumpCode to the top of memory and execute it. JumpCode in turn sets up the Colecovision OS7 Rom in the lower 32K bank and jumps to the cartridge start point.

How to use MakeRRom

MakeRRom.exe is a 16 bit program so you may need to run this either in DosBox or on an older PC. To use it, copy MakeRRom.exe and the ROM file you want to work with into the same folder. Then at the dos prompt type:

C:\> makerrom filename.ext

And after a few moments it will create a file called that is your ROM file and the loader.  Then you can use the process I described here to import it into TDOS or CP/M.

In the download below I have included a copy of the Cabbage Patch Kids Adventure ROM called patch.rom and the resulting file. If you use Debug to view the ROM file and the .COM file you will see how the first 32 bytes of the .COM file are the Z80 loader.

Cool – but why do it?

The simple answer is because I can. The more complex one? I can download all the Colecovision ROMs online, batch convert them into .COM files, import them all into a TDOS IDE image, copy the image to compact flash and now have all of them available to run at anytime on my Adam 🙂


How to connect a Mega Copy

Here is a quick post on how to plug one of the rare Mega Copy devices into your Adam. A Mega Copy was a device that was plugged into your Adam in between the Adam and the second data drive. When it was used it allowed you to copy a data pack onto a blank audio tape. A very useful thing to be able to do!

Below are pictures of how you connect it. Look closely to determine the alignment of the cables, do not plug them in backwards, you may end up ruining the device.

Once connected, turn on the Adam and boot the Mega Copy tape or disk.

Fixing a Bad Video Screen

If you come across an Adam that has a lot of static, sound issues, or no display on either channel 3 or 4 there is a simple fix for this. It requires opening up the system to get to the Colecovision board. To do this:

  1. Unplug the memory console from everything
  2. Remove the expansion slot cover
  3. Remove any cards in the expansion slot
  4. Unhook and remove any digital drives and empty drive face plates
  5. Turn over system and remove the 4 screws that hold on the face plate and the 8 screws in the recesses on the bottom
  6. Flip back over and remove the face plate and the top cover
  7. Now that you have the system open remove the 2 reset buttons, they just slide off and then remove the screws holding the top RF shield in place
  8. Towards the back of the Colecovision board you will see a metal box. This is the RF Modulator. Pop off the metal cover and you will see this circuit board

For the next step you will need a plastic screwdriver. A metal one will conduct electricity and can short out your computer.

Once you have the screwdriver, reconnect your Adam to the TV, plug in the keyboard and hook up the power supply from the printer then turn it on.

Using the plastic screwdriver, slowly adjust the Channel “B” alignment screw clock wise or counter clockwise till you have a good signal on both channel 3 and 4.

To adjust the audio we need some sound. The best thing to use if you have one is a game cartridge that plays music when you turn it on. Put one in the Adam and pull the right reset to start the cartridge. Now using the Audio subcarrier alignment screw you can turn it a little clock wise or counter clockwise to fix the sound.

Once you have done all this you can unplug everything and put it back together.

Turbo Pascal for CP/M and TDOS

I just finished making a CP/M (TDOS) data pack for Don in Canada containing Turbo Pascal 3.0. It was a little project getting it from the Internet into an emulator and then over to a real Adam. The steps involved were:

  1. Find and download the software software (Duh)
  2. Arc all the software using PKARC
    At the time of this post I am waiting for a new Compact Flash adapter otherwise I would have used the method described in the Making Tapes and Disks post to get the files on to a tape. But since I can’t at this moment I instead copied the archive to the Adam using Hyperterm on my XP system, a null modem cable, the serial port and QuickTerm on the Adam in TDOS. Once I had it on the Adam I could continue:
  3. Unarc the archive in TDOS
  4. Use the PDTINS.COM file to setup the terminal for Turbo Pascal. The Adam uses a Heath 19 emulation in TDOS but I learned that the Lear Adam 25 works on the adam too

After this I took a freshly formatted CP/M tape and copied the files to tape from the CF on the Adam.