VGA BIOS на i855GME

Доброго дня, коллеги!

Имеем следующего зверя - AEC-6910. Построено это чудо на базе чипсета i855GME.

Предыстория такова: необходимо вывести графику под FreeBSD и Xorg на панель с соотношением сторон 16:9. Драйвер видео i810(4) поддерживает работу только с режимами, прописанными в VGA BIOS. Нужно ли упоминать, что при просмотре утилиткой /usr/ports/sysutils/915resolution списка "зашитых" режимов, необходимых не обнаружилось?:)
В итоге встал перед выбором: либо исправлять драйвер i810, либо править BIOS. После прочтения массы материалов на этом сайте и форуме, остановился все же на втором, т.к. вопрос показался вполне решаемым.

Для генерации VGA BIOS для интеловских чипсетов с интегрированным графическим ядром применяется связка из Intel Embedded Graphics Drivers Configuration Editor (IEGD CED) и Open Watcom C/C++. Это ПО позволяет скомпилить бинарник VGA.BIN, который, как написано в официальном мануале, интегрируется в системный BIOS материнской платы. Но вот как его туда корректно интегрировать - Intel не сообщает. Рекомендует обращаться к производителю BIOS или MB. Несмотря на то, что партию контроллеров AEC-6910 мы покупаем большую, производитель ничего толком сказать не смог. Наверное, сам поразмещал OEM-заказы конторам-однодневкам... Пришлось вот лезть в инет и искать, как обойти алчных производителей:))) Впрочем, это все лирика.

Практика же заключается в следующем: из материнки вытащен BIOS, при помощи вышеуказанного ПО сгенерирован VGA.BIN, теперь дело за малым - объединить:)

Вот что имеем:

C:\Award\CBROM>cbrom original.bin /d
cbrom V1.55 [10/12/05 Release] (C)Phoenix Technologies 2001-2005

              ******** original.bin BIOS component ********

 No. Item-Name         Original-Size   Compressed-Size Original-File-Name
================================================================================
  0. System BIOS       20000h(128.00K)  13A16h(78.52K)  8150P15A.BIN
  1. XGROUP CODE       0CC50h(51.08K)   08902h(34.25K)  awardext.rom
  2. ACPI table        03CDFh(15.22K)   01857h(6.08K)   ACPITBL.BIN
  3. EPA LOGO          0168Ch(5.64K)    0030Dh(0.76K)   AwardBmp.bmp
  4. YGROUP ROM        0C1B0h(48.42K)   04D2Ch(19.29K)  awardeyt.rom
  5. GROUP ROM[ 0]     04720h(17.78K)   02040h(8.06K)   _EN_CODE.BIN
  6. VGA ROM[1]        10000h(64.00K)   07DD4h(31.46K)  MTG_3148.DAT
  7. GROUP ROM[ 5]     01A00h(6.50K)    00C65h(3.10K)   M09_3148.BIN
  8. GV3                01CDDh(7.22K)   00B74h(2.86K)   PPMINIT.ROM
(SP) NCPUCODE          18800h(98.00K)   18800h(98.00K)  NCPUCODE.BIN

  Total compress code space  = 4B000h(300.00K)
  Total compressed code size = 46995h(282.40K)
  Remain compress code space = 0466Bh(17.60K)

                          ** Micro Code Information **
Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID
------------------+--------------------+--------------------+-------------------
SLOT1  01   0692  |  SLOT1  02   0694  |  SLOT1  45   0695  |  SLOT1  07   0695
SLOT1  06   06D0  |  SLOT1  09   06D1  |  SLOT1  10   06D2  |  SLOT1  17   06D6
SLOT1  20   06D8  |  SLOT1  08   06E0  |  SLOT1  0C   06E1  |  PPGA   0C   06E1
SLOT1  26   06E4  |  SLOT1  39   06E8  |  PPGA   53   06EC  |  SLOT1  50   06EC
SLOT1  01   0692  |  SLOT1  02   0694  |  SLOT1  45   0695  |  SLOT1  07   0695
SLOT1  06   06D0  |  SLOT1  09   06D1  |  SLOT1  10   06D2  |       0000     000
0
     0000     0000|       0000     0000|  ^C

Вроде бы все красиво: только что сгенерированный VGA.BIN и несжатый VGA ROM (он же MTG_3148.DAT) имеют одинаковый размер - 64К, однако если глянуть на их внутреннюю структуру, то вылазят кое-какие несоответствия. Например, в "зашитом" в системный BIOS модуле часто встречаются plain-text сигнатуры производителя вроде "Интел инсайд" или "аллах акбар" (шутка), однако VGA.BIN никаких подобных "штучек" внутри не имеет - чисто бинарник, без всяких там стихов внутри. Из этого вылазит одна неприятность, из-за которой и стопорнулся: размер сжатого MTG_3148.DAT - 31.46K, а вот сгенерированный VGA.BIN сжимается при помощи LHA до 53К (сказываются различия в структуре). Генерировать пробовал много раз, с разными опциями - степень сжатия всегда оставалась порядка 84%, то есть результирующий размер сжатого файла при любых установках нового VGA BIOS оставался в пределах 53К.
Если присмотреться, то становится очевидным, что даже с учетом замены VGA ROM и удаления EPA и GV3 (кстати, не особо уверен, что его можно удалять) места на новый VGA ROM не хватит.

