Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: EMS moduli

Osmo Happonen [17.07.2002 11:35:08]

#

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.

HtH [18.07.2002 23:08:42]

#

Tuota olisi voinut vähän kommentoidakkin...

Osmo Happonen [19.07.2002 13:54:17]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta