English
SGL User's ManualPROGRAMMER'S TUTORIAL
戻る進む
8.スクロール

8-6.スクロール機能設定

 本項目ではスクロールの設定法を、キャラクタ単位から順に解説し、最終的にマップの設定までを解説していきます。SGLでは、スクロールの設定の各段階でスクロールの機能(キャラクタ色数、キャラクタサイズなど)をセットしていきます。
下表は、スクロール機能の一覧表です。

表8-6 スクロール機能一覧
機能ノーマルスクロール回転スクロール
NBG0NBG1NBG2NBG3RBG0
キャラクタ色数 16色
256色
2048色*
32768色
1677万色
より選択
16色
256色
2048色*
32768色
より選択
16色
256色
より選択
16色
256色
より選択
16色
256色
2048色*
32768色
1677万色
より選択
キャラクタサイズ横1×縦1セル、横2×縦2セルより選択
パターンネームデータサイズ1ワード、2ワードより選択
プレーンサイズ横1×縦1ページ、横2×縦1ページ、横2×縦2ページより選択
プレーン数444416
拡大縮小機能1/4倍〜256倍なし任意倍率
回転機能なしあり

注)
*において2048色となるのはカラーRAMモードがモード1の場合です、
モード0またはモード2の場合は1024色になります

 VRAMアクセス制限について

 表 8-6 に掲載した機能の一覧は、あくまで各スクロール面単位での機能の表示です。実際にこれらスクロール面をプログラム中で使用する場合は、必ずしも各スクロール面の最大性能が使用できるわけではありませんし、また、全てのスクロール面が同時に描画でき るわけでもありません。
これは、VRAMに対するアクセスの制限から惹き起こされるもので、同時に使用できるスクロール面数、機能設定は、このアクセス制限によって限定されます。
アクセス制限の詳細については、“HARDWARE MANUAL vol.2:VDP2ユーザーズマニュアル”を参照してください。

 また、VRAMアクセス指定制限以外にも、ノーマルスクロール画面“NBG0〜3”のキャラクタ色数設定からくるスクロール描画制限も存在します。
(キャラクタパターンの項参照)

 これら2つの制限により、同時に描画可能なスクロール面数及びその機能は限定され、決定されます。

キャラクタパターン

 キャラクタパターンは、1×1セルまたは2×2セルで構成される正方形のパターンであり、ドット単位での情報(ドットの描画色などの情報)が格納されています。SGLでは、キャラクタパターン情報の固まり(データテーブル) をキャラクタパターンデータとしてVRAMに格納し、アクセスして使用します。
SGLではこの段階で、各スクロール面ごとのキャラクタの色数を指定します。
また、1キャラクタを4セルで構成する場合、同一のキャラクタパターンに使用されるセルデータはキャラクタパターンテーブルに連続して格納する必要があります。

図8-9 キャラクタパターンイメージ

表8-7 キャラクタ色数
 カラー形式 
キャラクタ色数
1ドットあたりのビット数
スクロール面による使用可能色数
NBG0NBG1NBG2NBG3RBG0
パレット形式 16色 4ビット
256色 8ビット
2048色 16ビット
(下位11ビットのみ使用)
××
RGB形式32768色16ビット××
1677万色32ビット
(MSBと下位24ビット使用>
×××

注)
 カラーRAMモード0、2では、2048色は1024色になります。

SGLでキャラクタ色数とキャラクタサイズを決定するには、ライブラリ関数“slCharNbg0〜3”、“slCharRbg0”を使用してください。

【void slCharNbg0〜3 ( Uint16 color_type , Uint16 char_size ) ;】
【void slCharRbg0 ( Uint16 color_type , Uint16 char_size ) ;】
各スクロール画面(slChar末尾のスクロール画面名称に対して)のキャラクタ色数とキャラクタサイズを指定します。パラメータには、色数とキャラクタサイズに対応した下表による#define値を代入します。
ただし、スクロール画面によって、使用できる色数に制限があります(“表 8-6 スクロール機能一覧表”参照)。

