
「PVSnesLib」という開発環境を使うと、C言語でスーパーファミコンのソフトが作れるようです。PVSnesLibの公式ページはこちらです。特に新しい話題というわけではないのですが、最近になって知ったので触ってみました。
PVSnesLibという名前からして、ライブラリを連想しますが、実際にはCコンパイラやアセンブラ、変換ツールも付いてきます。ただしmakeが付属していません。

公式のWiki(https://github.com/alekmaul/pvsneslib/wiki/Installation)によると、「Windows環境では、MSYS2 UCRT64 などのツールが必要」らしいので、「devkitPro」(https://devkitpro.org/)というツールチェインをインストールします。devkitProのインストーラを実行すると、「Switch」とか「NDS」とか「3DS」の名前が出てくるのですが、こんな新しいハードもソフトが作れるんでしょうか? これは危なそうなので、自分はチェックを全部外してインストールしました。大量のツールがインストールされるのですが、その中にmakeが含まれています。

PVSnesLibのreleasesのページからビルド済みのファイルをダウンロードして、展開します。自分の場合、展開した「pvsneslib」フォルダを「C:\devkitPro」の下に置きました。

システム環境変数に「PVSNESLIB_HOME」の項目を追加します。パスは「C:\~」じゃなくて、「/C/~」と書くようです。

PVSnesLibにはサンプルプログラムが60種類以上も収録されています。グラフィック表示、サウンド再生、マウス入力、SRAMバックアップなど一通り網羅してます。著作権的に問題ありそうな素材が混ざっているのが困りもの。

たとえば、「hello_world」というサンプルをビルドしたい場合、MSys2を起動して、、、
cd $DEVKITPRO/pvsneslib/snes-examples/hello_world
make
と入力します。これだけで、ROMイメージ(sfc)のファイルが出来上がります。MSys2じゃなくて、コマンドプロンプトやPowerShellでも実行可能ですが、「$DEVKITPRO」という表記が使えません。

「Visual Studio Code(VS Code)」を使って開発することも可能です。ここでは例として「Waves」というサンプルをビルドします。Wavesはsnes-examples\graphics\Effectsフォルダの中にあります。
VS Codeを起動したら、「フォルダを開く」を選択して、Wavesフォルダを開きます。もし、VS Codeのメニューが英語表記の場合は「Japanese Language Pack」の拡張機能を入れておきましょう。
Wavesフォルダ内にあるファイルは次の通りです。
・data.asm:リソースの割り付け設定のコード。アセンブラ。
・Waves.c:メインのソース。C言語。プロジェクトによってファイル名が違う。
・pvsneslib.png:BG画面のリソース。256×256ピクセル。
・Makefile:メイクファイル。
続いて、次のページから3つのjsonファイルを入手します。
https://github.com/alekmaul/pvsneslib/tree/master/vscode-template
jsonファイルを「.vscode」フォルダに入れた状態で、作業用のファイルと同じ階層に置きます。

「.vscode」フォルダの「c_cpp_properties.json」内で設定しているパスを修正します。自分の場合はこうなりました。
"pvsneslibPath": ["C:/devkitPro/pvsneslib/pvsneslib/include/**","C:/devkitPro/pvsneslib/devkitsnes/include"],
これで設定は終わりです。

続いて、ビルドをします。VS Codeのメニューから「ターミナル」→「新しいターミナル」を選択すると、ターミナルが表示されますので、「make」のコマンドを入力します。
makeを実行すると、変換ツールやCコンパイラが呼び出されて、最終的にROMイメージ(sfc)が出来上がります。ビルド中、画像から3つのバイナリファイルが生成されます。
・pvsneslib.pal:BGのパレット。バイナリ。1色あたり2バイトなので、16色で32バイト。
・pvsneslib.pic:BGのパターン。バイナリ。カラーモードは16色。
・pvsneslib.map:BGのタイルマップ。バイナリ。256×256ピクセル=32×32セルぶん。
バイナリファイルをどう生成するかという設定はMakefileに書いてあります。

「Waves.sfc」の中身をRomビューアでチェックしてみました。容量2メガビットですが、ほとんど「0」が書き込まれていて真っ黒です。

「Waves.sfc」をエミュレータで実行してみました。ラスタースクロールしてます。Aボタンを押すと揺れが止まります。Bボタンを押すと揺れが再開します。
ビルドするには毎回「make」と打たないといけません。これはカーソルキーの上を押せばいいだけですが、動作チェックで毎回エミュレータを実行しないといけないのが、面倒です。
思い付いた対策としては、拡張子の「sfc」をエミュレータに関連付けしておいてから、
こういう「run.bat」というバッチファイルを作っておいて、「.\run」と入力すれば、makeに成功した時だけ、エミュレータが自動的に呼び出されます。
(以下、番外編)

6年近く前に作ったフラッシュROM搭載のカートリッジ基板とライターです。
「DIY SFC CARTRIDGE」と呼んでいます。これを使ってROMイメージ(sfc)が実機のスーファミで動くか確認してみます。

ライターでフラッシュROMにROMイメージを書き込みます。以前はライターのプログラムは「PI STARTER」で作ったのですが、もう入手が難しいので、Pythonで書き直しました。

実機でも問題なく動きました。シェルは3Dプリンタで作りました。
プリント基板のデータと書き込み用のプログラムはGitHubで公開してます。
↓
続き