Образ распаковываю через Intel Flash Image Tool, заменяю bios region на свой бинарник, зашиваю программатором. При старте код POST 0xFF, такой-же как при отсутствии микросхемы биоса, и тишина, ничего не работает. Для диагностики использую Asus G.P. Diagnostics Card шедшую в комплекте с матерью, а также вывод символов в COM порт.
Код моего бутблока:
use16
macro INIT_COM_PORT
{
mov al, 0x80
mov dx, 0x3f8 + 3
out dx, al ; LCR.DLAB = 1
;
xor al, al
mov dx, 0x3f8 + 0
out dx, al ; DivisorLow = 0
mov dx, 0x3f8 + 1
out dx, al ; DivisorHigh = 0, speed = 115200
;
mov dx, 0x3f8 + 3
mov al, 0x03
out dx, al ; LCR.DLAB = 0, 8 bits, no parity, one stop bit
;
mov dx, 0x3f8 + 1
xor al, al
out dx, al ; IER = 0, disable all interrupts
;
mov dx, 0x3f8 + 2
mov al, 0xC7
out dx, al ; Enable FIFO, clear them, with 14-byte threshold
;
mov dx, 0x3f8 + 4
mov al, 0x03
out dx, al ; Enable RTS and DTR
}
macro OUT_CHAR chr
{
; load output char to cl
mov cl, chr
; wait for buffer ready
@@:
mov dx, 0x3f8 + 5
in al, dx
test al, 0x20
jz @B
; out char
mov dx, 0x3f8 + 0
mov al, cl
out dx, al
}
start_of_boot_block:
fninit
cli
mov ax, 0F000h
mov ds, ax
INIT_COM_PORT
OUT_CHAR 'F'
OUT_CHAR 'U'
OUT_CHAR 'C'
OUT_CHAR 'K'
OUT_CHAR '!'
OUT_CHAR 13
OUT_CHAR 10
hlt
; 0xFFFFFFF0 here
mov al, 0x12
out 0x80, al
jmp start_of_boot_block
db 0, 0, 0, 0, 0, 0, 0
DB 0xF0, 0xFF
В оригинальном BIOS Region код бутблока начинается по такому-же оффсету с конца, как и у меня. Последние два байта 0xF0, 0xFF перенесены на всякий случай. Но не работает. Тот-же самый код, запущенный на PEI стадии, работает. Есть идеи в чем причина?
Я смотрел reset vector из проекта coreboot, там вывод пост кодов идет в самом начале, еще до всякой инициализации. У меня же горит FF.
Вообще-то POST-карта Ваша - вещь в себе. Никто не гарантирует, что она на 80h, да и вообще на PCI-шине.