[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]
===========================================================================
BBS: Canada Remote Systems
Date: 06-12-93 (09:36) Number: 26301
From: CHRIS JANTZEN Refer#: NONE
To: WILLIAM SITCH Recvd: NO
Subj: RE: DETECTING EMS/XMS Conf: (1221) F-PASCAL
---------------------------------------------------------------------------
On Thursday June 10 1993, William Sitch wrote to All:
WS> Does anyone know how to detect XMS/EMS? I've used something documented in
WS> my PC INTERRUPTS book, but I can't seem to get it to work.
The following code was *mostly* right. Go back to your original source to
compare the changes I made:
procedure check_ems (VAR installed:boolean; VAR ver,ver2:byte); var
regs : registers;
begin
regs.ax := $46;
intr($67,regs);
installed := regs.ah = $00;
if (installed = true) then
begin
ver := hi(regs.al);
ver2 := lo(regs.al);
end;
end;
procedure check_xms (VAR installed:boolean; VAR ver,ver2:byte); var
regs : registers;
begin
regs.ax := $4300;
intr($2F,regs);
installed := regs.al = $80;
if (installed = true) then
begin
regs.ax := $4310;
regs.ah := $00;
intr($2F,regs);
ver := regs.ax;
ver2 := regs.bx;
end;
end;
WS> I am pretty sure I'm calling the interrupts right, but it always returns
WS> false, indicating that I do NOT have EMS/XMS, although I do. Can anyone
WS> help me out?
You were. Mostly. What you forgot was that when a real world book like PC
Interrupts says "Load the AX register with the value 4300h", it means to us
Pascal programmers "Load the AX variable with the value $4300". Note the dollar
sign. That means hexadecimal (like the little h on the end means hexadecimal to
assembly programmers).
Chris KB7RNL =->
--- GoldED 2.41
* Origin: SlugPoint * Coos Bay, OR USA (1:356/18.2)
[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]