NSF

NSF(Nintendo Entertainment System Sound Format)とはファミコンのサウンドフォーマットである。
拡張規格にNSFEというものもある・・・が、残念ながら支流にならず流行っていない模様。

NSF作成

 NSFを作成するには、6502(ファミコンで使われているCPU)の仕様を理解する必要があります。アセンブラ言語は、命令表など見ていけばある程度は理解できます。

プログラムに触れたことが無ければ難しそうに思えるかもしれませんが
命令といってもやっていることは基本的に足し算と引き算の繰り返しです。
他には
  • Aという入れ物から数字を出し入れ
  • Aという入れ物に入っている数字をBという入れ物に入れる
  • Aという入れ物に入っている数字を元にして別の入れ物の数字を見に行きそこから出し入れ
などが主です。
これはファミコンに限らず他のクラシックハードでもあまり変わりはありません。

下記の用意するものを揃えたあとは
中学生程度の計算力と目的の処理を探す根気と時間さえあれば誰でもripperの一人になれるでしょう。

用意するもの

  • ファミコンのエミュレータ(GNESなど)
    • リアルタイムでメモリ内容が見ることができるもの、
    • 逆アセンブル・ブレークポイントを設定できる機能のあるものなら便利。(無いときつい)
  • NSFプレーヤー(VirtuaNesなど)
    • リアルタイムでメモリ内容が見れるものがあれば便利。
  • 上記二つの機能をどちらも兼ね備えているFCEUXMesenがおすすめ
  • 一括検索できるような逆アセンブラ
  • バイナリエディタ
  • 16進数の計算ができる電卓

作成方法

 初期化アドレスの開始位置と、再生アドレスの開始位置を調べ、ヘッダを編集し、必要な部分のROMデータをNSFファイルにコピーすれば作成できます。
特別な処理が必要になる場合は、空いている部分にその処理を書けば大丈夫です。

開始位置を探す方法として、下のような方法があります。
  1. プログラムを実行し、メモリ内容を眺め、曲に合わせて値が増えていくアドレスを探す。
  2. そのアドレスに値が書き込まれたときにブレークするように設定する。
  3. ブレークした位置から処理の流れをさかのぼっていき、処理の開始位置を探す。
ソフトによっては、*000Hに初期化アドレスと再生アドレスへのジャンプ先が書かれているものがあります。

プログラムの種類

曲再生プログラムには、大きく分けて2種類あります。
  • 1. 特定のレジスタに曲番号を入れ、初期化アドレスにジャンプして再生するタイプ(Aレジスタの場合が多い)
  • 2. 特定のメモリアドレスに曲番号を入れると、自動的にその番号の曲を再生するタイプ
    (その後は大体、再生アドレス先でメモリから曲番号をAレジスタに読み込み、種類1のような働きをするものが多い)

追記

  • 矩形波の低音部分が鳴らない場合、4001Hと4005HにF8Hを書き込むと鳴ることがあります。
プログラム例: 48 A9 F8 8D 01 40 8D 05 40 68 4C ** **

  • PRG-ROM容量の限界などで、曲データがCHR-ROMに入っている強者があるので、一部の曲データが見つからない場合などはCHR-ROMを調べてみてください。

  • I/Oレジスタ4017Hの7ビット目によって、矩形波・三角波・ノイズチャンネルの音の長さが微妙に変わるので、4017Hは出来るだけ忘れずに初期化してください。 たいていは、a9 ** 8d 17 40 で初期化をしているので、検索ですぐに引っかかります。 中には初期化を行わないソフトがありますが、その時はファミコンの電源を入れた直後の値(多分00H)で初期化しておくと良いでしょう。
  4017Hの7ビット目が0の時の周期: 60, 120, 240 Hz
  4017Hの7ビット目が1の時の周期: 48, 96, 192 Hz


リンク



なお自作NSF関係はMCK Wikiあたりに詳細あり

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2019年02月21日 11:09
添付ファイル