English
FAQプログラム全般
戻る進む
FAQ/プログラム全般

VDP



スプライトをBGの間に挟み込みたい。

Q)
スプライト(16/256色)を4面ある256色のBGの間に挟みたいのですが、 スプライト全部でなく1部を自由にBG面に挟むにはどのようにすればよいのでしょうか?

プライオリティーレジスタは8個(25f800f0〜fc)あるようですが、 スプライトのコマンドテーブルには、プライオリティーやタイプの設定が ないので、どのようにすればよいのか分かりません。

A)
パレット形式のスプライトならば、最大8種類のプライオリティを同時に 使用可能です。

スプライト毎に参照するプライオリティレジスタを指定するには、 VDP1のコマンドテーブルのカラー制御ワード中のプライオリティビットを 使用してください。

カラー制御ワード中のどのビットがプライオリティビットに相当するかは、 使用するスプライトタイプによって変動しますので、注意が必要です。

詳しくは、VDP2のマニュアルのスプライトデータの項目を参照してください。


320x224と320x240でアスペクトがおんなじに見えるんですけどぉ。

Q)
画面モードで、解像度 352x240ピクセルモードは通常のTVモニターでは解像度が 不十分なため表示しきれませんが通常のTVモニターで解像度 320x240と 解像度 320x224を表示して比べたところ表示位置がずれるだけで解像度が 変わっていないようなのですけど、どういうことでしょうか?

A)
基本的に垂直解像度が224と240では、画面のアスペクト比は変わりません。
(ピクセルのアスペクトは、垂直解像度に依存しません。)


画面モードのアスペクト比について。

Q)
実験したところ、320×224と320×240では、アスペクトの比が同じようでした。 セガサターンで、ドット比率1:1を実現するモードはないのでしょうか?

A)
各グラフィックモードのアスペクト比は以下の通りです。(尚、アスペクト比は 水平解像度のみに依存し垂直解像度には依存しません。)

画面表示モードアスペクト比(縦:横)
NTSCPAL
ノーマルグラフィックモードA(水平解像度320ドット) 1:0.901:1.10
ノーマルグラフィックモードB(水平解像度352ドット) 1:0.861:0.96
ハ イレゾグラフィックモードA(水平解像度640ドット) 1:0.451:0.55
ハイレゾグラフィックモードB(水平解像度704ドット) 1:0.431:0.48
モニターグラフィックモード(水平解像度640ドット) 1:0.90
ハイビジョングラフィックモード(水平解像度704ドット) 1:1.10
アスペクトが1:1となる画面モードはありません。
もし1:1のアスペクトで書かれた画像を正確に表示しようとすると、例えば、 強引ではありますが拡大機能などを使う事で、それらしく見せる事は出来ます。
(唯それが、根本的な解決にはならないのですが。)


RGBコードとパレットコードを同時に出す事は出来る?

Q)
VDP1でスプライトを描画する際、カラーモード5(RGBモード),色演算は無し (replace)で透明ピクセルを有効にしたとき、透明カラーコード以外のピクセル が透明になってしまいます。

例えば以下の様な8×8ドットでテクスチャの一部にVDP2のパレットを使用する (MSB=1)スプライトを描画すると、パレット使用部分が透明扱いに なってしまいます(その下に描画されたスプライトが見える)。

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

透明ピクセルを無効にすると意図したとおりに表示されますが、もちろん透明が 使えなくなってしまいます。
このモードではVDP2のパレットを使用するデータは描画できないのでしょうか?

A)
カラーモード5(RGBモード)では、パレットコードは使用出来ません。
カラーコード 0001〜7FFE は、使用禁止です。

参照
『 ハードウェアマニュアル/VDP1ユーザーズマニュアル 』「6.3 CMDPMOD→カラーモード

なお、カラーモード1(カラールックアップテーブルモード)ならば RGBコードとパレットコードの混在が可能です。


カラールックアップテーブル(CLUT)モードと16色パレットモードの違いを教えて。

Q)
カラールックアップテーブル(CLUT)モードと16色パレットモードの違いを教えてください。

A)
VDP1のカラーモード1が カラールックアップテーブル(CLUT)モード です。
このカラーモードの特徴は、次の通りです。

通常のパレットモードが、VDP2のカラーRAMに格納された RGBコードを参照する のに対し、このモードでは カラールックアップテーブルという一種のパレット テーブルを、VDP1のVRAMに格納するのが特徴です。

