マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

x86エミュレータ

ブートローダのデモ

下記URLにIE9(表示のみ、操作不可?)やFirefox、Chromeでアクセスするとブートローダがブラウザ上で起動します。下の画像の画面になったらF1〜10押すといろいろ表示されます。うまく動かない場合は黒い画面をクリックしてからキーを押してください。Enterは…

BIOS地獄の中で何かミスった

BIOS Function Callの嵐が来て、何かミスって以下の画面のようになってしまった。bochs先生との答え合わせが始まろうとしている....

Loading...

ちょっとエミュレータの開発が進んでSmall KernelのLoadingまでたどり着いた。もう少しでLinux本体にたどり着くのだろうか?

だんだんバグの原因がわかってきた?

Monaを読み込んで実行していくうちに0xA0000000を実行する場所がある。そこでページフォルトが発生して、ごにょごにょして0xA0000000が0x200000にマップされるらしい。そして、0x200000からのバイナリを実行しようとしているのだが、そこには0しか並んでおら…

PageFault関係でミスか?

mona osのaccess deniedで止まってる。0xA0032000番地にアクセスしようとしてページフォルトが発生し、その処理(Mona OS側)の途中でダメになっているらしい。Mona OSは0xA0032000にアクセスされることを想定してないっぽいので、アドレスがおかしそうではあ…

グラフィックス

メモリアドレス0x200000からグラフィックスの領域とした。4byteごとにRGB値を入れていく。上位1byteは無視して2byte目が赤、3byte目が緑、4byte目が青というようになっている。以下のコードをアセンブルしたものを読み込ませると以下の画像のようになる。 [b…

元に戻ったというかなんというか

何度か修正しているうちに動かなくなったり動いたりで進んだのか元に戻ったのか。まぁ、進んだと言っていいのかもしれないxv6の29369325命令実行結果。このあと無限ループに入ってしまったのでデバッグがめんどくさい。cprintfデバッグ開始!

esオペレーティングシステム

http://nes.sourceforge.jp/からes-demoを持ってきて自作エミュレータに読み込ませたら、名前を表示させたところで止まった。というか無限ループした。条件分岐でミスしてるようなので、1つ1つ解決していきたい

進捗状況

Small Kernelを読み込ませた動画です。文字が小さくて読めないけど、動いてはいます

進む後エラー

x86エミュレータを修正し、Small Kernelを読み込ませたところ、文字が大量に表示されるようになった。しかし、結局のところエラーに突入した模様。しかし、乗り切れそうなエラーでもある。...と思いきや、単なる実装してない命令だった

boot:

Small Kernelの実行したスクリーンショットを載せる。うまくいってるようで、失敗している。boot:が表示されることは何も間違ってないが、boot:の前にもっといろいろ表示されるはずである。前はもっと進んでいたが、わけあって一からやり直しになってしまっ…

違うOSを動かそうとしても...

Free DOSのフロッピー版を動かそうとしてもうまく動かないものだ。悲しい

原因がわかってきた

今まで、謎のエラーに悩まされていたが原因がわかってきた。まず、俺がページフォールトの仕組みを理解してなかったことが原因だった。実装の仕方が悪く、うまく機能してなかった。また、Monaの仕組みも少しわかってきて、少し先に進んでいる。現在問題にな…

Mona 0.1.5を動かしたい!

Mona 0.1.5を動かしたいが動かない!リニアアドレス0xA0000050にIRETがあるっぽいのだが、そこで躓いている感じがする。IRETの実装に問題があるのだろうか?あと0xA0000050にアクセスしたときにページフォールトが起こってるようだが、これは正しい動作なの…

xv6へ

再びxv6を読み込み実行することにした。それなりに進んでschedulerという関数に辿り着いたようだが、そこに辿り着くまでに実行していなければならない部分が実行されてないらしく、うまく動かずに止まっている。エラーもださないまま。cprintfデバッグの始ま…

相変わらずミスってる

Small Kernelのエミュレートはまだブートローダだが、ミスは多い

作り直した関係で

Small Kernelが30命令ぐらいで止まっていたのだが、また進みだした。そしてまずい実装があったので修正した。POP命令でModRMを使うところで何故か[ESI]限定の処理を書いていた。謎

Plan9を試してみる

フロッピー版のPlan9を読み込ませ実行したところ、ある程度メッセージがでて止まる。状況としては、ブートローダを抜けページングもONになっていた。そして実装していない命令をいくつか実装したところ新たなメッセージが! 残念すぎる結果になってしまった…

デバッグが大変

エミュレータのデバッグ作業がとても大変なことになっている。挫折気味。かなりピンチかもしれない

開発がしばらく止まる予感

興味の関係ではなく壁にぶち当たった関係で止まりそう。今まで即値はunsignedだと思い込んでしまったことが原因な気がする。プログラム修正したら、ちょっと前の状態よりxv6が進まなくなってしまった。Monaのエミュレートはめちゃくちゃ遅いのでxv6で頑張り…

xv6 いつもながらのエラー

xv6エミュレート中にエラーらしきものが発生。何が起こったのか不明原因不明。しかも無限ループに陥るおまけつき(EB FEではないが)。でもキーボード割り込みでこうなることはわかった。送信するデータを間違えたのか?それとも、そもそも割り込み番号がおか…

あと少しのはずだが

自作x86エミュレータ上でMona 0.1.5があと少しのところで変な動きをするようになった。ページングの途中でページディレクトリエントリが0になる現象がでた。Mona 0.1.5の一部のプロセスやxv6ではアドレス変換はうまくいってるのだが、Mona 0.1.5の肝心な部分…

一時凌ぎで

一時凌ぎじゃまずいんだけど、とりあえず先に進めた。何だかいい感じに見えてしまうのがまた...

エラーに突入か?!

Mona 0.1.5実行中にINT 0x03に遭遇。これを実行するとdummy Handlerと表示されるようだ。無視して先に進むとINT 0x01に遭遇。なんかエラーっぽいなぁ。ソースコード確認するのがいいかな?

xv6が進み始めた

今まで文字の描画位置がわからなかったが、xv6のソースコードを読んで何をやっているか少しわかった。まだ完全ではないが文字列が正しい描画位置にあると思う

わずかに進む

結局、ページングでミスってたわけだが、ページングそのものじゃなくてCR3の代入でミスしてた。ちょっとショック。というかIntelのマニュアルの紛らわしい表記に騙されていた。よく考えればわかることだったが...

やっぱりページングでミスしてる

ページングがよくわからない。Intelのマニュアル見てもGoogleで検索してもわからない。頭が悪いだけか。

ページングでミスだったか

割り込みでミスしてたような気がしたが、何かページングでミスしてるっぽい。少しずつわかってきたけど、まだ駄目そうだ。勉強が足りない

割り込み周りでミスしている

mona0.1.5の画面描画が途中で止まってしまった。変なアドレスに飛んだりするのでマルチタスクでこけてるっぽい。割り込み時のスタックの状態をまた確認した方がいいかも

地味に進んでいます

微妙に描画位置がずれてるけど上がxv6で下がmona 0.1.5。ページングが少しずつわかってきた