Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Redneckerz

FastDoom: DOS Vanilla Doom optimized for 386/486 processors

Recommended Posts

Posted (edited)
16 hours ago, Blzut3 said:

Man, Doom is so burned into my brain I can still see a full color image in there. XD

 

Honestly I didn't expect dithering to look that good.  Now even more curious if it would be technically feasible to support -left/-right on a single machine using dual head?  Before I figured maybe it would only be useful for throwing the automap up or something like that.  I think in dual head the Hercules card has limited resolution?  Or is that only the case when paired with CGA?

 

I guess it's possible to implement dual head Hercules + other video modes. The Hercules base address it's 0xB0000 for it's first video page, and it only uses 32Kb of memory in 640x400 mode. Because of this you lose access to the second video page, but having a backbuffer for rendering avoids this problem. Automap in realtime it's doable since the game renders first and then the automap it's generated on top.

 

@roboticmehdi2 well i've tested the same IWAD and found that the bug happens with real hardware but not in DosBox-X. Sigh. Will fix it for the next release. Thanks for reporting the issue.

Edited by viti95

Share this post


Link to post

New comparison between Mode Y and Mode 13h on a slow 486 processor (Cyrix Cx486DX @33MHz, Cirrus Logic VLB video card). This result surprised me, didn't expected it. Now I understand why Heretic feels smoother than Doom on some 486 computers.

 

https://www.youtube.com/watch?v=InNNSd1peWk

 

Mode Y: 16'429 fps
Mode 13H: 19'431 fps (18% faster)

Share this post


Link to post

Finally new release!!

 

FastDoom 0.8.1

  • New video modes!!
    • VGA Mode 13h (320x200 256 colors, without page flipping). Same mode as Heretic/Hexen. Only high detail mode is implemented, but it's usually faster than the original Mode Y. Recomended for fast 486 processors and upwards
    • CGA (320x200 4 colors). Ugly, needs a better conversion algorithm. Requires a fast CPU. Based on Mode 13h
    • CGA (640x200 monochrome, ordered dithering 2x2). Requires a fast CPU. Based on Mode 13h
    • EGA (320x200 16 colors, page flipped, 128Kb VRAM minimum). SLOW, most ISA 8-bit EGA video cards can't update fullscreen at decent framerates. Based on Mode 13h
    • Hercules (640x400 monochrome, ordered dithering 2x2). Requires a fast CPU. Based on Mode 13h
  • Added basic IWAD selector on bootup (if multiple IWADs are detected)
  • Fixed Super Shotgun animation
  • As always more optimizations. Now text modes are much faster
  • Fixed multiple bugs
  • Removed color correction parameter "-fixcolors" for 16 color modes. Easier to use

https://github.com/viti95/FastDoom/releases/download/0.8.1/FastDoom_0.8.1.zip

Share this post


Link to post
Posted (edited)

Another dev update, some video cards really like VBE 2.0 modes rather than mode 13h. This is a simple test with an ATI Rage II PCI and a Pentium III 550MHz:

  • Mode 13h: 177.133 fps
  • Mode VBE2: 300.277 fps (69.5% faster)

 

This mode is giving me lot's of problems and system crashes, any help would be really appreciated (https://github.com/viti95/FastDoom/commits/VBE2)

 

 

Edited by viti95

Share this post


Link to post

I think Quake has decent VBE 2.0 support. I remember this being slightly faster on my P100 back in the day. No idea if this is part of the released source code, but could be worth a look? It also had support for many other interesting unchained modes.

Would be interesting to see Doom in 320*400. Aspect ratio should be fairly easy to keep correct and you would get a lot more details. The classic 640*400 is another good one.

Share this post


Link to post
Posted (edited)

