エミュ
とってもご無沙汰してます。ハィ。
いや、年末から年始にかけて超絶空前絶後な仕事状況で、その後押してしまった仕事が山のようで、いったいおいらはいつになったら人並みの生活ができるんだよ!って状況でしたがキューにたまった仕事をやっとニアエンプティにできました。
つってもまだ次の仕事詰まっているし、割り込みもあるのでヒマじゃないんですけどね。
(ヒマが続いたらそれはそれで困っちゃうから、まぁちょうどよくなったか?というところでしょうか)
で、お題目のエミュですよ。エミュレータ。エミュレータつってもいろいろあります。おいらが忙殺モードの時にとっても役に立ったのが、μITRONエミュレータTOPPERS-JSP。これはソースレベルのエミュレータで、ROM化するシステムなんかでハードができる前にwindows上で作ったソースをコンパイル&ハードのエミュレーションコードを書くとシステムを検証できるとってもすばらしいものです。
つっても、あくまでソフト的に検証するわけでTOPPERSで結果OKでも実機でハッピーかというとうまくいかないことが普通なんですけどね(汗)
なぜならできの悪いハードでは妙なタイミングがあったりするわけです(これはwindowsでデバイスドライバのプログラム書いたことある人や、組み込み系したことある人なら涙ながらに共感してくれると思うんですけど)
で、そういうタイミング(癖)がある程度わかっているハードは、バグっぽいところを理解してハンドリングすれば済む問題(そういうのはそもそもハードが直すべき問題なですけど)、ボードを大量に作った後で発覚して、直すに直せないのでソフトで何とか対応するという悪しき習慣もあるわけです。
で、おいらが忙殺されたのは特注品のハード。動くハードがない状態でソフト開発。TRONだったので、ソフト組みつつwindows上でTOPPERS使ってデバイスエミュレーションプログラム書いておいらの中では完璧だったっすよ。しかし、いざ実機に乗せてみれば妙なタイミングどころかIOポートが間違ってましたとか(爆)、CPUが遅すぎて処理サイクルが全然間に合っていません(爆)とか・・・・
おおよそ、ソフト屋には無関係であるはずのことで死ぬ思いをしました。
□IOポート間違ってる? ハードの仕様ミスでしょ。
⇒ソフトで対応してくれ。それが一番安上がりなんです。
□CPU処理速度が間に合っていません。ソフトではどうしようもありません。クロック数上げてください。
⇒いまさらボード作りかえられません。アセンブラでも駆使して間に合わせてください。
・・・・・その分、お金くれるんだったらイイヨ。くれって言っても予算ないとか、いっぱいお金ハラッテルとかさ、おいらボランティアじゃねーんだからな。そこんとこよろしく。 もう絶対そこの会社の仕事しねーよと思っていたけど、なにやらまた仕事が来てるんだよね。 仕事とってきたモマエがやれ!と相方に喧嘩しました。
で、エミュ(またかよ) こっちは遊びの話。
今度はソフトエミュ。 pcsx2とか、no$gbaとか。すごいね。この二つ。
pcsx2はソース公開しているんですよ。オーバービューしないでソース見たもんだから、自分で手を加えたくなっていじったんだけど一向早くならない。何で?とよくよく構成を見てみたら、リコンパイルモードとエミュレーションモードとあって、おいらが一生懸命いじっていたのは、エミュレーションモードでした(爆)
よくよく考えれば、PS2ってばものすごい処理能力を持っているわけです。普通にエミュできないわけです。
pcsx2でGTのオープニング見たときにうそだろ?何でこんな早いの?と思ったのは、エミュレーションじゃなくて、PS2のバイナリコードをペンティアムコードに変換してから実行するある意味反則的な手法を取っているわけです。でもそういうことをソースを公開しながらやっているのはすごいですね。
no$gbaこれもすごいですね。これは、特別な理由がありソースコードは公開されていないんですけど、DSエミュとして今の所桁外れに優れています。オールアセンブラで書かれているそうです。
NDSは処理速度的には今のPCにとってはたやすくエミュできると思いますが、今のところこれ以上のものはないと思います。
ハード構成など公開されていない部分を忠実にアセンブラで高速に処理を実現しているのですばらしいと思います。
アーキテクチャが違いすぎるのでリコンパイルモードは出てこない気がしますが今のPCでDSは十分エミュ可能と思います。ソース公開してくれたらうれしいですわんこ。