ドラクエ風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 をセットして、呼び出しています。