Вот кусок когда из BIOS видеокарты NVIDIA, он должен заведовать регулировкой вентилятора: Код (Text): seg000:00000000 seg000 segment byte public 'CODE' use32 seg000:00000000 assume cs:seg000 seg000:00000000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing seg000:00000000 push esi seg000:00000001 add edi, edi seg000:00000003 jb short loc_64 seg000:00000003 ; --------------------------------------------------------------------------- seg000:00000005 db 0 seg000:00000006 ; --------------------------------------------------------------------------- seg000:00000006 add [ecx+0], ah seg000:00000009 add bh, bh seg000:0000000B inc dword ptr [eax] seg000:0000000B ; --------------------------------------------------------------------------- seg000:0000000D db 0 seg000:0000000E db 0 seg000:0000000F db 0 seg000:00000010 db 0 seg000:00000011 ; --------------------------------------------------------------------------- seg000:00000011 add [eax+eax], cl seg000:00000014 seg000:00000014 loc_14: ; CODE XREF: seg000:0000003Fj seg000:00000014 popa seg000:00000014 ; --------------------------------------------------------------------------- seg000:00000015 db 0 seg000:00000016 db 0 seg000:00000017 ; --------------------------------------------------------------------------- seg000:00000017 add bh, bh seg000:00000019 jmp fword ptr [esi+0Ch] seg000:0000001C ; --------------------------------------------------------------------------- seg000:0000001C add [ecx+0], ah seg000:0000001C ; --------------------------------------------------------------------------- seg000:0000001F db 0FFh seg000:00000020 db 0FFh seg000:00000021 db 0FFh seg000:00000022 ; --------------------------------------------------------------------------- seg000:00000022 mov edi, 40000000h seg000:00000027 push esi seg000:00000028 add bh, bh seg000:0000002A jb short loc_9D seg000:0000002C adc ds:16C5AF08h[eax], al seg000:00000033 add al, al seg000:00000035 and edx, ecx seg000:00000037 sub al, [ebx] seg000:00000039 rcl byte ptr [ebp-2Fh], 1Ch seg000:0000003D add al, al seg000:0000003F jb short loc_14 seg000:00000041 push cs seg000:00000042 add eax, eax seg000:00000044 adc esp, 0C0010Eh seg000:00000044 ; --------------------------------------------------------------------------- seg000:0000004A db 0 seg000:0000004B db 0 seg000:0000004C ; --------------------------------------------------------------------------- seg000:0000004C add [eax+9DAFDh], al seg000:00000052 rol byte ptr [eax], 0 seg000:00000052 ; --------------------------------------------------------------------------- seg000:00000055 db 0 seg000:00000056 ; --------------------------------------------------------------------------- seg000:00000056 add [eax+15407Ah], al seg000:0000005C add [ebx], al seg000:0000005E add [edi], cl seg000:00000060 rep and eax, [ebx+eax] seg000:00000064 seg000:00000064 loc_64: ; CODE XREF: seg000:00000003j seg000:00000064 sbb [ecx], eax seg000:00000066 loopne near ptr loc_76+2 seg000:00000068 add [eax], eax seg000:0000006A add [ecx], ah seg000:0000006C add ds:204E2026h, al seg000:0000006C ; --------------------------------------------------------------------------- seg000:00000072 db 0 seg000:00000073 ; --------------------------------------------------------------------------- seg000:00000073 add [edx], ah seg000:00000075 aaa seg000:00000076 seg000:00000076 loc_76: ; CODE XREF: seg000:00000066j seg000:00000076 db 64h seg000:00000076 cmp esi, esp seg000:00000079 add [esp+eax*8], edi seg000:0000007C or [eax], eax seg000:0000007C ; --------------------------------------------------------------------------- seg000:0000007E db 0 seg000:0000007F ; --------------------------------------------------------------------------- seg000:0000007F add [ebx], ah seg000:00000082 movsb seg000:00000083 and al, 0B3h seg000:00000085 movsb seg000:00000086 and al, 3 seg000:00000088 lds esp, [ebx+edx*2] seg000:0000008B lds esp, [ebx] seg000:0000008E lds eax, ds:0FE46h[edx*4] seg000:00000095 inc dword ptr [eax] seg000:00000097 add bh, bh seg000:00000097 ; --------------------------------------------------------------------------- seg000:00000099 db 0 seg000:0000009A ; --------------------------------------------------------------------------- seg000:0000009A add bh, bh seg000:0000009A ; --------------------------------------------------------------------------- seg000:0000009C db 0 seg000:0000009D ; --------------------------------------------------------------------------- seg000:0000009D seg000:0000009D loc_9D: ; CODE XREF: seg000:0000002Aj seg000:0000009D add bh, bh seg000:0000009D ; --------------------------------------------------------------------------- seg000:0000009F db 0 seg000:000000A0 ; --------------------------------------------------------------------------- seg000:000000A0 add bh, bh seg000:000000A0 ; --------------------------------------------------------------------------- seg000:000000A2 db 0 seg000:000000A3 ; --------------------------------------------------------------------------- seg000:000000A3 add bh, bh seg000:000000A3 ; --------------------------------------------------------------------------- seg000:000000A5 db 0 seg000:000000A6 ; --------------------------------------------------------------------------- seg000:000000A6 add bh, bh seg000:000000A6 ; --------------------------------------------------------------------------- seg000:000000A8 db 0 seg000:000000A9 ; --------------------------------------------------------------------------- seg000:000000A9 add bh, bh seg000:000000A9 ; --------------------------------------------------------------------------- seg000:000000AB db 0 seg000:000000AC ; --------------------------------------------------------------------------- seg000:000000AC add bh, bh seg000:000000AC ; --------------------------------------------------------------------------- seg000:000000AE db 0 seg000:000000AF ; --------------------------------------------------------------------------- seg000:000000AF add [eax+71h], dl seg000:000000B2 jno short near ptr 125h seg000:000000B4 jno short near ptr 104h seg000:000000B6 or dword ptr [edi-6Bh], 7C515450h seg000:000000BD push edx seg000:000000BE nop seg000:000000BF push ebx seg000:000000C0 test eax, 80590058h seg000:000000C5 pop esp seg000:000000C6 add bl, [ebp+60h] seg000:000000C9 pop esi seg000:000000CA sbb byte ptr [edi-38h], 62h ; 'b' seg000:000000CE and [esp+ecx*2+67h], ah seg000:000000D2 jl short near ptr 13Ch seg000:000000D4 db 64h seg000:000000D4 push 0FFFFFFA4h seg000:000000D7 ins byte ptr es:[edi], dx seg000:000000D8 enter 246Dh, 74h seg000:000000DC iret seg000:000000DD ; --------------------------------------------------------------------------- seg000:000000DD seg000:000000DD loc_DD: ; CODE XREF: seg000:loc_DDj seg000:000000DD jnz short near ptr loc_DD+1 seg000:000000DF js short near ptr 0FFh seg000:000000E1 jnp short near ptr 13Ah seg000:000000E3 xor ecx, [esi+20366234h] seg000:000000E9 jge short loc_EC seg000:000000EB inc eax seg000:000000EC seg000:000000EC loc_EC: ; CODE XREF: seg000:000000E9j seg000:000000EC inc ebp seg000:000000ED jl short near ptr 11Fh seg000:000000ED seg000 ends seg000:000000ED seg000:000000ED seg000:000000ED end Может я в IDA продизасмил чего не так, но выглядит вроде логично. Я хочу отключить всякую регулировку вентилятора в зависимости от температуры. Ещё там должен быть вызов куска кода, который уменьшает производительность карты при перегреве (достижении 70 град). Помогите расшифровать, что там к чему. Я сам в асме не разбираюсь почти.
Вот тут полный дамп снятый с помощью NiBiTor 4.6 http://www.rapidshare.ru/857452 , а также кусок кода с адреса 0xDAA5 по 0xDB93, который был "выужен" экспирементальным путём одним добрым человеком. Дизасм из первого сообщения кривой скорее всего, я вобще не копенгаген в этом деле. Согласен, что веником управляет драйвер, потому как CPU, а не GPU выполняет код BIOS. Если быть более подробным, то суть такая: у видеокарты при установке оборотов на 100% через RivaTuner резко увеличивается производительность и достигает своих нормальных значений (как у аналогичных карт других брэндов), но в процессе работы GPU прогревается до 70град и сразу запускается какой-то алгоритм, который начинает менять обороты вентилятора и снижает производительность ВК. Вроде бы логично, если чип нагрелся, то надо и обороты увеличить и частоты понизить. Но после того, как всё остывает, производительность ВК возвращается на свой прежний низкий уровень, поднять который можно снова задав 100% оборотов веника. Хотелось бы максимум: найти то место, где врубается "турборежим" и оставить его навсегда, а минимум это блокировать порог в 70 град, чтобы производительность оставалась высокой, или поднять этот порог до разрешённых 105 град. Заранее спасибо, надеюсь и жду. Может будет предложение использовать IDA для трассировки функционирования драйвера, я попробую, хотя не знаю как это делать.
Ещё забыл добавить, что я осуществлял мониторинг всех частот ВК и тепературы, а также оборотов вентилятора в программе Риватюнер, факт работы "турборежима" там не фиксируется, частоты остаются всё время постоянные. Я фиксировал этот факт в параллельно запущенной программе, которая отрисовывала картинку в окошке и показывала среднее значение кадров в секунду.
А не легче в той же RivaTuner в настройках покопаться? Или в настройках драйвера? Есть такая замечательная опция Hight Performance ))) Как то так... Хочетчя труъ - учи ассемблер ))
Риватюнер уже до дыр затёрт. Я не один с этой траблой столкнулся, уже и от других карт БИОСы пробовали, опасное это дело, потом на экране такая чешуя, что наощупь родной биос ставить приходится. А High Perfomance качество рендеринга ухудшает - не годится это совсем. ЗЫ: Я в основном микроконтроллеры 8051, AVR програмлю. А насчёт 80x86 асма я пас.
Clocker1980 Упс, наоборот... HightQuality ))) Качество выше => Карта греется => Вентилятор крутится как бешеный => Дао => Космос...
Ну в целом-то решение принимается? )))) Иногда не всё так СЛОЖНО, как хочется ))) З.Ы. Ты тоже ткнул "Дебил Криворукий" ?! )))))))))))))))))) Мля...
Если серьёзно, то негодится, потому что сначала веник уже крутится как бешеный => карта почему то с такого ветра начинает быстрее работать=>потом греется до 70 град=>потом веник начинает менять обороты почему-то в сторону уменьшения и карта начинает медленней работать и продолжает работать медленно даже когда остынет (и при холодном старте тоже работает медленно, если веник не завести на 100% ). В общем с контуром автоматической термостабилизации полный бардак. Хочется определить в каком куске кода включается замедление и вместо него наставить NOPов, а потом RET, или просто блокировать вызов этого куска кода. Если взять другую карту с теми же дровами, там такой фигни нету, значит фишка в БИОС, верно?
Вобще протрассировать бы как нибудь этот момент выхода на 70 градусов. Все дрова и копия БИОСа в ОЗУ ведь лежат. Только как это сделать?