ドラクエ風RPGファミコンプログラム
第8回目
【第7章 NESの初期化】
* 初期化プログラムは、今のところは、無理に理解する必要はないので、
例のオマジナイということで,簡単な説明にとどめておきます。
1. ヘッダーの設置
*ヘッダーは、プログラム先頭に記述します、 .の前には、TAB 又は
SPEACE を2つ分空けてこと, ; 以降はコメントです。
.inesprg 1 ;プログラミングのバンク数。
.ineschr 1 ;キャラクターデーターのバンク数。
.inesmir 1 ;ミラーリング 0.水平 1.垂直
.inesmap 0 ;マッパーナンバー
2. 割り込みベクターの設定
*割り込みベクターとは、リセットボタンが押されたときCPUに割り込みの
要求かかります、そのときに割り込みベクターに書かれたアドレスにジャンプ
します、割り込みベクターには3種類あって他にVBlank、breakがあります
割り込みベクターは、バンク1に割り当てられていて FFFA番地から6バイト
になります。
.bank 1
.org $FFFA
.dw 0 ; VBlank 割り込み
.dw Start ; リセット 割り込み
.dw 0 ; break 割り込み
3. スタックポイントターの初期化
.bank 0 ; バンク0
.org $8000 ; $8000から開始
Start:
sei ; 割り込み不許可
cld ; デシマルモードフラグクリア
ldx #$ff
txs ; スタックポインタ初期化
4. PPUの初期化
*PPUは(Picture Processing Unit)の略で、CPUとは別のメモリ空間を持ち、
背景やスプライトの描画を行います。
CPUからPPUを操作するには、PPUコントロールレジスタに値を設定します,
コントロールレジスタは、$2000~のI/Oポートに配置され、BIT単位に
意味を持っています。
lda #%00001000
sta $2000
lda #%00011110
sta $2001
【$2000】の設定内容
・VBlank時のNMI割り込みを実行しない
・スプライトは8x8ドット
・BGパターンテーブルは$0000から
・スプライトパターンテーブルアドレスは$1000から
・PPUアドレスは1づつ加算
・ネームテーブルアドレス番号は$2000
【$2001】の設定内容
・背景無し
・スプライト表示
・BG表示
・スプライトクリップ無し
・BGクリップ無し
・カラーディスプレイ
5. パレットの設定
*ファミコンのパレットは、54色中、同時に16色を使用できます。
パレットデータの書き込みは、VRAM(PPUのアドレス空間)の$3F00以降に
読み込みます。
そのためにはまず、VRAMアドレスレジスタの$2006に、
ロード先のアドレス $3F00を書き込みます。
しかしレジスタのサイズは8ビットなので、以下のように2回に分けて
書き込みます。
この後、 VRAMアドレスレジスタの$2007に、パレットの値(1バイト)を
書き込みます。
書き込むたびに対象が次のアドレスに自動的に移るので、
必要な数だけストアを繰り返せば良い。
lda #$3F
sta $2006
lda #$00
sta $2006
lda #$0F
sta $2007
lda #$30
sta $2007
lda #$11
sta $2007
lda #$21
sta $2007
*上記はパレット 1つ分だけ設定
【サンプルプログラム】
;*********************初期化**********************
.inesprg 1 ;プログラミングのバンク数。
.ineschr 1 ;キャラクターデーターのバンク数。
.inesmir 1 ;ミラーリング 0.水平 1.垂直
.inesmap 0 ;マッパーナンバー
;************************************************
.bank 1
.org $FFFA
.dw 0 ; VBlank 割り込み
.dw Start ; リセット 割り込み
.dw 0 ; break 割り込み
.bank 0 ; バンク0
.org $8000 ; $8000から開始
;************************************************
Start:
sei ; 割り込み不許可
cld ; デシマルモードフラグクリア
ldx #$ff
txs ; スタックポインタ初期化
lda #%00000000
sta $2000
lda #%00000000
sta $2001
VBlank:
lda $2002
bpl VBlank
lda #$3F
sta $2006
lda #$00
sta $2006
lda #$0F
sta $2007
lda #$30
sta $2007
lda #$11
sta $2007
lda #$21
sta $2007
lda #%00001000
sta $2000
lda #%00011110
sta $2001
loop000:
jmp loop0
*うえのサンプルをエディターに記述して、コンパイルしてください。
エミュレーターで、実行してDebugのPPU Viewerを見てください、
パレットが設定されているはずです。
* .で始まる疑似命令は、行の先頭から、スペース2個分又はTABを
いれてください、 Start:はラベルで、アドレスを示しており、
行の先頭から、スペースを空けないこと。
これで、プログラミングが出来るようになりました、では今回はここまで😊