Bochsを8086エミュレーターとして使用したいと思います。これを行う簡単な方法はありますか?私が欲しいのはemu8086(http://www.emu8086.com/)のようなものです。
3 に答える
sudo apt-get install bochs bochs-sdl
printf 'ata0-master: type=disk, path="main.img", mode=flat, cylinders=1, heads=1, spt=1
boot: disk
display_library: sdl
megs: 128
' > .bochsrc
bochs -q
Ubuntu 14.04、Bochs 2.4.6 で 512 バイト長のブート セクターで動作しmain.img
ました。
cylinders=1, heads=1, spt=1
ディスクサイズを指定し、イメージと一致する必要があります! ここでは1
、1 シリンダーを意味するようにすべてを設定します。これは、イメージ ファイルのように 512 バイトです。display_library: sdl
Ubuntu のパッケージングのバグが原因で必要になる場合があります
main.img
main.asmから生成されました:
org 0x7c00
bits 16
cli
mov ax, 0x0E61
int 0x10
hlt
times 510 - ($-$$) db 0
dw 0xaa55
それで:
nasm -f bin -o main.img main.asm
このイメージは、BIOS を使用して 1 文字a
を画面に出力します。
.bochsrc
次のコマンド ラインを使用して、ファイルの作成を回避することができます。
bochs \
-qf /dev/null \
'ata0-master: type=disk, path="main.img", mode=flat, cylinders=1, heads=1, spt=1' \
'boot: disk' \
'display_library: sdl' \
'megs: 128'
その-qf /dev/null
部分は醜いですが、メニュー画面を自動的にスキップすることができた唯一の方法です:
-q
または-n
常にそれを要求し、6
後で実行するにはヒットする必要があります-qn <(echo ...)
も機能しましたが、Makefile で失敗する Bash 拡張機能を使用しています
QEMU のインターフェースの方が使い始めやすかったので、代わりに使用することをお勧めします。
この例を含む GitHub リポジトリ: https://github.com/cirosantilli/x86-bare-metal-examples/blob/cba0757990843f412b14dffad45467ad0034d286/Makefile#L33
それはあなたが本当にやりたいことではありません。(まあ、そうかもしれませんが…)
基本的に、Bochs は x86 PC エミュレーターです。その上でマシンコードを実行するには、マシンコードを「ディスク」イメージに取得する必要があります。ディスク イメージは、ディスク (フロッピーまたはハード ドライブ) のような構造を持つファイルです。
PC には、ディスクのセクションを調べ、そこにマシン コードをロードして実行する特定のブート シーケンスがあります。こんな感じでOSが立ち上がります。
「hello world」をアセンブリで実行するには、率直に言って、OS を実行する OS がないため、BIOS 以外は何もないため、少し複雑になります。
したがって、これを追求したい場合は、趣味のオペレーティング システムに関する書籍やサイトを探し出し、ブートストラップ プロセスの仕組みなどを学びたいと思うでしょう。それ以外の場合は、DOS システムのようなもので作業し、COM ファイルを作成して、そこの。