スプライトRAMの一つのスプライトデータは、4バイトで構成されることを第5章で説明しました。 ファミコンはスプライトを最大64個表示できます。4×64=256(10進数)=$100(16進数)の領域が必要になるので、 DMAでスプライトRAMに転送する$100分のRAMを確保します。どこに確保すれば良いのでしょうか?
第1章で、ユーザーが自由に使えるRAMは$0000〜$07FFまでと説明しました。$0000〜$00FFはゼロページなので使用したくはありません。 $0100〜$01FFはスタック領域です。というわけで、$0200以降をスプライト用のバッファにします。
.bank 0 ; バンク0 .org $0300 ; $0300から開始、スプライトDMAデータ配置 Sprite1_Y: .db 0 ; スプライト#1 Y座標 Sprite1_T: .db 0 ; スプライト#1 ナンバー Sprite1_S: .db 0 ; スプライト#1 属性 Sprite1_X: .db 0 ; スプライト#1 X座標 Sprite2_Y: .db 0 ; スプライト#2 Y座標 Sprite2_T: .db 0 ; スプライト#2 ナンバー Sprite2_S: .db 0 ; スプライト#2 属性 Sprite2_X: .db 0 ; スプライト#2 X座標 .org $8000 ; $8000から開始 Start: ; プログラム本体はここからそして、DMA転送する予定のスプライトデータをを更新します。その後スプライトを更新したいタイミングで、$4014レジスタに転送するRAMのアドレスの百の位を書き込みます。 以下の例では、$0300番地からのスプライトデータをDMA転送しています。
; スプライト描画(DMAを利用) lda #$3 ; スプライトデータは$0300番地からなので、3をロードする。 sta $4014 ; スプライトDMAレジスタにAをストアして、スプライトデータをDMA転送する第8章のサンプルをスプライトDMAを利用するように直しました。これをダウンロードして、nesasm giko009.asmでアセンブルしてください。 8x8を2つつなげたスプライトを動かすことができます。
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||