pornanime.2015-04-05スーパーファミコンのプログラムを書きたい2016/04/06追記はてなブックマークの「一年前の話題」だとかでやたら人が来てたので、一年前の一年後(つまり今)の状況を記しておきます。大学ではなくスーパーファミコンのことである。いいからスーファミでピコピコしてろよな。2015スーパーファミコンを買ってもらったのは小学校に上がった頃か、日焼けして真っ茶色になってはいるが未だに動作し、手元に置いてある。共に育ったマシンなので美しい思い出を語っては上のように若造に馬鹿にされているのだが、よく考えるとこれだけ思い入れの深いスーパーファミコンで動くプログラムを書いたことはなかった。プログラマーとしてこれは誠実ではない、ということで書くことにした。普通に検索して出てくる情報を頼りにする。任天堂公式のドキュメントではないので、同じものをサイトによって別の言葉で指していたり、欠落している情報があったり、といった難がある。試行錯誤でカバーしていきましょう。開発言語に関しては、Cコンパイラを使う方法もあるようだけど、もちろん野良SDKだし却って泥沼にはまりそうなので、素直にアセンブリで書いていく。スプライト/BGデータはこんな感じ。便利なことに、makeして出てきたバイナリはもうエミュレータで起動できる状態になっている。......左右に動かせる。Bボタンを押すと「がんばるぞい」......はい、これだけ。いや、さすがにゲームを一本作るのはね。ちなみに、画面の左端よりもさらに左に移動できる(つまりx座標をマイナスにできる)が、これは結構面倒臭い。スーファミのゲームでこういうシーンを見つけたらプログラマーの苦労を偲ぼう。これはSFC本体にROMのフリをしてイメージファイルを読ませる装置で、要するにマジコンの類。税関に没収されないか心配だったけど、無事通過した。ちなみに後で調べたところ、輸入禁止になっているのはDS用のみ名指しで、ということらしい。動作チェックに使ったと思われるドラゴンボールZのゲームがそのまま入っていたのは見なかったことにする。SDカードにイメージファイルを入れて、いよいよ電源投入。あれ......上の動画ではさもサクッと動いたかのように編集しているが、実はこんなことになっていた。これは深刻なバグではなく、BGやスプライトの管理メモリをクリアするのを忘れていただけ。エミュレータでは勝手にクリアしてくれるので見落としていた。ムム......静止画だと問題ないように見えるけど、動きがガクガクしている。処理落ちしているわけではなくて、パッドの入力を取りこぼしている様子。試してみた結果、パッドからのデータ受信完了を待つ処理を1回ではなく3回に増やすと取りこぼしが無くなった。