はじめに
この記事はOS自作入門を使って勉強したことを書くものである。本書では著者自作のソフトや様々なツール類がついているが、そのままやってはブラックボックスだらけで面白くない。そこでなるべく付属のツールを使わずに進めていこうと思う。手元にLinuxのGUI環境がないので以下の環境でやることにした。
環境:
- WSL Ubuntu 18.04 (OS開発)
- Windows 10 (エミュレータのみ)
とりあえず起動してみる(01_day/helloos0)
この本はPCでOSを起動するのにフロッピーディスクを使っているので自分の環境でエミュレータを使うなりUSBブートするなりしてOSが起動できることを確認しておかないと、デバッグもできないのでまずは起動させたい。
QEMUで起動する(とりあえず著者作ツール群で)
QEMUは著者推奨のエミュレータで本書のサポートページからダウンロードしてきたファイルに必要なものが全て入っているので簡単である。本書ではバイナリデータを手入力すると書いてあるが流石に時間がないのでパスさせていただく。
https://book.mynavi.jp/supportsite/detail/4839919844.html
こちらのページからzipがダウンロードできるので落とす。.imgが入っているのでマウントして、中身を取り出しておく。
本に従い、tolset
フォルダ内にhelloos0
フォルダをコピーする。※以降この操作は省略する。HariboteOS\projects\01_day\helloos0\!cons_nt.bat
をクリックしてターミナルを起動。run
を実行するとQEMUが立ち上がり、OSが起動する。
Virtual Boxで起動する
QEMUは列記としたプロセッサエミュレータであるが、普段全く使わないのであっさりしすぎていて、本当にこのimgはOSなのだろうかと錯覚するかもしれない。そこでUbuntuやWindowsも起動できるVirtualBoxで起動できれば、OSを作っている感(まだ何も作っていないが・・・)が湧くだろうと思いVirtualBoxで起動してみた。











アセンブリからアセンブルする(01_day/helloos2)
使用ツール:
アセンブリコードはhelloos.nas
。
命令 | |
---|---|
DB | ファイルのデータを1byte書く |
RESB | 0x00 で埋める |
ここで、本物のnasmを使うに当たり注意点がある。付属のファイルをそのままnasmに突っ込むとエラーになる。
1 | $ nasm helloos.nas -o helloos.img |
nasmのドキュメントを漁るとこう書いてある。
NASM supports two special tokens in expressions, allowing calculations to involve the current assembly position: the
$
and$$
tokens.$
evaluates to the assembly position at the beginning of the line containing the expression; so you can code an infinite loop using JMP$
.$$
evaluates to the beginning of the current section; so you can tell how far into the section you are by using ($-$$
).
https://nasm.us/doc/nasmdoc3.html#section-3.5
つまり、こういうことだ。
$
= 式を含む行の先頭のアセンブリ位置$$
= 現在のセクションの先頭
また、最終文に、セクションのどこまで進んでいるのかを知るには$-$$
を使えと書いてあるので、helloos.nas
の41行目を
1 | ; RESB 0x1fe-$ |
に書き換える。
1 | $ nasm helloos.nas -o helloos.img |
warningなのでとりあえず無視すると、helloos.img
が作成できた。
qemuで起動する。
1 | PS> qemu-system-x86_64 .\helloos.img |

別の文字を表示してみる(01_day/helloos2)
37行目を編集
1 | DB "SHOSATO.JP" |

おわりに
これでhariboteOSがとても小さいながらも確かにOSであるというように思えることができ、モチベーションが上がった。