home *** CD-ROM | disk | FTP | other *** search
- { Copyright 1995 by Ethan Brodsky. All rights reserved. }
- unit XMS;
- interface
- {Initialization}
- function XMSInstalled: boolean;
- procedure XMSInit;
-
- {Informational}
- function XMSGetVersion: word;
- function XMSGetFreeMem: word;
-
- {Allocation and deallocation}
- function XMSAllocate(var Handle: word; Size: word): boolean;
- function XMSReallocate(Handle: word; NewSize: word): boolean;
- function XMSFree(Handle: word): boolean;
-
- {Memory moves}
- type
- PMoveParams = ^TMoveParams;
- TMoveParams =
- record
- Length : LongInt;
- SourceHandle : word;
- SourceOffset : LongInt;
- DestHandle : word;
- DestOffset : LongInt;
- end;
- function XMSMove(Params: PMoveParams): boolean;
-
- implementation {██████████████████████████████████████████████████████████}
- var
- XMSDriver: pointer;
-
- {════════════════════════════════════════════════════════════════════════════}
-
- function XMSInstalled: boolean; assembler;
- asm
- mov ax, 4300h
- int 2Fh
- cmp al, 80h
- jne @NoXMSDriver
- mov al, TRUE
- jmp @Done
- @NoXMSDriver:
- mov al, FALSE
- @Done:
- end;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- procedure XMSInit; assembler;
- asm
- mov ax, 4310h
- int 2Fh
- mov word ptr [XMSDriver], bx
- mov word ptr [XMSDriver+2], es
- end;
-
- {════════════════════════════════════════════════════════════════════════════}
-
- function XMSGetVersion: word; assembler;
- asm
- mov ah, 00h
- call XMSDriver
- end;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- function XMSGetFreeMem: word; assembler;
- asm
- mov ah, 08h
- call XMSDriver
- mov ax, dx
- end;
-
- {════════════════════════════════════════════════════════════════════════════}
-
- function XMSAllocate(var Handle: word; Size: word): boolean; assembler;
- asm
- mov ah, 09h
- mov dx, Size
- call XMSDriver
- les di, Handle
- mov es:[di], dx
- end;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- function XMSReallocate(Handle: word; NewSize: word): boolean; assembler;
- asm
- mov ah, 0Fh
- mov bx, NewSize
- mov dx, Handle
- call XMSDriver
- end;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- function XMSFree(Handle: word): boolean; assembler;
- asm
- mov ah, 0Ah
- mov dx, Handle
- call XMSDriver
- end;
-
- {════════════════════════════════════════════════════════════════════════════}
- function XMSMove(Params: PMoveParams): boolean; assembler;
- asm
- push ds
- mov ah, 0Bh
- lds si, Params
- call XMSDriver
- pop ds
- end;
- end. {████████████████████████████████████████████████████████████████████}