ページへ戻る

− Links

 印刷 

KHBIOS.memo001 :: OSASK計画

osaskwiki:KHBIOS.memo001

ページ内コンテンツ
  • KHBIOSに関するメモ-001
      • (1)
      • (2)
      • (3)
  • こめんと欄

KHBIOSに関するメモ-001 anchor.png[1]

  • (by K[2], 2009.03.26)
Page Top

(1) anchor.png[3]

  • いきなりですが先日EeePC900-Xを2.7万円で買いました(新品)。それで、 http://dot.osask.jp/blog2/details.php?bid=80[4] という記事も書きました。
  • それで僕は何がしたいのかというと、とりあえずこのEeePCについているSDスロットから、OSASKとか「はりぼてOS」とかを起動したいのです。メモリチェック時間がLibretto50より短いから、もしこのマシンからOSASK起動できたら、(我が家での)トータル起動時間最速マシンになりそうな気がするんです。・・・で、今回は起動させるにはどうしたらいいかをあれこれ実験してみようと思います。
  • この話題は本当はhrb-wikiのほうに書くべきなんですが、成功するかどうか分からないし、(当面は)内容のレベルがhrb-wiki向けの層よりも上なので、うまく行って内容を整理できるようになったら、hrb-wiki上で改めてやろうと思います。
  • この話題は実はKHBIOSに直接関係ないのですが(KHBIOSを使わないので)、しかし無関係というわけでもないので(KHBIOS系のツールを多用するので)、まあここに分類するのは許してください。
  • ちなみにページ名のピリオドはスラッシュと間違えて入力してしまった名残りです。でもピリオドも構造体っぽくていいかも(?)。
Page Top

