In computer science, group coded recording or group code recording (GCR) refers to several distinct but related encoding methods for representing data on magnetic media. The first, used in magnetic tape since 1973, is an error-correcting code combined with a run-length limited (RLL) encoding scheme, belonging into the group of modulation codes. The others are similar encoding methods used in mainframe hard disks or microcomputer floppy disks until the late 1980s. GCR is a modified form of a NRZI code, but necessarily with a higher transition density.
Group coded recording was first used for magnetic-tape data storage on 9-track reel-to-reel tape. The term was coined during the development of the IBM 3420 Model 4/6/8 Magnetic Tape Unit and the corresponding 3803 Model 2 Tape Control Unit, both introduced in 1973. IBM referred to the error correcting code itself as "group coded recording". However, GCR has come to refer to the recording format of (250 bits/mm) tape as a whole, and later to formats which use similar RLL codes without the error correction code.
In order to reliably read and write to magnetic tape, several constraints on the signal to be written must be followed. The first is that two adjacent flux reversals must be separated by a certain distance on the media, defined by the magnetic properties of the media itself. The second is that there must be a reversal often enough to keep the reader's clock in phase with the written signal; that is, the signal must be self-clocking and most importantly to keep the playback output high enough as this is proportional to the density of flux transitions. Prior to tapes, tapes satisfied these constraints using a technique called phase encoding (PE), which was only 50% efficient. For GCR tapes, a (0, 2) RLL code is used, or more specifically a (0, 2) block code sometimes also referred to as GCR (4B-5B) encoding. This code requires five bits to be written for every four bits of data. The code is structured so that no more than two zero bits (which are represented by lack of a flux reversal) can occur in a row, either within a code or between codes, no matter what the data was. This RLL code is applied independently to the data going to each of the nine tracks.
Of the 32 five-bit patterns, eight begin with two consecutive zero bits, six others end with two consecutive zero bits, and one more (10001) contains three consecutive zero bits. Removing the all-ones pattern (11111) from the remainder leaves 16 suitable code words.
The GCR RLL code:
|
|
Because the all-ones code is not used in normal data, at most 8 one-bits can appear in a row. Sequences of 9 or more one-bits (in practice 14 all-ones codes, or 70 one-bits, were used) are used as a synchronization pattern.
Because of the extremely high density (for the time) of tape, the RLL code is not sufficient to ensure reliable data storage. On top of the RLL code, an error-correcting code called the Optimal Rectangular Code (ORC) is applied. This code is a combination of a parity track and polynomial code similar to a CRC, but structured for error correction rather than error detection. For every seven bytes written to the tape (before RLL encoding), an eighth check byte is calculated and written to the tape. When reading, the parity is calculated on each byte and exclusive-ORed with the contents of the parity track, and the polynomial check code calculated and exclusive-ORed with the received check code, resulting in two 8-bit syndrome words. If these are both zero, the data is error free. Otherwise, error-correction logic in the tape controller corrects the data before it is forwarded to the host. The error correcting code is able to correct any number of errors in any single track, or in any two tracks if the erroneous tracks can be identified by other means.
In newer IBM half-inch 18-track tape drives recording at, (0, 2) GCR was replaced by a more efficient (0, 3) modulation code, mapping eight bits to nine bits.
In the mid-1970s, Sperry Univac, ISS Division was working on large hard drives for the mainframe business using group coding.
Like magnetic tape drives, floppy disk drives have physical limits on the spacing of flux reversals (also called transitions, represented by one-bits).
Offering GCR-compatible diskette drives and floppy disk controllers (like the 100163-51-8 and 100163-52-6[1]), Micropolis endorsed data encoding with group coded recording on 5¼-inch 100 tpi 77-track diskette drives to store twelve 512-byte sectors per track since 1977 or 1978.
Micro Peripherals, Inc. (MPI) marketed double-density 5¼-inch disk drives (like the single-sided B51 and double-sided B52 drives) and a controller solution implementing GCR since early 1978.
The Durango Systems F-85 (introduced in September 1978) used single-sided 5¼-inch 100 tpi diskette drives providing 480 KB utilizing a proprietary high-density 4/5 group coded encoding. The machine was using a Western Digital FD1781 floppy disk controller, designed by a former Sperry ISS engineer, with 77-track Micropolis drives. In later models such as the Durango 800 series this was expanded to a double-sided option for 960 KB (946 KB formatted) per diskette.
For the Apple II floppy drive, Steve Wozniak invented a floppy controller which (along with the Disk II drive itself) imposed two constraints:
The simplest scheme to ensure compliance with these limits is to record an extra "clock" transition before each data bit according to differential Manchester encoding or (digital) FM (Frequency Modulation). Known as 4-and-4 encoding, the resulting Apple implementation allowed only ten 256-byte sectors per track to be recorded on a single-density 5¼-inch floppy. It uses two bytes for each byte.|+4-and-4 encoding table
Value | Code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x00 | 0000.0000 | 1010.1010 1010.1010 | 0xAA 0xAA | |
0x01 | 0000.0001 | 1010.1010 1010.1011 | 0xAA 0xAB | |
0x02 | 0000.0010 | 1010.1011 1010.1010 | 0xAB 0xAA | |
0x03 | 0000.0011 | 1010.1011 1010.1011 | 0xAB 0xAB | |
0x04 | 0000.0100 | 1010.1010 1010.1110 | 0xAA 0xAE | |
0x05 | 0000.0101 | 1010.1010 1010.1111 | 0xAA 0xAF | |
0x06 | 0000.0110 | 1010.1011 1010.1110 | 0xAB 0xAE | |
0x07 | 0000.0111 | 1010.1011 1010.1111 | 0xAB 0xAF | |
0x08 | 0000.1000 | 1010.1110 1010.1010 | 0xAE 0xAA | |
0x09 | 0000.1001 | 1010.1110 1010.1011 | 0xAE 0xAB | |
0x0A | 0000.1010 | 1010.1111 1010.1010 | 0xAF 0xAA | |
0x0B | 0000.1011 | 1010.1111 1010.1011 | 0xAF 0xAB | |
0x0C | 0000.1100 | 1010.1110 1010.1110 | 0xAE 0xAE | |
0x0D | 0000.1101 | 1010.1110 1010.1111 | 0xAE 0xAF | |
0x0E | 0000.1110 | 1010.1111 1010.1110 | 0xAF 0xAE | |
0x0F | 0000.1111 | 1010.1111 1010.1111 | 0xAF 0xAF | |
0x10 | 0001.0000 | 1010.1010 1011.1010 | 0xAA 0xBA | |
0x11 | 0001.0001 | 1010.1010 1011.1011 | 0xAA 0xBB | |
0x12 | 0001.0010 | 1010.1011 1011.1010 | 0xAB 0xBA | |
0x13 | 0001.0011 | 1010.1011 1011.1011 | 0xAB 0xBB | |
0x14 | 0001.0100 | 1010.1010 1011.1110 | 0xAA 0xBE | |
0x15 | 0001.0101 | 1010.1010 1011.1111 | 0xAA 0xBF | |
0x16 | 0001.0110 | 1010.1011 1011.1110 | 0xAB 0xBE | |
0x17 | 0001.0111 | 1010.1011 1011.1111 | 0xAB 0xBF | |
0x18 | 0001.1000 | 1010.1110 1011.1010 | 0xAE 0xBA | |
0x19 | 0001.1001 | 1010.1110 1011.1011 | 0xAE 0xBB | |
0x1A | 0001.1010 | 1010.1111 1011.1010 | 0xAF 0xBA | |
0x1B | 0001.1011 | 1010.1111 1011.1011 | 0xAF 0xBB | |
0x1C | 0001.1100 | 1010.1110 1011.1110 | 0xAE 0xBE | |
0x1D | 0001.1101 | 1010.1110 1011.1111 | 0xAE 0xBF | |
0x1E | 0001.1110 | 1010.1111 1011.1110 | 0xAF 0xBE | |
0x1F | 0001.1111 | 1010.1111 1011.1111 | 0xAF 0xBF | |
0x20 | 0010.0000 | 1011.1010 1010.1010 | 0xBA 0xAA | |
0x21 | 0010.0001 | 1011.1010 1010.1011 | 0xBA 0xAB | |
0x22 | 0010.0010 | 1011.1011 1010.1010 | 0xBB 0xAA | |
0x23 | 0010.0011 | 1011.1011 1010.1011 | 0xBB 0xAB | |
0x24 | 0010.0100 | 1011.1010 1010.1110 | 0xBA 0xAE | |
0x25 | 0010.0101 | 1011.1010 1010.1111 | 0xBA 0xAF | |
0x26 | 0010.0110 | 1011.1011 1010.1110 | 0xBB 0xAE | |
0x27 | 0010.0111 | 1011.1011 1010.1111 | 0xBB 0xAF | |
0x28 | 0010.1000 | 1011.1110 1010.1010 | 0xBE 0xAA | |
0x29 | 0010.1001 | 1011.1110 1010.1011 | 0xBE 0xAB | |
0x2A | 0010.1010 | 1011.1111 1010.1010 | 0xBF 0xAA | |
0x2B | 0010.1011 | 1011.1111 1010.1011 | 0xBF 0xAB | |
0x2C | 0010.1100 | 1011.1110 1010.1110 | 0xBE 0xAE | |
0x2D | 0010.1101 | 1011.1110 1010.1111 | 0xBE 0xAF | |
0x2E | 0010.1110 | 1011.1111 1010.1110 | 0xBF 0xAE | |
0x2F | 0010.1111 | 1011.1111 1010.1111 | 0xBF 0xAF | |
0x30 | 0011.0000 | 1011.1010 1011.1010 | 0xBA 0xBA | |
0x31 | 0011.0001 | 1011.1010 1011.1011 | 0xBA 0xBB | |
0x32 | 0011.0010 | 1011.1011 1011.1010 | 0xBB 0xBA | |
0x33 | 0011.0011 | 1011.1011 1011.1011 | 0xBB 0xBB | |
0x34 | 0011.0100 | 1011.1010 1011.1110 | 0xBA 0xBE | |
0x35 | 0011.0101 | 1011.1010 1011.1111 | 0xBA 0xBF | |
0x36 | 0011.0110 | 1011.1011 1011.1110 | 0xBB 0xBE | |
0x37 | 0011.0111 | 1011.1011 1011.1111 | 0xBB 0xBF | |
0x38 | 0011.1000 | 1011.1110 1011.1010 | 0xBE 0xBA | |
0x39 | 0011.1001 | 1011.1110 1011.1011 | 0xBE 0xBB | |
0x3A | 0011.1010 | 1011.1111 1011.1010 | 0xBF 0xBA | |
0x3B | 0011.1011 | 1011.1111 1011.1011 | 0xBF 0xBB | |
0x3C | 0011.1100 | 1011.1110 1011.1110 | 0xBE 0xBE | |
0x3D | 0011.1101 | 1011.1110 1011.1111 | 0xBE 0xBF | |
0x3E | 0011.1110 | 1011.1111 1011.1110 | 0xBF 0xBE | |
0x3F | 0011.1111 | 1011.1111 1011.1111 | 0xBF 0xBF |
Value | Code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x40 | 0100.0000 | 1010.1010 1110.1010 | 0xAA 0xEA | |
0x41 | 0100.0001 | 1010.1010 1110.1011 | 0xAA 0xEB | |
0x42 | 0100.0010 | 1010.1011 1110.1010 | 0xAB 0xEA | |
0x43 | 0100.0011 | 1010.1011 1110.1011 | 0xAB 0xEB | |
0x44 | 0100.0100 | 1010.1010 1110.1110 | 0xAA 0xEE | |
0x45 | 0100.0101 | 1010.1010 1110.1111 | 0xAA 0xEF | |
0x46 | 0100.0110 | 1010.1011 1110.1110 | 0xAB 0xEE | |
0x47 | 0100.0111 | 1010.1011 1110.1111 | 0xAB 0xEF | |
0x48 | 0100.1000 | 1010.1110 1110.1010 | 0xAE 0xEA | |
0x49 | 0100.1001 | 1010.1110 1110.1011 | 0xAE 0xEB | |
0x4A | 0100.1010 | 1010.1111 1110.1010 | 0xAF 0xEA | |
0x4B | 0100.1011 | 1010.1111 1110.1011 | 0xAF 0xEB | |
0x4C | 0100.1100 | 1010.1110 1110.1110 | 0xAE 0xEE | |
0x4D | 0100.1101 | 1010.1110 1110.1111 | 0xAE 0xEF | |
0x4E | 0100.1110 | 1010.1111 1110.1110 | 0xAF 0xEE | |
0x4F | 0100.1111 | 1010.1111 1110.1111 | 0xAF 0xEF | |
0x50 | 0101.0000 | 1010.1010 1111.1010 | 0xAA 0xFA | |
0x51 | 0101.0001 | 1010.1010 1111.1011 | 0xAA 0xFB | |
0x52 | 0101.0010 | 1010.1011 1111.1010 | 0xAB 0xFA | |
0x53 | 0101.0011 | 1010.1011 1111.1011 | 0xAB 0xFB | |
0x54 | 0101.0100 | 1010.1010 1111.1110 | 0xAA 0xFE | |
0x55 | 0101.0101 | 1010.1010 1111.1111 | 0xAA 0xFF | |
0x56 | 0101.0110 | 1010.1011 1111.1110 | 0xAB 0xFE | |
0x57 | 0101.0111 | 1010.1011 1111.1111 | 0xAB 0xFF | |
0x58 | 0101.1000 | 1010.1110 1111.1010 | 0xAE 0xFA | |
0x59 | 0101.1001 | 1010.1110 1111.1011 | 0xAE 0xFB | |
0x5A | 0101.1010 | 1010.1111 1111.1010 | 0xAF 0xFA | |
0x5B | 0101.1011 | 1010.1111 1111.1011 | 0xAF 0xFB | |
0x5C | 0101.1100 | 1010.1110 1111.1110 | 0xAE 0xFE | |
0x5D | 0101.1101 | 1010.1110 1111.1111 | 0xAE 0xFF | |
0x5E | 0101.1110 | 1010.1111 1111.1110 | 0xAF 0xFE | |
0x5F | 0101.1111 | 1010.1111 1111.1111 | 0xAF 0xFF | |
0x60 | 0110.0000 | 1011.1010 1110.1010 | 0xBA 0xEA | |
0x61 | 0110.0001 | 1011.1010 1110.1011 | 0xBA 0xEB | |
0x62 | 0110.0010 | 1011.1011 1110.1010 | 0xBB 0xEA | |
0x63 | 0110.0011 | 1011.1011 1110.1011 | 0xBB 0xEB | |
0x64 | 0110.0100 | 1011.1010 1110.1110 | 0xBA 0xEE | |
0x65 | 0110.0101 | 1011.1010 1110.1111 | 0xBA 0xEF | |
0x66 | 0110.0110 | 1011.1011 1110.1110 | 0xBB 0xEE | |
0x67 | 0110.0111 | 1011.1011 1110.1111 | 0xBB 0xEF | |
0x68 | 0110.1000 | 1011.1110 1110.1010 | 0xBE 0xEA | |
0x69 | 0110.1001 | 1011.1110 1110.1011 | 0xBE 0xEB | |
0x6A | 0110.1010 | 1011.1111 1110.1010 | 0xBF 0xEA | |
0x6B | 0110.1011 | 1011.1111 1110.1011 | 0xBF 0xEB | |
0x6C | 0110.1100 | 1011.1110 1110.1110 | 0xBE 0xEE | |
0x6D | 0110.1101 | 1011.1110 1110.1111 | 0xBE 0xEF | |
0x6E | 0110.1110 | 1011.1111 1110.1110 | 0xBF 0xEE | |
0x6F | 0110.1111 | 1011.1111 1110.1111 | 0xBF 0xEF | |
0x70 | 0111.0000 | 1011.1010 1111.1010 | 0xBA 0xFA | |
0x71 | 0111.0001 | 1011.1010 1111.1011 | 0xBA 0xFB | |
0x72 | 0111.0010 | 1011.1011 1111.1010 | 0xBB 0xFA | |
0x73 | 0111.0011 | 1011.1011 1111.1011 | 0xBB 0xFB | |
0x74 | 0111.0100 | 1011.1010 1111.1110 | 0xBA 0xFE | |
0x75 | 0111.0101 | 1011.1010 1111.1111 | 0xBA 0xFF | |
0x76 | 0111.0110 | 1011.1011 1111.1110 | 0xBB 0xFE | |
0x77 | 0111.0111 | 1011.1011 1111.1111 | 0xBB 0xFF | |
0x78 | 0111.1000 | 1011.1110 1111.1010 | 0xBE 0xFA | |
0x79 | 0111.1001 | 1011.1110 1111.1011 | 0xBE 0xFB | |
0x7A | 0111.1010 | 1011.1111 1111.1010 | 0xBF 0xFA | |
0x7B | 0111.1011 | 1011.1111 1111.1011 | 0xBF 0xFB | |
0x7C | 0111.1100 | 1011.1110 1111.1110 | 0xBE 0xFE | |
0x7D | 0111.1101 | 1011.1110 1111.1111 | 0xBE 0xFF | |
0x7E | 0111.1110 | 1011.1111 1111.1110 | 0xBF 0xFE | |
0x7F | 0111.1111 | 1011.1111 1111.1111 | 0xBF 0xFF |
Value | Code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x80 | 1000.0000 | 1110.1010 1010.1010 | 0xEA 0xAA | |
0x81 | 1000.0001 | 1110.1010 1010.1011 | 0xEA 0xAB | |
0x82 | 1000.0010 | 1110.1011 1010.1010 | 0xEB 0xAA | |
0x83 | 1000.0011 | 1110.1011 1010.1011 | 0xEB 0xAB | |
0x84 | 1000.0100 | 1110.1010 1010.1110 | 0xEA 0xAE | |
0x85 | 1000.0101 | 1110.1010 1010.1111 | 0xEA 0xAF | |
0x86 | 1000.0110 | 1110.1011 1010.1110 | 0xEB 0xAE | |
0x87 | 1000.0111 | 1110.1011 1010.1111 | 0xEB 0xAF | |
0x88 | 1000.1000 | 1110.1110 1010.1010 | 0xEE 0xAA | |
0x89 | 1000.1001 | 1110.1110 1010.1011 | 0xEE 0xAB | |
0x8A | 1000.1010 | 1110.1111 1010.1010 | 0xEF 0xAA | |
0x8B | 1000.1011 | 1110.1111 1010.1011 | 0xEF 0xAB | |
0x8C | 1000.1100 | 1110.1110 1010.1110 | 0xEE 0xAE | |
0x8D | 1000.1101 | 1110.1110 1010.1111 | 0xEE 0xAF | |
0x8E | 1000.1110 | 1110.1111 1010.1110 | 0xEF 0xAE | |
0x8F | 1000.1111 | 1110.1111 1010.1111 | 0xEF 0xAF | |
0x90 | 1001.0000 | 1110.1010 1011.1010 | 0xEA 0xBA | |
0x91 | 1001.0001 | 1110.1010 1011.1011 | 0xEA 0xBB | |
0x92 | 1001.0010 | 1110.1011 1011.1010 | 0xEB 0xBA | |
0x93 | 1001.0011 | 1110.1011 1011.1011 | 0xEB 0xBB | |
0x94 | 1001.0100 | 1110.1010 1011.1110 | 0xEA 0xBE | |
0x95 | 1001.0101 | 1110.1010 1011.1111 | 0xEA 0xBF | |
0x96 | 1001.0110 | 1110.1011 1011.1110 | 0xEB 0xBE | |
0x97 | 1001.0111 | 1110.1011 1011.1111 | 0xEB 0xBF | |
0x98 | 1001.1000 | 1110.1110 1011.1010 | 0xEE 0xBA | |
0x99 | 1001.1001 | 1110.1110 1011.1011 | 0xEE 0xBB | |
0x9A | 1001.1010 | 1110.1111 1011.1010 | 0xEF 0xBA | |
0x9B | 1001.1011 | 1110.1111 1011.1011 | 0xEF 0xBB | |
0x9C | 1001.1100 | 1110.1110 1011.1110 | 0xEE 0xBE | |
0x9D | 1001.1101 | 1110.1110 1011.1111 | 0xEE 0xBF | |
0x9E | 1001.1110 | 1110.1111 1011.1110 | 0xEF 0xBE | |
0x9F | 1001.1111 | 1110.1111 1011.1111 | 0xEF 0xBF | |
0xA0 | 1010.0000 | 1111.1010 1010.1010 | 0xFA 0xAA | |
0xA1 | 1010.0001 | 1111.1010 1010.1011 | 0xFA 0xAB | |
0xA2 | 1010.0010 | 1111.1011 1010.1010 | 0xFB 0xAA | |
0xA3 | 1010.0011 | 1111.1011 1010.1011 | 0xFB 0xAB | |
0xA4 | 1010.0100 | 1111.1010 1010.1110 | 0xFA 0xAE | |
0xA5 | 1010.0101 | 1111.1010 1010.1111 | 0xFA 0xAF | |
0xA6 | 1010.0110 | 1111.1011 1010.1110 | 0xFB 0xAE | |
0xA7 | 1010.0111 | 1111.1011 1010.1111 | 0xFB 0xAF | |
0xA8 | 1010.1000 | 1111.1110 1010.1010 | 0xFE 0xAA | |
0xA9 | 1010.1001 | 1111.1110 1010.1011 | 0xFE 0xAB | |
0xAA | 1010.1010 | 1111.1111 1010.1010 | 0xFF 0xAA | |
0xAB | 1010.1011 | 1111.1111 1010.1011 | 0xFF 0xAB | |
0xAC | 1010.1100 | 1111.1110 1010.1110 | 0xFE 0xAE | |
0xAD | 1010.1101 | 1111.1110 1010.1111 | 0xFE 0xAF | |
0xAE | 1010.1110 | 1111.1111 1010.1110 | 0xFF 0xAE | |
0xAF | 1010.1111 | 1111.1111 1010.1111 | 0xFF 0xAF | |
0xB0 | 1011.0000 | 1111.1010 1011.1010 | 0xFA 0xBA | |
0xB1 | 1011.0001 | 1111.1010 1011.1011 | 0xFA 0xBB | |
0xB2 | 1011.0010 | 1111.1011 1011.1010 | 0xFB 0xBA | |
0xB3 | 1011.0011 | 1111.1011 1011.1011 | 0xFB 0xBB | |
0xB4 | 1011.0100 | 1111.1010 1011.1110 | 0xFA 0xBE | |
0xB5 | 1011.0101 | 1111.1010 1011.1111 | 0xFA 0xBF | |
0xB6 | 1011.0110 | 1111.1011 1011.1110 | 0xFB 0xBE | |
0xB7 | 1011.0111 | 1111.1011 1011.1111 | 0xFB 0xBF | |
0xB8 | 1011.1000 | 1111.1110 1011.1010 | 0xFE 0xBA | |
0xB9 | 1011.1001 | 1111.1110 1011.1011 | 0xFE 0xBB | |
0xBA | 1011.1010 | 1111.1111 1011.1010 | 0xFF 0xBA | |
0xBB | 1011.1011 | 1111.1111 1011.1011 | 0xFF 0xBB | |
0xBC | 1011.1100 | 1111.1110 1011.1110 | 0xFE 0xBE | |
0xBD | 1011.1101 | 1111.1110 1011.1111 | 0xFE 0xBF | |
0xBE | 1011.1110 | 1111.1111 1011.1110 | 0xFF 0xBE | |
0xBF | 1011.1111 | 1111.1111 1011.1111 | 0xFF 0xBF |
Value | Code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0xC0 | 1100.0000 | 1110.1010 1110.1010 | 0xEA 0xEA | |
0xC1 | 1100.0001 | 1110.1010 1110.1011 | 0xEA 0xEB | |
0xC2 | 1100.0010 | 1110.1011 1110.1010 | 0xEB 0xEA | |
0xC3 | 1100.0011 | 1110.1011 1110.1011 | 0xEB 0xEB | |
0xC4 | 1100.0100 | 1110.1010 1110.1110 | 0xEA 0xEE | |
0xC5 | 1100.0101 | 1110.1010 1110.1111 | 0xEA 0xEF | |
0xC6 | 1100.0110 | 1110.1011 1110.1110 | 0xEB 0xEE | |
0xC7 | 1100.0111 | 1110.1011 1110.1111 | 0xEB 0xEF | |
0xC8 | 1100.1000 | 1110.1110 1110.1010 | 0xEE 0xEA | |
0xC9 | 1100.1001 | 1110.1110 1110.1011 | 0xEE 0xEB | |
0xCA | 1100.1010 | 1110.1111 1110.1010 | 0xEF 0xEA | |
0xCB | 1100.1011 | 1110.1111 1110.1011 | 0xEF 0xEB | |
0xCC | 1100.1100 | 1110.1110 1110.1110 | 0xEE 0xEE | |
0xCD | 1100.1101 | 1110.1110 1110.1111 | 0xEE 0xEF | |
0xCE | 1100.1110 | 1110.1111 1110.1110 | 0xEF 0xEE | |
0xCF | 1100.1111 | 1110.1111 1110.1111 | 0xEF 0xEF | |
0xD0 | 1101.0000 | 1110.1010 1111.1010 | 0xEA 0xFA | |
0xD1 | 1101.0001 | 1110.1010 1111.1011 | 0xEA 0xFB | |
0xD2 | 1101.0010 | 1110.1011 1111.1010 | 0xEB 0xFA | |
0xD3 | 1101.0011 | 1110.1011 1111.1011 | 0xEB 0xFB | |
0xD4 | 1101.0100 | 1110.1010 1111.1110 | 0xEA 0xFE | |
0xD5 | 1101.0101 | 1110.1010 1111.1111 | 0xEA 0xFF | |
0xD6 | 1101.0110 | 1110.1011 1111.1110 | 0xEB 0xFE | |
0xD7 | 1101.0111 | 1110.1011 1111.1111 | 0xEB 0xFF | |
0xD8 | 1101.1000 | 1110.1110 1111.1010 | 0xEE 0xFA | |
0xD9 | 1101.1001 | 1110.1110 1111.1011 | 0xEE 0xFB | |
0xDA | 1101.1010 | 1110.1111 1111.1010 | 0xEF 0xFA | |
0xDB | 1101.1011 | 1110.1111 1111.1011 | 0xEF 0xFB | |
0xDC | 1101.1100 | 1110.1110 1111.1110 | 0xEE 0xFE | |
0xDD | 1101.1101 | 1110.1110 1111.1111 | 0xEE 0xFF | |
0xDE | 1101.1110 | 1110.1111 1111.1110 | 0xEF 0xFE | |
0xDF | 1101.1111 | 1110.1111 1111.1111 | 0xEF 0xFF | |
0xE0 | 1110.0000 | 1111.1010 1110.1010 | 0xFA 0xEA | |
0xE1 | 1110.0001 | 1111.1010 1110.1011 | 0xFA 0xEB | |
0xE2 | 1110.0010 | 1111.1011 1110.1010 | 0xFB 0xEA | |
0xE3 | 1110.0011 | 1111.1011 1110.1011 | 0xFB 0xEB | |
0xE4 | 1110.0100 | 1111.1010 1110.1110 | 0xFA 0xEE | |
0xE5 | 1110.0101 | 1111.1010 1110.1111 | 0xFA 0xEF | |
0xE6 | 1110.0110 | 1111.1011 1110.1110 | 0xFB 0xEE | |
0xE7 | 1110.0111 | 1111.1011 1110.1111 | 0xFB 0xEF | |
0xE8 | 1110.1000 | 1111.1110 1110.1010 | 0xFE 0xEA | |
0xE9 | 1110.1001 | 1111.1110 1110.1011 | 0xFE 0xEB | |
0xEA | 1110.1010 | 1111.1111 1110.1010 | 0xFF 0xEA | |
0xEB | 1110.1011 | 1111.1111 1110.1011 | 0xFF 0xEB | |
0xEC | 1110.1100 | 1111.1110 1110.1110 | 0xFE 0xEE | |
0xED | 1110.1101 | 1111.1110 1110.1111 | 0xFE 0xEF | |
0xEE | 1110.1110 | 1111.1111 1110.1110 | 0xFF 0xEE | |
0xEF | 1110.1111 | 1111.1111 1110.1111 | 0xFF 0xEF | |
0xF0 | 1111.0000 | 1111.1010 1111.1010 | 0xFA 0xFA | |
0xF1 | 1111.0001 | 1111.1010 1111.1011 | 0xFA 0xFB | |
0xF2 | 1111.0010 | 1111.1011 1111.1010 | 0xFB 0xFA | |
0xF3 | 1111.0011 | 1111.1011 1111.1011 | 0xFB 0xFB | |
0xF4 | 1111.0100 | 1111.1010 1111.1110 | 0xFA 0xFE | |
0xF5 | 1111.0101 | 1111.1010 1111.1111 | 0xFA 0xFF | |
0xF6 | 1111.0110 | 1111.1011 1111.1110 | 0xFB 0xFE | |
0xF7 | 1111.0111 | 1111.1011 1111.1111 | 0xFB 0xFF | |
0xF8 | 1111.1000 | 1111.1110 1111.1010 | 0xFE 0xFA | |
0xF9 | 1111.1001 | 1111.1110 1111.1011 | 0xFE 0xFB | |
0xFA | 1111.1010 | 1111.1111 1111.1010 | 0xFF 0xFA | |
0xFB | 1111.1011 | 1111.1111 1111.1011 | 0xFF 0xFB | |
0xFC | 1111.1100 | 1111.1110 1111.1110 | 0xFE 0xFE | |
0xFD | 1111.1101 | 1111.1110 1111.1111 | 0xFE 0xFF | |
0xFE | 1111.1110 | 1111.1111 1111.1110 | 0xFF 0xFE | |
0xFF | 1111.1111 | 1111.1111 1111.1111 | 0xFF 0xFF |
5-bit value | GCR code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x00 | 0.0000 | 1010.1011 | 0xAB | |
0x01 | 0.0001 | 1010.1101 | 0xAD | |
0x02 | 0.0010 | 1010.1110 | 0xAE | |
0x03 | 0.0011 | 1010.1111 | 0xAF | |
0x04 | 0.0100 | 1011.0101 | 0xB5 | |
0x05 | 0.0101 | 1011.0110 | 0xB6 | |
0x06 | 0.0110 | 1011.0111 | 0xB7 | |
0x07 | 0.0111 | 1011.1010 | 0xBA | |
0x08 | 0.1000 | 1011.1011 | 0xBB | |
0x09 | 0.1001 | 1011.1101 | 0xBD | |
0x0A | 0.1010 | 1011.1110 | 0xBE | |
0x0B | 0.1011 | 1011.1111 | 0xBF | |
0x0C | 0.1100 | 1101.0110 | 0xD6 | |
0x0D | 0.1101 | 1101.0111 | 0xD7 | |
0x0E | 0.1110 | 1101.1010 | 0xDA | |
0x0F | 0.1111 | 1101.1011 | 0xDB |
5-bit value | GCR code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x10 | 1.0000 | 1101.1101 | 0xDD | |
0x11 | 1.0001 | 1101.1110 | 0xDE | |
0x12 | 1.0010 | 1101.1111 | 0xDF | |
0x13 | 1.0011 | 1110.1010 | 0xEA | |
0x14 | 1.0100 | 1110.1011 | 0xEB | |
0x15 | 1.0101 | 1110.1101 | 0xED | |
0x16 | 1.0110 | 1110.1110 | 0xEE | |
0x17 | 1.0111 | 1110.1111 | 0xEF | |
0x18 | 1.1000 | 1111.0101 | 0xF5 | |
0x19 | 1.1001 | 1111.0110 | 0xF6 | |
0x1A | 1.1010 | 1111.0111 | 0xF7 | |
0x1B | 1.1011 | 1111.1010 | 0xFA | |
0x1C | 1.1100 | 1111.1011 | 0xFB | |
0x1D | 1.1101 | 1111.1101 | 0xFD | |
0x1E | 1.1110 | 1111.1110 | 0xFE | |
0x1F | 1.1111 | 1111.1111 | 0xFF |
Wozniak called the system "my most incredible experience at Apple and the finest job I did".
Later, the design of the floppy drive controller was modified to allow a byte on disk to contain up to one pair of zero bits in a row. This allowed each eight-bit byte to hold six bits of useful data, and allowed 16 sectors per track. This scheme is known as 6-and-2 encoding, and was used on Apple Pascal, Apple DOS 3.3 and ProDOS, and later with Apple FileWare drives in the Apple Lisa and the 400K and 800K 3½-inch disks on the Macintosh and Apple II. Apple did not originally call this scheme "GCR", but the term was later applied to it to distinguish it from IBM PC floppies which used the MFM encoding scheme.|+6-and-2 encoding table
6-bit value | GCR code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x00 | 00.0000 | 1001.0110 | 0x96 | |
0x01 | 00.0001 | 1001.0111 | 0x97 | |
0x02 | 00.0010 | 1001.1010 | 0x9A | |
0x03 | 00.0011 | 1001.1011 | 0x9B | |
0x04 | 00.0100 | 1001.1101 | 0x9D | |
0x05 | 00.0101 | 1001.1110 | 0x9E | |
0x06 | 00.0110 | 1001.1111 | 0x9F | |
0x07 | 00.0111 | 1010.0110 | 0xA6 | |
0x08 | 00.1000 | 1010.0111 | 0xA7 | |
0x09 | 00.1001 | 1010.1011 | 0xAB | |
0x0A | 00.1010 | 1010.1100 | 0xAC | |
0x0B | 00.1011 | 1010.1101 | 0xAD | |
0x0C | 00.1100 | 1010.1110 | 0xAE | |
0x0D | 00.1101 | 1010.1111 | 0xAF | |
0x0E | 00.1110 | 1011.0010 | 0xB2 | |
0x0F | 00.1111 | 1011.0011 | 0xB3 |
6-bit value | GCR code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x10 | 01.0000 | 1011.0100 | 0xB4 | |
0x11 | 01.0001 | 1011.0101 | 0xB5 | |
0x12 | 01.0010 | 1011.0110 | 0xB6 | |
0x13 | 01.0011 | 1011.0111 | 0xB7 | |
0x14 | 01.0100 | 1011.1001 | 0xB9 | |
0x15 | 01.0101 | 1011.1010 | 0xBA | |
0x16 | 01.0110 | 1011.1011 | 0xBB | |
0x17 | 01.0111 | 1011.1100 | 0xBC | |
0x18 | 01.1000 | 1011.1101 | 0xBD | |
0x19 | 01.1001 | 1011.1110 | 0xBE | |
0x1A | 01.1010 | 1011.1111 | 0xBF | |
0x1B | 01.1011 | 1100.1011 | 0xCB | |
0x1C | 01.1100 | 1100.1101 | 0xCD | |
0x1D | 01.1101 | 1100.1110 | 0xCE | |
0x1E | 01.1110 | 1100.1111 | 0xCF | |
0x1F | 01.1111 | 1101.0011 | 0xD3 |
6-bit value | GCR code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x20 | 10.0000 | 1101.0110 | 0xD6 | |
0x21 | 10.0001 | 1101.0111 | 0xD7 | |
0x22 | 10.0010 | 1101.1001 | 0xD9 | |
0x23 | 10.0011 | 1101.1010 | 0xDA | |
0x24 | 10.0100 | 1101.1011 | 0xDB | |
0x25 | 10.0101 | 1101.1100 | 0xDC | |
0x26 | 10.0110 | 1101.1101 | 0xDD | |
0x27 | 10.0111 | 1101.1110 | 0xDE | |
0x28 | 10.1000 | 1101.1111 | 0xDF | |
0x29 | 10.1001 | 1110.0101 | 0xE5 | |
0x2A | 10.1010 | 1110.0110 | 0xE6 | |
0x2B | 10.1011 | 1110.0111 | 0xE7 | |
0x2C | 10.1100 | 1110.1001 | 0xE9 | |
0x2D | 10.1101 | 1110.1010 | 0xEA | |
0x2E | 10.1110 | 1110.1011 | 0xEB | |
0x2F | 10.1111 | 1110.1100 | 0xEC |
6-bit value | GCR code | |||
---|---|---|---|---|
hex | bin | bin | hex | |
0x30 | 11.0000 | 1110.1101 | 0xED | |
0x31 | 11.0001 | 1110.1110 | 0xEE | |
0x32 | 11.0010 | 1110.1111 | 0xEF | |
0x33 | 11.0011 | 1111.0010 | 0xF2 | |
0x34 | 11.0100 | 1111.0011 | 0xF3 | |
0x35 | 11.0101 | 1111.0100 | 0xF4 | |
0x36 | 11.0110 | 1111.0101 | 0xF5 | |
0x37 | 11.0111 | 1111.0110 | 0xF6 | |
0x38 | 11.1000 | 1111.0111 | 0xF7 | |
0x39 | 11.1001 | 1111.1001 | 0xF9 | |
0x3A | 11.1010 | 1111.1010 | 0xFA | |
0x3B | 11.1011 | 1111.1011 | 0xFB | |
0x3C | 11.1100 | 1111.1100 | 0xFC | |
0x3D | 11.1101 | 1111.1101 | 0xFD | |
0x3E | 11.1110 | 1111.1110 | 0xFE | |
0x3F | 11.1111 | 1111.1111 | 0xFF |
Independently, Commodore Business Machines (CBM) created a group coded recording scheme for their Commodore 2040 floppy disk drive (launched in the spring of 1979). The relevant constraints on the 2040 drive were that no more than two zero bits could occur in a row; the drive imposed no special constraint on the first bit in a byte. This allowed the use of a scheme similar to that used in tape drives. Every four bits of data are translated into five bits on disk, using the same 5-bit codes as IBM to enure there are never more than two zero bits in a row, but in a different order:
|
|
This more efficient GCR scheme, combined with an approach at constant bit-density recording by gradually increasing the clock rate (zone constant angular velocity, ZCAV) and storing more physical sectors on the outer tracks than on the inner ones (zone bit recording, ZBR), enabled Commodore to fit on a standard single-sided single-density 5.25-inch floppy, where Apple fit