VOGONS


First post, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie

Glidulator GL-1 0.9.0 (preview) - a software implementation of the 3dfx Voodoo Graphics and Glide 2.x for real DOS and Windows 95/98/ME.

"The Voodoo-compatible 3D accelerator that fits in a single file. No add-in board. No pass-through cable. No jumpers."

Hi everyone,

Up front, in all honesty: this project would never have been possible without AI. A large part of the code was written together with an AI assistant. If that's not your cup of tea, no hard feelings - there are plenty of Voodoo 2 cards out there that maybe Glidulator has just made obsolete.

For everyone else: what if a modern PC booting plain DOS could run the 3Dfx versions of games and demos without a Voodoo card? That's what Glidulator does. It replaces GLIDE2X.OVL (DOS) or glide2x.dll (Win9x), and the game renders through a CPU-based Voodoo Graphics instead of the real card.

How it works

  • Glide calls program the same Voodoo registers that 3dfx's driver did. A register-accurate rasterizer ported from 86Box then draws the triangles: perspective-correct textures, mipmaps, Z/W buffer, fog, alpha blending, NCC/YIQ textures, the 4x4 dither, and the RAMDAC gamma.
  • Unlike Glide wrappers, it does not translate to Direct3D/OpenGL. It needs no GPU driver at all, which is the whole point under real DOS.
  • x86 JIT: the pixel pipeline is compiled to SSE2 code for each render state.
  • Multi-core under DOS: the OVL starts the additional CPU cores itself (INIT/SIPI) and uses up to 4 of them as render workers. This works on plain DOS / HIMEM, and also under SBEMU with HDPMI32i (ring 3, on the host's page tables).
  • Output via VBE 2.0 LFB with aspect-correct scaling to any mode, with a VGA mode 13h fallback. Write-combining via MTRRs on real hardware.

Optional extras (all off by default)

  • FSAA like the Voodoo 5 (2x/4x rotated grid, or auto)
  • The Voodoo Graphics video output filter for the authentic "Voodoo look"
  • A CRT effect that makes the screen "lock on" like an analog monitor when the game switches to 3D
  • 3dfx's spinning logo, read from an original GLIDE2X.OVL/DLL you already own (nothing from it is executed)
  • An OSD with fps, render path and thread count

Tested
DOS: Nature, Dimension, Shortcut, Trip, Fucktory, GTA, Burnout, Archimedean Dynasty (menus)
Windows: GLQuake (with the original 3dfx MiniGL), Nature95, Formula 1, Uprising, all 7 entries of Operation 3DFX '98
Real hardware: Core i7-4770T with FreeDOS and Windows 98SE. Under SBEMU + HDPMI32i, Nature and Dimension run with 3 render workers and the JIT.

About performance: so far the focus has been on correctness and compatibility, not on speed, so there are no benchmarks yet. The OSD (GLIDULATOR_OSD=1) shows the frame rate if you're curious, and numbers from your machines are very welcome.

Requirements
CPU with SSE2 for the JIT (it also runs on a 386, just... don't). For multi-core under DOS: no memory manager, HIMEM only, or SBEMU with HDPMI32i. Under EMM386/VCPI and in the Win9x DOS box it falls back to one core.

Known issues in 0.9.0

  • Win98 + GLQuake: the picture can freeze in the attract demo behind the main menu. Press Enter and it continues.
  • Single-pixel gaps on shared edges of triangle fans
  • grAA*, guMP* and guTexCreateColorMipMap are stubs (no tested title uses them)
  • SBEMU with the VDPMI pre-release is experimental; HDPMI32i works
  • Win9x only uses one core (OS limitation)
  • Games with statically linked Glide (e.g. the 3Dfx Tomb Raider, Carmageddon) cannot be supported this way

Download & source
Release: https://github.com/ElTentakel/Glidulator/releases
Source (GPLv2): https://github.com/ElTentakel/Glidulator

The package contains Release, Trace (performance log) and Debug (crash handling, frame capture) variants, plus a commented GLIDULAT.CFG with every setting.

Feedback very welcome!
I'm especially interested in:

  • other DOS/Win9x Glide 2.x games: does it work?
  • real-hardware results: CPU, chipset, memory manager, and what the OSD shows
  • results with SBEMU on different sound chips

If something breaks, please run the Debug variant and post the GLIDULAT.LOG (here or as a GitHub issue).

Thanks to Sarah Walker and PCem (the rasterizer this is built on), 86Box, ranulphus/MGA-Glide (clean-room Glide 2.x ABI description), sezero for the Glide source mirror, crazii for SBEMU/VDPMI, and Japheth for HDPMI.

Last edited by ElTentakel on 2026-10-12, 04:24. Edited 1 time in total.

Reply 1 of 17, by willow

User metadata
Rank Member
Rank
Member

lands of lore 2 is a 3dfx dos game if you want test.

nglide and dgvoodoo 2 have some problems with this game and glide emulation.

Is it possible to use it with dosbox staging or dosbox-x ?

If you can add high resolution rendering support like dgvoodoo 2 and nglide, it would be amazing. i don't know if it is possible.

Reply 2 of 17, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie
willow wrote on 2026-10-11, 21:03:

Is it possible to use it with dosbox staging or dosbox-x ?

If you can add high resolution rendering support like dgvoodoo 2 and nglide, it would be amazing. i don't know if it is possible.

Yep, it runs in DOSBox, but you can’t use the multicore feature there. I haven’t tried running it as a wrapper around DOSBox yet, but I can’t think of a reason it wouldn’t work. Maybe I should add a multithreaded version for NT based systems. But then you might want to use a Glide Wrapper anyway.

Reply 3 of 17, by leileilol

User metadata
Rank l33t++
Rank
l33t++

more discrediting sarah's emulation code from PCem via slop

i'm tired boss

apsosig.png
long live PCem
FUCK "AI". It is a tool of fascism. We do not need it. We do not use it.
Debian's fucked

Reply 4 of 17, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie
leileilol wrote on Yesterday, 01:50:

more discrediting sarah's emulation code from PCem via slop

i'm tired boss

Thanks for pointing that out.

That has nothing to do with AI slop. In forked projects, it's often hard to tell where a contribution actually comes from. I've fixed it in the post and will fix it in the source as well. I don't mind if this software ends up in three different forks whose maintainers don't even know me. But this project is very important to me. I've dreamed of it since 2009, and without the help of these tools, it wouldn't exist.

At the same time, it didn't build itself. Over the past few weeks, I've spent many hours on it alongside everything else in my life, and the AI tools alone wouldn't have known what the solution should look like. That's also why I understand how important proper credit is: every day, thousands of developers contribute to open source without their names ever being noticed.

In fact, that's exactly why I referenced existing projects: I didn't want the work of their developers to disappear behind generic AI-generated code. This work deserves to be visible, and I'll make sure it is.

Reply 5 of 17, by mwdmeyer

User metadata
Rank Oldbie
Rank
Oldbie
ElTentakel wrote on Yesterday, 04:31:

In fact, that's exactly why I referenced existing projects: I didn't want the work of their developers to disappear behind generic AI-generated code. This work deserves to be visible, and I'll make sure it is.

AI is the future, even if you agree or disagree with how it works or who owns it etc. It is going to open up so many cool tools (like yours) for the retro community. So I say great work!

It's really funny, I've been working on some glide stuff as well, but for running on real hardware (works well).

Anyway nice project, I will check it out!

This is mine: https://github.com/michaeldale/velocity9x

Vogons Wiki - http://vogonswiki.com

Reply 6 of 17, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie

Fun fact: your project, together with other contributions to DOS drivers, was what finally got me to start the whole thing. AI now finally has the knowledge to help adapt Linux driver work to DOS, which opens up a huge field of opportunities.

The hard part will be making the projects compatible with each other, especially when multiple cores are involved. For example, I detect CSMWrap, since it occupies a core of its own. However, that detection doesn't work very well yet.

Reply 7 of 17, by zyzzle

User metadata
Rank Oldbie
Rank
Oldbie

This is one very, very good use of AI coding. To help the retro community help with hitherto impossible or very difficult projects. In general, I don't support AI slop either, but in specific instances it can help and fills a need admirably. 99% of what AI and LLMs are being used for now is totally a "first world" and "pure capitalism" problem (eg, a "created" way to launder money and wean the public on stuff they don't need).

Thanks for releasing this project. I look forward to following its progression and trying it out.

What I understand is that your project will run the DOS 3dfx version of, for example, Tomb Raider, on a "modern" system without a 3dfx card. Other DOS games like Screamer 2 and Carmageddon may run their 3dfx DOS versions on bare metal (no DOSBOX, nothing loaded except bare DOS and the game's 3dfx .exe)?

Reply 8 of 17, by zyzzle

User metadata
Rank Oldbie
Rank
Oldbie

I didn't RTFM and now know why both Tomb Raider and Carmageddon won't work.

However, I did get Screamer 2 and Screamer Rally 3dfx versions working in bare metal DOS. This on a laptop with no 3dfx card present of course. The system was an i5-3427 running at 2.9 mhz in DOS, with MTRRLFBE enabled and LFB writecombining working.

The .cfg has robust options, including the ability to use my laptop's native 1366x768 resolution, and therefore display the rendered 640x480 frames in the proper aspect ratio. (not stretched to 16:9). However Falcosoft's utility does this natively now for all 4:3 dos content. But this .cfg option will work on intel core systems where Falcosoft's utility will not (Skylake and above).

The framerate is between 10 and 15 fps in pure DOS. There are only 2 cores on this system. I'll try another laptop (i5-8250) soon, which has 4 cores and will hopefully run @ approx. 30 fps.

Great work!

Reply 9 of 17, by DoZator

User metadata
Rank Member
Rank
Member

It looks amazing! Thank you. I checked in a hurry (So far only on Windows 98) and it really works there.

Can you add redirection to OpenGL \ DirectX 7-9c as an additional option, so that you can use real hardware and enable AA\AF x16?

EDIT: I deleted the previously added screenshots because, due to “nolfb.com” in the game’s BAT file — which I forgot to remove — the quality of those images didn’t match reality. I haven’t found a way to take new screenshots yet (for some reason, PrintScreen doesn’t work with the shell without “nolfb.com”).

Last edited by DoZator on 2026-10-12, 20:37. Edited 3 times in total.

Reply 10 of 17, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie
zyzzle wrote on Yesterday, 10:48:
I didn't RTFM and now know why both Tomb Raider and Carmageddon won't work. […]
Show full quote

I didn't RTFM and now know why both Tomb Raider and Carmageddon won't work.

However, I did get Screamer 2 and Screamer Rally 3dfx versions working in bare metal DOS. This on a laptop with no 3dfx card present of course. The system was an i5-3427 running at 2.9 mhz in DOS, with MTRRLFBE enabled and LFB writecombining working.

The .cfg has robust options, including the ability to use my laptop's native 1366x768 resolution, and therefore display the rendered 640x480 frames in the proper aspect ratio. (not stretched to 16:9). However Falcosoft's utility does this natively now for all 4:3 dos content. But this .cfg option will work on intel core systems where Falcosoft's utility will not (Skylake and above).

The framerate is between 10 and 15 fps in pure DOS. There are only 2 cores on this system. I'll try another laptop (i5-8250) soon, which has 4 cores and will hopefully run @ approx. 30 fps.

Great work!

Thank you very much for the kind words! Yes, there are ways to get games working where the Glide library is statically linked. But my first goal is to get Glide2 running well and fast under DOS. I also have some other features in mind, like accelerated output under Windows 98 SE, SMP (which might not even be possible on 9x), Glide3x support, and maybe even support for early DirectX games. So please be patient, or contribute if you can’t wait 😁. The idea isn’t to build something that just somehow works, it should be genuinely useful for the people who use it.

Just a side note: in theory, this should also work on NT-based operating systems as a host-side Glide wrapper for a 32-bit DOSBox-X. Back in the day, I used the same approach to hook up my Voodoo2 as a renderer for DOSBox. But I haven’t actually tested this yet and it’s not the goal of this project either 😁

/edit: I think I misunderstood willow. I’ve also added a 64-bit build version to the to-do list, in case that’s useful.

Last edited by ElTentakel on 2026-10-12, 15:15. Edited 3 times in total.

Reply 11 of 17, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie
DoZator wrote on Yesterday, 13:31:

It looks amazing! Thank you. I checked in a hurry (So far only on Windows 98) and it really works there:

...

Can you add redirection to OpenGL \ DirectX 7-9c as an additional option, so that you can use real hardware and enable AA\AF x16?

Thank you very much for testing! I tried to keep the render paths modular, so it might be possible. The main limitations are time and tokens. But to be honest, it’s not my top priority right now.

Reply 12 of 17, by myne

User metadata
Rank l33t
Rank
l33t
ElTentakel wrote on Yesterday, 14:43:

/edit: I think I misunderstood willow. I’ve also added a 64-bit build version to the to-do list, in case that’s useful.

I suspect SSE/AVX would add a lot of performance. Is that what you mean?
Since the "workers" are running basically as a microcontroller, you should be pretty free as far as that side of the architecture goes.

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 13 of 17, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie

You're right, the extra CPU cores are basically like dumb microcontrollers. But not all features are easily accessible under DOS, since some hardware and firmware protection mechanisms get in the way.

I meant that with 64-build a bit differently. In theory, there are two ways to use this library: inside DOSBox and outside of it. Inside DOSBox, performance is very poor, because you lose all the advantages: no SMP, slow CPU emulation, and at best MMX.

Outside, DOSBox-X simply passes the Glide API calls through to an external Glide DLL on the host. That's where you can either use an original 3dfx Glide DLL to render on a real Voodoo (32-bit OS only, depends on the driver), or use a library as a host-side wrapper with multithreading and modern CPU features.

A 64-bit build of DOSBox-X would need a 64-bit build of the library, since a 64-bit process can't load 32-bit DLLs. It's on my to-do list, but only as a low priority. The main goal of this project isn't DOSBox, but supporting the native platforms

Reply 14 of 17, by myne

User metadata
Rank l33t
Rank
l33t

So sse/avx requires more access?
You can't just drop in the assembly instructions to chomp on the data in memory?

(I'm talking bare metal or at least a proper hypervisor with more cores assigned)

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 15 of 17, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie
myne wrote on Today, 05:45:

So sse/avx requires more access?
You can't just drop in the assembly instructions to chomp on the data in memory?

(I'm talking bare metal or at least a proper hypervisor with more cores assigned)

Maybe "access" is the wrong term. The following is about DOS only, Win9x is a much more difficult beast. There are two things to consider: the main core (the one DOS and the game run on) and the worker cores.

The main core has to live with whatever environment the system gives it. Boot plain DOS without a memory manager and you are in ring 0. Want SBEMU? Then you need HDPMI32i or VDPMI, and the game runs in ring 3, because SBEMU traps the Sound Blaster ports through the I/O permission bitmap, which only works above IOPL. The DOS box of Windows is ring 3 as well. The workers are a different story. DOS has no scheduler, so the OVL starts the other cores itself (INIT/SIPI to a small trampoline). They don't belong to the DPMI host, so they can run in ring 0 even when the game is in ring 3. The big challenge was to give them the same address space as the game: under HDPMI32i they load the host's page tables, under VDPMI memory is mapped 1:1 and they run without paging.

Because the workers bypass the host's protection, they follow very tight rules: no port I/O, no MSR writes, no BIOS or DPMI calls, interrupts off. Before a worker touches any memory outside its trampoline, it checks a few bytes of heap and code against the main core's view and halts on a mismatch, so a wrong address space means "single core", never stray writes. If a worker crashes or hangs for 2 s, the main core redraws its lines and carries on alone.

SSE (the JIT renderer) needs CR4.OSFXSR, otherwise the first SSE instruction raises #UD. In ring 0 the OVL sets the bit itself. In ring 3 it depends on the host: HDPMI32i sets it, VDPMI does not (C renderer there, same picture). AVX would need CR4.OSXSAVE and XSETBV, but neither DOS nor Win9x saves the upper YMM halves, so it is never used. Getting this right took a lot of crash screens. That's what the debug build is for: its own exception handler in ring 0 that tells you which exception hit where.

The nice part: the main core can run in ring 0 or ring 3 without you noticing. The OVL detects the environment and picks the matching path (GLIDULATOR_SMP=auto, or force ring0/paging/flat/off). The one thing that gives you a single core is a memory manager with paging but no DPMI host, e.g. plain EMM386.

    Environment               Main core       Workers                   SSE/JIT
------------------------ -------------- ------------------------ -------
Plain DOS / HIMEM only ring 0 ring 0, no paging yes
EMM386 (VCPI, no DPMI) ring 0, paging none (single core) yes
HDPMI32i + SBEMU ring 3 ring 0, host's page dir yes
VDPMI + SBEMU ring 3 ring 0, no paging (1:1) no (C)
Windows DOS box ring 3 none (Windows owns APIC) 98SE: yes

Reply 16 of 17, by BaronSFel001

User metadata
Rank Member
Rank
Member
leileilol wrote on Yesterday, 01:50:

more discrediting sarah's emulation code from PCem via slop

i'm tired boss

It's one thing to stand on belief, another to be incorrigible. I am NO fan of AI, do not use it, and draw the line at the point it starts replacing people, but I am still open-minded at how it can save A LOT of effort while delivering faster results for everyman projects like this, book proofreading for budding authors, etc. As retrocomputing enthusiasts we of all people should be cognizant of the critical balance between keeping our essential humanity and the use of available tools to accomplish more.

A sweeping dismissal of AI like this might as well be a sweeping dismissal of modern technology altogether...and if that is the direction you want to go, the Amish are an example of how to make a good life out of it.

System 20: PIII 600, LAPC-I, MK1869 Xtreme, Voodoo3, SQ2500, R200, 3.0-Me
System 21: G2030 3.0, X-fi Fatal1ty, GTX 560, XP-Vista
Retro gaming (among other subjects): https://baronsfel001.wixsite.com/my-site

Reply 17 of 17, by gmaverick2k

User metadata
Rank Member
Rank
Member

Could someone do a proof of concept YouTube video for this plz

Main: Z440/E5-1650 V4/3060Ti/64GB/iFi Zen DAC V1/Klipsch ProMedia 2.1 THX/Philips 43PUS8808/12
98/DOS: QDI Advance 10T/Pentium iii-S 1.4 GHz/Quadro2 Pro/Vortex 2/ESS 1868f/SC-55/SC-88 Pro/LG StudioWorks 995E
XP: Thinkcentre Edge 72/i5-3570K/GTX 970/X-FiTi