List of floppy disk controllers

This is a list of floppy-disk controllers. It is currently biased towards widely commercially available controllers in the consumer market.

## Contents

* 1 General
* 2 Feature description
* 3 Built from only discrete components
* 4 Integrated circuits
* 5 As part of larger integrated circuits
* 6 Controllers based on integrated circuits
* 7 Controllers that feature a microprocessor
* 7.1 Using only discrete components
* 7.1.1 Using two microprocessors
* 7.2 Using a floppy controller IC
* 8 References

## General[edit]

References may be in the form of components or nets of a schematic, which will be linked just above those bare references. SH is the sheet number, name/number is a particular pin on a component, nets are usually prefixed by "net" and uppercase or are obviously nets. Active low logic should have either a /slash prefix or a slash/ suffix.

Bare page numbers refer to a service manual cited just above.

List of hidden anchors in this article

* #Micropolis-FDC
* #Morrow-DiskJockey
* #CalCompSys-2422
* #Vista-A800
* #IMSAI8080-FDC
* #Altair8800-FDC
* #Robotron-K5120
* #Woz_machine
* #Commodore-2031
* #Commodore-2040
* #Commodore-SFD1
* #Commodore-8050
* #Commodore-8250
* #Commodore-1540

## Feature description[edit]

* Phase-locked loop[1]
* digital PLLs are cheap and simple. They consist of a counter clocked by a constant clock. Pulses from the floppy disk drive reset the counter. Since the clock is fixed, variations in motor speed would appear as phase offset errors for each bit (while that phase error would not accumulate)
* analog PLLs are more complex, but also more precise. A voltage-controlled oscillator is tuned by the difference in phase between the VCO clock and the floppy disk drive pulses. Variations in motor speed result in a different VCO clock frequency and are thus not recurring phase offset errors per bit
* write precompensation
* a magnetic flux reversal is moved forward or backward by a fraction of the bit time depending on nearby prior or later flux reversals, to compensate for the displacement that will move 2 flux reversals that are very close further apart over time. Unless otherwise noted, the fine-grained displacement of the write signal was achieved with digital circuitry using the base clock that was on the order of 10 times faster than the bit clock and the displacement was thus roughly 10% of the bit time.
* ROM based encoders
* using ROM chips to lookup MFM clock bits that will be combined with the data bits or to translate data bytes into longer sequences using GCR
* CPU based encoders
* using software to encode data bits which adds a significant overhead to operations. With real time coding typically being infeasible, this means that such controllers would be prevented from disk accesses for long periods of conversion time compared to more efficient ROM based coders
* shift register
* the fundamental building block of any floppy controller, either a single register can be used for reading and writing or separate registers can be used for reading and for writing.
* PIO data buffer
* very few controllers do not have it and the CPU writes directly into the shift register, PIOs are used to buffer a single byte of read data or write data and to provide access to control signals. Typically two PIOs are used.
* /WAIT synchronization
* quite often found on Z80 based systems. The CPU is halted by the floppy controller for a few clock cycles. Necessary for controllers that do not feature a data buffer. Can also be used to make polling more efficient.
* polling synchronization
* a PIO is polled to determine if data can be read or written. This usually requires 2 or 3 instructions in the polling loop
* SET OVERFLOW synchronization
* a polling method that was slightly more efficient as it only needed a single branch instruction. Used the 6502 set overflow pin. commonly used in Commodore controllers
* DMA transfer
* a natural companion to a floppy disk controller.
* marker detector
* wide gate
* as exemplified by practically all GCR commodore drives, a 10-input NAND gate is used to detect the SYNC marker ("1111111111")
* ROM based
* can be found in MFM controllers, since there are a few marker bytes that have to be detected and the combinatorial circuit would have a substantial size
* per sector index hole
* not a marker of course, but serves the same function as synchronization markers. The existence of and reliance on an index hole does not imply that no synchronizing markers were used on the disk. See for example #Micropolis-FDC.
* sector 0 index hole
* rarely used since it implies that either there is only one long sector on each track or that sector numbers would have been stored on disk to avoid a ridiculously over-complicated and slow indexing scheme. If on-disk markers are used, it is quite irrelevant where the first sector around the circumference of a track starts.
* stepper motor control
* STP/DIR: since the standard 34-pin floppy drive connector featured a STEP DIRECTION pin and a STEP (pulse) pin, this was very often dictated to floppy controller designers
* software based: used for example in most commodore controllers which did not use standard connectors between controller and disk drive. software would be responsible for controlling current through the coils of stepper motors during a step sequence
* byte clock
* this is just a standard digital counter and there are no variations on the theme, but it is a pivotal part of the controller circuit. the byte clock is reset by sync markers for reading and for writing it is free running and ultimately determines the precise moment where writing starts (in other words, it was not explicitly reset for writing but rather waited out).
* multi-drive controllers and double sided drives
* connecting multiple disk drives to a single controller was very common. This arrangement implies that only a single head of one drive could be read from or written to at any point in time. concurrent movement of the heads was commonly possible for any number of drives.
* MFM medium data rate convention
* in MFM if one is to name a clock on whose edges all transitions lie, then this clock would be twice the actual data rate (just as it is in FM mode), but no signal of that frequency can exist under coding rules on the disk. This article uses the nominal frequency (equal to 500khz for a typical 5-inch MFM controller at a data rate of 250kbit/s, but with the actual minimum time between transitions of 4 microseconds and 6 microseconds delay also being possible).
* note (number of tracks)
* contrary to the bit density per track, the number of tracks per side has no influence on controller design apart from trivial firmware differences to account for the actual geometry. technical improvements that enable a high track density are entirely the domain of the disk drive and the controller just steps in the same way through a now higher number of tracks. In other words, a controller built for a 40-track drive works with a 80-track drive after firmware changes.

