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.
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.
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.
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).
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.
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?
@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.
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.
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.
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 😀
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.
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:
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:
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.
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.
EDIT:I wrote and posted this before reading you'd got it OC'd with another program. Another reason to basically ignore it 😀
---------------------------------
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 😀
I've dreamed of this thing, pretty much my entire life: a proper 3Dfx-powered laptop! I just discovered this today while posting to an old thread about my desire for one of these things, haha!