Well I’ve been looking for a way to get some audio out of Quake for NeXTSTEP… and it’s incredibly complicated. I found some ‘smallish’ program for the m68k black hardware that is a MOD player, modPlayer 2.5 which also included source!
However, for me I can’t run it as the monitor to my cube is busted… But I was able to compile it to verify the source ‘works’. I then built it on my white box (P4 2.4Ghz 1GB of ram, and a real soundblaster 16!) and, after removing the reference to the decrunch routine it produced.. noise, and lots of it. But I did feel like I was getting *somewhere*.
I figure the main reason it’s exploding is that the m68k port uses the same CPU as the Amiga for these MOD files, so no doubt there is some bit flipping needed to go from big endian to little endian, but I know *nothing* about the MOD format.. So after a quick google search on basic mod players, I found qmod, a module player written in Quick Basic!!
So I looked around for a copy of Quick Basic 4.5, and tried to build the program, and it was all crash & burn.
At work we have a copy of PDS, the Professional Development System, also known as Basic 7.1 .. This thing is still useful, it will target OS/2 so you can write these massive programs (and run them under Windows 2000). So I figured I could use that to get the thing to build.. And I ran into the same errors about overflows, and all kinds of crap.
So the next thing to try was a copy of Visual Basic 1.0 for DOS that I got from ebay a while back.. I made images of the disks, which was fun, installed the thing to get.. the exact same errors. But I have to say VB for DOS was cool in that the output window can be in a windows (although text one) and you can trace and see at the same time… If only this was on store shelves in 1992!!!!
Anyways after looking at the command line options for VB for dos, I spotted this…
/Ah Enable huge dynamic arrays
I was surprised! So it would seem the answer was in the compiler, not the nice interface.. I just has ‘assumed’ that the interface would provide all the options.. Not so.
So I re-extracted the qmod source as I’d hopelessly altered it, then ‘fixed’ the one line that prevented compilation…
DEF SEG = VARSEG(mixarea(0))
I just removed that line, and ran the compiler & linker.. and it runs!
C:\TEMP>bc /Ah /O qmod.bas
Microsoft (R) Visual Basic (TM) for MS-DOS (R)
Compiler – Professional Edition Version 1.00
Copyright (C) 1982-1992 Microsoft Corporation. All rights reserved.
Object Filename [qmod.obj]:
Source Listing [nul.lst]:
42555 Bytes Available
33278 Bytes Free
0 Warning Error(s)
0 Severe Error(s)
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
Run File [qmod.exe]:
List File [nul.map]:
Definitions File [nul.def]:
Now this program does require a sound blaster card, and it also requires the blaster environment variable set properly… So for Virtual PC it’s simply
SET BLASTER=A220 I5 D1 H5 T4
Then run qmod and the supplied mod file, and away it goes!
And I have to say it’s really cool to listen to this thing work, only using peek/poke (ok it’s inp/out in the new syntax…) but it’s playing the soundblaster, and it sounds GREAT.
So going back to PDS & Quick Basic 4.5 they all support the /Ah flag.. So it’ll build on any of them.
So for those who aren’t inclined to play compiler games, here is a pre-built version of Qmod, and it includes a mod file.
Now for those of you who don’t have Virtual PC, or not running on Windows, the program will run on DOSBox as well!
I just found I had to tweak the cpu config a little to make it run.. This is my CPU block in the configuration file.
Now when you launch DOSBox, it’ll pick some low cpu cycle number and stay there when you launch qmod.. And it’s too low so it’ll sound horrible. So hitting CTRL+F12 will increase the cycles. Set it to 25000, and it’ll run fine. If you set it too high, CTRL+F11 will bring it down. DOSBox already sets the blaster environment variable for you, so it should ‘just work’.
As luck would have it, my whitebox is having some weird boot issue, so I can’t go any further on this… But I figure I’d share this much with the world…