Upload

Loading icon Loading...

This video is unavailable.

Doom on CGA (monochrome), 16-color EGA and the NES

Sign in to YouTube

Sign in with your Google Account (YouTube, Google+, Gmail, Orkut, Picasa, or Chrome) to like Bisqwit's video.

Sign in to YouTube

Sign in with your Google Account (YouTube, Google+, Gmail, Orkut, Picasa, or Chrome) to dislike Bisqwit's video.

Sign in to YouTube

Sign in with your Google Account (YouTube, Google+, Gmail, Orkut, Picasa, or Chrome) to add Bisqwit's video to your playlist.

Uploaded on Jan 22, 2011

This video illustrates running the PC game Doom on the CGA, EGA and NES displays*. It is a continuation to this video that I uploaded previously: http://www.youtube.com/watch?v=9YoqUM...

The different display modes featured in this video are listed below.
-- 1: CGA monochrome 640x200 mode (QBASIC's SCREEN 2) on a RGB display. There are exactly two colors: Black and White. One of the colors could be changed to any of the standard 16 CGA colors (for the entire screen at once), but I chose to stick with white.
-- 2: EGA 640x350 16-color mode (QBASIC's SCREEN 9). Palette was hand-chosen from the 64-color available selection on the EGA.
-- 3: Nintendo Entertainment System. Uses 256x224 display, divided into 16x16 tiles, each being a 2-bit bitmap + a 2-bit index to a list of palettes. A total of 4 palettes per screen, each palette being 3-color + one global background color (black here). Basically 13 colors were chosen from the NES's available 53 colors. Sprites were not utilized. Technically, this would be possible to do on the NES, except for the fact that the NES PPU's memory is not nearly fast enough to update the screen this fast. Maybe if you had a cartridge with a custom mapper that remaps VROM instantaneously so all you'll have to do is update the attribute tables once per frame. But then there's also the per-screen limit of unique tiles (tile number), which is not addressed in this video.

I am positively surprised how good each of these turned out, especially the EGA one. Doom would have been totally playable on the EGA! Marginally playable also on the CGA. Handhelds designers, take note!

* Or rather, it is a recording of shareware Doom being played on VGA mode 13h earlier, that I postprocessed to conform to the hardware constraints of each output device. It contains the same video clip three times, rendered with different color features. It is NOT a palette hack on 256-color Doom; no extra WADs or TSRs were loaded.

All the colorization, quantization and dithering was done with animmerger, http://bisqwit.iki.fi/source/animmerg...
I used positional dithering, because it is very well suited for animation, and because I like its appearance. Non-positional error-diffusion dithering methods, such as floyd-steinberg, produce massive amounts of *jittering* garbage.

One thing which I wanted to do, but I don't have the technology for it yet, is that I wanted to make the music & sound in the NES section sound like it would actually be on the NES. That is, two square wave channels, one triangle wave, one noise generator and one DPCM channel is all you get. But doing this would have delayed this video probably indefinitely; I've been wanting this for years so far but I have yet to make a breakthrough. I also contemplated on transforming the sound like it comes through the PC speaker (using the 6-bit PCM PIT trick) and using that in the CGA sections (I've tested similar conversions earlier successfully), but somehow I didn't feel it is necessary.

P.S. I think Doom's sound effects, especially the monster sounds, are awesome.

Here is the explanation of new the original dithering algorithm that I use in this video: http://bisqwit.iki.fi/story/howto/dit...

  • Category

  • License

    Standard YouTube License

Loading icon Loading...

Loading icon Loading...

Loading icon Loading...

Loading icon Loading...

Ratings have been disabled for this video.
Rating is available when the video has been rented.
This feature is not available right now. Please try again later.

Loading icon Loading...

Loading...
Working...
to add this to Watch Later

Add to