The 5160 came equipped with a single Tandon TM-100-2A 5.25″ floppy disk drive. The 5150 had come with two of these, but the 5160 eschewed the second drive in favor of a fixed disk (hard drive).
I had a set of floppies for IBM PC-DOS 3.30 and I wasn’t sure if they worked. Inserting them at boot time made no difference — the system always ended up booting into ROM BASIC, which signals the condition of not having valid boot media. The floppy drive would light up and make some clicking noises, but it did not seem like anything was really happening. The disk did not seem to be spinning and the heads did not seem to be moving. It was time to see if this drive could be repaired.
How floppy disk drives work
The 5.25″ floppy disk is a symbol of 80s computing. By the time that decade was out the 3.5″ floppy was already on its way in, complete with a less-floppy thick plastic case on every disk and a spring-loaded metal dust cover. In contrast, 5.25″ floppies generally were stored in paper sleeves which covered the disk access hole.
Several types of floppy disks existed. This Tandon drive was designed for 360K double-sided double-density floppies (often abbreviated as 360K DS/DD). Interestingly, this same disk media was shared by other computers available at the time, though most had different standards about what was actually being written or read from the disk; the Commodore 1541 drive, for example, used the same DS/DD media but a different format which yielded a 340K capacity that was unreadable by an IBM PC. As a consequence it also could not read IBM format disks.
A write-protect notch was present on 5.25″ floppies. If this notch were empty, the disk was not write protected. This was determined by a pressure switch inside the drive. If this notch were covered, such that the switch inside the drive were depressed, the drive would access the disk in a read-only mode. Some disks were shipped without notches if they were never intended to be re-writable.
When the disk was inserted, a round clamp would close over the disk center (this often was done manually by the closure of an external lever on the front of the drive). This held the disk center tight enough to be spun by a motor. The rotating axle was most often driven by a belt in a fashion similar to a belt-drive turntable. For a double-sided drive like this Tandon, a top and bottom magnetic head are mounted on a module which sits on two metal rails. The heads move back and forth to align to tracks on the disk. Typically this module is driven by a stepper motor.
The index hole was used for determining the beginnings of tracks — a sensor sought out a hole in the disk.
Common issues with drives, and fixing them
After removing my Tandon drive, it seemed that it was suffering from a number of common issues. It is important to keep in mind that these drives are now more than 30 years old, and that takes its toll on mechanisms.
Dust and fuzz
My drive was filled with dust and fuzz. This is a natural consequence of sitting for a long time (and indeed, I am not sure how long my 5160 sat in someone’s garage or storage). Dust and fuzz wreaks havoc on mechanical parts which rely on smooth movement and lubrication; it is certainly part of the cause of what follows.
It is important to clean out as much of this as possible, as a dirty drive is likely not to work properly. For me, I took a lot of time with Q-tips and isopropenol to try and clean whatever I could get to. In many cases it was easier to clean with some components removed. One key thing to remove is the top circuit board. This is a matter of a couple of screws and several numbered connectors. Once this is out of the way the extent of the dustiness problem can really be appreciated.

Motor not spinning or belt broken
Amazingly, the belt was not broken on my drive. The motor did not spin, which meant that the disk did not spin. As it turns out this was due to a couple of issues.
A blue plastic cap over the motor (see photo above) protects end end of its axle. A few forum posts suggested lubricating this, and so I took the plunge with some 3-in-1 oil on the end of this axle. I manually spun the motor from the bottom to get things moving into it, being careful not to get oils from my fingers on the drive belt. It is also important here not to overlubricate.
It appears to be common for bearings in this motor to go bad. In this case, the motor will not spin freely regardless of the amount of lubricant.
The clamp sits on its own small axle attached to the top assembly (again, see photo above). This was not spinning freely at all. I removed this entirely with some luck and a small screwdriver, cleaned it, and eventually put it back with a small amount of lubricant. It spun much better afterwards.
Heads not moving
The heads move on a set of metal rails. For me, these were caked in dust — the kind that has bonded with what used to be lubricant. Removing the head assembly entirely seemed daunting and something that I did not want to attempt. After all, the heads also must be aligned properly.
Removing the two screws on the hinges of the top assembly makes the whole thing float somewhat freely. Two more screws sit on clamps atop the head rails. I found that removing these clamp screws after the hinge screws allowed me to finagle the head rails from the assembly. This left the heads sitting (loosely) in the middle of where the rails used to be. Surely one does not want to leave the drive in that state for long, but cleaning the rails without disassembling much further was the main issue I was trying to address.

I got all of the caked dust off until the rails looked smooth and clean. I took some isopropenol to the holes in the head assembly, being careful not to move it about too much in the process. I then reinstalled the clean rails and locked them into place once again with their clamp screws.
I decided to lubricate these again since they clearly had been lubricated before. For this I used some white lithium grease I had on hand — a very, very small amount on each rail. By gently pushing on the back of the head assembly, I was able to get it to move forward and backward on its rails very easily. I then replaced the screws on the hinges of the top assembly.
Squeaky front latch
Though functional, the front latch on my drive was very stiff. It relies on a plastic-on-plastic channel on the back side of the lever. I cleaned this with some isopropenol and lubed it very slightly with white lithium grease. This seemed to work as it no longer squeaked and felt much less stiff.
After all of the above, I put the circuit board back on top, screwed it into place, and attached all of its numbered connectors.
Booting to DOS
Finally, it was time to see if all my work had been for nought. I plugged the drive in and put it on its side so I could see how things were moving. When POST completes, the drive motor spins and the heads move back and forth on their rails. I was now getting good movement on all these axes.
I decided it was time to try my PC-DOS boot floppies. I inserted one and restarted with fingers crossed and rabbit foot in hand.


The first time with the disk inserted, I finally got something disk related on the screen after hearing and seeing the heads moving back and forth a few times. I was actually quite ecstatic about this, because it suggested two things: 1) the drive was communicating with the XT, and 2) it had tried to boot off of the disk.
I shut off the power and turned it on again. Isn’t that what you’re supposed to do when something doesn’t work?
Lo and behold, my disks and my drive worked.

And, strangely, my keyboard refresh was terribly slow. I had made adjustments to the code on my Arduino-based adapter to get it to work at all with ROM BASIC. But it appeared more changes were necessary to get things to work with DOS. I found that the default delay() call as given on the author’s GitHub now worked (it still does not work for keyboard output in ROM BASIC). Changing it to delay(20) worked a little bit better for me — still a responsive keyboard refresh, but without some weird “-” characters being inserted every now and then. I haven’t delved into it enough to figure out why.
if (digitalRead(xt_clk) == LOW) // power-on self test { delay(20) ; // delay(10) originally but this seemed to cause issues _write(0xAA) ; }
And with that, for the first time, I now had a working XT system! But there was plenty more to explore. My next task would be to look into its Seagate hard disk.
And with that, for the first time, I now had a working XT system! But there was plenty more to explore. My next task would be to look into its Seagate hard disk.