Browse Source

+ TEST FILE!!! NOT OFFICIALLY PART OF FPC!
(Implements DPMI server real mode interrupt)

carl 26 years ago
parent
commit
26445ed1ce
1 changed files with 42 additions and 0 deletions
  1. 42 0
      rtl/inc/graph/dpmi.inc

+ 42 - 0
rtl/inc/graph/dpmi.inc

@@ -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;