FastDoom

FastDoom is a source port created by Víctor Nieto, alias Viti95. Its goal is to improve the performance of the Vanilla Doom engine on lower end computer systems, in particular the and  class of processors. It does so by removing features deemed unnecessary, reducing rendering complexity and general engine optimization.

It includes code from other ports, such as Crispy Doom, MBF and Russian Doom, as well as the original Sony PlayStation and Atari Jaguar Doom ports.

History
FastDoom got its first 0.1 release on June 10, 2020. A direct port of the PCDoom-v2 code, very few optimizations were in play. Version 0.2 followed three days later with the first few optimizations and the ability to use transparency from the Sega Saturn version of Doom, as well as the option to render visplanes (both ceiling and floors) without textures.

After bugfix release 0.21, version 0.3 followed as a major milestone, being released on June 18, 2020. It brought in an in-game FPS viewer, taken from Russian Doom and rewritten in fixed-point math, along with a low resolution mode and the option to only show objects that are not far away from the player, an application of. With mode engaged, FastDoom can maintain nearly 25 fps on a lower end 486 processor.

A new release followed over a month later. With version 0.4, a build for 386 processors was included, along with mono sound support and the option to use lower quality sounds in general. The included extender was also replaced, from DOS/4GW to DOS/32A, providing a sizable performance increase along with various minor optimizations. With version 0.5, the Potato mode was not only made faster, it is now also a native mode that does not require Low Detail mode to be enabled. It also brought back gamma correction alongside several rendering optimizations.

Version 0.6 not only included a lot of internal rendering optimizations, but it also brought diminished lighting back to flat surfaces, and a new option to disable it as well, which greatly sped up performance. For 386 based computers, an option was introduced to disable the screen melt effect while loading new levels, as this effect is very slow on this hardware. With version 0.666, all display and sound options were moved to the options menu along with new options for the adjustment of screensizes and various engine optimizations.

With version 0.7 came support for for Stereo OPL2, OPL3 and Stereo OPL3 music support and Disney Sound Source (also Tandy Sound Source) sound support. The resulting image output now supported. It was however with Version 0.8, released April 14, 2021 that several new features were to be implemented. A new simplified status bar was implemented, but also support for, and  cards was added in alongside two text mode renderers:  for CGA, EGA and VGA in 80x25 resolution in 16 colors in a virtual 80x50 resolution and  for VGA only video cards in native 80x50 resolution.

0.8.1 added several new VGA/CGA/EGA video modes and a basic IWAD selector, whereas 0.82 and 0.83 are bugfix releases. 0.8.4 adds support for new legacy sound cards. From this point on Nieto started on implementing new modes again. At version 0.8.5, three new executables were introduced: for a 40x25 16 color text mode,  for the same but with a virtual resolution of 40x50 and  for VBE 2.0 cards with LFB triple buffering and direct rendering on the video card. Another three exectuables were introduced at 0.8.6 that implement support for vertical monitors: for a planar 320x250 vertical mode stretched from the base 320x200 screen,  for the same mode but the base image is centered in the screen, creating black borders, and a additional text mode executable:  for 80x50 16 colors text mode in a virtual resolution of 80x100.

With version 0.8.7, two new video modes were introduced: brings support for the  card, supporting 320x200 resolution and 16 colors. Also included was, a CGA composite mode with 160x200 resolution and 16 colors. Version 0.8.8 introduced, a mode with 160x100 resolution and 16 colors, , a VGA mode with 160x200 resolution and 16 colors and , a EGA mode with 640x200 and the dithering of 16 colors. It also included Sound Blaster Direct support, which does not require an IRQ interrupt or DMA, and is limited to 8-bit mono sound

Legacy
Even without using the low-resolution modes, FastDoom generally performs faster than the stock executable due to optimization efforts. Viti95 tested the performance of FastDoom compared to stock Doom 1.9 in a benchmark, using the 0.2 release. Doom     Doom     FastDoom  FastDoom     FastDoom         FastDoom     FastDoom     FastDoom 1.9      1.9      0.2       0.2          0.2              0.2          0.2          0.2      Audio     NoAudio  Audio     Audio        Audio            Audio        NoAudio      NoAudio FlatSurfaces FlatSurfaces    FlatSurfaces              FlatSurfaces FlatTransparency Sega Saturn              Sega Saturn transparency             transparency FPS  19.56     21.68    22.44 	   25.77 	25.86 	         26.02 	      24.79 	   29.05 Gain 100.00%  110.20%   114.70%   131.70%      132.20%          133.00%      126.74%      148.52%

