VOGONS


First post, by starfrost

User metadata
Rank Newbie
Rank
Newbie

Current version: 0.2 (23 May 2025)
Repository: https://github.com/starfrost013/nvplayground (uses MS-DOS + DJGPP)

For the last year I have been working on reverse engineering the early NVidia GPUs to emulate them (mostly the 128 and, later, TNT1) in 86Box. Currently 2D mostly works under the Riva 128 (I am running into issues with the screen to screen blit functionality). I'm also starting to work on a wiki: https://nvwiki.org. It's intended to cover up to at least NV10 eventually.

As a part of this I have been developing tools and software for programming the hardware without using the drivers under MS/FreeDOS or the Win9x DOS box (NTVDM not tested). nvplay is a 32-bit DJGPP app that takes control of the Riva 128 in order to program it using raw registers, for the purpose of understanding how it really works. This software uses the PCI BIOS to identify the GPU. If it is supported, it will map its PCI BARs. Then it can run a series of tests that are defined in the nvplay.ini file for each GPU.

Currently this software is capable of dumping the Video BIOS and PCI BARs of a RIVA 128/128ZX while it is running, as well as printing the embedded manufacture-time configuration information (and logging all of this to a file). In the future, this software will be able to do graphical tests entirely without using the drivers, make low-level configuration changes and possibly lead to custom drivers. It can also overclock these GPUs, but this functionality is disabled currently for safety reasons (you can turn it on by setting NV3_SetOverclock to 1 in the nvplay.ini file).

Help wanted: I would like anyone who has one of these GPUs to run this app while their GPU is doing various things (e.g. sitting in DOS, playing a 3D game or just sitting in Windows) and then to send me the generated NVPLAY.LOG, NV3BIOS.BIN, NV3BAR0.BIN and NV3BAR1.BIN files, this will help quite a lot with my research.

Reply 1 of 3, by the3dfxdude

User metadata
Rank Oldbie
Rank
Oldbie

Have you looked at the XFree86 3.3.2 (2d) and Utah-GLX (3d) drivers for NV3? Nvidia wrote open source drivers to these cards for X, and one day infamously patched to obfuscate them (seems like they ran it through the preprocessor and committed that), and later went fully closed source. The XF3.3.2 is not obfuscated for the NV3, so it might be worth looking at. As they continued to maintain it for a little while after, the nv driver maintained by nvidia supported NV3-NV10, so that could be more info if you want to look at XFree86 4.x.

Reply 2 of 3, by starfrost

User metadata
Rank Newbie
Rank
Newbie

I have! It has been very useful indeed. Another useful one has been the more obscure "RivaTV" project from the early 2000s. (https://rivatv.sourceforge.net/)

Reply 3 of 3, by starfrost

User metadata
Rank Newbie
Rank
Newbie

Seems I don't have the power to edit posts, so version 0.2.1 (fixing a minor corruption in MMIO BAR dumping) has been released.