One think will be amazing, i dont know how difficult will be to implement is AudioCD. If i dont remember bad, Ultimate Doom soundtrack is something like 50-55min longer and Doom 2 70-75, perfect to fit in a cdrom
Mmmm interesting idea, I've never worked with the MSCDEX but will take a look into it. Is there any Doom port that already implements this?
Yeah Watcom at least USED to have dynamic linker support, but I think it only works with certain DOS extenders (maybe not DOS/32A)
Is there any tutorial or example on how to develop this? I think this will be extremely helpful reducing the number of executables (and executable size)
One think will be amazing, i dont know how difficult will be to implement is AudioCD. If i dont remember bad, Ultimate Doom soundtrack is something like 50-55min longer and Doom 2 70-75, perfect to fit in a cdrom
Mmmm interesting idea, I've never worked with the MSCDEX but will take a look into it. Is there any Doom port that already implements this?
Hi, thanks
Yes, DosDoom 0.653 support audiocd and is AMAZING, plus, i get some extra fps compared to opl music, at least in dosdoom benchmarks, and i think this is the goal of fastdoom too
The problem of dosdoom is that you need to manually change the tracks, the idea will be that fastdoom have hardcoded track numbers for every level (e1m1-track1, e1m2-track2, etc) and detect audio cd finish to start track again
Is there any tutorial or example on how to develop this? I think this will be extremely helpful reducing the number of executables (and executable size)
Sorry this is just my memory going back to the 90s...
If you're going to make CD-Audio available, it might be a good idea to make sure it will play arbitrary Audio CDs. I have fond memories of just plopping in whatever CD I wanted to with Quake and it will sequence the tracks with levels. It skips track 1 iirc (for the data).
hello. i am interested in this port, and i have a few questions:
1. is it fully demo compatible with vanilla doom?
2. will there be a 160*100*256c mode? that is, 256 color version of FDOOMC16 and FDOOMC16.
3. is there any plan of porting to djgpp? because djgpp is usually supposed to generate faster binaries than watcom.
2. will there be a 160*100*256c mode? that is, 256 color version of FDOOMC16 and FDOOMC16.
For CGA cards the next release (0.9.3) will feature a "512 color" 80x100 mode, the same used on 8088MPH demos. Will require an original IBM CGA card with composite output. It's pretty much on the limit of what a CGA card can do. For VGA cards the only way to do 160x100@256 is by reducing the rendering resolution and doubling drawn vertical pixels in software because the minimum resolution is 320x200 on 256 colors with VGA hardware (unless there is some trick I don't know). With some tricks it's possible to write 2 or 4 pixels horizontal on a single write. That's why potato resolution is 80x200 and low is 160x200.
3. is there any plan of porting to djgpp? because djgpp is usually supposed to generate faster binaries than watcom.
There is some work done to port FastDoom to DJGPP, but requires rewriting huge parts of the sound code and right now is non-functional. Being almost only one developer with limited time for the project, I haven't spent more time on this. Right now I prefer to optimize even further in Watcom and add support for more hardware. As always any help is very welcome.
For VGA cards the only way to do 160x100@256 is by reducing the rendering resolution and doubling drawn vertical pixels in software because the minimum resolution is 320x200 on 256 colors with VGA hardware (unless there is some trick I don't know).
i think thats what i intended to mean.
There is some work done to port FastDoom to DJGPP, but requires rewriting huge parts of the sound code and right now is non-functional. Being almost only one developer with limited time for the project, I haven't spent more time on this. Right now I prefer to optimize even further in Watcom and add support for more hardware. As always any help is very welcome.
for sound, maybe you can have a look at other dos ports and see how they did it, mbf and eternity comes to mind.
Those ports use the Allegro library for sound, that's another option. But any optimization or support for new sound card has to be redone for this library. About limit-removing, only unlimited sprites are included right now, I've also developed unlimited visplane support but won't be released until is 100% stable.
For CGA cards the next release (0.9.3) will feature a "512 color" 80x100 mode, the same used on 8088MPH demos. Will require an original IBM CGA card with composite output.
That means this will be impossible to try out in emulation, correct?
It's fully working on DosBox-staging, both old and new models of IBM CGA cards are supported. The 512 color mode doesn't require perfect timing cycles, so it should work on any emulator / computer (with the IBM CGA obviously). I still have to try on real hardware since my IBM CGA card composite output is dead.
tldr: he implemented some extensive hacks to doom codebase to make it use less ram ("theoretically, you could run this on a system with only 384kB RAM", but probably not cpu), might be interesting checking his modifications.
For VGA cards the only way to do 160x100@256 is by reducing the rendering resolution and doubling drawn vertical pixels in software because the minimum resolution is 320x200 on 256 colors with VGA hardware (unless there is some trick I don't know
you can stretch scanlines vertically by setting height (minus one) to bits 0-4 of CRTC Maximum Scan Line register (0x3D4 index 9), additionally bit 7 of the same register further doubles line height:
13d4h index 9 (R/W): CRTC: Maximum Scan Line Register 2bit 0-4 Number of scan lines in a character row -1. In graphics modes this is 3 the number of times (-1) the line is displayed before passing on to 4 the next line (0: normal, 1: double, 2: triple...). 5 This is independent of bit 7, except in CGA modes which seems to 6 require this field to be 1 and bit 7 to be set to work. 7 5 Bit 9 of Start Vertical Blanking 8 6 Bit 9 of Line Compare Register 9 7 Doubles each scan line if set. I.e. displays 200 lines on a 400 10 display.
By default, in 320x200 256 color VGA mode, this register has bits 0-4 set to 1 and doublescan bit reset, so as there are actually 400 scanines onscreen, every frame buffer line is displayed twice. setting those bits to 3 makes every line to be scanned 4 times, stretching 320x100 buffer to full screen. Or you can set those bits to 0 to create 320x400 mode, as one supported by Quake 😀
by the way, apart of known and currently used "write 2/4 bitplanes at once" method, you can create true 160x100/200/400 mode by tweaking CRTC to use timings from 320x200 16 color mode and halving pixel clock via Sequencer index 1. Unfortunately, it is not very compatible with some VGA cards (i.e. it needs vendor-specific /2 clock divider for Trident/Realtek, causes out of spec 140Hz vertical refresh on ET6000, and S3 cards either display solid color or mess up RAMDAC writes)
While developing optimizations for Potato mode i've just discovered a bug that I think it hasn't been documented and exists since... 1994 (!!) It just happens that Heretic has a rendering bug on R_DrawSpan (which is ASM optimized and it's much faster compared to Doom R_DrawSpan). It basically renders the first pixel twice and then continues rendering the rest without issues. It's hard to find on a 320x200 resolution, but it becames very obvious on FastDoom's potato mode (80x200):
This is 22% faster, on a 386DX-40 (Ultimate Doom timedemo demo3, fullscreen+HUD and no sound). And here is the cool thing, the same optimization will be applied for low detail and high detail modes on Mode Y, so expect performance uplift on the next release 😁
Doom on CGA without 16bit x86 support is a travesty
Harris 286-25 🙁 no doom
Yeah I know, as is already been said, is very hard to port Doom to 16-bit only instruction set. Maybe some crazy developer (and more experienced than me) could achieve this. Or make Wolfenstein 3D Hercules/CGA/EGA compatible 😏
Last edited by ViTi95 on 2022-12-16, 10:22. Edited 1 time in total.
While developing optimizations for Potato mode i've just discovered a bug that I think it hasn't been documented and exists since... 1994 (!!) It just happens that Heretic has a rendering bug on R_DrawSpan (which is ASM optimized and it's much faster compared to Doom R_DrawSpan). It basically renders the first pixel twice and then continues rendering the rest without issues.
Interesting, the original DOS version of DOOM also used an ASM optimized version of R_DrawSpan (even though id Software never released the DOS version of the source code because of the DMX sound library, they added the ASM routines into the README.ASM file found in linuxdoom).
Or make Wolfenstein 3D Hercules/CGA/EGA compatible 😏
Wolfenstein 3-D alpha had a EGA version that was used in Catacomb 3-D, the direct predecessor. Some of the removed content and leftovers can be seen in the Development Info page of the game in The Cutting Room Floor and the source code respectively.
My Toshiba T5200 runs FastDoom quite nicely already (pimped with 486SXL2-40) but I'm gonna overclock it to 50MHz this weekend by swapping oscillator. Hope it'll be stable...