CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

マルチカラーモード

TMS9918にはもう一つ、マルチカラーモードという設定があり、このグラフィックモードでは画面の解像度を落として、その代わりにドット単位に任意の着色ができるようになります。
 
解像度は一気に下がって横64ピクセル、縦48ピクセルピクセルのサイズは最高解像度における4×4ドットで非常に荒いですが仕方ありません。
スクリーン座標系(X:0..63、Y:0..47)に任意のカラーパレット色(col:0..15)でピクセルを描画する関数set_pixel()です。
座標から対応するVRAM上のメモリアドレスを計算しますがVRAM1バイトにピクセル2個(4ビットで16色を表現)が対応するので既に描画済のピクセルを消さないように論理演算して新しいデータに更新しています。

イメージ 1
これですべてのカラーパレットを表示した例です。左端2マスは透明と黒なのでバックグラウンドに同化していますが他の色も仕様通りなんでしょうが冴えない中間色です。
画面下方の市松は1ピクセル単位ですがピクセルがすごく大きいのがわかります。

イメージ 2
任意の点に描画できるのでサイン波を1周期書いてみました。
ただしC99コンパイラには組込みの三角関数は無いので(もともと整数しか扱えないし)64ステップを1周期として24を中心に±24振れるようなサイン波を整数に丸めたデータをEXCELで作成しそれをソースに埋め込んでいます。
 
イメージ 3