今度こそ、背景にパレットの指定をして文字の色を変えてみます✊
前回作った「안녕하세요」を表示するプログラム。
今回はこれの「녕」を白に、「세」を茶色に変えてみようと思います。
ファミコンの色
ファミコンでは$00~$3Fまでの64色が指定できるみたい。
でも右の方の黒とか灰色とか白とか同じになっちゃって、使える色数的には52色ってことみたい。
いつか実機で自作プログラムが動かせるようになったら全色表示して色見本を作りたいなあ~
4色のパレットが背景用4つ、スプライト用4つ。うち色1は全パレットで共通(背景用は背景色・スプライト用は透明色)の1色だから、同時に使える色は3×8+1=25色!なのかな?
こんど、25色同時に表示してみようっと✊
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |
| 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
※ YY-CHR pal_nes_nesdev_palette_misaki171204.palの色です。
パレットの設定し直し
前回は文字(안녕하세요)を青で表示するため背景用パレット1のみを設定しました。
今回は3色分、3パレット(と背景色設定のためスプライト用パレット1)を設定します。
スプライト用パレット1以外の色1には何を指定しても意味がないんですが、通常は$0Fをセットしておくみたいです。
| 色1 | 色2 | 色3 | 色4 | |
|---|---|---|---|---|
| 背景用パレット1 | 0F | 11 | 00 | 00 |
| 背景用パレット2 | 0F | 20 | 00 | 00 |
| 背景用パレット3 | 0F | 17 | 00 | 00 |
| 背景用パレット4 | 0F | 00 | 00 | 00 |
| スプライト用パレット1 | 29 | 00 | 00 | 00 |
これに基づいてパレットを設定し直したものがこちら。
;パレットの設定LDA #$3FSTA $2006LDA #$00STA $2006;背景用パレット1LDA #$0FSTA $2007LDA #$11 ;文字色を$11(青)にSTA $2007LDA #$00STA $2007STA $2007;背景用パレット2LDA #$0FSTA $2007LDA #$20 ;文字色を$20(白)にSTA $2007LDA #$00STA $2007STA $2007;背景用パレット3LDA #$0FSTA $2007LDA #$17 ;文字色を$17(茶)にSTA $2007LDA #$00STA $2007STA $2007;背景用パレット4LDA #$0FSTA $2007LDA #$00STA $2007STA $2007STA $2007;スプライト用パレット1LDA #$29 ;BGの背景色・スプライトの透明色を$29(黄緑)にSTA $2007LDA #$00STA $2007STA $2007STA $2007
パレット割り当ての書き出し
前々回「背景書き出し」をした時と同じように、画面のどこにどのパレットを割り当てるのかを書き出します。
背景書き出しの時は下の表の各アドレスに対して背景を指定しましたが、
パレットを割り当てる時は赤文字のアドレス(赤い太枠の8×8の範囲)に対して、4×4ブロックづつ、右下・左下・右上・左上の順に背景用パレットを2ビットづつで指定していきます。
今回は「녕」(23DBの左下、背景の21CC, 21CD, 21EC, 21ED)にパレット2を、
「세」(23DCの左下、背景の21D0, 21D1, 21F0, 21F1)にパレット3を、
それ以外のアドレスにはパレット1を割り当てるので、下記のようになります。
;属性テーブル書き出し(パレット割り当て);23C0-23DALDA #$23STA $2006LDA #$C0STA $2006LDA #%00000000 ;右下、左下、右上、左上LDX #27 ;8x3+3Z_C0:STA $2007DEXBNE Z_C0;23DBLDA #%00010000 ;右下、左下、右上、左上STA $2007;23DCLDA #%00100000 ;右下、左下、右上、左上STA $2007;23DD-23FFLDA #%00000000 ;右下、左下、右上、左上LDX #35 ;3+8x4Z_DD:STA $2007DEXZ_DD
背景書き出しの時と同じように、$2006番地に開始アドレスを2つに分けて続けて格納するとパレット割り当て書き出し準備完了。
あとは$2007番地に表示する背景を指定していきます。
いちおう全文載せときます![]()
;##################################################################################################; Famicom Programming "original" ©2023 gocchan.com;##################################################################################################START:LDA $2002BPL START;PPU初期化LDA #%00001000STA $2000LDA #%00000110STA $2001;パレットの設定LDA #$3FSTA $2006LDA #$00STA $2006;背景用パレット1LDA #$0FSTA $2007LDA #$11 ;文字色を$11(青)にSTA $2007LDA #$00STA $2007STA $2007;背景用パレット2LDA #$0FSTA $2007LDA #$20 ;文字色を$20(白)にSTA $2007LDA #$00STA $2007STA $2007;背景用パレット3LDA #$0FSTA $2007LDA #$17 ;文字色を$17(茶)にSTA $2007LDA #$00STA $2007STA $2007;背景用パレット4LDA #$0FSTA $2007LDA #$00STA $2007STA $2007STA $2007;スプライト用パレット1LDA #$29 ;BGの背景色・スプライトの透明色を$29(黄緑)にSTA $2007LDA #$00STA $2007STA $2007STA $2007;ネームテーブル書き出し(背景タイル)LDA #$20STA $2006LDA #$00STA $2006;1-7行めLDA #$16LDX #224 ;32x7BG1:STA $2007DEXBNE BG1;8-15行めLDA #$16LDX #234 ;32x7 + 10BG8:STA $2007DEXBNE BG8;上段11キャラクター分LDX #$00 ;1つ目の背景(00H)からTOP:TXASTA $2007INXCPX #$0BBNE TOPLDA #$16LDX #21 ;10 + 11BGYOHAKU:STA $2007DEXBNE BGYOHAKU;下段11キャラクター分LDX #$0B ;12枚目の背景(0BH)からBOTTOM:TXASTA $2007INXCPX #$16BNE BOTTOM;16-23行めLDA #$16LDX #235 ;11 + 32x7BG17:STA $2007DEXBNE BG17;24-30行めLDA #$16LDX #224 ;32x7BG24:STA $2007DEXBNE BG24;属性テーブル書き出し(パレット割り当て);23C0-23DALDA #$23STA $2006LDA #$C0STA $2006LDA #%00000000 ;右下、左下、右上、左上LDX #27 ;8x3+3Z_C0:STA $2007DEXBNE Z_C0;23DBLDA #%00010000 ;右下、左下、右上、左上STA $2007;23DCLDA #%00100000 ;右下、左下、右上、左上STA $2007;23DD-23FFLDA #%00000000 ;右下、左下、右上、左上LDX #35 ;3+8x4Z_DD:STA $2007DEXZ_DD;スクロール設定(背景のスクロール座標を0,0にセット?)LDA #$00STA $2005STA $2005;書き出した内容を画面に表示LDA #%00011110STA $2001
で、例の手順でアセンブル➝テキストファイル結合➝バイナリ化してエミュレーターで実行。
思った通り色を変更することが出来ました。
参考文献
魔法使いの森.“ファミコンの画面について”.https://www.wizforest.com/OldGood/ntsc/famicom.html
AnayaSoft.“ファミコンゲーム製作入門(SPECIAL版)“.書籍
ギコ猫でもわかるファミコンプログラミング.“第4章 パレット”.http://gikofami.fc2web.com/nes/nes004.html
NES研究室.“6502”.http://hp.vector.co.jp/authors/VA042397/nes/6502.html


