2011-11-01から1ヶ月間の記事一覧
滅茶苦茶エミュレータが遅いけど、ブラウザでMona 0.1.1が動きます。色が手抜きで青い部分まで白くなってしまってるのと、文字の表示位置がbochsと一致してないのを除けば、ほぼエミュレートできているに違いないです。HTML5のCanvasが表示できるブラウザで…
デバイスのエミュレートはなかなかめんどくさい。キーボードやタイマはそれほどでもないかもしれないが、FDCになるとめんどくささがでてくる。inやoutが何度もでてくるので大変だ。でもこれぐらい乗り越えられないとエミュレータなんて作っていけないと思う…
レジスタの値をゼロ拡張する命令で32bitOperandのときは、8bitから32bitに拡張しないといけなかったのに、16bitにしか拡張しなかったのが問題だったようだ。32bitOperandのときはサイズが変わる命令には注意してきたつもりだったが、注意が足りなかったようだ
Mona 0.0.8を乗せたWeb版のx86エミュレータの動作をAndroid端末のHTC Desireで確認した。表示されるまでしばらく待つことになるが、それでもしっかり表示される。GWTのTouchStartHandlerとTouchEndHandlerを追加して、KeyHandlerの代わりになるようにしたの…
今年もカーネル/VM Advent Calendarに参加することにした。ネタはもう決まっている。そして、今年はJava Advent Calendarに参加する。カーネル/VM Advent Calendarhttp://atnd.org/events/21910Java Advent Calendarhttp://atnd.org/events/22434
今までオペコード0F 20と0F 22をCR0用の命令にしてしまっていたがこれは間違いだった。ModR/MでCR0〜CR4を指定するものだったらしい。これからページング対応していかなければならないのでCR0とCR3を使い分ける必要がある。今エミュレートしているMona 0.1.1…
Mona OS 0.0.8を一部の機能を除き、ほぼエミュレートできました。FirefoxやChormeなどのHTML5のCanvasが使えるブラウザで下記のページに行き、少し待つといろいろ表示されます。Hit any key to start [Process]と表示されたら何かキーを押してください(Tabと…
ついにここまで来た!残された課題はメモリ容量と特権レベル変更時の割り込みスタックとIRET命令、そして右上のMONAの文字をカラフルにすることか。そしてVendor IDをd-kami CPUにした。今まで表示されなかった原因はJNLE命令の実装にミスがあったことが原因…
まだ割り込み自体が中途半端だったりするが、タイマ割り込みを実装した。以前から気になっていたprintfででてくる命令にバグがあるらしく、表示ができていない部分がいくつかある。Mona 0.0.8を動かすためのほとんどの機能は実装済みなので、これからはバグ…
パソコンでも大分楽しんだ洞窟物語がDSiウェアで昨日から購入可能だったので、購入した。難易度は難しいを選ぶ勇気が無かったので普通を選択。いやー懐かしい
割り込みを実装して、さぁキーボード割り込みだ!と思ったらダミーハンドラに飛んでしまったようだ。キーボード割り込みが起こったらIDTの0x21番目のディスクリプタにあるSelector設定してOffsetに飛べばいいんだよな?何か自信がなくなってきた解決しました…
途中経過をアップしました。ページを開いた瞬間に若干止まるのと、下の画面になるまで少し時間がかかります。そして現時点では入力を受け付けません。HTML5のCanvasを表示できるブラウザで見てください http://d-emulator.appspot.com/
プレイヤー以外のキャラの移動方法でいいのが思いつかないため、見えない壁を作り、キャラがそこに接触したら右に曲がれとか一時停止とかの命令をだすようにした。今のところ味方のキャラがいないので作りたいところ
CPUIDがNGになってる。どこで判断してるんだろう?まだCPUID命令は来てないみたいだし解決しました。EFLAGSのようです...そしてEFLAGS以外のミスが響いてました
Vendor IDが何故か表示できない。そしてメモリ容量が酷いことになっている...。どうしたものか
MonaOS 0.0.8で使ってる16色のカラーコードがわからないので別の色で表示しているが、ここまで進んだ。ただし、PICの設定に関しては手抜きである。最近エミュレータ作りに没頭しているので、そろそろゲーム作りに戻りたい
MonaOS 0.0.8のカーネルに突入し、最初の描画が終わった。しかし、この後はPICの設定やIDTの設定が待ち受けている。そして、タイマ割り込みやキーボード割り込みに対応する必要があるっぽい。最後の仕上げはマルチタスク、これはOSの仕事だが特権レベルの切…
16bit中の上位8bitが描画用のbitmaskだったのに、間違えて下位8bitを描画用のbitmaskにしていたため、一部しか描画できてなかったようだ。結構アホだった
上がBochs、下が自作x86エミュレータの結果。描画に失敗している。今の所、どうすればいいのか不明解決しました: http://d.hatena.ne.jp/d-kami/20111120/1321739111
どんどんバージョンを上げていくつもりだが、今はMonaOS0.0.8を動かすことに力を入れる。それで現在secondbootに突入した模様。bochsと実行結果が違うが、これは0x7C00に入る前の話っぽい。0x7C00から始めてるこのエミュレータだと0が画面に並ぶようだ。それ…
Call of Duty: Modern Warfare 3を買った。サバイバルモードを中心にプレイしているが、サバイバルモードでは14ウェーブで死んでしまう。セントリーガンを使えるようになったので、もっと楽に進めるようになるだろうか?マルチプレイではフリーフォーオール…
x86エミュレータを最初から作りなおして今日96命令(実行していないものも含む)を再実装した。MonaOSの0.0.8を読み込み、最初のメッセージを表示するところまで行った。175命令実行したところまで行き停止。今のところbochsとレジスタの値も一致している。行…
今、開発中のバグだらけのx86エミュレータに限界を感じ始めたため、新たに作り直すことに決めた。2回目の作り直しとなるが、前回は3000行程度だったが、今回は7000行を捨てることとなった。しばらくはMonaOSのバージョンの小さいのから読み込んでいこうと思…
前に遊びで作ったTerminalを発掘したので、公開しておく。HTML5を使ってるわけじゃないので、大抵のブラウザで見れるはず。使えるコマンドはhelpコマンドで確認できる。ただし、某OSのコマンドの機能とは比べ物にならないくらい低機能なので注意。↑↓でコマン…
MonaOS 0.0.5を自作x86エミュレータに読み込ませたところ、何かのダンプをひたすら続けている。一体何をするOSなのかわかってないので何が正しいのかわからない
今まで敵の攻撃をいくら受けても死ななかったのでプレイヤーキャラのライフポイントを設定し、攻撃を受けたらライフを減らすようにした。回復に関しては時間と共に回復するようにするため、以下のようにスクリプトを組んだ void Update(){ if(life == LIFE_M…
Malloc Errorとでるようになった。メモリの確保でミスってるのかな?まぁ、エミュレータからは何をやってるかは把握できないので、どの分岐でミスったか探すのみ。早くLinuxを起動できるようになりたい。32bitモードに入ってからが長い...
Invalid Compressed FormatやCRC Errorなどに悩まされていたが、なんとか先に進めた。原因はJA命令の分岐の条件を間違えていたことだった。さらに命令長までミスってるという情けなさ。まぁ、直せたからいいだろう。そして、ある程度進んだところで止まった…
『ふつうのコンパイラをつくろう』を読みながら、どうC♭を改造できるか考えているところ。パーサ部分はそのままなので、アセンブリ言語の出力部分を変更する予定。出力するアセンブリ言語はNASMにしたい。あと、JavaCCを理解するために最初から作っている。…
bochsとレジスタの値が合わないと思ったら、最初から値が違ってた。0x7C00のほとんどのレジスタが0になってると思ってたが、そうでもなかった。0x7C00にブレークポイントしかけてチェックしておくべきだったな。それで、0x7C00の時点でのレジスタの値を変え…