home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9302 / pastrick / int13.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-02-22  |  5.3 KB  |  231 lines

  1. (* ****************************************************** *)
  2. (*                       INT13.PAS                        *)
  3. (*                 Interrupt 13h Routinen                 *)
  4. (*            (c) 1993 Andres Cvitkovich & DMV            *)
  5. (* ****************************************************** *)
  6. UNIT Int13;
  7.  
  8. INTERFACE
  9.  
  10. VAR
  11.   Int13Err     : BOOLEAN;
  12.                    { TRUE, wenn ein Fehler aufgetreten ist }
  13.   Int13ErrCode : BYTE;
  14.             { Fehlercode (disk status byte), 0=kein Fehler }
  15.  
  16.   PROCEDURE RecalibrateDrive(Drv : BYTE);
  17.   FUNCTION  GetState(Drv : BYTE) : BYTE;
  18.   FUNCTION  ReadSectors(Drv, Track, Head, Sector,
  19.                         Sectors : BYTE;
  20.                         Buf : Pointer) : BYTE;
  21.   FUNCTION  WriteSectors(Drv, Track, Head, Sector,
  22.                          Sectors : BYTE;
  23.                          Buf : Pointer) : BYTE;
  24.   FUNCTION  VerifySectors(Drv, Track, Head, Sector,
  25.                           Sectors : BYTE;
  26.                           Buf : Pointer) : BYTE;
  27.   PROCEDURE FormatSectors(Drv, Track, Head, Sector,
  28.                           Sectors : BYTE;
  29.                           AdrField : Pointer);
  30.   PROCEDURE GetDriveParams(Drv : BYTE;
  31.                            VAR Drvtype, tracks,
  32.                                spt, heads : BYTE;
  33.                            VAR pparam : Pointer);
  34.   FUNCTION  DiskChanged(Drv: BYTE): Boolean;  { erst ab AT }
  35.   PROCEDURE SetDASD(Drv, DASD : BYTE);        { erst ab AT }
  36.   PROCEDURE SetMediaType(Drv, Tracks, Sectors : BYTE);
  37.   PROCEDURE ParkHeads(Drv : BYTE);
  38.  
  39. IMPLEMENTATION
  40.  
  41.   PROCEDURE RecalibrateDrive(Drv : BYTE); ASSEMBLER;
  42.   ASM
  43.     MOV  Int13Err, 0
  44.     XOR  AH, AH
  45.     MOV  DL, Drv
  46.     INT  13h
  47.     JNC  @@1
  48.     INC  Int13Err
  49.   @@1:
  50.     MOV  Int13ErrCode, AH
  51.   END;
  52.  
  53.   FUNCTION GetState(Drv : BYTE) : BYTE; ASSEMBLER;
  54.   ASM
  55.     MOV  Int13Err, 0
  56.     MOV  AH, 1
  57.     MOV  DL, Drv
  58.     INT  13h
  59.     JNC  @@1
  60.     INC  Int13Err
  61.   @@1:
  62.     MOV  Int13ErrCode, AH
  63.     MOV  AL, AH
  64.   END;
  65.  
  66.   FUNCTION ReadSectors(Drv, Track, Head, Sector,
  67.                        Sectors : BYTE;
  68.                        Buf : Pointer) : BYTE; ASSEMBLER;
  69.   ASM
  70.     MOV  Int13Err, 0
  71.     MOV  AH, 2
  72.     MOV  AL, Sectors
  73.     MOV  CH, Track
  74.     MOV  CL, Sector
  75.     MOV  DH, Head
  76.     MOV  DL, Drv
  77.     LES  BX, Buf
  78.     INT  13h
  79.     JNC  @@1
  80.     INC  Int13Err
  81.   @@1:
  82.     MOV  Int13ErrCode, AH
  83.   END;
  84.  
  85.   FUNCTION WriteSectors(Drv, Track, Head, Sector,
  86.                         Sectors : BYTE;
  87.                         Buf : Pointer): BYTE; ASSEMBLER;
  88.   ASM
  89.     MOV  Int13Err, 0
  90.     MOV  AH, 3
  91.     MOV  AL, Sectors
  92.     MOV  CH, Track
  93.     MOV  CL, Sector
  94.     MOV  DH, Head
  95.     MOV  DL, Drv
  96.     LES  BX, Buf
  97.     INT  13h
  98.     JNC  @@1
  99.     INC  Int13Err
  100.   @@1:
  101.     MOV  Int13ErrCode, AH
  102.   END;
  103.  
  104.   FUNCTION VerifySectors(Drv, Track, Head, Sector,
  105.                          Sectors : BYTE;
  106.                          Buf : Pointer) : BYTE; ASSEMBLER;
  107.   ASM
  108.     MOV  Int13Err, 0
  109.     MOV  AH, 4
  110.     MOV  AL, Sectors
  111.     MOV  CH, Track
  112.     MOV  CL, Sector
  113.     MOV  DH, Head
  114.     MOV  DL, Drv
  115.     LES  BX, Buf
  116.     INT  13h
  117.     JNC  @@1
  118.     INC  Int13Err
  119.   @@1:
  120.     MOV  Int13ErrCode, AH
  121.   END;
  122.  
  123.   PROCEDURE FormatSectors(Drv, Track, Head, Sector,
  124.                           Sectors : BYTE;
  125.                           AdrField : Pointer); ASSEMBLER;
  126.   ASM
  127.     MOV  Int13Err, 0
  128.     MOV  AH, 5
  129.     MOV  AL, Sectors
  130.     MOV  CH, Track
  131.     MOV  CL, Sector
  132.     MOV  DH, Head
  133.     MOV  DL, Drv
  134.     LES  BX, AdrField
  135.     INT  13h
  136.     JNC  @@1
  137.     INC  Int13Err
  138.   @@1:
  139.     MOV  Int13ErrCode, AH
  140.   END;
  141.  
  142.   PROCEDURE GetDriveParams(Drv : BYTE;
  143.                            VAR Drvtype, tracks, spt,
  144.                                heads : BYTE;
  145.                            VAR pparam : Pointer); ASSEMBLER;
  146.   ASM
  147.     MOV  Int13Err, 0
  148.     MOv  AH, 8
  149.     MOV  DL, Drv
  150.     INT  13h
  151.     JNC  @@1
  152.     INC  Int13Err
  153.   @@1:
  154.     MOV  Int13ErrCode, AH
  155.     PUSH DS
  156.     LDS  SI, pparam
  157.     MOV  DS:[SI], DI
  158.     MOV  DS:[SI+2], ES
  159.     POP  DS
  160.     LES  DI, Drvtype
  161.     MOV  ES:[DI], BL
  162.     LES  DI, tracks
  163.     MOV  ES:[DI], CH
  164.     LES  DI, spt
  165.     MOV  ES:[DI], CL
  166.     LES  DI, heads
  167.     MOV  ES:[DI], DH
  168.   END;
  169.  
  170.   FUNCTION DiskChanged(Drv : BYTE) : BOOLEAN; ASSEMBLER;
  171.   ASM
  172.     MOV  Int13Err, 0
  173.     MOV  Int13ErrCode, 0
  174.     MOV  AH, 16h
  175.     MOV  DL, Drv
  176.     INT  13h
  177.     JNC  @@1
  178.     INC  Int13Err
  179.     MOV  Int13ErrCode, AH
  180.   @@1:
  181.     MOV  AL, AH
  182.     OR   AL, AL
  183.     JZ   @@2
  184.     MOV  AL, TRUE
  185.   @@2:
  186.   END;
  187.  
  188.   PROCEDURE SetDASD(Drv, DASD : BYTE); ASSEMBLER;
  189.   ASM
  190.     MOV  Int13Err, 0
  191.     MOV  AH, 17h
  192.     MOV  AL, DASD
  193.     MOV  DL, Drv
  194.     INT  13h
  195.     JNC  @@1
  196.     INC  Int13Err
  197.   @@1:
  198.     MOV  Int13ErrCode, AH
  199.   END;
  200.  
  201.   PROCEDURE SetMediaType(Drv, tracks, sectors : BYTE);
  202.   ASSEMBLER;
  203.   ASM
  204.     MOV  Int13Err, 0
  205.     MOV  AH, 18h
  206.     MOV  CH, tracks
  207.     MOV  CL, sectors
  208.     MOV  DL, Drv
  209.     INT  13h
  210.     JNC  @@1
  211.     INC  Int13Err
  212.   @@1:
  213.     MOV  Int13ErrCode, AH
  214.   END;
  215.  
  216.   PROCEDURE ParkHeads(Drv : BYTE); ASSEMBLER;
  217.   ASM
  218.     MOV  Int13Err, 0
  219.     MOV  AH, 19h
  220.     MOV  DL, Drv
  221.     INT  13h
  222.     JNC  @@1
  223.     INC  Int13Err
  224.   @@1:
  225.     MOV  Int13ErrCode, AH
  226.   END;
  227.  
  228. End.
  229. (* ****************************************************** *)
  230. (*                Ende von INT13.PAS                      *)
  231.