mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 13:09:16 +02: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