レーザーのnameTableの裏画面コピー処理をスクロール対応しようとしてる

32個固定コピーなのはそのままでも良くて、Xスクロール値を見て適切な画面からコピーしてくる処理を挟む、単純なアルゴリズムで良さそうということは分かったが、レーザーのバッファコピーの処理に何か足すと画面スクロールが壊れる

NOPを足すだけでも起きるのでタイミング系の問題っぽい

プログラムが$8000番台を超えて$9000番台に突入して壊れてるのかと思ったけど違った

 

VBlankに間に合わなくなって周期的にIRQの発生が遅れてる感じの挙動に見えるが、レーザーのバッファコピー処理はVBLankの後なので関係ないはず?(でもここが怪しい)

 

と思ったら、postMainProcの処理が溢れてるだけだった。NOP列を128回ループしてたのを100回に減らしたら安定した。途中処理の変動が激しくなって固定ループだと安定して待てないのが原因。ここもirqにすべきだ

 

でもこの後、やはり

プログラムが$8000番台を超えて$9000番台に突入して壊れる現象が起きた。パレットが末端にあるので、命令を足すとパレットが壊れはじめた。やっぱりPRGのバンク切り替えも避けては通れなそう

 

バンク切り替えの解説はここがわかりやすかった。末端から2バンクめ、みたいな概念もあるらしい。ちゃんと調べよう

nesdoug.com