tässä on EMS muistin käsittely vinkki (turpo tai borldan) pascalille
unit OSMOEMS; (* Version 1.0 *)
interface
const sivunkoko=16384; { 16k }
function osmoemsexists:boolean;
function osmoemspages:word;
procedure osmogetems(pages:word; var handle,pageframe:word);
procedure osmomapems(handle,logpage:word; physpage:byte);
procedure osmofreeems(handle:word);
var emsvirhe:integer;
implementation
const emmint=$67;
dosint=$21;
getpageframe=$41;
getfreepages=$42;
allocpages=$43;
mappages=$44;
deallocpages=$45;
getversion=$46;
statusok=0;
function osmoemsexists:boolean;
var emmdev,intdev:string[8]; a,b:word;
begin
intdev:=''; emmdev:='EMMXXXX0';
asm
mov ah,035h
mov al,emmint
int dosint
mov b,es
end;
for a:=10 to 17 do intdev:=intdev+chr(mem[b:a]);
if intdev=emmdev then osmoemsexists:=true else osmoemsexists:=false;
end;
function osmoemspages:word; assembler;
asm
mov ah,getfreepages
int emmint
mov al,ah
mov ah,0
mov emsvirhe,ax
mov ax,bx { hae vapaat ems sivut }
end;
procedure osmogetems(pages:word; var handle,pageframe:word);
var a,b:word;
begin
a:=pages;
asm
mov ah,getpageframe
int emmint
mov b,bx { ems sivu framen osoite }
mov ah,allocpages
mov bx,a
int emmint
mov a,dx { ems kahva }
mov al,ah
mov ah,0
mov emsvirhe,ax
end;
handle:=a;
pageframe:=b;
end;
procedure osmomapems(handle,logpage:word; physpage:byte);
var a,b:word; c:byte;
begin
a:=handle; b:=logpage; c:=physpage;
asm
mov ah,mappages
mov dx,a
mov bx,b
mov al,c
int emmint
mov al,ah
mov ah,0
mov emsvirhe,ax
end;
end;
procedure osmofreeems(handle:word);
var a:word;
begin
a:=handle;
asm
mov ah,deallocpages
mov dx,a
int emmint
mov al,ah
mov ah,0
mov emsvirhe,ax
end;
end;
end.Tuota olisi voinut vähän kommentoidakkin...
Anteeksi unothui kommentoida
tässä on vähän ohjeita:
osmoemsexists kertoo onko emssiä käytettäviässä?
osmoemspages kertoo montako emssi sivua on, ykssi sivu on 16 kilot.
osmogetems varaa emssi sivuja, antaa hndlen ja mappattujen sivujen osoitteen
osmomapems ottaa jonkun varatun sivun kätyöön (maksimi 4 käytösssä yhtä aikaa?)
osmofreems vapauttaa handlesta
emsvirhe siinä on emssi virhe, integer
Aihe on jo aika vanha, joten et voi enää vastata siihen.