Запуск чужеродного BIOS в qemu
Feb. 17th, 2023 12:41 pmЯ пообещал, что буду делать заметки на полях по этому проекту.
При попытке запустить ROM BASIC на 386 плате, я понял что сам ROM успешно подхватился, и куда-то случился переход, но всё остальное почему-то не работало.
При этом в qemu с SeaBIOS всё работало отлично. Было понятно, что проблема в инициализации BIOS, передача управлению кода и т.п. Идей, как отладить это на аппаратной платформе у меня не было. Даже подключая логический анализатор, я всё равно не мог добиться выполнения по шагам.
Стало понятно, что надо брать родной BIOS материнской платы. Изначально планировал просто считать биос программатором. Благо, это обычная ПЗУ в DIP.

Материнская плата
Но, потом подумал, что может найду сразу готовый бинарник. И решил погуглить по материнке, и да, он таки есть. Вот что удалось найти по этой мамке. У меня установлен BIOS AMI, его и буду пробовать.
Сторонний BIOS в qemu завести можно просто, одной командой. Работать он, правда, не будет.

Сначала я думал, что делаю что-то не так. Написал вопрос на stackoverflow, qna.habr и у себя в телеге. Самое ироничное, что помогли мне в русском сегменте интернета, а на стеке достаточно грубо ответили и минусов напихали.
В общем, причина сильно хитрее, чем кажется на первый взгляд. Я попробовал BIOS другой материнской платы, и мне даже он вывел что-то на экран, но потом тоже наглухо завис - нужна аппаратная поддержка для запуска BIOS.

qemu позволяет подключаться по gdb к целевой машине, для этого нужно запускать с опциями "-s -S", а после в gdb выполнить команду: "target remote localhost:1234". Достаточно подробно всё разжёвывал на вебинаре, можете посмотреть запись.

В общем, запуск BIOS скорее всего потребует изменения кода qemu, либо добавления различных хаков в сам код BIOS. Пошагово ходить в 64 кБ ассемблеровского кода - очень сомнительное удовольствие. Но, это крутейший ребус, и каких-то готовых рецептов мне нагуглить не удалось.
При попытке запустить 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 кБ ассемблеровского кода - очень сомнительное удовольствие. Но, это крутейший ребус, и каких-то готовых рецептов мне нагуглить не удалось.
no subject
Date: 2023-02-17 12:45 pm (UTC)С биосом вообще не всё просто: он порой завязан на аппаратные особенности материнской платы. Хотя, не спорю, много и общих вещей.
no subject
Date: 2023-02-17 03:11 pm (UTC)Как вчера))))
no subject
Date: 2023-02-22 12:00 pm (UTC)Я подозреваю, что для этой материнки/биоса стоило выбрать isapc в ключе -machine у qemu
no subject
Date: 2023-02-22 02:40 pm (UTC)no subject
Date: 2023-02-22 03:53 pm (UTC)Уже попробовал — и так, и с лимитом по процессору и с указанием -vga std (там пожаловалось на vga bios)