Modified frequency modulation: Difference between revisions
No edit summary |
|||
(31 intermediate revisions by 13 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Line code used in early magnetic data storage}} |
|||
{{More citations needed|date=June 2023}} |
|||
'''Modified frequency modulation''' ('''MFM''') is a [[run-length limited]] (RLL) [[line code]]<ref>{{Cite journal |
'''Modified frequency modulation''' ('''MFM''') is a [[run-length limited]] (RLL) [[line code]]<ref>{{Cite journal |
||
|journal=Proceedings of the IEEE |
|journal=Proceedings of the IEEE |
||
Line 8: | Line 10: | ||
|url=https://www.researchgate.net/publication/2984369 |
|url=https://www.researchgate.net/publication/2984369 |
||
|pages=1745–1759 |
|pages=1745–1759 |
||
|quote=A detailed description is furnished of the limiting properties of runlength limited sequences.|doi=10.1109/5.63306 |
|quote=A detailed description is furnished of the limiting properties of runlength limited sequences. |
||
|doi=10.1109/5.63306 |
|||
}}</ref> used to encode data on most [[floppy disk]]s and some [[hard disk drive]]s. It was first introduced on hard disks in 1970 with the [[IBM 3330]] and then in floppy disk drives beginning with the [[List_of_floppy_disk_formats# |
}}</ref> used to encode data on most [[floppy disk]]s and some [[hard disk drive]]s. It was first introduced on hard disks in 1970 with the [[IBM 3330]] and then in floppy disk drives beginning with the [[List_of_floppy_disk_formats#IBM 53FD|IBM 53FD]] in 1976. |
||
MFM is a modification to the original [[frequency modulation encoding]] (FM) |
MFM is a modification to the original [[frequency modulation encoding]] (FM) code specifically for use with [[magnetic storage]]. MFM allowed devices to double the speed data was written to the media as the code guaranteed only one polarity change per encoded data bit. For this reason, MFM disks are typically known as "double density", while the earlier FM became known as "single density". |
||
MFM is used with a data rate of 250–500 [[bits per second|kbit/s]] (500–1000 kbit/s encoded) on industry-standard {{frac|5|1|4}}-inch and {{frac|3|1|2}}-inch ordinary and high-density floppy diskettes. MFM was also used in early hard disk designs, before the advent of more efficient types of RLL codes. Outside of niche applications, MFM encoding is obsolete in magnetic recording. |
MFM is used with a data rate of 250–500 [[bits per second|kbit/s]] (500–1000 kbit/s encoded) on industry-standard {{frac|5|1|4}}-inch and {{frac|3|1|2}}-inch ordinary and high-density floppy diskettes. MFM was also used in early hard disk designs, before the advent of more efficient types of RLL codes. Outside of niche applications, MFM encoding is obsolete in magnetic recording. |
||
== |
==Magnetic storage== |
||
Magnetic storage devices, like [[hard drive]]s and [[magnetic tape]], store data not as absolute values, but in the changes in polarity. This is because a changing magnetic field will induce an electrical current in a nearby wire, and vice versa. By sending a series of changing currents to the [[read/write head]] while the media moves past it, the result will be a pattern of magnetic polarities on the media that change where the data was a "1". The exact nature of the media determines how many of these changes can occur within a given surface area, and when this is combined with the nominal speed of movement, it produces the maximum data rate for that system. |
|||
The digital coding method frequency modulation (FM) as used in the context of magnetic storage has a variety of other names, including delay coding and [[differential Manchester encoding]].<ref>{{cite book |
|||
|last=Hoagland |first=Al |date=1963 |
|||
|title=Digital Magnetic Recording |publisher=John Wiley & Sons |
|||
|page=127 |quote= The next binary coding technique to be described is variously referred to as the phase modulation method, the frequency modulation method ... and a few other more frequently used terms.}}</ref> |
|||
Disk drives are subject to a variety of mechanical and materials effects that cause the original pattern of data to "jitter" in time. MFM as a run-length limited code limits the distance between recorded transitions so the jitter does not cause a transition to be misaligned in time, thereby causing a data error. Other limitations defined by the media place additional constraints on the way the data is recorded. A diverse range of suitable encodings, known generally as [[line code]]s, have been developed for this purpose. Their suitability depends on the media or transmission mechanism being used. |
|||
Frequency modulation is the encoding of [[binary data]] to form a two-level [[Signalling (telecommunication)|signal]] where (a) a "0" causes no change of [[signal level]] unless it is followed by another "0" in which case a transition to the other level takes place at the end of the first [[bit]] period; and (b) a "1" causes a transition from one level to the other in the middle of the bit period.<ref>{{cite journal |
|||
==Frequency modulation== |
|||
[[Frequency modulation encoding]] (FM) was the first widely used system to perform this operation on disk drives. The [[drive controller]] includes an accurate clock running at half the selected data rate of the disk media. When data is written to the disk, the clock signal is interleaved with the data. On reading, the clock signals are used as short-term triggers to time the presence or lack of a following signal that represents the data bits.<ref>{{cite journal |
|||
|url=https://ieeexplore.ieee.org/document/1449179 |
|url=https://ieeexplore.ieee.org/document/1449179 |
||
|title=Delay Modulation |
|title=Delay Modulation |
||
| |
|journal=Proceedings of the IEEE | volume= 57 | issue= 7 |
||
|date=July 1969 |
|date=July 1969 |
||
|publisher=IEEE |
|publisher=IEEE |
||
|doi=10.1109/PROC.1969.7249 |
|doi=10.1109/PROC.1969.7249 |
||
|access-date= |
|access-date= |
||
|last1=Hecht |
|last1=Hecht |
||
|first1=M. |
|first1=M. |
||
|last2=Guida |
|last2=Guida |
||
Line 36: | Line 39: | ||
}}</ref> |
}}</ref> |
||
The upside to the FM approach is that it is extremely easy to implement the writing circuity, and the clock recovery on reading is also relatively simple. The downside is that it uses up half of the disk surface for the clock signal, thus halving the total amount of data the disk can store. This led to the development of new forms of encoding that were more efficient. |
|||
FM encoding is used primarily for encoding signals because the [[frequency]] spectrum of the encoded signal contains less low-frequency energy than a conventional [[non-return-to-zero]] (NRZ) signal and less high-frequency energy than a biphase signal. |
|||
FM encoding is an encoding using only half the bandwidth for [[biphase mark code|biphase encoding]] but features all the advantages of biphase encoding: |
|||
''To be rewritten: It is guaranteed to have transitions every other bit, meaning that decoding systems can adjust their clock/DC threshold continuously''. |
|||
One drawback is that it lacks easy human readability (e.g. on an oscilloscope). |
|||
FM encoding is also known as Miller coding after Armin Miller, its inventor.<ref>[http://www.google.com/patents/US3108261 US Pat. # 3,108,261]</ref> |
|||
<!--I'm not sure this belongs in this article - see talk |
|||
{{anchor|Miller sub-carrier coding}}Some [[RFID]] cards, in particular EPC UHF Gen 2 RF cards, use a variant called "Miller sub-carrier coding".<ref>[http://rfidusa.com/superstore/pdf/UHF_System_Overview.pdf UHF Gen 2 System Overview], p. 19. (March, 2005) {{webarchive |url=https://web.archive.org/web/20110826040120/http://rfidusa.com/superstore/pdf/UHF_System_Overview.pdf |date=August 26, 2011 }}</ref> |
|||
In this system, 2, 4 or 8 cycles of a subcarrier square wave are transmitted for each bit time. The Miller encoding transitions are indicated by 180° phase shifts in the subcarrier, i.e. the subcarrier pauses for 1/2 of a cycle at each transition. (The resultant binary subcarrier is itself either [[Amplitude-shift keying|ASK]] or [[Phase-shift keying|PSK]] modulated on another carrier.) |
|||
--> |
|||
== MFM coding == |
== MFM coding == |
||
[[File:FM-MFM-Codierung-int.svg|thumb|right|A byte encoded using FM (above) and MFM (below). Dashed blue line denotes clock pulse (the signal level change in it is ignored), and dashed red line, data pulse (signal level change encodes 1, and absence thereof, 0).]] |
[[File:FM-MFM-Codierung-int.svg|thumb|right|A byte encoded using FM (above) and MFM (below). Dashed blue line denotes clock pulse (the signal level change in it is ignored), and dashed red line, data pulse (signal level change encodes 1, and absence thereof, 0).]] |
||
Modified frequency modulation encodes the clock signal and the data in a single "clock window". Unlike FM, a clock bit is only written when needed to achieve synchronization when both current and preceding data bits are not set. On average, MFM achieves double the information density of FM.<ref>{{cite book |last1=Sammes |first1=Anthony |last2=Jenkinson |first2=Brian |title=Forensic Computing |date=18 August 2007 |publisher=Springer Science & Business Media |isbn=978-1-84628-732-9 |page=109 |url=https://books.google.com/books?id=Ee9PF6Zv_tMC&dq=mfm+encoding&pg=PA109 |language=en}}</ref> |
|||
As is standard when discussing hard drive encoding schemes, FM and MFM encodings produce a bit stream which is [[Non-return-to-zero#Non-return-to-zero inverted|NRZI]] encoded when written to disk. A 1-bit represents a magnetic transition, and a 0-bit no transition. Data encoding has to balance two factors: |
|||
* there are limits on the minimum and maximum number of 0-bits that the hardware can detect between consecutive 1-bits, and the encoding must not exceed this limit; |
|||
* there are limits on the maximum number of 1-bits that the hardware can detect in a given amount of time. If a disk is encoded with a higher (average) number of magnetic transitions per bit, the bits will have to be "wider" and fewer sectors will fit each track; |
|||
⚫ | The basic encoding rule for MFM is that (x, y, z, ...) encodes to (x, x [[Logical NOR|NOR]] y, y, y NOR z, z, z NOR...). A zero bit is encoded as {{mono|10}} if preceded by a zero bit in the input stream, and {{mono|00}} if preceded by a one; a one bit is always encoded as {{mono|01}}. The number of magnetic transitions per one bit of encoded data is on average 0.75 to 1.<ref>{{cite web |last1=Prosise |first1=Jeff |title=Choosing a Hard Disk |url=https://books.google.com/books?id=l3Z0ZgEexGEC&dq=mfm+encoding&pg=PT445 |website=PC Magazine |page=427 |date=30 October 1990}}</ref> |
||
Both FM and MFM encodings can also be thought of as having data bits separated by clock bits, but with different rules for encoding the bits. Still, both formats encode each data bit as two bits on disk (because of delimiters that are required at the beginning and end of a sequence, the actual density is slightly lower). |
|||
The basic encoding rule for FM is that all clock bits are 1: zeros are encoded as 10, ones are encoded as 11. The number of magnetic transitions per bit is on average 1.5(50% × 1 + 50% × 2). |
|||
⚫ | The basic encoding rule for MFM is that (x, y, z, ...) encodes to (x, x [[Logical NOR|NOR]] y, y, y NOR z, z, z NOR...). A zero is encoded as {{mono|10}} if preceded by a zero, and {{mono|00}} if preceded by a one |
||
{| class=wikitable |
{| class=wikitable |
||
Line 72: | Line 59: | ||
|} |
|} |
||
Note that the surrounding clock bits are sometimes known, but sometimes require knowledge of the adjacent data bits. A longer example: |
Note that the surrounding clock bits are sometimes known, but sometimes require knowledge of the adjacent data bits.{{Citation needed|date=March 2023|reason=Unusual way to describe clock recovery. Confuses bits of information with magnetic pulses.}} A longer example: |
||
Data: '''0 0 0 1 1 0 1 1''' ... |
Data: '''0 0 0 1 1 0 1 1''' ... |
||
FM encoded: 1'''0'''1'''0'''1'''0'''1'''1'''1'''1'''1'''0'''1'''1'''1'''1'''1... |
FM encoded: 1'''0'''1'''0'''1'''0'''1'''1'''1'''1'''1'''0'''1'''1'''1'''1'''1... |
||
Line 79: | Line 66: | ||
(The bold bits are the data bits, the others are the clock bits.) |
(The bold bits are the data bits, the others are the clock bits.) |
||
In FM encoding, the number of 0-bits that may appear between consecutive 1-bits is either 0 or 1. In MFM encoding there is a minimum of 1 zero bit between adjacent ones (there are never two adjacent one bits), and the maximum number of zeros in a row is 3. Thus, FM is a (0,1) RLL code, while MFM is a (1,3) code. |
In FM encoding, the number of 0-bits that may appear between consecutive 1-bits is either 0 or 1. In MFM encoding there is a minimum of 1 zero bit between adjacent ones (there are never two adjacent one bits), and the maximum number of zeros in a row is 3.{{Citation needed|date=March 2023|reason=Appears to confuse bits of information with magnetic pulses.}} Thus, FM is a (0,1) RLL code, while MFM is a (1,3) code. |
||
==Data separator== |
|||
Because the MFM system requires more accurate timing of the clock signal, it was not possible economically to build the required analog and digital components on a single [[integrated circuit]] using late 1970s technology. Instead, MFM drivers required the drive vendor to design their own [[clock recovery]] circuitry, a system known as the '''data separator'''. Data separator design was an art form of its own.<ref>{{cite tech report |url=https://fliphtml5.com/pdlu/wfhr/basic |title=Floppy Disk Data Separator Design Guide for the DP8473 |first1=Bob |last1=Lutz |first2=Paolo |last2=Melloni |first3=Larry |last3=Wakeman |publisher=National Semiconductor |date=1982}}</ref> |
|||
Among the most widely used controllers of the era was the [[Western Digital FD1771]] series. The original FD1771 supported FM only, but it was quickly paired with the FD1781 and FD1791 which performed MFM based on an externally provided clock signal. Implementing MFM support with these drivers required an external data separator. Rapid improvement in [[Semiconductor device fabrication|IC manufacturing]] in the late 1970s and early 1980s led to the first low-cost all-in-one MFM drivers in the early 1980s. The WD2791 was the first to directly support MFM using an internal analog [[phase-locked loop]], but it required a number of simple external components to implement a complete system. The WD1770 was the first to implement a complete MFM solution in a single chip. |
|||
==Overall format== |
|||
{{Main|Disk formatting}} |
|||
FM and MFM are used to indicate the position of individual bits in the original data, but the data does not in itself have any higher level of organization like "files". This is the purpose of the format of the disk. Disks are typically formatted into fixed-sized sectors which contain additional header information to link them back to files. |
|||
In the IBM formats, the start of a sector's header information and the start of the data itself are indicated with special "sync mark", a pattern of 0s and 1s that cannot appear in the data itself. This is accomplished by not encoding this data using the FM or MFM encoding, making it easy for the driver to spot it. The sync mark that is commonly used in MFM encoding is known as the "A1 sync" since the data bits form the start of the [[hexadecimal]] value A1 (10100001), but the fifth clock bit is different from the normal encoding of the A1 byte. |
|||
Data: '''1 0 1 0 0 0 0 1''' |
Data: '''1 0 1 0 0 0 0 1''' |
||
Line 91: | Line 87: | ||
== MMFM == |
== MMFM == |
||
'''MMFM''' |
'''MMFM''' (modified modified frequency modulation), also abbreviated '''M²FM''' or '''M2FM''', is similar to MFM, but suppresses additional clock bits, producing a longer maximum run length (a (1,4) RLL code). In particular, a clock pulse is only inserted between a pair of adjacent 0-bits if the first bit of the pair did not have a clock pulse inserted before it.<ref name="Intel_1977_SBC202"/> In the example below, clock bits that would have been present in MFM are noted in bold: |
||
Data: 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 |
Data: 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 |
||
Clock: 0 0 0 0 0 1 0 0 1 '''0''' 0 0 1 '''0''' 1 0 0 1 '''0''' 1 '''0''' 0 |
Clock: 0 0 0 0 0 1 0 0 1 '''0''' 0 0 1 '''0''' 1 0 0 1 '''0''' 1 '''0''' 0 |
||
Encoded: 010100010010010010'''0'''0010010'''0'''010010010'''0'''010'''0'''001 |
Encoded: 010100010010010010'''0'''0010010'''0'''010010010'''0'''010'''0'''001 |
||
In this system, sync marks are made by inserting additional clock pulses between adjacent zero bits (following the MFM rule) where they would normally be omitted. |
In this system, sync marks are made by inserting additional clock pulses between adjacent zero bits (following the MFM rule) where they would normally be omitted. In particular, the data bit pattern "100001" has a clock pulse inserted in the middle, where it would normally be omitted: |
||
Data: 1 0 0 0 0 1 |
Data: 1 0 0 0 0 1 |
Latest revision as of 10:09, 23 November 2024
This article needs additional citations for verification. (June 2023) |
Modified frequency modulation (MFM) is a run-length limited (RLL) line code[1] used to encode data on most floppy disks and some hard disk drives. It was first introduced on hard disks in 1970 with the IBM 3330 and then in floppy disk drives beginning with the IBM 53FD in 1976.
MFM is a modification to the original frequency modulation encoding (FM) code specifically for use with magnetic storage. MFM allowed devices to double the speed data was written to the media as the code guaranteed only one polarity change per encoded data bit. For this reason, MFM disks are typically known as "double density", while the earlier FM became known as "single density".
MFM is used with a data rate of 250–500 kbit/s (500–1000 kbit/s encoded) on industry-standard 5+1⁄4-inch and 3+1⁄2-inch ordinary and high-density floppy diskettes. MFM was also used in early hard disk designs, before the advent of more efficient types of RLL codes. Outside of niche applications, MFM encoding is obsolete in magnetic recording.
Magnetic storage
[edit]Magnetic storage devices, like hard drives and magnetic tape, store data not as absolute values, but in the changes in polarity. This is because a changing magnetic field will induce an electrical current in a nearby wire, and vice versa. By sending a series of changing currents to the read/write head while the media moves past it, the result will be a pattern of magnetic polarities on the media that change where the data was a "1". The exact nature of the media determines how many of these changes can occur within a given surface area, and when this is combined with the nominal speed of movement, it produces the maximum data rate for that system.
Disk drives are subject to a variety of mechanical and materials effects that cause the original pattern of data to "jitter" in time. MFM as a run-length limited code limits the distance between recorded transitions so the jitter does not cause a transition to be misaligned in time, thereby causing a data error. Other limitations defined by the media place additional constraints on the way the data is recorded. A diverse range of suitable encodings, known generally as line codes, have been developed for this purpose. Their suitability depends on the media or transmission mechanism being used.
Frequency modulation
[edit]Frequency modulation encoding (FM) was the first widely used system to perform this operation on disk drives. The drive controller includes an accurate clock running at half the selected data rate of the disk media. When data is written to the disk, the clock signal is interleaved with the data. On reading, the clock signals are used as short-term triggers to time the presence or lack of a following signal that represents the data bits.[2]
The upside to the FM approach is that it is extremely easy to implement the writing circuity, and the clock recovery on reading is also relatively simple. The downside is that it uses up half of the disk surface for the clock signal, thus halving the total amount of data the disk can store. This led to the development of new forms of encoding that were more efficient.
MFM coding
[edit]Modified frequency modulation encodes the clock signal and the data in a single "clock window". Unlike FM, a clock bit is only written when needed to achieve synchronization when both current and preceding data bits are not set. On average, MFM achieves double the information density of FM.[3]
The basic encoding rule for MFM is that (x, y, z, ...) encodes to (x, x NOR y, y, y NOR z, z, z NOR...). A zero bit is encoded as 10 if preceded by a zero bit in the input stream, and 00 if preceded by a one; a one bit is always encoded as 01. The number of magnetic transitions per one bit of encoded data is on average 0.75 to 1.[4]
Data | ... 0 0 ... | ... 0 1 ... | ... 1 0 ... | ... 1 1 ... |
---|---|---|---|---|
MFM clock bits | ...? 1 ?... | ...? 0 0... | ...0 0 ?... | ...0 0 0... |
MFM encoding | ...?010?... | ...?0010... | ...0100?... | ...01010... |
Note that the surrounding clock bits are sometimes known, but sometimes require knowledge of the adjacent data bits.[citation needed] A longer example:
Data: 0 0 0 1 1 0 1 1 ... FM encoded: 10101011111011111... MFM clock: ? 1 1 0 0 0 0 0 0... MFM encoded: ?0101001010001010...
(The bold bits are the data bits, the others are the clock bits.)
In FM encoding, the number of 0-bits that may appear between consecutive 1-bits is either 0 or 1. In MFM encoding there is a minimum of 1 zero bit between adjacent ones (there are never two adjacent one bits), and the maximum number of zeros in a row is 3.[citation needed] Thus, FM is a (0,1) RLL code, while MFM is a (1,3) code.
Data separator
[edit]Because the MFM system requires more accurate timing of the clock signal, it was not possible economically to build the required analog and digital components on a single integrated circuit using late 1970s technology. Instead, MFM drivers required the drive vendor to design their own clock recovery circuitry, a system known as the data separator. Data separator design was an art form of its own.[5]
Among the most widely used controllers of the era was the Western Digital FD1771 series. The original FD1771 supported FM only, but it was quickly paired with the FD1781 and FD1791 which performed MFM based on an externally provided clock signal. Implementing MFM support with these drivers required an external data separator. Rapid improvement in IC manufacturing in the late 1970s and early 1980s led to the first low-cost all-in-one MFM drivers in the early 1980s. The WD2791 was the first to directly support MFM using an internal analog phase-locked loop, but it required a number of simple external components to implement a complete system. The WD1770 was the first to implement a complete MFM solution in a single chip.
Overall format
[edit]FM and MFM are used to indicate the position of individual bits in the original data, but the data does not in itself have any higher level of organization like "files". This is the purpose of the format of the disk. Disks are typically formatted into fixed-sized sectors which contain additional header information to link them back to files.
In the IBM formats, the start of a sector's header information and the start of the data itself are indicated with special "sync mark", a pattern of 0s and 1s that cannot appear in the data itself. This is accomplished by not encoding this data using the FM or MFM encoding, making it easy for the driver to spot it. The sync mark that is commonly used in MFM encoding is known as the "A1 sync" since the data bits form the start of the hexadecimal value A1 (10100001), but the fifth clock bit is different from the normal encoding of the A1 byte.
Data: 1 0 1 0 0 0 0 1 Clock: 0 0 0 1 1 1 0 Encoded: 100010010101001 Sync clock: 0 0 0 1 0 1 0 Sync Mark: 100010010001001 ^ Missing clock bit
MMFM
[edit]MMFM (modified modified frequency modulation), also abbreviated M²FM or M2FM, is similar to MFM, but suppresses additional clock bits, producing a longer maximum run length (a (1,4) RLL code). In particular, a clock pulse is only inserted between a pair of adjacent 0-bits if the first bit of the pair did not have a clock pulse inserted before it.[6] In the example below, clock bits that would have been present in MFM are noted in bold:
Data: 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 Clock: 0 0 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 0 Encoded: 01010001001001001000010010001001001000100001
In this system, sync marks are made by inserting additional clock pulses between adjacent zero bits (following the MFM rule) where they would normally be omitted. In particular, the data bit pattern "100001" has a clock pulse inserted in the middle, where it would normally be omitted:
Data: 1 0 0 0 0 1 Normal: 0 1 0 1 0 Sync: 0 1 1 1 0
See also
[edit]- Group coded recording (GCR)
References
[edit]- ^ Kees Schouhamer Immink (December 1990). "Runlength-Limited Sequences". Proceedings of the IEEE. 78 (11): 1745–1759. doi:10.1109/5.63306.
A detailed description is furnished of the limiting properties of runlength limited sequences.
- ^ Hecht, M.; Guida, A. (July 1969). "Delay Modulation". Proceedings of the IEEE. 57 (7). IEEE: 1314–1316. doi:10.1109/PROC.1969.7249.
- ^ Sammes, Anthony; Jenkinson, Brian (18 August 2007). Forensic Computing. Springer Science & Business Media. p. 109. ISBN 978-1-84628-732-9.
- ^ Prosise, Jeff (30 October 1990). "Choosing a Hard Disk". PC Magazine. p. 427.
- ^ Lutz, Bob; Melloni, Paolo; Wakeman, Larry (1982). Floppy Disk Data Separator Design Guide for the DP8473 (Technical report). National Semiconductor.
- ^ Intel Corporation (1977). SBC 202 Double Density Diskette Controller Hardware Reference Manual (PDF). pp. 4–26. Archived (PDF) from the original on 2017-06-18.
This article incorporates public domain material from Federal Standard 1037C. General Services Administration. Archived from the original on 2022-01-22.
Further reading
[edit]- Savard, John J. G. (2018) [2006]. "Digital Magnetic Tape Recording". quadibloc. Archived from the original on 2018-07-02. Retrieved 2018-07-16.
External links
[edit]- Johnson, Herbert R. (2016-07-06). "M2FM or MMFM diskette format". Archived from the original on 2017-06-18. Retrieved 2017-06-19.
- The PC Guide Frequency Modulation