Я пообещал, что буду делать заметки на полях
по этому проекту.
При попытке запустить ROM BASIC на 386 плате, я понял что сам ROM успешно подхватился, и куда-то случился переход, но всё остальное почему-то не работало.
При этом в qemu с SeaBIOS всё работало отлично. Было понятно, что проблема в инициализации BIOS, передача управлению кода и т.п. Идей, как отладить это на аппаратной платформе у меня не было. Даже подключая логический анализатор, я всё равно не мог добиться выполнения по шагам.
Стало понятно, что надо брать родной BIOS материнской платы. Изначально планировал просто считать биос программатором. Благо, это обычная ПЗУ в DIP.
Материнская плата
Но, потом подумал, что может найду сразу готовый бинарник. И решил погуглить по материнке, и да, он таки есть.
Вот что удалось найти по этой мамке. У меня установлен BIOS AMI, его и буду пробовать.
Сторонний BIOS в qemu завести можно просто, одной командой. Работать он, правда, не будет.
qemu-system-i386 -machine pc -bios SER386AD3.BIN -vga cirrus
Сначала я думал, что делаю что-то не так. Написал вопрос на
stackoverflow,
qna.habr и у
себя в телеге. Самое ироничное, что помогли мне в русском сегменте интернета, а на стеке достаточно грубо ответили и минусов напихали.
В общем, причина сильно хитрее, чем кажется на первый взгляд. Я попробовал BIOS другой материнской платы, и мне даже он вывел что-то на экран, но потом тоже наглухо завис - нужна аппаратная поддержка для запуска BIOS.
qemu позволяет подключаться по gdb к целевой машине, для этого нужно запускать с опциями "-s -S", а после в gdb выполнить команду: "target remote localhost:1234". Достаточно подробно всё разжёвывал на вебинаре,
можете посмотреть запись.
В общем, запуск BIOS скорее всего потребует изменения кода qemu, либо добавления различных хаков в сам код BIOS. Пошагово ходить в 64 кБ ассемблеровского кода - очень сомнительное удовольствие. Но, это крутейший ребус, и каких-то готовых рецептов мне нагуглить не удалось.