BIOSを呼び出そう

  • (by K, 2011.02.03)
  • 発展課題のページ(全部読む前にここを読むのは混乱するのでおすすめじゃないです)

  • C言語からBIOSを何とかして呼び出そうという内容。これができれば、HDDやUSBメモリだって読めるはずだし、いやそれよりも書き込みが出来るはず。画面モードだってOSを終了することなく何度でも切り替えられる。・・・他にいいことあるかな?うーん、ないかもしれないけど、とにかくそれでもこれは可能性としては悪くない!

方法

  • エミュレータを使います。32bitモードを一時的に中断して16bitモードに戻ったりするわけではありません。
  • エミュレータといってもqemuじゃないですよ。C言語でCPUのエミュレータを(適当に)作って、それを使ってBIOSを実行します。きっとすごく遅いし、プログラムも長くなるでしょう。でも、それでいいんです。だって分かりやすいですから。
  • この手のことをやるとき、CPUについている仮想86モードというのを使うのがよくある方法なのですが、仮想86モードを使うとなると、ページングの説明をしなければいけなくなりそうだし、例外処理についても延々と説明しないと理解できません。そしてその上で仮想86モードそのものの説明だって必要です。そんなのぜんぜん面白くありません。僕たちは、CPUの勉強をしたいわけじゃなくて、BIOSを呼び出したいわけです。
    • しかもそうやって苦労して仮想86モードのことを理解したとしても、それは結局インテルのCPUにしか通用しない知識だったりするので教育的な価値も低い。むしろエミュレータを大雑把に理解するほうが、ずっといい経験になるはず。
  • ということで、CPUのエミュレータをC言語で書きます。CPUがどんなことをしているかの参考にもなるかもしれません。プログラムは理解しやすさ重視で、エラー処理などもほどほどで書いています。適当に読んで適当に改造すれば、いろいろ遊べるかもしれません。

プログラム

  • http://k.osask.jp/nosup/nosup.html に行って、[he86_xxx.zip]というファイルを探してください。xxxの部分はバージョンです。
    • 最初のバージョン(he86_00b)は2011.02.03の夜中までにはアップロードします。

現状&歴史

  • まだ未完成です。
  • 2010年の5月にはアイデアがまとまる。でも忙しくて書き始めることができない!
  • he86_00b : 少し時間ができたので書いてみた。最初のリリース。まだ数種類の命令しか理解できないので、BIOSを呼び出すことすらできない。でも短いので、このプログラムがどういう構造になっているのかは、多分分かりやすい。・・・今後何回かバージョンアップして、VESAで画面モード切り替えくらいができるところくらいまではやりたい。

こめんと欄


コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2011-02-03 (木) 14:13:43 (5583d)