Advanced Gravis

My experience with the Gravis UltraSound

(guest post from Frank Sapone)

gravlogo

Sometime around 1992, Advanced Gravis teamed up with Forte/E-Tek to design a wavetable synthesis card around the ICS11614 IC. This card offered 32 channels, 14 channels @ 44khz and more channels would start dividing down in sound quality until you got to 32 channels at ~19khz. The mixing was done on-board which saved precious CPU cycles in the days of 286 and 386. The card originally advertised sound blaster support, but reading usenet posts from these days you can tell a lot of people were agitated that it was through a TSR, SBOS, that had hit or miss support and sometimes sounded better or worse than the FM because SBOS mixed it all into stereo.

I found out about these mythical cards a few years ago. A buddy went along with me to the local flea market out in the country-side of York, PA and we found a fellow who was trying to sell some P2-era laptops with USB wifi dongles and Windows XP loaded laptops for $100(!). I started talking with this gentleman and eventually convinced him to let me take a trip to his house and see what other stuff he may have. I took home a healthy share of various SB clones (mostly of the ESS variety, but a few Yamahas were in there as well) and some S3 Virge cards all for free. I built a computer with some of these parts, enough to play Doom and Heretic and started hitting up vogons and was reading some fanboism on the Gravis UltraSound cards. Where did I hear that name before? Oh, yes, in my mid-late 90s days of Doom I remember the setup.exe listed this card as an option and so did Duke3D and some other games I used to play quite frequently.

I did a lot of research on the card. Reading about how it used wavetable synthesis instead of FM. Basically, you can upload real MIDI-like patches to the cards RAM to get exceptional sound quality out of these older games and this also opens the window to creating your own patches if you wanted to tweak the sound of the songs.

Ultrasound Classic

Ultrasound Classic

Fast forward a couple of years later, I finally broke down and bought a GUS Classic v2.4 on ebay for $60. Unfortunately, it didn’t work out of the box. Failing to detect the card every single time, even if I removed everything from the computer and even disabled everything in the BIOS, including the FDC, Serial and Parallel ports. I got a refund, but a few days later I noticed some resistor had a broken leg and I soldered this and it started working! Immediately I loaded up Doom and the music sounded so much better than my SB or any of it’s clones.

Doom

Doom

Enjoying the sound, I started loading up other titles I played a lot back then that I remembered supporting this card: Descent, Heretic, Duke3D, Quake 1. I got a taste of some infamous Gravis issues when it came time to load up any Build engine title (Duke3D, Blood, SW, etc.) and Rise of the Triad. The music sounded great, but the digital voices had some weird clicks and somewhat static-like sound at the end of their samples. More research revealed that the GUS was known for this with those particular titles, and a ìsimpleî workaround is to get an SB card coexisting in the same box.

I amazingly got the SB and GUS living in the same machine after a few hours of fiddling around with some jumpers and tweaking autoexec.bat. Originally, I used one of those stereo to stereo cables. Running line out of the SB to the line in of the GUS, but the GUS’ mixer ìcolouredî the sound of the line in and mic in with entirely way too much bass. I made a cable that ran from line out of the SB16 to the CD-In of the GUS and it sounded excellent. I even found a way to keep my SB working in Win98SE this since it was known that the GUS had shitty support for the Win9x family (more on this later).

There are some shortcomings of the classic cards, the main being the Win9x drivers have no DirectSound support, only software emulation and usenet says that this had unpredictable results. Another annoying thing was no volume mixer(!), they expected you to hook this card up to powered speakers or ideally an amplifier. The v3.7 revision has a volume mixer but had problems with flip flopped stereo (whoops!) and v3.74 (the final GUS classic) fixed this problem. For those curious, for the most part revision versions don’t have bug fixes in their firmware, they just started finding ways to shrink the number of ICs on board. The exception to this was the v3.7 and v3.74 adding the volume mixer. GUS MAX v1.7 apparently had some sort of DMA or IRQ bug (forget these specifics) according to usenet, v1.8 fixed this problem and v2.1 is a v1.8 but lower component count and everything is now soldered on instead of sockets.

Other gotchas include: sound clicking and corruption on High-DMA, sometimes you can resolve this by setting 16-bit delay transactions but not all motherboards have this option and some just won’t work either way. Doubling up on the baseport, i.e. 220 also steals 320. Gravis claims you need to set the GUS and SB Emu IRQ to different values but they can be the same usually and have no problems. Same with the Playback and Recording DMA, unless you want full-duplex. If you’re just gaming it’s irrelevant.

Ultrasound MAX box

Ultrasound MAX box

At some point, I was hungry for more, wanting to try out the later GUS models like the MAX, ACE, and PnP. Particularly the GUS MAX because it included the volume mixer, had a special Crystal CODEC chip for 16-bit recording (was released late in GUS classics life as a daughterboard but it is very rare), the CODEC chip allowed for Windows Sound System, but the port is non-standard (gotcha!) and a special SBOS, MAXSBOS, takes advantage of the CODEC chip as well, and finally some CD-ROM support on board but I was uninterested in that since most of you know how much of a nightmare it is to get that shit working properly. Back to ebay, found a fellow selling a boxed GUS MAX for $100. I didn’t have the total cash on me at the time and it was buy-it-now. Considering the card was fairly hard to find, at least from what I researched at the time, I contacted the guy about paying half now and the other half in a few days. He agreed, and asked that I send it as a gift via paypal. Long story short, he never sent it, stopped replying to my emails and since it was sent as a ìgiftî I had no recourse through ebay or paypal. Learn that lesson when dealing online everyone! Always offer to pay a little extra for the processing fee if they claim this is why they want it set as a gift!

