home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Intermedia 1998 January
/
inter1_98.iso
/
www
/
rozi
/
RAW2.ZIP
/
XMS.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1995-02-18
|
3KB
|
115 lines
{ 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. {████████████████████████████████████████████████████████████████████}