OS自作入門進捗 ブートローダでHello World

やったこと

はろ~~~~わ~~~~~るどです 前回紹介したサイトのこちらをやりました。

概要

BIOSの命令セットの中にはint {{address}}というものがあるらしい。
その中のint 0x10命令は各レジスタの値に応じて処理が変わり、AHレジスタが0x0Eの値である場合にALレジスタから1文字拾ってBHレジスタでビデオページ番号を指定し、BLレジスタで指定した文字色で画面に出力するみたいです

今回困ったこと

ほぼ全部写経していたはずなのになぜか表示されないにゃ~~アセンブラわかんねえ~~~と2日ほどなやんでいたんですが、とりあえず困ったらdisasembleだなという気持ちになり

$ sudo dd if=/dev/fd0 bs=512 count=1 | ndisasm -b 16 -o 7C00H - > ~/bootloader.disasm

して、ざっくりと元のアセンブリコードと読み比べていたところ、「アレ?これ元の命令と比較して読んでみると、最初に実行されるべきところにJMPしていないように見えるぞ?」と思い参考サイトの過去のページを見る->アッココカキワスレテル…
修正して成功した感じですね…

スクリーンショット

f:id:MysticDoll:20160826012900p:plain

プログラミングを初めてかれこれ8年近く立ちますが、この歳になって初めてHello Worldでうれしかった気がします。というかHello World自体を真面目にやったのは初めてかもしれない

コンパイルとかの作業

前回の記事でHyper-VでArchlinuxにvfdマウントしてうんたら~みたいなことを書いたのでビルド時の操作とか

  1. $ powershell Set-VMFloppyDiskDrive VMName -Path AbsolutePath/to/vfd
  2. $ ssh -t user@host "sudo mount //HostOSIPAddress/sharedirectory /target && cd target && nasm -o bootloader.img source && sudo mkdosfs /dev/fd0 && sudo dd if=/target/bootloader.img bs=512 count=1 of=/dev/fd0"
  3. $ powershell Set-VMFloppyDiskDrive VMName -Path $null
  4. VFDが取り出されるのを待つ(同じVFDファイルを複数のVMにマウントできない)
  5. VFDをマウントして検証用のHyper-Vマシンを起動

みたいな流れになりました

以上です