Well, nobody responded to my request, so I had to wade through gdamn
bison source code, and I found what appears to be the bug. I am not
sure, since I don't know how the gdamn grammar is supposed to work.
The problem:
Only the last IRQ requested for IRQ passing is acutally configured.
The CONF messages note the request, but the vm86 request is never
made, and the IRQ is not allocated to dosemu.
The solution:
For some reason, the config.sillyint variable is zeroed EVERY time
a value is parsed in the irqpassing grammar. Only the last value
is saved. I looked and I think config.sillyint is initialized correctly
before the grammar gets going, to I have no idea why this rule
is coded like that. I just removed the clear and it works for me.
Areas of uncertainty:
The next rule down seems to ASSIGN the value of config.sillyint rather
than use the set_irq call that the previous rule does. IMHO this should
be an OR, or more likely, thrown away. I have no idea. I can't figure
out what irq_bool is.
Other problems:
The call to request the IRQ passing assignment appears to fail silently
if it can't allocate the IRQ. I would assume you would want a debug
message.
Here is the patch:
(applied to the RedHat 6.0 distributed 0.99.10)
*** parser.y.orig Fri Jun 25 13:55:44 1999
--- parser.y Fri Jun 25 14:40:54 1999
***************
*** 730,736 ****
| L_SOUND bool { if (! $2) config.sb_irq = 0; }
| L_SOUND { IFCLASS(CL_SOUND); } '{' sound_flags '}'
| SILLYINT
! { IFCLASS(CL_IRQ) config.sillyint=0; }
'{' sillyint_flags '}'
| SILLYINT irq_bool
{ IFCLASS(CL_IRQ) if ($2) {
--- 730,736 ----
| L_SOUND bool { if (! $2) config.sb_irq = 0; }
| L_SOUND { IFCLASS(CL_SOUND); } '{' sound_flags '}'
| SILLYINT
! { IFCLASS(CL_IRQ); }
'{' sillyint_flags '}'
| SILLYINT irq_bool
{ IFCLASS(CL_IRQ) if ($2) {
eric