home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Pascal / HISOFTPASCAL2,0-2.DMS / in.adf / Units / Disk.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-05-20  |  2.0 KB  |  120 lines

  1. unit Disk;
  2.  
  3. INTERFACE
  4. uses Exec;
  5.  
  6.  
  7. type
  8.     pDiscResourceUnit = ^tDiscResourceUnit;
  9.     pDiscResource = ^tDiscResource;
  10.     tDiscResource = record
  11.         dr_Library: tLibrary;
  12.         dr_Current: pDiscResourceUnit;
  13.         dr_Flags: byte;
  14.         dr_pad: byte;
  15.         dr_SysLib: pLibrary;
  16.         dr_CiaResource: pLibrary;
  17.         dr_UnitID: array [0..3] of long;
  18.         dr_Waiting: tList;
  19.         dr_DiscBlock: tInterrupt;
  20.         dr_DiscSync: tInterrupt;
  21.         dr_Index: tInterrupt;
  22.         end;
  23.  
  24.     tDiscResourceUnit = record
  25.         dru_Message: tMessage;
  26.         dru_DiscBlock: tInterrupt;
  27.         dru_DiscSync: tInterrupt;
  28.         dru_Index: tInterrupt;
  29.         end;
  30.  
  31.  
  32.  
  33. var
  34.     DiskBase: pDiscResource;
  35.  
  36.  
  37. const
  38.     DRB_ALLOC0 = 0;
  39.     DRB_ALLOC1 = 1;
  40.     DRB_ALLOC2 = 2;
  41.     DRB_ALLOC3 = 3;
  42.     DRF_ALLOC0 = 1;
  43.     DR_ALLOCUNIT = $FFFFFFFA;
  44.     DRF_ALLOC1 = 2;
  45.     DRF_ALLOC2 = 4;
  46.     DR_GETUNITID = $FFFFFFE2;
  47.     DRT_EMPTY = $FFFFFFFF;
  48.     DRF_ALLOC3 = 8;
  49.     DR_LASTCOMM = $FFFFFFE8;
  50.     DR_FREEUNIT = $FFFFFFF4;
  51.     DRB_ACTIVE = 7;
  52.     DSKDMAOFF = $4000;
  53.     DRF_ACTIVE = $80;
  54.     DR_GIVEUNIT = $FFFFFFE8;
  55.     DRT_AMIGA = 0;
  56.     DRT_37422D2S = $55555555;
  57.     DR_GETUNIT = $FFFFFFEE;
  58.     DISKNAME = 'disk.resource';
  59.  
  60.  
  61. function AllocUnit (unitNum: longint): boolean;
  62. procedure FreeUnit (unitNum: longint);
  63. function GetUnit (unitPointer: pDiscResourceUnit): pDiscResourceUnit;
  64. procedure GiveUnit;
  65. function GetUnitID (unitNum: longint): longint;
  66.  
  67.  
  68. IMPLEMENTATION
  69. function AllocUnit; xassembler;
  70. asm
  71.     move.l    a6,-(sp)
  72.     move.l    8(sp),d0
  73.     move.l    DiskBase,a6
  74.     jsr        -6(a6)
  75.     tst.l    d0
  76.     sne        d0
  77.     neg.b    d0
  78.     move.b    d0,$C(sp)
  79.     move.l    (sp)+,a6
  80. end;
  81.  
  82. procedure FreeUnit; xassembler;
  83. asm
  84.     move.l    a6,-(sp)
  85.     move.l    8(sp),d0
  86.     move.l    DiskBase,a6
  87.     jsr        -$C(a6)
  88.     move.l    (sp)+,a6
  89. end;
  90.  
  91. function GetUnit; xassembler;
  92. asm
  93.     move.l    a6,-(sp)
  94.     move.l    8(sp),a1
  95.     move.l    DiskBase,a6
  96.     jsr        -$12(a6)
  97.     move.l    d0,$C(sp)
  98.     move.l    (sp)+,a6
  99. end;
  100.  
  101. procedure GiveUnit; xassembler;
  102. asm
  103.     move.l    a6,-(sp)
  104.     move.l    DiskBase,a6
  105.     jsr        -$18(a6)
  106.     move.l    (sp)+,a6
  107. end;
  108.  
  109. function GetUnitID; xassembler;
  110. asm
  111.     move.l    a6,-(sp)
  112.     move.l    8(sp),d0
  113.     move.l    DiskBase,a6
  114.     jsr        -$1E(a6)
  115.     move.l    d0,$C(sp)
  116.     move.l    (sp)+,a6
  117. end;
  118.  
  119. end.
  120.