## Built from only discrete components[edit]

* Mircropolis FDC (S-100 bus)[2]
* schematic no. referenced: 100087 in [3] (February 1979)
* /WAIT synchronization with no data buffers. the shift register parallel inputs and outputs are directly connected to the system bus (outputs via a bunch of multiplexers[4] to allow read access to status signals), input and output instructions must be started sufficiently early and the completion of these instructions will be delayed by the floppy controller
* internal 2Mhz crystal or system bus clock
* FM/MFM selectable requiring a number of jumpers to be changed
* FM 125kbit/s / 250khz[5]
* MFM 250bit/s / 500khz[6]
* MFM coding using simple logic[7] which means IBM style MFM marker bytes that violate MFM coding rules are not possible
* analog PLL
* relies on index hole for positioning, preamble of all zero bits (125khz/250khz "tone") to allow PLL lock[8]
* it actually resets the byte counter during writing on the index hole pulse instead of not caring about a minor offset[9]
* sector format: 12.5ms; preamble,sync(FF),track,sector,data,check(8bit),postamble[10] (the sync byte is indistinguishable from ordinary data wrt. coding rules)
* the controller is unaware of those fields, but at the beginning of each sector the read bit counter[11] will be held at value 1 until the first 1 is read from the disk[12] and the bit counter will thus synchronize to the sync byte and the firmware will read the sync byte as the first one of a sector.
* note that standard practice in FM/MFM drives is to have a gap between metadata (with own sync and crc) and data (with own sync and crc)
* 16 sectors of 256 bytes per track (MFM)[13]
* used in: Vector Graphic computers
* IMSAI 8080 FDC (S-100)[14] (2 boards)
* Altair 8800 88-DCDD (S-100)[15] (2 boards)
* VEB Robotron K5120[16]
* schematic no. referenced: 56-330-0202-2 in [17] (December 1984), which is obviously based on the K5120 line of boards, but much easier to read
* note: all original documentation on this controller and its ecosystem are in german
* /WAIT synchronization with PIO data buffers
* internal 10Mhz crystal
* 5-inch FM (125kbit/s), MFM (250kbit/s)
* 8-inch FM (250kbit/s), MFM (500kbit/s)
* disk type and modulation software selectable
* analog PLL, similar to the Micropolis FDC
* ROM A8:1 for production of MFM clock bits, ROM A8:2 for detection of IBM marker bytes
* e.g. for MFM: sync: C2, address: A1FE, data: A1FB, deleted data: A1F8, index: C2FC
* write precompensation[18]
* Woz Machine[19]

## Integrated circuits[edit]

* NEC uPD765 and clones
* NEC uPD765
* Intel 8272
* VEB Robotron U8272
* Western Digital 1795
* Integrated Woz Machine[20]
* Intel 8271[21] \- an unusual piece of technology: an integrated floppy controller released in 1977 that contained a microprocessor

## As part of larger integrated circuits[edit]

* Amiga Paula

## Controllers based on integrated circuits[edit]

* Western Digital 179x
* WD 1791
* Morrow Designs Disk Jockey 2D (S-100),[22] manual+schematic[23]
* WD1793
* California Computer Systems 2422 (S-100) FDC,[24] service manual,[25] schematic [26]
* WD1797
* Vista A800 (Apple II)