Кроме того, есть несколько вещей, которые смущают:
1. При перечислении Micro Code Information CBROM вываливается с ошибкой - к чему бы это? (ОС - WinXP SP2 со всеми обновлениями и исправлениями). CBROM версии 1.55, т.е. - последний, предыдущие версии вообще не видят NCPUCODE b некорректно определяют GV3, так что применять их смысла нет. Кстати, предыдущие версии и не перечисляют ничего...
2. При помощи CBROM невозможно ни извлечь, ни удалить NCPUCODE.
3. CBROM учитывает размер NCPUCODE в Total compressed code size при том, что NCPUCODE не сжат (рядом с именем модуля я не нашел характерных для lha заголовков, да и сам CBROM определяет этот модуль как non-compress cpu code.
4. Total compress code space составляет всего 300К, что как бы маловато для общего размера в 512К (4-Мб флешка). Ведь встречаются и 400К свободного места...

Собственно, вопросы, как всегда, очевидны: кто виноват и что делать?:))) А если серьезно, то хотелось бы узнать - нет ли возможности каким-либо образом сжать NCPUCODE? Ведь места он занимает ооочень немало. Ну и может быть посоветуете, что можно безбоязненно выбросить из прошивки, чтобы на новый VGA ROM хватило места? У девайса есть несколько не особо нужных интегрированных устройств (PCMCIA, CF, watchdog и несколько последовательных портов, которые реализованы отдельными чипами, на них даже в BIOS Setup отдельная страничка выделена) - и ни одного явно предназначенного для них модуля!!!! То есть я даже не знаю, чего бы такого грохнуть... Может быть, есть еще какой-то способ увеличить доступное для записи модулей место, а то 300К смотрится смешно. И, до кучи, кроме VGA BIOS хотелось бы еще туда загнать LAN BOOTROM (вдохновился парой веток на форуме) - загрузка по сети в принципе нужна, но не реализована в существующей прошивке. Только вот место, место, место...

Добавлю, что флешка на маме - 49LF004A, установлена в колодку PLCC, так что заменить ее не составит труда, если угроблю. Правда, не на ходу - при разборке девайса камень и северный мост отрываются от корпуса-радиатора, следовательно при включенном девайсе до BIOS не добраться. Ну это мелочи - сделаю парочку копий (программатор и флешки имеются), так что экспериментов можно не бояться.

Заранее всем благодарен за помощь.

Аватар пользователя Santa

Hi!
Надеюсь что VGA.BIN создан по всем правилам и здесь вопросов не возникает.
Насчет сигнагур типа "аллах акбар" не ломайте голову, такое ощущение, что биосописатели накладывают готовый код на текстовый файл и поэтому проскакивают какие-то левые строки.


Сделайте два батника вида:
для разборки/очистки
cbrom149.exe original.bin /vga extract
cbrom149.exe original.bin /group5 extract
cbrom149.exe original.bin /gv3 extract
cbrom149.exe original.bin /vga release
cbrom149.exe original.bin /group5 release
cbrom149.exe original.bin /gv3 release

для сборки
cbrom149.exe original.bin /vga mtg_3148.dat
cbrom149.exe original.bin /group5 m09_3148.bin
cbrom149.exe original.bin /gv3 ppminit.rom

В бат-файле для сборки замените имя vga-биоса на свое и, ессно, он должен лежать в том-же каталоге.
В принципе все.

