; We now have about 30,000 cycles to burn before the PPU stabilizes.
; One thing we can do with this time is put RAM in a known state.
; Here we fill it with $00, which matches what (say) a C compiler
; expects for BSS. Conveniently, X is still 0.
txa
@clrmem:
sta $000,x
sta $100,x
sta $300,x
sta $400,x
sta $500,x
sta $600,x
sta $700,x ; Remove this if you're storing reset-persistent data
; We skipped $200,x on purpose. Usually, RAM page 2 is used for the
; display list to be copied to OAM. OAM needs to be initialized to
; $EF-$FF, not 0, or you'll get a bunch of garbage sprites at (0, 0).
inx
bne @clrmem
基本的には、前述のすべてのアドレスを 0 で初期化し、x をインクリメントし、ラベルの先頭に戻り、すべてのアドレスを 1 で埋め、x を再度インクリメントし、BNE が false になるまで繰り返し発生します (したがって、ゼロ フラグが 1 の場合)。したがって、基本的に X が 0xFF のときに INX が発生すると、X は 0 になり (そうですか?)、BNE は false になり、分岐を停止してプログラムを続行します。残りの大部分は理解できますが、一見ランダムなメモリアドレスでこれを行うのはなぜですか? なぜ 0x000、0x100、0x200 などなのですか? そして、なぜこのループが 256 回も発生するのでしょうか? この後のコードは、プログラムが 2 番目の VBLANK (NES PPU 関連) を待っていることを示しています。約 30k サイクルを燃焼させる必要があると記載されていますが、なぜこのようになるのでしょうか。
注: コードを読んでいる間、注意を払っていなかったことが判明し、この質問をしたときに STA 命令が何をしたかを一瞬忘れてしまいました。上記の情報の一部は正しくありません。