トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

5章 V9938のコマンド

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 5.1 コマンドの種類

 V9938に備わっている以下のコマンドを使えば、描画(LINE、PSETなど)や画面の部分転送が簡単にできます。
 VDPコマンドの使用例は添付のフロッピーディスクの中に入っていますので、そのサンプルプログラムを参照して下さい。

表4.4 VDPのコマンド一覧表

コマンド名転送先転送元転送単位ニーモニックR#46(上位4ビット)
High speed move
(高速移動)
VRAMCPUバイトHMMC1111
VRAMVRAMバイトYMMM1110
VRAMVRAMバイトHMMM1101
VRAMVDPバイトHMMV1100
Logical move
(論理移動)
VRAMCPUドットLMMC1011
CPUVRAMドットLMCM1010
VRAMVRAMドットLMMM1001
VRAMVDPドットLMMV1000
Line(描画) VRAMVDPドットLINE0111
Search(探索)VRAM VDP ドットSRCH 0110
Pset(描点) VRAM VDP ドットPSET 0101
Point VDP VRAMドットPOINT0100
Invalid 0011
Invalid 0010
Invalid 0001
Stop 0000

 V9938は、レジスタR#46(Command register)にデータが書き込まれると、ステータスレジスタS#2のビット0(CE/Command Execute)を1にセットしてからコマンドの実行を開始します。必要なパラメータはコマンド実行前にレジスタR#32〜R#45にセットされていなければなりません。
 コマンドの実行が終了するとCEは0となります。コマンドの実行を途中で中断するには、STOPコマンドを実行して下さい。
 コマンドの動作は、ビットマップモード(SCREEN 5〜8あるいはGRAPHIC 4〜GRAPHIC 7)のときしか保証されません。

 5.2 ページの概念

 V9938のコマンドを使用する場合の位置パラメータは全てX,Y座標です。つまり、V9938内部のコマンドプロセッサは、VRAMの全エリアを表示モードに応じたX,Y座標でアクセスします。
 画面に表示されるのは、同一ページ内の212ラインです(R#23で指定)。表示ページの選択はR#2で行います。コマンドの実行は、表示ページの選択とは独立して実行されます。
 各表示モードにおけるVRAMとの座標との関係は図4.30のとおりです。
画像ファイルが存在しません。
図4.30 各モードのVRAMの座標系

 5.3 ロジカルオペレーション

 V9938では、LINE、PSET、LOGICAL MOVEなどのコマンドを実行するときに、指定したデータと画面上の色を演算することができます。演算(ロジカルオペレーション)は、コマンドを指定するときにR#46(Command register)の下位4ビットに同時に書き込みます。

表4.5 ロジカルオペレーションコード

演算名Operation(演算動作)R#46(下位4ビット)
IMP DC=SC 0000
AND DC=SC×DC 0001
OR DC=SC+DC 0010
EOR DC=SC×DC+SC×DC 0011
NOT DC=SC 0100
0101
0110
0111
TIMPif SC=0 then DC=DC else DC=SC 1000
TANDif SC=0 then DC=DC else DC=SC×DC 1001
TOR if SC=0 then DC=DC else DC=SC+DC 1010
TEORif SC=0 then DC=DC else DC=SC×DC+SC×DC 1011
TNOTif SC=0 then DC=DC else DC=SC 1100
1101
1110
1111
*SC=Source Color code
*DC=Destination Color code
*EOR=Exclusive OR

 5.4 各コマンドの使用法

5.4.1 HMMC(CPU→VRAM高速転送)

 CPUからVRAMの矩形領域(X、Y座標上)へ、V9938経由でデータを転送する個万です。データの転送は1バイト単位で行われるので、X座標として指定できる最大値は、表示モードによって制限を受けます。

画像ファイルが存在しません。
図4.31 HMMCコマンドの動作

1.HMMC実行手順
1) V9938のコマンドレジスタに必要なパラメータをセットします。

DX転送先基準点 X座標 (0〜511)
DY転送先基準点 Y座標 (0〜1023)
NXX方向転送ドット数(1〜512*1)
NYY方向転送ドット数(1〜1024*2)

 DX、NXともに、GRAPHIC 4と6(SCREEN 5と7)モードの時は下位1ビット、GRAPHIC 5(SCREEN 6)モードの時は下位2ビットが無視されます。
*1 512を指定するときは、NXには「0」を入れます。
*2 1024を指定するときは、NYには「0」を入れます。

DIX転送先基準点からのNXの方向 (0=右、1=左)
DIY転送先基準点からのNYの方向 (0=右、1=左)
CLR(R#44 Color register) 転送データの第1バイト

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)に11110000Bを書き込む

3) ステータスレジスタS#2のTRとCEをチェックしながら、転送データの第2バイト以降をCLRに転送します。

