ドラクエ風RPGファミコンプログラム パレットの設定完全版

第20回
【パレットの設定完全版】

.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 #$3f
sta $2006
lda #$00
sta $2006
;********* PALETT SET ***************************
  ldx #0
pal_loop:
  lda pall,x
  sta $2007
  inx
  cpx #32
  bne pal_loop
;************************************************
loop000:
jmp loop000
;******** PALETTE DATA **************************
pall:
.db $0fpall:
.db $0f,$30,$33,$22
.db $0f,$00,$01,$02
.db $0f,$03,$04,$05
.db $0f,$06,$07,$08
.db $0f,$09,$21,$22
.db $0f,$23,$24,$25
.db $0f,$26,$27,$28
.db $0f,$11,$12,$13

⁂プログラムの解説

ldx #0    ;Xレジスタに即値0を入れる。

pal_loop:   ;ラベル分岐命令のポイントアドレス

lda pall,x    ;AレジスタにpallのアドレスにXレジスタを加えた番地からロードする。

sta $2007         ;パレットデータをデータレジスタに書き込む。

inx                    ;Xレジスタを+1(インクリメント)する。
cpx #32            ;Xレジスタと即値32を比較して結果をステータスレジスタに保持する。
bne pal_loop   ;同じでなければ、pal_loopへジャンプ、それ以外は、loopをぬける。

pall:                  ; パレット先頭アドレスのラベルとDATA         
.db $0f,$30,$33,$22

・・・・・・・・・

f:id:chien1956:20200108190747p:plain

⁂このプログラムは、C言語のfor文と同じです。