VOGONS


Voodoo 4 M4800

Topic actions

First post, by sdz

User metadata
Rank Member
Rank
Member

MXM3.0/3.1 TYPE A VSA-100 video card, for finally making a laptop with 3dfx graphics. I'll document it here as I think it will be quite interesting, it's not that straightforward shoving a VSA-100 into a laptop.

The attachment S1.jpg is no longer available
The attachment S2.jpg is no longer available
The attachment S3A.png is no longer available

The PCBs arrived yesterday, and they look great:

The attachment S4.jpg is no longer available
The attachment S6.jpg is no longer available

Reply 1 of 37, by sdz

User metadata
Rank Member
Rank
Member

Laptops with MXM slots, want a video card with an MXM BIOS. Obviously, the usual V4 BIOS isn't MXM compatible. Also, the system BIOS would probably need to be edited to add the VSA ID to the whitelist. I don't want to mess with the system BIOS, or to attempt to make the VSA BIOS MXM compatible.
This means two things:
1. The laptop will not execute the BIOS on the video card. In the case of the VSA-100 it's not that bad. Many registers can be set with hardware straps, but not all. In this case, two important registers are not set to the value that is needed for such an application, vidInFormat[8] and vidInFormat[22] . Because of this, the digital RGB interface of the VSA will output scrambled Chrontel instead of unscrambled Brooktree format.

The attachment S7.jpg is no longer available

And this is how DVI looks with in such a setup (V5 5500 DVI):

The attachment S8.jpg is no longer available
The attachment S9.jpg is no longer available

On the V4 M4800 the usual TMDS encoder was replaced with an FPGA.

2. The laptop will behave as it doesn't have a video card plugged in. Because of this, if it's a laptop with an integrated GPU, it will not toggle the muxes to switch to the video signal coming from the MXM slot.
I intend to use the card in a Dell Precision M4800, which has the LVDS connector close to the MXM slot, so for keeping the solution as much as plug and play possible, I added an LVDS connector on the MXM card. Otherwise, some traces need to be cut on the motherboard. With this also goes backlight control via keyboard, but it may be possible to implement a workaround for this. More on that later.

Another important point is that a laptop screen has a fixed resolution. If the GPU is set to render at a resolution lower than the native resolution of the panel, the GPU will upscale that image so that the panel is always fed with it's native resolution. The VSA-100 will do no such scaling.
Also the panel wants to receive dual channel LVDS/OpenLDI/FPDLIK-I signal. Because of this, the card has a Realtek scaler, that takes the HDMI signal from the FPGA, upscales it if needed, and outputs LVDS to the panel. This is basically what's inside a PC monitor, added on the MXM card.

Reply 2 of 37, by Dothan Burger

User metadata
Rank Newbie
Rank
Newbie

This project sounds awesome. It looks like RTX founders edition level of density on the board.

Reply 3 of 37, by sdz

User metadata
Rank Member
Rank
Member

It is a bit crammed, as it's basically a 64MB V4, plus PCIe to PCI bridge, FPGA, the scaler that's usually inside a PC monitor, a microcontroler, power supplies, various flash ICs/EEPROMs etc. The size of the board is 7x8cm.

