First post, by tcostin
Hello:
long story short, I wished to run an old DOS TSR called Game Wizard. I downloaded a (shareware) copy from this site: http://www.dosmuseum.com/pages/view.php?ref=5 … 24&archive=0&k=
Note that this is GW 2.50; an older version (2.20) caused DosBox to go into an infinite loop right upon startup.
Anyway, v2.50 of the program seemed to work. It's a TSR that you break into as your game is running in order to make edits to memory realtime. Breaking into GW worked, I could use its functionality alright, but whenever I tried to return to what was running before (even command prompt), DosBox would crash.....
I think I have tracked down the issue; GW seems to pause/resume sound coming from the SB (which is a good idea if you're breaking in the middle of sound effects), but doesn't check very carefully the state of the SB (or is buggy or interacts poorly with emulated SB). When returning from GW, one of the last things it does is issue a resume command which is responsible for the crash.
After getting the DosBox code to compile on Windows, I traced down the crash and made the following patch:
DosBox 0.74 --- sblaster.cpp
function DSP_DoCommand(), line 920:
===ORIGINAL===
case 0xd4: /* Continue DMA 8-bit*/
if (sb.mode==MODE_DMA_PAUSE) {
sb.mode=MODE_DMA_MASKED;
sb.dma.chan->Register_Callback(DSP_DMA_CallBack);
}
break;
===PATCHED===
case 0xd4: /* Continue DMA 8-bit*/
if (sb.mode==MODE_DMA_PAUSE) {
sb.mode=MODE_DMA_MASKED;
if (sb.dma.chan != NULL) sb.dma.chan->Register_Callback(DSP_DMA_CallBack);
}
break;
Hope this is useful...
-TC