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

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

minivm

バグを潰した

以前は文字列参照がうまくいってなかった。アドレスの取得は上手くいってたのに、取得後に謎のミスがあり、文字列を取得できていなかった。比較的、早い段階で作った命令のバグであり、ずっと修正されてなかったという...なんんてこった

ループ

以前はわけあってループができなかったが何とか修正してループ可能になった。だが文字列はまだなんだ。残念

ブラウザでx86実行編(C言語のコンパイルはサーバで)

C言語のコンパイルをサーバに丸投げしてバイナリをブラウザで実行するという誰得プログラム。標準ライブラリを使えないので何となく文字出力関数用意した。浮動小数点数はまだ使えないが、そのうち使えるようになるとも思えない。とりあえず頑張ろう

あとはライブラリの整備とminivm側の修正か

ちゃくちゃくと進んでいるけど、まだ遠いかな...

わずかに前進...

サーバ側の整備をした。基本的にクライアントサイド(Webブラウザ)で動くけどサーバも頑張るようにした。開発環境と本番環境に差があるので必死に差を吸収してるところ。今までのところは順調.。.だと思う

minivmがパワーアップします

最近モンスターハンター4Gのエントリしか書いていない気がするけど、x86も進んでるんです。x86的には進んでないけど。何をしているかと言うと以前公開したminivmをパワーアップさせ使いやすくしています。以前はメモリの特定のアドレスに文字コード入れたら…

MiniVM VRAM編

一部の人は知っていたようだが、minivmにはText VRAM以外にもVRAMが存在している。というか過去のエントリに書いてあったんだよね。私が忘れていた。それで、VRAM0x200000は始まっていて、4の倍数番地から32bit単位で書き込まないと描画に反映されない。現在…

minivmの仕様

前回のエントリでminivmを公開したが仕様を書いてなかった。まず、このプログラムはバイナリファイルをドロップエリアにドロップすることで動きだす。バイナリファイルはminivmのメモリの0番地に置かれ、先頭から実行する。実行するのはx86バイナリで、32bit…

minivm公開(ブラウザで動くx86エミュレータ的な何か)

まだ文字しか表示できない!レジスタもメモリの内容も表示しない!でも公開してしまうぜ!これは一体何かと言うと、ドロップしたx86なバイナリファイルを実行してしまうというものだ!32bitモードで動いているが、セグメントとかページングは一切動いていな…

minivmをGWTへ移行するために

minivmをGWTに持っていくには、GWT用のViewを用意しなければならない。以前、自作x86エミュレータをGWTに持っていくためにViewを作っていたが、そのViewがどっかいった。あとディスクI/O関係も別途必要になってくるので、めんどい。でも今はディスクI/Oの部…

GWTでFile API

GWTでFile APIをどう使うのか調べてみたら、そのためのライブラリが見つかった。http://www.vectomatic.org/libs/lib-gwt-fileにライブラリがあり、そのDropPanelとDataTransferExtなどを使えばOKらしいが、gwt.xmlでのinheritsと、Drag関係やDrop関係のイベ…

ファイル読み込み

以前のminivm計画では、一度バイナリをサーバにアップロードしようと思っていた。しかしFile APIの存在でローカルだけで完結しそうな気がしてきた。問題なのはFile APIでバイナリを読み込めるかどうか。ちょっと調べてみよう。もし無理なら16進ダンプを読み…

グラフィックス

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

キーイベント

キーイベント実装例。現在引数は無いが、そのうちキーコードとキーの状態を渡そうかと思っている。以下のコードで何らかのキーが押されたときに、画面にBと表示するようにしている。0x400000に関数のアドレスをセットしておけば、キーが押されたときに登録し…

C言語でもOK

C言語でプログラム書いて、minivm上で実行できた。以下のソースコードをhello.cとして保存して、下記のようにコマンドをうち、できあがったhello.binを読みこませることで、画面上にAと出力された gcc hello.c -m32 -c -nostdlib -o hello.obj objcopy -I el…

MiniVM計画進行中

現在、ブラウザで動くMiniVMを作成中で、以下のコードをアセンブルすればCanvasにAと表示されるようにした。C言語でも書けると思う。あとはアップローダでも用意してみようかな [BITS 32] MOV EAX, 0x100000 MOV BYTE [EAX], 'A' loop: JMP loop

ブラウザで動くminivm計画

今、ブラウザで動くminivmを作っている。PC/AT互換ではなく、独自のシステムを持っている。Cやアセンブラで作ったバイナリを動かすことが目的で、HTML5のCanvas上にCやアセンブリでアクセスできるようにする。VRAMを叩くとCanvasにアクセスする仕組みを作る…