N64ファミコンエミュレータについて ver. 021101 Copyright 1999-2002 Nintendo Co.,Ltd. Programmers: Tomohiro Kawase (CPU, Graphics) Hideaki Shimizu (Sound) 開発環境、メイク方法 ==================== [ot11]<~> versions | grep ultra I ultra 07/11/100 Ultra 64 Development Environment, 2.0L I ultra.dev 07/11/100 Ultra 64 Development Environment Software I ultra.dev.base 07/11/100 Ultra 64 Base Development I ultra.dev.demo 07/11/100 Ultra 64 Demonstration Software [ot11]<~> uname -a IRIX ot11 6.3 12161207 IP32 メイクするには、make とタイプしてください。 いくつかのソースファイルが付属せず、オブジェクトファイルのみで提供さ れています。それらは *.o.keep という名前で保存されていて、make clean を行った後に *.o へリストアされるようになっています。 ボタン割り当て ============== 十字キー、START, B, A ボタン: NES と同じです。 ボタンのビット割り当てに互換性があるため ks_nes.c: ks_nes_main() で p -> serial4016d0 = game_p -> n64_buttons[0] << 16; // Controller Port 1P のようにセットしています。 Rボタン、Zボタン: NES SELECT ボタン Zボタンのビット割り当ては NES SELECT ボタンと同じですので、上記のように ks_nes.c: ks_nes_main() でセットしています。 また、Rボタンでも NES SELECT ボタンとみなすのは sequence.c: sq_main() で処理しています。 Lボタン: ゲーム中のメニュー表示 sequence.c: sq_main() で処理しています。 これらのボタン割り当ては、仮のものです。使いやすいように変更してくだ さい。 メモリ割り当て ============== ks_nes.c: ks_nes_init() で以下のように割り当て範囲をセットしています。 割り当てられたメモリは実行時に osSyncPrintf デバッグ出力します。 /* エミュレータ用 BSS の固定割り当て (暫定) */ ks_emu_bss_start = 0x80400000; ks_emu_bss_end = 0x80800000; ここでは拡張メモリに割り当てていますが、範囲が重ならなければ内蔵メモ リでも構いません。 NES ROM バッファとして、sequence.c: sq_init() で 0x100000 バイト 確保しています。実際の NES ROM サイズ+実行時用変換データ格納バッファ の分で、余裕を見てこれだけ確保しています。 PRENMI 時の注意 =============== main.c: taskman() で行われているように、 while (osAfterPreNMI()) { IO_WRITE(SP_STATUS_REG, SP_CLR_RSPSIGNAL); /* これを入れないとリセット後 暴走することがある */ } を入れてください。 NES ROMイメージについて ======================= 万一、エミュレータプログラムが盗まれた場合に備えて、署名済みの NES ROM イメージしか実行できないようにしてあります。 処理落ちについて ================ N64のメモリアクセスの特性が原因と思われる、処理落ちが発生することがあ ります。メモリ配置を改良して、メモリアクセスのアドレス範囲を分散させ るなどの対策で、レイテンシが改善されれば処理落ちはなくなると考えて、 現状では処理落ち対策を行っていません。そのため、処理落ち時には サウンドもエコーがかかったように聞こえます。 最終的に処理落ちが解消されない場合、サウンドのサンプリングレートを 下げるなどの対策を行います。今のところは、ご了承願います。 以上