KHBIOS関係のメモ
- (by K, 2007.05.05)
- このページはmemo0022の続きです(memo0022はKHBIOS/0000相当)。
(1) えせブートのために(5月中旬リリース向け)
- ブートスクリプトのありかを示すためのマーク:
- 00 F2 KHB0 この後にポインタ。ポインタはLBAだが、単純なLBAではない。
- まずehヘッダでシフト量を書く。さらにehヘッダで有効数字を書く。有効数字部分については、4桁単位で。ビッグエンディアン。
- とりあえず16バイト単位かな。16バイトは128bit。だからシフト量7。111011。
- それで6バイトくらい書きたいよね。つまり12を指定。1111110000。
- シグネチャ6バイト。6bit+10bit。6バイト。これだな。2^(48+4)=4ぺタバイトまで指定できる。
- これをとりあえずIPL内に16バイトアライン位置から書いておくこと。
- ブートスクリプト
- 最初に 00 FD KHB0 この後にサイズ。これでスクリプトの全サイズを表す。
- 次に対応機種番号の範囲、スクリプトの開始位置、の列がある。
- まず最初に列の個数かなあ。
- そして[a,b)だとしたら、(b-a),a,メモリ最低, メモリ最大(差), ofs エンコード長ヘッダは5つまとめて指定。・・・じゃなくて混在。
- IA-32のAT互換機は1。TOWNSが2。NEC98が3。他はとりあえず未定。
- (例)・・・というか、ATだけの場合を作ればいいな。
- スクリプト本体
- ブートディスクのどこからどこまでをどこに読むか(そして圧縮かどうか)。どこからエントリするか。ESPはとりあえず後ろでいいよね。IDTやGDTも適当に提供される。最初は全てのセグメントがエイリアスなどを使って共通域を指す。ってことはコマンドは2種類だけでいいのかな。最初はCLI。
- KHBIOS呼び出しはfar-call(とりあえずコールゲート)とINT(0x4f);(トラップ)。
- GDTとIDTのアドレスは、SGDTやSIDTで知ることが出来るな。だから取得ファンクションは後回しでいいや。
- ファンクション:ロードと画面モード切替とキー入力。
- ブートスクリプト部分についてはまた今度考えよう。少し考えた。↑
- リアルメモリやプロテクトメモリ指定については、起動時には指定できない。起動後に細かく指定してもらうべし。希望どおりにもらえなければブートに失敗したという終了方法もある(この場合次のOSのブートを試みる)。
- 起動するとKHBIOSとやり取りするためのハンドルがもらえる。
- 起動後にそのOSのために予約しておいたほかのメモリブロックが与えられる。最初はブートブロックしかもらえない。ver.0.0では他のメモリブロックはない・・・いやある。リアルモードメモリとか。
- 以下は将来の拡張との兼ね合い
- ガーベージコレクトについてはできなくてもいいと思っていたが、やっぱりできたほうがいい。しかし負担にならない程度の方法でやる。KHBIOSからではなく、各OSから自発的に冷凍保存状態になる(その間、割り込みなどは受け付けられない)。その保存状態をディスクに保存してもいいし、メモリ間移動してもよい。冬眠時間をできるだけ短くするための工夫もあっていいだろう。メモリブロックを分割するとか小さくするなどについても、基本的に各OSが自発的にやることであって、KHBIOSからせまるものではない(まあ割り込みシグナルでユーザの意思を伝えるくらいならやってもいいけど)。
- とりあえず画面モードを切り替えられて、ある程度の描画ができるようになりたい。
(1) 2007.05.17
- うーん現状ではさすがにリリースできない。でもとりあえずの仕様は(頭の中で)固まってきた。ということでtodoリスト。
- IPLを読んでシグネチャを探す(易)
- ブートスクリプトを読み込む(易)
- ブートスクリプトを実行する(易)
- OSが起動する(GDTやIDTの初期設定)(易)
- KHBIOSをOSから呼び出せるようにする(易)
- ディスク読み込みサポート(易)
- 画面モードの切り替え(難)
- 解像度や色深度の範囲で指定、エミュレーションでもよいか、実際に切り替えるのか・情報取得か、n番目
- 1/2/3/4bytes
- 画面リフレッシュ(易)
- カラーコード取得(易)
- キーボードサポート(難) --- これ仕様決めるの大変だから後回しにしようか
こめんと欄
- もう中旬だよ・・・メインマシンのトラブル対策とかの雑用ばかりしていたら、時間ばかりが過ぎていく・・・。 -- K 2007-05-15 (火) 21:47:29
- 来週にならないと時間が取れない・・・ううう・・・。 -- K 2007-05-17 (木) 08:22:10
- むう、なぜかDiskBIOSの呼び出しで失敗する・・・。がんばらないと。 -- K 2007-05-28 (月) 23:24:17