Bummed out, I found another classic, this time a v2.7 and well what do you know, this one doesn’t work either! Tried for 3 days all kinds of things. Cleaning the entire board off with electrical contact cleaner, reseating the contacts on the socketed chips, reflowing solder joints, replacing capacitors, but nothing ever brought it back to life. A year or two later, I found another GUS MAX for sale on ebay, purchased it immediately and it did not work. I tried it in 3 separate PCs and got no results. It always just said baseport UNAVAIALBLE FOR ULTRASOUND for whatever baseport I set it to. However, it wasn’t a total loss. On a whim, I took the GF1 IC from this MAX and placed it in the broken v2.7 classic and it made this card live again.

I setup daily searches for ebay to alert me immediately of any GUS developments appearing. If you’re new to the whole Gravis thing you’ll see theres a guy in Hungary who always has overpriced ones for sale and is unwilling to budge on price. If you check out his feedback you will see that he has been selling GUS cards of all flavours since at least 2010(!) almost monthly. Months and months went by with no MAX showing up and when one finally did it went for way more than I was willing to spend especially with the track record of 2 (almost 3) DOA cards that required soldering and intense cleaning to live again. If you’re planning to experiment with GUS cards be sure the card was tested recently, if you get the typical responses of not having an ISA PC around any more to test it, get the card cheaply and be certain that they will honour the return policy if it does not work.

MAX 2.1 board

MAX 2.1 board

Finally, after a couple of years I did some networking and found some fellow demosceners with GUS MAXes for the price of shipping. I’m waiting on my v2.1, but received two v1.8s. The first one did not work at all, would never detect properly. Tried the usual suspects of cleaning it up, reseating, rocking the caps a little back and forth to make sure everything was making contact, etc. The second one, actually detected the card saying UNAVAIALBLE FOR ULTRASOUND yet again, but this time after I disabled my FDC, Serial and Parallel ports it worked! Excited, I loaded up the usual games and all worked great and the CODEC chip’s mixer program worked properly. Now, I was read to add the SB16 back in but now no matter what base port I would select it always complained it was unavailable, yet again! At some point I got it working sort of but then it wouldn’t let me set any DMA properly in the setup utility. Enough of this nonsense, I thought, I have a few socket 7 towers not being used.

I popped it in to a P1 166MHZ living by itself. Now we can try out that special MAXSBOS!… and unfortunately it doesn’t sound better than SBOS, in fact it sounds worse! And yes, I tried a separate IRQ for SB emulation and low-DMA, high-DMA, making sure the CD-ROM baseport doesn’t conflict with GUS’ baseport and I have 1MB RAM onboard that is 70ns.

At this point I should stop and mention a few other gotchas on these MAX cards. The GUS ìdoublesî up on the baseport. i.e. if you set 220 it will also grab 320. The CD-ROM baseport on these cards will be set, even if you disable the rest of the CD-ROM interface. So make sure you don’t have the CD-ROM set to the same or else it will always complain it’s unavailable for ultrasound in the setup utility. And yes, you just have to remove the IRQ and DMA jumpers on the card and put the jumper on the CD-ROM disable. Panasonic enable jumper appears to make no difference regards to enabling parts of the CD-ROM circuit, unless of course you planned on using the CD-ROM interface. I’m assuming most of you out there won’t be. You also need 70ns rated (or better) 256kx4 chip. The MAX has 512kb RAM on board but you NEED 1MB on any GUS card to get great results or live with missing instruments and all kinds of funnies happening to you. The CODEC also uses some baseport, but this is software selectable so you should have no serious problem there.

Now I go on to try this bad boy out in Win98SE with the special DirectSound enabled drivers. When you install the Gravis GF1 (non PnP) series drivers it will tell you that you have to install the card as a non-PnP device and restart, then manually set the DMA, IRQ, Baseport in the advanced properties for the card. This is fairly trivial if you’re used to DOS, but for newbies just keep it in mind. Another gotcha here is that the drivers will blank out your SET ULTRASND= and SET ULTRA16(for MAX users)= in your autoexec.bat after the reboot so write these values down. I believe this was done on purpose since most people auto loaded SBOS or MEGAEM (the other SB emulator they had) and this conflicts with Windows big time. The drivers do work and the sound quality is fine, but the biggest issue I’ve had is that sndvol32.exe never loads now. You can not adjust the volume or disable the mic-in and line-in and you really should as every card I’ve owned the recording inputs pick up a lot of interference. Moving the mouse and the HDD just all come through your speakers. I haven’t tried Windows 95 yet, maybe the mixer works okay there? At some point I’ll post an update and let internet-land know.

Gravis Ultrasound ACE

Gravis Ultrasound ACE

SoundBuddy 1.0 prototype

SoundBuddy 1.0 prototype

I don’t own these cards, but will mention them for clarity. The GUS ACE (internally referred to as the Sound Buddy) is simply a GUS Classic without the recording capabilities or the gameport. It was meant to be a supplement to a sound blaster or similar clone. You simply run the line out of this card to your line in of your SB16 (or maybe it’s vice-versa? Correct me if need be). You have to update your ultrinit to the last known version because there’s a bug in the official drivers(!) that does not disable the nonexistant gameport and it will steal your other sound cards gameport cause conflicts. For those who need the fix, GUS0047.ZIP. At one point, Gravis struck a deal with AMD to make an enhanced chip, called the InterWave which had GUS support and allows 8MB of samples (16MB apparently if you solder some stuff, but I have yet to see any pictures or even a textfile on this hack). Pouet.net sceners say that it has problems with long loops so some demos may sound wrong. IWSBOS is based from MAXSBOS so I assume it probably sounds just as bad compared to the final revision of SBOS. Usenet posts of users crying that the Win9x drivers are awful too, but again, I don’t own this card so I’m only just passing on what I have heard. Feel free to prove me wrong in the comments.

