Создание собственного загрузчика
Загрузка операционной системы начинается с того, что BIOS считывает программу начальной загрузки (ПНЗ) с первого сектора накопителя (первые 512 байт накопителя) в оперативную память по адресу 7c00h, записывает номер накопителя в регистр DL и передаёт управление на адрес 0:7c00h.
Это значит, что когда ПНЗ получит управление, состояние регистров будет следующее:
CS = 0, IP = 7c00h, DL - номер накопителя (в соответствии с правилами дискового сервиса BIOS int 13h: 0-7fh - гибкие диски; 80h-0ffh - жёсткие диски и иные накопители).
Программа начальной загрузки пытается загрузить с накопителя операционную систему (ОС) или загрузчик ОС, используя стандартные дисковые сервисы (для всех накопителей) или расширенные дисковые сервисы (для всех накопителей кроме дискет). Если ей это удаётся, то она передаёт управление ОС или загрузчику ОС. Если нет, то возвращает управление в BIOS. Для этого ПНЗ дискет вызывают int 19h или int 18h (предпочтительней), а ПНЗ жёстких дисков и иных накопителей - int 18h.
Последние два байта ПНЗ должны содержать ключ 55h 0aah.
Для получения более полного представления смотрите
BIOS Boot Specification 1.01 Enhanced Disk Drive Specification 1.1, 3.0 Phoenix BIOS User's Manual, Chapter 4: Programmer's Guide ; ; примерная программа начальной загрузки на FASM ; use16 org 7c00h ; регистры ; cs:ip - 0:7c00h ; dl - номер накопителя ; память ; 00000-005FF используется BIOS ( 1536 ) ; 00600-07BFF свободно ( 30208 ) ; 07C00-07DFF программа начальной загрузки ( 512 ) ; 07E00-9FFFF свободно ( 623104 ) ; A0000-FFFFF используется BIOS ( 393216 ) <настраиваем данные (DS, ES ...)> <настраиваем стёк (SS:SP) на свободную память> <загружаем ОС (или загрузчик ОС) в свободную память (int 13h, EDD)> <передаём управление ОС (или загрузчику ОС) jmp, jxx или call> ; ошибка - передаём управление BIOS error: int 18h ; свободное пространство rb 512-($-7c00h)-2 ; ключ программы начальной загрузки db 55h, 0aah ant-str, 06.04.2006
Оставить комментарий
Комментарии
[Ссылка]
О нас
http://www.incatalog.kz
Например, про функции BIOS, которые можно использовать (int 0x13, int 0x10) и т. п.
я уже год как копаюсь, и ничего не могу найти...
dd if=filename of=dev