Forgot to post it here, FastDoom 0.8.2 has been released! Small update, just a big bugfix (Ultimate Doom switches weren't working right) and new VESA 2.0 modes implemented. They are usually a little bit faster on VLB and PCI video cards.

 

You can grab it here: https://github.com/viti95/FastDoom/releases/tag/0.8.2

 

On 5/31/2021 at 10:34 AM, zokum said:

I think Quake has decent VBE 2.0 support. I remember this being slightly faster on my P100 back in the day. No idea if this is part of the released source code, but could be worth a look? It also had support for many other interesting unchained modes.

Would be interesting to see Doom in 320*400. Aspect ratio should be fairly easy to keep correct and you would get a lot more details. The classic 640*400 is another good one.

 

For now my idea is to support only 320x200 8-bit color resolution, as the idea is only to make Doom run well on every old system and add support for more hardware. Thanks for the idea of using the Quake source code, i've not used it because OpenWatcom is very different compared to DJGPP, but give me a good idea of how VBE2 works!

 

EDIT: New video! The Rendition Verite V2200 loves this new mode.

 

 

 

  • Mode Y: 14.446 fps
  • Mode 13h: 59.150 fps (409% faster, seems to have applied VSync by hardware and locked to 60fps. FastDoom VSync option was disabled)
  • Mode VBE2 (LFB, PM): 305.446 fps (2114% faster, just wow)
Edited by viti95

Share this post


Link to post
On 5/19/2021 at 9:02 PM, viti95 said:

New comparison between Mode Y and Mode 13h on a slow 486 processor (Cyrix Cx486DX @33MHz, Cirrus Logic VLB video card). This result surprised me, didn't expected it. Now I understand why Heretic feels smoother than Doom on some 486 computers.

 

Lol, I remember back in the day a game reviewer in a local magazine theorized that Raven added some optimizations to the engine in Heretic since it was smoother on the reviewer's system than Doom 2, and even congratulated them for this supposed feat. I always thought that was bullshit (I knew the engine was *older* than in Doom 2, and on my system there wasn't really any noticeable difference in scenes of similar complexity), but this explains it well.

 

