- 735 名前:名前は開発中のものです。 mailto:sage悩むんだこれ [2007/09/04(火) 19:06:34 ID:P2wzBusB]
- ↑は任天堂のゲームには入ってるかな。スクロール値をリセットするおまじないだ。
スクロール値って実はPPUアドレスそのものだから、$2006や$2007にアクセスすると、スクロール値が勝手に変っちゃう。 それを、VBLANK期間に VRAM転送が終わったら、VBLANK期間から出るより前にリセットする必要がある。 >>734のコードでリセットした直後に、最初のスキャンラインの自分が求めているスクロール値を$2005に書き込むべし。 ヒントや詳細は、 The Skinny on NES Scrolling NTSC 2C02 technical reference らを読むべし。難しいから分らないなら読まなくてよし。 >>732を読んでて、ぱっと見、明らかに悪いとこや勘違い?がある。今のうちに癖を直さないとそのうち、つまずく。 VirtuaNESでまともに動けばそこそこ安心と思うべし。動かないなら作法が悪い。 NMIルーチン入ったらVBLANK期間が終わらないうちに小規模なBG転送と、sta $4014のみに専念するべし。 VBLANK期間は短いので、NMIの直後は時間を無駄にしないこと。 ⇒Main: が長すぎて、sta $4014がVBLANK期間内に終わらないんじゃないか? 動作しちゃうでしょうけど、あまり(・A・)イクナイ!! NMIルーチン直後の定説は、まずSPRDMA、次にBG小転送。 VBlank: 内でBGの初期化(=大量転送)をやってる ⇒BGやSPRオフにしてさえいれば、BGの初期化はReset: 内でもok。 むしろBGやSPRの初期化は長くなりがちだからReset: でやるべき。 BG, SPR, NMIなどを再びオンにする前にVBLANKを待った方がいいかも。 jsr PadGetは⇒ 「スプライトとBGの表示をONにする」の直後に書くべき。 Main: 内の位置更新作業も同様に⇒ 「スプライトとBGの表示をONにする」の直後に書くべき。 .org $0600 sprdma: .db 0 ⇒他のアセンブラならアリでしょうが、NESASMしょぼいから、.orgやたらにやらないほうがいいかも。 NESファイルに実体確保しちゃったりして、思わぬアドレスのズレやコンパイルミスが起こりうる。 RAM上の変数定義だけなら=や.equでいいんじゃないか。
|

|