*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:						; ココ
 		RET

**文字を表示させる
 さて、いよいよ文字を表示させます。まずは"Booting OSAkkie "の文字を表示させるサブルーチンを作ります。
 loading:
 		MOV		SI,msg_loading
 		CALL	putloop
 		CALL		putloop
 		RET
 次に、表示させたいところでCALLします。場所は、entryラベルの一番最後にしました。
 		MOV		AX,0			; レジスタ初期化
 		MOV		AX,0		; レジスタ初期化
 		MOV		SS,AX
 		MOV		SP,0x7c00
 		MOV		DS,AX
 		CALL	loading			; ココ
 		CALL		loading		; ココ
 これでめでたく起動時に"Booting OSAkkie "の文字が表示されるようになります。

**読み込むごとにドットを表示する。
 文字が出たのはいいのですが、"Booting OSAkkie "の文字が出ただけではさみしいです。そこで、フロッピーの読み込みが進むごとにドットが表示されるようにします。
 (msg_loadingの下に追加)
 msg_loadingdot:
 		DB		"."
 		DB		0

 (loadingの下に追加)
 loadingdot:
 		MOV		SI,msg_loadingdot
 		CALL	putloop
 		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		;ココまで
 		JB		readfast	; DH < 2 だったらreadloopへ
 		PUSH		AX		;ココから
 		PUSH		BX
 		CALL		loadingdot	; 画面にdotを一個増やす
 		POP		BX
 		POP		AX		;ココまで
 これで、シリンダが変わるごとにドットが増えるようになります。この文字表示を1つ前の判定の直前に置いたりすると、表示されるドットの数が変わるので、お好みで表示場所を変えてみてください。



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