ソフト開発において、書いたコードがそのまま動くことは稀です。
開発の多くの時間は通常、
不具合の洗い出し(テスト)や
各種不具合への対策(デバッグ)に費やされることになります。
通常のプログラミングでは、デバッガを駆使してこれを行います。
しかし残念ながら、OS作りの初期段階でデバッガを使うのは
簡単ではありません。
このような時でも、文字表示だけでもできれば、最低限の
テストやデバッグは可能になります。
そこで、最初に文字出力のシステムコールを実装することにします。
DOSのシステムコールにあるように、
文字出力のシステムコールは INT 29h です。
当面はエスケープシーケンスを考えないことにすれば、
INT 29h は次のように簡単に実装できます。
dos_int29h_entry: push ax push cx push dx push bx push si push di push bp mov ah, 0Eh mov bx, 0007h int 10h pop bp pop di pop si pop bx pop dx pop cx pop ax iret
push 0 pop ds mov word [29h * 4], dos_int29h_entry mov word [29h * 4 + 2], cs
cld push 0 pop ds push 0 pop es mov di, 20h * 4 mov cx, 20h real_dosboot_sethandler_loop: mov ax, dos_iret_entry stosw mov ax, cs stosw loop real_dosboot_sethandler_loop mov word [20h * 4], dos_int20h_entry mov word [21h * 4], dos_int21h_entry mov word [23h * 4], dos_int23h_entry mov word [24h * 4], dos_int24h_entry mov word [25h * 4], dos_int25h_entry mov word [26h * 4], dos_int26h_entry mov word [27h * 4], dos_int27h_entry mov word [29h * 4], dos_int29h_entry mov word [2fh * 4], dos_int2fh_entry