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

x86エミュレータやFPGA、WebGLにお熱なd-kamiがマイペースに書くブログ

x86エミュレータ

タイマ割り込み

タイマ割り込みも無事動いて満足!

エミュレータ進捗

30日本の11日目まで進みました。ウインドウも表示出来て満足!とはいってもウインドウを表示してるのはOSであってエミュレータはウインドウかどうかもわからずに描画しているだけである。

進んでいます

見た目的には変化ないけどいろいろ変わってます

メモリ32MB

VMに割り当てたメモリは32MB、OSでちゃんと認識しています

JavaScript版のエミュレータ

はりぼてOSを動かしてるけどやはり画面描画はきついなーという感じ。テキストベースなら十分な速さに見えるが…

x86エミュレータ マウスとの戦い

マウスは認識されたようだが…値がオカシイな…

文字もOK

文字もOKといってもフォント読み込んでるのOSだし…描画してるのOSだし…C言語って感じの命令が増えてきた

順調!順調!

きたー!

進捗!進捗!

某エミュレータを作り始めて4日目、ついに画面に変化が!

自作エミュレータ進捗

それほど進んでないがもう少しで違う結果が見られそうだ

某OSを実行し始めて…

某OSというかまだブートローダだけど32bitモードに突入したっぽいぞ!ワーイヤッタートロピカルヤッホー

変なx86エミュレータをそのうち公開します

ブラウザでC++なんて夢がありました。未完成の状態になるけど、まぁ、このままだと消えるしかないので

標準出力的な何か復活

ブラウザ上で動くエミュレータ用ライブラリで標準出力的な何かが消えてしまったので、復活させた

エミュレータ進捗

前回(いつだ?どこだ?)から全然進んでないけどエミュレータ

たまにはエミュレータのエントリも書いてくれ!

と思う方もいらっしゃるとおもうので、たまにはエミュレータのエントリを書きます。えぇ、x86エミュレータです。今、作ってるblink-dというハイパーバイザ的ななんとかバイザです多分。blink-dにはスーパーバイザがいないのでハイパーバイザといういい方が正…

微妙に挙動が変わった?

GWTのバージョン上げたら微妙にblink-dの挙動が変わった気がするが、気のせいだ(おい

blink-dが開発しづらいので

何か考えないとなー。ようやく余裕がでてきて、エミュレータ(?)にも力が入るようになった気がする。余裕大事

blink-dサンプルソースコード ラベル編

そのうち公開するであろうblink-dのサンプルコード。とりあえず、ラベル表示編。ウインドウとラベル作って、ウインドウにラベルを追加しているだけである #include <gui.h> int main(){ Window window; window.setText("Hello World!"); Label label; label.setText</gui.h>…

blink-dのC++ライブラリのコード

blink-dのC++側のコードです...GUIに関するgui.cppの部分だけ載せています。なぜここに__cxa_pure_virtual()があるのか?とか疑問に思わずに見ることを推奨します #include "gui.h" extern "C" int gui(int, int, int, int, int = 0, int = 0); extern "C" i…

blink-dでWebGL+他のWidget

WebGLのCanvasの下に画像を表示している図。VerticalPanelで縦に並べてHorizontalPanelで横に並べることができる

久しぶりにblink-dを進める

作曲だの3Dだので進んでなかったblink-dを久しぶりに進めようと思っている。浮動小数点数が使えないが、これを使えるようにするかどうか迷い中。floatを使ったソースコードをclangに与えたらSIMDを使ったバイナリが出力された。対応するなら頑張らないと...

何かが始まった?

以前から言っていたでかいプロジェクトが本格始動した?っぽい?さぁ、どうなりますかね?

前回の動画がわかりづらかったから!

1つのプログラムに絞って動画を作りました!デモは前回のと一緒ですが!

blink-d ちょっとだけラッパー WebGL編

何度かスクリーンショットを上げてるように、blink-dはWebGLに対応している。そして今までライブラリが低レイヤーすぎてアレだったが ついに! ラッパーライブラリができてちょっとだけ高級になったんじゃよ

画像もいけます!

画像も表示できるようになりました!今はネット上のURL指定ですが、HTML5のFile APIでローカルもいけるようになるはず!

テキストボックスとUserDataと

まずテキストボックスを作れるようにした。あと、イベントが不便な関係で、WidgetにUserDataを持てるように修正した。これは1つだけ32bitな値を渡せる形だ。これを使えば、イベントでのコールバックで2つ以上のデータを持たせられるはず。スクリーンショット…

今日はいくつか進んだな!ラムダ式、レイアウト

まずC++のラムダ式に対応した。これはサーバーサイドの変更だが、コンパイラオプションを変更した。また、buttonなどのクリックイベントから無名関数へのコールバックができるようになった。ちょっと強引な感じもするが... そしてGUIの部品というかレイアウ…

ブラウザで動くx86エミュレータblink-dについて

TwitterでMiniVMとかblink-dとかいってるけど一体何なんだ?って話なのかもしれないので、少し説明しておく。タイトルの通り、ブラウザで動くx86エミュレータではあるのだが、実はエミュレートしてない。というかx86ですらない部分がある。それは32bitリアル…

blink-d 日本語もいける!

当然のことかと思ってたら当然では無かったらしい。とりあえず、Stringをでっちあげて、日本語も対応!そういや標準出力用のライブラリが今無いのでなんとかせねば

そういやMiniVMはblink-dって名前になったってよ(今更)

"blink-dにC++の標準ライブラリをどこまで導入するかという悩みがあったが全く導入しないことになりそう。コンパイル後のバイナリがネットワーク流れるし、でかくなったバイナリのエミュレートで遅くなりそうだからというそんな感じの流れで"とFaceBookに書…

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で何かしたい年頃だから仕方が無いね!