以下、図面を参照し、この発明の実施の形態を説明する。
図1は、この発明の一実施形態による画像表示装置100の構成を示すブロック図である。この画像表示装置100は、CPU201からの指示に従い、ROM(Read Only Memory;読み出し専用メモリ)等による外部メモリであるパターンメモリ202からスプライトのパターンデータを読み出して、表示対象の画像データを生成し、LCD(Liquid Crystal Display;液晶表示器)203に表示させる装置である。ここで、パターンメモリ202には、圧縮符号化されたスプライトのパターンデータの他、アニメーション実行プログラムが記憶されている。このアニメーション実行プログラムは、アニメーション表示のための各種の制御を指示するコマンドの集合体である。
次に画像表示装置100の構成について説明する。レジスタ101は、画像表示装置100内の各部の制御に用いられる制御情報を記憶する手段である。本実施形態では、CPU201と、画像表示装置100内に設けられたアニメーション実行エンジン120がこのレジスタ101への制御情報の書き込みを行う。
スプライト属性テーブル102Aおよび102Bは、表示対象であるスプライト毎にその表示属性を示す属性データを記憶するスプライト属性記憶手段であり、例えばRAM(Random Access Memory)により構成されている。なお、スプライト属性テーブル102Aおよび102Bは、別個のRAMにより実現されるものであってもよく、共通のRAMの異なるエリアにより実現されるものであってもよい。スプライトレンダリングプロセッサ110は、このスプライト属性テーブル102Aおよび102Bに記憶されたスプライトの属性データに従って描画処理を行うプロセッサである。なお、この描画処理の詳細については後述する。そして、アニメーション実行エンジン120は、パターンメモリ202内のアニメーション実行プログラムを実行し、スプライト属性テーブル102Aおよび102Bの属性データの書き換え等を行う手段である。
本実施形態では、CPU201とアニメーション実行エンジン120の両方がスプライト属性テーブル102Aおよび102Bの属性データの書き換えを行う。さらに詳述すると、本実施形態においてスプライト属性テーブル102Aおよび102Bの各々は、CPU201によって属性データの書き換えが行われるCPU制御エリアと、アニメーション実行プログラムに基づき、アニメーション実行エンジン120により属性データの書き換えが行われるプログラム制御エリアとに区分されて使用される。そして、本実施形態においてスプライト属性テーブル102Aおよび102Bの各CPU制御エリアは、一方が属性データの書き換えを受け付ける更新用エリアとなる場合に他方が描画処理において参照される描画用エリアとなるように切り換え制御が行われる。また、スプライト属性テーブル102Aおよび102Bの各プログラム制御エリアは、各CPU制御エリアとは独立に、一方が属性データの書き換えを受け付ける更新用エリアとなる場合に他方が描画処理において参照される描画用エリアとなるように切り換え制御が行われる。
パターンデータデコーダ103は、表示対象であるスプライトのパターンデータをパターンメモリ202から読み出して復号化を行い、スプライトを構成する各画素の色を示す画像データを出力する装置である。
カラーパレット104は、表示対象であるスプライトの画像データが画素の色をカラーコードにより表現したものである場合に、その画像データを表示に用いることが可能なR、G、BあるいはY、U、V等の画素の色成分の強さを示す画像データに変換する変換テーブルであり、RAM等により構成されている。本実施形態では、CPU201とアニメーション実行エンジン120がカラーパレット104の内容の更新を行うことが可能である。
表示メモリ105は、LCD203に表示させる画像データを記憶するメモリである。この表示メモリ105は、フレーム単位で画像データを記憶するフレームメモリであってもよく、ライン単位で画像データを記憶するラインメモリであってもよい。
スプライトレンダリングプロセッサ110は、LCD203の垂直走査周期毎に、スプライト属性テーブル102Aおよび102Bの各CPU制御エリアおよび各プログラム制御エリアのうち描画用エリアとなっているエリア内の属性データに従って、スプライトの画像データを表示メモリ105内の画像データに反映させる描画処理を実行する。さらに詳述すると、スプライトレンダリングプロセッサ110は、1垂直走査周期の垂直ブランク期間の終了タイミングにおいて、スプライト属性テーブル102Aおよび102Bの各CPU制御エリアおよび各プログラム制御エリアのうち描画用エリアとなっている各エリアを検知し、この描画用エリア内の属性データが示すスプライトのパターンデータの復号化をパターンデータデコーダ103に実行させ、パターンデータデコーダ103により得られるスプライトの画像データを表示メモリ105に格納する。その際、パターンデータデコーダ103により得られるスプライトの画像データがカラーコードにより表現されたものである場合にその画像データのR、G、B形式あるいはY、U、V形式等の画像データへの変換をカラーパレット104に行わせる。また、スプライトの画像データを表示メモリ105に格納するに当たっては、描画用エリア内の属性データが示す各スプライトの表示位置等の表示属性に従って、表示メモリ105における画像データの格納先のアドレスや格納タイミングの制御等を行う。
表示スキャン制御部106は、垂直同期信号VSYNC_Nや水平同期信号HSYNC_N等、LCD203の表示制御の同期信号を発生し、LCD203と読み出し制御部107に供給する回路である。読み出し制御部107は、表示スキャン制御部106が出力する同期信号に従って、表示メモリ105から画像データを読み出し、LCD203に供給する。
スプライトレンダリングプロセッサ110による表示メモリ105への画像データの書き込み(描画)と読み出し制御部107による表示メモリ105からの画像データの読み出しの態様は、表示メモリ105がフレームメモリである場合とラインメモリである場合とで異なったものとなる。
前者の場合、例えば2つのフレームメモリが表示メモリ105として用いられる。これらの2つのフレームメモリは、各垂直走査周期において一方が描画用、他方が表示用となり、垂直走査周期が切り換わる毎に描画用であったフレームメモリが表示用に、表示用であったフレームメモリが描画用に切り換わる。そして、各垂直走査周期において、スプライトレンダリングプロセッサ110は、1フレーム分の画像データを描画用のフレームメモリに書き込み、読み出し制御部107は、表示用のフレームメモリから画像データを読み出してLCD203に供給する。
後者の場合、例えば2ライン分のラインメモリが表示メモリ105として用いられる。これらの2つのラインメモリは、各水平走査周期において一方が描画用、他方が表示用となり、水平走査周期が切り換わる毎に描画用であったラインメモリが表示用に、表示用であったラインメモリメモリが描画用に切り換わる。そして、各水平走査周期において、スプライトレンダリングプロセッサ110は、1ライン分の画像データを描画用のラインメモリに書き込み、読み出し制御部107は、水平同期信号HSYNC_Nに同期して、表示用のラインメモリから画像データを読み出してLCD203に供給する。
アニメーション実行エンジン120は、レジスタ101を介して与えられるCPU201からの指示に従い、パターンメモリ202からアニメーション実行プログラムを読み出して実行する。そして、アニメーション実行エンジン120は、アニメーション実行プログラムに従い、スプライト属性テーブル102Aおよび102Bの各プログラム制御エリアを更新用エリアとするか描画用エリアとするかの切り換え制御を行いつつ、更新用のエリア内の属性データの書き換えを行う。
図2は、本実施形態においてアニメーション実行プログラムを構成する各種のコマンドの構成を示す図である。各コマンドは、エンドコマンドを除き、1バイトのオペコードと1または複数バイトのオペランドとにより構成されている。図2では、各コマンドのオペコードの欄に、そのオペコードがASCIIコード体系において示す文字が示されている(例えばスタートコマンドのオペコードはASCIIコード体系において文字“S”を示す)。
スタートコマンドは、アニメーション実行プログラムの先頭に配置されるコマンドであり、オペランドとしてループ回数を伴う。このループ回数は、アニメーション実行プログラムがループ区間を含む場合において、そのループ区間の終点から始点に戻る回数、すなわち、ループ区間の繰り返し回数よりも1だけ少ない数値を示す。エンドコマンドは、アニメーション実行プログラムの最後に配置されるコマンドであり、オペコードのみからなる。
ループコマンドは、上述したループ区間を指定するコマンドであり、アニメーション実行プログラムにおいてループ区間の終点となる位置に配置される。また、ループコマンドは、オペランドとして戻りアドレスと繰り返しモード値を伴う。ここで、戻りアドレスは、ループ区間の始点がループコマンドの格納されているアドレス(ループ区間の終点)から何個前のアドレスかを指示するデータである。また、繰り返しモード値は、ループ区間の終点から始点への戻り回数を指定するものであり、「0」と「1」の2通りの値をとり得る。繰り返しモード値「0」は、スタートコマンドのオペランドであるループ回数だけループ区間の始点に戻ることを指示するものである。また、繰り返しモード値「1」は、スタートコマンドのオペランドであるループ回数に拘束されず、ループ区間の始点に戻る動作を無限に繰り返すことを指示するものである。
インターバルコマンドは、待機を指示するコマンドである。このインターバルコマンドは、垂直ブランク待ち回数、すなわち、待機すべき垂直ブランク期間の終了点の個数を指定するオペランドを有する。アニメーション実行エンジン120は、このインターバルコマンドを実行した場合、オペランドが示す垂直ブランク待ち回数分の垂直ブランク期間が発生するのを待ち、最後の垂直ブランク期間が終了したとき、後続のコマンドを実行する。このインターバルコマンドは、テーブルライトコマンドの実行タイミングの調整手段等として有用である。
フリップコマンドは、スプライト属性テーブル102Aおよび102Bに記憶されたスプライトの属性データを描画処理に使用させるための制御を指示するコマンドである。より具体的には、このフリップコマンドは、スプライト属性テーブル102Aおよび102Bの各プログラム制御エリアを描画用エリアとするか更新用エリアとするかの切り換えを行うフリップ動作を指示するコマンドであり、必須のオペランドとしてフリップモード値を、任意的なオペランドとしてレイヤ開始アドレスLYSAMおよびレイヤ終了アドレスLYEAMを伴う。
フリップモード値は、フリップ動作の種類を指定するオペランドであり、実行条件フラグCSYと、アドレス書き換えフラグLYAと、テーブル切り換え制御データLYBSELとを含む。ここで、実行条件フラグCSYは、フリップコマンドの実行条件を指定するフラグである。アニメーション実行エンジン120は、CSY=“0”であるフリップコマンドをフェッチした場合、そのフリップコマンドを即時実行する。CSY=“1”であるフリップコマンドは、少なくともCPU201から同期信号が受信されることを実行の条件する実行条件付きコマンドである。アニメーション実行エンジン120は、このCSY=“1”であるフリップコマンドをフェッチした場合、同期信号としてのイネーブル信号ENがCPU201から受信されるまで待機し、このイネーブル信号ENを受信した次の垂直ブランク期間の開始タイミングにおいて、このフリップコマンドを実行する。
アドレス書き換えフラグLYAは、スプライト属性テーブル102Aおよび102Bの各々において、当該アニメーション実行プログラムに対応したプログラム制御エリアの開始点を示すレイヤ開始アドレスLYSAMと終了点を示すレイヤ終了アドレスLYEAMを書き換えるか否かを指示するフラグである。レイヤ開始アドレスLYSAMおよびレイヤ終了アドレスLYEAMの書き換えを行わない場合にはLYA=“0”、書き換えを行う場合にはLYA=“1”とされる。
テーブル切り換え制御データLYBSELは、スプライト属性テーブル102Aおよび102Bの各プログラム制御エリアを描画用エリアとするか更新用エリアとするかの切り換え態様を指示する2ビットのデータである。さらに詳述すると、LYBSEL=1Xb(bはバイナリ、Xは不定)であるフリップコマンドは、スプライト属性テーブル102Aおよび102Bの各プログラム制御エリアのうち更新用エリアとなっているものを描画用エリアに、描画用エリアとなっているものを更新用エリアに切り換えることを指示するものである。また、LYBSEL=00bであるフリップコマンドは、スプライト属性テーブル102Aのプログラム制御エリアを描画用エリアに、スプライト属性テーブル102Bのプログラム制御エリアを更新用エリアに切り換えることを指示するものである。また、LYBSEL=01bであるフリップコマンドは、スプライト属性テーブル102Bのプログラム制御エリアを描画用エリアに、スプライト属性テーブル102Aのプログラム制御エリアを更新用エリアに切り換えることを指示するものである。
レイヤ開始アドレスLYSAMおよびレイヤ終了アドレスLYEAMは、LYA=“1”である場合にフリップコマンドに付加されるオペランドである。このLYA=“1”であるフリップコマンドが実行されると、プログラム制御エリアの開始アドレスおよび終了アドレスがオペランドにより指定されたレイヤ開始アドレスLYSAMおよびレイヤ終了アドレスLYEAMに変更される。
本実施形態において、フリップコマンドの実行の効果は、フリップコマンドの実行タイミングの次の垂直ブランク終了タイミングにおいて発生する。すなわち、例えばLYBSEL=1Xbであるフリップコマンドが実行された場合、各垂直走査期間の垂直ブランク期間の終了タイミングのうちそのフリップコマンドの実行タイミングの次に現れる終了タイミングにおいて、それまで更新用エリアとなっていたプログラム制御エリアが描画用エリアに、描画用エリアとなっていたプログラム制御エリアが更新用エリアに切り換えられる。
テーブルライトコマンドは、スプライト属性テーブル102Aまたは102Bの各プログラム制御エリアのうち更新用エリアとなっているプログラム制御エリア内において、オペランドにより指定されたエリアに、オペランドにより指定されたデータを書き込むことを指示するコマンドである。このテーブルライトコマンドは、オペランドとして、更新用エリアであるプログラム制御エリアに対する書き込みバイト数と、更新用エリアであるプログラム制御エリアにおいてデータの書き込み先となるエリアの開始点である書き込み開始アドレス(スプライト属性テーブル内における相対アドレス)と、上記書き込みバイト数と同じバイト数の書き込みデータとを有している。
テーブルサイクルライトコマンドは、スプライト属性テーブル102Aまたは102Bの各プログラム制御エリアのうち更新用エリアとなっているプログラム制御エリア内において、オペランドにより指定されたエリアに、オペランドにより指定されたデータを繰り返し書き込むことを指示するコマンドである。このテーブルサイクルライトコマンドは、オペランドとして、更新用エリアであるプログラム制御エリアに対して繰り返し書き込むデータのバイト数である繰り返しバイト数と、更新用エリアであるプログラム制御エリアにおいてデータの書き込み先となるエリアの開始点である書き込み開始アドレスと、同エリアの終点である書き込み終了アドレスと、上記繰り返しバイト数と同じバイト数の書き込みデータとを有している。
このテーブルサイクルライトコマンドは、スプライト属性テーブル102Aおよび102Bの初期化に用いられるコマンドである。本実施形態において、スプライト属性テーブル102Aおよび102Bは、1アドレス当たりのデータ幅が12バイトである。従って、12バイトの初期化データを書きこみデータとするテーブルサイクルライトコマンドを繰り返し実行することにより、スプライト属性テーブル102Aおよび102Bの全エリアを初期化することが可能である。スプライト属性テーブル102Aおよび102Bの初期化は、アニメーションの切り替え時等に行われる。
パレットライトコマンドは、カラーパレット104において、オペランドにより指定されたエリアに、オペランドにより指定されたデータを書き込むことを指示するコマンドである。このパレットライトコマンドは、オペランドとして、カラーパレット104に対する書き込みバイト数と、カラーパレット104においてデータの書き込み先となるエリアの開始点である書き込み開始アドレスと、上記書き込みバイト数と同じバイト数の書き込みデータとを有している。
レジスタライトコマンドは、レジスタ101において、オペランドにより指定されたエリアに、オペランドにより指定されたデータを書き込むことを指示するコマンドである。このレジスタライトコマンドは、オペランドとして、レジスタ101に対する書き込みバイト数と、レジスタ101においてデータの書き込み先となるエリアの開始点である書き込み開始アドレスと、上記書き込みバイト数と同じバイト数の書き込みデータとを有している。
以上がアニメーション実行プログラムを構成する各コマンドの構成である。アニメーション実行エンジン120は、これらの各コマンドを解釈して実行する機能を備えている。
本実施形態において、アニメーション実行エンジン120は、時分割制御により複数のアニメーション実行プログラムを同時に並列実行することが可能である。レジスタ101には、アニメーション実行エンジン120が同時に並列実行することが可能なアニメーション実行プログラムと同数の実行制御情報記憶エリアが設けられている。各実行制御情報記憶エリアには、実行対象であるアニメーション実行プログラムのパターンメモリ202内における格納開始アドレスと、3種類の実行制御フラグPLAY、PAUSE、STOPとが記憶される。
1個のアニメーション実行プログラムの実行制御の態様は次の通りである。まず、アニメーション実行エンジン120は、CPU201によって、ある実行制御情報記憶エリアのフラグPLAYが“1”、フラグPAUSEが“0”、フラグSTOPが“0”とされたとき、パターンメモリ202内において同実行制御情報記憶エリアに記憶された格納開始アドレスから始まるエリア内のアニメーション実行プログラムの実行を開始する。
また、アニメーション実行エンジン120は、同実行制御情報記憶エリアにおいて実行制御フラグの状態がPLAY=“1”、PAUSE=“0”、STOP=“0”の状態からPLAY=“0”、PAUSE=“1”、STOP=“0”の状態になったとき、アニメーション実行プログラムの実行を一時停止する。
また、アニメーション実行エンジン120は、同実行制御情報記憶エリアにおいて実行制御フラグの状態がPLAY=“0”、PAUSE=“1”、STOP=“0”の状態からPLAY=“1”、PAUSE=“0”、STOP=“0”の状態に戻ったとき、一時停止したアドレスからアニメーション実行プログラムの実行を再開する。
また、アニメーション実行エンジン120は、同実行制御情報記憶エリアにおいて実行制御フラグの状態がPLAY=“0”、PAUSE=“0”、STOP=“1”とされたとき、パターンメモリ202内において同実行制御情報記憶エリアに記憶された格納開始アドレスから始まるエリア内のアニメーション実行プログラムの実行を終了する。
以上、1個のアニメーション実行プログラムの実行制御の態様を説明したが、複数のアニメーション実行プログラムが並列実行される場合の実行制御の態様も同様である。
また、以上説明した情報の他、各アニメーション実行プログラムに対応した各実行制御情報記憶エリアには、スプライト属性テーブル102Aおよび102Bにおける当該アニメーション実行プログラムに対応したプログラム制御エリアの範囲を示すレイヤ開始アドレスLYSAMおよびレイヤ終了アドレスLYEAMが記憶される。さらに各アニメーション実行プログラムに対応した各実行制御情報記憶エリアには、スプライト属性テーブル102Aおよび102Bにおける当該アニメーション実行プログラムに対応した各プログラム制御エリアのうちいずれが描画用エリアで、いずれが更新用エリアであるかを示すテーブル状態フラグLYBSELMが記憶される。
あるアニメーション実行プログラムに対応したプログラム制御エリア内のテーブル状態フラグLYBSELMが“0”である場合、そのアニメーション実行プログラムに対応した各プログラム制御エリアのうちスプライト属性テーブル102A内のプログラム制御エリアが描画用エリアであり、スプライト属性テーブル102B内のプログラム制御エリアが更新用エリアである。これに対し、状態フラグLYBSELMが“1”である場合、スプライト属性テーブル102B内のプログラム制御エリアが描画用エリアであり、スプライト属性テーブル102A内のプログラム制御エリアが更新用エリアである。
各アニメーション実行プログラムに対応したプログラム制御エリア内のテーブル状態フラグLYBSELMは、アニメーション実行エンジン120が当該アニメーション実行プログラム内のフリップコマンドに従って書き換える。当該アニメーション実行プログラムに対応したプログラム制御エリアの範囲を示すレイヤ開始アドレスLYSAMおよびレイヤ終了アドレスLYEAMも同様であり、アニメーション実行エンジン120が当該アニメーション実行プログラム内のフリップコマンドに従って書き換える。
以上説明した各アニメーション実行プログラムに対応した各実行制御情報記憶エリアの他、レジスタ101には、CPU201によるアニメーション表示の実行を制御するための制御情報を記憶する実行制御情報記憶エリアが設けられている。このCPU201によるアニメーション表示用の実行制御情報記憶エリアには、スプライト属性テーブル102Aおよび102Bにおける各CPU制御エリアのうちいずれが描画用エリアで、いずれが更新用エリアであるかを示すテーブル状態フラグLYBSELCが記憶される。このテーブル状態フラグLYBSELCが“0”である場合、スプライト属性テーブル102A内のCPU制御エリアは描画用エリアであり、スプライト属性テーブル102B内のCPU制御エリアは更新用エリアである。これに対し、テーブル状態フラグLYBSELCが“1”である場合、スプライト属性テーブル102B内のCPU制御エリアが描画用エリアであり、スプライト属性テーブル102A内のCPU制御エリアが更新用エリアである。テーブル状態フラグLYBSELCの内容は、CPU201が更新用エリアであるCPU制御エリアに属性データを書き込んだ後に出力するイネーブル信号ENおよび表示スキャン制御部106が出力する垂直同期信号VSYNC_Nに基づき、アニメーション実行エンジン120が書き換える。さらに詳述すると、アニメーション実行エンジン120は、イネーブル信号ENが受信された後の垂直走査周期の開始点に対して所定の位相を持った基準タイミング、具体的にはその垂直走査周期の垂直ブランク期間の終了タイミングにおいてテーブル状態フラグLYBSELCを反転させる。なお、このようなテーブル状態フラグLYBSELCの切り換えは、アニメーション実行エンジン120以外の装置に行わせるようにしてもよい。
図3は、本実施形態の第1の動作例を示すタイムチャートである。この図において、Sはスタートコマンド、Tはテーブルライトコマンド、Fはフリップコマンド、Iはインターバルコマンドを示す。また、フリップコマンドFは、全てCSY=“0”、LYA=“0”、LYBSEL=1Xbのフリップコマンドである。この第1の動作例では、スプライト属性テーブル102Aおよび102Bの各CPU制御エリアの属性データの書き換えは行われない。従って、CPU201によるイネーブル信号ENの出力も行われず、テーブル状態フラグLYBSELCは“0”を維持している。この第1の動作例では、アニメーション実行エンジン120のみがスプライト属性テーブル102Aおよび102Bの各プログラム制御エリアの属性データの書き換えを行い、LCD203にアニメーション表示を行わせている。
第1の動作例において、フレーム1では、CPU201がレジスタ101のあるアニメーション実行プログラムに対応した実行制御記憶エリアに実行制御フラグとしてPLAY=“1”、PAUSE=“0”、STOP=“0”を書き込んでいる。そして、フレーム1において、アニメーション実行エンジン120は、パターンメモリ202内の各アニメーション実行プログラムのうちその実行制御記憶エリア内の格納開始アドレスにより特定されるアニメーション実行プログラムの実行を開始している。
まず、アニメーション実行エンジン120は、アニメーション実行プログラムの先頭のスタートコマンドSを実行する。次にアニメーション実行エンジン120は、2番目のコマンドであるテーブルライトコマンドTを実行する。この例では、この時点において、当該アニメーション実行プログラムに対応した実行制御記憶エリア内のテーブル状態フラグLYBSELMが“0”であり、スプライト属性テーブル102Aのプログラム制御エリアが描画用エリア、スプライト属性テーブル102Bのプログラム制御エリアが更新用エリアとなっている。このため、アニメーション実行エンジン120は、スプライト属性テーブル102Bのプログラム制御エリア内において、テーブルライトコマンドTのオペランド(書き込み開始アドレス)により指定されたエリアに、オペランドにより指定されたデータ(書き込みデータ)を転送する。次にアニメーション実行エンジン120は、3番目のコマンドであるフリップコマンドFをフェッチする。このフリップコマンドFは、CSY=“0”であるフリップコマンドであるため、アニメーション実行エンジン120は、このフリップコマンドFを即時実行する。ただし、フリップコマンドFの実行の効果は、この時点では発生せず、次の垂直ブランク期間の終了タイミングにおいて発生することとなる。
次にアニメーション実行エンジン120は、4番目のコマンドであるインターバルコマンドIを実行する。この例において、インターバルコマンドのオペランドが示す垂直ブランク待ち回数は「1」となっている。このため、アニメーション実行エンジン120は、フレーム2において垂直ブランク期間が終了するまで5番目のコマンドの実行を待つ。
フレーム2の垂直ブランク期間が終了すると、上述したフリップコマンドFの実行の効果が発生する。すなわち、当該アニメーション実行プログラムに対応した実行制御記憶エリア内のテーブル状態フラグLYBSELMが“0”から“1”に反転し、スプライト属性テーブル102Aのプログラム制御エリアが更新用エリア、スプライト属性テーブル102Bのプログラム制御エリアが描画用エリアとなる。この結果、フレーム2における垂直ブランク期間の後の表示期間では、フレーム1においてテーブルライトコマンドTによりスプライト属性テーブル102Bのプログラム制御エリア(フレーム1では更新用エリア)に書き込まれた属性データが描画処理に使用される。また、フレーム2の垂直ブランク期間が終了すると、4番目のインターバルコマンドIのオペランドにより指定された垂直ブランク待ち回数に関する条件が満たされるため、アニメーション実行エンジン120は、5番目のコマンドであるテーブルライトコマンドTを実行する。この場合、アニメーション実行エンジン120は、スプライト属性テーブル102Aのプログラム制御エリアにおいて、テーブルライトコマンドTのオペランド(書き込み開始アドレス)により指定されたエリアに、オペランドにより指定されたデータ(書き込みデータ)を転送する。次にアニメーション実行エンジン120は、6番目のコマンドであるフリップコマンドFをフェッチして直ちに実行する。この場合も、フリップコマンドFの実行の効果は、この時点では発生せず、次のフレーム3の垂直ブランク期間の終了タイミングにおいて発生することとなる。
次にアニメーション実行エンジン120は、7番目のコマンドであるインターバルコマンドIを実行する。この例において、インターバルコマンドIのオペランドが示す垂直ブランク待ち回数は「1」となっている。このため、アニメーション実行エンジン120は、フレーム3において垂直ブランク期間が終了するまで8番目のコマンドの実行を待つ。
以下、同様であり、図示の例では、フレーム3では、8〜10番目のコマンドであるテーブルライトコマンドT、フリップコマンドFおよびインターバルコマンドIが順次実行された後、インターバルコマンドIの作用によりフレーム4の垂直ブランク期間の終了までの待ち時間が発生し、フレーム4では、11〜13番目のコマンドであるテーブルライトコマンドT、フリップコマンドFおよびインターバルコマンドIが順次実行される。
このように、図3に示す例では、アニメーション実行プログラムを構成する各コマンドに従って、1フレーム毎にスプライト属性テーブル102Aおよび102Bの各プログラム制御エリアのうち更新用エリアへの属性データの転送が行われ、スプライトの表示位置等の表示属性の更新が行われるとともに、テーブル状態フラグLYBSELMの反転、すなわち、更新用エリアの描画用エリアへの切り換え、描画用エリアの更新用エリアへの切り換えが行われる。一方、スプライトレンダリングプロセッサ110は、各フレームにおいて、スプライト属性テーブル102Aおよび102Bの各プログラム制御エリアのうち描画用エリアとなっているエリア内の属性データに従ってスプライトの表示メモリ105への描画を行う。従って、本実施形態によれば、CPU201の負担を招くことなく、LCD203にアニメーション表示を行わせることができる。
また、本実施形態によれば、アニメーション実行プログラムにおいてインターバルコマンドを用いることができるので、図3に示すように、インターバルコマンドIとテーブルライトコマンドTを組み合わせて使用することによりテーブルライトコマンドTの実行タイミング(より具体的には前後したテーブルライトコマンドTの実行間隔)を調整し、かつ、垂直走査周期に同期させることができる。従って、アニメーション実行プログラムのプログラミングにおいて、アニメーションにおけるスプライトの動きのタイミング制御を容易に行うことができる。
なお、図3に示す例では、各インターバルコマンドIのオペランドである垂直ブランク待ち回数を「1」としたため、1フレーム毎にテーブルライトコマンドTが実行され、スプライト属性テーブル102Aおよび102Bの各プログラム制御エリアのうち更新用エリアへの属性データの転送が行われた。しかし、各インターバルコマンドIのオペランドである垂直ブランク待ち回数を例えば「2」とすれば、2フレームに1回の割合でテーブルライトコマンドTが実行され、更新用エリアであるプログラム制御エリアへの属性データの転送が行われることとなる。このように本実施形態によれば、インターバルコマンドIのオペランドである垂直ブランク待ち回数を調整することにより、スプライトの動きの速さを決定するフレームレートを調整することができる。
また、本実施形態によれば、アニメーション実行プログラムにおいて、図3に示すように、フリップコマンドF(CSY=“0”、LYA=“0”、LYBSEL=1Xb)とテーブルライトコマンドTを組み合わせて使用することができる。このようにすることにより、テーブルライトコマンドTの実行により属性データの更新された更新用のスプライト属性テーブルを直ちに描画用に切り換え、更新された属性データを用いた描画をスプライトレンダリングプロセッサ110に行わせることができる。
また、図3に示す例ではアニメーション実行プログラムに用いられていないが、本実施形態では、アニメーション実行プログラムにおいてループコマンドを使用することができる。このループコマンドを使用した場合、アニメーション実行プログラムにおいてループ区間内のコマンドをアニメーション実行エンジン120に繰り返し実行させることができ、アニメーション実行プログラムの全体のバイト数を大きくすることなく、例えばスプライトの周期的な動きを伴うようなアニメーションを表示させることができる。
また、図3に示す例ではアニメーション実行プログラムに用いられていないが、本実施形態では、アニメーション実行プログラムにおいてパレットライトコマンドを使用することができる。このパレットライトコマンドをアニメーション実行プログラムに使用した場合、CPU201の負担を招くことなく、例えばアニメーションの途中の任意のタイミングにおいてスプライトの表示色を変更するといった演出が可能になる。
図4は、本実施形態の第2の動作例を示すタイムチャートである。この第2の動作例において、フリップコマンドFは、全てCSY=“1”、LYA=“0”、LYBSEL=1Xbの実行条件付きフリップコマンドである。この第2の動作例では、CPU201によりスプライト属性テーブル102Aおよび102Bの各CPU制御エリアの属性データの書き換えが行われている。そして、CPU201は、スプライト属性テーブル102Aおよび102Bの各CPU制御エリアのうち更新用のエリアへの属性データの転送を終える毎にイネーブル信号ENを出力している。このイネーブル信号ENの出力の効果は、イネーブル信号ENが出力された後の垂直走査周期の開始点に対して所定の位相を持った基準タイミング、具体的にはイネーブル信号ENの出力後の最初の垂直ブランク終了タイミングに発生する。すなわち、イネーブル信号ENが出力された場合、各フレームの各垂直ブランク期間の各終了タイミングのうちそのイネーブル信号ENが出力された後の最初の終了タイミングにおいて、テーブル状態フラグLYBSELCが反転する。また、第2の動作例では、このようなCPU201によるCPU制御エリア内の属性データの書き換えと並行し、アニメーション実行エンジン120がスプライト属性テーブル102Aおよび102Bの各プログラム制御エリアの属性データの書き換えを行う。
上述した第1の動作例と同様、CPU201は、フレーム1においてレジスタ101のあるアニメーション実行プログラムに対応した実行制御記憶エリアに実行制御フラグとしてPLAY=“1”、PAUSE=“0”、STOP=“0”を書き込み、そのアニメーション実行プログラムを起動している。
1番目のスタートコマンドS、2番目のテーブルライトコマンドTの実行に関しては、上記第1の動作例と同様である。アニメーション実行エンジン120は、フレーム1において1番目のスタートコマンドSの実行後、2番目のテーブルライトコマンドTを実行し、その時点において更新用エリアであるスプライト属性テーブル102Bのプログラム制御エリアにアニメーションの最初の一画面に対応した属性データを書き終える。その後、アニメーション実行エンジン120は、3番目のコマンドであるフリップコマンドFをフェッチする。このフリップコマンドFは、CSY=“1”を含む実行条件付きフリップコマンドである。このため、アニメーション実行エンジン120は、このフリップコマンドFを直ちには実行せず、CPU201がイネーブル信号ENを出力するのを待つ。
一方、フレーム1においてアニメーション実行プログラムの実行開始を指示したCPU201は、その後、CPU制御エリアに対し、アニメーションの最初の一画面に対応した属性データを書き込む。この例では、当初、テーブル状態フラグLYBSELCは“0”となっているため、CPU201から出力される最初の一画面に対応した属性データは、スプライト属性テーブル102BのCPU制御エリアに書き込まれる。そして、CPU201は、スプライト属性テーブル102BのCPU制御エリアへの最初の一画面に対応した属性データの書き込みを終えると、フレーム2において、イネーブル信号ENを出力する。
このように、フレーム2においてイネーブル信号ENが出力されると、アニメーション実行エンジン120は、待機させていたフリップコマンドFをフレーム3の垂直ブランク期間の開始タイミングにおいて実行する。このフリップコマンドFの実行の効果は、同垂直ブランク期間の終了タイミングにおいて発生することとなる。フリップコマンドFの実行を終えたアニメーション実行エンジン120は、同垂直ブランク期間内に4番目のコマンドであるインターバルコマンドIを実行する。この例において、インターバルコマンドのオペランドが示す垂直ブランク待ち回数は「1」となっている。このため、アニメーション実行エンジン120は、その時点において継続中のフレーム3の垂直ブランク期間が終了するまで5番目のコマンドの実行を待つ。
フレーム3の垂直ブランク期間が終了すると、フレーム2において行われたイネーブル信号ENの出力の効果が発生する。すなわち、テーブル状態フラグLYBSELCが“0”から“1”に反転する。これによりスプライト属性テーブル102AのCPU制御エリアが更新用エリア、スプライト属性テーブル102BのCPU制御エリアが描画用エリアとなる。この結果、フレーム3の垂直ブランク期間の後の表示期間では、CPU201がスプライト属性テーブル102BのCPU制御エリア(フレーム1では更新用エリア、フレーム3の表示期間では描画用エリア)に書き込んだ最初の一画面に対応した属性データが描画処理に用いられる。
また、フレーム3の垂直ブランク期間が終了すると、上述したフリップコマンドFの実行の効果が発生する。すなわち、実行中のアニメーション実行プログラムに対応した実行制御記憶エリア内のテーブル状態フラグLYBSELMが“0”から“1”に反転する。これにより、スプライト属性テーブル102Aのプログラム制御エリアが更新用エリア、スプライト属性テーブル102Bのプログラム制御エリアが描画用となる。この結果、フレーム3の垂直ブランク期間の後の表示期間では、フレーム1においてテーブルライトコマンドTに従ってスプライト属性テーブル102Bのプログラム制御エリア(フレーム1では更新用エリア、フレーム3の表示期間では描画用エリア)に書き込まれた最初の一画面に対応した属性データが描画処理に用いられる。
このように、本実施形態によれば、CPU201によるイネーブル信号ENの出力タイミングの次の垂直ブランク終了タイミングにおいて更新用のCPU制御エリアと描画用のCPU制御エリアとの切り換えを行わせ、かつ、その切り換えと同時に実行条件付きフリップコマンドによる更新用のプログラム制御エリアと描画用のプログラム制御エリアの切り換えを行わせることができる。従って、本実施形態によれば、アニメーション実行エンジン120がアニメーション実行プログラムに従ってプログラム制御エリアに最初の一画面に対応した属性データを書き込むタイミングと、CPU201がCPU制御エリアに最初の一画面に対応した属性データを書き込みタイミングとがずれたとしても、アニメーション実行プログラムが書き込んだ最初の一画面に対応した属性データとCPU201が書き込んだ最初の一画面に対応した属性データが同一フレームにおいて描画処理に使用され、CPU201によるアニメーション表示とアニメーション実行プログラムによるアニメーション表示とが同時に開始される。
フレーム3の垂直ブランク期間が終了すると、4番目のインターバルコマンドIのオペランドにより指定された垂直ブランク待ち回数に関する条件が満たされるため、アニメーション実行エンジン120は、5番目のコマンドであるテーブルライトコマンドTを実行する。この時点では、テーブル状態フラグLYBSELMが“1”であり、スプライト属性テーブル102Aのプログラム制御エリアが更新用エリア、スプライト属性テーブル102Bのプログラム制御エリアが描画用となっている。そこで、アニメーション実行エンジン120は、スプライト属性テーブル102Aのプログラム制御エリア内のテーブルライトコマンドTのオペランド(書き込み開始アドレス)により指定されたエリアに、オペランドにより指定されたデータ(書き込みデータ)を転送する。
次にアニメーション実行エンジン120は、6番目のコマンドであるフリップコマンドFをフェッチする。このフリップコマンドFは、CSY=“1”を含む実行条件付きフリップコマンドである。このため、アニメーション実行エンジン120は、このフリップコマンドFを直ちには実行せず、CPU201がイネーブル信号ENを出力するのを待つ。
一方、CPU201は、更新用エリアであるスプライト属性テーブル102AのCPU制御エリアに対し、アニメーションの2番目の画面に対応した属性データを書き込む。そして、この属性データの書き込みを終えると、CPU201は、フレーム4においてイネーブル信号ENを出力する。
このように、フレーム4においてイネーブル信号ENが出力されると、アニメーション実行エンジン120は、待機させていたフリップコマンドFをフレーム5の垂直ブランク期間の開始タイミングにおいて実行する。このフリップコマンドFの実行の効果は、同垂直ブランク期間の終了タイミングにおいて発生することとなる。フリップコマンドFの実行を終えたアニメーション実行エンジン120は、同垂直ブランク期間内に7番目のコマンドであるインターバルコマンドIを実行する。この例において、インターバルコマンドのオペランドが示す垂直ブランク待ち回数は「1」となっている。このため、アニメーション実行エンジン120は、その時点において継続中のフレーム5の垂直ブランク期間が終了するまで8番目のコマンドの実行を待つ。
フレーム5の垂直ブランク期間が終了すると、フレーム4において行われたイネーブル信号ENの出力の効果が発生する。すなわち、テーブル状態フラグLYBSELCが“1”から“0”に反転する。これによりスプライト属性テーブル102BのCPU制御エリアが更新用エリア、スプライト属性テーブル102AのCPU制御エリアが描画用エリアとなる。この結果、フレーム5の垂直ブランク期間の後の表示期間では、CPU201によってスプライト属性テーブル102AのCPU制御エリア(フレーム4では更新用エリア、フレーム5の表示期間では描画用エリア)に書き込まれた2番目の画面に対応した属性データが描画処理に用いられる。
また、フレーム5の垂直ブランク期間が終了すると、上述したフリップコマンドFの実行の効果が発生する。すなわち、実行中のアニメーション実行プログラムに対応した実行制御記憶エリア内のテーブル状態フラグLYBSELMが“1”から“0”に反転する。これにより、スプライト属性テーブル102Bのプログラム制御エリアが更新用エリア、スプライト属性テーブル102Aのプログラム制御エリアが描画用エリアとなる。この結果、フレーム5の垂直ブランク期間の後の表示期間では、フレーム3においてテーブルライトコマンドTに従ってスプライト属性テーブル102Aのプログラム制御エリア(フレーム3では更新用エリア、フレーム5の表示期間では描画用エリア)に書き込まれた2番目の画面に対応した属性データが描画処理に用いられる。
以下同様であり、本実施形態では、CPU201が3番目、4番目、…の各画面に対応した属性データをCPU制御エリアに書き込んでイネーブル信号ENを出力する毎に、描画用のCPU制御エリアと更新用のCPU制御エリアの切り換えが行われ、この切り換えと同期し、描画用のプログラム制御エリアと更新用のプログラム制御エリアとの切り換えが行われる。従って、CPU201により出力される3番目、4番目、…の各画面に対応した属性データが描画処理に使用されるタイミングに同期して、アニメーション実行プログラムによりプログラム制御エリアに書き込まれる3番目、4番目、…の各画面に対応した属性データが描画処理に使用される。従って、本実施形態によれば、アニメーションの表示開始以後も、CPU201によるアニメーション表示とアニメーション実行プログラムによるアニメーション表示との同期が維持される。
以上説明した第2の動作例において、アニメーション表示のフレームレートは、CPU201がイネーブル信号ENの出力を行う時間密度により決定される。図4に示す例では、CPU201が2フレームに1回の割合でイネーブル信号ENを出力しているため、アニメーションの画面も2フレームに1回の割合で切り換わる。しかし、これよりもアニメーションのフレームレートを高くする必要がある場合には、イネーブル信号ENを出力する時間密度を高くすればよく、アニメーションのフレームレートを低くする必要がある場合には、イネーブル信号ENを出力する時間密度を低くすればよい。
また、図4に示す例では、1種類のアニメーション実行プログラムしか実行されていないが、本実施形態では、CPU201によるCPU制御データの属性データの更新と並行し、複数種類のアニメーション実行プログラムを時分割制御によりアニメーション実行エンジン102に並列実行させることができる。その際、各アニメーション実行プログラムに対応したプログラム制御エリアに関して、スプライト属性テーブル102Aおよび102Bのうちいずれのプログラム制御エリアを描画用エリアとし、いずれのプログラム制御エリアを更新用エリアとするかの切り換え制御は、各アニメーション実行プログラム毎に独立して行われる。
従って、例えばフリップコマンドとして実行条件付きフリップコマンド(CSY=“1”)を使用した第1のアニメーション実行プログラムと、実行条件を伴わないフリップコマンド(CSY=“0”)を使用した第2のアニメーション実行プログラムをアニメーション実行エンジン120に並列実行させることもできる。その場合、第1のアニメーション実行プログラムにおける実行条件付きフリップコマンドは、CPU201からのイネーブル信号ENの出力を待って実行され、第2のアニメーション実行プログラムにおける実行条件を伴わないフリップコマンドは、CPU201によるイネーブル信号ENの出力を待たずに即時実行される。従って、CPU201によるアニメーション表示に同期した第1のアニメーション実行プログラムによるアニメーション表示と、CPU201によるアニメーション表示に同期しない第2のアニメーション実行プログラムによるアニメーション表示とを同時進行させることも可能である。
<他の実施形態>
以上、この発明の実施形態を説明したが、この発明には、他にも各種の実施形態が考えられる。例えば次の通りである。
(1)上記実施形態では、2個のスプライト属性テーブル102Aおよび102Bを設け、一方を更新用として属性データの更新を行いつつ、他方を描画用として描画処理に用いた。しかし、例えば描画を垂直走査周期内の特定の期間のみ実行する、といった制約を設けるのであれば、それ以外の期間を利用して、属性データの更新を行うようにすればよい。従って、このような態様においては、スプライト属性テーブルを1個にしてもよい。
(2)上記実施形態では、アニメーション実行プログラムの構成として、テーブルライトコマンドが転送対象のデータをオペランドとして含む構成を採用したが、各テーブルライトコマンドの転送対象のデータをアニメーション実行プログラム内の特定の領域にまとめて配置する構成を採用してもよい。この態様によれば、アニメーション実行プログラムが同一内容を属性データの転送を指示するテーブルライトコマンドを複数含む場合に、それらのテーブルライトコマンド間で転送対象の属性データを共用し、アニメーション実行プログラム全体のデータ量を減らすことができる。
(3)上記実施形態では、アニメーション実行エンジン120およびCPU201の両方がスプライト属性テーブル102Aおよび102Bに属性データを書き込み、LCD203にアニメーション表示を行わせるようにした。しかし、アニメーション実行エンジン120のみがスプライト属性テーブル102Aおよび102Bに属性データを書き込み、LCD203にアニメーション表示を行わせる態様も考えられる。この態様では、スプライト属性テーブル102Aおよび102BをCPU制御エリアとプログラム制御エリアに区分する必要はない。