Doom for 16-bit DOS computers
github.com
github.com
https://twitter.com/FOmmetje/status/1696266683756003451
or if you prefer:
I imagine that on a physical vintage PC with a spinning rust hard drive (rather than in an emulator with storage presumably backed by an SSD) we'd be looking at a 1fps slideshow or less.
But, maybe I'm wrong! Maybe things would fit into the HDD's onboard cache and it would perform OK.
PCs of a sufficient vintage had so little logic on the HDD that you could swap out the MFM controller card in your PC for an RLL one and get 50% more storage. The modulation of the signal written to the disk was the job of the controller card, not the board on the HDD. Turn your 20MB HDD into a 30MB with a controller change and reformat? Mighty tempting.
This 4GB Western Digital AC-14300 with mfr date of 1995 seems to have 512KB of cache? Not sure if these specs are reliable though.
- https://stason.org/TULARC/pc/hard-drives-hdd/western-digital...
- https://www.ebay.com/itm/325794470911?hash=item4bdadd1bff:g:...
This 250MB Samsung from 1993 has 64KB of cache:
- https://www.directitsource.com/product-p/shd-3122a-ds2.htm
- https://www.youtube.com/watch?v=d-X2uYEx7tU
This WD Caviar 280MB from 1992 seems to have 8KB of cache.
- https://www.ebay.com/itm/154446527853
- https://www.priceblaze.com/WDAC280-WesternDigital-Hard-Drive
This 40MB Maxtor from 1990 has 32KB of cache.
- https://stason.org/TULARC/pc/hard-drives-hdd/maxtor/8051A-41...
So, I think any contemporary hard drive in those days would have some cache. Thanks for leading me down this nostalgic rabbit hole.
Back, that was fast https://en.m.wikipedia.org/wiki/Catacomb_Abyss
I think the framerate was closer to like 5fps or so.
I was under the impression that this series running on an 8088 was a unique property but Wikipedia fails to mention it. I was a kid then so let's just presume I was wrong
Catacomb Abyss was also a John Romero and John Carmack game.
The 8086 was limited to 640k, a 286 could actually do 16MB with paging.
Is the problem simply the ram limit on the 8086? Is that why assets have to be reloaded off disk constantly?
Couldn’t a 286 with enough memory handle it (if you were emulating that processor)?
I’m curious what the issue is.
On a 286 sure you can go to protected mode but AFAIK that tended to be more involved than most people would like.
In the case of XMS, that could help but still requires moving data to/from EMB.
Frankly EMS would be the best option to keep it workable on an 8088. At the very least the 64k frames could be used for some of the data that I'm guessing are streamed (belched?) from disk.
Apparently they just cross-compiled it. Also, the NeXTStep version of Doom didn't have sound.
"We wrote all of DOOM and Quake's code on NeXTSTEP. We debugged the code in NeXTSTEP with DOOM and Quake's 320x200 VGA screen drawing in a little Interceptor window while the rest of the screen was used for debugging code. When all the code ran without bugs we cross-compiled it for the Intel processor on NeXTSTEP then turned over to our Intel DOS computers, copied the EXE and just ran the game. The DOS4GW DOS-Extender loaded up and the game ran. It was that easy."
http://web.archive.org/web/20140310124554/http://rome.ro/200...
"NeXT also have an internal kit called Interceptor Kit, which allows a privileged application to punch a hole through the Postscript windowserver directly to the display card."
So it seems very unlikely (to me) that they would develop the games first for a different platform, using a different OS, on a different CPU, with a different endianness.
By the time Doom was being made they definitely had a sense of what a high-level approach brought to the table, and that they could focus on just the "hot loops" for micro-optimization when targeting a 386. The process they were using to build their engine was ultimately iterative in nature, building some tools and some rendering and some assets, then gradually pushing each a little further: the introduction of the BSP algorithm came relatively late, for example.
Because they were running ut on such different systems, almost all porting bugs were caught in development.
The great majority of platform dependent code is video output, keyboard handling, sound and network.
The functions for that that call dos/x86-specific code are neatly separated by the rest in appropriately named files, so it’s really easy to know what you will need to modify, without a million other distractors.
https://www.mobygames.com/game/1068/doom/cover/group-1549/co...
"System Requirements: PC compatible 386 or greater"
But unofficially, you needed a fast 486 to run it properly. On a 386 you have to switch to low detail mode and/or shrink the view area to get an acceptable frame rate.
It was pretty tolerable since quicksave and quickloads were so fast. If you stumbled into an area where you took a bunch of damage because your frame rate dropped to 5fps you could just quickload, downsize the viewport, and try again.
386SX 20MHz no cache: https://youtu.be/osgld_uynl8?t=95
486SX 8KB cache: https://youtu.be/osgld_uynl8?t=151
386DX 40MHz 8MB RAM: https://youtu.be/9_2qGaIOvjs
386DX 33MHz 8MB RAM ET4000: https://youtu.be/KQDEKoRcXZc?t=140
386DX 40MHz 4MB RAM 256KB cache (probably bullshit), full viewport: https://youtu.be/L6U8fyEgRH4
Notice how it's fine in the corridors but starts to lag at any open space. There was a reason DOOM/2 got it map design.
That's really cool. Thank you for posting that, it's super interesting.
I guess I was playing it on my 486SX 33mhz then.
More expensive chipsets tended to have better cache implementations... Assuming the system even had cache installed, those cheaper systems often paired a 486SX with a cheap motherboard and zero L2 cache.
When installed on the same motherboard, same cache/memory config, with the same graphics card, same bus speed, a 486SX should run Doom identically to a 486DX.
Which might actually be a fair comparison, The DX2 and SX were launched at the same time, so there is a decent chance the "fast 486 DX" someone is talking about is actually a DX2.
The SX2 was launched later, with the same 2x clock multiplier and same size L1 cache, so would preform identically to the DX2 (in non-fpu tasks like doom). But the DX4 was launched at the same time, now with a 3x multiplier and L1 cache doubled to 16KB....
Doom run okish on 486SX.
Hi moderators, please consider not downvoting me here; I'm resorting to commenting in this newer thread where replies are still enabled in an attempt to reach mrob (whose profile has no contact info).
---
Hi mrob, I just wanted to thank you for your extraordinarily helpful comment about harmonics in music. I've been playing guitar for about 30 years and make regular use of harmonics in my playing (and tuning), but when a nonmusical friend recently asked me to explain why those sounds were so different when lightly touching strings above the 5th, 7th and 12th frets, I had little to offer by way of a coherent explanation. Favorited and bookmarked / added to my PKM. Have a great day and thank you for such a great comment! You're a great example of what makes HN such an awesome community.
PS This is the comment: https://news.ycombinator.com/item?id=37047142
Doom used integer maths throughout, so would not benefit from and FPU, but did get a boost in complex maps from the faster internal clocks of doubled/tripled/quadded chips. The Quake era (maybe a little earlier for some more niche games like certain fight simulators) is when the FPU became a massively significant factor for home use (though it didn't exclusive use it: the original Pentiums' FPU wasn't trials fast enough so only something like 1/16th of the work was done there and integer approximations starting from those values were used between - improved further by the FPU being able to work on its next bits while the CPU ALUs could do there part, a hack somewhere between pipelining which 486+ units did naturally (& Pentiums more so due to extra ALU circuitry) and hyperthreading).
Doom ran well on it.
I believe I had to start the machine with a boot floppy that configured the system before I run the game though.
My father and I tried everything we could to overclock that IBM into 133Mhz but the CPU was holding it back. Later that year, he bought Marathon by Bungie (precursor to Halo) for me on his Mac. I think he felt bad that I was so disappointed. I loved it. He saw this and for Christmas that year, I had a new motherboard with a new Pentium chip capable of ripping Martian marine mutant faces.
That’s not how a turbo button works, it doesn’t make the pc “go faster” [1] :)
Either you had a 486@66Mhz, or you set your multiplier to 2x instead of just pressing the turbo button.
[1] I mean, you could by default power your pc with turbo in “slow mode”, and activate it for hyperspeed, but you’re still using a 66Mhz CPU that is being normally slowed down
I know the chip was a 66mhz chip. Without the button pressed, it was useless. I also know this was about CPU timing. Having it "on" slowed down the timing. But having it on (to slow the CPU timing) and trying to overclock the CPU (to make it faster), resulted in nothing more than a few fps. After the upgrade to Pentium, it was 60fps.
The turbo button is a 3-pin switch. Some wired it so that "off" was full-speed. Some wired it the other way. I believe mine were wired for "on" = fullspeed.
[0] https://github.com/FrenkelS/Doom8088/blob/2001f8c2576a2e99f3...
The CGA mode is playable, but pretty bad looking as would be expected. It looks much better with the Tandy graphics mode enabled. It'd be cool to be able to run Doom on my Tandy 1000 as well.
I wonder why. The GBA has a 32-bit ARM processor.
So somewhere in that heritage is the SNES version of doom. A 16bit version.
The game does not use the Doom engine, but features a custom engine, known as the Reality engine, programmed by Randy Linden.
The SNES port runs on a bespoke engine written by Randy Linden. Whereas the Jaguar Doom is the basis for many console ports, SNES Doom is something of an (incredibly impressive!) dead-end on the Doom family tree.