// 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラー(0は黒) // 中間コード1 // (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 // 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=f1p())!=0?ls1(fpc(tev(v0)))!=0?mix(fpc(v0),0):fpc(v0):ls1(fpc(tev(v10=f2p())))!=0?mix(fpc(v10),0):fpc(v10) // 中間コード4 // (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=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=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) F2_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 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; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = ((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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 } //drawRaster }, //F2_XHCT //================================================================================ //F2_XHCG ($0001,$06xx,$1A0F) // 概要 // F2 512ドット256色2プレーン // XHCG 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 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 // (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 // 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=f1p())!=0?ls1(v2=fpc(tev(v0)))!=0?mix(v2,fpc(tod(f2q()))):ls1(v0)!=0?fpc(tod(f2q())):fpc(v0):ls1(v14=fpc(tev(v16=f2p())))!=0?mix(v14,fpc(tod(f2q()))):fpc(v16) // 中間コード4 // (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=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=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) F2_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 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; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 } //drawRaster }, //F2_XHCG //================================================================================ //F2_XHCGT ($0001,$06xx,$1B0F) // 概要 // F2 512ドット256色2プレーン // XHCGT 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 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 // (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 // 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=f1p())!=0?ls1(v2=fpc(tev(v0)))!=0?mix(mix(v2,fpc(tod(f2q()))),0):ls1(v0)!=0?fpc(tod(f2q())):fpc(v0):ls1(v15=fpc(tev(v17=f2p())))!=0?mix(mix(v15,fpc(tod(f2q()))),0):fpc(v17) // 中間コード4 // (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=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=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) F2_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 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; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 } //drawRaster }, //F2_XHCGT //================================================================================ //F2_XHPT ($0001,$06xx,$1D0F) // 概要 // F2 512ドット256色2プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),0)) // 中間コード2 // f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),0) // 中間コード3 // (v0=f1p())==0?fpc(tev(f2p())):v0==1?fpc(0):ls1(v0)==0?fpc(v0):mix(fpc(tev(v0)),0) // 中間コード4 // (p=f1p())==0?fpc(tev(f2p())):p==1?fpc(0):ls1(p)==0?fpc(p):mix(fpc(tev(p)),0) // 中間コード5 // (p=f1p())==0?fpc(f2p()&-2):p==1?fpc(0):(p&1)==0?fpc(p):mix(fpc(p&-2),0) // 中間コード6 // (p=f1p())==0?fpo(f2p()&-2):p==1?fpo(0):(p&1)==0?fpo(p):cto(mix(fpc(p&-2),0)) F2_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 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; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = ((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 = (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 = (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] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | 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], 0)]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | 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], 0)]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | 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], 0)]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | 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], 0)]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | 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], 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //F2_XHPT //================================================================================ //F2_XHPG ($0001,$06xx,$1E0F) // 概要 // F2 512ドット256色2プレーン // XHPG 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // 中間コード1 // (f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),fpc(tod(f2p())))) // 中間コード2 // f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(fpc(tev(f1p())),fpc(tod(f2p()))) // 中間コード3 // (v0=f1p())==0?fpc(tev(f2p())):v0==1?fpc(0):ls1(v0)==0?fpc(v0):mix(fpc(tev(v0)),fpc(tod(f2p()))) // 中間コード4 // (p=f1p())==0?fpc(tev(f2p())):p==1?fpc(0):ls1(p)==0?fpc(p):mix(fpc(tev(p)),fpc(tod(f2p()))) // 中間コード5 // (p=f1p())==0?fpc(f2p()&-2):p==1?fpc(0):(p&1)==0?fpc(p):mix(fpc(p&-2),fpc(f2p()|1)) // 中間コード6 // (p=f1p())==0?fpo(f2p()&-2):p==1?fpo(0):(p&1)==0?fpo(p):cto(mix(fpc(p&-2),fpc(f2p()|1))) F2_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 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 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; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = ((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], VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511]) | 1])]); XEiJ.pnlBM[da + 1] = ((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], VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) | 1])]); XEiJ.pnlBM[da + 2] = ((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] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) | 1])]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | 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[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) | 1])]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | 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[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) | 1])]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | 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[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) | 1])]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | 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[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) | 1])]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | 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[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) | 1])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //F2_XHPG //================================================================================ //F2_XHPGT ($0001,$06xx,$1F0F) // 概要 // F2 512ドット256色2プレーン // XHPGT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらにカラー0を混ぜたカラー(0は黒) // 中間コード1 // (f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(mix(fpc(tev(f1p())),fpc(tod(f2p()))),0)) // 中間コード2 // f1p()==0?fpc(tev(f2p())):f1p()==1?fpc(0):ls1(f1p())==0?fpc(f1p()):mix(mix(fpc(tev(f1p())),fpc(tod(f2p()))),0) // 中間コード3 // (v0=f1p())==0?fpc(tev(f2p())):v0==1?fpc(0):ls1(v0)==0?fpc(v0):mix(mix(fpc(tev(v0)),fpc(tod(f2p()))),0) // 中間コード4 // (p=f1p())==0?fpc(tev(f2p())):p==1?fpc(0):ls1(p)==0?fpc(p):mix(mix(fpc(tev(p)),fpc(tod(f2p()))),0) // 中間コード5 // (p=f1p())==0?fpc(f2p()&-2):p==1?fpc(0):(p&1)==0?fpc(p):mix(mix(fpc(p&-2),fpc(f2p()|1)),0) // 中間コード6 // (p=f1p())==0?fpo(f2p()&-2):p==1?fpo(0):(p&1)==0?fpo(p):cto(mix(mix(fpc(p&-2),fpc(f2p()|1)),0)) F2_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 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 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; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = ((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.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 1] = ((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.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 2] = ((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] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | 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[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | 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[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | 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[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | 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[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) | 1]), 0)]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) == 0 ? VideoController.vcnPal32G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | 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[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) | 1]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //F2_XHPGT //================================================================================ //F2_A ($0001,$06xx,$400F) // 概要 // F2 512ドット256色2プレーン // A グラフィックカラーとテキストパレット0のカラーを混ぜる // 手順 // 1番目のパレットが0でないとき // 1番目のカラーとテキストパレット0のカラーを混ぜたカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のカラーとテキストパレット0のカラーを混ぜたカラー(0は黒) // 中間コード1 // (f1p()!=0?mix(fpc(f1p()),tpc(0)):mix(fpc(f2p()),tpc(0))) // 中間コード2 // f1p()!=0?mix(fpc(f1p()),tpc(0)):mix(fpc(f2p()),tpc(0)) // 中間コード3 // (v0=f1p())!=0?mix(fpc(v0),tpc(0)):mix(fpc(f2p()),tpc(0)) // 中間コード4 // (p=f1p())!=0?mix(fpc(p),tpc(0)):mix(fpc(f2p()),tpc(0)) // 中間コード5 // (p=f1p())!=0?mix(fpc(p),tpc(0)):mix(fpc(f2p()),tpc(0)) // 中間コード6 // cto((p=f1p())!=0?mix(fpc(p),tpc(0)):mix(fpc(f2p()),tpc(0))) F2_A { @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 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; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd & 511])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPalTbl[ (p = (GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) != 0 ? VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[0]) : VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 4 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511])], VideoController.vcnPal16TS[0])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //F2_A //================================================================================ //G ($0003,$06xx,$000F) // 概要 // G 512ドット65536色1プレーン // 拡張なし // 手順 // 1番目のカラー(0は黒) // 中間コード1 // gpc(g1p(),g1p()) // 中間コード2 // gpc(g1p(),g1p()) // 中間コード3 // gpc(v1=g1p(),v1) // 中間コード4 // gpc(p=g1p(),p) // 中間コード5 // gpc(p=g1p(),p) // 中間コード6 // gpo(p=g1p(),p) G { @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 = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //1番目のパレットのbit11-8のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //1番目のパレットのbit15-12のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); 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; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //G //================================================================================ //XG // 概要 // G 512ドット65536色1プレーン // 拡張あり XG { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //G_XWC case 0b00010001: //G_XWC case 0b00010010: //G_XWC case 0b00010011: //G_XWC G.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //G_XWP case 0b00010101: //G_XWP case 0b00010110: //G_XWP case 0b00010111: //G_XWP G_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //G_XHC G.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //G_XHCT G_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //G_XHPT G_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //G_A case 0b01000001: //G_A case 0b01000010: //G_A case 0b01000011: //G_A case 0b01000100: //G_A case 0b01000101: //G_A case 0b01000110: //G_A case 0b01000111: //G_A case 0b01001000: //G_A case 0b01001001: //G_A case 0b01001010: //G_A case 0b01001011: //G_A case 0b01001100: //G_A case 0b01001101: //G_A case 0b01001110: //G_A case 0b01001111: //G_A case 0b01010000: //G_A case 0b01010001: //G_A case 0b01010010: //G_A case 0b01010011: //G_A case 0b01010100: //G_A case 0b01010101: //G_A case 0b01010110: //G_A case 0b01010111: //G_A case 0b01011000: //G_A case 0b01011001: //G_A case 0b01011010: //G_A case 0b01011011: //G_A case 0b01011100: //G_A case 0b01011101: //G_A case 0b01011110: //G_A case 0b01011111: //G_A G_A.drawRaster (src, dst, rh); break; default: G.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XG); } //switch } //drawRaster }, //XG //================================================================================ //G_XWP ($0003,$06xx,$140F) // 概要 // G 512ドット65536色1プレーン // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (g1p()<=1?gpc(0,0):ls1(g1p())==0?gpc(g1p(),g1p()):gpc(tev(g1p()),tev(g1p()))) // 中間コード2 // g1p()<=1?gpc(0,0):ls1(g1p())==0?gpc(g1p(),g1p()):gpc(tev(g1p()),tev(g1p())) // 中間コード3 // (v0=g1p())<=1?gpc(0,0):ls1(v0)==0?gpc(v0,v0):gpc(v5=tev(v0),v5) // 中間コード4 // (p=g1p())<=1?gpc(0,0):ls1(p)==0?gpc(p,p):gpc(q=tev(p),q) // 中間コード5 // (p=g1p())<=1?gpc(0,0):(p&1)==0?gpc(p,p):gpc(q=p&-2,q) // 中間コード6 // (p=g1p())<=1?gpo(0,0):(p&1)==0?gpo(p,p):gpo(q=p&-2,q) G_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 = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //1番目のパレットのbit11-8のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //1番目のパレットのbit15-12のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); 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; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //G_XWP //================================================================================ //G_XHCT ($0003,$06xx,$190F) // 概要 // G 512ドット65536色1プレーン // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットを奇数化したパレットのカラーが奇数のとき // 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを奇数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // 中間コード1 // (ls1(gpc(tod(g1p()),tod(g1p())))!=0?mix(gpc(g1p(),g1p()),0):gpc(g1p(),g1p())) // 中間コード2 // ls1(gpc(tod(g1p()),tod(g1p())))!=0?mix(gpc(g1p(),g1p()),0):gpc(g1p(),g1p()) // 中間コード3 // ls1(gpc(v2=tod(v3=g1p()),v2))!=0?mix(gpc(v3,v3),0):gpc(v3,v3) // 中間コード4 // ls1(gpc(p=tod(q=g1p()),p))!=0?mix(gpc(q,q),0):gpc(q,q) // 中間コード5 // (gpc(p=(q=g1p())|1,p)&1)!=0?mix(gpc(q,q),0):gpc(q,q) // 中間コード6 // (gpc(p=(q=g1p())|1,p)&1)!=0?cto(mix(gpc(q,q),0)):gpo(q,q) G_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 = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //1番目のパレットのbit11-8のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //1番目のパレットのbit15-12のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); 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; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 1] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 2] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 3] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 4] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 5] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 6] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 7] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //G_XHCT //================================================================================ //G_XHPT ($0003,$06xx,$1D0F) // 概要 // G 512ドット65536色1プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (g1p()<=1?gpc(0,0):ls1(g1p())==0?gpc(g1p(),g1p()):mix(gpc(tev(g1p()),tev(g1p())),0)) // 中間コード2 // g1p()<=1?gpc(0,0):ls1(g1p())==0?gpc(g1p(),g1p()):mix(gpc(tev(g1p()),tev(g1p())),0) // 中間コード3 // (v0=g1p())<=1?gpc(0,0):ls1(v0)==0?gpc(v0,v0):mix(gpc(v6=tev(v0),v6),0) // 中間コード4 // (p=g1p())<=1?gpc(0,0):ls1(p)==0?gpc(p,p):mix(gpc(q=tev(p),q),0) // 中間コード5 // (p=g1p())<=1?gpc(0,0):(p&1)==0?gpc(p,p):mix(gpc(q=p&-2,q),0) // 中間コード6 // (p=g1p())<=1?gpo(0,0):(p&1)==0?gpo(p,p):cto(mix(gpc(q=p&-2,q),0)) G_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 = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //1番目のパレットのbit11-8のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //1番目のパレットのbit15-12のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); 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; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //G_XHPT //================================================================================ //G_A ($0003,$06xx,$400F) // 概要 // G 512ドット65536色1プレーン // A グラフィックカラーとテキストパレット0のカラーを混ぜる // 手順 // 1番目のカラーとテキストパレット0のカラーを混ぜたカラー(0は黒) // 中間コード1 // mix(gpc(g1p(),g1p()),tpc(0)) // 中間コード2 // mix(gpc(g1p(),g1p()),tpc(0)) // 中間コード3 // mix(gpc(v2=g1p(),v2),tpc(0)) // 中間コード4 // mix(gpc(p=g1p(),p),tpc(0)) // 中間コード5 // mix(gpc(p=g1p(),p),tpc(0)) // 中間コード6 // cto(mix(gpc(p=g1p(),p),tpc(0))) G_A { @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 = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 2 & 3; //1番目のパレットのbit7-4のGVRAMページ番号 int gx2nd = CRTC.crtR12GrXCurr[pn]; int gy2nd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 4 & 3; //1番目のパレットのbit11-8のGVRAMページ番号 int gx3rd = CRTC.crtR12GrXCurr[pn]; int gy3rd = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); pn = VideoController.vcnReg2Curr >> 6 & 3; //1番目のパレットのbit15-12のGVRAMページ番号 int gx4th = CRTC.crtR12GrXCurr[pn]; int gy4th = (pn << 18) + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); 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; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 1 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 1 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 2 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 2 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 3 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 3 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 4 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 4 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 5 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 5 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 6 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 6 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[gy4th | gx4th + 7 & 511] << 12 | GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] << 8 | GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] << 4 | GraphicScreen.graM4[gy1st | gx1st + 7 & 511])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); gx1st += 8; gx2nd += 8; gx3rd += 8; gx4th += 8; da += 8; } //while da<db } //drawRaster }, //G_A //================================================================================ //H ($0004,$06xx,$0010) // 概要 // H 1024ドット16色1プレーン // 拡張なし // 手順 // 1番目のカラー(0は黒) // 中間コード1 // hpc(h1p()) // 中間コード2 // hpc(h1p()) // 中間コード3 // hpc(h1p()) // 中間コード4 // hpc(h1p()) // 中間コード5 // hpc(h1p()) // 中間コード6 // hpo(h1p()) H { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { XEiJ.pnlBM[da] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga]]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga + 1]]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga + 2]]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga + 3]]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga + 4]]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga + 5]]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga + 6]]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga + 7]]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; XEiJ.pnlBM[da] = (VideoController.vcnPal32G8[GraphicScreen.graM4[ga]]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //H //================================================================================ //XH // 概要 // H 1024ドット16色1プレーン // 拡張あり XH { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //H_XWC case 0b00010001: //H_XWC case 0b00010010: //H_XWC case 0b00010011: //H_XWC H.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //H_XWP case 0b00010101: //H_XWP case 0b00010110: //H_XWP case 0b00010111: //H_XWP H_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //H_XHC H.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //H_XHCT H_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //H_XHPT H_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //H_A case 0b01000001: //H_A case 0b01000010: //H_A case 0b01000011: //H_A case 0b01000100: //H_A case 0b01000101: //H_A case 0b01000110: //H_A case 0b01000111: //H_A case 0b01001000: //H_A case 0b01001001: //H_A case 0b01001010: //H_A case 0b01001011: //H_A case 0b01001100: //H_A case 0b01001101: //H_A case 0b01001110: //H_A case 0b01001111: //H_A case 0b01010000: //H_A case 0b01010001: //H_A case 0b01010010: //H_A case 0b01010011: //H_A case 0b01010100: //H_A case 0b01010101: //H_A case 0b01010110: //H_A case 0b01010111: //H_A case 0b01011000: //H_A case 0b01011001: //H_A case 0b01011010: //H_A case 0b01011011: //H_A case 0b01011100: //H_A case 0b01011101: //H_A case 0b01011110: //H_A case 0b01011111: //H_A H_A.drawRaster (src, dst, rh); break; default: H.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XH); } //switch } //drawRaster }, //XH //================================================================================ //H_XWP ($0004,$06xx,$1410) // 概要 // H 1024ドット16色1プレーン // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (h1p()<=1?hpc(0):ls1(h1p())==0?hpc(h1p()):hpc(tev(h1p()))) // 中間コード2 // h1p()<=1?hpc(0):ls1(h1p())==0?hpc(h1p()):hpc(tev(h1p())) // 中間コード3 // (v0=h1p())<=1?hpc(0):ls1(v0)==0?hpc(v0):hpc(tev(v0)) // 中間コード4 // (p=h1p())<=1?hpc(0):ls1(p)==0?hpc(p):hpc(tev(p)) // 中間コード5 // (p=h1p())<=1?hpc(0):(p&1)==0?hpc(p):hpc(p&-2) // 中間コード6 // (p=h1p())<=1?hpo(0):(p&1)==0?hpo(p):hpo(p&-2) H_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[ga]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[ga + 1]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[ga + 2]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[ga + 3]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[ga + 4]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[ga + 5]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[ga + 6]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[ga + 7]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[ga]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //H_XWP //================================================================================ //H_XHCT ($0004,$06xx,$1910) // 概要 // H 1024ドット16色1プレーン // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // 中間コード1 // (ls1(hpc(tev(h1p())))!=0?mix(hpc(h1p()),0):hpc(h1p())) // 中間コード2 // ls1(hpc(tev(h1p())))!=0?mix(hpc(h1p()),0):hpc(h1p()) // 中間コード3 // ls1(hpc(tev(v3=h1p())))!=0?mix(hpc(v3),0):hpc(v3) // 中間コード4 // ls1(hpc(tev(p=h1p())))!=0?mix(hpc(p),0):hpc(p) // 中間コード5 // (hpc((p=h1p())&-2)&1)!=0?mix(hpc(p),0):hpc(p) // 中間コード6 // (hpc((p=h1p())&-2)&1)!=0?cto(mix(hpc(p),0)):hpo(p) H_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga + 1]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga + 2]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga + 3]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga + 4]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga + 5]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga + 6]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga + 7]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[ga]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //H_XHCT //================================================================================ //H_XHPT ($0004,$06xx,$1D10) // 概要 // H 1024ドット16色1プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (h1p()<=1?hpc(0):ls1(h1p())==0?hpc(h1p()):mix(hpc(tev(h1p())),0)) // 中間コード2 // h1p()<=1?hpc(0):ls1(h1p())==0?hpc(h1p()):mix(hpc(tev(h1p())),0) // 中間コード3 // (v0=h1p())<=1?hpc(0):ls1(v0)==0?hpc(v0):mix(hpc(tev(v0)),0) // 中間コード4 // (p=h1p())<=1?hpc(0):ls1(p)==0?hpc(p):mix(hpc(tev(p)),0) // 中間コード5 // (p=h1p())<=1?hpc(0):(p&1)==0?hpc(p):mix(hpc(p&-2),0) // 中間コード6 // (p=h1p())<=1?hpo(0):(p&1)==0?hpo(p):cto(mix(hpc(p&-2),0)) H_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[ga]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[ga + 1]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[ga + 2]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[ga + 3]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[ga + 4]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[ga + 5]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[ga + 6]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[ga + 7]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[ga]) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //H_XHPT //================================================================================ //H_A ($0004,$06xx,$4010) // 概要 // H 1024ドット16色1プレーン // A グラフィックカラーとテキストパレット0のカラーを混ぜる // 手順 // 1番目のカラーとテキストパレット0のカラーを混ぜたカラー(0は黒) // 中間コード1 // mix(hpc(h1p()),tpc(0)) // 中間コード2 // mix(hpc(h1p()),tpc(0)) // 中間コード3 // mix(hpc(h1p()),tpc(0)) // 中間コード4 // mix(hpc(h1p()),tpc(0)) // 中間コード5 // mix(hpc(h1p()),tpc(0)) // 中間コード6 // cto(mix(hpc(h1p()),tpc(0))) H_A { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga]], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga + 1]], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga + 2]], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga + 3]], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga + 4]], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga + 5]], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga + 6]], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga + 7]], VideoController.vcnPal16TS[0])]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[GraphicScreen.graM4[ga]], VideoController.vcnPal16TS[0])]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //H_A //================================================================================ //I ($0005,$06xx,$0010) // 概要 // I 1024ドット256色1プレーン // 拡張なし // 手順 // 1番目のカラー(0は黒) // 中間コード1 // ipc(i1p()) // 中間コード2 // ipc(i1p()) // 中間コード3 // ipc(i1p()) // 中間コード4 // ipc(i1p()) // 中間コード5 // ipc(i1p()) // 中間コード6 // ipo(i1p()) I { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { XEiJ.pnlBM[da] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; XEiJ.pnlBM[da] = (VideoController.vcnPal32G8[(GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //I //================================================================================ //XI // 概要 // I 1024ドット256色1プレーン // 拡張あり XI { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //I_XWC case 0b00010001: //I_XWC case 0b00010010: //I_XWC case 0b00010011: //I_XWC I.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //I_XWP case 0b00010101: //I_XWP case 0b00010110: //I_XWP case 0b00010111: //I_XWP I_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //I_XHC I.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //I_XHCT I_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //I_XHPT I_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //I_A case 0b01000001: //I_A case 0b01000010: //I_A case 0b01000011: //I_A case 0b01000100: //I_A case 0b01000101: //I_A case 0b01000110: //I_A case 0b01000111: //I_A case 0b01001000: //I_A case 0b01001001: //I_A case 0b01001010: //I_A case 0b01001011: //I_A case 0b01001100: //I_A case 0b01001101: //I_A case 0b01001110: //I_A case 0b01001111: //I_A case 0b01010000: //I_A case 0b01010001: //I_A case 0b01010010: //I_A case 0b01010011: //I_A case 0b01010100: //I_A case 0b01010101: //I_A case 0b01010110: //I_A case 0b01010111: //I_A case 0b01011000: //I_A case 0b01011001: //I_A case 0b01011010: //I_A case 0b01011011: //I_A case 0b01011100: //I_A case 0b01011101: //I_A case 0b01011110: //I_A case 0b01011111: //I_A I_A.drawRaster (src, dst, rh); break; default: I.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XI); } //switch } //drawRaster }, //XI //================================================================================ //I_XWP ($0005,$06xx,$1410) // 概要 // I 1024ドット256色1プレーン // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (i1p()<=1?ipc(0):ls1(i1p())==0?ipc(i1p()):ipc(tev(i1p()))) // 中間コード2 // i1p()<=1?ipc(0):ls1(i1p())==0?ipc(i1p()):ipc(tev(i1p())) // 中間コード3 // (v0=i1p())<=1?ipc(0):ls1(v0)==0?ipc(v0):ipc(tev(v0)) // 中間コード4 // (p=i1p())<=1?ipc(0):ls1(p)==0?ipc(p):ipc(tev(p)) // 中間コード5 // (p=i1p())<=1?ipc(0):(p&1)==0?ipc(p):ipc(p&-2) // 中間コード6 // (p=i1p())<=1?ipo(0):(p&1)==0?ipo(p):ipo(p&-2) I_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPal32G8[p & -2]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //I_XWP //================================================================================ //I_XHCT ($0005,$06xx,$1910) // 概要 // I 1024ドット256色1プレーン // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // 中間コード1 // (ls1(ipc(tev(i1p())))!=0?mix(ipc(i1p()),0):ipc(i1p())) // 中間コード2 // ls1(ipc(tev(i1p())))!=0?mix(ipc(i1p()),0):ipc(i1p()) // 中間コード3 // ls1(ipc(tev(v3=i1p())))!=0?mix(ipc(v3),0):ipc(v3) // 中間コード4 // ls1(ipc(tev(p=i1p())))!=0?mix(ipc(p),0):ipc(p) // 中間コード5 // (ipc((p=i1p())&-2)&1)!=0?mix(ipc(p),0):ipc(p) // 中間コード6 // (ipc((p=i1p())&-2)&1)!=0?cto(mix(ipc(p),0)):ipo(p) I_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 1] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 2] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 3] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 4] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 5] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 6] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); XEiJ.pnlBM[da + 7] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = (GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], 0)] : VideoController.vcnPal32G8[p]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //I_XHCT //================================================================================ //I_XHPT ($0005,$06xx,$1D10) // 概要 // I 1024ドット256色1プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (i1p()<=1?ipc(0):ls1(i1p())==0?ipc(i1p()):mix(ipc(tev(i1p())),0)) // 中間コード2 // i1p()<=1?ipc(0):ls1(i1p())==0?ipc(i1p()):mix(ipc(tev(i1p())),0) // 中間コード3 // (v0=i1p())<=1?ipc(0):ls1(v0)==0?ipc(v0):mix(ipc(tev(v0)),0) // 中間コード4 // (p=i1p())<=1?ipc(0):ls1(p)==0?ipc(p):mix(ipc(tev(p)),0) // 中間コード5 // (p=i1p())<=1?ipc(0):(p&1)==0?ipc(p):mix(ipc(p&-2),0) // 中間コード6 // (p=i1p())<=1?ipo(0):(p&1)==0?ipo(p):cto(mix(ipc(p&-2),0)) I_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPal32G8[0] : (p & 1) == 0 ? VideoController.vcnPal32G8[p] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], 0)]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //I_XHPT //================================================================================ //I_A ($0005,$06xx,$4010) // 概要 // I 1024ドット256色1プレーン // A グラフィックカラーとテキストパレット0のカラーを混ぜる // 手順 // 1番目のカラーとテキストパレット0のカラーを混ぜたカラー(0は黒) // 中間コード1 // mix(ipc(i1p()),tpc(0)) // 中間コード2 // mix(ipc(i1p()),tpc(0)) // 中間コード3 // mix(ipc(i1p()),tpc(0)) // 中間コード4 // mix(ipc(i1p()),tpc(0)) // 中間コード5 // mix(ipc(i1p()),tpc(0)) // 中間コード6 // cto(mix(ipc(i1p()),tpc(0))) I_A { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])], VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])], VideoController.vcnPal16TS[0])]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[(GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])], VideoController.vcnPal16TS[0])]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //I_A //================================================================================ //J ($0007,$06xx,$0010) // 概要 // J 1024ドット65536色1プレーン // 拡張なし // 手順 // 1番目のカラー(0は黒) // 中間コード1 // jpc(j1p(),j1p()) // 中間コード2 // jpc(j1p(),j1p()) // 中間コード3 // jpc(v1=j1p(),v1) // 中間コード4 // jpc(p=j1p(),p) // 中間コード5 // jpc(p=j1p(),p) // 中間コード6 // jpo(p=j1p(),p) J { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145729] << 12 | GraphicScreen.graM4[ga + 2097153] << 8 | GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145730] << 12 | GraphicScreen.graM4[ga + 2097154] << 8 | GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145731] << 12 | GraphicScreen.graM4[ga + 2097155] << 8 | GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145732] << 12 | GraphicScreen.graM4[ga + 2097156] << 8 | GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145733] << 12 | GraphicScreen.graM4[ga + 2097157] << 8 | GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145734] << 12 | GraphicScreen.graM4[ga + 2097158] << 8 | GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145735] << 12 | GraphicScreen.graM4[ga + 2097159] << 8 | GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) >> 8] | VideoController.vcnPal8G16L[p & 255]]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //J //================================================================================ //XJ // 概要 // J 1024ドット65536色1プレーン // 拡張あり XJ { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //J_XWC case 0b00010001: //J_XWC case 0b00010010: //J_XWC case 0b00010011: //J_XWC J.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //J_XWP case 0b00010101: //J_XWP case 0b00010110: //J_XWP case 0b00010111: //J_XWP J_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //J_XHC J.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //J_XHCT J_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //J_XHPT J_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //J_A case 0b01000001: //J_A case 0b01000010: //J_A case 0b01000011: //J_A case 0b01000100: //J_A case 0b01000101: //J_A case 0b01000110: //J_A case 0b01000111: //J_A case 0b01001000: //J_A case 0b01001001: //J_A case 0b01001010: //J_A case 0b01001011: //J_A case 0b01001100: //J_A case 0b01001101: //J_A case 0b01001110: //J_A case 0b01001111: //J_A case 0b01010000: //J_A case 0b01010001: //J_A case 0b01010010: //J_A case 0b01010011: //J_A case 0b01010100: //J_A case 0b01010101: //J_A case 0b01010110: //J_A case 0b01010111: //J_A case 0b01011000: //J_A case 0b01011001: //J_A case 0b01011010: //J_A case 0b01011011: //J_A case 0b01011100: //J_A case 0b01011101: //J_A case 0b01011110: //J_A case 0b01011111: //J_A J_A.drawRaster (src, dst, rh); break; default: J.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XJ); } //switch } //drawRaster }, //XJ //================================================================================ //J_XWP ($0007,$06xx,$1410) // 概要 // J 1024ドット65536色1プレーン // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (j1p()<=1?jpc(0,0):ls1(j1p())==0?jpc(j1p(),j1p()):jpc(tev(j1p()),tev(j1p()))) // 中間コード2 // j1p()<=1?jpc(0,0):ls1(j1p())==0?jpc(j1p(),j1p()):jpc(tev(j1p()),tev(j1p())) // 中間コード3 // (v0=j1p())<=1?jpc(0,0):ls1(v0)==0?jpc(v0,v0):jpc(v5=tev(v0),v5) // 中間コード4 // (p=j1p())<=1?jpc(0,0):ls1(p)==0?jpc(p,p):jpc(q=tev(p),q) // 中間コード5 // (p=j1p())<=1?jpc(0,0):(p&1)==0?jpc(p,p):jpc(q=p&-2,q) // 中間コード6 // (p=j1p())<=1?jpo(0,0):(p&1)==0?jpo(p,p):jpo(q=p&-2,q) J_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[ga + 3145729] << 12 | GraphicScreen.graM4[ga + 2097153] << 8 | GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[ga + 3145730] << 12 | GraphicScreen.graM4[ga + 2097154] << 8 | GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[ga + 3145731] << 12 | GraphicScreen.graM4[ga + 2097155] << 8 | GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[ga + 3145732] << 12 | GraphicScreen.graM4[ga + 2097156] << 8 | GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[ga + 3145733] << 12 | GraphicScreen.graM4[ga + 2097157] << 8 | GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[ga + 3145734] << 12 | GraphicScreen.graM4[ga + 2097158] << 8 | GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[ga + 3145735] << 12 | GraphicScreen.graM4[ga + 2097159] << 8 | GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //J_XWP //================================================================================ //J_XHCT ($0007,$06xx,$1910) // 概要 // J 1024ドット65536色1プレーン // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットを奇数化したパレットのカラーが奇数のとき // 1番目のカラーとカラー0を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを奇数化したパレットのカラーが偶数のとき) // 1番目のカラー(0は黒) // 中間コード1 // (ls1(jpc(tod(j1p()),tod(j1p())))!=0?mix(jpc(j1p(),j1p()),0):jpc(j1p(),j1p())) // 中間コード2 // ls1(jpc(tod(j1p()),tod(j1p())))!=0?mix(jpc(j1p(),j1p()),0):jpc(j1p(),j1p()) // 中間コード3 // ls1(jpc(v2=tod(v3=j1p()),v2))!=0?mix(jpc(v3,v3),0):jpc(v3,v3) // 中間コード4 // ls1(jpc(p=tod(q=j1p()),p))!=0?mix(jpc(q,q),0):jpc(q,q) // 中間コード5 // (jpc(p=(q=j1p())|1,p)&1)!=0?mix(jpc(q,q),0):jpc(q,q) // 中間コード6 // (jpc(p=(q=j1p())|1,p)&1)!=0?cto(mix(jpc(q,q),0)):jpo(q,q) J_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p, q; XEiJ.pnlBM[da] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 1] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145729] << 12 | GraphicScreen.graM4[ga + 2097153] << 8 | GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 2] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145730] << 12 | GraphicScreen.graM4[ga + 2097154] << 8 | GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 3] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145731] << 12 | GraphicScreen.graM4[ga + 2097155] << 8 | GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 4] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145732] << 12 | GraphicScreen.graM4[ga + 2097156] << 8 | GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 5] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145733] << 12 | GraphicScreen.graM4[ga + 2097157] << 8 | GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 6] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145734] << 12 | GraphicScreen.graM4[ga + 2097158] << 8 | GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); XEiJ.pnlBM[da + 7] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145735] << 12 | GraphicScreen.graM4[ga + 2097159] << 8 | GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p, q; XEiJ.pnlBM[da] = (((VideoController.vcnPal8G16H[(p = (q = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) | 1) >> 8] | VideoController.vcnPal8G16L[p & 255]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)] : VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[q >> 8] | VideoController.vcnPal8G16L[q & 255]]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //J_XHCT //================================================================================ //J_XHPT ($0007,$06xx,$1D10) // 概要 // J 1024ドット65536色1プレーン // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーとカラー0を混ぜたカラー(0は黒) // 中間コード1 // (j1p()<=1?jpc(0,0):ls1(j1p())==0?jpc(j1p(),j1p()):mix(jpc(tev(j1p()),tev(j1p())),0)) // 中間コード2 // j1p()<=1?jpc(0,0):ls1(j1p())==0?jpc(j1p(),j1p()):mix(jpc(tev(j1p()),tev(j1p())),0) // 中間コード3 // (v0=j1p())<=1?jpc(0,0):ls1(v0)==0?jpc(v0,v0):mix(jpc(v6=tev(v0),v6),0) // 中間コード4 // (p=j1p())<=1?jpc(0,0):ls1(p)==0?jpc(p,p):mix(jpc(q=tev(p),q),0) // 中間コード5 // (p=j1p())<=1?jpc(0,0):(p&1)==0?jpc(p,p):mix(jpc(q=p&-2,q),0) // 中間コード6 // (p=j1p())<=1?jpo(0,0):(p&1)==0?jpo(p,p):cto(mix(jpc(q=p&-2,q),0)) J_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 1] = ((p = (GraphicScreen.graM4[ga + 3145729] << 12 | GraphicScreen.graM4[ga + 2097153] << 8 | GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 2] = ((p = (GraphicScreen.graM4[ga + 3145730] << 12 | GraphicScreen.graM4[ga + 2097154] << 8 | GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 3] = ((p = (GraphicScreen.graM4[ga + 3145731] << 12 | GraphicScreen.graM4[ga + 2097155] << 8 | GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 4] = ((p = (GraphicScreen.graM4[ga + 3145732] << 12 | GraphicScreen.graM4[ga + 2097156] << 8 | GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 5] = ((p = (GraphicScreen.graM4[ga + 3145733] << 12 | GraphicScreen.graM4[ga + 2097157] << 8 | GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 6] = ((p = (GraphicScreen.graM4[ga + 3145734] << 12 | GraphicScreen.graM4[ga + 2097158] << 8 | GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); XEiJ.pnlBM[da + 7] = ((p = (GraphicScreen.graM4[ga + 3145735] << 12 | GraphicScreen.graM4[ga + 2097159] << 8 | GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p, q; XEiJ.pnlBM[da] = ((p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) <= 1 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[0 >> 8] | VideoController.vcnPal8G16L[0 & 255]] : (p & 1) == 0 ? VideoController.vcnPalTbl[ VideoController.vcnPal8G16H[p >> 8] | VideoController.vcnPal8G16L[p & 255]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(q = p & -2) >> 8] | VideoController.vcnPal8G16L[q & 255]), 0)]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //J_XHPT //================================================================================ //J_A ($0007,$06xx,$4010) // 概要 // J 1024ドット65536色1プレーン // A グラフィックカラーとテキストパレット0のカラーを混ぜる // 手順 // 1番目のカラーとテキストパレット0のカラーを混ぜたカラー(0は黒) // 中間コード1 // mix(jpc(j1p(),j1p()),tpc(0)) // 中間コード2 // mix(jpc(j1p(),j1p()),tpc(0)) // 中間コード3 // mix(jpc(v2=j1p(),v2),tpc(0)) // 中間コード4 // mix(jpc(p=j1p(),p),tpc(0)) // 中間コード5 // mix(jpc(p=j1p(),p),tpc(0)) // 中間コード6 // cto(mix(jpc(p=j1p(),p),tpc(0))) J_A { @Override public void drawRaster (int src, int dst, boolean rh) { int gx = CRTC.crtR12GrXCurr[0]; //1024ドットx座標。溢れは無視する int gy = CRTC.crtR13GrYZero[0] + src; //1024ドットy座標。溢れは無視する int ga0 = ((gy & 511) << 9); //x=0,y&=511の1024ドットアドレス int gt = VideoController.vcnReg2Curr >> (gy >> 7 & 4); //y<512?G2nd|G1st:G4th|G3rd int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; gx += half; da += half; } int ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18) + (gx & 511); //1024ドットアドレス while (da < db) { int dw = Math.min (db - da, (512 - (gx & 511)) & -8); //今回の幅。8の倍数 gx += dw; //次回の1024ドットx座標 int dc = da + dw; //今回のARGB出力インデックスの終了位置 while (da < dc) { int p; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 1] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145729] << 12 | GraphicScreen.graM4[ga + 2097153] << 8 | GraphicScreen.graM4[ga + 1048577] << 4 | GraphicScreen.graM4[ga + 1])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 2] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145730] << 12 | GraphicScreen.graM4[ga + 2097154] << 8 | GraphicScreen.graM4[ga + 1048578] << 4 | GraphicScreen.graM4[ga + 2])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 3] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145731] << 12 | GraphicScreen.graM4[ga + 2097155] << 8 | GraphicScreen.graM4[ga + 1048579] << 4 | GraphicScreen.graM4[ga + 3])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 4] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145732] << 12 | GraphicScreen.graM4[ga + 2097156] << 8 | GraphicScreen.graM4[ga + 1048580] << 4 | GraphicScreen.graM4[ga + 4])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 5] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145733] << 12 | GraphicScreen.graM4[ga + 2097157] << 8 | GraphicScreen.graM4[ga + 1048581] << 4 | GraphicScreen.graM4[ga + 5])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 6] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145734] << 12 | GraphicScreen.graM4[ga + 2097158] << 8 | GraphicScreen.graM4[ga + 1048582] << 4 | GraphicScreen.graM4[ga + 6])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); XEiJ.pnlBM[da + 7] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145735] << 12 | GraphicScreen.graM4[ga + 2097159] << 8 | GraphicScreen.graM4[ga + 1048583] << 4 | GraphicScreen.graM4[ga + 7])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); ga += 8; da += 8; } //while da<dc if (da < db) { for (int k = 0; k < 8; k++) { if ((gx & 511) == 0) { //gxが512の倍数のとき ga = ga0 + ((gt >> (gx >> 8 & 2) & 3) << 18); //gaを再計算する } gx++; int p; XEiJ.pnlBM[da] = (VideoController.vcnPalTbl[ VideoController.vcnMix2 ( (VideoController.vcnPal8G16H[(p = (GraphicScreen.graM4[ga + 3145728] << 12 | GraphicScreen.graM4[ga + 2097152] << 8 | GraphicScreen.graM4[ga + 1048576] << 4 | GraphicScreen.graM4[ga])) >> 8] | VideoController.vcnPal8G16L[p & 255]), VideoController.vcnPal16TS[0])]); ga++; da++; } //for k } //if da<db } //while da<db } //drawRaster }, //J_A //================================================================================ //E1S ($0000,$18xx,$0041) // 概要 // E1S 512ドット16色1プレーン>スプライト // 拡張なし // 手順 // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (epc(e1p())!=0?epc(e1p()):spc(spp())) // 中間コード2 // epc(e1p())!=0?epc(e1p()):spc(spp()) // 中間コード3 // (v0=epc(e1p()))!=0?v0:spc(spp()) // 中間コード4 // (p=epc(e1p()))!=0?p:spc(spp()) // 中間コード5 // (p=epc(e1p()))!=0?p:spc(spp()) // 中間コード6 // (p=epc(e1p()))!=0?cto(p):spo(spp()) E1S { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; da += half; } while (da < db) { int p; XEiJ.pnlBM[da] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st + 1 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st + 2 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st + 3 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st + 4 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st + 5 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st + 6 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy1st | gx1st + 7 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; da += 8; } //while da<db } //drawRaster }, //E1S //================================================================================ //XE1S // 概要 // E1S 512ドット16色1プレーン>スプライト // 拡張あり XE1S { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //E1S_XWC case 0b00010001: //E1S_XWC case 0b00010010: //E1S_XWC case 0b00010011: //E1S_XWC E1S_XWC.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //E1S_XWP case 0b00010101: //E1S_XWP case 0b00010110: //E1S_XWP case 0b00010111: //E1S_XWP E1S_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //E1S_XHC E1S.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //E1S_XHCT E1S_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011010: //E1S_XHCG E1S_XHCG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011011: //E1S_XHCGT E1S_XHCGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //E1S_XHPT E1S_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011110: //E1S_XHPG E1S_XHPG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011111: //E1S_XHPGT E1S_XHPGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //E1S_A case 0b01000001: //E1S_A case 0b01000010: //E1S_A case 0b01000011: //E1S_A case 0b01000100: //E1S_A case 0b01000101: //E1S_A case 0b01000110: //E1S_A case 0b01000111: //E1S_A case 0b01001000: //E1S_A case 0b01001001: //E1S_A case 0b01001010: //E1S_A case 0b01001011: //E1S_A case 0b01001100: //E1S_A case 0b01001101: //E1S_A case 0b01001110: //E1S_A case 0b01001111: //E1S_A case 0b01010000: //E1S_A case 0b01010001: //E1S_A case 0b01010010: //E1S_A case 0b01010011: //E1S_A case 0b01010100: //E1S_A case 0b01010101: //E1S_A case 0b01010110: //E1S_A case 0b01010111: //E1S_A case 0b01011000: //E1S_A case 0b01011001: //E1S_A case 0b01011010: //E1S_A case 0b01011011: //E1S_A case 0b01011100: //E1S_A case 0b01011101: //E1S_A case 0b01011110: //E1S_A case 0b01011111: //E1S_A E1_A.drawRaster (src, dst, rh); break; default: E1S.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XE1S); } //switch } //drawRaster }, //XE1S //================================================================================ //E1S_XWC ($0000,$18xx,$1041) // 概要 // E1S 512ドット16色1プレーン>スプライト // XWC 優先順位に関わらず0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のパレットのカラーだけ表示する // 手順 // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (ls1(epc(tev(e1p())))!=0?epc(e1p()):(epc(e1p())!=0?epc(e1p()):spc(spp()))) // 中間コード2 // ls1(epc(tev(e1p())))!=0?epc(e1p()):epc(e1p())!=0?epc(e1p()):spc(spp()) // 中間コード3 // ls1(epc(tev(v3=e1p())))!=0?epc(v3):(v5=epc(v3))!=0?v5:spc(spp()) // 中間コード4 // ls1(epc(tev(p=e1p())))!=0?epc(p):(q=epc(p))!=0?q:spc(spp()) // 中間コード5 // (epc((p=e1p())&-2)&1)!=0?epc(p):(q=epc(p))!=0?q:spc(spp()) // 中間コード6 // (epc((p=e1p())&-2)&1)!=0?epo(p):(q=epc(p))!=0?cto(q):spo(spp()) E1S_XWC { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XWC //================================================================================ //E1S_XWP ($0000,$18xx,$1441) // 概要 // E1S 512ドット16色1プレーン>スプライト // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (e1p()<=1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):epc(tev(e1p()))) // 中間コード2 // e1p()<=1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):epc(tev(e1p())) // 中間コード3 // (v0=e1p())<=1?(v1=epc(0))!=0?v1:spc(spp()):ls1(v0)==0?(v5=epc(v0))!=0?v5:spc(spp()):epc(tev(v0)) // 中間コード4 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):epc(tev(p)) // 中間コード5 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):epc(p&-2) // 中間コード6 // (p=e1p())<=1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):epo(p&-2) E1S_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPal32G8[p & -2]); sx += 8; gx1st += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XWP //================================================================================ //E1S_XHCT ($0000,$18xx,$1941) // 概要 // E1S 512ドット16色1プレーン>スプライト // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp()))) // 中間コード2 // ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),spc(spp())):epc(e1p())!=0?epc(e1p()):spc(spp()) // 中間コード3 // ls1(epc(tev(v3=e1p())))!=0?mix(epc(v3),spc(spp())):(v8=epc(v3))!=0?v8:spc(spp()) // 中間コード4 // ls1(epc(tev(p=e1p())))!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()) // 中間コード5 // (epc((p=e1p())&-2)&1)!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()) // 中間コード6 // (epc((p=e1p())&-2)&1)!=0?cto(mix(epc(p),spc(spp()))):(q=epc(p))!=0?cto(q):spo(spp()) E1S_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XHCT //================================================================================ //E1S_XHCG ($0000,$18xx,$1A41) // 概要 // E1S 512ドット16色1プレーン>スプライト // XHCG 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー // さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):(ls1(e1p())!=0?(epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp())))) // 中間コード2 // ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):ls1(e1p())!=0?epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp()):epc(e1p())!=0?epc(e1p()):spc(spp()) // 中間コード3 // ls1(v1=epc(tev(v3=e1p())))!=0?mix(v1,epc(tod(e2q()))):ls1(v3)!=0?(v9=epc(tod(e2q())))!=0?v9:spc(spp()):(v14=epc(v3))!=0?v14:spc(spp()) // 中間コード4 // ls1(p=epc(tev(q=e1p())))!=0?mix(p,epc(tod(e2q()))):ls1(q)!=0?(p=epc(tod(e2q())))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード5 // ((p=epc((q=e1p())&-2))&1)!=0?mix(p,epc(e2q()|1)):(q&1)!=0?(p=epc(e2q()|1))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード6 // ((p=epc((q=e1p())&-2))&1)!=0?cto(mix(p,epc(e2q()|1))):(q&1)!=0?(p=epc(e2q()|1))!=0?cto(p):spo(spp()):(p=epc(q))!=0?cto(p):spo(spp()) E1S_XHCG { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XHCG //================================================================================ //E1S_XHCGT ($0000,$18xx,$1B41) // 概要 // E1S 512ドット16色1プレーン>スプライト // XHCGT 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー // さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())):(ls1(e1p())!=0?(epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp())))) // 中間コード2 // ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())):ls1(e1p())!=0?epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp()):epc(e1p())!=0?epc(e1p()):spc(spp()) // 中間コード3 // ls1(v1=epc(tev(v3=e1p())))!=0?mix(mix(v1,epc(tod(e2q()))),spc(spp())):ls1(v3)!=0?(v12=epc(tod(e2q())))!=0?v12:spc(spp()):(v17=epc(v3))!=0?v17:spc(spp()) // 中間コード4 // ls1(p=epc(tev(q=e1p())))!=0?mix(mix(p,epc(tod(e2q()))),spc(spp())):ls1(q)!=0?(p=epc(tod(e2q())))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード5 // ((p=epc((q=e1p())&-2))&1)!=0?mix(mix(p,epc(e2q()|1)),spc(spp())):(q&1)!=0?(p=epc(e2q()|1))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード6 // ((p=epc((q=e1p())&-2))&1)!=0?cto(mix(mix(p,epc(e2q()|1)),spc(spp()))):(q&1)!=0?(p=epc(e2q()|1))!=0?cto(p):spo(spp()):(p=epc(q))!=0?cto(p):spo(spp()) E1S_XHCGT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = (((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XHCGT //================================================================================ //E1S_XHPT ($0000,$18xx,$1D41) // 概要 // E1S 512ドット16色1プレーン>スプライト // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // 中間コード1 // (e1p()<=1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):mix(epc(tev(e1p())),spc(spp()))) // 中間コード2 // e1p()<=1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(epc(tev(e1p())),spc(spp())) // 中間コード3 // (v0=e1p())<=1?(v1=epc(0))!=0?v1:spc(spp()):ls1(v0)==0?(v5=epc(v0))!=0?v5:spc(spp()):mix(epc(tev(v0)),spc(spp())) // 中間コード4 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):mix(epc(tev(p)),spc(spp())) // 中間コード5 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):mix(epc(p&-2),spc(spp())) // 中間コード6 // (p=e1p())<=1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):cto(mix(epc(p&-2),spc(spp()))) E1S_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 int pn = VideoController.vcnReg2Curr & 3; //1番目のパレットのGVRAMページ番号 int gx1st = CRTC.crtR12GrXCurr[pn]; int gy1st = VideoController.vcnVisible1st + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])]); sx += 8; gx1st += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XHPT //================================================================================ //E1S_XHPG ($0000,$18xx,$1E41) // 概要 // E1S 512ドット16色1プレーン>スプライト // XHPG 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0でないとき // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー // さもなくば(1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()<=1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):(mix(epc(tev(e1p())),epc(tod(e2q())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):spc(spp()))) // 中間コード2 // e1p()<=1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(epc(tev(e1p())),epc(tod(e2q())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):spc(spp()) // 中間コード3 // (v0=e1p())<=1?(v1=epc(0))!=0?v1:spc(spp()):ls1(v0)==0?(v5=epc(v0))!=0?v5:spc(spp()):(v8=mix(epc(tev(v0)),epc(tod(e2q()))))!=0?v8:spc(spp()) // 中間コード4 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):(q=mix(epc(tev(p)),epc(tod(e2q()))))!=0?q:spc(spp()) // 中間コード5 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):(q=mix(epc(p&-2),epc(e2q()|1)))!=0?q:spc(spp()) // 中間コード6 // (p=e1p())<=1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):(q=mix(epc(p&-2),epc(e2q()|1)))!=0?cto(q):spo(spp()) E1S_XHPG { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XHPG //================================================================================ //E1S_XHPGT ($0000,$18xx,$1F41) // 概要 // E1S 512ドット16色1プレーン>スプライト // XHPGT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが1以下のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // 中間コード1 // (e1p()<=1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp()))) // 中間コード2 // e1p()<=1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())) // 中間コード3 // (v0=e1p())<=1?(v1=epc(0))!=0?v1:spc(spp()):ls1(v0)==0?(v5=epc(v0))!=0?v5:spc(spp()):mix(mix(epc(tev(v0)),epc(tod(e2q()))),spc(spp())) // 中間コード4 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):mix(mix(epc(tev(p)),epc(tod(e2q()))),spc(spp())) // 中間コード5 // (p=e1p())<=1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):mix(mix(epc(p&-2),epc(e2q()|1)),spc(spp())) // 中間コード6 // (p=e1p())<=1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):cto(mix(mix(epc(p&-2),epc(e2q()|1)),spc(spp()))) E1S_XHPGT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 gz2nd = VideoController.vcnHidden2nd + ((CRTC.crtR13GrYZero[pn] + src & 511) << 9); //ONとみなす int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) <= 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E1S_XHPGT //================================================================================ //E2S ($0000,$18xx,$0043) // 概要 // E2S 512ドット16色2プレーン>スプライト // 拡張なし // 手順 // 1番目のパレットが0でないとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(epc(e1p())!=0?epc(e1p()):spc(spp())):(epc(e2p())!=0?epc(e2p()):spc(spp()))) // 中間コード2 // e1p()!=0?epc(e1p())!=0?epc(e1p()):spc(spp()):epc(e2p())!=0?epc(e2p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?(v1=epc(v0))!=0?v1:spc(spp()):(v4=epc(e2p()))!=0?v4:spc(spp()) // 中間コード4 // (p=e1p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e2p()))!=0?p:spc(spp()) // 中間コード5 // (p=e1p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e2p()))!=0?p:spc(spp()) // 中間コード6 // (p=e1p())!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=epc(e2p()))!=0?cto(p):spo(spp()) E2S { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S //================================================================================ //XE2S // 概要 // E2S 512ドット16色2プレーン>スプライト // 拡張あり XE2S { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //E2S_XWC case 0b00010001: //E2S_XWC case 0b00010010: //E2S_XWC case 0b00010011: //E2S_XWC E2S_XWC.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //E2S_XWP case 0b00010101: //E2S_XWP case 0b00010110: //E2S_XWP case 0b00010111: //E2S_XWP E2S_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //E2S_XHC E2S.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //E2S_XHCT E2S_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011010: //E2S_XHCG E2S_XHCG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011011: //E2S_XHCGT E2S_XHCGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //E2S_XHPT E2S_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011110: //E2S_XHPG E2S_XHPG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011111: //E2S_XHPGT E2S_XHPGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //E2S_A case 0b01000001: //E2S_A case 0b01000010: //E2S_A case 0b01000011: //E2S_A case 0b01000100: //E2S_A case 0b01000101: //E2S_A case 0b01000110: //E2S_A case 0b01000111: //E2S_A case 0b01001000: //E2S_A case 0b01001001: //E2S_A case 0b01001010: //E2S_A case 0b01001011: //E2S_A case 0b01001100: //E2S_A case 0b01001101: //E2S_A case 0b01001110: //E2S_A case 0b01001111: //E2S_A case 0b01010000: //E2S_A case 0b01010001: //E2S_A case 0b01010010: //E2S_A case 0b01010011: //E2S_A case 0b01010100: //E2S_A case 0b01010101: //E2S_A case 0b01010110: //E2S_A case 0b01010111: //E2S_A case 0b01011000: //E2S_A case 0b01011001: //E2S_A case 0b01011010: //E2S_A case 0b01011011: //E2S_A case 0b01011100: //E2S_A case 0b01011101: //E2S_A case 0b01011110: //E2S_A case 0b01011111: //E2S_A E2_A.drawRaster (src, dst, rh); break; default: E2S.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XE2S); } //switch } //drawRaster }, //XE2S //================================================================================ //E2S_XWC ($0000,$18xx,$1043) // 概要 // E2S 512ドット16色2プレーン>スプライト // XWC 優先順位に関わらず0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のパレットのカラーだけ表示する // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?epc(e1p()):(epc(e1p())!=0?epc(e1p()):spc(spp()))):(ls1(epc(tev(e2p())))!=0?epc(e2p()):(epc(e2p())!=0?epc(e2p()):spc(spp())))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?epc(e1p()):epc(e1p())!=0?epc(e1p()):spc(spp()):ls1(epc(tev(e2p())))!=0?epc(e2p()):epc(e2p())!=0?epc(e2p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(epc(tev(v0)))!=0?epc(v0):(v5=epc(v0))!=0?v5:spc(spp()):ls1(epc(tev(v11=e2p())))!=0?epc(v11):(v13=epc(v11))!=0?v13:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(epc(tev(p)))!=0?epc(p):(q=epc(p))!=0?q:spc(spp()):ls1(epc(tev(p=e2p())))!=0?epc(p):(q=epc(p))!=0?q:spc(spp()) // 中間コード5 // (p=e1p())!=0?(epc(p&-2)&1)!=0?epc(p):(q=epc(p))!=0?q:spc(spp()):(epc((p=e2p())&-2)&1)!=0?epc(p):(q=epc(p))!=0?q:spc(spp()) // 中間コード6 // (p=e1p())!=0?(epc(p&-2)&1)!=0?epo(p):(q=epc(p))!=0?cto(q):spo(spp()):(epc((p=e2p())&-2)&1)!=0?epo(p):(q=epc(p))!=0?cto(q):spo(spp()) E2S_XWC { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XWC //================================================================================ //E2S_XWP ($0000,$18xx,$1443) // 概要 // E2S 512ドット16色2プレーン>スプライト // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (e1p()==0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):epc(tev(e1p()))) // 中間コード2 // e1p()==0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):epc(tev(e1p())) // 中間コード3 // (v0=e1p())==0?(v1=epc(tev(e2p())))!=0?v1:spc(spp()):v0==1?(v6=epc(0))!=0?v6:spc(spp()):ls1(v0)==0?(v10=epc(v0))!=0?v10:spc(spp()):epc(tev(v0)) // 中間コード4 // (p=e1p())==0?(p=epc(tev(e2p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):epc(tev(p)) // 中間コード5 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):epc(p&-2) // 中間コード6 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):epo(p&-2) E2S_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPal32G8[p & -2]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XWP //================================================================================ //E2S_XHCT ($0000,$18xx,$1943) // 概要 // E2S 512ドット16色2プレーン>スプライト // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp()))):(ls1(epc(tev(e2p())))!=0?mix(epc(e2p()),spc(spp())):(epc(e2p())!=0?epc(e2p()):spc(spp())))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),spc(spp())):epc(e1p())!=0?epc(e1p()):spc(spp()):ls1(epc(tev(e2p())))!=0?mix(epc(e2p()),spc(spp())):epc(e2p())!=0?epc(e2p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(epc(tev(v0)))!=0?mix(epc(v0),spc(spp())):(v8=epc(v0))!=0?v8:spc(spp()):ls1(epc(tev(v14=e2p())))!=0?mix(epc(v14),spc(spp())):(v19=epc(v14))!=0?v19:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(epc(tev(p)))!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()):ls1(epc(tev(p=e2p())))!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()) // 中間コード5 // (p=e1p())!=0?(epc(p&-2)&1)!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()):(epc((p=e2p())&-2)&1)!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()) // 中間コード6 // (p=e1p())!=0?(epc(p&-2)&1)!=0?cto(mix(epc(p),spc(spp()))):(q=epc(p))!=0?cto(q):spo(spp()):(epc((p=e2p())&-2)&1)!=0?cto(mix(epc(p),spc(spp()))):(q=epc(p))!=0?cto(q):spo(spp()) E2S_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XHCT //================================================================================ //E2S_XHCG ($0000,$18xx,$1A43) // 概要 // E2S 512ドット16色2プレーン>スプライト // XHCG 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー // さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):(ls1(e1p())!=0?(epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp())))):(ls1(epc(tev(e2p())))!=0?mix(epc(tev(e2p())),epc(tod(e2q()))):(epc(e2p())!=0?epc(e2p()):spc(spp())))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):ls1(e1p())!=0?epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp()):epc(e1p())!=0?epc(e1p()):spc(spp()):ls1(epc(tev(e2p())))!=0?mix(epc(tev(e2p())),epc(tod(e2q()))):epc(e2p())!=0?epc(e2p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(v2=epc(tev(v0)))!=0?mix(v2,epc(tod(e2q()))):ls1(v0)!=0?(v9=epc(tod(e2q())))!=0?v9:spc(spp()):(v14=epc(v0))!=0?v14:spc(spp()):ls1(v18=epc(tev(v20=e2p())))!=0?mix(v18,epc(tod(e2q()))):(v25=epc(v20))!=0?v25:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(q=epc(tev(p)))!=0?mix(q,epc(tod(e2q()))):ls1(p)!=0?(p=epc(tod(e2q())))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):ls1(p=epc(tev(q=e2p())))!=0?mix(p,epc(tod(e2q()))):(p=epc(q))!=0?p:spc(spp()) // 中間コード5 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?mix(q,epc(e2q()|1)):(p&1)!=0?(p=epc(e2q()|1))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):((p=epc((q=e2p())&-2))&1)!=0?mix(p,epc(e2q()|1)):(p=epc(q))!=0?p:spc(spp()) // 中間コード6 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(q,epc(e2q()|1))):(p&1)!=0?(p=epc(e2q()|1))!=0?cto(p):spo(spp()):(q=epc(p))!=0?cto(q):spo(spp()):((p=epc((q=e2p())&-2))&1)!=0?cto(mix(p,epc(e2q()|1))):(p=epc(q))!=0?cto(p):spo(spp()) E2S_XHCG { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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とみなす int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XHCG //================================================================================ //E2S_XHCGT ($0000,$18xx,$1B43) // 概要 // E2S 512ドット16色2プレーン>スプライト // XHCGT 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー // さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())):(ls1(e1p())!=0?(epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp())))):(ls1(epc(tev(e2p())))!=0?mix(mix(epc(tev(e2p())),epc(tod(e2q()))),spc(spp())):(epc(e2p())!=0?epc(e2p()):spc(spp())))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())):ls1(e1p())!=0?epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp()):epc(e1p())!=0?epc(e1p()):spc(spp()):ls1(epc(tev(e2p())))!=0?mix(mix(epc(tev(e2p())),epc(tod(e2q()))),spc(spp())):epc(e2p())!=0?epc(e2p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(v2=epc(tev(v0)))!=0?mix(mix(v2,epc(tod(e2q()))),spc(spp())):ls1(v0)!=0?(v12=epc(tod(e2q())))!=0?v12:spc(spp()):(v17=epc(v0))!=0?v17:spc(spp()):ls1(v21=epc(tev(v23=e2p())))!=0?mix(mix(v21,epc(tod(e2q()))),spc(spp())):(v31=epc(v23))!=0?v31:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(q=epc(tev(p)))!=0?mix(mix(q,epc(tod(e2q()))),spc(spp())):ls1(p)!=0?(p=epc(tod(e2q())))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):ls1(p=epc(tev(q=e2p())))!=0?mix(mix(p,epc(tod(e2q()))),spc(spp())):(p=epc(q))!=0?p:spc(spp()) // 中間コード5 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?mix(mix(q,epc(e2q()|1)),spc(spp())):(p&1)!=0?(p=epc(e2q()|1))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):((p=epc((q=e2p())&-2))&1)!=0?mix(mix(p,epc(e2q()|1)),spc(spp())):(p=epc(q))!=0?p:spc(spp()) // 中間コード6 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(mix(q,epc(e2q()|1)),spc(spp()))):(p&1)!=0?(p=epc(e2q()|1))!=0?cto(p):spo(spp()):(q=epc(p))!=0?cto(q):spo(spp()):((p=epc((q=e2p())&-2))&1)!=0?cto(mix(mix(p,epc(e2q()|1)),spc(spp()))):(p=epc(q))!=0?cto(p):spo(spp()) E2S_XHCGT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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とみなす int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XHCGT //================================================================================ //E2S_XHPT ($0000,$18xx,$1D43) // 概要 // E2S 512ドット16色2プレーン>スプライト // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // 中間コード1 // (e1p()==0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):mix(epc(tev(e1p())),spc(spp()))) // 中間コード2 // e1p()==0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(epc(tev(e1p())),spc(spp())) // 中間コード3 // (v0=e1p())==0?(v1=epc(tev(e2p())))!=0?v1:spc(spp()):v0==1?(v6=epc(0))!=0?v6:spc(spp()):ls1(v0)==0?(v10=epc(v0))!=0?v10:spc(spp()):mix(epc(tev(v0)),spc(spp())) // 中間コード4 // (p=e1p())==0?(p=epc(tev(e2p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):mix(epc(tev(p)),spc(spp())) // 中間コード5 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):mix(epc(p&-2),spc(spp())) // 中間コード6 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):cto(mix(epc(p&-2),spc(spp()))) E2S_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XHPT //================================================================================ //E2S_XHPG ($0000,$18xx,$1E43) // 概要 // E2S 512ドット16色2プレーン>スプライト // XHPG 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0でないとき // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー // さもなくば(1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()==0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):(mix(epc(tev(e1p())),epc(tod(e2p())))!=0?mix(epc(tev(e1p())),epc(tod(e2p()))):spc(spp()))) // 中間コード2 // e1p()==0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(epc(tev(e1p())),epc(tod(e2p())))!=0?mix(epc(tev(e1p())),epc(tod(e2p()))):spc(spp()) // 中間コード3 // (v0=e1p())==0?(v1=epc(tev(e2p())))!=0?v1:spc(spp()):v0==1?(v6=epc(0))!=0?v6:spc(spp()):ls1(v0)==0?(v10=epc(v0))!=0?v10:spc(spp()):(v13=mix(epc(tev(v0)),epc(tod(e2p()))))!=0?v13:spc(spp()) // 中間コード4 // (p=e1p())==0?(p=epc(tev(e2p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):(q=mix(epc(tev(p)),epc(tod(e2p()))))!=0?q:spc(spp()) // 中間コード5 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):(q=mix(epc(p&-2),epc(e2p()|1)))!=0?q:spc(spp()) // 中間コード6 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):(q=mix(epc(p&-2),epc(e2p()|1)))!=0?cto(q):spo(spp()) E2S_XHPG { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XHPG //================================================================================ //E2S_XHPGT ($0000,$18xx,$1F43) // 概要 // E2S 512ドット16色2プレーン>スプライト // XHPGT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // 中間コード1 // (e1p()==0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):mix(mix(epc(tev(e1p())),epc(tod(e2p()))),spc(spp()))) // 中間コード2 // e1p()==0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(mix(epc(tev(e1p())),epc(tod(e2p()))),spc(spp())) // 中間コード3 // (v0=e1p())==0?(v1=epc(tev(e2p())))!=0?v1:spc(spp()):v0==1?(v6=epc(0))!=0?v6:spc(spp()):ls1(v0)==0?(v10=epc(v0))!=0?v10:spc(spp()):mix(mix(epc(tev(v0)),epc(tod(e2p()))),spc(spp())) // 中間コード4 // (p=e1p())==0?(p=epc(tev(e2p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):mix(mix(epc(tev(p)),epc(tod(e2p()))),spc(spp())) // 中間コード5 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):mix(mix(epc(p&-2),epc(e2p()|1)),spc(spp())) // 中間コード6 // (p=e1p())==0?(p=epc(e2p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):cto(mix(mix(epc(p&-2),epc(e2p()|1)),spc(spp()))) E2S_XHPGT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])]); sx += 8; gx1st += 8; gx2nd += 8; da += 8; } //while da<db } //drawRaster }, //E2S_XHPGT //================================================================================ //E3S ($0000,$18xx,$0047) // 概要 // E3S 512ドット16色3プレーン>スプライト // 拡張なし // 手順 // 1番目のパレットが0でないとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のカラーが0でないとき // 3番目のカラー // さもなくば(3番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(epc(e1p())!=0?epc(e1p()):spc(spp())):(e2p()!=0?(epc(e2p())!=0?epc(e2p()):spc(spp())):(epc(e3p())!=0?epc(e3p()):spc(spp())))) // 中間コード2 // e1p()!=0?epc(e1p())!=0?epc(e1p()):spc(spp()):e2p()!=0?epc(e2p())!=0?epc(e2p()):spc(spp()):epc(e3p())!=0?epc(e3p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?(v1=epc(v0))!=0?v1:spc(spp()):(v4=e2p())!=0?(v5=epc(v4))!=0?v5:spc(spp()):(v8=epc(e3p()))!=0?v8:spc(spp()) // 中間コード4 // (p=e1p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e3p()))!=0?p:spc(spp()) // 中間コード5 // (p=e1p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e3p()))!=0?p:spc(spp()) // 中間コード6 // (p=e1p())!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=e2p())!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=epc(e3p()))!=0?cto(p):spo(spp()) E3S { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S //================================================================================ //XE3S // 概要 // E3S 512ドット16色3プレーン>スプライト // 拡張あり XE3S { @Override public void drawRaster (int src, int dst, boolean rh) { switch (VideoController.vcnReg3Curr >>> 8 & 0b01011111) { // .A.XHPGT case 0b00010000: //E3S_XWC case 0b00010001: //E3S_XWC case 0b00010010: //E3S_XWC case 0b00010011: //E3S_XWC E3S_XWC.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00010100: //E3S_XWP case 0b00010101: //E3S_XWP case 0b00010110: //E3S_XWP case 0b00010111: //E3S_XWP E3S_XWP.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011000: //E3S_XHC E3S.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011001: //E3S_XHCT E3S_XHCT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011010: //E3S_XHCG E3S_XHCG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011011: //E3S_XHCGT E3S_XHCGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011101: //E3S_XHPT E3S_XHPT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011110: //E3S_XHPG E3S_XHPG.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b00011111: //E3S_XHPGT E3S_XHPGT.drawRaster (src, dst, rh); break; // .A.XHPGT case 0b01000000: //E3S_A case 0b01000001: //E3S_A case 0b01000010: //E3S_A case 0b01000011: //E3S_A case 0b01000100: //E3S_A case 0b01000101: //E3S_A case 0b01000110: //E3S_A case 0b01000111: //E3S_A case 0b01001000: //E3S_A case 0b01001001: //E3S_A case 0b01001010: //E3S_A case 0b01001011: //E3S_A case 0b01001100: //E3S_A case 0b01001101: //E3S_A case 0b01001110: //E3S_A case 0b01001111: //E3S_A case 0b01010000: //E3S_A case 0b01010001: //E3S_A case 0b01010010: //E3S_A case 0b01010011: //E3S_A case 0b01010100: //E3S_A case 0b01010101: //E3S_A case 0b01010110: //E3S_A case 0b01010111: //E3S_A case 0b01011000: //E3S_A case 0b01011001: //E3S_A case 0b01011010: //E3S_A case 0b01011011: //E3S_A case 0b01011100: //E3S_A case 0b01011101: //E3S_A case 0b01011110: //E3S_A case 0b01011111: //E3S_A E3_A.drawRaster (src, dst, rh); break; default: E3S.drawRaster (src, dst, rh); VideoController.vcnReportUnimplemented (XE3S); } //switch } //drawRaster }, //XE3S //================================================================================ //E3S_XWC ($0000,$18xx,$1047) // 概要 // E3S 512ドット16色3プレーン>スプライト // XWC 優先順位に関わらず0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のパレットのカラーだけ表示する // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // 3番目のカラーが0でないとき // 3番目のカラー // さもなくば(3番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?epc(e1p()):(epc(e1p())!=0?epc(e1p()):spc(spp()))):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?epc(e2p()):(epc(e2p())!=0?epc(e2p()):spc(spp()))):(ls1(epc(tev(e3p())))!=0?epc(e3p()):(epc(e3p())!=0?epc(e3p()):spc(spp()))))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?epc(e1p()):epc(e1p())!=0?epc(e1p()):spc(spp()):e2p()!=0?ls1(epc(tev(e2p())))!=0?epc(e2p()):epc(e2p())!=0?epc(e2p()):spc(spp()):ls1(epc(tev(e3p())))!=0?epc(e3p()):epc(e3p())!=0?epc(e3p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(epc(tev(v0)))!=0?epc(v0):(v5=epc(v0))!=0?v5:spc(spp()):(v8=e2p())!=0?ls1(epc(tev(v8)))!=0?epc(v8):(v13=epc(v8))!=0?v13:spc(spp()):ls1(epc(tev(v19=e3p())))!=0?epc(v19):(v21=epc(v19))!=0?v21:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(epc(tev(p)))!=0?epc(p):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?ls1(epc(tev(p)))!=0?epc(p):(q=epc(p))!=0?q:spc(spp()):ls1(epc(tev(p=e3p())))!=0?epc(p):(q=epc(p))!=0?q:spc(spp()) // 中間コード5 // (p=e1p())!=0?(epc(p&-2)&1)!=0?epc(p):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?(epc(p&-2)&1)!=0?epc(p):(q=epc(p))!=0?q:spc(spp()):(epc((p=e3p())&-2)&1)!=0?epc(p):(q=epc(p))!=0?q:spc(spp()) // 中間コード6 // (p=e1p())!=0?(epc(p&-2)&1)!=0?epo(p):(q=epc(p))!=0?cto(q):spo(spp()):(p=e2p())!=0?(epc(p&-2)&1)!=0?epo(p):(q=epc(p))!=0?cto(q):spo(spp()):(epc((p=e3p())&-2)&1)!=0?epo(p):(q=epc(p))!=0?cto(q):spo(spp()) E3S_XWC { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPal32G8[p] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XWC //================================================================================ //E3S_XWP ($0000,$18xx,$1447) // 概要 // E3S 512ドット16色3プレーン>スプライト // XWP 優先順位に関わらず1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーだけ表示する // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが0でないとき // 3番目のパレットを偶数化したパレットのカラー // さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラー(0は黒) // 中間コード1 // (e1p()==0?((tev(e2p()))!=0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):(epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()))):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):epc(tev(e1p()))) // 中間コード2 // e1p()==0?tev(e2p())!=0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):epc(tev(e1p())) // 中間コード3 // (v0=e1p())==0?(v1=tev(e2p()))!=0?(v3=epc(v1))!=0?v3:spc(spp()):(v6=epc(tev(e3p())))!=0?v6:spc(spp()):v0==1?(v11=epc(0))!=0?v11:spc(spp()):ls1(v0)==0?(v15=epc(v0))!=0?v15:spc(spp()):epc(tev(v0)) // 中間コード4 // (p=e1p())==0?(p=tev(e2p()))!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(tev(e3p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):epc(tev(p)) // 中間コード5 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e3p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):epc(p&-2) // 中間コード6 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=epc(e3p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):epo(p&-2) E3S_XWP { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPal32G8[p & -2]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPal32G8[p & -2]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XWP //================================================================================ //E3S_XHCT ($0000,$18xx,$1947) // 概要 // E3S 512ドット16色3プレーン>スプライト // XHCT 0でない1番目のパレットを偶数化(65536色は奇数化)したパレットのカラーが奇数のとき0でない1番目のカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // 3番目のカラーが0でないとき // 3番目のカラー // さもなくば(3番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp()))):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?mix(epc(e2p()),spc(spp())):(epc(e2p())!=0?epc(e2p()):spc(spp()))):(ls1(epc(tev(e3p())))!=0?mix(epc(e3p()),spc(spp())):(epc(e3p())!=0?epc(e3p()):spc(spp()))))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(epc(e1p()),spc(spp())):epc(e1p())!=0?epc(e1p()):spc(spp()):e2p()!=0?ls1(epc(tev(e2p())))!=0?mix(epc(e2p()),spc(spp())):epc(e2p())!=0?epc(e2p()):spc(spp()):ls1(epc(tev(e3p())))!=0?mix(epc(e3p()),spc(spp())):epc(e3p())!=0?epc(e3p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(epc(tev(v0)))!=0?mix(epc(v0),spc(spp())):(v8=epc(v0))!=0?v8:spc(spp()):(v11=e2p())!=0?ls1(epc(tev(v11)))!=0?mix(epc(v11),spc(spp())):(v19=epc(v11))!=0?v19:spc(spp()):ls1(epc(tev(v25=e3p())))!=0?mix(epc(v25),spc(spp())):(v30=epc(v25))!=0?v30:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(epc(tev(p)))!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?ls1(epc(tev(p)))!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()):ls1(epc(tev(p=e3p())))!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()) // 中間コード5 // (p=e1p())!=0?(epc(p&-2)&1)!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?(epc(p&-2)&1)!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()):(epc((p=e3p())&-2)&1)!=0?mix(epc(p),spc(spp())):(q=epc(p))!=0?q:spc(spp()) // 中間コード6 // (p=e1p())!=0?(epc(p&-2)&1)!=0?cto(mix(epc(p),spc(spp()))):(q=epc(p))!=0?cto(q):spo(spp()):(p=e2p())!=0?(epc(p&-2)&1)!=0?cto(mix(epc(p),spc(spp()))):(q=epc(p))!=0?cto(q):spo(spp()):(epc((p=e3p())&-2)&1)!=0?cto(mix(epc(p),spc(spp()))):(q=epc(p))!=0?cto(q):spo(spp()) E3S_XHCT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511]) != 0 ? (VideoController.vcnPal16G8[p & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (VideoController.vcnPal16G8[(p = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) & -2] & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XHCT //================================================================================ //E3S_XHCG ($0000,$18xx,$1A47) // 概要 // E3S 512ドット16色3プレーン>スプライト // XHCG 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー // さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // 3番目のパレットが奇数のとき // パレット1のカラーが0でないとき // パレット1のカラー // さもなくば(パレット1のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(3番目のパレットが偶数のとき) // 3番目のカラーが0でないとき // 3番目のカラー // さもなくば(3番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):(ls1(e1p())!=0?(epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp())))):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?mix(epc(tev(e2p())),epc(tod(e2q()))):(epc(e2p())!=0?epc(e2p()):spc(spp()))):(ls1(epc(tev(e3p())))!=0?mix(epc(tev(e3p())),epc(1)):(ls1(e3p())!=0?(epc(1)!=0?epc(1):spc(spp())):(epc(e3p())!=0?epc(e3p()):spc(spp())))))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):ls1(e1p())!=0?epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp()):epc(e1p())!=0?epc(e1p()):spc(spp()):e2p()!=0?ls1(epc(tev(e2p())))!=0?mix(epc(tev(e2p())),epc(tod(e2q()))):epc(e2p())!=0?epc(e2p()):spc(spp()):ls1(epc(tev(e3p())))!=0?mix(epc(tev(e3p())),epc(1)):ls1(e3p())!=0?epc(1)!=0?epc(1):spc(spp()):epc(e3p())!=0?epc(e3p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(v2=epc(tev(v0)))!=0?mix(v2,epc(tod(e2q()))):ls1(v0)!=0?(v9=epc(tod(e2q())))!=0?v9:spc(spp()):(v14=epc(v0))!=0?v14:spc(spp()):(v17=e2p())!=0?ls1(v19=epc(tev(v17)))!=0?mix(v19,epc(tod(e2q()))):(v25=epc(v17))!=0?v25:spc(spp()):ls1(v29=epc(tev(v31=e3p())))!=0?mix(v29,epc(1)):ls1(v31)!=0?(v35=epc(1))!=0?v35:spc(spp()):(v38=epc(v31))!=0?v38:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(q=epc(tev(p)))!=0?mix(q,epc(tod(e2q()))):ls1(p)!=0?(p=epc(tod(e2q())))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?ls1(q=epc(tev(p)))!=0?mix(q,epc(tod(e2q()))):(q=epc(p))!=0?q:spc(spp()):ls1(p=epc(tev(q=e3p())))!=0?mix(p,epc(1)):ls1(q)!=0?(p=epc(1))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード5 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?mix(q,epc(e2q()|1)):(p&1)!=0?(p=epc(e2q()|1))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?mix(q,epc(e2q()|1)):(q=epc(p))!=0?q:spc(spp()):((p=epc((q=e3p())&-2))&1)!=0?mix(p,epc(1)):(q&1)!=0?(p=epc(1))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード6 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(q,epc(e2q()|1))):(p&1)!=0?(p=epc(e2q()|1))!=0?cto(p):spo(spp()):(q=epc(p))!=0?cto(q):spo(spp()):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(q,epc(e2q()|1))):(q=epc(p))!=0?cto(q):spo(spp()):((p=epc((q=e3p())&-2))&1)!=0?cto(mix(p,epc(1))):(q&1)!=0?(p=epc(1))!=0?cto(p):spo(spp()):(p=epc(q))!=0?cto(p):spo(spp()) E3S_XHCG { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((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 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (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])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XHCG //================================================================================ //E3S_XHCGT ($0000,$18xx,$1B47) // 概要 // E3S 512ドット16色3プレーン>スプライト // XHCGT 0でない1番目のパレットを偶数化したパレットのカラーが奇数のときそれと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0でないとき // 1番目のパレットを偶数化したパレットのカラーが奇数のとき // 1番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(1番目のパレットを偶数化したパレットのカラーが偶数のとき) // 1番目のパレットが奇数のとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0でないとき // 2番目(ONとみなす)のパレットを奇数化したパレットのカラー // さもなくば(2番目(ONとみなす)のパレットを奇数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが偶数のとき) // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが奇数のとき // 2番目のパレットを偶数化したパレットのカラーと2番目(ONとみなす)のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットのカラーが偶数のとき) // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが奇数のとき // 3番目のパレットを偶数化したパレットのカラーとパレット1のカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // さもなくば(3番目のパレットを偶数化したパレットのカラーが偶数のとき) // 3番目のパレットが奇数のとき // パレット1のカラーが0でないとき // パレット1のカラー // さもなくば(パレット1のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(3番目のパレットが偶数のとき) // 3番目のカラーが0でないとき // 3番目のカラー // さもなくば(3番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())):(ls1(e1p())!=0?(epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp())):(epc(e1p())!=0?epc(e1p()):spc(spp())))):(e2p()!=0?(ls1(epc(tev(e2p())))!=0?mix(mix(epc(tev(e2p())),epc(tod(e2q()))),spc(spp())):(epc(e2p())!=0?epc(e2p()):spc(spp()))):(ls1(epc(tev(e3p())))!=0?mix(mix(epc(tev(e3p())),epc(1)),spc(spp())):(ls1(e3p())!=0?(epc(1)!=0?epc(1):spc(spp())):(epc(e3p())!=0?epc(e3p()):spc(spp())))))) // 中間コード2 // e1p()!=0?ls1(epc(tev(e1p())))!=0?mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())):ls1(e1p())!=0?epc(tod(e2q()))!=0?epc(tod(e2q())):spc(spp()):epc(e1p())!=0?epc(e1p()):spc(spp()):e2p()!=0?ls1(epc(tev(e2p())))!=0?mix(mix(epc(tev(e2p())),epc(tod(e2q()))),spc(spp())):epc(e2p())!=0?epc(e2p()):spc(spp()):ls1(epc(tev(e3p())))!=0?mix(mix(epc(tev(e3p())),epc(1)),spc(spp())):ls1(e3p())!=0?epc(1)!=0?epc(1):spc(spp()):epc(e3p())!=0?epc(e3p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?ls1(v2=epc(tev(v0)))!=0?mix(mix(v2,epc(tod(e2q()))),spc(spp())):ls1(v0)!=0?(v12=epc(tod(e2q())))!=0?v12:spc(spp()):(v17=epc(v0))!=0?v17:spc(spp()):(v20=e2p())!=0?ls1(v22=epc(tev(v20)))!=0?mix(mix(v22,epc(tod(e2q()))),spc(spp())):(v31=epc(v20))!=0?v31:spc(spp()):ls1(v35=epc(tev(v37=e3p())))!=0?mix(mix(v35,epc(1)),spc(spp())):ls1(v37)!=0?(v44=epc(1))!=0?v44:spc(spp()):(v47=epc(v37))!=0?v47:spc(spp()) // 中間コード4 // (p=e1p())!=0?ls1(q=epc(tev(p)))!=0?mix(mix(q,epc(tod(e2q()))),spc(spp())):ls1(p)!=0?(p=epc(tod(e2q())))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?ls1(q=epc(tev(p)))!=0?mix(mix(q,epc(tod(e2q()))),spc(spp())):(q=epc(p))!=0?q:spc(spp()):ls1(p=epc(tev(q=e3p())))!=0?mix(mix(p,epc(1)),spc(spp())):ls1(q)!=0?(p=epc(1))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード5 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?mix(mix(q,epc(e2q()|1)),spc(spp())):(p&1)!=0?(p=epc(e2q()|1))!=0?p:spc(spp()):(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?mix(mix(q,epc(e2q()|1)),spc(spp())):(q=epc(p))!=0?q:spc(spp()):((p=epc((q=e3p())&-2))&1)!=0?mix(mix(p,epc(1)),spc(spp())):(q&1)!=0?(p=epc(1))!=0?p:spc(spp()):(p=epc(q))!=0?p:spc(spp()) // 中間コード6 // (p=e1p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(mix(q,epc(e2q()|1)),spc(spp()))):(p&1)!=0?(p=epc(e2q()|1))!=0?cto(p):spo(spp()):(q=epc(p))!=0?cto(q):spo(spp()):(p=e2p())!=0?((q=epc(p&-2))&1)!=0?cto(mix(mix(q,epc(e2q()|1)),spc(spp()))):(q=epc(p))!=0?cto(q):spo(spp()):((p=epc((q=e3p())&-2))&1)!=0?cto(mix(mix(p,epc(1)),spc(spp()))):(q&1)!=0?(p=epc(1))!=0?cto(p):spo(spp()):(p=epc(q))!=0?cto(p):spo(spp()) E3S_XHCGT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (p & 1) != 0 ? (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (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]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : ((p = VideoController.vcnPal16G8[(q = GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511]) & -2]) & 1) != 0 ? VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( p, VideoController.vcnPal16G8[1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])] : (q & 1) != 0 ? (p = VideoController.vcnPal16G8[1]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[q]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XHCGT //================================================================================ //E3S_XHPT ($0000,$18xx,$1D47) // 概要 // E3S 512ドット16色3プレーン>スプライト // XHPT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが0でないとき // 3番目のパレットを偶数化したパレットのカラー // さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // 中間コード1 // (e1p()==0?((tev(e2p()))!=0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):(epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()))):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):mix(epc(tev(e1p())),spc(spp()))) // 中間コード2 // e1p()==0?tev(e2p())!=0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(epc(tev(e1p())),spc(spp())) // 中間コード3 // (v0=e1p())==0?(v1=tev(e2p()))!=0?(v3=epc(v1))!=0?v3:spc(spp()):(v6=epc(tev(e3p())))!=0?v6:spc(spp()):v0==1?(v11=epc(0))!=0?v11:spc(spp()):ls1(v0)==0?(v15=epc(v0))!=0?v15:spc(spp()):mix(epc(tev(v0)),spc(spp())) // 中間コード4 // (p=e1p())==0?(p=tev(e2p()))!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(tev(e3p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):mix(epc(tev(p)),spc(spp())) // 中間コード5 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e3p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):mix(epc(p&-2),spc(spp())) // 中間コード6 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=epc(e3p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):cto(mix(epc(p&-2),spc(spp()))) E3S_XHPT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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); int da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XHPT //================================================================================ //E3S_XHPG ($0000,$18xx,$1E47) // 概要 // E3S 512ドット16色3プレーン>スプライト // XHPG 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが0でないとき // 3番目のパレットを偶数化したパレットのカラー // さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0でないとき // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラー // さもなくば(1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()==0?((tev(e2p()))!=0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):(epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()))):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):(mix(epc(tev(e1p())),epc(tod(e2q())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):spc(spp()))) // 中間コード2 // e1p()==0?tev(e2p())!=0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(epc(tev(e1p())),epc(tod(e2q())))!=0?mix(epc(tev(e1p())),epc(tod(e2q()))):spc(spp()) // 中間コード3 // (v0=e1p())==0?(v1=tev(e2p()))!=0?(v3=epc(v1))!=0?v3:spc(spp()):(v6=epc(tev(e3p())))!=0?v6:spc(spp()):v0==1?(v11=epc(0))!=0?v11:spc(spp()):ls1(v0)==0?(v15=epc(v0))!=0?v15:spc(spp()):(v18=mix(epc(tev(v0)),epc(tod(e2q()))))!=0?v18:spc(spp()) // 中間コード4 // (p=e1p())==0?(p=tev(e2p()))!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(tev(e3p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):(q=mix(epc(tev(p)),epc(tod(e2q()))))!=0?q:spc(spp()) // 中間コード5 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e3p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):(q=mix(epc(p&-2),epc(e2q()|1)))!=0?q:spc(spp()) // 中間コード6 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=epc(e3p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):(q=mix(epc(p&-2),epc(e2q()|1)))!=0?cto(q):spo(spp()) E3S_XHPG { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (q = VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1])) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XHPG //================================================================================ //E3S_XHPGT ($0000,$18xx,$1F47) // 概要 // E3S 512ドット16色3プレーン>スプライト // XHPGT 1番目のパレットが3以上の奇数のときそれを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜてさらに奥のスプライト・テキストのカラーを混ぜる // 手順 // 1番目のパレットが0のとき // 2番目のパレットを偶数化したパレットが0でないとき // 2番目のパレットを偶数化したパレットのカラーが0でないとき // 2番目のパレットを偶数化したパレットのカラー // さもなくば(2番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットを偶数化したパレットが0のとき) // 3番目のパレットを偶数化したパレットのカラーが0でないとき // 3番目のパレットを偶数化したパレットのカラー // さもなくば(3番目のパレットを偶数化したパレットのカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが1のとき // グラフィックパレット0のカラーが0でないとき // グラフィックパレット0のカラー // さもなくば(グラフィックパレット0のカラーが0のとき) // スプライトカラー(0は黒) // 1番目のパレットが2以上の偶数のとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが3以上の奇数のとき) // 1番目のパレットを偶数化したパレットのカラーと2番目のパレットを奇数化したパレットのカラーを混ぜたカラーにさらに // スプライトカラー(0は黒) // を混ぜたカラー(0は黒) // 中間コード1 // (e1p()==0?((tev(e2p()))!=0?(epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp())):(epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()))):e1p()==1?(epc(0)!=0?epc(0):spc(spp())):ls1(e1p())==0?(epc(e1p())!=0?epc(e1p()):spc(spp())):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp()))) // 中間コード2 // e1p()==0?tev(e2p())!=0?epc(tev(e2p()))!=0?epc(tev(e2p())):spc(spp()):epc(tev(e3p()))!=0?epc(tev(e3p())):spc(spp()):e1p()==1?epc(0)!=0?epc(0):spc(spp()):ls1(e1p())==0?epc(e1p())!=0?epc(e1p()):spc(spp()):mix(mix(epc(tev(e1p())),epc(tod(e2q()))),spc(spp())) // 中間コード3 // (v0=e1p())==0?(v1=tev(e2p()))!=0?(v3=epc(v1))!=0?v3:spc(spp()):(v6=epc(tev(e3p())))!=0?v6:spc(spp()):v0==1?(v11=epc(0))!=0?v11:spc(spp()):ls1(v0)==0?(v15=epc(v0))!=0?v15:spc(spp()):mix(mix(epc(tev(v0)),epc(tod(e2q()))),spc(spp())) // 中間コード4 // (p=e1p())==0?(p=tev(e2p()))!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(tev(e3p())))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):ls1(p)==0?(q=epc(p))!=0?q:spc(spp()):mix(mix(epc(tev(p)),epc(tod(e2q()))),spc(spp())) // 中間コード5 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e3p()&-2))!=0?p:spc(spp()):p==1?(p=epc(0))!=0?p:spc(spp()):(p&1)==0?(q=epc(p))!=0?q:spc(spp()):mix(mix(epc(p&-2),epc(e2q()|1)),spc(spp())) // 中間コード6 // (p=e1p())==0?(p=e2p()&-2)!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=epc(e3p()&-2))!=0?cto(p):spo(spp()):p==1?(p=epc(0))!=0?cto(p):spo(spp()):(p&1)==0?(q=epc(p))!=0?cto(q):spo(spp()):cto(mix(mix(epc(p&-2),epc(e2q()|1)),spc(spp()))) E3S_XHPGT { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx]])]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 1 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 1]])]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 2 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 2]])]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 3 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 3]])]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 4 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 4]])]); XEiJ.pnlBM[da + 5] = ((p = GraphicScreen.graM4[gy1st | gx1st + 5 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 5 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 5 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 5]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 5 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 5]])]); XEiJ.pnlBM[da + 6] = ((p = GraphicScreen.graM4[gy1st | gx1st + 6 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 6 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 6 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 6]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 6 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 6]])]); XEiJ.pnlBM[da + 7] = ((p = GraphicScreen.graM4[gy1st | gx1st + 7 & 511]) == 0 ? (p = GraphicScreen.graM4[gy2nd | gx2nd + 7 & 511] & -2) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy3rd | gx3rd + 7 & 511] & -2]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : p == 1 ? (p = VideoController.vcnPal16G8[0]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : (p & 1) == 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 7]] : VideoController.vcnPalTbl[ VideoController.vcnMix2 ( VideoController.vcnMix2 ( VideoController.vcnPal16G8[p & -2], VideoController.vcnPal16G8[GraphicScreen.graM4[gz2nd | gx2nd + 7 & 511] | 1]), VideoController.vcnPal16TS[SpriteScreen.sprBuffer[sx + 7]])]); sx += 8; gx1st += 8; gx2nd += 8; gx3rd += 8; da += 8; } //while da<db } //drawRaster }, //E3S_XHPGT //================================================================================ //E4S ($0000,$18xx,$004F) // 概要 // E4S 512ドット16色4プレーン>スプライト // 拡張なし // 手順 // 1番目のパレットが0でないとき // 1番目のカラーが0でないとき // 1番目のカラー // さもなくば(1番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(1番目のパレットが0のとき) // 2番目のパレットが0でないとき // 2番目のカラーが0でないとき // 2番目のカラー // さもなくば(2番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(2番目のパレットが0のとき) // 3番目のパレットが0でないとき // 3番目のカラーが0でないとき // 3番目のカラー // さもなくば(3番目のカラーが0のとき) // スプライトカラー(0は黒) // さもなくば(3番目のパレットが0のとき) // 4番目のカラーが0でないとき // 4番目のカラー // さもなくば(4番目のカラーが0のとき) // スプライトカラー(0は黒) // 中間コード1 // (e1p()!=0?(epc(e1p())!=0?epc(e1p()):spc(spp())):(e2p()!=0?(epc(e2p())!=0?epc(e2p()):spc(spp())):(e3p()!=0?(epc(e3p())!=0?epc(e3p()):spc(spp())):(epc(e4p())!=0?epc(e4p()):spc(spp()))))) // 中間コード2 // e1p()!=0?epc(e1p())!=0?epc(e1p()):spc(spp()):e2p()!=0?epc(e2p())!=0?epc(e2p()):spc(spp()):e3p()!=0?epc(e3p())!=0?epc(e3p()):spc(spp()):epc(e4p())!=0?epc(e4p()):spc(spp()) // 中間コード3 // (v0=e1p())!=0?(v1=epc(v0))!=0?v1:spc(spp()):(v4=e2p())!=0?(v5=epc(v4))!=0?v5:spc(spp()):(v8=e3p())!=0?(v9=epc(v8))!=0?v9:spc(spp()):(v12=epc(e4p()))!=0?v12:spc(spp()) // 中間コード4 // (p=e1p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=e3p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e4p()))!=0?p:spc(spp()) // 中間コード5 // (p=e1p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=e2p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=e3p())!=0?(q=epc(p))!=0?q:spc(spp()):(p=epc(e4p()))!=0?p:spc(spp()) // 中間コード6 // (p=e1p())!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=e2p())!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=e3p())!=0?(q=epc(p))!=0?cto(q):spo(spp()):(p=epc(e4p()))!=0?cto(p):spo(spp()) E4S { @Override public void drawRaster (int src, int dst, boolean rh) { SpriteScreen.sprStep3 (); int sx = 16; //スプライトx座標 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 da = dst << XEiJ.PNL_BM_OFFSET_BITS; //ARGB出力インデックス int db = da + XEiJ.pnlScreenWidth; //ARGB出力インデックスの終了位置 if (rh) { int half = XEiJ.pnlScreenWidth >> 4 << 3; sx += half; gx1st += half; gx2nd += half; gx3rd += half; gx4th += half; da += half; } while (da < db) { int p, q; XEiJ.pnlBM[da] = ((p = GraphicScreen.graM4[gy1st | gx1st & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = GraphicScreen.graM4[gy2nd | gx2nd & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = GraphicScreen.graM4[gy3rd | gx3rd & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy4th | gx4th & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx]]); XEiJ.pnlBM[da + 1] = ((p = GraphicScreen.graM4[gy1st | gx1st + 1 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 1 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 1 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy4th | gx4th + 1 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 1]]); XEiJ.pnlBM[da + 2] = ((p = GraphicScreen.graM4[gy1st | gx1st + 2 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 2 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 2 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy4th | gx4th + 2 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 2]]); XEiJ.pnlBM[da + 3] = ((p = GraphicScreen.graM4[gy1st | gx1st + 3 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 3 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 3 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]] : (p = VideoController.vcnPal16G8[GraphicScreen.graM4[gy4th | gx4th + 3 & 511]]) != 0 ? VideoController.vcnPalTbl[p] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 3]]); XEiJ.pnlBM[da + 4] = ((p = GraphicScreen.graM4[gy1st | gx1st + 4 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = GraphicScreen.graM4[gy2nd | gx2nd + 4 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] : VideoController.vcnPal32TS[SpriteScreen.sprBuffer[sx + 4]] : (p = GraphicScreen.graM4[gy3rd | gx3rd + 4 & 511]) != 0 ? (q = VideoController.vcnPal16G8[p]) != 0 ? VideoController.vcnPalTbl[q] :