Monday, June 17, 2013

Ultima VII on Real Hardware

Ultima VII - The Black Gate is, in my opinion and in many others, the greatest Computer Role Playing Game of the first half of the 1990s.  But like many Origin games (Wing Commander I & II) of this time period, it is extremely sensitive to hardware speed.  It runs faster than the ideal on my 486DX2/66 (the characters move like they are on speed).

While on my 486DX/2 66 Wing Commander I & II can be tamed by disabling the internal cache, it doesn't work with Ultima VII.  The game re-enables the internal cache in my machine if I disable it beforehand either with a software utility like ICD.EXE or through the BIOS option.  Slowing the RAM speed in the BIOS does nothing substantial to slow down the game.  The turbo button will show real slowdown, but the slowdown is a little too great and the game runs at a suboptimal speed.  Its close to a 386DX40.  Its like Goldilocks and the Three Bears, too hot and too cold are easy, but getting the speed "just right" is not easy.  Pentium computers will begin to run Ultima VII insanely fast.  The game's sequel, Serpent Isle, runs on an updated version of the Ultima VII engine.  Serpent Isle has a frame limiter to prevent the action from becoming sickeningly fast, however a powerful machine can still make it play faster than it should.

The ideal system to play Ultima VII on is a 486DX33 with 4MB of RAM, so I have been told.  Scorpia made the claim in Computer Gaming World.  Apparently this is indicated somewhere on or in the game's packaging, but I have reviewed all the items included in the box and I see no such assertion.  It may be on the system requirements label on the underside of the box cover.  Like most games, the more things that are happening on the screen, the slower the resulting gameplay.

The best advice I have for people with a 486DX2/66 is to use the jumpers to lower the FSB speed from 33 to 20MHz.  This will turn your CPU into a 486DX2/40, a CPU that never existed in the wild.  However, it will produce a correct balance of speed, very close to the ideal.

The next issue is the Voodoo Memory Manager.  Ultima VII and Serpent Isle use a custom memory manager that is wholly incompatible with all expanded memory managers, including EMM386, QEMM, CEMM, you name it.  All these drivers put the CPU into Virtual 8086 mode, whereas Ultima VII requires true Real Mode for its voodoo memory manager (which the game puts into the so-called "Unreal Mode") to work.  Origin specifically informs the user that it used this memory manager to avoid the problems with EMS, but it does not indicate what those problems were.  My guess is that the performance hit from using EMS was too much for the game to handle.  Ultima VII is also incompatible with Windows for the same reason; it must be run in DOS unless you use the unofficial U7WIN9X patch (for Windows 95-ME).

The problem with these games' EMM386 compatibility is that EMM386 provides Upper Memory Blocks.  Device drivers, such as those for the mouse, CD-ROM and disk cache, can load in UMB to save precious conventional memory.  Ultima VII and especially Serpent Isle require lots of conventional memory free, up to approximately 585K free for Serpent Isle with all sound options.  No EMM386, no guarantee of UMB.  While CTMOUSE is small enough (3K) that it can be loaded without a substantial impact on the conventional RAM, SMARTDRV and MSCDEX require about 25K a piece.  Without UMBs its virtually impossible to load a normal DOS configuration.  The official solution was to create a barebones boot disk.

It may be possible to create UMBs in systems without loading EMM386.  In Pentium and later systems, UMBPCI works with proper PCI implementations.  In 386 and 486 systems, you can try HIRAM, URAM (1988), RDOSUMB or LastByte Memory Manager may also work, depending on whether the software supports the chipset and its use of shadowing memory.  You will probably not get as many UMBs as you would with EMM386 (forget B000-B7FF), but if it works for you, it will avoid having to specially boot your system for these games.

The final issue is that this game will thrash a hard drive like Simon Legree.  To avoid those annoying short (or not so short) pauses as the game scrolls the screen, the standard 16-bit IDE controller is not going to cut it.  Fortunately there are many options to speed up disk access.  On the extreme end of the scale, if you have 32MB of RAM, consider creating a RAM drive with the DOS utility RAMDRIVE.  A full install of Ultima VII + Forge of Virtue is 19.5MB without savegames.  Serpent Isle and The Silver Seed runs to 22.5MB.  Thus your RAMDISK needs to be about 1.5MB larger than the install size.  Just remember to copy the game back to your system.

Other improvements include SCSI, whether IDE, VLB or PCI; VLB or PCI IDE, and the use of fast hard drives and compact flash cards (with IDE or rare SCSI adapter).  SMARTDRV, a disk caching program, will also assist with slower hard drives (i.e. hard drives you would actually have used at the time).

Ultima VII does not really care too much about the VGA card used, but I would recommend a Tseng ET4000AX if you are forced to use an ISA card, otherwise use a PCI or VLB card.  It only supports Adlib & Sound Blaster & Roland MT-32 (and compatibles) for music and sound effects.  Roland is obviously the best choice, the game uses stereo panning for sound effects and loads custom patches.  Adlib and Sound Blaster rely entirely on FM synthesis for music and sound effects.  Voice samples (for the Guardian in the intro and occasionally in-game) require a Sound Blaster or Sound Blaster Pro or compatibles.


0blivion said...

I put together a U7 machine and its limited to ISA slots. my first pick was a Tseng based card but I get "static" with it and U7. best I can describe it like VCR tracking lines. I made a video here Ignore the snoring in the background.....anyways I've tried two ET4000 based cards and had the same issue so I wonder if its the machine.

Dinis said...

weren't the tseng cards known for their quirks?