(2) anchor.png[5]

  • (2009.03.26)
  • 最初の目標:まず何とかしてSDスロットからIPLを起動できることを確認する。すべてはそれからだ!

  • とりあえず手元に128MBのSDがあったので、これを実験台にすることにする。A-DATAの50Xだ。最初に、中身が消える可能性大なので、バックアップを取る。・・・よしできた。
  • まずIPLに何が入っているか確認してみようと思う。tolsetを入れて、
    >imgtol r e: image.bin 4096
  • としてみた。これはE:の最初の4MBをディスクイメージ化しようという意味。しかしなんかエラーになった。
    アプリケーションは "ハードディスクの直接アクセス" を実行しようとしましたが、サポートされません。
    アプリケーションは正しく動作しない可能性があります。
    アプリケーションを終了するには、 [閉じる] を選んでください。
  • そしてこのエラーの通り、結局読めていない。・・・うむう、いきなり挫折だ。

  • それじゃあということで、FDからDOSを起動して、そのDOSからimgtolを起動してみることにしよう。・・・しかし生きている空きFDが発掘できずに中断。でもUSB-FDDからEeePCがブートできることは確認。100円ショップでFDを買ってくることにするかな・・・明日にでも。
  • 空きディスク発見!ということで再開。
  • とりあえずDOSは起動してimgtolも動くには動くようだけど、DOSからはSDカードが見えないので、意味がなかった。言われてみれば当たり前だ。
  • ということでpcctol0hで再挑戦。しかしpcctolはATAかPCカード接続じゃないと見えないので、これも失敗。むう、ハードル高い。
  • ここまではどうにかしてPCはEeePCだけしか使わない方向で考えていたけど、ちょっと計画変更。というかこのままじゃ手間ばかりかかってきりがないので。最終的にはEeePCだけで作業する方法を考えるという前提で、当面は他のPCで作業するのもOKにすることにする。・・・これならLib50上でSDに対してimftolもpcctolもできるから、SDを自由に読み書きできる。それでEeePCでブート可能そうなSDをでっちあげて、実際に起動するかどうかを確認しよう。

  • 今度はPCカード型のSDカードアダプタが無い。これがないとLib50からpcctolできないじゃないか。あれはしばらく使ってなかったなあ。どこにしまったかなあ。・・・ということで、見つかるまで中断。とりあえず今日はおしまい(もう疲れたー)。
  • (2009.03.27)
  • アダプタは発見済み。しかし今は時間が無いので後日。
  • (2009.03.28)
  • あ、そうだ。rawrite使えばいいじゃん!
    NTRawrite: I/O デバイス エラーが発生したため、要求を実行できませんでした。
  • うーん、だめかあ。
  • いろいろやっていろいろわかったのでまとめ。
    • この128MBのSDはフォーマットが壊れていた。壊れていたのでいろいろできなかったっぽい。ということでLib50上でpcctolを使ってバックアップをとり(pcctol rでやった)、ダンプを取ってMBRが完全に壊れていることを突き止めて、sf16_40.eiiのMBRで上書きして(pcctol wでやった)、最後にsf16_40.eiiでフォーマットしたら(pcctol fでやった)、とりあえず直った。
    • このカードについて思い出してみると、僕は128MBのメディアを買った記憶がないので、これはもしかしたらかつてあっきぃさんが「SDが壊れたので直してほしい」と持ってきたSDなんじゃないだろうか。OSCのときにその場では修正できず、とりあえず僕が預かったのではないかと。・・・ということであっきぃさん、直りましたよ!って今更だよなあ。
    • EeePCでSDスロットにSD入れて起動すると、BIOSから増設HDDとして見えている様子(USB-FDDからDOSを起動してpcctolで確認)。しかしpcctolからは最初の1セクタしかリードできてない。これがpcctolのバグなのか、それともSDカードのせいなのか、EeePCのBIOSがおかしいのかは現在究明中。
    • ということで、まだSDから起動できるのかどうかは判明せず。でもBIOSが内部では認識しているのは確実なので、BOOTメニューに出せれば起動できるようになりそうな気がする。
    • ntrawriteはまったくアクセスできないわけではなく、先頭の1120KBまではアクセスできていた!でもそこから先はエラーでだめ。・・・どっちにしてもMBR領域にアクセスはできないので、ntrawriteだけではSDを起動可能状態にできない。でもUSB-FDDかUSB-CDドライブがあれば、DOSか何かを起動してBIOS使ってSDにフルアクセスできるはずだから、EeePCだけで起動可能なSDを作れそうだ。・・・というのが今の見解(起動可能なSDを作れたとしても、そこから起動できるかどうかは不明なんだけど)。
  • 判明!BIOSドライブ指定で最初の1セクタしか見えないのはpcctol0hのバグ。これはいつか直さないといけないな。
  • じゃあ残るはSDから起動できるかどうかだな。SDのMBR部分に細工して実験してみる予定。
  • ついに起動テスト成功。BIOSの設定で10分くらい悩んだけど、うまくできた。現在の設定では、ブート可能なSDをいれればSDから、そうでなければSSDから起動という、まるでKHBIOS状態。
  • たぶんMBRとIPLをうまく書けば、「はりぼてOS」くらいは起動できるようになると思う。その程度なら合計1KBのプログラムでしかないのでたいしたことはない。後日それに挑戦して、うまく行ったらやりかたを再整理して、hrb-wikiにまとめようと思う。
  • いやちょっと誤解してた。EeePC900XのBIOSは、起動時にSDが刺さっていないことを認識してしまうと、その時点でSDを起動順位1位からはずして、3位にまわしてしまうらしい。つまりSDなしで起動してしまうと、SDを入れて起動しなおしてもWinXPになってしまう。これはおもしろくない。
  • それでいろいろ実験したところ、SDカードスロットに起動可能マークのついていないMBRを書き込んだSDを入れておくと、起動順位はそのままでWinXPを起動させることができるとわかった。だからOSを入れていないSDはMBRの起動可能マーク(55 AA)を(55 AB)とかに書き換えておいて、WinXPを使うときはこれを忘れずに入れるようにしておけばよさそうだ。
  • ちなみに僕が買ったADATAのSDHC-16GB-class6-ForEeePCは、MBRに起動可能マークがあるらしく、これを入れるとWinXPは起動しなかった(黒画面のまま止まる)。
  • とまあこういうことがあるので、EeePC向けにSDのMBRを設定できるツールを作ろうと思う。・・・いつ?いつになったら作れるだろうか???まあ簡単なツールだから、1日あればできそうだけど。

  • (2009.03.29)
  • どうやらHDD系のドライブは処理するセクタ数を2以上にしてはいけないらしい(BIOSのINT13Hの話)。
  • EeePCのSDから「はりぼてOS」を起動させようとがんばっているけど、まだうまくいかず。でもとりあえずロードはできているっぽい。
  • ちなみにBIOS経由だとSDであっても結構遅い。遅いとはいっても1秒とか2秒くらいなんだけど、とにかく「目にもとまらぬ速さ!」ってわけじゃない。きっと1セクタずつとかじゃなければもっと速くなると思う。でもBIOS経由だとこれ以上速くできない。・・・皮肉なことにLib50のCFブートはBIOS経由ではないので驚異的に速く、ロード時間は体感上ではゼロ。BIOSはもう少し頭良くなってくれないものだろうか。
  • (2009.03.30)
  • できたー。でも起動時間あまり短くない(泣)。これならLib50のほうがいいかも。まああとで秒数をはかってみよう。・・・今は解像度を上げようと調査中。やっぱりワイド型だとすんなりとは行かない様子。
  • とりあえずVESAでサポートしている画面モード一覧を取得してみた。
    • 0105, 0117, 0118, 0112, 0114, 0115, 0101, 0103, 0111 (全部16進数)
  • SDが急にへそを曲げてしまったらしく、ライトプロテクトが掛かってないのに、ライトプロテクト状態になった。Windows上からも書き込めず。・・・まあ酷使したからなあ、ストライキしたくなるのもわからないではないけど。
  • うーん、どうしたものか。うちにマイクロSDがあったはずだから、今度はそれを実験台にしよう。ということで、発掘できるまで中断。
  • あった。でもマイクロSDじゃなくてミニSDだった。うちにはマイクロSDは一つもないようだ。容量はたったの16MB。これは僕が買ったものだと思う。
  • よしはりぼてOS動いた。解像度は800x600。やっぱり128MBのA-DATAは壊れていたっぽい。・・・あ、そうだ。起動時間測るんだった。ええと、BIOS時間込みで比較するとこうなった。
    • EeePCで「はりぼてOS」を起動:11秒くらい(BIOS画面が出るまでに5秒、デバイス認識が1秒強、正味の起動時間は5秒弱)。
    • Lib50でOSASKを起動:19秒くらい(BIOS画面が出るまでに10秒、メモリチェック等が7秒強、正味の起動時間は1秒強)。
  • うーん、やっぱりEeePCはいいなー。こうなるとSDからいろいろ起動できるようになりたい。FreeDOSの起動とかも計画中。・・・とりあえずはpcctolのBIOSデバイスのバグを直すべきかな。
  • あっきぃさんもEeePCの4GXを買ったみたいだけど、同じ方法で起動できるんだろうか?もしできるのなら、OSCで会ったときに盛り上がるかも?
    • そういえばあっきぃさんとはLib50でも仲間だった。今回もEeePCで仲間になる?
  • 今まで明記してなかったので誤解されているかもしれませんが、ここでやっている手法は、「EeePC限定」だとか「SD限定」というわけではありません。多分、USBメモリブートとか、USBカードリーダからの起動にも応用できます。ただし、BIOSの対応がEeePCに似ている機種だけになるので、全ての機種に適用可能というわけではありませんが(ここだけなんとなくですます調)。

  • (2009.03.31)
  • ここで一区切り。とりあえず単に起動するという目的は果たしたから。ここからは、バイナリエディタを駆使しなくても少ない操作で上記が達成できるようにツール類を整備して、最終的にはリリースするのが目標。
  • 整備しなければいけないのはpcctolに以下の4項目の修正を加えること。
    • 1.pcctolでのBIOS-HDD経由アクセスのバグを直す。
    • 2.pcctolにMコマンドをつける。これはMBR状態の確認コマンド。
    • 3.pcctolにbコマンドをつける。これはMBRのブートシグネチャを設定するためのコマンド。
    • 4.pcctolにBコマンドをつける。これはKHBIOS-HBのディスクイメージを認識し、起動可能にするためのコマンド。
      • これで「はりぼてOS」ファミリーなら全部起動できるようになるはず。・・・いやまあ今でも起動可能ではあるんだけど。PCカードの使えるノートPCがあって、さらに超めんどくさい手間を惜しまなければ。
  • ここまでできたら一度リリース。
    • 5.SDで起動可能なFreeDOSのディスクイメージを作る。
  • ここまでできたらリリースしておしまい。
  • ここででてきたKHBIOS-HBというのは迷走したKHBIOSの仕様をOSASK-HBの精神で適当に決めて作ったもの。仕様は1日でできたし、動作もした(というか2009.03.30の起動成功はKHBIOS-HB経由での起動成功)。
    • ついでなので解説。KHBIOS-HBは本来のKHBIOSには程遠い。SDなどのMBR内に寄生し、せいぜいディスクイメージ内のアクセスを少し手伝ってくれる程度である。
  • とりあえず1.はできたっぽい。
  • 2.もできた。3.はできたけどWinXPでうまく認識できないSDになってしまうことが判明したので、手法を変更。そしたらうまくいった。
  • ということで第一次リリースまでの残りは4.だけ。
    • でも超忙しいのでこの先はなかなか進まないかもしれない。あと数時間あればできそうなんだけど・・・。
  • とりあえず4.までできたらどうなるかだけを予告。
    • 材料:EeePC(か、もしくは適当なPC)、SD(か、もしくはUSBメモリなど)、FDとUSB-FDD。
    • SDにフォーマットをかけてまっさらにする。フォーマットはFATでもなんでもいい(つまりSF16に限定じゃない!)。
    • そしてそのSDに適当な「はりぼてOS」のディスクイメージを入れる。当然ただの1440KBのファイル。これを入れるときにimgtolとかは必要ない。普通のファイルコピー(というかコピペ)で十分。
    • 次にFDにFreeDOSをいれ、さらにリリースされるはずのpcctol0iも入れる。そしてこのFDからブート。
    • DOS上でpcctolを実行し、まずSDがどのドライブ番号になっているか確認する。
      prompt>pcctol M 60
      prompt>pcctol M 61
      prompt>pcctol M 62
    • これくらいやれば多分容量とかからわかるはず。
    • そしてSDのMBRのバックアップを取る(ここではドライブ番号が60の場合で話を進める)。
      prompt>pcctol r 60 backup.img 32k
    • これで96KBのバックアップファイルができる(先頭64KBはデバイス情報などのヘッダ)。まあバックアップなんか興味ないという人はこれをやらなくてもいい。
    • 最後に、KHBIOS-HBに対応したMBRをインストールする。
      prompt>pcctol B 60 khbh_mbr.bin
    • これでおしまい。あとはこのSDから起動するだけ。SDから高速に(少なくともWinXPよりは格段に速い)起動するのを是非一度体験してほしい。
    • 原理としては、pcctolがkhbh_mbr.binを書き込むときにSD内を検索し、どこに起動すべきディスクイメージがあるのかをMBR上に一緒に記録している。だから、imgtolとかでパーティションの先頭からきっちりと書く必要がない(そうしてもいいけど)。Windowsでは同じサイズで同じ名前のファイルを上書きしても、ディスク上の位置が変わることはないので、OSをデバッグしてテストランするときは、何も考えずに普通に上書きコピーすればよい。それだけでupdateされる。
    • pcctolがディスクイメージを見つける方式なので、SDのフォーマットが何であってもかまわない。しかし断片化はダメ。なおpcctolが見つけられるように「はりぼてOS」のIPLにはKHBIOS-HBシグネチャという40バイトを書いておくことになる(IPLに入らないときは、ディスクイメージ内のどこか好きなところに書いておけるようになっている。つまりファイル領域でもいいので、適当にKHBIOSHB.SYSみたいなファイルを作って、そこにいれておいてもいい。そのへんは柔軟な仕様にしておいた)。
    • 今回の例ではもともとFD用だったOSをSDで起動したが、このKHBIOS-HBを前提にOSを作ることももちろんできて、それだと1440KBという制限はない。100MBでも1GBでもOK。その辺の詳しいやり方は後日まとめようと思う。
  • (2009.04.01)
  • 今日はOSAkkieを800x600化してEeePCで起動させてみた。おお、たのしい。これでOSCにあっきぃさんに見せびらかすぞー(笑)。
  • このページよりずっと分かりやすいリンク: [[hrb:advance/hddboot]]
  • (2009.04.02)
  • 今日は「はりぼてOS」とOSAkkieの入ったSDとSDカードリーダを持って学校へ行き、いくつかのPCでいきなり起動できるかどうか実験してみた。・・・すごい、できる!やっぱりEeePC専用じゃないんだ。こここれがOSASKスタイルというやつなのか。ちょっと感動。先輩の先生にもかなりウケた。やったぜー。試した機種では全部成功したので、もしかするとこの方法はほとんどの機種でうまく行くのかもしれない
  • これはわざわざKHBIOSをインストールしておかなくてもできるということなので、当初のKHBIOS計画よりもすごいことです。
  • こういうことができるようになると、やっぱり本体の内蔵HDDとかSSDって無くてもいいよなあ、そういう時代が来るべきなんだよなあって思います。
  • (2009.04.09)
  • 現在、開発できなくて「開発したい病」になっています。週末くらいは開発したい!
  • (2009.04.12)
  • [[hrb:advance/hddboot]]にMBRのコードを書いた。このコードは非常にKHBIOS-HBを意識している。KHBIOS-HBでは、AT/TOWNS/98のいずれの機種からでも、そしてどのデバイスから起動しても(それはたとえばATでPCカードスロットのCFから起動したり、TOWNSのメモリカードスロットから起動したり、FDを複数のパーティションに分けて起動したとしても)、すべて共通に far-CALL 0x60:0x1b0 で指定したセクタが読めて、 far-CALL 0x60:0x1b4 で指定したセクタに書けるようになっている(したい)。
  • 更に欲を言えばドライブを自由に指定したい(=実際のデバイス番号に限らず、ディスクイメージ番号みたいなもの)が、そこまでのプログラムを600-7ffに格納することはできないので、これはまた別の方法を考える必要があるだろう。とりあえず今回はブートしたディスクイメージに限定して上記のようなインターフェースを共通に提供することだけを考えることにした。
