image image


概要

NEOGEO POCKETをエミュレートします。

以前作成したNGPocketを、libvdmgrで動作するようにしたものです。



準備

以前は、ソフト部分のみをエミュレートしていためBIOSが不用でしたが、今回は解析できている部分を全てエミュレートしているため、NEOGEO POCKETのBIOSが必須となっています。
実機ROMの0xff0000-0xffffffの内容を吸い出し、ファイルへ保存する必要があります。
モノクロ本体のBIOSはbios.ngp、カラー本体のBIOSはbios.ngcの名前でファイルへ保存し、biosディレクトリへ配置します。
モノクロ本体のBIOSはngpbios.rom、カラー本体のBIOSはngcbios.romの名前でファイルへ保存し、biosディレクトリへ配置します。



エミュレート状況

機能状況
TLCS-900H※1
Z80
モノクロ対応
カラー対応
フラッシュROM※2
サウンド
シリアル通信×※3
RTC※4
サスペンド・レジューム×※5
※1TMP95C061BFGモジュールを使用しているため、モジュールが対応していない機能は未対応。
※2Read, Reset, Autoselect:Manufacture ID/Device ID/Sector Protect Verify, Program, Sector Erase コマンドのみ対応。
容量は 4Mbit/8Mbit/16Mbit/32Mbit(16Mbitx2)に対応。
※3UARTを実装していないため通信対戦はできません。
たぶん実機とNGPocketをUARTで繋いで対戦といったことも可能(対戦ケーブルがないので未確認)。
※4日時の設定はできますが、RTC割り込みによる復帰はできません。
※5本来は電源ボタンを押してから起動しますが、それだと不便なので、一定クロック待った後に電源ボタンを押したことにして自動起動させています。

2024/04/30

Raspberry Pi PicoでROMエミュレータを作成し、ロジアナを使用してアドレス・データバスを調べました。
パイプラインの動作は大体分かったので、vdmgrで対応する予定(ロジアナでバスを調べてから半年以上たってしまいました・・・)。
また、ROMエミュレータはTera Termからデータ転送するようにしたので、自作アプリの開発ができるようになりました(Raspberry Pi PicoのSRAMを使用するので192KB程度ですが)。
ついでなのでアセンブラも作成しようと思いますが、いくつかの命令に対応するのが面倒そう。
純正のアセンブラでも正しい出力とならなかったので、ある程度割り切った仕様にした方が良さそう。


2022/01/30

以下を追加しました。

■開発用表示
デバッガを起動し、メニューから「設定」‐「表示」‐「開発用」を選択することで、走査線と非表示領域を表示します。


image

※緑線が走査線+水平位置、暗い青が非常時領域


■スプライト・スクロール面・パターンデータ・カラーパレット表示ウィンドウ
メニューから「設定」‐「ウィンドウ」‐「SPR/SC/PTN/COL」を選択することでウィンドウが表示されます。


image

① スプライトデータ
② スクロール面1
③ スクロール面2
④ パターンデータ
⑤ 背景色パレット
⑥ウィンド色パレット
⑦スプライトパレット
⑧スクロール面1パレット
⑨スクロール面2パレット

※⑤を左クリックすると透過色、⑦⑧⑨を左クリックするとパターンデータのパレットを選択します

■マイクロDMAレジスタをデバッガへ追加


2014/10/17

どうやっても実機とステート数が合わないので疑問に思っていたのですが、このCPUはパイプライン処理をしていたのを忘れていました。
このCPUのパイプライン処理について詳細を書いている資料が見つからないのですが、CPUの命令表で2ステートと書かれている命令でも、パイプラインハザード時は、命令コードフェッチ2ステート+デコード1ステート+実行2ステートの5ステート掛かります。
ゲームROM部は、ダウンバスサイジング(8bit)で接続されているため、命令コードフェッチがさらに+2ステートとなるため、合計7ステートになります。
さらにRAMやレジスタ(内蔵のI/O以外)のある領域へのアクセスは、ウェイトが設定されているので、メモリーアクセス毎に+1ステートと遅い(最速で動けるのがBIOSの入っているROM(16bit)のみって...)。
パイプライン処理の詳細があれば対応は可能ですが、現在は対応していないため最速動作になっていたため、フラッシュROMを正確に対応できていないと勘違いしていました(コマンドに対する応答時間は対応できていませんが)。
一応NEOGEO POCKETで動作確認しながら実行時間を計測すれば、かなり近い値は実現できると思いますが、このCPUは命令やアドレッシングモードが非常に多いため非常に面倒です(Z80のような命令のCPUを3種類作るより大変)。
そこまで苦労しても、このCPUが普及していると思えないので、パイプライン処理はたぶん対応しません。


2014/04/20

以前作成したNGPocketより、再現性は高くなっていると思いますが、動作速度が微妙に早いようです。
現在のlibvdmgrは、メモリのウェイトを設定できるようにしていないため、思っていた以上に遅いフラッシュROMを正確に対応できていません。



補足