Вроде хорошо, а найти не могу. Вобщемто я и вычленить сам NCPUCODE.bin не могу :( (cbrom32 v1.82), но с этим ладно - я вродебы нашел как ручками вырезать (нужный кусок нашел), но вот чем (или как) его смотреть?
Вобщем нужно вырезать оттуда несколько "лишних" процев, (с целью уменьшения обьема модуля)... по НЕХ коду так и не понял где чей микрокод (блоки 2кб вижу, а где какой чей не пойму). На какие байты смотреть?
ЗЫ если чтото не то ляпнул, не сердитесь - я ламер, БИОСы еще не ковырял, только учусь :roll:
PS если кому нужен БИОС для ABIT IP35-E "512k эдишин" - обращайтесь ;)
ncpucode извлекал руками, благо, они в сыром виде легко находятся.
по вашей ссылке не открывает http://mehk.narod.ru/cpucode/cpu_codev2.rar
вот правильная ссылка mehfk.narod.ru/cpucode/cpu_codev2.rar
Bobr, +1
Это не верно! Из IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide раздел 9.11 MICROCODE UPDATE FACILITIES:
поле DataSize -
На практике следующее, если 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); } }Если есть замечания с удовольствием выслушаю.
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 байт(ам) }