YJK方式

ちょっと前に現実逃避してMSX2+の自然画モード(SCREEN12で19268色・SCREEN10で12499色が同時表示可能というスペック)が突然気になって調べていたんだけど、

 SCREEN 12では、横4ドットを1組みとするYJK方式が使われる。図4.6のY0か
らY3までは、各ドットの明るさを5ビット(つまり32諧調)で、KとJは4ドット全
体の色相を12ビット(4096色)で表わす。YJK方式のデータをRGB方式に変換する
方法は次の通りだ。
	R = Y + J
	G = Y + K
	B = 1.25Y - 0.5J - 0.25K
 ただし、Yの値は0から31まで。JとKの値は-32から31までだ。上の式で計算
したR、G、Bの値が0よりも小さくなれば、その値の代わりに0が出力され、同
様に31よりも大きくなれば、31が出力される。

http://dai3car.sakura.ne.jp/msxpage/msxtr_handbook/4_6.txt

これで確かに19268色になる。SCREEN12はこれでだいたいわかった感じがした。


SCREEN10でなぜ12499色なんていう中途半端な数字が出てくるのかはいろんなサイトを調べてもよくわからなかったが、
テキトーなプログラムを作って調べたところ上の式でYの取りうる値を0,2,4…30の4bitにした場合に12499色になることがわかった。
なるほどねぇ…


そして今さらにちょっと調べたら次のような文書を発見した。

 スクリーン10,11はアトリビュートビットありの画面モードです。

	ビット7	ビット6	ビット5	ビット4	ビット3	ビット2	ビット1	ビット0
1ドット	Y1	Y1	Y1	Y1	A	KL	KL	KL
1ドット	Y2	Y2	Y2	Y2	A	KH	KH	KH
1ドット	Y3	Y3	Y3	Y3	A	JL	JL	JL
1ドット	Y4	Y4	Y4	Y4	A	JH	JH	JH

 上記のビット3がアトリビュートビットになります。
  A=0の場合、Y,J,Kは全てYJK方式のデータとして扱われます。
  A=1の場合、Yの値はカラーコードとなり、カラーパレットを通して
        RGB表示されます。

 スクリーン10の場合、A=1ならばYの4ビットがパレット番号として認識されます。
 すなわち色相情報であるJK成分に影響を受けない、
 512色中16色パレットを用いた描画が可能になります。

http://www005.upp.so-net.ne.jp/kato402/cg/tekke2.txt

JとかKはこんな風に格納されてたのか。