ドラクエ風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:はラベルで、アドレスを示しており、

行の先頭から、スペースを空けないこと。

これで、プログラミングが出来るようになりました、では今回はここまで😊