はじめての OS

川合秀実さんの「30日でできる! OS 自作入門」をメインの参考書として OS を作ってみることにする。

書籍上のプログラムの著作権は当然、川合さんにあるわけですが、
p.11 に以下の記述があります。

これは教材 OS なのですから、みなさんがそう思ったときに、
自由に使えないと意味がないと筆者は考えました。したがって
自由に使っていただいてかまいません。事前に申告などはしなくていいです。
その OS には結果として筆者作のプログラムが混ざるわけですが、
その OS の著作権表示に筆者を含める必要はありません。

そういうわけで、書籍を元に自分なりに変更したプログラムも、
ブログ上に掲載していこうと思います。(問題あればご指摘ください)

寛大なる川合さんに感謝、です。


さて、FAT12 フォーマットなフロッピーディスクのイメージを作成して、
起動後にメッセージを表示する OS (!) を作成してみます。
利用している言語は NASK。

DB 0xeb, 0x4e, 0x90
DB "HELLOIPL"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "HELLO-OS "
DB "FAT12 "
RESB 18

DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB 0xee, 0xf4, 0xeb, 0xfd

DB 0x0a, 0x0a
Db "Hello, My OS!"
DB 0x0a
DB 0

RESB 0x1fe-$

DB 0x55, 0xaa

DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432

このソースを nask.exe で実行すると、フロッピーのイメージができあがります。
残念ながらフロッピーのある PC は所有していないので、
QEMU で動作確認しています。 

ほぼバイナリ状態のプログラムですが、実行するとこのようになります。

無事に起動してメッセージが表示されました!

なお、NASK の命令の意味は以下の通り。

  • DB (Data Byte) 1byte 直接書く
  • DW (Data Word) 2bytes 直接書く
  • DD (Data Double-word) 4bytes 直接書く
  • RESB (Reserve Byte) 指定したバイト数分、0x00 で埋める