[Back to MEMORY SWAG index]  [Back to Main SWAG index]  [Original]


Unit DMPI;

Interface

type
  TRealModeReg = RECORD
    rmEDI, rmESI, rmEBP, Reserved, rmEBX, rmEDX, rmECX, rmEAX: LongInt;
    rmCPUFlags, rmES, rmDS, rmFS, rmGS, rmIP, rmCS, rmSP, rmSS: WORD
  END;
  PRealModeReg = ^TRealModeReg;

Function RealInt ( intnum: BYTE; Var RealModeReg: TRealModeReg): Boolean;

Implementation

   (*************************************************************************
 / RealInt()
 /
 / Simulate an interrupt in real mode using DPMI function 0300h
 / When the interrupt is simulated in real mode, the registers will
 / contain the values in lpRealModeReg.  When the interrupt returns,
 / lpRealModeReg will contain the values from real mode.
 /
 /*************************************************************************)


Function RealInt ( intnum: BYTE; Var RealModeReg: TRealModeReg): Boolean; assembler;
   asm
       mov  ax, 0300h  (* Simulate Real Mode Interrupt *)
       mov  bl, intnum
       mov  bh, 0
       mov  cx, 0
       les  di, RealModeReg
       int  31h
       jc   @Error
       mov  ax, TRUE    (* All is well, return TRUE *)
       jmp  @Exit
   @Error:
       mov  ax, FALSE   (* Hmm, Mr. DPMI unhappy, return FALSE *)
   @Exit:
   End;


End.

[Back to MEMORY SWAG index]  [Back to Main SWAG index]  [Original]