home *** CD-ROM | disk | FTP | other *** search
-
- {
- SM> I have a bit of a problem with pascal 7 protected mode,
- SM> I have a TSR (assembly) that does my comms work for me.
- SM> I use intr(regs) with various settings to the registers to collect
- SM> data from the TSR. However when in protected mode my TSR seems
- SM> to be unavailable.
-
- I had the same problem, it seems that the DOS unit does not support protected
- mode interrupt handling. I solved it by looking though some documentation I
- found on protected mode, below is a simple unit to set and get protected
- mode interrupts.
-
- In my case the interrupt goes about 22Khz so it kept switching into real mode
- and back just to handle the interrupt, the result it crashed.
-
- SM> Do I need to switch to real mode from the app.
- SM> (if so how, I can't find it in the manual).
-
- No, see above.
-
- SM> Do I need to modify my TSR.
- SM> I presume not because I'm sure that the mouse drivers can be got
- SM> to work.
-
- The MOUSE is handled by the DOS extender.
-
- Cheers
- Rob
-
- P.S. I noticed that you use the same BBS, if you have any problems drop
- me a note.
- }
-
- Unit DPMIDos; { This code was a quick hack job to solve my problem }
- { don't expect it to be neat! }
-
- INTERFACE
-
- Function RealMode : Boolean;
- Function AllocateLDT(NumberDescriptors : Word) : Word;
- Function FreeLDT(Selector : Word) : Boolean;
- Function SegmentToDescriptor(Segment : Word) : Word;
- Function GetNextSelectorInc : Word;
- Function GetDPMIntVec(IntNumber : Byte) : Pointer;
- Procedure SetDPMIntVec(IntNumber : Byte; IntVec : Pointer);
-
- IMPLEMENTATION
-
- Function RealMode : Boolean; assembler;
- asm
- mov ax, 01686h
- int 02Fh
- end;
-
- Function AllocateLDT(NumberDescriptors : Word) : Word; assembler;
- asm
- mov ax, 0000h
- mov ax, NumberDescriptors
- int 031h
- jnc @Ok
- mov ax, 0
- @Ok:
- end;
-
- Function FreeLDT(Selector : Word) : Boolean; assembler;
- asm
- mov ax, 0001h
- mov bx, Selector
- int 031h
- mov ax, 1
- jnc @Ok
- mov ax, 0
- @Ok:
- end;
-
- Function SegmentToDescriptor(Segment : Word) : Word; assembler;
- asm
- mov ax, 0002h
- mov bx, Segment
- int 31h
- jnc @Ok
- mov ax, 0
- @Ok:
- end;
-
- Function GetNextSelectorInc : Word; assembler;
- asm
- mov ax, 0003h
- int 031h
- end;
-
-
- Function GetDPMIntVec(IntNumber : Byte) : Pointer; {assembler;}
- Var S, O : Word; { Too lazy to look in the manual! }
- Begin
- asm
- mov ax, 0204h
- mov bl, IntNumber
- int 031h
- mov S, cx
- mov O, dx
- end;
- GetDPMIntVec := Ptr(S, O);
- End;
-
-
- Procedure SetDPMIntVec(IntNumber : Byte; IntVec : Pointer); assembler;
- asm
- mov ax, 0205h
- mov bl, IntNumber
-
- les dx, IntVec
- mov cx, es
-
- int 031h
- end;
-
- begin
- end.