2nd-stage製作中

IPLの製作の続き。
とりあえずIPLが起動フロッピーから64KB分の2nd-stageを読み込み、先頭アドレスに制御を渡す処理まで完成。
IPLの512byteは長いようで短い。ちょっと気の利いたメッセージと共に丁寧な異常系を書いているとあっという間に埋まってしまう。当初はハードディスクのMBRと互換性を持つために64byteのパーティションテーブルを確保していたが、これもつぶす羽目に。
実機(Pentium4 2.8GHz)で試すとフロッピーディスクの読み込み処理に23秒もかかる。なんじゃこれはぁ。思い切って1トラックあたりのセクタ数の候補を36,18,9の三つに絞ったら起動時間は2,3秒に短縮。とにかく64KB読めた。512byteの箱庭からは脱出だぁ。当分の間はコードサイズ短縮のプレッシャーから解放されるだろう。
2nd-stageの手始めに、CPUが8086,80286,80386orそれ以降のいずれにあてはまるか自動検出するコードを作成。もしもCPUが80286以前ならパニック処理を実行するはず。検証環境が無い*1のでテストのしようがない。
次、何作ろう。最優先候補としては、リアルモードでしか行えずC言語では記述しにくい処理。うーん、メモリマップでも作るか。ということでROMの占有アドレス検出の仕組みに取り組んでいるところ。
コーディングも大事だが、そろそろいいかげんGDBによるリモートデバッグ環境の整備を始めないと、この先無理っぽい。

*1:bochsでは386以降のみサポート