ViperMAX board

ViperMAX board

Other weirdo cards included the Synergy ViperMAX, which is basically a GUS with an ESS chip for SB compatibility. In theory, this means you should get decent Win9x support through the ESS. These cards are kind of rare now. I have yet to see one appear in the US. But, fellow Pouet.net users have found them across the EU so maybe they are common there. There were some other OEM variants, most similar in design to the ViperMAX. Check out Wikipedia for information on those if you really must know more.

My final thoughts on this long (still not quite yet over) journey is that the GUS Classic is a fun card for breathing some life into the soundtracks of older id and apogee titles with a few silly hang ups on getting it to work initially. The MAX did not live up to its mythical hype with the mixer, special CODEC chip, and Win9x drivers. These cards appear to be very delicate because I have had 3 out of 5 cards DOA and required fooling around to get them to work again. Even though 2 MAX cards still do not work no matter what I’ve tried. Expect to buy more than one to get a working card. The ideal setup would be to get a GUS Classic or ACE and get that to coexist with an SB or compatible clone. I can’t comment on the ViperMAX as I have not located one yet.

Gravis Ultrasound MAX 2.3 prototype

Gravis Ultrasound MAX 2.3 prototype

As much frustration these cards have brought me, they still sound nice when they work! But, it really does make a lot of sense why they are rare today. It is quite aggravating to get one working properly!

All of this would be useless without some samples of what a GUS sounds like, all samples were recorded at 44,100Hz, …

DOOM e1m1


DOOM e2m6


DOOM e2m8


DOOM e3m1


DOOM e3m2

DOOM over TCP/IP

I never played DOOM over the internet, as by the time I had a proper connection and fast enough machine, Quake was all the rage, and all I had was this crappy cable modem that used a dialup connection for the upstream.

If I wanted to play multiplayer I’d wind up dong a LAN party anyways.  We were living in the era of $20 NE2000 clones, and 56kb modems, with the occasional 1mbit down cable.

Anyways I recently saw The Internet DOOM Client/Server System v0.01, which was a simple TCP/IP DOOM matchmaking server that includes source the client and server.  This eventually grew up into iDOOM.  It looked simple enough and it does mention that it is based on the opensource IPX component of DOOM.  I’d never looked at it so taking a peek I saw this:

DOOMNET.C

// hook an interrupt vector
p= CheckParm (“-vector”);

if (p)
{
doomcom.intnum = sscanf (“0x%x”,_argv[p+1]);
}
else
{
for (doomcom.intnum = 0×60 ; doomcom.intnum <= 0×66 ; doomcom.intnum++)
{
vector = *(char far * far *)(doomcom.intnum*4);
if ( !vector || *vector == 0xcf )
break;
}
if (doomcom.intnum == 0×67)
{
printf (“Warning: no NULL or iret interrupt vectors were found in the 0×60 to 0×66\n”
“range. You can specify a vector with the -vector 0x<num> parameter.\n”);
doomcom.intnum = 0×66;
}
}
printf (“Communicating with interupt vector 0x%x\n”,doomcom.intnum);

olddoomvect = getvect (doomcom.intnum);
setvect (doomcom.intnum,NetISR);
vectorishooked = 1;

IPXSETUP.C

/*
=============
=
= NetISR
=
=============
*/

void interrupt NetISR (void)
{
if (doomcom.command == CMD_SEND)
{
localtime++;
SendPacket (doomcom.remotenode);
}
else if (doomcom.command == CMD_GET)
{
GetPacket ();
}
}

So for those who missed it, the IPX client just hooks in as a TSR, which doom calls down to, and then either sends or receives data.  Now I wish I’d looked earlier I didn’t realize that it was something so simple.

So I thought it’d be interesting to watch it in action.  Now it compiles on modern Linux, but it doesn’t work.  I don’t know why, I didn’t investigate much.  Instead I opted for a server from the era, UnixWare.  Oddly enough that works (and so does OS X).  I fired up GNS3, put the server on one network, and added two clients on separate TCP/IP networks.  I went ahead with DOOM v1.2.

doom tcpipThe clients are able to connect to the server, and once the both register, they drop out of the server, and pass all the command line arguments to TCPSETUP, and away they go.
doom tcpip 2Now it’s worth noting that back in these days people use registered addresses.  None of this will work with NAT as it expects 1:1 UDP port mappings.  The clients are all equal peers.

So could a newer driver be written to support a server, and work behind NAT? Yeah I don’t see why not.  Is there any point in doing so?

Probably not.

In 2004 it was hard enough trying to do a deathmatch online, but 2014?.. 20 years too late.

But it’s kind of interesting how convoluted the networking setup had to be for a 32bit protected mode program calling down to a real mode TCP/IP TSR, which in turn called the network driver.  It’s amazing it even works.

 

Slackware 14.1 is released!

A good friend mentioned that Slackware 14.1 was just released.

So I thought I’d take this time to instead install SLS 0.98-1 on Qemu.

