Opened 10 years ago
Closed 10 years ago
#13769 closed defect (fixed)
Problem with SoundBlaster 16 Interrupt Flags (fix included)
| Reported by: | SpyderTL | Owned by: | |
|---|---|---|---|
| Component: | audio | Version: | VirtualBox 4.3.20 |
| Keywords: | SB16 Sound Blaster 16 | Cc: | |
| Guest type: | other | Host type: | all |
Description
I stumbled across this issue while working on a SoundBlaster 16 driver for my personal OS.
I noticed that the Interrupt Flags, located at Mixer Register 0x82 (bits 0 and 1) are never cleared, even after an interrupt has been acknowledged.
I scanned through the devsb16.cpp file, and found this:
1164 case 0x0e: /* data available status | irq 8 ack */
1165 retval = (!s->out_data_len || s->highspeed) ? 0 : 0x80;
1166 if (s->mixer_regs[0x82] & 1) {
1167 ack = 1;
1168 s->mixer_regs[0x82] &= 1; // PROBLEM!
1169#ifndef VBOX
1170 qemu_irq_lower (s->pic[s->irq]);
1171#else
1172 PDMDevHlpISASetIrq(s->pDevIns, s->irq, 0);
1173#endif
1174 }
1175 break;
1176
1177 case 0x0f: /* irq 16 ack */
1178 retval = 0xff;
1179 if (s->mixer_regs[0x82] & 2) {
1180 ack = 1;
1181 s->mixer_regs[0x82] &= 2; // PROBLEM!!
1182#ifndef VBOX
1183 qemu_irq_lower (s->pic[s->irq]);
1184#else
1185 PDMDevHlpISASetIrq(s->pDevIns, s->irq, 0);
1186#endif
1187 }
1188 break;
The problem appears to be on line 1168 and 1181. Those flags should be inverted before they are ANDed with the current value:
1168 s->mixer_regs[0x82] &= ~1; // FIXED! 1181 s->mixer_regs[0x82] &= ~2; // FIXED!
I would submit this patched code myself, but I am not set up on this machine to download and compile VBOX.
Thanks for your help, guys. Great product.
Change History (5)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
If you have a test case we would even consider applying the patch if the original Qemu author would not respond.
comment:5 by , 10 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |


That certainly looks sensible, but none of us have looked at that code for a long time (if at all). Perhaps you could run your patch past the original Qemu author, Vasily Karpov<1>? Thanks.
<1> http://git.qemu.org/?p=qemu.git;a=commit;h=cf4dc461a4cfc3e056ee24edb26154f4d34a6278