C言語でNESアプリを作成(実機動作について)

実機で動作させるためにはROM化を行うのが本来の方法ですが、NSFプレイバックカートリッジ「TNS-HFC」を使ってSDカード経由で動作させることができます。

「TNS-HFC」はNSFファイルの実機再生だけでなく、実機動作プラットホームとしての活用も考慮されている素晴らしいハードウェアです。
キャラクタ領域はRAMで実装されていますのでプログラム側から任意のキャラクタデータを転送できますし、THS-HFC3以降はバンク切り替えで約1MBのメモリ空間が利用可能です!

難点はデバッグ作業が難しいことです。
実機でのデバック自身が難しいこともありますが、現状では「NX(Nsf eXtend)アーキテクチャ仕様」を満たすエミュレータがないため、実機で動作させる前にデバッグを行うためにはローダを工夫して既存マッパー上でなんとかすることになります。

ただ、マッパー0のプログラム32KB/キャラクタ8KBの構成であれば、「TNS-HFC」側のローダーが展開してくれますので、簡単に実機動作ができます。
また、一般的なエミュレータでの動作確認もできますので、実機動作前のデバッグが容易になります。

*注意*
TNS-HFCシリーズを使っての実機動作は無保証です。
現在のところ開発用と思われる機能を利用して実機動作を行っています。
場合によっては実機やTNS-HFCシリーズの故障につながる恐れもありますのでご注意ください。
当アプリケーションについてのご質問等は、@MIRROR_宛にお願いします。
TNS-HFCシリーズの開発元であるテラネットワークシステム様へのお問い合わせはお控えください。

実機動作の確認手順
  1. アプリケーションがマッパー0(プログラム32KB/キャラクタ8KB)であることを確認
  2. 拡張子を「.nsf」へ変更
  3. SDカードに書き込み
  4. 実機に接続した「TNS-HFC」へSDカードを装着し、電源投入
  5. LEDの点灯が落ち着いたところでリセット

アプリケーションのメモリレイアウトについては、cc65/cfg/nes.cfgに記載されています。
拡張RAM領域まで使用していますが、ROM領域はマッパー0と同じですので動作可能なファイルが作成できます。

もし、ビルド時に以下のような警告が表示された場合はメモリ不足の状態ですので、該当するセグメントのプログラムコードやデータを小さくする必要があります。

ld65: Warning: cc65/cfg/nes.cfg(33): Memory area overflow in `ROM0', segment `RODATA' (2582 bytes)
(通常は以下のエラーも表示されて実行モジュールは出力されません。)
ld65: Error: Cannot generate output due to memory area overflow

ld65を-mオプション付きで呼び出した場合はマップファイルが出力されていますので、省メモリ化の検討に使えます。
プログラム領域は0x8000〜0xffffですので、Endのアドレスが0x10000以上になった時点で警告が出ています。

Modules list:
-------------
main.o:
    CODE              Offs=000000  Size=000046  Align=00001  Fill=0000
    RODATA            Offs=000000  Size=008004  Align=00001  Fill=0000
    DATA              Offs=000000  Size=000100  Align=00001  Fill=0000

                      〜中略〜

Segment list:
-------------
Name                   Start     End    Size  Align
----------------------------------------------------
CHARS                 000000  000FFF  001000  00001
HEADER                000000  00000F  000010  00001
ZEROPAGE              000002  00001B  00001A  00001
DATA                  006000  00612F  000130  00001
BSS                   006130  006160  000031  00001
STARTUP               008000  00805C  00005D  00001
INIT                  00805D  00809E  000042  00001
CODE                  00809F  0088C9  00082B  00001
RODATA                0088CA  010A09  008140  00001
VECTORS               00FFF6  010001  00000C  00001
							

「SDカードに書き込み」以降は、通常の「.nsf」ファイルと同じ取扱いです。
LEDの点灯状況については必ず確認しましょう。正常に読み込めない場合はエラー点灯になります。

写真はTNS-HFC4で正常に読み込み完了した時。
LEDの点灯パターンについては取扱説明書を熟読しておきましょう。

新はビデオ入力端子があれば繋がります
旧はアナログ電波が受信可能なTVが必要なので敷居が高くなりました。

参考:
TNS-HFC2でファミコンおぼのくん
TNS-HFC2/自前プログラムの実行