EMU

エミュレータ開発で、C++からJavaScriptへ変換し、さらにJavaへ移植するという話

東日本大震災の影響で、 東京に1年半ぐらい行かされて、 ごたごたした日々が続いてましたが、 ようやく落ち着きました。 システムエンジニアなんて、 天災の影響が少なそうな業種だと思ってたんですが、 そうでもなかったです。 仙台は、自治体とか電力とかN…

ixpceその後について

以前開発していたiアプリ用PCエンジンエミュレータのixpceですが、ソースコードを暇なときにいじってたんですが どうも思ったような成果が出ませんでした。特にCPUコアのソースなんですが、速度を稼ぐ目的でほとんどの処理をインライン展開してしまったので…

PCEエミュを高速化したい - バンク切替をメモリコピーで実装しよう

前のエントリーで、PCEエミュのバンク切り替えをメモリコピーによって実装する話を書きました。 検討していくと、問題が発生するパターンがあることに気がつきました。PCEのCPUであるHuC6280から見えるメモリ空間は、$0000-$FFFFの64KBです。 これを8個のバ…

PCEエミュレータを高速化しよう

iアプリ用PCエンジンエミュレータであるixpceのCPUエミュレーションコアは、xpceのソースコードに含まれていたM6502という有名な6502コアをJavaへ移植したものです。 短期間でそれなりの速度と品質でC言語からJavaへ移植するために、Cソースを機械的にJavaへ…

サウンドのピッチを変えずにテンポだけ変えたい

WAVE(サウンド)のピッチを変えずにテンポだけを変える処理を組んでいます。再生時間だけを長くする処理です。PCEエミュで60FPS出ないため、サウンドの長さが不足して、音の途切れが発生します。 そこで、サウンドの長さを引き伸ばして再生してやることで、…

iアプリでPCM再生

iアプリでSDカードからwavファイルをストリーミング的に読み出して再生するプログラムを作っています。 Ga氏作成のWSX2音源のコードを利用させてもらっています。 PCエンジンエミュレータを音対応にする前段階としての、実験プログラムです。ただファイルか…

クラスローダがあればJITコンパイラを自前で実装できるのよねえ

今まで、iアプリ上で動作するエミュレータを作ってきました。iアプリの場合、一番ネックだったのがやはり「実行速度」です。 最適化には非常に悩まされました。 iアプリはJ2MEがベースとなったDoJaプロファイルという規格なんです。 J2MEは、「Java 2 Micro …

iアプリ用PCエンジンエミュレータ ixpce ver0.02を公開してみた

上のQRコードをバーコードリーダーでスキャンすると、ダウンロードページへいけます。 Docomoの携帯電話で、905iシリーズ以上なら動きます。 ゲームで遊ぶまでの手順は、以下のサイトを見るとわかります。 docomoエミュレータまとめ 今回は、横画面用と縦画…

iアプリようPCエンジンエミュレータであそんでみよう!

EMU

あそびかたのじゅんばん あぷりをげっとする! あぷりをきどうする! ろむいめーじをすいだす! えすでぃーかーどにいれる! けいたいでんわであそぶ! さいしょにちゅういすること! えみゅれーたというのは、げーむきのかわりをしてくれるそふとのことだよ…

iアプリ用PCエンジンエミュレータixpceを公開してみた

EMU

ダウンロードページ上の場所からダウンロードできます。 バイナリ、ソースコード両方ともあります。 バージョン0.01です。ベータ版の位置づけです。 問題点はたくさんあると思います。 なにか問題点を見つけた方は、報告していただけるとありがたいです。 な…

PCエンジンエミュレータ開発状況

動画撮影しました。 携帯機種はSH-04Aです。 FS3で、普通に遊べる速度で動いてますよ! もっと重いかと思ってたんですが。元となった、xpceの出来が良かったので、 ほぼ最適化してないのにかかわらず、かなりの速度で動いています。 ちょっと変わった機能と…

PCエンジンエミュレータのバグとれたかも?

スプライトの化けも直って、画面が正常に表示されるようになりました。 CPUのバグもちょっとあったんですけど、 なんとかデバッグしました… 元祖?魔女っ子シューティングの マジカルチェイスも動きます。 DoJaエミュレータ上だと遅いですけど… うんこゲーで…

PCエンジンエミュ動いたー!?

ついにDoJaエミュレータ上で、R-TYPEが動作しましたぁ なんかちょっと画面が化けてますが… あーやっと画面が出たよー 今まで、真っ暗な画面しか出なくて、 何が原因なのかずっと悩んでました 実機で動かしたら何FPSぐらい出るか楽しみです。 キー操作がまだ…

ごめんなさい

1個前に書いたエントリで、さんざんJavaのことを○○○だ!とか書いてしまったんですが、 品位がなかったですし、Java界の方々にあまりにも失礼でした。 申し訳ありませんでした。Nagiseさんから以下のブックマークコメントを頂きました。 相性が悪いことやっ…

Javaってウ○コだな(とくにDoJa)

