Windows 3.x 16-color palette driver and SimCity 2000 without SVGA

SimCity 2000 is by far my favorite game of the series by far and I spent a lot of time playing it. Not only the original DOS version on the PC but also a version for PocketPC handhelds during my college years. What I didn’t know until recently is that SimCity 2000 can run on a simple VGA card in 16 colors… and it looks surprisingly good thanks to a special Windows 3.x driver made by Microsoft.

This is the original SimCity 2000 for DOS that Maxis released in 1993:

The game runs in the SVGA video mode at 640×480 with 256 colors. Therefore, it requires a graphics card that goes beyond the specifications of the original IBM VGA chips designed for the IBM PS/2 line of computers. Such a card requires at least 512KB of video memory – twice as much as the original VGA offered. Raising the bar of minimum hardware requirements above the simple VGA was a big deal at the time. Most games were still stuck at VGA 320×200 in 256 colors (like Doom). Some games used hi-resolution 640×480 modes, but only in 16 colors (like The Incredible Machine).

If you look in the game’s setup program, you will see the following list of supported video adapters:

Even though some of the cards have “VGA” in the name, all of them offer additional video modes including the required 640×480 with 256 colors. In the early days of SVGA, each manufacturer required different steps to switch their card into modes beyond VGA. Therefore, a game programmer had to deal with each card specifically. This is the reason why SimCity 2000 has this list of supported cards.

The most important is the first entry – the VESA Super VGA. VESA (Video Electronics Standards Association) has standardized access to these video modes beyond VGA using VESA BIOS Extensions. These are new features that are added to the BIOS of a video adapter that allow you to check if a required resolution is supported and to switch to that mode. This is the way the market has resolved the situation that there is no longer one big leader (read IBM) that defines the standards in the PC world.

If you set the VESA Super VGA in the setup program and try to run the game on an adapter without VBE (VESA BIOS Extensions), you will get this error message:

This is not automatically a problem as long as your video card supports the target video mode. In order to add the VBE functionality, some vendors offered new BIOS chips for their cards. Others simply made a TSR DOS program that added the functionality without the need to upgrade your hardware. A VESA compatible game does not care if the VBE functions are stored in the card’s BIOS chip as long as something answers to a VBE specific call on the interrupt 10h.

An example of assembly code that switches the video mode to 640×480 in 256 colors. This will work on any SVGA card with VESA BIOS extensions:

mov ax, 4f02h ; 4f = VBE functions, 02 = change video mode command
mov bx, 0101h ; 0101h is always 640x480x8bpp
int 10h

There are even “universal” programs that add/extend VBE support for many contemporary cards. One of them is UniVBE. The program detects your card, and if it is supported, it adds the appropriate TSR to memory. Various versions of SimCity 2000 include UniVBE inside the game folder. This was considered an easier way to handle the situation than adding support for specific cards to each game.

However, in my case with just a simple VGA, even UniVBE ends up with the “Supported video card not detected” error:

The DOS game expects the 256-color depth using any other would require significant changes in its code. Therefore, the 16-color version was omitted.

SimCity 2000 for Windows

In 1995, Maxis released a version for Windows that allowed the same thing as the Mac version a year earlier – playing the game in higher resolutions than 640×480. The game runs in a window just like a normal Windows program, using the standard Windows GUI. If your screen does not support more than 640×480, you will see a smaller area in the game due to the additional window title and borders:

On the other hand, an expensive workstation with a 1280×1024 screen will allow you to see a large part of the map without having to use the “zoom out” function:

Although Windows 3.1 was never really an operating system for games, the video performance is not far from the DOS version. The game even evaluates the graphics performance when a new Windows video driver is loaded and optimizes its drawing routines (EDIT: This is actually a WinG optimization module):

Besides allowing higher resolutions, the version for Windows does not care about the color depth selected in the operating system. Unlike the classic Mac OS or the X Window System, Windows does not require a programmer to care about the output color depth of the hardware. A program can work expecting a 256-color screen and Windows will convert the bitmaps during the drawing if a 16-color driver is used.

Sure, Maxis could add a code to check if the selected video mode provides at least 256 colors and refuse to start the game if this was not the case. Many games have such code but not this one. As a result, you can see SimCity 2000 running with only 16 colors:

It works reasonably well. It is just ugly. However, this is not the end of the story…

16-color palette driver for Windows 3.x

Allowing users to play the game in 16 colors was not done by accident. The included readme.wri file explicitly mentions this option:

SimCity 2000 was originally written for a 256 color environment. Since many people may only have the generic 16 color video drivers installed or may have video drivers for more than 256 colors, we have allowed SimCity 2000 to run in color resolutions other than 256. Obviously, trying to run a program with 256 color artwork in 16 colors is going to look downright yucky. Additionally, due to the way many high-color and true-color cards work, some animations in SimCity 2000 may not work properly with systems running in more than 256 colors. However, in both cases, SimCity 2000 is still playable, so if you don’t have 256 color drivers or are not sure how to install them, you can still play SimCity 2000 while calling your video card manufacturer or reading up on the documentation that came with your video card. For absolutely best results, we recommend that you run SimCity 2000 on a system configured for exactly 256 colors.