2.HMMC レジスタセットアップ
画像ファイルが存在しません。

3.HMMC コマンド実行
画像ファイルが存在しません。

4.HMMC 実行フローチャート
画像ファイルが存在しません。
図4.32 HMMCコマンド実行のフローチャート

5.4.2 YMMM(Y方向のVRAM問高速転送)

 VRAM上のDX、SY、NY、DIX、DIYと画面の右端(または左端)で指定される領域をY軸方向(DYで指定)に転送するコマンドです。
画像ファイルが存在しません。
図4.33 YMMMコマンドの動作

1.YMMM実行手順
1) V9938のコマンドレジスタに必要なパラメータをセットします。

DY転送先基準点 Y座標 (0〜1023)
DX転送元基準点 X座標 (0〜511)
SY転送元基準点 Y座標 (0〜1023)
NYY方向転送ドット数(1〜1024*)

 DXは、GRAPHIC 4と6(SCREEN 5と7)モードの時は下位1ビット、GRAPHIC 5(SCREEN 6)モードの時は下位2ビットが無視されます。

* 1024を指定するときは、NYには「0」を入れます。

DIX転送元基準点から左右どちらの画面端までを転送するのかを設定(0=右、1=左)
DIY転送元基準点から見たNYの方向 (0=下、1=上)

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)に11100000Bを書き込む

3) 上記の操作でV9938はYMMMコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。

2.HMMM レジスタセットアップ
画像ファイルが存在しません。

3.HMMC コマンド実行
画像ファイルが存在しません。

5.4.3 HMMM(VRAM問高速転送)

 VRAMからVRAMへ矩形の領域を転送するコマンドです。データの転送は1バイト単位で行われるので、X座標として設定できる最大値は表示モードによって制限を受けます。

画像ファイルが存在しません。
図4.33 HMMMコマンドの動作

1.HMMM実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

SX転送元基準点 X座標 (0〜511)
SY転送元基準点 Y座標 (0〜1023)
NXX方向転送ドット数(1〜512*1)
NYY方向転送ドット数(1〜1024*2)
DIX基準からのNXの方向 (0=右、1=左)
DIY基準からのNYの方向 (0=下、1=上)
DX転送先基準点 X座標 (0〜511)
DY転送先基準点 Y座標 (0〜1023)

 SX、DX、NXともに、GRAPHIC 4と6(SCREEN 5と7)モードの時は下位1ビット、GRAPHIC 5(SCREEN 6)モードの時は下位2ビットが無視されます。

*1 512を指定するときは、NXには「0」を入れます。
*2 1024を指定するときは、NYには「0」を入れます。

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)に11010000Bを書き込む

3) 以上の操作でV9938はHMMMコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。

2.HMMM レジスタセットアップ
画像ファイルが存在しません。

3.HMMM コマンド実行
画像ファイルが存在しません。

5.4.4 HMMV(長方形の高速塗りつぶし)

 VRAMの矩形の領域をカラーコードで塗りつぶすコマンドです。データの転送は1バイト単位で行われるので、X座標として指定できる最大値は表示モードによって制限をうけます。

画像ファイルが存在しません。
図4.33 HMMVコマンドの動作

1.HMMV実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

NXX方向転送ドット数(1〜512*1)
NYY方向転送ドット数(1〜1024*2)
DIX転送先基準点からのNXの方向 (0=右、1=左)
DIY転送先基準点からのNYの方向 (0=下、1=上)
DX転送先基準点 X座標 (0〜511)
DY転送先基準点 Y座標 (0〜1023)

 DX、NXともに、GRAPHIC 4と6(SCREEN 5と7)モードの時は下位1ビット、GRAPHIC 5(SCREEN 6)モードの時は下位2ビットが無視されます。

*1 512を指定するときは、NXには「0」を入れます。
*2 1024を指定するときは、NYには「0」を入れます。

DIX転送先基準点からのNXの方向 (0=右、1=左)
DIY転送先基準点からのNYの方向 (0=右、1=左)
CLR(R#44 Color register) 塗りつぶしデータ

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)に11000000Bを書き込む

3) 以上の操作でV9938はHMMVコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。

2.HMMV レジスタセットアップ
画像ファイルが存在しません。

3.HMMV コマンド実行
画像ファイルが存在しません。

5.4.5 LMMC(CPU→VRAM論理転送)

 CPUからVRAMの矩形領域へ、V9938経由でデータを転送するコマンドです。データの転送は1ドット単位で行われ、転送先のデータと演算することができます。

画像ファイルが存在しません。
図4.36 LMMCコマンドの動作

1.LMMC実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