表8-8 “slCharNbg0〜3”、“slCharRbg0”のパラメータ代入値
キャラクタ色数キャラクタサイズ
パレット形式 RGB形式
16色256色2048色32768色1677万色1x12x2
代入値
COL_TYPE_16COL_TYPE_256COL_TYPE_2048COL_TYPE_32768COL_TYPE_1MCHAR_SIZE_1x1CHAR_SIZE_2x2

注1)
カラーRAMモードが0または2の場合、2048色は1024色になります。

注2)
上表の値はシステム付属の“sl_def.h”で定義されています。

 キャラクタ色数によるスクロール制限

 ノーマルスクロール画面NBG0,NBG1の色数設定によっては、出力できるスクロール面数に制約が加わる場合があります。
これを表にまとめたものが、下表です。

表8-9 キャラクタ色数によるスクロール面の制限
NBG0,NBG1の色数有効なスクロール面
NBG0NBG1NBG0NBG1NBG2NBG3
1677万色×××
2048色or32678色××
2048色or32678色×
2048色or32678色2048色or32678色××

注)*は256色以下の色数の選択を示します。

  • NBG0を1677万色に設定すると、NBG1〜3が表示できなくなります。
  • NBG0を2048色または32768色に設定すると、NBG2が表示できなくなります。
  • NBG1を2048色または32768色に設定すると、NBG3が表示できなくなります。

     VRAMアクセスによるスクロール制限

     セガサターンには、ハードウェアの性能上この他にもVRAMアクセスによるスクロール制限が存在します。
    これはノーマルスクロール画面のキャラクタ色数による制限とともに適用されます。
     特に、ノーマルスクロール面に対して縮小設定を行った場合と回転スクロール面を使用した場合は、キャラクタ色数による制限とともに、描画可能なスクロール面が著しく制限されるので注意が必要です。
    アクセス制限の詳細については、“HARDWARE MANUAL vol.2:VDP2ユーザーズマニュアル”を参照してください。

     パターンネームデータ

     パターンネームデータは、キャラクタパターンとして作成されたドット単位のデータから、特に次の2つの情報を抽出しデータ化したものです。

    キャラクタナンバー:キャラクタパターンの先頭アドレス(VRAM)
                                  キャラクタパターンは20Hを1単位として格納されています
    パレットナンバー :使用するカラーパレットのパレットナンバー(カラーRAM)
    

    パターンネームデータは、上記2情報に加え、キャラクタパターンに関わる次の2つの機能制御ビットを加えた形で最終的に構成されます。

    特殊機能ビット(2ビット):特殊カラー演算、特殊プライオリティを制御
    反転機能ビット(2ビット):キャラクタパターンの上下左右反転を制御

    パターンネームデータは、内包する情報量の差から下図の a)、b)、c)に示す3つの型に分類されます。
    (詳細については、次項参照)
    図はパターンネームデータのイメージモデルです。この図からパターンネームデータの型によって、特殊機能ビットや反転機能ビットが含まれる場合と含まれない場合があることがわかります。

    図8-10 パターンネームデータイメージ

    パターンネームデータは、ページ設定の際に用いられ、64×64分の連続したパターンネームデータを一固まりとして、パターンネームデータテーブルが作成され、プレーンやマップに配置情報が渡されます。

     パターンネームデータのデータ型

     パターンネームデータには、1ワード型と2ワード型の2つがあります。
    1ワード型はさらにキャラクタ識別に用いる情報ビット数によって、さらに2つに分けられます(パターン識別ビットが10または12ビット)。
    それぞれのデータ型には、利点と欠点がありますが、SGLではこの3つの中から一つを選択し、使用しなければいけません。

    表8-10 パターンネームデータサイズ
    ワード・サイズキャラクタナンバービット数 備 考 

    1ワード
    下位10ビット反転機能をキャラクタ単位で指定可能
    下位12ビット反転機能はない
    2ワード下位15ビット反転機能をキャラクタ単位で指定可能

    SGLでは1ワードサイズを推奨します。

     1ワード型パターンネームデータは、「パターンネームデータ中に反転機能ビット(2ビット)を導入するかしないか」という選択により2種類に分かれます。

     キャラクタパターンの反転機能とは、その名の通り、該当するキャラクタパターンの上下左右反転を制御・実行するためのものです。これを制御するためには、パターンネームデータ中に反転機能ビットを2ビット確保する必要があります。
    2ワード型のパターンネームデータの場合、反転機能ビットは常に確保されますが、1ワード型の場合、使用できるビット数に余裕がないため、反転機能ビットを確保した場合、識別できるキャラクタパターン数が2ビット分削れらます。
    そのため、反転機能を使用するかしないか、つまり、識別可能キャラクタパターン数の差によって、1ワード型パターンネームデータは2種類に分けられるわけです。

     また、1ワード型と2ワード型の差異は、単純に処理できるキャラクタパターン数の大小です。ただし、2ワード型は使用するメモリ領域が1ワード型に比べて単純に倍になり、また1ワード型がオフセット指定できるのに比べ、2ワード型は絶対アドレスを指定しなければなりません。そこで、使用の簡便さなどから考えて、SGLでは1ワード型のパターンネームデータを推奨します。

     補助データについて

     パターンネームデータ型が1ワードの場合、それだけだと必要なパターンネームデータ全てを指定できません。そこで、システムはパターンネームコントロールレジスタの下位10ビットで、パターンネームデータを補います。これを補助データと呼びます。
    詳細は“HARDWARE MANUAL vol.2:VDP2 マニュアル”を参照してください。

     ページ

     ページは、キャラクタパターンを横64×縦64セルの大きさの正方形に敷き詰めたものです。実際のデータ形式は、各キャラクタパターンのパターンネームデータ、横64×縦64セル分を1テーブルとして、メモリ中に連続して格納したもので、 これをパターンネームデータテーブルと呼びます。
    ページ設定で作成されたパターンネームテーブルは、さらに上位のプレーンあるいはマップに渡され、再配置されます。

    図8-11 ページイメージ

     SGLでページ設定を行うには、各スクロール画面に応じてライブラリ関数“slPageNbg0〜3”、“slPageRbg0”を用います。

    【void slPageNbg0〜3 ( void *cell_adr , void *col_adr , Uint16 data_type ) ;】
    【void slPageRbg0 ( void *cell_adr , void *col_adr , Uint16 data_type ) ;】
     ページ(パターンネームデータテーブル)設定を行います。
    パラメータは順に、使用するキャラクタパターンの先頭アドレス、使用するパレットの先頭アドレス(1ワード型の場合オフセット指定可能)、パターンネームデータの型指定(パラメータの代入値は下表参照)をそれぞれ代入します。

    表8-11 “slPageNbg0〜3”、“slPageRbg0”のパラメータ代入値(data_type)
    ワード数キャラクタナンバービット 代入値 
    1ワード下位10ビット
    PNB_1WORD
    下位12ビット
    PNB_1WORD|CN_12BIT
    2ワード下位16ビットPNB_2WORD

    注)上表の値はシステム付属の“sl_def.h”で定義されています。

     次図は、実際のページ設定例とページ設定パラメータに用いた#defineのリストです。

    図8-12 “slPageNbg0〜3”、“slPageRbg0”のパラメータ設定例

    slPageNbg0(NBG0_CELL_ADR,0,PNB_1WORD|CN_10BIT);       ↑      ↑↑    ↑       :      ::    キャラクタナンバービット指定       :      :ワード数指定       :      パレット先頭アドレス(オフセット指定)       キャラクタパターン先頭アドレス

    リスト8-1 ページ設定パラメータに関わる#define

    ● ページ設定パラメータに使用した#define ●
    /* VRAM_BANK ADDRESS */
    #define	VDP2_VRAM_A0	0x25e00000
    #define	VDP2_VRAM_A1	0x25e20000
    #define	VDP2_VRAM_B0	0x25e40000
    #define	VDP2_VRAM_B1	0x25e60000
    /* slPage */
    #define	PNB_2WORD	0
    #define	PNB_1WORD	0x8000
    #define	CN_10BIT	0
    #define	CN_12BIT	0x4000
    /* others */
    #define	NBG_CELL_ADR	VDP2_VRAM_B0
    

    注)
     これら#defineは“sl_def.h”で定義されています。

    プレーン

     プレーンは、ページを横1×縦1、横2×縦1、横2×縦2のいずれかのサイズで配置したものです。プレーンが複数のページによって構成される場合、プレーンを構成するページデータ(パターンネームデータテーブル)は、 VRAM中に連続して格納される必要があります。
    プレーンデータは、さらに上位のマップに渡され、再配置されます。

    図8-13 プレーンイメージ

    注)すべて縦×横で表示してあります。

     SGLでプレーンサイズを設定するには、ライブラリ関数“slPlaneNbg0〜3”、“slPlaneRA, B”を使用します。

    【void slPlaneNbg0〜3 (Uint16 plane_size ) ;】
    【void slPlaneRA,RB( Uint16 plane_size ) ;】 各スクロール面のプレーンサイズを設定します。パラメータには、プレーンサイズに対応した下表の値を代入します。

    表8-12 “slPlaneNbg0〜3”、“slPlaneRA,RB”のパラメータ代入値(plane_size)
    プレーンサイズ
    横1×縦1横2×縦1横2×縦2
    代 入 値PL_SIZE_1x1PL_SIZE_2x1PL_SIZE_2x2

    注)
     上表の値はシステム付属の“sl_def.h”で定義されています。

     縮小設定によるプレーンサイズ指定制限について

     ノーマルスクロール画面NBG0、NBG1で、縮小可能範囲を1/4倍まで設定した場合は、そのスクロール画面のプレーンサイズを2×2ページにしないでください。これは、縮小可能範囲を1/4倍にした場合のマップサイズが、通常と異なるためです。
    1×1、2×1ページなら問題なく使用できます。
    プレーンサイズ指定制限の詳細は“HARDWARE MANUAL vol.2:VDP2ユーザーズマニュアル”を参照してください。

    マップ

     マップは、SGLがスクロール描画に実際に用いるスクロールの最大単位です。マップは、ノーマルスクロール画面の場合は横2×縦2プレーン、回転スクロール画面の場合は横4×縦4プレーンで表されます。
    マップを構成するプレーンは、それぞれのプレーンの先頭アドレス(実際はプレーンを構成するパターンネームデータテーブルの格納される先頭アドレス)を指定することで、任意に(連続してVRAMに格納される必要なく)決定できます。 このため、マップを構成するプレーンを全て同じものにすることも可能です。
    後述するスクロールの移動・拡大縮小・回転も、マップ単位で移動・変換が行われます。

    図8-14 マップイメージ

     マップサイズは、スクロール画面の種類で決定されます。
  • ノーマルスクロール画面:横2×縦2プレーンの計4プレーン
  • 回転スクロール画面  :横4×縦4プレーンの計16プレーン

     SGLでマップを構成する各プレーンを登録するには、ライブラリ関数“slMapNbg0〜3”、“sl1MapRA,RB”を用います。

    【void slMapNbg0〜3 ( void *map_a , void *map_b , void *map_c , void *map_d ) ;】
     各ノーマルスクロール画面のマップにプレーンデータを登録します。
    各パラメータには、登録する各プレーン4面の先頭アドレスを代入します。対象となるスクロール画面は、関数名末尾のノーマルスクロール画面名称に対応します。

    【void sl1MapRA ( void *map_a ) ;】
    【void sl1MapRB ( void *map_a ) ;】
     回転スクロール画面のマップにプレーンデータを登録します。
    各パラメータには、登録するプレーンの先頭アドレスを代入します。関数は、指定されたアドレスから
    1ページ分のプレーンデータをマップに登録します。
    また、関数“sl1MapRA”は、回転パラメータAを用いた場合のマップ登録に、関数“sl1MapRB”は、回転パラメータBを用いた場合のマップ登録に用います。

    注 意
    回転パラメータについては、後述の
    “回転スクロール画面特有の機能設定”
    を参照してください。

    縮小設定

     セガサターンの5種のスクロール画面の内、回転スクロール画面“RBG0”とノーマルスクロール画面“NBG0,NBG1”の3つは、スクロールに対する拡大縮小が可能です。拡大縮小可能な3つのスクロール面の内、回転スクロール画面“RBG0”は、常に任意倍率での拡大 縮小が可能ですが、ノーマルスクロール画面“NBG0,NBG1”は、1/4倍〜256倍の範囲内での拡大縮小しか行えません。
    さらに、ノーマルスクロール画面は、縮小可能範囲の設定によって、拡大縮小に3つのモードが存在します。これを、縮小設定と呼び、このためノーマルスクロール画面“NBG0,NBG1”を使用する場合、縮小設定を行う必要があります。詳細は、“HARDWARE MANUAL vol.2:VD P2 ユーザーマニュアル P129〜P130”を参照してください。

    表8-13 スクロール画面と拡大縮小範囲
    スクロール種名称拡大縮小拡大縮小範囲
    ノーマルスクロール画面NBG01/4〜256倍
    NBG11/4〜256倍
    NBG2× 
    NBG3× 
    回転スクロール RBG0任意倍率

    注)
     NBG0,1は縮小設定によって縮小可能範囲が変化します。

    SGLで縮小設定を行うには、縮小設定を行うノーマルスクロール画面に対応したライブラリ関数“slZoomModeNbg0,1”を使用してください。

    【void slZoomModeNbg0,1 ( Uint16 zoom_mode ) ;】
    拡大縮小可能なノーマルスクロール画面“NBG0,NBG1”の、縮小設定を決定します。
    対象となるスクロール画面は、関数名末尾のノーマルスクロール画面名称に対応します。
    パラメータには、縮小設定モードに対応した下表の値を代入します。

    表8-14 “slZoomModeNbg0,1”のパラメータ代入値(zoom_mode)
    プレーンサイズ
     1倍 
     1/2倍 
     1/4倍 
    代 入 値ZOOM_1ZOOM_HALFZOOM_QUATER

    注)上表の値はシステム付属の“sl_def.h”で定義されています。

    回転スクロール画面の拡大縮小について

     回転スクロール画面“RBG0”は、常に任意倍率での拡大縮小が可能なため、縮小設定を行う必要はありません。

    縮小設定によるスクロール面数の制限について

     ノーマルスクロール画面“NBG0,NBG1”の縮小設定によっては(より小さい値まで縮小可能にした場合)、表示可能なスクロール面数および機能が制限を受けることがあります。これは、縮小設定によってVRAMアクセス回数が変化するためです。 アクセス制限の詳細は“HARDWARE MANUAL vol.2:VDP2 ユーザーズマニュアル”を参照してください。

    回転スクロール画面特有の機能設定1

     回転スクロール画面の場合、前述したスクロール機能設定の他にも幾つかの機能設定が必要になります。
    これら機能設定は、回転スクロール特有の機能を使用するために必要なものです。

     ●回転パラメータの設定
     回転スクロール画面を使用する場合、回転に関わる幾つかの情報を格納し呼び出すための領域が必要になり、この情報の集まりを、回転パラメータと呼びます。
    そこで、回転スクロール画面を使用する場合、スクロール機能設定の一環として回転パラメータをVRAMに格納する必要があります(回転パラメータのサイズ:100H)。
    回転パラメータの指定にはライブラリ関数“slRparaInitSet”を使用してください。

    【void slRparaInitSet ( ROTSCROLL *Rpara_adr ) ;】
    回転パラメータをVRAM領域中に格納し、同時にデフォルト値をセットします。
    パラメータには、回転パラメータを格納する領域の先頭アドレスを代入します。

     ●回転パラメータ使用モード
     回転パラメータには、回転パラメータAと回転パラメータBの2種類があり、この2種類の回転パラメータは関数“slRparaInitSet”によって確保された領域に共に格納されています。回転パラメータが2種類存在することにより、 回転スクロールは同時に2種類の状態データを保持することになり、描画時はこの2つの内の一方を選択し、モニターへの描画を実行することが可能になります。
    回転パラメータをどのように使うかは、次の4つの回転パラメータの使用モードの中からユーザーが任意に選択できます。

    モード0:回転パラメータAを使用
    モード1:回転パラメータBを使用
    モード2:回転パラメータAの係数テーブルから読み込まれた係数データによって画像を切り替える
    モード3:回転パラメータウィンドウによって切り替える

    【void slRparaMode( Uint16 mode ) ;】
     回転パラメータの使用モードを切り替えます。
    パラメータには、回転パラメータ使用モードを指し示す下表のフラグを代入してください。

    表8-15 “slRparaMode”のパラメータ代入値
    モード0モード1モード2モード3
    代 入 値RARBK_CHANGEW_CHANGE

    注)上表の値は、システム付属の“sl_def.h”で定義されています。

     ●カレント回転パラメータの切り替え
     回転スクロールに使用される関数の内、関数名末尾が“R”で終わっているものは、カレント回転パラメータに対してそれぞれの関数が担う機能の設定を行いますが、カレント回転パラメータを関数“slCurRpara”で切り替えることにより、 回転パラメータA・Bに対してそれぞれ別に機能を設定することができます。

     また、関数名末尾が“RA”、“RB”で終わっているものは、それぞれの関数名末尾の指す回転パラメータに対して設定を行います。

    【void slCurRpara( Uint16 flag ) ;】
     カレント回転パラメータを切り替えます。
    パラメータには、切り替える回転パラメータを指し示す下表のフラグを代入してください。

    表8-16 “slCurRpara”のパラメータ代入値
    回転パラメータA回転パラメータB
    代 入 値RARB
    注)上表の値は、システム付属の“sl_def.h”で定義されています。

    注意
    回転パラメータの詳細は、“HARDWARE MANUAL vol.2”を参照してください
    (VDP2 ユーザーズマニュアル)

    回転スクロール画面特有の機能設定2

     ●画面オーバー処理モードの選択
     回転スクロール画面の描画が表示エリアを越えた場合の処理を選択します。これを、画面オーバー処理といい、画面オーバー処理には次の4つのモードが存在します。

    モード0:エリア外は、表示エリアに設定された画像を繰り返す。
    モード1:エリア外は画面オーバーPNレジスタで指定されたキャラクタパターンを繰り返す。
    モード2:エリア外は、全て透明にする。
    モード3:エリアを強制的に“0≦X≦512、0≦Y≦512”にクリッピングしエリア外は全て透明にする。

     画面オーバー処理の選択にはライブラリ関数“slOverRA,RB”を使用してください。

    【void slOverRA ( Uint16 over_mode ) ;】
    【void slOverRB ( Uint16 over_mode ) ;】
     回転スクロール画面が、表示領域を越えた場合の画面オーバー処理を選択します。
    パラメータには、画面オーバー処理モードに対応した下表の値を代入します。
    関数“slOverRA”は回転パラメータAを使用した場合のオーバ処理設定、関数“slOverRB”は回転パラメータBを使用した場合のオーバ処理設定を、それぞれ実行します。

    表8-17 画面オーバー処理パラメータ代入値(over_mode)
    オーバー処理モード
    モード0モード1モード2モード3
    パラメータ代入値

     スクロール設定の流れ

     ここでは、キャラクタパターンの設定から、ページ→プレーン→マップ設定、縮小設定、スクロール登録、までのスクロール設定の手順を、簡単なフローチャートで説明し、スクロール機能設定のまとめとします。

    フロー8-1 スクロール機能設定の流れ


  • 戻る進む
    SGL User's ManualPROGRAMMER'S TUTORIAL
    Copyright SEGA ENTERPRISES, LTD., 1997