## Controllers that feature a microprocessor[edit]

### Using only discrete components[edit]

* Commodore 2031[27]
* the only device with IEEE-488 bus that did not have 2 CPUs and used a software GCR coder, it resembles the internal structure of the 1540 controller more than that of any of the other PET controllers, and this resemblance extends to the layout and style of the service manual
* Commodore 1540/1541[28]
* later PCB revisions replaced some of the standard parts with a Programmable Logic Array / ASIC

#### Using two microprocessors[edit]

* Commodore PET/CBM
* dual processor
* all controllers in this group used one of the CPUs to handle the IEEE-488 interface and the high level disk operating system. Communication between the 2 parts of the circuit happened through several static ram chips. Since the clocks of the 2 processors were phase shifted by 180 degrees, this memory was used as a time multiplexed true dual-port ram without the need for additional access synchronization
* ROM GCR coding
* variant A
* digital PLL
* polling synchronization (these controllers used a 6504 CPU that does not have a set overflow pin)
* Commodore 2040/3040/4040[29]
* variant B
* set overflow synchronization
* write precompensation
* analog PLL
* base clock selectable between 4Mhz and 6Mhz via jumper (TODO: confirm that firmware would have to be updated - given that there was no way for the firmware to learn about the jumper setting if not for a timing analysis of the byte clock it seems very unlikely that the firmware would not have to change), for the standard 6Mhz clock the raw (head) bit rates for the 4 zones are
* 375khz
* 400khz
* 428.57khz
* 461.54khz
* Commodore SFD-1001 (single drive)[30]
* dual drives
* the digital PCB of these 2 drives was the same (see jumper E3)
* Commodore 8050 (single head per drive)
* Commodore 8250 (two heads per drive)[31]

### Using a floppy controller IC[edit]

## References[edit]

1. ^ http://info-coach.fr/atari/hardware/_fd-hard/AN-505.pdf[bare URL PDF]
2. ^ "S100 Computers - Micropolis FDC".
3. ^ http://www.bitsavers.org/pdf/micropolis/metafloppy/1084-02_Micropolis_Floppy_Disk_Subsystem_Maintenance_Manual_Feb79.pdf[bare URL PDF]
4. ^ SH 5; C4, C5, C11, C12
5. ^ jumper SH 3:W5,W8, SH9:W13,W15
6. ^ jumper SH3:W6,W7, SH9:W14,W16
7. ^ SH3; A11/6
8. ^ p. 3-42
9. ^ net WOS/, SH3 A9/7
10. ^ p. 3-43
11. ^ SH4; B13
12. ^ SH 4; B12
13. ^ p. 1-4
14. ^ "S100 Computers - IMSAI".
15. ^ "S100 Computers - MITS FDC Boards".
16. ^ "Dokumente K1520". www.sax.de.
17. ^ https://www.tiffe.de/robotron/PC1715/PC-1715-Schaltplaene.pdf[bare URL PDF]
18. ^ A5, A9, A10, A11
19. ^ Apple Computer, Inc (September 21, 1981). "Apple II: The DOS Manual: Disk Operating System" - via Internet Archive.
20. ^ http://www.brutaldeluxe.fr/documentation/iwm/apple2_IWM_Spec_Rev19_1982.pdf[bare URL PDF]
21. ^ "Security: Reverse engineering a forgotten 1970s Intel dual core beast: 8271, a new ISA". November 16, 2020.
22. ^ "S100 Computers - Morrow Disk Jockey FDC".
23. ^ http://www.s100computers.com/Hardware Manuals/Morrow/Morrow Disk Jockey 2D Controller 1979 rev4.pdf[bare URL PDF]
24. ^ "S100 Computers - California Computer Systems FDC Board".
25. ^ http://www.s100computers.com/Hardware Manuals/CCS/California Computer Systems 2422 Floppy Controller Manual.pdf[bare URL PDF]
26. ^ http://www.s100computers.com/Hardware Manuals/CCS/CCS2422-RevE-Sch.pdf[bare URL PDF]
27. ^ "/pub/cbm/schematics/drives/old/2031/". www.zimmers.net.
28. ^ "/pub/cbm/schematics/drives/new/1541/". www.zimmers.net.
29. ^ "/pub/cbm/schematics/drives/old/4040/". www.zimmers.net.
30. ^ "/pub/cbm/schematics/drives/old/1001/". www.zimmers.net.
31. ^ "/pub/cbm/schematics/drives/old/8050/". www.zimmers.net.