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.
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
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.
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
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)
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
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)
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