ドラクエ風RPGファミコンプログラム講座
【 TEST用プログラムの作成 】
* TEST用プログラムとは、最小限の初期化のみで最後は無限ループで終わる
プログラムで、サブルーチンの試験用で使っているものです。
≪プログラムの構成≫
⑴ ヘッダファイルの設置
⑵ 割り込みベクターの設定
⑶ スタックポインタの設定
⑷ パレットの設定
〖 ヘッダファイル〗
*ヘッダファイルとは、エミュレーターにROMカセットの情報を伝えるもので
主にマッパー関係の情報で当講座ではマッパー0しか扱わない予定なので特に
気にしなく手も大丈夫です、強いて言えばミラーリングだけ理解していた方が
いいと思います。
.inesprg 1
.ineschr 1
.inesmir 0
.inesmap 0
*上記のヘッダは、NESASMの疑似命令で4行の命令が正規のヘッダファイルに
変換されます、正規なヘッダファイルとは16byteで構成されていて、最初の3文字
はNESから始まります、その他はミラーリングとマッパーの情報になっています、
ここでは詳しい解説はしません。
上の2行は、4行目のマッパー0では1になります(BANK 切り替え無し)3行目は
ミラーリングで、下の画像で分かる通り【画像1】が垂直ミラーリング【画像2】
が水平ミラーリングとなります。
【画像1】
【画像2】
〖 割り込みベクター〗
* 割り込みベクターとは、CPUの割り込み処理のJMPアドレスを書いて置く場所で
ファミコンでは、3つあり$FFFAからの6byteになります。
.bank 1
.org $FFFA
.dw game_main
.dw Start
.dw IRQ
*1行目の .bank1は、メインメモリーの $0000~$BFFF はBANK0 $C000~$FFFF
がBANK 1となっています。
2行目の .org $FFFA は、$FFFAからコードを書くという疑似命令です。
.dw は2byte(ワード)の領域を確保するという疑似命令です。
game_main はVBlank割り込みルーチン、Start はファミコン起動時やリセットボタン
が押されたときにJMPするアドレス、IRQ はBANKやハード割り込みのJMPテーブル
です、取り敢えずは Start だけ書いておけば十分でしょう、VBlank割り込みと
IRQ は、使わなくともゲームプログラミングはできます。
先ずは、基礎力をつける方が先決だと思います。
下の画像は、筆者の開発中の割り込みベクターですが、$FFFA から6BYTEが
設定されているのが分かると思います。Stat のベクタ $8000 が設定されています。
〖スタックポインタ〗
*スタックポインタについては、前回詳しく解説したのでコードのみ
記載しておきます。
Start:
sei
cld
ldx #$ff
txs
*今回は、ここまでにして次回続きをやります。