Working Around Sound Blaster 16/32/AWE32 MPU-401 Bugs
If you've been working on PCs that have an ISA slot populared by a Sound Blaster, and you're either a MIDI module enthusiast (like me) or using a WaveBlaster add-on, you may have run into issues with the MPU-401 interface. There's ways to work around some of the bugs.
The So-Called "Hanging Note Bug"
This bug is well known. Using digital audio and the MPU-401 interface at the same time on some configurations of the Sound Blaster 16/32/AWE32 will produce notes that are not part of the original music. Sometimes these are shrill and high-pitched, but almost every time they're unwanted and unintended.
Avoiding the Problem Entirely
Getting around these issues involves substituting the Sound Blaster with a clone card that lacks these issues, using a Sound Blaster that lacks the OPL3 circuit licensed from Yamaha, or avoiding using the MPU-401 interface altogether.
This post describes yet another method: disable the interface on the Sound Blaster, and enable another one installed elsewhere in the computer.
Jumpers
If you are familiar with how jumpers on expansion cards works, you can skip this section.
In the context of Sound Blaster cards, jumpers are a set of two pins on the board, which may or may not be connected by little rectangular bits of plastic with a metal conductor inside. These indicate to the hardware on the expansion card how it should behave while powered on.
The closed position means that there is a connection between the two pins on the board. The open position means that there is no connection between the two pins.
Disabling the MPU-401 Interface on the Sound Blaster
If the Sound Blaster has a discrete jumper for MPUEN, changing it to the open position should disable its MPU-401 interface.
If the MPUEN jumper is not available, but the MFBEN jumper is, this will serve a similar purpose.
Another jumper of note is JOYEN, which enables the joystick port at 201H. If the alternative interface also supports joysticks, it is less likely there will be conflicts if this is configured in the open position.
Moving the Sound Blaster MPU-401 Interface to Another Port Instead
Some Sound Blaster cards don't allow explicitly disabling the MPU-401 interface. In this case, the above instructions may not apply.
It may still be possible to move the interface to another port. If there is an MSEL jumper on the card, moving the jumper to the open position will change the port the Sound Blaster 16 will use to 300H. (The closed position is the default port 330H.) This means that any games configured to send data to the standard MPU-401 port will not reach the Sound Blaster. It is possible for auto-detection routines to find this interface anyway, however.
Using the Via VT82C686(B) Southbridge Integrated MPU-401
In my current setup, I am using a Soltek SL-75KAV motherboard, which contains the KT133A chipset and a VT82C686B southbridge. This particular southbridge also contains a Sound Blaster compatible interface which also supports the MPU-401. I have to enable Legacy Sound but disable the Sound Blaster portion itself, since I'm using a real one already.
BIOS Settings
In the BIOS, I change a few settings to prepare for this hardware setup:
- Advanced Chipset Features -> OnChip Sound set to Auto.
- Integrated Peripherals -> Onboard Legacy Audio set to Enabled.
- Integrated Peripherals -> Sound Blaster set to Disabled.
- Integrated Peripherals -> MPU-401 set to Enabled.
- Integrated Peripherals -> MPU-401 I/O Address set to 330-333H.
- Integrated Peripherals -> Game Port (200-207H) set to Enabled.
In order for Windows to behave correctly, even though we won't be using an IRQ, I still have to reserve IRQ 9. Otherwise, when Windows attempts to detect the MPU-401 interface, it may hang the system.
Configuring Windows
When using a PnP Sound Blaster card, the Sound Blaster's MPU-401 interface will need to be disabled via the Device Manager. When first installing a different MPU-401 interface, Windows will probably claim there is a resource conflict. However, disabling the Sound Blaster's MPU-401 interface should avoid any real problems.
Microsoft has bundled a "Roland MPU-401" driver with Windows 98SE and 2000. Other versions of Windows may also have this driver. In the Control Panel, we have to go to Add New Hardware. Elect to choose hardware from a list, and select Multimedia Device. In the vendor list in a new window that pops up, select Microsoft. In the device list, select MPU-401 Compatible or something named similarly. It should automatically assign Port 330H and IRQ 9. The IRQ will not function for games that expect it; for the most part, this shouldn't be an issue unless it uses Intelligent Mode. Most games use UART mode, however.
Configuring Unisound
Unisound can automatically detect and configure a Sound Blaster's MPU-401 compatible interface. However, if it is explicitly disabled on the card itself (via the jumper), these resources won't actually be used by the Sound Blaster and will remain free for any alternative MPU-401 compatible interface.
Unisound should work out of the box in this fashion on non-PnP Sound Blaster cards. When using a PnP Sound Blaster, Unisound will need to configured with an alternate port. Add P300 to the Blaster variable before running Unisound, and then change it to P330 after running Unisound so that games that use auto-detection will locate and use the correct one.
Conclusion
Using these instructions, I was able to get bug-free MPU-401 playback on a Roland Sound Canvas SC-55MkII while still using a Sound Blaster 16 that had a licensed OPL3 core.
If you have any contributions to this post, send me an e-mail! Figuring out how to navigate compatibility issues like this is largely a community effort.