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

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

x86エミュレータ

STLを移植するかもしれないぞ!

Twitterの魔人こと、某@fadis_の陰謀によりblink-dにSTLが導入されるかもしれないという危険な事態に陥った。下手したらstringとかが使えるようになってしまうのかもしれない。ヤバい、危険すぎる!

閉じるボタン

今までblink-dで作ったウインドウは閉じることができなかった。しかし!ついに!ようやく!閉じるボタンが!追加!されました!

ちょっとだけレイヤが上がる?

guiという関数だけで成り立っていた今までと違い、DialogBoxとかLabelというクラスを作り、ちょっとだけレイヤが高くなった...気がする

ついにnewができるようになってしまった

ついにnewができるようになってしまった。delete?無理。だから何?って言われそうだけど、メモリ管理するはずのOSがないからnewできないんですよ!ってことでエミュレータ(?)側にメモリ管理させて、あとはハイパバイザコールで仕留めたわけです。はい

C++も使えるけど...

minivmでのC++はいろいろ死んでるんですよね。うん...まぁ、使えますよ?ってぐらいです。はい。ということでそのうち誰かがテストしてくれるはず

漢は黙ってブラウザでプログラミング

漢は黙ってブラウザでプログラミングするもんですよ!(嘘。というわけで、ファイル追加したりするわけです。そろそろハイパーバイザコール丸出しのライブラリに飽きてきたので、使いやすさを考えたライブラリを用意したい。ハイパーバイザコールと呼んでいる…

環境構築中

必要かどうかは知らないけどエディタだけだと寂しいでしょ?となんとなく思っただけです...

ちょっとずつ変わってるんじゃよ

UIを微妙に変更、ちょっとずつ豪華になっていく...といいなぁ。どこまで作り込むか...

まだまだWebGLだよ!

相変わらず浮動小数点数を扱えないが、頑張って固定小数点数で頑張ろう!しかし、実行速度の遅いエミュレータからWebGLってヤバそう

C言語からCanvasにアクセスじゃー

だんだんカオスになるシステムコール的な存在から目を背けつつ、機能拡張した。Canvasに対応して四角形を描画しまくってるよー 以下怪しいプログラム。ようはC言語から呼ぶ魔法 global stdout global stdin global gui global fileapi %macro blink 1 mov ea…

WebGLもやろうぜ!

まだレイヤーの低い状態だが、だんだん使いやすい関数になっていく予定だよ!とりあえずWebGLで三角形の描画やー。エミュレータの関係で絶対遅いんだけど!

レイヤの低いGUIライブラリ

システムコールそのままなGUI関数を整備中。ここが終わったらレイヤを高めていく

C言語からDOM操作

MiniVMでC言語からHTMLの要素を弄れるように修正を加えた。まだライブラリができてないのでシステムコールっぽい関数になっている

バグを潰した

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

ループ

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

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

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

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

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

わずかに前進...

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

minivmがパワーアップします

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

PEヘッダを解析したことによりAPIフックに興味がでたようです

PEヘッダを解析したことによりAPIフックの方法が分かった気がする。今まで興味が無かったが少し興味が出てきた。そして、悪いことを思いついたd-kamiだけど多分失敗する。ring0で何かしたい年頃だから仕方が無いね!

exeファイルから何かを読み込んだようです

問題はいろいろあるし、目標には届いていないが進んでいる。スクリーンショットはexeから参照されるDLLの1つを表示しているところ

PEヘッダ解析中...

明日あたりには、プログラム本体に辿り着き、自作x86エミュレータで動かしているはず...多分。Win32APIについても調べないとな

PEヘッダを解析してみようかな...

今更ではあるが、PEヘッダを解析してみようかと思っている。そしてどこまで実行できるかどうか...まぁ、駄目でもいいからやってみたい。さぁ、頑張ろう!

くだらないミスだった

前回、GDTを見に行くところでエラーになったんだけど、理由がLGDT命令のアドレス計算をミスしていただけだった。何度もやらかしてるエラーだったようだ。悲しい。そして次の段階へ進み、またバグに遭遇。命令実行回数がどんどん増えていく。

画面崩れを少し修正 その2

MenuetOSのエミュレートで画面がおかしくなっていたが、ほとんど修正できた。原因はバックスペースと改行にあったようだ。うまく処理できてなかったらしい。しかし、命令実行数が今までのOS(というよりブートローダ)よりも桁違いにでかく、66608548命令実行…

画面崩れを少し修正

前回の画面崩れを少し修正した。原因はバックスペースを表示しようとしていたことだった。バックスペースが来たらカーソルの前の文字を消すように修正した。これでだいぶましになった感じがするが、まだ変なところがあるのでそこも修正したい。あとGDTが見つ…

JMP命令が間違っていた

x86エミュレータのJMP命令を1つ間違えていてトンデモナイところに飛ばされていた。ModRMでのミスである。多分初期の頃に作ったのが残ってたんだろうなぁって感じがする。直したところでバグ地獄は続くんだけどな!

頑張れ!x86エミュレータ

Menuetをエミュレートしているが何か画面が壊れている。でも進んでるっぽい。どこまで進むかな?最終的にはLinuxを動かしたいが、挫折して終わりそう。

家に帰ったらデバッグ

今になってx86エミュレータの新しいデバッグ方法が思いついた。ただ、うまくいくかはわからないので、家に帰ったらにしよう。今となってはログが凄まじい量になるし、無限ループに入られると厄介なのだが...なんとかしよう。でも、x86エミュレータの開発にど…

画面サイズを間違えていた...

今までKolibriOSのブートローダの画面が崩れていたが、画面サイズの設定で失敗していたようだ。エミュレータのINT 0x15にバグがあって、何かおかしかった模様。現在はAXが0x4F01のときのINT 0x10で解像度を返すわけだけど、何を返せばいいのか分からず悩んで…