home *** CD-ROM | disk | FTP | other *** search
- unit Disk;
-
- INTERFACE
- uses Exec;
-
-
- type
- pDiscResourceUnit = ^tDiscResourceUnit;
- pDiscResource = ^tDiscResource;
- tDiscResource = record
- dr_Library: tLibrary;
- dr_Current: pDiscResourceUnit;
- dr_Flags: byte;
- dr_pad: byte;
- dr_SysLib: pLibrary;
- dr_CiaResource: pLibrary;
- dr_UnitID: array [0..3] of long;
- dr_Waiting: tList;
- dr_DiscBlock: tInterrupt;
- dr_DiscSync: tInterrupt;
- dr_Index: tInterrupt;
- end;
-
- tDiscResourceUnit = record
- dru_Message: tMessage;
- dru_DiscBlock: tInterrupt;
- dru_DiscSync: tInterrupt;
- dru_Index: tInterrupt;
- end;
-
-
-
- var
- DiskBase: pDiscResource;
-
-
- const
- DRB_ALLOC0 = 0;
- DRB_ALLOC1 = 1;
- DRB_ALLOC2 = 2;
- DRB_ALLOC3 = 3;
- DRF_ALLOC0 = 1;
- DR_ALLOCUNIT = $FFFFFFFA;
- DRF_ALLOC1 = 2;
- DRF_ALLOC2 = 4;
- DR_GETUNITID = $FFFFFFE2;
- DRT_EMPTY = $FFFFFFFF;
- DRF_ALLOC3 = 8;
- DR_LASTCOMM = $FFFFFFE8;
- DR_FREEUNIT = $FFFFFFF4;
- DRB_ACTIVE = 7;
- DSKDMAOFF = $4000;
- DRF_ACTIVE = $80;
- DR_GIVEUNIT = $FFFFFFE8;
- DRT_AMIGA = 0;
- DRT_37422D2S = $55555555;
- DR_GETUNIT = $FFFFFFEE;
- DISKNAME = 'disk.resource';
-
-
- function AllocUnit (unitNum: longint): boolean;
- procedure FreeUnit (unitNum: longint);
- function GetUnit (unitPointer: pDiscResourceUnit): pDiscResourceUnit;
- procedure GiveUnit;
- function GetUnitID (unitNum: longint): longint;
-
-
- IMPLEMENTATION
- function AllocUnit; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),d0
- move.l DiskBase,a6
- jsr -6(a6)
- tst.l d0
- sne d0
- neg.b d0
- move.b d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- procedure FreeUnit; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),d0
- move.l DiskBase,a6
- jsr -$C(a6)
- move.l (sp)+,a6
- end;
-
- function GetUnit; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),a1
- move.l DiskBase,a6
- jsr -$12(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- procedure GiveUnit; xassembler;
- asm
- move.l a6,-(sp)
- move.l DiskBase,a6
- jsr -$18(a6)
- move.l (sp)+,a6
- end;
-
- function GetUnitID; xassembler;
- asm
- move.l a6,-(sp)
- move.l 8(sp),d0
- move.l DiskBase,a6
- jsr -$1E(a6)
- move.l d0,$C(sp)
- move.l (sp)+,a6
- end;
-
- end.
-