Now this was the first version of Linux that I actually started to use.  The 0.11 stuff was really a pain to install Minix then copy over enough linux to get it working.  Instead SLS gave us a more usable distro to be installed on a machine with nothing.  And thanks to cd.textfiles.com locating a download set was trivial.

Back in late 1992 I downloaded the zip files from CCUG at a blistering 2400 baud.  I remember it took a week to get the A, B and C series.  And I had to get a new box of 5 1/4″ High Density diskettes for the install (and another two for my MS-DOS / Windows 3.1 backup).

And just as back then, these zip files are missing files.  INSTALL.END is missing from the A & B sets, which confuses the installer.  The kernel source is linked to /usr1 which by default doesn’t exist and will cause that part to fail unless you use a virtual terminal (alt+f2) to remove /root/usr/src/linux so the installer will create the path itself after the installation of the A set.

SLS 0.98-1

SLS 0.98-1

Once it’s installed, it is pretty bare.  vi, more, less, grep, and make are not in the install set, so it’s kind of difficult to move around.  Emacs is there if you want it.  As ultra primitive as this set is, it does install on an empty machine, which for the time was a big accomplishment.

One cool feature of this installset is that you aren’t tied to Minix’s filesystem, but you can use the new and exciting extfs, or Extended File system.

While the default kernel doesn’t see my emulated ne2000, as at this point the only supported NIC is the Western Digital 8003.

wd8003

wd8003

As mentioned in we.c it was heavily based on the 386bsd code, although Linux used it’s own TCP/IP implementation, and not importing the Net/1 code.

I would imagine there are patches out there that’ll  no doubt add in NE2000 support.

Also included was a very primative dosemu version 0.3, that can sort of run some MS-DOS programs.

dosemu on linux

DOSEMU 0.3

More complicated stuff like Qbasic will crash it out.  Although with a bit of work I did get MS-DOS 5 to boot from it’s “virtual hard disk”.  It really is more so amazing it works as well as it does at this point.

For anyone feeling crazy, here is my installed disk image, and here is the ‘fixed’ install diskettes.

Using IDE hard disks on VMWare ESXi 5.5

I’m sure this applies to other versions as well.

VMWare stores the configs, and files on the UNIX file system, which you have to edit by hand.  You can’t do this in the UI, as VMWare tries to be SCSI only.  But if you manually edit the files, you too can enjoy a virtual IDE disk.

You need to enable SSH access to the ESX server, or do this change on the console.  Configs live in:

/vmfs/volumes/<storage group name>/<virtual machine>/

So for example, mine is:

/vmfs/volumes/datastore1/UnixWare 7.1.1/

First, edit the .vmdk file.  You are looking for the line:

ddb.adapterType = “buslogic”

And you change the buslogic to ide like this:

# Extent description

RW 16777216 VMFS “UnixWare 7.1.1-flat.vmdk”

# The Disk Data Base
#DDB

ddb.adapterType = “ide”
ddb.geometry.cylinders = “1044″
ddb.geometry.heads = “255″
ddb.geometry.sectors = “63″
ddb.longContentID = “8f535bb60df8d73a86c24853fffffff

The next thing is to alter the vmx file.  By default the hard disk will be on scsi0 and you’ll see something like this:

scsi0.present = “TRUE”
scsi0:0.deviceType = “scsi-hardDisk”
scsi0:0.fileName = “UnixWare 7.1.1.vmdk”
scsi0:0.present = “TRUE”

And what we do is rename the scsi0:0 to ide0:0

ide0:0.present = “TRUE”
ide0:0.deviceType = “disk”
ide0:0.fileName = “UnixWare 7.1.1.vmdk”
scsi0:0.present = “TRUE”

And you should be good to go.  The other (much easier) alternative is to try to use the legacy OS/2 profile as it’ll install an IDE disk by default.

IDE hard disk on VMWare ESX

IDE hard disk on VMWare ESX

Yay!

You should check out sanbarrow’s guide to more options you can configure in your VMX file.

OpenWatcom v2

I know what you are thinking, wouldn’t it be great if you could create MS-DOS executables directly from a Win64 desktop with no MS-DOS needed?

Well, I just found out about this unofficial Open Watcom v2 project that targets the usual suspects, allows you to compile from Win64!

Hello World!

Hello World!

Some of the features of this fork include:

  • New 2-phase build system, OW can be build by platform native C/C++ compiler or by itself
  • Code generator properly initialize pointers by DLL symbol addresses
  • DOS version of tools now support long file names (LFN) if appropriate LFN driver is loaded by DOS
  • OW is ported to 64-bit hosts (WIN64, Linux X64)
  • Librarian support X64 CPU object modules and libraries
  • RDOS 32-bit C run-time compact memory model libraries are fixed
  • Resource compiler and Resource editors support WIN64 executables
  • OW text editor is now self containing, it can be used as standalone tool without any requirements for any additional files or configuration
  • Broken C++ compiler pre-compiled header template support is fixed
  • Many C++ compiler crashes are fixed
  • Debugger has no length limit for any used environment variable

Binaries are available on sourceforge.

So how does it fare?  I thought I’d take the old Wolf4GW, and compile it with this toolset.  The first hurdle I hit was this fun feature:

  • The C++ compiler now treats warning W737, implicit conversion of pointers to integral types of same size, as an error.

Which is an integral part of wl_menu.cpp .  So this was somewhat problematic, until I just commented out that block, and while I was expecting no working keyboard, I’m able to play, and load/save games…. Even the boss key works.

Wolf4GW

Wolf4GW

