ドラクエ風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
・・・・・・・・・
⁂このプログラムは、C言語のfor文と同じです。