Page Top

(3) anchor.png[7]

  • 脱線的補足情報:
    • EeePC900XのVBE画面モード情報
      0x0105解像度・色深度情報などはすべて0。外部ディスプレイを繋がないとデータが取れないのかもしれず
      0x0117上に同じ
      0x0118上に同じ
      0x011232bitカラー、640x480
      0x011416bitカラー、800x600
      0x011532bitカラー、800x600
      0x01018bitカラー、640x480
      0x01038bitカラー、800x600(ただしVRAM的には832x600。つまり横に画面外の32ドットがある)
      0x011116bitカラー、640x480
    • 見ての通り、VBEだけでは1024x600という設定は用意されていないようだ。残念。どの画面モードにしても画面いっぱいに表示される。つまりドットが横方向に伸びた状態になり、明らかにゆがんで表示される。まあ我慢できないことはない(というか安いので何でも許せちゃう・・・笑)。・・・できれば1024x768設定をすると下の168ドットが画面外に出て見えないだけ、とかだったら良かったのに・・・。
    • 参考: http://community.osdev.info/?VESA[8]
Page Top

こめんと欄 anchor.png[9]

  • Windows のコントロールパネルで intel GMA のアスペクト比を固定モードにすると、BIOS や OSASK 等の画面も 1:1 に固定されるようです(当方 EeePC を保有していませんので参考まで)。 -- 名無しさん[10] 2009-04-01 (水) 23:26:45
  • おおなんと!これはいい事を聞きました!・・・早速試してみたところ、確かにWinXP内ではうまくいっているのですが、再起動して「はりぼてOS」を起動して解像度を800x600にするとやっぱり横長になってしまいました。残念。起動時にBIOSで毎回再設定をかけている機種なのかもしれません。 -- K[2] 2009-04-01 (水) 23:42:41

Last-modified: 2009-11-21 (土) 00:00:00 (JST) (319d) by k-tan