IPL改造

 OSが起動するとき、「Loading OS......」とか「Booting......」のような文字が流れたりするものがありますよね。とてもカッコイイなぁとおいらは思うのですが、OS自作入門では川合さんの「そんなの表示する時間とクロックと電気代がもったいない」と言う考えで省かれてしまっています。
 しかし、自分流に改造しまくっていいのがOS自作入門です。起動中の文字をバッチリ表示させましょう!

文字を用意する

 まずは文字を用意しましょう。場所は、msg_errの下に書くことにします。

msg_loading:
		DB		"Booting OSAkkie "
		DB		0

putloopをサブルーチンにしてしまう

 メッセージを表示するために、エラー表示に使っていたputloopを使うことにします。しかし、ループが終わるとfinに飛んでHLTループになってしまいますので、この部分をどうにかします。

putloop:
		(中略)
		JE		ret		; ココ
		(中略)
		JMP		putloop
error:						; putloopの下にまるごと移動させる
		MOV		AX,0
		MOV		ES,AX
		MOV		SI,msg
		CALL		putloop		; ココ
		;文字表示が終わったらココに戻ってきて、そのままfinに進む
fin:
		HLT
		JMP		fin

 putloopで書き換えたジャンプ先のretラベルはローカルラベルになっているので、「.」をとります。

(最後の方)
.ret:                            ; この行は消す
ret:
		RET

文字を表示させる

 さて、いよいよ文字を表示させます。まずは"Booting OSAkkie "の文字を表示させるサブルーチンを作ります。

loading:
		MOV		SI,msg_loading
		CALL	putloop
		RET

 次に、表示させたいところでCALLします。場所は、entryラベルの一番最後にしました。

		MOV		AX,0			; レジスタ初期化
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX
		CALL	loading			; ココ

 これでめでたく起動時に"Booting OSAkkie "の文字が表示されるようになります。

読み込むごとにドットを表示する。

 文字が出たのはいいのですが、"Booting OSAkkie "の文字が出ただけではさみしいです。そこで、フロッピーの読み込みが進むごとにドットが表示されるようにします。

(msg_loadingの下に追加)
msg_loadingdot:
		DB		"."
		DB		0
(loadingの下に追加)
loadingdot:
		MOV		SI,msg_loadingdot
		CALL	putloop
		RET

 ココまでは先ほどと同じです。ただし、文字表示は少し工夫する必要があって、文字表示の前と後でレジスタの値が変わらないように、PUSH/POPするようにします。文字表示ではAXとBXしか使わないので、この2つをPUSH/POPします。

		(中略)
		JB		readfast		; DH < 2 だったらreadloopへ
		PUSH	AX		;ココから
		PUSH	BX
		CALL	loadingdot		; 画面にdotを一個増やす
		POP	BX
		POP	AX		;ココまで

 これで、シリンダが変わるごとにドットが増えるようになります。この文字表示を1つ前の判定の直前に置いたりすると、表示されるドットの数が変わるので、お好みで表示場所を変えてみてください。


Wikiの [ 一覧一覧 最終更新最終更新 ヘルプヘルプ   RSSRSS]