XPCEというPCエンジンエミュレータのソースを、Java(DoJa)に移植しています。 M6502は移植完了。 今は、Pce.cppを移植作業してます。 コンパイルエラーがあと83個です。 これを上から順番に地道に直していってます。 はっきりいって苦行です。 滝に打たれ…

C言語からJavaへの移植方法まとめ

XPCEというC言語で組まれたPCエンジンエミュレータを、iアプリのJavaへ移植しています。 やっているうちに、移植手順のちょっとしたコツに気がつきました。 そんなわけで、C言語のソースから、Javaへ移植する場合の作業について、まとめておきます。 常に動…

移植がうまくいかない!!

XPCEというC言語で書かれたPCエンジンエミュレータを、iアプリのJava(DoJa)に移植する作業を行っています。 Javaにはunionやstructがないので、その辺はclassに書き換えました。 前回も書きましたが、問題なのが、unsigned型をどうするかということ。 CPU…

XPCEをWindows XPで動かしTai!

移植ベースとなるXPCEは、軽いし、いいエミュレータなんですけど、 どうもWindows XPでは動かないようなんです。 Windows2000がインストールされているマシンでは正常に動作するのですが、 XPのマシンだと、実行後、ROMを読み込んだところで強制終了してしま…

PCエンジンエミュレータ移植の件

XPCEの6502コアはM6502ってやつなんですけど、これが実にC言語C言語してる実装でして… C言語のマクロが死ぬほど使われているんですが、Javaにマクロは無いのでこれを何とかしないとダメなんです。 (すごく…マクロです…) 色々試した結果、Visual C++のコン…

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

前回の続きです。 どうやって、デコンパイルで生成したJavaコード実行と、エミュレーション実行を、都合よく切り替えるか、という お話です。以下が簡単化した擬似コードです。 public void Execute() { while (clk > 0) { int beforeClk = clk; デコンパイ…

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

たまにはエミュレーションネタを書かないとねw 以前に作っていた「FCC」というiアプリ用ファミコンエミュレータでは、通常のCPUエミュレーションに加えて、 静的バイナリ変換によってJavaコードに事前変換した6502のコードを実行するレイヤを設けて、 互換性…

C言語にあってJavaにないもの

PCエンジンエミュの移植作業を暇なときにちまちまとやってたわけなんです。xpceのソースはとってもC言語な感じです。C言語らしい書き方をされたソースです。マクロが多用されています。 C言語よりJavaのほうが後発の言語ですが、C言語にあってJavaに無い機能…

PCエンジンエミュレータ移植始めました

今までiアプリ用のファミコンエミュレータを作成してきましたが、それはいったん凍結して、新たにPCエンジンエミュレータの移植をはじめることにしました。iアプリ向けにファミコンエミュレータを作ろうと思ったころ、私の携帯はD703iというやつでした。 そ…

経過報告

はーい!! WSX2の最適化について WSX2の最適化はなかなかうまくいきませんねえー。 バッファを毎回newしないようにしたり、インライン展開をやってみたのですが、体感では大きな差になってないかもです。 ちゃんと速度測定してみないと違いがわからない程度…

BGMよ、途切れないで - WSX2を最適化する

にゃーん昨日から「クッキンアイドル アイ!マイ!まいん!」にハマってしまいました。 第26話まで見たので、だいぶ満足です。 人が生命を維持するために必要な、ロリ成分の年間必要摂取量を満たしたので、もう大丈夫です。 お前の頭は大丈夫か?とか言わないで…

FCCの設計図

現状のモジュール間の関連は上の図のようになっています(主要な部分のみ)。ほかのエミュレータと違うのが、青枠で囲まれたモジュールのあり方です。 青枠のモジュールは、トランスレータによって自動的にソースコードが生成されるモジュールを表しています…

FCCにWSX2サウンドエンジンを移植してみた

私が作成しているファミコンエミュレータの「FCC」では、サウンドエミュレーションに、Ga氏作成のWSXサウンドエンジンを利用させてもらっています。WSXの上位版(?)として、「WSX2」というPCMにて波形合成を行うバージョンがあり、こちらのほうが正確な音源エ…

マッパー3対応状況

バンクチェンジの処理がうまくいくようになりました。 今まではタイトルがばけばけだったんですが、正しく表示されるようになりました。 ビックコアともご対面。 ほぼ60FPSで滑らかに動いてます。 グラディウスはやっぱ楽しい! ドラクエ1もマッパー3なの…

8×16の小妖精達と戯れる

いろいろ試したのですが、やっぱりグラディウスのスプライトが正常に描画されないんですよ。ほかのエミュレータのソースを読むのは疲れるので、正確な資料がないかなと探したところ、見つかったのが以下のサイトです。The HyNES Realm - Technical Documents…

マッパーコントローラーをコントロールできない私

現状マッパー0だけなんです 私のiモード用エミュレータで動かせるゲームは ファミコン初期のゲームだけなんです素朴でいいよねー 初期のゲームは でも、初期のゲームだけなのは飽きてきましたね 他のマッパー対応に着手しました まだ、マッパー0も動かないソ…