NSF(Nintendo Entertainment System Sound Format)とはファミコンのサウンドフォーマットである。
拡張規格にNSFEというものもある・・・が、残念ながら支流にならず流行っていない模様。
NSF作成
NSFを作成するには、6502(ファミコンで使われているCPU)の仕様を理解する必要があります。アセンブラ言語は、命令表など見ていけばある程度は理解できます。
プログラムに触れたことが無ければ難しそうに思えるかもしれませんが
命令といってもやっていることは基本的に足し算と引き算の繰り返しです。
他には
- Aという入れ物から数字を出し入れ
- Aという入れ物に入っている数字をBという入れ物に入れる
- Aという入れ物に入っている数字を元にして別の入れ物の数字を見に行きそこから出し入れ
などが主です。
これはファミコンに限らず他のクラシックハードでもあまり変わりはありません。
下記の用意するものを揃えたあとは
中学生程度の計算力と目的の処理を探す根気と時間さえあれば誰でもripperの一人になれるでしょう。
用意するもの
- ファミコンのエミュレータ(GNESなど)
- リアルタイムでメモリ内容が見ることができるもの、
- 逆アセンブル・ブレークポイントを設定できる機能のあるものなら便利。(無いときつい)
- NSFプレーヤー(VirtuaNesなど)
- リアルタイムでメモリ内容が見れるものがあれば便利。
- 上記二つの機能をどちらも兼ね備えているFCEUXかMesenがおすすめ
- 一括検索できるような逆アセンブラ
- バイナリエディタ
- 16進数の計算ができる電卓
作成方法
初期化アドレスの開始位置と、再生アドレスの開始位置を調べ、ヘッダを編集し、必要な部分のROMデータをNSFファイルにコピーすれば作成できます。
特別な処理が必要になる場合は、空いている部分にその処理を書けば大丈夫です。
開始位置を探す方法として、下のような方法があります。
- プログラムを実行し、メモリ内容を眺め、曲に合わせて値が増えていくアドレスを探す。
- そのアドレスに値が書き込まれたときにブレークするように設定する。
- ブレークした位置から処理の流れをさかのぼっていき、処理の開始位置を探す。
ソフトによっては、*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
リンク
- Famicom開発室 (すずめ愛好会内)
- NesDev
- NES Music Format Spec
- 気まぐれトークステーション > ピコピコ音で遊ぼう
- NES Music Ripping Guide
- NSFripperへの道
- Htmlファイルまとめzip
- Izumi.氏による比較的分かりやすい日本語NSFリッピング解説。
- 元サイトはここかここと思われるが、現時点で左は消滅(アーカイブもなし)・右はmckに関する情報しか掲載していない。
- Home Page of Gil Galad > NSF ripper Guide
- パソファミ NSF(Nes Sound Format/File)の自動作成機能
最終更新:2019年02月21日 11:09