U7 with Bochs on Windows 95

By Aquamarine Dragon, aka Josef Drexler. You can download these instructions in text form or in html form.
Update, May 11 2000
I have compiled the latest version of Bochs, 2000_0325a, and it seems to have made things slightly faster. There is still room for improvement, for example people with some knowledge in DirectX programming (2D graphics and sound) could probably make it faster, or even just adding a colormap would speed things up.

Follow these steps to run U7 with Bochs

  1. Download the u7bochs.zip file
  2. Unpack it with WinZip or another program that can handle long filenames
    WARNING! Uncompressed it will take up 65MB, that's sixty-five Megabytes all right, because the archive contains the preformatted hard disk image file which can be compressed quite a bit because it's empty.
  3. Make a DOS boot disk (e.g. do "sys a:" on an empty disk) and put HIMEM.SYS, SYS.COM, and SMARTDRV.EXE on the disk. This is necessary because we need to make the harddisk image bootable.
  4. Create a new subdirectory under where you uncompressed the zip, name it U7, and copy Ultima 7 into this subdirectory. These files will later be copied onto the harddisk image.
  5. Run "prepare.bat". This will make the hard disk image file bootable from your boot disk, and copy U7 to the image. Bochs will be booted once to run "sys.com" and copy the system files.
  6. Once that's done, just run Bochs.exe to play U7. When the DOS prompt appears in Bochs, enter "u7".
  7. To exit Bochs, press F12 to release the mouse and click on the power button in Bochs' toolbar.

Caveats

Right now it's still very slow. The mouse pointer moves somewhat erratically, and the "private_colormap" option is not supported. This might speed things up significantly. If there's any Windows programmer out there who knows how to do private colormaps on Windows and wants to include this on Bochs, don't hesitate to do it!

Tuning

It may be necessary to tune the performance parameters. To do this, edit the bochsrc file with notepad. There's three values that make a difference to performance.
  1. ips
    Set the instructions per seconds (ips) such that music in U7 has the natural speed.
  2. vga_update_interval
    This sets the frames per seconds you get: fps = 1000000 / vga_update_interval Small values make the display appear smoother, but also take more CPU power, you'll have to find a compromise between fast updates and a fast game.
  3. dmatimer
    This is in the "sb16:" line, and sets how many microseconds there are in one second. Normally this would be a million, but due to extra overhead in the DMA handling one million would lead to interrupted voice output.

    Smaller values reduce interruptions in the sound output, but they also take more CPU power, and make the sound dissynchronized with the game. For example, in the intro the Guardian's speech will be over long before his mouth stops moving. Unfortunately it is necessary, if you want continuous sound.

Other values in bochsrc should not be changed, except if you want to have the sound/music output go to a file instead of the wave and midi mappers.