| delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f |
| From: | "Jordar" <rrcdaniel AT sbcglobal DOT net> |
| Newsgroups: | comp.os.msdos.djgpp |
| Subject: | Re: porting from borland |
| Date: | 6 Nov 2006 09:54:34 -0800 |
| Organization: | http://groups.google.com |
| Lines: | 39 |
| Message-ID: | <1162835674.032597.311890@i42g2000cwa.googlegroups.com> |
| References: | <1162831801 DOT 086285 DOT 199260 AT h54g2000cwb DOT googlegroups DOT com> |
| <200611061704 DOT kA6H4mUK006274 AT envy DOT delorie DOT com> | |
| <1162833119 DOT 166609 DOT 126110 AT i42g2000cwa DOT googlegroups DOT com> | |
| <200611061732 DOT kA6HWVTd007180 AT envy DOT delorie DOT com> | |
| NNTP-Posting-Host: | 65.67.51.194 |
| Mime-Version: | 1.0 |
| X-Trace: | posting.google.com 1162835679 16598 127.0.0.1 (6 Nov 2006 17:54:39 GMT) |
| X-Complaints-To: | groups-abuse AT google DOT com |
| NNTP-Posting-Date: | Mon, 6 Nov 2006 17:54:39 +0000 (UTC) |
| In-Reply-To: | <200611061732.kA6HWVTd007180@envy.delorie.com> |
| User-Agent: | G2/1.0 |
| X-HTTP-UserAgent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7,gzip(gfe),gzip(gfe) |
| Complaints-To: | groups-abuse AT google DOT com |
| Injection-Info: | i42g2000cwa.googlegroups.com; posting-host=65.67.51.194; |
| posting-account=rQ0tLw0AAABlxfVSZZfLGXLmQpwv2fH6 | |
| To: | djgpp AT delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| Reply-To: | djgpp AT delorie DOT com |
| Errors-To: | nobody AT delorie DOT com |
| X-Mailing-List: | djgpp AT delorie DOT com |
| X-Unsubscribes-To: | listserv AT delorie DOT com |
DJ Delorie wrote:
> The only thing I can think of is to set up your handler first, then
> enable interrupts. The BIOS's default handler may be disabling
> "rogue" interrupts.
>
> Are you installing both a PM and RM handler?
I do install the handler first.... below is code for setting up
interrupt 1-7:
void InitHostIT(void interrupt (*IntVect) (void), short IRQNum)
{
unsigned char IMR;
disable(); // Don't want short called during
revector
outportb(0x20, 0x20); // acknowledge any pending IRQ
_go32_dpmi_get_protected_mode_interrupt_vector(IRQNum, &old_handler);
new_handler.pm_offset = (unsigned long) IntVect;
new_handler.pm_selector = _go32_my_cs();
_go32_dpmi_allocate_iret_wrapper(&new_handler);
_go32_dpmi_set_protected_mode_interrupt_vector(IRQNum, &new_handler);
IMR = inportb(0x21); // Read in current IMR
IMR &= ~(1 << IRQNum); // Clear desired bit
outportb(0x21, IMR); // Out new IMR
enable();
}
I think you are definately on to something. If I read back the value
of the pic before the enable(), it returns the proper value. However
if I do the same thing immediately after the enable the PIC returns
back with the interrupt disabled. Something (BIOS??) is disabling it
so I must not be setting up the Handler properly.
I am using the above PM handler code only. Perhaps I need to
experiment with a RM handler or is there something else missing to the
above?
Thanks for your help
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |