OSを作ろう

まず初めにOSを作る手順を紹介しよう。基本的にコードを書く→コンパイル→確認という手順になる。これはアプリケーションプログラムを作成する手順と同じである。なのでここではツールの使い方について簡単に説明する。

OS作成に必要なツールを揃えよう

私はdebian lennyを使用しているので下記の用にしてツールが揃う。簡単だね。

$sudo apt-get install gcc yasm qemu mtools

コードを書いてみる

OSを書くにはアセンブラを使う。もちろんC言語も使えるが、かくかくじかじかで初期のコードはアセンブラで書く必要がある。
これは画面に「A」を表示する小さなプログラムである。
「a.s」とでもファイルに名前をつけて保存しよう。コードの詳細は次回説明する。

[BITS 16]
	jmp	0x07C0:setup
	
; FDのための記述
name:		DB	"Name    "
sector_size:	DW	512
cluster_size:	DB	1
fat_pos:	DW	1
fat_cnt:	DB	2
root_size:	DW	224
sector_cnt:	DW	2880
media_type:	DB	0xf0
fat_size:	DW	9
sector_cnt_pt:	DW	18
head_cnt:	DW	2
bpb_pos:	DD	0
sector_cnt_l:	DD	2880
drive_no:	DB	0x00
reserved:	DB	0x00
ext_boot_code:	DB	0x29
volume_serial:	DD	0xffffffff
disk_name:	DB	"DISK       "
fat_name:	DB	"FAT12   "
		times	18 db 0
		
setup:
        mov	ax, cs
        mov	ds, ax
clean:
	mov	ah, 0		;setup video mode
	mov	al, 0x10	;video mode. 0x10=80x25 with 16 colors
	int	0x10
putchar:
	mov	ah, 0x0E	;put char
	mov	al, 'A'		
	mov	bh, 0
	mov	bl, 0x0E	;text color. 0x0E = Yellow 
	int	0x10
end:
	jmp	end
bootsign:
	times	510-($-$$) db 0
	dw	0xaa55

アセンブル

アセンブラコンパイルすることをアセンブルと言うらしい。
私はyasmを使ってアセンブルしてみることにした。詳しくはyasmのマニュアルを見るといいでしょう。

$yasm -f bin a.s -o a.bin

出来上がったプログラムをFDに書き込もう

うんフロッピーディスクなんだ。FDはショボいが仕組みが簡単で理解しやすいらしくOSの自作ではFDから始めるのが流行りらしい。なのでFDを採用しよう。
ここでFDを持っていないという問題が発生するかもしれないが、mformatとqemuという仮想化の技術を使うので心配ない、つまり最寄りの電気屋までFDを買いに行く必要はない。
こうすればFDイメージファイルが作成されa.binを書き込んでくれる

$mformat -f 1440  -C -B a.bin -i fd.img ::

実効してみよう

qemuを実行するとウィンドウが現れそのなかで仮想PCが動作する。

$qemu -fda fd.img -boot a

文字がちゃんと表示されたかな

成功すれば。こんな感じになるよ