ディレイスクロールはなぜ生じるのか

[簡単な説明]
1:画面右端か上、下に触れると今の部屋のスクロール位置がどこなのかを定期的にチェックしメモリの値をチェックする
2:このときディレイが生じると稀に部屋の位置の取得を勘違いしスクロールが可能と思い込みスクロールが生じる

[必要なもの]
・ディレイ
・音
・タイミング

[難しい説明]
$37=スクロール方向を決める値 1=上 2=右 3=下
$38=現在のマップはどこか知るための情報が格納される

1:部屋に入ると$38の値をチェックにいく(スクロール方向を知るため) Yレジスタに$38の値が格納される
2:$38を読み終わると、レベルデータを読みにいくためbankを切り替え処理が動く
3:bank切り替え中にディレイによってNMI(割り込み処理)がコールされる
4:NMIから戻るとbank切り替え(マッパーを再構築するプログラム)処理がNMIのプログラムが終了したことに気づき、音のコードを実行する
5:音のコードがYレジスタを書き換える(ここで間違いが生じる)
6:bank切り替え処理が書き換えられた後のYレジスタを読み込む
7:別のマップにいると思い込み下スクロールが生じる

※「FF」は簡単に全ての方向のスクロールを生じさせる。ビットマスクが全てのスクロールを網羅しているため。
 サウンドコードが運良く1Cを発生させるケースが多く、その後のYレジスタの結果が「FF」になるため生じることが多い

さらに詳しく知りたい方はこちら→162678#162678

[年表]
2005年12月 ワイリー2面でディレイ右スクロール発見
2006年2月 クワタさん、Bisqwit氏の調査により、同一のスクロール機構ではディレイ右、上スクロールしか生じないと思われると推定される
2006年12月 メカドラゴン戦中にディレイ右スクロールが見つかる
2006年12月 ディレイ下スクロールが見つかる
2007年 Shinryuu氏によりディレイ下スクロールを導入したTASが始まったものの、
botによるものを除いて20万回以上のトライで成功せずスタックに陥る
    Bisqwit氏や有志の解析でも糸口が見つからず
2008年3月19日 Snex9xの活躍とかみてて解析できるのはgochaさんしかいないと思いmixiで頼み込む
2008年3月29日 gocha氏とメッセで会話中に$38の値を適当に1〜3に書き換えるとメカドラゴン戦で下スクロールが生じる事に気づく
2008年3月30日 $37と$38にブレークを仕掛け成功例と失敗例の処理を見比べ
      デバッグを繰り返し828Bあたりの処理でYレジスタを「FF」に書き換えると下スクロールに変わることに気づく
http://www.yuko2ch.net/rockman/success_case.jpg
http://www.yuko2ch.net/rockman/failed_case.jpg

2008年3月31日 Bisqwit氏と共同で調査開始。メモリの値はどこから読み込んでいるのかというアプローチではなく、
       レジスタの値の変化に絞って処理を読み解きついにディレイ下スクロールがなぜ起きるか問題は解決へ