ドラクエ風RPGファミコンプログラム講座 ゲームシステム編

第30回
*今回で30回をかぞえます、急いで走り抜けたので
 まとまりの無い内容になったかと思います
 いままでの回も見直す時期に来たように感じます、
 少しずつ修正したいと思います。
 
【ゲームとメインループ】
*ゲームループは
 ゲームシステムには、欠かせないもので、
 ファミコンでは、VBlank割り込みを利用するのが
 一般的です。
『VBlank割り込み』
*VBlank割り込みとは、VBlank時にCPUに割り込みがはいり
割り込みベクトルの$fffaに書かれた番地(メインループ)にジャンプする、
それが1/60秒ごとに起こります、メインループ内に描画処理等を書くことに
なります。
【TEST用プログラム】
*TEST用プログラム全リストと解説をします。
;*******************  HEADER ********************
.inesprg 1 ;プログラミングのバンク数。
.ineschr 1 ;キャラクターデーターのバンク数。
.inesmir 0 ;ミラーリング  0.水平  1.垂直
.inesmap 0 ;マッパーナンバー
;************************************************
*header は、ミラーリングは水平に設定。
;***************** 割り込みベクター ******************
.bank 1
.org $FFFA

.dw main000 ; VBlank 割り込み
.dw Start ; リセット 割り込み
.dw IRQ ; break 割り込み
;***********************************************
ベクターを上記の通り全てセットする。
;*************** プログラム開始位置 ******************
.bank 0 ; バンク0
.org $8000 ; $8000から開始
Start:
sei ; 割り込み不許可
cld ; デシマルモードフラグクリア
ldx #$ff
txs ; スタックポインタ初期化

lda #$00    ;画面表示をOFFにする。
sta $2000
sta $2001
;jsr VB0
jsr palette
jsr zero_init

lda #$88       ;VBlank割り込みを許可
sta $2000
lda #%00011000
sta $2001
loop0000:          ;このループで、VBlankを待ち、main000へJMP
jmp loop0000
;******************* ライブラリープログラム *****************
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
scroll_zero:
lda $2002
lda #$00
sta $2005
sta $2005
rts
zero_init:
lda #0
tax
lp00:
sta <$00,x
inx
bne lp00
rts
VB0:
lda $2002
bpl VB0
rts
IRQ:
rti
;*****************TEST用プログラム******************
test:
rts

;***************** メインループ *********************
main000:
inc $00     ;カウンターインクリメント(ループ作動試験用)
rti
;******************** DATA **************************
pall:
.db $0f,$10,$00,$16
.db $0f,$10,$00,$16
.db $0f,$03,$04,$05
.db $0f,$06,$07,$08
.db $0f,$35,$30,$12
.db $0f,$26,$24,$25
.db $0f,$26,$27,$28
.db $0f,$11,$12,$13
sp_data:
.db 100, 0, 0,100
.db 100, 0,$80,100
.db $64,$02,$00,$64
.db $6c,$00,$00,$6c
.db $64,$00,$00,$64
.db $64,$00,$80,$6c
.db $0f,$03,$80,$28
;*************** PATTERUN DATA ***********************
.bank 2
.org $0000
.db $00,$00,$00,$00,$00,$00,$00,$00,$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 ;H
.db $00,$7e,$40,$40,$7c,$40,$40,$7e,$00,$00,$00,$00,$00,$00,$00,$00 ;E
.db $00,$40,$40,$40,$40,$40,$42,$7e,$00,$00,$00,$00,$00,$00,$00,$00 ;L
.db $00,$3c,$42,$42,$42,$42,$42,$3c,$00,$00,$00,$00,$00,$00,$00,$00 ;O
.db $00,$42,$62,$52,$5a,$4a,$46,$42,$00,$00,$00,$00,$00,$00,$00,$00 ;N
.db $00,$3c,$42,$40,$3c,$02,$42,$3c,$00,$00,$00,$00,$00,$00,$00,$00 ;S

*次回からは、メインループを使ってライブラリーの作成・検証します。