So with the W737 taken care of, I have to say this thing compiles FAST.  Incredibly FAST.  If for some reason you have to build 16bit or 32bit anything, you should look at a 64bit tool chain, well assuming you have a 64bit computer by now.

If anyone want’s to build their own Wolf4GW with the newer OpenWatcom, my source drop is here.

Setting up a Co-op QuakeWorld Server

I went with MVDsv, which I could just unpack the i386 executable on my VPS, allowing me to go ahead with my lovingly stock id1 pak files.  MVDsv requires  just paste this into the console, or add it to the server.cfg

sv_progsname spprogs
deathmatch 0
coop 1
map start

MVDsv also requires spprogs.dat.  I forget where I got mine, but if you need it, you can use mine.

And firing it up..

Added packfile ./id1/pak0.pak (339 files)
Added packfile ./id1/pak1.pak (85 files)
IP address 62.113.213.65:27500
UDP Initialized
Initialized default mod messages.
Total: 60 messages.
16.0 megabyte heap
MVDSV 0.27 rev.643 (l), build 2772
Build date: Jul 24 2007, 19:53:52

MVDSV Project home page: http://mvdsv.sourceforge.net

======== QuakeWorld Initialized ========
execing server.cfg
couldn’t open accounts
VM_Load: “spprogs”
Client MS-dos connected
Couldn’t download skins/base.pcx to MS-dos
MS-dos entered the game

Now when I jump in I get monsters!

Co-Op QuakeWorld!

Co-Op QuakeWorld!

Today marks 20 years of FreeDOS!

From the original announcement:

A few months ago, I posted articles relating to starting a public
domain version of DOS.  The general support for this at the time was
strong, and many people agreed with the statement, “start writing!”
So, I have…

And how does it measure up?  Well the current release version is v1.1 and I tested it in both Qemu and VMWare Player.  First the installation process is SLOW.  Extraordinarily slow.  I really have no idea why, but 10+ minute installs in either environment were the best I could do.  The one thing I did do on installation was to disable a FAT32 drive, defaulting to the older FAT16 file-system.  Why? well because ..

Stacker 4 on FreeDOS

Stacker 4 on FreeDOS

