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を読んでシグネチャを探す(易)--5/29できた
- ブートスクリプトを読み込む(易)--5/31たぶんできた
- ブートスクリプトを実行する(易)--6/4たぶんできた
- OSが起動する(GDTやIDTの初期設定)(易)--6/4超えせ版ならできた
- KHBIOSをOSから呼び出せるようにする(易)
- ディスク読み込みサポート(易)
- 画面モードの切り替え(難)
- 解像度や色深度の範囲で指定、エミュレーションでもよいか、実際に切り替えるのか・情報取得か、n番目
- 1/2/3/4bytes
- 画面リフレッシュ(易)
- カラーコード取得(易)
- キーボードサポート(難) --- これ仕様決めるの大変だから後回しにしようか
(2) 2007.06.05
- とにかく完成度を下げてでも早く最初のリリースしたいので、目標などをまとめる。
- ブートデバイスはとりあえずBIOS-FDDのみでもいい。
- ファンクションも機種依存の元BIOS呼び出しだけでいい。
- タイマ割り込みを自分で処理した場合に、元BIOS呼び出しがほぼ不可能になってもかまわない。
- リリース後のtodoリスト。
- 起動高速化
- サンプルOSの準備
- CFやHDDから起動できるようにする(HDDにはATAも当然含まれるが、主たる狙いはUSBのストレージデバイス)。
- タイマ割り込みドライバ
- ストレージアクセス標準ファンクションの組み込み
- キーボード割り込み
- マウス割り込み
- 画面モード切り替えファンクション
- TOWNS版/98版開発
- OSASKのKHBIOS対応
- 並行起動サポート
こめんと欄
- もう中旬だよ・・・メインマシンのトラブル対策とかの雑用ばかりしていたら、時間ばかりが過ぎていく・・・。 -- K 2007-05-15 (火) 21:47:29
- 来週にならないと時間が取れない・・・ううう・・・。 -- K 2007-05-17 (木) 08:22:10
- むう、なぜかDiskBIOSの呼び出しで失敗する・・・。がんばらないと。 -- K 2007-05-28 (月) 23:24:17
- DiskBIOS呼び出しバグ直ったー。 -- K 2007-05-29 (火) 08:24:56
- 明日は5月最後の日だというのに、体調が思わしくなくて(=猛烈に眠い)思うように進まない・・・。くやしいなあ。 -- K 2007-05-30 (水) 19:25:12
- ううだめだー。あと数分ではできない。眠いので寝よう。続きは明日。もう欲張らないで上記(1)のOS起動までエセエセでできたらとりあえずリリースの予定。 -- K 2007-05-31 (木) 23:56:49
- 仕様を改善できることに気がついて、猛然と改善中。仕様というか、スクリプトのエンコード方法みたいなもので、はっきりいって本質ではない。でも将来の拡張性やシンプル性を失いたくは無いので、ここが腕の見せ所だと思って、がんばり中。 -- K 2007-06-02 (土) 21:40:37
- 結構進んだけど、完成には至らず。サンプルOSの作成に苦戦中。明日からはまた忙しいので、開発ペース落ちそう・・・。 -- K 2007-06-04 (月) 01:33:51
- やっとOSが起動するようになったー。まだ起動以外何もできないけど(今日は無理やり現実逃避でKHBIOS作ったけど、さすがにそれも続けられなくなってきた)。 -- K 2007-06-04 (月) 19:41:03