mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-07 06:30:37 +01:00
+ TEST FILE!!! NOT OFFICIALLY PART OF FPC!
(Implements DPMI server real mode interrupt)
This commit is contained in:
parent
3ff2cdf4a9
commit
26445ed1ce
42
rtl/inc/graph/dpmi.inc
Normal file
42
rtl/inc/graph/dpmi.inc
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
This file is part of the Free Pascal run time library.
|
||||||
|
Copyright (c) 1993,99 by the Free Pascal development team
|
||||||
|
|
||||||
|
See the file COPYING.FPC, included in this distribution,
|
||||||
|
for details about the copyright.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
**********************************************************************}
|
||||||
|
TYPE
|
||||||
|
TDPMIRegisters = record
|
||||||
|
EDI, ESI, EBP, Reserved, EBX, EDX, ECX, EAX : longint;
|
||||||
|
Flags, ES, DS, FS, GS, IP, CS, SP, SS : word;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Procedure RealIntr(IntNo : word; var Regs:TDPMIRegisters); assembler;
|
||||||
|
(*********************************************************************)
|
||||||
|
(* PROCEDURE RealModeInt(IntNo: word; Var Regs: TDPMIRegisters) *)
|
||||||
|
(* Calls the DPMI server to switch to real mode and call the *)
|
||||||
|
(* real mode interrupt. ALL MEMORY REGISTERS (if used) SHOULD *)
|
||||||
|
(* contain REAL MODE ADRESSES! *)
|
||||||
|
(* IntNo -> Real mode interrupt to call (0-255) *)
|
||||||
|
(* Regs -> Registers to pass on to interrupt. *)
|
||||||
|
(* (ALL UNUSED REGISTERS SHOULD BE SET TO 0 ON ENTRY!) *)
|
||||||
|
(*********************************************************************)
|
||||||
|
asm
|
||||||
|
PUSH BP { Save BP, just in case }
|
||||||
|
MOV BX,IntNo { Move the Interrupt number into BX }
|
||||||
|
XOR CX,CX { Clear CX }
|
||||||
|
LES DI,Regs { Load the registers into ES:DI }
|
||||||
|
MOV AX,$300 { Set function number to 300h }
|
||||||
|
INT $31 { Call Interrupt 31h - DPMI Services }
|
||||||
|
JC @Exit { Jump to exit on carry }
|
||||||
|
XOR AX,AX { Clear AX }
|
||||||
|
@Exit: { Exit label }
|
||||||
|
POP BP { Restore BP }
|
||||||
|
end;
|
||||||
Loading…
Reference in New Issue
Block a user