http://community.osdev.info/?(AT)BIOS
が紹介されているが、SPAM業者?か何かに書き換えられているようで、
変なリンクがたくさん表示されおり、肝心の情報は何もない。
うーむ。どこを見れば良いかな?
探してみた。
このページが良いかな?
Interrupt Jump Table
知りたい割り込み番号をクリックすると詳細を表示できる。
例えば、今回、使っている int $0x10 は、
http://www.ctyme.com/intr/int-10.htm
であり、AX=$0x0Eについては、
http://www.ctyme.com/intr/rb-0106.htm
が、詳細情報である。
書籍と同様に、開発しやすくなるように、Makefileを作ることにしよう。
疑問点が一つある。
ブートセクタ以降に、以下のコードを書いていたが、これは何だろう。
以下のように編集して、ブートセクタ以降を全て0x00にしたイメージを使い、qemuで動作確認してみたが、問題なく動いた。
.org 0x1FE .byte 0x55, 0xAA # 55AAでブートセクタ // ブートセクタ以降 // .byte 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .space 4600 // .byte 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .space 1469432とりあえず気にせずに、このまま進めよう。
作成したMakefileは以下の通り。
image_file=helloos.img ipl.bin: ipl.s lnk.ls gcc -nostdlib -o $@ -Tlnk.ls ipl.s gcc -Tlnk.ls -c -g -Wa,-a,-ad ipl.s > ipl.lst zero.img: # 1474560 - 512 = 1474048 dd if=/dev/zero of=zero.img ibs=512 count=2879 image_file: ipl.bin zero.img cat ipl.bin zero.img > ${image_file} img: make image_file run: qemu-system-i386 -m 32 -localtime -vga std -fda ${image_file}
リスティングファイル(アセンブル結果)を出力するには、gccの-Wa,-aオプションを渡して、asコマンドのリスティング出力を有効にする。
書籍では、独自コマンドを使って、イメージを作成していたが、
catコマンドで
(1)gccで作成した512バイトのブートセクタイメージ
(2)1.44Mバイト-512バイト(ブートセクタ分)のサイズを0で埋めたファイル
を連結して作成している。
これで、次のターゲットを利用できるようになった。
イメージファイルを作成する。
$ make img
作成したイメージをqemuを起動する。
$ make run
0 件のコメント:
コメントを投稿