Page Index Toggle Pages: 1 Send Topic
Normal Topic 3dfx glide2x.dll 25-years old bug in the system (Read 547 times)
smola
3dfx Friends
*****
Offline



Posts: 637
Location: krk
Joined: 16. Dec 2020
Gender: Male
3dfx glide2x.dll 25-years old bug in the system
21. Feb 2024 at 10:43
 
3dfx glide2x.dll 25-years old bug in the system [affected all v3 cards with 8MB vmem]

[watek przeniesiony z napraw pieknosci vga, tutaj bardziej pasuje, na koncu link do vogons z wersja EN]

3dfx Velocity 100 AGP part#2 [25-years old bug in the system] (You need to Login or Register to view media files and links)

info:
* okazalo sie ze moja velocity wcale nie dziala do konca tak jak powinna, poniewaz w niektorych starszych grach robi powazna sieczke na ekranie, problem opisal i zglosil na vogons nasz lukas12p, dotyczyl on zle dzialajacych gier nfs2se oraz carmagedon2, ja rowniez doswiadczylem problemu z gra unreal gold, dzialala w trybie glide ale nie bylo mgly... za to nfs3 dzialal ok - dziwne
* to sklonilo mnie do przyjrzenia sie problemowi, na pierwszy ogien poszedl unreal, bo jego mialem, po wertowaniu internetu problem z brakiem mgly zostal rozwiazany przez dodanie do rejestru wpisu:
{
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Display\xxxx\Glide
key: FX_GLIDE_NUM_TMU
value: 2
} klucz typu string, xxxx moze byc rozne, zaleznie ile kart graficznych bylo instalowane wczesniej, normalnie 0000, u mnie byl 0018 ale to dysk testowy na rozne konfigi, to wiadomka Wink
* to rozwiazalo problem z unreal, ale nie pomoglo zupelnie z 2 poprzednimi grami
* mialem tylko nfs2se, wiec zaczalem grzebac w sdk glide, odpalilem ide i zdisasmowalem exeka nfs2se, znalazlem miejsce gdzie jest init fog table, wylaczylem ja w nowym exeku, test poszedl na v2 bo tam dziala mgla poprawnie, i faktycznie jest wylaczona, gra wyglada deko gorzej ale dziala ok, nastepnie zamienilem v2 na velocity i... gra odpalila bez mgly ale dziala ok, brzydka sieczka znikla Smiley
* porownujac screenshoty z fog on/off wydalo mi sie, ze z-bufor dla mgly jest odwrocony, bo w tle/oddali obraz byl ok z teksturami ale crap na bliskich obiektach, doszedlem do wniosku ze mgla jest "odwrocona"
* sprawdzilem jeszcze v3 2000 16MB i tam problemu nie bylo - bardzo dziwne
* uzyte testy na plikach z diagnostyki dla 3dfx, dla glide2 crap z mgla ale dla glide3 ok - to tez bardzo dziwne, bo w koncu to te same karty sa
* rzezba, zapiski z chata z kumplem, ktoremu relacjonowalem na zywo postep prac Wink
{
* wiele prob z odwracaniem petli dla generowania wartosci dla map fogtable i tylko niewielkie roznice i polepszenia, to wciaz nie to
* w miedzyczasie zrobione wiele inline patchy, problem z miejscem w kodzie exe, finalnie ogarniete w hiew przez uzycie call/jmp, bo nie chcialem budowac calego nowego srodowiska dla debuggera, kompilatora masm, rekompilacji i klejeniem exeka Wink
* spekulacje, ze blad jednak jest w gpu, bo zaimplementowali odwrotnie tablice do mgly, w grze jest lacznie 20 tablic dla roznych przypadkow, kazda ma 64 bajty i zawiera wartosci z przedzialu 0-ff, jest funkcja w glide2x.dll ktora to generuje i jest uzywana i trzeba petle odwrocic aby generowala ta tablice w odwrotnej kolejnosci, tylko bajtow brakuje na inline patch Wink
* ale z 2 strony moze bym mogl naklecic kod do odwracania samej tablicy juz po jej wygenerowaniu, wtedy nie musze patchowac glide, tylko wklejka w exeku gry... taka funkcja reverse-order po wykonaniu org. procki, hmmm
* kolejne akcje: wyczailem algo na inwertowanie wartosci indeksu z przedzialu 0-63, po co mam sie p* z odwracaniem petli, jak moge glowna funkcje do wyliczania wartosci zmienic Wink wystarczy dla danej 0-63 zrobic not i potem add 64, idealnie odwraca wartosc, do tego mam 15 bajtow wolne, bo jest align16 w exeku, to sie powinnem zmiescic Smiley
* i znow: dodalem patcha w glide2x.dll do generowania fog table w api i czesciowo sie poprawilo, bugi w gpu na 100%
* i zniechecenie: powoli odpuszczam ta mgle w nfs2, sporo testow i ch* dziala, troche sie poprawilo ale szkoda mi czasu, prosciej wylaczyc i dziala perfekt Wink chyba juz odpuszczam kodowanie dzis i jade muze na sluchawkach Smiley
* znalazlem w koncu prawilna instalke carmagedon2, udalo mi sie poprawic exeka przez wylaczenie mgly i nareszcie wyglada normalnie
* w carma2 probowalem odwracac tablice z mgla, negowac indeksy ale nie pomoglo to wiele, to musi byc blad we wczesnych wersjach gpu, zaraz po nich wyszly voodoo3 2000 16mb i one juz dzialaja ok
* przeszukany internet, znalezione kody zrodlowe glide, ciezkie grzebanie w docach, pdf itp...
* i w koncu: rozpykalem tego 3dfx Smiley problem jest z karta i sterami, pieknie mgla dziala z nfs2se i carma2 Smiley
* dopiero jak sciagnalem src od sterow glide i przegrzebalem sie przez to gowno, to znalazlem miejsce, oni mieli ogromne problemy przez ten blad i zle go poprawili, moglo to sie przyczynic do upadku firmy tez
* patch to 1 bajt, klasyczne jnz->jmp Smiley
}
* w changelogu na poczatku kodu widoczne wzmianki o problemach z fog table, niestety brak komentarzy w kodzie ale widoczne miejsce gdzie byl on zaaplikowany, nizej istotne info o zmianach w pliku gglide.c:
{
124   12/18/97 2:13p Peter
fogTable cataclysm
(...)
186   11/18/98 6:29p Dow
Fixed clear problem on banshee/avenger

187   11/24/98 4:21p Jeske
make sure we don't try to apply the banshee (rev<3) fogTable hack to avengers with (rev<3)
}
* jak widac problem sie pojawil w grudniu 1997 roku (when the shit hits the fan) a zafiksowali go dopiero po roku w listopadzie 1998, niestety ten fix jest zly, bo "psuje" wszystkie avengery z rewizja nizsza niz 3, czyli np. moja velocity 100/v3 1000 8MB oraz v2 2000 8MB od lukas12p - on nawet opisal problem na vogons ale 0 pomocy, ciezki temat Wink
* nie mozna wykluczyc ze w chipach banshee oraz wczesnych avengerach byl blad w gpu ktory wymagal inwertowania rejestrow od mgly i stad te dodatkowe warunki, no ale minelo cwierc wieku i w koncu mozna to poprawic Wink
* lista podatnych kart jest nastepujaca: deviceID=3 oraz devRev <3, jesli karta miala blad w gpu, to bedzie dzialac ok, ale jesli nie miala, to bedzie sieczka z mgla na ekranie, blad dotyczy tylko gier uzywajacych natywnej glide2x.dll, nie wystepuje w glide3x.dll i dlatego np. nfs3 dziala ok, blad nie dotyczny rowniej wszelkiej masci wrapperow jak d3d, opengl, nglide itp. - deviceID nie do konca takie, pozniej sie wyjasni
* spreparowana glide2x.dll z paczki Amigamerlin v2.9, 1 bajtowy klasyczny patch jnz->jmp i... po wrzuceniu jej do katalogu z gra nfs2se piekna mgla i wszysytko dziala ok Smiley tak samo z carmagedon2, jest swietnie ale pojawil sie dylemat w analizie bowiem... DLACZEGO moja karta, ktora ma deviceID=5 skacze do kodu ktory jest przeznaczony tylko dla deviceID=3??? - prawdziwy brainfu*k
* to mnie uswiadomilo ze blad musi byc gdzies indziej, jeszcze glebiej - so, we need to go deeper
* poniewaz krytyczna wartosc jest w warunku (gc->bInfo->pciInfo.deviceID == 0x3) to przeszukalem wszystkie pliki ze zrodel na string 'pciInfo.deviceID', znalazlo sie kilka, najbardziej interesujacy to minihwc.c z nastepujacymi linijkami:
{
      if (hInfo.boardInfo[monitor].h3Mem == 8) {
        hInfo.boardInfo[monitor].pciInfo.deviceID = SST_DEVICE_ID_H3 ;
      }
}
* no nie wierze, ze ktos to mogl tak napisac, jeszcze szybka weryfikacja stalej SST_DEVICE_ID_H3 i... bingo Smiley
{
#define SST_DEVICE_ID_SST1      1
#define SST_DEVICE_ID_SST96     2
#define SST_DEVICE_ID_H3        3
#define SST_DEVICE_ID_H4         4
#define SST_DEVICE_ID_H4_OEM    5
#define SST_DEVICE_ID_AP        6
#define SST_DEVICE_ID_L_AP      6
#define SST_DEVICE_ID_AP_OEM    9
#define SST_DEVICE_ID_H_AP     15
}
* to tutaj znajduje sie pierwotny blad, w pliku minihwc.c wewnatrz funkcji hwcInit() bez zadnego sprawdzania jaka karta jest wlozona, gpu jest determinowany tylko wielkoscia pamieci, jaka? 8MB Smiley takze tego... jesli jest wlozona karta z 8MB vram, to funkcja na sztywno zmieni deviceID karty na SST_DEVICE_ID_H3, czyli 3, czyli banshee...
* to powazny blad, bo wszystkie karty v3 z taka iloscia pamieci sa na to podatne bez wzgledu na ID karty i dlatego moja velocity miala zamienione deviceID z 5 na 3 i trigerowala inwersje rejestrow od fogtable, to tez wyjasnia czemu zle dziala v3 2000 lukasa12p - ona tez ma 8MB, jp ale kwas Wink
* podsumowujac ten blad w 1 linijce: jesli vmem 8MB to deviceID=3 i dowolna karta staje sie voodoo banshee Smiley no nie wierze jak mozna takie kody pisac Wink
* pozostaje tylko wylaczenie tej bzdurnej inicjacji i spatchowanie glide2x.dll - nadal nie wierze w to co widze Wink
* patch polega na zmianie bajtu pod offsetem 140BF: 75->eb, wymusi to bezwarunkowy skok do nastepnej instrukcji z pominieciem zamiany deviceID karty
* glide2x.dll poprawiona, testy z nfe2se i carma2 zaliczone, piekna mgla, doszedl jeszcze unreal gold bo wczesniej mial czkawke z dzialaniem i nie zawsze odpalal w trybie glide i... pieknie dziala od strzala, jest prawlina mgla Smiley pelen sukces
* mozna teraz na stale ta dll podmienic w %systemdir% i sie cieszyc bezproblemowym dzialaniem kart z 8MB vram z glide2, ten patch moze rozwiazac problemy z innymi nietestowanymi grami, prosze o komentarz jesli ktos taka trafi
* tak samo jestem ciekaw jak wyglada sytuacja z banshee, niestety moja karta ma spalony gpu i nie mam jak sprawdzic
* a wszystkich posiadaczy kart v3 z 8MB vram prosze o sprawdzenie jak sie maja orginalne sterowniki amigamerlin v2.9 + poprawiona glide2x.dll, zwracac nalezy uwage na mgle a raczej jej brak lub sieczke jaka robi na ekranie Wink
* uzyte techniki re i analiza statyczna + narzedzia: ida, hiew, totalcmd

