ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編
【第45回】
『ゲームメインとシーンコントロラー』
*ゲームメインの構成
1.VBlank割り込みを許可する。
lda #%10001000
sta $2000
⁂VBlank割り込みを許可するには、PPU$2000の7bitを1にします。
2.空ループを作る。
lda #%10001000
sta $2000
lda #%00011000
sta $2001
loop000:
jmp loop000
3.割り込みベクターに設定したアドレスに割り込みルーチンを作る。
.bank 1
.org $FFFA
.dw main000; VBlank割り込み
.dw Start ; リセット割り込み。起動時とリセットでStartに飛ぶ
.dw IRQ ; ハード
main000:
jsr scene_control
jsr CT_print
rti
4.割り込みからの帰還にRTIを使う。
main000:
jsr scene_control
inc CT
rti
5.ゲームメインを制御するシーンコントロラーを設置する。
scene_control:
lda scene
cmp #0
beq JT0
cmp #1
beq JT1
cmp #2
beq JT2
cmp #3
beq JT3
cmp #4
beq JT4
cmp #10
beq JT10
cmp #11
beq JT11
rts
JT0: jmp title
JT1: jmp player_pr
JT2: jmp command
JT3: jmp battle
JT4: jmp window
JT10:jmp wait
JT11:jmp cls
⁂上記のようなC言語のCASE文と同じ構造です、下の方にJMPテーブルをおいたのは
数が多くなると、ブランチ命令では届かなくなるからです。
6.サブルーチンの構造
画面描画等のサブルーチンには、分割する必要があるものが多く、
呼び出す部分と本体にわかれます、呼び出し部分ではカウンタや各種変数を
セットし、本体は、セットされたDATAで制御されます。
lda #$ff
sta wait_ct
lda #10 ;wait
sta scene
rts
⁂ID 10 の wait をセットして、呼び出しています。