Автор: Unknown BIOS (не проверено) , 8 января 2009
Вроде хорошо, а найти не могу. Вобщемто я и вычленить сам NCPUCODE.bin не могу :( (cbrom32 v1.82), но с этим ладно - я вродебы нашел как ручками вырезать (нужный кусок нашел), но вот чем (или как) его смотреть?
Вобщем нужно вырезать оттуда несколько "лишних" процев, (с целью уменьшения обьема модуля)... по НЕХ коду так и не понял где чей микрокод (блоки 2кб вижу, а где какой чей не пойму). На какие байты смотреть?
ЗЫ если чтото не то ляпнул, не сердитесь - я ламер, БИОСы еще не ковырял, только учусь :roll:
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

maco

17 лет 1 месяц назад

Рекомендуется к прочтению IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide, там структура блока микрокодов достаточно понятно расписана.

RomanLV

17 лет 1 месяц назад

ОК, спасибо. Разбираться дальше правда стало лень, вырезал наугад половину кодов - работает (с моим процем по краенй мере, без ругани). Но информация пригодится на абудущее - сейчас время и вдохновение кончилось :(
PS если кому нужен БИОС для ABIT IP35-E "512k эдишин" - обращайтесь ;)
Сильно не пинайте, написал тут неболшую программку по поводу микрокодов _http://mehfk.narod.ru/cpucode/cpucode.html.
ncpucode извлекал руками, благо, они в сыром виде легко находятся.

Bobr

17 лет назад

marinovsoft
по вашей ссылке не открывает http://mehk.narod.ru/cpucode/cpu_codev2.rar
Ссори, ошибка на странице была.
вот правильная ссылка mehfk.narod.ru/cpucode/cpu_codev2.rar
Bobr, +1
marinovsoft,
Все микрокоды имеют размер 2048 байт, из которых 48 байт представляют заголовок файла, а оставшиеся 2000 байт – непосредственно обновляемый микрокод.

Это не верно! Из IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide раздел 9.11 MICROCODE UPDATE FACILITIES:
поле DataSize -
Specifies the size of the encrypted data in bytes, and must be a multiple of DWORDs. If this value is 00000000H, then the microcode update encrypted data is 2000 bytes (or 500 DWORDs).

На практике следующее, если DataSize = 0, то размер блока с микрокодом 2000 bytes, в противном случае = DataSize.
А ещё интересный момент заключается в том, что за блоком микрокода встречаются нули, о чем свидетельствует разница TotalSize - DataSize (обычно 400h, в моём случае ещё 8 нулей в конце модуля).
Кстати у меня AMI BIOS от P5Q3.

Модуль этот для AMI можно получить при помощи MMTool, ID = 11 - P6 Micro Code.
Мой скрипт для IDA, для структурирования:
#include <idc.idc> /* Анализ 11 модуля Microcode Update */ static main(void) { auto index, lSegEnd, idStruct, offDataSize, offTotalSize, DataSize, TotalSize, USize; lSegEnd = SegEnd(100) - 1; MakeUnknown(0, lSegEnd, 0); MakeUnknown(0, lSegEnd, 1); MakeUnknown(0, lSegEnd, 2); index = 0; CheckStructure(); idStruct = GetStrucIdByName("microcodeHeader"); offDataSize = GetMemberOffset(idStruct, "DataSize"); offTotalSize = GetMemberOffset(idStruct, "TotalSize"); while(index < lSegEnd) { if (Dword(index) == 0) { MakeArray(index, 1024); index = index + 1024; } MakeStructEx(index, -1, "microcodeHeader"); DataSize = long(Dword(index + offDataSize)); TotalSize = long(Dword(index + offTotalSize)); Message("> index=0x%04X | DSize=%d | TSize=%d | \n", index, DataSize, TotalSize); MakeQword(index + 48); if (DataSize == 0) DataSize = 2000; MakeArray(index + 48, DataSize / 8); index = ItemEnd(index + 48); } return; } //Добавляем структуру для дальнейшего использования static CheckStructure() { if (GetStrucIdByName("microcodeHeader") == BADADDR) { auto sMicrocodeHeader; AddStrucEx(BADADDR, "microcodeHeader", 0); //BADADDR = -1 добавить структуру в конец списка структур. sMicrocodeHeader = GetStrucIdByName("microcodeHeader"); AddStrucMember(sMicrocodeHeader, "HeaderVer", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "UpdRev", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "Date", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "ProcSign", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "CRC", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "LoaderRev", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "ProcFlags", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "DataSize", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "TotalSize", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "Reserved0", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "Reserved1", -1, FF_DWRD, -1, 4); AddStrucMember(sMicrocodeHeader, "Reserved2", -1, FF_DWRD, -1, 4); } }
Если есть замечания с удовольствием выслушаю.
binaryshadow, я понимаю что не читать статьи до конца это круто. Но уж исходники то можно было посмотреть... А вы статейку дочитайте уж до конца, сделайте милость.
Type cpucode = record formatver1 : dword; { Номер версии формата 1 } cpuid1 : byte; cpuid2 : byte; cpuid3 : byte; cpuid4 : byte; year : word; { Год в формaте BCD } day : byte; { День в формaте BCD } Month : byte; { Месяц в формате BCD } _cpuid : word; { CPUID процессора } reserved1 : word; { Не используется - заполнено нулями } _crc : dword; { Возможно контрольная сумма } formatver2 : dword; { Номер версии формата 2 } pkg : dword; { PKG (Package) процессора } fsize2 : dword; { Размер микрокода без заголовка } { если равно нулю, то fsize=2000 } reserved3 : array[1..16] of byte; { Не используется - заполнено нулями } { в "новом" формате используется, } { формат не ясен } microcode : array[$31..$400] of byte; end; { Блоки кратны 1024 байт(ам) }
marinovsoft, прошу прощения, не внятно читал. =)
Да, что там, у самого бывает.