[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]