(also, isn't the LoS algorithm used by eg. enemies looking for the player faster in <=v1.2 as well, after all? only learned about that one years later...)

Share this post


Link to post
16 hours ago, AnotherGrunt said:

@viti95 VESA 2.0 modes? Hmm. What about adding direct-render for linear framebuffer modes?

 

That's one of the ideas i'll try to implement in FastDoom, don't know how will it perform. I'm pretty sure that fuzzy rendering will be slower, as reading data from the video card is slow. But could be faster in general as it avoids writing to the backbuffer. My 2 cents is that it will be faster if there isn't much overdraw in the scene.

 

Anyway first i've to fix some bugs that were introduced in the 0.8 release (mostly crashes and some switches not working properly)

Share this post


Link to post

I just found this by  accident and WOW viti95 this is amazing, the holy grail of MDA,CGA,EGA DOOM!

 

Also props for using the Duke3d sound engine totally sidesteps the DMX issues!

 

VESA is problematic... don't kill yourself too bad, when doing q2dos I did a simple vesa2 flat buffer and it worked great. for me. on new nvidia (well new then) cards.  but everyone and their brother cried about how everything else didn't work, especially dosbox. the advantage of q2 is that I was using MSVC/GCC so it was trivial but the vesa code to watcom will need help.  or port the audio from tasm/watcom to gas/gcc.. I dont know which is less painful tbh.

 

but wow I have this running on dosbox with EGA in EGA and it looks like the c64 port we always needed... lol but thanks!

 

I almost feel confident like I can downport all kinds of crap to cga/ega 'just because'.

 

Share this post


Link to post

Someone made a portrait mode Doom called Toom. Since portrait mode CRT screens were a thing back in the 90s this might be one of those wacky modes your ports could support. And if it had real-time detection of the screen being tilted over, that would be awesome. The port was inspired by youtuber LGR covering such a monitor from the 90s and lamenting the lack of a suitable Doom port.

https://hackaday.com/2021/07/11/but-does-it-run-toom/
 

Share this post


Link to post
3 hours ago, zokum said:

Someone made a portrait mode Doom called Toom. Since portrait mode CRT screens were a thing back in the 90s this might be one of those wacky modes your ports could support. And if it had real-time detection of the screen being tilted over, that would be awesome. The port was inspired by youtuber LGR covering such a monitor from the 90s and lamenting the lack of a suitable Doom port.

https://hackaday.com/2021/07/11/but-does-it-run-toom/
 

Not only that, he made a video on it.

 

 

Share this post


Link to post

I saw the video, it was great and this seemed to be within the realm of interesting gfx modes fast doom supports.

Share this post


Link to post
Posted (edited)

I think I can replicate the idea of Toom in an easy way. Having a backbuffer for the new modes really simplifies this idea, it's possible to transpose the backbuffer and scale to a 320x400 VGA planar or similar resolution. I know, the aspect ratio will be wrong and it'll look stretched, but this way I don't have to modify all the code and assets just for this mode. I'll do some testing, since there are multiple resolutions available for planar VGA:

 

Quote

GFX_MODEX

Mode-X will work on any VGA card, and provides a range of different 256-color tweaked resolutions.

    Stable mode-X resolutions:
        Square aspect ratio: 320x240
        Skewed aspect ratio: 256x224, 256x240, 320x200, 320x400, 320x480, 320x600, 360x200, 360x240, 360x360, 360x400, 360x480
    These have worked on every card/monitor that I've tested.
    Unstable mode-X resolutions:
        Square aspect ratio: 360x270, 376x282, 400x300
        Skewed aspect ratio: 256x200, 256x256, 320x350, 360x600, 376x308, 376x564, 400x150, 400x600

 

Edit: Done, now I need to optimize the algorithm

 

 

20210721_003928.jpg

Edited by viti95 : New vertical mode implemented

Share this post


Link to post
12 hours ago, viti95 said:

I think I can replicate the idea of Toom in an easy way. Having a backbuffer for the new modes really simplifies this idea, it's possible to transpose the backbuffer and scale to a 320x400 VGA planar or similar resolution. I know, the aspect ratio will be wrong and it'll look stretched, but this way I don't have to modify all the code and assets just for this mode. I'll do some testing, since there are multiple resolutions available for planar VGA:

 

 

Edit: Done, now I need to optimize the algorithm

 

 

20210721_003928.jpg

Bit squished on the HUD, as one would expect, but damn is that neat to see.

Share this post


Link to post
Posted (edited)

@Dark Pulse I've added another version for vertical monitors that doesn't do the scaling process (faster, VGA planar 320x350), the aspect ratio is a little bit off but at least is pixel perfect.

 

doom_mode_v2.png.c2e36cc6535303fe66cd11192237cffa.png

 

I'm currently on a vacation so I can't test it on real hardware, I'll upload a new version when I come back. Also the development process will slow down a little bit, my girlfriend broke up with me, and I'll spend some time on getting better.

Share this post


Link to post
4 hours ago, viti95 said:

I'm currently on a vacation so I can't test it on real hardware, I'll upload a new version when I come back. Also the development process will slow down a little bit, my girlfriend broke up with me, and I'll spend some time on getting better.

I am sorry to hear this Viti. Take your time and perhaps slay a demon or two along the way :)

Share this post


Link to post
9 hours ago, viti95 said:

I'm currently on a vacation so I can't test it on real hardware, I'll upload a new version when I come back. Also the development process will slow down a little bit, my girlfriend broke up with me, and I'll spend some time on getting better.

Taking care of yourself is always more important than projects. If you're not the type for whom working on stuff would keep your mind preoccupied from thinking about it, then step back a bit and get your head right.

 

Breakups suck, but there are plenty of other people out there.

Share this post


Link to post

A small update for the next release, EGA 640x200 16 colors (ordered dithered 2x2). Has some room for improvement. This is running on DosBox-X, this weekend I will try it on real hardware (expect it to be really slow on 8-bit ISA EGA cards).

 

 

And this is running on a real ISA 8-bit Trident VGA card (my MCE2VGA has stopped working so this is the closest I can get)

 

 

