Вообщем написал я простенький MBR(немногим лучше MS-DOSовского).
Скопировал первый гигабайт своего диска:
dd if=/dev/sda of=disk.img bp=256M count=4
Установил свой MBR:
dd if=boot.bin of=disk.img bs=446 count=1 conv=notrunc
Запустил qemu:
qemu -hda disk.img
Выводит строку
GRUB _
_ -- курсор
Видимо какие-то проблемы с stage 1.5, но вообщем работает. Теперь решил посмотреть на настоящие MBR:
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/boot/i386/boot0/boot0.S?rev=1.16
В загрузчике FreeBSD номер диска получается таким образом:
testb $0x20,_FLAGS(%bp) # Set drive number?
jnz main.1 # Yes
testb %dl,%dl # Drive number valid?
js main.2 # Possibly (0x80 set)
/*
* Only update the boot-sector when there is a valid drive number or
* the drive number is set manually.
*/
orb $0x40,_FLAGS(%bp) # Disable updates
main.1: movb _SETDRV(%bp),%dl # Drive number to use
/*
* Whatever we decided to use, now store it into the fake
* partition entry that lives in the data space above us.
*/
main.2: movb %dl,_FAKE(%bp) # Save drive number
callw putn # To new line
pushw %dx # Save drive number
То есть проверяется, указан ли номер диска явно(для опций ближе к концу место выделено) и если это не так, то используется значение из dl. До этого dl нигде не меняется. То есть как я понял, устанавливается BIOSом. Так ли это или я ошибаюсь?
Ну и второй вопрос: где можно взять нормальную документацию по загрузке на x86 и вообще BIOSу? Хотя бы что в каких регистрах находится после загрузки и какие флаги установлены, включены ли прерывания, какой режим и т.п.
Ответ на:
комментарий
от rei3er
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум загрузчики (2016)
- Форум загрузчик (2013)
- Форум загрузчик (2005)
- Форум Загрузчики (2005)
- Форум Загрузчик (2005)
- Форум Загрузчик. (2004)
- Форум Продолжения.. -_^ (2012)
- Форум Продолжение (2008)
- Форум Продолжение... (2005)
- Форум загрузчик убунту (2010)