XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])]); gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])]); gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE3_XHPG //================================================================================ //TE3_XHPGT ($0000,$06xx,$1F27) // 概要 // TE3 テキスト>512ドット16色3プレーン // XHPGT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()==0?((tev(e2p()))!=0?epc(tev(e2p())):epc(tev(e3p()))):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),0))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()==0?tev(e2p())!=0?epc(tev(e2p())):epc(tev(e3p())):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),0) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())==0?(v3=tev(e2p()))!=0?epc(v3):epc(tev(e3p())):v2==1?epc(0):ls1(v2)==0?epc(v2):mix(mix(epc(tev(v2)),epc(tod(e2q()))),0) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=tev(e2p()))!=0?epc(p):epc(tev(e3p())):p==1?epc(0):ls1(p)==0?epc(p):mix(mix(epc(tev(p)),epc(tod(e2q()))),0) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=e2p()&-2)!=0?epc(p):epc(e3p()&-2):p==1?epc(0):(p&1)==0?epc(p):mix(mix(epc(p&-2),epc(e2q()|1)),0) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())==0?(p=e2p()&-2)!=0?epo(p):epo(e3p()&-2):p==1?epo(0):(p&1)==0?epo(p):cto(mix(mix(epc(p&-2),epc(e2q()|1)),0)) TE3_XHPGT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE3_XHPGT //================================================================================ //TE4 ($0000,$06xx,$002F) // 概要 // TE4 テキスト>512ドット16色4プレーン // 拡張なし // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットが0でないとき // 3番目のカラー(0は黒) // さもなくば(3番目のパレットが0のとき) // 4番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()!=0?epc(e1p()):(e2p()!=0?epc(e2p()):(e3p()!=0?epc(e3p()):epc(e4p()))))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()!=0?epc(e1p()):e2p()!=0?epc(e2p()):e3p()!=0?epc(e3p()):epc(e4p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())!=0?epc(v2):(v4=e2p())!=0?epc(v4):(v6=e3p())!=0?epc(v6):epc(e4p()) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?epc(p):(p=e2p())!=0?epc(p):(p=e3p())!=0?epc(p):epc(e4p()) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?epc(p):(p=e2p())!=0?epc(p):(p=e3p())!=0?epc(p):epc(e4p()) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())!=0?epo(p):(p=e2p())!=0?epo(p):(p=e3p())!=0?epo(p):epo(e4p()) TE4 { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511]]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511]]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511]]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511]]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511]]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511]]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511]]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511]]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511]]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511]]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511]]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511]]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511]]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511]]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511]]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511]]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4 //================================================================================ //XTE4 // 概要 // TE4 テキスト>512ドット16色4プレーン // 拡張あり XTE4 { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //TE4_XWC case 0b00010001: //TE4_XWC case 0b00010010: //TE4_XWC case 0b00010011: //TE4_XWC TE4_XWC.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //TE4_XWP case 0b00010101: //TE4_XWP case 0b00010110: //TE4_XWP case 0b00010111: //TE4_XWP TE4_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //TE4_XHC TE4.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //TE4_XHCT TE4_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011010: //TE4_XHCG TE4_XHCG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011011: //TE4_XHCGT TE4_XHCGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //TE4_XHPT TE4_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011110: //TE4_XHPG TE4_XHPG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011111: //TE4_XHPGT TE4_XHPGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //TE4_A case 0b01000001: //TE4_A case 0b01000010: //TE4_A case 0b01000011: //TE4_A case 0b01000100: //TE4_A case 0b01000101: //TE4_A case 0b01000110: //TE4_A case 0b01000111: //TE4_A case 0b01001000: //TE4_A case 0b01001001: //TE4_A case 0b01001010: //TE4_A case 0b01001011: //TE4_A case 0b01001100: //TE4_A case 0b01001101: //TE4_A case 0b01001110: //TE4_A case 0b01001111: //TE4_A case 0b01010000: //TE4_A case 0b01010001: //TE4_A case 0b01010010: //TE4_A case 0b01010011: //TE4_A case 0b01010100: //TE4_A case 0b01010101: //TE4_A case 0b01010110: //TE4_A case 0b01010111: //TE4_A case 0b01011000: //TE4_A case 0b01011001: //TE4_A case 0b01011010: //TE4_A case 0b01011011: //TE4_A case 0b01011100: //TE4_A case 0b01011101: //TE4_A case 0b01011110: //TE4_A case 0b01011111: //TE4_A E4_A.drawRaster (src, dst, rh); break; default: TE4.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XTE4); } //switch } //drawRaster }, //XTE4 //================================================================================ //TE4_XWC ($0000,$06xx,$102F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XWC 優先順位に関わらず0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のパレットのカラーだけ表示する // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 2番目のカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 3番目のカラー(0は黒) // さもなくば(3番目のパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラーが奇数のとき // 4番目のカラー(0は黒) // さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき) // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 4番目のカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?epc(e1p()):(tpc(txp())!=0?tpc(txp()):epc(e1p()))):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?epc(e2p()):(tpc(txp())!=0?tpc(txp()):epc(e2p()))):(e3p()!=0?(ls1(epc(tev(e3p())))!=0?epc(e3p()):(tpc(txp())!=0?tpc(txp()):epc(e3p()))):(ls1(epc(tev(e4p())))!=0?epc(e4p()):(tpc(txp())!=0?tpc(txp()):epc(e4p())))))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?epc(e1p()):tpc(txp())!=0?tpc(txp()):epc(e1p()):e2p()!=0?ls1(epc(tev(e2p())))!=0?epc(e2p()):tpc(txp())!=0?tpc(txp()):epc(e2p()):e3p()!=0?ls1(epc(tev(e3p())))!=0?epc(e3p()):tpc(txp())!=0?tpc(txp()):epc(e3p()):ls1(epc(tev(e4p())))!=0?epc(e4p()):tpc(txp())!=0?tpc(txp()):epc(e4p()) // 中間コード3 // (v0=e1p())!=0?ls1(epc(tev(v0)))!=0?epc(v0):(v5=tpc(txp()))!=0?v5:epc(v0):(v8=e2p())!=0?ls1(epc(tev(v8)))!=0?epc(v8):(v13=tpc(txp()))!=0?v13:epc(v8):(v16=e3p())!=0?ls1(epc(tev(v16)))!=0?epc(v16):(v21=tpc(txp()))!=0?v21:epc(v16):ls1(epc(tev(v27=e4p())))!=0?epc(v27):(v29=tpc(txp()))!=0?v29:epc(v27) // 中間コード4 // (p=e1p())!=0?ls1(epc(tev(p)))!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p):(p=e2p())!=0?ls1(epc(tev(p)))!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p):(p=e3p())!=0?ls1(epc(tev(p)))!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p):ls1(epc(tev(p=e4p())))!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p) // 中間コード5 // (p=e1p())!=0?(epc(p&-2)&1)!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p):(p=e2p())!=0?(epc(p&-2)&1)!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p):(p=e3p())!=0?(epc(p&-2)&1)!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p):(epc((p=e4p())&-2)&1)!=0?epc(p):(q=tpc(txp()))!=0?q:epc(p) // 中間コード6 // (p=e1p())!=0?(epc(p&-2)&1)!=0?epo(p):(q=tpc(txp()))!=0?cto(q):epo(p):(p=e2p())!=0?(epc(p&-2)&1)!=0?epo(p):(q=tpc(txp()))!=0?cto(q):epo(p):(p=e3p())!=0?(epc(p&-2)&1)!=0?epo(p):(q=tpc(txp()))!=0?cto(q):epo(p):(epc((p=e4p())&-2)&1)!=0?epo(p):(q=tpc(txp()))!=0?cto(q):epo(p) TE4_XWC { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XWC //================================================================================ //TE4_XWP ($0000,$06xx,$142F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが0のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (e1p()==0?(tpc(txp())!=0?tpc(txp()):((tev(e2p()))!=0?epc(tev(e2p())):((tev(e3p()))!=0?epc(tev(e3p())):epc(tev(e4p()))))):e1p()==1?(tpc(txp())!=0?tpc(txp()):epc(0)):ls1(e1p())==0?(tpc(txp())!=0?tpc(txp()):epc(e1p())):epc(tev(e1p()))) // 中間コード2 // e1p()==0?tpc(txp())!=0?tpc(txp()):tev(e2p())!=0?epc(tev(e2p())):tev(e3p())!=0?epc(tev(e3p())):epc(tev(e4p())):e1p()==1?tpc(txp())!=0?tpc(txp()):epc(0):ls1(e1p())==0?tpc(txp())!=0?tpc(txp()):epc(e1p()):epc(tev(e1p())) // 中間コード3 // (v0=e1p())==0?(v1=tpc(txp()))!=0?v1:(v3=tev(e2p()))!=0?epc(v3):(v6=tev(e3p()))!=0?epc(v6):epc(tev(e4p())):v0==1?(v12=tpc(txp()))!=0?v12:epc(0):ls1(v0)==0?(v16=tpc(txp()))!=0?v16:epc(v0):epc(tev(v0)) // 中間コード4 // (p=e1p())==0?(p=tpc(txp()))!=0?p:(p=tev(e2p()))!=0?epc(p):(p=tev(e3p()))!=0?epc(p):epc(tev(e4p())):p==1?(p=tpc(txp()))!=0?p:epc(0):ls1(p)==0?(q=tpc(txp()))!=0?q:epc(p):epc(tev(p)) // 中間コード5 // (p=e1p())==0?(p=tpc(txp()))!=0?p:(p=e2p()&-2)!=0?epc(p):(p=e3p()&-2)!=0?epc(p):epc(e4p()&-2):p==1?(p=tpc(txp()))!=0?p:epc(0):(p&1)==0?(q=tpc(txp()))!=0?q:epc(p):epc(p&-2) // 中間コード6 // (p=e1p())==0?(p=tpc(txp()))!=0?cto(p):(p=e2p()&-2)!=0?epo(p):(p=e3p()&-2)!=0?epo(p):epo(e4p()&-2):p==1?(p=tpc(txp()))!=0?cto(p):epo(0):(p&1)==0?(q=tpc(txp()))!=0?cto(q):epo(p):epo(p&-2) TE4_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XWP //================================================================================ //TE4_XHCT ($0000,$06xx,$192F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // 3番目のカラー(0は黒) // さもなくば(3番目のパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラーが奇数のとき // 4番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき) // 4番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),0):epc(e1p())):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?mix(epc(e2p()),0):epc(e2p())):(e3p()!=0?(ls1(epc(tev(e3p())))!=0?mix(epc(e3p()),0):epc(e3p())):(ls1(epc(tev(e4p())))!=0?mix(epc(e4p()),0):epc(e4p())))))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),0):epc(e1p()):e2p()!=0?ls1(epc(tev(e2p())))!=0?mix(epc(e2p()),0):epc(e2p()):e3p()!=0?ls1(epc(tev(e3p())))!=0?mix(epc(e3p()),0):epc(e3p()):ls1(epc(tev(e4p())))!=0?mix(epc(e4p()),0):epc(e4p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())!=0?ls1(epc(tev(v2)))!=0?mix(epc(v2),0):epc(v2):(v9=e2p())!=0?ls1(epc(tev(v9)))!=0?mix(epc(v9),0):epc(v9):(v16=e3p())!=0?ls1(epc(tev(v16)))!=0?mix(epc(v16),0):epc(v16):ls1(epc(tev(v26=e4p())))!=0?mix(epc(v26),0):epc(v26) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?ls1(epc(tev(p)))!=0?mix(epc(p),0):epc(p):(p=e2p())!=0?ls1(epc(tev(p)))!=0?mix(epc(p),0):epc(p):(p=e3p())!=0?ls1(epc(tev(p)))!=0?mix(epc(p),0):epc(p):ls1(epc(tev(p=e4p())))!=0?mix(epc(p),0):epc(p) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?(epc(p&-2)&1)!=0?mix(epc(p),0):epc(p):(p=e2p())!=0?(epc(p&-2)&1)!=0?mix(epc(p),0):epc(p):(p=e3p())!=0?(epc(p&-2)&1)!=0?mix(epc(p),0):epc(p):(epc((p=e4p())&-2)&1)!=0?mix(epc(p),0):epc(p) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())!=0?(epc(p&-2)&1)!=0?cto(mix(epc(p),0)):epo(p):(p=e2p())!=0?(epc(p&-2)&1)!=0?cto(mix(epc(p),0)):epo(p):(p=e3p())!=0?(epc(p&-2)&1)!=0?cto(mix(epc(p),0)):epo(p):(epc((p=e4p())&-2)&1)!=0?cto(mix(epc(p),0)):epo(p) TE4_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XHCT //================================================================================ //TE4_XHCG ($0000,$06xx,$1A2F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XHCG 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // 3番目のパレットが奇数のとき // パレット1のカラー(0は黒) // さもなくば(3番目のパレットが偶数のとき) // 3番目のカラー(0は黒) // さもなくば(3番目のパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラーが奇数のとき // 4番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラー(0は黒) // さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき) // 4番目のパレットが奇数のとき // パレット1のカラー(0は黒) // さもなくば(4番目のパレットが偶数のとき) // 4番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):(ls1(e1p())!=0?epc(tod(e2q())):epc(e1p()))):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?mix(epc(tev(e2p())),epc(tod(e2q()))):epc(e2p())):(e3p()!=0?(ls1(epc(tev(e3p())))!=0?mix(epc(tev(e3p())),epc(1)):(ls1(e3p())!=0?epc(1):epc(e3p()))):(ls1(epc(tev(e4p())))!=0?mix(epc(tev(e4p())),epc(1)):(ls1(e4p())!=0?epc(1):epc(e4p()))))))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):ls1(e1p())!=0?epc(tod(e2q())):epc(e1p()):e2p()!=0?ls1(epc(tev(e2p())))!=0?mix(epc(tev(e2p())),epc(tod(e2q()))):epc(e2p()):e3p()!=0?ls1(epc(tev(e3p())))!=0?mix(epc(tev(e3p())),epc(1)):ls1(e3p())!=0?epc(1):epc(e3p()):ls1(epc(tev(e4p())))!=0?mix(epc(tev(e4p())),epc(1)):ls1(e4p())!=0?epc(1):epc(e4p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())!=0?ls1(v4=epc(tev(v2)))!=0?mix(v4,epc(tod(e2q()))):ls1(v2)!=0?epc(tod(e2q())):epc(v2):(v15=e2p())!=0?ls1(v17=epc(tev(v15)))!=0?mix(v17,epc(tod(e2q()))):epc(v15):(v24=e3p())!=0?ls1(v26=epc(tev(v24)))!=0?mix(v26,epc(1)):ls1(v24)!=0?epc(1):epc(v24):ls1(v34=epc(tev(v36=e4p())))!=0?mix(v34,epc(1)):ls1(v36)!=0?epc(1):epc(v36) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?ls1(q=epc(tev(p)))!=0?mix(q,epc(tod(e2q()))):ls1(p)!=0?epc(tod(e2q())):epc(p):(p=e2p())!=0?ls1(q=epc(tev(p)))!=0?mix(q,epc(tod(e2q()))):epc(p):(p=e3p())!=0?ls1(q=epc(tev(p)))!=0?mix(q,epc(1)):ls1(p)!=0?epc(1):epc(p):ls1(p=epc(tev(q=e4p())))!=0?mix(p,epc(1)):ls1(q)!=0?epc(1):epc(q) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?((q=epc(p&-2))&1)!=0?mix(q,epc(e2q()|1)):(p&1)!=0?epc(e2q()|1):epc(p):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?mix(q,epc(e2q()|1)):epc(p):(p=e3p())!=0?((q=epc(p&-2))&1)!=0?mix(q,epc(1)):(p&1)!=0?epc(1):epc(p):((p=epc((q=e4p())&-2))&1)!=0?mix(p,epc(1)):(q&1)!=0?epc(1):epc(q) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(q,epc(e2q()|1))):(p&1)!=0?epo(e2q()|1):epo(p):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(q,epc(e2q()|1))):epo(p):(p=e3p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(q,epc(1))):(p&1)!=0?epo(1):epo(p):((p=epc((q=e4p())&-2))&1)!=0?cto(mix(p,epc(1))):(q&1)!=0?epo(1):epo(q) TE4_XHCG { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XHCG //================================================================================ //TE4_XHCGT ($0000,$06xx,$1B2F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XHCGT 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // 3番目のパレットが奇数のとき // パレット1のカラー(0は黒) // さもなくば(3番目のパレットが偶数のとき) // 3番目のカラー(0は黒) // さもなくば(3番目のパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラーが奇数のとき // 4番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // さもなくば(4番目のパレットを偶数化したパレットのカラーが偶数のとき) // 4番目のパレットが奇数のとき // パレット1のカラー(0は黒) // さもなくば(4番目のパレットが偶数のとき) // 4番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),0):(ls1(e1p())!=0?epc(tod(e2q())):epc(e1p()))):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?mix(mix(epc(tev(e2p())),epc(tod(e2q()))),0):epc(e2p())):(e3p()!=0?(ls1(epc(tev(e3p())))!=0?mix(mix(epc(tev(e3p())),epc(1)),0):(ls1(e3p())!=0?epc(1):epc(e3p()))):(ls1(epc(tev(e4p())))!=0?mix(mix(epc(tev(e4p())),epc(1)),0):(ls1(e4p())!=0?epc(1):epc(e4p()))))))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),0):ls1(e1p())!=0?epc(tod(e2q())):epc(e1p()):e2p()!=0?ls1(epc(tev(e2p())))!=0?mix(mix(epc(tev(e2p())),epc(tod(e2q()))),0):epc(e2p()):e3p()!=0?ls1(epc(tev(e3p())))!=0?mix(mix(epc(tev(e3p())),epc(1)),0):ls1(e3p())!=0?epc(1):epc(e3p()):ls1(epc(tev(e4p())))!=0?mix(mix(epc(tev(e4p())),epc(1)),0):ls1(e4p())!=0?epc(1):epc(e4p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())!=0?ls1(v4=epc(tev(v2)))!=0?mix(mix(v4,epc(tod(e2q()))),0):ls1(v2)!=0?epc(tod(e2q())):epc(v2):(v16=e2p())!=0?ls1(v18=epc(tev(v16)))!=0?mix(mix(v18,epc(tod(e2q()))),0):epc(v16):(v26=e3p())!=0?ls1(v28=epc(tev(v26)))!=0?mix(mix(v28,epc(1)),0):ls1(v26)!=0?epc(1):epc(v26):ls1(v37=epc(tev(v39=e4p())))!=0?mix(mix(v37,epc(1)),0):ls1(v39)!=0?epc(1):epc(v39) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?ls1(q=epc(tev(p)))!=0?mix(mix(q,epc(tod(e2q()))),0):ls1(p)!=0?epc(tod(e2q())):epc(p):(p=e2p())!=0?ls1(q=epc(tev(p)))!=0?mix(mix(q,epc(tod(e2q()))),0):epc(p):(p=e3p())!=0?ls1(q=epc(tev(p)))!=0?mix(mix(q,epc(1)),0):ls1(p)!=0?epc(1):epc(p):ls1(p=epc(tev(q=e4p())))!=0?mix(mix(p,epc(1)),0):ls1(q)!=0?epc(1):epc(q) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())!=0?((q=epc(p&-2))&1)!=0?mix(mix(q,epc(e2q()|1)),0):(p&1)!=0?epc(e2q()|1):epc(p):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?mix(mix(q,epc(e2q()|1)),0):epc(p):(p=e3p())!=0?((q=epc(p&-2))&1)!=0?mix(mix(q,epc(1)),0):(p&1)!=0?epc(1):epc(p):((p=epc((q=e4p())&-2))&1)!=0?mix(mix(p,epc(1)),0):(q&1)!=0?epc(1):epc(q) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(mix(q,epc(e2q()|1)),0)):(p&1)!=0?epo(e2q()|1):epo(p):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(mix(q,epc(e2q()|1)),0)):epo(p):(p=e3p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(mix(q,epc(1)),0)):(p&1)!=0?epo(1):epo(p):((p=epc((q=e4p())&-2))&1)!=0?cto(mix(mix(p,epc(1)),0)):(q&1)!=0?epo(1):epo(q) TE4_XHCGT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)] : VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy4th | gx4th + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XHCGT //================================================================================ //TE4_XHPT ($0000,$06xx,$1D2F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()==0?((tev(e2p()))!=0?epc(tev(e2p())):((tev(e3p()))!=0?epc(tev(e3p())):epc(tev(e4p())))):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(epc(tev(e1p())),0))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()==0?tev(e2p())!=0?epc(tev(e2p())):tev(e3p())!=0?epc(tev(e3p())):epc(tev(e4p())):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(epc(tev(e1p())),0) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())==0?(v3=tev(e2p()))!=0?epc(v3):(v6=tev(e3p()))!=0?epc(v6):epc(tev(e4p())):v2==1?epc(0):ls1(v2)==0?epc(v2):mix(epc(tev(v2)),0) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=tev(e2p()))!=0?epc(p):(p=tev(e3p()))!=0?epc(p):epc(tev(e4p())):p==1?epc(0):ls1(p)==0?epc(p):mix(epc(tev(p)),0) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=e2p()&-2)!=0?epc(p):(p=e3p()&-2)!=0?epc(p):epc(e4p()&-2):p==1?epc(0):(p&1)==0?epc(p):mix(epc(p&-2),0) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())==0?(p=e2p()&-2)!=0?epo(p):(p=e3p()&-2)!=0?epo(p):epo(e4p()&-2):p==1?epo(0):(p&1)==0?epo(p):cto(mix(epc(p&-2),0)) TE4_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XHPT //================================================================================ //TE4_XHPG ($0000,$06xx,$1E2F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XHPG 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()==0?((tev(e2p()))!=0?epc(tev(e2p())):((tev(e3p()))!=0?epc(tev(e3p())):epc(tev(e4p())))):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(epc(tev(e1p())),epc(tod(e2q()))))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()==0?tev(e2p())!=0?epc(tev(e2p())):tev(e3p())!=0?epc(tev(e3p())):epc(tev(e4p())):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(epc(tev(e1p())),epc(tod(e2q()))) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())==0?(v3=tev(e2p()))!=0?epc(v3):(v6=tev(e3p()))!=0?epc(v6):epc(tev(e4p())):v2==1?epc(0):ls1(v2)==0?epc(v2):mix(epc(tev(v2)),epc(tod(e2q()))) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=tev(e2p()))!=0?epc(p):(p=tev(e3p()))!=0?epc(p):epc(tev(e4p())):p==1?epc(0):ls1(p)==0?epc(p):mix(epc(tev(p)),epc(tod(e2q()))) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=e2p()&-2)!=0?epc(p):(p=e3p()&-2)!=0?epc(p):epc(e4p()&-2):p==1?epc(0):(p&1)==0?epc(p):mix(epc(p&-2),epc(e2q()|1)) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())==0?(p=e2p()&-2)!=0?epo(p):(p=e3p()&-2)!=0?epo(p):epo(e4p()&-2):p==1?epo(0):(p&1)==0?epo(p):cto(mix(epc(p&-2),epc(e2q()|1))) TE4_XHPG { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XHPG //================================================================================ //TE4_XHPGT ($0000,$06xx,$1F2F) // 概要 // TE4 テキスト>512ドット16色4プレーン // XHPGT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットが0でないとき // 3番目のパレットを偶数化したパレットのカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットが0のとき) // 4番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(e1p()==0?((tev(e2p()))!=0?epc(tev(e2p())):((tev(e3p()))!=0?epc(tev(e3p())):epc(tev(e4p())))):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),0))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):e1p()==0?tev(e2p())!=0?epc(tev(e2p())):tev(e3p())!=0?epc(tev(e3p())):epc(tev(e4p())):e1p()==1?epc(0):ls1(e1p())==0?epc(e1p()):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),0) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=e1p())==0?(v3=tev(e2p()))!=0?epc(v3):(v6=tev(e3p()))!=0?epc(v6):epc(tev(e4p())):v2==1?epc(0):ls1(v2)==0?epc(v2):mix(mix(epc(tev(v2)),epc(tod(e2q()))),0) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=tev(e2p()))!=0?epc(p):(p=tev(e3p()))!=0?epc(p):epc(tev(e4p())):p==1?epc(0):ls1(p)==0?epc(p):mix(mix(epc(tev(p)),epc(tod(e2q()))),0) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=e1p())==0?(p=e2p()&-2)!=0?epc(p):(p=e3p()&-2)!=0?epc(p):epc(e4p()&-2):p==1?epc(0):(p&1)==0?epc(p):mix(mix(epc(p&-2),epc(e2q()|1)),0) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=e1p())==0?(p=e2p()&-2)!=0?epo(p):(p=e3p()&-2)!=0?epo(p):epo(e4p()&-2):p==1?epo(0):(p&1)==0?epo(p):cto(mix(mix(epc(p&-2),epc(e2q()|1)),0)) TE4_XHPGT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //2番目のパレットのGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす pn = VideoController.vcnReg2Curr >> 4 & 3; //3番目のパレットのGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //4番目のパレットのGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 4 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 5 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 6 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[GraphicScreen.graM4[gy4th | gx4th + 7 & 511] & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TE4_XHPGT //================================================================================ //TF1 ($0001,$06xx,$0023) // 概要 // TF1 テキスト>512ドット256色1プレーン // 拡張なし // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):fpc(f1p())) // 中間コード2 // tpc(txp())!=0?tpc(txp()):fpc(f1p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:fpc(f1p()) // 中間コード4 // (p=tpc(txp()))!=0?p:fpc(f1p()) // 中間コード5 // (p=tpc(txp()))!=0?p:fpc(f1p()) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):fpo(f1p()) TF1 { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1 //================================================================================ //XTF1 // 概要 // TF1 テキスト>512ドット256色1プレーン // 拡張あり XTF1 { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //TF1_XWC case 0b00010001: //TF1_XWC case 0b00010010: //TF1_XWC case 0b00010011: //TF1_XWC TF1_XWC.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //TF1_XWP case 0b00010101: //TF1_XWP case 0b00010110: //TF1_XWP case 0b00010111: //TF1_XWP TF1_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //TF1_XHC TF1.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //TF1_XHCT TF1_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011010: //TF1_XHCG TF1_XHCG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011011: //TF1_XHCGT TF1_XHCGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //TF1_XHPT TF1_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011110: //TF1_XHPG TF1_XHPG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011111: //TF1_XHPGT TF1_XHPGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //TF1_A case 0b01000001: //TF1_A case 0b01000010: //TF1_A case 0b01000011: //TF1_A case 0b01000100: //TF1_A case 0b01000101: //TF1_A case 0b01000110: //TF1_A case 0b01000111: //TF1_A case 0b01001000: //TF1_A case 0b01001001: //TF1_A case 0b01001010: //TF1_A case 0b01001011: //TF1_A case 0b01001100: //TF1_A case 0b01001101: //TF1_A case 0b01001110: //TF1_A case 0b01001111: //TF1_A case 0b01010000: //TF1_A case 0b01010001: //TF1_A case 0b01010010: //TF1_A case 0b01010011: //TF1_A case 0b01010100: //TF1_A case 0b01010101: //TF1_A case 0b01010110: //TF1_A case 0b01010111: //TF1_A case 0b01011000: //TF1_A case 0b01011001: //TF1_A case 0b01011010: //TF1_A case 0b01011011: //TF1_A case 0b01011100: //TF1_A case 0b01011101: //TF1_A case 0b01011110: //TF1_A case 0b01011111: //TF1_A F1_A.drawRaster (src, dst, rh); break; default: TF1.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XTF1); } //switch } //drawRaster }, //XTF1 //================================================================================ //TF1_XWC ($0001,$06xx,$1023) // 概要 // TF1 テキスト>512ドット256色1プレーン // XWC 優先順位に関わらず0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のパレットのカラーだけ表示する // 手順 // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のカラー(0は黒) // 中間コード1 // (ls1(fpc(tev(f1p())))!=0?fpc(f1p()):(tpc(txp())!=0?tpc(txp()):fpc(f1p()))) // 中間コード2 // ls1(fpc(tev(f1p())))!=0?fpc(f1p()):tpc(txp())!=0?tpc(txp()):fpc(f1p()) // 中間コード3 // ls1(fpc(tev(v3=f1p())))!=0?fpc(v3):(v5=tpc(txp()))!=0?v5:fpc(v3) // 中間コード4 // ls1(fpc(tev(p=f1p())))!=0?fpc(p):(q=tpc(txp()))!=0?q:fpc(p) // 中間コード5 // (fpc((p=f1p())&-2)&1)!=0?fpc(p):(q=tpc(txp()))!=0?q:fpc(p) // 中間コード6 // (fpc((p=f1p())&-2)&1)!=0?fpo(p):(q=tpc(txp()))!=0?cto(q):fpo(p) TF1_XWC { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XWC //================================================================================ //TF1_XWP ($0001,$06xx,$1423) // 概要 // TF1 テキスト>512ドット256色1プレーン // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが1以下のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (f1p()<=1?(tpc(txp())!=0?tpc(txp()):fpc(0)):ls1(f1p())==0?(tpc(txp())!=0?tpc(txp()):fpc(f1p())):fpc(tev(f1p()))) // 中間コード2 // f1p()<=1?tpc(txp())!=0?tpc(txp()):fpc(0):ls1(f1p())==0?tpc(txp())!=0?tpc(txp()):fpc(f1p()):fpc(tev(f1p())) // 中間コード3 // (v0=f1p())<=1?(v1=tpc(txp()))!=0?v1:fpc(0):ls1(v0)==0?(v5=tpc(txp()))!=0?v5:fpc(v0):fpc(tev(v0)) // 中間コード4 // (p=f1p())<=1?(p=tpc(txp()))!=0?p:fpc(0):ls1(p)==0?(q=tpc(txp()))!=0?q:fpc(p):fpc(tev(p)) // 中間コード5 // (p=f1p())<=1?(p=tpc(txp()))!=0?p:fpc(0):(p&1)==0?(q=tpc(txp()))!=0?q:fpc(p):fpc(p&-2) // 中間コード6 // (p=f1p())<=1?(p=tpc(txp()))!=0?cto(p):fpo(0):(p&1)==0?(q=tpc(txp()))!=0?cto(q):fpo(p):fpo(p&-2) TF1_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XWP //================================================================================ //TF1_XHCT ($0001,$06xx,$1923) // 概要 // TF1 テキスト>512ドット256色1プレーン // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(ls1(fpc(tev(f1p())))!=0?mix(fpc(f1p()),0):fpc(f1p()))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):ls1(fpc(tev(f1p())))!=0?mix(fpc(f1p()),0):fpc(f1p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:ls1(fpc(tev(v5=f1p())))!=0?mix(fpc(v5),0):fpc(v5) // 中間コード4 // (p=tpc(txp()))!=0?p:ls1(fpc(tev(p=f1p())))!=0?mix(fpc(p),0):fpc(p) // 中間コード5 // (p=tpc(txp()))!=0?p:(fpc((p=f1p())&-2)&1)!=0?mix(fpc(p),0):fpc(p) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(fpc((p=f1p())&-2)&1)!=0?cto(mix(fpc(p),0)):fpo(p) TF1_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XHCT //================================================================================ //TF1_XHCG ($0001,$06xx,$1A23) // 概要 // TF1 テキスト>512ドット256色1プレーン // XHCG 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(ls1(fpc(tev(f1p())))!=0?mix(fpc(tev(f1p())),fpc(tod(f2q()))):(ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p())))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):ls1(fpc(tev(f1p())))!=0?mix(fpc(tev(f1p())),fpc(tod(f2q()))):ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:ls1(v3=fpc(tev(v5=f1p())))!=0?mix(v3,fpc(tod(f2q()))):ls1(v5)!=0?fpc(tod(f2q())):fpc(v5) // 中間コード4 // (p=tpc(txp()))!=0?p:ls1(p=fpc(tev(q=f1p())))!=0?mix(p,fpc(tod(f2q()))):ls1(q)!=0?fpc(tod(f2q())):fpc(q) // 中間コード5 // (p=tpc(txp()))!=0?p:((p=fpc((q=f1p())&-2))&1)!=0?mix(p,fpc(f2q()|1)):(q&1)!=0?fpc(f2q()|1):fpc(q) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):((p=fpc((q=f1p())&-2))&1)!=0?cto(mix(p,fpc(f2q()|1))):(q&1)!=0?fpo(f2q()|1):fpo(q) TF1_XHCG { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gz3rd = VideoController.vcnHidden3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gz4th = VideoController.vcnHidden4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XHCG //================================================================================ //TF1_XHCGT ($0001,$06xx,$1B23) // 概要 // TF1 テキスト>512ドット256色1プレーン // XHCGT 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(ls1(fpc(tev(f1p())))!=0?mix(mix(fpc(tev(f1p())),fpc(tod(f2q()))),0):(ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p())))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):ls1(fpc(tev(f1p())))!=0?mix(mix(fpc(tev(f1p())),fpc(tod(f2q()))),0):ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:ls1(v3=fpc(tev(v5=f1p())))!=0?mix(mix(v3,fpc(tod(f2q()))),0):ls1(v5)!=0?fpc(tod(f2q())):fpc(v5) // 中間コード4 // (p=tpc(txp()))!=0?p:ls1(p=fpc(tev(q=f1p())))!=0?mix(mix(p,fpc(tod(f2q()))),0):ls1(q)!=0?fpc(tod(f2q())):fpc(q) // 中間コード5 // (p=tpc(txp()))!=0?p:((p=fpc((q=f1p())&-2))&1)!=0?mix(mix(p,fpc(f2q()|1)),0):(q&1)!=0?fpc(f2q()|1):fpc(q) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):((p=fpc((q=f1p())&-2))&1)!=0?cto(mix(mix(p,fpc(f2q()|1)),0)):(q&1)!=0?fpo(f2q()|1):fpo(q) TF1_XHCGT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gz3rd = VideoController.vcnHidden3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gz4th = VideoController.vcnHidden4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)] : (q & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XHCGT //================================================================================ //TF1_XHPT ($0001,$06xx,$1D23) // 概要 // TF1 テキスト>512ドット256色1プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()<=1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),0))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()<=1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),0) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())<=1?fpc(0):ls1(v2)==0?fpc(v2):mix(fpc(tev(v2)),0) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())<=1?fpc(0):ls1(p)==0?fpc(p):mix(fpc(tev(p)),0) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())<=1?fpc(0):(p&1)==0?fpc(p):mix(fpc(p&-2),0) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())<=1?fpo(0):(p&1)==0?fpo(p):cto(mix(fpc(p&-2),0)) TF1_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XHPT //================================================================================ //TF1_XHPG ($0001,$06xx,$1E23) // 概要 // TF1 テキスト>512ドット256色1プレーン // XHPG 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()<=1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),fpc(tod(f2q()))))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()<=1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),fpc(tod(f2q()))) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())<=1?fpc(0):ls1(v2)==0?fpc(v2):mix(fpc(tev(v2)),fpc(tod(f2q()))) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())<=1?fpc(0):ls1(p)==0?fpc(p):mix(fpc(tev(p)),fpc(tod(f2q()))) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())<=1?fpc(0):(p&1)==0?fpc(p):mix(fpc(p&-2),fpc(f2q()|1)) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())<=1?fpo(0):(p&1)==0?fpo(p):cto(mix(fpc(p&-2),fpc(f2q()|1))) TF1_XHPG { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gz3rd = VideoController.vcnHidden3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gz4th = VideoController.vcnHidden4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XHPG //================================================================================ //TF1_XHPGT ($0001,$06xx,$1F23) // 概要 // TF1 テキスト>512ドット256色1プレーン // XHPGT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()<=1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(mix(fpc(tev(f1p())),fpc(tod(f2q()))),0))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()<=1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(mix(fpc(tev(f1p())),fpc(tod(f2q()))),0) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())<=1?fpc(0):ls1(v2)==0?fpc(v2):mix(mix(fpc(tev(v2)),fpc(tod(f2q()))),0) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())<=1?fpc(0):ls1(p)==0?fpc(p):mix(mix(fpc(tev(p)),fpc(tod(f2q()))),0) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())<=1?fpc(0):(p&1)==0?fpc(p):mix(mix(fpc(p&-2),fpc(f2q()|1)),0) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())<=1?fpo(0):(p&1)==0?fpo(p):cto(mix(mix(fpc(p&-2),fpc(f2q()|1)),0)) TF1_XHPGT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gz3rd = VideoController.vcnHidden3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gz4th = VideoController.vcnHidden4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF1_XHPGT //================================================================================ //TF2 ($0001,$06xx,$002F) // 概要 // TF2 テキスト>512ドット256色2プレーン // 拡張なし // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()!=0?fpc(f1p()):fpc(f2p()))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()!=0?fpc(f1p()):fpc(f2p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())!=0?fpc(v2):fpc(f2p()) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?fpc(p):fpc(f2p()) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?fpc(p):fpc(f2p()) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())!=0?fpo(p):fpo(f2p()) TF2 { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF2 //================================================================================ //XTF2 // 概要 // TF2 テキスト>512ドット256色2プレーン // 拡張あり XTF2 { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //TF2_XWC case 0b00010001: //TF2_XWC case 0b00010010: //TF2_XWC case 0b00010011: //TF2_XWC TF2_XWC.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //TF2_XWP case 0b00010101: //TF2_XWP case 0b00010110: //TF2_XWP case 0b00010111: //TF2_XWP TF2_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //TF2_XHC TF2.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //TF2_XHCT TF2_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011010: //TF2_XHCG TF2_XHCG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011011: //TF2_XHCGT TF2_XHCGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //TF2_XHPT TF2_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011110: //TF2_XHPG TF2_XHPG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011111: //TF2_XHPGT TF2_XHPGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //TF2_A case 0b01000001: //TF2_A case 0b01000010: //TF2_A case 0b01000011: //TF2_A case 0b01000100: //TF2_A case 0b01000101: //TF2_A case 0b01000110: //TF2_A case 0b01000111: //TF2_A case 0b01001000: //TF2_A case 0b01001001: //TF2_A case 0b01001010: //TF2_A case 0b01001011: //TF2_A case 0b01001100: //TF2_A case 0b01001101: //TF2_A case 0b01001110: //TF2_A case 0b01001111: //TF2_A case 0b01010000: //TF2_A case 0b01010001: //TF2_A case 0b01010010: //TF2_A case 0b01010011: //TF2_A case 0b01010100: //TF2_A case 0b01010101: //TF2_A case 0b01010110: //TF2_A case 0b01010111: //TF2_A case 0b01011000: //TF2_A case 0b01011001: //TF2_A case 0b01011010: //TF2_A case 0b01011011: //TF2_A case 0b01011100: //TF2_A case 0b01011101: //TF2_A case 0b01011110: //TF2_A case 0b01011111: //TF2_A F2_A.drawRaster (src, dst, rh); break; default: TF2.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XTF2); } //switch } //drawRaster }, //XTF2 //================================================================================ //TF2_XWC ($0001,$06xx,$102F) // 概要 // TF2 テキスト>512ドット256色2プレーン // XWC 優先順位に関わらず0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のパレットのカラーだけ表示する // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 2番目のカラー(0は黒) // 中間コード1 // (f1p()!=0?(ls1(fpc(tev(f1p())))!=0?fpc(f1p()):(tpc(txp())!=0?tpc(txp()):fpc(f1p()))):(ls1(fpc(tev(f2p())))!=0?fpc(f2p()):(tpc(txp())!=0?tpc(txp()):fpc(f2p())))) // 中間コード2 // f1p()!=0?ls1(fpc(tev(f1p())))!=0?fpc(f1p()):tpc(txp())!=0?tpc(txp()):fpc(f1p()):ls1(fpc(tev(f2p())))!=0?fpc(f2p()):tpc(txp())!=0?tpc(txp()):fpc(f2p()) // 中間コード3 // (v0=f1p())!=0?ls1(fpc(tev(v0)))!=0?fpc(v0):(v5=tpc(txp()))!=0?v5:fpc(v0):ls1(fpc(tev(v11=f2p())))!=0?fpc(v11):(v13=tpc(txp()))!=0?v13:fpc(v11) // 中間コード4 // (p=f1p())!=0?ls1(fpc(tev(p)))!=0?fpc(p):(q=tpc(txp()))!=0?q:fpc(p):ls1(fpc(tev(p=f2p())))!=0?fpc(p):(q=tpc(txp()))!=0?q:fpc(p) // 中間コード5 // (p=f1p())!=0?(fpc(p&-2)&1)!=0?fpc(p):(q=tpc(txp()))!=0?q:fpc(p):(fpc((p=f2p())&-2)&1)!=0?fpc(p):(q=tpc(txp()))!=0?q:fpc(p) // 中間コード6 // (p=f1p())!=0?(fpc(p&-2)&1)!=0?fpo(p):(q=tpc(txp()))!=0?cto(q):fpo(p):(fpc((p=f2p())&-2)&1)!=0?fpo(p):(q=tpc(txp()))!=0?cto(q):fpo(p) TF2_XWC { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF2_XWC //================================================================================ //TF2_XWP ($0001,$06xx,$142F) // 概要 // TF2 テキスト>512ドット256色2プレーン // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが0のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 2番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (f1p()==0?(tpc(txp())!=0?tpc(txp()):fpc(tev(f2p()))):f1p()==1?(tpc(txp())!=0?tpc(txp()):fpc(0)):ls1(f1p())==0?(tpc(txp())!=0?tpc(txp()):fpc(f1p())):fpc(tev(f1p()))) // 中間コード2 // f1p()==0?tpc(txp())!=0?tpc(txp()):fpc(tev(f2p())):f1p()==1?tpc(txp())!=0?tpc(txp()):fpc(0):ls1(f1p())==0?tpc(txp())!=0?tpc(txp()):fpc(f1p()):fpc(tev(f1p())) // 中間コード3 // (v0=f1p())==0?(v1=tpc(txp()))!=0?v1:fpc(tev(f2p())):v0==1?(v6=tpc(txp()))!=0?v6:fpc(0):ls1(v0)==0?(v10=tpc(txp()))!=0?v10:fpc(v0):fpc(tev(v0)) // 中間コード4 // (p=f1p())==0?(p=tpc(txp()))!=0?p:fpc(tev(f2p())):p==1?(p=tpc(txp()))!=0?p:fpc(0):ls1(p)==0?(q=tpc(txp()))!=0?q:fpc(p):fpc(tev(p)) // 中間コード5 // (p=f1p())==0?(p=tpc(txp()))!=0?p:fpc(f2p()&-2):p==1?(p=tpc(txp()))!=0?p:fpc(0):(p&1)==0?(q=tpc(txp()))!=0?q:fpc(p):fpc(p&-2) // 中間コード6 // (p=f1p())==0?(p=tpc(txp()))!=0?cto(p):fpo(f2p()&-2):p==1?(p=tpc(txp()))!=0?cto(p):fpo(0):(p&1)==0?(q=tpc(txp()))!=0?cto(q):fpo(p):fpo(p&-2) TF2_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) == 0 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) & -2] : p == 1 ? (p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32G8[0] : (p & 1) == 0 ? (q = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF2_XWP //================================================================================ //TF2_XHCT ($0001,$06xx,$192F) // 概要 // TF2 テキスト>512ドット256色2プレーン // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()!=0?(ls1(fpc(tev(f1p())))!=0?mix(fpc(f1p()),0):fpc(f1p())):(ls1(fpc(tev(f2p())))!=0?mix(fpc(f2p()),0):fpc(f2p())))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()!=0?ls1(fpc(tev(f1p())))!=0?mix(fpc(f1p()),0):fpc(f1p()):ls1(fpc(tev(f2p())))!=0?mix(fpc(f2p()),0):fpc(f2p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())!=0?ls1(fpc(tev(v2)))!=0?mix(fpc(v2),0):fpc(v2):ls1(fpc(tev(v12=f2p())))!=0?mix(fpc(v12),0):fpc(v12) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?ls1(fpc(tev(p)))!=0?mix(fpc(p),0):fpc(p):ls1(fpc(tev(p=f2p())))!=0?mix(fpc(p),0):fpc(p) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?(fpc(p&-2)&1)!=0?mix(fpc(p),0):fpc(p):(fpc((p=f2p())&-2)&1)!=0?mix(fpc(p),0):fpc(p) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())!=0?(fpc(p&-2)&1)!=0?cto(mix(fpc(p),0)):fpo(p):(fpc((p=f2p())&-2)&1)!=0?cto(mix(fpc(p),0)):fpo(p) TF2_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p] : (VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF2_XHCT //================================================================================ //TF2_XHCG ($0001,$06xx,$1A2F) // 概要 // TF2 テキスト>512ドット256色2プレーン // XHCG 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()!=0?(ls1(fpc(tev(f1p())))!=0?mix(fpc(tev(f1p())),fpc(tod(f2q()))):(ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p()))):(ls1(fpc(tev(f2p())))!=0?mix(fpc(tev(f2p())),fpc(tod(f2q()))):fpc(f2p())))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()!=0?ls1(fpc(tev(f1p())))!=0?mix(fpc(tev(f1p())),fpc(tod(f2q()))):ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p()):ls1(fpc(tev(f2p())))!=0?mix(fpc(tev(f2p())),fpc(tod(f2q()))):fpc(f2p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())!=0?ls1(v4=fpc(tev(v2)))!=0?mix(v4,fpc(tod(f2q()))):ls1(v2)!=0?fpc(tod(f2q())):fpc(v2):ls1(v16=fpc(tev(v18=f2p())))!=0?mix(v16,fpc(tod(f2q()))):fpc(v18) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?ls1(q=fpc(tev(p)))!=0?mix(q,fpc(tod(f2q()))):ls1(p)!=0?fpc(tod(f2q())):fpc(p):ls1(p=fpc(tev(q=f2p())))!=0?mix(p,fpc(tod(f2q()))):fpc(q) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?((q=fpc(p&-2))&1)!=0?mix(q,fpc(f2q()|1)):(p&1)!=0?fpc(f2q()|1):fpc(p):((p=fpc((q=f2p())&-2))&1)!=0?mix(p,fpc(f2q()|1)):fpc(q) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())!=0?((q=fpc(p&-2))&1)!=0?cto(mix(q,fpc(f2q()|1))):(p&1)!=0?fpo(f2q()|1):fpo(p):((p=fpc((q=f2p())&-2))&1)!=0?cto(mix(p,fpc(f2q()|1))):fpo(q) TF2_XHCG { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz3rd = VideoController.vcnHidden3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz4th = VideoController.vcnHidden4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1])] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1])] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF2_XHCG //================================================================================ //TF2_XHCGT ($0001,$06xx,$1B2F) // 概要 // TF2 テキスト>512ドット256色2プレーン // XHCGT 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()!=0?(ls1(fpc(tev(f1p())))!=0?mix(mix(fpc(tev(f1p())),fpc(tod(f2q()))),0):(ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p()))):(ls1(fpc(tev(f2p())))!=0?mix(mix(fpc(tev(f2p())),fpc(tod(f2q()))),0):fpc(f2p())))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()!=0?ls1(fpc(tev(f1p())))!=0?mix(mix(fpc(tev(f1p())),fpc(tod(f2q()))),0):ls1(f1p())!=0?fpc(tod(f2q())):fpc(f1p()):ls1(fpc(tev(f2p())))!=0?mix(mix(fpc(tev(f2p())),fpc(tod(f2q()))),0):fpc(f2p()) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())!=0?ls1(v4=fpc(tev(v2)))!=0?mix(mix(v4,fpc(tod(f2q()))),0):ls1(v2)!=0?fpc(tod(f2q())):fpc(v2):ls1(v17=fpc(tev(v19=f2p())))!=0?mix(mix(v17,fpc(tod(f2q()))),0):fpc(v19) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?ls1(q=fpc(tev(p)))!=0?mix(mix(q,fpc(tod(f2q()))),0):ls1(p)!=0?fpc(tod(f2q())):fpc(p):ls1(p=fpc(tev(q=f2p())))!=0?mix(mix(p,fpc(tod(f2q()))),0):fpc(q) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())!=0?((q=fpc(p&-2))&1)!=0?mix(mix(q,fpc(f2q()|1)),0):(p&1)!=0?fpc(f2q()|1):fpc(p):((p=fpc((q=f2p())&-2))&1)!=0?mix(mix(p,fpc(f2q()|1)),0):fpc(q) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())!=0?((q=fpc(p&-2))&1)!=0?cto(mix(mix(q,fpc(f2q()|1)),0)):(p&1)!=0?fpo(f2q()|1):fpo(p):((p=fpc((q=f2p())&-2))&1)!=0?cto(mix(mix(p,fpc(f2q()|1)),0)):fpo(q) TF2_XHCGT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz3rd = VideoController.vcnHidden3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int gz4th = VideoController.vcnHidden4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } else { //テキスト桁境界に合っていないとき // ts=1のとき int tt = ts + 8; //tt=9 ts += 16; //ts=17 // ........ ........ ........ 01234567 m8[ta0+tc] int p0 = MainMemory.mmrM8[ta0 + tc] << ts; //.......0 1234567_ ________ ________ p0=m8[ta0+tc]<<ts int p1 = MainMemory.mmrM8[ta1 + tc] << ts; int p2 = MainMemory.mmrM8[ta2 + tc] << ts; int p3 = MainMemory.mmrM8[ta3 + tc] << ts; tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 while (da < db) { // ........ ........ .1234567 ________ p0>>tt // ........ ........ .1234567 89abcdef p0>>tt|m8[ta0+tc]&255 p0 = (p0 >> tt | MainMemory.mmrM8[ta0 + tc] & 255) << ts; //12345678 9abcdef_ ________ ________ p0=(p0>>tt|m8[ta0+tc]&255)<<ts p1 = (p1 >> tt | MainMemory.mmrM8[ta1 + tc] & 255) << ts; //~~~~~~~~ p2 = (p2 >> tt | MainMemory.mmrM8[ta2 + tc] & 255) << ts; //ここを使う p3 = (p3 >> tt | MainMemory.mmrM8[ta3 + tc] & 255) << ts; int tp = (VideoController.VCN_TXP3[p3 >>> 24] | VideoController.VCN_TXP2[p2 >>> 24] | VideoController.VCN_TXP1[p1 >>> 24] | VideoController.VCN_TXP0[p0 >>> 24]); //符号なし右シフトで&255を省略 tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p, q; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 1 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 2 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16TS[tp >>> 16 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 3 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16TS[tp >>> 12 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 4 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16TS[tp >>> 8 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 5 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16TS[tp >>> 4 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 6 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16TS[tp & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? ((q = VideoController.vcnPal16G8[p & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( q, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)] : (p & 1) != 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1] : VideoController.vcnPal32G8[p] : ((p = VideoController.vcnPal16G8[(q = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[(GraphicScreen.graM4[gz4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gz3rd | gx3rd + 7 & 511]) | 1]), 0)] : VideoController.vcnPal32G8[q]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //if ts==0 } //drawRaster }, //TF2_XHCGT //================================================================================ //TF2_XHPT ($0001,$06xx,$1D2F) // 概要 // TF2 テキスト>512ドット256色2プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // テキストカラーが0でないとき // テキストカラー // さもなくば(テキストカラーが0のとき) // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (tpc(txp())!=0?tpc(txp()):(f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),0))) // 中間コード2 // tpc(txp())!=0?tpc(txp()):f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),0) // 中間コード3 // (v0=tpc(txp()))!=0?v0:(v2=f1p())==0?fpc(tev(f2p())):v2==1?fpc(0):ls1(v2)==0?fpc(v2):mix(fpc(tev(v2)),0) // 中間コード4 // (p=tpc(txp()))!=0?p:(p=f1p())==0?fpc(tev(f2p())):p==1?fpc(0):ls1(p)==0?fpc(p):mix(fpc(tev(p)),0) // 中間コード5 // (p=tpc(txp()))!=0?p:(p=f1p())==0?fpc(f2p()&-2):p==1?fpc(0):(p&1)==0?fpc(p):mix(fpc(p&-2),0) // 中間コード6 // (p=tpc(txp()))!=0?cto(p):(p=f1p())==0?fpo(f2p()&-2):p==1?fpo(0):(p&1)==0?fpo(p):cto(mix(fpc(p&-2),0)) TF2_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのbit3-0のGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = VideoController.vcnVisible2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //2番目のパレットのbit3-0のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = VideoController.vcnVisible3rd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //2番目のパレットのbit7-4のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = VideoController.vcnVisible4th + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int ty = CRTC.crtR11TxYZero + src & 1023; //ラスタ int tc = (ty & CRTC.crtMask3) << 7 | CRTC.crtR10TxXCurr >> 3; //テキスト桁位置 int ta0 = 0x00e00000 + ((ty & CRTC.crtMaskMinus4) << 7); //ラスタブロックアドレス int ta1 = 0x00020000 + ta0; int ta2 = 0x00040000 + ta0; int ta3 = 0x00060000 + ta0; int ts = CRTC.crtR10TxXCurr & 7; //テキスト桁境界からのずれ int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; tc = tc + (half >> 3) & CRTC.crtMask511; da += half; } if (ts == 0) { //テキスト桁境界に合っているとき while (da < db) { int tp = (VideoController.VCN_TXP3[MainMemory.mmrM8[ta3 + tc] & 255] | VideoController.VCN_TXP2[MainMemory.mmrM8[ta2 + tc] & 255] | VideoController.VCN_TXP1[MainMemory.mmrM8[ta1 + tc] & 255] | VideoController.VCN_TXP0[MainMemory.mmrM8[ta0 + tc] & 255]); tc = tc + 1 & CRTC.crtMask511; //次回のテキスト桁位置 int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16TS[tp >>> 28]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511]) & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16TS[tp >>> 24 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) & -2] : p == 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16TS[tp >>> 20 & 15]) != 0 ? VideoController.vcnPalTbl[p] : (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) & -2] : p == 1 ? VideoController.vcnPal32G8[0] :