17.7.2008 Po koupi nového procesoru intel E8400 jsem se rozhodl taky trochu pozvednout grafický výkon PC. 3D akcelerátory se vyvíjí tak rychle, že bych mohl kupovat novou kartu pomalu každý půlrok. Osobně si ale raději počkám na pád cen starších a osvědčených modelů. Pořád je taky u mě priorita energetická nenáročnost a nízká hladina produkovaného hluku. Od známého jsem výhodně sehnal grafiku Asus EN7900GT/2DHT PCI-E osazenou 256 MB rychlé GDDR3 paměti Samsung K4J553230-BC14 (1,4 ns) na 256-bitové sběrnici a dvěma DVI-I konektory + S-Video. Defaultní takt je 450 MHz pro GPU a 660 MHz (1320 MHz DDR) pro paměti. Grafické jádro G71 obsahuje 24 pixel pipelines a 8 vertex shaderů 3.0, plně akceleruje DirectX 9.0c a OpenGL 2.0. Díky 90nm výrobní technologii se spotřeba drží na přijatelných 22 / 48 W (idle / peak 3D load), což je skoro polovina oproti 110nm předchůdci 7800GT. Nicméně pro jistotu je karta vybavena přídavným 6-pinovým 12V napájecím konektorem. Chlazení je řešeno malým měděným chladičem s velmi hlučným ventilátorem bez regulace oráček. BGA paměťové čipy ani VRM nemají žádný chladič.
Jelikož jsem byl u předchozí karty GF7600GS zvyklý na tiché pasivní chlazení, hned jsem se pustil do hledání odpovídající náhrady originálního fučáku. Druhý den jsem koupil pasivní chladič Arctic Cooling Accelero S1 rev. 2. Ten se skládá z tlusté měděné základny, z níž vycházejí 4 heatpipes, na kterých je navlečeno 32 hliníkových žeber. Akorát je škoda, že výrobce neohnul heatpipe na druhou stranu karty, aby při montáži v tower case mohl horký vzduch volně stoupat vzhůru. Na některých MB by ale hrozila kolize s chladičem northbridge. Je tak třeba počítat s obsazením sousedního slotu pod VGA (toho PCI-E x1 žádná škoda). Ačkoliv je chladič docela rozměrný (podélně i na šířku kartu přečuhuje) je lehký a nehrozí utržení PCI-E slotu :) Chladič je konstruován jako univerzální pro karty nVidia i ATI a jistě si poradí i se žravějšími GPU. Akorát je třeba dát pozor na rozteč montážních děr na PCB (existuje i verze Accelero S2 pro jiné rozteče). V balení najdete kromě velkého chladiče i malé pasivky na paměti (samolepicí) a VRM. V mojem případě to na VRM nešlo použít, ale není to ani nutné.
Montáž je velmi jednoduchá. Stačí odšroubovat originální chladič, nalepit pasivy na paměti, navlíknout a přišroubovat Accelero. Šrouby to chce dotahovat rovnoměrně a s citem, aby základna dobře seděla na jádru GPU, ale aby se karta neprohýbala. Nakonec se to ještě pojistí několika plastovými packami. Po namontování karty do PC jsem zjistil, že nemůžu pořádně zavřít bočnici. Mám totiž middle tower case široký jen 18 cm. Naštěstí šlo jen o milimetry a pomohlo tak sundaní horního plastového výlisku, který je tam beztak jen na parádu. Pak už bočnice šla zavřít v pohodě a ještě několik mm zbývá. S originálním chladičem jsem měl teploty GPU kolem 65°C ve 2D a 75 - 80°C ve 3D. S Accelerem to kleslo na 50°C ve 2D a 65°C ve 3D, což je docela solidní na to, že jde jen o pasiv. Určitě by to po přidání pomaloběžného větráku šlo ještě o 10 - 15°C dolů, ale to už je pro mě zbytečné.
Úpravou VGA BIOSu NiBiTorem jsem potom kartu mírně přetaktoval na 480 / 680 MHz (GPU / RAM), ale je to jen pár FPS navíc. Crysis se na tom dá v 1024 x 768 hrát taky, pokud nejsou všechny grafické blbiny na max. (zejména kvalita stínování a stínů). Pro porovnání jsem udělal pár testů s MSI GeForce 6600GT, Gainward GeForce 7300GT a Asus GeForce 7600GS v Unrel Tournamentu 2003 (botmatch-anubis.bat, 1280 x 1024 / 32) a GL Quake (demo1.dem, 1280 x 1024 / 16). Nastavení ForceWare 94.24 v ovládacích panelech: AA = 2x Q, AF = 4x, vysoká kvalita, vsync = off, mipmapy = trilinear, tripple buffering = off.
VGA UT 2003 GL Quake 6600GT @500/500 MHz 132 FPS 192 FPS 7300GT @350/350 MHz 110 FPS 178 FPS 7300GT @400/400 MHz 123 FPS 208 FPS 7600GS @400/400 MHz 137 FPS 202 FPS 7600GS @500/470 MHz 143 FPS 244 FPS 7900GT @450/660 MHz 291 FPS 518 FPS 7900GT @480/680 MHz 293 FPS 539 FPS Core 2 Duo E6400 @2,4 GHz; E8400 @3,5 GHz (7900GT)
Co se týče ovladačů, tak ve Windows XP používám stále ForceWare 94.24, jenž jako poslední oficiálně obsahují starý layout ovládacích panelů, na který jsem si tak nějak zvykl. V případě problémů s tuhnutím starších DOSových programů v NTVDM při přepnutí z okna na fullscreen je řešením patch VIDEOPRT.ZIP [13 kB] od Martina Šuláka (mám ho nainstalovaný už od dob používání GF7600GS). Pod Windows 98SE používám neoficiální ForceWare 82.69 drivery od ZakMcKracken84 z MSFN fóra, problém s vypínáním Windows přetrvává. Pro Windows NT 3.x a 4.0 lze použít akorát univerzální VESA driver VBEMP (už existuje i beta pro Windows 9x) od BearWindowse. Ten samozřejmě neumí HW akceleraci 2D natož 3D funkcí, ale funguje. Na běžnou práci s okny to stačí. Bohužel díky zmrvené implementaci VBE 3.0 neumožňuje nastavit obnovovací frekvenci. V Linuxu používám poslední verzi ForceWare 173.14.12 s Xorg 7.2 bez problémů. 3D akcelerace funguje také výborně, zkoušel jsem linuxové verze Quake II, Quake III a Doom 3. Obnovovací frekvenci lze nastavit v ovládacích panelech podobných těm windowsím. Pro taktování a tweakování existuje program NVClock. Pro zájemce jsem udělal i DOSový port této utility. Přetaktování pod DOSem moc nemá smysl, ale naopak lze kartu podtaktovat nebo snížit otáčky větráku na minimum.
18.6.2009 Tak se mi znenadání začala na VGA kazit videopaměť. Nejprve jsem si všiml drobného artefaktu ve 2D grafice, kdy v prohlížeči občas při scrollování textů v jednom místě zůstával za písmeny nesouvislý řetízek pixelů (všechny pixely v jednom sloupci). Nejprve jsem to považoval za softwarový problém Mozilly/Windoze, ale pak jsem si všiml dalšího artefaktu v textovém režimu 80x25, kde jeden znak v horní řadě měl jiný atribut než ostatní. To se projevovalo jen při určité kombinaci barvy popředí a pozadí. Program Ndiags (součást Norton Utilities 8.0 pro DOS) při testu základní VGA videopaměti skončil chybou. Program Video Memory stress Test, který testuje celou videopaměť, odhalil stovky vadných buněk. Napřed jsem zkusil snížit takt GPU a pamětí až na minimum, avšak bez rozdílu. Takže to vypadalo nejspíš na nějaký studeňák u pamětí (zasraný bezolovnatý pájky, pryč s EuroEkoTerorismem!) Jako poslední možnost jsem zkusil pofoukat BGA čipy pamětí horkovzduchem. Přitom jsem asi nějaké BGA pouzdro nedopatřením příliš přimáčknul, že se slily koule pod ním a vznikl zkrat. Když jsem pak nic netušíc kartu zastrčil zpět do PC a zapnul, okamžitě z jednoho malého integráče v oblasti VRM vyšlehl plamen a PC zdroj se vypnul. Trvalo to jen zlomek vteřiny. Operace se zdařila, pacient je mrtev, RIP... Můžu být ještě rád, že mi neodešla základní deska. Jako náhradu jsem do PC namontoval zpět 7600GS, kterou jsem naštěstí neprodal. Rád bych ale co nejdříve pořídil opět 7900 nebo 7950.
Nedávno jsem se na netu dočetl, že někteří "experti" se snaží problémy se studeňáky na PCB řešit zapékáním celé karty v troubě, typicky při 200 - 250°C po dobu 7 minut. Takový malý domácí reflow. Při této představě se asi SMT technologům ježí všechny chlupy na těle :) Některé součástky vydrží přetavení pouze 1 při výrobě a dalším přetavením buď značně zdegradují nebo se rovnou zničí. To platí zejména o elektrolytických kondenzátorech, které se uvaří a vyfouknou. Přitom by nebyl problém je před pečením sundat. Dále je diskutabilní i vliv na kvalitu pájených spojů. U studeňáků sice dojde k prohřátí a většinou i spojení, ale další spoje zas oxidujou a hrozí jejich porušení. Při reflow se používá přesně daný teplotní profil, který asi těžko doma někdo v troubě dodrží. Výsledkem tedy může být opět funkční karta, otázkou však je, na jak dlouho. Po pár měsících se to zas může odporoučet do kopru. Pokud s tím dotyčný počítá jako s dočasným nouzovým řešením, tak to jistě za pokus stojí, než tu kartu hned hodit do koše. Ale aspoň ty elyty bych před tím odpájel...
7.7.2009 se mi podařilo koupit jako náhradu VGA kartu Leadtek WinFast PX7900GT TDH, 256MB DDR3, PCI-Express. Předchozímu ASUSu se velmi podobá, stejný referenční PCB layout a chladič, stejný takt jádra a pamětí. Takže jsem do karty vesele nahrál svůj hacknutý VGA BIOS a vyměnil chladič za Accelero S1 a karta je k nepoznání od té předchozí. Snad mi vydrží déle než rok...
VESA BIOS hack na Asus EN7900GT
16.12.2009 Když jsem si pořídil nový LCD monitor NEC 2190UXp, který jsem pochopitelně propojil s grafickou kartou přes digitální DVI-D, dočkal jsem se nemilého překvapení, neboť mi z výpisu grafických VESA módů zmizely všechny rozlišení vyšší než 1280 x 1024. Přitom pokud jsem monitor propojil klasickým analogovým kabelem, VESA BIOS nabízel módy až do 2048 x 1536 / 32 bpp. NVidioti se zřejmě snažili do VESA BIOSu implementovat další ochranu tupého uživatele (podobně jako vypuštění kódu pro nastavení refresh rate dle spec. VBE 3.0), aby nešlo nastavit vyšší než nativní rozlišení LCD, ale nějak se jim pomotaly porovnávací operátory. Asi šlo o neúmyslnou programátorskou chybu (postihující nejspíš všechny nVidia karty řady 6xxx a 7xxx), protože jak jsem později zjistil, tak na novější 8800GT už tento problém není. To mě poněkud iritovalo, protože jsem třeba ve Windows NT 4.0 nebo některých DOSových programech nemohl nastavit nativní rozlišení LCD a tak jsem nažhavil svůj oblíbený IDA disassembler...
Veškerý další popis se vztahuje k video BIOSu verze 5.71.22.38.00 pro Asus EN7900GT/2DHT 256 MB DDR3 PCI-E, PCB rev. p455h0s. Většina výrobců grafických karet ale používá jen minimálně upravený referenční nVidia BIOS, takže by nemělo být těžké se v něm zorientovat. Stejné binární řetězce můžou být na trochu jiných offsetech. Celkem bez problémů funguje záměna video BIOSů na grafických kartách různých výrobců pro jeden typ GPU. Je akorát potřeba dát pozor na defaultní frekvence a voltáže GPU a pamětí, které jsou zapsány v inicializačních tabulkách BIOSu. Pokud by se dal třeba BIOS s nastaveným vysokým taktem pamětí do karty, která je osazena pomalejšími paměťovými čipy, tak by už karta nemusela naběhnout. Avšak takty a napětí lze pohodlně upravit NiBiTorem. Používám svůj upravený Asusí BIOS na Leadteku a nenarazil jsem na žádný problém. Takty GPU a pamětí jsem jen mírně zvýšil z 450/660 MHz na 480/680 MHz.
Nejprve jsem se pustil do hledání subrutiny blokující zmíněné VESA módy, zde je její začátek:
C000:4BDA ; =============== S U B R O U T I N E ======================================= C000:4BDA ; OEMIsModeAvailable - Determine if mode is available with current hardware C000:4BDA ; disable higher than native modes on LCD via DVI C000:4BDA ; some bug here caused that also native LCD modes was disabled C000:4BDA ; Entry: AL = OEM mode number C000:4BDA ; Exit: Carry flag set as follows: NC = Mode is available, CF = Mode is not available C000:4BDA ; All registers are preserved. C000:4BDA C000:4BDA OEMIsModeAvailable proc near ; CODE XREF: SetMode+68.p C000:4BDA ; FillModes+21.p ... C000:4BDA pushad ; PATCH: replace pushad by RETN, NOP to disable this routine C000:4BDC push es C000:4BDD call GetModeDescPtr ; GetModeDescPtr - Get pointer to the mode description table C000:4BDD ; Entry: AL = VGA Mode number C000:4BDD ; Exit: ES:BX = Pointer to table (If error, BX = 0) C000:4BDD ; Carry flag set as follows: C000:4BDD ; NC = Pointer is valid C000:4BDD ; CF = Error (pointer invalid) C000:4BDD ; All other registers preserved. C000:4BE0 jb OEMIsModeAvailable_exit C000:4BE4 mov dl, al C000:4BE6 mov al, cs:[bx+2] C000:4BEA mov cl, 9 C000:4BEC mul cl C000:4BEE mov si, 2D41h C000:4BF1 add si, ax C000:4BF3 call sub_C1151 C000:4BF6 jb OEMIsModeAvailable_exit C000:4BFA call isTV ; Returns Carry flag if on TV C000:4BFD jb short loc_C4C04 C000:4BFF call sub_CBA57 C000:4C02 jnb short loc_C4C26 C000:4C04 C000:4C04 loc_C4C04: ; CODE XREF: OEMIsModeAvailable+23.j C000:4C04 mov al, es:[bx+3] C000:4C08 cmp al, 0FFh C000:4C0A jnz short loc_C4C12 C000:4C0C stc C000:4C0D jmp OEMIsModeAvailable_exit C000:4C10 ; --------------------------------------------------------------------------- C000:4C10 jmp short loc_C4C26 C000:4C12 ; --------------------------------------------------------------------------- ...
Tato subrutina je volaná ze subrutiny FillModes na adrese C000:8FECh, která vytváří VESA mode list na základě požadavků volání služby VESA BIOSu 4F00h (rutina VBE_ReturnControllerInfo na adrese C000:903Ch). Nejjednodušší bylo celou rutinu vyřadit z činnosti přepsáním 2-Bytového operačního kódu instrukce PUSHAD dvěma 1-Bytovými operačními kódy instrukcí RETN a NOP. Po této úpravě a updejtu kontrolního součtu ROM image jsem BIOS flashnul a skutečně ve výpisu VESA módů se objevily všechny jako při připojení přes analog. Pomocí svého prográmku VESATEST jsem otestoval oba videomódy 1600 x 1200 / 8 bpp a 1600 x 1200 / 16 bpp a fungovaly korektně, konečně nativní rozlišní :)
K dokonalosti už chyběl jen VESA mód 1600 x 1200 / 32 bpp, holt truecolor je truecolor... Musel jsem tedy najít a upravit tabulku videomódů. Ta se u většiny nVidia BIOSů nachází na adrese C000:3000h:
C000:3000 ; VideoModes description table: 0-OEMMode,6-VESAVMode,8-ModeType,9-pages,A-bpp,B-RowOffset C000:3000 tblModeDescriptions C000:3000 ; Byte: 0 1 2 3 4 5 6,7 8 9 A B,C D,E F C000:3000 MODEDESC <80h,0Ch,05h,02h,00h,1,001h,0,8,4,20,2048,17h> ; 320x350/4,mode 01-80 (text) C000:3010 MODEDESC <81h,0Ch,0Ch,06h,01h,3,003h,0,8,4,40,4096,17h> ; 640x350/4,mode 03-81 (text) C000:3020 MODEDESC <82h,0Fh,03h,00h,00h,2,001h,0,8,4,20,2048,17h> ; 320x200/4,mode 01-82 (text) C000:3030 MODEDESC <83h,0Fh,0Ah,05h,01h,4,003h,0,8,4,40,4096,17h> ; 640x200/4,mode 03-83 (text) C000:3040 MODEDESC <84h,13h,07h,04h,00h,2,001h,0,8,4,20,2048,17h> ; 360x400/4,mode 01-84 (text) C000:3050 MODEDESC <85h,13h,11h,0Bh,01h,4,003h,0,8,4,40,4096,17h> ; 720x400/4,mode 03-85 (text) C000:3060 MODEDESC <04h,03h,02h,00h,02h,2,004h,2,1,2,20,16384,17h> ; 320x200/2,mode 04-04 (gfx) C000:3070 MODEDESC <05h,03h,02h,00h,02h,2,005h,2,1,2,20,16384,17h> ; 320x200/2,mode 05-05 (gfx) C000:3080 MODEDESC <06h,04h,09h,05h,03h,4,006h,2,1,1,40,16384,17h> ; 640x200/1,mode 06-06 (gfx) C000:3090 MODEDESC <87h,0Dh,10h,0Ah,01h,3,007h,1,8,0,40,4096,17h> ; 720x350/1,mode 07-87 (text) C000:30A0 MODEDESC <88h,14h,11h,0Bh,01h,4,007h,1,8,0,40,4096,17h> ; 720x400/1,mode 07-88 (text) C000:30B0 MODEDESC <0Dh,08h,02h,00h,02h,2,00Dh,5,8,4,20,8192,17h> ; 320x200/4,mode 0D-0D (gfx) C000:30C0 MODEDESC <0Eh,08h,09h,05h,03h,4,00Eh,5,4,4,40,16384,17h> ; 640x200/4,mode 0E-0E (gfx) C000:30D0 MODEDESC <0Fh,06h,0Bh,06h,03h,3,00Fh,3,2,1,40,32768,17h> ; 640x350/1,mode 0F-0F (gfx) C000:30E0 MODEDESC <10h,0Ah,0Bh,06h,03h,3,010h,5,2,4,40,32768,17h> ; 640x350/4,mode 10-10 (gfx) C000:30F0 MODEDESC <11h,07h,0Fh,09h,04h,5,011h,4,1,1,40,40960,17h> ; 640x480/1,mode 11-11 (gfx) C000:3100 MODEDESC <12h,09h,0Fh,09h,04h,5,012h,5,1,4,40,40960,17h> ; 640x480/4,mode 12-12 (gfx) C000:3110 MODEDESC <13h,05h,01h,08h,03h,4,013h,6,1,8,40,64000,17h> ; 320x200/8,mode 13-13 (gfx) C000:3120 MODEDESC <6Ah,0Bh,13h,0Ch,07h,6,102h,5,1,4,50,65535,17h> ; 800x600/4,mode 102-6A (gfx) C000:3130 MODEDESC <58h,0Bh,13h,0Ch,07h,6,102h,5,1,4,50,65535,17h> ; 800x600/4,mode 102-58 (gfx) C000:3140 MODEDESC <30h,02h,00h,00h,08h,2,130h,6,1,8,40,16384,20h> ; 320x200/8,mode 130-30 (gfx) C000:3150 MODEDESC <31h,02h,06h,03h,08h,2,131h,6,1,8,40,32768,20h> ; 320x400/8,mode 131-31 (gfx) C000:3160 MODEDESC <32h,00h,06h,03h,08h,2,132h,7,1,16,80,65535,20h> ; 320x400/16,mode 132-32 (gfx) C000:3170 MODEDESC <34h,02h,04h,01h,0Ah,0,134h,6,1,8,40,20480,20h> ; 320x240/8,mode 134-34 (gfx) C000:3180 MODEDESC <35h,00h,04h,01h,0Ah,0,135h,7,1,16,80,40960,20h> ; 320x240/16,mode 135-35 (gfx) C000:3190 MODEDESC <5Bh,02h,0Dh,07h,05h,4,100h,6,1,8,80,65535,20h> ; 640x400/8,mode 100-5B (gfx) C000:31A0 MODEDESC <3Dh,00h,0Dh,07h,05h,4,13Dh,7,1,16,160,65535,20h> ; 640x400/16,mode 13D-3D (gfx) C000:31B0 MODEDESC <44h,00h,16h,FFh,FFh,8,11Ah,7,1,16,320,65535,20h> ; 1280x1024/16,mode 11A-44 (gfx) C000:31C0 MODEDESC <5Ah,0Bh,17h,FFh,FFh,8,106h,5,1,4,80,65535,17h> ; 1280x1024/4,mode 106-5A (gfx) C000:31D0 MODEDESC <5Ch,02h,12h,0Ch,07h,6,103h,6,1,8,100,65535,20h> ; 800x600/8,mode 103-5C (gfx) C000:31E0 MODEDESC <5Dh,0Bh,15h,0Dh,0Bh,7,104h,5,1,4,64,65535,17h> ; 1024x768/4,mode 104-5D (gfx) C000:31F0 MODEDESC <5Eh,02h,14h,0Dh,0Bh,7,105h,6,1,8,128,65535,20h> ; 1024x768/8,mode 105-5E (gfx) C000:3200 MODEDESC <5Fh,02h,0Eh,09h,06h,5,101h,6,1,8,80,65535,20h> ; 640x480/8,mode 101-5F (gfx) C000:3210 MODEDESC <6Bh,02h,16h,FFh,FFh,8,107h,6,1,8,160,65535,20h> ; 1280x1024/8,mode 107-6B (gfx) C000:3220 MODEDESC <6Eh,00h,0Eh,09h,06h,5,111h,7,1,16,160,65535,20h> ; 640x480/16,mode 111-6E (gfx) C000:3230 MODEDESC <6Fh,00h,12h,0Ch,09h,6,114h,7,1,16,200,65535,20h> ; 800x600/16,mode 114-6F (gfx) C000:3240 MODEDESC <72h,00h,14h,0Dh,0Bh,7,117h,7,1,16,256,65535,20h> ; 1024x768/16,mode 117-72 (gfx) C000:3250 MODEDESC <78h,00h,00h,00h,08h,2,10Eh,7,1,16,80,65535,20h> ; 320x200/16,mode 10E-78 (gfx) C000:3260 MODEDESC <45h,02h,1Bh,FFh,FFh,0Ch,145h,6,1,8,200,65535,20h> ; 1600x1200/8,mode 145-45 (gfx) C000:3270 MODEDESC <46h,00h,1Bh,FFh,FFh,0Ch,146h,7,1,16,400,65535,20h> ; 1600x1200/16,mode 146-46 (gfx) C000:3280 MODEDESC <47h,02h,19h,FFh,FFh,0Ah,147h,6,1,8,175,65535,20h> ; 1400x1050/8,mode 146-46 (gfx) C000:3290 MODEDESC <48h,00h,19h,FFh,FFh,0Ah,148h,7,1,16,350,65535,20h> ; 1400x1050/16,mode 147-47 (gfx) C000:32A0 MODEDESC <7Ah,01h,1Eh,FFh,FFh,FFh,152h,8,1,32,1024,65535,20h> ; 2048x1536/32,mode 152-7A (gfx) C000:32A0 ; PATCH: replace it by modeline for 1600x1200/32 (4A 01 1B FF FF 0C 4A 01 08 01 20 20 03 FF FF 1C) C000:32B0 MODEDESC <20h,01h,00h,00h,08h,2,10Fh,8,1,32,160,65535,20h> ; 320x200/32,mode 10F-20 (gfx) C000:32C0 MODEDESC <21h,01h,0Eh,09h,06h,5,112h,8,1,32,320,65535,20h> ; 640x480/32,mode 112-21 (gfx) C000:32D0 MODEDESC <22h,01h,12h,0Ch,09h,6,115h,8,1,32,400,65535,20h> ; 800x600/32,mode 115-22 (gfx) C000:32E0 MODEDESC <33h,01h,06h,03h,08h,2,133h,8,1,32,160,65535,20h> ; 320x400/32,mode 133-33 (gfx) C000:32F0 MODEDESC <36h,01h,04h,01h,0Ah,0,136h,8,1,32,160,65535,20h> ; 320x240/32,mode 136-36 (gfx) C000:3300 MODEDESC <3Eh,01h,0Dh,07h,05h,4,13Eh,8,1,32,320,65535,20h> ; 640x400/32,mode 13E-3E (gfx) C000:3310 MODEDESC <3Fh,01h,14h,0Dh,0Bh,7,118h,8,1,32,512,65535,20h> ; 1024x768/32,mode 118-3F (gfx) C000:3320 MODEDESC <79h,01h,16h,FFh,FFh,8,11Bh,8,1,32,640,65535,20h> ; 1280x1024/32,mode 11B-79 (gfx) C000:3330 MODEDESC <FFh,01h,FFh,C4h,03h,0,300h,255,194,3,0,65281,0D4h> ; end of table
Každý řádek tabulky o 16 Bytech mapuje jedno číslo VESA módu (Byte 6 a 7) na jedno číslo nVidia OEM módu (byte 0). Tabulku nelze jednoduchou editací zvětšit (přidat další VESA módy), zbývá tedy jen možnost nějaké řádky přepsat. V celku s klidným svědomím mohu vypustit obří VESA mód 2048 x 1536 / 32 bpp a nahradit jej potřebnějším 1600 x 1200 / 32 bpp. Konkrétní hodnoty do tabulky jsem získal na fóru VOGONS od uživatele dvwjr z jeho modifikovaného BIOSu pro BFG 7950GT, který čítá úctyhodných 51 VESA módů. Poskytl mi také kompletní tabulku svých videomódů:
Order Nvidia Video VGA/ Visible Visible Bits per Notes Video Mode VESA Horizontal Vertical Pixel Mode# Pixels Pixels (color) ************************************************************************************************* VGA: 1 80 01 00 320 350 4 Text - EGA: 40 column 2 81 03 00 640 350 4 Text - EGA: 80 column 3 82 01 00 320 200 4 Text - CGA: 40 column 4 83 03 00 640 200 4 Text - CGA: 80 column 5 84 01 00 360 400 4 Text - VGA: 40 column 6 85 03 00 720 400 4 Text - VGA: 80 column 7 04 04 00 320 200 2 Graphic 8 05 05 00 320 200 2 Graphic CGA, EGA, MCGA, VGA 9 06 06 00 640 200 1 Graphic CGA, EGA, MCGA, VGA 10 87 07 00 720 350 1 Text - MDA, EGA: 80 column=mono 11 88 07 00 720 400 1 Text - VGA: 80 column=mono 12 0D 0D 00 320 200 4 Graphic EGA, VGA: color 13 0E 0E 00 640 200 4 Graphic EGA, VGA: color 14 0F 0F 00 640 350 1 Graphic EGA, VGA: mono 15 10 10 00 640 350 4 Graphic EGA, VGA: color 16 11 11 00 640 480 1 Graphic MCGA,VGA: color 17 12 12 00 640 480 4 Graphic VGA: color 18 13 13 00 320 200 8 Graphic VGA: color VESA Text: 19 deprecated 08 01 80 60 4 Text - old VESA: Text mode 20 deprecated 09 01 132 25 4 Text - old VESA: Text mode 21 deprecated 0A 01 132 43 4 Text - old VESA: Text mode 22 deprecated 0B 01 132 50 4 Text - old VESA: Text mode 23 deprecated 0C 01 132 60 4 Text - old VESA: Text mode VESA Graphics: 24 20 0F 01 320 200 32 25 21 12 01 640 480 32 26 22 15 01 800 600 32 27 30 30 01 320 200 8 28 31 31 01 320 400 8 29 32 32 01 320 400 16 30 33 33 01 320 400 32 31 34 34 01 320 240 8 32 35 35 01 320 240 16 33 36 36 01 320 240 32 34 3D 3D 01 640 400 16 35 3E 3E 01 640 400 32 36 3F 18 01 1024 768 32 37 44 1A 01 1280 1024 16 38 45 45 01 1600 1200 8 39 46 46 01 1600 1200 16 40 47 47 01 1400 1050 8 41 48 48 01 1400 1050 16 42 49 49 01 1400 1050 32 43 4A 4A 01 1600 1200 32 44 53 53 01 1280 960 8 45 54 54 01 1280 960 32 46 55 55 01 2048 1556 32 @ 59.94 Hz - my special mode 47 56 56 01 2048 1556 32 @ 72 Hz - my special mode 48 57 57 01 2048 1556 32 @ 85 Hz - my special mode 49 58 02 01 800 600 4 50 5A 06 01 1280 1024 4 51 5B 00 01 640 400 8 52 5C 03 01 800 600 8 53 5D 04 01 1024 768 4 54 5E 05 01 1024 768 8 55 5F 01 01 640 480 8 56 6A 02 01 800 600 4 57 6B 07 01 1280 1024 8 58 6E 11 01 640 480 16 59 6F 14 01 800 600 16 60 72 17 01 1024 768 16 61 78 0E 01 320 200 16 62 79 1B 01 1280 1024 32 63 7A 52 01 2048 1536 32 64 60 60 01 1280 800 8 65 61 61 01 1280 800 32 66 62 62 01 768 480 8 67 64 64 01 1440 900 8 68 65 65 01 1440 900 32 69 68 68 01 1680 1050 8 70 69 69 01 1680 1050 32 71 7B 7B 01 1280 720 32 72 7C 7C 01 1920 1200 8 73 7D 7D 01 1920 1200 32
Po editaci tabulky, opravy kontrolního součtu a dalším flashnutí ROM image se objevil kýžený VESA mód ve výpisu a normálně fungoval, takže jsem mohl vesele přepnout některé programy a OSy do nativního módu. Akorát u mojeho oblíbeného modelovacího programu 3D Studio R4 nejde nastavit vyšší rozlišení než 1280 x 1024, protože má tabulku videomódů někde zahardkódovanou ve svém ovladači (místo aby si je detekoval dynamicky voláním služby VESA BIOSu 4F00h. To si vyžádá ještě další disassemblování... Každopádně bych chtěl poděkovat dvwjrovi a bear windowsovi za pomoc, bez které bych se asi tak daleko nedostal.
Zde je ke stažení finální podoba mého upraveného video BIOSu: my7900gt.zip [45 kB]. Flashování jen na vlastní nebezpečí. Před flashnutím BIOSu si jej můžete vyzkoušet na nečisto pomocí utility vgabios.exe -f!MY7900G.ROM (je součástí balíčku). Pro flashnutí BIOS image použijte utilitu nvflash. Pokud budete flashovat na kartu 7900GT jiného výrobce s jiným board ID, bude potřeba použít donucovací parametry: nvflash -4 -5 -6 !MY7900G.ROM.
14.1.2012 Stejným způsobem jsem také upravil video BIOS mé předchozí karty Asus EN7600GS.
Vyblitá černá na AGP VGA kartách S3
30.10.2018 Na fóru VOGONS jsem se dočetl o zajímavém problému, který trápí některé uživatele AGP grafických karet s čipy S3 Virge, Trio 3D, Savage 3D a PCI karet s čipy S3 Trio64V+ a to sice, že zmíněné karty po zapnutí a v DOSu zobrazují špatnou úroveň černé barvy pozadí, která není černá ale šedá. Ve Windows s nainstalovaným ovladačem tento problém není, případně se dál poladit pomocí S3 Color Utility. Já jsem se u svých VGA karet zatím s tímto problémem nesetkal, ale třeba se tyto informace budou někomu hodit. Nejprve nebylo jasné, jestli je problém v HW nebo FW, ale pak se ukázalo, že přeprogramováním video BIOSu na problémové kartě správnou verzí, lze problém eliminovat (správným nastavením napěťové úrovně černé a zatemnění v generovaném videosignálu). Analýzou video BIOSu se zjistilo, že za toto chování je zodpovědné nastavení extended registrů sekvencéru (specifické pro čipy S3), které se programuje přes standardní VGA I/O porty 3C4h a 3C5h. Uživatel wbc pak napsal jednoduchý testovací prográmek, kterým lze otestovat obě (světlé a normální) nastavení. Je též autorem komplexnější utility S3VBEFIX, která řeší i další neduhy S3 karet. Za zmínku ještě stojí, že s příchodem VESA VBE 2.0 bylo potřeba ve video BIOSu uvolnit trochu místa pro nový kód a tak byl vypuštěn font 8 x 14. Některé DOSové programy a hry ho však používají a pak dojde k rozsypání obrazu - to řeší utilita FIX8X14.