I just finished assembly (I'll wash the board better later).

Here it is next to a standard Voodoo 4:

The attachment S10.jpg is no longer available

More photos:

The attachment S11.jpg is no longer available
The attachment S12.jpg is no longer available
The attachment S13.jpg is no longer available
The attachment S14.jpg is no longer available

Reply 4 of 37, by sdz

User metadata
Rank Member
Rank
Member
The attachment S15.jpg is no longer available
The attachment S16.jpg is no longer available
The attachment S17.jpg is no longer available
The attachment S18.jpg is no longer available

Reply 5 of 37, by sdz

User metadata
Rank Member
Rank
Member

Also made an MXM carrier, so I can bring-up the board in a normal PC:

The attachment S19.jpg is no longer available

This looks absolutely ridiculous:

The attachment S20.jpg is no longer available
The attachment S21.jpg is no longer available
The attachment S22.jpg is no longer available

Reply 6 of 37, by Dothan Burger

User metadata
Rank Newbie
Rank
Newbie

That's beautiful! Are you going to sell these?

Reply 7 of 37, by sdz

User metadata
Rank Member
Rank
Member

Probably not, but I'll opensource the design.

Some good news, the card works 😀
Here's it running in a PC, with VGA output:
https://youtu.be/MKRf2rdHCFA?si=6mj1gPLrcQtiUlNY

Next step is getting the HDMI output from the FPGA working. There is a mux on the board, and the HDMI can be routed to the onboard scaler or the MXM connector. This will probably take a while.

Reply 8 of 37, by supercordo

User metadata
Rank Member
Rank
Member

At this point you should just make your own Win98/XP compatible laptop. I would buy it.

Reply 9 of 37, by DrAnthony

User metadata
Rank Newbie
Rank
Newbie

Well done dude! Looks like you've been really busy in the Voodoo lab lately. I know this has some shortcomings that look like a pretty major hill to climb to be a bit more universal, but do you think some outside of the box thinking might be able to improve things? I'm just spitballing here as I don't really tinker with laptops, but would you be able to integrate this into a little box and use thunderbolt for an external GPU? Or does that run headfirst back into the BIOS issues?

Reply 10 of 37, by sdz

User metadata
Rank Member
Rank
Member

@supercordo
That's actually something that I want to do at some point.

@DrAnthony
Thanks! Pretty busy indeed, another board will arrive in a week or so 😀
Using the card via Thunderbolt might actually be OK regarding the BIOS, however:
-last time I wanted to develop a thunderbolt device with Intel's ICs, to get access to the documentation/tools, one would need to describe to Intel what's the application, and get their blessing.
-there would be no way (at least no reasonable way) of getting the image on the laptop's screen. One would need to use an external monitor. At that point it's better just to use a PC.

A couple of updates regarding the V4 M4800:

I got HDMI working through the FPGA:

The attachment 20240602_123557.jpg is no longer available

https://youtu.be/MiMey5aXpYw?si=z9vBNY-1vv89CKvE

The following resolutions (all 60Hz) work fine:

640x480
800x600
960x720
1024x768
1152x864
1280x720
1280x1024
1360x768
1600x900
1600x1024

1280x960 displays a black screen via HDMI, but it's the same on a V5 5500 DVI card, so it's a driver/VSA issue.

1920x1080 works but there are some timing issues to resolve inside the FPGA. I will work on this later, as 1080p is already problematic.
On a regular V5 5500, with the timings provided by Dolenc here The Changeling 3dfx Voodoo 5 5500 , 1080p works only on an Alienware AW3423DWF. I tested with about 5 different other displays, and none work with those timings. First I need to other fix that somehow, or ensure that the scaler accepts those timings. After that, I'll fix the FPGA issue for that resolution.

At the moment, everything works as intended, except the scaler, which is the last part to solve.

The attachment M4800_DG1.png is no longer available

I made this small board with just the scaler, so I can work on this easier:

The attachment 20240531_192019.jpg is no longer available

I ran a couple of benchmarks, 3DMark2001SE, XP SP3, SFFT1.9, default settings, 1024x768, 32bpp, and got the following results:

32MB RAM (2.8V VCORE):
166MHz: 1694
183MHz: 1872
192MHz: 1955

64MB RAM (2.8V VCORE):
192MHz: 2035

Reply 11 of 37, by amadeus777999

User metadata
Rank Oldbie
Rank
Oldbie

Awesome work!

Reply 12 of 37, by sdz

User metadata
Rank Member
Rank
Member

@amadeus777999 Thank you!

I got the cursed scaler working.

It takes 16:9 resolutions and upscales them to 16:9 1920x1080

The attachment 20240603_221030.jpg is no longer available

And 4:3 resolutions, adds black borders, and upscales them to 16:9 1920x1080

The attachment 20240603_221059.jpg is no longer available

Everything mostly works, I fixed a ton of issues (wasted hours trying to "fix" the panel's timings until finally figuring out that a cropped image is not a timing issue (obviously), but overscan). It's not yet ready for the M4800 card. The scaler has two TMDS inputs, and I got only one working. Obviously not the same one I used on the VSA-100 M4800 card.

Reply 13 of 37, by sdz

User metadata
Rank Member
Rank
Member

Got the other TMDS input working, and programmed the scaler on the VSA-100 card:

The attachment 20240604_124648.jpg is no longer available
The attachment 20240604_124705.jpg is no longer available

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

Next is to change the FPGA code a bit, for the messed up video format that the VSA-100 will output when plugged into a laptop.

Reply 14 of 37, by sdz

User metadata
Rank Member
Rank
Member

Here it is, world's first 3dfx powered laptop 😁

The attachment 20240604_150929.jpg is no longer available
The attachment 20240604_150325.jpg is no longer available
The attachment 20240604_150320.jpg is no longer available
The attachment 20240604_150201.jpg is no longer available
The attachment 20240604_150208.jpg is no longer available

https://youtu.be/f1h572CyArk?si=btRd7BH3IB-1CR8d

There are still a few things to do, fix brightness/contrast, figure out why the image is shifted right by about 5 pixels and fix it, read temperature sensors, control fan, send shutdown signal to host in case of overtemperature, and maybe figure out a way of controlling the panel's backlight from the OS. But the card works perfectly 😀

Reply 15 of 37, by DrAnthony

User metadata
Rank Newbie
Rank
Newbie

Wow, wow, wow, wow,WOW! Thanks for sharing this along with your insights. I'm sure we've all got a display sitting somewhere in house that's got some pesky overscan setting. Mine just so happens to be a 2008 vintage Sony TV in my basement, but the pain is there nonetheless.

Reply 16 of 37, by sdz

User metadata
Rank Member
Rank
Member

@DrAnthony No problem 😀 .

I managed to fix the scaler brightness/contrast bug, and set them to some decent values (I'll tweak it to "perfection" later). Now the display looks so much better:

The attachment 20240605_192327.jpg is no longer available

Also measured VRMs temperature, as these are not covered at all by the existing heatsink.

The attachment IMG_20220101_051228.jpg is no longer available
The attachment IMG_20220101_051231.jpg is no longer available

At 2.5V VCORE, 166MHz core/memory frequency, idle: 85.9C, load: 87.6C. This is well within spec, the VRM ICs are rated to operate at 125C. If it ever gets beyond that, the MCU will immediately shut down the power rails and issue an overtemperature event that will shutdown the laptop. This way nothing will ever get damaged.
VSA temperature is good, I can't yet say exactly what it is yet, but the cooling system works really well.

There is a temperature sensor right underneath the VSA, but it's not currently read by the MCU:

The attachment Screenshot 2024-06-05 194516.jpg is no longer available
The attachment Screenshot 2024-06-05 194534.jpg is no longer available

When doing the VRM temperature measurements, I found a bug.

When I tested the card plugged into a PC, I was able to overclock it just fine with V.ctrl or VSA100 OC.
However, when I do the same thing with the card plugged into the laptop, the new clocks apply, but, as soon as a Glide or D3D application is started, the card clocks change back to the default 166MHz.
Either something is messed up in that system, or this is somehow caused by the lack of VSA BIOS.

Found some other issues as well. While the VSA-FPGA-HDMI works fine for 640x480,800x600,960x720,1024x768,1152x864,1280x720,1280x1024,1360x768,1600x900,1600x1024, and the HDMI-SCALER-LVDS works fine for those resolutions as well, when doing VSA-FPGA-SCALER-PANEL there are quite a few resolutions with major issues. I suspect most of this is caused by my FPGA code, as well as the whole image shifted to the right by about 5 pixels.

Last edited by sdz on 2024-06-06, 13:36. Edited 1 time in total.

Reply 17 of 37, by sdz

User metadata
Rank Member
Rank
Member

I changed the panel backlight control to the scaler instead of the MCU (the board was design to permit both, with a resistor position change). Now, when the system is on, but the screen should be off, it's black with no backlight, instead of black with backlight on. Also tweaked/fixed various other scaler related things, now the scaler does pretty much all what I wanted it to do.

While I didn't manage to overlock the card with V.ctrl or VSA100 OC (in the laptop), it works with Voodoo 5 Overclocker 1.0. I managed to push the card from the stock 166MHz to 200MHz, at 2.9V VCORE. Not bad considering it's a 220 revision VSA-100 and 166MHz rated RAM.
I have a couple of VSA-100 320 rev ICs, and I'll try to source 200MHz rated RAM. After that it should go higher.

With the card installed in the laptop, 64MB RAM, 200MHz core/mem clock, XP SP3, SFFT1.9, 3DMark2001SE default settings, 1024x768 32bpp, no tweaked LOD: 2148 3D Marks.

The attachment 20240606_144858.jpg is no longer available

Reply 18 of 37, by progman.exe

User metadata
Rank Member
Rank
Member

EDIT:I wrote and posted this before reading you'd got it OC'd with another program. Another reason to basically ignore it 😀
---------------------------------

sdz wrote on 2024-06-05, 17:30:
When doing the VRM temperature measurements, I found a bug. […]
Show full quote

When doing the VRM temperature measurements, I found a bug.

When I tested the card plugged into a PC, I was able to overclock it just fine with V.ctrl or VSA100 OC.

However, when I do the same thing with the card plugged into the laptop, the new clocks apply, but, as soon as a Glide or D3D application is started, the card clocks change back to the default 166MHz.
Either something is messed up in that system, or this is somehow caused by the lack of VSA BIOS.

Staggering work. I showed a nerd-mate your website, he tried to be "lol retro why", but the still-gaming-nerd in him knew what he was looking at, and he ended up being impressed.

All I can suggest is bodges: What about something like have a program sleep for 30 seconds, then run a program that turns up the clock. In that 30 seconds, you start your Glide/D3D program, and the overclock is applied in the background?

Or is that recipe to insta-crash the drivers or program?

Otherwise, can you use the FPGA to also hold a copy of the VSA BIOS? Just adding this idea to make it clear I don't know what I am actually looking at 😀

Keep up the good work sdz!