# 🎨 カラーパレット(CGBモードのみ) CGBでは64バイトのパレットメモリが、BG用とOBJ用に合計2つ存在しますが、CPUアドレス空間にはマッピングされておらず、専用のレジスタを介してアクセスする必要があります。 ## FF68 - BCPS/BGPI - BGパレットインデックス ``` Bit 0-5 インデックス (00-3F) 7 オートインクリメント (0=無効, 1=書き込み後にインクリメント発生) ``` このレジスタは、CGBにおいてBGパレットメモリのアドレスを指定するために利用します。 上で述べたようにBGパレットメモリは全部で64バイトで、4色のパレットが8つ分格納されています。 ``` Byte 0 BGP0 Byte0-1: 色番号0の色データ Byte2-3: 色番号1の色データ Byte4-5: 色番号2の色データ Byte6-7: 色番号3の色データ 8 BGP1 16 BGP2 ... 56 BGP7 ``` BGパレットメモリのインデックスを指定した後は、後述の`BCPD/BGPD`レジスタを介して、BGパレットデータを読み書きすることができます。 オートインクリメント(bit7)が1の場合、FF69への書き込みごとにインデックスが自動的にインクリメントされます。FF69からの読み出し時にはオートインクリメントの効果はないので、その場合は手動でインデックスをインクリメントする必要があります。レンダリング中にFF69に書き込んでも、オートインクリメントは発生します。 ## FF69 - BCPD/BGPD - BGパレットデータ このレジスタには、`BCPS/BGPI`レジスタで指定されたアドレスでのデータがマッピングされます。つまり、このレジスタを読み書きすることでパレットメモリにアクセスすることができます。 各色はリトルエンディアンのRGB555フォーマットで表されます。 ``` Bit 0-4 赤(0..31) 5-9 緑(0..31) 10-14 青(0..31) ``` ## FF6A - OCPS/OBPI - OBJパレットインデックス BGパレットと内容は同じです。 ## FF6B - OCPD/OBPD - OBJパレットデータ BGパレットと内容は同じです。 ただし色0は透明を表すことには注意してください。