個人的メモ:bochs と rombios とスタック消費量

bochs の rombios ですが、真面目な話、スタック消費量がけっこうヤバイ。
処理の主な部分はCで書かれているわけだが、関数中の自動変数は基本的にぜんぶスタック上に確保される。いちばん甚だしいのが int15h のエントリ (int15_function) で、きちんと調べていないが、たぶん変数だけで32バイトぐらいはスタックを使っていると思う。さらに int15_function を呼び出す前にレジスタを保存しており、この時点で40バイトは食っているだろう(32ビット幅の pushad だし)。int 15h を呼び出すには最低でも80バイト以上のスタックがほぼ間違いなく必要になる。
これが単体のサービスファンクションならまだ問題にならない。ただ int 15h には、他のハードウェア/ソフトウェア割り込みハンドラ中で呼び出される機能がいろいろと寄せ集められている。これらのハンドラ内で int 15h を呼び出せば、当然80バイト以上のスタックを使うことになる。たとえばキーボード割り込みハンドラ(int09_handler)はキーボードインターセプト(int 15h, ah=4fh)を呼び出す。さて BIOS でハードディスクの読み出し処理中にキーボード割り込みがかかったら、BIOS 全体でどれくらいスタックを使うのか……あまり考えたくない(int13 関係の処理も自動変数が多めで……総スタック消費量が256バイト以下だと信じたい)。
まあ BIOS のスタック消費量が問題になるようなのは DOS ぐらいだろう、とは思う。とはいえ他の OS でも、たとえばブートストラップ時にスタック食いすぎでデータ破壊、なんてことがありえないとも限らない。あるいは仮想86モードのタスクで BIOS コールしたときにリアルモード用スタックが不足するとか。