- Модификации BIOS для ATI Radeon X800
1. Прошивальщики.
В качестве вступления напоминаю, что при использовании программы RaBit 1.6 и выше никаких ручных манипуляций по изменению Device ID, объема локальной видеопамяти, VIVO, частоты чипа/памяти и частично SVID SSID проводить не потребуется (это можно смело пропускать :)). И ещё хочу напомнить, что данная статья не является подробным руководством по перепрошивке/включению дополнительных конвейеров, в ней рассматриваются только основные моменты.
1.1 Flashrom 2.40
Flashrom 2.40 непригоден для получения 16 конвейеров на картах X800 Pro VIVO & X800XT. Он сохраняет значения по адресу 0х7А из биоса в карте, сбрасывает в прошиваемом и возвращает прежние. На это указывает строка Preserve R42x ROM settings. Для работы с биосами, модифицированными в hex-редакторах, он подходит как нельзя лучше, т.к. корректировки CRC (контрольных сумм) не требует (вернее, сам принудительно их пересчитывает), поэтому карта не инициализируется как урезанная по памяти и в даун не отправляется. После выхода RaBit 1.6 (корректирует CRC) Flashrom 2.40 потерял, пожалуй, единственное своё преимущество.
1.2 Flashrom16
Flashrom16 может служить универсальным средством, т.к. справляется со всеми задачами. Требует корректировки CRC. Для получения 16 конвейеров подходит как нельзя лучше, т.к. обеспечивает минимум телодвижений. В прошиваемом биосе необходим ASIC ID 4А50 (используем RaBit 1.6).
1.3 GVF12
GVF11 и GVF12 - наименее удобный выбор. Работают только с биосами от Giga-byte. Если попытаемся прошить другой биос, получим сообщение: The file is not for Gigabyte VGA BIOS. Требует корректировки CRC. Адаптирование других биосов для работы с данным прошивальщиком возможно (см. п. 6 "Немного о заблуждениях и удобствах").2. Изменение Device ID, SVID, SSID.
В установке Device ID (далее DID) принимают участие младшие полубайты следующих байтов по адресам 0х74, 0х7В. Они, и только они, заставляют ASIC проинициализироваться соответствующим образом (в том числе и для получения 16 конвейерной видеокарты). ASIC ID и BIOS ID могут различаться, в дополнительных полях Device ID (0х1А0 - 0х200) вообще могут быть нули, что не играет никакой роли ни для самого Device ID, ни для установки драйверов. Таблица для ручной установки Device ID приводится:
Соответствие DID видеокартам:
RADEON X800 Series = 4A49, 4A4A, 4A4B.
4A49 наблюдается у X800 Pro.
X800ХТ претендуют на 4A4B.
RADEON X800 XT Platinum Edition = 4A50.
ATI FireGL X3-256 = 4A4D.
Для получения всех DID достаточно всего двух значений второго полубайта по адресу 0х74 - 0 и 1. DID из ряда PCI-E получить нельзя, прошивать для этого биосы от PCI-E на AGP КАТЕГОРИЧЕСКИ не рекомендуется (будьте внимательны!). Это приведёт к ГИБЕЛИ вашей карты.
SVID и SSID расположены в стандартных местах (они были рассмотрены в статье BIOS для видеокарт ATI R3x0. Часть 1. Ознакомительная) Корректно правятся в RaBit 1.7.3. Изменение количества конвейеров.
Для включения/отключения доп. конвейеров самым удобным выбором может стать Flashrom16. DID = 4A50 включит все 16 конвейеров (карта будет определяться как RADEON X800 XT Platinum Edition), DID = 4A49 включит 12 конвейеров. Можно использовать любой биос от х800, предварительно скорректировав DID нужным вам образом. Естественно, частоты чипа/памяти также подлежат редактированию по вашему усмотрению, не у всех карта корректно заработает на частотах X800 XT Platinum Edition.
4. Изменение объема локальной видеопамяти и количества активных каналов памяти.
Количество активных каналов памяти можно найти по регистру MC_CNTL в RaBit. Непосредственно за это отвечает младший (второй) полубайт в значении по умолчанию равном 62 (соотв. 256бит) данного регистра (первый полубайт управляет контроллером памяти - отвечает за количество строк и столбцов).
MC_CNTL (0x00000060) - 64 бит
MC_CNTL (0x00000061) - 128 бит
MC_CNTL (0x00000062) - 256 бит
MC_CNTL (0x00000063) - reserved
... далее последовательность в 4 бита
MC_CNTL (0x00000002) - 2**10 rows, 256 columns
MC_CNTL (0x00000012) - 2**11 rows, 256 columns
MC_CNTL (0x00000022) - 2**12 rows, 256 columns
MC_CNTL (0x00000032) - 2**13 rows, 256 columns
MC_CNTL (0x00000042) - 2**10 rows, 512 columns
MC_CNTL (0x00000052) - 2**11 rows, 512 columns
MC_CNTL (0x00000062) - 2**12 rows, 512 columns
MC_CNTL (0x00000072) - 2**13 rows, 512 columns
... далее последовательность в 4 бита
Объем локальной видеопамяти можно найти по регистру CONFIG_MEMSIZE. За это отвечают два байта данного регистра. В качестве примеров приводится регистр целиком.
CONFIG_MEMSIZE (0x00100000) - 1 МБ
CONFIG_MEMSIZE (0x00200000) - 2 МБ
.....
CONFIG_MEMSIZE (0x00F00000) - 15 МБ
CONFIG_MEMSIZE (0x01000000) - 16 МБ
CONFIG_MEMSIZE (0x01100000) - 17 МБ
....
CONFIG_MEMSIZE (0x01F00000) - 31 МБ
CONFIG_MEMSIZE (0x02000000) - 32 МБ
CONFIG_MEMSIZE (0x02100000) - 33 МБ
....
CONFIG_MEMSIZE (0x04000000) - 64 МБ
....
CONFIG_MEMSIZE (0x08000000) - 128 МБ
....
CONFIG_MEMSIZE (0x10000000) - 256 МБ5. Изменение частоты чипа/памяти.
Частота чипа/памяти находится по строке RaBit CLOCK table offs. Допустим, она равна 0xB5АE. Отсчитываем в hex редакторе вниз 7 байт. Байты 8 и 9 будут устанавливать частоты чипа - 0хВ5В6-0хВ5В7. Пример: 00010102010209 8CВ9 (8CВ9 соотв. частоте hw 472.5(475.00)). Установка частоты видеопамяти находится ниже на 2 байта (00 00). 3-й и 4-й байты 0хВ5ВА-0хВ5ВВ искомое значение - 0000 C8АF (C8АF соотв. частоте hw 445.5 (450.00)).
Необходимые частоты чипа/памяти рассчитываются с помощью виндового калькулятора :). Сперва переводим его в инженерный вид. Далее, нужную частоту, (к примеру 600) приводим к следующему виду: 600,00 (без запятой). Вводим в калькуляторе в десятичной системе и переводим в шестнадцатеричную, получаем значение EA60. Далее по строке RaBit CLOCK table offs ищем данный регистр и вписываем полученное значение. В hex редакторе это примет вид 010102010209 60EA.Для примера:
6. Немного о заблуждениях и удобствах.
Заблуждение связано с прошивальщиками GVF11 и GVF12, прошивающими только биосы от Giga-byte. Биосы от данного производителя, как известно, имеют размер порядка 64кб (вместо 54-56 кб). Почти в самом конце файла имеется техническая область в 13 строк, начинающаяся с сигнатуры $GV (естественно, flashrom эту зону не знает). Именно по ней GVF11 и GVF12 определяют биосы от Giga-byte и получают указатель на адрес 0х47 (символ G), который, в свою очередь, является указателем на зону общего массива ссылок HEADER (KERNELL). Так что утверждение, что именно в этой технической зоне находится управление конвейерами и что только такие биосы правильные, не состоятельно. Кстати, данную область можно прикрутить куда угодно (не в тело биоса), даже сразу за областью действительных данных. Тогда размер биоса будет порядка 56кб :). Так же её можно добавить в любой другой биос от х800ХТ или х800pro (корректировать CRC необходимо), и прошивальщик примет этот биос за свой. Для уменьшения телодвижений следует использовать Flashrom16. Для инициализации 16 конвейеров ему необходим ASIC ID 4А50.
7. Мелочи (как убрать secondary device).
За определение secondary device в биосах карт с чипом R423 стал отвечать младший полубайт по адресу 0х75. Значения, которые приходилось встречать: 0С, 0Е, 08. Чтобы его отключить, достаточно это значение обнулить.
8. Модификации BIOS для Radeon X800 PCI Express.
Изменение SVID, SSID, количество активных каналов памяти, частота чипа/памяти и т.д. аналогично и рассмотрено выше (RaBit 1.6 с этими биосами так же работает). Все рассмотренные прошивальщики могут работать с биосами под PCI-E (т.е. их заливать). Попытки изменения количества конвейеров успеха иметь не будут.
Установка DID для PCI-E и AGP различна. Это связано с аппаратной блокировкой. Таблица для ручной установки Device ID приводится:
Соответствие DID видеокартам:
RADEON X800 SE (R423) = 554B
RADEON X800 Series (R430) = 554F, 554D
RADEON X800 PRO (R423) = 5549
RADEON X800 XT (R423) = 5D57
RADEON X800 XT Platinum Edition (R423) = 554A
RADEON X850 XT Platinum Edition (R480) = 5D4D
RADEON X850 Series (R480) = 5D4F, 5D52
ATI FireGL V5100 (R423GL) = 5551
ATI FireGL V7100 (R423GL) = 5550
Для получения всех DID достаточно всего двух значений второго полубайта по адресу 0х74 - 0 и 1. AGP биосы встают на PCI-E, но, чтобы попасть в нужный DID, необходимо ориентироваться на таблицу образования DID для PCI-E.
А в качестве заключения спешу заметить, что любая критика и любые добавления к вышеизложенному приветствуются. Пишите.
© dvsh