ЗЫ У меня с cbrom149. Конец микрокодов тоже не отрабатывает, но расбирает/собирает хорошо. Никто не ругается. На будущее - если будете пытать открывать свою прошивку в модбине, то переименуйте ее как-нибудь иначе, иначе все затрется.
Микрокоды можете затереть руками (если хотите, то оставьте один, нужный) до начала decompression bios (6EEC0h)

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Аватар пользователя J`JF

Santa писал(-а):
Надеюсь что VGA.BIN создан по всем правилам и здесь вопросов не возникает.

VGA.BIN создан утилитой производителя (то есть - Intel), по прилагаемым к ней инструкциям. Там и правда вопросов не возникает - BIN просто компилируется из исходников/

Santa писал(-а):
Сделайте два батника

Так и делал. Сперва извлек все, что после VGA ROM, затем удалил GV3, group5 и VGA ROM. Проблема заключается в том, что после добавления VGA.BIN командой
cbrom.exe original.bin /vga VGA.BIN
получаем следующую картину:

D:\Work\Award\CBROM>cbrom.exe original.bin /d
cbrom.exe V1.55 [10/12/05 Release] (C)Phoenix Technologies 2001-2005

              ******** original.bin BIOS component ********

 No. Item-Name         Original-Size   Compressed-Size Original-File-Name
================================================================================
  0. System BIOS       20000h(128.00K)  13A16h(78.52K)  8150P15A.BIN
  1. XGROUP CODE       0CC50h(51.08K)   08902h(34.25K)  awardext.rom
  2. ACPI table        03CDFh(15.22K)   01857h(6.08K)   ACPITBL.BIN
  3. EPA LOGO          0168Ch(5.64K)    0030Dh(0.76K)   AwardBmp.bmp
  4. YGROUP ROM        0C1B0h(48.42K)   04D2Ch(19.29K)  awardeyt.rom
  5. GROUP ROM[ 0]     04720h(17.78K)   02040h(8.06K)   _EN_CODE.BIN
  6. VGA ROM[1]        10000h(64.00K)   0D746h(53.82K)  VGA.BIN
(SP) NCPUCODE          18800h(98.00K)   18800h(98.00K)  NCPUCODE.BIN

  Total compress code space  = 4B000h(300.00K)
  Total compressed code size = 4AB2Eh(298.79K)
  Remain compress code space = 004D2h(1.21K)

                          ** Micro Code Information **
Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID
------------------+--------------------+--------------------+-------------------
SLOT1  01   0692  |  SLOT1  02   0694  |  SLOT1  45   0695  |  SLOT1  07   0695
SLOT1  06   06D0  |  SLOT1  09   06D1  |  SLOT1  10   06D2  |  SLOT1  17   06D6
SLOT1  20   06D8  |  SLOT1  08   06E0  |  SLOT1  0C   06E1  |  PPGA   0C   06E1
SLOT1  26   06E4  |  SLOT1  39   06E8  |  PPGA   53   06EC  |  SLOT1  50   06EC
SLOT1  01   0692  |  SLOT1  02   0694  |  SLOT1  45   0695  |  SLOT1  07   0695
SLOT1  06   06D0  |  SLOT1  09   06D1  |  SLOT1  10   06D2  |       0000     000
0
     0000     0000|       0000     0000|

То есть после добавления VGA ROM свободного места остается всего-то 1,21К при том, что для Group5 и GV3 нужно 5,96К. Именно в этом месте я и останавливаюсь, ибо не представляю себе, где можно выцепить дополнительное место, которого не хватает.

Santa писал(-а):
У меня с cbrom149.

Только что попробовал им всесто 1.55 - эффект тот же, чего и следовало ожидать.

В принципе, если поглядеть на NCPUCODE (я так понимаю, что Micro Code Information как раз и отображает содержимое этой части), то можно увидеть кучу всякой лабуды. Такое ощущение, что это какой-то референсный список всех интеловских камней, которые тут и даром не нужны. Ну на кой черт мне CPUID для процессоров под SLOT1? Может быть, можно как-то покоцать эту часть? Например, оставив там только коды для Pentium M / Celeron M (именно такие процессоры стоят в линейке данных агрегатов).

Santa писал(-а):
Микрокоды можете затереть руками (если хотите, то оставьте один, нужный) до начала decompression bios (6EEC0h)

О-о, вот за этот совет спасибо огромное, попробую. Только есть вопросик один - не указывается ли по какому-то смещению длина NCPUCODE, или же она автоматически высчитывается как разница между смещением начала NCPUCODE и decompression bios?

Аватар пользователя Santa

Давайте сначала разберемся с размерами видеобиос. У Вас и в первом случае и во втором размеры vga одинаковые - по 64 Кб. Куда девается остальное место?

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Аватар пользователя J`JF

Santa писал(-а):
Давайте сначала разберемся с размерами видеобиос. У Вас и в первом случае и во втором размеры vga одинаковые - по 64 Кб. Куда девается остальное место?

Прошу прощения, немного не понял сути вопроса. Что значит - куда девается? Размер несжатого VGA ROM для Intel Embedded Graphic на i855GME должен составлять 64КБ. То есть после того, как в памяти сжатый образ распаковывается, его размер должен составлять именно 64КБ. При интеграции в BIOS файл VGA ROM сжимается по алгоритму LHA. И компрессия для VGA.BIN, собранных (говорю во множественном числе, ибо пробовал много раз) интеловской утилитой, составляет порядка 84%. Вот, собственно, и все.

Аватар пользователя Santa

