home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / fd.doc < prev    next >
Text File  |  1990-01-05  |  16KB  |  379 lines

  1.  
  2.                          Chapter   8
  3.        
  4.                   Diskette Service (INT 13h)
  5.                   --------------------------
  6.  
  7.      1.      Introduction
  8.              
  9.              1.1     System Configuration for diskette System
  10.       
  11.              1.2     Diskette Interface Standard
  12.       
  13.              1.3     Coding
  14.       
  15.                      A.      Frequency Modulation(FM)
  16.                      B.      Modified Frequency MOdulation(MFM)
  17.       
  18.              1.4     Data Format
  19.            
  20.      2.      Floppy Disk Controller(FDC) - 8272A
  21.       
  22.              2.1     8272A Internal Block Diagram
  23.       
  24.              2.2     Diskette/Drive Specification
  25.       
  26.              2.3     I/O Port Definition
  27.              
  28.              2.4     Timing Consideration
  29.       
  30.                      A.      Motor Start Time
  31.                      B.      Motor Stop Time
  32.                      C.      Head Settling Time
  33.                      D.      Step Rate Time and Data Transfer Rate
  34.            
  35.      3.      Programming Sequence in Diskette Service Program
  36.            
  37.      4.      Protection
  38.            
  39.      5.      Q & A
  40.            
  41.       
  42.  
  43.      1.1     System Configuration for Diskette System
  44.    
  45.    
  46.                                          ┌────────┐
  47.                                          │ 8253   │
  48.                        ┌────────┐    ┌───┤ Timer  │            ┌────────┐
  49.         ┌──────────────┤        │<───┘   └────────┘         ┌─>│ FDD 0  │
  50.         │ ┌────────────┤ 8259A  │<───────────┐           ┌--│->│        │
  51.         │ │       ┌───>│        │            │           |  │  └────────┘
  52.         │ │       │    └────────┘            │           |  │  ┌────────┐
  53.         │ │ ┌─────┴──┐                   ┌───┴────┐      |--│->│ FDD 1  │
  54.         │ │ │  CPU   ├─────────────┬────>│ 8272A  │<─────|──┼─>│        │
  55.         │ │ │ INT 13H│<------------│-----│        │      |  │  └────────┘
  56.         │ │ │ -------│   ┌──────────────>│ FDC    │<-----|  │  ┌────────┐
  57.         │ └>│ INT 0EH│   │         │     └────────┘      |  ├─>│ FDD 2  │
  58.         │   │ -------│   │     ┌───┴────┐    ^           |--│->│        │
  59.         └─ >│ INT 08H├───┘     │ 8237   │    |           |  │  └────────┘
  60.             └────────┘         └───┬────┘    |           |  │  ┌────────┐
  61.                                ┌───┴────┐    |           |  └─>│ FDD 3  │
  62.                                │ DRAM   │<---┘           └---->│        │
  63.                                └────────┘                      └────────┘
  64.      
  65.              
  66.               Command/Control  ────────
  67.       
  68.               Data/Status      --------
  69.       
  70.       
  71.        Fig :    System Configuration for Diskette System
  72.       
  73.      
  74.      1.2     Diskette Interface Standard
  75.       
  76.              -  ST-506/412
  77.              -  Please reference Fixed Disk Trainning Course
  78.       
  79.      1.3     Coding
  80.       
  81.              Please reference Fixed Disk Trainning Course
  82.       
  83.  
  84.      1.4     Data Format
  85.   
  86.   
  87.         ┌─┐                                                            ┌─┐
  88.         │ │                                                            │ │
  89.  Index ─┘ └────────────────────────────────────────────────────────────┘ └─
  90.   
  91.   
  92.         ┌──────────┬───────┬──────────┬──────────────┬──────┬──────────┐
  93.         │Pre-Index │Index  │Post-index│Sector│ . . . │ Last │  Final   │
  94.         │          │Address│          │      │ . . . │      │          │  
  95.         │Gap(Gap 5)│ Mark  │Gap(Gap 1)│  1   │       │Sector│Gap(Gap 4)│
  96.         └──────────┴───────┴──────────┴──────┴───────┴──────┴──────────┘
  97.   
  98.   
  99.         │          │       │          │              │      │
  100.    ┌────┘          │  ┌────┘          │┌─────────────┘      └─────────────┐
  101.    ┌───────┬───────┐  ┌───────┬───────┐┌──────┬──────────┬──────┬─────────┐
  102.    │Hex FF │HEX 00 │  │Hex FF │HEX 00 ││Sector│ Post ID  │Sector│Post Data│
  103.    │       │(Sync) │  │       │(Sync) ││  ID  │Gap(Gap 2)│ Data │Gap(Gap 3│
  104.    └───────┴───────┘  └───────┴───────┘└──────┴──────────┴──────┴─────────┘
  105.   
  106.                                                        
  107.                                        │      │          │       │
  108.    ┌───────────────────────────────────┘      └─────────┐│       │
  109.    ┌───────┬───────┬───────┬───────┬──────┬──────┬──────┐│       │
  110.    │  ID   │ Track │ Head  │Sector │Sector│ CRC  │ CRC  ││       │
  111.    │Address│       │       │       │      │      │      ││       │
  112.    │ Mark  │Address│Address│Address│Length│Byte 1│Byte 2││       │
  113.    └───────┴───────┴───────┴───────┴──────┴──────┴──────┘│       │
  114.                                                          │       │
  115.                                     ┌────────────────────┘       └────────┐              
  116.                                     ┌───────┬───────────────┬──────┬──────┐              
  117.                                     │ Data  │ 128 * (2 ** N)│CRC   │ CRC  │              
  118.                                     │Address│               │      │      │              
  119.                                     │ Mark  │User Data Bytes│Byte 1│Byte 2│                                                     
  120.                                     └───────┴───────────────┴──────┴──────┘                                                     
  121.   
  122.       
  123.  
  124.      2.1     Folppy Disk Controller(FDC) - 8272A
  125.       
  126.    
  127.                        
  128.               ┌────────┐   │  │   ┌───────────┐
  129.               │Data Bus│   │  │<─>│ Registers │
  130.   DB0-7  <───>│ Buffer │<─>│  │   └───────────┘
  131.               │        │   │  │   ┌───────────┐
  132.               └────────┘   │  │   │           ├< WR CLOCK
  133.                            │  │   │           ├> WR DATA
  134.                            │  │   │  Serial   ├> WR ENABLE
  135.   Termal Count >──┐        │  │<─>│ Interface ├> PRE SHIFT 0
  136.                   │        │  │   │Controller ├> PRE SHIFT 1
  137.               ┌───┴────┐   │  │   │           ├< READ DATA
  138.   DRQ    <────┤        │   │  │   │           ├< DATA WINDOW
  139.   -DACK  >────┤  Read  │   │  │   │           ├> VCO SYNC
  140.   INT    <────┤ Write  │   │  │   └───────────┘
  141.   -RD    >────┤  DMA   │<─>│  │   ┌──────────┐   ┌──────┐
  142.   -WR    >────┤Controll│   │  │   │          │   │      ├< READY
  143.   A0     >────┤ Logic  │   │  │   │          │<─>│Input ├< WRITE PROTECT
  144.   RESET  >────┤        │   │  │   │          │   │ Port ├< INDEX
  145.               └───┬────┘   │  │   │          │   │      ├< FAULT/TRACK 0
  146.   -CS    >────────┘        │  │   │          │   └──────┘
  147.                            │  │   │  Drive   │   ┌──────┐
  148.                            │  │<─>│ Interface│   │      ├> DRIVE SELECT 0
  149.                            │  │   │Controller│   │      ├> DRIVE SELECT 1
  150.   CLK ─>                   │  │   │          │   │Output├> MFM MODE
  151.   VCC ─>                   │  │   │          │<─>│      ├> -RW/SEEK
  152.   GND ─>                   │  │   │          │   │ Port ├> HEAD LOAD
  153.                            │  │   │          │   │      ├> LOW CURRENT
  154.                            │  │   │          │   │         │   /DIRECTION
  155.                            │  │   │          │   │      ├> FAULT RESET/STEP
  156.                             │     └──────────┘   │      ├> HEAD SELECT
  157.                     8272A Internal Bus           └──────┘
  158.   
  159.   
  160.   
  161.     Fig :  8272A Internal Block Diagram
  162.  
  163.  
  164.  
  165.      2.2     Diskette/Drive Specification
  166.              
  167.              
  168.              Diskette        Drive           Sector/Track    Data rate
  169.       
  170.       
  171.              360K            360K(5 1/4")    8 or 9          250 KBS
  172.       
  173.              360K            1.2M(5 1/4")    9               300 KBS
  174.       
  175.              1.2M            1.2M(5 1/4")    15              500 KBS
  176.       
  177.              720K            720K(3 1/2")    9               250 KBS
  178.       
  179.              720K            1.44M(3 1/2")   9               250 KBS
  180.       
  181.              1.44M           1.44M(3 1/2")   18              500 KBS
  182.       
  183.       
  184.       
  185.              Diskette capacity  =  sector length * sectors/track *
  186.       
  187.                                    tracks/side * no. of side
  188.       
  189.              For example :
  190.       
  191.                      1.44M   = 512 bytes * 18 sectors/track * 80 tracks * 2
  192.       
  193.                      1.2M    = 512 bytes * 15 sectors/track * 80 tracks * 2
  194.       
  195.                      360K    = 512 bytes * 9  sectors/track * 40 tracks * 2
  196.       
  197.        
  198.      2.3     I/O Port Definition
  199.       
  200.  
  201.              I/O Port Addr   Read                   Write
  202.       
  203.              3F2H                                   Digital Output Register
  204.              3F4H            Main Status Register
  205.              3F5H            Data Register          Data Register  
  206.              3F7H            Digital Input Register Data Rate Register
  207.  
  208.              A.  Digital Output Register
  209.  
  210.                  This register contains the software control bit to select
  211.                drive, turn motor on, enable interrupt request, and software 
  212.                reset. The bits are defined as follows:
  213.              
  214.                  bit 7-6         Reserved
  215.                  bit 5           Drive B motor enable
  216.                  bit 4           Drive A motor enable
  217.                  bit 3           Enable interrupt request and DMA
  218.                  bit 2           Reset()
  219.                  bit 1           Reserved
  220.                  bit 0           Drive select(0 - drive A, 1 - drive B)
  221.  
  222.              B.  Main Status Register
  223.       
  224.                  This register contains the status information of the FDC,
  225.                and may be accessed at any time. The bits are defined as 
  226.                follows:
  227.       
  228.                  bit 7           Request to master
  229.                  bit 6           data transfer direction(1-from FDC to CPU)
  230.                  bit 5           non-DMA mode select
  231.                  bit 4           FDC Busy
  232.                  bit 3           FDD 3 Busy
  233.                  bit 2           FDD 2 Busy
  234.                  bit 1           FDD 1 Busy
  235.                  bit 0           FDD 0 Busy
  236.       
  237.              C.  Data Register
  238.       
  239.                  This register contains the data to be read from or written
  240.                to FDC. Transfers through this register are 8 bits wide.
  241.  
  242.  
  243.              D.  Digital Input Register
  244.       
  245.                  This register comtains the status information of the FDD.
  246.                The bits are defined as follows:
  247.       
  248.                  bit 7           Diskette change(1 - active)
  249.                  bit 6-0         Reserved for WDD control
  250.       
  251.              E.  Data Rate Register
  252.       
  253.                  This register contains the data rate select bit to select
  254.                data transfer rate during read or write operation.
  255.       
  256.                  bit 7-2         Reserved
  257.                  bit 1-0         Data Rate Select
  258.                                   (00 - 500 KBS, 01 - 300 KBS, 10 - 250KBS)
  259.  
  260.      2.4     Timing Consiteration
  261.  
  262.                A.     Motor Start Time
  263.  
  264.          The FDD will speed up spindle to 360 rpm when turn
  265.               motor on. The time from motor on to 360 rpm is called motor
  266.               start time. Generally, the motor start time is 550 ms. Issue
  267.               read command befor motor stable, it may get correct data if
  268.               data distortion within receivable range. Issue read command
  269.               before motor stable, it should write distorted data into 
  270.               diskette and make next read operation failed.
  271.           
  272.          B.     Motor Stop Time
  273.  
  274.          The FDD will spped down spindle until stop when turn
  275.               motor off. The Time form motor off to stop is called motor
  276.               stop time. Because it must be delay 550 ms after turn motor 
  277.               on each time, so turn motor off immediately after each disk
  278.               operation will degrade system performance. In AT machine, it
  279.               will turn motor off if no any other disk operation during 
  280.               37(25H) timer ticks.
  281.  
  282.          C.  Head Settling Time
  283.  
  284.          The time between seek completed and read/write head 
  285.               settle down is called head settling time. Generally, the head
  286.               settling time is 15 ms. 
  287.  
  288.  
  289.          D.     Step Rate Time(SRT) and Data Transfer Rate
  290.  
  291.          The FDC may issue serval step pulse to FDD after the
  292.               FDC have received seek or recalibrate command. The time 
  293.               interval between adjacent step pulse is called step rate
  294.               time. You can use SPECIFY command to program SRT from 1 to
  295.               16 ms. The SRT should be programmed 1 ms longer than the 
  296.               minimun time required by the FDD. Generally, we set 6 ms for
  297.               SRT in AT machine.
  298.  
  299.          All diskette timing is depentent on external clock. 
  300.               So it will change its timing when external clock changed. 
  301.               In AT machine, the external clock changed depend on data 
  302.               transfer rate :
  303.  
  304.          data transfer rate    external clock       SRT
  305.  
  306.            500 KBS      8 MHZ           SRT * 1
  307.            300 KBS      4 MHZ           SRT * 2
  308.            250 KBS      4 MHZ           SRT * 2
  309.  
  310.          So depend on different media/drive configuration, the
  311.               diskette service routine must program different SRT (3 or 
  312.               6 ms) before issue and read/write/verify/format command. But
  313.               FDD will receive a fixed SRT, 6 ms.
  314.  
  315.       
  316.      3.      Programming Sequence in Diskette Service Program
  317.  
  318.    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  319.    ;Module_Name: read_sector
  320.    ;Calling Sequence:
  321.    ;        Input : AH = 2
  322.    ;                AL = no. of sector(non-value check)
  323.    ;                DH = head no.(non_value check)
  324.    ;                DL = drive no.(value check)
  325.    ;                CH = cylinder no. - low 8 bit(non-value check)
  326.    ;                CL = sector no. - bit 0-5(non-value check)
  327.    ;                                  bit 6-7 high 2 bits for cylinder No
  328.    ;                ES:BX = transfer address(boundary check)
  329.    ;
  330.    ;        Output: AH(in stack) = status of operation
  331.    ;                AL(in stack) = no. of transfer (unit : sector)
  332.    ;Functional Description: read sector
  333.    ;
  334.    ;PDL :   call diskette_valid
  335.    ;        IF CY = 1(drive invalid) THEN
  336.    ;           jump to disket_end
  337.    ;        ELSE
  338.    ;           call setup
  339.    ;           IF CY = 0 THEN
  340.    ;              AH = 0E6H(read data command byte)
  341.    ;              call rwvf
  342.    ;           ENDIF
  343.    ;        ENDIF
  344.    ;        set motor byte = motor off time(in diskette parameter table)
  345.    ;        jump to disket_end
  346.    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  347.    read_sector:
  348.             call      disket_valid         ; check diskette drive number
  349.             jnc       c60                  ; goto c60 if drive valid
  350.             jmp       disket_end
  351.    c60:
  352.             call      setup                ; setup motor,DMA,head location
  353.             jc        c80                  ; goto c80 if setup failed
  354.    c70:
  355.             mov       byte ptr [bp-1], 2   ;
  356.             call      dsket_dma_ctrl       ; programming DMA
  357.             jc        c80                  ; goto c80 if DMA boundary error
  358.             mov       ah, 0e6h             ; AH=read data command byte=66h
  359.             call      rwvf                 ; read sector
  360.             jnc       c80                  ; goto c80 if no error
  361.             call      try_next             ; check if need to read again
  362.             jc        c70                  ; to read sector if carry
  363.    c80:
  364.             jmp       off_motor            ; goto off_motor
  365.  
  366.  
  367.      4.      Protection
  368.       
  369.       
  370.              1.      change sector length
  371.       
  372.              2.      change Track address
  373.       
  374.              3.      build extra track
  375.       
  376.       
  377.      5.      Q & A
  378.       
  379.