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がどんなことをしているかの参考にもなるかもしれません。プログラムは理解しやすさ重視で、エラー処理などもほどほどで書いています。適当に読んで適当に改造すれば、いろいろ遊べるかもしれません。
プログラム
現状&歴史
- まだ未完成です。
- 2010年の5月にはアイデアがまとまる。でも忙しくて書き始めることができない!
- he86_00b : 少し時間ができたので書いてみた。最初のリリース。まだ数種類の命令しか理解できないので、BIOSを呼び出すことすらできない。でも短いので、このプログラムがどういう構造になっているのかは、多分分かりやすい。・・・今後何回かバージョンアップして、VESAで画面モード切り替えくらいができるところくらいまではやりたい。
こめんと欄
|