Doom was THE game during the 486 era of DOS gaming, but many computers of the era struggled to keep up with the demands of the engine. Many systems could only manage an unplayable framerate; even modern gamers using MiSTer don’t get a very good Doom experience. Enter FastDoom, a modern source port optimized for vintage hardware. FastDoom has brilliant tweaks to speed up performance on DOS era machines with results you might not expect. Let’s check it out some of the cool things it can do.
Features
One of the coolest features of FastDoom is support for video and sound hardware that the original Doom engine (or Boom, the original DOS source port based on the Doom source code) could not. Entirely new sound devices are now supported, and you can even play Sound FX over PC Speaker (that actually sound like Doom!). And If your retro rig has a CD-ROM, you can play an audio CD instead of MIDI, sort of like Quake.
Sound and MIDI sources supported by FastDoom
- PC Speaker modes for Digital Sound
- Disney Sound Source
- Serdaco OPL3LPT & OPL2LPT
- Audio CDs in your CD-ROM
- Tandy 3 Voice
- Creative Music System/Game Blaster
- COVOX LPT DAC/ COVOX Speech Thing
- Adlib OPL2 PCM
- Dreamblaster S2P (MIDI through LPT)
Video compatibility with various Retro Hardware
The 0.9.9f release comes with many different EXE files, which allow you to play on systems that typically do not handle the standard VGA/Mode Y or Mode X you might be accustomed to. Some modes are available for PCs only supporting Text modes, Monochrome, CGA, or EGA. Also included are some versions that run at higher resolution VESA modes. All of this means you can run FastDoom on video hardware not typically compatible with ports of the Doom engine.
Here’s a quick list of all of them from the README in the 0.9.9f release.
FDOOM.EXE: Mode Y, same as Vanilla Doom. Requires a VGA video card. FDOOMX.EXE: Mode X, 320x240 resolution. FDOOMH.EXE: Mode Y half height, 320x100 resolution. FDOOM13H.EXE: Mode 13h, same as Heretic / Hexen. Also works with MCGA video cards. FDOOMINC.EXE: 320x200 Hercules InColor mode (16 colors) FDOOMCGA.EXE: 320x200 4 color CGA. FDOOMEGA.EXE: 320x200 16 color EGA. FDOOMBWC.EXE: 640x200 monochrome CGA. FDOOMHGC.EXE: 640x400 monochrome Hercules. FDOOMT1.EXE: 40x25 16 colors text mode FDOOMT12.EXE: 40x25 16 colors text mode (virtual resolution of 40x50) FDOOMT25.EXE: 80x25 16 colors text mode (virtual resolution of 80x50) FDOOMT50.EXE: 80x50 16 colors text mode FDOOMT43.EXE: 80x43 16 colors text mode (only EGA cards) FDOOMVBR.EXE: For VBE 2.0 cards. Uses real mode (default, and more compatible). FDOOMVBD.EXE: For VBE 2.0 cards with LFB (triple buffered), all rendering is done directly onto the video card, the same way Mode Y does. FDOOMPCP.EXE: For Plantronics ColorPlus cards. 320x200 and 16 colors. FDOOMCVB.EXE: CGA composite mode. 160x200 and 16 colors. FDOOMC16.EXE: CGA 160x100 and 16 colors FDOOMMDA.EXE: MDA 80x25 text mode. Internal resolution 80x50. FDOOMCAH.EXE: CGA ANSI from Hell (320x100, 16 colors) FDOOM512.EXE: CGA "512 color" composite mode (80x100) FDOOM400.EXE: Sigma Color 400 (320x200, 16 colors) FDM240R.EXE: VESA 320x240 backbuffered mode FDM240D.EXE: VESA 320x240 direct rendering mode FDM300R.EXE: VESA 400x300 backbuffered mode FDM300D.EXE: VESA 400x300 direct rendering mode FDM384R.EXE: VESA 512x384 backbuffered mode FDM384D.EXE: VESA 512x384 direct rendering mode FDM400R.EXE: VESA 640x400 backbuffered mode FDM400D.EXE: VESA 640x400 direct rendering mode FDM480R.EXE: VESA 640x480 backbuffered mode FDM480D.EXE: VESA 640x480 direct rendering mode FDM600R.EXE: VESA 800x600 backbuffered mode FDM600D.EXE: VESA 800x600 direct rendering mode FDM768R.EXE: VESA 1024x768 backbuffered mode FDM768D.EXE: VESA 1024x768 direct rendering mode FDM800R.EXE: VESA 1280x800 backbuffered mode FDM800D.EXE: VESA 1280x800 direct rendering mode FDM1024R.EXE: VESA 1280x1024 backbuffered mode FDM1024D.EXE: VESA 1280x1024 direct rendering mode
Optimizations and tweaks to increase framerate
There are optimization settings for many processor types included in the in-game menus, allowing you to tweak the engine and get as much performance out of your old hardware as possible. You can also tweak textures for the skybox and various parts of the map, and turn off the processor-intensive invisibility effect. In addition to the “Low detail” version, there is now a “Potato” detail mode added, opening up doom to even lower spec PCs. Here’s a list of features to help you get the best performance out of your hardware.
- FPS ingame viewer
- Optional textures on visplanes (ceilings and floors)
- Spectres and invisible objects rendered in less processor intensive way
- Spectres/invisible objects rendered like Heretic/Hexen, or Sega Saturn port
- Skybox option to render as flat color
- Option to not render distant objects
- Low res “Potato” detail mode option
Immediate Performance Gains
Simply running FastDoom should get you a noticeable performance gain on a retro system, or on a DOS compatible device like the ao486 core on MiSTer FPGA. Performance tweaks can get additional FPS, but the EXE is better optimized and gives a better result straight away.
When I was first learning about MiSTer, my introduction to the ao486 core was community members talking about how poorly and sluggishly it ran Doom. While the core is a miracle and great gift to DOS gamers, the slow performance of this game has (unfairly) tarnished its reputation. FastDoom immediately improves the MiSTer FPGA Doom experience. It is unlikely anyone will ever release a superior way to experience Doom on DOS era hardware; I can confidently say FastDoom takes the crown.
In our testing, only minor tweaking was needed to get an impressive 35 fps on MiSTer FPGA.
Reducing detail or shrinking the window slightly gave the best results; personally I prefer the experience of a slightly smaller window over reduced detail. The above screenshot was with a slightly reduced window and Visplanes (floors and ceilings) set to Flat.
How to Set Up MiSTer FPGA for FastDoom Sound
Most testers were not using a MiSTer, so when I ran into trouble with sound, I contacted the dev Viti95 and FastDoom team on Github to troubleshoot the problem. It’s pretty easy to fix the issue, but the default MiSTer sound settings will (probably) not work for you.
FastDoom expects a Blaster Variable to be set either by manual command, or by AUTOEXEC.BAT, according to the dev. Because a lot of ao486 setups don’t explicitly NEED a blaster variable to be set, you might experience some issues with sound.
Thankfully there is a setting that will work and make FastDoom happy. Tested in DOS 6.22 and FreeDOS, update your AUTOEXEC.BAT with the following:
SET BLASTER=A220 I5 D1 H5 P330
Be sure to remove your old Blaster Variable setting, likely the default setting of “A220 I5 D1 H5 T6” if you have any at all. With some crafty BAT file editing, you could want to switch between them, if you find this setting creates problems with sound in your other DOS games.
Benchmarks: Impressive Performance on Vintage Hardware
Massive thanks to vswitchzero for his outstanding video on the features of FastDoom, and his hard work benchmarking on various vintage hardware. He goes through the many visual and audio features in an exhaustive way, and shows us surprising performance in 386 systems thought not capable of running Doom. This excellent video was my introduction to FastDoom and the excellent work of Viti95 and team.
In vswitchzero’s research, you can see various FPS gains simply by loading FastDoom instead of the Vanilla Doom Engine, completely without tweaks. This kind of benchmarking must have been massively time consuming, so give his video a view and a like. He goes on to test various optimization settings, hardware, and video modes in his impressive rundown of FastDoom.
Seeing Doom run impressively well in text mode on a 386 is truly a technical feat. I will continue to follow the development of FastDoom with great interest; it is already the best source port for vintage hardware and MiSTer FPGA, and will likely only get better.
Also you may be interested in Doom8088, a sister project for 8088 PCs.