Я работаю над написанием собственной операционной системы. Пока что мой код превышает 512 байт, что слишком велико для простого загрузочного сектора.
Я понимаю, что теперь мне нужно написать загрузчик, который читает произвольный код, который может быть больше, а может и больше, чем один 512-байтовый сектор.
Загрузчик должен:
- Функция как загрузочная запись с подписью диска 0xaa55.
- Считайте второй этап (тестовый код), начиная с LBA 1 (LBA 0 - загрузочный сектор) произвольной длины, начиная с адреса памяти 0x7E00.
- Передайте ему управление с помощью FAR JMP на 0x0000: 0x7E00.
- Можно использовать как образ дискеты 1,44 МБ для использования в эмуляторах, таких как QEMU, BOCHS, VirtualBox и т.д.
- Может передаваться и использоваться на USB-накопителе для тестирования на реальном оборудовании с BIOS, настроенным на загрузку USB с помощью эмуляции дисковода гибких дисков (FDD). Примечание: некоторые загрузчики не работают должным образом, когда размещены на USB-накопителях.
- Передайте загрузочный диск на второй этап в DL.
- Обнулить все регистры сегментов и установить SS: SP равным 0x0000: 0x7C00 (растет из-под загрузчика).
Это также послужит хорошей отправной точкой для вопросов о переполнении стека, связанных с разработкой ОС. Программисты часто пытаются создать минимальный, полный и проверяемый пример. Общий шаблон/шаблон позволил бы другим пользователям Stack Overflow, желающим помочь протестировать код с ограниченным количеством суеты.
Как бы я пошел о создании такого многоразового загрузчика?