Упс, sorry, зациклился на второй колонке.
Размер блока микрокодов должен находится где-то рядом с сигнатурой NCPUCODE.

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Аватар пользователя J`JF

Santa писал(-а):
Размер блока микрокодов должен находится где-то рядом с сигнатурой NCPUCODE.

Вот понимаю это спинным мозгом, но найти не могу. CBROM показывает размер 18800h, но я пока не нашел, откуда он его вытащил. Кроме того, мне пока не сиьлно понятно, где же начинается этот блок. Наверное, надо брать бумажку и начинать считать от начала GV3.

И еще - не могу понять, структуру NCPUCODE (если решусь его править). Вроде бы этот блок не сжат, но описания формата я явно не прослеживаю (дилетант), и описания пока не нашел. Если структуры lh5-блоков достаточно хорошо документированы, то с NCPUCODE как-то все не так радостно, несмотря на то, что используется он, как я понимаю, практически повсеместно. Извлекать его придется ручками, какой именно кусок извлекать - пока не понял. На паре буржуйских форумов есть упоминание о том, что кто-то правил этот NCPUCODE.BIN и зашивал его обратно, но без технических подробностей. может быть, здесь кто-то имеет подобный опыт?

Аватар пользователя Santa

У вас микрокоды начинаются с адреса 527Е0h01 00 00 00 01 00 00 00 02 20 20 06 92 06 00 00 где-то тут версия, дата, степпинг процессора - 0692h.
Конец находится по адресу 6AFEFh. Если взять адрес начала строки 6AFE0h то разница как раз 18800h. Чуть ниже, после *ALIN16* стоит именно длина блока 00 88 01.

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Аватар пользователя J`JF

Santa, спасибо за помошь! Все верно, блок там и находится.
Более того, я тут почитал документик один интересный: IA-32 Intel® Architecture Software Developer’s Manual. Volume 3: System Programming Guide. Так вот, в нем в разделе 9.1.11 написано, что размер блока данных микрокода - 2КБ. Действительно, если от смещения 527Е0h отсчитать 800h (2КБ), то попадаем на смещение 52FE0h, в котором описывается следующий микрокод с CPUID=0694h !!! Причем, в этом руководстве дана даже структура этого блока, что существенно облегчает задачу выделения нужных микрокодов. Теперь бы еще табличку соответствий CPUID реальным процессорам вытащить... Или просто глянуть, какой CPUID у моего экземпляра...

Та-а-ак, вот это дело нужно отметить!:)) Пойду хлопну рюмку чая:)) Оказывается, это чертовски увлекательное занятие - ковыряние в BIOS'е:))) Мне уже hiew снился сегодня, а по дороге с обеда поймал себя на том, что я эти чертовы смещения в уме прокручиваю:)

P.S. на стр.413 вышеозначенного руководства указано, что для некоторых типов процессоров необходимо выделять 8 блоков по 2КБ на микрокод, что следует учитывать при правке NCPUCODE.BIN. Кстати, возможно, что именно по этой причине и вылетает CBROM - не умеет подобную ситуацию обрабатывать. Составлю карту этого файлика - проверю предположение.

P.P.S. Выяснил, что блоки по 2 КБ - это прошлый век. Некоторые блоки могут иметь отличную от 800h длину - нужно проверять по смещениям 1Ch-1Fh каждого блока размер контейнера с данными, прибавлять 30h и получать общий размер контейнера, отталкиваясь от которого, находить следующий. Ничего сложного, в принципе, нет. Написать, что ли, утилиту?

Аватар пользователя Santa

Вы их (микрокоды) можете пока удалить как класс. После отладки готового БИОСа сможете вставить их обратно. На функционирование это не влияет.

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Аватар пользователя Compiller

Советую перед засовыванием в BIOS VideoBIOS проверить работает ли он? Как это сделать - найти утилиту RAMBIOS (есть на radeon2.ru и на mvktech.net). Запустить ДОС (7.10 от Windows 98). В нём дать команду rambios.com /i [файл VideoBIOS]. После запустить Windows 98 командой win.com. Если нет 98, есть второй вариант - с программой TweakBios в своё время поставлялся маленький exe int19.exe он делает быстрый перезапуск. То есть к примеру ДОС с дискеты запустили, rambios запустили, int19 в нём и вперёд с винта XP. Проверили - если работает, то тогда

cbrom (можно любой не обязательно самый новый 2,07 вполне корректно засовывает VGA),
cbrom [BIOS mb] /vga vga.rom
cbrom [BIOS mb] /btvga vga.rom
BTVGA - не помню. но на некоторых матерях в bios содержалось много видеобиос, не факт что ваш будет первым.

Добавлено спустя 7 минут 25 секунд:

Без микрокодов должно запуститься - правда при старте напишет типа Unknown CPU. Но это не смертельнолибо можете взять вынуть его командой extract и засунуть командой /cpucode оно их пожмёт и работать всё равно будет.

Дрессируем коров :)

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей