Asus EN7900GT/2DHT 256 MB DDR3 PCI-E

      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é.

7900GT original heatsink 7900GT stripped nvidia G71 GPU
7900GT with Accelero S1-top 7900GT with Accelero S1-bottom 7900GT in PC

      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.



Zpět

Aktualizováno 11.12.2018 v 2:18