Once installed, I thought I’d torture the environment, and install Stacker 4.0.  The installation went ok (I modified my system to boot up with option #3 as the default (Load FreeDOS including XMGR XMS-memory driver).  The installation went smooth, I setup a 300MB compressed drive, rebooted and the drive was not available.  I think this was because MS-DOS uses a config.sys file, and FreeDOS uses fdconfig.sys.  Although at the same time the autoexec.bat file was not modified as I had requested.  So I ran ‘config.exe’ and it walked me though additions to the c:\stacker.ini and what needed to be added to the (fd)config.sys (device=c:\stacker\stacker.com).  I did that, and rebooted, and I had my compressed D drive.

Then I installed DOOM v1.1 onto the compressed drive, and it runs perfectly fine! (is a screen shot really necessary?)  Seeing that DOS4G/W works (I also tested Descent, and Wolf4GW).  Oddly enough Wolf3d just hangs at a black screen, and Descent runs too fast although I think both issues are more specific to the games running on Qemu/VMWare than FreeDOS.  And if you want to skip the lengthy install, you can download my stock VMDK right here.

Seeing that 32bit DOS extenders seem OK, I thought I’d try TradeWars 2002 with it’s 16bit DPMI version, and it ran fine as well.

TradeWars on FreeDOS

TradeWars on FreeDOS

Now when it came to multitasking, Windows 3.0 won’t work outside of realmode.  Windows 3.1 however will run in standard mode.  386 Enhanced mode still doesn’t work correctly (is that even an issue)… So to use this for a BBS you’d need a network and some nodes… maybe fun for another day.  Excel 3.0c works under Windows 3.1 Standard mode, while Word 2.0c does not.

Another weird thing is that the FreeDOS partitioning program (fdisk) chooses a NON-DOS partition type by default, so if you were expecting to dualboot between MS-DOS and FreeDOS I think you need to install MS-DOS first, although I guess in the age of virtual machines does it matter that much?

For basic MS-DOS program compatibility it seems pretty much there, even with weird stuff like stacker.

Just how ‘original’ is the Ultimate Doom on steam?

I don’t own any stock in iD(bethesda), or let alone steam.  This is just a small research thing so I’m not shilling.  Also Ultimate DOOM, is on sale, although not for long.  I thought it would be interesting to compare the version on steam with the original version of Doom. Now backtracking, Ultimate DOOM, was a boxed in version of DOOM, that included all the patches, and added in an extra level to the classic DOOM 1, “thy flesh consumed“.

Ultimate DOOM

Ultimate DOOM

And this is the version of DOOM that is for sale on steam.  Now the nice thing about Ultimate DOOM, is that it was released as a patch to registered users of DOOM so that they too could upgrade to Ultimate DOOM, and enjoy the new levels.  So that also means that the enthusiasts thankfully made a patch to regress Ultimate DOOM to version 1.1 First we start with Ultimate DOOM, which can be found in your  steam directory.  Mine is “C:\Program Files (x86)\Steam\SteamApps\common\Ultimate Doom\base”, but yours will be similar. So the first step would be to copy this directory to somewhere else, as we are going to run some patches against it to alter the level as we go.  I’m going to use DOSBox to do all of this.  Also in my setup of DOSBox, I mount my c:\dos directory as c:\ to make life easier for me.  So on my windows side, I copy Ultimate Doom\base into c:\dos\temp\udoom.  That way when I fire up DOSBox, I see it under c:\temp\udoom. The only files I’m going to use from steam are:

03/12/2014 12:27 AM 715,493 DOOM.EXE
03/12/2014 12:27 AM 12,408,292 DOOM.WAD

Noticeably absent is SETUP.EXE.  I have no idea why it is missing, so I figured I’d provide a collection of the various setup programs.  This is the best way to change sound card settings, and alter keyboard bindings.  Why it was omitted, well I have no idea. You can download my combined archive of doom setup programs here.  Place the utlimate doom setup into the directory. Then download & extract downgrd.zip, into your dosbox doom directory (c:\dos\temp\udoom), then fireup dosbox and run patch.bat .  The downgrade uses a shareware version of MDIFF, so it will delay for 5 seconds every time it’s used (which is a few times) so this will take a little while.

Downgrade to v1.1

Downgrade to v1.1

Now looking around the directory we have:

06/30/2014 09:57 AM 803 DEFAULT.CFG
06/30/2014 09:57 AM 579,187 DOOM.EXE
06/30/2014 09:59 AM 10,396,254 DOOM.WAD
06/30/2014 09:57 AM 2,158 DOWNGRAD.TXT
06/30/2014 09:57 AM 7,527 LICENSE.DOC
06/30/2014 09:57 AM 20,850 README.EXE
06/30/2014 09:57 AM 68,923 SETUP.EXE
06/30/2014 09:57 AM 627,155 U1_94.EXE
06/30/2014 09:57 AM 218 USE1_94.BAT
06/30/2014 09:57 AM 190 USE1_95.BAT

Now how does this compare to the registered version of DOOM 1.1?  Well I have a copy, and after installing it, we can compare.

10/29/2013 01:26 PM 579,187 DOOM.EXE
10/29/2013 01:26 PM 10,396,254 DOOM.WAD
10/29/2013 01:26 PM 439 FILE_ID.DIZ
10/29/2013 01:26 PM 7,527 LICENSE.DOC
10/29/2013 01:26 PM 20,850 README.EXE
10/29/2013 01:26 PM 68,923 SETUP.EXE
10/29/2013 01:26 PM 627,155 U1_94.EXE
10/29/2013 01:26 PM 218 USE1_94.BAT
10/29/2013 01:26 PM 190 USE1_95.BAT

As you can see the first difference is that the original version has “FILE_ID.DIZ”, and the downgrade has a “DOWNGRAD.TXT”. Comparing the common files..

c:\dos\temp\udoom>fc /b doom.exe doom11\doom.exe Comparing files DOOM.EXE and DOOM11\DOOM.EXE FC: no differences encountered

c:\dos\temp\udoom>fc /b doom.wad doom11\doom.wad Comparing files DOOM.WAD and DOOM11\DOOM.WAD FC: no differences encountered

c:\dos\temp\udoom>fc /b license.doc doom11\license.doc Comparing files LICENSE.DOC and DOOM11\LICENSE.DOC FC: no differences encountered

c:\dos\temp\udoom>fc /b readme.exe doom11\readme.exe Comparing files README.EXE and DOOM11\README.EXE FC: no differences encountered

c:\dos\temp\udoom>fc /b SETUP.EXE doom11/SETUP.EXE Comparing files SETUP.EXE and DOOM11/SETUP.EXE FC: no differences encountered

c:\dos\temp\udoom>fc /b u1_94.exe doom11\u1_94.exe Comparing files U1_94.EXE and DOOM11\U1_94.EXE FC: no differences encountered

c:\dos\temp\udoom>fc /b use1_94.bat doom11\USE1_94.BAT Comparing files USE1_94.BAT and DOOM11\USE1_94.BAT FC: no differences encountered

c:\dos\temp\udoom>fc /b use1_95.bat doom11\USE1_95.BAT Comparing files USE1_95.BAT and DOOM11\USE1_95.BAT FC: no differences encountered

And everything looks ok.  Now FILE_ID.DIZ was a nice way back in the day of BBS’s to have a description of the file inside of the ZIP that would automatically set the description.  And the FILE_ID.DIZ from the registered version is:

████▓▒░ THIS IS PIRATED SOFTWARE! ░▒▓████ ███████████████████████████████████████████
THIS FILE IS NOT SHAREWARE — it is ILLEGAL and forbidden to upload this copyrighted software on bulletin boards. If you see this message on a BBS, please request that the Sysop remove this software IMMEDIATELY. or contact id Software @ 214-613-0132 IT IS ILLEGAL TO GET THIS FILE FROM A BBS!
███████████████████████████████████████████

Which I guess is not all that surprising.  So other than omitting this one file (which does not alter game play in the least bit) we have now taken Ultimate DOOM from steam, and reverted it to DOOM v1.1.  Now to be honest this is my favorite version, it feels faster than later versions,and for me at least it was more stable.  However as I’ve mentioned before the network play would destroy old hub based 10Mbit networks. And running DOOM, we can check the version

DOOM v1.1

DOOM v1.1

And you can see that we have downgraded Ultimate DOOM to registered DOOM v1.1 in it’s original state from December 10th, 1993. Now moving to version 1.2, you need the file dm1_2rpt.zip, which contains:

06/30/2014 09:15 AM 78,129 PATCH.EXE
06/30/2014 09:15 AM 3,053 PATCH.RTD
06/30/2014 09:15 AM 409,687 PATCH.RTP
06/30/2014 09:15 AM 272 README.PAT

Now we run patch.exe which will move our 1.1 to 1.2.

Patching DOOM to v1.2

Patching DOOM to v1.2

Once the patch is installed, we can delete the patch files, and we should have:

06/30/2014 09:57 AM 803 DEFAULT.CFG
06/30/2014 09:57 AM 2,158 DOWNGRAD.TXT
06/30/2014 09:57 AM 7,527 LICENSE.DOC
06/30/2014 10:04 AM 580,391 DOOM.EXE
06/30/2014 10:04 AM 10,399,316 DOOM.WAD
06/30/2014 10:04 AM 32,134 IPXSETUP.EXE
06/30/2014 10:04 AM 393 MODEM.CFG
06/30/2014 10:04 AM 34,386 README.EXE
06/30/2014 10:04 AM 36,567 SERSETUP.EXE
06/30/2014 10:04 AM 91,931 SETUP.EXE

And when we run DOOM we now see that it is upgraded to version 1.2!

DOOM version 1.2

DOOM version 1.2

The next version of DOOM that was widely available was v1.666.  And the patch is named dm1666rp.zip, which contains:

06/30/2014 09:24 AM 78,129 PATCH.EXE
06/30/2014 09:24 AM 2,864 PATCH.RTD
06/30/2014 09:24 AM 729,949 PATCH.RTP
06/30/2014 09:24 AM 649 PATCHIT.BAT

And this time we run ‘patchit.bat’.

Patched to 1.666

Patched to 1.666

And now we can remove the patch files.  Now when we run DOOM, we see..

DOOM v1.666

DOOM v1.666

The next version of DOOM was v1.8, and it can be patched up from v1.666 dm18rpt.zip.  Inside of this zip, is another zip, patch.zip that contains the patch files patch.exe & patch.rtp.

Upgrading to DOOM v1.8

Upgrading to DOOM v1.8

The directory is growing as well.

06/30/2014 10:09 AM 791 DEFAULT.CFG
06/30/2014 10:12 AM 6,397 DM.DOC
06/30/2014 10:12 AM 33,640 DM.EXE
06/30/2014 10:12 AM 120,201 DMFAQ66A.TXT
06/30/2014 10:12 AM 140,594 DMFAQ66B.TXT
06/30/2014 10:12 AM 76,898 DMFAQ66C.TXT
06/30/2014 10:12 AM 34,572 DMFAQ66D.TXT
06/30/2014 10:12 AM 709,865 DOOM.EXE
06/30/2014 10:12 AM 11,159,840 DOOM.WAD
06/30/2014 09:57 AM 2,158 DOWNGRAD.TXT
06/30/2014 10:12 AM 10,623 DWANGO.DOC
06/30/2014 10:12 AM 65,021 DWANGO.EXE
06/30/2014 10:12 AM 2,536 DWANGO.STR
06/30/2014 10:12 AM 4,690 HELPME.TXT
06/30/2014 10:12 AM 18,051 IPXSETUP.EXE
06/30/2014 10:12 AM 67 MODEM.CFG
06/30/2014 10:07 AM 67 MODEM.NUM
06/30/2014 10:12 AM 3,405 MODEM.STR
06/30/2014 10:12 AM 4,617 ORDER.FRM
06/30/2014 10:12 AM 21,631 README.TXT
06/30/2014 10:13 AM 20,257 SERSETUP.EXE
06/30/2014 10:13 AM 45,884 SETUP.EXE

And running DOOM, we can now verify that we are running version 1.8

DOOM v1.8

DOOM v1.8

The next version of DOOM was version 1.9.  The upgrade patch from v1.8 to v1.9 was called 18_19drp.exe.  This is a SFX unpacking exe, so you’ll need to run this under DOSBox to get the patch

Yoshi SFX

Yoshi SFX

And now we can run the patch, this one is silent so don’t panic at the lack of output.

Patching from v1.8 to v1.9

Patching from v1.8 to v1.9

And now when we run DOOM we can verify that we are running v1.9

DOOM v1.9

DOOM v1.9

And the directory now looks like this:

06/30/2014 10:26 AM 769 DEFAULT.CFG
06/30/2014 10:12 AM 6,397 DM.DOC
06/30/2014 10:12 AM 33,640 DM.EXE
06/30/2014 10:12 AM 120,201 DMFAQ66A.TXT
06/30/2014 10:12 AM 140,594 DMFAQ66B.TXT
06/30/2014 10:12 AM 76,898 DMFAQ66C.TXT
06/30/2014 10:12 AM 34,572 DMFAQ66D.TXT
06/30/2014 10:23 AM 709,905 DOOM.EXE
06/30/2014 10:24 AM 11,159,840 DOOM.WAD
06/30/2014 09:57 AM 2,158 DOWNGRAD.TXT
06/30/2014 10:12 AM 10,623 DWANGO.DOC
06/30/2014 10:12 AM 65,021 DWANGO.EXE
06/30/2014 10:12 AM 2,536 DWANGO.STR
06/30/2014 10:12 AM 4,690 HELPME.TXT
06/30/2014 10:12 AM 18,051 IPXSETUP.EXE
06/30/2014 10:12 AM 67 MODEM.CFG
06/30/2014 10:07 AM 67 MODEM.NUM
06/30/2014 10:12 AM 3,405 MODEM.STR
06/30/2014 10:12 AM 4,617 ORDER.FRM
06/30/2014 10:24 AM 21,631 README.TXT
06/30/2014 10:24 AM 20,257 SERSETUP.EXE
06/30/2014 10:13 AM 45,884 SETUP.EXE

Now comes the final patch, DOOM v1.9 to Ultimate DOOM, 19_udpat.exe.  And just like before it too as a SFX patch, which you have to run under DOSBox.

Upgrading v1.9 to Ultimate DOOM

Upgrading v1.9 to Ultimate DOOM

Deleting the patches, we are now left with:

06/30/2014 10:29 AM 769 DEFAULT.CFG
06/30/2014 10:12 AM 6,397 DM.DOC
06/30/2014 10:30 AM 20,937 DM.EXE
06/30/2014 10:12 AM 120,201 DMFAQ66A.TXT
06/30/2014 10:12 AM 140,594 DMFAQ66B.TXT
06/30/2014 10:12 AM 76,898 DMFAQ66C.TXT
06/30/2014 10:12 AM 34,572 DMFAQ66D.TXT
06/30/2014 10:30 AM 715,493 DOOM.EXE
06/30/2014 10:31 AM 12,408,292 DOOM.WAD
06/30/2014 09:57 AM 2,158 DOWNGRAD.TXT
06/30/2014 10:12 AM 10,623 DWANGO.DOC
06/30/2014 10:31 AM 73,638 DWANGO.EXE
06/30/2014 10:31 AM 255 DWANGO.SRV
06/30/2014 10:12 AM 2,536 DWANGO.STR
06/30/2014 10:31 AM 4,689 HELPME.TXT
06/30/2014 10:12 AM 18,051 IPXSETUP.EXE
06/30/2014 10:12 AM 67 MODEM.CFG
06/30/2014 10:07 AM 67 MODEM.NUM
06/30/2014 10:12 AM 3,405 MODEM.STR
06/30/2014 10:12 AM 4,617 ORDER.FRM
06/30/2014 10:31 AM 21,989 README.TXT
06/30/2014 10:24 AM 20,257 SERSETUP.EXE
06/30/2014 10:31 AM 46,665 SETUP.EXE

Which when compared with what was sold on steam:

03/12/2014 12:27 AM 243 AUTHORS.txt
03/12/2014 12:27 AM 18,332 COPYING.txt
03/12/2014 12:27 AM 12,408,292 d.WAD
06/30/2014 08:30 AM 819 DEFAULT.CFG
03/12/2014 12:27 AM 715,493 DOOM.EXE
03/12/2014 12:27 AM 12,408,292 DOOM.WAD
03/12/2014 12:27 AM 989,672 dosbox-0.71.tar.gz
03/12/2014 12:27 AM 7,214 dosbox.conf
03/12/2014 12:27 AM 3,200,000 dosbox.exe
03/12/2014 12:27 AM 3,018 INSTALL.txt
03/12/2014 12:27 AM 771 MOUSE.CFG
03/12/2014 12:27 AM 23,574 NEWS.txt
03/12/2014 12:27 AM 47,035 README.txt
03/12/2014 12:27 AM 331,776 SDL.dll
03/12/2014 12:27 AM 13,312 SDL_net.dll
03/12/2014 12:27 AM 874 THANKS.txt
03/12/2014 12:27 AM 1,139 ultimate.conf
03/12/2014 12:27 AM 1,157 ultimatem.conf
03/12/2014 12:27 AM 35,296 uninstall.exe

Which as you can see the only files that really made the cut were the wad and the doom executable.  I don’t know why they omitted the setup program, but that’s easy enough to fix.  And running our patched up executable:

Ultimate DOOM

Ultimate DOOM

And as we can see, the extra level ‘thy flesh consumed’ is now available!

Ultimate DOOM level select

Ultimate DOOM level select

And finally to verify the steam wad/exe:

C:\dos\temp\udoom>fc /b doom.exe “c:\Program Files (x86)\Steam\Stea mApps\common\Ultimate Doom\base\DOOM.EXE” Comparing files DOOM.EXE and C:\PROGRAM FILES (X86)\STEAM\STEAMAPPS\COMMON\ULTIM ATE DOOM\BASE\DOOM.EXE FC: no differences encountered

C:\dos\temp\udoom>fc /b doom.wad “c:\Program Files (x86)\Steam\Stea mApps\common\Ultimate Doom\base\DOOM.wad” Comparing files DOOM.WAD and C:\PROGRAM FILES (X86)\STEAM\STEAMAPPS\COMMON\ULTIM ATE DOOM\BASE\DOOM.WAD FC: no differences encountered

So there we go, a full round trip from Ultimate DOOM, v1.1, v1.2, v1.666, v1.8, v1.9 and back to Ultimate DOOM!

UPDATE!

While looking around I noticed that the steam version of DOOM also only uses the Adlib! for music.  But DOOM really does have much better MIDI music.

Adlib. really.

Adlib. really.

Well one of the great things we can do with a setup program, and the WAD/DOOM.EXE we copied out of steam is that we can run it with a newer version of DOSBox, say version 0.74 where the General MIDI actually works!  So go ahead, and run setup, and change the music card to “General MIDI”.

Change it to General MIDI

Change it to General MIDI

Next it’ll give a wide range of ports, I used 330.

Port 330!

Port 330!

Now when you save the config, and re-launch DOOM you can experience the music without the major pain of setting up the UltraSound.  And General MIDI is available in every version of DOOM as well.

Dealing with CopyQM file format

CopyQM

CopyQM

So I had a few disk images in the CopyQM formwat, and trying to get an emulator to output them back to a disk image is well.. really trying.  Then as luck would have it, I stumbled onto the program read_cqm.c and it does exactly what it says it’ll do which is read the CopyQM disk images, and then output them into a raw format.