ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編
第24回
*今回は、初期化の最終段階のゼロページの初期化です。
【ゼロページの初期化とVBlank】
『ゼロページの初期化の初期化』
*ファミコンは変数として使われるゼロページ($0000 - $00FF の256バイト)を初期化する必要があります。
(実例コード)
zero_init:
lda #0
tax ;AレジスタをXにコピーする。
lp00:
sta <$00,x ;ゼロページにXを加算したアドレスの値をAレジスタにロード
inx ;Xに +1する。
bne lp00 ;Xが0の時ループをぬける、でなければlp00へJMP
rts ;サブルーチンからの帰還
『VBlank』
*VBlankとは、PPUが1画面を表示し終わり次の表示に移る時に、
僅かにアイドルタイムがあります、それをVBlankと言います、
アドレスレジスタ $2006 にアクセスするには、VBlankの期間に
する必要があります、でないと画面表示が乱れます。
(実例コード)
VB:
lda $2002 ;VBlank待ちループ
bpl VB ;Aレジスタの7bitが1のときループをぬける
rts
【 コードの再掲載】
Start:
sei ; 割り込み不許可
cld ; デシマルモードフラグクリア
ldx #$ff
txs ; スタックポインタ初期化
ldx #%00001000
sta $2000
ldx #%00000000
sta $2001
jsr VB0
jsr palette
jsr zero_init
lda #0
sta $2003
lda #100
sta $2004
lda #0
sta $2004
lda #0
sta $2004
lda #100
sta $2004
ldx #%00001000
sta $2000
lda #%00011000
sta $2001
loop000:
jmp loop000
;********サブルーチン*************************
palette:
jsr VB0
lda #$3f
sta $2006
lda #$00
sta $2006
ldx #0
pal_loop:
lda pall,x
sta $2007
inx
cpx #32
bne pal_loop
rts
zero_init:
lda #0
tax
lp00:
sta <$00,x
inx
bne lp00
rts
VB0:
lda $2002
bpl VB0
rts
;*******************************************
pall:
.db $0f,$30,$33,$22
.db $0f,$00,$01,$02
.db $0f,$03,$04,$05
.db $0f,$06,$07,$08
.db $0f,$09,$21,$22
.db $0f,$23,$24,$25
.db $0f,$26,$27,$28
.db $0f,$11,$12,$13
;******************************************
.bank 2
.org $0000
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $20,$30,$38,$3C,$3C,$38,$30,$20,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$42,$42,$42,$7E,$42,$42,$42,$00,$00,$00,$00,$00,$00,$00,$00
*次回は、お待たせのBGをやります。