Monday, 1 August 2016

Commodore 1541 disk drive to 2031 conversion

When I was finishing off the restoration of my first PET, I didn't have much luck with IEEE-488 drives for it. This was before the PET microSD, and I didn't have a disk drive I could get working with the PET. Before I go any further, here's a quick recap on Commodore disk drives and formats:

ModelDrivesSidesMedia DensityCapacityConnection
2040/3040/4040Dual DriveSingle SidedSingle Density170KIEEE-488
2031/2031LPSingle DriveSingle SidedSingle Density170KIEEE-488
8050Dual DriveSingle SidedQuad Density521KIEEE-488
8250/8250LPDual DriveDouble SidedQuad Density1042KIEEE-488
SFD-1001Single DriveDouble SidedQuad Density1042KIEEE-488
1540/1541/1541IISingle DriveSingle SidedSingle Density170KIEC
1570Single DriveSingle SidedSingle Density170KIEC
1571Single DriveDouble SidedSingle Density340KIEC

As you can see, quite a variety of single and double drive, single and double sided, single and quad density. Drives with the same capacity were generally compatible with each other for reading, but not writing. Double sided drives could read single sided disks, but you still had to flip them over if you had used both sides in a single sided drive. So it's often difficult to work out what drive a disk was written in. When I was looking for a working drive for my PET, I found a scan of a German Commodore 64 magazine from the 1980s which had an article about converting a 1541 disk drive into a 2031 clone. (Update, it was 64'er magazine, see the last entry on this page at  Narrowing it down, you can see the 2031 and 1541 have similar specifications, other than the connection type.

DriveNo. DrivesNo. SidesMedia DensityCapacityConnection
2031Single DriveSingle SidedSingle Density170KIEEE-488
1541Single DriveSingle SidedSingle Density170KIEC

The 2031 used parallel IEEE-488, the 1541 used the serial version of the same protocol. 1541's were the most common disk drive used with the Commodore 64, and VIC20, so there are a lot of them around, unlike the 2031 and the other IEEE-488 drives. The 2031 originally came in a large black metal case, using the same drive mechanisms as the 4040 drives. Later the 2031-LP was produced, using the case and drive mechanism from a 1541. Since the schematics of the 1541 and 2031-LP were very similar, the idea was to take a 1541 drive and modify it to match the 2031-LP schematic. The ROM would be replaced with the 2031 ROM (actually a patched ROM to make the 1541 act like a 2031). All the changes were to the IO pins of one of the 6522 chips, so this could be achieved with an add on board which connected one of the 6522's to some IEEE-488 buffers rather than the IEC ports on the drive.
I built this up on a bit of pad board and it sort of worked. The problems I now know were two fold. Firstly, I didn't want to mess up a good drive, so I had started with a 1541 which wasn't working properly in IEC mode, and unsurprisingly, it didn't work too well in IEEE-488 mode. Secondly, there were problems with the IEEE-488 port on both the PETs I was using at the time. Hence the confusion. I later reverted that drive back to IEC mode and fixed the problems with it, but by then I'd built the first version of the PET microSD disk drive replacements and fixed the IEEE-488 ports on my PETs, so I didn't need the drive.
I've decided to revisit this and see if I can get it working, this time starting with a 1541 drive I have already repaired first. It's made up of bits of several drives, but is working via IEC.
The first task is to replace the ROM. I've used an adaptor board and a 2764 EPROM to replace the original 8K mask ROM. There should be just enough space for it.
The second part is the interface board. This time I designed a PCB. It plugs into the 6522 socket, and the 6522 chip plugs into the board. The data and control lines pass through, but most of the I/O pins are not connected to the 1541 board. They are wired to a set of 75160 and 75161 IEEE-488 buffers to drive the IEEE-488 bus.
I used the same connection as my first attempt, a 24 pin IDC header and IDC 24 way GPIB connector. This extends over the neighbouring chips, so is raised up on an additional IC socket.
It's tight, but it all fits in place. The jumpers are for drive ID selection, both on for 8, right only for 9, left only for 10, both off for 11.
When I built the first version, I had started with a case that had arrived with some holes drilled into it presumably from drive ID or ROM switches, so didn't mind modifying it further to add the IEEE-488 Connector. I may fit switches for drive ID into the holes in the case at some point, but they are badly position if you want to stack things.
The original 1541 drive had two holes for two 6 pin DIN IEC connectors, which lined up with sockets on the PCB.
I filed these out to be able to fit the new connector.
The two DIN connectors on the 1541 board need to be desoldered to leave space for the GPIB connector, the cable runs over the top of the capacitor.
That all fits back together neatly.
OK, time to test it out. The drive powers on, the disk spins and the red light goes out. Good start. Lets see what the PET says.
Marvellous, seems to be alive. I found a 2031 test program in the PET archives, so gave that a go.
After lots of activity, that also passed, so it looks like it's working. Like the IEC bus, these devices are designed to be chained together, I can use this to transfer from disk to disk.  I've tried reading and writing disks and disks full of content to the drive, and all seems to be working.
It's quite a neat modification inside as well. The original 2031LP would have had a PCB mount GPIB connector, and some additional filtering on the signal lines but this does the job quite neatly. (Update: here's a galley of nice pictures of a real 2031LP from xAD nIGHTFALL)
Just needs a label for the front. I was going to copy a 2031LP label, but the drive cases I used has the embossed C= logo, so it wouldn't fit.
I can now use this to read disks from 2040, 3040, 4040, 2031 and 4031 disk drives, and the 8250 below can deal with the 8050, 8250 and 8296D disks. Now all I need is one of the 8060 series 8 inch drives.

I don't have a source of IEEE-488 connectors at the moment, but I can supply the conversion board and ROM adapter, complete with all chips and a programmed ROM. You can either locate something similar to the arrangement I used above, or solder a cable directly and run a long lead to an edge connector on the PET.
1541 to 2031 conversion board (no cable)

If you want to support this blog, you can donate via Patreon or Paypal, or buy something from my store.