Space Quest IV SoundBlaster Fix

From OS2World.Com Wiki
Revision as of 03:09, 28 June 2025 by Martini (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

On OS/2 2.0 304E, Space Quest IV experiences problems in a DOS session. On machines that have the SoundBlaster card, it runs for about 30 seconds, and then stops. The problem was found to be related to DMA transfers and simulated interrupts.


[1]

Intro

On OS/2 2.0 304E, Space Quest IV experiences problems in a DOS session. On machines that have the SoundBlaster card, it runs for about 30 seconds, and then stops. The problem was found to be related to DMA transfers and simulated interrupts.

Fix Description

After debugging for several days, a fix was found for the SNDBLAST.DRV file that comes with Space Quest IV. This fix makes the interrupt handler for the SoundBlaster card work better under a Virtual 86 environment. Essentially, it guarantees that the SoundBlaster card is in the correct state before it sends an End of Interrupt (EOI) to the Programmable Interrupt Controller. We have patched the SNDBLAST.DRV file and it now works correctly. Essentially, the EOI is at the end of the interrupt handler instead of at the beginning.

Why Not Change OS/2?

Changing OS/2 for this problem would mean a great deal of work. Interrupt simulation would have to change so that it would be impossible to ever enable interrupts while running a DOS interrupt handler. All associated code would have to be resident (present), and the DOS address space for interrupt handlers could never cross a page-boundry without the pages being present. This is not a trivial fix. The fix was to move four bytes of code in the SNDBLAST.DRV instead of trying a major change to OS/2.

Sierra Contact

Sierra was contacted to discuss the change.They agreed that it was a good change and that it might partially explain why Space Quest IV doesn't work under Windows Enhanced Mode Dos sessions. We expect that they will incorporate this idea into their products from this day on.

Patch for Customers

We have built a executable called SQ4FIX.COM that runs in a DOS session. We are putting this file into the product, and it will be installed into \OS2\MDOS when the user selects the DOS & Win-OS/2 section during install. To use this patch program, the user only has to change to the drive which has Space Quest IV installed and execute the program.

Example:

D:\> sq4fix                                                                     
                                                                               

There are no parameters to worry about and SQ4FIX will do error checking. The README for GA is being updated to inform the user about this program and how to use it.