ファミコンのプログラム2
■ このスレッドは過去ログ倉庫に格納されています
0735名前は開発中のものです。
2007/09/04(火) 19:06:34ID: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でいいんじゃないか。
■ このスレッドは過去ログ倉庫に格納されています