カラールックアップテーブルに RGBコードを格納した場合には、RGBモードでの 描画と同様にVDP1の色演算機能が使用可能となります。
(半透明、グーロなど)


カラールックアップモードの使い方を教えて。

Q)
カラールックアップモードの使い方を教えてください。

A)
上の質問の例にもあるように、カラールックアップモードの場合、 一旦VDP1にあるルックアップテーブルを参照しますので、まずこのルックアップ テーブルを用意しなければなりません。

ルックアップテーブルにはRGBコード又はカラーバンクコードを入れる事が 出来ます。(両者が混在している場合も可。)

参照
『ハードウェアマニュアル/VDP1ユーザーズマニュアル 』「5.2 カラールックアップテーブル」)

VDP1は、スプライトのピクセル値をカラーバンクモードやRGBモードの場合 そのままの値をフレームバッファに書き込みますが、 カラールックアップモードの場合このテーブルの内容をピクセル値として フレームバッファに書き込みます。

参照
『ハードウェアマニュアル/VDP1ユーザーズマニュアル 』「6.4 CMDCOLR(カラー制御ワード

もし、ルックアップテーブルのカラーコードがカラーバンクの場合、 そのバンクの指定する色の実体をVDP2のカラーRAMに書きます。オフセットは デフォルトでカラーRAMの先頭で、バウンダリは一色単位です。(1Word/Color なら、2バイト、2Word/Colorなら4バイトです。)
その他カラーバンクが指定された場合にはスプライトタイプに合わせて、 カラー演算割合用ビット、プライオリティ用ビット、シャドウ用ビット を付加する事が出来ます。

参照
『ハードウェアマニュアル/VDP2ユーザーズマニュアル 』「9.1スプライトデータ


VDP1をLowreso、VDP2をHiresoって出来る?

Q)
Developper's Infomation STN-22 において、
VDP1 は normal (320 dot)
VDP2 は hireso (640 dot)
が可能であるような内容が書いてありますが、これは、VDP1側の フレームバッファが 16bit/pixel のままで VDP2 側だけ hireso に出来る、 という解釈でよろしいでしょうか?
また、その場合にレジスタの設定順に制限等あれば教えて頂きたいと思います。

A)
その通りです。

この設定をするには、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 );

といった設定をします。
設定順の制限は特にありません。


水平解像度256というのは可能ですか?

Q)
垂直方向解像度256ピクセルの設定は、可能でしょうか?
ハード的に可能であれば、その設定方法などを教えてください。

A)
PALモードであれば可能です。設定の方法は、SGLであればslInitSystemの 第2引数に、SBLであればSCL_SetDisplayMode、SPR_2SetTvMode両関数で TVモードの設定を行ってください。


640x480のTVモードで32000色の表示はどうすればいいのでしょう?

Q)
セガサターンのハードウェア概要では,スクロール面は16、256、2048、32768、 1677万色の表示可能となっており,解像度も複数の解像度が設定可能とな ってますが,640x480の表示解像度で32000色を表示可能なのでしょうか?
512KBのVRAMではメモリが足りないのではないでしょうか?

A)
ご指摘のようにメモリが足りなくなりますが、結論から申し上げますと セル形式を使えば可能です。セル形式に32000色のモードが存在します。
これを使ってセルの共有化をすれば、512KBのVRAMに納める事は出来ると 思います。

もし、縦セルスクロールとラインスクロールを用いて画像圧縮した場合 (Developpers Information STN-14、)VRAMをあふれた部分はVRAMの先頭から 繰り返し表示されます。(ハードウェア的に制限は掛けられていません。)


ColorRAMを2048色モードで使用すると、2047色目のカラーコードが使用出来ない。

Q)
color RAMを2048色モードで使用した場合、先頭から2047色目のカラーコードが使用出来ません。

A)
color RAMの2047色目はVDP2のノーマルシャドウ機能で使用されるため、 スプライトでは使用出来ません。
他のパレット番号を使用してください。
(これはセガサターンの仕様です。)


メッシュを使うと、画面がにじむんですが。

Q)
今、スプライトにメッシュを使っているんですが、メッシュの部分が虹色に なってしまうのですが、これを回避する方法はありませんか?

