VideoController.java
     1: //========================================================================================
     2: //  VideoController.java
     3: //    en:Video controller
     4: //    ja:ビデオコントローラ
     5: //  Copyright (C) 2003-2022 Makoto Kamada
     6: //
     7: //  This file is part of the XEiJ (X68000 Emulator in Java).
     8: //  You can use, modify and redistribute the XEiJ if the conditions are met.
     9: //  Read the XEiJ License for more details.
    10: //  https://stdkmd.net/xeij/
    11: //========================================================================================
    12: 
    13: //----------------------------------------------------------------------------------------
    14: //
    15: //  ビデオコントローラのレジスタ
    16: //    アドレスのbit7-1はデコードされない
    17: //    0x00e82400  REG1
    18: //    0x00e82402  REG1
    19: //         :       :
    20: //    0x00e824fe  REG1
    21: //    0x00e82500  REG2
    22: //    0x00e82502  REG2
    23: //         :       :
    24: //    0x00e825fe  REG2
    25: //    0x00e82600  REG3
    26: //    0x00e82602  REG3
    27: //         :       :
    28: //    0x00e826fe  REG3
    29: //
    30: //  0x00e82400 REG1
    31: //      bit2-0  GrMM  メモリモード
    32: //                      0  512ドット16色
    33: //                      1  512ドット256色
    34: //                      3  512ドット65536色
    35: //                      4  1024ドット16色
    36: //                      5  1024ドット256色(XEiJ拡張)
    37: //                      7  1024ドット65536色(XEiJ拡張)
    38: //
    39: //  0x00e82500 REG2
    40: //    bit13-12  SpPr  スプライト画面の優先順位。0=高,1=中,2=低
    41: //    bit11-10  TxPr  テキスト画面の優先順位。0=高,1=中,2=低
    42: //      bit9-8  GrPr  グラフィック画面の優先順位。0=手前,1=間,2=奥,3=単独
    43: //      bit7-6  G4th  (512ドット16色のとき)4番目のパレットの4bitページ番号
    44: //                    (512ドット256色のとき)2番目のパレットのbit7-4の4bitページ番号
    45: //                    (512ドット65536色のとき)1番目のパレットのbit15-12の4bitページ番号
    46: //                    (1024ドットのとき)右下512×512の4bitページ番号
    47: //      bit5-4  G3rd  (512ドット16色のとき)3番目のパレットの4bitページ番号
    48: //                    (512ドット256色のとき)2番目のパレットのbit3-0の4bitページ番号
    49: //                    (512ドット65536色のとき)1番目のパレットのbit11-8の4bitページ番号
    50: //                    (1024ドットのとき)左下512×512の4bitページ番号
    51: //      bit3-2  G2nd  (512ドット16色のとき)2番目のパレットの4bitページ番号
    52: //                    (512ドット256色のとき)1番目のパレットのbit7-4の4bitページ番号
    53: //                    (512ドット65536色のとき)1番目のパレットのbit7-4の4bitページ番号
    54: //                    (1024ドットのとき)右上512×512の4bitページ番号
    55: //      bit1-0  G1st  (512ドット16色のとき)1番目のパレットの4bitページ番号
    56: //                    (512ドット256色のとき)1番目のパレットのbit3-0の4bitページ番号
    57: //                    (512ドット65536色のとき)1番目のパレットのbit3-0の4bitページ番号
    58: //                    (1024ドットのとき)左上512×512の4bitページ番号
    59: //
    60: //  0x00e82600 REG3
    61: //       bit15  Ys    (非対応)1=スーパーインポーズのときコンピュータ画面のみ表示
    62: //       bit14  AHOn  1=グラフィックカラーとテキストパレット0のカラーを混ぜる(A)
    63: //       bit13  VHT   (非対応)1=1番目とTVを半透明
    64: //       bit12  ExOn  0=拡張なし,1=拡張あり(X)
    65: //       bit11  Half  拡張モードの選択。0=特殊プライオリティ(W),1=半透明(H)
    66: //       bit10  PLSB  領域指定。0=カラー(パレットテーブルの内容)が奇数(C),1=パレット(GVRAMの内容)が奇数(P)
    67: //        bit9  GrGr  (半透明のとき)1=1番目と2番目を半透明(G)
    68: //        bit8  GrST  (半透明のとき)1=1番目と奥のスプライト・テキスト画面を半透明(T)
    69: //        bit7  BCOn  (非対応)1=ボーダーカラーを表示
    70: //        bit6  SpOn  1=スプライト画面を表示(S)
    71: //        bit5  TxOn  1=テキスト画面を表示(T)
    72: //        bit4  GxOn  (1024ドット16色のとき)1=1番目を表示
    73: //                    (1024ドット256色のとき)1=1番目を表示
    74: //                    (1024ドット65536色のとき)1=1番目を表示
    75: //        bit3  G4On  (512ドット16色のとき)1=4番目を表示
    76: //                    (512ドット256色のとき)1=2番目を表示
    77: //                    (512ドット65536色のとき)1=1番目を表示
    78: //        bit2  G3On  (512ドット16色のとき)1=3番目を表示
    79: //                    (512ドット256色のとき)1=2番目を表示
    80: //                    (512ドット65536色のとき)1=1番目を表示
    81: //        bit1  G2On  (512ドット16色のとき)1=2番目を表示
    82: //                    (512ドット256色のとき)1=1番目を表示
    83: //                    (512ドット65536色のとき)1=1番目を表示
    84: //        bit0  G1On  (512ドット16色のとき)1=1番目を表示
    85: //                    (512ドット256色のとき)1=1番目を表示
    86: //                    (512ドット65536色のとき)1=1番目を表示
    87: //
    88: //  スプライト画面とテキスト画面の優先順位
    89: //    スプライト画面とテキスト画面は優先順位が小さい方が手前で大きい方が奥。優先順位が同じときはテキスト画面が手前
    90: //      (スプライト画面の優先順位)<(テキスト画面の優先順位)のとき
    91: //        スプライト>テキスト
    92: //      (テキスト画面の優先順位)<=(スプライト画面の優先順位)のとき
    93: //        テキスト>スプライト
    94: //                          TxPr
    95: //                   0     1     2     3
    96: //                 -----+
    97: //              0   T>S | S>T   S>T   S>T
    98: //                      +-----+
    99: //              1   T>S   T>S | S>T   S>T
   100: //        SpPr                +-----+
   101: //              2   T>S   T>S   T>S | S>T
   102: //                                  +-----
   103: //              3   T>S   T>S   T>S   T>S
   104: //    X68030の実機で確認済み
   105: //    参考
   106: //      https://twitter.com/kugimoto0715/status/622435791705214976
   107: //
   108: //  スプライトプレーン
   109: //    スプライトプレーン1  スプライトスクロールレジスタの優先順位が1のスプライトを配置するプレーン
   110: //    スプライトプレーン2  スプライトスクロールレジスタの優先順位が2のスプライトを配置するプレーン
   111: //    スプライトプレーン3  スプライトスクロールレジスタの優先順位が3のスプライトを配置するプレーン
   112: //    スプライトスクロールレジスタの優先順位が0のスプライトは表示されない
   113: //
   114: //  4bitパレット
   115: //    スプライト画面の8bitパレットの下位4bit
   116: //    テキスト画面のパレット
   117: //
   118: //  8bitパレット
   119: //    上位4bitがパレットブロック、下位4bitが4bitパレット
   120: //    テキスト画面のパレットブロックは常に$0
   121: //
   122: //  スプライトプレーンとバックグラウンドプレーンの重ね合わせ
   123: //    表示されていないバックグラウンドプレーンの8bitパレットは$00とみなす
   124: //    スプライト画面から出力する8bitパレットを以下の手順で決定する
   125: //      スプライトプレーン3の4bitパレットが$0でないとき
   126: //        スプライトプレーン3の8bitパレット
   127: //      スプライトプレーン3の4bitパレットが$0のとき
   128: //        バックグラウンドプレーン0の4bitパレットが$0でないとき
   129: //          バックグラウンドプレーン0の8bitパレット
   130: //        バックグラウンドプレーン0の4bitパレットが$0のとき
   131: //          スプライトプレーン2の4bitパレットが$0でないとき
   132: //            スプライトプレーン2の8bitパレット
   133: //          スプライトプレーン2の4bitパレットが$0のとき
   134: //            バックグラウンドプレーン1の4bitパレットが$0でないとき
   135: //              バックグラウンドプレーン1の8bitパレット
   136: //            バックグラウンドプレーン1の4bitパレットが$0のとき
   137: //              スプライトプレーン1の4bitパレットが$0でないとき
   138: //                スプライトプレーン1の8bitパレット
   139: //              スプライトプレーン1の4bitパレットが$0のとき
   140: //                バックグラウンドプレーン1の8bitパレットが$00でないとき
   141: //                  バックグラウンドプレーン1の8bitパレット
   142: //                バックグラウンドプレーン1の8bitパレットが$00のとき
   143: //                  バックグラウンドプレーン0の8bitパレット($00を含む)
   144: //
   145: //  スプライト画面とテキスト画面を代表する画面
   146: //    スプライト画面とテキスト画面とグラフィック画面を3枚同時に重ね合わせることはしない
   147: //    スプライト画面とテキスト画面のどちらかを代表する画面として残し、他方をグラフィック画面と重ね合わせる前に除外する
   148: //    スプライト画面とテキスト画面を代表する画面は以下の手順で決定する
   149: //      スプライト画面とテキスト画面のどちらかの4bitパレットが$0でないとき
   150: //        4bitパレットが$0でない手前にある方
   151: //      スプライト画面とテキスト画面の4bitパレットが両方$0のとき
   152: //        スプライト画面の8bitパレットが$00でないとき
   153: //          スプライト画面
   154: //        スプライト画面の8bitパレットが$00のとき
   155: //          奥にある方(表示されているとは限らない)
   156: //    まとめ
   157: //      $+は$0以外、$?は任意
   158: //      スプライト(OFF)はスプライト$00、テキスト(OFF)はテキスト$0とみなす
   159: //         優先順位とパレット      代表する画面
   160: //      スプライト$00>テキスト$0    テキスト$0   すべて$00ならば奥にある方
   161: //      スプライト$00>テキスト$+    テキスト$+   $?+で手前にある方
   162: //      スプライト$+0>テキスト$0  スプライト$+0  すべて$?0でスプライトが$00でなければスプライト
   163: //      スプライト$+0>テキスト$+    テキスト$+   $?+で手前にある方
   164: //      スプライト$?+>テキスト$0  スプライト$?+  $?+で手前にある方
   165: //      スプライト$?+>テキスト$+  スプライト$?+  $?+で手前にある方
   166: //      テキスト$0>スプライト$00  スプライト$00  すべて$00ならば奥にある方
   167: //      テキスト$+>スプライト$00    テキスト$+   $?+で手前にある方
   168: //      テキスト$0>スプライト$+0  スプライト$+0  すべて$?0でスプライトが$00でなければスプライト
   169: //      テキスト$+>スプライト$+0    テキスト$+   $?+で手前にある方
   170: //      テキスト$0>スプライト$?+  スプライト$?+  $?+で手前にある方
   171: //      テキスト$+>スプライト$?+    テキスト$+   $?+で手前にある方
   172: //    スプライト>テキストのとき
   173: //      スプライトが$?+または(スプライトが$00以外かつテキストが$0)ならばスプライトが代表する画面
   174: //      スプライトが$00または(スプライトが$?0かつテキストが$+)ならばテキストが代表する画面
   175: //    スプライト(OFF)>テキストのとき
   176: //      スプライトが$00
   177: //      テキストが代表する画面
   178: //    スプライト>テキスト(OFF)のとき
   179: //      テキストが$0
   180: //      スプライトが$00以外ならばスプライトが代表する画面
   181: //      スプライトが$00ならばテキスト(OFF)が代表する画面
   182: //    スプライト→テキストのとき
   183: //      スプライトとテキストが連続しているときテキスト$0をスプライト$00として出力しても問題ない
   184: //      スプライトが$?+またはテキストが$0ならばスプライトが代表する画面
   185: //      スプライトが$?0かつテキストが$+ならばテキストが代表する画面
   186: //    スプライト(OFF)→テキストのとき
   187: //      スプライトが$00
   188: //      テキストが代表する画面
   189: //    スプライト→テキスト(OFF)のとき
   190: //      テキストが$0
   191: //      スプライトとテキストが連続しているときテキスト$0をスプライト$00として出力しても問題ない
   192: //      スプライトが代表する画面
   193: //    テキスト>スプライトのとき
   194: //      テキストが$+ならばテキストが代表する画面
   195: //      テキストが$0ならばスプライトが代表する画面
   196: //    テキスト(OFF)>スプライトのとき
   197: //      テキストが$0
   198: //      スプライトが代表する画面
   199: //    テキスト>スプライト(OFF)のとき
   200: //      スプライトが$00
   201: //      テキストが$+ならばテキストが代表する画面
   202: //      テキストが$0ならばスプライト(OFF)が代表する画面
   203: //
   204: //  スプライト・バックグラウンド・テキストのゼロプライオリティ
   205: //    グラフィック画面と同じ要領でスプライトでバックグラウンドやテキストに穴を開けるといったことができる
   206: //    グラフィック画面のゼロプライオリティと異なるのはスプライト・バックグラウンドとテキストの間にグラフィック画面が挟まっている
   207: //    場合があることだが、グラフィック画面よりも手前にあるスプライト・バックグラウンドまたはテキストによるゼロプライオリティで
   208: //    グラフィック画面よりも奥にあるスプライト・バックグラウンドまたはテキストにも穴が空くことに変わりはない
   209: //    そのときグラフィック画面のカラーが0ならは画面は黒になる
   210: //
   211: //  4bitページ
   212: //    GVRAMに格納されている512×512個のパレットコードの一部(4bit)の配列
   213: //    1個あたり16bit(2バイト)の領域が割り当てられる。通常は下位4bitのみ有効で上位12bitは常に0
   214: //    4bitページ0  512ドット16色のとき0x00c00000-0x00c7ffffに配置される4bitページ
   215: //    4bitページ1  512ドット16色のとき0x00c80000-0x00cfffffに配置される4bitページ
   216: //    4bitページ2  512ドット16色のとき0x00d00000-0x00d7ffffに配置される4bitページ
   217: //    4bitページ3  512ドット16色のとき0x00d80000-0x00dfffffに配置される4bitページ
   218: //
   219: //  1番目
   220: //    グラフィック画面で最も手前に表示されるプレーンまたはそこに割り当てられているページまたはそれを構成するパレットコードの配列
   221: //    G1On=1のときだけ表示される
   222: //    512ドット16色のとき
   223: //      4bitパレットコードのbit3-0はG1stの4bitページから供給される
   224: //    512ドット256色のとき
   225: //      8bitパレットコードのbit7-4はG2ndの4bitページから供給される
   226: //      8bitパレットコードのbit3-0はG1stの4bitページから供給される
   227: //    512ドット65536色のとき
   228: //      16bitパレットコードのbit15-12はG4thの4bitページから供給される
   229: //      16bitパレットコードのbit11-8はG3rdの4bitページから供給される
   230: //      16bitパレットコードのbit7-4はG2ndの4bitページから供給される
   231: //      16bitパレットコードのbit3-0はG1stの4bitページから供給される
   232: //    1024ドット16色のとき
   233: //      左上512×512の4bitパレットコードのbit3-0はG1stの4bitページから供給される
   234: //      右上512×512の4bitパレットコードのbit3-0はG2ndの4bitページから供給される
   235: //      左下512×512の4bitパレットコードのbit3-0はG3rdの4bitページから供給される
   236: //      右下512×512の4bitパレットコードのbit3-0はG4thの4bitページから供給される
   237: //
   238: //  2番目
   239: //    グラフィック画面で手前から2番目に表示されるプレーンまたはそこに割り当てられているページまたはそれを構成するパレットコードの配列
   240: //    G2On=1のときだけ表示される。ただし、1番目と2番目の半透明を行うとG2On=0でも2番目の内容が反映される
   241: //    512ドット16色のとき
   242: //      4bitパレットコードのbit3-0はG2ndの4bitページから供給される
   243: //    512ドット256色のとき
   244: //      8bitパレットコードのbit7-4はG4thの4bitページから供給される
   245: //      8bitパレットコードのbit3-0はG3rdの4bitページから供給される
   246: //
   247: //  3番目
   248: //    グラフィック画面で手前から3番目に表示されるプレーンまたはそこに割り当てられているページまたはそれを構成するパレットコードの配列
   249: //    G3On=1のときだけ表示される
   250: //    512ドット16色のとき
   251: //      4bitパレットコードのbit3-0はG3rdの4bitページから供給される
   252: //
   253: //  4番目
   254: //    グラフィック画面で手前から4番目に表示されるプレーンまたはそこに割り当てられているページまたはそれを構成するパレットコードの配列
   255: //    G4On=1のときだけ表示される
   256: //    512ドット16色のとき
   257: //      4bitパレットコードのbit3-0はG4thの4bitページから供給される
   258: //
   259: //  0でない1番目
   260: //    1番目のパレットが0でないとき
   261: //      1番目
   262: //    1番目のパレットが0のとき
   263: //      2番目のパレットが0でないとき
   264: //        2番目
   265: //      2番目のパレットが0のとき
   266: //        3番目のパレットが0でないとき
   267: //          3番目
   268: //        3番目のパレットが0のとき
   269: //          4番目のパレットが0でないとき
   270: //            4番目
   271: //          4番目のパレットが0のとき
   272: //            なし
   273: //
   274: //  グラフィック画面のプレーンの重ね合わせ
   275: //    0でない1番目のパレット(なければ0)に対応するカラーがグラフィック画面のカラーとして出力される
   276: //    カラーが0ならばグラフィック画面は透明になり、奥にあるスプライト画面またはテキスト画面が見える。奥に何もなければ画面は黒
   277: //
   278: //  グラフィック画面のゼロプライオリティ
   279: //    重ね合わせの仕組みから明らかなように、グラフィック画面の中で手前にあるプレーンにパレットが0以外でカラーが0のピクセルを配置すると、
   280: //    奥にあるパレットもカラーも0でない普通ならば透明にならないプレーンに穴が空いて、さらに奥にあるスプライト画面またはテキスト画面が見える
   281: //
   282: //  スプライト画面とテキスト画面とグラフィック画面の優先順位
   283: //    GrPr=0のとき
   284: //      グラフィック画面はスプライト画面とテキスト画面の手前
   285: //                              TxPr
   286: //                    0       1       2       3
   287: //                 -------+
   288: //              0   G>T>S | G>S>T   G>S>T   G>S>T
   289: //                        +-------+
   290: //              1   G>T>S   G>T>S | G>S>T   G>S>T
   291: //        SpPr                    +-------+
   292: //              2   G>T>S   G>T>S   G>T>S | G>S>T
   293: //                                        +-------
   294: //              3   G>T>S   G>T>S   G>T>S   G>T>S
   295: //    GrPr=1のとき
   296: //      グラフィック画面はスプライト画面とテキスト画面の間
   297: //                              TxPr
   298: //                    0       1       2       3
   299: //                 -------+
   300: //              0   T>G>S | S>G>T   S>G>T   S>G>T
   301: //                        +-------+
   302: //              1   T>G>S   T>G>S | S>G>T   S>G>T
   303: //        SpPr                    +-------+
   304: //              2   T>G>S   T>G>S   T>G>S | S>G>T
   305: //                                        +-------
   306: //              3   T>G>S   T>G>S   T>G>S   T>G>S
   307: //    GrPr=2のとき
   308: //      グラフィック画面はスプライト画面とテキスト画面の奥
   309: //                              TxPr
   310: //                    0       1       2       3
   311: //                 -------+
   312: //              0   T>S>G | S>T>G   S>T>G   S>T>G
   313: //                        +-------+
   314: //              1   T>S>G   T>S>G | S>T>G   S>T>G
   315: //        SpPr                    +-------+
   316: //              2   T>S>G   T>S>G   T>S>G | S>T>G
   317: //                                        +-------
   318: //              3   T>S>G   T>S>G   T>S>G   T>S>G
   319: //    GrPr=3のとき
   320: //      グラフィック画面はスプライト画面とテキスト画面の手前で、スプライト画面とテキスト画面はOFF
   321: //        グラフィック画面とスプライト・テキスト画面の半透明を行うとテキストパレット0のカラーが反映されることから、
   322: //        グラフィック画面の奥にスプライト画面とテキスト画面があると解釈できる
   323: //        スプライト画面とテキスト画面のどちらが手前かは結果に影響しない
   324: //                              TxPr
   325: //                    0       1       2       3
   326: //                 -------+
   327: //              0   G>t>s | G>s>t   G>s>t   G>s>t
   328: //                        +-------+
   329: //              1   G>t>s   G>t>s | G>s>t   G>s>t
   330: //        SpPr                    +-------+
   331: //              2   G>t>s   G>t>s   G>t>s | G>s>t
   332: //                                        +-------
   333: //              3   G>t>s   G>t>s   G>t>s   G>t>s
   334: //    X68030の実機で確認済み
   335: //    参考
   336: //      https://twitter.com/kugimoto0715/status/622436279439921152
   337: //      https://twitter.com/kugimoto0715/status/622436573343145984
   338: //
   339: //  スプライト画面とテキスト画面とグラフィック画面の重ね合わせ
   340: //    手前の画面のカラーが0以外(不透明)ならば手前の画面が表示される
   341: //    手前の画面のカラーが0(透明)ならば奥の画面が表示される
   342: //    例1
   343: //      「テキスト>グラフィック」でテキスト画面のパレットが$0で不透明、グラフィック画面も不透明のとき、
   344: //       表示されていないスプライト画面の優先順位がグラフィック画面よりも手前にあるか奥にあるかで表示が異なる
   345: //       テキスト画面のパレットが$0で、表示されていないスプライト画面のパレットも$00なので、奥にある方が代表する画面になる
   346: //      「テキスト>スプライト>グラフィック」ならばスプライト画面のパレット$00(不透明)が表示され、
   347: //      「テキスト>グラフィック>スプライト」ならばグラフィック画面(不透明)が表示される
   348: //    例2
   349: //      「バックグラウンド$30黄>グラフィック2赤>テキスト0黒⇒黄」
   350: //      「バックグラウンド$30黄>グラフィック2赤>テキスト1灰⇒赤」
   351: //      バックグラウンド(タイル張り最大15色)とグラフィック(不透明であること以外に制約なし)のどちらを表示するか
   352: //      テキストでドット毎に選択できる
   353: //    例3
   354: //      「バックグラウンド$00灰>テキスト0灰>グラフィクス2赤⇒灰」
   355: //      「テキスト0灰>バックグラウンド$00灰>グラフィクス2赤⇒灰」
   356: //      「バックグラウンド$00灰>グラフィクス2赤>テキスト0灰⇒赤」
   357: //      「テキスト0灰>グラフィクス2赤>バックグラウンド$00灰⇒赤」
   358: //
   359: //  特殊プライオリティ(XWC)
   360: //    概要
   361: //      優先順位に関わらず0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のパレットのカラーだけ表示する
   362: //    SE4T_XWCの手順
   363: //      1番目のパレットが0でないとき
   364: //        1番目のパレットを偶数化したパレットのカラーが奇数のとき
   365: //          1番目のカラー(0は黒)
   366: //        さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき)
   367: //          スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   368: //            スプライトカラーが0でないとき
   369: //              スプライトカラー
   370: //            さもなくば(スプライトカラーが0のとき)
   371: //              1番目のカラー(0は黒)
   372: //          さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   373: //            1番目のカラーが0でないとき
   374: //              1番目のカラー
   375: //            さもなくば(1番目のカラーが0のとき)
   376: //              テキストカラー(0は黒)
   377: //      さもなくば(1番目のパレットが0のとき)
   378: //        2番目のパレットが0でないとき
   379: //          2番目のパレットを偶数化したパレットのカラーが奇数のとき
   380: //            2番目のカラー(0は黒)
   381: //          さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき)
   382: //            スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   383: //              スプライトカラーが0でないとき
   384: //                スプライトカラー
   385: //              さもなくば(スプライトカラーが0のとき)
   386: //                2番目のカラー(0は黒)
   387: //            さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   388: //              2番目のカラーが0でないとき
   389: //                2番目のカラー
   390: //              さもなくば(2番目のカラーが0のとき)
   391: //                テキストカラー(0は黒)
   392: //        さもなくば(2番目のパレットが0のとき)
   393: //          3番目のパレットが0でないとき
   394: //            3番目のパレットを偶数化したパレットのカラーが奇数のとき
   395: //              3番目のカラー(0は黒)
   396: //            さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき)
   397: //              スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   398: //                スプライトカラーが0でないとき
   399: //                  スプライトカラー
   400: //                さもなくば(スプライトカラーが0のとき)
   401: //                  3番目のカラー(0は黒)
   402: //              さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   403: //                3番目のカラーが0でないとき
   404: //                  3番目のカラー
   405: //                さもなくば(3番目のカラーが0のとき)
   406: //                  テキストカラー(0は黒)
   407: //          さもなくば(3番目のパレットが0のとき)
   408: //            4番目のパレットを偶数化したパレットのカラーが奇数のとき
   409: //              4番目のカラー(0は黒)
   410: //            さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき)
   411: //              スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   412: //                スプライトカラーが0でないとき
   413: //                  スプライトカラー
   414: //                さもなくば(スプライトカラーが0のとき)
   415: //                  4番目のカラー(0は黒)
   416: //              さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   417: //                4番目のカラーが0でないとき
   418: //                  4番目のカラー
   419: //                さもなくば(4番目のカラーが0のとき)
   420: //                  テキストカラー(0は黒)
   421: //
   422: //  特殊プライオリティ(XWP)
   423: //    概要
   424: //      優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する
   425: //    SE4T_XWPの手順
   426: //      1番目のパレットが0のとき
   427: //        スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   428: //          スプライトカラーが0でないとき
   429: //            スプライトカラー
   430: //          さもなくば(スプライトカラーが0のとき)
   431: //            2番目のパレットを偶数化したパレットが0でないとき
   432: //              2番目のパレットを偶数化したパレットのカラー(0は黒)
   433: //            さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   434: //              3番目のパレットを偶数化したパレットが0でないとき
   435: //                3番目のパレットを偶数化したパレットのカラー(0は黒)
   436: //              さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   437: //                4番目のパレットを偶数化したパレットのカラー(0は黒)
   438: //        さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   439: //          2番目のパレットを偶数化したパレットが0でないとき
   440: //            2番目のパレットを偶数化したパレットのカラーが0でないとき
   441: //              2番目のパレットを偶数化したパレットのカラー
   442: //            さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき)
   443: //              テキストカラー(0は黒)
   444: //          さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   445: //            3番目のパレットを偶数化したパレットが0でないとき
   446: //              3番目のパレットを偶数化したパレットのカラーが0でないとき
   447: //                3番目のパレットを偶数化したパレットのカラー
   448: //              さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき)
   449: //                テキストカラー(0は黒)
   450: //            さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   451: //              4番目のパレットを偶数化したパレットのカラーが0でないとき
   452: //                4番目のパレットを偶数化したパレットのカラー
   453: //              さもなくば(4番目のパレットを偶数化したパレットのカラーが0のとき)
   454: //                テキストカラー(0は黒)
   455: //      1番目のパレットが1のとき
   456: //        スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   457: //          スプライトカラーが0でないとき
   458: //            スプライトカラー
   459: //          さもなくば(スプライトカラーが0のとき)
   460: //            グラフィックパレット0のカラー(0は黒)
   461: //        さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   462: //          グラフィックパレット0のカラーが0でないとき
   463: //            グラフィックパレット0のカラー
   464: //          さもなくば(グラフィックパレット0のカラーが0のとき)
   465: //            テキストカラー(0は黒)
   466: //      1番目のパレットが2以上の偶数のとき
   467: //        スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   468: //          スプライトカラーが0でないとき
   469: //            スプライトカラー
   470: //          さもなくば(スプライトカラーが0のとき)
   471: //            1番目のカラー(0は黒)
   472: //        さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   473: //          1番目のカラーが0でないとき
   474: //            1番目のカラー
   475: //          さもなくば(1番目のカラーが0のとき)
   476: //            テキストカラー(0は黒)
   477: //      さもなくば(1番目のパレットが3以上の奇数のとき)
   478: //        1番目のパレットを偶数化したパレットのカラー(0は黒)
   479: //
   480: //  半透明(XHCT)
   481: //    概要
   482: //      0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる
   483: //    65536色の場合
   484: //      IOCSの65536色の標準パレットテーブルはパレットとカラーが同じなのでそのまま使うと領域指定なしの半透明モードになる
   485: //      参考
   486: //        http://www.geocities.jp/winx68khighspeed/nisshi.html
   487: //    SE4T_XHCTの手順
   488: //      スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   489: //        スプライトカラーが0でないとき
   490: //          スプライトカラー
   491: //        さもなくば(スプライトカラーが0のとき)
   492: //          1番目のパレットが0でないとき
   493: //            1番目のパレットを偶数化したパレットのカラーが奇数のとき
   494: //              1番目のカラーとカラー0を混ぜたカラー(0は黒)
   495: //            さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき)
   496: //              1番目のカラー(0は黒)
   497: //          さもなくば(1番目のパレットが0のとき)
   498: //            2番目のパレットが0でないとき
   499: //              2番目のパレットを偶数化したパレットのカラーが奇数のとき
   500: //                2番目のカラーとカラー0を混ぜたカラー(0は黒)
   501: //              さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき)
   502: //                2番目のカラー(0は黒)
   503: //            さもなくば(2番目のパレットが0のとき)
   504: //              3番目のパレットが0でないとき
   505: //                3番目のパレットを偶数化したパレットのカラーが奇数のとき
   506: //                  3番目のカラーとカラー0を混ぜたカラー(0は黒)
   507: //                さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき)
   508: //                  3番目のカラー(0は黒)
   509: //              さもなくば(3番目のパレットが0のとき)
   510: //                4番目のパレットを偶数化したパレットのカラーが奇数のとき
   511: //                  4番目のカラーとカラー0を混ぜたカラー(0は黒)
   512: //                さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき)
   513: //                  4番目のカラー(0は黒)
   514: //      さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   515: //        1番目のパレットが0でないとき
   516: //          1番目のパレットを偶数化したパレットのカラーが奇数のとき
   517: //            1番目のカラーと
   518: //              テキストカラー(0は黒)
   519: //            を混ぜたカラー(0は黒)
   520: //          さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき)
   521: //            1番目のカラーが0でないとき
   522: //              1番目のカラー
   523: //            さもなくば(1番目のカラーが0のとき)
   524: //              テキストカラー(0は黒)
   525: //        さもなくば(1番目のパレットが0のとき)
   526: //          2番目のパレットが0でないとき
   527: //            2番目のパレットを偶数化したパレットのカラーが奇数のとき
   528: //              2番目のカラーと
   529: //                テキストカラー(0は黒)
   530: //              を混ぜたカラー(0は黒)
   531: //            さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき)
   532: //              2番目のカラーが0でないとき
   533: //                2番目のカラー
   534: //              さもなくば(2番目のカラーが0のとき)
   535: //                テキストカラー(0は黒)
   536: //          さもなくば(2番目のパレットが0のとき)
   537: //            3番目のパレットが0でないとき
   538: //              3番目のパレットを偶数化したパレットのカラーが奇数のとき
   539: //                3番目のカラーと
   540: //                  テキストカラー(0は黒)
   541: //                を混ぜたカラー(0は黒)
   542: //              さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき)
   543: //                3番目のカラーが0でないとき
   544: //                  3番目のカラー
   545: //                さもなくば(3番目のカラーが0のとき)
   546: //                  テキストカラー(0は黒)
   547: //            さもなくば(3番目のパレットが0のとき)
   548: //              4番目のパレットを偶数化したパレットのカラーが奇数のとき
   549: //                4番目のカラーと
   550: //                  テキストカラー(0は黒)
   551: //                を混ぜたカラー(0は黒)
   552: //              さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき)
   553: //                4番目のカラーが0でないとき
   554: //                  4番目のカラー
   555: //                さもなくば(4番目のカラーが0のとき)
   556: //                  テキストカラー(0は黒)
   557: //
   558: //  半透明(XHCG)
   559: //    概要
   560: //      0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる
   561: //    例
   562: //      パレット2=赤(偶数)、3=青、4=赤紫、5=水色のとき
   563: //        ----------  ----------  ----------
   564: //        1番目       2番目       出力
   565: //        ----------  ----------  ----------
   566: //        2=赤(偶数)  2=赤(偶数)  赤
   567: //        2=赤(偶数)  3=青        赤
   568: //        2=赤(偶数)  4=赤紫      赤
   569: //        2=赤(偶数)  5=水色      赤
   570: //        3=青        2=赤(偶数)  青
   571: //        3=青        3=青        青
   572: //        3=青        4=赤紫      水色
   573: //        3=青        5=水色      水色
   574: //        ----------  ----------  ----------
   575: //      パレット2=赤(奇数)、3=青、4=赤紫、5=水色のとき
   576: //        ----------  ----------  ----------
   577: //        1番目       2番目       出力
   578: //        ----------  ----------  ----------
   579: //        2=赤(奇数)  2=赤(奇数)  紫
   580: //        2=赤(奇数)  3=青        紫
   581: //        2=赤(奇数)  4=赤紫      灰色
   582: //        2=赤(奇数)  5=水色      灰色
   583: //        3=青        2=赤(奇数)  紫
   584: //        3=青        3=青        紫
   585: //        3=青        4=赤紫      灰色
   586: //        3=青        5=水色      灰色
   587: //        ----------  ----------  ----------
   588: //    SE4T_XHCGの手順
   589: //      スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   590: //        スプライトカラーが0でないとき
   591: //          スプライトカラー
   592: //        さもなくば(スプライトカラーが0のとき)
   593: //          1番目のパレットが0でないとき
   594: //            1番目のパレットを偶数化したパレットのカラーが奇数のとき
   595: //              1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒)
   596: //            さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき)
   597: //              1番目のパレットが奇数のとき
   598: //                2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒)
   599: //              さもなくば(1番目のパレットが偶数のとき)
   600: //                1番目のカラー(0は黒)
   601: //          さもなくば(1番目のパレットが0のとき)
   602: //            2番目のパレットが0でないとき
   603: //              2番目のパレットを偶数化したパレットのカラーが奇数のとき
   604: //                2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒)
   605: //              さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき)
   606: //                2番目のカラー(0は黒)
   607: //            さもなくば(2番目のパレットが0のとき)
   608: //              3番目のパレットが0でないとき
   609: //                3番目のパレットを偶数化したパレットのカラーが奇数のとき
   610: //                  3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラー(0は黒)
   611: //                さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき)
   612: //                  3番目のパレットが奇数のとき
   613: //                    パレット1のカラー(0は黒)
   614: //                  さもなくば(3番目のパレットが偶数のとき)
   615: //                    3番目のカラー(0は黒)
   616: //              さもなくば(3番目のパレットが0のとき)
   617: //                4番目のパレットを偶数化したパレットのカラーが奇数のとき
   618: //                  4番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラー(0は黒)
   619: //                さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき)
   620: //                  4番目のパレットが奇数のとき
   621: //                    パレット1のカラー(0は黒)
   622: //                  さもなくば(4番目のパレットが偶数のとき)
   623: //                    4番目のカラー(0は黒)
   624: //      さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   625: //        1番目のパレットが0でないとき
   626: //          1番目のパレットを偶数化したパレットのカラーが奇数のとき
   627: //            1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒)
   628: //          さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき)
   629: //            1番目のパレットが奇数のとき
   630: //              2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき
   631: //                2番目(ONとみなす)のパレットを奇数化したパレットのカラー
   632: //              さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき)
   633: //                テキストカラー(0は黒)
   634: //            さもなくば(1番目のパレットが偶数のとき)
   635: //              1番目のカラーが0でないとき
   636: //                1番目のカラー
   637: //              さもなくば(1番目のカラーが0のとき)
   638: //                テキストカラー(0は黒)
   639: //        さもなくば(1番目のパレットが0のとき)
   640: //          2番目のパレットが0でないとき
   641: //            2番目のパレットを偶数化したパレットのカラーが奇数のとき
   642: //              2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒)
   643: //            さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき)
   644: //              2番目のカラーが0でないとき
   645: //                2番目のカラー
   646: //              さもなくば(2番目のカラーが0のとき)
   647: //                テキストカラー(0は黒)
   648: //          さもなくば(2番目のパレットが0のとき)
   649: //            3番目のパレットが0でないとき
   650: //              3番目のパレットを偶数化したパレットのカラーが奇数のとき
   651: //                3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラー(0は黒)
   652: //              さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき)
   653: //                3番目のパレットが奇数のとき
   654: //                  パレット1のカラーが0でないとき
   655: //                    パレット1のカラー
   656: //                  さもなくば(パレット1のカラーが0のとき)
   657: //                    テキストカラー(0は黒)
   658: //                さもなくば(3番目のパレットが偶数のとき)
   659: //                  3番目のカラーが0でないとき
   660: //                    3番目のカラー
   661: //                  さもなくば(3番目のカラーが0のとき)
   662: //                    テキストカラー(0は黒)
   663: //            さもなくば(3番目のパレットが0のとき)
   664: //              4番目のパレットを偶数化したパレットのカラーが奇数のとき
   665: //                4番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラー(0は黒)
   666: //              さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき)
   667: //                4番目のパレットが奇数のとき
   668: //                  パレット1のカラーが0でないとき
   669: //                    パレット1のカラー
   670: //                  さもなくば(パレット1のカラーが0のとき)
   671: //                    テキストカラー(0は黒)
   672: //                さもなくば(4番目のパレットが偶数のとき)
   673: //                  4番目のカラーが0でないとき
   674: //                    4番目のカラー
   675: //                  さもなくば(4番目のカラーが0のとき)
   676: //                    テキストカラー(0は黒)
   677: //
   678: //  半透明(XHCGT)
   679: //    概要
   680: //      0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる
   681: //    SE4T_XHCGTの手順
   682: //      スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   683: //        スプライトカラーが0でないとき
   684: //          スプライトカラー
   685: //        さもなくば(スプライトカラーが0のとき)
   686: //          1番目のパレットが0でないとき
   687: //            1番目のパレットを偶数化したパレットのカラーが奇数のとき
   688: //              1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒)
   689: //            さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき)
   690: //              1番目のパレットが奇数のとき
   691: //                2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒)
   692: //              さもなくば(1番目のパレットが偶数のとき)
   693: //                1番目のカラー(0は黒)
   694: //          さもなくば(1番目のパレットが0のとき)
   695: //            2番目のパレットが0でないとき
   696: //              2番目のパレットを偶数化したパレットのカラーが奇数のとき
   697: //                2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒)
   698: //              さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき)
   699: //                2番目のカラー(0は黒)
   700: //            さもなくば(2番目のパレットが0のとき)
   701: //              3番目のパレットが0でないとき
   702: //                3番目のパレットを偶数化したパレットのカラーが奇数のとき
   703: //                  3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒)
   704: //                さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき)
   705: //                  3番目のパレットが奇数のとき
   706: //                    パレット1のカラー(0は黒)
   707: //                  さもなくば(3番目のパレットが偶数のとき)
   708: //                    3番目のカラー(0は黒)
   709: //              さもなくば(3番目のパレットが0のとき)
   710: //                4番目のパレットを偶数化したパレットのカラーが奇数のとき
   711: //                  4番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒)
   712: //                さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき)
   713: //                  4番目のパレットが奇数のとき
   714: //                    パレット1のカラー(0は黒)
   715: //                  さもなくば(4番目のパレットが偶数のとき)
   716: //                    4番目のカラー(0は黒)
   717: //      さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   718: //        1番目のパレットが0でないとき
   719: //          1番目のパレットを偶数化したパレットのカラーが奇数のとき
   720: //            1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに
   721: //              テキストカラー(0は黒)
   722: //            を混ぜたカラー(0は黒)
   723: //          さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき)
   724: //            1番目のパレットが奇数のとき
   725: //              2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき
   726: //                2番目(ONとみなす)のパレットを奇数化したパレットのカラー
   727: //              さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき)
   728: //                テキストカラー(0は黒)
   729: //            さもなくば(1番目のパレットが偶数のとき)
   730: //              1番目のカラーが0でないとき
   731: //                1番目のカラー
   732: //              さもなくば(1番目のカラーが0のとき)
   733: //                テキストカラー(0は黒)
   734: //        さもなくば(1番目のパレットが0のとき)
   735: //          2番目のパレットが0でないとき
   736: //            2番目のパレットを偶数化したパレットのカラーが奇数のとき
   737: //              2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに
   738: //                テキストカラー(0は黒)
   739: //              を混ぜたカラー(0は黒)
   740: //            さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき)
   741: //              2番目のカラーが0でないとき
   742: //                2番目のカラー
   743: //              さもなくば(2番目のカラーが0のとき)
   744: //                テキストカラー(0は黒)
   745: //          さもなくば(2番目のパレットが0のとき)
   746: //            3番目のパレットが0でないとき
   747: //              3番目のパレットを偶数化したパレットのカラーが奇数のとき
   748: //                3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラーにさらに
   749: //                  テキストカラー(0は黒)
   750: //                を混ぜたカラー(0は黒)
   751: //              さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき)
   752: //                3番目のパレットが奇数のとき
   753: //                  パレット1のカラーが0でないとき
   754: //                    パレット1のカラー
   755: //                  さもなくば(パレット1のカラーが0のとき)
   756: //                    テキストカラー(0は黒)
   757: //                さもなくば(3番目のパレットが偶数のとき)
   758: //                  3番目のカラーが0でないとき
   759: //                    3番目のカラー
   760: //                  さもなくば(3番目のカラーが0のとき)
   761: //                    テキストカラー(0は黒)
   762: //            さもなくば(3番目のパレットが0のとき)
   763: //              4番目のパレットを偶数化したパレットのカラーが奇数のとき
   764: //                4番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラーにさらに
   765: //                  テキストカラー(0は黒)
   766: //                を混ぜたカラー(0は黒)
   767: //              さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき)
   768: //                4番目のパレットが奇数のとき
   769: //                  パレット1のカラーが0でないとき
   770: //                    パレット1のカラー
   771: //                  さもなくば(パレット1のカラーが0のとき)
   772: //                    テキストカラー(0は黒)
   773: //                さもなくば(4番目のパレットが偶数のとき)
   774: //                  4番目のカラーが0でないとき
   775: //                    4番目のカラー
   776: //                  さもなくば(4番目のカラーが0のとき)
   777: //                    テキストカラー(0は黒)
   778: //
   779: //  半透明(XHPT)
   780: //    概要
   781: //      1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる
   782: //    SE4T_XHPTの手順
   783: //      スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   784: //        スプライトカラーが0でないとき
   785: //          スプライトカラー
   786: //        さもなくば(スプライトカラーが0のとき)
   787: //          1番目のパレットが0のとき
   788: //            2番目のパレットを偶数化したパレットが0でないとき
   789: //              2番目のパレットを偶数化したパレットのカラー(0は黒)
   790: //            さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   791: //              3番目のパレットを偶数化したパレットが0でないとき
   792: //                3番目のパレットを偶数化したパレットのカラー(0は黒)
   793: //              さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   794: //                4番目のパレットを偶数化したパレットのカラー(0は黒)
   795: //          1番目のパレットが1のとき
   796: //            グラフィックパレット0のカラー(0は黒)
   797: //          1番目のパレットが2以上の偶数のとき
   798: //            1番目のカラー(0は黒)
   799: //          さもなくば(1番目のパレットが3以上の奇数のとき)
   800: //            1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒)
   801: //      さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   802: //        1番目のパレットが0のとき
   803: //          2番目のパレットを偶数化したパレットが0でないとき
   804: //            2番目のパレットを偶数化したパレットのカラーが0でないとき
   805: //              2番目のパレットを偶数化したパレットのカラー
   806: //            さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき)
   807: //              テキストカラー(0は黒)
   808: //          さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   809: //            3番目のパレットを偶数化したパレットが0でないとき
   810: //              3番目のパレットを偶数化したパレットのカラーが0でないとき
   811: //                3番目のパレットを偶数化したパレットのカラー
   812: //              さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき)
   813: //                テキストカラー(0は黒)
   814: //            さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   815: //              4番目のパレットを偶数化したパレットのカラーが0でないとき
   816: //                4番目のパレットを偶数化したパレットのカラー
   817: //              さもなくば(4番目のパレットを偶数化したパレットのカラーが0のとき)
   818: //                テキストカラー(0は黒)
   819: //        1番目のパレットが1のとき
   820: //          グラフィックパレット0のカラーが0でないとき
   821: //            グラフィックパレット0のカラー
   822: //          さもなくば(グラフィックパレット0のカラーが0のとき)
   823: //            テキストカラー(0は黒)
   824: //        1番目のパレットが2以上の偶数のとき
   825: //          1番目のカラーが0でないとき
   826: //            1番目のカラー
   827: //          さもなくば(1番目のカラーが0のとき)
   828: //            テキストカラー(0は黒)
   829: //        さもなくば(1番目のパレットが3以上の奇数のとき)
   830: //          1番目のパレットを偶数化したパレットのカラーと
   831: //            テキストカラー(0は黒)
   832: //          を混ぜたカラー(0は黒)
   833: //    グラフィック画面よりも奥にスプライト画面とテキスト画面が両方あるときはそれらを重ね合わせてから混ぜる
   834: //    グラフィック画面よりも手前にあるスプライト画面またはテキスト画面は通常通り出力される
   835: //
   836: //  半透明(XHPG)
   837: //    概要
   838: //      1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜる
   839: //    SE4T_XHPGの手順
   840: //      スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   841: //        スプライトカラーが0でないとき
   842: //          スプライトカラー
   843: //        さもなくば(スプライトカラーが0のとき)
   844: //          1番目のパレットが0のとき
   845: //            2番目のパレットを偶数化したパレットが0でないとき
   846: //              2番目のパレットを偶数化したパレットのカラー(0は黒)
   847: //            さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   848: //              3番目のパレットを偶数化したパレットが0でないとき
   849: //                3番目のパレットを偶数化したパレットのカラー(0は黒)
   850: //              さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   851: //                4番目のパレットを偶数化したパレットのカラー(0は黒)
   852: //          1番目のパレットが1のとき
   853: //            グラフィックパレット0のカラー(0は黒)
   854: //          1番目のパレットが2以上の偶数のとき
   855: //            1番目のカラー(0は黒)
   856: //          さもなくば(1番目のパレットが3以上の奇数のとき)
   857: //            1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒)
   858: //      さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   859: //        1番目のパレットが0のとき
   860: //          2番目のパレットを偶数化したパレットが0でないとき
   861: //            2番目のパレットを偶数化したパレットのカラーが0でないとき
   862: //              2番目のパレットを偶数化したパレットのカラー
   863: //            さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき)
   864: //              テキストカラー(0は黒)
   865: //          さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   866: //            3番目のパレットを偶数化したパレットが0でないとき
   867: //              3番目のパレットを偶数化したパレットのカラーが0でないとき
   868: //                3番目のパレットを偶数化したパレットのカラー
   869: //              さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき)
   870: //                テキストカラー(0は黒)
   871: //            さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   872: //              4番目のパレットを偶数化したパレットのカラーが0でないとき
   873: //                4番目のパレットを偶数化したパレットのカラー
   874: //              さもなくば(4番目のパレットを偶数化したパレットのカラーが0のとき)
   875: //                テキストカラー(0は黒)
   876: //        1番目のパレットが1のとき
   877: //          グラフィックパレット0のカラーが0でないとき
   878: //            グラフィックパレット0のカラー
   879: //          さもなくば(グラフィックパレット0のカラーが0のとき)
   880: //            テキストカラー(0は黒)
   881: //        1番目のパレットが2以上の偶数のとき
   882: //          1番目のカラーが0でないとき
   883: //            1番目のカラー
   884: //          さもなくば(1番目のカラーが0のとき)
   885: //            テキストカラー(0は黒)
   886: //        さもなくば(1番目のパレットが3以上の奇数のとき)
   887: //          1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0でないとき
   888: //            1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー
   889: //          さもなくば(1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0のとき)
   890: //            テキストカラー(0は黒)
   891: //    混ぜないときもグラフィックパレットはすべて偶数化される
   892: //      1は偶数化されて0(透明)になり奥のプレーンが見える
   893: //      0>1>1>1は0、0>1>1>3は2
   894: //    例
   895: //      1番目が2=赤、2番目が2=赤のとき
   896: //        1番目の2=赤が偶数なので半透明にならない
   897: //        2番目の2=赤を偶数化した2=赤になる
   898: //      1番目が2=赤、2番目が3=青のとき
   899: //        1番目の2=赤が偶数なので半透明にならない
   900: //        2番目の3=青を偶数化した2=赤になる
   901: //      1番目が3=青、2番目が2=赤のとき
   902: //        1番目の3=青が奇数なので半透明になる
   903: //        1番目の3=青を偶数化した2=赤と2番目の2=赤を奇数化した3=青が混ざって紫になる
   904: //      1番目が3=青、2番目が3=青のとき
   905: //        1番目の3=青が奇数なので半透明になる
   906: //        1番目の3=青を偶数化した2=赤と2番目の3=青を奇数化した3=青が混ざって紫になる
   907: //
   908: //  半透明(XHPGT)
   909: //    概要
   910: //      1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる
   911: //    SE4T_XHPGTの手順
   912: //      スプライトパレットの下位4bitが0でないまたは(スプライトパレットが0でないかつテキストパレットが0)のとき
   913: //        スプライトカラーが0でないとき
   914: //          スプライトカラー
   915: //        さもなくば(スプライトカラーが0のとき)
   916: //          1番目のパレットが0のとき
   917: //            2番目のパレットを偶数化したパレットが0でないとき
   918: //              2番目のパレットを偶数化したパレットのカラー(0は黒)
   919: //            さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   920: //              3番目のパレットを偶数化したパレットが0でないとき
   921: //                3番目のパレットを偶数化したパレットのカラー(0は黒)
   922: //              さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   923: //                4番目のパレットを偶数化したパレットのカラー(0は黒)
   924: //          1番目のパレットが1のとき
   925: //            グラフィックパレット0のカラー(0は黒)
   926: //          1番目のパレットが2以上の偶数のとき
   927: //            1番目のカラー(0は黒)
   928: //          さもなくば(1番目のパレットが3以上の奇数のとき)
   929: //            1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒)
   930: //      さもなくば(スプライトパレットが0または(スプライトパレットの下位4bitが0かつテキストパレットが0でない)のとき)
   931: //        1番目のパレットが0のとき
   932: //          2番目のパレットを偶数化したパレットが0でないとき
   933: //            2番目のパレットを偶数化したパレットのカラーが0でないとき
   934: //              2番目のパレットを偶数化したパレットのカラー
   935: //            さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき)
   936: //              テキストカラー(0は黒)
   937: //          さもなくば(2番目のパレットを偶数化したパレットが0のとき)
   938: //            3番目のパレットを偶数化したパレットが0でないとき
   939: //              3番目のパレットを偶数化したパレットのカラーが0でないとき
   940: //                3番目のパレットを偶数化したパレットのカラー
   941: //              さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき)
   942: //                テキストカラー(0は黒)
   943: //            さもなくば(3番目のパレットを偶数化したパレットが0のとき)
   944: //              4番目のパレットを偶数化したパレットのカラーが0でないとき
   945: //                4番目のパレットを偶数化したパレットのカラー
   946: //              さもなくば(4番目のパレットを偶数化したパレットのカラーが0のとき)
   947: //                テキストカラー(0は黒)
   948: //        1番目のパレットが1のとき
   949: //          グラフィックパレット0のカラーが0でないとき
   950: //            グラフィックパレット0のカラー
   951: //          さもなくば(グラフィックパレット0のカラーが0のとき)
   952: //            テキストカラー(0は黒)
   953: //        1番目のパレットが2以上の偶数のとき
   954: //          1番目のカラーが0でないとき
   955: //            1番目のカラー
   956: //          さもなくば(1番目のカラーが0のとき)
   957: //            テキストカラー(0は黒)
   958: //        さもなくば(1番目のパレットが3以上の奇数のとき)
   959: //          1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに
   960: //            テキストカラー(0は黒)
   961: //          を混ぜたカラー(0は黒)
   962: //
   963: //----------------------------------------------------------------------------------------
   964: 
   965: package xeij;
   966: 
   967: import java.lang.*;  //Boolean,Character,Class,Comparable,Double,Exception,Float,IllegalArgumentException,Integer,Long,Math,Number,Object,Runnable,SecurityException,String,StringBuilder,System
   968: import java.util.*;  //ArrayList,Arrays,Calendar,GregorianCalendar,HashMap,Map,Map.Entry,Timer,TimerTask,TreeMap
   969: 
   970: public class VideoController {
   971: 
   972:   public static final boolean VCN_LOG_TRANSITION = false;  //true=ビデオコントローラの画面モードの遷移を報告する。ゲームによっては頻繁に切り替わるので停止させる手段がないと困る
   973: 
   974:   //レジスタ
   975:   public static final int VCN_REG1 = 0x00e82400;
   976:   public static final int VCN_REG2 = 0x00e82500;
   977:   public static final int VCN_REG3 = 0x00e82600;
   978:   public static int vcnReg1Port;  //ポートの読み書きに使われる値
   979:   public static int vcnReg1Mask;  //マスク。0=ポート,1=テスト
   980:   public static int vcnReg1Test;  //テストデータ
   981:   public static int vcnReg1Curr;  //使用されている値。vcnReg1Port & ~vcnReg1Mask | vcnReg1Test & vcnReg1Mask
   982:   public static int vcnReg2Port;  //ポートの読み書きに使われる値
   983:   public static int vcnReg2Mask;  //マスク。0=ポート,1=テスト
   984:   public static int vcnReg2Test;  //テストデータ
   985:   public static int vcnReg2Curr;  //使用されている値。vcnReg2Port & ~vcnReg2Mask | vcnReg2Test & vcnReg2Mask
   986:   public static int vcnReg3Port;  //ポートの読み書きに使われる値
   987:   public static int vcnReg3Mask;  //マスク。0=ポート,1=テスト
   988:   public static int vcnReg3Test;  //テストデータ
   989:   public static int vcnReg3Curr;  //使用されている値。vcnReg3Port & ~vcnReg3Mask | vcnReg3Test & vcnReg3Mask
   990: 
   991:   //コントラスト
   992:   public static final int VCN_CONTRAST_SCALE = 3;  //コントラストの1段階を何分割するか
   993:   public static final long VCN_CONTRAST_DELAY = XEiJ.TMR_FREQ / (20 * VCN_CONTRAST_SCALE);  //コントラストが1段階変化するのにかかる時間(XEiJ.TMR_FREQ単位)=0.05秒
   994:   public static final int[][] vcnPalBase = new int[VCN_CONTRAST_SCALE * 15 + 1][];  //コントラストに応じた16ビット→32ビット変換テーブルのテーブル
   995:   public static int[] vcnPalTbl;  //現在の16ビット→32ビット変換テーブル
   996:   public static int vcnCurrentScaledContrast;  //VCN_CONTRAST_SCALE*現在のコントラスト
   997:   public static int vcnTargetContrastPort;  //指定されたコントラスト
   998:   public static int vcnTargetContrastMask;
   999:   public static int vcnTargetContrastTest;
  1000:   public static int vcnTargetContrastCurr;
  1001:   public static int vcnTargetScaledContrast;  //VCN_CONTRAST_SCALE*vcnTargetContrastCurr
  1002: 
  1003:   //パレット
  1004:   //  ゼロ拡張
  1005:   public static final int VCN_PATTEST_BLOCKS = 10;  //パターンテスト用のパレットブロックの数。最後の2個はテキストエリア用、残りはスプライト用
  1006:   public static final int[] vcnPal16G8 = new int[256];  //グラフィックパレット,変換前
  1007:   public static final int[] vcnPal16TS = new int[256 + 16 * VCN_PATTEST_BLOCKS];  //テキストスプライトパレット,変換前
  1008:   public static final int[] vcnPal32G8 = new int[256];  //グラフィックパレット,変換後
  1009:   public static final int[] vcnPal32TS = new int[256 + 16 * VCN_PATTEST_BLOCKS];  //テキストスプライトパレット,変換後
  1010:   //  65536色モードのパレット
  1011:   //    パレットコードが
  1012:   //      PH<<8|PL
  1013:   //    カラーコードが
  1014:   //      CHPH<<8|CLPL
  1015:   //    のとき
  1016:   //      CHPH = [$00E82002+((PH&$FE)<<1)+(PH&$01)].B
  1017:   //      CLPL = [$00E82000+((PL&$FE)<<1)+(PL&$01)].B
  1018:   //  $00E82000  CL00 CL01 CH00 CH01 CL02 CL03 CH02 CH03 CL04 CL05 CH04 CH05 CL06 CL07 CH06 CH07
  1019:   //  $00E82010  CL08 CL09 CH08 CH09 CL0A CL0B CH0A CH0B CL0C CL0D CH0C CH0D CL0E CL0F CH0E CH0F
  1020:   //  $00E82020  CL10 CL11 CH10 CH11 CL12 CL13 CH12 CH13 CL14 CL15 CH14 CH15 CL16 CL17 CH16 CH17
  1021:   //  $00E82030  CL18 CL19 CH18 CH19 CL1A CL1B CH1A CH1B CL1C CL1D CH1C CH1D CL1E CL1F CH1E CH1F
  1022:   //      :
  1023:   //  $00E821C0  CLE0 CLE1 CHE0 CHE1 CLE2 CLE3 CHE2 CHE3 CLE4 CLE5 CHE4 CHE5 CLE6 CLE7 CHE6 CHE7
  1024:   //  $00E821D0  CLE8 CLE9 CHE8 CHE9 CLEA CLEB CHEA CHEB CLEC CLED CHEC CHED CLEE CLEF CHEE CHEF
  1025:   //  $00E821E0  CLF0 CLF1 CHF0 CHF1 CLF2 CLF3 CHF2 CHF3 CLF4 CLF5 CHF4 CHF5 CLF6 CLF7 CHF6 CHF7
  1026:   //  $00E821F0  CLF8 CLF9 CHF8 CHF9 CLFA CLFB CHFA CHFB CLFC CLFD CHFC CHFD CLFE CLFF CHFE CHFF
  1027:   public static final int[] vcnPal8G16L = new int[256];  //65536色パレット下位。0x00??
  1028:   public static final int[] vcnPal8G16H = new int[256];  //65536色パレット上位。0x??00
  1029: 
  1030:   //ラスタ描画ルーチン
  1031:   //  vcnMode = vcnModeTable[-(vcnReg3Curr & 0x5000) & 0x10000 | (char) (vcnReg3Curr << 9) | vcnReg1Curr << 6 | vcnReg2Curr >> 8];
  1032:   public static final int AHEX = 0x10000;  //AHOn|ExOn
  1033:   public static final int SPON = 0x08000;  //SpOn
  1034:   public static final int TXON = 0x04000;  //TxOn
  1035:   public static final int GXON = 0x02000;  //GxOn
  1036:   public static final int G4ON = 0x01000;  //G4On
  1037:   public static final int G3ON = 0x00800;  //G3On
  1038:   public static final int G2ON = 0x00400;  //G2On
  1039:   public static final int G1ON = 0x00200;  //G1On
  1040:   //                             0x001c0     GrMM
  1041:   //                             0x00030     SpPr
  1042:   //                             0x0000c     TxPr
  1043:   //                             0x00003     GrPr
  1044:   public static final DrawingMode[] vcnModeTable = new DrawingMode[0x20000];
  1045:   public static DrawingMode vcnMode;
  1046: 
  1047:   //(512ドット)4bitページアドレス
  1048:   //  4bitパレットは下位バイトにあるのでアドレスに1を加えておく
  1049:   //  OFFのプレーンをダミー4bitページに接続する
  1050:   //  すべてのプレーンがOFFのときはグラフィック画面がOFFなので4bitページは参照されない
  1051:   public static int vcnHidden1st;  //1番目のプレーンの4bitページアドレス+1
  1052:   public static int vcnHidden2nd;  //2番目のプレーンの4bitページアドレス+1
  1053:   public static int vcnHidden3rd;  //3番目のプレーンの4bitページアドレス+1
  1054:   public static int vcnHidden4th;  //4番目のプレーンの4bitページアドレス+1
  1055:   public static int vcnVisible1st;  //1番目のプレーンの4bitページアドレス+1。OFFのときXEiJ.BUS_DUMMY_4BIT_PAGE+1
  1056:   public static int vcnVisible2nd;  //2番目のプレーンの4bitページアドレス+1。OFFのときXEiJ.BUS_DUMMY_4BIT_PAGE+1
  1057:   public static int vcnVisible3rd;  //3番目のプレーンの4bitページアドレス+1。OFFのときXEiJ.BUS_DUMMY_4BIT_PAGE+1
  1058:   public static int vcnVisible4th;  //4番目のプレーンの4bitページアドレス+1。OFFのときXEiJ.BUS_DUMMY_4BIT_PAGE+1
  1059: 
  1060:   //TVRAMの1プレーン水平8ピクセルのデータを32bitに引き伸ばすテーブル
  1061:   //  4プレーンのデータをそれぞれ引き伸ばして3,2,1,0の順にずらしてORすると4bitのパレットコードが8個並んだデータができる
  1062:   //  これを4bitずつ切り出してパレットテーブルを参照する
  1063:   //  Javaでは配列参照のオーバーヘッドが加わるが、それでも1bitずつ集めるよりも速い
  1064:   //  コードの長さも大幅に短縮できる
  1065:   //    VCN_TXP3[0bABCDEFGH] = 0bA000B000C000D000E000F000G000H000
  1066:   //    VCN_TXP2[0bABCDEFGH] = 0b0A000B000C000D000E000F000G000H00
  1067:   //    VCN_TXP1[0bABCDEFGH] = 0b00A000B000C000D000E000F000G000H0
  1068:   //    VCN_TXP0[0bABCDEFGH] = 0b000A000B000C000D000E000F000G000H
  1069:   //                           0bAAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH
  1070:   public static final int[] VCN_TXP0 = new int[256];
  1071:   public static final int[] VCN_TXP1 = new int[256];
  1072:   public static final int[] VCN_TXP2 = new int[256];
  1073:   public static final int[] VCN_TXP3 = new int[256];
  1074: 
  1075:   //未実装画面モード
  1076:   public static final HashSet<String> vcnUnimplementedSet = new HashSet<String> ();  //報告済みの画面モード
  1077: 
  1078:   //vcnInit ()
  1079:   //  ビデオコントローラを初期化する
  1080:   public static void vcnInit () {
  1081:     //TVRAMの1プレーン水平8ピクセルのデータを32bitに引き伸ばすテーブル
  1082:     for (int i = 0; i < 256; i++) {
  1083:       VCN_TXP3[i] = (VCN_TXP2[i] = (VCN_TXP1[i] = (VCN_TXP0[i] = (i << 28 - 7 & 0x10000000 |
  1084:                                                                   i << 24 - 6 & 0x01000000 |
  1085:                                                                   i << 20 - 5 & 0x00100000 |
  1086:                                                                   i << 16 - 4 & 0x00010000 |
  1087:                                                                   i << 12 - 3 & 0x00001000 |
  1088:                                                                   i <<  8 - 2 & 0x00000100 |
  1089:                                                                   i <<  4 - 1 & 0x00000010 |
  1090:                                                                   i           & 0x00000001)) << 1) << 1) << 1;
  1091:     }
  1092:     //パレット変換テーブル
  1093:     //vcnPalBase = new int[VCN_CONTRAST_SCALE * 15 + 1][];
  1094:     for (int c = 0; c <= VCN_CONTRAST_SCALE * 15; c++) {  //スケーリングされたコントラスト
  1095:       int max = Math.round (c * 255.0F / (VCN_CONTRAST_SCALE * 15));  //0~255
  1096:       int[] t = vcnPalBase[c] = new int[65536];
  1097:       for (int p = 0; p <= 0b11111_11111_11111_0; p += 2) {  //パレット65536色
  1098:         //perl optdiv.pl 16065 63
  1099:         //  x/63==x*16645>>>20 (0<=x<=17827) [16065*16645==267401925]
  1100:         t[p] = (255 << 24 |  //Alpha
  1101:                 (p >> 5 & 0b11111_0) * max * 16645 >>> 20 << 16 |  //Red
  1102:                 (p >> 10 & 0b11111_0) * max * 16645 >>> 20 << 8 |  //Green
  1103:                 (p & 0b11111_0) * max * 16645 >>> 20);  //Blue
  1104:         t[p + 1] = (255 << 24 |  //Alpha
  1105:                     (p >> 5 & 0b11111_0 | 1) * max * 16645 >>> 20 << 16 |  //Red
  1106:                     (p >> 10 & 0b11111_0 | 1) * max * 16645 >>> 20 << 8 |  //Green
  1107:                     (p & 0b11111_0 | 1) * max * 16645 >>> 20);  //Blue
  1108:       }
  1109:     }
  1110:     //vcnPal16G8 = new int[256];
  1111:     //Arrays.fill (vcnPal16G8, 0);
  1112:     //vcnPal16TS = new int[256 + 16 * VCN_PATTEST_BLOCKS];
  1113:     //Arrays.fill (vcnPal16TS, 0, 256 + 16 * VCN_PATTEST_BLOCKS, 0);
  1114:     //パターンテスト用のパレットブロックを作る
  1115:     //  余白を透明にするならなるべく中途半端な色にした方が読みやすい
  1116:     //  手前にある可能性の高いものを明るくする
  1117:     //    Sp0>=Sp1>=...>=Sp126>=Sp127>T0>T1
  1118:     for (int p = 0; p < VCN_PATTEST_BLOCKS; p++) {
  1119:       int i = 256 + (p << 4);
  1120:       int a = 31 - p * (31 - 4) / (VCN_PATTEST_BLOCKS - 1);  //0..VCN_PATTEST_BLOCKS-1 -> 31..4
  1121:       //int b = 22 - p * (22 - 4) / (VCN_PATTEST_BLOCKS - 1);  //0..VCN_PATTEST_BLOCKS-1 -> 22..4
  1122:       int b = 13 - p * (13 - 4) / (VCN_PATTEST_BLOCKS - 1);  //0..VCN_PATTEST_BLOCKS-1 -> 13..4
  1123:       vcnPal16TS[i    ] = 0 << 11 | 0 << 6 | 0 << 1;  //余白(透明)
  1124:       vcnPal16TS[i + 1] = b << 11 | b << 6 | a << 1;  //左上(青)
  1125:       vcnPal16TS[i + 2] = b << 11 | a << 6 | b << 1;  //左下(赤)
  1126:       vcnPal16TS[i + 3] = a << 11 | b << 6 | b << 1;  //右上(緑)
  1127:       vcnPal16TS[i + 4] = a << 11 | a << 6 | b << 1;  //右下(黄)
  1128:     }
  1129:     //vcnPal32G8 = new int[256];
  1130:     Arrays.fill (vcnPal32G8, 0xff000000);
  1131:     //vcnPal32TS = new int[256 + 16 * VCN_PATTEST_BLOCKS];
  1132:     Arrays.fill (vcnPal32TS, 0xff000000);
  1133:     //vcnPal8G16L = new int[256];
  1134:     //Arrays.fill (vcnPal8G16L, 0);
  1135:     //vcnPal8G16H = new int[256];
  1136:     //Arrays.fill (vcnPal8G16H, 0);
  1137: 
  1138:     vcnMakeTable0 (0);
  1139:     vcnMakeTable1 (1);
  1140:     vcnMakeTable3 (2);
  1141:     vcnMakeTable3 (3);
  1142:     vcnMakeTable4 (4);
  1143:     if (CRTC.CRT_EXTENDED_GRAPHIC && CRTC.crtExtendedGraphicRequest) {
  1144:       vcnMakeTable5 (5);
  1145:       vcnMakeTable7 (6);
  1146:       vcnMakeTable7 (7);
  1147:     } else {
  1148:       vcnMakeTable4 (5);
  1149:       vcnMakeTable4 (6);
  1150:       vcnMakeTable4 (7);
  1151:     }
  1152: 
  1153:     if (false) {
  1154:       for (int i = 0; i < 0x20000; i++) {
  1155:         if ((i & 63) == 0) {
  1156:           System.out.println ();
  1157:           System.out.println (" index   ............GrMM  ..SpTxGr........  .A.XHPGT.STx4321  prwMode");
  1158:           System.out.println ("-------  ----------------  ----------------  ----------------  -------");
  1159:         }
  1160:         System.out.printf ("0x%05x  .............%o%o%o  ..%o%o%o%o%o%o........  .%c.%c.....%o%o%o%o%o%o%o  %s\n",
  1161:                            i,  //index
  1162:                            i >>  8 & 1,  //GrMM
  1163:                            i >>  7 & 1,  //GrMM
  1164:                            i >>  6 & 1,  //GrMM
  1165:                            i >>  5 & 1, i >>  4 & 1,  //SpPr
  1166:                            i >>  3 & 1, i >>  2 & 1,  //TxPr
  1167:                            i >>  1 & 1, i       & 1,  //GrPr
  1168:                            i >> 16 == 0 ? '0' : '*',  //AH
  1169:                            i >> 16 == 0 ? '0' : '*',  //ExOn
  1170:                            i >> 15 & 1,  //SpOn
  1171:                            i >> 14 & 1,  //TxOn
  1172:                            i >> 13 & 1,  //GxOn
  1173:                            i >> 12 & 1,  //G4On
  1174:                            i >> 11 & 1,  //G3On
  1175:                            i >> 10 & 1,  //G2On
  1176:                            i >>  9 & 1,  //G1On
  1177:                            vcnModeTable[i]);
  1178:       }
  1179:     }
  1180: 
  1181:     vcnReset ();
  1182: 
  1183:   }  //vcnInit
  1184: 
  1185:   //vcnMakeTable0 (grmm)
  1186:   //  描画モード0のテーブルを作る
  1187:   public static void vcnMakeTable0 (int grmm) {
  1188:     //----------------------------------------------------------------------------------------
  1189:     //E  512ドット16色
  1190:     //              SpTx_GxOn       SpTx_GxOn
  1191:     for (int ii = 0b0000_0; ii <= 0b1111_1; ii++) {
  1192:       //                               GxOn               SpTx
  1193:       int i = grmm << 6 | (ii & 0b0000_1) << 13 | (ii & 0b1111_0) << 1;
  1194:       int s = i >> 4 & 3;
  1195:       int t = i >> 2 & 3;
  1196:       //----------------------------------------------------------------------------------------
  1197:       //GrPr==0
  1198:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  1199:       //N 表示画面なし
  1200:       vcnModeTable[                                                       i] = DrawingMode.N;
  1201:       vcnModeTable[      AHEX +                                           i] = DrawingMode.XN;
  1202:       //E1st 512ドット16色1プレーン>スプライト(OFF)>テキスト(OFF) → E1t 512ドット16色1プレーン>テキスト(OFF)
  1203:       //E1ts 512ドット16色1プレーン>テキスト(OFF)>スプライト(OFF) → E1t 512ドット16色1プレーン>テキスト(OFF)
  1204:       vcnModeTable[                                                G1ON + i] = DrawingMode.E1t;
  1205:       vcnModeTable[      AHEX +                                    G1ON + i] = DrawingMode.XE1t;
  1206:       //E2st 512ドット16色2プレーン>スプライト(OFF)>テキスト(OFF) → E2t 512ドット16色2プレーン>テキスト(OFF)
  1207:       //E2ts 512ドット16色2プレーン>テキスト(OFF)>スプライト(OFF) → E2t 512ドット16色2プレーン>テキスト(OFF)
  1208:       vcnModeTable[                                         G2ON +        i] = (
  1209:         vcnModeTable[                                       G2ON + G1ON + i] = DrawingMode.E2t);
  1210:       vcnModeTable[      AHEX +                             G2ON +        i] = (
  1211:         vcnModeTable[    AHEX +                             G2ON + G1ON + i] = DrawingMode.XE2t);
  1212:       //E3st 512ドット16色3プレーン>スプライト(OFF)>テキスト(OFF) → E3t 512ドット16色3プレーン>テキスト(OFF)
  1213:       //E3ts 512ドット16色3プレーン>テキスト(OFF)>スプライト(OFF) → E3t 512ドット16色3プレーン>テキスト(OFF)
  1214:       vcnModeTable[                                  G3ON +               i] = (
  1215:         vcnModeTable[                                G3ON +        G1ON + i] =
  1216:         vcnModeTable[                                G3ON + G2ON +        i] =
  1217:         vcnModeTable[                                G3ON + G2ON + G1ON + i] = DrawingMode.E3t);
  1218:       vcnModeTable[      AHEX +                      G3ON +               i] = (
  1219:         vcnModeTable[    AHEX +                      G3ON +        G1ON + i] =
  1220:         vcnModeTable[    AHEX +                      G3ON + G2ON +        i] =
  1221:         vcnModeTable[    AHEX +                      G3ON + G2ON + G1ON + i] = DrawingMode.XE3t);
  1222:       //E4st 512ドット16色4プレーン>スプライト(OFF)>テキスト(OFF) → E4t 512ドット16色4プレーン>テキスト(OFF)
  1223:       //E4ts 512ドット16色4プレーン>テキスト(OFF)>スプライト(OFF) → E4t 512ドット16色4プレーン>テキスト(OFF)
  1224:       vcnModeTable[                           G4ON +                      i] = (
  1225:         vcnModeTable[                         G4ON +               G1ON + i] =
  1226:         vcnModeTable[                         G4ON +        G2ON +        i] =
  1227:         vcnModeTable[                         G4ON +        G2ON + G1ON + i] =
  1228:         vcnModeTable[                         G4ON + G3ON +               i] =
  1229:         vcnModeTable[                         G4ON + G3ON +        G1ON + i] =
  1230:         vcnModeTable[                         G4ON + G3ON + G2ON +        i] =
  1231:         vcnModeTable[                         G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.E4t);
  1232:       vcnModeTable[      AHEX +               G4ON +                      i] = (
  1233:         vcnModeTable[    AHEX +               G4ON +               G1ON + i] =
  1234:         vcnModeTable[    AHEX +               G4ON +        G2ON +        i] =
  1235:         vcnModeTable[    AHEX +               G4ON +        G2ON + G1ON + i] =
  1236:         vcnModeTable[    AHEX +               G4ON + G3ON +               i] =
  1237:         vcnModeTable[    AHEX +               G4ON + G3ON +        G1ON + i] =
  1238:         vcnModeTable[    AHEX +               G4ON + G3ON + G2ON +        i] =
  1239:         vcnModeTable[    AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XE4t);
  1240:       //T テキスト
  1241:       vcnModeTable[                    TXON +                             i] = DrawingMode.T;
  1242:       vcnModeTable[      AHEX +        TXON +                             i] = DrawingMode.XT;
  1243:       //E1sT 512ドット16色1プレーン>スプライト(OFF)>テキスト → E1T 512ドット16色1プレーン>テキスト
  1244:       //E1Ts 512ドット16色1プレーン>テキスト>スプライト(OFF) → E1T 512ドット16色1プレーン>テキスト
  1245:       vcnModeTable[                    TXON +                      G1ON + i] = DrawingMode.E1T;
  1246:       vcnModeTable[      AHEX +        TXON +                      G1ON + i] = DrawingMode.XE1T;
  1247:       //E2sT 512ドット16色2プレーン>スプライト(OFF)>テキスト → E2T 512ドット16色2プレーン>テキスト
  1248:       //E2Ts 512ドット16色2プレーン>テキスト>スプライト(OFF) → E2T 512ドット16色2プレーン>テキスト
  1249:       vcnModeTable[                    TXON +               G2ON +        i] = (
  1250:         vcnModeTable[                  TXON +               G2ON + G1ON + i] = DrawingMode.E2T);
  1251:       vcnModeTable[      AHEX +        TXON +               G2ON +        i] = (
  1252:         vcnModeTable[    AHEX +        TXON +               G2ON + G1ON + i] = DrawingMode.XE2T);
  1253:       //E3sT 512ドット16色3プレーン>スプライト(OFF)>テキスト → E3T 512ドット16色3プレーン>テキスト
  1254:       //E3Ts 512ドット16色3プレーン>テキスト>スプライト(OFF) → E3T 512ドット16色3プレーン>テキスト
  1255:       vcnModeTable[                    TXON +        G3ON +               i] = (
  1256:         vcnModeTable[                  TXON +        G3ON +        G1ON + i] =
  1257:         vcnModeTable[                  TXON +        G3ON + G2ON +        i] =
  1258:         vcnModeTable[                  TXON +        G3ON + G2ON + G1ON + i] = DrawingMode.E3T);
  1259:       vcnModeTable[      AHEX +        TXON +        G3ON +               i] = (
  1260:         vcnModeTable[    AHEX +        TXON +        G3ON +        G1ON + i] =
  1261:         vcnModeTable[    AHEX +        TXON +        G3ON + G2ON +        i] =
  1262:         vcnModeTable[    AHEX +        TXON +        G3ON + G2ON + G1ON + i] = DrawingMode.XE3T);
  1263:       //E4sT 512ドット16色4プレーン>スプライト(OFF)>テキスト → E4T 512ドット16色4プレーン>テキスト
  1264:       //E4Ts 512ドット16色4プレーン>テキスト>スプライト(OFF) → E4T 512ドット16色4プレーン>テキスト
  1265:       vcnModeTable[                    TXON + G4ON +                      i] = (
  1266:         vcnModeTable[                  TXON + G4ON +               G1ON + i] =
  1267:         vcnModeTable[                  TXON + G4ON +        G2ON +        i] =
  1268:         vcnModeTable[                  TXON + G4ON +        G2ON + G1ON + i] =
  1269:         vcnModeTable[                  TXON + G4ON + G3ON +               i] =
  1270:         vcnModeTable[                  TXON + G4ON + G3ON +        G1ON + i] =
  1271:         vcnModeTable[                  TXON + G4ON + G3ON + G2ON +        i] =
  1272:         vcnModeTable[                  TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.E4T);
  1273:       vcnModeTable[      AHEX +        TXON + G4ON +                      i] = (
  1274:         vcnModeTable[    AHEX +        TXON + G4ON +               G1ON + i] =
  1275:         vcnModeTable[    AHEX +        TXON + G4ON +        G2ON +        i] =
  1276:         vcnModeTable[    AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  1277:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON +               i] =
  1278:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  1279:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  1280:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XE4T);
  1281:       //S スプライト
  1282:       vcnModeTable[             SPON +                                    i] = DrawingMode.S;
  1283:       vcnModeTable[      AHEX + SPON +                                    i] = DrawingMode.XS;
  1284:       //E1St 512ドット16色1プレーン>スプライト>テキスト(OFF) → E1S 512ドット16色1プレーン>スプライト
  1285:       //E1tS 512ドット16色1プレーン>テキスト(OFF)>スプライト → E1S 512ドット16色1プレーン>スプライト
  1286:       vcnModeTable[             SPON +                             G1ON + i] = DrawingMode.E1S;
  1287:       vcnModeTable[      AHEX + SPON +                             G1ON + i] = DrawingMode.XE1S;
  1288:       //E2St 512ドット16色2プレーン>スプライト>テキスト(OFF) → E2S 512ドット16色2プレーン>スプライト
  1289:       //E2tS 512ドット16色2プレーン>テキスト(OFF)>スプライト → E2S 512ドット16色2プレーン>スプライト
  1290:       vcnModeTable[             SPON +                      G2ON +        i] = (
  1291:         vcnModeTable[           SPON +                      G2ON + G1ON + i] = DrawingMode.E2S);
  1292:       vcnModeTable[      AHEX + SPON +                      G2ON +        i] = (
  1293:         vcnModeTable[    AHEX + SPON +                      G2ON + G1ON + i] = DrawingMode.XE2S);
  1294:       //E3St 512ドット16色3プレーン>スプライト>テキスト(OFF) → E3S 512ドット16色3プレーン>スプライト
  1295:       //E3tS 512ドット16色3プレーン>テキスト(OFF)>スプライト → E3S 512ドット16色3プレーン>スプライト
  1296:       vcnModeTable[             SPON +               G3ON +               i] = (
  1297:         vcnModeTable[           SPON +               G3ON +        G1ON + i] =
  1298:         vcnModeTable[           SPON +               G3ON + G2ON +        i] =
  1299:         vcnModeTable[           SPON +               G3ON + G2ON + G1ON + i] = DrawingMode.E3S);
  1300:       vcnModeTable[      AHEX + SPON +               G3ON +               i] = (
  1301:         vcnModeTable[    AHEX + SPON +               G3ON +        G1ON + i] =
  1302:         vcnModeTable[    AHEX + SPON +               G3ON + G2ON +        i] =
  1303:         vcnModeTable[    AHEX + SPON +               G3ON + G2ON + G1ON + i] = DrawingMode.XE3S);
  1304:       //E4St 512ドット16色4プレーン>スプライト>テキスト(OFF) → E4S 512ドット16色4プレーン>スプライト
  1305:       //E4tS 512ドット16色4プレーン>テキスト(OFF)>スプライト → E4S 512ドット16色4プレーン>スプライト
  1306:       vcnModeTable[             SPON +        G4ON +                      i] = (
  1307:         vcnModeTable[           SPON +        G4ON +               G1ON + i] =
  1308:         vcnModeTable[           SPON +        G4ON +        G2ON +        i] =
  1309:         vcnModeTable[           SPON +        G4ON +        G2ON + G1ON + i] =
  1310:         vcnModeTable[           SPON +        G4ON + G3ON +               i] =
  1311:         vcnModeTable[           SPON +        G4ON + G3ON +        G1ON + i] =
  1312:         vcnModeTable[           SPON +        G4ON + G3ON + G2ON +        i] =
  1313:         vcnModeTable[           SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.E4S);
  1314:       vcnModeTable[      AHEX + SPON +        G4ON +                      i] = (
  1315:         vcnModeTable[    AHEX + SPON +        G4ON +               G1ON + i] =
  1316:         vcnModeTable[    AHEX + SPON +        G4ON +        G2ON +        i] =
  1317:         vcnModeTable[    AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  1318:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON +               i] =
  1319:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  1320:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  1321:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XE4S);
  1322:       //ST スプライト>テキスト
  1323:       //TS テキスト>スプライト
  1324:       vcnModeTable[             SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  1325:       vcnModeTable[      AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  1326:       //E1ST 512ドット16色1プレーン>スプライト>テキスト
  1327:       //E1TS 512ドット16色1プレーン>テキスト>スプライト
  1328:       vcnModeTable[             SPON + TXON +                      G1ON + i] = s < t ? DrawingMode.E1ST : DrawingMode.E1TS;
  1329:       vcnModeTable[      AHEX + SPON + TXON +                      G1ON + i] = s < t ? DrawingMode.XE1ST : DrawingMode.XE1TS;
  1330:       //E2ST 512ドット16色2プレーン>スプライト>テキスト
  1331:       //E2TS 512ドット16色2プレーン>テキスト>スプライト
  1332:       vcnModeTable[             SPON + TXON +               G2ON +        i] = (
  1333:         vcnModeTable[           SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.E2ST : DrawingMode.E2TS);
  1334:       vcnModeTable[      AHEX + SPON + TXON +               G2ON +        i] = (
  1335:         vcnModeTable[    AHEX + SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XE2ST : DrawingMode.XE2TS);
  1336:       //E3ST 512ドット16色3プレーン>スプライト>テキスト
  1337:       //E3TS 512ドット16色3プレーン>テキスト>スプライト
  1338:       vcnModeTable[             SPON + TXON +        G3ON +               i] = (
  1339:         vcnModeTable[           SPON + TXON +        G3ON +        G1ON + i] =
  1340:         vcnModeTable[           SPON + TXON +        G3ON + G2ON +        i] =
  1341:         vcnModeTable[           SPON + TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.E3ST : DrawingMode.E3TS);
  1342:       vcnModeTable[      AHEX + SPON + TXON +        G3ON +               i] = (
  1343:         vcnModeTable[    AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  1344:         vcnModeTable[    AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  1345:         vcnModeTable[    AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XE3ST : DrawingMode.XE3TS);
  1346:       //E4ST 512ドット16色4プレーン>スプライト>テキスト
  1347:       //E4TS 512ドット16色4プレーン>テキスト>スプライト
  1348:       vcnModeTable[             SPON + TXON + G4ON +                      i] = (
  1349:         vcnModeTable[           SPON + TXON + G4ON +               G1ON + i] =
  1350:         vcnModeTable[           SPON + TXON + G4ON +        G2ON +        i] =
  1351:         vcnModeTable[           SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1352:         vcnModeTable[           SPON + TXON + G4ON + G3ON +               i] =
  1353:         vcnModeTable[           SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1354:         vcnModeTable[           SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1355:         vcnModeTable[           SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.E4ST : DrawingMode.E4TS);
  1356:       vcnModeTable[      AHEX + SPON + TXON + G4ON +                      i] = (
  1357:         vcnModeTable[    AHEX + SPON + TXON + G4ON +               G1ON + i] =
  1358:         vcnModeTable[    AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  1359:         vcnModeTable[    AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1360:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON +               i] =
  1361:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1362:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1363:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XE4ST : DrawingMode.XE4TS);
  1364:       //----------------------------------------------------------------------------------------
  1365:       //GrPr==1
  1366:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  1367:       //N 表示画面なし
  1368:       vcnModeTable[  1 +                                                  i] = DrawingMode.N;
  1369:       vcnModeTable[  1 + AHEX +                                           i] = DrawingMode.XN;
  1370:       //sE1t スプライト(OFF)>512ドット16色1プレーン>テキスト(OFF) → E1t 512ドット16色1プレーン>テキスト(OFF)
  1371:       //tE1s テキスト(OFF)>512ドット16色1プレーン>スプライト(OFF) → E1t 512ドット16色1プレーン>テキスト(OFF)
  1372:       vcnModeTable[  1 +                                           G1ON + i] = DrawingMode.E1t;
  1373:       vcnModeTable[  1 + AHEX +                                    G1ON + i] = DrawingMode.XE1t;
  1374:       //sE2t スプライト(OFF)>512ドット16色2プレーン>テキスト(OFF) → E2t 512ドット16色2プレーン>テキスト(OFF)
  1375:       //tE2s テキスト(OFF)>512ドット16色2プレーン>スプライト(OFF) → E2t 512ドット16色2プレーン>テキスト(OFF)
  1376:       vcnModeTable[  1 +                                    G2ON +        i] = (
  1377:         vcnModeTable[1 +                                    G2ON + G1ON + i] = DrawingMode.E2t);
  1378:       vcnModeTable[  1 + AHEX +                             G2ON +        i] = (
  1379:         vcnModeTable[1 + AHEX +                             G2ON + G1ON + i] = DrawingMode.XE2t);
  1380:       //sE3t スプライト(OFF)>512ドット16色3プレーン>テキスト(OFF) → E3t 512ドット16色3プレーン>テキスト(OFF)
  1381:       //tE3s テキスト(OFF)>512ドット16色3プレーン>スプライト(OFF) → E3t 512ドット16色3プレーン>テキスト(OFF)
  1382:       vcnModeTable[  1 +                             G3ON +               i] = (
  1383:         vcnModeTable[1 +                             G3ON +        G1ON + i] =
  1384:         vcnModeTable[1 +                             G3ON + G2ON +        i] =
  1385:         vcnModeTable[1 +                             G3ON + G2ON + G1ON + i] = DrawingMode.E3t);
  1386:       vcnModeTable[  1 + AHEX +                      G3ON +               i] = (
  1387:         vcnModeTable[1 + AHEX +                      G3ON +        G1ON + i] =
  1388:         vcnModeTable[1 + AHEX +                      G3ON + G2ON +        i] =
  1389:         vcnModeTable[1 + AHEX +                      G3ON + G2ON + G1ON + i] = DrawingMode.XE3t);
  1390:       //sE4t スプライト(OFF)>512ドット16色4プレーン>テキスト(OFF) → E4t 512ドット16色4プレーン>テキスト(OFF)
  1391:       //tE4s テキスト(OFF)>512ドット16色4プレーン>スプライト(OFF) → E4t 512ドット16色4プレーン>テキスト(OFF)
  1392:       vcnModeTable[  1 +                      G4ON +                      i] = (
  1393:         vcnModeTable[1 +                      G4ON +               G1ON + i] =
  1394:         vcnModeTable[1 +                      G4ON +        G2ON +        i] =
  1395:         vcnModeTable[1 +                      G4ON +        G2ON + G1ON + i] =
  1396:         vcnModeTable[1 +                      G4ON + G3ON +               i] =
  1397:         vcnModeTable[1 +                      G4ON + G3ON +        G1ON + i] =
  1398:         vcnModeTable[1 +                      G4ON + G3ON + G2ON +        i] =
  1399:         vcnModeTable[1 +                      G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.E4t);
  1400:       vcnModeTable[  1 + AHEX +               G4ON +                      i] = (
  1401:         vcnModeTable[1 + AHEX +               G4ON +               G1ON + i] =
  1402:         vcnModeTable[1 + AHEX +               G4ON +        G2ON +        i] =
  1403:         vcnModeTable[1 + AHEX +               G4ON +        G2ON + G1ON + i] =
  1404:         vcnModeTable[1 + AHEX +               G4ON + G3ON +               i] =
  1405:         vcnModeTable[1 + AHEX +               G4ON + G3ON +        G1ON + i] =
  1406:         vcnModeTable[1 + AHEX +               G4ON + G3ON + G2ON +        i] =
  1407:         vcnModeTable[1 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XE4t);
  1408:       //T テキスト
  1409:       vcnModeTable[  1 +               TXON +                             i] = DrawingMode.T;
  1410:       vcnModeTable[  1 + AHEX +        TXON +                             i] = DrawingMode.XT;
  1411:       //sE1T スプライト(OFF)>512ドット16色1プレーン>テキスト → E1T 512ドット16色1プレーン>テキスト
  1412:       //TE1s テキスト>512ドット16色1プレーン>スプライト(OFF)
  1413:       vcnModeTable[  1 +               TXON +                      G1ON + i] = s < t ? DrawingMode.E1T : DrawingMode.TE1s;
  1414:       vcnModeTable[  1 + AHEX +        TXON +                      G1ON + i] = s < t ? DrawingMode.XE1T : DrawingMode.XTE1s;
  1415:       //sE2T スプライト(OFF)>512ドット16色2プレーン>テキスト → E2T 512ドット16色2プレーン>テキスト
  1416:       //TE2s テキスト>512ドット16色2プレーン>スプライト(OFF)
  1417:       vcnModeTable[  1 +               TXON +               G2ON +        i] = (
  1418:         vcnModeTable[1 +               TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.E2T : DrawingMode.TE2s);
  1419:       vcnModeTable[  1 + AHEX +        TXON +               G2ON +        i] = (
  1420:         vcnModeTable[1 + AHEX +        TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XE2T : DrawingMode.XTE2s);
  1421:       //sE3T スプライト(OFF)>512ドット16色3プレーン>テキスト → E3T 512ドット16色3プレーン>テキスト
  1422:       //TE3s テキスト>512ドット16色3プレーン>スプライト(OFF)
  1423:       vcnModeTable[  1 +               TXON +        G3ON +               i] = (
  1424:         vcnModeTable[1 +               TXON +        G3ON +        G1ON + i] =
  1425:         vcnModeTable[1 +               TXON +        G3ON + G2ON +        i] =
  1426:         vcnModeTable[1 +               TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.E3T : DrawingMode.TE3s);
  1427:       vcnModeTable[  1 + AHEX +        TXON +        G3ON +               i] = (
  1428:         vcnModeTable[1 + AHEX +        TXON +        G3ON +        G1ON + i] =
  1429:         vcnModeTable[1 + AHEX +        TXON +        G3ON + G2ON +        i] =
  1430:         vcnModeTable[1 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XE3T : DrawingMode.XTE3s);
  1431:       //sE4T スプライト(OFF)>512ドット16色4プレーン>テキスト → E4T 512ドット16色4プレーン>テキスト
  1432:       //TE4s テキスト>512ドット16色4プレーン>スプライト(OFF)
  1433:       vcnModeTable[  1 +               TXON + G4ON +                      i] = (
  1434:         vcnModeTable[1 +               TXON + G4ON +               G1ON + i] =
  1435:         vcnModeTable[1 +               TXON + G4ON +        G2ON +        i] =
  1436:         vcnModeTable[1 +               TXON + G4ON +        G2ON + G1ON + i] =
  1437:         vcnModeTable[1 +               TXON + G4ON + G3ON +               i] =
  1438:         vcnModeTable[1 +               TXON + G4ON + G3ON +        G1ON + i] =
  1439:         vcnModeTable[1 +               TXON + G4ON + G3ON + G2ON +        i] =
  1440:         vcnModeTable[1 +               TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.E4T : DrawingMode.TE4s);
  1441:       vcnModeTable[  1 + AHEX +        TXON + G4ON +                      i] = (
  1442:         vcnModeTable[1 + AHEX +        TXON + G4ON +               G1ON + i] =
  1443:         vcnModeTable[1 + AHEX +        TXON + G4ON +        G2ON +        i] =
  1444:         vcnModeTable[1 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  1445:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON +               i] =
  1446:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  1447:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  1448:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XE4T : DrawingMode.XTE4s);
  1449:       //S スプライト
  1450:       vcnModeTable[  1 +        SPON +                                    i] = DrawingMode.S;
  1451:       vcnModeTable[  1 + AHEX + SPON +                                    i] = DrawingMode.XS;
  1452:       //SE1t スプライト>512ドット16色1プレーン>テキスト(OFF)
  1453:       //tE1S テキスト(OFF)>512ドット16色1プレーン>スプライト → E1S 512ドット16色1プレーン>スプライト
  1454:       vcnModeTable[  1 +        SPON +                             G1ON + i] = s < t ? DrawingMode.SE1t : DrawingMode.E1S;
  1455:       vcnModeTable[  1 + AHEX + SPON +                             G1ON + i] = s < t ? DrawingMode.XSE1t : DrawingMode.XE1S;
  1456:       //SE2t スプライト>512ドット16色2プレーン>テキスト(OFF)
  1457:       //tE2S テキスト(OFF)>512ドット16色2プレーン>スプライト → E2S 512ドット16色2プレーン>スプライト
  1458:       vcnModeTable[  1 +        SPON +                      G2ON +        i] = (
  1459:         vcnModeTable[1 +        SPON +                      G2ON + G1ON + i] = s < t ? DrawingMode.SE2t : DrawingMode.E2S);
  1460:       vcnModeTable[  1 + AHEX + SPON +                      G2ON +        i] = (
  1461:         vcnModeTable[1 + AHEX + SPON +                      G2ON + G1ON + i] = s < t ? DrawingMode.XSE2t : DrawingMode.XE2S);
  1462:       //SE3t スプライト>512ドット16色3プレーン>テキスト(OFF)
  1463:       //tE3S テキスト(OFF)>512ドット16色3プレーン>スプライト → E3S 512ドット16色3プレーン>スプライト
  1464:       vcnModeTable[  1 +        SPON +               G3ON +               i] = (
  1465:         vcnModeTable[1 +        SPON +               G3ON +        G1ON + i] =
  1466:         vcnModeTable[1 +        SPON +               G3ON + G2ON +        i] =
  1467:         vcnModeTable[1 +        SPON +               G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SE3t : DrawingMode.E3S);
  1468:       vcnModeTable[  1 + AHEX + SPON +               G3ON +               i] = (
  1469:         vcnModeTable[1 + AHEX + SPON +               G3ON +        G1ON + i] =
  1470:         vcnModeTable[1 + AHEX + SPON +               G3ON + G2ON +        i] =
  1471:         vcnModeTable[1 + AHEX + SPON +               G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSE3t : DrawingMode.XE3S);
  1472:       //SE4t スプライト>512ドット16色4プレーン>テキスト(OFF)
  1473:       //tE4S テキスト(OFF)>512ドット16色4プレーン>スプライト → E4S 512ドット16色4プレーン>スプライト
  1474:       vcnModeTable[  1 +        SPON +        G4ON +                      i] = (
  1475:         vcnModeTable[1 +        SPON +        G4ON +               G1ON + i] =
  1476:         vcnModeTable[1 +        SPON +        G4ON +        G2ON +        i] =
  1477:         vcnModeTable[1 +        SPON +        G4ON +        G2ON + G1ON + i] =
  1478:         vcnModeTable[1 +        SPON +        G4ON + G3ON +               i] =
  1479:         vcnModeTable[1 +        SPON +        G4ON + G3ON +        G1ON + i] =
  1480:         vcnModeTable[1 +        SPON +        G4ON + G3ON + G2ON +        i] =
  1481:         vcnModeTable[1 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SE4t : DrawingMode.E4S);
  1482:       vcnModeTable[  1 + AHEX + SPON +        G4ON +                      i] = (
  1483:         vcnModeTable[1 + AHEX + SPON +        G4ON +               G1ON + i] =
  1484:         vcnModeTable[1 + AHEX + SPON +        G4ON +        G2ON +        i] =
  1485:         vcnModeTable[1 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  1486:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON +               i] =
  1487:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  1488:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  1489:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSE4t : DrawingMode.XE4S);
  1490:       //ST スプライト>テキスト
  1491:       //TS テキスト>スプライト
  1492:       vcnModeTable[  1 +        SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  1493:       vcnModeTable[  1 + AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  1494:       //SE1T スプライト>512ドット16色1プレーン>テキスト
  1495:       //TE1S テキスト>512ドット16色1プレーン>スプライト
  1496:       vcnModeTable[  1 +        SPON + TXON +                      G1ON + i] = s < t ? DrawingMode.SE1T : DrawingMode.TE1S;
  1497:       vcnModeTable[  1 + AHEX + SPON + TXON +                      G1ON + i] = s < t ? DrawingMode.XSE1T : DrawingMode.XTE1S;
  1498:       //SE2T スプライト>512ドット16色2プレーン>テキスト
  1499:       //TE2S テキスト>512ドット16色2プレーン>スプライト
  1500:       vcnModeTable[  1 +        SPON + TXON +               G2ON +        i] = (
  1501:         vcnModeTable[1 +        SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.SE2T : DrawingMode.TE2S);
  1502:       vcnModeTable[  1 + AHEX + SPON + TXON +               G2ON +        i] = (
  1503:         vcnModeTable[1 + AHEX + SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XSE2T : DrawingMode.XTE2S);
  1504:       //SE3T スプライト>512ドット16色3プレーン>テキスト
  1505:       //TE3S テキスト>512ドット16色3プレーン>スプライト
  1506:       vcnModeTable[  1 +        SPON + TXON +        G3ON +               i] = (
  1507:         vcnModeTable[1 +        SPON + TXON +        G3ON +        G1ON + i] =
  1508:         vcnModeTable[1 +        SPON + TXON +        G3ON + G2ON +        i] =
  1509:         vcnModeTable[1 +        SPON + TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SE3T : DrawingMode.TE3S);
  1510:       vcnModeTable[  1 + AHEX + SPON + TXON +        G3ON +               i] = (
  1511:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  1512:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  1513:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSE3T : DrawingMode.XTE3S);
  1514:       //SE4T スプライト>512ドット16色4プレーン>テキスト
  1515:       //TE4S テキスト>512ドット16色4プレーン>スプライト
  1516:       vcnModeTable[  1 +        SPON + TXON + G4ON +                      i] = (
  1517:         vcnModeTable[1 +        SPON + TXON + G4ON +               G1ON + i] =
  1518:         vcnModeTable[1 +        SPON + TXON + G4ON +        G2ON +        i] =
  1519:         vcnModeTable[1 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1520:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON +               i] =
  1521:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1522:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1523:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SE4T : DrawingMode.TE4S);
  1524:       vcnModeTable[  1 + AHEX + SPON + TXON + G4ON +                      i] = (
  1525:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  1526:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  1527:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1528:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  1529:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1530:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1531:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSE4T : DrawingMode.XTE4S);
  1532:       //----------------------------------------------------------------------------------------
  1533:       //GrPr==2
  1534:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  1535:       //N 表示画面なし
  1536:       vcnModeTable[  2 +                                                  i] = DrawingMode.N;
  1537:       vcnModeTable[  2 + AHEX +                                           i] = DrawingMode.XN;
  1538:       //stE1 スプライト(OFF)>テキスト(OFF)>512ドット16色1プレーン → E1 512ドット16色1プレーン
  1539:       //tsE1 テキスト(OFF)>スプライト(OFF)>512ドット16色1プレーン → E1 512ドット16色1プレーン
  1540:       vcnModeTable[  2 +                                           G1ON + i] = DrawingMode.E1;
  1541:       vcnModeTable[  2 + AHEX +                                    G1ON + i] = DrawingMode.XE1;
  1542:       //stE2 スプライト(OFF)>テキスト(OFF)>512ドット16色2プレーン → E2 512ドット16色2プレーン
  1543:       //tsE2 テキスト(OFF)>スプライト(OFF)>512ドット16色2プレーン → E2 512ドット16色2プレーン
  1544:       vcnModeTable[  2 +                                    G2ON +        i] = (
  1545:         vcnModeTable[2 +                                    G2ON + G1ON + i] = DrawingMode.E2);
  1546:       vcnModeTable[  2 + AHEX +                             G2ON +        i] = (
  1547:         vcnModeTable[2 + AHEX +                             G2ON + G1ON + i] = DrawingMode.XE2);
  1548:       //stE3 スプライト(OFF)>テキスト(OFF)>512ドット16色3プレーン → E3 512ドット16色3プレーン
  1549:       //tsE3 テキスト(OFF)>スプライト(OFF)>512ドット16色3プレーン → E3 512ドット16色3プレーン
  1550:       vcnModeTable[  2 +                             G3ON +               i] = (
  1551:         vcnModeTable[2 +                             G3ON +        G1ON + i] =
  1552:         vcnModeTable[2 +                             G3ON + G2ON +        i] =
  1553:         vcnModeTable[2 +                             G3ON + G2ON + G1ON + i] = DrawingMode.E3);
  1554:       vcnModeTable[  2 + AHEX +                      G3ON +               i] = (
  1555:         vcnModeTable[2 + AHEX +                      G3ON +        G1ON + i] =
  1556:         vcnModeTable[2 + AHEX +                      G3ON + G2ON +        i] =
  1557:         vcnModeTable[2 + AHEX +                      G3ON + G2ON + G1ON + i] = DrawingMode.XE3);
  1558:       //stE4 スプライト(OFF)>テキスト(OFF)>512ドット16色4プレーン → E4 512ドット16色4プレーン
  1559:       //tsE4 テキスト(OFF)>スプライト(OFF)>512ドット16色4プレーン → E4 512ドット16色4プレーン
  1560:       vcnModeTable[  2 +                      G4ON +                      i] = (
  1561:         vcnModeTable[2 +                      G4ON +               G1ON + i] =
  1562:         vcnModeTable[2 +                      G4ON +        G2ON +        i] =
  1563:         vcnModeTable[2 +                      G4ON +        G2ON + G1ON + i] =
  1564:         vcnModeTable[2 +                      G4ON + G3ON +               i] =
  1565:         vcnModeTable[2 +                      G4ON + G3ON +        G1ON + i] =
  1566:         vcnModeTable[2 +                      G4ON + G3ON + G2ON +        i] =
  1567:         vcnModeTable[2 +                      G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.E4);
  1568:       vcnModeTable[  2 + AHEX +               G4ON +                      i] = (
  1569:         vcnModeTable[2 + AHEX +               G4ON +               G1ON + i] =
  1570:         vcnModeTable[2 + AHEX +               G4ON +        G2ON +        i] =
  1571:         vcnModeTable[2 + AHEX +               G4ON +        G2ON + G1ON + i] =
  1572:         vcnModeTable[2 + AHEX +               G4ON + G3ON +               i] =
  1573:         vcnModeTable[2 + AHEX +               G4ON + G3ON +        G1ON + i] =
  1574:         vcnModeTable[2 + AHEX +               G4ON + G3ON + G2ON +        i] =
  1575:         vcnModeTable[2 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XE4);
  1576:       //T テキスト
  1577:       vcnModeTable[  2 +               TXON +                             i] = DrawingMode.T;
  1578:       vcnModeTable[  2 + AHEX +        TXON +                             i] = DrawingMode.XT;
  1579:       //sTE1 スプライト(OFF)>テキスト>512ドット16色1プレーン → TE1 テキスト>512ドット16色1プレーン
  1580:       //TsE1 テキスト>スプライト(OFF)>512ドット16色1プレーン → TE1 テキスト>512ドット16色1プレーン
  1581:       vcnModeTable[  2 +               TXON +                      G1ON + i] = DrawingMode.TE1;
  1582:       vcnModeTable[  2 + AHEX +        TXON +                      G1ON + i] = DrawingMode.XTE1;
  1583:       //sTE2 スプライト(OFF)>テキスト>512ドット16色2プレーン → TE2 テキスト>512ドット16色2プレーン
  1584:       //TsE2 テキスト>スプライト(OFF)>512ドット16色2プレーン → TE2 テキスト>512ドット16色2プレーン
  1585:       vcnModeTable[  2 +               TXON +               G2ON +        i] = (
  1586:         vcnModeTable[2 +               TXON +               G2ON + G1ON + i] = DrawingMode.TE2);
  1587:       vcnModeTable[  2 + AHEX +        TXON +               G2ON +        i] = (
  1588:         vcnModeTable[2 + AHEX +        TXON +               G2ON + G1ON + i] = DrawingMode.XTE2);
  1589:       //sTE3 スプライト(OFF)>テキスト>512ドット16色3プレーン → TE3 テキスト>512ドット16色3プレーン
  1590:       //TsE3 テキスト>スプライト(OFF)>512ドット16色3プレーン → TE3 テキスト>512ドット16色3プレーン
  1591:       vcnModeTable[  2 +               TXON +        G3ON +               i] = (
  1592:         vcnModeTable[2 +               TXON +        G3ON +        G1ON + i] =
  1593:         vcnModeTable[2 +               TXON +        G3ON + G2ON +        i] =
  1594:         vcnModeTable[2 +               TXON +        G3ON + G2ON + G1ON + i] = DrawingMode.TE3);
  1595:       vcnModeTable[  2 + AHEX +        TXON +        G3ON +               i] = (
  1596:         vcnModeTable[2 + AHEX +        TXON +        G3ON +        G1ON + i] =
  1597:         vcnModeTable[2 + AHEX +        TXON +        G3ON + G2ON +        i] =
  1598:         vcnModeTable[2 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] = DrawingMode.XTE3);
  1599:       //sTE4 スプライト(OFF)>テキスト>512ドット16色4プレーン → TE4 テキスト>512ドット16色4プレーン
  1600:       //TsE4 テキスト>スプライト(OFF)>512ドット16色4プレーン → TE4 テキスト>512ドット16色4プレーン
  1601:       vcnModeTable[  2 +               TXON + G4ON +                      i] = (
  1602:         vcnModeTable[2 +               TXON + G4ON +               G1ON + i] =
  1603:         vcnModeTable[2 +               TXON + G4ON +        G2ON +        i] =
  1604:         vcnModeTable[2 +               TXON + G4ON +        G2ON + G1ON + i] =
  1605:         vcnModeTable[2 +               TXON + G4ON + G3ON +               i] =
  1606:         vcnModeTable[2 +               TXON + G4ON + G3ON +        G1ON + i] =
  1607:         vcnModeTable[2 +               TXON + G4ON + G3ON + G2ON +        i] =
  1608:         vcnModeTable[2 +               TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.TE4);
  1609:       vcnModeTable[  2 + AHEX +        TXON + G4ON +                      i] = (
  1610:         vcnModeTable[2 + AHEX +        TXON + G4ON +               G1ON + i] =
  1611:         vcnModeTable[2 + AHEX +        TXON + G4ON +        G2ON +        i] =
  1612:         vcnModeTable[2 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  1613:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON +               i] =
  1614:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  1615:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  1616:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XTE4);
  1617:       //S スプライト
  1618:       vcnModeTable[  2 +        SPON +                                    i] = DrawingMode.S;
  1619:       vcnModeTable[  2 + AHEX + SPON +                                    i] = DrawingMode.XS;
  1620:       //StE1 スプライト>テキスト(OFF)>512ドット16色1プレーン → SE1 スプライト>512ドット16色1プレーン
  1621:       //tSE1 テキスト(OFF)>スプライト>512ドット16色1プレーン → SE1 スプライト>512ドット16色1プレーン
  1622:       vcnModeTable[  2 +        SPON +                             G1ON + i] = DrawingMode.SE1;
  1623:       vcnModeTable[  2 + AHEX + SPON +                             G1ON + i] = DrawingMode.XSE1;
  1624:       //StE2 スプライト>テキスト(OFF)>512ドット16色2プレーン → SE2 スプライト>512ドット16色2プレーン
  1625:       //tSE2 テキスト(OFF)>スプライト>512ドット16色2プレーン → SE2 スプライト>512ドット16色2プレーン
  1626:       vcnModeTable[  2 +        SPON +                      G2ON +        i] = (
  1627:         vcnModeTable[2 +        SPON +                      G2ON + G1ON + i] = DrawingMode.SE2);
  1628:       vcnModeTable[  2 + AHEX + SPON +                      G2ON +        i] = (
  1629:         vcnModeTable[2 + AHEX + SPON +                      G2ON + G1ON + i] = DrawingMode.XSE2);
  1630:       //StE3 スプライト>テキスト(OFF)>512ドット16色3プレーン → SE3 スプライト>512ドット16色3プレーン
  1631:       //tSE3 テキスト(OFF)>スプライト>512ドット16色3プレーン → SE3 スプライト>512ドット16色3プレーン
  1632:       vcnModeTable[  2 +        SPON +               G3ON +               i] = (
  1633:         vcnModeTable[2 +        SPON +               G3ON +        G1ON + i] =
  1634:         vcnModeTable[2 +        SPON +               G3ON + G2ON +        i] =
  1635:         vcnModeTable[2 +        SPON +               G3ON + G2ON + G1ON + i] = DrawingMode.SE3);
  1636:       vcnModeTable[  2 + AHEX + SPON +               G3ON +               i] = (
  1637:         vcnModeTable[2 + AHEX + SPON +               G3ON +        G1ON + i] =
  1638:         vcnModeTable[2 + AHEX + SPON +               G3ON + G2ON +        i] =
  1639:         vcnModeTable[2 + AHEX + SPON +               G3ON + G2ON + G1ON + i] = DrawingMode.XSE3);
  1640:       //StE4 スプライト>テキスト(OFF)>512ドット16色4プレーン → SE4 スプライト>512ドット16色4プレーン
  1641:       //tSE4 テキスト(OFF)>スプライト>512ドット16色4プレーン → SE4 スプライト>512ドット16色4プレーン
  1642:       vcnModeTable[  2 +        SPON +        G4ON +                      i] = (
  1643:         vcnModeTable[2 +        SPON +        G4ON +               G1ON + i] =
  1644:         vcnModeTable[2 +        SPON +        G4ON +        G2ON +        i] =
  1645:         vcnModeTable[2 +        SPON +        G4ON +        G2ON + G1ON + i] =
  1646:         vcnModeTable[2 +        SPON +        G4ON + G3ON +               i] =
  1647:         vcnModeTable[2 +        SPON +        G4ON + G3ON +        G1ON + i] =
  1648:         vcnModeTable[2 +        SPON +        G4ON + G3ON + G2ON +        i] =
  1649:         vcnModeTable[2 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.SE4);
  1650:       vcnModeTable[  2 + AHEX + SPON +        G4ON +                      i] = (
  1651:         vcnModeTable[2 + AHEX + SPON +        G4ON +               G1ON + i] =
  1652:         vcnModeTable[2 + AHEX + SPON +        G4ON +        G2ON +        i] =
  1653:         vcnModeTable[2 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  1654:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON +               i] =
  1655:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  1656:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  1657:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XSE4);
  1658:       //ST スプライト>テキスト
  1659:       //TS テキスト>スプライト
  1660:       vcnModeTable[  2 +        SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  1661:       vcnModeTable[  2 + AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  1662:       //STE1 スプライト>テキスト>512ドット16色1プレーン
  1663:       //TSE1 テキスト>スプライト>512ドット16色1プレーン
  1664:       vcnModeTable[  2 +        SPON + TXON +                      G1ON + i] = s < t ? DrawingMode.STE1 : DrawingMode.TSE1;
  1665:       vcnModeTable[  2 + AHEX + SPON + TXON +                      G1ON + i] = s < t ? DrawingMode.XSTE1 : DrawingMode.XTSE1;
  1666:       //STE2 スプライト>テキスト>512ドット16色2プレーン
  1667:       //TSE2 テキスト>スプライト>512ドット16色2プレーン
  1668:       vcnModeTable[  2 +        SPON + TXON +               G2ON +        i] = (
  1669:         vcnModeTable[2 +        SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.STE2 : DrawingMode.TSE2);
  1670:       vcnModeTable[  2 + AHEX + SPON + TXON +               G2ON +        i] = (
  1671:         vcnModeTable[2 + AHEX + SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XSTE2 : DrawingMode.XTSE2);
  1672:       //STE3 スプライト>テキスト>512ドット16色3プレーン
  1673:       //TSE3 テキスト>スプライト>512ドット16色3プレーン
  1674:       vcnModeTable[  2 +        SPON + TXON +        G3ON +               i] = (
  1675:         vcnModeTable[2 +        SPON + TXON +        G3ON +        G1ON + i] =
  1676:         vcnModeTable[2 +        SPON + TXON +        G3ON + G2ON +        i] =
  1677:         vcnModeTable[2 +        SPON + TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.STE3 : DrawingMode.TSE3);
  1678:       vcnModeTable[  2 + AHEX + SPON + TXON +        G3ON +               i] = (
  1679:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  1680:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  1681:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSTE3 : DrawingMode.XTSE3);
  1682:       //STE4 スプライト>テキスト>512ドット16色4プレーン
  1683:       //TSE4 テキスト>スプライト>512ドット16色4プレーン
  1684:       vcnModeTable[  2 +        SPON + TXON + G4ON +                      i] = (
  1685:         vcnModeTable[2 +        SPON + TXON + G4ON +               G1ON + i] =
  1686:         vcnModeTable[2 +        SPON + TXON + G4ON +        G2ON +        i] =
  1687:         vcnModeTable[2 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1688:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON +               i] =
  1689:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1690:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1691:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.STE4 : DrawingMode.TSE4);
  1692:       vcnModeTable[  2 + AHEX + SPON + TXON + G4ON +                      i] = (
  1693:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  1694:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  1695:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1696:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  1697:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1698:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1699:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSTE4 : DrawingMode.XTSE4);
  1700:       //----------------------------------------------------------------------------------------
  1701:       //GrPr==3
  1702:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  1703:       //N 表示画面なし
  1704:       vcnModeTable[  3 +                                                  i] = (
  1705:         vcnModeTable[3 +               TXON +                             i] =
  1706:         vcnModeTable[3 +        SPON +                                    i] =
  1707:         vcnModeTable[3 +        SPON + TXON +                             i] = DrawingMode.N);
  1708:       vcnModeTable[  3 + AHEX +                                           i] = (
  1709:         vcnModeTable[3 + AHEX +        TXON +                             i] =
  1710:         vcnModeTable[3 + AHEX + SPON +                                    i] =
  1711:         vcnModeTable[3 + AHEX + SPON + TXON +                             i] = DrawingMode.XN);
  1712:       //E1st 512ドット16色1プレーン>スプライト(OFF)>テキスト(OFF) → E1t 512ドット16色1プレーン>テキスト(OFF)
  1713:       //E1ts 512ドット16色1プレーン>テキスト(OFF)>スプライト(OFF) → E1t 512ドット16色1プレーン>テキスト(OFF)
  1714:       vcnModeTable[  3 +                                           G1ON + i] = (
  1715:         vcnModeTable[3 +               TXON +                      G1ON + i] =
  1716:         vcnModeTable[3 +        SPON +                             G1ON + i] =
  1717:         vcnModeTable[3 +        SPON + TXON +                      G1ON + i] = DrawingMode.E1t);
  1718:       vcnModeTable[  3 + AHEX +                                    G1ON + i] = (
  1719:         vcnModeTable[3 + AHEX +        TXON +                      G1ON + i] =
  1720:         vcnModeTable[3 + AHEX + SPON +                             G1ON + i] =
  1721:         vcnModeTable[3 + AHEX + SPON + TXON +                      G1ON + i] = DrawingMode.XE1t);
  1722:       //E2st 512ドット16色2プレーン>スプライト(OFF)>テキスト(OFF) → E2t 512ドット16色2プレーン>テキスト(OFF)
  1723:       //E2ts 512ドット16色2プレーン>テキスト(OFF)>スプライト(OFF) → E2t 512ドット16色2プレーン>テキスト(OFF)
  1724:       vcnModeTable[  3 +                                    G2ON +        i] = (
  1725:         vcnModeTable[3 +                                    G2ON + G1ON + i] =
  1726:         vcnModeTable[3 +               TXON +               G2ON +        i] =
  1727:         vcnModeTable[3 +               TXON +               G2ON + G1ON + i] =
  1728:         vcnModeTable[3 +        SPON +                      G2ON +        i] =
  1729:         vcnModeTable[3 +        SPON +                      G2ON + G1ON + i] =
  1730:         vcnModeTable[3 +        SPON + TXON +               G2ON +        i] =
  1731:         vcnModeTable[3 +        SPON + TXON +               G2ON + G1ON + i] = DrawingMode.E2t);
  1732:       vcnModeTable[  3 + AHEX +                             G2ON +        i] = (
  1733:         vcnModeTable[3 + AHEX +                             G2ON + G1ON + i] =
  1734:         vcnModeTable[3 + AHEX +        TXON +               G2ON +        i] =
  1735:         vcnModeTable[3 + AHEX +        TXON +               G2ON + G1ON + i] =
  1736:         vcnModeTable[3 + AHEX + SPON +                      G2ON +        i] =
  1737:         vcnModeTable[3 + AHEX + SPON +                      G2ON + G1ON + i] =
  1738:         vcnModeTable[3 + AHEX + SPON + TXON +               G2ON +        i] =
  1739:         vcnModeTable[3 + AHEX + SPON + TXON +               G2ON + G1ON + i] = DrawingMode.XE2t);
  1740:       //E3st 512ドット16色3プレーン>スプライト(OFF)>テキスト(OFF) → E3t 512ドット16色3プレーン>テキスト(OFF)
  1741:       //E3ts 512ドット16色3プレーン>テキスト(OFF)>スプライト(OFF) → E3t 512ドット16色3プレーン>テキスト(OFF)
  1742:       vcnModeTable[  3 +                             G3ON +               i] = (
  1743:         vcnModeTable[3 +                             G3ON +        G1ON + i] =
  1744:         vcnModeTable[3 +                             G3ON + G2ON +        i] =
  1745:         vcnModeTable[3 +                             G3ON + G2ON + G1ON + i] =
  1746:         vcnModeTable[3 +               TXON +        G3ON +               i] =
  1747:         vcnModeTable[3 +               TXON +        G3ON +        G1ON + i] =
  1748:         vcnModeTable[3 +               TXON +        G3ON + G2ON +        i] =
  1749:         vcnModeTable[3 +               TXON +        G3ON + G2ON + G1ON + i] =
  1750:         vcnModeTable[3 +        SPON +               G3ON +               i] =
  1751:         vcnModeTable[3 +        SPON +               G3ON +        G1ON + i] =
  1752:         vcnModeTable[3 +        SPON +               G3ON + G2ON +        i] =
  1753:         vcnModeTable[3 +        SPON +               G3ON + G2ON + G1ON + i] =
  1754:         vcnModeTable[3 +        SPON + TXON +        G3ON +               i] =
  1755:         vcnModeTable[3 +        SPON + TXON +        G3ON +        G1ON + i] =
  1756:         vcnModeTable[3 +        SPON + TXON +        G3ON + G2ON +        i] =
  1757:         vcnModeTable[3 +        SPON + TXON +        G3ON + G2ON + G1ON + i] = DrawingMode.E3t);
  1758:       vcnModeTable[  3 + AHEX +                      G3ON +               i] = (
  1759:         vcnModeTable[3 + AHEX +                      G3ON +        G1ON + i] =
  1760:         vcnModeTable[3 + AHEX +                      G3ON + G2ON +        i] =
  1761:         vcnModeTable[3 + AHEX +                      G3ON + G2ON + G1ON + i] =
  1762:         vcnModeTable[3 + AHEX +        TXON +        G3ON +               i] =
  1763:         vcnModeTable[3 + AHEX +        TXON +        G3ON +        G1ON + i] =
  1764:         vcnModeTable[3 + AHEX +        TXON +        G3ON + G2ON +        i] =
  1765:         vcnModeTable[3 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  1766:         vcnModeTable[3 + AHEX + SPON +               G3ON +               i] =
  1767:         vcnModeTable[3 + AHEX + SPON +               G3ON +        G1ON + i] =
  1768:         vcnModeTable[3 + AHEX + SPON +               G3ON + G2ON +        i] =
  1769:         vcnModeTable[3 + AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  1770:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON +               i] =
  1771:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  1772:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  1773:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] = DrawingMode.XE3t);
  1774:       //E4st 512ドット16色4プレーン>スプライト(OFF)>テキスト(OFF) → E4t 512ドット16色4プレーン>テキスト(OFF)
  1775:       //E4ts 512ドット16色4プレーン>テキスト(OFF)>スプライト(OFF) → E4t 512ドット16色4プレーン>テキスト(OFF)
  1776:       vcnModeTable[  3 +                      G4ON +                      i] = (
  1777:         vcnModeTable[3 +                      G4ON +               G1ON + i] =
  1778:         vcnModeTable[3 +                      G4ON +        G2ON +        i] =
  1779:         vcnModeTable[3 +                      G4ON +        G2ON + G1ON + i] =
  1780:         vcnModeTable[3 +                      G4ON + G3ON +               i] =
  1781:         vcnModeTable[3 +                      G4ON + G3ON +        G1ON + i] =
  1782:         vcnModeTable[3 +                      G4ON + G3ON + G2ON +        i] =
  1783:         vcnModeTable[3 +                      G4ON + G3ON + G2ON + G1ON + i] =
  1784:         vcnModeTable[3 +               TXON + G4ON +                      i] =
  1785:         vcnModeTable[3 +               TXON + G4ON +               G1ON + i] =
  1786:         vcnModeTable[3 +               TXON + G4ON +        G2ON +        i] =
  1787:         vcnModeTable[3 +               TXON + G4ON +        G2ON + G1ON + i] =
  1788:         vcnModeTable[3 +               TXON + G4ON + G3ON +               i] =
  1789:         vcnModeTable[3 +               TXON + G4ON + G3ON +        G1ON + i] =
  1790:         vcnModeTable[3 +               TXON + G4ON + G3ON + G2ON +        i] =
  1791:         vcnModeTable[3 +               TXON + G4ON + G3ON + G2ON + G1ON + i] =
  1792:         vcnModeTable[3 +        SPON +        G4ON +                      i] =
  1793:         vcnModeTable[3 +        SPON +        G4ON +               G1ON + i] =
  1794:         vcnModeTable[3 +        SPON +        G4ON +        G2ON +        i] =
  1795:         vcnModeTable[3 +        SPON +        G4ON +        G2ON + G1ON + i] =
  1796:         vcnModeTable[3 +        SPON +        G4ON + G3ON +               i] =
  1797:         vcnModeTable[3 +        SPON +        G4ON + G3ON +        G1ON + i] =
  1798:         vcnModeTable[3 +        SPON +        G4ON + G3ON + G2ON +        i] =
  1799:         vcnModeTable[3 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] =
  1800:         vcnModeTable[3 +        SPON + TXON + G4ON +                      i] =
  1801:         vcnModeTable[3 +        SPON + TXON + G4ON +               G1ON + i] =
  1802:         vcnModeTable[3 +        SPON + TXON + G4ON +        G2ON +        i] =
  1803:         vcnModeTable[3 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1804:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON +               i] =
  1805:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1806:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1807:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.E4t);
  1808:       vcnModeTable[  3 + AHEX +               G4ON +                      i] = (
  1809:         vcnModeTable[3 + AHEX +               G4ON +               G1ON + i] =
  1810:         vcnModeTable[3 + AHEX +               G4ON +        G2ON +        i] =
  1811:         vcnModeTable[3 + AHEX +               G4ON +        G2ON + G1ON + i] =
  1812:         vcnModeTable[3 + AHEX +               G4ON + G3ON +               i] =
  1813:         vcnModeTable[3 + AHEX +               G4ON + G3ON +        G1ON + i] =
  1814:         vcnModeTable[3 + AHEX +               G4ON + G3ON + G2ON +        i] =
  1815:         vcnModeTable[3 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] =
  1816:         vcnModeTable[3 + AHEX +        TXON + G4ON +                      i] =
  1817:         vcnModeTable[3 + AHEX +        TXON + G4ON +               G1ON + i] =
  1818:         vcnModeTable[3 + AHEX +        TXON + G4ON +        G2ON +        i] =
  1819:         vcnModeTable[3 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  1820:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON +               i] =
  1821:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  1822:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  1823:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] =
  1824:         vcnModeTable[3 + AHEX + SPON +        G4ON +                      i] =
  1825:         vcnModeTable[3 + AHEX + SPON +        G4ON +               G1ON + i] =
  1826:         vcnModeTable[3 + AHEX + SPON +        G4ON +        G2ON +        i] =
  1827:         vcnModeTable[3 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  1828:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON +               i] =
  1829:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  1830:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  1831:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] =
  1832:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +                      i] =
  1833:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  1834:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  1835:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1836:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  1837:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1838:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1839:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XE4t);
  1840:     }
  1841:   }  //vcnMakeTable0(int)
  1842: 
  1843:   //vcnMakeTable1 (grmm)
  1844:   //  描画モード1のテーブルを作る
  1845:   public static void vcnMakeTable1 (int grmm) {
  1846:     //----------------------------------------------------------------------------------------
  1847:     //F  512ドット256色
  1848:     //              SpTx_GxOn       SpTx_GxOn
  1849:     for (int ii = 0b0000_0; ii <= 0b1111_1; ii++) {
  1850:       //                               GxOn               SpTx
  1851:       int i = grmm << 6 | (ii & 0b0000_1) << 13 | (ii & 0b1111_0) << 1;
  1852:       int s = i >> 4 & 3;
  1853:       int t = i >> 2 & 3;
  1854:       //----------------------------------------------------------------------------------------
  1855:       //GrPr==0
  1856:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  1857:       //N 表示画面なし
  1858:       vcnModeTable[                                                       i] = DrawingMode.N;
  1859:       vcnModeTable[      AHEX +                                           i] = DrawingMode.XN;
  1860:       //F1st 512ドット256色1プレーン>スプライト(OFF)>テキスト(OFF) → F1t 512ドット256色1プレーン>テキスト(OFF)
  1861:       //F1ts 512ドット256色1プレーン>テキスト(OFF)>スプライト(OFF) → F1t 512ドット256色1プレーン>テキスト(OFF)
  1862:       vcnModeTable[                                                G1ON + i] = (
  1863:         vcnModeTable[                                       G2ON +        i] =
  1864:         vcnModeTable[                                       G2ON + G1ON + i] = DrawingMode.F1t);
  1865:       vcnModeTable[      AHEX +                                    G1ON + i] = (
  1866:         vcnModeTable[    AHEX +                             G2ON +        i] =
  1867:         vcnModeTable[    AHEX +                             G2ON + G1ON + i] = DrawingMode.XF1t);
  1868:       //F2st 512ドット256色2プレーン>スプライト(OFF)>テキスト(OFF) → F2t 512ドット256色2プレーン>テキスト(OFF)
  1869:       //F2ts 512ドット256色2プレーン>テキスト(OFF)>スプライト(OFF) → F2t 512ドット256色2プレーン>テキスト(OFF)
  1870:       vcnModeTable[                                  G3ON +               i] = (
  1871:         vcnModeTable[                                G3ON +        G1ON + i] =
  1872:         vcnModeTable[                                G3ON + G2ON +        i] =
  1873:         vcnModeTable[                                G3ON + G2ON + G1ON + i] =
  1874:         vcnModeTable[                         G4ON +                      i] =
  1875:         vcnModeTable[                         G4ON +               G1ON + i] =
  1876:         vcnModeTable[                         G4ON +        G2ON +        i] =
  1877:         vcnModeTable[                         G4ON +        G2ON + G1ON + i] =
  1878:         vcnModeTable[                         G4ON + G3ON +               i] =
  1879:         vcnModeTable[                         G4ON + G3ON +        G1ON + i] =
  1880:         vcnModeTable[                         G4ON + G3ON + G2ON +        i] =
  1881:         vcnModeTable[                         G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.F2t);
  1882:       vcnModeTable[      AHEX +                      G3ON +               i] = (
  1883:         vcnModeTable[    AHEX +                      G3ON +        G1ON + i] =
  1884:         vcnModeTable[    AHEX +                      G3ON + G2ON +        i] =
  1885:         vcnModeTable[    AHEX +                      G3ON + G2ON + G1ON + i] =
  1886:         vcnModeTable[    AHEX +               G4ON +                      i] =
  1887:         vcnModeTable[    AHEX +               G4ON +               G1ON + i] =
  1888:         vcnModeTable[    AHEX +               G4ON +        G2ON +        i] =
  1889:         vcnModeTable[    AHEX +               G4ON +        G2ON + G1ON + i] =
  1890:         vcnModeTable[    AHEX +               G4ON + G3ON +               i] =
  1891:         vcnModeTable[    AHEX +               G4ON + G3ON +        G1ON + i] =
  1892:         vcnModeTable[    AHEX +               G4ON + G3ON + G2ON +        i] =
  1893:         vcnModeTable[    AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XF2t);
  1894:       //T テキスト
  1895:       vcnModeTable[                    TXON +                             i] = DrawingMode.T;
  1896:       vcnModeTable[      AHEX +        TXON +                             i] = DrawingMode.XT;
  1897:       //F1sT 512ドット256色1プレーン>スプライト(OFF)>テキスト → F1T 512ドット256色1プレーン>テキスト
  1898:       //F1Ts 512ドット256色1プレーン>テキスト>スプライト(OFF) → F1T 512ドット256色1プレーン>テキスト
  1899:       vcnModeTable[                    TXON +                      G1ON + i] = (
  1900:         vcnModeTable[                  TXON +               G2ON +        i] =
  1901:         vcnModeTable[                  TXON +               G2ON + G1ON + i] = DrawingMode.F1T);
  1902:       vcnModeTable[      AHEX +        TXON +                      G1ON + i] = (
  1903:         vcnModeTable[    AHEX +        TXON +               G2ON +        i] =
  1904:         vcnModeTable[    AHEX +        TXON +               G2ON + G1ON + i] = DrawingMode.XF1T);
  1905:       //F2sT 512ドット256色2プレーン>スプライト(OFF)>テキスト → F2T 512ドット256色2プレーン>テキスト
  1906:       //F2Ts 512ドット256色2プレーン>テキスト>スプライト(OFF) → F2T 512ドット256色2プレーン>テキスト
  1907:       vcnModeTable[                    TXON +        G3ON +               i] = (
  1908:         vcnModeTable[                  TXON +        G3ON +        G1ON + i] =
  1909:         vcnModeTable[                  TXON +        G3ON + G2ON +        i] =
  1910:         vcnModeTable[                  TXON +        G3ON + G2ON + G1ON + i] =
  1911:         vcnModeTable[                  TXON + G4ON +                      i] =
  1912:         vcnModeTable[                  TXON + G4ON +               G1ON + i] =
  1913:         vcnModeTable[                  TXON + G4ON +        G2ON +        i] =
  1914:         vcnModeTable[                  TXON + G4ON +        G2ON + G1ON + i] =
  1915:         vcnModeTable[                  TXON + G4ON + G3ON +               i] =
  1916:         vcnModeTable[                  TXON + G4ON + G3ON +        G1ON + i] =
  1917:         vcnModeTable[                  TXON + G4ON + G3ON + G2ON +        i] =
  1918:         vcnModeTable[                  TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.F2T);
  1919:       vcnModeTable[      AHEX +        TXON +        G3ON +               i] = (
  1920:         vcnModeTable[    AHEX +        TXON +        G3ON +        G1ON + i] =
  1921:         vcnModeTable[    AHEX +        TXON +        G3ON + G2ON +        i] =
  1922:         vcnModeTable[    AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  1923:         vcnModeTable[    AHEX +        TXON + G4ON +                      i] =
  1924:         vcnModeTable[    AHEX +        TXON + G4ON +               G1ON + i] =
  1925:         vcnModeTable[    AHEX +        TXON + G4ON +        G2ON +        i] =
  1926:         vcnModeTable[    AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  1927:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON +               i] =
  1928:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  1929:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  1930:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XF2T);
  1931:       //S スプライト
  1932:       vcnModeTable[             SPON +                                    i] = DrawingMode.S;
  1933:       vcnModeTable[      AHEX + SPON +                                    i] = DrawingMode.XS;
  1934:       //F1St 512ドット256色1プレーン>スプライト>テキスト(OFF) → F1S 512ドット256色1プレーン>スプライト
  1935:       //F1tS 512ドット256色1プレーン>テキスト(OFF)>スプライト → F1S 512ドット256色1プレーン>スプライト
  1936:       vcnModeTable[             SPON +                             G1ON + i] = (
  1937:         vcnModeTable[           SPON +                      G2ON +        i] =
  1938:         vcnModeTable[           SPON +                      G2ON + G1ON + i] = DrawingMode.F1S);
  1939:       vcnModeTable[      AHEX + SPON +                             G1ON + i] = (
  1940:         vcnModeTable[    AHEX + SPON +                      G2ON +        i] =
  1941:         vcnModeTable[    AHEX + SPON +                      G2ON + G1ON + i] = DrawingMode.XF1S);
  1942:       //F2St 512ドット256色2プレーン>スプライト>テキスト(OFF) → F2S 512ドット256色2プレーン>スプライト
  1943:       //F2tS 512ドット256色2プレーン>テキスト(OFF)>スプライト → F2S 512ドット256色2プレーン>スプライト
  1944:       vcnModeTable[             SPON +               G3ON +               i] = (
  1945:         vcnModeTable[           SPON +               G3ON +        G1ON + i] =
  1946:         vcnModeTable[           SPON +               G3ON + G2ON +        i] =
  1947:         vcnModeTable[           SPON +               G3ON + G2ON + G1ON + i] =
  1948:         vcnModeTable[           SPON +        G4ON +                      i] =
  1949:         vcnModeTable[           SPON +        G4ON +               G1ON + i] =
  1950:         vcnModeTable[           SPON +        G4ON +        G2ON +        i] =
  1951:         vcnModeTable[           SPON +        G4ON +        G2ON + G1ON + i] =
  1952:         vcnModeTable[           SPON +        G4ON + G3ON +               i] =
  1953:         vcnModeTable[           SPON +        G4ON + G3ON +        G1ON + i] =
  1954:         vcnModeTable[           SPON +        G4ON + G3ON + G2ON +        i] =
  1955:         vcnModeTable[           SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.F2S);
  1956:       vcnModeTable[      AHEX + SPON +               G3ON +               i] = (
  1957:         vcnModeTable[    AHEX + SPON +               G3ON +        G1ON + i] =
  1958:         vcnModeTable[    AHEX + SPON +               G3ON + G2ON +        i] =
  1959:         vcnModeTable[    AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  1960:         vcnModeTable[    AHEX + SPON +        G4ON +                      i] =
  1961:         vcnModeTable[    AHEX + SPON +        G4ON +               G1ON + i] =
  1962:         vcnModeTable[    AHEX + SPON +        G4ON +        G2ON +        i] =
  1963:         vcnModeTable[    AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  1964:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON +               i] =
  1965:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  1966:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  1967:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XF2S);
  1968:       //ST スプライト>テキスト
  1969:       //TS テキスト>スプライト
  1970:       vcnModeTable[             SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  1971:       vcnModeTable[      AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  1972:       //F1ST 512ドット256色1プレーン>スプライト>テキスト
  1973:       //F1TS 512ドット256色1プレーン>テキスト>スプライト
  1974:       vcnModeTable[             SPON + TXON +                      G1ON + i] = (
  1975:         vcnModeTable[           SPON + TXON +               G2ON +        i] =
  1976:         vcnModeTable[           SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.F1ST : DrawingMode.F1TS);
  1977:       vcnModeTable[      AHEX + SPON + TXON +                      G1ON + i] = (
  1978:         vcnModeTable[    AHEX + SPON + TXON +               G2ON +        i] =
  1979:         vcnModeTable[    AHEX + SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XF1ST : DrawingMode.XF1TS);
  1980:       //F2ST 512ドット256色2プレーン>スプライト>テキスト
  1981:       //F2TS 512ドット256色2プレーン>テキスト>スプライト
  1982:       vcnModeTable[             SPON + TXON +        G3ON +               i] = (
  1983:         vcnModeTable[           SPON + TXON +        G3ON +        G1ON + i] =
  1984:         vcnModeTable[           SPON + TXON +        G3ON + G2ON +        i] =
  1985:         vcnModeTable[           SPON + TXON +        G3ON + G2ON + G1ON + i] =
  1986:         vcnModeTable[           SPON + TXON + G4ON +                      i] =
  1987:         vcnModeTable[           SPON + TXON + G4ON +               G1ON + i] =
  1988:         vcnModeTable[           SPON + TXON + G4ON +        G2ON +        i] =
  1989:         vcnModeTable[           SPON + TXON + G4ON +        G2ON + G1ON + i] =
  1990:         vcnModeTable[           SPON + TXON + G4ON + G3ON +               i] =
  1991:         vcnModeTable[           SPON + TXON + G4ON + G3ON +        G1ON + i] =
  1992:         vcnModeTable[           SPON + TXON + G4ON + G3ON + G2ON +        i] =
  1993:         vcnModeTable[           SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.F2ST : DrawingMode.F2TS);
  1994:       vcnModeTable[      AHEX + SPON + TXON +        G3ON +               i] = (
  1995:         vcnModeTable[    AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  1996:         vcnModeTable[    AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  1997:         vcnModeTable[    AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  1998:         vcnModeTable[    AHEX + SPON + TXON + G4ON +                      i] =
  1999:         vcnModeTable[    AHEX + SPON + TXON + G4ON +               G1ON + i] =
  2000:         vcnModeTable[    AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  2001:         vcnModeTable[    AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2002:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON +               i] =
  2003:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2004:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2005:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XF2ST : DrawingMode.XF2TS);
  2006:       //----------------------------------------------------------------------------------------
  2007:       //GrPr==1
  2008:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  2009:       //N 表示画面なし
  2010:       vcnModeTable[  1 +                                                  i] = DrawingMode.N;
  2011:       vcnModeTable[  1 + AHEX +                                           i] = DrawingMode.XN;
  2012:       //sF1t スプライト(OFF)>512ドット256色1プレーン>テキスト(OFF) → F1t 512ドット256色1プレーン>テキスト(OFF)
  2013:       //tF1s テキスト(OFF)>512ドット256色1プレーン>スプライト(OFF) → F1t 512ドット256色1プレーン>テキスト(OFF)
  2014:       vcnModeTable[  1 +                                           G1ON + i] = (
  2015:         vcnModeTable[1 +                                    G2ON +        i] =
  2016:         vcnModeTable[1 +                                    G2ON + G1ON + i] = DrawingMode.F1t);
  2017:       vcnModeTable[  1 + AHEX +                                    G1ON + i] = (
  2018:         vcnModeTable[1 + AHEX +                             G2ON +        i] =
  2019:         vcnModeTable[1 + AHEX +                             G2ON + G1ON + i] = DrawingMode.XF1t);
  2020:       //sF2t スプライト(OFF)>512ドット256色2プレーン>テキスト(OFF) → F2t 512ドット256色2プレーン>テキスト(OFF)
  2021:       //tF2s テキスト(OFF)>512ドット256色2プレーン>スプライト(OFF) → F2t 512ドット256色2プレーン>テキスト(OFF)
  2022:       vcnModeTable[  1 +                             G3ON +               i] = (
  2023:         vcnModeTable[1 +                             G3ON +        G1ON + i] =
  2024:         vcnModeTable[1 +                             G3ON + G2ON +        i] =
  2025:         vcnModeTable[1 +                             G3ON + G2ON + G1ON + i] =
  2026:         vcnModeTable[1 +                      G4ON +                      i] =
  2027:         vcnModeTable[1 +                      G4ON +               G1ON + i] =
  2028:         vcnModeTable[1 +                      G4ON +        G2ON +        i] =
  2029:         vcnModeTable[1 +                      G4ON +        G2ON + G1ON + i] =
  2030:         vcnModeTable[1 +                      G4ON + G3ON +               i] =
  2031:         vcnModeTable[1 +                      G4ON + G3ON +        G1ON + i] =
  2032:         vcnModeTable[1 +                      G4ON + G3ON + G2ON +        i] =
  2033:         vcnModeTable[1 +                      G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.F2t);
  2034:       vcnModeTable[  1 + AHEX +                      G3ON +               i] = (
  2035:         vcnModeTable[1 + AHEX +                      G3ON +        G1ON + i] =
  2036:         vcnModeTable[1 + AHEX +                      G3ON + G2ON +        i] =
  2037:         vcnModeTable[1 + AHEX +                      G3ON + G2ON + G1ON + i] =
  2038:         vcnModeTable[1 + AHEX +               G4ON +                      i] =
  2039:         vcnModeTable[1 + AHEX +               G4ON +               G1ON + i] =
  2040:         vcnModeTable[1 + AHEX +               G4ON +        G2ON +        i] =
  2041:         vcnModeTable[1 + AHEX +               G4ON +        G2ON + G1ON + i] =
  2042:         vcnModeTable[1 + AHEX +               G4ON + G3ON +               i] =
  2043:         vcnModeTable[1 + AHEX +               G4ON + G3ON +        G1ON + i] =
  2044:         vcnModeTable[1 + AHEX +               G4ON + G3ON + G2ON +        i] =
  2045:         vcnModeTable[1 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XF2t);
  2046:       //T テキスト
  2047:       vcnModeTable[  1 +               TXON +                             i] = DrawingMode.T;
  2048:       vcnModeTable[  1 + AHEX +        TXON +                             i] = DrawingMode.XT;
  2049:       //sF1T スプライト(OFF)>512ドット256色1プレーン>テキスト → F1T 512ドット256色1プレーン>テキスト
  2050:       //TF1s テキスト>512ドット256色1プレーン>スプライト(OFF)
  2051:       vcnModeTable[  1 +               TXON +                      G1ON + i] = (
  2052:         vcnModeTable[1 +               TXON +               G2ON +        i] =
  2053:         vcnModeTable[1 +               TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.F1T : DrawingMode.TF1s);
  2054:       vcnModeTable[  1 + AHEX +        TXON +                      G1ON + i] = (
  2055:         vcnModeTable[1 + AHEX +        TXON +               G2ON +        i] =
  2056:         vcnModeTable[1 + AHEX +        TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XF1T : DrawingMode.XTF1s);
  2057:       //sF2T スプライト(OFF)>512ドット256色2プレーン>テキスト → F2T 512ドット256色2プレーン>テキスト
  2058:       //TF2s テキスト>512ドット256色2プレーン>スプライト(OFF)
  2059:       vcnModeTable[  1 +               TXON +        G3ON +               i] = (
  2060:         vcnModeTable[1 +               TXON +        G3ON +        G1ON + i] =
  2061:         vcnModeTable[1 +               TXON +        G3ON + G2ON +        i] =
  2062:         vcnModeTable[1 +               TXON +        G3ON + G2ON + G1ON + i] =
  2063:         vcnModeTable[1 +               TXON + G4ON +                      i] =
  2064:         vcnModeTable[1 +               TXON + G4ON +               G1ON + i] =
  2065:         vcnModeTable[1 +               TXON + G4ON +        G2ON +        i] =
  2066:         vcnModeTable[1 +               TXON + G4ON +        G2ON + G1ON + i] =
  2067:         vcnModeTable[1 +               TXON + G4ON + G3ON +               i] =
  2068:         vcnModeTable[1 +               TXON + G4ON + G3ON +        G1ON + i] =
  2069:         vcnModeTable[1 +               TXON + G4ON + G3ON + G2ON +        i] =
  2070:         vcnModeTable[1 +               TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.F2T : DrawingMode.TF2s);
  2071:       vcnModeTable[  1 + AHEX +        TXON +        G3ON +               i] = (
  2072:         vcnModeTable[1 + AHEX +        TXON +        G3ON +        G1ON + i] =
  2073:         vcnModeTable[1 + AHEX +        TXON +        G3ON + G2ON +        i] =
  2074:         vcnModeTable[1 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  2075:         vcnModeTable[1 + AHEX +        TXON + G4ON +                      i] =
  2076:         vcnModeTable[1 + AHEX +        TXON + G4ON +               G1ON + i] =
  2077:         vcnModeTable[1 + AHEX +        TXON + G4ON +        G2ON +        i] =
  2078:         vcnModeTable[1 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  2079:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON +               i] =
  2080:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  2081:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  2082:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XF2T : DrawingMode.XTF2s);
  2083:       //S スプライト
  2084:       vcnModeTable[  1 +        SPON +                                    i] = DrawingMode.S;
  2085:       vcnModeTable[  1 + AHEX + SPON +                                    i] = DrawingMode.XS;
  2086:       //SF1t スプライト>512ドット256色1プレーン>テキスト(OFF)
  2087:       //tF1S テキスト(OFF)>512ドット256色1プレーン>スプライト → F1S 512ドット256色1プレーン>スプライト
  2088:       vcnModeTable[  1 +        SPON +                             G1ON + i] = (
  2089:         vcnModeTable[1 +        SPON +                      G2ON +        i] =
  2090:         vcnModeTable[1 +        SPON +                      G2ON + G1ON + i] = s < t ? DrawingMode.SF1t : DrawingMode.F1S);
  2091:       vcnModeTable[  1 + AHEX + SPON +                             G1ON + i] = (
  2092:         vcnModeTable[1 + AHEX + SPON +                      G2ON +        i] =
  2093:         vcnModeTable[1 + AHEX + SPON +                      G2ON + G1ON + i] = s < t ? DrawingMode.XSF1t : DrawingMode.XF1S);
  2094:       //SF2t スプライト>512ドット256色2プレーン>テキスト(OFF)
  2095:       //tF2S テキスト(OFF)>512ドット256色2プレーン>スプライト → F2S 512ドット256色2プレーン>スプライト
  2096:       vcnModeTable[  1 +        SPON +               G3ON +               i] = (
  2097:         vcnModeTable[1 +        SPON +               G3ON +        G1ON + i] =
  2098:         vcnModeTable[1 +        SPON +               G3ON + G2ON +        i] =
  2099:         vcnModeTable[1 +        SPON +               G3ON + G2ON + G1ON + i] =
  2100:         vcnModeTable[1 +        SPON +        G4ON +                      i] =
  2101:         vcnModeTable[1 +        SPON +        G4ON +               G1ON + i] =
  2102:         vcnModeTable[1 +        SPON +        G4ON +        G2ON +        i] =
  2103:         vcnModeTable[1 +        SPON +        G4ON +        G2ON + G1ON + i] =
  2104:         vcnModeTable[1 +        SPON +        G4ON + G3ON +               i] =
  2105:         vcnModeTable[1 +        SPON +        G4ON + G3ON +        G1ON + i] =
  2106:         vcnModeTable[1 +        SPON +        G4ON + G3ON + G2ON +        i] =
  2107:         vcnModeTable[1 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SF2t : DrawingMode.F2S);
  2108:       vcnModeTable[  1 + AHEX + SPON +               G3ON +               i] = (
  2109:         vcnModeTable[1 + AHEX + SPON +               G3ON +        G1ON + i] =
  2110:         vcnModeTable[1 + AHEX + SPON +               G3ON + G2ON +        i] =
  2111:         vcnModeTable[1 + AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  2112:         vcnModeTable[1 + AHEX + SPON +        G4ON +                      i] =
  2113:         vcnModeTable[1 + AHEX + SPON +        G4ON +               G1ON + i] =
  2114:         vcnModeTable[1 + AHEX + SPON +        G4ON +        G2ON +        i] =
  2115:         vcnModeTable[1 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  2116:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON +               i] =
  2117:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  2118:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  2119:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSF2t : DrawingMode.XF2S);
  2120:       //ST スプライト>テキスト
  2121:       //TS テキスト>スプライト
  2122:       vcnModeTable[  1 +        SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  2123:       vcnModeTable[  1 + AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  2124:       //SF1T スプライト>512ドット256色1プレーン>テキスト
  2125:       //TF1S テキスト>512ドット256色1プレーン>スプライト
  2126:       vcnModeTable[  1 +        SPON + TXON +                      G1ON + i] = (
  2127:         vcnModeTable[1 +        SPON + TXON +               G2ON +        i] =
  2128:         vcnModeTable[1 +        SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.SF1T : DrawingMode.TF1S);
  2129:       vcnModeTable[  1 + AHEX + SPON + TXON +                      G1ON + i] = (
  2130:         vcnModeTable[1 + AHEX + SPON + TXON +               G2ON +        i] =
  2131:         vcnModeTable[1 + AHEX + SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XSF1T : DrawingMode.XTF1S);
  2132:       //SF2T スプライト>512ドット256色2プレーン>テキスト
  2133:       //TF2S テキスト>512ドット256色2プレーン>スプライト
  2134:       vcnModeTable[  1 +        SPON + TXON +        G3ON +               i] = (
  2135:         vcnModeTable[1 +        SPON + TXON +        G3ON +        G1ON + i] =
  2136:         vcnModeTable[1 +        SPON + TXON +        G3ON + G2ON +        i] =
  2137:         vcnModeTable[1 +        SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2138:         vcnModeTable[1 +        SPON + TXON + G4ON +                      i] =
  2139:         vcnModeTable[1 +        SPON + TXON + G4ON +               G1ON + i] =
  2140:         vcnModeTable[1 +        SPON + TXON + G4ON +        G2ON +        i] =
  2141:         vcnModeTable[1 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2142:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON +               i] =
  2143:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2144:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2145:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SF2T : DrawingMode.TF2S);
  2146:       vcnModeTable[  1 + AHEX + SPON + TXON +        G3ON +               i] = (
  2147:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  2148:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  2149:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2150:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +                      i] =
  2151:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  2152:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  2153:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2154:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  2155:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2156:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2157:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSF2T : DrawingMode.XTF2S);
  2158:       //----------------------------------------------------------------------------------------
  2159:       //GrPr==2
  2160:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  2161:       //N 表示画面なし
  2162:       vcnModeTable[  2 +                                                  i] = DrawingMode.N;
  2163:       vcnModeTable[  2 + AHEX +                                           i] = DrawingMode.XN;
  2164:       //stF1 スプライト(OFF)>テキスト(OFF)>512ドット256色1プレーン → F1 512ドット256色1プレーン
  2165:       //tsF1 テキスト(OFF)>スプライト(OFF)>512ドット256色1プレーン → F1 512ドット256色1プレーン
  2166:       vcnModeTable[  2 +                                           G1ON + i] = (
  2167:         vcnModeTable[2 +                                    G2ON +        i] =
  2168:         vcnModeTable[2 +                                    G2ON + G1ON + i] = DrawingMode.F1);
  2169:       vcnModeTable[  2 + AHEX +                                    G1ON + i] = (
  2170:         vcnModeTable[2 + AHEX +                             G2ON +        i] =
  2171:         vcnModeTable[2 + AHEX +                             G2ON + G1ON + i] = DrawingMode.XF1);
  2172:       //stF2 スプライト(OFF)>テキスト(OFF)>512ドット256色2プレーン → F2 512ドット256色2プレーン
  2173:       //tsF2 テキスト(OFF)>スプライト(OFF)>512ドット256色2プレーン → F2 512ドット256色2プレーン
  2174:       vcnModeTable[  2 +                             G3ON +               i] = (
  2175:         vcnModeTable[2 +                             G3ON +        G1ON + i] =
  2176:         vcnModeTable[2 +                             G3ON + G2ON +        i] =
  2177:         vcnModeTable[2 +                             G3ON + G2ON + G1ON + i] =
  2178:         vcnModeTable[2 +                      G4ON +                      i] =
  2179:         vcnModeTable[2 +                      G4ON +               G1ON + i] =
  2180:         vcnModeTable[2 +                      G4ON +        G2ON +        i] =
  2181:         vcnModeTable[2 +                      G4ON +        G2ON + G1ON + i] =
  2182:         vcnModeTable[2 +                      G4ON + G3ON +               i] =
  2183:         vcnModeTable[2 +                      G4ON + G3ON +        G1ON + i] =
  2184:         vcnModeTable[2 +                      G4ON + G3ON + G2ON +        i] =
  2185:         vcnModeTable[2 +                      G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.F2);
  2186:       vcnModeTable[  2 + AHEX +                      G3ON +               i] = (
  2187:         vcnModeTable[2 + AHEX +                      G3ON +        G1ON + i] =
  2188:         vcnModeTable[2 + AHEX +                      G3ON + G2ON +        i] =
  2189:         vcnModeTable[2 + AHEX +                      G3ON + G2ON + G1ON + i] =
  2190:         vcnModeTable[2 + AHEX +               G4ON +                      i] =
  2191:         vcnModeTable[2 + AHEX +               G4ON +               G1ON + i] =
  2192:         vcnModeTable[2 + AHEX +               G4ON +        G2ON +        i] =
  2193:         vcnModeTable[2 + AHEX +               G4ON +        G2ON + G1ON + i] =
  2194:         vcnModeTable[2 + AHEX +               G4ON + G3ON +               i] =
  2195:         vcnModeTable[2 + AHEX +               G4ON + G3ON +        G1ON + i] =
  2196:         vcnModeTable[2 + AHEX +               G4ON + G3ON + G2ON +        i] =
  2197:         vcnModeTable[2 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XF2);
  2198:       //T テキスト
  2199:       vcnModeTable[  2 +               TXON +                             i] = DrawingMode.T;
  2200:       vcnModeTable[  2 + AHEX +        TXON +                             i] = DrawingMode.XT;
  2201:       //sTF1 スプライト(OFF)>テキスト>512ドット256色1プレーン → TF1 テキスト>512ドット256色1プレーン
  2202:       //TsF1 テキスト>スプライト(OFF)>512ドット256色1プレーン → TF1 テキスト>512ドット256色1プレーン
  2203:       vcnModeTable[  2 +               TXON +                      G1ON + i] = (
  2204:         vcnModeTable[2 +               TXON +               G2ON +        i] =
  2205:         vcnModeTable[2 +               TXON +               G2ON + G1ON + i] = DrawingMode.TF1);
  2206:       vcnModeTable[  2 + AHEX +        TXON +                      G1ON + i] = (
  2207:         vcnModeTable[2 + AHEX +        TXON +               G2ON +        i] =
  2208:         vcnModeTable[2 + AHEX +        TXON +               G2ON + G1ON + i] = DrawingMode.XTF1);
  2209:       //sTF2 スプライト(OFF)>テキスト>512ドット256色2プレーン → TF2 テキスト>512ドット256色2プレーン
  2210:       //TsF2 テキスト>スプライト(OFF)>512ドット256色2プレーン → TF2 テキスト>512ドット256色2プレーン
  2211:       vcnModeTable[  2 +               TXON +        G3ON +               i] = (
  2212:         vcnModeTable[2 +               TXON +        G3ON +        G1ON + i] =
  2213:         vcnModeTable[2 +               TXON +        G3ON + G2ON +        i] =
  2214:         vcnModeTable[2 +               TXON +        G3ON + G2ON + G1ON + i] =
  2215:         vcnModeTable[2 +               TXON + G4ON +                      i] =
  2216:         vcnModeTable[2 +               TXON + G4ON +               G1ON + i] =
  2217:         vcnModeTable[2 +               TXON + G4ON +        G2ON +        i] =
  2218:         vcnModeTable[2 +               TXON + G4ON +        G2ON + G1ON + i] =
  2219:         vcnModeTable[2 +               TXON + G4ON + G3ON +               i] =
  2220:         vcnModeTable[2 +               TXON + G4ON + G3ON +        G1ON + i] =
  2221:         vcnModeTable[2 +               TXON + G4ON + G3ON + G2ON +        i] =
  2222:         vcnModeTable[2 +               TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.TF2);
  2223:       vcnModeTable[  2 + AHEX +        TXON +        G3ON +               i] = (
  2224:         vcnModeTable[2 + AHEX +        TXON +        G3ON +        G1ON + i] =
  2225:         vcnModeTable[2 + AHEX +        TXON +        G3ON + G2ON +        i] =
  2226:         vcnModeTable[2 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  2227:         vcnModeTable[2 + AHEX +        TXON + G4ON +                      i] =
  2228:         vcnModeTable[2 + AHEX +        TXON + G4ON +               G1ON + i] =
  2229:         vcnModeTable[2 + AHEX +        TXON + G4ON +        G2ON +        i] =
  2230:         vcnModeTable[2 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  2231:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON +               i] =
  2232:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  2233:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  2234:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XTF2);
  2235:       //S スプライト
  2236:       vcnModeTable[  2 +        SPON +                                    i] = DrawingMode.S;
  2237:       vcnModeTable[  2 + AHEX + SPON +                                    i] = DrawingMode.XS;
  2238:       //StF1 スプライト>テキスト(OFF)>512ドット256色1プレーン → SF1 スプライト>512ドット256色1プレーン
  2239:       //tSF1 テキスト(OFF)>スプライト>512ドット256色1プレーン → SF1 スプライト>512ドット256色1プレーン
  2240:       vcnModeTable[  2 +        SPON +                             G1ON + i] = (
  2241:         vcnModeTable[2 +        SPON +                      G2ON +        i] =
  2242:         vcnModeTable[2 +        SPON +                      G2ON + G1ON + i] = DrawingMode.SF1);
  2243:       vcnModeTable[  2 + AHEX + SPON +                             G1ON + i] = (
  2244:         vcnModeTable[2 + AHEX + SPON +                      G2ON +        i] =
  2245:         vcnModeTable[2 + AHEX + SPON +                      G2ON + G1ON + i] = DrawingMode.XSF1);
  2246:       //StF2 スプライト>テキスト(OFF)>512ドット256色2プレーン → SF2 スプライト>512ドット256色2プレーン
  2247:       //tSF2 テキスト(OFF)>スプライト>512ドット256色2プレーン → SF2 スプライト>512ドット256色2プレーン
  2248:       vcnModeTable[  2 +        SPON +               G3ON +               i] = (
  2249:         vcnModeTable[2 +        SPON +               G3ON +        G1ON + i] =
  2250:         vcnModeTable[2 +        SPON +               G3ON + G2ON +        i] =
  2251:         vcnModeTable[2 +        SPON +               G3ON + G2ON + G1ON + i] =
  2252:         vcnModeTable[2 +        SPON +        G4ON +                      i] =
  2253:         vcnModeTable[2 +        SPON +        G4ON +               G1ON + i] =
  2254:         vcnModeTable[2 +        SPON +        G4ON +        G2ON +        i] =
  2255:         vcnModeTable[2 +        SPON +        G4ON +        G2ON + G1ON + i] =
  2256:         vcnModeTable[2 +        SPON +        G4ON + G3ON +               i] =
  2257:         vcnModeTable[2 +        SPON +        G4ON + G3ON +        G1ON + i] =
  2258:         vcnModeTable[2 +        SPON +        G4ON + G3ON + G2ON +        i] =
  2259:         vcnModeTable[2 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.SF2);
  2260:       vcnModeTable[  2 + AHEX + SPON +               G3ON +               i] = (
  2261:         vcnModeTable[2 + AHEX + SPON +               G3ON +        G1ON + i] =
  2262:         vcnModeTable[2 + AHEX + SPON +               G3ON + G2ON +        i] =
  2263:         vcnModeTable[2 + AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  2264:         vcnModeTable[2 + AHEX + SPON +        G4ON +                      i] =
  2265:         vcnModeTable[2 + AHEX + SPON +        G4ON +               G1ON + i] =
  2266:         vcnModeTable[2 + AHEX + SPON +        G4ON +        G2ON +        i] =
  2267:         vcnModeTable[2 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  2268:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON +               i] =
  2269:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  2270:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  2271:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XSF2);
  2272:       //ST スプライト>テキスト
  2273:       //TS テキスト>スプライト
  2274:       vcnModeTable[  2 +        SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  2275:       vcnModeTable[  2 + AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  2276:       //STF1 スプライト>テキスト>512ドット256色1プレーン
  2277:       //TSF1 テキスト>スプライト>512ドット256色1プレーン
  2278:       vcnModeTable[  2 +        SPON + TXON +                      G1ON + i] = (
  2279:         vcnModeTable[2 +        SPON + TXON +               G2ON +        i] =
  2280:         vcnModeTable[2 +        SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.STF1 : DrawingMode.TSF1);
  2281:       vcnModeTable[  2 + AHEX + SPON + TXON +                      G1ON + i] = (
  2282:         vcnModeTable[2 + AHEX + SPON + TXON +               G2ON +        i] =
  2283:         vcnModeTable[2 + AHEX + SPON + TXON +               G2ON + G1ON + i] = s < t ? DrawingMode.XSTF1 : DrawingMode.XTSF1);
  2284:       //STF2 スプライト>テキスト>512ドット256色2プレーン
  2285:       //TSF2 テキスト>スプライト>512ドット256色2プレーン
  2286:       vcnModeTable[  2 +        SPON + TXON +        G3ON +               i] = (
  2287:         vcnModeTable[2 +        SPON + TXON +        G3ON +        G1ON + i] =
  2288:         vcnModeTable[2 +        SPON + TXON +        G3ON + G2ON +        i] =
  2289:         vcnModeTable[2 +        SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2290:         vcnModeTable[2 +        SPON + TXON + G4ON +                      i] =
  2291:         vcnModeTable[2 +        SPON + TXON + G4ON +               G1ON + i] =
  2292:         vcnModeTable[2 +        SPON + TXON + G4ON +        G2ON +        i] =
  2293:         vcnModeTable[2 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2294:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON +               i] =
  2295:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2296:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2297:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.STF2 : DrawingMode.TSF2);
  2298:       vcnModeTable[  2 + AHEX + SPON + TXON +        G3ON +               i] = (
  2299:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  2300:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  2301:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2302:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +                      i] =
  2303:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  2304:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  2305:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2306:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  2307:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2308:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2309:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSTF2 : DrawingMode.XTSF2);
  2310:       //----------------------------------------------------------------------------------------
  2311:       //GrPr==3
  2312:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  2313:       //N 表示画面なし
  2314:       vcnModeTable[  3 +                                                  i] = (
  2315:         vcnModeTable[3 +               TXON +                             i] =
  2316:         vcnModeTable[3 +        SPON +                                    i] =
  2317:         vcnModeTable[3 +        SPON + TXON +                             i] = DrawingMode.N);
  2318:       vcnModeTable[  3 + AHEX +                                           i] = (
  2319:         vcnModeTable[3 + AHEX +        TXON +                             i] =
  2320:         vcnModeTable[3 + AHEX + SPON +                                    i] =
  2321:         vcnModeTable[3 + AHEX + SPON + TXON +                             i] = DrawingMode.XN);
  2322:       //F1st 512ドット256色1プレーン>スプライト(OFF)>テキスト(OFF) → F1t 512ドット256色1プレーン>テキスト(OFF)
  2323:       //F1ts 512ドット256色1プレーン>テキスト(OFF)>スプライト(OFF) → F1t 512ドット256色1プレーン>テキスト(OFF)
  2324:       vcnModeTable[  3 +                                           G1ON + i] = (
  2325:         vcnModeTable[3 +               TXON +                      G1ON + i] =
  2326:         vcnModeTable[3 +        SPON +                             G1ON + i] =
  2327:         vcnModeTable[3 +        SPON + TXON +                      G1ON + i] =
  2328:         vcnModeTable[3 +                                    G2ON +        i] =
  2329:         vcnModeTable[3 +               TXON +               G2ON +        i] =
  2330:         vcnModeTable[3 +        SPON +                      G2ON +        i] =
  2331:         vcnModeTable[3 +        SPON + TXON +               G2ON +        i] =
  2332:         vcnModeTable[3 +                                    G2ON + G1ON + i] =
  2333:         vcnModeTable[3 +               TXON +               G2ON + G1ON + i] =
  2334:         vcnModeTable[3 +        SPON +                      G2ON + G1ON + i] =
  2335:         vcnModeTable[3 +        SPON + TXON +               G2ON + G1ON + i] = DrawingMode.F1t);
  2336:       vcnModeTable[  3 + AHEX +                                    G1ON + i] = (
  2337:         vcnModeTable[3 + AHEX +        TXON +                      G1ON + i] =
  2338:         vcnModeTable[3 + AHEX + SPON +                             G1ON + i] =
  2339:         vcnModeTable[3 + AHEX + SPON + TXON +                      G1ON + i] =
  2340:         vcnModeTable[3 + AHEX +                             G2ON +        i] =
  2341:         vcnModeTable[3 + AHEX +        TXON +               G2ON +        i] =
  2342:         vcnModeTable[3 + AHEX + SPON +                      G2ON +        i] =
  2343:         vcnModeTable[3 + AHEX + SPON + TXON +               G2ON +        i] =
  2344:         vcnModeTable[3 + AHEX +                             G2ON + G1ON + i] =
  2345:         vcnModeTable[3 + AHEX +        TXON +               G2ON + G1ON + i] =
  2346:         vcnModeTable[3 + AHEX + SPON +                      G2ON + G1ON + i] =
  2347:         vcnModeTable[3 + AHEX + SPON + TXON +               G2ON + G1ON + i] = DrawingMode.XF1t);
  2348:       //F2st 512ドット256色2プレーン>スプライト(OFF)>テキスト(OFF) → F2t 512ドット256色2プレーン>テキスト(OFF)
  2349:       //F2ts 512ドット256色2プレーン>テキスト(OFF)>スプライト(OFF) → F2t 512ドット256色2プレーン>テキスト(OFF)
  2350:       vcnModeTable[  3 +                             G3ON +               i] = (
  2351:         vcnModeTable[3 +                             G3ON +        G1ON + i] =
  2352:         vcnModeTable[3 +                             G3ON + G2ON +        i] =
  2353:         vcnModeTable[3 +                             G3ON + G2ON + G1ON + i] =
  2354:         vcnModeTable[3 +               TXON +        G3ON +               i] =
  2355:         vcnModeTable[3 +               TXON +        G3ON +        G1ON + i] =
  2356:         vcnModeTable[3 +               TXON +        G3ON + G2ON +        i] =
  2357:         vcnModeTable[3 +               TXON +        G3ON + G2ON + G1ON + i] =
  2358:         vcnModeTable[3 +        SPON +               G3ON +               i] =
  2359:         vcnModeTable[3 +        SPON +               G3ON +        G1ON + i] =
  2360:         vcnModeTable[3 +        SPON +               G3ON + G2ON +        i] =
  2361:         vcnModeTable[3 +        SPON +               G3ON + G2ON + G1ON + i] =
  2362:         vcnModeTable[3 +        SPON + TXON +        G3ON +               i] =
  2363:         vcnModeTable[3 +        SPON + TXON +        G3ON +        G1ON + i] =
  2364:         vcnModeTable[3 +        SPON + TXON +        G3ON + G2ON +        i] =
  2365:         vcnModeTable[3 +        SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2366:         vcnModeTable[3 +                      G4ON +                      i] =
  2367:         vcnModeTable[3 +                      G4ON +               G1ON + i] =
  2368:         vcnModeTable[3 +                      G4ON +        G2ON +        i] =
  2369:         vcnModeTable[3 +                      G4ON +        G2ON + G1ON + i] =
  2370:         vcnModeTable[3 +               TXON + G4ON +                      i] =
  2371:         vcnModeTable[3 +               TXON + G4ON +               G1ON + i] =
  2372:         vcnModeTable[3 +               TXON + G4ON +        G2ON +        i] =
  2373:         vcnModeTable[3 +               TXON + G4ON +        G2ON + G1ON + i] =
  2374:         vcnModeTable[3 +        SPON +        G4ON +                      i] =
  2375:         vcnModeTable[3 +        SPON +        G4ON +               G1ON + i] =
  2376:         vcnModeTable[3 +        SPON +        G4ON +        G2ON +        i] =
  2377:         vcnModeTable[3 +        SPON +        G4ON +        G2ON + G1ON + i] =
  2378:         vcnModeTable[3 +        SPON + TXON + G4ON +                      i] =
  2379:         vcnModeTable[3 +        SPON + TXON + G4ON +               G1ON + i] =
  2380:         vcnModeTable[3 +        SPON + TXON + G4ON +        G2ON +        i] =
  2381:         vcnModeTable[3 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2382:         vcnModeTable[3 +                      G4ON + G3ON +               i] =
  2383:         vcnModeTable[3 +                      G4ON + G3ON +        G1ON + i] =
  2384:         vcnModeTable[3 +                      G4ON + G3ON + G2ON +        i] =
  2385:         vcnModeTable[3 +                      G4ON + G3ON + G2ON + G1ON + i] =
  2386:         vcnModeTable[3 +               TXON + G4ON + G3ON +               i] =
  2387:         vcnModeTable[3 +               TXON + G4ON + G3ON +        G1ON + i] =
  2388:         vcnModeTable[3 +               TXON + G4ON + G3ON + G2ON +        i] =
  2389:         vcnModeTable[3 +               TXON + G4ON + G3ON + G2ON + G1ON + i] =
  2390:         vcnModeTable[3 +        SPON +        G4ON + G3ON +               i] =
  2391:         vcnModeTable[3 +        SPON +        G4ON + G3ON +        G1ON + i] =
  2392:         vcnModeTable[3 +        SPON +        G4ON + G3ON + G2ON +        i] =
  2393:         vcnModeTable[3 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] =
  2394:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON +               i] =
  2395:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2396:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2397:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.F2t);
  2398:       vcnModeTable[  3 + AHEX +                      G3ON +               i] = (
  2399:         vcnModeTable[3 + AHEX +                      G3ON +        G1ON + i] =
  2400:         vcnModeTable[3 + AHEX +                      G3ON + G2ON +        i] =
  2401:         vcnModeTable[3 + AHEX +                      G3ON + G2ON + G1ON + i] =
  2402:         vcnModeTable[3 + AHEX +        TXON +        G3ON +               i] =
  2403:         vcnModeTable[3 + AHEX +        TXON +        G3ON +        G1ON + i] =
  2404:         vcnModeTable[3 + AHEX +        TXON +        G3ON + G2ON +        i] =
  2405:         vcnModeTable[3 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  2406:         vcnModeTable[3 + AHEX + SPON +               G3ON +               i] =
  2407:         vcnModeTable[3 + AHEX + SPON +               G3ON +        G1ON + i] =
  2408:         vcnModeTable[3 + AHEX + SPON +               G3ON + G2ON +        i] =
  2409:         vcnModeTable[3 + AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  2410:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON +               i] =
  2411:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  2412:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  2413:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2414:         vcnModeTable[3 + AHEX +               G4ON +                      i] =
  2415:         vcnModeTable[3 + AHEX +               G4ON +               G1ON + i] =
  2416:         vcnModeTable[3 + AHEX +               G4ON +        G2ON +        i] =
  2417:         vcnModeTable[3 + AHEX +               G4ON +        G2ON + G1ON + i] =
  2418:         vcnModeTable[3 + AHEX +        TXON + G4ON +                      i] =
  2419:         vcnModeTable[3 + AHEX +        TXON + G4ON +               G1ON + i] =
  2420:         vcnModeTable[3 + AHEX +        TXON + G4ON +        G2ON +        i] =
  2421:         vcnModeTable[3 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  2422:         vcnModeTable[3 + AHEX + SPON +        G4ON +                      i] =
  2423:         vcnModeTable[3 + AHEX + SPON +        G4ON +               G1ON + i] =
  2424:         vcnModeTable[3 + AHEX + SPON +        G4ON +        G2ON +        i] =
  2425:         vcnModeTable[3 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  2426:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +                      i] =
  2427:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  2428:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  2429:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2430:         vcnModeTable[3 + AHEX +               G4ON + G3ON +               i] =
  2431:         vcnModeTable[3 + AHEX +               G4ON + G3ON +        G1ON + i] =
  2432:         vcnModeTable[3 + AHEX +               G4ON + G3ON + G2ON +        i] =
  2433:         vcnModeTable[3 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] =
  2434:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON +               i] =
  2435:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  2436:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  2437:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] =
  2438:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON +               i] =
  2439:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  2440:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  2441:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] =
  2442:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  2443:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2444:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2445:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XF2t);
  2446:     }
  2447:   }  //vcnMakeTable1(int)
  2448: 
  2449:   //vcnMakeTable3 (grmm)
  2450:   //  描画モード3のテーブルを作る
  2451:   public static void vcnMakeTable3 (int grmm) {
  2452:     //----------------------------------------------------------------------------------------
  2453:     //G  512ドット65536色
  2454:     //              SpTx_GxOn       SpTx_GxOn
  2455:     for (int ii = 0b0000_0; ii <= 0b1111_1; ii++) {
  2456:       //                               GxOn               SpTx
  2457:       int i = grmm << 6 | (ii & 0b0000_1) << 13 | (ii & 0b1111_0) << 1;
  2458:       int s = i >> 4 & 3;
  2459:       int t = i >> 2 & 3;
  2460:       //----------------------------------------------------------------------------------------
  2461:       //GrPr==0
  2462:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  2463:       //N 表示画面なし
  2464:       vcnModeTable[                                                       i] = DrawingMode.N;
  2465:       vcnModeTable[      AHEX +                                           i] = DrawingMode.XN;
  2466:       //Gst 512ドット65536色1プレーン>スプライト(OFF)>テキスト(OFF) → Gt 512ドット65536色1プレーン>テキスト(OFF)
  2467:       //Gts 512ドット65536色1プレーン>テキスト(OFF)>スプライト(OFF) → Gt 512ドット65536色1プレーン>テキスト(OFF)
  2468:       vcnModeTable[                                                G1ON + i] = (
  2469:         vcnModeTable[                                       G2ON +        i] =
  2470:         vcnModeTable[                                       G2ON + G1ON + i] =
  2471:         vcnModeTable[                                G3ON +               i] =
  2472:         vcnModeTable[                                G3ON +        G1ON + i] =
  2473:         vcnModeTable[                                G3ON + G2ON +        i] =
  2474:         vcnModeTable[                                G3ON + G2ON + G1ON + i] =
  2475:         vcnModeTable[                         G4ON +                      i] =
  2476:         vcnModeTable[                         G4ON +               G1ON + i] =
  2477:         vcnModeTable[                         G4ON +        G2ON +        i] =
  2478:         vcnModeTable[                         G4ON +        G2ON + G1ON + i] =
  2479:         vcnModeTable[                         G4ON + G3ON +               i] =
  2480:         vcnModeTable[                         G4ON + G3ON +        G1ON + i] =
  2481:         vcnModeTable[                         G4ON + G3ON + G2ON +        i] =
  2482:         vcnModeTable[                         G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.Gt);
  2483:       vcnModeTable[      AHEX +                                    G1ON + i] = (
  2484:         vcnModeTable[    AHEX +                             G2ON +        i] =
  2485:         vcnModeTable[    AHEX +                             G2ON + G1ON + i] =
  2486:         vcnModeTable[    AHEX +                      G3ON +               i] =
  2487:         vcnModeTable[    AHEX +                      G3ON +        G1ON + i] =
  2488:         vcnModeTable[    AHEX +                      G3ON + G2ON +        i] =
  2489:         vcnModeTable[    AHEX +                      G3ON + G2ON + G1ON + i] =
  2490:         vcnModeTable[    AHEX +               G4ON +                      i] =
  2491:         vcnModeTable[    AHEX +               G4ON +               G1ON + i] =
  2492:         vcnModeTable[    AHEX +               G4ON +        G2ON +        i] =
  2493:         vcnModeTable[    AHEX +               G4ON +        G2ON + G1ON + i] =
  2494:         vcnModeTable[    AHEX +               G4ON + G3ON +               i] =
  2495:         vcnModeTable[    AHEX +               G4ON + G3ON +        G1ON + i] =
  2496:         vcnModeTable[    AHEX +               G4ON + G3ON + G2ON +        i] =
  2497:         vcnModeTable[    AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XGt);
  2498:       //T テキスト
  2499:       vcnModeTable[                    TXON +                             i] = DrawingMode.T;
  2500:       vcnModeTable[      AHEX +        TXON +                             i] = DrawingMode.XT;
  2501:       //GsT 512ドット65536色1プレーン>スプライト(OFF)>テキスト → GT 512ドット65536色1プレーン>テキスト
  2502:       //GTs 512ドット65536色1プレーン>テキスト>スプライト(OFF) → GT 512ドット65536色1プレーン>テキスト
  2503:       vcnModeTable[                    TXON +                      G1ON + i] = (
  2504:         vcnModeTable[                  TXON +               G2ON +        i] =
  2505:         vcnModeTable[                  TXON +               G2ON + G1ON + i] =
  2506:         vcnModeTable[                  TXON +        G3ON +               i] =
  2507:         vcnModeTable[                  TXON +        G3ON +        G1ON + i] =
  2508:         vcnModeTable[                  TXON +        G3ON + G2ON +        i] =
  2509:         vcnModeTable[                  TXON +        G3ON + G2ON + G1ON + i] =
  2510:         vcnModeTable[                  TXON + G4ON +                      i] =
  2511:         vcnModeTable[                  TXON + G4ON +               G1ON + i] =
  2512:         vcnModeTable[                  TXON + G4ON +        G2ON +        i] =
  2513:         vcnModeTable[                  TXON + G4ON +        G2ON + G1ON + i] =
  2514:         vcnModeTable[                  TXON + G4ON + G3ON +               i] =
  2515:         vcnModeTable[                  TXON + G4ON + G3ON +        G1ON + i] =
  2516:         vcnModeTable[                  TXON + G4ON + G3ON + G2ON +        i] =
  2517:         vcnModeTable[                  TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.GT);
  2518:       vcnModeTable[      AHEX +        TXON +                      G1ON + i] = (
  2519:         vcnModeTable[    AHEX +        TXON +               G2ON +        i] =
  2520:         vcnModeTable[    AHEX +        TXON +               G2ON + G1ON + i] =
  2521:         vcnModeTable[    AHEX +        TXON +        G3ON +               i] =
  2522:         vcnModeTable[    AHEX +        TXON +        G3ON +        G1ON + i] =
  2523:         vcnModeTable[    AHEX +        TXON +        G3ON + G2ON +        i] =
  2524:         vcnModeTable[    AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  2525:         vcnModeTable[    AHEX +        TXON + G4ON +                      i] =
  2526:         vcnModeTable[    AHEX +        TXON + G4ON +               G1ON + i] =
  2527:         vcnModeTable[    AHEX +        TXON + G4ON +        G2ON +        i] =
  2528:         vcnModeTable[    AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  2529:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON +               i] =
  2530:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  2531:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  2532:         vcnModeTable[    AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XGT);
  2533:       //S スプライト
  2534:       vcnModeTable[             SPON +                                    i] = DrawingMode.S;
  2535:       vcnModeTable[      AHEX + SPON +                                    i] = DrawingMode.XS;
  2536:       //GSt 512ドット65536色1プレーン>スプライト>テキスト(OFF) → GS 512ドット65536色1プレーン>スプライト
  2537:       //GtS 512ドット65536色1プレーン>テキスト(OFF)>スプライト → GS 512ドット65536色1プレーン>スプライト
  2538:       vcnModeTable[             SPON +                             G1ON + i] = (
  2539:         vcnModeTable[           SPON +                      G2ON +        i] =
  2540:         vcnModeTable[           SPON +                      G2ON + G1ON + i] =
  2541:         vcnModeTable[           SPON +               G3ON +               i] =
  2542:         vcnModeTable[           SPON +               G3ON +        G1ON + i] =
  2543:         vcnModeTable[           SPON +               G3ON + G2ON +        i] =
  2544:         vcnModeTable[           SPON +               G3ON + G2ON + G1ON + i] =
  2545:         vcnModeTable[           SPON +        G4ON +                      i] =
  2546:         vcnModeTable[           SPON +        G4ON +               G1ON + i] =
  2547:         vcnModeTable[           SPON +        G4ON +        G2ON +        i] =
  2548:         vcnModeTable[           SPON +        G4ON +        G2ON + G1ON + i] =
  2549:         vcnModeTable[           SPON +        G4ON + G3ON +               i] =
  2550:         vcnModeTable[           SPON +        G4ON + G3ON +        G1ON + i] =
  2551:         vcnModeTable[           SPON +        G4ON + G3ON + G2ON +        i] =
  2552:         vcnModeTable[           SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.GS);
  2553:       vcnModeTable[      AHEX + SPON +                             G1ON + i] = (
  2554:         vcnModeTable[    AHEX + SPON +                      G2ON +        i] =
  2555:         vcnModeTable[    AHEX + SPON +                      G2ON + G1ON + i] =
  2556:         vcnModeTable[    AHEX + SPON +               G3ON +               i] =
  2557:         vcnModeTable[    AHEX + SPON +               G3ON +        G1ON + i] =
  2558:         vcnModeTable[    AHEX + SPON +               G3ON + G2ON +        i] =
  2559:         vcnModeTable[    AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  2560:         vcnModeTable[    AHEX + SPON +        G4ON +                      i] =
  2561:         vcnModeTable[    AHEX + SPON +        G4ON +               G1ON + i] =
  2562:         vcnModeTable[    AHEX + SPON +        G4ON +        G2ON +        i] =
  2563:         vcnModeTable[    AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  2564:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON +               i] =
  2565:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  2566:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  2567:         vcnModeTable[    AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XGS);
  2568:       //ST スプライト>テキスト
  2569:       //TS テキスト>スプライト
  2570:       vcnModeTable[             SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  2571:       vcnModeTable[      AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  2572:       //GST 512ドット65536色1プレーン>スプライト>テキスト
  2573:       //GTS 512ドット65536色1プレーン>テキスト>スプライト
  2574:       vcnModeTable[             SPON + TXON +                      G1ON + i] = (
  2575:         vcnModeTable[           SPON + TXON +               G2ON +        i] =
  2576:         vcnModeTable[           SPON + TXON +               G2ON + G1ON + i] =
  2577:         vcnModeTable[           SPON + TXON +        G3ON +               i] =
  2578:         vcnModeTable[           SPON + TXON +        G3ON +        G1ON + i] =
  2579:         vcnModeTable[           SPON + TXON +        G3ON + G2ON +        i] =
  2580:         vcnModeTable[           SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2581:         vcnModeTable[           SPON + TXON + G4ON +                      i] =
  2582:         vcnModeTable[           SPON + TXON + G4ON +               G1ON + i] =
  2583:         vcnModeTable[           SPON + TXON + G4ON +        G2ON +        i] =
  2584:         vcnModeTable[           SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2585:         vcnModeTable[           SPON + TXON + G4ON + G3ON +               i] =
  2586:         vcnModeTable[           SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2587:         vcnModeTable[           SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2588:         vcnModeTable[           SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.GST : DrawingMode.GTS);
  2589:       vcnModeTable[      AHEX + SPON + TXON +                      G1ON + i] = (
  2590:         vcnModeTable[    AHEX + SPON + TXON +               G2ON +        i] =
  2591:         vcnModeTable[    AHEX + SPON + TXON +               G2ON + G1ON + i] =
  2592:         vcnModeTable[    AHEX + SPON + TXON +        G3ON +               i] =
  2593:         vcnModeTable[    AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  2594:         vcnModeTable[    AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  2595:         vcnModeTable[    AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2596:         vcnModeTable[    AHEX + SPON + TXON + G4ON +                      i] =
  2597:         vcnModeTable[    AHEX + SPON + TXON + G4ON +               G1ON + i] =
  2598:         vcnModeTable[    AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  2599:         vcnModeTable[    AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2600:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON +               i] =
  2601:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2602:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2603:         vcnModeTable[    AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XGST : DrawingMode.XGTS);
  2604:       //----------------------------------------------------------------------------------------
  2605:       //GrPr==1
  2606:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  2607:       //N 表示画面なし
  2608:       vcnModeTable[  1 +                                                  i] = DrawingMode.N;
  2609:       vcnModeTable[  1 + AHEX +                                           i] = DrawingMode.XN;
  2610:       //sGt スプライト(OFF)>512ドット65536色1プレーン>テキスト(OFF) → Gt 512ドット65536色1プレーン>テキスト(OFF)
  2611:       //tGs テキスト(OFF)>512ドット65536色1プレーン>スプライト(OFF) → Gt 512ドット65536色1プレーン>テキスト(OFF)
  2612:       vcnModeTable[  1 +                                           G1ON + i] = (
  2613:         vcnModeTable[1 +                                    G2ON +        i] =
  2614:         vcnModeTable[1 +                                    G2ON + G1ON + i] =
  2615:         vcnModeTable[1 +                             G3ON +               i] =
  2616:         vcnModeTable[1 +                             G3ON +        G1ON + i] =
  2617:         vcnModeTable[1 +                             G3ON + G2ON +        i] =
  2618:         vcnModeTable[1 +                             G3ON + G2ON + G1ON + i] =
  2619:         vcnModeTable[1 +                      G4ON +                      i] =
  2620:         vcnModeTable[1 +                      G4ON +               G1ON + i] =
  2621:         vcnModeTable[1 +                      G4ON +        G2ON +        i] =
  2622:         vcnModeTable[1 +                      G4ON +        G2ON + G1ON + i] =
  2623:         vcnModeTable[1 +                      G4ON + G3ON +               i] =
  2624:         vcnModeTable[1 +                      G4ON + G3ON +        G1ON + i] =
  2625:         vcnModeTable[1 +                      G4ON + G3ON + G2ON +        i] =
  2626:         vcnModeTable[1 +                      G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.Gt);
  2627:       vcnModeTable[  1 + AHEX +                                    G1ON + i] = (
  2628:         vcnModeTable[1 + AHEX +                             G2ON +        i] =
  2629:         vcnModeTable[1 + AHEX +                             G2ON + G1ON + i] =
  2630:         vcnModeTable[1 + AHEX +                      G3ON +               i] =
  2631:         vcnModeTable[1 + AHEX +                      G3ON +        G1ON + i] =
  2632:         vcnModeTable[1 + AHEX +                      G3ON + G2ON +        i] =
  2633:         vcnModeTable[1 + AHEX +                      G3ON + G2ON + G1ON + i] =
  2634:         vcnModeTable[1 + AHEX +               G4ON +                      i] =
  2635:         vcnModeTable[1 + AHEX +               G4ON +               G1ON + i] =
  2636:         vcnModeTable[1 + AHEX +               G4ON +        G2ON +        i] =
  2637:         vcnModeTable[1 + AHEX +               G4ON +        G2ON + G1ON + i] =
  2638:         vcnModeTable[1 + AHEX +               G4ON + G3ON +               i] =
  2639:         vcnModeTable[1 + AHEX +               G4ON + G3ON +        G1ON + i] =
  2640:         vcnModeTable[1 + AHEX +               G4ON + G3ON + G2ON +        i] =
  2641:         vcnModeTable[1 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XGt);
  2642:       //T テキスト
  2643:       vcnModeTable[  1 +               TXON +                             i] = DrawingMode.T;
  2644:       vcnModeTable[  1 + AHEX +        TXON +                             i] = DrawingMode.XT;
  2645:       //sGT スプライト(OFF)>512ドット65536色1プレーン>テキスト → GT 512ドット65536色1プレーン>テキスト
  2646:       //TGs テキスト>512ドット65536色1プレーン>スプライト(OFF)
  2647:       vcnModeTable[  1 +               TXON +                      G1ON + i] = (
  2648:         vcnModeTable[1 +               TXON +               G2ON +        i] =
  2649:         vcnModeTable[1 +               TXON +               G2ON + G1ON + i] =
  2650:         vcnModeTable[1 +               TXON +        G3ON +               i] =
  2651:         vcnModeTable[1 +               TXON +        G3ON +        G1ON + i] =
  2652:         vcnModeTable[1 +               TXON +        G3ON + G2ON +        i] =
  2653:         vcnModeTable[1 +               TXON +        G3ON + G2ON + G1ON + i] =
  2654:         vcnModeTable[1 +               TXON + G4ON +                      i] =
  2655:         vcnModeTable[1 +               TXON + G4ON +               G1ON + i] =
  2656:         vcnModeTable[1 +               TXON + G4ON +        G2ON +        i] =
  2657:         vcnModeTable[1 +               TXON + G4ON +        G2ON + G1ON + i] =
  2658:         vcnModeTable[1 +               TXON + G4ON + G3ON +               i] =
  2659:         vcnModeTable[1 +               TXON + G4ON + G3ON +        G1ON + i] =
  2660:         vcnModeTable[1 +               TXON + G4ON + G3ON + G2ON +        i] =
  2661:         vcnModeTable[1 +               TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.GT : DrawingMode.TGs);
  2662:       vcnModeTable[  1 + AHEX +        TXON +                      G1ON + i] = (
  2663:         vcnModeTable[1 + AHEX +        TXON +               G2ON +        i] =
  2664:         vcnModeTable[1 + AHEX +        TXON +               G2ON + G1ON + i] =
  2665:         vcnModeTable[1 + AHEX +        TXON +        G3ON +               i] =
  2666:         vcnModeTable[1 + AHEX +        TXON +        G3ON +        G1ON + i] =
  2667:         vcnModeTable[1 + AHEX +        TXON +        G3ON + G2ON +        i] =
  2668:         vcnModeTable[1 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  2669:         vcnModeTable[1 + AHEX +        TXON + G4ON +                      i] =
  2670:         vcnModeTable[1 + AHEX +        TXON + G4ON +               G1ON + i] =
  2671:         vcnModeTable[1 + AHEX +        TXON + G4ON +        G2ON +        i] =
  2672:         vcnModeTable[1 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  2673:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON +               i] =
  2674:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  2675:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  2676:         vcnModeTable[1 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XGT : DrawingMode.XTGs);
  2677:       //S スプライト
  2678:       vcnModeTable[  1 +        SPON +                                    i] = DrawingMode.S;
  2679:       vcnModeTable[  1 + AHEX + SPON +                                    i] = DrawingMode.XS;
  2680:       //SGt スプライト>512ドット65536色1プレーン>テキスト(OFF)
  2681:       //tGS テキスト(OFF)>512ドット65536色1プレーン>スプライト → GS 512ドット65536色1プレーン>スプライト
  2682:       vcnModeTable[  1 +        SPON +                             G1ON + i] = (
  2683:         vcnModeTable[1 +        SPON +                      G2ON +        i] =
  2684:         vcnModeTable[1 +        SPON +                      G2ON + G1ON + i] =
  2685:         vcnModeTable[1 +        SPON +               G3ON +               i] =
  2686:         vcnModeTable[1 +        SPON +               G3ON +        G1ON + i] =
  2687:         vcnModeTable[1 +        SPON +               G3ON + G2ON +        i] =
  2688:         vcnModeTable[1 +        SPON +               G3ON + G2ON + G1ON + i] =
  2689:         vcnModeTable[1 +        SPON +        G4ON +                      i] =
  2690:         vcnModeTable[1 +        SPON +        G4ON +               G1ON + i] =
  2691:         vcnModeTable[1 +        SPON +        G4ON +        G2ON +        i] =
  2692:         vcnModeTable[1 +        SPON +        G4ON +        G2ON + G1ON + i] =
  2693:         vcnModeTable[1 +        SPON +        G4ON + G3ON +               i] =
  2694:         vcnModeTable[1 +        SPON +        G4ON + G3ON +        G1ON + i] =
  2695:         vcnModeTable[1 +        SPON +        G4ON + G3ON + G2ON +        i] =
  2696:         vcnModeTable[1 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SGt : DrawingMode.GS);
  2697:       vcnModeTable[  1 + AHEX + SPON +                             G1ON + i] = (
  2698:         vcnModeTable[1 + AHEX + SPON +                      G2ON +        i] =
  2699:         vcnModeTable[1 + AHEX + SPON +                      G2ON + G1ON + i] =
  2700:         vcnModeTable[1 + AHEX + SPON +               G3ON +               i] =
  2701:         vcnModeTable[1 + AHEX + SPON +               G3ON +        G1ON + i] =
  2702:         vcnModeTable[1 + AHEX + SPON +               G3ON + G2ON +        i] =
  2703:         vcnModeTable[1 + AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  2704:         vcnModeTable[1 + AHEX + SPON +        G4ON +                      i] =
  2705:         vcnModeTable[1 + AHEX + SPON +        G4ON +               G1ON + i] =
  2706:         vcnModeTable[1 + AHEX + SPON +        G4ON +        G2ON +        i] =
  2707:         vcnModeTable[1 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  2708:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON +               i] =
  2709:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  2710:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  2711:         vcnModeTable[1 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSGt : DrawingMode.XGS);
  2712:       //ST スプライト>テキスト
  2713:       //TS テキスト>スプライト
  2714:       vcnModeTable[  1 +        SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  2715:       vcnModeTable[  1 + AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  2716:       //SGT スプライト>512ドット65536色1プレーン>テキスト
  2717:       //TGS テキスト>512ドット65536色1プレーン>スプライト
  2718:       vcnModeTable[  1 +        SPON + TXON +                      G1ON + i] = (
  2719:         vcnModeTable[1 +        SPON + TXON +               G2ON +        i] =
  2720:         vcnModeTable[1 +        SPON + TXON +               G2ON + G1ON + i] =
  2721:         vcnModeTable[1 +        SPON + TXON +        G3ON +               i] =
  2722:         vcnModeTable[1 +        SPON + TXON +        G3ON +        G1ON + i] =
  2723:         vcnModeTable[1 +        SPON + TXON +        G3ON + G2ON +        i] =
  2724:         vcnModeTable[1 +        SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2725:         vcnModeTable[1 +        SPON + TXON + G4ON +                      i] =
  2726:         vcnModeTable[1 +        SPON + TXON + G4ON +               G1ON + i] =
  2727:         vcnModeTable[1 +        SPON + TXON + G4ON +        G2ON +        i] =
  2728:         vcnModeTable[1 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2729:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON +               i] =
  2730:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2731:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2732:         vcnModeTable[1 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.SGT : DrawingMode.TGS);
  2733:       vcnModeTable[  1 + AHEX + SPON + TXON +                      G1ON + i] = (
  2734:         vcnModeTable[1 + AHEX + SPON + TXON +               G2ON +        i] =
  2735:         vcnModeTable[1 + AHEX + SPON + TXON +               G2ON + G1ON + i] =
  2736:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON +               i] =
  2737:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  2738:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  2739:         vcnModeTable[1 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2740:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +                      i] =
  2741:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  2742:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  2743:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2744:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  2745:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2746:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2747:         vcnModeTable[1 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSGT : DrawingMode.XTGS);
  2748:       //----------------------------------------------------------------------------------------
  2749:       //GrPr==2
  2750:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  2751:       //N 表示画面なし
  2752:       vcnModeTable[  2 +                                                  i] = DrawingMode.N;
  2753:       vcnModeTable[  2 + AHEX +                                           i] = DrawingMode.XN;
  2754:       //stG スプライト(OFF)>テキスト(OFF)>512ドット65536色1プレーン → G 512ドット65536色1プレーン
  2755:       //tsG テキスト(OFF)>スプライト(OFF)>512ドット65536色1プレーン → G 512ドット65536色1プレーン
  2756:       vcnModeTable[  2 +                                           G1ON + i] = (
  2757:         vcnModeTable[2 +                                    G2ON +        i] =
  2758:         vcnModeTable[2 +                                    G2ON + G1ON + i] =
  2759:         vcnModeTable[2 +                             G3ON +               i] =
  2760:         vcnModeTable[2 +                             G3ON +        G1ON + i] =
  2761:         vcnModeTable[2 +                             G3ON + G2ON +        i] =
  2762:         vcnModeTable[2 +                             G3ON + G2ON + G1ON + i] =
  2763:         vcnModeTable[2 +                      G4ON +                      i] =
  2764:         vcnModeTable[2 +                      G4ON +               G1ON + i] =
  2765:         vcnModeTable[2 +                      G4ON +        G2ON +        i] =
  2766:         vcnModeTable[2 +                      G4ON +        G2ON + G1ON + i] =
  2767:         vcnModeTable[2 +                      G4ON + G3ON +               i] =
  2768:         vcnModeTable[2 +                      G4ON + G3ON +        G1ON + i] =
  2769:         vcnModeTable[2 +                      G4ON + G3ON + G2ON +        i] =
  2770:         vcnModeTable[2 +                      G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.G);
  2771:       vcnModeTable[  2 + AHEX +                                    G1ON + i] = (
  2772:         vcnModeTable[2 + AHEX +                             G2ON +        i] =
  2773:         vcnModeTable[2 + AHEX +                             G2ON + G1ON + i] =
  2774:         vcnModeTable[2 + AHEX +                      G3ON +               i] =
  2775:         vcnModeTable[2 + AHEX +                      G3ON +        G1ON + i] =
  2776:         vcnModeTable[2 + AHEX +                      G3ON + G2ON +        i] =
  2777:         vcnModeTable[2 + AHEX +                      G3ON + G2ON + G1ON + i] =
  2778:         vcnModeTable[2 + AHEX +               G4ON +                      i] =
  2779:         vcnModeTable[2 + AHEX +               G4ON +               G1ON + i] =
  2780:         vcnModeTable[2 + AHEX +               G4ON +        G2ON +        i] =
  2781:         vcnModeTable[2 + AHEX +               G4ON +        G2ON + G1ON + i] =
  2782:         vcnModeTable[2 + AHEX +               G4ON + G3ON +               i] =
  2783:         vcnModeTable[2 + AHEX +               G4ON + G3ON +        G1ON + i] =
  2784:         vcnModeTable[2 + AHEX +               G4ON + G3ON + G2ON +        i] =
  2785:         vcnModeTable[2 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XG);
  2786:       //T テキスト
  2787:       vcnModeTable[  2 +               TXON +                             i] = DrawingMode.T;
  2788:       vcnModeTable[  2 + AHEX +        TXON +                             i] = DrawingMode.XT;
  2789:       //sTG スプライト(OFF)>テキスト>512ドット65536色1プレーン → TG テキスト>512ドット65536色1プレーン
  2790:       //TsG テキスト>スプライト(OFF)>512ドット65536色1プレーン → TG テキスト>512ドット65536色1プレーン
  2791:       vcnModeTable[  2 +               TXON +                      G1ON + i] = (
  2792:         vcnModeTable[2 +               TXON +               G2ON +        i] =
  2793:         vcnModeTable[2 +               TXON +               G2ON + G1ON + i] =
  2794:         vcnModeTable[2 +               TXON +        G3ON +               i] =
  2795:         vcnModeTable[2 +               TXON +        G3ON +        G1ON + i] =
  2796:         vcnModeTable[2 +               TXON +        G3ON + G2ON +        i] =
  2797:         vcnModeTable[2 +               TXON +        G3ON + G2ON + G1ON + i] =
  2798:         vcnModeTable[2 +               TXON + G4ON +                      i] =
  2799:         vcnModeTable[2 +               TXON + G4ON +               G1ON + i] =
  2800:         vcnModeTable[2 +               TXON + G4ON +        G2ON +        i] =
  2801:         vcnModeTable[2 +               TXON + G4ON +        G2ON + G1ON + i] =
  2802:         vcnModeTable[2 +               TXON + G4ON + G3ON +               i] =
  2803:         vcnModeTable[2 +               TXON + G4ON + G3ON +        G1ON + i] =
  2804:         vcnModeTable[2 +               TXON + G4ON + G3ON + G2ON +        i] =
  2805:         vcnModeTable[2 +               TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.TG);
  2806:       vcnModeTable[  2 + AHEX +        TXON +                      G1ON + i] = (
  2807:         vcnModeTable[2 + AHEX +        TXON +               G2ON +        i] =
  2808:         vcnModeTable[2 + AHEX +        TXON +               G2ON + G1ON + i] =
  2809:         vcnModeTable[2 + AHEX +        TXON +        G3ON +               i] =
  2810:         vcnModeTable[2 + AHEX +        TXON +        G3ON +        G1ON + i] =
  2811:         vcnModeTable[2 + AHEX +        TXON +        G3ON + G2ON +        i] =
  2812:         vcnModeTable[2 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  2813:         vcnModeTable[2 + AHEX +        TXON + G4ON +                      i] =
  2814:         vcnModeTable[2 + AHEX +        TXON + G4ON +               G1ON + i] =
  2815:         vcnModeTable[2 + AHEX +        TXON + G4ON +        G2ON +        i] =
  2816:         vcnModeTable[2 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  2817:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON +               i] =
  2818:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  2819:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  2820:         vcnModeTable[2 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XTG);
  2821:       //S スプライト
  2822:       vcnModeTable[  2 +        SPON +                                    i] = DrawingMode.S;
  2823:       vcnModeTable[  2 + AHEX + SPON +                                    i] = DrawingMode.XS;
  2824:       //StG スプライト>テキスト(OFF)>512ドット65536色1プレーン → SG スプライト>512ドット65536色1プレーン
  2825:       //tSG テキスト(OFF)>スプライト>512ドット65536色1プレーン → SG スプライト>512ドット65536色1プレーン
  2826:       vcnModeTable[  2 +        SPON +                             G1ON + i] = (
  2827:         vcnModeTable[2 +        SPON +                      G2ON +        i] =
  2828:         vcnModeTable[2 +        SPON +                      G2ON + G1ON + i] =
  2829:         vcnModeTable[2 +        SPON +               G3ON +               i] =
  2830:         vcnModeTable[2 +        SPON +               G3ON +        G1ON + i] =
  2831:         vcnModeTable[2 +        SPON +               G3ON + G2ON +        i] =
  2832:         vcnModeTable[2 +        SPON +               G3ON + G2ON + G1ON + i] =
  2833:         vcnModeTable[2 +        SPON +        G4ON +                      i] =
  2834:         vcnModeTable[2 +        SPON +        G4ON +               G1ON + i] =
  2835:         vcnModeTable[2 +        SPON +        G4ON +        G2ON +        i] =
  2836:         vcnModeTable[2 +        SPON +        G4ON +        G2ON + G1ON + i] =
  2837:         vcnModeTable[2 +        SPON +        G4ON + G3ON +               i] =
  2838:         vcnModeTable[2 +        SPON +        G4ON + G3ON +        G1ON + i] =
  2839:         vcnModeTable[2 +        SPON +        G4ON + G3ON + G2ON +        i] =
  2840:         vcnModeTable[2 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.SG);
  2841:       vcnModeTable[  2 + AHEX + SPON +                             G1ON + i] = (
  2842:         vcnModeTable[2 + AHEX + SPON +                      G2ON +        i] =
  2843:         vcnModeTable[2 + AHEX + SPON +                      G2ON + G1ON + i] =
  2844:         vcnModeTable[2 + AHEX + SPON +               G3ON +               i] =
  2845:         vcnModeTable[2 + AHEX + SPON +               G3ON +        G1ON + i] =
  2846:         vcnModeTable[2 + AHEX + SPON +               G3ON + G2ON +        i] =
  2847:         vcnModeTable[2 + AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  2848:         vcnModeTable[2 + AHEX + SPON +        G4ON +                      i] =
  2849:         vcnModeTable[2 + AHEX + SPON +        G4ON +               G1ON + i] =
  2850:         vcnModeTable[2 + AHEX + SPON +        G4ON +        G2ON +        i] =
  2851:         vcnModeTable[2 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  2852:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON +               i] =
  2853:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  2854:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  2855:         vcnModeTable[2 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XSG);
  2856:       //ST スプライト>テキスト
  2857:       //TS テキスト>スプライト
  2858:       vcnModeTable[  2 +        SPON + TXON +                             i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  2859:       vcnModeTable[  2 + AHEX + SPON + TXON +                             i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  2860:       //STG スプライト>テキスト>512ドット65536色1プレーン
  2861:       //TSG テキスト>スプライト>512ドット65536色1プレーン
  2862:       vcnModeTable[  2 +        SPON + TXON +                      G1ON + i] = (
  2863:         vcnModeTable[2 +        SPON + TXON +               G2ON +        i] =
  2864:         vcnModeTable[2 +        SPON + TXON +               G2ON + G1ON + i] =
  2865:         vcnModeTable[2 +        SPON + TXON +        G3ON +               i] =
  2866:         vcnModeTable[2 +        SPON + TXON +        G3ON +        G1ON + i] =
  2867:         vcnModeTable[2 +        SPON + TXON +        G3ON + G2ON +        i] =
  2868:         vcnModeTable[2 +        SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2869:         vcnModeTable[2 +        SPON + TXON + G4ON +                      i] =
  2870:         vcnModeTable[2 +        SPON + TXON + G4ON +               G1ON + i] =
  2871:         vcnModeTable[2 +        SPON + TXON + G4ON +        G2ON +        i] =
  2872:         vcnModeTable[2 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2873:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON +               i] =
  2874:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2875:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2876:         vcnModeTable[2 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.STG : DrawingMode.TSG);
  2877:       vcnModeTable[  2 + AHEX + SPON + TXON +                      G1ON + i] = (
  2878:         vcnModeTable[2 + AHEX + SPON + TXON +               G2ON +        i] =
  2879:         vcnModeTable[2 + AHEX + SPON + TXON +               G2ON + G1ON + i] =
  2880:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON +               i] =
  2881:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  2882:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  2883:         vcnModeTable[2 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2884:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +                      i] =
  2885:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  2886:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  2887:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2888:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  2889:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2890:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2891:         vcnModeTable[2 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = s < t ? DrawingMode.XSTG : DrawingMode.XTSG);
  2892:       //----------------------------------------------------------------------------------------
  2893:       //GrPr==3
  2894:       //          GrPr   AHEx   SpOn   TxOn   G4On   G3On   G2On   G1On   SpPr|TxPr|GxOn
  2895:       //N 表示画面なし
  2896:       vcnModeTable[  3 +                                                  i] = (
  2897:         vcnModeTable[3 +               TXON +                             i] =
  2898:         vcnModeTable[3 +        SPON +                                    i] =
  2899:         vcnModeTable[3 +        SPON + TXON +                             i] = DrawingMode.N);
  2900:       vcnModeTable[  3 + AHEX +                                           i] = (
  2901:         vcnModeTable[3 + AHEX +        TXON +                             i] =
  2902:         vcnModeTable[3 + AHEX + SPON +                                    i] =
  2903:         vcnModeTable[3 + AHEX + SPON + TXON +                             i] = DrawingMode.XN);
  2904:       //Gst 512ドット65536色1プレーン>スプライト(OFF)>テキスト(OFF) → Gt 512ドット65536色1プレーン>テキスト(OFF)
  2905:       //Gts 512ドット65536色1プレーン>テキスト(OFF)>スプライト(OFF) → Gt 512ドット65536色1プレーン>テキスト(OFF)
  2906:       vcnModeTable[  3 +                                           G1ON + i] = (
  2907:         vcnModeTable[3 +                                    G2ON +        i] =
  2908:         vcnModeTable[3 +                                    G2ON + G1ON + i] =
  2909:         vcnModeTable[3 +                             G3ON +               i] =
  2910:         vcnModeTable[3 +                             G3ON +        G1ON + i] =
  2911:         vcnModeTable[3 +                             G3ON + G2ON +        i] =
  2912:         vcnModeTable[3 +                             G3ON + G2ON + G1ON + i] =
  2913:         vcnModeTable[3 +                      G4ON +                      i] =
  2914:         vcnModeTable[3 +                      G4ON +               G1ON + i] =
  2915:         vcnModeTable[3 +                      G4ON +        G2ON +        i] =
  2916:         vcnModeTable[3 +                      G4ON +        G2ON + G1ON + i] =
  2917:         vcnModeTable[3 +                      G4ON + G3ON +               i] =
  2918:         vcnModeTable[3 +                      G4ON + G3ON +        G1ON + i] =
  2919:         vcnModeTable[3 +                      G4ON + G3ON + G2ON +        i] =
  2920:         vcnModeTable[3 +                      G4ON + G3ON + G2ON + G1ON + i] =
  2921:         vcnModeTable[3 +               TXON +                      G1ON + i] =
  2922:         vcnModeTable[3 +               TXON +               G2ON +        i] =
  2923:         vcnModeTable[3 +               TXON +               G2ON + G1ON + i] =
  2924:         vcnModeTable[3 +               TXON +        G3ON +               i] =
  2925:         vcnModeTable[3 +               TXON +        G3ON +        G1ON + i] =
  2926:         vcnModeTable[3 +               TXON +        G3ON + G2ON +        i] =
  2927:         vcnModeTable[3 +               TXON +        G3ON + G2ON + G1ON + i] =
  2928:         vcnModeTable[3 +               TXON + G4ON +                      i] =
  2929:         vcnModeTable[3 +               TXON + G4ON +               G1ON + i] =
  2930:         vcnModeTable[3 +               TXON + G4ON +        G2ON +        i] =
  2931:         vcnModeTable[3 +               TXON + G4ON +        G2ON + G1ON + i] =
  2932:         vcnModeTable[3 +               TXON + G4ON + G3ON +               i] =
  2933:         vcnModeTable[3 +               TXON + G4ON + G3ON +        G1ON + i] =
  2934:         vcnModeTable[3 +               TXON + G4ON + G3ON + G2ON +        i] =
  2935:         vcnModeTable[3 +               TXON + G4ON + G3ON + G2ON + G1ON + i] =
  2936:         vcnModeTable[3 +        SPON +                             G1ON + i] =
  2937:         vcnModeTable[3 +        SPON +                      G2ON +        i] =
  2938:         vcnModeTable[3 +        SPON +                      G2ON + G1ON + i] =
  2939:         vcnModeTable[3 +        SPON +               G3ON +               i] =
  2940:         vcnModeTable[3 +        SPON +               G3ON +        G1ON + i] =
  2941:         vcnModeTable[3 +        SPON +               G3ON + G2ON +        i] =
  2942:         vcnModeTable[3 +        SPON +               G3ON + G2ON + G1ON + i] =
  2943:         vcnModeTable[3 +        SPON +        G4ON +                      i] =
  2944:         vcnModeTable[3 +        SPON +        G4ON +               G1ON + i] =
  2945:         vcnModeTable[3 +        SPON +        G4ON +        G2ON +        i] =
  2946:         vcnModeTable[3 +        SPON +        G4ON +        G2ON + G1ON + i] =
  2947:         vcnModeTable[3 +        SPON +        G4ON + G3ON +               i] =
  2948:         vcnModeTable[3 +        SPON +        G4ON + G3ON +        G1ON + i] =
  2949:         vcnModeTable[3 +        SPON +        G4ON + G3ON + G2ON +        i] =
  2950:         vcnModeTable[3 +        SPON +        G4ON + G3ON + G2ON + G1ON + i] =
  2951:         vcnModeTable[3 +        SPON + TXON +                      G1ON + i] =
  2952:         vcnModeTable[3 +        SPON + TXON +               G2ON +        i] =
  2953:         vcnModeTable[3 +        SPON + TXON +               G2ON + G1ON + i] =
  2954:         vcnModeTable[3 +        SPON + TXON +        G3ON +               i] =
  2955:         vcnModeTable[3 +        SPON + TXON +        G3ON +        G1ON + i] =
  2956:         vcnModeTable[3 +        SPON + TXON +        G3ON + G2ON +        i] =
  2957:         vcnModeTable[3 +        SPON + TXON +        G3ON + G2ON + G1ON + i] =
  2958:         vcnModeTable[3 +        SPON + TXON + G4ON +                      i] =
  2959:         vcnModeTable[3 +        SPON + TXON + G4ON +               G1ON + i] =
  2960:         vcnModeTable[3 +        SPON + TXON + G4ON +        G2ON +        i] =
  2961:         vcnModeTable[3 +        SPON + TXON + G4ON +        G2ON + G1ON + i] =
  2962:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON +               i] =
  2963:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON +        G1ON + i] =
  2964:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON + G2ON +        i] =
  2965:         vcnModeTable[3 +        SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.Gt);
  2966:       vcnModeTable[  3 + AHEX +                                    G1ON + i] = (
  2967:         vcnModeTable[3 + AHEX +                             G2ON +        i] =
  2968:         vcnModeTable[3 + AHEX +                             G2ON + G1ON + i] =
  2969:         vcnModeTable[3 + AHEX +                      G3ON +               i] =
  2970:         vcnModeTable[3 + AHEX +                      G3ON +        G1ON + i] =
  2971:         vcnModeTable[3 + AHEX +                      G3ON + G2ON +        i] =
  2972:         vcnModeTable[3 + AHEX +                      G3ON + G2ON + G1ON + i] =
  2973:         vcnModeTable[3 + AHEX +               G4ON +                      i] =
  2974:         vcnModeTable[3 + AHEX +               G4ON +               G1ON + i] =
  2975:         vcnModeTable[3 + AHEX +               G4ON +        G2ON +        i] =
  2976:         vcnModeTable[3 + AHEX +               G4ON +        G2ON + G1ON + i] =
  2977:         vcnModeTable[3 + AHEX +               G4ON + G3ON +               i] =
  2978:         vcnModeTable[3 + AHEX +               G4ON + G3ON +        G1ON + i] =
  2979:         vcnModeTable[3 + AHEX +               G4ON + G3ON + G2ON +        i] =
  2980:         vcnModeTable[3 + AHEX +               G4ON + G3ON + G2ON + G1ON + i] =
  2981:         vcnModeTable[3 + AHEX +        TXON +                      G1ON + i] =
  2982:         vcnModeTable[3 + AHEX +        TXON +               G2ON +        i] =
  2983:         vcnModeTable[3 + AHEX +        TXON +               G2ON + G1ON + i] =
  2984:         vcnModeTable[3 + AHEX +        TXON +        G3ON +               i] =
  2985:         vcnModeTable[3 + AHEX +        TXON +        G3ON +        G1ON + i] =
  2986:         vcnModeTable[3 + AHEX +        TXON +        G3ON + G2ON +        i] =
  2987:         vcnModeTable[3 + AHEX +        TXON +        G3ON + G2ON + G1ON + i] =
  2988:         vcnModeTable[3 + AHEX +        TXON + G4ON +                      i] =
  2989:         vcnModeTable[3 + AHEX +        TXON + G4ON +               G1ON + i] =
  2990:         vcnModeTable[3 + AHEX +        TXON + G4ON +        G2ON +        i] =
  2991:         vcnModeTable[3 + AHEX +        TXON + G4ON +        G2ON + G1ON + i] =
  2992:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON +               i] =
  2993:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON +        G1ON + i] =
  2994:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON + G2ON +        i] =
  2995:         vcnModeTable[3 + AHEX +        TXON + G4ON + G3ON + G2ON + G1ON + i] =
  2996:         vcnModeTable[3 + AHEX + SPON +                             G1ON + i] =
  2997:         vcnModeTable[3 + AHEX + SPON +                      G2ON +        i] =
  2998:         vcnModeTable[3 + AHEX + SPON +                      G2ON + G1ON + i] =
  2999:         vcnModeTable[3 + AHEX + SPON +               G3ON +               i] =
  3000:         vcnModeTable[3 + AHEX + SPON +               G3ON +        G1ON + i] =
  3001:         vcnModeTable[3 + AHEX + SPON +               G3ON + G2ON +        i] =
  3002:         vcnModeTable[3 + AHEX + SPON +               G3ON + G2ON + G1ON + i] =
  3003:         vcnModeTable[3 + AHEX + SPON +        G4ON +                      i] =
  3004:         vcnModeTable[3 + AHEX + SPON +        G4ON +               G1ON + i] =
  3005:         vcnModeTable[3 + AHEX + SPON +        G4ON +        G2ON +        i] =
  3006:         vcnModeTable[3 + AHEX + SPON +        G4ON +        G2ON + G1ON + i] =
  3007:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON +               i] =
  3008:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON +        G1ON + i] =
  3009:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON + G2ON +        i] =
  3010:         vcnModeTable[3 + AHEX + SPON +        G4ON + G3ON + G2ON + G1ON + i] =
  3011:         vcnModeTable[3 + AHEX + SPON + TXON +                      G1ON + i] =
  3012:         vcnModeTable[3 + AHEX + SPON + TXON +               G2ON +        i] =
  3013:         vcnModeTable[3 + AHEX + SPON + TXON +               G2ON + G1ON + i] =
  3014:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON +               i] =
  3015:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON +        G1ON + i] =
  3016:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON + G2ON +        i] =
  3017:         vcnModeTable[3 + AHEX + SPON + TXON +        G3ON + G2ON + G1ON + i] =
  3018:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +                      i] =
  3019:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +               G1ON + i] =
  3020:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +        G2ON +        i] =
  3021:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON +        G2ON + G1ON + i] =
  3022:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON +               i] =
  3023:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON +        G1ON + i] =
  3024:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON + G2ON +        i] =
  3025:         vcnModeTable[3 + AHEX + SPON + TXON + G4ON + G3ON + G2ON + G1ON + i] = DrawingMode.XGt);
  3026:     }  //for ii
  3027:   }  //vcnMakeTable3(int)
  3028: 
  3029:   //vcnMakeTable4 (grmm)
  3030:   //  描画モード4のテーブルを作る
  3031:   public static void vcnMakeTable4 (int grmm) {
  3032:     //----------------------------------------------------------------------------------------
  3033:     //H  1024ドット16色
  3034:     //              SpTx_3210          SpTx_3210
  3035:     for (int ii = 0b0000_0000; ii <= 0b1111_1111; ii++) {
  3036:       //                               3210                 SpTx
  3037:       int i = grmm << 6 | (ii & 0b0000_1111) << 9 | (ii & 0b1111_0000) >> 2;
  3038:       int s = i >> 4 & 3;
  3039:       int t = i >> 2 & 3;
  3040:       //----------------------------------------------------------------------------------------
  3041:       //GrPr==0
  3042:       //        GrPr   AHEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3043:       //N 表示画面なし
  3044:       vcnModeTable[                                i] = DrawingMode.N;
  3045:       vcnModeTable[    AHEX +                      i] = DrawingMode.XN;
  3046:       //Hst 1024ドット16色1プレーン>スプライト(OFF)>テキスト(OFF) → Ht 1024ドット16色1プレーン>テキスト(OFF)
  3047:       //Hts 1024ドット16色1プレーン>テキスト(OFF)>スプライト(OFF) → Ht 1024ドット16色1プレーン>テキスト(OFF)
  3048:       vcnModeTable[                         GXON + i] = DrawingMode.Ht;
  3049:       vcnModeTable[    AHEX +               GXON + i] = DrawingMode.XHt;
  3050:       //T テキスト
  3051:       vcnModeTable[                  TXON +        i] = DrawingMode.T;
  3052:       vcnModeTable[    AHEX +        TXON +        i] = DrawingMode.XT;
  3053:       //HsT 1024ドット16色1プレーン>スプライト(OFF)>テキスト → HT 1024ドット16色1プレーン>テキスト
  3054:       //HTs 1024ドット16色1プレーン>テキスト>スプライト(OFF) → HT 1024ドット16色1プレーン>テキスト
  3055:       vcnModeTable[                  TXON + GXON + i] = DrawingMode.HT;
  3056:       vcnModeTable[    AHEX +        TXON + GXON + i] = DrawingMode.XHT;
  3057:       //S スプライト
  3058:       vcnModeTable[           SPON +               i] = DrawingMode.S;
  3059:       vcnModeTable[    AHEX + SPON +               i] = DrawingMode.XS;
  3060:       //HSt 1024ドット16色1プレーン>スプライト>テキスト(OFF) → HS 1024ドット16色1プレーン>スプライト
  3061:       //HtS 1024ドット16色1プレーン>テキスト(OFF)>スプライト → HS 1024ドット16色1プレーン>スプライト
  3062:       vcnModeTable[           SPON +        GXON + i] = DrawingMode.HS;
  3063:       vcnModeTable[    AHEX + SPON +        GXON + i] = DrawingMode.XHS;
  3064:       //ST スプライト>テキスト
  3065:       //TS テキスト>スプライト
  3066:       vcnModeTable[           SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3067:       vcnModeTable[    AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3068:       //HST 1024ドット16色1プレーン>スプライト>テキスト
  3069:       //HTS 1024ドット16色1プレーン>テキスト>スプライト
  3070:       vcnModeTable[           SPON + TXON + GXON + i] = s < t ? DrawingMode.HST : DrawingMode.HTS;
  3071:       vcnModeTable[    AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XHST : DrawingMode.XHTS;
  3072:       //----------------------------------------------------------------------------------------
  3073:       //GrPr==1
  3074:       //        GrPr   AHEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3075:       //N 表示画面なし
  3076:       vcnModeTable[1 +                             i] = DrawingMode.N;
  3077:       vcnModeTable[1 + AHEX +                      i] = DrawingMode.XN;
  3078:       //sHt スプライト(OFF)>1024ドット16色1プレーン>テキスト(OFF) → Ht 1024ドット16色1プレーン>テキスト(OFF)
  3079:       //tHs テキスト(OFF)>1024ドット16色1プレーン>スプライト(OFF) → Ht 1024ドット16色1プレーン>テキスト(OFF)
  3080:       vcnModeTable[1 +                      GXON + i] = DrawingMode.Ht;
  3081:       vcnModeTable[1 + AHEX +               GXON + i] = DrawingMode.XHt;
  3082:       //T テキスト
  3083:       vcnModeTable[1 +               TXON +        i] = DrawingMode.T;
  3084:       vcnModeTable[1 + AHEX +        TXON +        i] = DrawingMode.XT;
  3085:       //sHT スプライト(OFF)>1024ドット16色1プレーン>テキスト → HT 1024ドット16色1プレーン>テキスト
  3086:       //THs テキスト>1024ドット16色1プレーン>スプライト(OFF)
  3087:       vcnModeTable[1 +               TXON + GXON + i] = s < t ? DrawingMode.HT : DrawingMode.THs;
  3088:       vcnModeTable[1 + AHEX +        TXON + GXON + i] = s < t ? DrawingMode.XHT : DrawingMode.XTHs;
  3089:       //S スプライト
  3090:       vcnModeTable[1 +        SPON +               i] = DrawingMode.S;
  3091:       vcnModeTable[1 + AHEX + SPON +               i] = DrawingMode.XS;
  3092:       //SHt スプライト>1024ドット16色1プレーン>テキスト(OFF)
  3093:       //tHS テキスト(OFF)>1024ドット16色1プレーン>スプライト → HS 1024ドット16色1プレーン>スプライト
  3094:       vcnModeTable[1 +        SPON +        GXON + i] = s < t ? DrawingMode.SHt : DrawingMode.HS;
  3095:       vcnModeTable[1 + AHEX + SPON +        GXON + i] = s < t ? DrawingMode.XSHt : DrawingMode.XHS;
  3096:       //ST スプライト>テキスト
  3097:       //TS テキスト>スプライト
  3098:       vcnModeTable[1 +        SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3099:       vcnModeTable[1 + AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3100:       //SHT スプライト>1024ドット16色1プレーン>テキスト
  3101:       //THS テキスト>1024ドット16色1プレーン>スプライト
  3102:       vcnModeTable[1 +        SPON + TXON + GXON + i] = s < t ? DrawingMode.SHT : DrawingMode.THS;
  3103:       vcnModeTable[1 + AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XSHT : DrawingMode.XTHS;
  3104:       //----------------------------------------------------------------------------------------
  3105:       //GrPr==2
  3106:       //        GrPr   AHEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3107:       //N 表示画面なし
  3108:       vcnModeTable[2 +                             i] = DrawingMode.N;
  3109:       vcnModeTable[2 + AHEX +                      i] = DrawingMode.XN;
  3110:       //stH スプライト(OFF)>テキスト(OFF)>1024ドット16色1プレーン → H 1024ドット16色1プレーン
  3111:       //tsH テキスト(OFF)>スプライト(OFF)>1024ドット16色1プレーン → H 1024ドット16色1プレーン
  3112:       vcnModeTable[2 +                      GXON + i] = DrawingMode.H;
  3113:       vcnModeTable[2 + AHEX +               GXON + i] = DrawingMode.XH;
  3114:       //T テキスト
  3115:       vcnModeTable[2 +               TXON +        i] = DrawingMode.T;
  3116:       vcnModeTable[2 + AHEX +        TXON +        i] = DrawingMode.XT;
  3117:       //sTH スプライト(OFF)>テキスト>1024ドット16色1プレーン → TH テキスト>1024ドット16色1プレーン
  3118:       //TsH テキスト>スプライト(OFF)>1024ドット16色1プレーン → TH テキスト>1024ドット16色1プレーン
  3119:       vcnModeTable[2 +               TXON + GXON + i] = DrawingMode.TH;
  3120:       vcnModeTable[2 + AHEX +        TXON + GXON + i] = DrawingMode.XTH;
  3121:       //S スプライト
  3122:       vcnModeTable[2 +        SPON +               i] = DrawingMode.S;
  3123:       vcnModeTable[2 + AHEX + SPON +               i] = DrawingMode.XS;
  3124:       //StH スプライト>テキスト(OFF)>1024ドット16色1プレーン → SH スプライト>1024ドット16色1プレーン
  3125:       //tSH テキスト(OFF)>スプライト>1024ドット16色1プレーン → SH スプライト>1024ドット16色1プレーン
  3126:       vcnModeTable[2 +        SPON +        GXON + i] = DrawingMode.SH;
  3127:       vcnModeTable[2 + AHEX + SPON +        GXON + i] = DrawingMode.XSH;
  3128:       //ST スプライト>テキスト
  3129:       //TS テキスト>スプライト
  3130:       vcnModeTable[2 +        SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3131:       vcnModeTable[2 + AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3132:       //STH スプライト>テキスト>1024ドット16色1プレーン
  3133:       //TSH テキスト>スプライト>1024ドット16色1プレーン
  3134:       vcnModeTable[2 +        SPON + TXON + GXON + i] = s < t ? DrawingMode.STH : DrawingMode.TSH;
  3135:       vcnModeTable[2 + AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XSTH : DrawingMode.XTSH;
  3136:       //----------------------------------------------------------------------------------------
  3137:       //GrPr==3
  3138:       //          GrPr   AHEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3139:       //N 表示画面なし
  3140:       vcnModeTable[  3 +                             i] = (
  3141:         vcnModeTable[3 +               TXON +        i] =
  3142:         vcnModeTable[3 +        SPON +               i] =
  3143:         vcnModeTable[3 +        SPON + TXON +        i] = DrawingMode.N);
  3144:       vcnModeTable[  3 + AHEX +                      i] = (
  3145:         vcnModeTable[3 + AHEX +        TXON +        i] =
  3146:         vcnModeTable[3 + AHEX + SPON +               i] =
  3147:         vcnModeTable[3 + AHEX + SPON + TXON +        i] = DrawingMode.XN);
  3148:       //Hst 1024ドット16色1プレーン>スプライト(OFF)>テキスト(OFF) → Ht 1024ドット16色1プレーン>テキスト(OFF)
  3149:       //Hts 1024ドット16色1プレーン>テキスト(OFF)>スプライト(OFF) → Ht 1024ドット16色1プレーン>テキスト(OFF)
  3150:       vcnModeTable[  3 +                      GXON + i] = (
  3151:         vcnModeTable[3 +               TXON + GXON + i] =
  3152:         vcnModeTable[3 +        SPON +        GXON + i] =
  3153:         vcnModeTable[3 +        SPON + TXON + GXON + i] = DrawingMode.Ht);
  3154:       vcnModeTable[  3 + AHEX +               GXON + i] = (
  3155:         vcnModeTable[3 + AHEX +        TXON + GXON + i] =
  3156:         vcnModeTable[3 + AHEX + SPON +        GXON + i] =
  3157:         vcnModeTable[3 + AHEX + SPON + TXON + GXON + i] = DrawingMode.XHt);
  3158:     }  //for ii
  3159:   }  //vcnMakeTable4(int)
  3160: 
  3161:   //vcnMakeTable5 (grmm)
  3162:   //  描画モード5のテーブルを作る
  3163:   public static void vcnMakeTable5 (int grmm) {
  3164:     //----------------------------------------------------------------------------------------
  3165:     //I  1024ドット256色
  3166:     //              SpTx_3210          SpTx_3210
  3167:     for (int ii = 0b0000_0000; ii <= 0b1111_1111; ii++) {
  3168:       //                               3210                 SpTx
  3169:       int i = grmm << 6 | (ii & 0b0000_1111) << 9 | (ii & 0b1111_0000) >> 2;
  3170:       int s = i >> 4 & 3;
  3171:       int t = i >> 2 & 3;
  3172:       //----------------------------------------------------------------------------------------
  3173:       //GrPr==0
  3174:       //        GrPr   AHEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3175:       //N 表示画面なし
  3176:       vcnModeTable[                                i] = DrawingMode.N;
  3177:       vcnModeTable[    AHEX +                      i] = DrawingMode.XN;
  3178:       //Ist 1024ドット256色1プレーン>スプライト(OFF)>テキスト(OFF) → It 1024ドット256色1プレーン>テキスト(OFF)
  3179:       //Its 1024ドット256色1プレーン>テキスト(OFF)>スプライト(OFF) → It 1024ドット256色1プレーン>テキスト(OFF)
  3180:       vcnModeTable[                         GXON + i] = DrawingMode.It;
  3181:       vcnModeTable[    AHEX +               GXON + i] = DrawingMode.XIt;
  3182:       //T テキスト
  3183:       vcnModeTable[                  TXON +        i] = DrawingMode.T;
  3184:       vcnModeTable[    AHEX +        TXON +        i] = DrawingMode.XT;
  3185:       //IsT 1024ドット256色1プレーン>スプライト(OFF)>テキスト → IT 1024ドット256色1プレーン>テキスト
  3186:       //ITs 1024ドット256色1プレーン>テキスト>スプライト(OFF) → IT 1024ドット256色1プレーン>テキスト
  3187:       vcnModeTable[                  TXON + GXON + i] = DrawingMode.IT;
  3188:       vcnModeTable[    AHEX +        TXON + GXON + i] = DrawingMode.XIT;
  3189:       //S スプライト
  3190:       vcnModeTable[           SPON +               i] = DrawingMode.S;
  3191:       vcnModeTable[    AHEX + SPON +               i] = DrawingMode.XS;
  3192:       //ISt 1024ドット256色1プレーン>スプライト>テキスト(OFF) → IS 1024ドット256色1プレーン>スプライト
  3193:       //ItS 1024ドット256色1プレーン>テキスト(OFF)>スプライト → IS 1024ドット256色1プレーン>スプライト
  3194:       vcnModeTable[           SPON +        GXON + i] = DrawingMode.IS;
  3195:       vcnModeTable[    AHEX + SPON +        GXON + i] = DrawingMode.XIS;
  3196:       //ST スプライト>テキスト
  3197:       //TS テキスト>スプライト
  3198:       vcnModeTable[           SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3199:       vcnModeTable[    AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3200:       //IST 1024ドット256色1プレーン>スプライト>テキスト
  3201:       //ITS 1024ドット256色1プレーン>テキスト>スプライト
  3202:       vcnModeTable[           SPON + TXON + GXON + i] = s < t ? DrawingMode.IST : DrawingMode.ITS;
  3203:       vcnModeTable[    AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XIST : DrawingMode.XITS;
  3204:       //----------------------------------------------------------------------------------------
  3205:       //GrPr==1
  3206:       //        GrPr   AIEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3207:       //N 表示画面なし
  3208:       vcnModeTable[1 +                             i] = DrawingMode.N;
  3209:       vcnModeTable[1 + AHEX +                      i] = DrawingMode.XN;
  3210:       //sIt スプライト(OFF)>1024ドット256色1プレーン>テキスト(OFF) → It 1024ドット256色1プレーン>テキスト(OFF)
  3211:       //tIs テキスト(OFF)>1024ドット256色1プレーン>スプライト(OFF) → It 1024ドット256色1プレーン>テキスト(OFF)
  3212:       vcnModeTable[1 +                      GXON + i] = DrawingMode.It;
  3213:       vcnModeTable[1 + AHEX +               GXON + i] = DrawingMode.XIt;
  3214:       //T テキスト
  3215:       vcnModeTable[1 +               TXON +        i] = DrawingMode.T;
  3216:       vcnModeTable[1 + AHEX +        TXON +        i] = DrawingMode.XT;
  3217:       //sIT スプライト(OFF)>1024ドット256色1プレーン>テキスト → IT 1024ドット256色1プレーン>テキスト
  3218:       //TIs テキスト>1024ドット256色1プレーン>スプライト(OFF)
  3219:       vcnModeTable[1 +               TXON + GXON + i] = s < t ? DrawingMode.IT : DrawingMode.TIs;
  3220:       vcnModeTable[1 + AHEX +        TXON + GXON + i] = s < t ? DrawingMode.XIT : DrawingMode.XTIs;
  3221:       //S スプライト
  3222:       vcnModeTable[1 +        SPON +               i] = DrawingMode.S;
  3223:       vcnModeTable[1 + AHEX + SPON +               i] = DrawingMode.XS;
  3224:       //SIt スプライト>1024ドット256色1プレーン>テキスト(OFF)
  3225:       //tIS テキスト(OFF)>1024ドット256色1プレーン>スプライト → IS 1024ドット256色1プレーン>スプライト
  3226:       vcnModeTable[1 +        SPON +        GXON + i] = s < t ? DrawingMode.SIt : DrawingMode.IS;
  3227:       vcnModeTable[1 + AHEX + SPON +        GXON + i] = s < t ? DrawingMode.XSIt : DrawingMode.XIS;
  3228:       //ST スプライト>テキスト
  3229:       //TS テキスト>スプライト
  3230:       vcnModeTable[1 +        SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3231:       vcnModeTable[1 + AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3232:       //SIT スプライト>1024ドット256色1プレーン>テキスト
  3233:       //TIS テキスト>1024ドット256色1プレーン>スプライト
  3234:       vcnModeTable[1 +        SPON + TXON + GXON + i] = s < t ? DrawingMode.SIT : DrawingMode.TIS;
  3235:       vcnModeTable[1 + AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XSIT : DrawingMode.XTIS;
  3236:       //----------------------------------------------------------------------------------------
  3237:       //GrPr==2
  3238:       //        GrPr   AIEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3239:       //N 表示画面なし
  3240:       vcnModeTable[2 +                             i] = DrawingMode.N;
  3241:       vcnModeTable[2 + AHEX +                      i] = DrawingMode.XN;
  3242:       //stI スプライト(OFF)>テキスト(OFF)>1024ドット256色1プレーン → I 1024ドット256色1プレーン
  3243:       //tsI テキスト(OFF)>スプライト(OFF)>1024ドット256色1プレーン → I 1024ドット256色1プレーン
  3244:       vcnModeTable[2 +                      GXON + i] = DrawingMode.I;
  3245:       vcnModeTable[2 + AHEX +               GXON + i] = DrawingMode.XI;
  3246:       //T テキスト
  3247:       vcnModeTable[2 +               TXON +        i] = DrawingMode.T;
  3248:       vcnModeTable[2 + AHEX +        TXON +        i] = DrawingMode.XT;
  3249:       //sTI スプライト(OFF)>テキスト>1024ドット256色1プレーン → TI テキスト>1024ドット256色1プレーン
  3250:       //TsI テキスト>スプライト(OFF)>1024ドット256色1プレーン → TI テキスト>1024ドット256色1プレーン
  3251:       vcnModeTable[2 +               TXON + GXON + i] = DrawingMode.TI;
  3252:       vcnModeTable[2 + AHEX +        TXON + GXON + i] = DrawingMode.XTI;
  3253:       //S スプライト
  3254:       vcnModeTable[2 +        SPON +               i] = DrawingMode.S;
  3255:       vcnModeTable[2 + AHEX + SPON +               i] = DrawingMode.XS;
  3256:       //StI スプライト>テキスト(OFF)>1024ドット256色1プレーン → SI スプライト>1024ドット256色1プレーン
  3257:       //tSI テキスト(OFF)>スプライト>1024ドット256色1プレーン → SI スプライト>1024ドット256色1プレーン
  3258:       vcnModeTable[2 +        SPON +        GXON + i] = DrawingMode.SI;
  3259:       vcnModeTable[2 + AHEX + SPON +        GXON + i] = DrawingMode.XSI;
  3260:       //ST スプライト>テキスト
  3261:       //TS テキスト>スプライト
  3262:       vcnModeTable[2 +        SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3263:       vcnModeTable[2 + AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3264:       //STI スプライト>テキスト>1024ドット256色1プレーン
  3265:       //TSI テキスト>スプライト>1024ドット256色1プレーン
  3266:       vcnModeTable[2 +        SPON + TXON + GXON + i] = s < t ? DrawingMode.STI : DrawingMode.TSI;
  3267:       vcnModeTable[2 + AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XSTI : DrawingMode.XTSI;
  3268:       //----------------------------------------------------------------------------------------
  3269:       //GrPr==3
  3270:       //          GrPr   AIEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3271:       //N 表示画面なし
  3272:       vcnModeTable[  3 +                             i] = (
  3273:         vcnModeTable[3 +               TXON +        i] =
  3274:         vcnModeTable[3 +        SPON +               i] =
  3275:         vcnModeTable[3 +        SPON + TXON +        i] = DrawingMode.N);
  3276:       vcnModeTable[  3 + AHEX +                      i] = (
  3277:         vcnModeTable[3 + AHEX +        TXON +        i] =
  3278:         vcnModeTable[3 + AHEX + SPON +               i] =
  3279:         vcnModeTable[3 + AHEX + SPON + TXON +        i] = DrawingMode.XN);
  3280:       //Ist 1024ドット256色1プレーン>スプライト(OFF)>テキスト(OFF) → It 1024ドット256色1プレーン>テキスト(OFF)
  3281:       //Its 1024ドット256色1プレーン>テキスト(OFF)>スプライト(OFF) → It 1024ドット256色1プレーン>テキスト(OFF)
  3282:       vcnModeTable[  3 +                      GXON + i] = (
  3283:         vcnModeTable[3 +               TXON + GXON + i] =
  3284:         vcnModeTable[3 +        SPON +        GXON + i] =
  3285:         vcnModeTable[3 +        SPON + TXON + GXON + i] = DrawingMode.It);
  3286:       vcnModeTable[  3 + AHEX +               GXON + i] = (
  3287:         vcnModeTable[3 + AHEX +        TXON + GXON + i] =
  3288:         vcnModeTable[3 + AHEX + SPON +        GXON + i] =
  3289:         vcnModeTable[3 + AHEX + SPON + TXON + GXON + i] = DrawingMode.XIt);
  3290:     }  //for ii
  3291:   }  //vcnMakeTable5(int)
  3292: 
  3293:   //vcnMakeTable7 (grmm)
  3294:   //  描画モード7のテーブルを作る
  3295:   public static void vcnMakeTable7 (int grmm) {
  3296:     //----------------------------------------------------------------------------------------
  3297:     //J  1024ドット65536色
  3298:     //              SpTx_3210          SpTx_3210
  3299:     for (int ii = 0b0000_0000; ii <= 0b1111_1111; ii++) {
  3300:       //                               3210                 SpTx
  3301:       int i = grmm << 6 | (ii & 0b0000_1111) << 9 | (ii & 0b1111_0000) >> 2;
  3302:       int s = i >> 4 & 3;
  3303:       int t = i >> 2 & 3;
  3304:       //----------------------------------------------------------------------------------------
  3305:       //GrPr==0
  3306:       //        GrPr   AHEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3307:       //N 表示画面なし
  3308:       vcnModeTable[                                i] = DrawingMode.N;
  3309:       vcnModeTable[    AHEX +                      i] = DrawingMode.XN;
  3310:       //Jst 1024ドット65536色1プレーン>スプライト(OFF)>テキスト(OFF) → Jt 1024ドット65536色1プレーン>テキスト(OFF)
  3311:       //Jts 1024ドット65536色1プレーン>テキスト(OFF)>スプライト(OFF) → Jt 1024ドット65536色1プレーン>テキスト(OFF)
  3312:       vcnModeTable[                         GXON + i] = DrawingMode.Jt;
  3313:       vcnModeTable[    AHEX +               GXON + i] = DrawingMode.XJt;
  3314:       //T テキスト
  3315:       vcnModeTable[                  TXON +        i] = DrawingMode.T;
  3316:       vcnModeTable[    AHEX +        TXON +        i] = DrawingMode.XT;
  3317:       //JsT 1024ドット65536色1プレーン>スプライト(OFF)>テキスト → JT 1024ドット65536色1プレーン>テキスト
  3318:       //JTs 1024ドット65536色1プレーン>テキスト>スプライト(OFF) → JT 1024ドット65536色1プレーン>テキスト
  3319:       vcnModeTable[                  TXON + GXON + i] = DrawingMode.JT;
  3320:       vcnModeTable[    AHEX +        TXON + GXON + i] = DrawingMode.XJT;
  3321:       //S スプライト
  3322:       vcnModeTable[           SPON +               i] = DrawingMode.S;
  3323:       vcnModeTable[    AHEX + SPON +               i] = DrawingMode.XS;
  3324:       //JSt 1024ドット65536色1プレーン>スプライト>テキスト(OFF) → JS 1024ドット65536色1プレーン>スプライト
  3325:       //JtS 1024ドット65536色1プレーン>テキスト(OFF)>スプライト → JS 1024ドット65536色1プレーン>スプライト
  3326:       vcnModeTable[           SPON +        GXON + i] = DrawingMode.JS;
  3327:       vcnModeTable[    AHEX + SPON +        GXON + i] = DrawingMode.XJS;
  3328:       //ST スプライト>テキスト
  3329:       //TS テキスト>スプライト
  3330:       vcnModeTable[           SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3331:       vcnModeTable[    AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3332:       //JST 1024ドット65536色1プレーン>スプライト>テキスト
  3333:       //JTS 1024ドット65536色1プレーン>テキスト>スプライト
  3334:       vcnModeTable[           SPON + TXON + GXON + i] = s < t ? DrawingMode.JST : DrawingMode.JTS;
  3335:       vcnModeTable[    AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XJST : DrawingMode.XJTS;
  3336:       //----------------------------------------------------------------------------------------
  3337:       //GrPr==1
  3338:       //        GrPr   AJEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3339:       //N 表示画面なし
  3340:       vcnModeTable[1 +                             i] = DrawingMode.N;
  3341:       vcnModeTable[1 + AHEX +                      i] = DrawingMode.XN;
  3342:       //sJt スプライト(OFF)>1024ドット65536色1プレーン>テキスト(OFF) → Jt 1024ドット65536色1プレーン>テキスト(OFF)
  3343:       //tJs テキスト(OFF)>1024ドット65536色1プレーン>スプライト(OFF) → Jt 1024ドット65536色1プレーン>テキスト(OFF)
  3344:       vcnModeTable[1 +                      GXON + i] = DrawingMode.Jt;
  3345:       vcnModeTable[1 + AHEX +               GXON + i] = DrawingMode.XJt;
  3346:       //T テキスト
  3347:       vcnModeTable[1 +               TXON +        i] = DrawingMode.T;
  3348:       vcnModeTable[1 + AHEX +        TXON +        i] = DrawingMode.XT;
  3349:       //sJT スプライト(OFF)>1024ドット65536色1プレーン>テキスト → JT 1024ドット65536色1プレーン>テキスト
  3350:       //TJs テキスト>1024ドット65536色1プレーン>スプライト(OFF)
  3351:       vcnModeTable[1 +               TXON + GXON + i] = s < t ? DrawingMode.JT : DrawingMode.TJs;
  3352:       vcnModeTable[1 + AHEX +        TXON + GXON + i] = s < t ? DrawingMode.XJT : DrawingMode.XTJs;
  3353:       //S スプライト
  3354:       vcnModeTable[1 +        SPON +               i] = DrawingMode.S;
  3355:       vcnModeTable[1 + AHEX + SPON +               i] = DrawingMode.XS;
  3356:       //SJt スプライト>1024ドット65536色1プレーン>テキスト(OFF)
  3357:       //tJS テキスト(OFF)>1024ドット65536色1プレーン>スプライト → JS 1024ドット65536色1プレーン>スプライト
  3358:       vcnModeTable[1 +        SPON +        GXON + i] = s < t ? DrawingMode.SJt : DrawingMode.JS;
  3359:       vcnModeTable[1 + AHEX + SPON +        GXON + i] = s < t ? DrawingMode.XSJt : DrawingMode.XJS;
  3360:       //ST スプライト>テキスト
  3361:       //TS テキスト>スプライト
  3362:       vcnModeTable[1 +        SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3363:       vcnModeTable[1 + AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3364:       //SJT スプライト>1024ドット65536色1プレーン>テキスト
  3365:       //TJS テキスト>1024ドット65536色1プレーン>スプライト
  3366:       vcnModeTable[1 +        SPON + TXON + GXON + i] = s < t ? DrawingMode.SJT : DrawingMode.TJS;
  3367:       vcnModeTable[1 + AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XSJT : DrawingMode.XTJS;
  3368:       //----------------------------------------------------------------------------------------
  3369:       //GrPr==2
  3370:       //        GrPr   AJEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3371:       //N 表示画面なし
  3372:       vcnModeTable[2 +                             i] = DrawingMode.N;
  3373:       vcnModeTable[2 + AHEX +                      i] = DrawingMode.XN;
  3374:       //stJ スプライト(OFF)>テキスト(OFF)>1024ドット65536色1プレーン → J 1024ドット65536色1プレーン
  3375:       //tsJ テキスト(OFF)>スプライト(OFF)>1024ドット65536色1プレーン → J 1024ドット65536色1プレーン
  3376:       vcnModeTable[2 +                      GXON + i] = DrawingMode.J;
  3377:       vcnModeTable[2 + AHEX +               GXON + i] = DrawingMode.XJ;
  3378:       //T テキスト
  3379:       vcnModeTable[2 +               TXON +        i] = DrawingMode.T;
  3380:       vcnModeTable[2 + AHEX +        TXON +        i] = DrawingMode.XT;
  3381:       //sTJ スプライト(OFF)>テキスト>1024ドット65536色1プレーン → TJ テキスト>1024ドット65536色1プレーン
  3382:       //TsJ テキスト>スプライト(OFF)>1024ドット65536色1プレーン → TJ テキスト>1024ドット65536色1プレーン
  3383:       vcnModeTable[2 +               TXON + GXON + i] = DrawingMode.TJ;
  3384:       vcnModeTable[2 + AHEX +        TXON + GXON + i] = DrawingMode.XTJ;
  3385:       //S スプライト
  3386:       vcnModeTable[2 +        SPON +               i] = DrawingMode.S;
  3387:       vcnModeTable[2 + AHEX + SPON +               i] = DrawingMode.XS;
  3388:       //StJ スプライト>テキスト(OFF)>1024ドット65536色1プレーン → SJ スプライト>1024ドット65536色1プレーン
  3389:       //tSJ テキスト(OFF)>スプライト>1024ドット65536色1プレーン → SJ スプライト>1024ドット65536色1プレーン
  3390:       vcnModeTable[2 +        SPON +        GXON + i] = DrawingMode.SJ;
  3391:       vcnModeTable[2 + AHEX + SPON +        GXON + i] = DrawingMode.XSJ;
  3392:       //ST スプライト>テキスト
  3393:       //TS テキスト>スプライト
  3394:       vcnModeTable[2 +        SPON + TXON +        i] = s < t ? DrawingMode.ST : DrawingMode.TS;
  3395:       vcnModeTable[2 + AHEX + SPON + TXON +        i] = s < t ? DrawingMode.XST : DrawingMode.XTS;
  3396:       //STJ スプライト>テキスト>1024ドット65536色1プレーン
  3397:       //TSJ テキスト>スプライト>1024ドット65536色1プレーン
  3398:       vcnModeTable[2 +        SPON + TXON + GXON + i] = s < t ? DrawingMode.STJ : DrawingMode.TSJ;
  3399:       vcnModeTable[2 + AHEX + SPON + TXON + GXON + i] = s < t ? DrawingMode.XSTJ : DrawingMode.XTSJ;
  3400:       //----------------------------------------------------------------------------------------
  3401:       //GrPr==3
  3402:       //          GrPr   AJEx   SpOn   TxOn   GxOn   SpPr|TxPr
  3403:       //N 表示画面なし
  3404:       vcnModeTable[  3 +                             i] = (
  3405:         vcnModeTable[3 +               TXON +        i] =
  3406:         vcnModeTable[3 +        SPON +               i] =
  3407:         vcnModeTable[3 +        SPON + TXON +        i] = DrawingMode.N);
  3408:       vcnModeTable[  3 + AHEX +                      i] = (
  3409:         vcnModeTable[3 + AHEX +        TXON +        i] =
  3410:         vcnModeTable[3 + AHEX + SPON +               i] =
  3411:         vcnModeTable[3 + AHEX + SPON + TXON +        i] = DrawingMode.XN);
  3412:       //Jst 1024ドット65536色1プレーン>スプライト(OFF)>テキスト(OFF) → Jt 1024ドット65536色1プレーン>テキスト(OFF)
  3413:       //Jts 1024ドット65536色1プレーン>テキスト(OFF)>スプライト(OFF) → Jt 1024ドット65536色1プレーン>テキスト(OFF)
  3414:       vcnModeTable[  3 +                      GXON + i] = (
  3415:         vcnModeTable[3 +               TXON + GXON + i] =
  3416:         vcnModeTable[3 +        SPON +        GXON + i] =
  3417:         vcnModeTable[3 +        SPON + TXON + GXON + i] = DrawingMode.Jt);
  3418:       vcnModeTable[  3 + AHEX +               GXON + i] = (
  3419:         vcnModeTable[3 + AHEX +        TXON + GXON + i] =
  3420:         vcnModeTable[3 + AHEX + SPON +        GXON + i] =
  3421:         vcnModeTable[3 + AHEX + SPON + TXON + GXON + i] = DrawingMode.XJt);
  3422:     }  //for ii
  3423:   }  //vcnMakeTable7()
  3424: 
  3425:   //vcnReset ()
  3426:   //  ビデオコントローラをリセットする
  3427:   public static void vcnReset () {
  3428:     vcnReg1Port = 0;
  3429:     vcnReg1Mask = 0;
  3430:     vcnReg1Test = 0;
  3431:     vcnReg1Curr = 0;
  3432:     vcnReg2Port = 0;
  3433:     vcnReg2Mask = 0;
  3434:     vcnReg2Test = 0;
  3435:     vcnReg2Curr = 0;
  3436:     vcnReg3Port = 0;
  3437:     vcnReg3Mask = 0;
  3438:     vcnReg3Test = 0;
  3439:     vcnReg3Curr = 0;
  3440:     vcnPalTbl = vcnPalBase[VCN_CONTRAST_SCALE * 15];
  3441:     vcnCurrentScaledContrast = VCN_CONTRAST_SCALE * 15;
  3442:     vcnTargetContrastPort = 15;
  3443:     vcnTargetContrastMask = 0;
  3444:     vcnTargetContrastTest = 15;
  3445:     vcnTargetContrastCurr = 15;
  3446:     vcnTargetScaledContrast = VCN_CONTRAST_SCALE * 15;
  3447:     vcnMode = DrawingMode.N;
  3448:     vcnHidden1st = 0x00c00000 + 1;
  3449:     vcnHidden2nd = 0x00c00000 + 1;
  3450:     vcnHidden3rd = 0x00c00000 + 1;
  3451:     vcnHidden4th = 0x00c00000 + 1;
  3452:     vcnVisible1st = XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3453:     vcnVisible2nd = XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3454:     vcnVisible3rd = XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3455:     vcnVisible4th = XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3456: 
  3457:     if (CRTC.CRT_EXTENDED_GRAPHIC) {
  3458:       if (CRTC.crtExtendedGraphicRequest) {
  3459:         vcnMakeTable5 (5);
  3460:         vcnMakeTable7 (6);
  3461:         vcnMakeTable7 (7);
  3462:       } else {
  3463:         vcnMakeTable4 (5);
  3464:         vcnMakeTable4 (6);
  3465:         vcnMakeTable4 (7);
  3466:       }
  3467:     }
  3468: 
  3469:   }  //vcnReset()
  3470: 
  3471:   //vcnUpdateMode ()
  3472:   //  描画モードを更新する
  3473:   public static void vcnUpdateMode () {
  3474:     DrawingMode newMode = vcnModeTable[-(vcnReg3Curr & 0x5000) & 0x10000 | (char) (vcnReg3Curr << 9) | vcnReg1Curr << 6 | vcnReg2Curr >> 8];
  3475:     if (vcnMode != newMode) {
  3476:       if (VCN_LOG_TRANSITION) {
  3477:         vcnLogTransition (vcnMode, newMode);
  3478:       }
  3479:       vcnMode = newMode;
  3480:     }
  3481:     //グラフィックプレーンのON/OFFと組み換え
  3482:     if (vcnReg1Curr < 4) {  //512ドット
  3483:       boolean on1st, on2nd, on3rd, on4th;
  3484:       if (vcnReg1Curr == 0) {  //512ドット16色
  3485:         on1st =                         (vcnReg3Curr &             1) != 0;
  3486:         on2nd =                         (vcnReg3Curr &         2    ) != 0;
  3487:         on3rd =                         (vcnReg3Curr &     4        ) != 0;
  3488:         on4th =                         (vcnReg3Curr & 8            ) != 0;
  3489:       } else if (vcnReg1Curr == 1) {  //512ドット256色
  3490:         on2nd = on1st =                 (vcnReg3Curr &         2 + 1) != 0;
  3491:         on4th = on3rd =                 (vcnReg3Curr & 8 + 4        ) != 0;
  3492:       } else {  //512ドット65536色
  3493:         on4th = on3rd = on2nd = on1st = (vcnReg3Curr & 8 + 4 + 2 + 1) != 0;
  3494:       }
  3495:       vcnHidden1st = 0x00c00000 + 1 + ((vcnReg2Curr & 3     ) << 19    );
  3496:       vcnHidden2nd = 0x00c00000 + 1 + ((vcnReg2Curr & 3 << 2) << 19 - 2);
  3497:       vcnHidden3rd = 0x00c00000 + 1 + ((vcnReg2Curr & 3 << 4) << 19 - 4);
  3498:       vcnHidden4th = 0x00c00000 + 1 + ((vcnReg2Curr & 3 << 6) << 19 - 6);
  3499:       vcnVisible1st = on1st ? vcnHidden1st : XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3500:       vcnVisible2nd = on2nd ? vcnHidden2nd : XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3501:       vcnVisible3rd = on3rd ? vcnHidden3rd : XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3502:       vcnVisible4th = on4th ? vcnHidden4th : XEiJ.BUS_DUMMY_4BIT_PAGE + 1;
  3503:     }
  3504:     CRTC.crtAllStamp += 2;
  3505:   }  //vcnUpdateMode()
  3506: 
  3507:   //vcnSetContrast (contrast)
  3508:   //  コントラストを設定する
  3509:   public static void vcnSetContrast (int contrast) {
  3510:     vcnPalTbl = vcnPalBase[contrast];
  3511:     for (int i = 0; i < 256; i++) {
  3512:       vcnPal32G8[i] = vcnPalTbl[vcnPal16G8[i]];
  3513:       vcnPal32TS[i] = vcnPalTbl[vcnPal16TS[i]];
  3514:     }
  3515:     for (int i = 256; i < 256 + 16 * VCN_PATTEST_BLOCKS; i++) {
  3516:       vcnPal32TS[i] = vcnPalTbl[vcnPal16TS[i]];
  3517:     }
  3518:     CRTC.crtAllStamp += 2;
  3519:   }  //vcnSetContrast(int)
  3520: 
  3521:   public static void vcnLogTransition (DrawingMode oldMode, DrawingMode newMode) {
  3522:     if (VCN_LOG_TRANSITION) {
  3523:       StringBuilder sb = new StringBuilder ();
  3524:       sb.append (oldMode.name ());
  3525:       sb.append (" → ");
  3526:       sb.append (newMode.name ());
  3527:       System.out.println (sb.toString ());
  3528:     }
  3529:   }  //vcnLogTransition(DrawingMode,DrawingMode)
  3530: 
  3531:   //vcnReportUnimplemented (mode)
  3532:   //  未実装画面モードを報告する
  3533:   public static void vcnReportUnimplemented (DrawingMode mode) {
  3534:     String name = vcnGetName (new StringBuilder ().append (mode.name ()).append ('(')).append (')').toString ();
  3535:     if (!vcnUnimplementedSet.contains (name)) {  //未報告
  3536:       System.out.println (new StringBuilder ().append (Multilingual.mlnJapanese ? "未実装 " : "Unimplemented ").append (name).toString ());
  3537:       vcnUnimplementedSet.add (name);
  3538:     }
  3539:   }  //vcnReportUnimplemented(DrawingMode)
  3540: 
  3541:   //sb = vcnGetName (StringBuilder sb)
  3542:   //  現在の画面モードの文字列を作る
  3543:   //  優先順位は表示されていない画面も書く
  3544:   //  拡張モードはONの拡張だけ書く
  3545:   public static StringBuilder vcnGetName (StringBuilder sb) {
  3546:     //スプライト画面
  3547:     String sprite = (vcnReg3Curr & 1 << 6) != 0 ? "S" : "s";
  3548:     //テキスト画面
  3549:     String text = (vcnReg3Curr & 1 << 5) != 0 ? "T" : "t";
  3550:     //スプライト画面とテキスト画面の優先順位
  3551:     String spriteText1 = "";
  3552:     String spriteText2 = "";
  3553:     if ((vcnReg2Curr & 3 << 12) < (vcnReg2Curr << 12 - 10 & 3 << 12)) {  //スプライト>テキスト
  3554:       spriteText1 = sprite;
  3555:       spriteText2 = text;
  3556:     } else {  //テキスト>スプライト
  3557:       spriteText1 = text;
  3558:       spriteText2 = sprite;
  3559:     }
  3560:     //グラフィック画面
  3561:     String graphic = ((vcnReg1Curr & 0b100) != 0 ?  //1024ドット
  3562:                       (vcnReg1Curr & 0b010) != 0 ?  //1024ドット65536色
  3563:                       (vcnReg3Curr & 0b10000) != 0 ? "J" :  //1024ドット65536色1プレーン
  3564:                       "j" :  //1024ドット65536色0プレーン
  3565:                       (vcnReg1Curr & 0b001) != 0 ?  //1024ドット256色
  3566:                       (vcnReg3Curr & 0b10000) != 0 ? "I" :  //1024ドット256色1プレーン
  3567:                       "i" :  //1024ドット256色0プレーン
  3568:                       //1024ドット16色
  3569:                       (vcnReg3Curr & 0b10000) != 0 ? "H" :  //1024ドット16色1プレーン
  3570:                       "h" :  //1024ドット16色0プレーン
  3571:                       //512ドット
  3572:                       (vcnReg1Curr & 0b010) != 0 ?  //512ドット65536色
  3573:                       (vcnReg3Curr & 0b1111) != 0 ? "G" :  //512ドット65536色1プレーン
  3574:                       "g" :  //512ドット65536色0プレーン
  3575:                       (vcnReg1Curr & 0b001) != 0 ?  //512ドット256色
  3576:                       (vcnReg3Curr & 0b1100) != 0 ? "F2" :  //512ドット256色2プレーン
  3577:                       (vcnReg3Curr & 0b1111) != 0 ? "F1" :  //512ドット256色1プレーン
  3578:                       "f" :  //512ドット256色0プレーン
  3579:                       //512ドット16色
  3580:                       (vcnReg3Curr & 0b1000) != 0 ? "E4" :  //512ドット16色4プレーン
  3581:                       (vcnReg3Curr & 0b1100) != 0 ? "E3" :  //512ドット16色3プレーン
  3582:                       (vcnReg3Curr & 0b1110) != 0 ? "E2" :  //512ドット16色2プレーン
  3583:                       (vcnReg3Curr & 0b1111) != 0 ? "E1" :  //512ドット16色1プレーン
  3584:                       "e");  //512ドット16色0プレーン
  3585:     //グラフィック画面の優先順位
  3586:     int grpr = vcnReg2Curr >> 8 & 3;
  3587:     if (grpr == 0) {  //グラフィック>スプライトまたはテキスト>スプライトまたはテキスト
  3588:       sb.append (graphic).append (spriteText1).append (spriteText2);
  3589:     } else if (grpr == 1) {  //スプライトまたはテキスト>グラフィック>スプライトまたはテキスト
  3590:       sb.append (spriteText1).append (graphic).append (spriteText2);
  3591:     } else if (grpr == 2) {  //スプライトまたはテキスト>スプライトまたはテキスト>グラフィック
  3592:       sb.append (spriteText1).append (spriteText2).append (graphic);
  3593:     } else {  //グラフィック>スプライトまたはテキスト(OFF)>スプライトまたはテキスト(OFF)
  3594:       sb.append (graphic).append (spriteText1).append (spriteText2);
  3595:     }
  3596:     int i = sb.length ();
  3597:     if ((vcnReg3Curr & 1 << 14) != 0) {  //AHOn
  3598:       sb.append ('A');
  3599:     }
  3600:     if ((vcnReg3Curr & 1 << 12) != 0) {  //ExOn
  3601:       sb.append ('X');
  3602:     }
  3603:     if ((vcnReg3Curr & (1 << 12 | 1 << 11)) != 0) {  //ExOn,Half
  3604:       sb.append ((vcnReg3Curr & 1 << 11) != 0 ? 'H' : 'W');  //Half
  3605:     }
  3606:     if ((vcnReg3Curr & (1 << 12 | 1 << 10)) != 0) {  //ExOn,PLSB
  3607:       sb.append ((vcnReg3Curr & 1 << 10) != 0 ? 'P' : 'C');  //PLSB
  3608:     }
  3609:     if ((vcnReg3Curr & 1 << 9) != 0) {  //GrGr
  3610:       sb.append ('G');
  3611:     }
  3612:     if ((vcnReg3Curr & 1 << 8) != 0) {  //GrST
  3613:       sb.append ('T');
  3614:     }
  3615:     if (i < sb.length ()) {
  3616:       sb.insert (i, '_');
  3617:     }
  3618:     return sb;
  3619:   }  //vcnGetName()
  3620: 
  3621: 
  3622:   //vcnMix1 (x)
  3623:   //vcnMix2 (x, y)
  3624:   //  半透明合成
  3625:   //  x=G<<11|R<<6|B<<1|I  手前のグラフィック画面の色
  3626:   //  y=g<<11|r<<6|b<<1|i  奥のテキスト・スプライト画面の色
  3627:   //  z=G+g>>1<<11|R+r>>1<<6|B+b>>1<<1|i  合成された色。グラフィック画面のIは使用しない
  3628:   public static int vcnMix1 (int x) {
  3629:     return x >> 1 & 0b01111_01111_01111_0;
  3630:   }  //vcnMix1(int)
  3631:   public static int vcnMix2 (int x, int y) {
  3632:     return ((x & 0b11111_00000_11111_0    ) + (y & 0b11111_00000_11111_0) >> 1 & 0b11111_00000_11111_0 |
  3633:             (x & 0b00000_11111_00000_0 | 1) + (y & 0b00000_11111_00000_1) >> 1 & 0b00000_11111_00000_1);
  3634:   }  //vcnMix2(int,int)
  3635: 
  3636: }  //class VideoController
  3637: 
  3638: 
  3639: