Radio Shack 26-3029 CoCo Disk Controller High Density Modifications
I've been toying with the idea of using HD disks and drives on a CoCo for quite some time now. There's been a mod out there for a long time that applies to the first generation CoCo controller (26-3022)which apparently works well. However, I'm not really a fan of it- mainly because that controller is loaded with analog adjustments and requires 12 volts to operate, which requires you use a multipak.
The modifications below are a prototype. My selections of chips may seem odd, no doubt some of you will point out better ways to do this mod. I just used what I happened to have in my personal inventory. Use this as a guide. If you have a better way to do it, please do so, and let me know. This is an open project!
Someone was kind enough to send me a copy of the Tandy service manual for various disk systems. The schematic for the second-generation disk controller interested me, since the WD1793 is technically capable of running the disk interface at high-density rates. Even better, though: at some point Tandy realized that the WD1793 sucked, and the Fujitsu MB8877A (datasheet) works a lot better. The MB8877A has a bit faster logic internally, and a good portion of the 26-3029 controllers out there already have them installed.
Let's just step back and talk about disk drive formats before we get any further into this. The original CoCo 5.25" low density disk format uses a drive that spins at 300 RPM, and the data is encoded on the disk at a 250 kilobit rate. The older 8" disk drives spin at 360 RPM, and encode their data with a 500 kilobit rate. Disk controller chips like the WD1793 and MB8877A were designed to work with either data rate for 8" and 5.25" drives. Coincentally, the high-density 3.5" floppy drive in many PCs also rotates at 300 RPM and uses either 250 kilobit rate or 500 kilobit, depending on if a low density 720k or high density 1.44M floppy is loaded in the drive. So, the chip inside the 26-3029 is actually capable of talking to a drive at 500kb/sec- exactly what a HD floppy wants.
Also as an aside, most high density 1.2MB floppy drives spin at 360 RPM, which in itself isn't really a problem. However the data rates are 300 kb/sec and 600 kb/sec for low and high density media, respectively. While you could mod the controller to read all these different formats, that in itself is much more complex. Given the rarity of 1.2MB drives, I personally don't think it's worth the effort.
The 26-3029 schematic can be found here (1.2MB). Use this for reference. My mods are in this schematic.
You can also look at some pictures for reference. Before, Mid-way, After...
The most basic mod you could do, if just as a quick experiment, would be to try replacing the 4MHz crystal with an 8MHz one. This would double the clock rate of the controller and you can read and write HD floppies. Of course, it's then incompatible with low density disks. The mod I did on the prototype therefore consists of several pieces.
Step 1: clean out stuff from the board you don't need.
I chose to use a TTL oscillator for my 8MHz clock. If you want to use an external oscillator like this, remove the following components from the PC board:
Clip pin 10 of U12 (74LS04) to disconnect the old clock output from the rest of the board.
Step 2: Adding decode for the new control registers
Normally the disk motor control register exists at all addresses between $FF40 and $FF47. Only $FF40 is used. Also this is ordinarily a write-only register. When you're done with this step, you'll end up with four selects you can use. The existing write-only register at $FF40 will work. An additional select is provided allowing a read of $FF40 (not implemented, but you could use it for something else if wanted) and provides a new 6-bit write only register at $FF41 and another select output for a read at $FF41 (which I used later for disk status info)
Take a 74AHC139 (or similar, LS, ALS, HCT, whatever you have- not particularly important) and bend pins 1,2, 4-7 and 9-15 horizontally. Clip off the thin ends leaving the thicker wire part to solder to. Solder the unbent pins onto the same pins on top of U14, which is also 74LS139.
Clip pin 4 of U5, a 74LS02. This disconnects the old chip select line to the 6 bit register chip, U2.
All the references below are to the pins on the piggy-backed 74x139:
Now prepare a 74LS174 or similar. Bend pins 2,5,7,9,10,12,15 up, clip them short again. Solder the remaining normal pins on top of U2, a MCM14174B.
If all went well, you should now have a second register at $FF41. Now would be a good time to test your work. Put the controller back in and make sure your CoCo still powers on properly and works. If you clipped all the clock generation stuff, you won't be able to read and write disks. However the drive light(s) should at least come on when you attempt to use the disk drive. If not, either my instructions are wrong (sorry!) or you did something wrong. Check it again. If that's working, try doing a POKE &HFF41,1 in BASIC, and using a logic probe, see if pin 2 of the 74x174 is high. Hit reset or poke 0 back into that address, and it should go low. This is going to be how the drive density mode will be selected.
Step 3: the new clock circuit
I made a clock selector out of a 74AHC00. I intended to use a 2 to 1 data selector, but I didn't have any handy. If you want to build my clock selector:
This chip will select either the 8MHz clock or 4MHz clock. But, we don't have a 4Mhz clock yet. So, let's make one.
I used a 74LS112 J-K flip flop as a clock divider, but you can pick your preferred method. If I had one, I'd use a 74LS93 and piggy back onto the existing one- but I didn't. As a side note, the power pins on the '93 are not in the usual locations, so don't put anything on top of it except another '93.
For the LS112:
About the FDC9216:
According to the data sheet, the FDC9216 is designed for 5.25" drives only. The FDC9216B is designed for both. I did get hold of FDC9216B chips for this project, but after it was working I put the original back in and discovered it worked fine. I'd recommend getting the FDC9216B just to be safe.
Feedback from the disk drive:
I was trying to read some data back from the disk drive. Pin 2 of the floppy connector is "density select". Some sources say its an input, some an output. I get nothing on it. The disk change input is pin 34. If you want to attempt to read these signals, here's how I did it.
I used a 74LS367A. Bent up all the pins and soldered it on top of another free chip.
My inputs work, but I'm not sure how to interpret the results I'm getting. The density select does nothing for me. Feel free to skip this step, as it's not required to make HD floppies work.