macOS で試す OS自作入門(2日目)

OS自作入門

macOS で試す OS自作入門の続きです。

macOS Monterey(Apple Silicon)で動作確認済み。

前回: macOS で試す OS自作入門(1日目その2)
https://nomad.office-aship.info/macos-os1-2

30日でできる! OS自作入門

下記記事を参考にしています。

『30日でできる!OS自作入門』を macOS Catalina で実行する
https://qiita.com/noanoa07/items/8828c37c2e286522c7ee

今回も、アセンブラを使っていきます。

ipl.nas

; hello-os
; TAB=4

		ORG		0x7c00			; このプログラムがどこに読み込まれるのか

; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述

		JMP		entry
		DB		0x90
		DB		"HELLOIPL"		; ブートセクタの名前を自由に書いてよい(8バイト)
		DW		512				; 1セクタの大きさ(512にしなければいけない)
		DB		1				; クラスタの大きさ(1セクタにしなければいけない)
		DW		1				; FATがどこから始まるか(普通は1セクタ目からにする)
		DB		2				; FATの個数(2にしなければいけない)
		DW		224				; ルートディレクトリ領域の大きさ(普通は224エントリにする)
		DW		2880			; このドライブの大きさ(2880セクタにしなければいけない)
		DB		0xf0			; メディアのタイプ(0xf0にしなければいけない)
		DW		9				; FAT領域の長さ(9セクタにしなければいけない)
		DW		18				; 1トラックにいくつのセクタがあるか(18にしなければいけない)
		DW		2				; ヘッドの数(2にしなければいけない)
		DD		0				; パーティションを使ってないのでここは必ず0
		DD		2880			; このドライブ大きさをもう一度書く
		DB		0,0,0x29		; よくわからないけどこの値にしておくといいらしい
		DD		0xffffffff		; たぶんボリュームシリアル番号
		DB		"HELLO-OS   "	; ディスクの名前(11バイト)
		DB		"FAT12   "		; フォーマットの名前(8バイト)
		;RESB	18				; とりあえず18バイトあけておく
		TIMES	18 DB 0		; NASMでは警告が出るので修正

; プログラム本体

entry:
		MOV		AX,0			; レジスタ初期化
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX
		MOV		ES,AX

		MOV		SI,msg
putloop:
		MOV		AL,[SI]
		ADD		SI,1			; SIに1を足す
		CMP		AL,0
		JE		fin
		MOV		AH,0x0e			; 一文字表示ファンクション
		MOV		BX,15			; カラーコード
		INT		0x10			; ビデオBIOS呼び出し
		JMP		putloop
fin:
		HLT						; 何かあるまでCPUを停止させる
		JMP		fin				; 無限ループ

msg:
		DB		0x0a, 0x0a		; 改行を2つ
		DB		"hello, world"
		DB		0x0a			; 改行
		DB		0

		;RESB	0x7dfe-$		; 0x7dfeまでを0x00で埋める命令
		TIMES	0x1fe-($-$) DB 0	;NASM用に修正 $から$-$に、RESBからTIMES DB0へ

		DB		0x55, 0xaa

著者作成の edimg.exeの代わりに、
ディスクイメージの作成に Mtoolsの mformat を使います。

インストール

% brew install mtools

バージョン確認

% mtools --version
mtools (GNU mtools) 4.0.35

コンパイル(ipl.nas から ipl.bin と ipl.lis を生成)

% nasm ipl.nas -o ipl.bin -l ipl.lst

ディスクイメージ(ipl.bin) から helloos.img を作る

% mformat -f 1440 -C -B ipl.bin -i helloos.img ::

実行

% qemu-system-x86_64 -fda helloos.img

以下のように Hello World と出力されれば成功です。

その他のOS自作本

ゼロからのOS自作入門 – 2021/3/22

コメント

タイトルとURLをコピーしました