以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。また、本明細書及び図面において、信号のどのビットかを示す必要があるときは、信号名の後に、[a:b]あるいは[a]を付する。[a:b]は、その信号の第a番目のビットから第b番目のビットを意味し、[a]は、その信号の第a番目のビットを意味する。16進数の表現に関しては、10進数と区別するために数字の末尾に「H」を付けて表記する。また、「0b」は2進数を、「0x」は16進数を意味する。
図1は、本発明の実施の形態によるデータ処理装置としてのプロセッサ1000の全体構成を示すブロック図である。図1に示すように、このプロセッサ1000は、中央演算処理装置(CPU)1、グラフィックスプロセッサ3、ピクセルプロッタ5、サウンドプロセッサ7、DMA(direct memory access)コントローラ9、第1バスアービタ13、第2バスアービタ14、バックアップコントロール回路15、メインメモリ17、タイマ回路19、ADコンバータ(ADC)20、入出力制御回路21、外部メモリインタフェース回路23、クロックドライバ29、PLL(phase−locked loop)回路27、低電圧検出回路25、第1バス31、及び第2バス33を含む。
本実施の形態では、メインメモリ17及び外部メモリ45を区別して説明する必要がないときは、「メモリMEM」と表記する。
CPU1は、メモリMEMに格納されたプログラムに従い、各種演算やシステム全体の制御を行う。CPU1は、第1バス31及び第2バス33のバスマスタであり、それぞれのバスに接続された資源にアクセスが可能である。
グラフィックスプロセッサ3は、第1バス31及び第2バス33のバスマスタであり、メモリMEMに格納されたデータをグラフィックデータに変換し、このグラフィックデータを基にテレビジョン受像機(図示せず)に合わせたビデオ信号VDを生成して出力する。
ここで、グラフィックデータは、バックグラウンドスクリーンとスプライトとビットマップスクリーンとから合成される。バックグラウンドスクリーンは、二次元配列からなり、テレビジョン受像機のスクリーンを全て覆う大きさを持つ。そして、各配列要素は、矩形の画素集合からなる。奥行きのある背景を形成できるように、バックグラウンドスクリーンとして、第1のバックグラウンドスクリーンと第2のバックグラウンドスクリーンとが用意される。スプライトは、テレビジョン受像機のスクリーンのいずれの位置にでも配置可能な1つの矩形の画素集合からなる。バックグラウンドスクリーンやスプライトを構成する矩形の画素集合を、キャラクタと呼ぶ。ビットマップスクリーンは自由に大きさと位置を設定可能な二次元ピクセル配列からなる。
また、グラフィックスプロセッサ3は、第1バス31を通じて、CPU1により制御され、また、CPU1に対して、割込み要求信号INRQを発生する機能を有する。
ピクセルプロッタ5は、第1バス31を通じて、CPU1により制御され、CPU1から与えられたピクセルデータの描画を実行する。この場合、ピクセル単位での描画が可能である。ここで言うピクセルデータは、1ピクセルの表示色をMビット(Mは1以上の整数)で表したデータである。本実施の形態では、M=1〜8の例を挙げる。
また、ピクセルプロッタ5は、キャッシュシステムにより、高速な描画と効率的なバス(第1バス31及び第2バス33)の使用を実現している。さらに、ピクセルプロッタ5は、第1バス31及び第2バス33のバスマスタであり、キャッシュ(図示せず)からメモリMEMへのライト及びメモリMEMからキャッシュへのライトを自律的に行うことができる。
サウンドプロセッサ7は、第1バス31及び第2バス33のバスマスタであり、メモリMEMに格納されたデータをサウンドデータに変換し、このサウンドデータを基にオーディオ信号AUを生成して出力する。
サウンドデータは、基本の音色となるPCM(パルスコードモジュレーション)データに対し、ピッチ変換及び振幅変調を行い合成される。振幅変調では、CPU1によって指示されるボリューム制御の他に、楽器の波形を再現するためのエンベロープ制御の機能が用意される。
また、サウンドプロセッサ7は、第1バス31を通じて、CPU1により制御され、また、CPU1に対して、割込み要求信号INRQを発生する機能を有する。
DMAコントローラ9は、外部バス43に接続された外部メモリ45から、メインメモリ17へのデータ転送を司る。外部メモリ45として、例えば、SRAM(static random access memory)、DRAM(dynamic random access memory)、若しくはROM(read only memory)等、任意のメモリを用いることができるし、その数も問わない。また、DMAコントローラ9は、データ転送の完了を通知するために、CPU1に対する割込み要求信号INRQを発生する機能を有する。さらに、DMAコントローラ9は、第1バス31及び第2バス33のバスマスタであり、また、第1バス31を通じてCPU1により制御される。
メインメモリ17は、マスクROM、SRAM、及び、DRAMのうち、必要なものを備える。本実施の形態では、メインメモリ17をSRAMで構成する。
バックアップコントロール回路15は、後述の低電圧検出回路25が低電圧を検知した場合に、メインメモリ17を非活性化する。そして、メインメモリ17には、バッテリ41から電源電圧が供給される。従って、電源電圧Vcc0及びVcc1の供給が停止された場合でも、SRAMたるメインメモリ17のデータが保持される。
第1バスアービタ13は、第1バス31の各バスマスタからの第1バス使用要求信号を受け付け、調停を行って、バスサイクル毎に1つのバスマスタに対して第1バス使用許可信号を発行する。具体的には、複数のバスマスタの第1バス31に対する優先順位を定めた優先順位情報セットが複数用意され、第1バスアービタ13は、複数の優先順位情報セットを順次的かつ巡回的に選択して、選択した優先順位情報セットに従って調停を行う。
各バスマスタは、第1バス使用許可信号を受領することによって第1バス31の使用が許可される。ここで、第1バス使用要求信号及び第1バス使用許可信号は、図1では、第1バス調停信号FABとして示されている。
第1バス31は、例えば、8ビットの第1データバス、15ビットの第1アドレスバス、及び第1コントロールバスを含む(図示せず)。
第2バスアービタ14は、第2バス33の各バスマスタからの第2バス使用要求信号を受け付け、調停を行って、要求されたバイト数に対応する1または複数のバスサイクル毎に1つのバスマスタに第2バス使用許可信号を発行する。具体的には、複数のバスマスタの第2バス33に対する優先順位を定めた優先順位情報セットが複数用意され、第2バスアービタ14は、その複数の優先順位情報セットを順次的かつ巡回的に選択して、選択した優先順位情報セットに従って調停を行う。
各バスマスタは、第2バス使用許可信号を受領することによって第2バス33の使用が許可される。ここで、第2バス使用要求信号及び第2バス使用許可信号は、図1では、第2バス調停信号SABとして示されている。
第2バス33は、例えば、16ビットの第2データバス、27ビットの第2アドレスバス、及び第2コントロールバスを含む(図示せず)。
タイマ回路19は、設定された時間間隔に基づき、CPU1に対する割込み要求信号INRQを発生する機能を有する。時間間隔等の設定は、第1バス31を介してCPU1によって行われる。
ADC20は、アナログ入力信号をデジタル信号に変換する。このデジタル信号は、第1バス31を介してCPU1によってリードされる。また、ADC20は、CPU1に対して、割込み要求信号INRQを発生する機能を有する。なお、外部からのアナログ信号は、例えば、6つのアナログポートAIN0〜5(図示せず)を介して、ADC20へ入力される。
入出力制御回路21は、外部入出力装置や外部の半導体素子との通信等を、入出力信号を介して行う。入出力信号は、第1バス31を介して、CPU1からリード/ライトされる。また、入出力制御回路21は、CPU1に対して、割込み要求信号INRQを発生する機能を有する。なお、入出力信号は、例えば、プログラマブルな入出力ポートIO0〜IO23(図示せず)を介して入出力される。
低電圧検出回路25は、電源電圧Vcc0及びVcc1を監視し、いずれかの電源電圧がそれぞれについて定められた電圧以下になったときに、PLL回路27等のリセット信号LPW、その他のシステム全体のリセット信号RESを発行する。リセット信号LPWは、電源の投入時や切断時にシステムの保護と初期化を実行するために発行される。リセット信号RESは、電源の投入時やシステムの再起動時にシステムを初期化するために発行される。リセット信号LPWがアクティブになるときは、リセット信号RESも同時にアクティブになり、リセット信号LPWを解除しても、暫くはリセット信号RESを解除しないように設定されている。
ここで、電源電圧Vcc0は、例えば、+2.5Vであり、主にプロセッサ1000内のデジタル回路に供給される。また、電源電圧Vcc1は、例えば、+3.3Vであり、主にプロセッサ1000内のアナログ回路及びI/O部に供給される。
PLL回路27は、水晶振動子37より得られる正弦波信号を逓倍した高周波クロック信号を生成する。水晶振動子37の周波数は、これを基にNTSCあるいはPALの標準信号を生成するために必然的に決まってくる。しかも、水晶振動子の価格が最も低くなる周波数として、NTSCあるいはPALのカラーサブキャリアの周波数そのものを採用している。すなわち、水晶振動子37の周波数は、NTSCの場合は、3.579545MHzとし、PALの場合は、4.43361875MHzとしている。
NTSCとPALとで水晶振動子の周波数が異なるので、PLL回路27では、NTSCとPALとで逓倍率を変えて、出力クロック信号の周波数が大体同じになるようにしている。具体的には、NTSCの場合は、入力信号の96/8倍の周波数のクロックck40を、PALの場合は、入力信号の96/10倍の周波数のクロックck40を生成する。さらに、PLL回路27は、クロックck40を2分周したクロックck20を生成する。
クロックドライバ29は、PLL回路27より受け取った高周波クロック信号ck40及びck20を、十分な信号強度へ増幅して、それぞれ内部クロックCK40及びCK20として、各ブロックへ供給する。
外部メモリインタフェース回路23は、第2バス33を外部バス43に接続するための機能を有する。
図1のプロセッサ1000におけるデータの転送経路を説明する。例えば、バスマスタたるCPU1が、バススレイブとして第1バス31に接続されている他の機能ブロック(グラフィックスプロセッサ3、ピクセルプロッタ5、サウンドプロセッサ7、DMAコントローラ9、第1バスアービタ13、第2バスアービタ14、等)を制御する場合は、これら機能ブロックの制御レジスタ等へのライトデータは、第1バスアービタ13へ与えられ、調停後に、第1バス31から、各機能ブロックに与えられ、一方、これら機能ブロックの制御レジスタ等からのリードデータは、調停後に、第1バス31及び第1バスアービタ13を介して、CPU1に与えられる。但し、グラフィックスプロセッサ3、ピクセルプロッタ5、サウンドプロセッサ7、DMAコントローラ9は、第1バス31のバスマスタとして、第1バスアービタ13へバス使用要求を行う機能を備える。
バスマスタが、メインメモリ17に対してアクセスする場合は、ライトデータは、第1バスアービタ13に与えられ、調停後に、第1バス31から、メインメモリ17に与えられ、一方、リードデータは、調停後に、第1バス31及び第1バスアービタ13を介して、バスマスタに与えられる。また、バスマスタが、外部メモリ45に対してアクセスする場合は、ライトデータは、第2バスアービタ14に与えられ、調停後に、第2バス33から、外部メモリインタフェース回路23及び外部バス43を介して、外部メモリ45に与えられ、一方、リードデータは、調停後に、外部バス43、外部メモリインタフェース回路23、第2バス33及び第2バスアービタ14を介して、バスマスタに与えられる。
さて、本実施の形態では、プロセッサ1000は、異なる解像度の画像データを合成でき、かつ、合成の順番が予め定められている場合であっても、合成の順番に関係なく、複数の画像データを所望の表示優先順位にて合成できる。その概要を図面を用いて説明する。
図2Aは、図1のプロセッサ1000による画像合成の概念図であり、図2Bは、合成画像の例示図である。図2Aに示すように、縦64ピクセル×横32ピクセルのスプライト304、縦256ピクセル×横1024ピクセルのビットマップスクリーン300、及び縦256ピクセル×横256ピクセルのバックグラウンドスクリーン302を考える。また、スプライト304及びバックグラウンドスクリーン302を構成するキャラクタは、縦16ピクセル×横16ピクセルとする。
さらに、スプライト304、ビットマップスクリーン300、及びバックグラウンドスクリーン302のデプス情報Zを、それぞれ、FH、9H、及び3Hとする。ここで、デプス情報Zは、ピクセルの奥行きを表す情報であり、4ビットで表現する。つまり、デプス情報Zは、0H(最後面)〜FH(最前面)の範囲で指定できる。複数のピクセルが重なるときは、最も大きいデプス情報Zを持つピクセルが選択される。
図2Aに示すように、プロセッサ1000は、まず、デプス情報Zに従って、スプライト304及びバックグラウンドスクリーン302を合成する。
ここで、説明の便宜上、スプライト304とバックグラウンドスクリーン302とを合成して生成されたスクリーンを、キャラクタスクリーンと呼ぶ。スプライト304のピクセルとバックグラウンドスクリーン302のピクセルとは同じサイズであり、表示される全てのスプライトとバックグラウンドスクリーンとは、縦224ピクセル×横256ピクセルで表されるキャラクタスクリーンへと合成される。従って、この例では、ビットマップスクリーン300の水平解像度は、キャラクタスクリーンの水平解像度の4倍である。
また、キャラクタスクリーンを構成する各ピクセルには、元のスプライト304あるいは元のバックグラウンドスクリーン302のデプス情報Zが付随している。
次に、プロセッサ1000は、各ピクセルのデプス情報Zに従って、キャラクタスクリーンとビットマップスクリーン300とを合成する。具体的には、グラフィックスプロセッサ3は、重なっている複数のピクセルのうち、デプス情報Zが最も大きいピクセルを選択して出力する。ただし、プロセッサ1000は、ピクセルの透明情報を参照して、そのピクセルが透明色であれば、デプス情報Zの如何に関係なく、そのピクセルは選択せず、次に大きいデプス情報Zを持つピクセルを選択する。
例えば、キャラクタスクリーンのあるピクセルのデプス情報ZがFHであり、それに重なるビットマップスクリーン300のピクセルのデプス情報Zが9Hの場合は、キャラクタスクリーンのピクセルが選択される。ただし、例えば、キャラクタスクリーンのピクセルのデプス情報ZがFHであり、それに重なるビットマップスクリーン300のピクセルのデプス情報Zが9Hの場合であっても、キャラクタスクリーンのピクセルが透明色であれば、ビットマップスクリーン300のピクセルが選択される。
以上のように、プロセッサ1000は、デプス情報Z及び透明情報に基づいて、異なる解像度のキャラクタスクリーンとビットマップスクリーン300とを合成する。その結果、図2Bに示すような合成画像が生成される。なお、図2Bでは、生成された合成画像のうちの表示領域のみを図示している。画像合成の詳細は後述する。
また、以上のように、合成の順番は、スプライト304とバックグラウンドスクリーン302との合成をまず行い、その次に、その合成結果であるキャラクタスクリーンとビットマップスクリーン300との合成を行う。このように、合成の順番が固定されている。しかし、キャラクタスクリーンの各ピクセルには、元のスプライト304あるいは元のバックグラウンドスクリーン302のデプス情報Zが付随しており、このデプス情報Zとビットマップスクリーン300のデプス情報Zとに基づいて、ピクセルの取捨選択が行われる。従って、最後に合成されるビットマップスクリーン300のレイヤを、最初に合成されるスプライト304のレイヤとバックグラウンドスクリーン302のレイヤとの間に配置できる。
例えば、図2Bに示すように、ビットマップスクリーン300の風車obj2を、スプライト304の気球obj3とバックグラウンドスクリーン302の雲obj1との間に配置できる。従来では、最後に合成されるビットマップスクリーン300の風車obj2は、最初に合成されるスプライト304の気球obj3とバックグラウンドスクリーン302の雲obj1との間に配置することはできず、気球obj3及び雲obj1の合成画像の前面か後面のいずれかにしか配置できない。
さて、上記のように、プロセッサ1000は、ビットマップスクリーンを生成できる。この点の概要を図面を用いて説明する。
図3は、図1のプロセッサ1000が生成するビットマップスクリーンの説明図である。図3に示すように、ビットマップイメージBWのうちの表示対象領域DAを表示する場合を例に挙げる。
ビットマップスクリーンBSの座標系は、左上を原点ORB(0,0)とし、水平10ビット(0〜1023)、及び垂直9ビット(0〜511)で表される。
CPU1は、グラフィックスプロセッサ3内の制御レジスタ166,168,162,164(後述の図15参照)に、ビットマップスクリーンBS上の表示上端座標BPT、表示下端座標BPB、表示左端座標BPL、及び表示右端座標BPRを設定する。この設定に応じて、表示対象領域DAが、表示画面(テレビフレーム)に表示される。
ビットマップスクリーンBSの座標系は、スプライトやバックグラウンドスクリーン、つまり、キャラクタスクリーンの座標系とは独立している。また、ビットマップスクリーンBSの座標系は、後述のオフセットなしの水平走査カウントHC(以下、「水平走査カウントHC」あるいは「水平走査カウント信号HC」と呼ぶ。)及びオフセットなしの垂直走査カウントVC(以下、「垂直走査カウントVC」あるいは「垂直走査カウント信号VC」と呼ぶ。)に基づいているため、ビットマップスクリーンBSの座標系の原点と表示画面(テレビフレーム)との相対的な位置関係は固定されている。ただし、ビットマップスクリーンBSの水平表示位置に関しては、微調整が可能である。
図4は、本実施の形態によるビットマップスクリーンBSの水平位置微調整の説明図である。図4に示すように、CPU1は、グラフィックスプロセッサ3内の制御レジスタ158(後述の図15参照)に値Hfinを設定することで、ビットマップスクリーンBSの水平位置を0〜15の範囲で微調整できる。
ビットマップスクリーンBSの解像度について説明する。CPU1は、グラフィックスプロセッサ3内の制御レジスタ160(後述の図15参照)にアクセスすることで、ビットマップスクリーンBSの水平解像度を、2クロック/ピクセル(1024ピクセル/水平ライン相当)〜16クロック/ピクセル(128ピクセル/水平ライン相当)の範囲で、任意に設定できる。以下に例を示す。なお、キャラクタスクリーン(スプライトやバックグラウンドスクリーンにより構成)の水平解像度は、8クロック/ピクセル(256ピクセル/水平ライン)で一定である。
図5Aは、図3の表示対象領域DAを、水平解像度8クロック/ピクセルで表示したときの表示画像の例示図、図5Bは、表示対象領域DAを、水平解像度4クロック/ピクセルで表示したときの表示画像の例示図である。図5A及び図5Bから分かるように、ビットマップスクリーンBSの水平解像度を2倍にすると、表示画面(テレビフレーム)TVSにおいて、表示画像の水平方向の幅が2分の1になる。これは一例であり、水平解像度の変更により、表示画像を水平方向に伸縮させることができる。
ビットマップスクリーンBSのデータ取得アドレスの設定について説明する。
図6は、本実施の形態によるビットマップスクリーンBSを構成するビットマップデータを取得する際のアドレスの設定方法の説明図である。図6に示すように、ビットマップスクリーンBSを構成するビットマップデータBWは、第0水平ラインのデータHLD0,第1水平ラインのデータHLD1,…,最終水平ラインのデータHLDnからなるとする。また、データHLD0,HLD1,…,HLDnのうち、表示される水平ラインのデータを、表示水平ラインデータDHLD0,DHLD1,…,DHLDkとする。
ここで、第0水平ラインのデータHLD0,第1水平ラインのデータHLD1,…,最終水平ラインのデータHLDnを包括して表現するときは、「データHLDN(N=0〜n)」と表記する。また、表示水平ラインデータDHLD0,DHLD1,…,DHLDkを包括して表現するときは、表示水平ラインデータDHLDK(K=0〜k)と表記する。
CPU1は、制御レジスタ180,176,174,172,178に、ベースアドレスBBS、上端アドレスBAT、左端アドレスBAL、右端アドレスBAR、及びアドレスステップBASをそれぞれ設定する。
ベースアドレスBBSは、他の設定値の基底となるものであり、通常はビットマップデータ全体の先頭アドレスを指し示すように設定される。つまり、ベースアドレスBBSは、第0水平ラインのデータHLD0の先頭アドレスを指し示す。アドレスステップBASには、ビットマップデータBWの1水平ライン分のバイト数を設定する。
上端アドレスBATは、ベースアドレスBBSからのオフセット値であり、表示水平ラインデータDHLD0の先頭アドレスを指し示すように設定される。つまり、(ベースアドレスBBS+上端アドレスBAT)が、表示水平ラインデータDHLD0の先頭アドレスを指し示すことになる。
左端アドレスBALは、表示水平ラインデータDHLDK中の表示対象データ(図では斜線で示している。)の先頭アドレスを、表示水平ラインデータDHLDKの先頭アドレスからのオフセット値で示すものである。つまり、各表示水平ラインデータDHLDKにおいて、表示対象データの先頭アドレスは、(表示水平ラインデータDHLDKの先頭アドレス+左端アドレスBAL)で示される。
右端アドレスBARは、表示水平ラインデータDHLDK中の表示対象データ(図では斜線で示している。)の終端アドレスを、表示水平ラインデータDHLDKの先頭アドレスからのオフセット値で示すものである。つまり、各表示水平ラインデータDHLDKにおいて、表示対象データの終端アドレスは、(表示水平ラインデータDHLDKの先頭アドレス+右端アドレスBAR)で示される。
表示水平ラインデータDHLDKの先頭アドレスは、(表示水平ラインデータDHLD0の先頭アドレス+アドレスステップBAS×K)で示される。
以上のように、CPU1が、ベースアドレスBBS、上端アドレスBAT、左端アドレスBAL、右端アドレスBAR、及びアドレスステップBASをそれぞれ設定することにより、メモリMEM上に構成されているビットマップイメージBW(2次元ピクセル配列)の一部分のみを切り出して表示することができる(図3参照)。
さて、プロセッサ1000は、キャラクタスクリーン(スプライトやバックグラウンドスクリーンにより構成)の表示位置の調整機能を有する。この点を図面を用いて説明する。
図7は、図1のプロセッサ1000によるキャラクタスクリーンの表示位置調整機能の説明図である。図7に示すように、CPU1は、表示画面(テレビフレーム)TVSに対するキャラクタスクリーンCSの位置を調整できる。具体的には、水平カウント参照値VHR、垂直カウント参照値VVR、水平ポジション左端値VLP、及び垂直ポジション上端値VTPを、それぞれ、制御レジスタ250,242,252,及び244(後述の図17参照)に設定することにより、キャラクタスクリーンCSの表示位置の調整を行う。この点を詳しく説明する。
上記のように、ビットマップスクリーンの座標系は、オフセットなしの水平走査カウントHC及び垂直走査カウントVCに基づいている。水平走査カウントHC及び垂直走査カウントVCの原点ORVは、表示画面TVSの左上にある。表示画面TVSの左上頂点と水平走査カウントHC及び垂直走査カウントVCの原点ORVの間の非表示区間に、垂直帰線区間と水平帰線区間が含まれる。水平右方向が水平軸の正であり、垂直下方向が垂直軸の正となっている。
水平走査カウントHCは、原点ORVを開始点とし、水平右方向に行われる走査に従ってインクリメントされる。そして、グラフィックスプロセッサ3内の制御レジスタ(図示せず)に設定された水平周期に達すると「0」にリセットされる。垂直走査カウントVCは、原点ORVを開始点とし、走査とともに順次インクリメントされ、制御レジスタ(図示せず)に設定された垂直周期に達すると「0」にリセットされる。
一方、キャラクタスクリーンCSの座標系は、オフセット付きの水平走査カウントHP(以下、「水平走査カウントHP」あるいは「水平走査カウント信号HP」と呼ぶ。)及びオフセット付きの垂直走査カウントVP(以下、「垂直走査カウントVP」あるいは「垂直走査カウント信号VP」と呼ぶ。)に基づいている。水平走査カウントHP及び垂直走査カウントVPの原点ORCは、キャラクタスクリーンCSの左端外部にある。水平右方向が水平軸Hの正であり、垂直下方向が垂直軸Vの正となっている。
水平走査カウントHCが、水平カウント参照値VHRに一致した場合に、水平ポジション左端値VLPが水平走査カウントHPの値としてロードされる。また、垂直走査カウントVCが垂直カウント参照値VVRに一致した場合に、水平ポジション上端値VTPが垂直走査カウントVPの値としてロードされる。
水平走査カウントHPは、水平ポジション左端値VLPを開始点とし、水平右方向に行われる走査に従ってインクリメントされる。垂直走査カウントVPは、垂直ポジション上端値VTPを開始点とし、走査とともに順次インクリメントされる。
以上の結果、キャラクタスクリーンCSのうち、斜線で示した領域が、表示画面TVSに表示される。つまり、表示画面TVSに対するキャラクタスクリーンCSの位置を調整できる。
なお、水平走査カウントHPの「512」がキャラクタスクリーンのX座標の「0」に相当し、垂直走査カウントVPの「127」がキャラクタスクリーンのY座標の「0」に相当する。
図8は、図1のグラフィックスプロセッサ3の内部構成の前段部分を示すブロック図である。図9は、図1のグラフィックスプロセッサ3の内部構成の後段部分を示すブロック図である。
図8及び図9に示すように、グラフィックスプロセッサ3は、スプライトDMAコントローラ50、スプライトメモリ52、スプライトジェネレータ54、第1のバックグラウンドジェネレータ56、第1のピクチャパラメータミキサ58、第2のバックグラウンドジェネレータ60、第2のピクチャパラメータミキサ62、アドレスジェネレータ64、ストリップジェネレータ66、キャラクタフェッチャ68、ピクセルジェネレータ70、トランスペアレントコントローラ72、ドロードライバ74、ピクセルバッファコントローラ76、ピクセルバッファ78、ビュードライバ80、カラーパレットコントローラ82、キャラクタ用カラーパレット84、ビットマップジェネレータ86、ビットマップ用カラーパレット88、ピクセルミキサ90、カラーモジュレータ92、ノイズジェネレータ94、ウィンドウジェネレータ96、ビデオエンコーダ98、ビデオタイミングジェネレータ100、ビデオポジションアジャスタ102、及びビデオファンクションジェネレータ104を含む。
スプライトメモリ52は、256エントリ×56ビットのローカルメモリであり、1つのエントリに1つのスプライトの各パラメータ(スプライトパラメータ、と呼ぶこともある。)が格納される。また、1つのエントリにおいて、各スプライトパラメータの格納位置は決まっている。
各スプライトパラメータは、1ピクセルのビット数B0[2:0]、サイズ情報S0[1:0]、フリップ情報F0[1:0]、水平位置情報X0[8:0]、垂直位置情報Y0[7:0]、デプス情報Z0[3:0]、パレット情報P0[3:0]、及びアドレス情報A0[23:0]である。
ビット数B0は、スプライトを構成するキャラクタの1ピクセルのビット数(ビット/ピクセル:カラーモード)である。サイズ情報S0は、スプライトを構成するキャラクタのサイズを示す情報であり、キャラクタのサイズが、横8ピクセル×縦8ピクセルの場合、例えば、サイズ情報S0を「00」とする。
フリップ情報F0は、スプライトを構成するキャラクタの反転情報であり、例えば、「00」が反転なし、「01」が水平方向の反転、「10」が垂直方向の反転、「11」が水平及び垂直方向の反転、を示す。
水平位置情報X0は、キャラクタスクリーンの座標系におけるスプライトの水平座標であり、垂直位置情報Y0は、キャラクタスクリーンの座標系におけるスプライトの垂直座標である(図7参照)。
デプス情報Z0は、スプライトを構成するキャラクタの奥行きを示す情報である。
パレット情報P0は、パレットを指定する情報である。後述するが、本実施の形態では、キャラクタ用カラーパレット84は、256色を格納するローカルメモリにより構成される。パレット情報P0は、カラーパレット84のエントリを指し示す8ビットアドレスの上位4ビットに相当する。但し、選択されたカラーモードによっては、パレット情報P0の下位側からの1〜4ビットは、ピクセルのカラーコードの一部に置き換えられる。
アドレス情報A0は、スプライトを構成するキャラクタのパターンデータ(キャラクタパターンデータ、と呼ぶこともある。)のメモリMEM上での格納位置を示す情報(先頭アドレス情報)である。キャラクタパターンデータは、キャラクタを構成する各ピクセルのカラーコードからなる。同様に、第1及び第2のバックグラウンドスクリーンを構成するキャラクタパターンデータは、キャラクタを構成する各ピクセルのカラーコードからなる。
スプライトDMAコントローラ50は、メインメモリ17上に配置された各スプライトパラメータをスプライトメモリ52にDMA転送する。詳しくは次の通りである。
メインメモリ17には、表示対象の全スプライトについて、各スプライトパラメータが格納される。この場合、メインメモリ17に7つのデータ配列を設ける。各スプライトの全スプライトパラメータ(56ビット)は、8ビットのブロックに分割されるところ、7つのデータ配列は、この7つのブロックに対応している。
また、各データ配列の要素数は、表示対象の全スプライトの数と同じである。従って、スプライトパラメータの各ブロックは、対応するデータ配列の対応する要素に格納される。一方、上記のように、スプライトメモリ52には、1つのエントリにおいて、各スプライトパラメータの格納位置は決まっている。
このように、メインメモリ17とスプライトメモリ52とで、スプライトパラメータの格納形態が異なるので、スプライトDMAコントローラ50は、メインメモリ17上に配置された各スプライトパラメータを、スプライトメモリ52への格納形態に合わせて整列しつつ、スプライトメモリ52にDMA転送する。
なお、スプライトDMAコントローラ50は、データをリード/ライトするときは、アドレスFA、及びリード/ライトコントロール信号FWをスプライトメモリ52に与える。これらの信号に従って、スプライトメモリ52にライトデータFIが書き込まれ、あるいは、スプライトメモリ52からリードデータFOが読み出される。
また、スプライトDMAコントローラ50は、DMA転送によるスプライトメモリ52へのライトと、CPU1からのスプライトメモリ52へのアクセスと、スプライトジェネレータ54からのスプライトメモリ52のリードと、を調停し、スプライトメモリ52へのアクセスを一元的に管理する。
スプライトジェネレータ54は、画像表示処理時では、アドレスSAを次々にインクリメントしていって、常にスプライトメモリ52内の各エントリのデータを連続して読み出し、水平走査カウント信号HP及び垂直走査カウント信号VPに従って、表示処理範囲内に位置する(ピクセルバッファ78に重なっている(重なりつつある))スプライトの各パラメータB0,S0,F0,X0,Y0,Z0,P0,A0を第1のピクチャパラメータミキサ58に出力する。ここで、「スプライトがピクセルバッファ78に重なる」という意味は、後述の通り、ピクセルバッファ78が水平座標の或る範囲に関連付けられ、スプライトがこの範囲にオーバーラップするという意味である。但し、スプライトジェネレータ54から出力される垂直位置情報Y0は、全ビットではなく下位5ビット、すなわちY0[4:0]となる。なお、アドレスSAは、スプライトDMAコントローラ50により、アドレスFAとして、スプライトメモリ52に与えられる。
また、スプライトジェネレータ54は、CPU1からアクセス可能なレジスタ(図示せず)を含み、このレジスタには、スプライトのアドレス情報の形式T0[2:0]が格納されている。アドレス情報の形式T0は、スプライトのキャラクタパターンデータのフェッチにおけるアドレッシングモードを示す情報である。ここで言うところのアトリビュート情報は、ビット数B0、フリップ情報F0、及びパレット情報P0のことである。このアトリビュート情報は、スプライトメモリ52に格納される。スプライトジェネレータ54は、上記各スプライトパラメータとともに、アドレス情報の形式T0も、第1のピクチャパラメータミキサ58に出力する。
ここで、信号VALIDと信号WISHという前段から後段へデータを伝送するときのハンドシェーク信号がある。信号VALIDは、送り手から受け手へ伝達する制御信号で、送るデータが準備できるとデータと共にアクティブになる。信号WISHは逆に受け手から送り手へ伝達する制御信号であり、データが受け入れられる状態のときアクティブになる。両信号VALID,WISHがアクティブの期間(1クロック)に1バイトのデータが伝送される。
第1のバックグラウンドジェネレータ56には、CPU1からアクセス可能なレジスタ(図示せず)が備えられており、そのレジスタには、第1のバックグラウンドスクリーンの情報を記憶しているメインメモリ17上の配列を指し示すポインタL1,H1,U1、並びに、第1のバックグラウンドスクリーンに適用される1ピクセルのビット数B1[2:0]、サイズ情報S1[1:0]、フリップ情報F1[1:0]、水平位置情報TX1[7:0]、垂直位置情報TY1[7:0]、デプス情報Z1[3:0]、パレット情報P1[3:0]、アドレス情報の形式T1[2:0]、及びアトリビュートの所在W1が格納される。
ポインタL1,H1,U1で指し示されるメインメモリ17上の配列には、第1のバックグラウンドスクリーンに使用するキャラクタパターンデータのメモリMEM上での位置を示すアドレス情報A1と、パレット情報P1及びデプス情報Z1の2つのアトリビュート情報とが格納されている。このアドレス情報A1は、アドレス情報の形式T1に従ったサイズ(1から3バイト)を持ち、このアトリビュート情報は、アトリビュートの所在W1で配列が指定されると有効になる。
ここで、ビット数B1、サイズ情報S1、フリップ情報F1、デプス情報Z1、パレット情報P1、及びアドレス情報の形式T1は、これらが、第1のバックグラウンドスクリーンを構成するキャラクタについてのものというだけで、上記のスプライトを構成するキャラクタについてのビット数B0、サイズ情報S0、フリップ情報F0、デプス情報Z0、パレット情報P0、及びアドレス情報の形式T0と同様である。
また、第1のバックグラウンドジェネレータ56は、水平走査カウント信号HP及び垂直走査カウント信号VPに従って、表示処理範囲内に位置する(ピクセルバッファ78に重なっている(重なりつつある))キャラクタの情報(つまり、配列の要素、さらに換言すると、キャラクタのアドレス情報A1、デプス情報Z1及びパレット情報P1)を第1バス31を通してメインメモリ17から読み出して、第1のピクチャパラメータミキサ58へ出力するとともに、そのキャラクタの他の情報(ビット数B1、サイズ情報S1、フリップ情報F1、水平位置情報X1、垂直位置情報Y1、デプス情報Z1、パレット情報P1、及びアドレス情報の形式T1)も第1のピクチャパラメータミキサ58へ出力する。ただし、アトリビュートの所在W1は、後段では使用しないので送出しない。ここで、アトリビュートの所在W1が「0」の場合には、第1のバックグラウンドジェネレータ56のレジスタに格納されているデプス情報Z1及びパレット情報P1が出力され、W1が「1」の場合には、メインメモリ17から読み出されたデプス情報Z1及びパレット情報P1が出力される。また、水平位置情報X1及び垂直位置情報Y1については、バックグラウンドスクリーンの水平位置情報TX1及び垂直位置情報TY1から、各キャラクタの水平位置情報X1[8:0]及び垂直位置情報Y1[4:0]が算出され、第1のピクチャパラメータミキサ58に出力される。
加えて、第1のバックグラウンドジェネレータ56は、第1のピクチャパラメータミキサ58へ信号VALID及び緊急信号Eを出力し、また、第1のピクチャパラメータミキサ58から信号WISHが入力される。緊急信号Eは、後段にデータの受信を催促する信号であり、出力したデータが後段になかなか伝送されずにいるとき、アクティブにされる。
具体的には、第1のバックグラウンドジェネレータ56は、出力したデータの位置情報(水平位置情報X1及び垂直位置情報Y1)と、水平走査カウント信号HP及び垂直走査カウント信号VPにより示される位置情報と、の差が広がったことを検出して緊急信号Eをアクティブにする。
第1のピクチャパラメータミキサ58は、スプライトジェネレータ54が出力したスプライトを定義する信号T0,B0,S0,F0,X0,Y0,Z0,P0,A0及び第1のバックグラウンドジェネレータ56が出力した第1のバックグラウンドスクリーンを定義する信号T1,B1,S1,F1,X1,Y1,Z1,P1,A1から、次の規則に従って、信号を選択/統合して、信号T2,B2,S2,F2,X2,Y2,Z2,P2,A2として、第2のピクチャパラメータミキサ62に出力する。
この場合、第1のピクチャパラメータミキサ58は、原則として、スプライトを定義する信号T0,B0,S0,F0,X0,Y0,Z0,P0,A0を優先して選択する。ただし、第1のピクチャパラメータミキサ58は、緊急信号Eがアクティブのときは、第1のバックグラウンドスクリーンを定義する信号T1,B1,S1,F1,X1,Y1,Z1,P1,A1を選択する。もちろん、緊急信号Eがアクティブでないときでも、スプライトを定義する信号T0,B0,S0,F0,X0,Y0,Z0,P0,A0が入力されていない場合は、第1のバックグラウンドスクリーンを定義する信号T1,B1,S1,F1,X1,Y1,Z1,P1,A1が選択される。
また、第1のピクチャパラメータミキサ58は、信号VALIDを、第2のピクチャパラメータミキサ62に与え、第2のピクチャパラメータミキサ62から、信号WISHが入力される。
第2のバックグラウンドジェネレータ60には、CPU1からアクセス可能なレジスタ(図示せず)が備えられており、そのレジスタには、第2のバックグラウンドスクリーンの情報を記憶しているメインメモリ17上の配列を指し示すポインタL2,H2,U2、並びに、第2のバックグラウンドスクリーンに適用される1ピクセルのビット数B3[2:0]、サイズ情報S3[1:0]、フリップ情報F3[1:0]、水平位置情報TX3[7:0]、垂直位置情報TY3[7:0]、デプス情報Z3[3:0]、パレット情報P3[3:0]、アドレス情報の形式T3[2:0]、及びアトリビュートの所在W3が格納される。
ポインタL2,H2,U2で指し示されるメインメモリ17上の配列には、第2のバックグラウンドスクリーンに使用するキャラクタパターンデータのメモリMEM上での位置を示すアドレス情報A3と、パレット情報P3及びデプス情報Z3の2つのアトリビュート情報とが格納されている。このアドレス情報A3は、アドレス情報の形式T3に従ったサイズ(1から3バイト)を持ち、このアトリビュート情報は、アトリビュートの所在W3で配列が指定されると有効になる。
ここで、ビット数B3、サイズ情報S3、フリップ情報F3、デプス情報Z3、パレット情報P3、及びアドレス情報の形式T3は、これらが、第2のバックグラウンドスクリーンを構成するキャラクタについてのものというだけで、上記の第2のバックグラウンドスクリーンを構成するキャラクタについてのビット数B1、サイズ情報S1、フリップ情報F1、デプス情報Z1、パレット情報P1、及びアドレス情報の形式T1と同様である。
また、第2のバックグラウンドジェネレータ60は、水平走査カウント信号HP及び垂直走査カウント信号VPに従って、表示処理範囲内に位置する(ピクセルバッファ78に重なっている(重なりつつある))キャラクタの情報(つまり、配列の要素、さらに換言すると、キャラクタのアドレス情報A3、デプス情報Z3及びパレット情報P3)を第1バス31を通してメインメモリ17から読み出して、第2のピクチャパラメータミキサ62へ出力するとともに、そのキャラクタの他の情報(ビット数B3、サイズ情報S3、フリップ情報F3、水平位置情報X3、垂直位置情報Y3、デプス情報Z3、パレット情報P3、及びアドレス情報の形式T3)も第2のピクチャパラメータミキサ62へ出力する。ただし、アトリビュートの所在W3は、後段では使用しないので送出しない。ここで、アトリビュートの所在W3が「0」の場合には、第2のバックグラウンドジェネレータ60のレジスタに格納されているデプス情報Z3及びパレット情報P3が出力され、W3が「1」の場合には、メインメモリ17から読み出されたデプス情報Z3及びパレット情報P3が出力される。また、水平位置情報X3及び垂直位置情報Y3については、バックグラウンドスクリーンの水平位置情報TX3及び垂直位置情報TY3から、各キャラクタの水平位置情報X3[8:0]及び垂直位置情報Y3[4:0]が算出され、第2のピクチャパラメータミキサ62に出力される
加えて、第2のバックグラウンドジェネレータ60は、第2のピクチャパラメータミキサ62へ信号VALID及び緊急信号Eを出力し、また、第2のピクチャパラメータミキサ62から信号WISHが入力される。
第2のピクチャパラメータミキサ62は、第1のピクチャパラメータミキサ58が出力したスプライト及び/又は第1のバックグラウンドスクリーンを定義する信号T2,B2,S2,F2,X2,Y2,Z2,P2,A2及び第2のバックグラウンドジェネレータ60が出力した第2のバックグラウンドスクリーンを定義する信号T3,B3,S3,F3,X3,Y3,Z3,P3,A3から、次の規則に従って、信号を選択/統合して、信号Ts,Bs,Ss,Fs,Xs,Ys,Zs,Ps,Asとして、アドレスジェネレータ64に出力する。
この場合、第2のピクチャパラメータミキサ62は、原則として、第1のピクチャパラメータミキサ58が出力した信号T2,B2,S2,F2,X2,Y2,Z2,P2,A2を優先して選択する。ただし、第2のピクチャパラメータミキサ62は、緊急信号Eがアクティブのときは、第2のバックグラウンドスクリーンを定義する信号T3,B3,S3,F3,X3,Y3,Z3,P3,A3を選択する。もちろん、緊急信号Eがアクティブでないときでも、第1のピクチャパラメータミキサ58から信号T2,B2,S2,F2,X2,Y2,Z2,P2,A2が入力されていない場合は、第2のバックグラウンドスクリーンを定義する信号T3,B3,S3,F3,X3,Y3,Z3,P3,A3が選択される。
また、第2のピクチャパラメータミキサ62は、信号VALIDを、アドレスジェネレータ64に与え、アドレスジェネレータ64から、信号WISHが入力される。
アドレスジェネレータ64は、第2のピクチャパラメータミキサ62からのアドレス情報の形式Tsに従って、アドレス情報Asを27ビットの実アドレスArに変換する回路である。アドレスジェネレータ64には、CPU1からアクセスできる16×16ビットのセグメントレジスタ(図示せず)があり、これにはアドレス情報Asを変換する上で必要なベースアドレスやセグメントアドレスが格納されている。
本実施の形態では、アドレス情報の形式Tsにより示されるアドレッシングモードが、8種類用意される。即ち、8ビットキャラクタ番号モード、16ビットキャラクタ番号モード、アラインメント付き16ビットポインタモード、16ビットアドレスポインタモード、24ビットアドレスポインタモード、16ビット拡張キャラクタ番号モード、16ビット拡張アドレスポインタモード、及びアラインメント付き24ビットポインタモードが用意される。
8ビットキャラクタ番号モードは、キャラクタの選択を8ビットの番号Asで行う。16ビットキャラクタ番号モードは、キャラクタの選択を16ビットの番号Asで行う。これらのモードでは、セグメントレジスタの0番地に格納されたベースアドレス(256バイトアラインメント)をベースに、第2のピクチャパラメータミキサ56からのビット数Bsとサイズ情報Ssとで示される1キャラクタのサイズから実アドレスArが計算される。具体的には、実アドレスArは、(ベースアドレス)+(アドレス情報Asが示すキャラクタの番号)×(ビット数Bsが示す1ピクセルのビット数)×(サイズ情報Ssが示す1キャラクタのピクセル数)/8、により算出される。なお、「8」で除算しているのは、実アドレスArがバイトアドレスだからである。
アラインメント付き16ビットポインタモードは、キャラクタの選択を、16ビットでアラインメント付きのポインタAsで行う。具体的には、アラインメント付き16ビットポインタAsの上位3ビットで示されるセグメントレジスタに格納されたセグメントアドレス(256バイトアラインメント)とAsの下位13ビット(8バイトアラインメント)との和に夫々「0」の上位3ビットを加えて27ビットの実アドレスArとなる。
16ビットアドレスポインタモードは、キャラクタの選択を、16ビットのポインタAsで行う。具体的には、16ビットアドレスポインタAsの上位4ビットで示されるセグメントレジスタに格納されたセグメントアドレス(256バイトアラインメント)とAsの下位12ビットとの和に夫々「0」の上位3ビットを加えて27ビットの実アドレスArとなる。
24ビットアドレスポインタモードは、キャラクタの選択を、24ビットのポインタAsで行う。具体的には、24ビットアドレスポインタAsの値に夫々「0」の上位3ビットを加えるだけで27ビットの実アドレスArとなる。
16ビット拡張キャラクタ番号モードは、16ビットキャラクタ番号モードを拡張したモードである。このモードでは、セグメントレジスタの0番地に格納された27ビットのベースアドレス(2Kバイトアラインメント)をベースに、第2のピクチャパラメータミキサ56からのビット数Bsとサイズ情報Ssで示される1キャラクタのサイズから実アドレスArが計算される。具体的な計算方法は、16ビットキャラクタ番号モードと同様である。
16ビット拡張アドレスポインタモードは、16ビットアドレスポインタモードを拡張したモードである。具体的には、16ビットアドレスポインタAsの上位4ビットで示されるセグメントレジスタに格納された27ビットのベースアドレス(2Kバイトアラインメント)とAsの下位12ビットとの和が実アドレスArとなる。
アラインメント付き24ビットポインタモードは、24ビットのポインタAsが、27ビットの実アドレスArの上位24ビットとなり、下位3ビットは「0」で占められる(8バイトアラインメント)。
以上のようにして、アドレスジェネレータ64は、アドレス情報Asを実アドレスAr(以下、アドレス情報Arと呼ぶ。)に変換し、他の信号Bs,Ss,Fs,Xs,Ys,Zs,Psとともに、ストリップジェネレータ66に出力する。ただし、アドレス情報の形式Tsは、後段で使われないので送出することはしない。
また、アドレスジェネレータ64は、信号VALIDを、ストリップジェネレータ66に与え、ストリップジェネレータ66から、信号WISHが入力される。
ストリップジェネレータ66は、水平走査カウント信号HP及び垂直走査カウント信号VPに従って、表示処理範囲内に位置する(ピクセルバッファ78に重なっている(重なりつつある))キャラクタを選択する。
そして、ストリップジェネレータ66は、選択したキャラクタ(二次元配列)から、今描画されようとしている横一列の1次元配列(ストリップ、と呼ぶこともある。)を抽出する。例えば、キャラクタが、16ピクセル×16ピクセルであれば、横一列の16ピクセルがストリップである。具体的には、次の通りである。
ストリップジェネレータ66は、垂直位置情報Ys、垂直方向の反転を示すフリップ情報Fs、及び垂直走査カウント信号VPに基づいて、抽出するストリップを特定する。
そして、ストリップジェネレータ66は、特定したストリップのアドレス情報(先頭アドレス)Aspを、キャラクタパターンデータのアドレス情報As(先頭アドレス)、ビット数Bs、及びキャラクタのサイズ情報Ssが示す横サイズを基に算出する。これがストリップの抽出である。ここでのストリップの抽出は、キャラクタパターンデータから、特定したストリップのカラーコードの抽出を意味するのではない。
ストリップジェネレータ66は、算出したアドレス情報Aspを、他の信号Bs,Ss,Fs,Xs,Zs,Psとともに、キャラクタフェッチャ68に出力する。ただし、垂直方向の反転を示すフリップ情報Fs、及び垂直位置情報Ysは、後段で使われないので送出することはしない。
また、ストリップジェネレータ66は、信号VALIDを、キャラクタフェッチャ68に与え、キャラクタフェッチャ68から、信号WISHが入力される。
キャラクタフェッチャ68は、アドレス情報Aspとして伝送されてきたキャラクタをカラーコードに変換する。具体的には、キャラクタフェッチャ68は、アドレス情報Aspで指し示されるメモリMEM上の位置から、1ピクセルのビット数Bsとサイズ情報Ssが示す横サイズとで表される容量分のデータD(つまり、ストリップを構成する各ピクセルのカラーコード)をバイト単位で読み出し、バイト単位、リトルエンディアンの順序で順次ピクセルジェネレータ70へ出力する。以下では、データDを、ストリップパターンデータDと呼ぶ。
キャラクタフェッチャ68は、ストリップパターンデータDだけでなく、他の信号Bs,Ss,Fs,Xs,Zs,Psも、ピクセルジェネレータ70に出力する。また、キャラクタフェッチャ68は、信号VALIDを、ピクセルジェネレータ70に与え、ピクセルジェネレータ70から、信号WISHが入力される。
ピクセルジェネレータ70は、順番に入力されるバイトデータ(ストリップパターンDの一部あるいは全部)をリトルエンディアンに並べ、その下位からBsが示す1ピクセルのビット数(Mビット/ピクセル:M=1〜8)分のデータ(1ピクセルのカラーコード)を取り出す。そして、ピクセルジェネレータ70は、取り出した1ピクセルのカラーコードを、パレット情報Psと合成して、8ビットのカラーコードCを生成する。この場合の合成の方法は次の通りである。まず、8ビットの上位4ビットをパレット情報Psで埋め、次にビット数M分の下位を、取り出した1ピクセルのカラーコードで埋める。残ったビットは「0」で埋めるようにする。ビット数Mが5ビット以上のときは、取り出した1ピクセルのカラーコードにより、パレット情報Psが下位から侵食される。
以上のようにして、ピクセルジェネレータ70は、バイト単位で与えられるストリップパターンデータDを基に、ピクセル単位のカラーコードC(以下、ピクセルカラーコードCと呼ぶ。)を生成する。なぜなら、ストリップパターンデータDは、バイト単位で与えられ、多くの場合1ピクセルのビット数Bsは8ビット(1バイト)ではないからである。
また、ピクセルジェネレータ70は、キャラクタの水平位置情報Xsに基づいて、ピクセルごとの水平位置情報Xpを算出する。この場合、フリップ情報Fsが、水平方向の反転を示しているときは、サイズ情報Ssが示す水平サイズ分進んだところから逆に減少するように計算を行って、水平位置情報Xpを求める。
ピクセルジェネレータ70は、以上のようにして求めたピクセルカラーコードC及び水平位置情報Xpを、デプス情報Zsとともに、トランスペアレントコントローラ72に出力する。ただし、ビット数Bs、サイズ情報Ss、フリップ情報Fs、及びパレット情報Psは、後段で使われないので送出はしない。また、ピクセルジェネレータ70は、信号VALIDを、トランスペアレントコントローラ72に与え、トランスペアレントコントローラ72から、信号WISHが入力される。
トランスペアレントコントローラ72は、CPU1から間接的にアクセスできる16エントリ×5ビットの透明制御メモリ(図示せず)を備える。後述のキャラクタ用カラーパレット84は、256エントリ×16ビットのローカルメモリにより構成され、これを16エントリごとの16ブロックとみなすと、各ブロックに最大1つの透明色を設定できる。透明制御メモリの各エントリは、キャラクタ用カラーパレット84の各ブロックに対応している。CPU1が、キャラクタ用カラーパレット84のあるエントリに色データを書き込んだとき、その色が透明色であれば、そのエントリを含むブロックに対応する透明制御メモリのエントリは、ブロック内のどのエントリが透明色かを4ビットで記憶するとともに、残りの1ビット(以下、透明有効ビット、と呼ぶ。)に「1」をセットする。ここで、透明色に設定されているキャラクタ用カラーパレット84のエントリに非透明の色データを書き込むと、透明有効ビットの値は「0」にクリアされ、そのエントリは透明色でなくなる。
トランスペアレントコントローラ72は、ピクセルジェネレータ70から入力されたピクセルカラーコードCの上位4ビット(つまり、パレット情報Ps)で透明制御メモリをアクセスし、アクセスしたエントリの透明有効ビットが「1」であって、かつ、アクセスしたエントリの残り4ビットとピクセルカラーコードCの下位4ビットとが一致していれば、そのピクセルを透明と判断する。
トランスペアレントコントローラ72は、非透明と判断したピクセルの情報(水平位置情報Xp、デプス情報Zs、及びピクセルカラーコードC)は、ドロードライバ74へ出力し、透明と判断したピクセルの情報は、出力せず、ここで捨てる。また、トランスペアレントコントローラ72は、信号VALIDを、ドロードライバ74に与え、ドロードライバ74から、信号WISHが入力される。
ドロードライバ74は、水平位置情報Xpと水平走査カウント信号HPとから、その水平位置情報Xpで表示位置が示されるピクセルがピクセルバッファ78と重なっているか否かを判断し、重なっている場合は、ピクセルバッファコントローラ76に対して、そのピクセルのデプス情報Zs及びピクセルカラーコードCを、ピクセルバッファ78へ書き込むことを要求(つまり、描画要求)する。要求してから受諾されるまでに、水平走査カウント信号HPが1ステップ進む可能性があるので、ドロードライバ74は、1ピクセル少ないピクセルバッファ78の領域で重なりを判定する。
つまり、ドロードライバ74は、ピクセルがピクセルバッファ78と重なっていると判断したときは、描画要求信号REQをピクセルバッファコントローラ76に出力し、ピクセルバッファコントローラ76から、信号WISHが入力されたときに、水平位置情報Xp、デプス情報Zs、及びピクセルカラーコードCを、ピクセルバッファコントローラ76に出力する。
ピクセルバッファコントローラ76は、ドロードライバ74からの描画要求とビュードライバ80からの読み出し要求とを調停する。この場合、ビュードライバ80からの読み出し要求が優先される。ピクセルバッファコントローラ76は、調停の結果、許可した要求に応じた処理を実行する。この場合、ピクセルバッファコントローラ76は、リード/ライト信号BWを生成し、ピクセルバッファ78を駆動して、アドレス情報BAが指し示す位置からリードデータBOを読み出し、あるいは、アドレス情報BAが指し示す位置にライトデータBIを書き込む。要求(描画/読み出し)ごとの処理の詳細は次の通りである。
ピクセルバッファコントローラ76は、ドロードライバ74からの描画要求を許可したときは、ピクセルバッファ78から読み出したリードデータ(デプス情報Zpb及びピクセルカラーコードCpb)BOに含まれるデプス情報Zpbとドロードライバ74から入力されたデプス情報Zsとを比較する。そして、ピクセルバッファコントローラ76は、比較結果に応じて、ピクセルバッファ78に書き込むデータBIを、読み出したリードデータ(デプス情報Zpb及びピクセルカラーコードCpb)BOにするか入力されたデータ(デプス情報Zs及びピクセルカラーコードC)にするかを決める。この場合、デプス情報が大きい方が、ライトデータBIとして、ピクセルバッファ78に書き込まれる。なお、ピクセルバッファ78に与えるアドレス情報BAは、水平位置情報Xpに基づいて生成される。
一方、ピクセルバッファコントローラ76は、ビュードライバ80からの読み出し要求を許可したときは、ピクセルバッファ78から読み出したリードデータ(デプス情報Zpb及びピクセルカラーコードCpb)BOをビュードライバ80に出力する。なお、ビュードライバ80へのリードデータBOの出力後に、ピクセルバッファ78の該当位置をクリアするために書き込むデータは0固定(最も奥の位置を示すデプス情報に対応)である。また、ピクセルバッファ78に与えるアドレス情報BAは、ビュードライバ80から入力されるアドレス情報Xaである。
ピクセルバッファ78は、デプスバッファ及びコードバッファからなり(図示せず)、それぞれ、128ピクセル×4ビット及び128ピクセル×8ビットである。ここで、ピクセルバッファ78の1ピクセル分をピクセルバッファ単位(デプス情報Zpbを格納する4ビット及びピクセルカラーコードCpbを格納する8ビットの計12ビット)と呼ぶ。
ピクセルバッファ78は、走査位置(つまり、ビュードライバ80による読み出し位置)のピクセルバッファ単位を末尾とし、その走査位置からピクセルバッファ78の容量分先のピクセルバッファ単位が先頭となるように、デプス情報Zpb及びピクセルカラーコードCpbをピクセル単位で順次的に格納する。走査位置が移動したときは、末尾のピクセルバッファ単位が先頭の格納位置になるように、ピクセルバッファ単位を巡回させる。
ビュードライバ80は、水平走査カウント信号HPに基づいて、ピクセルバッファコントローラ76に対して、ピクセルバッファ78からのデータの読み出しを要求する。この読み出し要求は、水平走査カウント信号HPに基づいて生成したアドレス情報Xaと信号REQとを、ピクセルバッファコントローラ76に出力することにより行われる。ビュードライバ80からの読み出し要求は、ピクセルバッファコントローラ76により優先的に扱われるので、読み出し要求を待機させる信号は無い。
また、ビュードライバ80は、読み出したデプス情報Zpb及びピクセルカラーコードCpbをカラーパレットコントローラ82に出力する。
キャラクタ用カラーパレット84は、256エントリ×16ビットのローカルメモリであり、各エントリのデータは、色相(6ビット)/色飽和度(4ビット)/明度(6ビット)を示している。つまり、1エントリが1色に対応し、16ビットで1色を表現する。
色相は0〜47までの整数で、色飽和度は0〜15までの整数で、明度は0〜47までの整数である。透明色の設定は、色相に48〜63の値を設定することにより行う。
カラーパレットコントローラ82は、ビュードライバ80から入力されるピクセルカラーコードCpbをアドレスP1Aとして、キャラクタ用カラーパレット84にアクセスし、ピクセルカラーコードCpbを、色相Hc、色飽和度Sc、及び明度Lcに変換して、デプス情報Zs(以下、このデプス情報Zsをデプス情報Zcと呼ぶ。)とともに、ピクセルミキサ90に出力する。この場合の出力レートは、本実施の形態では、8クロック/ピクセルとする。カラーパレットコントローラ82の詳細は後述する。
ここで、色相Hc、色飽和度Sc、明度Lc、及びデプス情報Zcからなるデータを、「ピクセルデータPDC」と呼ぶこともある。
カラーパレットコントローラ82が出力するピクセルデータPDCにより表されるピクセルの二次元配列が、上述したキャラクタスクリーン(スプライト+バックグラウンドスクリーン)である。
本発明の特徴の1つであるビットマップジェネレータ86は、後述のビデオタイミングジェネレータ100が生成した水平走査カウント信号HC及び垂直走査カウント信号VCに従って、メモリMEMに格納されたビットマップデータを読み出して、ビットマップスクリーンを構成するピクセルデータPDB(色相Hb、色飽和度Sb、明度Lb、及びデプス情報Zbからなるデータ)を生成して、水平解像度に応じた出力レートで、ピクセルミキサ90に出力する。なお、上記のように、ビットマップスクリーンの水平解像度はプログラマブルであり、最大1水平当たり1024ピクセル相当までの解像度をサポートしている。ビットマップジェネレータ86の詳細は後述する。
ビットマップ用カラーパレット88は、キャラクタ用カラーパレット84と同じ構成を有する。ただし、透明色の設定は、色相に47、色飽和度に0、明度に0の値を設定することにより行う。
本発明の特徴の1つであるピクセルミキサ90は、カラーパレットコントローラ82から入力されるキャラクタスクリーンのピクセルデータPDCとビットマップジェネレータ86から入力されるビットマップスクリーンのピクセルデータPDBとを合成する。ピクセルミキサ90は、表示画面(テレビフレーム)上での奥行きを示すデプス情報Zc,Zbに基づいて、出力するピクセルデータ(色相、色飽和度、及び明度からなるデータ)を決定する。ただし、デプス情報が手前を示している場合でも、色相が透明色を示している場合には、他方のピクセルデータが選択される。ピクセルミキサ90の詳細は後述する。
ここで、ピクセルミキサ90が出力するピクセルデータを構成する色相、色飽和度、及び明度を、それぞれ、色相Hm、色飽和度Sm、及び明度Lmと表記する。
ウィンドウジェネレータ96は、ビットマップスクリーンと合成されたキャラクタスクリーンに特殊効果を与えるための回路であり、それをマスク領域と非マスク領域に分割する。マスク領域に対しては、後述のカラーモジュレータ92で特殊効果を与えることができる。このウィンドウジェネレータ96は、CPU1からアクセスできるレジスタを備えており、1水平ラインにおけるマスク開始点の座標、マスク終了点の座標、及びキャラクタスクリーン左端の論理を設定できる。キャラクタスクリーン左端の論理とは、左端の状態、つまり、左端がマスクありかマスクなしかを示す論理である。
ウィンドウジェネレータ96は、設定されたキャラクタスクリーン左端の論理に従って、信号WINの出力を開始し、水平走査カウント信号HPがマスク開始点と一致するとアサートされ、マスク終了点に一致するとネゲートされる。また、信号WINがマスク開始点またはマスク終了点に一致するたびに、CPU1に対し割り込みを発生でき、マスク開始点及びマスク終了点を逐次的に変更できるようになっている。これにより、ビットマップスクリーンと合成されたキャラクタスクリーンのマスク領域を様々な形状に設定することができる。
ノイズジェネレータ94は、カラーモジュレータ92で実現する視覚的色効果の1つを演出するためのノイズを生成する。具体的には、ノイズジェネレータ94は、M系列(ポリノミナルカウンタ)を用いたデジタル擬似乱数系列発生器であり、M系列の下位3ビットをノイズ成分N[2:0]として出力する。なお、ノイズジェネレータ94は、リセット信号LPWでリセットされ、異常なループで巡回しないようにしている。
カラーモジュレータ92は、入力された色(色相Hm/色飽和度Sm/明度Lm)に種々の視覚的効果を与える回路である。カラーモジュレータ92は、信号WINがアサートされているときに、活性化され、ネゲートされているときに非活性化される。
カラーモジュレータ92は、CPU1からアクセスできる様々なレジスタ及びフラグを備えており、これで視覚的効果を設定することができる。設定できる効果として次の4つがある。
第1は、色相、色飽和度、及び明度の各要素を固定できる。各要素の値は、対応するレジスタ(図示せず)に設定する。このレジスタの値は、対応するフラグ(図示せず)が「1」のとき有効になる。このフラグは、要素ごとに設けられているので、固定値を使用するか否かを要素ごとに設定できる。
第2は、ハーフトーン表示を行うべく、対応するフラグ(図示せず)を「1」にすることで、明度Lmと色飽和度Smの値をそれぞれ半分にすることができる。
第3は、ネガ/ポジを反転することができる。具体的には、色相Hmに値24を加算し結果が47を越えたら0に巡回するように値48を引き、明度Lmを値47から引くことで明暗を逆にする。
第4は、輝度に適当なノイズを加えることができる。具体的には、明度Lmの下位3ビットとノイズジェネレータ94からのノイズ成分N[2:0]とをビット単位で排他的論理和演算する。この演算を行うか否かを設定できるフラグ(図示せず)が、3ビットのそれぞれに対して設けられており、これによりノイズが加わる量を加減できる。
ここで、カラーモジュレータ92により、視覚的効果を与えた後の色相Hm、色飽和度Sm、及び明度Lmを、それぞれ色相Hf、色飽和度Sf、及び明度Lfと呼ぶ。ただし、この視覚的効果は、必ずしも与えられるものではないため、カラーモジュレータ92が、視覚的効果を与えずにそのまま出力する色相Hm、色飽和度Sm、及び明度Lmも、それぞれ色相Hf、色飽和度Sf、及び明度Lfと表記する。
ビデオエンコーダ98は、カラーモジュレータ92から入力された色情報(色相Hf、色飽和度Sf、及び明度Lf)と、ビデオタイミングジェネレータ100から入力されたタイミング情報(複合同期信号SYN、複合ブランキング信号BLK、バーストフラグ信号BST、及びライン交番信号LA等)と、を入力される信号VSに対応したコンポジットビデオ信号VDに変換する。信号VSは、テレビジョン方式(NTSC/PAL)を指示する信号である。なお、ライン交番信号LAは、信号VSにより、テレビジョン方式として、PALが指示されたときに使用される。ビデオエンコーダ98の詳細は、次の通りである。
ビデオエンコーダ98は、値47の次が値0になるように巡回する6ビットで48進のカウンタを有しており、このカウンタは、43MHzのクロックCK40に応じて、NTSCは4つずつ、PALは5つずつ進む。従って、NTSCは、12回で1周し、PALは9.6回で1周する。
このカウンタは、ちょうどサブキャリアの周期で巡回するので、サブキャリア発振器とみなせ、このカウンタの値は位相を表すことになる。なお、NTSCの場合、カウンタの下位2ビットが変化しなくなるので、これが漸近的に0になるようにして、同一のパターンに集束するようにしている。
ビデオエンコーダ98は、色相Hfとこのサブキャリアの位相データとを加算し、サブキャリアを色相Hfで位相変調した位相データである位相変調位相データを作成する。そして、ビデオエンコーダ98は、この位相変調位相データを波形ROMで振幅データに変換する。さらに、ビデオエンコーダ98は、その振幅データと色飽和度Sfとを掛け合わせ、色飽和度Sfで振幅変調した信号(つまり、変調色信号)にする。一方、ビデオエンコーダ98は、明度Lfに、値8のオフセットを加え輝度信号とする。
ビデオエンコーダ98は、この変調色信号と輝度信号とを加えて、デジタルのコンポジットビデオ信号とし、これをADコンバータ(図示せず)でアナログ信号に変換し、アナログのコンポジットビデオ信号VDとして外部に出力する。
ビデオエンコーダ98は、複合ブランキング信号BLKがアサートされているときは、輝度信号を黒レベル=値8にし、複合同期信号SYNがアサートされているときは、輝度信号を同期レベル=値0にする。また、ビデオエンコーダ98は、色相及び色飽和度を、複合ブランキング信号BLKがアサートされているときは値0に、バーストフラグ信号BSTがアサートされているときは一定の値になるように制御する。従って、これらの場合は、カラーモジュレータ92から入力された色相Hf及び色飽和度Sfは使用しない。さらに、ビデオエンコーダ98は、複合ブランキング信号BLKがアサートされているときは、輝度信号に変調色信号を加えず、輝度信号のみをコンポジットビデオ信号VDとして出力する。ただし、ビデオエンコーダ98は、複合ブランキング信号BLKがアサートされている場合でも、所定のタイミングでカラーバースト信号を出現させる。
ビデオタイミングジェネレータ100は、クロックCK40を基に、水平走査カウント信号HC及び垂直走査カウント信号VC、並びに、複合同期信号SYN、複合ブランキング信号BLK、バーストフラグ信号BST、及びライン交番信号LA等のタイミング信号を生成する。
ビデオタイミングジェネレータ100は、分周器で構成され、信号VSに従って、つまり、NTSCかPALかで、分周率を変えている。ビデオタイミングジェネレータ100の生成するタイミングは、CPU1によって設定変更が可能であるが、初期設定では、NTSCの場合に、CK40の2730クロックを1水平周期とし、263水平周期を1垂直周期とする。また、PALでは、CK40の2724クロックを1水平周期とし、314水平周期を1垂直周期とする。
このような分周率にしたのは、NTSC/PALの標準信号に近い水平/垂直周波数と、標準信号に合わせたインターリーブ方式と、を提供するためである。NTSCは、ライン/フレームともインターリーブが180度、PALは、ラインインターリーブを270度にしている。ただし、PALのフレームインターリーブは、標準と違って180度にしている。これはノンインターレース方式において、サブキャリアが輝度に与えるドット妨害を軽減するためである。
ここで、図示していないが、ビデオタイミングジェネレータ100は、水平周期を設定するためのレジスタ、水平同期パルスの左端を設定するレジスタ、等価パルスの右端を設定するレジスタ、水平同期パルスの右端を設定するレジスタ、カラーバーストの左端を設定するレジスタ、カラーバーストの右端を設定するレジスタ、ビデオフィールドの左端を設定するレジスタ、垂直同期パルスの右端を設定するレジスタ、ビデオフィールドの右端を設定するレジスタ、垂直周期を設定するためのレジスタ、ビデオフィールドの下端を設定するレジスタ、カラーバーストの下端を設定するレジスタ、等価パルスの上端を設定するレジスタ、垂直同期パルスの上端を設定するレジスタ、垂直同期パルスの下端を設定するレジスタ、等価パルスの下端を設定するレジスタ、カラーバーストの上端を設定するレジスタ、及び、ビデオフィールドの上端を設定するレジスタを具備する。従って、CPU1は、これらのレジスタにアクセスすることで、コンポジットビデオ信号VDのフォームを調整できる。
本発明の特徴の1つであるビデオポジションアジャスタ102は、表示画面(テレビフレーム)に対するキャラクタスクリーンの位置を調整する。具体的には次の通りである。
ビデオポジションアジャスタ102は、入力される水平走査カウント信号HC及び垂直走査カウント信号VCに対して、それぞれオフセットを与え、水平走査カウント信号HP及び垂直走査カウント信号VPを生成する。水平走査カウント信号HP及び垂直走査カウント信号VPは、上記のように、キャラクタスクリーンの生成に関わる各機能ブロックに対して出力される。オフセットは、ビデオポジションアジャスタ102に内蔵される制御レジスタ242,244,250,252(後述の図17参照)に対し、CPU1がアクセスすることで設定される。詳細は後述する。
ここで、上記のように、ビットマップジェネレータ86では、ビデオタイミングジェネレータ100で生成された水平走査カウント信号HC及び垂直走査カウント信号VCが使用される。従って、ビデオポジションアジャスタ102により、キャラクタスクリーンとビットマップスクリーンとの相対的な位置関係の調整が可能になる。
ビデオファンクションジェネレータ104は、水平走査カウント信号HP及び垂直走査カウント信号VPを基に、キャラクタスクリーンの1フレーム分の描画終了タイミングを認識し、そのタイミングでマスク不可割込み信号NMI(Non−Maskable Interrupt)をCPU1に与える。これにより、CPU1は、キャラクタスクリーンの1フレーム分の描画終了を認識できる。また、ビデオファンクションジェネレータ104は、水平走査カウント信号HP及び垂直走査カウント信号VPが、制御レジスタ(図示せず)に設定された値と一致したときに、割込み要求信号IRQ(Interrupt Request)を発生させる。この制御レジスタに対して、CPU1はアクセス可能であり、割込み要求信号IRQの発生タイミングを制御できる。さらに、ビデオファンクションジェネレータ104は、ライトペン入力信号LP0,LP1のエッジで、水平走査カウント信号HP及び垂直走査カウント信号VPの値をラッチする。
CPU1は、第1バス31を通じてラッチされた値を読み出すことができる。なお、マスク不可割込み信号NMI及び割込み要求信号IRQは、グラフィックスプロセッサ3からCPU1への割込み要求信号INRQを構成するものである。
また、スプライトDMAコントローラ50、第1のバックグラウンドジェネレータ56、及び第2のバックグラウンドジェネレータ60は、第1バス31へのバス要求機能を備えており、メインメモリ17から能動的にデータを取得できる。また、キャラクタフェッチャ68及びビットマップジェネレータ86は、第1バス31及び第2バス33へのバス要求機能を備えており、メインメモリ17及び外部メモリ45から能動的にデータを取得できる。
さて、次に、ピクセルミキサ90の詳細を説明する。
図10は、図9のピクセルミキサ90の内部構成を示すブロック図である。図11は、図9のピクセルミキサ90による選択ピクセル決定のための真理値表である。
図10に示すように、ピクセルミキサ90は、選択ピクセル決定回路110、およびマルチプレクサ112,114,116により構成される。選択ピクセル決定回路110には、図9のカラーパレットコントローラ82から、キャラクタスクリーンのピクセルデータPDCに含まれるデプス情報Zcおよび色相情報Hcが入力される。また、図9のビットマップジェネレータ86からは、選択ピクセル決定回路110に、ビットマップスクリーンのピクセルデータPDBに含まれるデプス情報Zb及び色相情報Hbが入力される。
選択ピクセル決定回路110は、図11の真理値表にしたがって、キャラクタスクリーンのピクセルデータPDC(色相Hc/色飽和度Sc/明度Lc)あるいはビットマップスクリーンのピクセルデータPDB(色相Hb/色飽和度Sb/明度Lb)のいずれか一方を選択する選択信号SELPをマルチプレクサ112,114,116に出力する。具体的には次の通りである。
図11に示すように、選択ピクセル決定回路110は、デプス情報Zc≧デプス情報Zbであって、色相Hc≧0x30(つまり、色相Hcが透明色を示す場合)の場合は、色相Hb、色飽和度Sb、及び明度Lbを選択する選択信号SELPを出力する。また、選択ピクセル決定回路110は、デプス情報Zc≧デプス情報Zbであって、色相Hc<0x30(つまり、色相Hcが非透明色を示す場合)の場合は、色相Hc、色飽和度Sc、及び明度Lcを選択する選択信号SELPを出力する。
選択ピクセル決定回路110は、デプス情報Zc<デプス情報Zbであって、色相Hb≧0x30(つまり、色相Hbが透明色を示す場合)の場合は、色相Hc、色飽和度Sc、及び明度Lcを選択する選択信号SELPを出力する。また、選択ピクセル決定回路110は、デプス情報Zc<デプス情報Zbであって、色相Hb<0x30(つまり、色相Hbが非透明色を示す場合)の場合は、色相Hb、色飽和度Sb、及び明度Lbを選択する選択信号SELPを出力する。
以上のように、選択ピクセル決定回路110は、デプス情報の大きい(つまり、前面側の)ピクセルデータ(H/S/L)を選択する選択信号SELPを生成する。ただし、選択ピクセル決定回路110は、色相が透明色を示しているときは、デプス情報の如何に関係なく、他方のピクセルデータ(H/S/L)を選択する選択信号SELPを生成する。
マルチプレクサ112は、選択信号SELPに従って、入力されるキャラクタスクリーンの色相情報Hcあるいはビットマップスクリーンの色相情報Hbのいずれかを選択して、色相情報Hmとして、カラーモジュレータ92へ出力する。マルチプレクサ114は、選択信号SELPに従って、入力されるキャラクタスクリーンの色飽和度情報Scあるいはビットマップスクリーンの色飽和度情報Sbのいずれかを選択して、色飽和度情報Smとして、カラーモジュレータ92へ出力する。マルチプレクサ116は、選択信号SELPに従って、入力されるキャラクタスクリーンの明度情報Lcあるいはビットマップスクリーンの明度情報Lbのいずれかを選択して、明度情報Lmとして、カラーモジュレータ92へ出力する。
以上のようにして、ピクセルミキサ90は、デプス情報Zc,Zb及び色相情報Hc,Hbに基づいて、キャラクタスクリーンのピクセルデータPDCあるいはビットマップスクリーンのピクセルデータPDBのいずれかを選択/出力していって、キャラクタスクリーンとビットマップスクリーンとを合成する。
図12は、図9のピクセルミキサ90による画像合成の様子の1例を示すタイミングチャートである。図12(信号(a)〜(e))に示すように、キャラクタスクリーンの1ピクセル分のデータ出力期間がCK40の8クロックに相当するため、カラーパレットコントローラ82は、CK40の8クロック/ピクセルの出力レートで、キャラクタスクリーンの色相Hc、色飽和度Sc、明度Lc、及びデプス情報Zcを出力する。
一方、ビットマップスクリーンの水平解像度はプログラマブルであり、図12では、1ピクセル分のデータ出力レートはCK40の3クロック/ピクセルとする。従って、図12(信号(a)及び信号(f)〜(i))に示すように、ビットマップジェネレータ86は、CK40の3クロック/ピクセルの出力レートで、ビットマップスクリーンの色相Hb、色飽和度Sb、明度Lb、及びデプス情報Zbを出力する。
期間T0では、Zc>Zbであるため、図12(信号(j)〜(l))に示すように、(Hm,Sm,Lm)=(Hc,Sc,Lc)となる。期間T1では、Zc<Zbであるため、(Hm,Sm,Lm)=(Hb,Sb,Lb)となる。期間T2では、Zc<Zbであるため、(Hm,Sm,Lm)=(Hb,Sb,Lb)となる。期間T3では、Zc>Zbであるため、(Hm,Sm,Lm)=(Hc,Sc,Lc)となる。期間T4では、Zc<Zbであるが、色相Hbが透明色(3FH)を示しているため、(Hm,Sm,Lm)=(Hc,Sc,Lc)となる。
以上のように、ピクセルミキサ90の選択ピクセル決定回路110は、ピクセルデータPDC及びPDBが入力されるたびに、デプス情報Zc及びZb、並びに色相Hc及びHbに基づいて、選択するピクセルデータ(H/S/L)を決定して、マルチプレクサ112,114,116に決定したピクセルデータ(H/S/L)を選択させる。
さて、次に、図9のカラーパレットコントローラ82の詳細を説明する。
図13は、図9のカラーパレットコントローラ82の内部構成を示すブロック図である。図13に示すように、カラーパレットコントローラ82は、マルチプレクサ120,124,126,130,132,134,136,142、テンポラリアドレスレジスタ122、テンポラリデータレジスタ128、アドレスデコーダ140、制御論理ブロック138、及びピクセル出力制御回路144を含む。
アドレスデコーダ140は、第1バス31のアドレスFBAD[14:0]のデコード結果及び内部リード/ライト信号FBRWに基づいて、マルチプレクサ120,124,126,130,132,134,136を制御するための制御信号を制御論理ブロック138に出力する。制御論理ブロック138は、この制御信号に基づいて、マルチプレクサ120,124,126,130,132,134,136に選択信号を出力する。また、アドレスデコーダ140は、第1バス31のアドレスFBAD[14:0]のデコード結果及び内部リード/ライト信号FBRWに基づいて、マルチプレクサ142に選択信号を出力する。マルチプレクサ120,124,126,130,132,134,136,142の各々は、入力された選択信号に従って、入力される複数の信号から1つの信号を選択して出力する。
キャラクタ用カラーパレット84へのアクセスモードには、大きく分けて以下の3つが存在する。第1のアクセスモードは、第1バス31のアドレス空間にマッピングされたカラーパレット84のデータを更新するモードである。第2のアクセスモードは、カラーコンポーネントアクセスポートを通じてのカラーパレット84のデータを更新するモードである。第3のアクセスモードは、表示のためにカラーパレット84のデータをリードするモードである。
ここで、カラーパレット84の各エントリは、16ビットであり、16ビットのカラーパレットデータ[15:0](色相H[5:0]/色飽和度S[3:0]/明度L[5:0])が格納されている。カラーパレットデータ[4:0]及び[13]がそれぞれ色相H[5:1]及び[0]であり、カラーパレットデータ[7:5]及び[14]がそれぞれ色飽和度S[3:1]及び[0]であり、カラーパレットデータ[12:8]及び[15]がそれぞれ明度L[5:1]及び[0]である。
第1のアクセスモードについて説明する。CPU1が第1のアクセスモードにてカラーパレット84にアクセスする場合、カラーパレット84の内容が全て異なるアドレスにマッピングされているというメリットがある反面、色相/色飽和度/明度のコンポーネントが16ビットに隙間無く配置されているため、通常はCPU1自身でリード・モディファイ・ライトの処理を行う必要があるというデメリットがある。但し、16ビットの色データを単に書き込むだけであれば、ライトの処理だけでよい。
カラーパレット84の各エントリには、16ビットのデータが隙間無く配置されている。このため、色相H、色飽和度Sおよび明度Lの内一若しくは二つを更新する場合、又は、これら三つのカラーコンポーネントの全てを更新するときでも、それらに演算処理を施す場合には、CPU1が、リード・モディファイ・ライトを行わなければならない。また、色相H、色飽和度Sおよび明度LのLSBは、それぞれ、カラーパレット84のエントリのビット13,14,15に格納されているため、ビット並び替えの処理も必要となる。
リード・モディファイ・ライトが必要な場合、CPU1は、まず、カラーパレット84から、カラーパレットデータをリードする。この点を詳しく説明する。
第1バス31のアドレスFBAD[14:0]が、0x6800〜0x68FFのいずれかを示している場合、カラーパレット84のエントリの下位バイトデータへのアクセスが行われる。また、第1バス31のアドレスFBAD[14:0]が、0x6900〜0x69FFのいずれかを示している場合、カラーパレット84のエントリの上位バイトデータへのアクセスが行われる。
アドレスFBADが上記のいずれかを示し、かつ、内部リード/ライト信号FBRWがリードを示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、マルチプレクサ120及び124に対して、アドレスFBAD[7:0]を選択する選択信号を出力する。これにより、テンポラリアドレスレジスタ122には、アドレスFBAD[7:0]が保持され、マルチプレクサ124は、テンポラリアドレスレジスタ122に保持されたアドレスFBAD[7:0]を、カラーパレットアドレスP1A[7:0]として、カラーパレット84へ出力する。
内部リード/ライト信号FBRWがリードを示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、カラーパレット84に対して、リードを示すカラーパレットリード/ライト信号P1Wを、カラーパレット84へ出力する。その結果、カラーパレットアドレスP1A[7:0]が指し示す位置から、カラーパレットデータP1Iが読み出される。
ここで、カラーパレット84は、256のエントリからなり、第1バス31のアドレスFBADの下位8ビットが、カラーパレット84のエントリ番号(色番号)に対応するように、カラーパレット84は、第1バス31のアドレス空間にマッピングされる。このため、上記のように、アドレスFBAD[7:0]が、カラーパレットアドレスP1A[7:0]として、カラーパレット84へ出力される。
アドレスFBADが、0x6800〜0x68FFのいずれかを示し、かつ、内部リード/ライト信号FBRWがリードを示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、マルチプレクサ126に対して、カラーパレット84から読み出されたカラーパレットデータP1I[7:0]を選択する選択信号を出力する。これにより、マルチプレクサ126から、テンポラリデータレジスタ128へカラーパレットデータP1I[7:0]が与えられ、一旦保持される。
従って、このリードサイクルでは、カラーパレットデータP1I[7:0]を読み出すことができない。0x6800〜0x68FFのアドレス空間からの次のリードサイクルにおいて、アドレスデコーダ140が、テンポラリデータレジスタ128に保持されたカラーパレットデータP1I[7:0]を選択する選択信号をマルチプレクサ142に出力することにより、マルチプレクサ142は、カラーパレットデータP1I[7:0]を内部データFBDO[7:0]として出力する。
なお、0x6900〜0x69FFのアドレス空間からのデータリードにおいては、マルチプレクサ126は、制御論理ブロック138からの制御信号に従って、カラーパレットデータP1I[15:8]を選択し、テンポラリデータレジスタ128に出力する。これ以外の点は、0x6800〜0x68FFのアドレス空間からのデータリードと同様であり、説明を省略する。
CPU1は、内部データFBDOとして読み出したカラーパレットデータP1Iを更新し、次にライトを行う。このライト動作は、三つのカラーコンポーネントの全てを更新する場合でも同様に行われる。詳しくは次の通りである。CPU1は、更新したカラーパレットデータを内部データFBDIとして、マルチプレクサ126に与える。アドレスFBADが0x6800〜0x68FF,0x6900〜0x69FFを示し、かつ、内部リード/ライト信号FBRWがライトを示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、マルチプレクサ126に対して、内部データFBDI[7:0]を選択する選択信号を出力する。これにより、テンポラリデータレジスタ128には、内部データFBDI[7:0]が保持され、マルチプレクサ130,132,134,136に与えられる。
アドレスFBADが、0x6800〜0x68FFのいずれかを示し、かつ、内部リード/ライト信号FBRWがライトを示している場合は、制御論理ブロック138は、先ず、第1のサイクルでカラーパレット84からのリードを行う。これは、カラーパレット84の1エントリが16ビットで構成されており、ここではエントリの下位バイトしか書き換えられないため、エントリの現在値を読み出し、下位バイトを置き換えた後に再度エントリに書き込む必要があるからである。制御論理ブロック138は、マルチプレクサ120に対してアドレスFBAD[7:0]を、マルチプレクサ124に対してテンポラリアドレスレジスタ122[7:0]を選択する選択信号を出力するとともに、カラーパレットリード/ライト信号P1Wをリードに設定する。このサイクルで、カラーパレットアドレスP1A[7:0]により選択されたエントリのデータがカラーパレットデータP1I[15:0]として読み出される。
第2のサイクルでは、制御論理ブロック138は、マルチプレクサ130,132,134及び136に対して、それぞれ、カラーパレットデータP1I[15:13]、P1I[12:8]、テンポラリデータレジスタ128の内部データFBDI[7:5]及びFBDI[4:0]を選択する選択信号を出力する。これにより、マルチプレクサ130,132,134及び136から、更新されたカラーパレットデータP1O[15:0]が、カラーパレット84に出力され、ライトを示すカラーパレットリード/ライト信号P1Wに従って、カラーパレットアドレスP1Aが指し示す位置に書き込まれる。
アドレスFBADが、0x6900〜0x69FFのいずれかを示し、かつ、内部リード/ライト信号FBRWがライトを示している場合も、制御論理ブロック138は、先ず、第1のサイクルでカラーパレット84からのリードを行う。これは、カラーパレット84の1エントリが16ビットで構成されており、ここではエントリの上位バイトしか書き換えられないため、エントリの現在値を読み出し、上位バイトを置き換えた後に再度エントリに書き込む必要があるからである。制御論理ブロック138は、マルチプレクサ120に対してアドレスFBAD[7:0]を、マルチプレクサ124に対してテンポラリアドレスレジスタ122[7:0]を選択する選択信号を出力するとともに、カラーパレットリード/ライト信号P1Wをリードに設定する。このサイクルで、カラーパレットアドレスP1A[7:0]により選択されたエントリのデータがカラーパレットデータP1I[15:0]として読み出される。
第2のサイクルでは、制御論理ブロック138は、マルチプレクサ130,132,134及び136に対して、それぞれ、テンポラリデータレジスタ128の内部データFBDI[7:5]、FBDI[4:0]、カラーパレットデータP1I[7:5]、及びP1I[4:0]を選択する選択信号を出力する。これにより、マルチプレクサ130,132,134及び136から、更新後のカラーパレットデータP1O[15:0]が、カラーパレット84に出力され、ライトを示すカラーパレットリード/ライト信号P1Wに従って、カラーパレットアドレスP1Aが指し示す位置に書き込まれる。
第2のアクセスモードについて説明する。第1のアクセスモードでは、一つ又は二つのカラーコンポーネントを更新する場合などでは、CPU1によるリード・モディファイ・ライトが必要であり、CPU1の処理負担が増加する。そこで、第2のアクセスモードでは、色相H、色飽和度S、及び明度L(つまり3つのカラーコンポーネント)ごとに独立したアクセスポートを設けることで、処理負担の軽減を図っている。
第1バス31のアドレス空間において、0x6F78がカラーパレット84のエントリ番号を入力するためのアクセスポートとして設定され、また、0x6F79が色相H、0x6F7Aが色飽和度S、及び0x6F7Bが明度Lを更新/リードするためのアクセスポートとしてそれぞれ設定される。
アドレスFBADが、0x6F78を示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、マルチプレクサ120及び124に対して、内部データFBDIを選択する選択信号を出力する。これにより、内部データFBDIが、マルチプレクサ120から、テンポラリアドレスレジスタ122に与えられ、保持される。この場合、内部データFBDIは、カラーパレット84のエントリ番号(つまり、アドレス)を示している。テンポラリアドレスレジスタ122に保持された内部データFBDIは、マルチプレクサ124により選択され、カラーパレットアドレスP1Aとして、カラーパレット84に出力される。そして、制御論理ブロック138が出力するリードを示すカラーパレットリード/ライト信号P1Wに応じて、アドレスP1Aが指し示す位置から、カラーパレットデータP1Iが読み出され、マルチプレクサ126,130,132,134,136,142に与えられる。この点は、色相H、色飽和度S、及び明度Lを更新/リードする場合で同じである。
まず、更新について説明する。アドレスFBADが、0x6F79を示しており(色相Hを更新)、かつ、内部リード/ライト信号FBRWが、ライトを示している場合は、制御論理ブロック138は、先ず、第1のサイクルでカラーパレット84からのリードを行う。これは、カラーパレット84の1エントリにおける色相Hのみを更新するため、エントリの現在値を読み出し、色相Hを置き換えた後に再度エントリに書き込む必要があるからである。制御論理ブロック138は、マルチプレクサ120に対して内部データFBDI[7:0]を、マルチプレクサ124に対してテンポラリアドレスレジスタ122[7:0]を選択する選択信号を出力するとともに、カラーパレットリード/ライト信号P1Wをリードに設定する。このサイクルで、カラーパレットアドレスP1A[7:0]により選択されたエントリのデータがカラーパレットデータP1I[15:0]として読み出される。また、制御論理ブロック138は、マルチプレクサ126に対して、内部データFBDIを選択する選択信号を出力する。これにより、内部データFBDIが、マルチプレクサ126から、テンポラリデータレジスタ128に与えられ、保持される。この場合、内部データFBDIは、更新する色相情報Hからなる。内部データFBDI[7:0]のうち、上位6ビットが色相情報Hであり、下位2ビットは「0」で埋められている。
第2のサイクルでは、制御論理ブロック138は、マルチプレクサ130に対して、カラーパレットデータP1I[15][14]及びテンポラリデータレジスタ128の内部データFBDI[2]を選択する選択信号を出力する。これにより、これらのデータが、マルチプレクサ130から、カラーパレットデータP1O[15:13]として、カラーパレット84に出力される。
さらに、この場合は、制御論理ブロック138は、マルチプレクサ132,134,及び136に対して、それぞれ、カラーパレットデータP1I[12:8]、カラーパレットデータP1I[7:5]、及びテンポラリデータレジスタ128の内部データFBDI[7:3]を選択する選択信号を出力する。これにより、これらのデータが、マルチプレクサ132,134及び136から、カラーパレットデータP1O[12:8],[7:5]及び[4:0]として、それぞれカラーパレット84に出力される。また、第2のサイクルでは、制御論理ブロック138は、カラーパレットリード/ライト信号P1Wをライトに設定する。これにより、マルチプレクサ130,132,134,136から出力されたカラーパレットデータP1O[15:0]が、カラーパレット84のカラーパレットアドレスP1Aが指し示す位置に書き込まれる。
一方、アドレスFBADが、0x6F7Aを示しており(色飽和度Sを更新)、かつ、内部リード/ライト信号FBRWが、ライトを示している場合は、制御論理ブロック138は、先ず、第1のサイクルでカラーパレット84からのリードを行う。これは、カラーパレット84の1エントリにおける色飽和度Sのみを更新するため、エントリの現在値を読み出し、色飽和度Sを置き換えた後に再度エントリに書き込む必要があるからである。制御論理ブロック138は、マルチプレクサ120に対して内部データFBDI[7:0]を、マルチプレクサ124に対してテンポラリアドレスレジスタ122[7:0]を選択する選択信号を出力するとともに、カラーパレットリード/ライト信号P1Wをリードに設定する。このサイクルで、カラーパレットアドレスP1A[7:0]により選択されたエントリのデータがカラーパレットデータP1I[15:0]として読み出される。また、制御論理ブロック138は、マルチプレクサ126に対して、内部データFBDIを選択する選択信号を出力する。これにより、内部データFBDIが、マルチプレクサ126から、テンポラリデータレジスタ128に与えられ、保持される。この場合、内部データFBDIは、更新する色飽和度情報Sからなる。内部データFBDI[7:0]のうち、上位4ビットが色飽和度情報Sであり、下位4ビットは「0」で埋められている。
第2のサイクルでは、制御論理ブロック138は、マルチプレクサ130に対して、カラーパレットデータP1I[15]、テンポラリデータレジスタ128の内部データFBDI[4]、及びカラーパレットデータP1I[13]を選択する選択信号を出力する。これにより、これらのデータが、マルチプレクサ130から、カラーパレットデータP1O[15:13]として、カラーパレット84に出力される。
さらに、この場合は、制御論理ブロック138は、マルチプレクサ132,134,及び136に対して、それぞれ、カラーパレットデータP1I[12:8]、テンポラリデータレジスタ128の内部データFBDI[7:5]、及びカラーパレットデータP1I[4:0]を選択する選択信号を出力する。これにより、これらのデータが、マルチプレクサ132,134及び136から、カラーパレットデータP1O[12:8],[7:5]及び[4:0]として、それぞれカラーパレット84に出力される。また、第2のサイクルでは、制御論理ブロック138は、カラーパレットリード/ライト信号P1Wをライトに設定する。これにより、マルチプレクサ130,132,134,136から出力されたカラーパレットデータP1O[15:0]が、カラーパレット84のカラーパレットアドレスP1Aが指し示す位置に書き込まれる。
さらに、一方、アドレスFBADが、0x6F7Bを示しており(明度Lを更新)、かつ、内部リード/ライト信号FBRWが、ライトを示している場合は、制御論理ブロック138は、先ず、第1のサイクルでカラーパレット84からのリードを行う。これは、カラーパレット84の1エントリにおける明度Lのみを更新するため、エントリの現在値を読み出し、明度Lを置き換えた後に再度エントリに書き込む必要があるからである。制御論理ブロック138は、マルチプレクサ120に対して内部データFBDI[7:0]を、マルチプレクサ124に対してテンポラリアドレスレジスタ122[7:0]を選択する選択信号を出力するとともに、カラーパレットリード/ライト信号P1Wをリードに設定する。このサイクルで、カラーパレットアドレスP1A[7:0]により選択されたエントリのデータがカラーパレットデータP1I[15:0]として読み出される。また、制御論理ブロック138は、マルチプレクサ126に対して、内部データFBDIを選択する選択信号を出力する。これにより、内部データFBDIが、マルチプレクサ126から、テンポラリデータレジスタ128に与えられ、保持される。この場合、内部データFBDIは、更新する明度情報Lからなる。内部データFBDI[7:0]のうち、上位6ビットが明度情報Lであり、下位2ビットは「0」で埋められている。
第2のサイクルでは、制御論理ブロック138は、マルチプレクサ130に対して、テンポラリデータレジスタ128の内部データFBDI[2]、カラーパレットデータP1I[14]、及びカラーパレットデータP1I[13]を選択する選択信号を出力する。これにより、これらのデータが、マルチプレクサ130から、カラーパレットデータP1O[15:13]として、カラーパレット84に出力される。
さらに、この場合は、制御論理ブロック138は、マルチプレクサ132,134,及び136に対して、それぞれ、テンポラリデータレジスタ128の内部データFBDI[4:0]、カラーパレットデータP1I[7:5]、及びカラーパレットデータP1I[4:0]を選択する選択信号を出力する。これにより、これらのデータが、マルチプレクサ132,134及び136から、カラーパレットデータP1O[12:8],[7:5]及び[4:0]として、それぞれカラーパレット84に出力される。また、第2のサイクルでは、制御論理ブロック138は、カラーパレットリード/ライト信号P1Wをライトに設定する。これにより、マルチプレクサ130,132,134,136から出力されたカラーパレットデータP1O[15:0]が、カラーパレット84のカラーパレットアドレスP1Aが指し示す位置に書き込まれる。
次に、リードを説明する。アドレスFBADが、0x6F79を示しており(色相Hをリード)、かつ、内部リード/ライト信号FBRWが、リードを示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、マルチプレクサ142に対して、カラーパレットデータP1I[4:0],[13]及び{0b00}を選択する選択信号を出力する。これにより、これらのデータが、内部データFBDO[7:0]として出力される。この場合、内部データFBDO[7:2]が色相H[5:0]を表す。
アドレスFBADが、0x6F7Aを示しており(色飽和度Sをリード)、かつ、内部リード/ライト信号FBRWが、リードを示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、マルチプレクサ142に対して、カラーパレットデータP1I[7:5],[14]及び{0b0000}を選択する選択信号を出力する。これにより、これらのデータが、内部データFBDO[7:0]として出力される。この場合、内部データFBDO[7:4]が色飽和度S[3:0]を表す。
アドレスFBADが、0x6F7Bを示しており(明度Lをリード)、かつ、内部リード/ライト信号FBRWが、リードを示している場合は、制御論理ブロック138は、アドレスデコーダ140からの制御信号に応じて、マルチプレクサ142に対して、カラーパレットデータP1I[12:8],[15]及び{0b00}を選択する選択信号を出力する。これにより、これらのデータが、内部データFBDO[7:0]として出力される。この場合、内部データFBDO[7:2]が明度L[5:0]を表す。
第3のアクセスモードについて説明する。第1のアクセスモード及び第2のアクセスモードのいずれにも該当しない場合、制御論理ブロック138は、マルチプレクサ124に対して、ピクセルカラーコードCpbを選択する選択信号を出力するとともに、カラーパレット84に、リードを示すカラーパレットリード/ライト信号P1Wを出力する。これにより、ピクセルカラーコードCpbが、カラーパレットアドレスPIAとして、カラーパレット84に与えられ、カラーパレットアドレスPIAが指し示す位置から、カラーパレットデータP1Iが読み出されて、ピクセル出力制御回路144に与えられる。
図14は、図13のピクセル出力制御回路144の動作を説明するためのタイミングチャートである。図14(信号(a)〜(g))に示すように、ピクセル出力制御回路144は、水平走査カウント信号HP[1:0]が{0b00}であり、かつ、内部クロックCK20が「0」のとき、内部クロックCK40の立ち下がりエッジで、カラーパレットデータP1I[15:0]及びデプス情報Zpbをラッチする。
そして、図14(信号(h)〜(k))に示すように、ピクセル出力制御回路144は、ラッチしたカラーパレットデータP1I[4:0],[13]を、色相情報Hcとして、ラッチしたカラーパレットデータP1I[7:5],[14]を、色飽和度Scとして、ラッチしたカラーパレットデータP1I[12:8],[15]を、明度Lcとして、ピクセルミキサ90に出力する。また、ラッチしたデプス情報Zpbを、デプス情報Zcとして、ピクセルミキサ90に出力する。
以上のようにして、ピクセル出力制御回路144は、CK40の8クロック/ピクセル(水平ピクセル解像度)という出力レートで、色相情報Hc、色飽和度Sc、明度Lc及びデプス情報Zcを、ピクセルミキサ90に出力する。
ここで、カラーパレットデータP1I[15:0]をラッチする条件として、水平走査カウント信号HP[1:0]が{0b00}であることを条件としたのは、各水平ラインのピクセルの水平位置が、ずれ無く垂直方向に揃うようにするためである。
さて、次に、図9のビットマップジェネレータ86の詳細を説明する。
図15は、図9のビットマップジェネレータ86の内部構成を示すブロック図である。図15に示すように、ビットマップジェネレータ86は、ビットマップスクリーンの水平位置を微調整するための値Hfin(図4参照)を設定するための制御レジスタ158、水平ピクセル解像度(CK40のjクロック/ピクセル(j=2〜16))を設定するための制御レジスタ160、表示左端座標BPL(図3参照)を設定するための制御レジスタ162、表示右端座標BPRを設定するための制御レジスタ164、表示上端座標BPTを設定するための制御レジスタ166、表示下端座標BPBを設定するための制御レジスタ168、及びビットマップ表示をアクティブにするか否かを示す表示制御ビットを設定する制御レジスタ170を含む。
また、ビットマップジェネレータ86は、右端アドレスBAR(図6参照)を設定するための制御レジスタ172、左端アドレスBALを設定するための制御レジスタ174、上端アドレスBATを設定するための制御レジスタ176、アドレスステップBASを設定するための制御レジスタ178、ベースアドレスBBSを設定するための制御レジスタ180、ビットマップスクリーンのカラーモード(1ピクセルのビット数、つまりMビット/ピクセル)を設定するための制御レジスタ226、及びビットマップスクリーンのデプス情報Zbを設定するための制御レジスタ232を含む。
CPU1は、第1バス31及び第1バスインタフェース回路156を通じて、上記制御レジスタ158〜180,226及び232にアクセスすることができ、値の設定や設定変更を行うことができる。
さらに、ビットマップジェネレータ86は、コンパレータ152,154からなる基点信号生成回路150、ピクセルクロック生成回路182、水平座標カウンタ184、水平座標表示範囲内判定回路186、垂直座標カウンタ188、垂直座標表示範囲内判定回路190、水平アドレスカウンタ194、垂直アドレスカウンタ198、水平アドレスインクリメント制御回路204、ライト制御回路206、FIFO(first−in−first−out)レジスタ208、リード制御回路210、ファネルシフタ216、ビットアドレスカウンタ228、上位ビットマスク回路218、カラーパレットアクセスポート230、カラーパレットインタフェース回路220、ピクセル出力制御回路234、AND回路192,222、コンパレータ196、バス使用要求信号生成回路224、加算器200,202、及び減算器212を含む。
基点信号生成回路150のコンパレータ154は、水平走査カウント信号HC[12:5]の値が{0x00}となり、及び水平走査カウント信号HC[4:1]の値が水平位置微調整レジスタ[3:0]の値Hfinと同じになった時、水平座標基点信号HBPをアサートする。また、基点信号生成回路150のコンパレータ152は、垂直走査カウント信号VC[9:1]の値が{0x20}となった時、垂直座標基点信号VBPをアサートする。
ピクセルクロック生成回路182は、水平座標基点信号HBPがアサートされた時、あるいは、4ビットのピクセルクロックカウンタ(図示せず)の値が{0b0000}になった時、水平ピクセル解像度レジスタ160の値をピクセルクロックカウンタにロードする。ピクセルクロックカウンタは、内部クロックCK40の立下りごとにデクリメントを実行し、ピクセルクロックカウンタの値が{0b0000}になった時、ピクセルクロック信号PCKをアサートする。
水平座標カウンタ184は、水平座標基点信号HBPがアサートされた時に値を「0」にクリアし、ピクセルクロック信号PCKがアサートされるたびにインクリメントを実行する。
垂直座標カウンタ188は、水平座標基点信号HBPがアサートされた時に、垂直座標基点信号VBPがアサートされている場合は、値を「0」にクリアし、垂直座標基点信号VBPがアサートされていなければ、水平座標基点信号HBPがアサートされるたびにインクリメントを実行する。
水平座標表示範囲内判定回路186は、ピクセルクロックPCKがアサートされた時、水平座標カウンタ184の値が表示左端座標レジスタ162の値BPLに一致していれば、水平座標範囲内信号HWIをアサートする。また、水平座標表示範囲内判定回路186は、ピクセルクロックPCKがアサートされた時、水平座標カウンタ184の値が表示右端座標レジスタ164の値BPRに一致していれば、水平座標範囲内信号HWIをネゲートする。水平座標表示範囲内判定回路186は、水平座標カウンタ184の値が、表示左端座標レジスタ162及び表示右端座標レジスタ164のいずれの値にも一致していない場合は、水平座標範囲内信号HWIの論理を維持する。
垂直座標表示範囲内判定回路190は、水平座標基点信号HBPがアサートされた時、垂直座標カウンタ188の値が表示上端座標レジスタ166の値BPTに一致していれば、垂直座標範囲内信号VWIをアサートする。また、垂直座標表示範囲内判定回路190は、水平座標基点信号HBPがアサートされた時、垂直座標カウンタ188の値が表示下端座標レジスタ168の値BPBに一致していれば、垂直座標範囲内信号VWIをネゲートする。垂直座標表示範囲内判定回路190は、表示上端座標レジスタ166及び表示下端座標レジスタ168のいずれの値にも一致していない場合は、垂直座標範囲内信号VWIの論理を維持する。
水平アドレスカウンタ194は、水平座標基点信号HBPがアサートされた時、左端アドレスレジスタ174の値BALをロードする。水平アドレスカウンタ194は、水平アドレスインクリメント制御回路204からの制御に従って、インクリメントを実行する。
水平アドレスインクリメント制御回路204は、第2バス33から16ビット分の外部データSBDIをリードした場合、すなわち、第2バス下位バイトリード許可信号SLRG及び第2バス上位バイトリード許可信号SURGの双方がアサートされている場合、水平アドレスカウンタ194を「2」インクリメントするように制御する。
水平アドレスインクリメント制御回路204は、第1バス31または第2バス33から8ビット分のデータFBDI又はSBDIをリードした場合、すなわち、第2バス下位バイトリード許可信号SLRG若しくは第2バス上位バイトリード許可信号SURGのいずれか一方がアサートされている場合、又は、第1バスリード許可信号FBRGがアサートされている場合、水平アドレスカウンタ194を「1」インクリメントするように制御する。
垂直アドレスカウンタ198は、水平座標基点信号HBPがアサートされた時、垂直座標基点信号VBPがアサートされていれば、上端アドレスレジスタ176の値BATをロードする。また、垂直アドレスカウンタ198は、垂直座標基点信号VBPがネゲートされ、かつ、垂直座標範囲内信号VWIがアサートされていれば、現在のカウント値に、アドレスステップレジスタ178の値BASを加算する。
ビットアドレスカウンタ228は、水平座標基点信号HBPがアサートされた時、カウント値を「0」にクリアする。また、ビットアドレスカウンタ228は、水平座標範囲内信号HWIがアサートされている期間中に、ピクセルクロック信号PCKがアサートされるたびに、インクリメントを実行する。この場合、ビットアドレスカウンタ228は、カラーモード設定レジスタ226が示すカラーモードの値(Mビット/ピクセル:M=1〜8)を1ステップとしてインクリメントを実行する。これにより、ビットアドレスカウンタ228の下位3ビットは、バイト内でのピクセルデータ(1ピクセルのカラーコードからなるデータ)の先頭ビットの位置を示すことになる。
FIFOレジスタ208は、第1バス31に接続されたメモリ17からリードした内部データFBDIあるいは第2バス33に接続されたメモリ45からリードした外部データSBDIをバイト単位で格納する。このFIFOレジスタ208は、メモリMEMからのデータリードと表示のためのピクセルデータ(1ピクセルのHb/Sb/Lbからなるデータ)出力との時間差を吸収するためのバッファとして機能する。なお、FIFOレジスタ208の段数は16段である。
ライト制御回路206は、第1バス31に接続されたメモリ17からリードした内部データFBDIあるいは第2バス33に接続されたメモリ45からリードした外部データSBDIを、FIFOレジスタ208に書き込む。具体的には次の通りである。
ライト制御回路206は、第1バスリード許可信号FBGRがアサートされているときに、第1バス31から内部データFBDI[7:0]を取り込み、第2バス下位バイトリード許可信号SLRGがアサートされているときに、第2バス33から外部データSBDI[7:0]を取り込み、第2バス上位バイトリード許可信号SURGがアサートされているときに、第2バス33から外部データFBDI[15:8]を取り込む。
また、ライト制御回路206は、水平アドレスカウンタ194の下位4ビットを、FIFOレジスタ208のライトポインタとして扱う。
リード制御回路210は、ビットアドレスカウンタ228のカウント値[6:3]をFIFOレジスタ208のリードポインタとして扱い、リードポインタの指し示す1バイトと続く1バイトの計2バイトをFIFOレジスタ208から読み出し、ファネルシフタ216に出力する。2バイト読み出すのは、カラーモード設定レジスタ226に設定されたカラーモードによっては、ピクセルデータ(1ピクセルのカラーコードからなるデータ)が、2バイトに跨る場合もあるからである。なお、ビットアドレスカウンタ228のカウント値[2:0]は、バイト内のピクセルデータ(1ピクセルのカラーコードからなるデータ)の先頭ビットの位置を示す。
図16は、図15のファネルシフタ216及び上位ビットマスク回路218の説明図である。図16に示すように、ファネルシフタ216は、リード制御回路210から入力された16ビットデータから、ビットアドレスカウンタ228のカウント値[3:0]が示す位置を始端とする8ビットを取り出し、上位ビットマスク回路218へ出力する。図16では、ハッチングを施した部分がピクセルデータ(1ピクセルのカラーコードからなるデータ)である。
上位ビットマスク回路218は、カラーモード設定レジスタ226に設定されたカラーモードに応じて、ファネルシフタ216から入力された8ビット中の上位1〜7ビットをマスクし、入力値に関わりなく出力値を「0」にする。図16の例では、カラーモードは、5ビット/ピクセルであり、上位3ビットをマスクして、「0」にしている。
図15に戻って、カラーパレットインタフェース回路220は、上位ビットマスク回路218から入力される8ビットデータを、ビットマップ用カラーパレット88に対するアドレス(以下、カラーパレットアドレスP2Aと呼ぶ。)として、カラーパレット88に出力する。すると、カラーパレット88から、カラーパレットデータ(色相Hb/色飽和度Sb/明度Lb)P2Iが読み出され、カラーパレットインタフェース回路220は、これをピクセル出力制御回路234に出力する。なお、この場合、カラーパレットリード/ライト信号P2Wは、常にリードを示している。
また、カラーパレットインタフェース回路220は、カラーパレットアクセスポート230を通じて、カラーパレット88に対するアクセス要求を受け付けた場合、このアクセスが優先されて、カラーパレット88に対するリードまたはライト動作を行う。したがって、カラーパレットアクセスポート230を通じてのカラーパレット88のデータ更新は、ビットマップスクリーンを表示していない期間に行うことが望ましい。なお、CPU1は、カラーパレットアクセスポート230に対して、第1バス31及び第1バスインタフェース回路156を通じてアクセスできる。
ピクセル出力制御回路234は、後述の座標範囲内信号HVWIがアサートされている期間、カラーパレットインタフェース回路220から入力された16ビットデータP2Iを、ピクセルの色相データHb[5:0]、色飽和度データSb[3:0]、及び明度データLb[5:0]として、ピクセルミキサ90に出力する。但し、ピクセル出力制御回路234は、座標範囲内信号HVWIがネゲートされている期間は、色相データHb[5:0]を{0b111111}、色飽和度データSb[3:0]を{0b0000}、明度データLb[5:0]を{0b000000}として出力する。このデータの組み合わせは、ピクセルが透明色であることを示す。
また、デプス設定レジスタ232に設定されている値が、ピクセルのデプスデータZb[3:0]として常にピクセルミキサ90に出力される。
以上のように、ビットアドレスカウンタ228が、水平ピクセル解像度に応じた周波数のピクセルクロックPCKがアサートされるたびにインクリメントされ、このカウント値に応じて、カラーパレットデータP2Iが読み出され、ピクセル出力制御回路234から出力される。従って、カラーパレットデータ(色相Hb/色飽和度Sb/明度Lb)P2Iは、ビットマップスクリーンの水平ピクセル解像度に応じた出力レートで、ピクセルミキサ90へ出力される。
AND回路192は、水平座標範囲内信号HWI及び垂直座標範囲内信号VWIの双方がアサートされているときに、座標範囲内信号HVWIをアサートする。
コンパレータ196は、水平アドレスカウンタ194のカウント値が、右端アドレスレジスタ172の値BARと、左端アドレスレジスタ174の値BALと、の間にあるか否かを判断して、範囲内の場合に、範囲内信号RANをアサートする。
減算回路212は、ライト制御回路206から与えられる、水平アドレスカウンタ194の下位4ビット(FIFOレジスタ208のライトポインタ)から、リード制御回路210から与えられる、ビットアドレスカウンタ[6:3](FIFOレジスタ208のリードポインタ)を減算して、減算結果をコンパレータ214に出力する。
コンパレータ214は、「8」と、減算回路212の減算結果と、を比較して、減算結果が「8」以下の時に比較結果信号LEをアサートする。
AND回路222は、座標範囲内信号HVWIがアサートされ、表示アクティブレジスタ170の表示制御ビットが「真」であり、範囲内信号RANがアサートされており(つまり、水平アドレスカウンタ194のカウント値が左端アドレスレジスタ174及び右端アドレスレジスタ172にて示される範囲内にあり)、かつ、比較結果信号LEがアサートされているとき(FIFOレジスタ208のライトポインタとリードポインタとの差が「8」以内の場合)、バス使用要求信号BRQをアサートする。
ここで、FIFOレジスタ208はリングバッファであり、ライトポインタが1周してリードポインタを追い越すと、適切な表示ができなくなるので、ライトポインタがリードポインタを追い越さないように、ライトポインタとリードポインタとの差が「8」以内のときに、メモリMEMからビットマップデータを読み出すこととした。
バス使用要求信号生成回路224は、バス使用要求信号BRQがアサートされたとき、後述のアドレスEIAD[23]およびEIAD[15]がともに「0」であれば、第1バス使用要求信号FBRQをアサートし、アドレスEIAD[23]およびEIAD[15]の少なくとも一方が「1」であれば、第2バス使用要求信号SBRQをアサートする。第1バス31の物理アドレス空間は、論理アドレス空間の第23ビットと第15ビットが「0」の領域にマッピングされており、第2バス14の物理アドレス空間は、論理アドレス空間のそれ以外の領域にマッピングされている。
加算回路200は、水平アドレスカウンタ194の値と、垂直アドレスカウンタ198の値のLSBに3ビットの「0」を連接することによって3ビット左シフトした値と、を加算しその加算結果を、加算回路202に与える。
加算回路202は、加算回路200の加算結果と、ベースアドレスレジスタ180の値BBSのLSBに11ビットの「0」を連接した値と、を加算し、その加算結果を、アドレスEIDA[26:0]として出力する。
従って、ビットマップデータのリード要求を行う際のアドレスEIDA[26:0]は、{ベースアドレス[15:0],0b00000000000}、{垂直アドレス[14:0],0b000}及び{水平アドレス[9:0]}の加算結果より生成される。
さて、次に、図9のビデオポジションアジャスタ102の詳細を説明する。
図17は、図9のビデオポジションアジャスタ102の内部構成を示すブロック図である。図17に示すように、ビデオポジションアジャスタは、垂直カウント参照値レジスタ242、垂直ポジション上端値レジスタ244、水平カウント参照値レジスタ250、水平ポジション左端値レジスタ252、垂直ポジションカウンタ248、水平ポジションカウンタ256、コンパレータ246、254、及び第1バスインタフェース回路240を含む。
コンパレータ254は、ビデオタイミングジェネレータ100から入力される水平走査カウント信号HC[12:1]と、水平カウント参照値レジスタ250の値VHR(図7参照)と、が同じになったとき、一致信号HEQをアサートする。
水平ポジションカウンタ256は、一致信号HEQがアサートされた時、水平ポジション左端値レジスタ252の値VLPを、水平走査カウント信号HP[11:0]としてロードする。この条件が発生しない限り、水平走査カウント信号HPは、内部クロックCK40の1周期ごとにインクリメントされる。
一方、コンパレータ246は、ビデオタイミングジェネレータ100から入力される垂直走査カウント信号VC[9:1]と、垂直カウント参照値レジスタ242の値VVRと、が同じである時、一致信号VEQをアサートする。
垂直ポジションカウンタ248は、一致信号VEQ及び一致信号HEQの双方がアサートされた時、垂直ポジション上端値レジスタ244の値VTPを、垂直走査カウント信号VP[8:0]の値としてロードする。この条件が発生しない限り、垂直走査カウント信号VPの値は、一致信号HEQがアサートされるたびにインクリメントされる。
CPU1は、第1バス31及び第1バスインタフェース回路240を介して、垂直カウント参照値レジスタ242、垂直ポジション上端値レジスタ244、水平カウント参照値レジスタ250、及び水平ポジション左端値レジスタ252にアクセスすることができ、これらの値の設定及び設定変更ができる。
以上のように、水平走査カウント信号HC及び垂直走査カウント信号VCにそれぞれオフセットを付加して、水平走査カウント信号HP及び垂直走査カウント信号VPを生成し、これらの信号HP,VPに基づいて、キャラクタスクリーンを表示する。これにより、キャラクタスクリーンの表示位置の調整が可能になる。
さて、以上のように、ピクセルミキサ90には、カラーパレットコントローラ82及びビットマップジェネレータ86から、それぞれ設定された出力レートでピクセルデータ(色相Hc/色飽和度Sc/明度Lc、色相Hb/色飽和度Sb/明度Lb)が入力される。そして、ピクセルミキサ90は、カラーパレットコントローラ82及びビットマップジェネレータ86がそれぞれ出力するピクセルのデプス情報Zc及びZbに従って、出力するピクセルの色情報(色相Hm/色飽和度Sm/明度Lm)を決定し、キャラクタスクリーンとビットマップスクリーンとを合成する。この合成の際、カラーパレットコントローラ82は、ピクセルミキサ90に対して、キャラクタスクリーンの水平ピクセル解像度に応じた出力レート(8クロック/ピクセル)で、ピクセルデータ(デプス情報Zc、色相Hc/色飽和度Sc/明度Lc)を出力する。一方、ビットマップジェネレータ86は、ピクセルミキサ90に対して、水平ピクセル解像度レジスタ160に設定された水平ピクセル解像度に応じた出力レート(2クロック/ピクセル〜16クロック/ピクセル)で、ピクセルデータ(デプス情報Zb、色相Hb/色飽和度Sb/明度Lb)を出力する。従って、キャラクタスクリーンのピクセル幅とビットマップスクリーンのピクセル幅とが異なる場合でも、つまり、両者の水平解像度が異なる場合でも、合成が可能となる。
また、カラーパレットコントローラ82及びビットマップジェネレータ86がそれぞれ出力するピクセルデータには、デプス情報Zc及びZbが含まれる。つまり、合成対象のキャラクタスクリーン及びビットマップスクリーンの各々において、ピクセルごとにデプス情報が付随している。ちなみに、キャラクタスクリーンは、スプライトと第1のバックグラウンドスクリーンと第2のバックグラウンドスクリーンとを合成したものであり、各ピクセルのデプス情報Zcは、表示対象のスプライトごとに定められたデプス情報Z0、第1のバックグラウンドスクリーンのキャラクタごとに定められたデプス情報Z1、及び第2のバックグラウンドスクリーンのキャラクタごとに定められたデプス情報Z3のいずれでもとり得る。もちろん、各スプライトやキャラクタには、一般に異なる値のデプス情報が設定されることができる。そして、ピクセルミキサ90では、ピクセルが重なる場合、各ピクセルのデプス情報Zc,Zbに基づいて、ピクセルの取捨選択が行われる。このため、合成対象の画像単位で、前面か後面かが決定されるのではない。つまり、キャラクタスクリーン及びビットマップスクリーンのピクセル単位で、前面か後面かが決定される。
従って、キャラクタスクリーンの第1領域の後面であって、第2領域の前面に、ビットマップスクリーンを配置するように合成できる。このように、合成対象の画像全体での表示優先順位の設定だけでなく、画像を構成する部分毎での表示優先順位の設定が可能である。
さらに、キャラクタスクリーンは、デプス情報Z0,Z1,Z3に基づき合成を行った合成画像である。しかし、キャラクタスクリーンがピクセル毎のデプス情報Zcを保持しているので、合成の順番に関係なく、キャラクタスクリーンとビットマップスクリーンとを所望の表示優先順位にて合成できる。つまり、この場合、キャラクタスクリーンが最初に合成され、その後、ビットマップスクリーンと合成されるが、例えば、キャラクタスクリーンのあるオブジェクトobj3とキャラクタスクリーンのあるオブジェクトobj1との間に、ビットマップスクリーンのあるオブジェクトobj2を配置するように合成できる(図2参照)。
また、本実施の形態では、ピクセルミキサ90は、ピクセルが透明の場合、常に選択/出力しないため、デプス情報Zc,Zbに基づいて、取捨選択を行う場合でも、最も前面だからといって、透明のピクセルが選択/出力されることはなく、表示を意図する適切なピクセルの選択/出力が可能になる。
さらに、本実施の形態では、水平カウント参照値レジスタ250、水平ポジション左端値レジスタ252、垂直カウント参照値レジスタ242、及び垂直ポジション上端値レジスタ244に設定する値を調整することで、水平走査カウント信号HP及び垂直走査カウント信号VPに従ってメモリMEMから読み出されるカラーコードにより構成されるキャラクタスクリーンの表示画面上の位置を任意に調整できる。また、水平走査カウント信号HC及び垂直走査カウント信号VCに従ってメモリMEMから読み出されるカラーコードにより構成されるビットマップスクリーンと、水平走査カウント信号HP及び垂直走査カウント信号VPに従ってメモリMEMから読み出されるカラーコードにより構成されるキャラクタスクリーンとの相対的な表示位置を調整できる。
さらに、本実施の形態によれば、カラーパレットコントローラ82及びビットマップジェネレータ86の各々に対して、つまり、合成対象のキャラクタスクリーン及びビットマップスクリーンの各々に対して、カラーパレット84及び88が用意される。一般的にカラーコードは色情報(色相/色飽和度/明度)に比べてビット数が少ないので、カラーコードを色情報に変換するカラーパレットを備えるシステムにおいては、メモリに格納される画像データのサイズが小さくなるというメリットがある反面、同時に発色可能な色の通り数が少なくなるというデメリットがある。しかしながら、本実施の形態では、カラーパレットコントローラ82及びビットマップジェネレータ86の各々に対して独立したカラーパレット84及び88を有するので、画像データのサイズを大きくせずに、同時発色可能な色の通り数が増えるので、より豊かな色表現が可能になる。
さらに、本実施の形態では、ビットマップスクリーンの水平位置を規定する水平座標カウンタ184が、水平位置微調整レジスタ158に設定された値に応じて初期化されるため、水平位置微調整レジスタ158に所望の値を設定することで、ビットマップスクリーンの水平位置を微調整できる。
さらに、本実施の形態では、ビットマップジェネレータ86は、1ワードがNビット(Nは2以上の整数)からなるメモリMEMからワード単位でデータを読み出し、読み出したデータから、1ピクセル当りMビット(Mは1以上の整数)からなりメモリMEM内に隙間無く並べられた、1ピクセルのカラーコードをピクセル単位で抽出し、抽出したカラーコードを色情報(色相Hb/色飽和度Sb/明度Lb)に変換して、デプス情報Zbとともに、ピクセルミキサ90へ出力する。
このように、ビットマップジェネレータ86が、メモリMEMから読み出したデータから1ピクセルのカラーコードを抽出するので、カラーコードをメモリに格納する際に、1ピクセルのビット数(カラーモード)に関係なく、メモリMEMの各ワード内に隙間なくデータを敷き詰めることができる。つまり、N/MおよびM/Nが整数か否かに関係なく、メモリMEMの各ワード内に隙間なくデータを敷き詰めることができる。このため、メモリ領域の節約及び効率的な利用が可能となる。
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
上記では、カラーパレット84,88を通じて表示色を指定する間接指定方式を採用した。つまり、キャラクタパターンデータやビットマップデータをカラーコードで表した。ただし、色の表現形式はこれに限定されず、キャラクタパターンデータやビットマップデータを色相H/色飽和度S/明度L等の色情報で表した場合でも、本発明を同様に適用できる。この場合、メモリMEMから、ビットマップデータを構成する色情報を読み出してくることもできるし、グラフィックスプロセッサ3内部で生成することもできる。また、この場合、例えば、ピクセルミキサ90には、水平走査カウント信号HP及び垂直走査カウント信号VPに従った出力タイミングで、かつ、キャラクタスクリーンの水平ピクセル解像度に応じた出力レート(8クロック/ピクセル)で、ピクセルデータ(デプス情報Zc、色相Hc/色飽和度Sc/明度Lc)が入力され、また、水平走査カウント信号HC及び垂直走査カウント信号VCに従った出力タイミングで、かつ、ビットマップスクリーンの水平ピクセル解像度に応じた出力レート(2クロック/ピクセル〜16クロック/ピクセル)で、ピクセルデータ(デプス情報Zb、色相Hb/色飽和度Sb/明度Lb)が入力される。
前述した実施例の説明は、例示説明の目的のために提示された。それは、説明された厳密な形式に発明を限定することを意図しておらず、上記教示を踏まえた変形が可能である。実施例は、発明の原理を最も明瞭に説明するために選択され、それによって当業者は、その現実的な適用が可能になり、意図された特定使用に向けられた様々な変形と形態で発明を最も効果的に利用することができる。