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.