ドラクエ風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をやります。