Эмуляция загрузочной дискеты Bochs (помогите разобраться плз)
Изучаю, как работает компьютер, с этой целью хочу сделать образ загрузочной дискеты (для эмулятора Bochs).
Никакой дискеты, естественно, не существует.
Зато существует файл, созданный в hex редакторе:
Превратить это в img-образ я решил с помощью программы UltraISO следующим образом:
Потом я попробовал сделать так:
В итоге, как и следовало ожидать, bios виртуального компьютера не нашёл загрузочного устройства )
Так же пробовал менять цифры 55h и AAh местами, пытался загрузить исходный не-img файл с тем же результатом.
В википедии написано, что bios проверяет только 55AAh в конце загрузочного сектора, а на остальное содержимое ему плевать (мне, в общем, тоже) ).
Я бы хотел, имея 16-ричное содержимое уже написанной программы, сделать так, чтобы оно каким-либо образом оказалось в загрузочном секторе виртуальной дискеты, но не знаю каким. Не могли бы вы помочь советом?
P.S. В интернете уже искал, честно)
В качестве образа можно взять тот же файл, что использовался для эмуляции винта в примере выше.
Размер файла может быть любой, запустится даже 24-байтный кусочек, если отключить проверку сигнатуры в Boot Options (надо поставить галочку напротив Skip Floppy Boot Signature Check).
Похоже, что выделенные на рисунке красным выпадающие списки можно устанавливать в любые значения, кроме указанных исключений (в случае установки Type of floppy media как none "bios" сообщит, что не обнаружил загрузочного устройства).
Bochs считает образом любой файл, независимо от его расширения и размера. Только надо выбрать All files, при указании пути к образу.
Спасибо всем за советы.
Загрузочный сектор - это первый сектор дискеты. Созданный в hex редактор файл уже является образом дискеты. Этап с UltraISO можно пропустить. Разве что желательно дополнить файл нулями до нужного размера - некоторые эмуляторы не верят, что файл размером в 512 байт может быть образом. И я бы использовал дискету не 360K, а 1.44М - многие компьютеры еще умеют с ними работать.
Вопрос решён, хотя и не тем методом, что я ожидал.
Эмулировать флопи я решил, т.к. думал, что настроить эмуляцию жёсткого диска будет гораздо сложнее, однако это было ошибкой.
Вот как это делается:
- Создаётся файл, содержащий в самом начале код начального загрузчика.
Следующий код является немного модифицированным примером из чудесной статьи "Введение в машинный код", там его можно найти в пункте 1.6:
Получившийся файл должен быть размером в 512 байт (что соответствует сектору жёсткого диска) и заканчиваться на 55AAh (bios загружает только сектор с такой сигнатурой в конце, хотя я не проверял, если чесно, т.к. уже час ночи) ).
Редактировать его можно с помощью встроенного в PSPad hex-редактора: - Теперь запускаем Bochs:
Тут легче показать, чем рассказать:- Говорим воображаемой bios, что загружать надо с винта:
- Теперь настраиваем воображаемый винчестер. Его размер - всего один сектор, что видно из трех полей, выделенных красным и заполненных еденицами.
- Нажав Start, можно наблюдать результат:
- Говорим воображаемой bios, что загружать надо с винта: