Здравствуйте!
Хочу поколупать bios GF6800, что-то не находится описание структуры начального участка, вернее, есть расхождения в найденных материалах. Ну там 55АА, размер, контр. сумма и т.п. Не понятно, откуда стартовать. Кто знает, направьте по истинному пути.
2-ая по +20h смотришь слово смещения PnP заголовка, по этому смещению д.б. сигнатура $PnP, дальше
[code:1]
DB '$PnP' ;SIGNATURE
DB 01H ;STRUCTURE VERSION
DB 02H ;LENGTH OF HEADER IN PARS
DW 0 ;OFFSET TO NEXT HEADER
DB 0 ;RESERVED
DB 0 ;+CHECKSUM
DW PCI_VID ;DEVICE ID
DW PCI_DID
DW xxx1 ;MANUFACT NAME
DW xxx2 ;PRODUCT NAME
DB 0FFH ;+DEVICE TYPE CODE (BASE)
DB 0 ;+SUBTYPE
DB 0 ;+SUBSUBTYPE
DB 40H ;+DEVICE INDICATORS (SHADOWED+IPL)
DW InitCode ;+BOOT CONNECTION VECTOR
DW 0 ;DISCONNECT VECTOR
DW 0 ;BOOTSTRAP ENTRY POINT
DW 0 ;RESERVED
DW 0 ;RESOURCE INFO VECTOR
[/code:1]
Смотришь смещения
DW InitCode ;+BOOT CONNECTION VECTOR
DW 0 ;BOOTSTRAP ENTRY POINT
Это еще 2 точки входа. Могут быть равны тому, что по +3, BOOTSTRAP ENTRY POINT может не быть.
Конечно
DEVICE TYPE CODE (BASE) и DEVICE INDICATORS будут другими.
По теме - спецификации PCI и PnP BIOS (pci21.pdf и pnpbios.rtf в поиске)
http://riva.ixbt.com/soft/bios/nv15_bios_sources.zip [2.3MB]
А у меня PCIR, и в этих "pci21.pdf и pnpbios.rtf" расхождения, и смещение на PnP заголовок у меня по 18h. Или мелочи, смело шагать? В общем, трудности с определением формата... Кстати, FreeIDA pro может динамически переключаться с 16-и на 32-х разрядный код? Или какой дизассемблер посоветуете?
Ну, по +18h - смещение на PCIR (это PCI-заголовок), верно.
И я 2 раза ступил
1. За 18h идет 1Ah, а не 20h :-))
2. В видеокарточных BIOS вроде как нет PnP-заголовка
Так что стартуй ровненько с +3 от начала.
P.S. Ты исходники-то, что Root дал - скачал? По ним и смотри.
По IDA - вроде нет. Ты, конечно, можешь переделать сегменты в 32 бита, но это равносильно просто перегрузить файл. Другой я не посоветую...
savely_s> Ты исходники-то, что Root дал - скачал?
Скачал, но что это за GeForce 2? Применимо ли к gf6800 nv40? Есть там упоминания про nv10, nv15 etc. Про общие принципы понятно...
savely_s> За 18h идет 1Ah, а не 20h
Хе-хе, опять ошибка, за 18h идет 19h, и лишь потом... :mrgreen:
savely_s> По IDA - вроде нет. Ты, конечно, можешь переделать сегменты в 32 бита, но это равносильно просто перегрузить файл.
А как же живут люди, если в процессе отработки биос-кода проц скачет 16-32 бит и назад?