mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-26 12:03:45 +02:00
68 lines
1.5 KiB
PHP
68 lines
1.5 KiB
PHP
{$IFDEF DPMI}
|
|
const
|
|
DPMI_INTR = $31;
|
|
|
|
type
|
|
TDPMIRegisters = record { DPMI call structure }
|
|
EDI : LongInt;
|
|
ESI : LongInt;
|
|
EBP : LongInt;
|
|
Reserved: LongInt;
|
|
EBX : LongInt;
|
|
EDX : LongInt;
|
|
ECX : LongInt;
|
|
EAX : LongInt;
|
|
Flags : Word;
|
|
ES : Word;
|
|
DS : Word;
|
|
FS : Word;
|
|
GS : Word;
|
|
IP : Word;
|
|
CS : Word;
|
|
SP : Word;
|
|
SS : Word;
|
|
end;
|
|
|
|
var
|
|
DPMIRegs: TDPMIRegisters;
|
|
|
|
procedure realintr(IntNo: byte; var r: registers);
|
|
var Regs: Registers;
|
|
begin
|
|
FillChar(DPMIRegs, SizeOf(TDPMIRegisters), 0);
|
|
DPMIRegs.EAX := r.ax;
|
|
DPMIRegs.EBX := r.bx;
|
|
DPMIRegs.ECX := r.cx;
|
|
DPMIRegs.EDX := r.dx;
|
|
DPMIRegs.EDI := r.di;
|
|
DPMIRegs.ESI := r.si;
|
|
DPMIRegs.EBP := r.bp;
|
|
DPMIRegs.DS := r.ds;
|
|
DPMIRegs.ES := r.es;
|
|
{ --- }
|
|
DPMIRegs.FS := 0;
|
|
DPMIRegs.GS := 0;
|
|
DPMIRegs.SS := 0;
|
|
DPMIRegs.SP := 0;
|
|
{ --- }
|
|
DPMIRegs.Flags := r.flags;
|
|
Regs.AX := $0300;
|
|
Regs.BL := IntNo;
|
|
Regs.BH := 0;
|
|
Regs.CX := 0;
|
|
Regs.ES := Seg(DPMIRegs);
|
|
Regs.DI := Ofs(DPMIRegs);
|
|
Intr(DPMI_INTR, Regs);
|
|
r.ax := DPMIRegs.EAX;
|
|
r.bx := DPMIRegs.EBX;
|
|
r.cx := DPMIRegs.ECX;
|
|
r.dx := DPMIRegs.EDX;
|
|
r.di := DPMIRegs.EDI;
|
|
r.si := DPMIRegs.ESI;
|
|
r.bp := DPMIRegs.EBP;
|
|
r.ds := DPMIRegs.DS;
|
|
r.es := DPMIRegs.ES;
|
|
r.Flags := DPMIRegs.Flags;
|
|
end;
|
|
{$ENDIF}
|