MSX Datapack wiki化計画

5章 V9938のコマンドの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{include unfinished_page}}

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[4章 V9938の画面モード]]                                                          ,{BSIZE:0|RIGHT}[[6章 スプライト]]                                                                →

!!5.1 コマンドの種類

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

'''表4.4 VDPのコマンド一覧表'''
,{t},{BSIZE:2 0}
,{c},{BSIZE:1 1 1 0|SIZE:150},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 1 1 0|SIZE:120},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0}
,コマンド名,転送先,転送元,転送単位,ニーモニック,R#46(上位4ビット){COLS:4},,,
,{c},{BSIZE:0},{BSIZE:0 1},{BSIZE:0 1},{BSIZE:0 1},{BSIZE:0 1},{BSIZE:0|SIZE:20},{BSIZE:0|SIZE:20},{BSIZE:0|SIZE:20},{BSIZE:0|SIZE:120}
,High speed move{{br}}(高速移動){ROWS 4},VRAM,CPU,バイト,HMMC,1,1,1,1
,{c BSE},{BSIZE:1 1 1 0}
,{c BSC},{BSIZE:1 1 0 0}
,{c BS0},{BSIZE:0}
,{c},{BSE|SIZE:150},{BSE|SIZE:80},{BSE|SIZE:80},{BSE|SIZE:80},{BSE|SIZE:120},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0},{BSIZE:1 0}
,コマンド名,転送元,転送先,転送単位,ニーモニック,R#46(上位4ビット){COLS:4},,,
,{c},{BS0},{BSIZE:0 1},{BSIZE:0 1},{BSIZE:0 1},{BSIZE:0 1},{BS0|SIZE:20},{BS0|SIZE:20},{BS0|SIZE:20},{BS0|SIZE:120}
,High speed move{{br}}(高速移動){ROWS 4},CPU,VRAM,バイト,HMMC,1,1,1,1
,,VRAM,VRAM,バイト,YMMM,1,1,1,0
,,VRAM,VRAM,バイト,HMMM,1,1,0,1
,,VRAM,VDP,バイト,HMMV,1,1,0,0
,{c},{BSIZE:1 1 1 0},{BSIZE:1 1 0 0},{BSIZE:1 1 0 0},{BSIZE:1 1 0 0},{BSIZE:1 1 0 0},{BSIZE:1 0 0 0},{BSIZE:1 0 0 0|},{BSIZE:1 0 0 0},{BSIZE:1 0 0 0}
,Logical move{{br}}(論理移動){ROWS 4},VRAM,CPU,ドット,LMMC,1,0,1,1
,,VDP,VRAM,バイト,HMMV,1,1,0,0
,{c},{BSE},{BSC},{BSC},{BSC},{BSC},{BSIZE:1 0 0 0},{BSIZE:1 0 0 0},{BSIZE:1 0 0 0},{BSIZE:1 0 0 0}
,Logical move{{br}}(論理移動){ROWS 4},CPU,VRAM,ドット,LMMC,1,0,1,1
,{c},{BSIZE:0 1 1 0},{BSIZE:0 1 0 0},{BSIZE:0 1 0 0},{BSIZE:0 1 0 0},{BSIZE:0 1 0 0},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0}
,,CPU,VRAM,ドット,LMCM,1,0,1,0
,,VRAM,CPU,ドット,LMCM,1,0,1,0
,,VRAM,VRAM,ドット,LMMM,1,0,0,1
,,VRAM,VDP,ドット,LMMV,1,0,0,0
,{c},{BSIZE:0 1 1 0|SIZE:80},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 0|SIZE:20},{BSIZE:1 0|SIZE:20},{BSIZE:1 0|SIZE:20},{BSIZE:1 0}
,Line(描画)  ,VRAM,VDP,ドット,LINE,0,1,1,1
,Search(探索),VRAM ,VDP ,ドット,SRCH ,0,1,1,0
,Pset(描点)  ,VRAM ,VDP ,ドット,PSET ,0,1,0,1
,Point       ,VDP  ,VRAM,ドット,POINT,0,1,0,0
,,VDP,VRAM,ドット,LMMV,1,0,0,0
,{c},{BSIZE:0 1 1 0|SIZE:80},{BSE|SIZE:80},{BSE|SIZE:80},{BSE|SIZE:80},{BSE|SIZE:80},{BSIZE:1 0|SIZE:20},{BSIZE:1 0|SIZE:20},{BSIZE:1 0|SIZE:20},{BSIZE:1 0}
,Line(描線)  ,VDP ,VRAM ,ドット,LINE,0,1,1,1
,Search(探索),VDP ,VRAM ,ドット,SRCH ,0,1,1,0
,Pset(描点)  ,VDP ,VRAM ,ドット,PSET ,0,1,0,1
,Point       ,VRAM,VDP  ,ドット,POINT,0,1,0,0
,Invalid     ,−   ,−  ,−    ,−   ,0,0,1,1
,Invalid     ,−   ,−  ,−    ,−   ,0,0,1,0
,Invalid     ,−   ,−  ,−    ,−   ,0,0,0,1
,Stop        ,−   ,−  ,−    ,−   ,0,0,0,0

 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座標でアクセスします。
 V9938のコマンドを使用する場合の位置パラメータはすべてX,Y座標です。つまり、V9938内部のコマンドプロセッサは、VRAMの全エリアを表示モードに応じたX,Y座標でアクセスします。
 画面に表示されるのは、同一ページ内の212ラインです(R#23で指定)。表示ページの選択はR#2で行います。コマンドの実行は、表示ページの選択とは独立して実行されます。
 各表示モードにおけるVRAMとの座標との関係は図4.30のとおりです。
{{svg 図4.30.svg}}
'''図4.30 各モードのVRAMの座標系'''


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

'''表4.5 ロジカルオペレーションコード'''
,{t},{BSIZE:2 0}
,{c},{BSIZE:1 1 1 0|SIZE:80},{BSIZE:1 1 1 1|SIZE:420},{BSIZE:1 0|SIZE:20},{BSIZE:1 0|SIZE:20},{BSIZE:1 0|SIZE:20},{BSIZE:1 0}
,演算名,Operation(演算動作),R#46(下位4ビット){COLS:4},,,
,{c},{BSIZE:0 0 0 0},{BSIZE:0 1},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0|SIZE:150}
,IMP ,DC=SC                                        ,0,0,0,0
,AND ,DC=SC×DC                                    ,0,0,0,1
,OR  ,DC=SC+DC                                    ,0,0,1,0
,EOR ,DC=SC×DC+SC×DC                            ,0,0,1,1
,NOT ,DC=SC                                        ,0,1,0,0
,−  ,                                              ,0,1,0,1
,−  ,                                              ,0,1,1,0
,−  ,                                              ,0,1,1,1
,TIMP,if SC=0 then DC=DC else DC=SC              ,1,0,0,0
,TAND,if SC=0 then DC=DC else DC=SC×DC          ,1,0,0,1
,TOR ,if SC=0 then DC=DC else DC=SC+DC          ,1,0,1,0
,TEOR,if SC=0 then DC=DC else DC=SC×DC+SC×DC  ,1,0,1,1
,TNOT,if SC=0 then DC=DC else DC=SC              ,1,1,0,0
,−  ,                                              ,1,1,0,1
,−  ,                                              ,1,1,1,0
,−  ,                                              ,1,1,1,1
 *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座標として指定できる最大値は、表示モードによって制限を受けます。
 CPUからVRAMの矩形領域(X、Y座標上)へ、V9938経由でデータを転送するコマンドです。データの転送は1バイト単位で行われるので、X座標として指定できる最大値は、表示モードによって制限を受けます。

