Mail Archives: djgpp/1995/04/25/02:18:49
On Mon, 24 Apr 1995, Eli Zaretskii wrote:
> 1) Did you call _go32_dpmi_allocate_real_mode_callback_iret()
> before _go32_dpmi_set_real_mode_interrupt_vector(), as the FAQ tells you?
Yes.
> 2) Do you set SS and SP to zero before calling
> _go32_dpmi_simulate_fcall_iret() in your RM handler to chain to the previous
Yes.
> handler in the chain? I think you might have to also zero-out FLAGS, but I'm
> not sure.
I wasn't sure either, so I tried it both ways.
> 3) If your handlers do not always chain to the previous ISRs, you
> should send EOI (end-of-interrupt) to the interrupt controller when they
> don't chain.
They always chain, but I even tried sending EOI anyway!
> 4) Is your program sufficiently large (larger than the available free
> PHYSICAL RAM) so that it pages to the disk? If so, then under current version
I don't think so.
> page locking. But if your program doesn't page (you can check it by putting
> ``topline'' into your GO32 environment variable and watching memory usage), then
I'll try that.
> If all of the above doesn't help, download PCTIME12.ZIP from SimTel/msdos/c. It
> has a working example of hooking the timer interrupt, which you can use as
> starting point. (E.g., it includes a blurb about a bug in gcc 2.6.0 and gives a
> solution for it.)
Thanks, I'll get it and have a look.
> In non-DPMI mode, if you only hook the PM interrupt, you will lose interrupts
> when your machine is in real mode.
What would the symptoms of that be? I haven't noticed any dropped
keystrokes or anything.
> Thanks for the compliment. If you find any subtle points which need to be added
> to that chapter of the FAQ, please let me know. A new revision of the FAQ is in
> the works and should be available in a week or so.
The only comment I have is that your description of
_go32_dpmi_chain_protedted_mode_interrupt() is a little vague.
Specifically, you don't mention that that function allocates the
necessary wrapper, so you don't need to call blahblah_allocate_iret() or
whatever it is called; you make it sound like you use *_chain_*() in
place of (but in the same way as) *_set_*(). Luckily, the libc.a info
pages are clear on this.
Thanks for your help.
Bill Davidson
bdavidson AT ra DOT isisnet DOT com
- Raw text -