memo0022
のバックアップ(No.4)
[
トップ
|
一覧
|
単語検索
|
最終更新
|
バックアップ
|
ヘルプ
]
バックアップ一覧
差分
を表示
現在との差分
を表示
ソース
を表示
memo0022
へ行く。
1 (2007-02-27 (火) 21:46:54)
2 (2007-02-27 (火) 22:41:12)
3 (2007-02-28 (水) 00:52:41)
4 (2007-02-28 (水) 14:07:16)
5 (2007-03-02 (金) 05:48:41)
6 (2007-03-03 (土) 00:01:36)
7 (2007-03-03 (土) 13:47:12)
8 (2007-03-03 (土) 13:47:12)
9 (2007-03-03 (土) 13:47:12)
10 (2007-03-04 (日) 01:28:32)
11 (2007-03-04 (日) 11:16:53)
12 (2007-03-27 (火) 13:11:54)
13 (2007-03-31 (土) 14:06:53)
14 (2007-04-05 (木) 16:39:20)
15 (2007-04-09 (月) 20:59:51)
16 (2007-04-10 (火) 22:24:56)
17 (2007-04-12 (木) 19:10:07)
18 (2007-04-13 (金) 23:27:26)
19 (2007-04-19 (木) 17:48:40)
20 (2007-05-02 (水) 01:40:53)
btcf1系のネタ
(by
K
, 2007.02.27)
↑
(1) 目的
OSASKや「はりぼてOS」をCFからブートしたい。というかCFからブートできないとFDかCDブートになるわけだけど、FDは遅いしうるさいし信頼性がない、CDはCD-RWにライティングするのが面倒だし、かさばる。今までのbtcf0系ではOSASK以外のOSの起動をぜんぜん考えてこなかったので、もう少し汎用的にしたい。そういう意味ではKHBIOSっぽい。
OSC春のために「はりぼてOS」もCFブートにしたいなあと思ったのがきっかけ。習作KHBIOSはWin95との相性しか確認していないので、他のOSを使っているマシンに導入するのはちょっとためらわれる。
↑
(2) 仕組み(最初の案)
手抜きのためにFAT16フォーマット(含むSF16)のみ対応
自動でPCカードスロット内のCFから1440KBのFDIMAGE0.BINというファイルを探す。もし複数のディスクイメージを入れたいのなら、適当に入れておけばいい。そして起動したいディスクイメージの名前をその都度FDIMAGE0.BINに書き換えればいいだけのことである。
ディスクイメージの中からシグネチャを探す。先頭64KB以内にないとダメ。シグネチャを見つけたら、そこから起動時のメモリ設定を読み取る。ディスクイメージのうちのどの部分をメモリのどこに置くか、が指定できる。
シグネチャ8バイト 0x00 0xff 0x00 0x00 KHB0
0x0001, 2バイトのステップ数, 対応機種ID, 2バイトの0
0x0002, 2バイトのセクタ数, ディスクイメージ内のLBA, 物理メモリアドレス/512
(上に同じものを必要なだけ繰り返す)
0x0003, レジスタ番号(2バイト), 4バイトのデータ
最後は8バイトの0
0x0000はNOP
0x0001はentryラベル
0x0002はロードコマンド
0x0003はロードレジスタ
0x0004はbtcfシステム引越し
0x0005は相対jmp
EIPへのロード命令はブートコマンドを兼ねる
特別なレジスタ番号を指定すると、アドレスとデータを指定できて、データを指定したときにアドレスで指定した番地にデータを書き込める。
btcf1自身はワークエリアも含めて0x0010_0000〜0x0010_ffefに存在する。これを破壊しないようにするか、もしくはどこかに退避しておいてあとで元に戻せば、再起動も可能。再起動時には起動するディスクイメージ名を指定できる。
↑
(3) 仕様調整
こんな柔軟な仕組みなら、1440KBに限定する必要はないな。もっと少なくてもいいし、多くてもいい。
ロードレジスタのレジスタ番号
0x0100:EAX
0x0101:ECX
0x0103:EBX
0x0107:EDI (EBP〜EDIは指定しても無視するかもしれない)
0x0140:seg0
0x0145:seg5 つまり GS
0x0180:EIP(ブートもする)
0x0200:汎用アドレスimm
0x0201:汎用データimm
0x0202:レジスタ間MOV?(主に汎用データ→汎用アドレス)
0x0210:リード1バイト(汎用データへ入る)
0x0211:リード2バイト
0x0212:リード4バイト
0x0214:符号拡張リード1バイト
0x0218:ライト1バイト
0x021c:汎用データ&ライト1バイト(アドレスは汎用アドレスを使う
0x021d:汎用データ&ライト2バイト
0x021e:汎用データ&ライト4バイト
0x0220:スペシャルデータロード
0x0221:スペシャルデータライト
0xf000:ファイル名の最初の4バイト
0xf003:ファイル名の12〜15バイト
0xf004:ファイル名長
0xf005:ファイル名格納先アドレス
0xf010:ブートデバイスサーチ0
0xf017:ブートデバイスサーチ7
0xf018:ブートデバイスサーチ構造体長
0xf019:ブートデバイスサーチ構造体アドレス
0xf01a:今回のブートデバイス(read-only)
スペシャルデータをレジスタに読ませる方法はない。それをやるとbtcfが複雑になりすぎる。とりあえずメモリに書いておいて、起動直後にOSがやれば済むこと。
デバイスをCFだけにする必要もない。FDDやCDでもいいと思う。もはやKHBIOSのサブセットといえそうだ。
最初に探すディスクイメージファイル名は、STARTUP.KHBのほうがいいかもしれない。で、ここにはメニューOSを入れておく、と。そのままbtcf1系対応のOSASKを入れておいてもいいけど。
↑
(4) 旧KHBIOSとの差異
btcf1は単に手抜きという理由で旧KHBIOSに予定していた次のような機能を考えていない。
起動させたOSに対して、FDD/HDD/CD-ROM/CFなどを読み書きするための32bit-BIOSの提供
複数のOSを起動して切り替える機能
↑
こめんと欄
コメント
お名前
NameLink