タグ

ブックマーク / aoisome.hatenadiary.org (6)

  • Javaってウ○コだな(とくにDoJa) - Aoisomeの以下略

    XPCEというPCエンジンエミュレータのソースを、Java(DoJa)に移植しています。 M6502は移植完了。 今は、Pce.cppを移植作業してます。 コンパイルエラーがあと83個です。 これを上から順番に地道に直していってます。 はっきりいって苦行です。 滝に打たれてたほうがまだマシなレベルです。 ほんとウンコ。 ウンコよりウンコに思えてくるぐらいウンコ。 ウンコ言語でスカトロプレイコーディングして徹夜してる俺ってよっぽどウンコ大好きなのかもウンコ。 コンパイルエラーを直すのはいいんですけど、ぜんぜん安心感が無いから、直してて気持ちよく無いんですよ。 unsigned charを、byteに置き換えて、キャストなんかをつけるコードを書く瞬間、 「ほんとにこれで大丈夫なんだろうか?」 という不安がどうしても付きまといます。 不安を払拭するためには、その変数を使っている箇所をしらみつぶし

    Javaってウ○コだな(とくにDoJa) - Aoisomeの以下略
    Nagise
    Nagise 2009/12/14
    相性が悪いことやってるもんなぁ。でも相性の悪さを持ってJavaという総体を悪く言うと、どの言語やってもスカトロになるよ
  • C言語からJavaへの移植方法まとめ - Aoisomeの以下略

    XPCEというC言語で組まれたPCエンジンエミュレータを、iアプリのJavaへ移植しています。 やっているうちに、移植手順のちょっとしたコツに気がつきました。 そんなわけで、C言語のソースから、Javaへ移植する場合の作業について、まとめておきます。 常に動作テストできるようにする Cのソースを、いきなりJavaに拡張子変更して、中身を書き換えていくという方法をとると、 すべてをJavaコードに修正するまで、動作確認することができなくなってしまいます。 Javaに拡張子変更するのは、できるだけ後にします。 Cのソースのまま、ビルドして動かせる状態を保ったままで、Javaに無い機能を置換していきます。 Javaに無い機能を置き換える Javaに無い機能というと、 ポインタ演算子 共用体 unsigned型 マクロ などです。 これらを、使わない形のCソースに修正していくわけです。 ポインタ演

    C言語からJavaへの移植方法まとめ - Aoisomeの以下略
    Nagise
    Nagise 2009/12/10
    動く状態を保ちつつ、Javaにない機能を置き換えていく、というテスタビリティ重視の方法がよいらしい
  • 続CPUエミュレーションを速くしたい - 静的バイナリ変換のハイブリッドシステム - Aoisomeの以下略

    前回の続きです。 どうやって、デコンパイルで生成したJavaコード実行と、エミュレーション実行を、都合よく切り替えるか、という お話です。 以下が簡単化した擬似コードです。 public void Execute() { while (clk > 0) { int beforeClk = clk; デコンパイルしたコード列 if (beforeClk == clk) { エミュレーション実行(); } } } Executeメソッドが、6502コアとなるメソッドです。 「デコンパイルしたコード列」という部分に、6502コードからJavaへ変換したソースコードが 埋め込まれているという前提です。 clkが6502コアを駆動する残りクロック数を表す変数です。 clkが0より大きい間、6502コアを駆動します。 ポイントとなるのが、デコンパイルしたコード列を実行する前に、clkの値を別の変数へ保

    続CPUエミュレーションを速くしたい - 静的バイナリ変換のハイブリッドシステム - Aoisomeの以下略
  • CPUエミュレーションを速くしたい - 静的バイナリ変換のハイブリッドシステム - Aoisomeの以下略

    たまにはエミュレーションネタを書かないとねw 以前に作っていた「FCC」というiアプリ用ファミコンエミュレータでは、通常のCPUエミュレーションに加えて、 静的バイナリ変換によってJavaコードに事前変換した6502のコードを実行するレイヤを設けて、 互換性と高速性を実現しようとしました。 タイトルに書いた「ハイブリッド」というのは、エミュレーションと静的バイナリ変換の両方を使うという ところから来ています。 多分、あまり前例が無い仕組みで高速化を図ったんじゃないかと思うんです。 今回は、その辺の仕組みについて解説したいと思います。 まず、基となるエミュレータの簡単な仕組みです。 CPUが実行するプログラムは、単純な命令の集まりからできています。 その命令は、足し算をしろという命令や、フラグが立っていたら分岐しろ、というような命令など、いろいろです。 ファミコンのCPUである6502は、

    CPUエミュレーションを速くしたい - 静的バイナリ変換のハイブリッドシステム - Aoisomeの以下略
    Nagise
    Nagise 2009/12/01
  • ファミコンソフトをiアプリに変換するソフトを公開してみた - Aoisomeの以下略

    ファミコンの最初期のソフトしかうまく動かせませんが、動くソフトはなかなか高速に動作します。 まあ、でもまともに動作することを確認できたのは、ドンキーコングとマリオブラザーズぐらいです。現状だと、それぐらいしか動かないと思ってください。 動くソフトは少ないですが、P905i上でドンキーコングを動かした場合、フレームスキップ無し、サウンドありで、余裕で60FPSキープできます。 ウエイトを外すと、100FPS程度出るようです。 以下のURLからダウンロードできます。 http://park19.wakwak.com/~usapyon/FCC/FCCTRS.zip このソフトを動かすためには、Windowsが動くパソコンに、以下のソフトがインストールされている必要があります。 .NET Framework 2.0 Java 2 SDK Standard Edition 1.4.2 iαppli

    ファミコンソフトをiアプリに変換するソフトを公開してみた - Aoisomeの以下略
    Nagise
    Nagise 2009/09/29
  • gotoが無いなら、バイトコードを書き換えればいいじゃない - Aoisomeの以下略

    ってマリーアントワネットも言ってました。 (えー) blogで前述のとおり、Javaにはgotoがありませんが、Java bytecodeを含む、機械語というものはgotoのような直接ジャンプ命令があるのが普通です。 そのため、トランスレータによって機械語を高級言語のソースに変換する場合は、ジャンプ命令をgotoに対応付けて変換を行ったほうが簡単だし、性能が出ます。 そこで、Javaコンパイラが生成したバイトコードを、直接的に書き換えてgoto命令を埋め込むことできないか調べることにしました。 今回、gotoに置き換えたいのは、以下のようなパターンです。 while (clk > 0) { switch (pc) { case 0xC801: clk -= 6; PushStackW(0xC801 + 2); pc = 0xCBAE; continue; /* Absolute JSR 0

    gotoが無いなら、バイトコードを書き換えればいいじゃない - Aoisomeの以下略
    Nagise
    Nagise 2009/09/29
    これはw 実際問題、パフォーマンスのためにバイトコードを手書きするようなことはないけどね :-)
  • 1