dziala Smiley w koncu po 25 latach Smiley

* mam nadzieje ze to nie byl przyslowiowy gwozdz do trumny dla 3dfx (ale mogl sie przyczynic tak jak przejecie stb i wtopienie 141M$ + wypuszczenie gf256 z t&l przez nvidie) - to powazny blad i widac ze go nie zalatali, coz, pewnie nigdy sie nie dowiemy
* incepcja zakonczona na poziomie 3, 1:wylaczenie fogtable, 2:fogtable on i wylaczenie inwersji wartosci w rejestrach fogtable, 3:fogtable on i wylaczenie zamiany karty na banshee jesli vram 8MB - dzis zakoncze dzien browarkiem i to raczej niejednym Wink
* a na koniec zagadka: czemu uzywam slowa inwersja a nie negacja i czym sie rozni w asmie instrukcja neg od not - to bylo 1 z pytan dla kandydatow na analitykow zagrozen na rozmowach kwalifikacyjnych w naszej firmie Wink

web:
* lukas12p problem: (You need to Login or Register to view media files and links)

edit:
* literowki, doprecyzowania
* zalozylem watek na (You need to Login or Register to view media files and links), dodana wersja eng oraz all fotki
  

(You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links)
Back to top
 
IP Logged
 
smola
3dfx Friends
*****
Offline



