ドラクエ風RPGファミコンプログラム講座

NES アセンブラプログラミング編】

【 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】

 が水平ミラーリングとなります。

 

f:id:chien1956:20200225180148p:plain

【画像1】

f:id:chien1956:20200225180212p:plain

【画像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 が設定されています。

 

f:id:chien1956:20200225192118p:plain

〖スタックポインタ〗

*スタックポインタについては、前回詳しく解説したのでコードのみ

 記載しておきます。

Start:

sei

cld

ldx #$ff

txs

*今回は、ここまでにして次回続きをやります。