DX転送先基準点 X座標 (0〜511)
DY転送先基準点 Y座標 (0〜1023)
NXX方向転送ドット数(1〜512*1)
NYY方向転送ドット数(1〜1024*2)
DIX転送先基準点からのNXの方向 (0=右、1=左)
DIY転送先基準点からのNYの方向 (0=下、1=上)
CLR(R#44 Color register) 転送データの第1バイト

*1 512を指定するときは、NXには「0」を入れます。
*2 1024を指定するときは、NYには「0」を入れます。

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)の上位4ビットに1011Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む

3) ステータスレジスタS#2のTRとCEをチェックしながら、転送データの第2バイト以降をCLRレジスタに転送します。

2.LMMC レジスタセットアップ
画像ファイルが存在しません。

3.LMMC コマンド実行
画像ファイルが存在しません。

4.LMMC 実行フローチャート
画像ファイルが存在しません。
図4.37 LMMC コマンド実行のフローチャート

5.4.6 LMCM(VRAM→CPU論理転送)

 VRAMの矩形領域(X、Y座標上)のデータをCPUに転送するコマンドです。データの転送は1ドット単位で行われます。

画像ファイルが存在しません。
図4.38 LMCMコマンドの動作

1.LMCM実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

SX転送元基準点 X座標 (0〜511)
SY転送元基準点 Y座標 (0〜1023)
NXX方向転送ドット数(1〜512*1)
NYY方向転送ドット数(1〜1024*2)
DIX転送先基準点からのNXの方向 (0=右、1=左)
DIY転送先基準点からのNYの方向 (0=下、1=上)

*1 512を指定するときは、NXには「0」を入れます。
*2 1024を指定するときは、NYには「0」を入れます。

2) 上記のデータをセットした後コマンドを実行します。

CMR(R#46 Command register)に10110000Bを書き込む。

3) ステータスレジスタS#2のTRとCEをチェックしながら、ステータスレジスタS#7を読み出します。

2.LMCM レジスタセットアップ
画像ファイルが存在しません。

3.LMCM コマンド実行
画像ファイルが存在しません。

4.LMCM 実行フローチャート
画像ファイルが存在しません。
図4.39 LMCM コマンド実行のフローチャート

注意
  1. 「EXECUTE COMMAND」の前にTRをリセットする必要があるので、「V9938 SET UP」の中でステータスレジスタS#7をリードして下さい。
  2. 最後のデータがステータスレジスタS#7にセットされてTR=1となっていても、V9938内部ではコマンドは終了しCE=0となります。

5.4.7 LMMM(VRAM→VRAM論理転送)

 VRAMからVRAMへ矩形の領域を転送するコマンドです。データの転送は1ドット単位で行われ、転送先のデータと論理演算することができます。

画像ファイルが存在しません。
図4.40 LMMMコマンドの動作

1.LMMM実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

SX転送元基準点 X座標 (0〜511)
SY転送元基準点 Y座標 (0〜1023)
NXX方向転送ドット数(1〜512*1)
NYY方向転送ドット数(1〜1024*2)
DIX基準からのNXの方向 (0=右、1=左)
DIY基準からのNYの方向 (0=下、1=上)
DX転送先基準点 X座標 (0〜511)
DY転送先基準点 Y座標 (0〜1023)

*1 512を指定するときは、NXには「0」を入れます。
*2 1024を指定するときは、NYには「0」を入れます。

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)の上位4ビットに1001Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む

3) 以上の操作でV9938はLMMMコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。

2.LMMM レジスタセットアップ
画像ファイルが存在しません。

3.LMMM コマンド実行
画像ファイルが存在しません。

5.4.8 LMMV(VRAM論理塗りつぶし)

 VRAMの矩形の領域をカラーコードで塗りつぶすコマンドです。データの転送は1バイト単位で行われ、転送先のデータと論理演算をすることができます。

画像ファイルが存在しません。
図4.41 LMMVコマンドの動作

1.LMMV実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

NXX方向転送ドット数(1〜512*1)
NYY方向転送ドット数(1〜1024*2)
DIX転送先基準点からのNXの方向 (0=右、1=左)
DIY転送先基準点からのNYの方向 (0=下、1=上)
DX転送先基準点 X座標 (0〜511)
DY転送先基準点 Y座標 (0〜1023)
CLR(R#44 Color register) 塗りつぶしデータ

*1 512を指定するときは、NXには「0」を入れます。
*2 1024を指定するときは、NYには「0」を入れます。

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)の上位4ビットに1000Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む

3) 以上の操作でV9938はLMMVコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。

2.LMMV レジスタセットアップ
画像ファイルが存在しません。

3.LMMV コマンド実行
画像ファイルが存在しません。

5.4.9 LINE(直線の描画)

 直線を描画するコマンドです。基準点と長辺・短辺からなる長方形の対角線を描画します。データの転送は1ドット単位で行われ、転送先のデータと論理演算することができます。

