まず最初にお断りしておきますが、私はエミュレータ自体の開発経験も無いですし、仕事でエミュレータのソースを覗いた事もないので、全て私の想像の範囲と言う事です。なので、当然間違いもたくさんあるかと思います。

エミュレータでレトロPCやゲーム機を再現するには、各チップの動作をエミュレートする事になります。一番分かりやすいのは CPU の再現でしょうか。ただ、CPU そのもののエミュレーションは基礎であり、個人的には最も簡単なチップであると思っています。理由はコードと動作が対になっているためです。

レジスタは固定ですしフラグの変化も命令もリスト化されています。処理速度のクロックも明示されていて、CPU のエミュレータ自体はたぶん私でも作れると思います。実際、ソースが公開されている野良エミュレータでは、CPU 別にソースが独立しているようですね。独立してますから、差し替えすら容易ではないかと思います。

内部でコアが複数ある CPU は少し厄介です。この場合は、クロックを元に並列動作を同期させます。メモリの衝突やらパイプやらメモリウエイトやら、考えなければならない事はそれなりにありますが、CPU のアーキテクチャを理解できていれば問題ないと思います。

次のハードルは VDP 周りです。こちらも実はそこまで大変ではないと思っています…が、最近のハードのように VDP 内部に GPU があったりすると話はガラっと変わります。MSX 系の VDP から少しずつ厄介になっていく感じでしょうか。DMA 転送で画面を再現する旧 NEC の PC 系は比較的実装はラクと思います。

次のハードルがサウンド周りです。BEEP しか搭載されていない、あるいは単音しか出ない機種はまだ良いのですが、PSG になり、OPL になりと高度化していくに従って、とても厄介な事になっていきます。チップ周りの理解に加えてサウンド周りの知識も必要になると思うのです。

まあだいたいここまでは、少しでもプログラムをかじった人なら想像はつくと思うのですが、実は個人的に最も厄介だと思っている問題が別にあります。それがシステムバス周りです。基幹システムの各チップを接続しているシステムバスは、全てのチップの調停役でもあります。

システムバスを意識していないエミュレータでは、全ての情報は別のチップに瞬間的に到達します。しかし、実際にはシステムバスの速度や混雑によって、データの遅延が発生します。いくつかの機種ではこのシステムバスがボトルネックとなり、本来のチップ性能が出ていないようです。

システムバスが混んでいると音が途切れたり等の症状が現れます。これはどう再現したら良いのかは、少なくとも私にはノーアイディアです。ですが、これをなんとかして再現しないと、実機よりもスーパーなマシンができあがります。…と、まあ、エミュレータを作るのは大変ですというお話でした。
PCエンジン mini
コナミデジタルエンタテインメント
2020-03-19
※ 転売じゃない新品がまだ残ってる。正式な価格は 11,550円なのでお間違えのないように。
マルチタップ for PCエンジン mini
ホリ
2020-04-30
※ 新品なのにずっと700円台で売ってる謎の良品。単なるUSB2.0のハブとしても優秀です。