A)
それは、多分画面モードの横のドット数が320ドットのモードになっているから ではないのでしょうか?
虹が起こるのは、NTSCの水平周波数とドットの周期が 違うので干渉縞を起こしているのだと思います。
これを回避するには、 水平解像度が352ドットのモードを使用してみてください。


水平解像度を変更すると画面にノイズが走ってしまいます。

Q)
解像度を320から352あるいは、352から320に変更するときに、一瞬、画面 にノイズが走りますが、対策方法があれば教えてください。

A)
A29 ) ありません。理由は上記のようにモードを変更した場合、システムの 動作クロックが変わるため、一瞬、TV同期信号が狂うために起こっている からです。

ただし、320から640、352から704への変更はVRAMのサイクルパターンの設定に 間違いなければ問題ありません。


水平解像度を320から352に変えた時、表示が左にずれるのですが・・。

Q)
解像度を320から352に変えた時、表示が左にずれるのですが・・。

A)
これは、320モードより、352モードの方が、水平表示領域が大きいためです。

49.1682μs 47.6295μs = 1.5287μs が差分の時間となります。
これを320モード換算に直すと

 1.5278μs / ( 1 / 6.7185MHz ) = 10 dot

つまり、352 dotモードは、320 dotモード換算で、10 dot分の表示領域分 大きいことになります。この場合の表示イメージは

 352MODE = 5+320+5 MODE

となり、見た目としては左方向に 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

NBG1を拡張画面として使えるというのはどういう事ですか。

Q)
VDP2のNBG1は、拡張画面として使用できると聞きましたがどういう事でしょうか?

A)
現在、拡張画面として使用されているものは、ムービーカードです。
この拡張画面は、スクロール面(NBG1)の代わりに、セガサターン本体には無い、 別の画面を設定するために設けられたものです。
当然のことながら、 ムービーカード(MPEG画面)とNBG1は、同時に使用出来なくなります。


RBGをハイレゾで表示するには?

Q)
RBG0をハイレゾで表示しようとしていますが、ローレゾでは表示されていたものが、ハイレゾでは表示されません。

A)
解像度レジスタ(25F80000H)だけをハイレゾ→ローレゾにしただけで起こる場合 は、RBG0以外に同時に表示しようとしている画面があると思います。

ローレゾ→ハイレゾに変更する場合に、もっとも注意する必要があると思われるのは、
サイクルパターンレジスタの有効範囲が以下のように変化する

 ローレゾ:T0〜T7 → ハイレゾ:T0〜T3

これはRBG0には直接関係ありませんが、ノーマルスクロールに大きく 影響します。
すなわち、T4〜T7にノーマルスクロールのデータをリードするような設定が されていると、ハイレゾに切り替えたときノーマルスクロールが正しく 表示されなくなってしまいます。


ハイレゾでグーロって出来るの?

Q)
ハイレゾを使用した場合、グーローシェーディングテーブルは、 ハードウェア側でアクセスができないようになっているのでしょうか?

A)
基本的にはハイレゾ+グーローはNGです。しかしそのような指定を ハードウェアにした場合、ハードは動作はします。

ハードはグーローの指定を受けると、16BitでRGB毎に補間を行いながら、 下位8Bitのみをフレームバッファにライトします。
よってフレームバッファには256色しか存在しない訳ですが、そこはテクニック を使えばグーローも可能です。

16BitRBGの下位8Bit=R 5Bit + G 3Bitです。ハードによって補間された データはこのビットに表れますので、VDP2のカラーパレット(256エントリー)に グーローの為のデータを書いておけば、画面には256色以内のグーローが 表示されます。

但し、この方法はカラーRAMの管理が大変なのでお勧めはできませんが。


RBG0とRBG1を使う時は2軸の回転しかできないのでしょうか。

Q)
RBG0とRBG1を同時に使用した場合、RBG0は係数テーブル用のバンクが 確保できないので2軸回転しか出来ないのでしょうか?

A)
RBG0,1 を同時に表示する場合、RBG0 がビットマップであれば残りの VRAMバンクに係数テーブルを格納してドットごとに係数を使用することが できます。

またRBG0がセル形式の場合でも、カラーRAM側であれば係数テーブルを ドットごとに使用することができます。


戻る進む
FAQプログラム全般
Copyright SEGA ENTERPRISES, LTD,. 1997