* BIOSを呼び出そう -(by [[K]], 2011.02.03) -発展課題のページ(全部読む前にここを読むのは混乱するのでおすすめじゃないです) ---- -C言語からBIOSを何とかして呼び出そうという内容。これができれば、HDDやUSBメモリだって読めるはずだし、いやそれよりも書き込みが出来るはず。画面モードだってOSを終了することなく何度でも切り替えられる。・・・他にいいことあるかな?うーん、ないかもしれないけど、とにかくそれでもこれは可能性としては悪くない! *** 方法 -エミュレータを使います。32bitモードを一時的に中断して16bitモードに戻ったりするわけではありません。・・・エミュレータといってもqemuじゃないですよ。BIOSを実行するためのエミュレータを作るんです。 -C言語でCPUのエミュレータを(適当に)作って、それを使ってBIOSを実行します。きっとすごく遅いし、プログラムも長くなるでしょう。でも、それでいいんです。だって分かりやすいですから。 -エミュレータを使います。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で画面モード切り替えくらいができるところくらいまではやりたい。 * こめんと欄 #comment