Попытка переделки Radeon 9500 в 9800SE, или игры с DeviceID [29-09-2003] (фактически про SoftR9x00)

для раздела Блоги
Это моя первая более-менее серьезная статья. Впервые она была опубликована в конце сентября 2003 года на моей домашней страничке (ПС тогда еще не существовали). К сожалению, в конце марта 2004 года ту домашнюю страничку прикрыли в связи с переездом Поэтому нет ничего удивительного в том, что я решил (пусть и с некоторой задержкой) разместить эту статью здесь, на ПС: для коллекции и для истории

Немного статистики: На старом месте страница была просмотрена более 500 раз. Правда, из прочевших ее только 10% удосужилась взглянуть на скриншоты и прочесть дополнение. Сколько народу прочтет статью здесь -- этого, к сожалению, я никогда не узнаю

Кстати, через 3 недели после первой публикации статьи на форуме сайта radeon2.ru появилась тема "Soft9800XT или продолжение дел Алексея". Лично мне до сих пор интересно, сущесвует ли связь между этими двумя событиями

Далее идет текст оригинальной статьи:


(в ближайшем будущем планируется периодическое обновление материала этой статейки)

Постараюсь изложить ВСЕ по порядку. Собственно, с чего все началось:

В начале сентября (числа 10-11) перечитывая в Интернете победные рапорты о переделке Radeon 9800SE во что угодно и как угодно, у меня вдруг возник вопрос: почему никто не стремится переделать что-либо не <из>, а <в> Radeon9800SE ? Ну, например, из Radeon 9500 non pro (128Mb) на дизайне Radeon 9700. Ведь полезность такой переделки очевидна: у Radeon9800SE Gold 256-ти битная шина памяти, и при дефолтных 4-х конвеерах она, вроде бы, искусственно не урезана. Я прекрасно понимаю, что лучше 9500 переделать сразу в 9700: и шина 256bit, и 4 доп. конвеера включаются. Но в том-то все и дело, что безболезненно включаются они далеко не на всех картах . Так что для тех, кому не повезло в конвеерами, переделка 9500 в 9800SE теоретически должна дать дополнительный, хоть и небольшой, прирост производительности.
    [лирическое отступление #1 ON]

    На тему облегчения страданий обладателей 9500 с битыми конвеерами я уже как-то рассуждал в одной конференции, но там этот вопрос никого практически не заинтересовал . Да и на новый подарок со стороны ATI в виде Radeon 9800SE Gold никто тогда не рассчитывал.

    [лирическое отступление #1 OFF]
Уяснив задачу, пора было приступить к ее решению. И тут я понял, что не знаю о 9800SE даже такой элементарной вещи, как ее DeviceID . Нигде в обзорах об этом напрямую не сообщалось, поиски биоса тогда ни к чему не привели, в *.inf файлах от каталистов (в том числе от вышедшего накануне Catalyst 3.7) никаких прямых упоминаний об 9800SE не было.

Именно в этот момент и посетила меня мысль, найти этот несчастный идентификатор посредством банального ПОДБОРА / ПЕРЕБОРА.

И хотя через час после возникновения этой идеи я все таки вспомнил, где (точнее) я видел нечто похожее на нужный мне DEV_ID, намерение перепробовать весь диапазон я не оставил.

Тут, собственно, подходим к самому главному вопросу: КАК ?!
Каким образом произвести модификацию ?

Я не стал изобретать велосипед, т.к. уровень моих знаний сделать этого пока не позволяет

Вариантов было немного:
  • Хардварный. Для тестирования видеокарты без включения дополнительных четырех конвееров достаточно было подправить БИОС согласно TFM'у ("Исследование возможностей программной переделки Radeon 9x00 в FireGL Z1/X1") и прошить его. Для включения доп. конвееров пришлось бы перепаивать каждый раз резистор на чипе. В общем, вариант трудоемкий, малопроизводительный, неудобный и к тому же опасный. Сразу отметается.

  • Софтварный. Тут я обратил свой взор на замечательное произведение нашего соотечественника, которым(и) я искренне восхищаюсь. Я имею в виду великолепный скрипт SoftR9x00 для RivaTuner от А. Николайчука (aka Unwinder)
Свои изыскания в этом направлении я начал с побайтного сравнения трех (softR9500, R9700, R9800) пропатченых скриптом файлов ati2vxag.vxd. Мне повезло . Как оказалось, отличаются они друг от друга лишь 1..2-мя байтами. При ближайшем рассмотрении оказалось, что эти самые байты являются частью DeviceID упомянутых R9500, R9700, R9800. Подробности в следующей таблице (прошу обратить внимание на самую последнюю строку).

Таблица 1. Результаты сравнения оригинального файла ati2vxag.vxd с патчеными (SoftR9x00) [для различных версий драйвера]
v.3.5 v.3.6 v.3.7 v.3.8 beta original Soft R9500 Soft R9700 Soft R9800
47882:
47883:
47884:
47885:
47886:
47887:
47888:
47889:
48082:
48083:
48084:
48085:
48086:
48087:
48088:
48089:
4C082:
4C083:
4C084:
4C085:
4C086:
4C087:
4C088:
4C089:
5CE82:
5CE83:
5CE84:
5CE85:
5CE86:
5CE87:
5CE88:
5CE89:
89
45
F8
81
7D
8C
02
10
25
F0
F0
00
00
0D
04
01
25
F0
F0
00
00
0D
04
0E
25
F0
F0
00
00
0D
08
0E
4788C:
4788D:
4788E:
4788F:
47890:
47891:
47892:
47893:
47894:
47895:
47896:
47897:
47898:
4808C:
4808D:
4808E:
4808F:
48090:
48091:
48092:
48093:
48094:
48095:
48096:
48097:
48098:
4C08C:
4C08D:
4C08E:
4C08F:
4C090:
4C091:
4C092:
4C093:
4C094:
4C095:
4C096:
4C097:
4C098:
5CE8C:
5CE8D:
5CE8E:
5CE8F:
5CE90:
5CE91:
5CE92:
5CE93:
5CE94:
5CE95:
5CE96:
5CE97:
5CE98:
0F
84
07
00
00
00
33
C0
E9
DF
05
00
00
89
45
F8
90
90
90
90
90
90
90
90
90
90
89
45
F8
90
90
90
90
90
90
90
90
90
90
89
45
F8
90
90
90
90
90
90
90
90
90
90
DeviceID:4144 4E44 4E48

Примечание: На момент начала эксперимента драйвера версии 3.8 beta еще не появились.

Как говорится, комментарии излишни.

Теперь ясно, как можно попытаться получить SoftR9800SE, например, для каталиста 3.7: необходимо в каком-либо HEX редакторе (я воспользовался UltraEDIT'ом) по адресу 0x0004C088 произвести замену значения 04 на 08 в пропатченном под SoftR9500 файле ati2vxag.vxd.

Либо по адресу 0x0004C089 заменить 0E на 01 в файле ati2vxag.vxd, пропатченном под SoftR9800. Кому что больше по душе . Я воспользовался первым вариантом.
    [лирическое отступление #2 ON]

    Для выполнения такой черновой работы, как замена пары байтиков в файле, можно модифицировать упомянутый скрипт SoftR9x00. Приведу лишь часть оригинального скрипта:

    Src0     = C1 E8 10 89 45 F8 81 7D 00 02 10 00 00 0F 84 07 00 00 00 33 C0 E9 00 00 00 00
    

    SCM0 = FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00

    Dst0_0 = C1 E8 10 25 F0 F0 00 00 0D 04 0E 00 00 89 45 F8 90 90 90 90 90 90 90 90 90 90

    Dst0_1 = C1 E8 10 25 F0 F0 00 00 0D 04 01 00 00 89 45 F8 90 90 90 90 90 90 90 90 90 90

    Dst0_2 = C1 E8 10 25 F0 F0 00 00 0D 08 0E 00 00 89 45 F8 90 90 90 90 90 90 90 90 90 90


    Сопоставив выделенные цветом фрагменты с выделенными красным в Таблице 1 и уловив суть пытливый читатель найдет способ обойтись без HEX-редактора . Подскажу лишь, что нумерация DstVar и Dst0_ ведется в десятичной системе. Использовать полученный скрипт лучше для своих нужд. Распространять модифицированный вариант в массы я бы не советовал, прежде всего по этическим соображениям.

    [лирическое отступление #2 OFF]
Затем на всякий случай настоятельно рекомендую проверть результат путем побитного сравнения с оригиналом. Далее можно копировать полученный (дважды пропатченый ) ati2vxag.vxd в папку "%windir%\system\" и перезагружать винду.

Понятно, что в ati2vxag.vxd можно забить как DeviceID реально существующих видеокарт с чипом R300/R350, так и фэйковые DeviceID, и посмотреть, что из этого всего получится. Собственно, дальнейший ход эксперимента как раз и был этому посвящен

Необходимо было определиться, из какого диапазона брать DeviceID для проведения эксперимента. Пришлось еще раз заглянуть в *.inf файлы различных версий каталиста (и не только), чтобы выписать оттуда все DeviceID существовавших на тот день видеокарт на базе чипов R300/R350. Результаты я свел в таблицу. DeviceID вторичных (secondary) адаптеров намеренно не рассматривались. Так же я не заморачивался серией AIW.

Таблица 2.
4-х
конвейерные
8-ми
конвейерные
DeviceID название DeviceID название
4144 Radeon 9500 4E44 Radeon 9700pro
4E45 Radeon 9500pro/9700
4E46 FireGL X1+/X2
4147 FireGL Z1 4E47 FireGL X1
4148 Radeon 9800se 4E48 Radeon 9800pro
4E49 Radeon 9800
Примечание: FireGL в таблице упомянут лишь для полноты картины.

Налицо следующая закономерность:

  • 1-я и 3-я "цифры" неизменно равны 4
  • 2-я "цифра" равна либо 1, либо E
  • значительно меняется лишь последняя "цифра": в диапазоне от 4 до 9-ти
Примечание: Искренне надеюсь, все поняли, что я имею ввиду под <цифрами> . Поехали дальше:

На основании этих данных я выбрал диапазон изменения значений для DeviceID (точнее, 2 диапазона):

  • от 4140 до 414F
  • от 4E40 до 4E4F

Соответственно, для первого диапазона я брал патченый под SoftR9500 файл ati2vxag.vxd и менял байт по адресу 0x0004C088 (согласно описанной выше процедуре) на 0,1,:,9,A,B,C,D,E,F.

Для второго диапазона повторял то же самое, только с файлом пропатченым под SoftR9800.

В итоге я получил 32 варианта файла ati2vxag.vxd, которые по очереди закидывал в папку "%windir%\system\", перезагружался и наблюдал за изменениями.

А изменения были разные. От резко бросающихся в глаза ("Видеоадаптер настроен неправильно"), до таких, которые без специнструмента (RivaTuner, GLinfo, DXdiag, 3DMark2001se(b330), 3DMark03 (b330), Quake3a v.1.17) и не разглядишь.

Файлы с DeviceID, принадлежащими диапазонам:

  • 4140...4143 & 414C...414F
  • 4E40...4E43 & 4E4C...4E4F
  • 4E45,
проверку на жизнеспособность не прошли. В случае их использования система постоянно ругалась на то, что "Видеоадаптер настроен неправильно".

Меня очень удивило, что первоначальную проверку не прошел файл с забитым DeviceID = 4E45, который соответствует чуть ли не самой стандартной видеокарте Radeon 9500pro/9700 !!! Это сюрприз №1.

Тестирование проводилось на компьютере следующей конфигурации:

  • EPoX 8RDA (nForce2 Ultra) с прошитым августовским БИОСом
  • Athlon XP1700+ @ 2200MHz (FSB 200MHz) [1.7v]
  • 2xDDR266 @ 400MHz Transcend (JetRAM) 2.5-3-3-3 [2.63v]
  • Sapphire Radeon 9500 (128Mb) [351x303MHz] на дизайне Radeon 9700
  • Windows 98 SE
  • Catalyst 3.7 (для начала)
  • версия драйверов под материнку 2.41
  • DirectX 9.0b
Полученные результаты сведены в таблицу:

Таблица 3. Catalyst v.3.7
DevID name DXdiag GLinfo 3DMk 2003 3DMk 2001se Q3a v.117
4144 Radeon9500 Radeon9500 Radeon9500 3490 13374 115
4145 Radeon9500 Radeon9500 3490 13359 115
4146 Radeon9500 Radeon9500 3489 13360 115
4147 FireGL Z1 Radeon9500 Radeon9500 PROTOTYPE 3487 13370 115
4148 Radeon9800se Radeon9800se Radeon9800se 3489 13360 91,1
4149 Radeon9500 Radeon9500 3487 13358 102,4
414A Radeon9800 UNKNOWN 3487 13369 102,4
414B Radeon9800 UNKNOWN 3486 13377 102,4
4E44 Radeon9700pro Radeon9700 Radeon9700 5141 16423 207
4E45 Radeon9500pro/9700 --- --- --- --- ---
4E46 FireGL X1+/x2 Radeon9600TX Radeon9700 5142 16425 206,9
4E47 FireGL X1 Radeon9700 Radeon9700 PROTOTYPE 5138 16413 206,9
4E48 Radeon9800pro Radeon9800 Radeon9800pro 5139 16406 207
4E49 Radeon9800 Radeon9800 Radeon9800 5140 16407 207
4E4A Radeon9800XT Radeon9800 5377 16416 207
4E4B Radeon9800XT UNKNOWN 5141 16418 207

Первое, что бросается в глаза - появление адаптеров, описание которых отсутствует в *.inf файлах:

  • Radeon9800SE
  • Radeon9600TX- что за неведома зверушка ???
  • Radeon9800XT - презентация этого состоится лишь 30 сентября, да и информация о нем появилась не так давно.
Второе - странные названия OpenGL рендереров, отображаемые Квэйком и GLinfo:

  • Radeon9500 PROTOTYPE
  • Radeon9700 PROTOTYPE
  • UNKNOWN
Третье - еще более странные результаты, показанные единственным OpenGL тестом в диапазоне 414x (особенно удивляет низкий fps у Radeon 9800 SE). Почему-то в диапазоне 4E4x такого разброса не наблюдается.

На фоне OpenGL тестов начинаешь поражаться стабильности результатов в DirectX тестах

Но и здесь не обошлось без любопытнейшего исключения: 4E4A (Radeon9800XT) в 3DMark03. Когда я первый раз увидел прирост аж в 230 единиц, то не поверил глазам своим. И правильно сделал . Как потом оказалось, этот результат дался дорогой ценой: в тестах с использованием вершинных шэйдеров (Battle Of Proxycon, Troll's Lair, Ragtroll) появились многочисленные толстые зубчатые линии/полосы. В чем тут дело - непонятно

Фотогаллерея артефактов:
скриншот1 (~25kb)
скриншот2 (~23kb)
скриншот3 (~27kb)
скриншот4 (~27kb)
скриншот5 (~77kb)

В течение следующей недели удалось провести подобный эксперимент с другими версиями драйверов:

Таблица 4. Catalyst v.3.5
DevID name DXdiag GLinfo 3DMk03 3DMk2001se Q3a v.117
4144 Radeon9500 Radeon9500 Radeon9500 3484 13272 112.2
4145 Radeon9500 Radeon9500 3486 13282 112.2
4146 Radeon9500 Radeon9500 3486 13278 112.2
4147 FireGL Z1 Radeon9500 Radeon9500 PROTOTYPE 3485 13282 112.2
4148 Radeon9800se Radeon9800se Radeon9500XT 3486 13284 100.1
4149 Radeon9500 Radeon9500 3486 13287 100.1
414A Radeon9800 UNKNOWN 3483 13277 100.1
414B Radeon9800 UNKNOWN 3487 13277 100.1
4E44 Radeon9700pro Radeon9700 Radeon9700 5128 16264 212.2
4E45 Radeon9500pro/9700 --- --- --- --- ---
4E46 FireGL X1+/X2 Radeon9600TX Radeon9700 5133 16262 212.3
4E47 FireGL X1 Radeon9700 Radeon9700 PROTOTYPE 5134 16270 212.3
4E48 Radeon9800pro Radeon9800 Radeon9800pro 5123 16267 212.3
4E49 Radeon9800 Radeon9800 Radeon9800 5131 16253 212.3
4E4A --- --- --- --- ---
4E4B Radeon9800 UNKNOWN 5131 16262 212.3
  • DeviceID будущего Radeon9800XT (4E4A) этой версией драйверов вообще не поддерживается.
  • Обращает на себя внимание тот факт, что результаты Radeon 9800 SE (4148) в OpenGL тесте здесь не настолько плохи, как в последующих версиях каталистов. Похоже, драйверописатели сознательно пытаются занизить характеристики этой карты, чтобы они <лучше> соответствовали ее ценовому диапазону.
  • Оказывается, Radeon 9800 SE отзывался когда-то на имя Radeon9500XT , по крайней мере, в OpenGL приложениях.

Таблица 5. Catalyst v.3.6
DevID name DXdiag GLinfo 3DMk03 3DMk2001se Q3a v.117
4144 Radeon9500 Radeon9500 Radeon9500 3482 13277 112.2
4145 Radeon9500 Radeon9500 3482 13249 112.2
4146 Radeon9500 Radeon9500 3482 13259 112.2
4147 FireGL Z1 Radeon9500 Radeon9500 PROTOTYPE 3483 13245 112.2
4148 Radeon9800se Radeon9800se Radeon9800se 3482 13247 89.2
4149 Radeon9500 Radeon9500 3481 13260 100.1
414A Radeon9800 UNKNOWN 3483 13253 100.1
414B Radeon9800 UNKNOWN 3482 13244 100.1
4E44 Radeon9700pro Radeon9700 Radeon9700 5122 16235 208.8
4E45 Radeon9500pro/9700 --- --- --- --- ---
4E46 FireGL X1+/X2 Radeon9600TX Radeon9700 5120 16218 208.7
4E47 FireGL X1 Radeon9700 Radeon9700 PROTOTYPE 5118 16212 208.8
4E48 Radeon9800pro Radeon9800 Radeon9800pro 5118 16224 208.8
4E49 Radeon9800 Radeon9800 Radeon9800 5121 16210 208.8
4E4A RADEON R360 UNKNOWN 5117 16225 208.7
4E4B Radeon9800 UNKNOWN 5117 16212 208.7
Ну вот наконец-то и Radeon 9800XT проявился, пока что под именем RADEON R360, а вот названия для соответствующего OpenGL рендерера еще не придумали

Таблица 6. Catalyst v.3.8 beta
DevID name DXdiag GLinfo 3DMk03 3DMk2001se Q3a v.117
4144 Radeon9500 Radeon9500 Radeon9500 3490 13342 115
4145 Radeon9500 Radeon9500 3490 13327 115
4146 Radeon9500 Radeon9500 3488 13330 115
4147 FireGL Z1 Radeon9500 Radeon9500 PROTOTYPE 3489 13340 115
4148 Radeon9800se Radeon9800se Radeon9800se 3490 13334 91.1
4149 Radeon9500 Radeon9500 3491 13331 102,4
414A Radeon9800 UNKNOWN 3488 13336 102,4
414B Radeon9800 UNKNOWN 3491 13354 102,4
4E44 Radeon9700pro Radeon9700 Radeon9700 5142 16347 207.2
4E45 Radeon9500pro/9700 --- --- --- --- ---
4E46 FireGL X1+/X2 Radeon9600TX Radeon9700 5139 16375 207,3
4E47 FireGL X1 Radeon9700 Radeon9700 PROTOTYPE 5141 16376 207,2
4E48 Radeon9800pro Radeon9800 Radeon9800pro 5140 16375 207.2
4E49 Radeon9800 Radeon9800 Radeon9800 5143 16361 207.2
4E4A Radeon9800XT Radeon9800 5375 16376 207.7
4E4B Radeon9800XT UNKNOWN 5142 16365 207.2

Особых отличий от результата с Catalyst 3.7 не вижу.

ВЫВОДЫ:

Ну, что сказать ? Я немного разочарован.
Как ни прискорбно, но попытка переделать Radeon 9500 в 9800 SE выбранным способом к успеху (повышению производительности) не привела. Результат в OpenGL даже ухудшился. Возможно, надо пойти другим путем. Вот только каким ?

= Карпов Вадим =
(29 сентября 2003 года)

P.S.: Если у кого-то после прочтения сего опуса возникли какие-либо конструктивные идеи, касающиеся обсуждаемого здесь вопроса, то можно обсудить их на форуме. WELCOME !!!


Дополнение от 08 октября 2003 года
(catalyst 3.7 WinXP)


На прошлой неделе провел таки тестирование под WinXPpro.

Пришлось доукомплектовать скрипт SoftR9x00 несколькими новыми строчками, чтобы рассширить ассортимент пропатченых файлов до 32-х (вместо 3-х).

Сегодня удосужился свести результаты тестов в одной таблице.

Таблица 3. Catalyst v.3.7 WinXP (2 варианта)
DevID name DXdiag GLinfo 3DMk 2003 3DMk 2001se Q3a v.117
4144 Radeon9500 Radeon9500 Radeon9500 3522 3519 13361 13548 111.4 112.4
4145 Radeon9500 Radeon9500 3520 3522 13319 13472 112.4 112.4
4146 Radeon9500 Radeon9500 3520 3521 13504 13449 112.4 108
4147 FireGL Z1 Radeon9500 Radeon9500 PROTOTYPE 3518 3489 13330 13428 112.4 108
4148 Radeon9800se Radeon9800se Radeon9800se 3522 3519 13031 13466 89.4 88.6
4149 Radeon9500 Radeon9500 3521 3519 13031 13482 100.3 100.3
414A Radeon9800 UNKNOWN 3437 3519 13472 13007 99.5 100.3
414B Radeon9800 UNKNOWN 3519 3405 13477 12979 99.5 96.5
4E44 Radeon9700pro Radeon9700 Radeon9700 5227 5228 16184 16324 208.7 200.5
4E45 Radeon9500pro/9700 --- --- --- --- --- --- --- ---
4E46 FireGL X1+/x2 Radeon9600TX Radeon9700 5232 5229 16325 16357 208.7 200.5
4E47 FireGL X1 Radeon9700 Radeon9700 PROTOTYPE 5181 5228 15957 16404 208.7 206.7
4E48 Radeon9800pro Radeon9800 Radeon9800pro 5060 5228 16406 15856 200.7 208.7
4E49 Radeon9800 Radeon9800 Radeon9800 5227 5230 16453 16353 208.7 208.7
4E4A Radeon9800XT Radeon9800 5468 5419 16262 16332 208.7 208.6
4E4B Radeon9800 UNKNOWN 5231 5185 16390 16413 208.7 200.5
По сравнению с тестами каталиста 3.7 под Win98 картина не изменилась.

Аномалии те же:

  • в OpenGL для R9800 SE и в меньшей степени для DevID=4149...414B
  • в 3Dmark2003 все те же грабли с Radeon 9800 XT
Еще удивляет довольно большой разброс результатов, из-за чего пришлось проводить повторное тестирование.

В общем, все по-старому.

Ждем новый каталист 3.8 (вроде сегодня обещали )
Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают