Note: This section refers to CoCo 1 NOT 2, see addendum at end of the page for CoCo 2 specifics.
Much has been written over the years, about the similarity/differences between these machines. Without spending considerable time covering the same ground, essentially the hardware (CPU, video circuitry, ROM/RAM arrangement etc.) is identical in both machines. The major difference is the software aspect. Although both contain Microsoft BASIC interpretors, with the same dialect of BASIC they are in fact arranged totally differently. This means that although you can LOAD and RUN a 100% BASIC program written on either machine, any machine code will probably fail if it calls any ROM routines. In addition, the BASIC keywords are numbered differently which effectivly prevents the loading of Dragon tapes directly on the CoCo (& vice versa) because the end result is gibberish.
There are three ways around this. Firstly, any BASIC program can be loaded if saved in ASCII - CSAVE "",A - and machine code can be debugged, with the appropriate ROM calls re-patched. Secondly, if you have 64K RAM and a copy of the other machines BASIC interpretor you can kick the machine into RAM mode, and load the interpretor into RAM and run from there. Finally, you can take the ROM chips out the machine, and replace them with the ROM chips from the other machine. Well nearly...
There are flaws in all of these three methods. The first one is long & tedious, and if you have both a Dragon & Tandy, will result in duplicated programs, and running two completly different disk systems. The second is OK if you only want to run programs from one machine on the other occasionally. It is also a bit tricky to set up, since not only are you swopping interpretors in & out of the system, you also need to take a copy of the new workspace area (0-1023 in memory) and if it comes to disks.... In addition there's the keyboard problem. This also shows up if you decide to implement the third option. This assumes you no longer wish to use the machine in its original form (either CoCo or Dragon) and want to make as good a permanent change to the other.
Replacing the ROM Chips: The first thing to note is you cannot simply swop the ROM chips from either machine. In order to work properly, the ROM needs patching first. From now on I'm assuming the conversion is from CoCo to Dragon since in addition to the problems awaiting, there is also the fact that the Dragon PROMS are soldered on the main board, not socketed. Hence, the Dragon's ROM will need to be copied to main RAM, the patches made, it saved to disk and then blown onto EPROM. It can be done for simplicity's sake as follows:
SAVE "DROM",&H8000,&HBFFF,&H8000 CLEAR 200,16384 LOAD "DROM",16384
The patches are as follows:
With a D64 ROM, patch out the serial chip reset sequence by poking &H12 (NOP instruction) to the following locations:
&H7B68 to &H7B6C ie. POKE &H7B68,&H12 POKE &H7B69,&H12 etc...
With a D32 ROM, patch out the memory detect sequence. D32's use a bit on a PIA to detect the memory on the main board (16 * 16K chips, or 8 * 32K chips). The Tandy configuration must be set to the 8*32K variety by:
Once the EPROM is blown, the next problem is putting a 28 pin EPROM into a 24 pin PROM socket. Fortunately, most of the pins are the same on both chips, and the remaining few can be routed with wire. Diagram 1 shows the pinouts, and appropriate wiring. For the mods I made to my CoCo, I used a 28 pin chip socket. Bend the pins of the chip socket marked 'X' on the diagram out, and solder a short length of solid core wire (3-4cm) to each one in turn. Remove the Extended BASIC PROM chip from the CoCo, and taking your chip socket, carefully insert the ends of the wires into the PROM chip socket marked 'Y'. Thus, pin 2 is routed to PROM skt 23. Pin 23 is routed to PROM skt 20. Pin 20 is routed to pin 14, note that pin 14 is not bent out. Finally pin 28 is routed to PROM skt 26, note that pin 26 is bent out but is not connected. Now, carefully press the 28-pin socket into the PROM socket, it will not seat flat obviously because of the wires protruding from underneath. The sockets must be lining up at the bottom, ie. the remaining 4 EPROM socket pins should be at the top of the socket. With this procedure accomplished, insert the 2nd of the Dragon 8K EPROMS (the one containing code $A000-BFFF) and switch on. The Tandy should power up in Color BASIC mode only. You can therefore check the memory between $A000-$BFFF simply by PEEKING and comparing. When this is OK, repeat the installation process, this time for the first EPROM. Obviously, you cannot check this one, but if the machine fails to start up, then you know which EPROM is the problem.
The method described above is not rigid, and can be altered depending how adventurous you feel. For example, if you're confident about soldering directly to chips, you can dispense with the 28-pin socket and use the EPROM directly. In addition, the wires could be permanently soldered to the board to give a better connection. However, I used the above method and have had no problems.
When you switch on the CoCo with the new chips installed, you should be greeted with the familiar Dragon Data copyright message, and a black/green cursor (as opposed to the flashing technicolour CoCo variety - which is better? perhaps we could have a vote on it?). However, before a satisfactory smile spreads across your face, try typing the words 'GREAT IT WORKED!' and see if what is displayed resembles anything you typed.
There remains but 1 problem: The Keyboard! Dragon Data and Tandy took it upon themselves to wire the keyboards up slightly different and hence the ROM code differs in how it reads the keyboard. This can be rectified in 2 ways - software or hardware modifications.
Before you program your EPROM, you can patch enough code to read the different keyboard configuration. This is tricky, as you will need to find some unused space in the ROM area (probably towards $BFFF is a good bet) and patch in a copy of the Dragon routine.
Alternatively, and this is the version I went for, you can alter the keyboard cable. The keyboard is connected to the computer's main board via a 16 way cable. On my CoCo 1 this has a connector at each end. You'll need to remove this cable and make up one of your own. In order to do this use some 16 way ribbon cable (Maplin XR07H, Pg 125), and two 0.1 in PCB connectors (Maplin RK69A * 2 & YW25C * 4, both Pg 222). Diagram 2 shows the wires to be changed, in fact only 8 of the 16 are displaced.
Once this is done, you should now have a Dragon in a CoCo case. It should be 100% compatible with all Dragon S/W as far as I am aware. The only area which will fail is the printer port, since the Dragon has a parallel port and the CoCo serial - obviously the ROM routines differ.
The route to achieve this change, is as you have seen not too easy and you have to weigh up the benefits of performing this mod, as opposed to obtaining a 'true' Dragon. There are some advantages though, CoCo display's are a lot 'cleaner' than the Dragon's and the board is much easier to upgrade - every chip is socketed!
Addendum:June '95 - CoCo 2 conversion.
My original assumption when this was written was that CoCo 2 modifications would be somewhat similar. However, as of last summer I find that this is not the case. Firstly, Tandy have at least half a dozen variants of CoCo 2 around, so therefore I can only comment on the one I have here. The first change is that everything bar the CPU, RAM chips and SAM chip is soldered in now (even the CPU!). On my board, there is provision for an 8K or 16K EPROM (Color BASIC or Ext. BASIC) selectable via a set of solder jumpers. Upgrading to a Dragon ROM is therefore easier than with the CoCo 1, remove the 8K EPROM, re-solder the links (a solder sucker is essential here) from the 64K settings to the 128K settings and put the Dragon EPROM in. The keyboard is a different kettle of fish though. My CoCo 2 keyboard connects to the CPU board via a single sided obsquere edge connector - the actual keyboard connector being plastic with metal strips through it. The connection to the CPU board can be made using a PCB Latch type connector attached to a piece of stripboard. How you get the keyboard connector attached to the stripboard is a problem - fortunatly I found a similar edge connector sitting on an old TRS-80 Model something or other I had lying around, so I used that. Failing that, it's hunt for similar connectors or solder wires onto the thing.