{{svg 図4.31.svg}}
'''図4.31 HMMCコマンドの動作'''

'''1.HMMC実行手順'''
1) V9938のコマンドレジスタに必要なパラメータをセットします。
,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,DX,転送先基準点 X座標 (0〜511)
,DY,転送先基準点 Y座標 (0〜1023)
,NX,X方向転送ドット数(1〜512{{sup *1}})
,NY,Y方向転送ドット数(1〜1024{{sup *2}})

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,DIX,転送先基準点からのNXの方向 (0=右、1=左)
,DIY,転送先基準点からのNYの方向 (0=右、1=左)
,CLR,(R#44 Color register) 転送データの第1バイト

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)に11110000Bを書き込む

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


'''2.HMMC レジスタセットアップ'''
{{svg 図P528.svg}}

'''3.HMMC コマンド実行'''
{{svg 図P529.svg}}

'''4.HMMC 実行フローチャート'''
{{svg 図4.32.svg}}
'''図4.32 HMMCコマンド実行のフローチャート'''


!5.4.2 YMMM(Y方向のVRAM問高速転送)
 VRAM上のDX、SY、NY、DIX、DIYと画面の右端(または左端)で指定される領域をY軸方向(DYで指定)に転送するコマンドです。
{{svg 図4.33.svg}}
'''図4.33 YMMMコマンドの動作'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,DY,転送先基準点 Y座標 (0〜1023)
,DX,転送元基準点 X座標 (0〜511)
,SY,転送元基準点 Y座標 (0〜1023)
,NY,Y方向転送ドット数(1〜1024{{sup *}})

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

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,DIX,転送元基準点から左右どちらの画面端までを転送するのかを設定(0=右、1=左)
,DIY,転送元基準点から見たNYの方向 (0=下、1=上)

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)に11100000Bを書き込む

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

'''2.YMMM レジスタセットアップ'''
{{svg 図P531-1.svg}}

'''3.YMMM コマンド実行'''
{{svg 図P531-2.svg}}

!5.4.3 HMMM(VRAM問高速転送)

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

{{svg 図4.34.svg}}
'''図4.33 HMMMコマンドの動作'''
'''図4.34 HMMMコマンドの動作'''

'''1.HMMM実行手順'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,SX,転送元基準点 X座標 (0〜511)
,SY,転送元基準点 Y座標 (0〜1023)
,NX,X方向転送ドット数(1〜512{{sup *1}})
,NY,Y方向転送ドット数(1〜1024{{sup *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ビットが無視されます。
 SX、DX、NXともに、GRAPHIC 4と6(SCREEN 5と7)モードのときは下位1ビット、GRAPHIC 5(SCREEN 6)モードのときは下位2ビットが無視されます。

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

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)に11010000Bを書き込む

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

'''2.HMMM レジスタセットアップ'''
{{svg 図P533-1.svg}}

'''3.HMMM コマンド実行'''
{{svg 図P533-2.svg}}

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

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

{{svg 図4.34.svg}}
'''図4.33 HMMVコマンドの動作'''
{{svg 図4.35.svg}}
'''図4.35 HMMVコマンドの動作'''

'''1.HMMV実行手順'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,NX,X方向転送ドット数(1〜512{{sup *1}})
,NY,Y方向転送ドット数(1〜1024{{sup *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ビットが無視されます。
 DX、NXともに、GRAPHIC 4と6(SCREEN 5と7)モードのときは下位1ビット、GRAPHIC 5(SCREEN 6)モードのときは下位2ビットが無視されます。

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,DIX,転送先基準点からのNXの方向 (0=右、1=左)
,DIY,転送先基準点からのNYの方向 (0=右、1=左)
,CLR,(R#44 Color register) 塗りつぶしデータ

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)に11000000Bを書き込む

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

'''2.HMMV レジスタセットアップ'''
{{svg 図P535-1.svg}}

'''3.HMMV コマンド実行'''
{{svg 図P535-2.svg}}

!5.4.5 LMMC(CPU→VRAM論理転送)

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

{{svg 図4.36.svg}}
'''図4.36 LMMCコマンドの動作'''

'''1.LMMC実行手順'''

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

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

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

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)の上位4ビットに1011Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む
,CMR,(R#46 Command register)の上位4ビットに1011Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む。

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

'''2.LMMC レジスタセットアップ'''
{{svg 図P537-1.svg}}

'''3.LMMC コマンド実行'''
{{svg 図P537-2.svg}}

'''4.LMMC 実行フローチャート'''
{{svg 図4.37.svg}}
'''図4.37 LMMC コマンド実行のフローチャート'''

!5.4.6 LMCM(VRAM→CPU論理転送)

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

{{svg 図4.38.svg}}
'''図4.38 LMCMコマンドの動作'''

'''1.LMCM実行手順'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,SX,転送元基準点 X座標 (0〜511)
,SY,転送元基準点 Y座標 (0〜1023)
,NX,X方向転送ドット数(1〜512{{sup *1}})
,NY,Y方向転送ドット数(1〜1024{{sup *2}})
,DIX,転送先基準点からのNXの方向 (0=右、1=左)
,DIY,転送先基準点からのNYの方向 (0=下、1=上)

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

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)に10110000Bを書き込む。
,CMR,(R#46 Command register)に10100000Bを書き込む。

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

'''2.LMCM レジスタセットアップ'''
{{svg 図P540-1.svg}}

'''3.LMCM コマンド実行'''
{{svg 図P540-2.svg}}

'''4.LMCM 実行フローチャート'''
{{svg 図4.39.svg}}
'''図4.39 LMCM コマンド実行のフローチャート'''

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

!5.4.7 LMMM(VRAM→VRAM論理転送)

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

{{svg 図4.40.svg}}
'''図4.40 LMMMコマンドの動作'''

'''1.LMMM実行手順'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,SX,転送元基準点 X座標 (0〜511)
,SY,転送元基準点 Y座標 (0〜1023)
,NX,X方向転送ドット数(1〜512{{sup *1}})
,NY,Y方向転送ドット数(1〜1024{{sup *2}})
,DIX,基準からのNXの方向 (0=右、1=左)
,DIY,基準からのNYの方向 (0=下、1=上)
,DIX,基準点からのNXの方向 (0=右、1=左)
,DIY,基準点からのNYの方向 (0=下、1=上)
,DX,転送先基準点 X座標 (0〜511)
,DY,転送先基準点 Y座標 (0〜1023)

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

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)の上位4ビットに1001Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む
,CMR,(R#46 Command register)の上位4ビットに1001Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む。

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

'''2.LMMM レジスタセットアップ'''
{{svg 図P543-1.svg}}

'''3.LMMM コマンド実行'''
{{svg 図P543-2.svg}}


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

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

{{svg 図4.41.svg}}
'''図4.41 LMMVコマンドの動作'''

'''1.LMMV実行手順'''

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

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

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

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)の上位4ビットに1000Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む
,CMR,(R#46 Command register)の上位4ビットに1000Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む。

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

'''2.LMMV レジスタセットアップ'''
{{svg 図P545-1.svg}}

'''3.LMMV コマンド実行'''
{{svg 図P545-2.svg}}

!5.4.9 LINE(直線の描画)

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

{{svg 図4.42.svg}}
'''図4.42 LINEコマンドの動作'''

'''1.LINE実行手順'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,Maj,長辺ドット数(0〜1023)
,Min,短辺ドット数(0〜511)
,MAJ,0=長辺はX軸と平行、1=長辺はY軸と平行/または長辺=短辺
,DIX,基準点からの終点の方向 (0=右、1=左)
,DIY,基準点からの終点の方向 (0=下、1=上)
,DX,基準点 X座標 (0〜511)
,DY,基準点 Y座標 (0〜1023)

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)の上位4ビットに0111Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む。

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

'''2.LINE レジスタセットアップ'''
{{svg 図P547-1.svg}}

'''3.LINE コマンド実行'''
{{svg 図P547-2.svg}}

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

 基準点から右(左)に境界色(または非境界色)をサーチするコマンドです。
 
{{svg 図4.43.svg}}
'''図4.43 SRCHコマンドの動作'''

'''1.SRCH実行手順'''

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

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

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)に01100000Bを書き込む。

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

