VOGONS


First post, by an64

User metadata
Rank Newbie
Rank
Newbie

Universal NVIDIA vbe function 0A fix for gtx 9xx and newer(not tested) ver 1.2
For warcraft II , Build engine games ( DND3D and Blood ) and maybe other games

I have noticed that one of the VESA (VBE) functions always fails on my
Geforce GTX 980Ti.

This is a Function 0Ah - Return VBE Protected Mode Interface , it always
returns ax=014fh (Function call failed).

This bug prevents warcraft II to run, it crashes or displays distorted image,
depends of environment.

So i sat down, read docs, remember x86 assembler and created this small TSR.
It intercepts int 10h func 0ah and return its own protected mode code for
vbe func 5 ,7 and 9.

For func 5 and 9 this code then routes trough DPMI 0300h (SIMULATE REAL MODE INTERRUPT)
to the plain real mode vbe functions.
This may lead in theory to some micro slowdown, but who cares
of this on the modern cpu? )
You may try /5 and /9 for use protected mode code from gtx520, it may give
you some fps. Works on gtx980ti

For func 7 it uses unmodified protected mode code from gtx520
If you using this tsr with Build engine games , you do NOT need MSKVBEF7 , as
it disables double buffering , but you can load both tsrs for example
to compare fps.

Tested under these environments:
dos , dos+emm386 , dos+jemmex , dos+jemmex+hdpmi32i+sbemu , OS/2 vdm

DND3D:
Start nvuvafix.com , then duke3d.exe

You can try to disable vsync in duke3d and other games, wich uses func 7,
for that use commandline switch /n :
nvuvafix.com /n
Also you can force vsync with /v switch:
nvuvafix.com /v

Warcraft II:
Start nvuvafix.com , then war2.exe
If war2.exe crashes , try to run it with dos32a:
dos32a.exe war2.exe

Feel free to test this TSR with other programs/games, potentially it can fix
ones, wich uses vbe protected mode interface.

ver 1.1:
Add /n and /v switches

ver 1.2:
Add /5 and /9 switches

Ps
Thanks Falcosoft for MSKVBEF7 and some ideas
NVIDIA Kepler/Maxwell/Pascal VESA Bios Bug (workaround found)

Thanks crazii for amazing sbemu!
It works fine here with sblive.
SBEMU: Sound Blaster emulation on AC97

Thanks RayeR for mtrrlfbe, it works on my intel ivi bridge
http://rayer.ic.cz/programm/programe.htm

Attachments

Reply 1 of 2, by Duffman

User metadata
Rank Oldbie
Rank
Oldbie

nice work!

MB: ASRock B550 Steel Legend
CPU: Ryzen 9 5950X
RAM: Corsair 64GB Kit (4x16GB) DDR4 Veng LPX C18 4000MHz
SSDs: 2x Crucial MX500 1TB SATA + 1x Samsung 980 (non-pro) 1TB NVMe SSD
OSs: Win 11 Pro (NVMe) + WinXP Pro SP3 (SATA)
GPU: RTX2070 (11) GT730 (XP)

Reply 2 of 2, by trannks

User metadata
Rank Newbie
Rank
Newbie
Falcosoft wrote on 2023-12-11, 22:19:

Yes, GTX 1xxx should have the same DOS compatibility level as GTX 9xx.
That is Function 07h - Set/Get Display Start calls fail and as an64 pointed out Function 0Ah - Return VBE Protected Mode Interface calls also fail.
But both of these problems can be cured the same way on GTX 1xxx as on GTX 9xx.

Do you know about this issue with GTX 1060 3GB(MSI) but not with GTX 750 1gb(MSI)?:
gtx 1060(3gb), when booting I get error 'vdd protection error', booting with gtx 750(1gb) there is no error:

IMG_1982.png
Filename
IMG_1982.png
File size
161.7 KiB
Views
454 views
File license
Fair use/fair dealing exception
IMG_1983.png
Filename
IMG_1983.png
File size
327.42 KiB
Views
454 views
File license
Fair use/fair dealing exception

vdd may be basic video driver ?:
display=*vdd,*vflat ; from system.ini, section [386Enh])

bootlog stops at:
...
[000BB02E] Dynamic load success C:\WINDOWS\system\IOSUBSYS\bigmem.drv
[000BB02E] DEVICEINITSUCCESS = IOS
[000BB02E] DEVICEINIT = PAGEFILE
[000BB02E] DEVICEINITSUCCESS = PAGEFILE
[000BB02E] DEVICEINIT = PAGESWAP
[000BB02E] DEVICEINITSUCCESS = PAGESWAP
[000BB02E] DEVICEINIT = PARITY
[000BB02E] DEVICEINITSUCCESS = PARITY
[000BB02E] DEVICEINIT = REBOOT
[000BB02E] DEVICEINITSUCCESS = REBOOT
[000BB02E] DEVICEINIT = EBIOS
[000BB02E] DEVICEINITSUCCESS = EBIOS
[000BB02E] DEVICEINIT = VDD

Tested on asrock h87(haswell) and on z690(alder lake), its the same issue.
Also on gtx 1060 the blinking cursor in dos blinks many times faster than normal. This is not an issue with gtx 750.
in autoexec, I tried with nvuvafix.com /v:
VBEVSTST.EXE reports this, and switching between 00h and 80h seems accelerated, did it a few times and it froze:

GetStart is supported
GetStart call failed
GetStart is Supported <00h> (and 80h)
GetStart call failed <00h> (and 80h)

in autoexec, i tried with MSKVBEF7.COM:
VBEVSTST.EXE reports this, switching between 00h and 80h seems normal and after I did it a few times it did not freeze:
GetStart is supported
GetStart call failed
GetStart is Supported <00h> (and 80h)
GetStart call failed <00h> (and 80h)

With both it does not fix the fast blinking cursor in dos and still the same VDD error when booting windows.

Can't boot win98 if the gtx 1060 is in the pcie slot.
I can dual boot win10 and win98 with GTX750 and ati x600 pcie.
VBETEST.EXE:

Attachments

  • IMG_2172.JPG
    Filename
    IMG_2172.JPG
    File size
    456.09 KiB
    Views
    454 views
    File license
    Fair use/fair dealing exception