INTEL 8272 SINGLE/DOUBLE DENSITY FLOPPY DISK CONTROLLER. ˜ IBM Compatible in Both Single and ˜ Data Transfers in DMA or Non-DMA Double Density Recording Formats Mode ˜ Programmable Data Record Lengths : ˜ Parallel Seek Operations on Up to 128,256,512, or 1024 Bytes/Sector Four Drives ˜ Drive Up to 4 Floppy Disks ˜ Compatible with Most Microprocessors Including 8080A, ˜ Data Scan Capability - Will Scan a 8085A,8086 and 8088 Single Sector or an Entire Cylinder's Worth of Data Fields, Comparing on a ˜ Single-Phase 8 MHz Clock Byte by Byte Basics, Data in the Processor's Memory with Data Read ˜ Single +5 Volt Power Supply from the Diskette ˜ Available in 40-Pin Plastic Dual-in -line Package The 8272 is an LSI Floppy Disk Controller (FDC) Chip, WHICH contains the circulty and control functions for interfacing a processor to 4 Floppy Disk Drives. It is capable of supporting either IBM 3740 single density format (FM),or IBM System 34 Double Density format (MFM) including double sided recording. The 8272 provides control signals which simlify the design of an external phase locked loop, and write precompensation circultry. The FDC simplifies and hanles most of the burdens associated with implementing a Floppy Disk Drive Interface. _______________________________________________________________________________ PIN CONFIGURATION ----- ------ RESET--|1 ----- 40 |--Vcc _RD--|2 39 |--_RW/SEEK _WR--|3 38 |--LCT/DIR _CS--|4 37 |--FR/STP A0--|5 36 |--MDL DB0--|6 35 |-RDY DB1--|7 34 |--WP/TS DB2--|8 33 |--FLT/TRK0 DB3--|9 32 |--PS0 DB4--|10 31 |--PS1 DB5--|11 30 |--WR DATA DB6--|12 29 |--DS0 DB7--|13 28 |--DS1 DRQ--|14 27 |--HDSEL _DACK--|15 26 |--MFM TC--|16 25 |--WE IDX--|17 24 |--Vc0 INT--|18 23 |--RD DATA CLR--|19 22 |--DW GND--|20 21 |--WR CLK -------------- 8272 INTERNAL BLOCK DIAGRAM | | ------------ --------- | | | | /__\ | | /__\ | | /__\ | | DB0-7<____>| DATA |<___ >|8|<____>| | \ / | BUS | \ / |2| \ / |REGISTERS | | BUFFER| |7| | | | | |2| | | | | | | | | --------- |I| | | ------ |N| ------------ TERMINAL | |T| COUNT \| / |E| ------------ \/ |R| | SERIAL |<------- WR CLOCK ---------- |N| | INTERFACE|-------> WR DATA DRQ<---| | |A| /__\ |CONTROLLER|-------> WR ENABLE DACK--->. READ | |L|<____>| |-------> PRE-SHIFT0 INT<---| WRITE | | | \ / | |-------> PRE-SHIFT1 ID--->. DMA | /__\ |B| | |<------- READ DATA WR--->. CONTROL|<____>|U| | |<------- DATA WINDOW A0--->| LOGIC | \ / |S| -------------------> Vco SYNC RESET--->| | | | ------------ | | | | | | ------- ----.----- | | | | /__| | /|\ | | | DRIVE |<___|INPUT| | | | /__\ |INTERFACE | \ | PORT| | | |<____>|CONTROLLER| | | | | | \ / | | ------- CS ------ | | | | /\ ------- | | | |<-->| |-->DRIVE SEL0 | | ------------ \/ | OUT |-->DRIVE SEL1 | | | |-->MFM MODE CLK ---> | | | PORT|-->R/W SEEK Vcc ---> | |-->HEAD LOAD GND ---> | |-->HEAD SELECT | |-->LOW | | CURRENT/DIRECTION --------->FAULT RESET/STEP 8272 SYSTEM BLOCK DIAGRAM -------- | | | CPU | | | -------- ^ / \ / \ | | \ / \ / -------------------------------------------------------- SYSTEM BUS -------------------------------------------------------- ^ ^ / \ / \ / \ / \ | | | | \ / \ / \ / \ / ------------ ------------ DATA ----- ------------ | | DRQ | | WINDOW | | | --| | |<--------| |<-----------|FLL|---| | | | | | | | | | | | 8237 | | 8272 | ----- | | DRIVE | | DMA | _DACK | | RD DATA | | | |CONTROLLER|-------->| FDC |<------------------ |INTERFACE | | | | | WR DATA | | | | | |------------------->| | | | | | / | | | |-------->| | / -----------------| | ------------ TC | |< INPUT CONTROL | | | | \ -----------------| | (TERMINAL COUNT)| | \ | | | | \ | | | |------------------\ | | | | OUTPUT CONTROL >| | ------------------------------/ ------------ / DESCRIPTION Hand-shaking signals are provided in the 8272 which make DMA operation easy to incorporate with the aid of an external DMA Controller chip, such as the 8237. The FDC will operate in einther DMA or Non-DMA mode. In the Non-DMA mode,the FDC generates interrupts to the processor for every transfer of data byte between the CPU and 8272. In the DMA mode, the processor need only load command into the FDC and all data transfers occur under control of the 8272 and DMA controller. There are 15 separate commands which the 8272 will execute. Each of these commands require multiple 8-bit bytes to fully specify the operation which the processor wishes the FDC to perform. The following commands are available: Read Data Write Data Read ID Format a Track Read Deleted Data Write Deleted Data Read a Track Seek Scan Equal Recalibrate (Restore to Track 0) Scan High or Equal Sense Interrupt Status Scan Low or Equal Specify Sense Drive Status FEATURES Addres mark detection circultry is internal to the FDC which simlifies the phase locked loop and read electronics. The track stopping rate, head load time, and head unload time may be programmed by user. The 8272 offers many additional features such as multiple sector transfers in both read and write modes with a single command, and full IBM compatibillity in both single (FM) and double density (MFM) modes. 8272 REGISTERS - CPU INTERFACE The 8272 contain two registers which may accessed by the main system processor: a Status Register and a Data Register. The 8-bit Main Status Register contains the status information of the FDC ,and may be accessed at any time. The 8-bit Data Register ( actually consists of several registers in a stack with only one register presented to the data bus at time), stores data ,commands,parameters, and FDD status information. Data bytes are read out of, or written into, the Data Register in order to program or obtain the results after execution of command. The Status Register may only be read and is used to facilitate the transfer of data between the processor and 8272. The relationship between the Status/Data registers and the signals _RD,_WR, and A0 is shown below. ----ò-----ò-----ò---------------------------- |A0 | _RD | _WR | FUNCTION | |===========================================| | 0 | 0 | 1 | Read Main Status Register| |===========================================| | 0 | 1 | 0 | illegal | |===========================================| | 0 | 0 | 0 | illegal | |===========================================| | 1 | 0 | 0 | illegal | |===========================================| | 1 | 0 | 1 | Read from Data Register | |===========================================| | 1 | 1 | 0 | Write into Data Register | --------------------------------------------- The bits in the Main Status Register are defined as follows: --------------ò------------ò----------ò-------------------------- | BIT NUMBER | NAME | SYMBOL | DESCRIPTION | |-------------+------------+----------+-------------------------| | DB0 | FDD0 Busy | D0B | FDD number 0 is in the| | | | | seek mode. | |-------------+------------+----------+-------------------------| | DB1 | FDD1 Busy | D1B | FDD number 1 is in the| | | | | seek mode. | |-------------+------------+----------+-------------------------| | DB2 | FDD2 Busy | D2B | FDD number 2 is in the| | | | | seek mode | |-------------+------------+----------+-------------------------| | DB3 | FDD3 Busy | D30 | FDD number 3 is in the| | | | | seek mode | |-------------+------------+----------+-------------------------| | DB4 | FDD4 Busy | CB | A read or write command| | | | | is in progress | |-------------+------------+----------+-------------------------| | DB5 | Non - DMA | NDM | The FDC is in the non -| | | mode | | DMA mode. This bit is | | | | | set only during the | | | | | execution phase in | | | | | non-DMA mode.Transitien| | | | | ts 'G' state indicates | | | | | execution phase has | | | | | ended | |-------------+------------+----------+-------------------------| | DB6 | Data Input | DIO | Indicates direction of | | | -Output | | data transfer between | | | | | FDC and Data Register. | | | | | If DIO is '1',then | | | | | transfer is from Data | | | | | Register to the | | | | | processor.If DIO is '0',| | | | | then transfer is from | | | | | the Processor to Data | | | | | Register. | |-------------+------------+----------+-------------------------| | DB7 | Request for| RQM | Indicates Data Register | | | | | is ready to send or | | | Master | | receive data to or from | | | | | the Processor.Both bits | | | | | DIO and RQM should be | | | | | used to perfom the | | | | | handshaking functios of | | | | | 'ready' and 'direction' | | | | | to the processor. | ----------------------------------------------------------------- PIN DESCRIPTION ---------------ò-------ò-----------------ò----------------------------------- | PIN | I/O | CONNECTION | DESCRIPTION | |-----ò--------| | TO | | | NO. | SYMBOL | | | | |-----+--------+-------+-----------------+----------------------------------| | 1 | RST | I | mP | Reset Places FDC in idts | | | | | | state Resets output lines to | | | | | | FDD is '0' (low) | |-----+--------+-------+-----------------+----------------------------------| | | | | | Read:Control signal for | | 2 | _RD | I* | mP | transfer of data from FDC to | | | | | | Data Bus, when '0' (low) | |-----+--------+-------+-----------------+----------------------------------| | | | | | Write: Control signal for | | 3 | _WR | I* | mP | transfer of data to FDC via Data | | | | | | Bus, when '0' (low) | |-----+--------+-------+-----------------+----------------------------------| | 4 | _CS | I | mP | Chip Select: IC selected | | | | | | when '0' (low), allowing | | | | | | _RD and _WR to be enabled | |-----+--------+-------+-----------------+----------------------------------| | 5 | A0 | I* | mP | Data/Status Reg Select: | | | | | | Select Data Reg (A0=1) or | | | | | | Status Reg (A0=0) | | | | | | content be sent to Data Bus | |-----+--------+-------+-----------------+----------------------------------| |6-13 |DB0-DB7 | I/O* | mP | Data Bus: Bidirectional | | | | | | 8 - Bit Data Bus | |-----+--------+-------+-----------------+----------------------------------| | 14 | DRQ | O | DMA | Data DMA Request: DMA | | | | | | Request is being made by | | | | | | FDC when DRQ '1' | |-----+--------+-------+-----------------+----------------------------------| | 15 |_DACK | I | DMA | DMA Acknowledge: DMA | | | | | | cycle is active when '0' | | | | | | (low) and Controller is | | | | | | performing DMA transfer | |-----+--------+-------+-----------------+----------------------------------| | 16 | TC | I | DMA | Terminal Count: Indicates | | | | | | the termination of a DMA | | | | | | transfer when '1' (high) | |-----+--------+-------+-----------------+----------------------------------| | 17 | IDX | I | FDD | Index: Indicates the beginning | | | | | | of a disk track | |-----+--------+-------+-----------------+----------------------------------| | 18 | INT | O | mP | Interrupt: Interrupt Request | | | | | | Generated by FDC | |-----+--------+-------+-----------------+----------------------------------| | 19 | CLK | I | | Check: Single Phase 6MHz | | | | | | Squarewave Check | |-----+--------+-------+-----------------+----------------------------------| | 20 | CND | | | Ground: D.C. Power Return | ----------------------------------------------------------------------------- Note * :Disabled when _CS = 1. ---------------ò-------ò-----------------ò----------------------------------- | PIN | I/O | CONNECTION | DESCRIPTION | |-----ò--------| | TO | | | NO. | SYMBOL | | | | |-----+--------+-------+-----------------+----------------------------------| | 40 | Vcc | | | POWER | |-----+--------+-------+-----------------+----------------------------------| | | | | | Read Write/SEEK. When '1' | | 39 |_RWseek | O | FDD | (high) seek mods selected and | | | | | | when '0' (low) Read/Write | | | | | | mode selected | |-----+--------+-------+-----------------+----------------------------------| | | | | FDD | Low Current direction.Lawers | | 38 | LGT/DIR| O | | Write current on inner tracks | | | | | | in Read/Write mode,determines | | | | | | direction head will step | | | | | | in Seek mode | |-----+--------+-------+-----------------+----------------------------------| | | | | | Fault Reset/Step: Resets fault | | 37 | FR/STP | O | FDD | FF in FDD in Read/Write | | | | | | mode, provides step pulses to | | | | | | move head to another cylinder | | | | | | in Seek mode | |-----+--------+-------+-----------------+----------------------------------| | | | | | Head Load: Command which | | 36 | HDL | O | FDD | causes read/write head in FDD | | | | | | to contact diskette | |-----+--------+-------+-----------------+----------------------------------| | | | | | Ready: Indicates FDD is ready | | 35 | RDY | I | FDD | to send or receive data | |-----+--------+-------+-----------------+----------------------------------| | 34 | WP/TS | I | FDD | Write Protect/Two-Side: | | | | | | Senses Write Protect status in | | | | | | Read/Write mode,and Two | | | | | | Side Media in Seek mode | |-----+--------+-------+-----------------+----------------------------------| | | | | | Fault/Track 0: Senses FDD | | 33 |FLT/TRK0| I | FDD | fault condition in Read/Write | | | | | | mode and Track 0 condition | |-----+--------+-------+-----------------+----------------------------------| | | | | | Precompensation (pre-shift): | |31,32|PS1,PS2 | O | FDD | Write precompensation status | | | | | | during MFM mode, Determines | | | | | | early,late,and normal times. | |-----+--------+-------+-----------------+----------------------------------| | | | | | Write Data: Serial clock and | | 30 |WR DATA | O | FDD | data bits to FDD | |-----+--------+-------+-----------------+----------------------------------| |28,29|DS1,DS0 | O | FDD | Drive Select: Selects FDD until | |-----+--------+-------+-----------------+----------------------------------| | 27 | HDSEL | O | FDD | Head Select: Head 1 selected | | | | | | when '1' (high) Head 0 | | | | | | selected when '0' (low) | |-----+--------+-------+-----------------+----------------------------------| | 26 | MFM | O | FLL | MFM Mode. MFM mode when | | | | | | '1', FM mode when '0' | ----------------------------------------------------------------------------- ------ò--------ò-------ò-----------------ò----------------------------------- | | | | | Write Enable: Enables write | | 25 | WE | O | FDD | data into FDD | |-----+--------+-------+-----------------+----------------------------------| | | | | | VCO Sync: Inhibits VCO in | | 24 | VCO | O | FLL | FLL when '0' (low), enables | | | | | | VCO when '1' | |-----+--------+-------+-----------------+----------------------------------| | | | | | Read Data. Read data from | | 23 |RD DATA | I | FDD | FDD. containing clock and | | | | | | data bits | |-----+--------+-------+-----------------+----------------------------------| | | | | | Data Window: Generated by FLL, | | 22 | DW | I | FLL | and used to sample dats | | | | | | from FDD | |-----+--------+-------+-----------------+----------------------------------| | | | | | Write Clock: Write dats rate to | | 21 | WR CLK | I | | FDD FM = 500 kHZ,MFM=1 | | | | | | MHz,with a pulse witdh of 250 ms| | | | | | for both FM and MFM | | | | | | Must be unabled for all | | | | | | operations, both Read and Write | ----------------------------------------------------------------------------- The DIO and RQM bits in the Status Register indicate: when Data is eady and in which direction data will be transferred on the Data Bus. READY ======== NOT======== =========== ======= ========= REQUEST | | | | | | | | | FOR | RDY| | | | | | | MASTER =====| |=== =====| ======== | (RQM) | | | | | | | ====== =========== ======================================= _WR | | | | | | | | | ==| ==| | | | | | | | | | =============================== ========== =============== | | | | | | | | | | | _RD === === | | | | | | | | | | -----ò----ò------ò--ò----ò----ò----ò-----ò----ò-+-------- | A | B | A |B | A | C | D | C | D |B| A | --------------------------------------------------------- NOTE : (A) - DATA REGISTER READY TO BE WRITTEN INTO BY PROCESSOR (B) - DATA REGISTER NOT READY TO BE WRITTEN INTO AT PROCESSOR (C) - DATA REGISTER READY FOR NEXR DATA BYTE TO BE READ BY THE PROCESSOR. (D) - DATA REGISTER NOT READY FOR NEXT DATA BYTE TO BE READ BY PROCESSOR Pic. STATUS REGISTER TIMING The 8272 is capable of executing 15 different commands. Each command is initiated by a multi-byte transfer from the proaessor, and the result after execution of the command may also be a multi-byte transfer back to the processor. Because of this multi-byte interchange of information between the 8272 and the processor, it is convenient to consider each command as consisting of three phases: Command Phase: The FDC receives all information required to perform a particular operation from the processor. Execution Phase: The FDC performs the operation it was instructed to do. Result Phase: After completion of the operation, status and other housekeeping information are made available to the processor. During Command or Result Phases the Main Status Register (described earlier) must be read by the processor before each byte of information is written into or read from the Data Register. Bits D6 and D7 in the Main Status Register must be in a 0 and 1 state, respectively,before each byte of the command word may be written into the 8272. Many of the commands require multiple bytes, and as a result the Main Status Register must be read prior to each byte transfer to the 8272. On the other hand, during the Result Phase, D6 and D7 in the Main Status Register must both 1's (D6=1 and D7=1) before reading each byte from the Data Register. Note, this reading of the Main Status Register before each byte transfer to the 8272 is required in only the Command and Result Phases, and NOT during the Execution Phase. During the Execution Phase, the Main Status Register need not be read. If the 8272 is in the NON-DMA Mode, then the receipt of each data byte (if 8272 is reading data from FDD) is indicated by an interrupt signal on pin 18 (INT=1). The generation of Read signal (_RD=0) will reset the interrupt as well as output the Data onto the Data Bus. For example, if the processor connot handle interrupts fast enough (every 13 ms for MFM mode) then it may poll the Main Status Register and then bit D7 (RQM) functions just like the interrupt signal. If a Write Command is in process then the _WR signal performs the reset to the interrupt signal. If the 8272 is in the DMA Mode, no interrupts are generated during the Execution Phase. The 8272 generated DRQ's (DMA Requests) when each byte of data is available. The DMA Controller responds to this request with both a _DACK =0 (DMA Acknowledge) and a _RD = 0 (Read signal). When the DMA Acknowlege signal goes low (_DACK=0) then the DMA Request is reset (DRQ=0). If a Write Command has been prorammed then a _WR signal will appear instead of _RD. After the Execution Phase has been completed (Terminal Count has occurred) then an interrupt will occur (INT=1). This signifies the beginning of the Result Phase. When the first byte of data is read during the Result Phase, the interrupt is automatically reset (INT=0). It is important to note that during the Result Phase all bytes shown in the Command Table must be read. The Read Data Command, for example, has seven bytes of data in the Result Phase. All seven bytes must be read in order to succesfully complete the Read Data Command. The 8272 will not accept a new command until all seven bytes have been read. Other commands may require fewer bytes to be read during the Result Phase. The 8272 contains five Status Register. The Main Status Register mentioned above may be read by the processor at any time. The other four Status Registers (ST0,ST1,ST2, and ST3) are only available during the Result Phase, and may be read only after successfully completing command. The particular command which has been executed determines how many of the Status Register will be read. The bytes of data which are sent to the 8272 in the Result Phase, must occur in the order shown in the Command Table. That is ,the Command Code must be sent first and the other bytes sent in the prescribed sequence. No foreshortening of the Command of Result Phases are allowed. After the last byte of data in the Command Phase is sent to the 8272 the Execution Phase automatically starts. In a similar fashion, when the last byte of data is read out in the Result Phase, the command is automtically ended and the 8272 is ready for a new command. Acommand may be aborted by simply sending a Terminal Count to pin 16 (TC=1). This is convenient means of ensuring that the processor may always get the 8272's attention even if the disk system hangs up in an abnormal manner. POLLING FEATURE OF THE 8272 After the Specify command has been sent to the 8272, the Drive Select Lines DS0 and DS1 will automatically go into a polling mode. In between commands (and between step pulses in the SEEK command) the 8272 polls all four FDD looking for a change in the Ready line from any of the drives. If the Ready line changes state (usually due to a door opening of closing) then the 8272 will generate an interrupt. When Status Register 0 (ST0) is read (after Sense interrupt Status is issued), Not Ready (NR) will be indicated. The polling of the Ready line by the 8272 occurs continuously between instructions, thus notifying the processor which drives are on or off line. TABLE 1. 8272 COMMAND SET ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | READ DATA | |---------ò-----ò---------------------------------ò------------------------| |Command | W | MT MFM SK 0 0 1 1 0 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------DTL------------------| | |Execution| | |Data transfer | | | | |between the FDD | | | | |and the main - system | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | READ DELETED DATA | |---------ò-----ò---------------------------------ò------------------------| |Command | W | MT MFM SK 0 1 1 0 0 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------DTL------------------| | | | | | | |Execution| | |Data transfer | | | | |between the FDD | | | | |and the main - system | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | WRITE DATA | |---------ò-----ò---------------------------------ò------------------------| |Command | W | MT MFM 0 0 0 1 0 1 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------DTL------------------| | |Execution| | |Data transfer | | | | |between the FDD | | | | |and the main - system | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | WRITE DELETED DATA | |---------ò-----ò---------------------------------ò------------------------| |Command | W | MT MFM 0 0 1 0 0 1 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------DTL------------------| | |Execution| | |Data transfer | | | | |between the FDD | | | | |and the main - system | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | READ TRACK | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 MFM SK 0 0 0 1 0 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------DTL------------------| | |Execution| | |Data transfer | | | | |between the FDD | | | | |and the main - system. | | | | |FDC read all of | | | | |cylinders contents | | | | |from index hole to | | | | |EOT | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | READ ID | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 MFM 0 0 1 0 1 0 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | |Execution| | |The first correct ID | | | | |information on the | | | | |Cylinder is stored in | | | | |Data Register | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|during Execution | | | R |-------------N-------------------|Phase. | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | FORMAT A TRACK | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 MFM 0 0 1 1 0 1 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W |-------------N-------------------|Bytes/Sector | | | W |------------SC-------------------|Sectors/Cylinder | | | W |------------GPL------------------|Gap 3 | | | W |-------------D-------------------|Filler byte | | | | |FDC formats an | | | | |entire cylinder | |Execution| | | | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|In this case, the ID | | | R |-------------R-------------------|information has no | | | R |-------------N-------------------|meaning | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | SCAN EQUAL | |---------ò-----ò---------------------------------ò------------------------| |Command | W | MT MFM SK 1 0 0 0 1 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------DTL------------------| | |Execution| | |Data compared | | | | |between the FDD | | | | |and the main - system. | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | SCAN LOW OR EQUAL | |---------ò-----ò---------------------------------ò------------------------| |Command | W | MT MFM SK 1 1 0 0 1 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------STP------------------| | |Execution| | |Data compared | | | | |between the FDD | | | | |and the main - system. | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | SCAN HIGH OR EQUAL | |---------ò-----ò---------------------------------ò------------------------| |Command | W | MT MFM SK 1 1 1 0 1 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W | | | | | W |-------------C-------------------|Sector ID information | | | W |-------------H-------------------|prior to Command | | | W |-------------R-------------------|execution | | | W |-------------N-------------------| | | | W |------------EOT------------------| | | | W |------------GPL------------------| | | | W |------------STP------------------| | |Execution| | |Data compared | | | | |between the FDD | | | | |and the main - system. | |Result | R |------------ST0------------------|Status information | | | R |------------ST1------------------|after Command | | | R |------------ST2------------------|execution | | | R |-------------C-------------------| | | | R |-------------H-------------------|Sector ID information | | | R |-------------R-------------------|after command | | | R |-------------N-------------------|execution | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | RECALIBRATE | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 0 0 0 0 1 1 1 |Command Codes | | | W | 0 0 0 0 0 0 DS1 DS0| | |Execution| | |Head retracted to | | | | |Track 0 | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | SENSE INTERRUPT STATUS | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 0 0 0 1 0 0 0 |Command Codes | |Result | R |-------------ST0-----------------|Status information at | | | R |-------------PCN-----------------|the end of each seek | | | | |operation about the | | | | |FDC | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | SPECIFY | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 0 0 0 0 0 1 1 |Command Codes | | | W |----SRT------------------HUT-----| | | | W |----HLT------------------------ND| | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | SENSE DRIVE STATUS | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 0 0 0 0 1 0 0 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | |Result | R |------------ST3------------------| Status information | | | | | about FDD | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | SEEK | |---------ò-----ò---------------------------------ò------------------------| |Command | W | 0 0 0 0 1 1 1 1 |Command Codes | | | W | 0 0 0 0 0 HDS DS1 DS0| | | | W |------------NCN------------------| Status information | | | | | about FDD | |Execution| | | | | | | |Head is positioned | | | | |over proper Cylinder | | | | |on Diskette | ---------------------------------------------------------------------------- ----------ò-----ò---------------------------------ò------------------------- | | | DATA BUS | | | | |---------------------------------| | |PHASE | R/W | D7 D6 D5 D4 D3 D2 D1 D0 |REMARKS | |--------------------------------------------------------------------------| | INVALID | |---------ò-----ò---------------------------------ò------------------------| |Command | W | -------INVALID CODE------------|Invalid Command | | | | |Codes (NoOp - FDC | | | | |goes into Standby | | | | |State) | |Result | R |------------ST0------------------|ST0=80 HEX. | ---------------------------------------------------------------------------- Note: 1. Symbols used in this table are described at the end of this section. 2. A0 = 1 for all operations. 3. X = Don't care, usually made to equal binary 0. TABLE 2. COMMAND MNEMONICS ----------ò-----------------ò------------------------------------------------ | SYMBOL | NAME | DESCRIPTION | |---------+-----------------+-----------------------------------------------| | A0 |Addres line 0 |A0 controls selection of Main Status | | | |Register (A0=0) or Data Register (A0=1) | |---------+-----------------+-----------------------------------------------| | C |Cylinder Number |C stands for the current selected Cylinder | | | |track number 0 trough 76 of the medium. | |---------+-----------------+-----------------------------------------------| | D |Date |D stands for the data pattern which is | | | |going to be written into a Sector. | |---------+-----------------+-----------------------------------------------| | D7-D0 |Data Bus |8-bit Data where D7 is the most | | | |significant bit,and D0 is the least | | | |significant bit. | |---------+-----------------+-----------------------------------------------| | DS0,DS1 |Drive Select |DS stands for a selected drive number 0 or 1. | |---------+-----------------+-----------------------------------------------| | DTL |Date Length |When N is defined as 00,DTL stands for | | | |the data length which users are going to | | | |read out or write into the Sector. | |---------+-----------------+-----------------------------------------------| | EOT | End of Track |EOT stands for the final Sector number of | | | |a Cylinder. | |---------+-----------------+-----------------------------------------------| | GPL | Gap Length |GPL stands for the length of Gap 3 | | | |(spacing between Sector excluding VCO | | | |Sync.Field). | |---------+-----------------+-----------------------------------------------| | H | Head Addres | H stands for head number 0 or 1,as | | | | specified in ID field. | |---------+-----------------+-----------------------------------------------| | HDS | Head Select | HDS stands for a selected head number 0 | | | | or 1 (H=HDS in all command words). | |---------+-----------------+-----------------------------------------------| | HLT | Head Load Time | HLT stands for the head load time in the | | | | FDD (2 to 254 ms in 2 ms increment). | |---------+-----------------+-----------------------------------------------| | HUT | Head Unload Time| HUT stands for the head unload time after | | | | a read or write operation has occure (16 | | | | to 240 ms in 16 ms increments). | |---------+-----------------+-----------------------------------------------| | | | If MF is low, FM mode is selected end if | | MFM |FM or MFM Mode | it is high, MFM mode is selected | |---------+-----------------+-----------------------------------------------| | MT |Multi-Track | If MT is high, a multi-track operation is to | | | | be performed (a cylinder under both HD0 | | | | and HD1 will be read or written). | |---------+-----------------+-----------------------------------------------| | N | Number | N stands for the number of data bytes | | | | written in a Sector. | ----------------------------------------------------------------------------- ----------ò-----------------ò------------------------------------------------ | SYMBOL | NAME | DESCRIPTION | |---------+-----------------+-----------------------------------------------| | NCN |New Cylinder |NCN stands for a new Cylinder number, | | | Number |which is going to be reachad as a result | | | |of the Seek operation.Desired position of Head.| |---------+-----------------+-----------------------------------------------| | ND |NON-DMA Mode |ND stands for operation in the NON-DMA Mode | |---------+-----------------+-----------------------------------------------| | PCN |Present Cylinder |PCN stands for the Cylinder number at the | | | Number. |completion of SENSE INTERRUPT STATUS Command. | | | |Position of Head at present time. | |---------+-----------------+-----------------------------------------------| | R |Record |It stands for the Sector number, which will | | | |be read or writen | |---------+-----------------+-----------------------------------------------| | R/W |Read/Write |Read or Write signal | | | |or 1. | |---------+-----------------+-----------------------------------------------| | SC |Sector |SC indicates the number of Sectors per | | | |cylinder | |---------+-----------------+-----------------------------------------------| | SK | Skip |SK stands for Skip Deleted Data Addres Mark | |---------+-----------------+-----------------------------------------------| | SRT | Step Rate Time |SRT stands for the Stepping Rate for the | | | |FDD (1 to 16 ms in 1 ms increments).The same | | | |Stepping Rate applies to all drives (F=1ms | | | |E=2ms. etc) | |---------+-----------------+-----------------------------------------------| | ST0 | Status 0 |ST0-3 stand for one of four registers which | | ST1 | Status 1 | store the status information after a command | | ST2 | Status 2 | has been executed. This information is | | ST3 | Status 3 | availaible during the result phase after | | | | command execution. These registers should not | | | | be cofused with the main status register | | | | (selected by A0 = 0). ST0-3 may be read only | | | | after a command has been executed and contain | | | | information relevant to that particular | | | | command. | |---------+-----------------+-----------------------------------------------| | | | During a Scan operation, if STP=1, the data | | STP | | in contiguous sectors is compared byte by byte| | | | with data sent from the processor (or DMA), | | | | and if STP=2, then alternats sectors are read | | | | and compared. | ----------------------------------------------------------------------------- COMMAND DESCRIPTIONS During the Commnd Phase, the Main Status Register must be polled by the CPU before each byte is written into the Data Register. The DIO (DB6) and RQM (DB7) bits in the Main Status Register must be in the '0' and '1' states respectivety, before each byte of the command may be written into the 8272. The beginning of the execution phase for any of these commands will chuse DIO and RQM to switch to '1' and '0' states respectively. READ DATA A set of nine (9) byte words are required to place the FDC into the Read Data Mode. After the Read Data commands has been issued the FDC loads the head (if it is in the unloaded state), waits the specified head setting time (defined in the Specify Command), and begins reading ID Address Mark and ID fields. When the current sector number ('R') stored in the ID Register (IDR) compares with the sector number read off the diskette, then FDC outputs data (from the data field) byte-byte to the main system via the data bus. After completion of the read operatipn from the current sector, the Sector Number is incremented by one , and the data from the next sector is read and output on the data bus. This continuous read function is called a 'Multi- Sector Read Operation'. The Read Data Command may be the receipt of a Terminal Count signal. Upon receipt of this signal, the FDC stops outputting data to the processor, but will continue to read data from the current sector, check CRC (Cyclic Redundancy Count) bytes, and then at the end of the sector terminate the Read Data Command. The amount of data wchich can be hanled with a single command to the FDC depends upon MT (multo-track), MFM (MFM/FM), and N (Number of Bytes/Sector). Table 3 below shows the Transfer Capacity. TABLE 3. TRANSFER CAPACITY ------------ò-------ò-------------ò---------------------------------ò---------- |Multi-Track| MFM/FM| Bytes/Sector| Maximum Transfer Capacity | Final | | MT | MFM | N | (Bytes/Sector)(Number of Sectors| Sector | | | | | | Read | | | | | | from | | | | | | Diskette| |-----------+-------+-------------+---------------------------------+---------| | 0 | 0 | 00 | (128)(26)=3.325 |26 at | | 0 | 1 | 01 | (256)(26)=6.656 |Side 0 or| | | | | |Side 1 | |-----------+-------+-------------+---------------------------------+---------| | 1 | 0 | 00 | (128)(52)=6.656 | 26 | | 1 | 1 | 01 | (256)(52)=13.312 | at Side1| |-----------+-------+-------------+---------------------------------+---------| | | | | |Side 1 | | 0 | 0 | 01 | (256)(15)=3.840 | or 0 | | 0 | 1 | 02 | (512)(15)=7.680 | 15 | |-----------+-------+-------------+---------------------------------+---------| | | | | | 15 | | 1 | 0 | 01 | (256)(30)=7.680 | at | | 1 | 1 | 02 | (512)(30)=15.360 |Side 1 | |-----------+-------+-------------+---------------------------------+---------| | | | | |8 at Side| | 0 | 0 | 02 | (512)(8)=4.095 |0 or 8 at| | 0 | 1 | 03 | (1024)(8)=8.192 |Side 1 | |-----------+-------+-------------+---------------------------------+---------| | 1 | 0 | 02 | (512)(16)=8.192 |8 at | | 1 | 1 | 03 | (1024)(16)=16.384 |Side 1 | ------------------------------------------------------------------------------- The 'multi-track' function (MT) allows the FDC to read data from sides of the diskette. For a particular cylinder, data will be transferred starting at Sector 1,Side 0 and completing at Sector L, Side 1 ( Sector L- last sector on the side). Note, this function pertains to only one cylinder (the same track ) on each side of the diskette. When N=0, then DTL defines the length which the FDC must treat as a sector. If DTL is smaller than the actual data length in a Sector, the data beyong DTL in the Sector, is not sent to the Data Bus. The FDC reads (internally) the complete Sector performing the CRC check, and depending upon the manner of command termination, may perform a Multi-Sector Read Operation. When N is no-zero, then DTL has no meaning and should be set to 0FFH. At the completion of the Read Data Command, the head is not unloaded until after Head Unload Time inteval (specified in the Specify Command) has elapsed. If the processor issues another command before the head unloads then the head setting time may be saved between subsequent reads. This time out is particulary valuable when a diskette is copied from one drive to another. If the FDC detects the Index Hole twice without finding the riht sector, (indicated in 'R'), then the FDC sets the ND (No Data) flag in Status Register 1 to a 1 (high), and terminates the Read Data Command. (Status Register 0 also has bits 7 and 6 set to 0 and 1 respectively). After reading the ID and Data Fields in each sector, the FDC checks the CRC bytes . If a read error is detected (incorrect CRC in ID field), the FDC sets the DE (Data Error) flag in Status Register 1 to a 1 (high), and if a CRC error occurs in the Data Field the FDC also sets the DD(Data Error in Data Field) flag in Status Register 2 to a 1 (high), and terminates the Read Data Command. (Status Register 0 also has bits 7 and 6 set to 0 and 1 respectively) If the FDC reads a Deleted Data Address Mark off the diskette, and the SK bit (bit D5) in the first Command Word) is not set (SK=0), then the FDC sets the CM (Control Mark) flag in Status Register 2 to a 1 (high), and terminates the Read Data Command,after reading all the data in the Sector. If SK=1, the FDC skips the sector with the Deleted Data Address Mark and reads the next sector. During disk data transfers between the FDC and the processor, via data bus, FDC must be serviced by the processor every 27 ms in the FM Mode, and every 13 ms in the MFM Mode, or the FDC sets the OR (Over Run) flag in Status Register 1 to a 1 (high), and terminates the Read Data Command. If the processor terminates a read (or write) operation in the FDC, then the ID information in the Result Phase is dependent upon the state of the MT bit and EOT byte. Table 4 shows the values for C,H,R, and N, when the processor terminates the Command. TABLE 4. ID INFORMATION WHEN PROCESSOR TERMINATES COMMAND -----ò-----ò--------------------------ò----------------------------------- | MT | EOT | Final Sector Transferred | ID information at Result Phase | | | | Processor |--------ò--------ò-------ò--------| | | | | C | H | R | N | |----+-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 1 to 25 at Side 0 | NC | NC | R+1 | NC | | | 0F |Sector 1 to 14 at Side 0 | | | | | | | 08 |Sector 1 to 7 at Side 0 | | | | | | |-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 26 at Side 0 | | | | | | | 0F |Sector 15 at Side 0 | C+1 | NC | R=01 | NC | | | 08 |Sector 8 at Side 0 | | | | | | 0 |-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 1 to 25 at Side 1 | | | | | | | 0F |Sector 1 to 14 at Side 1 | | | | | | | 08 |Sector 1 to 7 at Side 1 | NC | NC | R+1 | NC | | |-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 26 at Side 1 | | | | | | | 0F |Sector 15 at Side 1 | C+1 | NC | R=01 | NC | | | 08 |SEctor 8 at Side 1 | | | | | |----+-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 1 to 25 at Side 0 | NC | NC | R+1 | NC | | | 0F |Sector 1 to 14 at Side 0 | | | | | | | 08 |Sector 1 to 7 at Side 0 | | | | | | |-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 26 at Side 0 | | | | | | | 0F |Sector 15 at Side 0 | NC | LSB | R=01 | NC | | | 08 |Sector 8 at Side 0 | | | | | | 1 |-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 1 to 25 at Side 1 | | | | | | | 0F |Sector 1 to 14 at Side 1 | | | | | | | 08 |Sector 1 to 7 at Side 1 | NC | NC | R+1 | NC | | |-----+--------------------------+--------+--------+-------+--------| | | 1A |Sector 26 at Side 1 | | | | | | | 0F |Sector 15 at Side 1 | C+1 | LSB | R=01 | NC | | | 08 |SEctor 8 at Side 1 | | | | | -------------------------------------------------------------------------- Note : 1. NC (No Change); The same valua as the one at the beginning of command execution. 2. LSB (Least Significant Bit); The least significant bit of H is completed WRITE DATA A set of nine (9) bytes are required to set the FDC into the Write Data mode. After the Write Data command has been issued the FDC loads the head (if it is in the unloaded stste),waits the specified head setting time ( defined in the Specify Command), and begins reading ID Fields. When the current number ('R'), stored in the ID Register (IDR) compares with the sector number read off the diskette, then the FDC takes data from the processor byte-by-byte via the data bus, and outputs it to the FDD. After writing data into the current sector, the Sector Number stored in 'R' is incremented by one, and the next data field is written into. The FDC continues this 'Multi-Sector Write Operation' until the issuance of a Terminal Count signal. If a Terminal Count signal is sent to the FDC it continues writing into the current sector to complete the data field. If the Terminal Count signal is received while a data field is being written then the remainder of the data field is filled with 00 (zeros). The FDC reads the ID fields of each sector and checks the CRC bytes. If the FDC detects a read error (incorrect CRC) in one of the ID Fields, it sets the DE (Data Error) flag of Status Register 1 to a 1 (high), and terminates the Write Data Command. (Status Register 0 also has bits 7 and 6 set to 0 and 1 respectively.) The Write Command operates in much the same manner as Read Command. The following items are the same; refer to the Read Data Command for details; [ Transfer Capacity [ EN (end of Cylinder) Flag [ ND (No Data) Flag [ Head Unload Time Interval [ ID Information when the processor terminates command (see Table 2) [ Definition of DTL when N=0 and when N!=0 In the Write Data mode, data transfers between the processor and FDC must occur every 31 ms in the FM mode, and every 15 ms in the MFM mode. If the time interval between data transfers is longer than this then the FDC sets the OR (Over Run) flag in Status Register 1 to a 1 (high), and terminates the Write Data Command. WRITE DELETED DATA This command is the same as the Write Data Command except a Deleted Data Address Mark is written at the beginning of the Data Field instead of the normal Data Address Mark. READ DELETED DATA This command is the same as Read Data Command except that when the FDC detects a Data Address Mark at the beginnin of a Data Field ( and SK = 0 (low)), it will read all the data in the sector and set the CM flag in Status Register 2 to a 1 (high), and then terminate the command . If SK=1, then the FDC skips the sector with the Data Address Mark and reads the next sector. READ A TRACK This command is similar to READ DATA Command except that the entire data field is read continuously from each of the sectors of a track. Immediately after encountering the INDEX HOLE, the FDC starts reading all data fields on the track as continuous blocks of data. If the FDC finds an error in the ID or DATA CRC check bytes, it continues to read data from the track. The FDC compares the ID information read from each sector with the valua stored in the IDR, and sets the ND flag of Status Register 1 to 1 (high) if there is no comparison. Multi-track or skip operations are not allowed with this command. This command terminates when EOT number of sectors have been read. If the FDC does not find an ID Address Mark on the diskette after it encountera the INDEX HOLE for the second time, then it sets the MA (missing address mark) flag in Status Register 1 to 1 (high), and terminates the command. (Status Register 0 has bits 7 and 6 set to 0 and 1 respectively.) READ ID The Read ID Command is used to give the present position of the recording head. The FDC stores the values from the first ID Field it is able to read. If no proper ID Address Mark is found on the diskette, before the INDEX HOLE is encountered for the second time then the MA (Missing Address Mark) flag in Status Register 1 is set to 1 (high), and if no data is found then ND (No Data ) flag is also set in Status Register 1 to 1 (high) and the command is terminated. FORMAT TRACK The Format Command allows an entire track to be formatted. After the INDEX HOLE is detected, Data is written on the Diskette:Gaps,Address Marks,ID Fields and Data Fields, all per the IBM System 34 (Double Density) or System 3740 (Single Density) Format are recorded. The particular format which will be written is controlled by the values programmed into N (number of bytes/sector), SC (sector/cylinder), GPL (Gap Length), and D (Data Pattern) which are supplied by the processor during the Command Phase. The Data Field is filled with the Command Phase. The Data Field is filled with the Byte of data stored in D. The ID Field for each sector is supplied by the processor; that is, four data requests per sector are made by the FDC for C (Cylinder Number), H (Head Number), R(Sector Number) and N (Number of Bytes/Sector). This allows the diskette to be formatted with nonsequential sector numbers, if desired. After formatting each sector, the processor must send new values for C,H,R, and N to the 8272 foe each sector on the track. The contents of the R register is incremented by one after each sector is formatted, thus, the R register contains a value of R+1 when it is read during the Result Phase. This incrementing and formatting continues for the whole track until the FDC encounters the INDEX HOLE for the second time , where-upon it terminates the command. If a FAULT signal is recelved from the FDD at the end of a write operation, then the FDC sts the EC flag of Status Register 0 to a 1 (high), and terminates the command after setting bits 7 and 6 of Status Register 0 to 0 and 1 respectively. Also the loss of a READY signal at the beginnig of a command execution phase causes command termination. Table 5 shows the relationship between N,SC, and GPL for various sector sizes: TABLE 5. SECTOR SIZE RELATIONSHIPS -----------ò-----------------ò-----ò-----ò------ò--------ò----------------- | FORMAT | SECTOR SIZE | N | SC | GPL1| GPL2 | REMARKS | |----------+-----------------+-----+-----+------+--------+----------------| | |128 bytes/Sector | 00 | 1A | 07 | 1B | IBM Diskette 1 | | FM Mode |256 | 01 | 0F | 0E | 2A | IBM Diskette 2 | | |512 | 02 | 08 | 1B | 3A | | |----------+-----------------+-----+-----+------+--------+----------------| | |1024 bytes/Sector| 03 | 04 | __ | __ | | | FM Mode |2048 | 04 | 02 | __ | __ | | | |4096 | 05 | 01 | __ | __ | | |----------+-----------------+-----+-----+------+--------+----------------| | |256 | 01 | 1A | 0E | 36H |IBM Diskette 2D | | |512 | 02 | 0F | 1B | 54H | | | MFM Mode |1024 | 03 | 08 | 36H | 74H |IBM Diskette 2D | | |2048 | 04 | 04 | __ | __ | | | |4096 | 05 | 02 | __ | __ | | | |8192 | 06 | 01 | __ | __ | | --------------------------------------------------------------------------- Note : 1. GPL1 Suggested values of GPL in Read or Write Commands to avoid splice point between data and ID field of contiguous sections. 2 GPL2, Suggested values of GPL in format command. SCAN COMMANDS The SCAN Commands allow data which is being read from the diskette to be compared against data which is being supplied from the main system (Processor in NON-DMA mode, and DMA Controller in DMA mode). The FDC compares the data on a byte - by - byte basis, and looks for a sector of data which meets the conditions of D_FDD = D_Processor,D_FDD<=D_Processor,or D_FDD>=D_Processor. Ones complement arithmetic is used for comparison (FF=larget number, 00=smallest number). After a whole sector of data is compared, if the conditions are not met, the sector number is incremented (R+STP -> R) and the scan operation is continued.The scan operation continues one of the following conditions occur: the conditions for scan are met (equal,low,or high),the last sector on the track is reached (EOT), or the terminal count signal is received. If the conditions for scan are met the FDC sets the SH (Scan Hit) flag of Status Register 2 to 1 (high), and terminates the Scan Command. If the conditions for scan are not met between the starting sector (as specified by R) and the last sector on the cylinder (EOT), then the FDC sets the SN (Scan Not Satisfied) flag of Status Register 2 to a 1 (high), and terminates the Scan Command. The receipt of a TERMINAL COUNT signal from the Processor or DMA Controller during the scan operation will cause the FDC to complete the comparison of the particular byte which is in process, and then to terminate the command. Table 6 shows the status of bits SH and SN under various conditions of SCAN. TABLE 6. SCAN STATUS CODES ------------------ò--------------------------ò------------------------ | | STATUS REGISTER 2 | | |-----------------+-----------ò--------------| | | COMMAND |BIT 2 = SN | BIT 3 = SH | COMMENTS | |-----------------+-----------+--------------+-----------------------| | Scan Equal | 0 | 1 |D_FDD = D_Processor | | | 1 | 0 |D_FDD != D_Processor | |-----------------+-----------+--------------+-----------------------| | | 0 | 1 |D_FDD = D_Processor | |Scan Low or Equal| 0 | 0 |D_FDD < D_Processor | | | 1 | 0 |D_FDD !< D_Processor | |-----------------+-----------+--------------+-----------------------| | | 0 | 1 |D_FDD = D_Processor | |Scan High or Equ.| 0 | 0 |D_FDD > D_Processor | | | 1 | 0 |D_FDD !> D_Processor | ---------------------------------------------------------------------- If the FDC encounters a Deleted Data Address Mark on one of the sectors (and SK = 0), then it regards the sector as the last sector on the cylinder, sets CM ( Control Mark) flag of Status Register 2 to a 1 (high) and terminates the command. If SK = 1, the FDC skips the sector with the Deleted Address Mark, and reads the next sector. In the second case (SK = 1), the FDC sets the CM (Contol Mark) flag of Status Register 2 to a 1 (high) in order to show that a Deleted Sector had been encountered. When either the STP (contiguous sectors STP = 01, or alternate sectors STP=02 sectors are read) or the MT(Multi-Track) are programmed, it is necessary to remember that the last sector on the track must be read. For example, if STP = 02, MT = 0 ,the sectors are numbered sequentially 1 through 26, and we start the Scan Command at sector 21; the following will happen. Sectors 21,23, and 25 will be read, then the next sector (26) will be skipped and the Index Hole will be encountered befor the EOT value of 26 can be read. This will result in an abnormal termination of the command.If the EOT had been set at 25 or the scanning started at sector 20, then the Scan Command would be completed in a normal manner. During the Scan Command data is supplied by either the processor or DMA Controller for comparison against the data read from the diskette. In order to avoid having the OR (Over Run) flag set in Status Register 1, it is necessary to have the data available in less than 27 ms (FM Mode) or 13 ms (MFM Mode). If Overrun occurs the FDC terminates the command. SEEK The read/write head within the FDD is moved from cylinder under control of the Seek Command. The FDC compares the PCN (Present Cylinder Number) which is the current head position with the NCN (New Cylinder Number), and performs the following operation if there is difference: PCN < NCN: Direction signal to FDD set to a 1 (high), and Step Pulses are issued. (Step in.) PCN > NCN: Direction signal to FDD set to a 0 (low), and Step Pulses are issued. (Step Out.) The rate which Step Pulses are issued is controlled by SRT (Stepping Rate Time) in the SPECIFY Command. After each Step Pulse is issued NCN is compared against PCN, and when NCN = PCN, then the SE ( Seek End) flag is set in Status Register 0 to a 1 (high), and the command is terminated. During the Command Phase of the Seek operation the FDC in the FDC BUSY state, but during the Execution Phase it is in the NON BUSY state. While the FDC is in the NON BUSY state, another Seek Command may be issued, and in this manner parallel seek operation may be done on up to 4 Drives at once. If an FDD is in a NOT READY state at the beginnig of the command execution phase or during the seek operation, then the NR (NOT READY) flag is set in Status Register 0 to 1 (high), and the command is terminated. RECALIBRATE This command causes the read/write head within the FDD to retract to the Track 0 position. The FDC clears the contents of the PCN counter, and checks the status of the Track 0 signal from the FDD. As long as the Track 0 signal is low, the Direction signal remains 1 (high) and Step Pulses are issued. When the Track 0 signal goes high, the SE (SEEK END) flag in Status Register 0 is set to 1 (high) and the command is terminated. If the Track 0 signal is still low after 77 Stop Pulses have been issued, the FDC sets the SE (SEEK END) and EC (EQUIPMENT CHECK) flags of Status Register 0 to both 1s (highs), and terminates the command. The abillity to overlap RECALIBRATE Commands to Multiple FDDs, and the loss of the READY signal, as described in the SEEK Command, also applies to the RECALIBRATE Command. SENSE INTERRUPT STATUS An interrupt signal is generated by the FDC for one of the following reasons: 1. Upon entering the Result Phase of: a. Read Data Command b. Read a Track Command c. Read ID Command d. Read Deleted Data Command e. Write Data Command f. Format a Cylinder Command g. Write Deleted Data Command h. Scan Commands 2. Ready Line of FDD changes state 3. End of Seek or Recalibrate Command 4. During Execution Phase in the NON-DMA Mode Interrupts causes by reasons 1 and 4 above occur during normal command operations and are easilly discernible by the processor. However, interrupts causes by reasons 2 and 3 above may be uniquely identified with the aid of the Sense Interrupt Status Command. This command when issued resets the interrupt signal and via bits 5,6, and 7 of Status Register 0 identifies the cause of the interrupt. TABLE 7. SEEK. INTERRUPT CODES --------------ò-------------------ò------------------------- | SEEK END | INTERRUPT CODE | CAUSE | | |---------ò---------| | | BIT 5 | BIT 6 | BIT 7 | | |-------------+---------+---------+------------------------| | 0 | 1 | 1 | Ready Line changed | | | | | state, either polarity | |-------------+---------+---------+------------------------| | | | | Normal Termination | | 1 | 0 | 0 | of Seek or Recalibrate | | | | | Command | |-------------+---------+---------+------------------------| | | | | Abnormal Termination of| | | | | Seek or Recalibrate | | 1 | 1 | 0 | Command | ------------------------------------------------------------ Neither the Seek or Recalibrate Command have a Result Phase. Therefore, it is mandatory to use the Sense Interrupt Status Command after these commands to effectively terminate the and to provide verification of the head position (PCN). SPECIFY The Specify Command sets the initial values for each of the three internal timers. The HUT (Head Unload-Time) defines from the end of the Execution Phase of one of the Read/Write Commands to the head unload state. This is programmable from 16 to 240 ms in increments of 16 ms (01 = 16 ms,02 = 32 ms.. ...OF = 240 ms ). The SRT ( Step Rate Time) defines the time interval between adjacent step pulses. This timer is programmable from 1 to 16 ms in increments of 1 ms (F = 1 ms, E = 2ms, etc.). The HLT (Head Load Time) defines the time between when the Head Load signal goes high and when the Read/Write operation starts. This timer is programmable from 2 to 254 ms in increments of 2 ms (01 = 2 ms, 02 = 4 ms, 03 = 6 ms ...FE = 254 ms). The time intervals mentioned above are a direct function of the clock (CLK on pin 19). Times indicated above are for an 8 MHz clock, if the clock was reduced to 4 MHz (mini-floppy application) then all time intervals are increased by a factor of 2. The choice of DMA or NON-DMA operation is made by the ND (NON-DMA) bit. When this bit is high (ND = 1) the NON=DMA mode is selected, and when ND = 0 the DMA mode is selected. SENSE DRIVE STATUS This command may be used by the processor whenever it wishes to obtain the status of the FDDs. Status Register 3 contains the Drive Status Information. INVALID If an invalid command is sent to the FDC ( a command not defined above), then the FDC will terminate the command. No interrupt is generated by the 8272 during this condition. Bit 6 and bit 7 (DIO and RQM) in the Main Status Register are above both high ('1') indicating to the processor that the 8272 is in the Result Phase and the contents of Status Register 0 (ST0) must be read. When the processor reads Status Register 0 it will find a 80h indicating an invalid command was received. A Sense Interrupt Status Command must be sent after a Seek or Recalibrate interrupt, otherwise the FDC will consider the next command to be an invalid Command. In some applications the user may wish to use this command as a No-Op command, to place the FDC in a standby or no operation state. TABLE 8. STATUS REGISTERS ------------------------------ò----------------------------------------- | BIT | | |---ò------------ò------------| DESCRIPTION | |NO | NAME | SYMBOL | | |----------------------------------------------------------------------| | STATUS REGISTER 0 | |---ò------------ò------------ò----------------------------------------| |D7 |Interrupt | IC | D7 = 0 and D6 = 0 | | |Code | | Normal Termination of Command, | | | | | (NT) Command was completed and | | | | | properly executind. | | | | |----------------------------------------| | | | |D7=0 and D6 = 1 | |D6 | | |Abnormal Tremination of Command, | | | | |(AT). Execution of Command | | | | |was started, but was not | | | | |successfully completed. | | | | |----------------------------------------| | | | | D7 = 1 and D6 = 0 | | | | | Invalid Command issued. (IC). | | | | | Command which was issued was | | | | | never started. | | | | |----------------------------------------| | | | | D7 = 1 and D6 = 1 | | | | | Abnormal Termination because | | | | | during command execution the | | | | | ready signal from FDD changed | | | | | state. | |---+------------+------------+----------------------------------------| | | | | When the FDC completes the | |D5 | Seek End | SE | SEEK Command, this flag is set to 1 | | | | | (high). | |---+------------+------------+----------------------------------------| |D4 | Equipment | EC | If fault Signal is received from the | | | Check | | FDD, or if the Track 0 Signal fails to | | | | | occur after 77 Step Pulses (Recalibrate| | | | | Command) then this flag is set. | |---+------------+------------+----------------------------------------| |D3 | Not Ready | NR | When the FDD is in the not-ready | | | | | state and a read or write command is | | | | | issued. This flag is set.If a read or | | | | | write command is issued to Side 1 | | | | | of single sided drive,then this flag | | | | | is set. | |---+------------+------------+----------------------------------------| |D2 | Head | | This flag is used to indicate the | | | Address | HD | state of the head at interrupt | |---+------------+------------+----------------------------------------| | | Unit | | | |D1 | Select 1 | US1 | These flags are used to indicate a | |---+------------+------------| Drive Unit Number at interrupt | |D0 | U.Select 0 | US0 | | ------------------------------------------------------------------------ ------------------------------ò----------------------------------------- | BIT | | |---ò------------ò------------| DESCRIPTION | |NO | NAME | SYMBOL | | |----------------------------------------------------------------------| | STATUS REGISTER 1 | |---ò------------ò------------ò----------------------------------------| |D7 |End of | EN | When the FDC tries to access a | | |Cylinder | | Sector beyond the final Sector of a | | | | | Cylinder, this flag is set. | |---+------------+------------+----------------------------------------| |D6 | | |Not used. This bit is always 0 (low). | |---+------------+------------+----------------------------------------| |D5 |Data Error | DE |When the FDC detects a CRC error | | | | |in either the ID field or the data field| | | | |this flag is set. | |---+------------+------------+----------------------------------------| |D4 |Over Run | OR |If the FDC is not serviced by the | | | | |main-systems during data transfers, | | | | |within a certain time interval, this | | | | |flag is set. | |---+------------+------------+----------------------------------------| |D3 | | |Not used. This bit is always 0 (low). | |---+------------+------------+----------------------------------------| | | | | During execution of READ DATA, | |D2 | No Date | ND | WRITE DELETED DATA or SCAN | | | | | Command, if the FDC cannot find the | | | | | Sector specified in the IDR Register, | | | | | this flag is set. | | | | |----------------------------------------| | | | | During execution the READ ID Command, | | | | | if the FDC cannot read the ID field | | | | | without an error, then this flag is | | | | | set. | | | | |----------------------------------------| | | | | During the execution of the READ A | | | | | Cylinder Command, if the starting | | | | | sector cannot be found, then this | | | | | flag is set. | |---+------------+------------+----------------------------------------| | | Not | | During execution of WRITE DATA, | |D1 | Writable | NW | WRITE DELETED DATA or Format A | | | | | Cylinder Command, if the FDC detects | | | | | a write protect signal from the FDD, | | | | | then this flag is set. | |---+------------+------------+----------------------------------------| |D0 | Missing | MA | If the FDC cannot detect the ID | | | Address | | Address Mark after encountering the | | | Mark | | index hole twice, then this flag is set| | | | |----------------------------------------| | | | | If the FDC cannot detect the Data | | | | | Address Mark or Deleted Data | | | | | Address Mark,this flag is set. Also at | | | | | the same time, the MD (Missing Address | | | | | Mark in Data Field) of Status Register | | | | | 2 is set. | ------------------------------------------------------------------------ ------------------------------ò----------------------------------------- | BIT | | |---ò------------ò------------| DESCRIPTION | |NO | NAME | SYMBOL | | |----------------------------------------------------------------------| | STATUS REGISTER 2 | |---ò------------ò------------ò----------------------------------------| |D7 | | | Not used. This bit is always 0 (low). | |---+------------+------------+----------------------------------------| |D6 | Control | CM | During execution the READ DATA or | | | Mark | | SCAN Command, if the FDC encounters | | | | | a Sector which contains a Deleted Data | | | | | Address Mark, this flag is set. | |---+------------+------------+----------------------------------------| |D5 | Data Error | DD |If the FDC detects a CRC error in the | | | in Data | |data field then this flag is set. | |---+------------+------------+----------------------------------------| |D4 | Wrong | WC |This bit is related with the ND bit, | | | Cylinder | |and when the contents of C on the | | | | |medium is different from that stored | | | | |in the IDR, this flag is set. | |---+------------+------------+----------------------------------------| |D3 | Scan Equel | SH | During execution, the SCAN Command, | | | Hit | | if the condition of 'equel' is | | | | | satisfied, this flag is set. | |---+------------+------------+----------------------------------------| | | Scan Not | SN | During execution the SCAN Command, if | |D2 | Satisfied | | the FDC cannot find a Sector on the | | | | | cylinder which meets the condition, | | | | | then this flag is set. | |---+------------+------------+----------------------------------------| |D1 | Bad | BC | This bit is related with the ND bit, | | | Cylinder | | and when the content of C on the | | | | | medium is different from that stored | | | | | in the IDR and the content of C is | | | | | FF, then this flag is set. | |---+------------+------------+----------------------------------------| |D0 | Missing | | When data is read from the medium, | | | Address | MD | if the FDC cannot find a Data Address | | | Mark in | | Mark, then this flag is set. | | | Data Field | | | ------------------------------------------------------------------------ ------------------------------ò----------------------------------------- | BIT | | |---ò------------ò------------| DESCRIPTION | |NO | NAME | SYMBOL | | |----------------------------------------------------------------------| | STATUS REGISTER 3 | |---ò------------ò------------ò----------------------------------------| |D7 | Fault | FT | This bit is used to indicate the status| | | | | of the Fault signal from the FDD | |---+------------+------------+----------------------------------------| |D6 | Write | | This bit used to indicate the status | | | Protected | WP | of the Write Protected signal from the | | | | | FDD. | |---+------------+------------+----------------------------------------| |D5 | Ready | RDY | This bit used to indicate the status | | | | | of the Ready signal from the FDD | |---+------------+------------+----------------------------------------| |D4 | Track 0 | T0 | This bit used to indicate the status | | | | | of the Track 0 signal from the FDD | |---+------------+------------+----------------------------------------| |D3 | Two Side | TS | This bit used to indicate the status | | | | | of the Two Side signal from the FDD. | |---+------------+------------+----------------------------------------| |D2 | Head | HD | This bit used to indicate the status | | | Address | | of Side Select signal to the FDD. | |---+------------+------------+----------------------------------------| |D1 | Unit | US1 | This bit used to indicate the status of| | | Select 1 | | the Unit Select 1 signal to the FDD. | |---+------------+------------+----------------------------------------| |D0 | Unit | US0 | This bit used to indicate the status of| | | Select 0 | | the Unit Select 0 signal to the FDD. | ------------------------------------------------------------------------