画像ファイルが存在しません。
図4.42 LINEコマンドの動作

1.LINE実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

Maj長辺ドット数(0〜1023)
Min短辺ドット数(0〜511)
MAJ0=長辺はX軸と平行、1=長辺はY軸と平行/または長辺=短辺
DIX基準点からの終点の方向 (0=右、1=左)
DIY基準点からの終点の方向 (0=下、1=上)
DX基準点 X座標 (0〜511)
DY基準点 Y座標 (0〜1023)

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)の上位4ビットに0111Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む。

3) 以上の操作でV9938はLINEコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。

2.LINE レジスタセットアップ
画像ファイルが存在しません。

3.LINE コマンド実行
画像ファイルが存在しません。

5.4.10 SRCH(色コードのサーチ)

 基準点から右(左)に境界色(または非境界色)をサーチするコマンドです。
 
画像ファイルが存在しません。
図4.43 SRCHコマンドの動作

1.SRCH実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

DIX基準点からの終点の方向 (0=右、1=左)
EQ 0=境界色を発見したときに実行を終了、1=境界色以外を発見したときに実行を終了。
SXサーチ基準点 X座標 (0〜511)
SYサーチ基準点 Y座標 (0〜1023)
CLR(R#44 Color register) 境界色

2) 上記のデータをセットした後コマンドを実行します。

CMR(R#46 Command register)に01100000Bを書き込む。

3) 以上の操作でV9938はSRCHコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。また、画面の端に達するまでに境界色を発見した場合にBDビットが「1」になります。

2.SRCH レジスタセットアップ
画像ファイルが存在しません。

3.SRCH コマンド実行
画像ファイルが存在しません。

4.SRCH 実行フローチャート
画像ファイルが存在しません。
図4.44 SRCH コマンド実行のフローチャート

5.4.11 PSET(点の描画)

 点を描画するコマンドです。すでに表示されている点のデータと論理演算することができます。

画像ファイルが存在しません。
図4.45 PSETコマンドの動作

1.PSET実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

DX転送先基準点 X座標 (0〜511)
DY転送先基準点 Y座標 (0〜1023)

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)の上位4ビットに0101Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む

3) 以上の操作でV9938はPSETコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。

2.PSET レジスタセットアップ
画像ファイルが存在しません。

3.PSET コマンド実行
画像ファイルが存在しません。

5.4.12 POINT(色コードの読み出し)

 VRAM上の基準点の色コードを読み出すコマンドです。

画像ファイルが存在しません。
図4.46 POINTコマンドの動作

1.POINT実行手順

1) V9938のコマンドレジスタに必要なパラメータをセットします。

SX基準点 X座標 (0〜511)
SY基準点 Y座標 (0〜1023)

2) 上記のデータをセットした後、コマンドを実行します。

CMR(R#46 Command register)に11010000Bを書き込む

3) 以上の操作でV9938はPOINTコマンドを実行します。コマンドの実行中はステータスレジスタS#2のCEビットが「1」になり、終了すると「0」になります。また、読み出された色コードがステータスレジスタS#7にセットされます。

2.POINT レジスタセットアップ
画像ファイルが存在しません。

3.POINT コマンド実行
画像ファイルが存在しません。

 5.5 コマンドの高速化

 次の操作をすると、コマンドの実行速度が上がります。

1.スプライト表示を禁止
 レジスタR#8のビット1(SPD)を「1」にすると、スプライトの処理に使っていた時間をコマンドの実行に使用できるので、コマンドの処理速度が上がります。

2.画面表示を禁止
 レジスタR#1のビット6(BL)を「0」にすると、表示の処理に使っていた時間をコマンドの実行に使用できるので、コマンドの処理速度が上がります。

 5.6 コマンド終了時のレジスタの状態

 コマンド終了時のレジスタの状態は表4.6のようになります。

表4.6 コマンド終了時のレジスタの状態

コマンド名SXSYDXDYNXNYCLRCMR HCLR LARG
HMMC* # 0
YMMM* * # 0
HMMM* * # 0
HMMV* # 0
LMMC* # 0
LMCM* # * 0
LMMM* * # 0
LMMV* # 0
LINE* 0
SRCH0
PSET0
PINT* 0
 − 変化なし
 *  コマンド終了時の座標(SY*、DY*)とカラーコード
 #  画面端を検出したときはそのときのカウント数(NYB)となる

 SY*、DY*、およびNYBの値はY方向実行ドット数をNとすると、次のように計算されます。

   SY*=SY+N、DY*=DY+N (DIY=0)
   SY*=SY-N、DY*=DY-N (DIY=1)
   NYB=NY-N

注意

LINEでMAJビットが0のときは、N=N-1となります。