ファミコンで「ギャプラス」ぽい物を動かしてみた時

ファミコン版「ギャプラス」を動画用に作成していた時のことです。

広告
広告1




ラスター割り込み位置が不安定になる

マッパーをMMC3と定義して作成したのですが最初のひな型を作った時には
正常に動いていたラスターによるBG分割がある時おかしな動きになっていることに
気が付きました。
これはnestopiaで実行したときに発覚したのですが、今まで正常に動いていたBG分割が
突然おかしな動きをし始める。なんだこれは?

よくよく動作を見てみると新たに追加した、通常弾を撃つと飛んでる間だけおかしな動作をする。
そして通常弾のプログラムを見てみるのだけど別段おかしなところはないように見える。
現にVirtuaNesやGNESではちゃんと意図したとおりに動いているのです。
追加したことといえばノーマル弾の処理の追加と使用するキャラが増えたのと
今後敵をスプライトで動かすためにキャラバンクの割り振りの見直しを行ったくらいです。

エミュ依存の動作の違いなのだろうかとその時は思い作業を続けていましたが、
ある程度仕様が載ったところで再度Nestopiaで実行したところ
(ここでもVirtuaNesやGNESでは意図した動きをしていた)
ゲームを開始すると以前では弾を撃った時だけだったのに対し
今のバージョンでは常にラスター位置が不規則な動きをするようになっていました。 

過去作「BLADE BUSTER」でも同じ症状があった。

なんじゃなんじゃと考えていると突然、以前「BLADE BUSTER」を初めて実機で動かした際、
ステータス表示で似たような現象が起こっていたのを思い出しました。
ところがその時どんなことで直したのかが思い出せない。(年だなあ)
最初のバグ発覚時に自分が修正したこと…………あ…。思い出しました。

原因はスプライト番号の指定方法

ファミコンはスプライトサイズを8×16で使用する場合、スプライト番号の偶数、奇数によって
本来BG側のキャラをスプライトとして使用することができます。
MMC3でラスター割り込みを使用する場合、この機能が制限され奇数での指定しかできなくなります。

私が現役の当時はMMC3なんて高級チップはよほどのラインでないとつかえなかったので
仕様書で見た程度でしたがたぶんこれが原因で指定禁止になっていたのだろうと
今は理解しています。

あとがき

原因はつかめました。問題はBG側を使用するということはそれだけスプライト側がきちきち
だということでしてまた再度キャラバンクの内容の見直しを余儀なくされ、
一時はもう断念まで考えましたがなんとか整合性が取れる配置とバンクの組み合わせを
思いついて修正し、無事Nestopiaでも意図した動作になりました。

PPUの動作がNestopiaが近いと思ったのはこのことだったと
「BLADE BUSTER」で感じたはずなのに結構忘れるものだなあ。

広告
広告1




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

広告
広告1