'''2.SRCH レジスタセットアップ'''
{{svg 図P549-1.svg}}

'''3.SRCH コマンド実行'''
{{svg 図P549-2.svg}}

'''4.SRCH 実行フローチャート'''
{{svg 図4.44.svg}}
'''図4.44 SRCH コマンド実行のフローチャート'''

!5.4.11 PSET(点の描画)

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

{{svg 図4.45.svg}}
'''図4.45 PSETコマンドの動作'''

'''1.PSET実行手順'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,DX,転送先基準点 X座標 (0〜511)
,DY,転送先基準点 Y座標 (0〜1023)
,DX,基準点 X座標 (0〜511)
,DY,基準点 Y座標 (0〜1023)

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)の上位4ビットに0101Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む
,CMR,(R#46 Command register)の上位4ビットに0101Bを、下位4ビットにロジカルオペレーションコード(表4.5参照)を書き込む。

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

'''2.PSET レジスタセットアップ'''
{{svg 図P552-1.svg}}

'''3.PSET コマンド実行'''
{{svg 図P552-2.svg}}

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

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

{{svg 図4.46.svg}}
'''図4.46 POINTコマンドの動作'''

'''1.POINT実行手順'''

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,SX,基準点 X座標 (0〜511)
,SY,基準点 Y座標 (0〜1023)

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

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,CMR,(R#46 Command register)に11010000Bを書き込む
,CMR,(R#46 Command register)に01000000Bを書き込む

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

'''2.POINT レジスタセットアップ'''
{{svg 図P554-1.svg}}

'''3.POINT コマンド実行'''
{{svg 図P554-2.svg}}

!!5.5 コマンドの高速化

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


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

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

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

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

'''表4.6 コマンド終了時のレジスタの状態'''
,{t},{CENTER}
,{c},{H},{H},{H},{H},{H},{H},{H},{H},{H},{H},{H},{H}
,{t},{BSIZE:2 0}
,{c BS2},{BSIZE:0 0 1 0}
,{c BS0},{BSIZE:0}
,{c C},{CENTER}
,{c},{BS2|C|SIZE:100},{BS2|C|SIZE:40},{BS2|C|SIZE:40},{BS2|C|SIZE:40},{BS2|C|SIZE:40},{BS2|C|SIZE:40},{BS2|C|SIZE:40},{BS2|C|SIZE:40},{BS2|C|SIZE:60},{BS2|C|SIZE:60},{BS2|C|SIZE:40}
,コマンド名,SX,SY,DX,DY,NX,NY,CLR,CMR H,CLR L,ARG
,{c},{C},{S},{S},{S},{S},{S},{S},{S},{S},{S},{S},{S}
,{c},{BS0|C},{BS0|C},{BS0|C},{BS0|C},{BS0|C},{BS0|C},{BS0|C},{BS0|C},{BS0|C},{BS0|C},{BS0|C}
,HMMC,−,−,−,* ,−,# ,−,0,−,−
,YMMM,−,* ,−,* ,−,# ,−,0,−,−
,HMMM,−,* ,−,* ,−,# ,−,0,−,−
,HMMV,−,−,−,* ,−,# ,−,0,−,−
,LMMC,−,−,−,* ,−,# ,−,0,−,−
,LMCM,−,* ,−,−,−,# ,* ,0,−,−
,LMMM,−,* ,−,* ,−,# ,−,0,−,−
,LMMV,−,−,−,* ,−,# ,−,0,−,−
,LINE,−,−,−,* ,−,−,−,0,−,−
,SRCH,−,−,−,−,−,−,−,0,−,−
,PSET,−,−,−,−,−,−,−,0,−,−
,PINT,−,−,−,−,−,−,* ,0,−,−
,POINT,−,−,−,−,−,−,* ,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'''

,注意{SIZE:100|CENTER}
LINEでMAJビットが0のときは、N=N-1となります。

,{t},{BSIZE:0}
,注意{BSIZE:2|SIZE:100|CENTER}
LINEでMAJ=0のときは、N=N-1となります。

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[4章 V9938の画面モード]]                                                          ,{BSIZE:0|RIGHT}[[6章 スプライト]]                                                                →