Интересное, но довольно сложное упражнение!
BIOS будет извлекать определенную зону из загрузочного устройства, которая называется основной загрузочной записью. В «нормальной» ситуации с ОС и одним или несколькими разделами MBR необходимо выяснить, где найти ОС, загрузить ее в память и передать управление ей. В это время начинается обычная последовательность загрузки, и несколько позже ОС будет работать и сможет взаимодействовать с вами. Более подробную информацию о начальных мероприятиях можно найти здесь
Теперь, в образовательных целях, это не является строго необходимым. Вы могли бы написать MBR, который просто читает в фиксированной части диска (в BIOS есть функции, которые позволяют считывать сырые сектора с диска, диск можно рассматривать как просто набор секторов, каждый из которых содержит 512 байтов информации) и запускает этот код. Вы можете найти MBR * 1007 с открытым исходным кодом здесь и в основном в любой ОС с открытым исходным кодом.
Это была "легкая" часть, потому что теперь вы, вероятно, хотите сделать что-то интересное. Если вы не хотите взаимодействовать с каждой частью оборудования самостоятельно, вам придется полагаться на сервисы, предоставляемые BIOS, для взаимодействия с клавиатурой, экраном и диском. Традиционно лучшим источником информации об услугах BIOS является список прерываний Ральфа Брауна .
Одно конкретное соображение: ваш компилятор C поставляется со стандартной библиотекой, и эта библиотека будет нуждаться в конкретной ОС для многих своих операций (например, для выполнения вывода на экран она будет запрашивать операционную систему, чтобы выполнить этот вывод, и ОС обычно использует BIOS или некоторый прямой доступ к оборудованию для выполнения этой задачи). Поэтому, следуя описанному выше маршруту, вам также нужно будет найти способ заменить эти службы теми, которые используют BIOS, и ничего более - т.е. более или менее переписать стандартную библиотеку.
Короче говоря, чтобы прийти к чему-то полезному, вы будете писать основные части операционной системы ...