Есть свой собственный загрузчик, но он почему-то не работает на материнской плате с UEFI (Intel DH77EB), MBR не выдаёт никаких сообщений, на материнских платах с обычным BIOS всё нормально. MBR записываю на флешку, UEFI Boot выключен.
Код начала загрузчика (BOOTSTACK=0xFFF0, BOOTSEG=0x1000):
.set SIGNATURE,0xaa55
.set LOAD,0x7c00 # Load address
.code16
.text
.globl start # Entry point
start:
jmp main
.= start +3
oem :.ascii "oc2k 210"
secsiz :.word 0
clsiz :.byte 0
ressecs :.word 0
fatcnt :.byte 0
rootsiz :.word 0
totsec :.word 0
media :.byte 0
fatsiz :.word 0
trksecs :.word 0
headcnt :.byte 0 #?????????????????
hidnsec :.word 0
# нестандартные расширения
.= start +52
fsec: .word 0 # первый сектор 52
.word 0 #
spc : .word 0 # spt*headcnt 56
.word 0 #
spt : .word 0 # 60
.word 0 #
fsec0: .word 0 # первый сектор 64
.word 0 #
drive: .byte 0 # номер диска например 0x80 68
head: .byte 0 # 69
cyl : .word 0 # 70
nsec: .word 0 # 72
.word 0 # 74
startmsg:.ascii "Start \0" # 80
okmsg:.ascii "Ok \r\n\0" #
main:
movw $BOOTSEG, %ax # ax=0x1000
movw %ax, %es # es=ax=0x1000 set up %es, (where we will load boot2 to)
movw %ax, %ss # ss=0x1000
movw $BOOTSTACK-64, %sp # sp=0xfff0-64
movw $(LOAD/16),%ax
movw %ax,%ds # data ds=0x7c0
movw $startmsg, %si
call message
На материнской плате с UEFI сообщение не выводится.
Или, вот, для примера, MBR, который выводит «Hello World», записываю его на флешку напрямую командой dd, на материнской плате с BIOS работает, а с UEFI — нет.
В чём отличия между настоящим BIOS и эмуляцией BIOS в UEFI?