Posts: 637
Location: krk
Joined: 16. Dec 2020
Gender: Male
Re: 3dfx glide2x.dll 25-years old bug in the system
Reply #1 - 21. Feb 2024 at 10:46
 
poprawiona glide2x.dll z paczki amigamerlin v2.9
  

(You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links)
Back to top
 
IP Logged
 
udam_u
Full Member
***
Offline


“Here Be Dragons”

Posts: 397
Location: Wrocław
Joined: 17. Jul 2018
Gender: Male
3dfx glide2x.dll 25-years old bug in the system
Reply #2 - 20. Feb 2024 at 21:02
 
Ktoś w 3Dfx śpieszył się w piątek z quick fix. Mega ciekawe odkrycie, gratuluję wytrwałości. Jak dla mnie odkrycie na osobny temat zasługuje. (:

A odnośnie pytania rekrutacyjnego:
neg -> odwracamy wszystkie bity i dodajemy 1 (uzupełnienie dwójkowe)
not -> odwracamy wszystkie bity.
  

Zestawy:
  • W opracowaniu???
  • (You need to Login or Register to view media files and links)
  • (You need to Login or Register to view media files and links)
  • (You need to Login or Register to view media files and links)
Back to top
 
IP Logged
 
smola
3dfx Friends
*****
Offline



Posts: 637
Location: krk
Joined: 16. Dec 2020
Gender: Male
Re: 3dfx glide2x.dll 25-years old bug in the system
Reply #3 - 20. Feb 2024 at 22:17
 
A po co to sie robi? Wink
  

(You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links)
Back to top
 
IP Logged
 
zami555
YaBB Newbies
*
Offline


Old computers rocks!

Posts: 152
Location: Poland, Olesnica
Joined: 01. Apr 2020
Gender: Male
Re: 3dfx glide2x.dll 25-years old bug in the system
Reply #4 - 21. Feb 2024 at 06:54
 
Wow, czapki z głów. Super reverse engineering i finalny wynik analizy. Szok że na etapie inicjalizacji już był ten błąd 🤯

Twój patch stanie się teraz pewnie podstawowym patchem dla wszystkich Velocity i V3 1000, Banshee 8MB itp wśród społeczności! Musisz pomyśleć na oficjalną nazwą  Smiley

Co do kodu z uzupełnieniem do dwóch to pamiętam że przydawał się do reprezentacji liczb całkowitych w przestrzeni 8bitowej. Dzięki niemu w prosty sposób można było robić działania na liczbach zarówno dodatnich jak i ujemnych
  
Back to top
 
IP Logged
 
udam_u
Full Member
***
Offline


“Here Be Dragons”

Posts: 397
Location: Wrocław
Joined: 17. Jul 2018
Gender: Male
3dfx glide2x.dll 25-years old bug in the system
Reply #5 - 21. Feb 2024 at 21:51
 
smola wrote on 20. Feb 2024 at 22:17:
A po co to sie robi? Wink

neg odwraca znak liczby w najbardziej popularnej reprezentacji liczb całkowitych "two's complement" (:
  

Zestawy:
  • W opracowaniu???
  • (You need to Login or Register to view media files and links)
  • (You need to Login or Register to view media files and links)
  • (You need to Login or Register to view media files and links)
Back to top
 
IP Logged
 
lukas12p
YaBB Newbies
*
Offline



Posts: 83
Location: Kraków
Joined: 27. Apr 2020
Gender: Male
Re: 3dfx glide2x.dll 25-years old bug in the system
Reply #6 - 06. Mar 2024 at 16:46
 
WOW, super że ogarnąłeś temat Smiley
Gratuluję
  

Socket3 - Socket939 Smiley
Back to top
 
IP Logged
 
smola
3dfx Friends
*****
Offline



Posts: 637
Location: krk
Joined: 16. Dec 2020
Gender: Male
Re: 3dfx glide2x.dll 25-years old bug in the system
Reply #7 - 06. Mar 2024 at 18:40
 
Dla ciebie wszystko Wink To lepsze niz krzyzowki Wink Dodaj cos na vogons, bo musze wbic 20 komentow zeby moc postowac PM Wink
  

(You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links) :: (You need to Login or Register to view media files and links)
Back to top
 
IP Logged
 
Page Index Toggle Pages: 1
Send Topic