プライオリティーレジスタは8個(25f800f0〜fc)あるようですが、 スプライトのコマンドテーブルには、プライオリティーやタイプの設定が ないので、どのようにすればよいのか分かりません。
スプライト毎に参照するプライオリティレジスタを指定するには、 VDP1のコマンドテーブルのカラー制御ワード中のプライオリティビットを 使用してください。
カラー制御ワード中のどのビットがプライオリティビットに相当するかは、 使用するスプライトタイプによって変動しますので、注意が必要です。
詳しくは、VDP2のマニュアルのスプライトデータの項目を参照してください。
画面表示モード | アスペクト比(縦:横) | |
---|---|---|
NTSC | PAL | |
ノーマルグラフィックモードA(水平解像度320ドット) | 1:0.90 | 1:1.10 |
ノーマルグラフィックモードB(水平解像度352ドット) | 1:0.86 | 1:0.96 |
ハ イレゾグラフィックモードA(水平解像度640ドット) | 1:0.45 | 1:0.55 |
ハイレゾグラフィックモードB(水平解像度704ドット) | 1:0.43 | 1:0.48 |
モニターグラフィックモード(水平解像度640ドット) | 1:0.90 | |
ハイビジョングラフィックモード(水平解像度704ドット) | 1:1.10 |
FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0001 0001 0001 0001 0001 0001 FFFF FFFF 0001 0001 0001 0001 0001 0001 FFFF FFFF 0001 0001 0001 0001 0001 0001 FFFF FFFF 0001 0001 0001 0001 0001 0001 FFFF FFFF 0001 0001 0001 0001 0001 0001 FFFF FFFF 0001 0001 0001 0001 0001 0001 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
なお、カラーモード1(カラールックアップテーブルモード)ならば RGBコードとパレットコードの混在が可能です。
ルックアップテーブルにはRGBコード又はカラーバンクコードを入れる事が 出来ます。(両者が混在している場合も可。)
VDP1は、スプライトのピクセル値をカラーバンクモードやRGBモードの場合 そのままの値をフレームバッファに書き込みますが、 カラールックアップモードの場合このテーブルの内容をピクセル値として フレームバッファに書き込みます。
もし、ルックアップテーブルのカラーコードがカラーバンクの場合、
そのバンクの指定する色の実体をVDP2のカラーRAMに書きます。オフセットは
デフォルトでカラーRAMの先頭で、バウンダリは一色単位です。(1Word/Color
なら、2バイト、2Word/Colorなら4バイトです。)
その他カラーバンクが指定された場合にはスプライトタイプに合わせて、
カラー演算割合用ビット、プライオリティ用ビット、シャドウ用ビット
を付加する事が出来ます。
この設定をするには、SBLでの設定方法は、VDP1、VDP2 それぞれの対して、モードセット関数を実行してあげればよいです。例えば、
SPR_2SetTvMode( SPR_TV_NORMAL, SPR_TV_320x224, OFF ); SCL_SetDisplayMode( SCL_NON_INTER, SCL_224LINE, SCL_HIRESO_A );
といった設定をします。
SGLでは、
slSetScrTVMode( TV_320x224 );
※この設定を行なった後サイクルパターンの再設定が必要になります。
slSetSprTVMode( TV_640x224 );
といった設定をします。
設定順の制限は特にありません。
もし、縦セルスクロールとラインスクロールを用いて画像圧縮した場合 (Developpers Information STN-14、)VRAMをあふれた部分はVRAMの先頭から 繰り返し表示されます。(ハードウェア的に制限は掛けられていません。)
ただし、320から640、352から704への変更はVRAMのサイクルパターンの設定に 間違いなければ問題ありません。
つまり、352 dotモードは、320 dotモード換算で、10 dot分の表示領域分 大きいことになります。この場合の表示イメージは
となり、見た目としては左方向に 5dot シフトすることになります。
(詳しくは下記表示イメージ参照)
(表示イメージ) |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____| H-Sync |======= 63.5556us(NTSC) ===============| ●320 Mode |_______|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|___________| H-blank 表示 1280 CLK (47.6295us) H-blank 0.1.2.3.4.5.6.7.8.................319 dot 012345678.........................639 dot ●352 Mode |____|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|________| H-blank 表示 1408 CLK (49.1682us) H-blank 0.1.2.3.4.5.6...........................351 dot 012345678...............................703 dot
ローレゾ→ハイレゾに変更する場合に、もっとも注意する必要があると思われるのは、
サイクルパターンレジスタの有効範囲が以下のように変化する
これはRBG0には直接関係ありませんが、ノーマルスクロールに大きく
影響します。
すなわち、T4〜T7にノーマルスクロールのデータをリードするような設定が
されていると、ハイレゾに切り替えたときノーマルスクロールが正しく
表示されなくなってしまいます。
ハードはグーローの指定を受けると、16BitでRGB毎に補間を行いながら、
下位8Bitのみをフレームバッファにライトします。
よってフレームバッファには256色しか存在しない訳ですが、そこはテクニック
を使えばグーローも可能です。
16BitRBGの下位8Bit=R 5Bit + G 3Bitです。ハードによって補間された データはこのビットに表れますので、VDP2のカラーパレット(256エントリー)に グーローの為のデータを書いておけば、画面には256色以内のグーローが 表示されます。
※但し、この方法はカラーRAMの管理が大変なのでお勧めはできませんが。
またRBG0がセル形式の場合でも、カラーRAM側であれば係数テーブルを ドットごとに使用することができます。