5

reading of this question brings up 3Dfx Voodoo 1 Emulator in my memories. I always wandered how did it work so good time as any to ask...

My memory is hazy on the details so I might miss remember things anyways this is what I remember:

I saw 3Dfx Emulator v0.2 from ELZ SOFTWARE was MS-DOS utility (single almost 1 MByte executable without any additional files) that had to be started before any 3Dfx SW. It took about 30sec-2min on AMD K5 120MHz PC to start. I always assumed its a TSR and created some kind of LUT tables in memory to speed up stuff. After that MS-DOS 3Dfx capable games could run (not all though) without the HW present.

What was a surprise for me was that the stuff runs fast. Not as fast as the real 3Dfx hw but much faster than usual SW render.

Does anyone know what techniques where used to do this?

How the emulator bypassed missing 3Dfx HW. IIRC on win apps 3Dfx was encapsuled in single Glide?x.DLL with all OpenGL 1.0 functions which by exchanging it with OpenGL hooked DLL worked too (however winding rule was inverted sometimes).

But how it was done in MS-DOS (there are no DLL involved in there)?

How it achieve high rendering speed? The quality was not as good as real HW but better than games SW native render.

In case it helps From a quick google search looks like its in here however the link says its blocked for Chrome (if anyone has working link to this please edit it in)...

I just tested it in DOSBox:

First its telling it is building 4x255 tables:

init start

and after serious boost to emulation cycles it do some kind of 8-pass initialization:

init done

after this DOS 3Dfx SW is runable, no temp files are visible anywhere...

0
6

This is only a partial answer, at the OP’s request, addressing the following:

But how it was done in MS-DOS (there are no DLL involved in there)?

I don’t know whether this emulator used this technique or not, I haven’t been able to download it to even check whether it works under DOS or Windows.

However, under MS-DOS, there were multiple implementations of dynamically-linked libraries, and 3Dfx’s Glide used one of them. Starting with MS-DOS 2, interrupt 0x21 function 0x4B03 supports loading “overlays”, i.e. portions of executables stored in separate files (typically with a .OVL extension); DOS itself performs MZ-style relocation in these overlays if appropriate (The MS-DOS Encyclopedia has a detailed example starting at page 335). Other runtime libraries extend this; many Borland languages provide their own version, as do a number of DOS extenders, such as Tenberry’s DOS/4G, which supports overlays in Linear Executable format.

The 3Dfx DOS drivers include a DOS/4G overlay, GLIDE2X.OVL, which provides the implementation of Glide appropriate for the card they drive. Most DOS 3Dfx games would look for this in their own directory, and would load it at runtime to use the installed 3Dfx card (there were a few early exceptions which built their 3Dfx support in).

As a result, other implementations can be provided, as long as they include all the same symbols as GLIDE2X.OVL. This is how a number of OpenGL- or Direct3D-based Glide wrappers work. A putative pure DOS emulator could have been implemented in this fashion: implement Glide in software, and ship it as a replacement overlay.

3
  • thx, ... I will wait few days if someone come up with the second part ... if not will accept this if yes will accept better answer. – Spektre Mar 2 at 7:28
  • 2
    No pressure, there’s no need to accept an answer which isn’t fully satisfactory! And even once you’ve accepted an answer, if a better one is posted, you can unaccept the accepted answer and accept the new one instead. – Stephen Kitt Mar 2 at 7:48
  • btw just comming through my archives ... the 3Dfx drivers of mine got the GLIDE2X.OVL you mentioning its roughly the same size (~300KByte) as the DLL version for windows. I see the tokens at it start ... after searching in the emulator rxecutable there are no such tokens (but might be compressed) ... my bet is the TSR is scanning of opening *.ovl file and injekting its contents instead – Spektre Mar 2 at 11:10
2

Community Wiki because this doesn't yet come close to being an answer, but I think helps with discussion and might be a basis from which others can get to an answer:

The page you link to isn't blocked in Safari, but is blocked from my eyes due to being in Russian. Nevertheless, Google will translate the 3dfx mention as:

3Dfx Emulator v0.2 from ELZ SOFTWARE [970 kb] - firstly, at present, this program is very slow and you will need a fast Pentium computer, secondly, you can get a full-fledged emulation only on the P200. 3Dfx Emulator will not work with straight 3D games. The program does not work under Windows NT.

Downloading the linked file and checking its readme (which is in English, no translation necessary):

Why spent money on a expensive card when you can get it for free? This program emulates a 3Dfx in software. This is a early beta and all functions in the 3Dfx-chipset is not implemented yet.

At the moment, this program is quite slow and you will need a fast Pentium II to get full speed of emulation, on a P200 you will get about 50% of a real 3Dfx. I think that is pretty good anyway for a software emulation, I have used some special caching technology to archive fast emulation but it is not fully optimized yet.

The compatibilty is another issue, because all functions is not implemented yet, it will not work with all games, I have included a list on the games I have been able to get the emulator to work with.

3Dfx Emulator will NOT work with games using Direct 3D if you have Direct X 5 installed, use Direct X 3. Sorry about this...

It will NOT work under Windows NT.

In the near future: ... Support for Direct X

Based on the lists of game titles (including GLQuake, Flight Simulator and Star Wars Shadows of the Empire), and the DirectX mentions, although this emulator launches in DOS it seems to be a DOS/Windows hybrid.

Furthermore, its actual authors don't seem to agree with your analysis, stating that the emulation "is quite slow" — and at 50% speed on a P200 that's borne out; I had a P200 and adding a 3Dfx got me stable frame rates and bilinear filtering but definitely did not double performance.

Beyond that, the only clue is "special caching technology", which could mean almost anything.

3
  • my memory is hazy on this so I might misremember the computer (K5 120MHz) with latter one I used (K6-2 400MHz) , but the speed and quality where compared between SW, 3Dfx emulator and real 3Dfx (I did have one at the time) and it was definately faster and better quality than standard SW render option on all games that worked with this ... However my question is about how it was achieved from bypassing HW and rendering aspect – Spektre Feb 28 at 20:23
  • the "special caching technology" sound promising ... Also I do not think it was hybrid ... it did work only for DOS executables ... however it was possible to run such executables under w9x ... the NT note is most likely just about that it will not work in similar manner like w9x – Spektre Feb 28 at 20:28
  • @Spektre it lists Microsoft Flight Simulator 97 as supported. There isn't actually a Microsoft Flight Simulator 97, but both releases with the 9x name — i.e. Flight Simulator 95 and Flight Simulator 98 (which at least came out in 1997) are Windows exclusives. Therefore the readme explicitly promises Windows support. – Tommy Feb 28 at 21:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.