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

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

2011-11-01から1ヶ月間の記事一覧

ブラウザ上でMona 0.1.1をエミュレート

滅茶苦茶エミュレータが遅いけど、ブラウザでMona 0.1.1が動きます。色が手抜きで青い部分まで白くなってしまってるのと、文字の表示位置がbochsと一致してないのを除けば、ほぼエミュレートできているに違いないです。HTML5のCanvasが表示できるブラウザで…

FDCのエミュレート & ページング

デバイスのエミュレートはなかなかめんどくさい。キーボードやタイマはそれほどでもないかもしれないが、FDCになるとめんどくささがでてくる。inやoutが何度もでてくるので大変だ。でもこれぐらい乗り越えられないとエミュレータなんて作っていけないと思う…

メモリ容量の表示の問題解決

レジスタの値をゼロ拡張する命令で32bitOperandのときは、8bitから32bitに拡張しないといけなかったのに、16bitにしか拡張しなかったのが問題だったようだ。32bitOperandのときはサイズが変わる命令には注意してきたつもりだったが、注意が足りなかったようだ

Androidでも動作確認

Mona 0.0.8を乗せたWeb版のx86エミュレータの動作をAndroid端末のHTC Desireで確認した。表示されるまでしばらく待つことになるが、それでもしっかり表示される。GWTのTouchStartHandlerとTouchEndHandlerを追加して、KeyHandlerの代わりになるようにしたの…

(カーネル/VM|Java) Advent Calendar

今年もカーネル/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 0.0.8のエミュレート ほぼ完成?

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ウェア版の洞窟物語を購入した

パソコンでも大分楽しんだ洞窟物語がDSiウェアで昨日から購入可能だったので、購入した。難易度は難しいを選ぶ勇気が無かったので普通を選択。いやー懐かしい

割り込み実装...しかし!

割り込みを実装して、さぁキーボード割り込みだ!と思ったらダミーハンドラに飛んでしまったようだ。キーボード割り込みが起こったらIDTの0x21番目のディスクリプタにあるSelector設定してOffsetに飛べばいいんだよな?何か自信がなくなってきた解決しました…

途中経過

途中経過をアップしました。ページを開いた瞬間に若干止まるのと、下の画面になるまで少し時間がかかります。そして現時点では入力を受け付けません。HTML5のCanvasを表示できるブラウザで見てください http://d-emulator.appspot.com/

見えない壁を作る

プレイヤー以外のキャラの移動方法でいいのが思いつかないため、見えない壁を作り、キャラがそこに接触したら右に曲がれとか一時停止とかの命令をだすようにした。今のところ味方のキャラがいないので作りたいところ

CPUID...あれ?

CPUIDがNGになってる。どこで判断してるんだろう?まだCPUID命令は来てないみたいだし解決しました。EFLAGSのようです...そしてEFLAGS以外のミスが響いてました

Vendor IDが...メモリ容量が...

Vendor IDが何故か表示できない。そしてメモリ容量が酷いことになっている...。どうしたものか

今日はここまで進んだ

MonaOS 0.0.8で使ってる16色のカラーコードがわからないので別の色で表示しているが、ここまで進んだ。ただし、PICの設定に関しては手抜きである。最近エミュレータ作りに没頭しているので、そろそろゲーム作りに戻りたい

まだ先は長い

MonaOS 0.0.8のカーネルに突入し、最初の描画が終わった。しかし、この後はPICの設定やIDTの設定が待ち受けている。そして、タイマ割り込みやキーボード割り込みに対応する必要があるっぽい。最後の仕上げはマルチタスク、これはOSの仕事だが特権レベルの切…

うまく描画できた

16bit中の上位8bitが描画用のbitmaskだったのに、間違えて下位8bitを描画用のbitmaskにしていたため、一部しか描画できてなかったようだ。結構アホだった

MonaOS 0.0.8の描画方法がよくわからない

上がBochs、下が自作x86エミュレータの結果。描画に失敗している。今の所、どうすればいいのか不明解決しました: http://d.hatena.ne.jp/d-kami/20111120/1321739111

今はMonaOS 0.0.8を動かしたい

どんどんバージョンを上げていくつもりだが、今はMonaOS0.0.8を動かすことに力を入れる。それで現在secondbootに突入した模様。bochsと実行結果が違うが、これは0x7C00に入る前の話っぽい。0x7C00から始めてるこのエミュレータだと0が画面に並ぶようだ。それ…

MW3購入

Call of Duty: Modern Warfare 3を買った。サバイバルモードを中心にプレイしているが、サバイバルモードでは14ウェーブで死んでしまう。セントリーガンを使えるようになったので、もっと楽に進めるようになるだろうか?マルチプレイではフリーフォーオール…

最初から作り直して

x86エミュレータを最初から作りなおして今日96命令(実行していないものも含む)を再実装した。MonaOSの0.0.8を読み込み、最初のメッセージを表示するところまで行った。175命令実行したところまで行き停止。今のところbochsとレジスタの値も一致している。行…

作り直しを決める

今、開発中のバグだらけのx86エミュレータに限界を感じ始めたため、新たに作り直すことに決めた。2回目の作り直しとなるが、前回は3000行程度だったが、今回は7000行を捨てることとなった。しばらくはMonaOSのバージョンの小さいのから読み込んでいこうと思…

前に遊びで作ったTerminal

GWT

前に遊びで作ったTerminalを発掘したので、公開しておく。HTML5を使ってるわけじゃないので、大抵のブラウザで見れるはず。使えるコマンドはhelpコマンドで確認できる。ただし、某OSのコマンドの機能とは比べ物にならないくらい低機能なので注意。↑↓でコマン…

MonaOS 0.0.5を読み込ませてみた

MonaOS 0.0.5を自作x86エミュレータに読み込ませたところ、何かのダンプをひたすら続けている。一体何をするOSなのかわかってないので何が正しいのかわからない

プレイヤーのライフと自然回復を導入

今まで敵の攻撃をいくら受けても死ななかったのでプレイヤーキャラのライフポイントを設定し、攻撃を受けたらライフを減らすようにした。回復に関しては時間と共に回復するようにするため、以下のようにスクリプトを組んだ void Update(){ if(life == LIFE_M…

いろんなエラーがあるんだな

Malloc Errorとでるようになった。メモリの確保でミスってるのかな?まぁ、エミュレータからは何をやってるかは把握できないので、どの分岐でミスったか探すのみ。早くLinuxを起動できるようになりたい。32bitモードに入ってからが長い...

Uncompressing Linux...

Invalid Compressed FormatやCRC Errorなどに悩まされていたが、なんとか先に進めた。原因はJA命令の分岐の条件を間違えていたことだった。さらに命令長までミスってるという情けなさ。まぁ、直せたからいいだろう。そして、ある程度進んだところで止まった…

C♭改造してブートローダを開発できるようにしたい!

『ふつうのコンパイラをつくろう』を読みながら、どうC♭を改造できるか考えているところ。パーサ部分はそのままなので、アセンブリ言語の出力部分を変更する予定。出力するアセンブリ言語はNASMにしたい。あと、JavaCCを理解するために最初から作っている。…

何かレジスタの値が違うと思ったら

bochsとレジスタの値が合わないと思ったら、最初から値が違ってた。0x7C00のほとんどのレジスタが0になってると思ってたが、そうでもなかった。0x7C00にブレークポイントしかけてチェックしておくべきだったな。それで、0x7C00の時点でのレジスタの値を変え…