Features

 * Unified binary for Doom, Doom II and The Ultimate Doom, for 386 and 486 processors (since version 0.8)
 * CGA, EGA and VGA support on supported video cards. For CGA cards, it is enabled with parameter
 * Later releases include, a CGA composite mode with 160x200 resolution and 16 colors and , a mode with 160x100 resolution and 16 colors, , a VGA mode with 160x200 resolution and 16 colors and , a EGA mode with 640x200 and the dithering of 16 colors
 * Support for the  video card through, supporting 320x200 resolution and 16 colors
 * Text mode rendering using multiple separate binaries: for CGA, EGA and VGA in 80x25 resolution in 16 colors in a virtual 80x50 resolution and  for VGA only video cards in native 80x50 resolution. Later additions include {c|FDOOMT1.EXE}} for a 40x25 16 color text mode,  for a 40x25 16 color text mode but with a virtual resolution of 40x50,  for a 80x50 16 colors text mode in a virtual resolution of 80x100
 * Conversion from 256 colors to 16 colors is enabled with  parameter
 * Support for modes (320x200, 8 bit color support required) to enhance performance on modern video cards using multiple additional separate binaries:, which uses basic real mode VBE 2.0 support which is the most compatible, , which uses protected mode extensions, but is less stable and which only works in high detail mode. Later additions include  for VBE 2.0 cards with LFB triple buffering and direct rendering on the video card.
 * Support for vertical monitors (Inspired by Toom) with page flipping support through multiple separate binaries: for a planar 320x250 vertical mode stretched from the base 320x200 screen,  for the same mode but the base image is centered in the screen, creating black borders


 * FPS ingame viewer. Enabled with
 * Additional FPS readout through the debug port (0x80). Enabled with
 * FPS calculation after timedemo runs
 * Minimalistic HUD
 * Render visplanes (ceiling and floors) without textures and with diminished lighting. Enable with
 * Render visplanes (ceiling and floors) without textures and diminished lighting. This will increase performance significantly compared to the option. Enable with
 * Can render spectres and invisible objects like real transparent objects (harder to see, a little faster to render). Enable with
 * Render sky as a flat fixed color. Enable with
 * Option to disable the screen melt effect while loading new levels. This is very useful for 386 based processors where this effect is very slow. Enable with
 * Ability to render spectres and invisible objects like the Sega Saturn port did. Enable with
 * Option to show only objects that are not far away from the player. All the enemies are still rendered as they're important. This is a form of culling. Enabled with
 * PC Speaker uses all sounds available (just for fun!)
 * Lots of optimizations to make the game run faster / smoother (executable is smaller than regular Doom)
 * Removed low memory limit (may cause crashes with low RAM)
 * A rendering modtexe. It renders the full scene with a quarter width resolution, to a maximum of 80x200. 16-bit ISA video cards can now play the game in full screen at increased performance. A Western Digital Paradise PVGA1A ISA (1989) can render the game at a constant >25 fps on a 486DX-50. Enabled with  command parameter
 * Can allow more than 8Mb of memory allocation. Enabled with
 * Autorun support, enabled by pressing the F11 key
 * Option to see the initialization process during startup. Enabled with parameter
 * Mono sound support. Enabled with parameter
 * Low quality sound support (8000Hz instead of 11025Hz). Enabled with parameter
 * Replaced standard extender with  extender providing significant speed ups
 * Partial DeHackEd support like stock Doom, making WAD sets like Back to Saturn X possible but not, for example, REKKR. FastDoom is developed to be as compatible as possible to the original source code, but patches made for the original Doom executables may not work as there are lots of internal changes to make it faster. Since FastDoom's executable differs from the original, offsets to functions and data can and will be different also.
 * Gamma correction support (brought back in 0.5)
 * In-game toggleable menu options for parameters
 * Ability to force screen sizes, from 3 to 11. Enabled with parameter
 * Option to reverse Left/Right stereo speakers. Enabled with parameter
 * Benchmarks results can be saved in a file called . This allows users to run multiple benchmarks and save them in a single file. Enabled with parameter
 * Stereo OPL2, OPL3 and Stereo OPL3 music support (Adlib uses basic OPL2, Sound Blaster tries to detect the best possible option)
 * sound support, 8 bit, 11 KHz, mono
 * Disney Sound Source (also Tandy Sound Source) support
 * sound support, 1 bit, 11 KHz, mono
 * Sound Blaster Direct support. This does not require an IRQ interrupt or DMA, 8 bit, mono
 * support. Enabled with parameter
 * Doom 2: BFG Edition version support
 * New option to render the status bar background a little bit faster. Enabled with parameter. It replaces the status bar background with a simple grey color.
 * New command line parameters that disable some optimizations:, , , , , , , ,

Removed features
In addition to several new features been implemented, FastDoom also removes a number of features. These are:
 * Network gaming support
 * Joystick support
 * Y mouse movement (move forward/backwards)

Gallery
Showcase of various Doom II levels rendered in FastDoom 0.4, using the 386 binary and with the parameters in low resolution mode (80x200 fullscreen).