以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。また、本明細書及び図面において、信号のどのビットかを示す必要があるときは、信号名の後に、[a:b]あるいは[a]を付する。[a:b]は、その信号の第a番目のビットから第b番目のビットを意味し、[a]は、その信号の第a番目のビットを意味する。16進数の表現に関しては、10進数と区別するために数字の末尾に「H」を付けて表記する。また、「0b」は2進数を、「0x」は16進数を意味する。
図1は、本発明の実施の形態によるデータ処理装置としてのプロセッサ1000の全体構成を示すブロック図である。図1に示すように、このプロセッサ1000は、中央演算処理装置(CPU:central processing unit)1、グラフィックスプロセッサ3、ピクセルプロッタ5、サウンドプロセッサ7、DMA(direct memory access)コントローラ9、第1バスアービタ13、第2バスアービタ14、バックアップコントロール回路15、メインメモリ17、タイマ回路19、A/Dコンバータ(ADC:analog to digital converter)20、入出力制御回路21、外部メモリインタフェース回路23、クロックドライバ29、PLL(phase−locked loop)回路27、低電圧検出回路25、第1バス31、及び第2バス33を含む。
CPU1は、メモリMEMに格納されたプログラムに従い、各種演算やシステム全体の制御を行う。CPU1は、第1バス31及び第2バス33のバスマスタであり、それぞれのバスに接続された資源にアクセスが可能である。
ここで、本実施の形態では、メインメモリ17及び外部メモリ45を区別して説明する必要がないときは、「メモリMEM」と表記する。
本発明の特徴の1つであるグラフィックスプロセッサ3は、第1バス31及び第2バス33のバスマスタであり、メモリMEMに格納されたデータを基に、グラフィックデータを合成し、さらにこれを基にテレビジョン受像機(図示せず)に合わせたビデオ信号VDを生成して出力する。また、グラフィックスプロセッサ3は、第1バス31を通じて、CPU1により制御され、また、CPU1に対して、割込み要求信号INRQを発生する機能を有する。
ここで、グラフィックデータは、バックグラウンドスクリーンとスプライトとビットマップスクリーンとから合成される。バックグラウンドスクリーンは、矩形の画素集合の二次元配列からなり、テレビジョン受像機の画面を全て覆う大きさを持つ。奥行きのある背景を形成できるように、バックグラウンドスクリーンとして、第1のバックグラウンドスクリーンと第2のバックグラウンドスクリーンとが用意される。以下、両者を区別する必要がないときは、単に「バックグラウンドスクリーン」と呼ぶ。スプライトは、テレビジョン受像機の画面のいずれの位置にでも配置可能な1つの矩形の画素集合からなる。バックグラウンドスクリーンやスプライトを構成する矩形の画素集合を、キャラクタと呼ぶ。例えば、キャラクタとして、8×8画素、8×16画素、16×8画素、及び16×16画素のサイズのものが用意される。ビットマップスクリーンは自由に大きさと位置を設定可能な二次元ピクセル配列からなる。
グラフィックスプロセッサ3は、バックグラウンドスクリーン及びスプライトについて、互換表示モードあるいは拡張表示モードのいずれかで、表示画像を生成する。
つまり、互換表示モードでは、常に標準解像度(例えば、8クロック/ピクセル)の表示画像が生成される。ここで、クロックは、特に明示しない限り、後述のクロックCK40を指す。
一方、拡張表示モードは、標準解像度で表示画像を生成するモード(標準解像度モード)に加えて、標準解像度を水平方向に2倍した倍解像度(例えば、4クロック/ピクセル)で表示画像を生成するモード(倍解像度モード)を有する。拡張表示モードにおいて、標準解像度モード及び倍解像度モードの設定は、スプライトごとに行うことができる。同様に、拡張表示モードにおいて、標準解像度モード及び倍解像度モードの設定は、バックグラウンドスクリーンに対しても行うことができる。
つまり、拡張表示モードでは、標準解像度のスプライト、倍解像度のスプライト、及び標準解像度のバックグラウンドスクリーンを混在した表示、並びに、標準解像度のスプライト、倍解像度のスプライト、及び倍解像度のバックグラウンドスクリーンを混在した表示などが可能である。もちろん、全て標準解像度の表示や全て倍解像度の表示も可能である。
従って、高い解像度での表示が不要な画像については、低い解像度で表示することにより、画像データのメモリMEM上でのサイズを削減できるとともに、描画処理負荷及びデータ転送のバス帯域への負荷を軽減できる。また、互換表示モードは、前世代のプロセッサと完全互換の表示モードであるため、前世代のプロセッサに搭載されるソフトウェアとの後方互換性を維持しながらも、拡張表示モードにて高解像度の表示が可能である。前世代のプロセッサについては後述する。
ピクセルプロッタ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ビットのデータバス、15ビットのアドレスバス、及びコントロールバスを含む(図示せず)。
第2バスアービタ14は、第2バス33の各バスマスタからの第2バス使用要求信号を受け付け、調停を行って、要求されたバイト数に対応する1または複数のバスサイクル毎に1つのバスマスタに第2バス使用許可信号を発行する。具体的には、複数のバスマスタの第2バス33に対する優先順位を定めた優先順位情報セットが複数用意され、第2バスアービタ14は、その複数の優先順位情報セットを順次的かつ巡回的に選択して、選択した優先順位情報セットに従って調停を行う。
各バスマスタは、第2バス使用許可信号を受領することによって第2バス33の使用が許可される。ここで、第2バス使用要求信号及び第2バス使用許可信号は、図1では、第2バス調停信号SABとして示されている。
第2バス33は、例えば、16ビットのデータバス、27ビットのアドレスバス、及びコントロールバスを含む(図示せず)。
タイマ回路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より得られる正弦波信号を逓倍した高周波クロック信号ck40を生成するとともに、そのクロック信号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を介して、バスマスタに与えられる。
さて、次に、上記した互換表示モード、拡張表示モード、標準解像度モード、及び倍解像度モードについて詳しく説明していく。
後で詳細に述べるが、グラフィックスプロセッサ3は、表示モード制御情報CHRMODEを格納する表示モード制御レジスタ101を内蔵している。表示モード制御情報CHRMODEを、「0」に設定すると互換表示モードに入り、「1」に設定すると拡張表示モードに入る。
各スプライト及び各バックグラウンドスクリーンは、2ビットのフリップパラメータFs[1:0]を持つ。フリップパラメータFs[1:0]は、水平方向(左右)の反転表示、垂直方向(上下)の反転表示、水平及び垂直方向(左右上下)の反転表示、並びに非反転表示のいずれかを指示するパラメータである。
互換表示モードでは、フリップパラメータFs[1:0]は、本来の目的通り、反転を示すパラメータとして機能する。しかし、拡張表示モードでは、フリップパラメータFs[1:0]は、別の意味を持つ。この意味を説明する前に、後で詳述するピクセルバッファ78L及び78Rについて簡単に説明する(図6参照)。
ピクセルバッファ78Lは、表示画面の1ラインを構成するピクセル数より少ない数のピクセルバッファ単位からなり、描画領域として用いられる。ピクセルバッファ単位は、1ピクセル分のデプス情報(4ビット)及びカラーコード(8ビット)を格納する。ピクセルバッファ78Rは、ピクセルバッファ78Lと同一構造である。
フリップパラメータFs[1:0]の説明に戻って、拡張表示モードでは、フリップパラメータFs[1]は、標準解像度モードと倍解像度モードとを切り替えるためのビットであり、フリップパラメータFs[0]は、倍解像度モードにおいて、水平方向に並んだ2つのピクセルからなるピクセルセットの左側のピクセルあるいは右側のピクセルのいずれかを選択するためのビットである。
ここで、ピクセルセットは、一定順序で並んだ第0から第(N−1)までのN個のピクセルからなる。Nは、2以上の整数である。本実施の形態では、N=2でピクセルを水平方向に並べている。従って、フリップパラメータFs[0]は、倍解像度モードにおいて、表示画面の各ラインにおいて奇数番目または偶数番目のピクセルのいずれかを選択する為に利用される。水平方向に並んだピクセルセットにより1つのラインが構成され、垂直方向に並んだ複数のラインにより表示画面が構成される。
ピクセルセットの左側のピクセルを表示するためのデータ(デプス情報及びカラーコード)は、ピクセルバッファ78Lに格納(描画)され、右側のピクセルを表示するためのデータ(デプス情報及びカラーコード)は、ピクセルバッファ78Rに格納(描画)される。このことから、拡張表示モードでは、フリップパラメータFs[0]は、ピクセルバッファ78Lあるいは78Rのいずれに描画を行うかを示すビットと言える。
ここで、1ピクセル分のデプス情報及びカラーコードをピクセルデータと呼ぶことにし、具体例を挙げて説明する。なお、上記したように、1スプライトは、1キャラクタからなる。一方、バックグラウンドスクリーンは、キャラクタの二次元配列からなる。以下、スプライトを構成するキャラクタ及びバックグラウンドスクリーンを構成するキャラクタを区別する必要のないときは、単に「キャラクタ」と呼ぶ。
表示モード制御情報CHRMODEに「0」が設定され、互換表示モードでの表示を行う場合、全スプライト及び全バックグラウンドスクリーンについて、表示されるキャラクタのピクセルデータが、ピクセルセットの左側のピクセルに割り当てられ(つまり、ピクセルバッファ78Lに書き込まれ)、同一のキャラクタの同一のピクセルデータが、同一のピクセルセットの右側のピクセルに割り当てられる(つまり、ピクセルバッファ78Rに書き込まれる)。つまり、互換表示モードでは、同一のピクセルデータが、ピクセルバッファ78L及び78Rの双方の同じ位置に書き込まれる。
本実施の形態では、ピクセルセット単位で各キャラクタの表示画面上の座標(X,Y)が設定されるので、ここで言う「同じ位置」とは、同一座標(X,Y)に相当する位置を意味する。なお、この点は、拡張表示モードでも同じである。Xは水平座標、Yは垂直座標を示す。
図2(a)は、互換表示モードでのスプライトSP1の表示例を示す図、図2(b)は、互換表示モードでのスプライトSP2の表示例を示す図である。図2(a)及び図2(b)において、1つの正方形は、表示画面上の1ピクセルセットを示す。ビデオ信号VDにおける1ピクセルセットを表示する際の時間は固定であるとする(例えば、8クロック/ピクセルセット)。また、スプライトSP1及びSP2の各々は、16×16画素(この「画素」は表示画面上のピクセルではなく、スプライトの構成要素としてのピクセルを意味)のキャラクタからなり、文字「A」を表している。
図2(a)に示すように、互換表示モードでは、1ピクセルセットを構成する左右のピクセルに、同一のピクセルデータが割り当てられていることが分かる。つまり、互換表示モードでは、同一のピクセルデータが、ピクセルバッファ78L及び78Rの双方の同じ位置に書き込まれる。さらに、言い換えると、同一のキャラクタを隣り合わせに表示して、文字「A」を表現している。これらの点は、図2(b)のスプライトSP2についても同様である。バックグラウンドスクリーンについてもスプライトと同様であり、互換表示モードでは、同一のピクセルデータが、ピクセルバッファ78L及び78Rの双方の同じ位置に書き込まれる。
さて、一方、表示モード制御情報CHRMODEに「1」が設定され、拡張表示モードでの表示を行う場合、フリップパラメータFs[1]が「0」に設定された(標準解像度モードが設定された)キャラクタについては、フリップパラメータFs[0]の設定内容に関係なく、同一のピクセルデータが、ピクセルバッファ78L及び78Rの双方の同じ位置に書き込まれる。従って、このようなキャラクタについては、図2に示した互換表示モードと同様である。
しかし、表示モード制御情報CHRMODEに「1」が設定され、拡張表示モードでの表示を行う場合でも、フリップパラメータFs[1]が「1」に設定された(倍解像度モードが設定された)キャラクタについては、フリップパラメータFs[0]に設定されている値に応じて、以下のように扱われる。
つまり、フリップパラメータFs[0]に「0」が設定されている場合は、そのキャラクタのピクセルデータは、ピクセルバッファ78Lに書き込まれ、フリップパラメータFs[0]に「1」が設定されている場合は、そのキャラクタのピクセルデータは、ピクセルバッファ78Rに書き込まれる。
図3(a)は、拡張表示モードにおいて、フリップパラメータFs[1:0]=0b10(倍解像度モード及びピクセルバッファ78L描画)が設定されたスプライトSP1の表示例を示す図、図3(b)は、拡張表示モードにおいて、フリップパラメータFs[1:0]=0b11(倍解像度モード及びピクセルバッファ78R描画)が設定されたスプライトSP2の表示例を示す図である。
図3(a)及び図3(b)において、1つの矩形は、表示画面上の1ピクセルを示す。また、ビデオ信号VDにおける1ピクセルを表示する際の時間は固定であるとする(例えば、4クロック/ピクセル、つまり、8クロック/ピクセルセット)。また、スプライトSP1及びSP2の各々は、16×16画素(この「画素」は表示画面上のピクセルではなく、スプライトの構成要素としてのピクセルを意味)のキャラクタからなり、文字「A」を表している。つまり、図3のスプライトSP1及びSP2のキャラクタのピクセルデータは、それぞれ、図2のスプライトSP1及びスプライトSP2のキャラクタのピクセルデータと同一である。
図3(a)に示すように、拡張表示モードにおいて、スプライトSP1のフリップパラメータFs[1:0]=0b10の場合、スプライトSP1を構成するキャラクタの各ピクセルデータは、ピクセルバッファ78Lに格納され、ピクセルセットの左側のピクセルとして表示される。一方、図3(b)に示すように、拡張表示モードにおいて、スプライトSP2のフリップパラメータFs[1:0]=0b11の場合、スプライトSP2を構成するキャラクタの各ピクセルデータは、ピクセルバッファ78Rに格納され、ピクセルセットの右側のピクセルとして表示される。
第1のバックグラウンドスクリーン及び第2のバックグラウンドスクリーンも、それぞれ、フリップパラメータFs[1:0]を持っており、スプライトと同様に扱われる。つまり、拡張表示モードの場合、第1のバックグラウンドスクリーン及び第2のバックグラウンドスクリーンのキャラクタのピクセルデータは、それぞれのフリップパラメータFs[1:0]に応じて、ピクセルバッファ78L及び78Rに書き込まれる。
さて、拡張表示モードにおいて、倍解像度モードが設定されたスプライトやバックグラウンドスクリーンの倍解像度表示を行う場合、グラフィックスプロセッサ3に内蔵される後述のビュードライバ80は、表示のためにピクセルデータをピクセルバッファ78L及び78Rから読み出す。この際、ビュードライバ80は、同一座標(X,Y)に表示する、ピクセルバッファ78Lからのピクセルデータとピクセルバッファ78Rからのピクセルデータと、を同時に受け取り、ピクセルセットの左側のピクセルの出力タイミングで、ピクセルバッファ78Lから受け取ったピクセルデータを、ピクセルセットの右側のピクセルの出力タイミングで、ピクセルバッファ78Rから受け取ったピクセルデータを、後段に出力して倍解像度表示を行う。
図4は、図3(a)のスプライトSP1及び図3(b)のスプライトSP2を同一座標(X,Y)に表示して倍解像度表示を行ったときの例示図である。図4に示すように、拡張表示モードにおいて、フリップパラメータFs[1:0]=0b10(倍解像度モード及びピクセルバッファ78L描画)が設定されたスプライトSP1のキャラクタのピクセルデータは、ピクセルセットの左側のピクセルに割り当てられ、フリップパラメータFs[1:0]=0b11(倍解像度モード及びピクセルバッファ78R描画)が設定されたスプライトSP2のキャラクタのピクセルデータは、ピクセルセットの右側のピクセルに割り当てられて、表示される。つまり、スプライトSP1とスプライトSP2とを同じ座標(X,Y)に表示することにより、これらが合成されて表示される。その結果、図2(a)や図2(b)に示した文字「A」と比較して、解像度が2倍の表示(倍解像度表示)を実現できる。なお、上記のように、1ピクセルセットを表示する際の時間は、互換表示モードおよび拡張表示モードに関係なく固定である。
さて、次に、図1のグラフィックスプロセッサ3の詳細を説明する。図5及び図6は、それぞれ、図1のグラフィックスプロセッサ3の内部構成の前段部分および後段部分を示すブロック図である。
図5及び図6に示すように、グラフィックスプロセッサ3は、スプライトDMAコントローラ50、スプライトメモリ52、スプライトジェネレータ54、第1のバックグラウンドジェネレータ56、第1のピクチャーパラメータミキサ58、第2のバックグラウンドジェネレータ60、第2のピクチャーパラメータミキサ62、アドレスジェネレータ64、ストリップジェネレータ66、キャラクタフェッチャ68、ピクセルジェネレータ70、トランスペアレントコントローラ72、ドロードライバ74、ピクセルバッファコントローラ76、ピクセルバッファ78L、ピクセルバッファ78R、ビュードライバ80、カラーパレットコントローラ82、キャラクタ用カラーパレット84、ビットマップジェネレータ86、ビットマップ用カラーパレット88、ピクセルミキサ90、カラーモジュレータ92、ノイズジェネレータ94、ウィンドウジェネレータ96、ビデオエンコーダ98、ビデオタイミングジェネレータ100、ビデオポジションアジャスタ102、及びビデオファンクションジェネレータ104を含む。
第1のバックグラウンドジェネレータ56、第2のバックグラウンドジェネレータ60、及びビデオファンクションジェネレータ104は、それぞれ、FSCレジスタ57、FSCレジスタ61、及び表示モード制御情報CHRMODEを格納する表示モード制御レジスタ101を含む。
スプライトメモリ52は、256エントリ×56ビットのローカルメモリであり、1つのエントリに1つのスプライトの各パラメータ(スプライトパラメータ、と呼ぶこともある。)が格納される。また、1つのエントリにおいて、各スプライトパラメータの格納位置は決まっている。
図7は、図5のスプライトメモリ52を構成する第0のエントリの構造を示す図である。図7に示すように、第0のエントリは、第1バス31のアドレス空間にマッピングされる。図7を参照しながら、各スプライトパラメータについて説明する。
各スプライトパラメータは、パレット情報P0[3:0]、1ピクセルのビット数B0[2:0]、デプス情報Z0[3:0]、サイズ情報S0[1:0]、フリップ情報F0[1:0]、水平位置情報X0[8:0]、垂直位置情報Y0[7:0]、及びアドレス情報A0[23:0]である。なお、XH0=X0[8]、XL0=X0[7:0]である。
パレット情報P0は、パレットを指定する情報である。後述するが、本実施の形態では、キャラクタ用カラーパレット84は、256色を格納するローカルメモリにより構成される。パレット情報P0は、カラーパレット84のエントリを指し示す8ビットアドレスの上位4ビットに相当する。但し、選択されたカラーモードによっては、パレット情報P0の下位側からの1〜4ビットは、カラーコードの一部に置き換えられる。
ビット数B0は、スプライトを構成するキャラクタの1ピクセルのビット数(ビット/ピクセル:カラーモード)である。
デプス情報Z0は、スプライトを構成するキャラクタの奥行きを示す情報である。デプス情報Z0は、0H(最後面)〜FH(最前面)の範囲で指定できる。複数のピクセルが重なるときは、最も大きいデプス情報Z0を持つピクセルが選択される。
サイズ情報S0は、スプライトを構成するキャラクタのサイズを示す情報であり、キャラクタのサイズが、横8画素×縦8画素の場合、例えば、サイズ情報S0を「00」とする。
フリップ情報F0は、スプライトを構成するキャラクタの反転情報であり、例えば、「00」が反転なし、「01」が水平方向の反転、「10」が垂直方向の反転、「11」が水平及び垂直方向の反転、を示す。
ただし、上記のように、フリップ情報F0は、互換表示モードでは、反転情報として機能するが、拡張表示モードでは、標準解像度モード/倍解像度モードの切替ビット、及び、倍解像度モードでの左右ピクセルの選択ビットとして機能する。
水平位置情報X0は、キャラクタスクリーンの座標系におけるスプライトの水平座標であり、垂直位置情報Y0は、キャラクタスクリーンの座標系におけるスプライトの垂直座標である。
ここで、説明の便宜上、スプライトとバックグラウンドスクリーンとを合成して生成されたスクリーンを、キャラクタスクリーンと呼ぶ。
アドレス情報A0は、スプライトを構成するキャラクタのパターンデータ(キャラクタパターンデータ、と呼ぶこともある。)のメモリMEM上での格納位置を示す情報(先頭アドレス情報)である。キャラクタパターンデータは、キャラクタを構成する各ピクセルのカラーコードからなる。同様に、第1及び第2のバックグラウンドスクリーンを構成するキャラクタパターンデータは、キャラクタを構成する各ピクセルのカラーコードからなる。
スプライトメモリ52の第1〜第255のエントリの構造は、第0のエントリの構造と同じであり、説明を省略する。ただし、第1バス31のアドレス空間へマッピングされるアドレスは異なる。
図5に戻って、スプライトDMAコントローラ50は、メインメモリ17上に配置された各スプライトパラメータをスプライトメモリ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に従って、表示処理範囲内に位置する(ピクセルバッファ78L及び78Rに重なっている(重なりつつある))スプライトの各パラメータB0,S0,F0,X0,Y0,Z0,P0,A0を第1のピクチャーパラメータミキサ58に出力する。ここで、「スプライトがピクセルバッファ78L及び78Rに重なる」という意味は、ピクセルバッファ78L及び78Rが水平座標の或る範囲に関連付けられ、スプライトがこの範囲にオーバーラップするという意味である。
ただし、スプライトジェネレータ54から出力される垂直位置情報Y0は、全ビットではなく下位5ビット、すなわちY0[4:0]となる。なお、アドレスSAは、スプライトDMAコントローラ50により、アドレスFAとして、スプライトメモリ52に与えられる。
また、スプライトジェネレータ54は、CPU1からアクセス可能なレジスタ(図示せず)を含み、このレジスタには、スプライトのアドレス情報の形式T0[2:0]が格納されている。アドレス情報の形式T0は、スプライトのキャラクタパターンデータのフェッチにおけるアドレッシングモードを示す情報である。スプライトジェネレータ54は、上記各スプライトパラメータとともに、アドレス情報の形式T0も、第1のピクチャーパラメータミキサ58に出力する。
ここで、信号VALIDと信号WISHという前段から後段へデータを伝送するときのハンドシェーク信号がある。信号VALIDは、送り手から受け手へ伝達する制御信号で、送るデータが準備できるとデータと共にアクティブになる。信号WISHは逆に受け手から送り手へ伝達する制御信号であり、データが受け入れられる状態のときアクティブになる。両信号VALID,WISHがアクティブの期間(1クロック)に1セットのデータが伝送される。
第1のバックグラウンドジェネレータ56には、第1バス31を通じてCPU1からアクセス可能なレジスタ(FSCレジスタ57のみ図示)が備えられており、それらのレジスタには、第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と同様である。
図8は、図5のFSCレジスタ57及び61の構造を示す図である。図8に示すように、FSCレジスタ57は、第1バス31のアドレス空間にマッピングされ、フリップ情報F1、サイズ情報S1、及びビット数(カラーモード)B1が格納される。
ただし、上記のように、フリップ情報F1は、互換表示モードでは、反転情報として機能するが、拡張表示モードでは、標準解像度モード/倍解像度モードの切替ビット、及び、倍解像度モードでの左右ピクセルの選択ビットとして機能する。
図5に戻って、第1のバックグラウンドジェネレータ56は、水平走査カウント信号HP及び垂直走査カウント信号VPに従って、表示処理範囲内に位置する(ピクセルバッファ78L及び78Rに重なっている(重なりつつある))キャラクタの情報(つまり、配列の要素、さらに換言すると、キャラクタのアドレス情報A1、デプス情報Z1(W1に依存)及びパレット情報P1(W1に依存))を第1バス31を通してメインメモリ17から読み出して、第1のピクチャーパラメータミキサ58へ出力するとともに、そのキャラクタの他の情報(ビット数B1、サイズ情報S1、フリップ情報F1、水平位置情報X1、垂直位置情報Y1、デプス情報Z1(W1に依存)、パレット情報P1(W1に依存)、及びアドレス情報の形式T1)も第1のピクチャーパラメータミキサ58へ出力する。ただし、アトリビュートの所在W1は、後段では使用しないので送出しない。
ここで、アトリビュートの所在W1が「0」の場合には、第1のバックグラウンドジェネレータ56のレジスタに格納されているデプス情報Z1及びパレット情報P1が出力され、W1が「1」の場合には、メインメモリ17から読み出されたデプス情報Z1及びパレット情報P1が出力される。また、水平位置情報X1及び垂直位置情報Y1については、第1のバックグラウンドスクリーン全体の水平位置情報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には、第1バス31を通じてCPU1からアクセス可能なレジスタ(FSCレジスタ61のみ図示)が備えられており、それらのレジスタには、第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のバックグラウンドスクリーンを構成するキャラクタについてのものというだけで、上記の第1のバックグラウンドスクリーンを構成するキャラクタについてのビット数B1、サイズ情報S1、フリップ情報F1、デプス情報Z1、パレット情報P1、及びアドレス情報の形式T1と同様である。
図8を参照して、FSCレジスタ61は、第1バス31のアドレス空間にマッピングされ、フリップ情報F3、サイズ情報S3、及びビット数(カラーモード)B3が格納される。
ただし、上記のように、フリップ情報F3は、互換表示モードでは、反転情報として機能するが、拡張表示モードでは、標準解像度モード/倍解像度モードの切替ビット、及び、倍解像度モードでの左右ピクセルの選択ビットとして機能する。
図5に戻って、第2のバックグラウンドジェネレータ60は、水平走査カウント信号HP及び垂直走査カウント信号VPに従って、表示処理範囲内に位置する(ピクセルバッファ78L及び78Rに重なっている(重なりつつある))キャラクタの情報(つまり、配列の要素、さらに換言すると、キャラクタのアドレス情報A3、デプス情報Z3(W3に依存)及びパレット情報P3(W3に依存))を第1バス31を通してメインメモリ17から読み出して、第2のピクチャーパラメータミキサ62へ出力するとともに、そのキャラクタの他の情報(ビット数B3、サイズ情報S3、フリップ情報F3、水平位置情報X3、垂直位置情報Y3、デプス情報Z3(W3に依存)、パレット情報P3(W3に依存)、及びアドレス情報の形式T3)も第2のピクチャーパラメータミキサ62へ出力する。ただし、アトリビュートの所在W3は、後段では使用しないので送出しない。
ここで、アトリビュートの所在W3が「0」の場合には、第2のバックグラウンドジェネレータ60のレジスタに格納されているデプス情報Z3及びパレット情報P3が出力され、W3が「1」の場合には、メインメモリ17から読み出されたデプス情報Z3及びパレット情報P3が出力される。また、水平位置情報X3及び垂直位置情報Y3については、第2のバックグラウンドスクリーン全体の水平位置情報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バイトアラインメント)を27ビットにゼロ拡張したアドレスをベースに、第2のピクチャーパラメータミキサ62からのビット数Bsとサイズ情報Ssとで示される1キャラクタの容量おきに配置された実アドレスArが計算される。
具体的には、実アドレスArは、(ベースアドレス)+(アドレス情報Asが示すキャラクタの番号)×(ビット数Bsが示す1ピクセルのビット数)×(サイズ情報Ssが示す1キャラクタのピクセル数)/8、により算出される。なお、「8」で除算しているのは、実アドレスArがバイトアドレスだからである。
アラインメント付き16ビットポインタモードは、キャラクタの選択を、16ビットでアラインメント付きのポインタAsで行う。具体的には、アラインメント付き16ビットポインタAsの上位3ビットで示されるセグメントレジスタに格納されたセグメントアドレス(256バイトアラインメント)を27ビットにゼロ拡張したアドレスに、Asの下位13ビットのLSB側に3ビットの「0」を連接した16ビットを加えて27ビットの実アドレスArとなる。
16ビットアドレスポインタモードは、キャラクタの選択を、16ビットのポインタAsで行う。具体的には、16ビットアドレスポインタAsの上位4ビットで示されるセグメントレジスタに格納されたセグメントアドレス(256バイトアラインメント)を27ビットにゼロ拡張したアドレスに、Asの下位12ビットを加えて27ビットの実アドレスArとなる。
24ビットアドレスポインタモードは、キャラクタの選択を、24ビットのポインタAsで行う。具体的には、24ビットアドレスポインタAsの値を27ビットにゼロ拡張したアドレスが27ビットの実アドレスArとなる。
16ビット拡張キャラクタ番号モードは、16ビットキャラクタ番号モードを拡張したモードである。このモードでは、セグメントレジスタの0番地に格納された27ビットのベースアドレス(2Kバイトアラインメント)をベースに、第2のピクチャーパラメータミキサ62からのビット数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に従って、表示処理範囲内に位置する(ピクセルバッファ78L及び78Rに重なっている(重なりつつある))キャラクタを選択する。
そして、ストリップジェネレータ66は、選択したキャラクタ(二次元配列)から、今描画され表示されようとしている横一列の1次元配列(ストリップ、と呼ぶこともある。)を抽出する。例えば、キャラクタが、16画素×16画素であれば、横一列の16画素がストリップである。
以下、表示モード制御情報CHRMODEの値が「0」であり、互換表示モードが設定されている場合と、表示モード制御情報CHRMODEの値が「1」であり、拡張表示モードが設定されている場合と、に分けてより具体的に説明する。
互換表示モードでは、ストリップジェネレータ66は、垂直位置情報Ys、垂直方向の反転を示すフリップ情報Fs[1]、及び垂直走査カウント信号VPに基づいて、抽出するストリップを特定する。このように、互換表示モードでは、フリップ情報Fs[1]が考慮されるので、Fs[1]=1(つまり、垂直方向の反転)の場合は、入力されるキャラクタの垂直座標Ysをキャラクタ内で垂直方向に反転(上下反転)した値に基づいて、ストリップの特定が行われる。
そして、ストリップジェネレータ66は、特定したストリップのアドレス情報(先頭アドレス)Aspを、キャラクタパターンデータのアドレス情報As(先頭アドレス)、1ピクセルのビット数Bs、及びキャラクタのサイズ情報Ssが示す横サイズを基に算出する。これがストリップの抽出である。ここでのストリップの抽出は、キャラクタパターンデータから、特定したストリップのカラーコードの抽出を意味するのではない。
ストリップジェネレータ66は、算出したアドレス情報Aspを、他の信号Bs,Ss,Fs[1:0],Xs,Zs,Psとともに、キャラクタフェッチャ68に出力する。ただし、垂直位置情報Ysは、後段で使われないので送出することはしない。
また、ストリップジェネレータ66は、信号VALIDを、キャラクタフェッチャ68に与え、キャラクタフェッチャ68から、信号WISHが入力される。
一方、拡張表示モードでは、フリップ情報Fs[1]を無視して(考慮せずに)、ストリップを特定する。なぜなら、この場合、フリップ情報Fs[1]は、標準解像度モード及び倍解像度モードの切替ビットとして機能するからである。その他の点は、互換表示モードの場合と同様である。
キャラクタフェッチャ68は、アドレス情報Aspとして伝送されてきたキャラクタをカラーコードに変換する。具体的には、キャラクタフェッチャ68は、アドレス情報Aspで指し示されるメモリMEM上の位置から、1ピクセルのビット数Bsとサイズ情報Ssが示す横サイズとで表される容量分のデータD(つまり、ストリップを構成する各ピクセルのカラーコード)をバイト単位で読み出し、バイト単位、リトルエンディアンの順序で順次ピクセルジェネレータ70へ出力する。以下では、データDを、ストリップパターンデータDと呼ぶ。
キャラクタフェッチャ68は、ストリップパターンデータDだけでなく、他の信号Bs,Ss,Fs[1:0],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と呼ぶ。)を生成する。
また、ピクセルジェネレータ70は、キャラクタの水平位置情報Xsに基づいて、ピクセルごとの水平位置情報Xpを算出する。
この場合、互換表示モードでは、フリップ情報Fs[0]が考慮され、Fs[0]=1の場合は、水平方向の反転を示しているので、サイズ情報Ssが示す水平サイズ分進んだところから逆に減少するように計算を行って、水平位置情報Xpを求める。つまり、キャラクタが、水平方向に反転表示(左右反転表示)されるように、水平位置情報Xpを求める。
一方、拡張表示モードでは、フリップ情報Fs[0]を無視して(考慮せずに)、水平位置情報Xpを求める。なぜなら、拡張表示モードでは、フリップ情報Fs[0]は、倍解像度モードでの左右ピクセルの選択ビットとして機能するからである。
ピクセルジェネレータ70は、以上のようにして求めたピクセルカラーコードC及び水平位置情報Xpを、デプス情報Zs及びフリップ情報Fs[1:0]とともに、トランスペアレントコントローラ72に出力する。この場合、フリップ情報Fs[1]を、切替ビットCmbとして出力し、フリップ情報Fs[0]を、選択ビットOfsとして出力する。ただし、ビット数Bs、サイズ情報Ss、及びパレット情報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、切替ビットCmb、及び選択ビットOfs)は、ドロードライバ74へ出力し、透明と判断したピクセルの情報は、出力せず、ここで捨てる。また、トランスペアレントコントローラ72は、信号VALIDを、ドロードライバ74に与え、ドロードライバ74から、信号WISHが入力される。
ドロードライバ74は、水平位置情報Xpと水平走査カウント信号HPとから、その水平位置情報Xpで表示位置が示されるピクセルがピクセルバッファ78L及び78Rと重なっているか否かを判断し、重なっている場合は、ピクセルバッファコントローラ76に対して、そのピクセルのデプス情報Zs及びピクセルカラーコードCを、ピクセルバッファ78L及び/又は78Rへ書き込むことを要求(つまり、描画要求)する。要求してから受諾されるまでに、水平走査カウント信号HPが1ステップ進む可能性があるので、ドロードライバ74は、1ピクセル少ないピクセルバッファ78L及び78Rの領域で重なりを判定する。
より具体的には、ドロードライバ74は、ピクセルがピクセルバッファ78L及び78Rと重なっていると判断したときは、レジスタ101から入力される表示モード制御情報CHRMODEが「1」(つまり、拡張表示モード)、かつ、切替ビットCmbが「1」(つまり、倍解像度モード)の場合、選択ビットOfsが「0」を示していれば、ピクセルバッファ78Lへのピクセルデータの書き込みを要求するために信号REQ0をアサートし、選択ビットOfsが「1」を示していれば、ピクセルバッファ78Rへのピクセルデータの書き込みを要求するために信号REQ1をアサートする。
そして、ピクセルバッファコントローラ76から、信号WISHが入力されたときに、水平位置情報Xp、デプス情報Zs、及びピクセルカラーコードCを、ピクセルバッファコントローラ76に出力する。
一方、表示モード制御情報CHRMODE及び切替ビットCmbの少なくとも一方が「0」の場合、つまり、互換表示モードの場合か、拡張表示モードであっても標準解像度モードの場合は、ピクセルバッファ78L及び78Rの双方の同一位置に同一ピクセルデータの書き込みを要求するために、信号REQ0及びREQ1の双方をアサートする。
そして、ピクセルバッファコントローラ76から、信号WISHが入力されたときに、水平位置情報Xp、デプス情報Zs、及びピクセルカラーコードCを、ピクセルバッファコントローラ76に出力する。
ピクセルバッファコントローラ76は、ドロードライバ74からのピクセルバッファ78L及び/又は78Rへの書き込み(描画)要求と、ビュードライバ80からの読み出し要求と、を調停する。この場合、ビュードライバ80からの読み出し要求が優先される。ピクセルバッファコントローラ76は、調停の結果、許可した要求に応じた処理を実行する。この場合、ピクセルバッファコントローラ76は、ピクセルバッファ78L,78Rにアクセスして、リードアドレスBRAが指し示す位置からリードデータBO0,BO1を読み出し、あるいは、ライトアドレスBWAが指し示す位置にライトデータBI0,BI1を書き込む。要求(書き込み/読み出し)ごとの処理の詳細は次の通りである。
ピクセルバッファコントローラ76は、信号REQ0のみがアサートされ、ドロードライバ74からのその書き込み要求を許可したときは、ピクセルバッファ78Lから読み出したリードデータBO0(デプス情報Zpb0及びピクセルカラーコードCpb0)に含まれるデプス情報Zpb0とドロードライバ74から入力されたデプス情報Zsとを比較する。
そして、ピクセルバッファコントローラ76は、比較結果に応じて、ピクセルバッファ78Lに書き込むデータBI0を、読み出したリードデータBO0(デプス情報Zpb0及びピクセルカラーコードCpb0)にするか入力されたデータ(デプス情報Zs及びピクセルカラーコードC)にするかを決める。この場合、デプス情報が大きい方が、ライトデータBI0として、ピクセルバッファ78Lに書き込まれる。なお、ピクセルバッファ78Lに与えるリードアドレスBRA及びライトアドレスBWAは、水平位置情報Xpに基づいて生成される。
信号REQ1のみがアサートされ、ドロードライバ74からのその書き込み要求を許可したときは、対象がピクセルバッファ78Lではなく、ピクセルバッファ78Rになるだけであり、同様の処理が行われる。また、信号REQ1及びREQ1の双方がアサートされ、ドロードライバ74からのその書き込み要求を許可したときは、対象がピクセルバッファ78L及び78Rの双方になるだけであり、同様の処理が行われる。
一方、ピクセルバッファコントローラ76は、信号REQがアサートされ、ビュードライバ80からの読み出し要求を許可したときは、ピクセルバッファ78Lから読み出したリードデータBO0(デプス情報Zpb0及びピクセルカラーコードCpb0)並びにピクセルバッファ78Rから読み出したリードデータBO1(デプス情報Zpb1及びピクセルカラーコードCpb1)をビュードライバ80に出力する。
なお、ビュードライバ80へのリードデータBO0及びBO1の出力後に、ピクセルバッファ78L及び78Rの該当位置をクリアするために書き込むデータは0固定(最も奥の位置を示すデプス情報および0を示すカラーコードに対応)である。また、ピクセルバッファ78L及び78Rに与えるリードアドレスBRA及びライトアドレスBWAは、ビュードライバ80から入力されるアドレス情報Xaである。
ピクセルバッファ78Lは、デプスバッファ及びコードバッファからなり(図示せず)、それぞれ、128ピクセル×4ビット及び128ピクセル×8ビットである。ピクセルバッファ78Lの1ピクセル分をピクセルバッファ単位(デプス情報Zpb0を格納する4ビット及びピクセルカラーコードCpb0を格納する8ビットの計12ビット)と呼ぶ。
ピクセルバッファ78Lは、走査位置(つまり、ビュードライバ80による読み出し位置)のピクセルバッファ単位を末尾とし、その走査位置からピクセルバッファ78Lの容量分先のピクセルバッファ単位が先頭となるように、デプス情報Zpb0及びピクセルカラーコードCpb0をピクセル単位で順次的に格納する。走査位置が移動したときは、末尾のピクセルバッファ単位が先頭の格納位置になるように、ピクセルバッファ単位を巡回させる。
ピクセルバッファ78Rの構造及び動作は、ピクセルバッファ78Lと同じであり、説明を省略する。
ビュードライバ80は、水平走査カウント信号HPに基づいて、ピクセルバッファコントローラ76に対して、ピクセルバッファ78L及び78Rからのデータの読み出しを要求する。この読み出し要求は、水平走査カウント信号HPに基づいて生成したアドレス情報Xaと信号REQとを、ピクセルバッファコントローラ76に出力することにより行われる。ビュードライバ80からの読み出し要求は、ピクセルバッファコントローラ76により優先的に扱われるので、読み出し要求を待機させる信号は無い。
そして、ビュードライバ80は、読み出したデプス情報Zpb0及びZpb1をデプス情報Zpbとして、読み出したピクセルカラーコードCpb0及びCpb1をピクセルカラーコードCpbとして、カラーパレットコントローラ82に出力する。つまり、ビュードライバ80は、読み出したデプス情報Zpb0及びピクセルカラーコードCpb0を、ピクセルセットの左側のピクセルのデータとして、読み出したデプス情報Zpb1及びピクセルカラーコードCpb1を、ピクセルセットの右側のピクセルのデータとして、後段に出力する。
さて、次に、ピクセルバッファコントローラ76の動作について、タイミングチャートを用いて説明する。図9は、図6のピクセルバッファコントローラ76の動作を説明するためのタイムチャートである。なお、正論理を採用する。また、拡張表示モードでの動作である。
まず、ピクセルバッファ78L及び78Rへの書き込み処理を説明する。図9を参照して、ピクセルバッファコントローラ76は、信号REQがネゲートされ、かつ、信号REQ0がアサートされると、ピクセルバッファ78Lに対するピクセルデータの比較・書き込み処理を開始する。この場合、信号REQ=0が条件とされているのは、画像表示のためのピクセルバッファ78L及び78Rからの読み出しが、書き込みに対して優先されるためである。
ここで、信号REQがネゲートされ、かつ、信号REQ0がアサートされるサイクルを、比較・書き込み処理開始サイクルと呼ぶ。
ピクセルバッファコントローラ76は、比較・書き込み処理開始サイクルの次のサイクルで、ピクセルバッファ78LのリードアドレスBRA[6:0](比較・書き込み処理開始サイクルの水平座標Xpと同一)からの読み出しを行う。このとき読み出されたデータBO0[11:0]のビット[11:8]は、既にピクセルバッファ78Lに書き込まれているピクセルのデプス値である。
ピクセルバッファコントローラ76は、このデプス値BO0[11:8]と、書き込み対象のピクセルのデプス値Zs[3:0](比較・書き込み処理開始サイクルのデプス値Zs)と、を比較して、Zs≧BO0[11:8]であれば、データBO0[11:0]を読み出したサイクルの次のサイクルで、比較・書き込み処理開始サイクルのピクセルデータ{Zs[3:0],C[7:0]}をライトデータBI0[11:0]として、ピクセルバッファ78LのライトアドレスBWA[6:0](=データBO0[11:0]を読み出したサイクルのリードアドレスBA[6:0])に書き込む。
一方、比較の結果、Zs<BO0[11:8]であれば、ピクセルバッファコントローラ76は、読み出されたデータBO0[11:0]を、データBO0[11:0]を読み出したサイクルの次のサイクルで、そのままライトデータBI0[11:0]として、ピクセルバッファ78LのライトアドレスBWA[6:0](=データBO0[11:0]を読み出したサイクルのリードアドレスBA[6:0])に書き込む。つまり、この場合は、ピクセルバッファ78Lのデータは変化しない。
ピクセルバッファコントローラ76は、ピクセルバッファ78Rに対しても、同様の比較・書き込み処理を行う。
図9を参照して、上記のことをより具体的に説明する。サイクルT3にて、ピクセルバッファコントローラ76は、信号REQがネゲートされ、かつ、信号REQ0がアサートされると、ピクセルバッファ78Lに対するピクセルデータの比較・書き込み処理を開始する。
ピクセルバッファコントローラ76は、比較・書き込み処理開始サイクルT3の次のサイクルT4で、ピクセルバッファ78LのリードアドレスBRA=15H(比較・書き込み処理開始サイクルT3の水平座標Xpと同一)からの読み出しを行う。このとき読み出されたデータBO0[11:0]=235Hのビット[11:8]=2Hは、既にピクセルバッファ78Lに書き込まれているピクセルのデプス値である。
ピクセルバッファコントローラ76は、このデプス値BO0[11:8]=2Hと、書き込み対象のピクセルのデプス値Zs[3:0]=5H(比較・書き込み処理開始サイクルT3のデプス値Zs)と、を比較する。ピクセルバッファコントローラ76は、Zs≧BO0[11:8]であるので、データBO0[11:0]を読み出したサイクルT4の次のサイクルT5で、比較・書き込み処理開始サイクルT3のピクセルデータ{Zs[3:0],C[7:0]}={5H,05H}をライトデータBI0[11:0]=505Hとして、ピクセルバッファ78LのライトアドレスBWA[6:0]=15H(=データBO0[11:0]を読み出したサイクルT4のリードアドレスBRA[6:0])に書き込む。
一方、サイクルT3にて、ピクセルバッファコントローラ76は、信号REQがネゲートされ、かつ、信号REQ1がアサートされると、ピクセルバッファ78Rに対するピクセルデータの比較・書き込み処理を開始する。
ピクセルバッファコントローラ76は、比較・書き込み処理開始サイクルT3の次のサイクルT4で、ピクセルバッファ78RのリードアドレスBRA=15H(比較・書き込み処理開始サイクルT3の水平座標Xpと同一)からの読み出しを行う。このとき読み出されたデータBO1[11:0]=236Hのビット[11:8]=2Hは、既にピクセルバッファ78Rに書き込まれているピクセルのデプス値である。
ピクセルバッファコントローラ76は、このデプス値BO1[11:8]=2Hと、書き込み対象のピクセルのデプス値Zs[3:0]=5H(比較・書き込み処理開始サイクルT3のデプス値Zs)と、を比較する。ピクセルバッファコントローラ76は、Zs≧BO1[11:8]であるので、データBO1[11:0]を読み出したサイクルT4の次のサイクルT5で、比較・書き込み処理開始サイクルT3のピクセルデータ{Zs[3:0],C[7:0]}={5H,05H}をライトデータBI1[11:0]=505Hとして、ピクセルバッファ78RのライトアドレスBWA[6:0]=15H(=データBO1[11:0]を読み出したサイクルT4のリードアドレスBRA[6:0])に書き込む。
サイクルT6にて、ピクセルバッファコントローラ76は、信号REQがネゲートされ、かつ、信号REQ0がアサートされると、ピクセルバッファ78Lに対するピクセルデータの比較・書き込み処理を開始する。
ピクセルバッファコントローラ76は、比較・書き込み処理開始サイクルT6の次のサイクルT7で、ピクセルバッファ78LのリードアドレスBRA=17H(比較・書き込み処理開始サイクルT6の水平座標Xpと同一)からの読み出しを行う。このとき読み出されたデータBO0[11:0]=D10Hのビット[11:8]=DHは、既にピクセルバッファ78Lに書き込まれているピクセルのデプス値である。
ピクセルバッファコントローラ76は、このデプス値BO0[11:8]=DHと、書き込み対象のピクセルのデプス値Zs[3:0]=5H(比較・書き込み処理開始サイクルT6のデプス値Zs)と、を比較する。Zs<BO0[11:8]であるので、ピクセルバッファコントローラ76は、読み出されたデータBO0[11:0]=D10Hを、読み出した次のサイクルT8で、そのままライトデータBI0[11:0]として、ピクセルバッファ78LのライトアドレスBWA[6:0]=17H(=データBO0[11:0]を読み出したサイクルT7のリードアドレスBRA[6:0])に書き込む。
一方、サイクルT6にて、ピクセルバッファコントローラ76は、信号REQがネゲートされ、かつ、信号REQ1がアサートされると、ピクセルバッファ78Rに対するピクセルデータの比較・書き込み処理を開始する。
ピクセルバッファコントローラ76は、比較・書き込み処理開始サイクルT6の次のサイクルT7で、ピクセルバッファ78RのリードアドレスBRA=17H(比較・書き込み処理開始サイクルT6の水平座標Xpと同一)からの読み出しを行う。このとき読み出されたデータBO1[11:0]=D11Hのビット[11:8]=DHは、既にピクセルバッファ78Rに書き込まれているピクセルのデプス値である。
ピクセルバッファコントローラ76は、このデプス値BO1[11:8]=DHと、書き込み対象のピクセルのデプス値Zs[3:0]=5H(比較・書き込み処理開始サイクルT6のデプス値Zs)と、を比較する。Zs<BO1[11:8]であるので、ピクセルバッファコントローラ76は、読み出されたデータBO1[11:0]=D11Hを、読み出した次のサイクルT8で、そのままライトデータBI1[11:0]として、ピクセルバッファ78RのライトアドレスBWA[6:0]=17H(=データBO1[11:0]を読み出したサイクルT7のリードアドレスBRA[6:0])に書き込む。
以降、上記のような比較・書き込み処理が繰り返される。
ところで、サイクルT0〜T8においては、信号REQ0と信号REQ1とは、同じタイミングでアサートされている。これは、表示モード制御情報CHRMODE=1(つまり、拡張表示モード)の場合、切替ビットCmb=0(標準解像度モード)のピクセルがドロードライバ74に入力されると、信号REQ0及び信号REQ1の双方がアサートされるからである。
一方、サイクルT12〜T16では、信号REQ0のみがアサートされている。これは、表示モード制御情報CHRMODE=1(つまり、拡張表示モード)の場合、切替ビットCmb=1(倍解像度モード)のピクセルがドロードライバ74に入力されると、選択ビットOfsの値にしたがって、信号REQ0あるいは信号REQ1のいずれか一方がアサートされるためである。
次に、ピクセルバッファ78L及び78Rからの読み出し処理を説明する。図9を参照して、信号REQがアサートされると、画像表示のためのピクセルデータの読み出し処理が開始される。読み出しは、常にピクセルバッファ78L及びピクセルバッファ78Rの双方から行われる。ここで、信号REQがアサートされたサイクルを読み出し処理開始サイクルと呼ぶ。
ピクセルバッファコントローラ76は、読み出し開始サイクルの次のサイクルで、ピクセルバッファ78L及び78RのリードアドレスBRA[6:0](読み出し処理開始サイクルの水平座標Xaと同一)から、データBO0[11:0]及びBO1[11:0]を読み出す。
そして、ピクセルバッファコントローラ76は、読み出したデータBO0[11:0]及びBO1[11:0]を、読み出しのサイクルの次のサイクルで、データBO0[11:8]をデプス値Zpb0[3:0]として、データBO0[7:0]をピクセルカラーコードCpb0[7:0]として、データBO1[11:8]をデプス値Zpb1[3:0]として、データBO1[7:0]をピクセルカラーコードCpb1[7:0]として、ビュードライバ80に出力する。
読み出し処理開始サイクルの次のサイクルにおいて、ピクセルバッファ78L及び78RのリードアドレスBRA[6:0]から、画像表示のために読み出されたデータは、さらにその次のサイクルで、ピクセルバッファ78L及び78RのライトアドレスBWA(=データBO0及びBO1を読み出したサイクルのリードアドレスBRA)に、ライトデータBI0=BI1=000Hを書き込むことで初期化される。
図9を参照して、上記のことをより具体的に説明する。サイクルT2にて、信号REQがアサートされると、画像表示のためのピクセルデータの読み出し処理が開始される。読み出し処理は、常にピクセルバッファ78L及びピクセルバッファ78Rの双方から行われる。
ピクセルバッファコントローラ76は、読み出し開始サイクルT2の次のサイクルT3で、ピクセルバッファ78L及び78RのリードアドレスBRA[6:0](読み出し処理開始サイクルT2の水平座標Xaと同一)=05Hから、データBO0[11:0]=475H及びBO1[11:0]=475Hを読み出す。
ピクセルバッファコントローラ76は、読み出したデータBO0[11:0]=475H及びBO1[11:0]=475Hを、さらに次のサイクルT4で、データBO0[11:8]=4Hをデプス値Zpb0[3:0]として、データBO0[7:0]=75HをピクセルカラーコードCpb0[7:0]として、データBO1[11:8]=4Hをデプス値Zpb1[3:0]として、データBO1[7:0]=75HをピクセルカラーコードCpb1[7:0]として、ビュードライバ80に出力する。
読み出し処理開始サイクルT2の次のサイクルT3において、ピクセルバッファ78L及び78RのリードアドレスBRA=05Hから、画像表示のために読み出されたデータBO0=475H及びBO1=475Hは、さらにその次のサイクルT4で、ピクセルバッファ78L及び78RのライトアドレスBWA=05H(=データBO0及びBO1を読み出したサイクルT3のリードアドレスBRA)に、ライトデータBI0=BI1=000Hを書き込むことで初期化される。
以降、上記のような読み出し処理が繰り返される。
さて、次に、ビュードライバ80の動作について、タイミングチャートを用いて説明する。図10は、図6のビュードライバ80の動作を説明するためのタイムチャートである。なお、正論理を採用する。また、拡張表示モード、かつ、倍解像度モードでの動作である。
図10を参照して、ビュードライバ80は、クロックCK20=1(ハイレベル)、かつ、水平走査カウントHP[1:0]=01の場合に、クロックCK40の次の立下りで、信号REQをアサートし、クロックCK40のさらに次の立下りで(つまり、1クロック後に)、信号REQをネゲートする。
信号REQがアサートされてから、クロックCK40の2クロック後に、ビュードライバ80は、ピクセルバッファコントローラ76から、ピクセルカラーコードCpb0、デプス値Zpb0、ピクセルカラーコードCpb1、及びデプス値Zpb1を受領する。
そして、ビュードライバ80は、クロックCK20=1(ハイレベル)かつ水平走査カウントHP[1:0]=11の場合に、クロックCK40の次の立下りで、ピクセルカラーコードCpb0及びデプス値Zpb0を、ピクセルカラーコードCpb及びデプス値Zpbとして後段に出力する。
さらに、ビュードライバ80は、クロックCK20=1(ハイレベル)かつ水平走査カウントHP[1:0]=01の場合に、クロックCK40の次の立下りで、ピクセルカラーコードCpb1及びデプス値Zpb1を、ピクセルカラーコードCpb及びデプス値Zpbとして後段に出力する。
図10を参照して、上記のことをより具体的に説明する。ビュードライバ80は、クロックCK20=1(ハイレベル)、かつ、水平走査カウントHP[1:0]=01の場合に、クロックCK40の次の立下りE1で、信号REQをアサートし、クロックCK40のさらに次の立下りE2で、信号REQをネゲートする。
クロックCK40の立下りE1で信号REQがアサートされてから、2クロック後のクロックCK40の立下りE3で、ビュードライバ80は、ピクセルバッファコントローラ76から、ピクセルカラーコードCpb0=02H、デプス値Zpb0=2H、ピクセルカラーコードCpb1=12H、及びデプス値Zpb1=AHを受領する。
そして、ビュードライバ80は、クロックCK20=1(ハイレベル)かつ水平走査カウントHP[1:0]=11の場合に、クロックCK40の次の立下りE5で、ピクセルカラーコードCpb0=02H及びデプス値Zpb0=2Hを、ピクセルカラーコードCpb及びデプス値Zpbとして後段に出力する。
さらに、ビュードライバ80は、クロックCK20=1(ハイレベル)かつ水平走査カウントHP[1:0]=01の場合に、クロックCK40の次の立下りE9で、ピクセルカラーコードCpb1=12H及びデプス値Zpb1=AHを、ピクセルカラーコードCpb及びデプス値Zpbとして後段に出力する。
以降、上記のような処理が繰り返される。
以上のように、ビュードライバ80は、クロックCK40の4サイクルで、ピクセルバッファ78Lに書き込まれたキャラクタ(例えば、図3(a)のスプライトSP1)の1ピクセル分のデータを出力し、連続した次の4サイクルで、ピクセルバッファ78Rに書き込まれたキャラクタ(例えば、図3(b)のスプライトSP2)の1ピクセル分のデータを出力して、2つのキャラクタを合成した合成画像(例えば、図4の合成画像)、つまり、倍解像度画像を生成する。この場合、解像度は、4クロック/ピクセルになる。なお、言うまでもないが、倍解像度画像の為の2つのキャラクタを作成するには、その倍解像度画像の偶数番目のコラムのみからなる画像データと、その倍解像度画像の奇数番目のコラムのみからなる画像データとを作成すればよい。
一方、互換表示モードの場合や、拡張表示モードでも標準解像度モードが設定されている場合は、ビュードライバ80は、クロックCK40の4サイクルで、ピクセルバッファ78Lに書き込まれたキャラクタの1ピクセル分のデータを出力し、連続した次の4サイクルで、ピクセルバッファ78Rに書き込まれた同一キャラクタの1ピクセル分の同一データを出力して、つまり、クロックCK40の8サイクルで、1ピクセル分の同一のデータを出力して、1つの画像(例えば、図2(a)の画像)、つまり、標準解像度画像を生成する。この場合、解像度は、実質的には、8クロック/ピクセルである。
図6に戻って、キャラクタ用カラーパレット84は、256エントリ×16ビットのローカルメモリであり、各エントリのデータは、色相(6ビット)/色飽和度(4ビット)/明度(6ビット)を示している。つまり、1エントリが1色に対応し、16ビットで1色を表現する。
色相は0〜47までの整数で、色飽和度は0〜15までの整数で、明度は0〜47までの整数である。透明色の設定は、色相に48〜63の値を設定することにより行う。
カラーパレットコントローラ82は、ビュードライバ80から入力されるピクセルカラーコードCpbをアドレスP1Aとして、キャラクタ用カラーパレット84にアクセスし、キャラクタ用カラーパレット84から取得したデータP10を、色相Hc、色飽和度Sc、及び明度Lcに分解して、デプス情報Zs(以下、このデプス情報Zsをデプス情報Zcと呼ぶ。)とともに、ピクセルミキサ90に出力する。この場合の出力レートは、本実施の形態では、8クロック/ピクセルとする。
ここで、色相Hc、色飽和度Sc、明度Lc、及びデプス情報Zcからなるデータを、「ピクセルデータPDC」と呼ぶこともある。
カラーパレットコントローラ82が出力するピクセルデータPDCにより表されるピクセルの二次元配列が、上述したキャラクタスクリーン(スプライト+バックグラウンドスクリーン)である。
ビットマップジェネレータ86は、後述のビデオタイミングジェネレータ100が生成した水平走査カウント信号HC及び垂直走査カウント信号VCに従って、メモリMEMに格納されたビットマップデータを読み出して、ビットマップスクリーンを構成するピクセルデータPDB(色相Hb、色飽和度Sb、明度Lb、及びデプス情報Zbからなるデータ)を生成して、その水平解像度に応じた出力レートで、ピクセルミキサ90に出力する。なお、ビットマップスクリーンの水平解像度はプログラマブルである。
ビットマップ用カラーパレット88は、キャラクタ用カラーパレット84と同じ構成を有する。ただし、透明色の設定は、色相に47、色飽和度に0、明度に0の値を設定することにより行う。
ピクセルミキサ90は、カラーパレットコントローラ82から入力されるキャラクタスクリーンのピクセルデータPDCとビットマップジェネレータ86から入力されるビットマップスクリーンのピクセルデータPDBとを合成する。ピクセルミキサ90は、表示画面(テレビフレーム)上での奥行きを示すデプス情報Zc,Zbに基づいて、出力するピクセルデータ(色相、色飽和度、及び明度からなるデータ)を決定する。つまり、ピクセルミキサ90は、最も手前を指す(デプス情報が最も大きい)ピクセルデータを出力する。ただし、デプス情報が手前を示している場合でも、色相が透明色を示している場合には、他方のピクセルデータが選択され、出力される。
ここで、ピクセルミキサ90が出力するピクセルデータを構成する色相、色飽和度、及び明度を、それぞれ、色相Hm、色飽和度Sm、及び明度Lmと表記する。
ウィンドウジェネレータ96は、ビットマップスクリーンと合成されたキャラクタスクリーン(ウィンドウジェネレータ96の説明において、これを単に「スクリーン」と呼ぶ。)に特殊効果を与えるための回路であり、スクリーンをマスク領域と非マスク領域に分割する。マスク領域に対しては、後述のカラーモジュレータ92で特殊効果を与えることができる。このウィンドウジェネレータ96は、CPU1からアクセスできるレジスタを備えており、1水平ラインにおけるマスク開始点の座標、マスク終了点の座標、及びスクリーン左端の論理を設定できる。スクリーン左端の論理とは、左端の状態、つまり、左端がマスクありかマスクなしかを示す論理である。
ウィンドウジェネレータ96は、設定されたスクリーン左端の論理に従って、信号WINの出力を開始し、信号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は、色相、色飽和度、及び明度の各要素を固定できる。各要素の値は、対応するレジスタ(図示せず)に設定する。このレジスタの値は、対応するフラグ(図示せず)がオンのとき有効になる。このフラグは、要素ごとに設けられているので、固定値を使用するか否かを要素ごとに設定できる。
第2は、ハーフトーン表示を行うべく、対応するフラグ(図示せず)をオンにすることで、明度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のフォームを調整できる。
ビデオポジションアジャスタ102は、表示画面(テレビフレーム)に対するキャラクタスクリーンの位置を調整する。具体的には次の通りである。
ビデオポジションアジャスタ102は、入力される水平走査カウント信号HC及び垂直走査カウント信号VCに対して、それぞれオフセットを与え、水平走査カウント信号HP及び垂直走査カウント信号VPを生成する。水平走査カウント信号HP及び垂直走査カウント信号VPは、上記のように、キャラクタスクリーンの生成に関わる各機能ブロックに対して出力される。オフセットは、ビデオポジションアジャスタ102に内蔵される制御レジスタ(図示せず)に対し、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を構成するものである。
表示モード制御レジスタ101には、第1バス31を通じて、CPU1が自由にアクセス可能であり、表示モード制御情報CHRMODEの値を動的に変更可能である。
なお、スプライトDMAコントローラ50、第1のバックグラウンドジェネレータ56、及び第2のバックグラウンドジェネレータ60は、第1バス31へのバス要求機能を備えており、メインメモリ17から能動的にデータを取得できる。また、キャラクタフェッチャ68及びビットマップジェネレータ86は、第1バス31及び第2バス33へのバス要求機能を備えており、メインメモリ17及び外部メモリ45から能動的にデータを取得できる。
さて、次に、図1のプロセッサ1000との間で後方互換性が維持される前世代のプロセッサについて、異なる点を中心に簡単に説明する。前世代のプロセッサの構成要素を示すときには、構成要素の名称の前に、「前世代」なる語を付する。
前世代のプロセッサの構成は、図1のプロセッサ1000の構成と同様である。また、前世代のグラフィックスプロセッサの構成は、図5及び図6に示したグラフィックスプロセッサ3の構成と同様である。ただし、前世代のビデオファンクションジェネレータは、表示モード制御レジスタを備えていない。したがって、前世代のプロセッサは、プロセッサ1000の互換表示モードに相当する標準解像度での表示のみを行うことができる。ただし、プロセッサ1000と同様に、ビットマップスクリーンについては解像度の調整は可能である。
従って、前世代のグラフィックスプロセッサは、1つのピクセルバッファのみを有している。この前世代のピクセルバッファの構成及び動作は、ピクセルバッファ78Lの構成及び動作と同様である。
また、前世代のグラフィックスプロセッサでは、フリップパラメータFsは、反転のための情報のみとして機能する。従って、前世代のストリップジェネレータは、垂直位置情報Ys、垂直方向の反転を示すフリップ情報Fs[1]、及び垂直走査カウント信号VPに基づいて、抽出するストリップを特定する。このように、前世代では、必ずフリップ情報Fs[1]が考慮されるので、Fs[1]=1(つまり、垂直方向の反転)の場合は、入力されるキャラクタの垂直座標Ysをキャラクタ内で垂直方向に反転(上下反転)した値に基づいて、ストリップの特定が行われる。この点、プロセッサ1000の互換表示モードと同様である。ただし、前世代では、フリップ情報Fs[1]は後段で使用されないため、後段に出力されるフリップ情報は、フリップ情報Fs[0]だけである。
従って、前世代のキャラクタフェッチャには、フリップ情報Fs[0]が入力され、そこから、フリップ情報Fs[0]が、後段に出力される。この点、フリップ情報Fs[1:0]が入出力されるプロセッサ1000のキャラクタフェッチャ68とは異なる。
前世代のピクセルジェネレータは、必ずフリップ情報Fs[0]を考慮し、Fs[0]=1の場合は、水平方向の反転を示しているので、サイズ情報Ssが示す水平サイズ分進んだところから逆に減少するように計算を行って、水平位置情報Xpを求める。この点、プロセッサ1000の互換表示モードと同様である。ただし、前世代では、フリップ情報Fs[0]は後段で使用されないため、後段には出力されない。
従って、前世代のトランスペアレントコントローラには、プロセッサ1000のトランスペアレントコントローラ72のように、ビットCmb及びOfsの入出力は行われない。
また、前世代では、ピクセルバッファは1つであるので、前世代のドロードライバは、前世代のピクセルバッファコントローラに書き込み要求するときには、信号REQをアサートする。
従って、前世代のピクセルバッファコントローラは、前世代のドロードライバからの信号REQによる書き込み要求と、前世代のビュードライバからの信号REQによる読み出し要求と、を調停して、調停結果に応じて、前世代のピクセルバッファにアクセスする。
前世代のビュードライバは、前世代のピクセルバッファからの読み出し要求を行い、読み出されたピクセルカラーコードCpbとデプス情報Zpbとを後段に出力する。この点、ピクセルカラーコードCpb0、デプス情報Zpb0、ピクセルカラーコードCpb1、及びデプス情報Zpb1を後段に出力するビュードライバ80と異なる。従って、前世代では、プロセッサ1000での1ピクセルセットが1ピクセルに相当することになり、プロセッサ1000の倍解像度の半分の解像度で表示されることになる。
他の点については、前世代のプロセッサは、プロセッサ1000と同様であり説明を省略する。つまり、拡張表示モードによる表示処理を除けば、プロセッサ1000は、前世代のプロセッサと同様のものである。
さて、以上のように、本実施の形態では、表示モード制御情報CHRMODEにより、互換表示モードと拡張表示モードとを切り替えることができる。従って、互換表示モードを設定したときは、拡張表示モードを搭載しておらず、常に標準解像度モードでの表示を行う前世代のプロセッサのために作成されたソフトウェアをそのまま使用できる。その結果、前世代のプロセッサに搭載されるソフトウェアとの後方互換性を維持しながらも、拡張表示モードにて高解像度の表示が可能である。
この表示モード制御情報CHRMODEは、表示モード制御レジスタ101にセットされるところ、この制御レジスタ101には、第1バス31を通じてCPU1が自由にアクセスできる。その結果、CPU1によって、互換表示モードと拡張表示モードとの切り替えを動的に行うことができる。
とろこで、例えば、図1のプロセッサ1000は、電源投入の後の初期化動作において、表示モード制御レジスタ101の表示モード制御情報CHRMODEを、互換表示モードを示す「0」に初期化する。図1のプロセッサ1000の拡張表示モードで動作する非互換ソフトウェアは、そのスタートアップルーチン等で互換表示モードを拡張表示モードへ切り換える命令、すなわち表示モード制御情報CHRMODEを拡張表示モードを示す「1」に書き換える命令を実行する。これにより、以後の非互換ソフトウェアの実行において、フリップパラメータFs[1:0]は、夫々、切替ビットCmbおよび選択ビットOfsとして機能することとなる。これに対して、図1のプロセッサ1000が開発される以前に作成され、前世代のプロセッサでのみ動作する互換ソフトウェアは、互換表示モードを拡張表示モードへ切り換える命令を持たないため、表示モード制御情報CHRMODEは互換表示モードを示す「0」のままであり、フリップパラメータFs[1:0]の機能は、反転情報として処理される。従って、図1のプロセッサ1000は、互換ソフトウェアを前世代のプロセッサと同様に実行することとなる。
また、本実施の形態では、拡張表示モードにおいては、フリップパラメータFs[1]に従って、ピクセルデータの割り当てをピクセルセットを構成するピクセルごとに行い(倍解像度モード)、あるいは、ピクセルデータの割り当てをピクセルセットごとに行う(標準解像度モード)ことで、解像度の切り替えを行っている。
従って、低い解像度で十分な画像に対しては標準解像度モードを設定し、高い解像度が必要な画像に対しては倍解像度モードを設定することにより、同一画面中の画像ごとに解像度を変えることができ、画像データの大きさを最適化できる。これにより、画像データを格納するメモリ容量の削減とプロセッサ1000の処理負荷の軽減、更に画像データの転送ためのバス帯域への負荷の軽減を図ることができる。
さらに、本実施の形態では、拡張表示モードにおける倍解像度モードにおいては、フリップパラメータFs[0]=0のときは、ピクセルセットを構成する左側のピクセルにピクセルデータが割り当てられ(ピクセルデータがピクセルバッファ78Lに格納され)、フリップパラメータFs[0]=1のときは、ピクセルセットを構成する右側のピクセルにピクセルデータが割り当てられる(ピクセルデータがピクセルバッファ78Rに格納される)。
このように、フリップパラメータFs[0]に従って、ピクセルセットを構成する左右のピクセルにピクセルデータを割り当て、2つのキャラクタ(2つの画像データ)を合成する。つまり、合成対象の2つのキャラクタを1ピクセルずつインターリーブして表示処理を行うことにより、合成画像を生成する。従って、合成対象の各キャラクタ(各画像データ)の形式は、互いに完全同一のものとすることができる。
また、互換表示モードの場合や、拡張表示モードでも標準解像度モードの場合のキャラクタ(画像データ)の形式と、拡張表示モードでの倍解像度モードの場合のキャラクタ(画像データ)の形式と、を互いに完全同一のものとすることができる。
さらに、本実施の形態では、第1のバックグラウンドスクリーン及び第2のバックグラウンドスクリーンに対応して、FSCレジスタ57及び61が設けられている。フリップパラメータF1[1:0]及びF3[1:0]が格納されるFSCレジスタ57及び61には、CPU1が第1バス31を通じて自由にアクセスできる。このため、第1のバックグラウンドスクリーン及び第2のバックグラウンドスクリーンに対して、標準解像度モードと倍解像度モードとの切り替えや、倍解像度モードでの左右ピクセルの選択の変更を動的に行うことができる。
さらに、本実施の形態では、スプライトメモリ52を備えており、各エントリには、1スプライトのフリップパラメータF0[1:0]が格納される。従って、CPU1は、第1バス31を通じてこれらの内容を動的に変更でき、各スプライトに対して、標準解像度モードと倍解像度モードとの切り替えや、倍解像度モードでの左右ピクセルの選択の変更を動的に行うことができる。
さらに、本実施の形態では、フリップパラメータFs[1:0]の格納手段(FSCレジスタ57,61、スプライトメモリ52)とこの情報を処理するためのデータパスをそのまま利用できるため、前世代のプロセッサを基に、大きな回路変更を行うことなく機能拡張したプロセッサ1000を実現できる。
さらに、本実施の形態では、2つのピクセルバッファ78L及び78Rを設けて高解像度の表示を実現している。このように、前世代のグラフィックスプロセッサが備えるピクセルバッファと同じ構成のピクセルバッファを追加するだけで、高解像度の画像表示を行うことが可能なグラフィックスプロセッサ3を実現できる。
さらに、本実施の形態では、互換表示モードの場合や、拡張表示モードでの標準解像度モードの場合は、ピクセルバッファ78L及び78Rの双方の同一位置に同一のピクセルデータが格納されるので、ピクセルバッファ78L及び78Rの双方から、同一のピクセルデータが読み出され、その結果、標準解像度モードに相当する解像度での表示が可能になる。
さらに、本実施の形態では、デプス情報の比較結果に基づいて、ピクセルバッファ78L,78Rへの書き込みを行うので、ピクセルの書き込み順序にかかわらず、同じ位置にピクセルが重なる場合に、表示優先順位の高い方のピクセルデータをピクセルバッファ78L,78Rに書き込むことができる。
さらに、本実施の形態では、ビュードライバ80による読み出しが完了し、不要になったピクセルデータの初期化を行うことで、ピクセルバッファ78Lにおける、初期化されたピクセルデータの格納位置に、新たなピクセルデータをライトできる。従って、1ライン分のバッファを必ずしも設ける必要はなく、1ライン分より容量の小さいピクセルバッファ78Lを設けて、それを巡回的に使用することが可能である。ピクセルバッファ78Rについても同様である。よって、コストの低減を図ることができる。
さらに、本実施の形態では、ドロードライバ74、ピクセルバッファコントローラ76、及びビュードライバ80を設けることで、簡単な回路構成によってピクセルバッファ78L及び78Rに対する効率的なリード/ライトを実現している。
さらに、本実施の形態では、ピクセルバッファ78L及び78Rから読み出した、ピクセルセットを構成する左右のピクセルに対するピクセルデータを、時分割で順に後段に出力してピクセルセットを構成し、合成画像を生成する。即ち、走査線の走査位置に基づいて画像処理を行うグラフィックスプロセッサ3において、簡単な回路構成で高解像度の画像表示を達成できる。
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
(1)上記では、カラーパレット84,88を通じて表示色を指定する間接指定方式を採用した。つまり、キャラクタパターンデータやビットマップデータをカラーコードで表した。ただし、色の表現形式はこれに限定されず、直接指定方式を採用し、例えば、キャラクタパターンデータやビットマップデータを色相H/色飽和度S/明度L等の色情報で表した場合でも、本発明を同様に適用できる。
(2)上記では、ピクセルセットを2つのピクセルで構成した。ただし、ピクセルセットを構成するピクセル数は、これに限定されず、3以上でもよい。1ピクセルセットを表示する際の時間が固定であるとすると、ピクセルセットを構成するピクセル数が大きくなれば解像度も高くなる。この場合も、1ピクセルセットを構成するピクセル数と同数のピクセルバッファを実装する。
(3)上記では、1ライン分より少ないピクセルに対応する容量を持つピクセルバッファを2つ設けた。ただし、これに代えて、1ライン分のラインバッファを2つ設けたり、あるいは、1フレーム分のフレームバッファを2つ設けることもできる。
(4)上記では、ピクセルセットを2つのピクセルで構成し、選択ビットOfsによって、いずれかのピクセルを選択した。この場合、1ピクセルに1ピクセルデータを割り当てた(均等配分)。ただし、ピクセルセットを3以上のピクセルで構成して、ピクセルデータを不均等に配分することもできる。例えば、ピクセルセットを3ピクセルで構成し、左及び中央の2ピクセルに同一ピクセルデータを割り当て、右の1ピクセルに1ピクセルデータを割り当てたり、あるいは、左及び右の2ピクセルに同一ピクセルデータを割り当て、中央の1ピクセルに1ピクセルデータを割り当てたりできる。
1…CPU、3…グラフィックスプロセッサ、17…メインメモリ、45…外部メモリ、50…スプライトDMAコントローラ、52…スプライトメモリ、54…スプライトジェネレータ、56…第1のバックグラウンドジェネレータ、57,61…FSCレジスタ、58…第1のピクチャーパラメータミキサ、60…第2のバックグラウンドジェネレータ、62…第2のピクチャーパラメータミキサ、64…アドレスジェネレータ、66…ストリップジェネレータ、68…キャラクタフェッチャ、70…ピクセルジェネレータ、72…トランスペアレントコントローラ、74…ドロードライバ、76…ピクセルバッファコントローラ、78L,78R…ピクセルバッファ、80…ビュードライバ、82…カラーパレットコントローラ、84…キャラクタ用カラーパレット、86…ビットマップジェネレータ、88…ビットマップ用カラーパレット、90…ピクセルミキサ、92…カラーモジュレータ、98…ビデオエンコーダ、100…ビデオタイミングジェネレータ、101…表示モード制御レジスタ、102…ビデオポジションアジャスタ、1000…プロセッサ。