[comp.windows.ms.programmer] HAS ANYONE HAD ANY LUCK WITH IRQ...

rdthomps@vela.acs.oakland.edu (Robert D. Thompson) (06/24/91)

	One of the drawbacks of Windows *3.0* is that it seems
	that you can only use two COM ports simultaneously.

	This seems to be due to Windows "re-routing" interrupt
	requests for who-knows-why.

	The default settings for IRQ in the system.ini are,

		COM1Irq = 4
		COM2Irq = 3
		COM3Irq = 4
		COM4Irq = 3

	Obviously under this scenario you could not have two
	devices working simultaneously off Irq4 (COM1, COM3).

	However, you can change the Irq to other values.

	However2, setting one to Irq2 or Irq5 does not work
	because all IRQ2's also cause a subsequent IRQ4.

	Why did Mickysoft do this?

	If the Irq was needed *and used* than it would be
	fine.  As it stands, IRQ2's seem to be routed to
	IRQ4's and IRQ5 seem to be routed to IRQ3's.

	WHAT A WASTE !!!

	Now for my question, 

		Has anybody had luck with IRQ9 ????

		Or any other IRQ for that matter.

	My modem only allows me to set the Jumpers for IRQ2
	or IRQ5.

	I would appreciate any comments from anyone who
	has been able to get the other IRQ's to work
	*simultaneously*.

	Thanks...Regards |(8>
---
Robert
rdthomps@vela.acs.oakland.edu

bcw@rti.rti.org (Bruce Wright) (06/25/91)

In article <7485@vela.acs.oakland.edu> rdthomps@vela.acs.oakland.edu (Robert D. Thompson) writes:
>
>	One of the drawbacks of Windows *3.0* is that it seems
>	that you can only use two COM ports simultaneously.
>
>	This seems to be due to Windows "re-routing" interrupt
>	requests for who-knows-why.
>
>	The default settings for IRQ in the system.ini are,
>
>		COM1Irq = 4
>		COM2Irq = 3
>		COM3Irq = 4
>		COM4Irq = 3
>
>	Obviously under this scenario you could not have two
>	devices working simultaneously off Irq4 (COM1, COM3).
>
>	However, you can change the Irq to other values.
>
>	However2, setting one to Irq2 or Irq5 does not work
>	because all IRQ2's also cause a subsequent IRQ4.
>
>	Why did Mickysoft do this?

I'm not a great fan of Microsoft, but they _didn't_ do this.  The
root of the problem you're talking about is with the way that IBM
chose to assign the interrupt numbers on the PC - it doesn't make
much sense.  When Intel produced the 8086, the interrupts from 0x00
through 0x1f were to be _reserved to Intel_.  Not to be used for the 
BIOS, or for device interrupts, but for future expansion of the CPU 
and its support circuitry (like the 80286 and the 80386).

In this case, Microsoft listened to Intel and used interrupts 0x20
through 0x2f for MS-DOS.

Unfortunately, the engineers at IBM never thought that the PC would
amount to all that much, or be around for all that long;  so they
appropriated those interrupts for themselves.  This caused problems
when the 80286 came out (there were new interrupts that the ROM-BIOS
had to try to interpret and revector if they weren't intended as
ROM-BIOS requests).  It also meant that there was no contiguous
expansion space if you wanted to add more device interrupts (there
were also some issues regarding the interrupt controller circuitry
but those are separate from the issue of allocation of interrupt
numbers).  Everything broke big time when the AT came out - many
programs stopped working, there were lots of compatibility problems
with the ROM-BIOSes not being able to revector interrupts properly
in all cases, etc.  All totally unnecessary if IBM had been thinking
ahead even a little.  Most of these compatibility problems have been
solved by the layering of kluge upon kluge in the BIOS and the OS,
but there are still some visible seams such as the one you found.

Now it is perfectly possible to service more than one device on one 
IRQ line if there is a provision in the interrupt service routine for
chaining the interrupt.  Your performance will go down, but things
can still work, given sufficient CPU.  I _don't_ know offhand if 
Windows allows this - if it doesn't, you may have a legitimate beef
with Microsoft;  but it could also be argued that chaining the
interrupt should not be encouraged because of the added burden it
places on the CPU.

There are a lot of warts like this in the IBM-PC design as it has
evolved over the years ...

						Bruce C. Wright