audblst.drv found in some Sierra games (KQ6 floppy version for instance) uses highly dangerous method of blaster detection, and overall aproach to IRQ handling is racy. However audblst.drv from LSL6 or KQ6-CD are fine in this regard. Just copy it over and things should work. ====================================================================== Here's what detection procedure looks like in pseudo-code: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ setup_sound_blaster (); setup_dma (); set_blaster_dma_length (1); // after transfering said one byte SB should assert its IRQ line start_dma (); start_SB (); irq_number = 0; for (cx = 0; cx < 2048; ++cx) if (irq_number != 0) goto good_blaster; goto bad_blaster; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ irq_handler_1: irq_number = 1; exit_irq; irq_handler_2: irq_number = 2; exit_irq; irq_handler_3: irq_number = 3; exit_irq; ... etc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ the problem with that is two fold: a. if IRQ is asserted after start_SB but before assignment to irq_number we are toast (DMA is programmed in a single shot mode, so no further IRQs will be generated) b. for loop is very tight and our chances in firing while it runs are very slim. needless to say if we assert IRQ after for loop completes code will already take bad_blaster path Even after patching audblst.drv manually, it never quite worked correctly, i guess similar races are scattered all around the code.