www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1995/04/25/02:18:49

Date: Tue, 25 Apr 1995 01:46:15 -0300 (ADT)
From: Bill Davidson <bdavidson AT ra DOT isisnet DOT com>
Subject: Re: Chaining real-mode interrupts
To: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
Cc: djgpp AT sun DOT soe DOT clarkson DOT edu


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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019