Edited by viti95

Share this post


Link to post

Wait, is the framerate still capped at 35?

 

I'd like to be able to play Doom at the superior 70 fps.

Share this post


Link to post

That EGA mode looks good and seems it's pretty fast too, AFAIK that trident card was extremely slow.

Share this post


Link to post
1 hour ago, Nikku4211 said:

Wait, is the framerate still capped at 35?

 

I'd like to be able to play Doom at the superior 70 fps.

Has it in the top right.  Between 31-33.6

Share this post


Link to post
On 9/25/2021 at 12:04 PM, Nikku4211 said:

Wait, is the framerate still capped at 35?

 

I'd like to be able to play Doom at the superior 70 fps.

 

You can unlock the framerate but there isn't any kind of interpolation between frames. I still have to implement this.

 

On 9/25/2021 at 12:24 PM, drfrag said:

That EGA mode looks good and seems it's pretty fast too, AFAIK that trident card was extremely slow.

 

It still requires a very fast cpu to run properly, maybe a 486DX-100 or better. The dithering process it's very optimized with precalculated LUTs for the colormap, but the chunky to planar conversion is the main problem (no wonder why Commodore Amiga had so many problems to run Doom properly). And yeah, the 8-bit ISA EGA/VGA cards don't help, they are slow as hell

 

On 9/24/2021 at 5:06 AM, RetroGamer02 said:

I love FastDoom it majorly helps Doom run on my low end i486 machine. =)

Can't wait for the next release!

 

The next release will have some pretty cool new features, the 640x200 16 color EGA dithered mode, a CGA 160x100 16 color mode and a new native VGA 160x200 16 color mode. Also support for Sound Blaster Direct Mode, which works fine with PCMCIA cards (no DMA support).

 

The new VGA mode has never been used anywhere, doing some research I was able to hack the 80x25 text mode to generate 200 scanlines. This results in a 80x200 resolution, but using half-width characters it's possible to double the horizontal resolution to 160x200. This mode is very fast even for 8-bit ISA VGA cards, as the memory layout is chunky, and only 16Kb of VRAM has to be updated each frame.

 

 

Edited by viti95

Share this post


Link to post

Small update, just a video of FastDoom running on the CGA 160x100 (16 color) mode. This mode is very fast on CGA cards, even for an 8-bit ISA card. It's even possible to use video+sound on the same card (CGA cards usually include a parallel port)

 

 

Share this post


Link to post

So I have a small feature request/bug report. There is a bug in FDOOM (at least in VGA/VESA versions):

 

fdoom_001.png.c6b49ddc13903f8085294ee55d68db0a.png

 

No HUD in automap mode. Usually, I play DOOM in fullscreen mode and highest windows size (aka without HUD) and most source ports have a way of letting player know how much health and ammo he has. In vanilla 1.9 I use fast double-tap TAB key just to look at statistics but in FDOOM there is no other way than just make player window smaller.

 

Would it be possible to just draw player's avatar in full windows size (to keep it fast), something like this?:

fdoom_000.png.e672d08b1c6260cd2b4dc9546470e783.png

 

And then just have statistics bound on key and write them on screen while key pressed. I personally like minimalism and fast gameplay so I think just having DOOM-face to roughly know how much HP is left is just enough and it shall be fast to render.

 

Share this post


Link to post

Hey i did that in RUDE (showing the mugshot only) but on the other side of the screen.

Share this post


Link to post

Well I had to disable the HUD in the biggest screen size automap because it was causing lot's of troubles with the new backbuffer modes (13h, VESA, etc.). Maybe I should add a screen size that enables fullscreen rendering and add a little bit of information. What would you think it would be the best HUD for fullscreen?

Share this post


Link to post
17 hours ago, viti95 said:

What would you think it would be the best HUD for fullscreen?

 

I see V_DrawPatchDirect() defined in v_video.c (BTW: Can I borrow it?). It would be sin not to use it. Use it like the floppy icon. Just one patch, updated as needed.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×