*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つ前の判定の直前に置いたりすると、表示されるドットの数が変わるので、お好みで表示場所を変えてみてください。