The Microsoft generic drivers for both 256 color video and 16 color video (should you not have an SVGA capable video card) have been included on this fine CD-ROM product. The SVGA drivers can be found in the subdirectory \SVGADRV and the regular 16 color VGA drivers can be found in the directory \VGADRV. We recommend that even if you are using 16 color drivers currently and cannot run in 256 colors, you install the included VGA 16 color drivers for maximum prettiness. If you’re installing the 16 color VGA drivers, select the “VGA (640×480, Palletized 16 colors)” option.

I’ve never heard of a palletized 16-color driver for Windows, so this was a surprise for me. Normally in Windows, only the 256-color mode works with a palette where programs can allocate colors they need. The standard 16-color drivers work with a fixed palette that cannot be changed by an application, and the high/true color modes work with direct color selection instead of palettes.

Let’s give it a try. There are three VGA drivers in the \VGADRV directory:

  1. 640×480, palletized 16 colors
  2. 640×480, 16 grays
  3. 320×200, 256 colors

Maxis recommends the first one, so I started with that. Going into the color picker showed that there are still only 16 colors, but the whole palette is different. Almost no color is identical to the standard 16-color palette. On the other hand, this does not look like a palette that would be good for the SimCity 2000 visuals:

The game warns you that your adapter is not set to 256-color mode:

When the title screen appears, it is clearly visible that the system palette has been changed by the game asking for different colors. As a result, even the Windows GUI elements have changed their colors. However, the intro artwork looks much better than with the standard VGA driver:

The in-game graphics seem very close to the 256-color output. I am still surprised at how good it looks:

Let’s switch to the program manager while the game is still running and check the colors again:

The current palette is very different from the one that was used before the game started. It is safe to say that with this driver, you can enjoy the game without an SVGA adapter. A typical 486 used to have an SVGA adapter with at least 512KB of local memory. This was not true for laptops though. Many early 486 portable machines were stuck with just 16 colors at 640×480 – even the rare ones with color TFT displays. There were also 386 machines upgraded with “wannabe 486” CPUs inserted in 386 DX/SX sockets.

However, do not expect this game to run in 16 colors on a generic 33-MHz 386 machine. The automatic bitmap color depth conversion requires too much CPU time. The game is therefore so slow that it is almost unplayable, although it would be playable in the 256-color mode.

Tested on real hardware

Before I ran the game in an emulator to take all the screenshots, I installed the game on a Toshiba T2200SX laptop from the year 1991. I like this one because of its compact size. It has a 20-MHz 386SX, 10MB of RAM and an 80MB hard drive, so not a very fast machine even in the 386 class. Its Western Digital WD90C22 VGA chips could have supported more than 16 colors at 640×480 resolution, but Toshiba only installed 256KB of video memory (the 256-color mode at that resolution would require 300 KB).

I installed the game from a parallel port ZIP drive and installed the palette driver. Unlike in the emulator, a laptop sometimes changed the palette and made the whole graphics look corrupted. I found out that this can happen only when the game toolbar on the left is drawn over the main game window, so the problem can be avoided.

The palletized driver (right) improved the visuals even when playing on a monochrome passive matrix LCD. The standard VGA driver (left) drew most tiles with the same shade of gray.

What about the other VGA drivers?

The “16 grays” driver was the least interesting. It is just a standard VGA driver where the output palette is changed to monochrome. This change is only visible to the user. Programs and OS work with the driver as if it had a standard 16-color fixed palette. Thus, it does not provide any advantage for the game (or anything else).

If you like the idea of changing the output palette in the VGA driver, it is not that difficult. There is a thread about it on Vogons.

More interesting is the 256-color driver. I know that Windows 1.0-3.0 are designed to run in 320×200. Early programs can work with that because it was the default resolution that Windows used when running on certain CGA cards. However, Windows 3.1/3.11 is too new and so is SimCity 2000. You can run the game, but the toolbar is so large that there is no way to play it properly.

3 thoughts on “Windows 3.x 16-color palette driver and SimCity 2000 without SVGA”

  1. I’ve always enjoyed SimCity 2000 (my favourite SimCity) under MacOS classic for this very reason. At some point, I had a G4 733 with the 1680×1024 ADC Cinema Display and it was just pure bliss – 72dpi full screen SimCity epicness.

    1. I always envied Mac users that they can run SC2000 (my favorite too) in higher resolutions as I did not know that there was a Windows version that allowed the same 🙂 I agree that it looks fantastic on this large low-DPI screens.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.