/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2009 icepir8 * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ //#define DEBUGCC #include "tr_windows.h" #include //#include #include #include #include #include #include #include "combine.h" #include "rdp_registers.h" #include "texture.h" #include "rdp.h" //#include "debug.h" //* externals extern void MDrawVisualTriangle(int vn[3], int t1, int s1, int ss1); HWND hGraphics; //** globals _u8 uc0_a0, uc0_b0, uc0_c0, uc0_d0, uc0_Aa0, uc0_Ab0, uc0_Ac0, uc0_Ad0, uc0_a1, uc0_b1, uc0_c1, uc0_d1, uc0_Aa1, uc0_Ab1, uc0_Ac1, uc0_Ad1; _u8 cycle_mode; _u32 cycle1; _u32 cycle2; _u8 Prev_cycle_mode; _u32 Prev_cycle1 = 0; _u32 Prev_cycle2 = 0; _u32 cycle1C; _u32 cycle1A; _u32 cycle2C; _u32 cycle2A; BOOL UseT1Cyc1 = FALSE; BOOL UseT1Cyc2 = FALSE; _u8 checkup = 0; t_Combine CombineArray[4]; int CombinePasses; #define maxCombineModes 40 _ModesUsed ModesUsed[maxCombineModes]; int ModesUsedCnt = 0; extern _u32 TexMode; extern _u32 TexColor; extern int Vtidx[256]; extern float VtSc[256]; extern float VtTc[256]; extern int Vtcnt; void FlushVisualTriangle(int vn[]); static char *Mode[] = { "CC_COMBINED" , "CC_TEXEL0" , "CC_TEXEL1" , "CC_PRIMITIVE" , "CC_SHADE" , "CC_ENVIRONMENT" , "CC_CENTER" , "CC_COMBINED_ALPHA" , "CC_TEXEL0_ALPHA" , "CC_TEXEL1_ALPHA" , "CC_PRIMITIVE_ALPHA" , "CC_SHADE_ALPHA" , "CC_ENV_ALPHA" , "CC_LOD_FRACTION" , "CC_PRIM_LOD_FRAC" , "CC_K5" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_UNDEFINED" , "CC_0" }; static char *Alpha[] = { "AC_COMBINED" , "AC_TEXEL0" , "AC_TEXEL1" , "AC_PRIMITIVE" , "AC_SHADE" , "AC_ENVIRONMENT" , "AC_PRIM_LOD_FRAC" , "AC_0"}; void rdp_setcombine() { LOG_TO_FILE("%08X: %08X %08X CMD RDP_SETCOMBINE", ADDR, CMD0, CMD1); rdp_reg.combine_h = CMD0 & 0x00ffffff; rdp_reg.combine_l = CMD1; cycle1 = 0; cycle2 = 0; uc0_a0 = (_u8)((rdp_reg.cmd0 >> 20) & 0xF); uc0_b0 = (_u8)((rdp_reg.cmd1 >> 28) & 0xF); uc0_c0 = (_u8)((rdp_reg.cmd0 >> 15) & 0x1F); uc0_d0 = (_u8)((rdp_reg.cmd1 >> 15) & 0x7); uc0_Aa0 = (_u8)((rdp_reg.cmd0 >> 12) & 0x7); uc0_Ab0 = (_u8)((rdp_reg.cmd1 >> 12) & 0x7); uc0_Ac0 = (_u8)((rdp_reg.cmd0 >> 9) & 0x7); uc0_Ad0 = (_u8)((rdp_reg.cmd1 >> 9) & 0x7); cycle1 = (uc0_a0<<0) | (uc0_b0<<4) | (uc0_c0<<8) | (uc0_d0<<13)| (uc0_Aa0<<16)| (uc0_Ab0<<19)| (uc0_Ac0<<22)| (uc0_Ad0<<25); uc0_a1 = (_u8)((rdp_reg.cmd0 >> 5) & 0xF); uc0_b1 = (_u8)((rdp_reg.cmd1 >> 24) & 0xF); uc0_c1 = (_u8)((rdp_reg.cmd0 >> 0) & 0x1F); uc0_d1 = (_u8)((rdp_reg.cmd1 >> 6) & 0x7); uc0_Aa1 = (_u8)((rdp_reg.cmd1 >> 21) & 0x7); uc0_Ab1 = (_u8)((rdp_reg.cmd1 >> 3) & 0x7); uc0_Ac1 = (_u8)((rdp_reg.cmd1 >> 18) & 0x7); uc0_Ad1 = (_u8)((rdp_reg.cmd1 >> 0) & 0x7); cycle2 = (uc0_a1<<0) | (uc0_b1<<4) | (uc0_c1<<8) | (uc0_d1<<13)| (uc0_Aa1<<16)| (uc0_Ab1<<19)| (uc0_Ac1<<22)| (uc0_Ad1<<25); UseT1Cyc1 = (uc0_a0 == 2) || (uc0_b0 == 2) || (uc0_c0 == 2) || (uc0_d0 == 2) || (uc0_Aa0 == 2) || (uc0_Ab0 == 2) || (uc0_Ac0 == 2) || (uc0_Ad0 == 2); UseT1Cyc2 = (uc0_a1 == 2) || (uc0_b1 == 2) || (uc0_c1 == 2) || (uc0_d1 == 2) || (uc0_Aa1 == 2) || (uc0_Ab1 == 2) || (uc0_Ac1 == 2) || (uc0_Ad1 == 2); cycle1C = cycle1 & 0x0ffff; cycle1A = (cycle1 >> 16) & 0x0ffff;; cycle2C = cycle2 & 0x0ffff; cycle2A = (cycle2 >> 16) & 0x0ffff;; if ((uc0_c0>6) && (uc0_c0<12)) uc0_c0 += 0; if ((uc0_c1>6) && (uc0_c1<12)) uc0_c1 += 0; if ((UseT1Cyc1) || (UseT1Cyc2)) cycle2C = cycle2 & 0x0ffff; #ifdef LOG_ON LOG_TO_FILE(" mode0=$%06lx; mode1=$%08lx", cycle1, cycle2); LOG_TO_FILE("\ta0 = % 18s, b0 = % 18s, c0 = % 18s, d0 = % 18s", Mode[uc0_a0],Mode[uc0_b0],Mode[uc0_c0],Mode[uc0_d0]); LOG_TO_FILE("\tAa0 = % 17s, Ab0 = % 17s, Ac0 = % 17s, Ad0 = % 17s", Alpha[uc0_Aa0],Alpha[uc0_Ab0],Alpha[uc0_Ac0],Alpha[uc0_Ad0]); LOG_TO_FILE("\ta1 = % 18s, b1 = % 18s, c1 = % 18s, d1 = % 18s", Mode[uc0_a1],Mode[uc0_b1],Mode[uc0_c1],Mode[uc0_d1]); LOG_TO_FILE("\tAa1 = % 17s, Ab1 = % 17s, Ac1 = % 17s, Ad1 = % 17s\n", Alpha[uc0_Aa1],Alpha[uc0_Ab1],Alpha[uc0_Ac1],Alpha[uc0_Ad1]); #endif } /* static void rdp_setcombine() */ _u32 fPasses,fT1; _u32 fS1c,fS2c; _u32 fS1a,fS2a; _u32 sCycleM,sCycle1,sCycle2; _u32 Prev_fT1; _u32 Prev_fS1c,Prev_fS2c; _u32 Prev_fS1a,Prev_fS2a; void BuildCombine(_u8 t_cycle_mode) { _u32 tcycle1C = cycle1C; _u32 tcycle1A = cycle1A; _u32 tcycle2C = cycle2C; _u32 tcycle2A = cycle2A; if ((Prev_cycle1 == cycle1) && (Prev_cycle2 == cycle2) && (Prev_cycle_mode == t_cycle_mode)) { fT1= Prev_fT1; fS1c = Prev_fS1c; fS2c = Prev_fS2c; fS1a = Prev_fS1a; fS2a = Prev_fS2a; return; } { int idx; BOOL found = FALSE; for(idx = 0; idx < ModesUsedCnt; idx++) { if( (ModesUsed[idx].cycle1C == cycle1C) && (ModesUsed[idx].cycle1A == cycle1A) && (ModesUsed[idx].cycle2C == cycle2C) && (ModesUsed[idx].cycle2A == cycle2A) ) { found = TRUE; break; } } if(!found && ModesUsedCnt < maxCombineModes) { ModesUsed[ModesUsedCnt].cycle1C = cycle1C; ModesUsed[ModesUsedCnt].cycle1A = cycle1A; ModesUsed[ModesUsedCnt].cycle2C = cycle2C; ModesUsed[ModesUsedCnt].cycle2A = cycle2A; ModesUsed[ModesUsedCnt].cycle_mode = t_cycle_mode; ModesUsed[ModesUsedCnt].Color_a0 = Mode[uc0_a0]; ModesUsed[ModesUsedCnt].Color_b0 = Mode[uc0_b0]; ModesUsed[ModesUsedCnt].Color_c0 = Mode[uc0_c0]; ModesUsed[ModesUsedCnt].Color_d0 = Mode[uc0_d0]; ModesUsed[ModesUsedCnt].Alpha_a0 = Alpha[uc0_Aa0]; ModesUsed[ModesUsedCnt].Alpha_b0 = Alpha[uc0_Ab0]; ModesUsed[ModesUsedCnt].Alpha_c0 = Alpha[uc0_Ac0]; ModesUsed[ModesUsedCnt].Alpha_d0 = Alpha[uc0_Ad0]; ModesUsed[ModesUsedCnt].Color_a1 = Mode[uc0_a1]; ModesUsed[ModesUsedCnt].Color_b1 = Mode[uc0_b1]; ModesUsed[ModesUsedCnt].Color_c1 = Mode[uc0_c1]; ModesUsed[ModesUsedCnt].Color_d1 = Mode[uc0_d1]; ModesUsed[ModesUsedCnt].Alpha_a1 = Alpha[uc0_Aa1]; ModesUsed[ModesUsedCnt].Alpha_b1 = Alpha[uc0_Ab1]; ModesUsed[ModesUsedCnt].Alpha_c1 = Alpha[uc0_Ac1]; ModesUsed[ModesUsedCnt].Alpha_d1 = Alpha[uc0_Ad1]; ModesUsedCnt++; } } Prev_cycle1 = cycle1; Prev_cycle2 = cycle2; Prev_cycle_mode = t_cycle_mode; checkup = 0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x2d12: case 0x3fff: case 0x7fff: case 0x9fff: case 0xbfff: case 0xdfff: tcycle1C = tcycle2C; break; } switch(tcycle2A) { case 0x03ff: case 0x07ff: case 0x09ff: case 0x0bff: case 0x0dff: tcycle1A = tcycle2A; break; } } switch(tcycle1C) { case 0x2132: // t1,prim,t0,t0 fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2132: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x22f6: // cent,k5,t1,t0 fT1 = 0x10; fS1c = UseT0;// | UseT1; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x22f6: break; case 0x6035: // env,prim,cmb,prim fT1 = 0x20; fS1c = UseEnv | UseT0; fS2c = UsePrim | UseT0Iv; break; default: checkup = 4; break; } } break; case 0x2312: // t1,t0,prim,t0 fT1 = 0x20; fS1c = UseT1 | UsePrim; fS2c = UseT0 | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2312: break; case 0x0c05: // env,cmb,enva,cmb fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UseT0 | UseMEnvAlphaIv; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2315: // env,t0,prim,t0 fT1 = 0x20; fS1c = UseEnv | UsePrim; fS2c = UseT0 | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2312: break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2316: // cent,t0,prim,t0 fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2316: break; case 0x0c05: fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UseT0 | UseMEnvAlphaIv; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x23f6: // cent,k5,prim,t0 fT1 = 0x10;//0x20; fS1c = UseT0; fS2c = UseT0;// | UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x23f6: break; default: checkup = 4; break; } } break; case 0x2412: // t1,t0,shade,t0 fT1 = 0x20; fS1c = UseT1 | UseShade; fS2c = UseT0 | UseShadeIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2413: break; case 0x0c05: fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UseT0 | UseMEnvAlphaIv; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2413: // prim,t0,shade,t0 fT1 = 0x20; fS1c = UsePrim | UseShade; fS2c = UseT0 | UseShadeIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2413: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2416: // cent,t0,shade,t0 fT1 = 0x10; fS1c = UseT0;// | UseShade; fS2c = UseT0;// | UseShadeIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2416: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2512: // t1,t0,env,t0 fT1 = 0x20; fS1c = UseT1 | UseEnv; fS2c = UseT0 | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2512: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2516: // cent,t0,env,t0 fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2516: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x28f5: // env,k5,t0alpha,t0 fT1 = 0x20; fS1c = UseEnv | UseMT0Alpha; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x28f5: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2a12: // t1,t0,prima,t0 fT1 = 0x20; fS1c = UseT1 | UseMPrimAlpha; fS2c = UseT0 | UseMPrimAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2a12: break; case 0x6035:// env,prim,cmb,prim fT1 = 0x20; fS1c = UseEnv | UseT0; fS2c = UsePrim | UseT0Iv; break; case 0xa053: // prim,env,cmb,env fT1 = 0x20; fS1c = UsePrim | UseT0;// | UseMPrimAlphaIv; fS2c = UseEnv | UseT0Iv;// | UseMPrimAlpha; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2a13: // prim,t0,prima,t0 fT1 = 0x20; fS1c = UsePrim | UseMPrimAlpha; fS2c = UseT0 | UseMPrimAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2a13: break; case 0x6035:// env,prim,cmb,prim fT1 = 0x20; fS1c = UseEnv | UseT0; fS2c = UsePrim | UseT0Iv; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0;// | UseMPrimAlphaIv; fS2c = UseEnv | UseT0Iv;// | UseMPrimAlpha; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2b12: // t1,t0,shadea,t0 fT1 = 0x20; fS1c = UseT1 | UseMShadeAlpha; fS2c = UseT0 | UseMShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2b12: break; case 0x8043: fT1 = 0x20; fS1c = UsePrim | UseT0;// | UseMPrimAlphaIv; fS2c = UseShade | UseT0Iv;// | UseMPrimAlpha; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0;// | UseMPrimAlphaIv; fS2c = UseEnv | UseT0Iv;// | UseMPrimAlpha; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2b14: //shade,t0,shada,t0 fT1 = 0x20; fS1c = UseShade | UseMShadeAlpha; fS2c = UseT0 | UseMShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2b14: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x2c12: // t1,t0,enva,t0 fT1 = 0x20; fS1c = UseT1 | UseMEnvAlpha; fS2c = UseT0 | UseMEnvAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2c12: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; // | UseMEnvAlphaIv; fS2c = UseEnv | UseT0Iv; // | UseMEnvAlpha; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x2c15: // env,t0,enva,t0 fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UseT0 | UseMEnvAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2c15: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x2c31: // t0,prim.enva,t0 fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2c31: break; case 0xa053: // prim,env,cmb,env fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; default: checkup = 4; break; } } break; case 0x2c32: // t1,prim,enva,t0 fT1 = 0x10; fS1c = UseT0; //UseT1 | UseMEnvAlpha; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2c32: break; case 0xa053: // prim,env,cmb,env fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x2d11:// t0,t0,lodfrc,t0 fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2d11: break; case 0xa054: // shade,env,cmb,env fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f1: // t0,k5,shade,ca fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2d12:// t1,t0,lodfrc,t0 ???fixme fT1 = 0x10;//0x20; fS1c = UseT0; fS2c = UseT0;//UseT1 | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2d12: break; case 0x6054: //// fix me shade, env,cmb,prim fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnvIv | UsePrim | UseT0Iv; break; case 0x6450: //// fixme cmb, env, shade. prim fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseShadeIv | UseEnvIv | UsePrim; break; case 0xa054: // shade,env,cmb,env fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f1: // t0,k5,shade,ca fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x2e12: // t1,t0,plf,t0 ??? fixme fT1 = 0x20; fS1c = UseT0 | UseT0Iv; fS2c = UseT1 | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2e12: break; case 0x6034: // shade,prim,cmb,prim fT1 = 0x20; fS1c |= UseShade | UseT0; fS2c |= UsePrim | UseT0Iv; break; case 0xa053: // prim,env,cmb,env fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2e13: // prim,t0,plf,t0 // needs fixed fT1 = 0x20; fS1c = UseT0; fS2c = UsePrim | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2e13: break; default: checkup = 4; break; } } break; case 0x2e31: // t0,prim,plf,t0 fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2e31: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2e32: // t1,prim,plf,t0 ??? fixme fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2e32: break; case 0xa053: // prim,env,cmb,env fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xa054: fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xa0f3: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x2ef2: fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2ef2: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xa054: fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x2ef6: // cent,k5,plf,t0 // fixme fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x2ef6: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xa054: fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xa3f0: // cmb,k5,prim,env fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv; break; case 0xa4f0: // cmb,k5,shade,env fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x3ff2: // t1,k5,0,t0 // fixme fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x3ff2: break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x3fff: // k5,k5,k5,t0 fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x3fff: break; case 0x0503: // prim,cmb,env,cmb fT1 = 0x20; fS1c = UsePrim | UseEnv; fS2c = UseT0 | UseEnvIv; break; case 0x05f6: // cent,k5,env,cmb fT1 = 0x20; fS1c = UseT0; fS2c = UseEnv;// UseT0 | UseEnv; break; case 0x0a53: // prim,env,prima,cmb // can't do yet. fT1 = 0x20; fS1c = UsePrim | UseMPrimAlpha; fS2c = UseT0; break; case 0x6054: //// fix me shade, env,cmb,prim // can't do yet. //fT1 = 0x20; fS1c = UseT0 | UseShade; fS2c = UseT0Iv | UsePrim; // | UseEnvIv break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: // cmb,k5,prim,cmba fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x4526: // cent,t1,env,t1 fT1 = 0x10; fS1c = UseT1 | UseEnvIv; fS2c = UseT1 | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x4526: break; case 0x0306: // cent,cmb,prim,cmb break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x4a21: // t0,t1,prima,t1 fT1 = 0x20; fS1c = UseT0 | UseMPrimAlpha; fS2c = UseT1 | UseMPrimAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x4a21: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x4b21: // t0,t1,shadea,t1 fT1 = 0x20; fS1c = UseT0 | UseMShadeAlpha; fS2c = UseT1 | UseMShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x4a21: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x4c21: // t0,t1,enva,t1 fT1 = 0x20; fS1c = UseT0 | UseMEnvAlpha; fS2c = UseT1 | UseMEnvAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x4c12: break; case 0x6a30: // cmb,prim,prima,prim fT1 = 0x20; fS1c = UseT0 | UseMPrimAlpha; fS2c = UsePrim | UseMPrimAlphaIv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x4cf1: fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x4cf1: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x4e31: // t0,prim,plf,t1 fT1 = 0x10; fS1c = UseT1; // UseT0; fS2c = UseT1; // UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x4e31: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x5edf: // fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x4e31: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x5fff: // 0,k5,0,t1 fT1 = 0x10; fS1c = UseT1; fS2c = UseT1; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x5fff: break; case 0x8045: // env,shade,cmb,shade fT1 = 0x20; fS1c = UseEnv | UseT1; fS2c = UseShade | UseT1Iv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6134: // shade,prim,t0,prim fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UsePrim | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6134: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6135: // env,prim,t0,prim fT1 = 0x20; fS1c = UseEnv | UseT0; fS2c = UsePrim | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6135: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6156: // cent,env,t0,prim fT1 = 0x20; fS1c = UseT0; fS2c = UsePrim | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6156: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x61f6: // cent,k5,t0,prim fT1 = 0x20; fS1c = UseT0; fS2c = UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x61f6: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6235: // env,prim,t1,prim fT1 = 0x20; fS1c = UseEnv | UseT1; fS2c = UsePrim | UseT1Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6235: case 0xe2f0: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6236: // cent,prim,t1,prim fT1 = 0x10;// 0x20; fS1c = UsePrim | UseT1Iv;//UseT0 | UseT1; fS2c = UsePrim | UseT1Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6236: case 0xe2f0: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6435: // env,prim,shade,prim fT1 = 0x20; fS1c = UseEnv | UseShade; fS2c = UsePrim | UseShadeIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6435: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6436: // cent,prim,shade,prim fT1 = 0x10;//0x20 fS1c = UsePrim | UseShadeIv;// UseT0 | UseShade; fS2c = UsePrim | UseShadeIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6436: break; case 0xe0f1: fS1c |= UseT0; fS2c |= UseT0; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6451: // t0,env,shade,prim // can't do yet. fT1 = 0x20; fS1c = UseT0 | UseShade; fS2c = UseEnvIv | UsePrim | UseShadeIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6451: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6531: // t0,prim,env,prim fT1 = 0x20; fS1c = UseT0 | UseEnv; fS2c = UsePrim | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6531: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6536: //cent,prim,env,prim fT1 = 0x20; fS1c = UseEnv; fS2c = UsePrim | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6536: break; case 0xe4f0: // cmb,k5,shade,ca fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x65f1: // t0,k5,env,prim fT1 = 0x20; fS1c = UseT0 | UseEnv; fS2c = UsePrim | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1ff0: case 0x1fff: case 0x65f1: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6935: // env,prim,t1a,prim fT1 = 0x20; fS1c = UseEnv | UseMT1Alpha; fS2c = UsePrim | UseMT1AlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6935: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6a31: // t0,prim,prima,prim fT1 = 0x20; fS1c = UseT0 | UseMPrimAlpha; fS2c = UsePrim | UseMPrimAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6a31: break; case 0x0405: // env,cmb,shade,cmb fT1 = 0x20; fS1c = UseEnv | UseShade; fS2c = UseT0 | UseShadeIv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6a54: // shade,env,prima,prim fT1 = 0x20; fS1c = UseShade | UseMPrimAlpha; fS2c = UsePrim | UseMPrimAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6a54: break; case 0x0405: // env,cmb,shade,cmb fT1 = 0x20; fS1c = UseEnv | UseShade; fS2c = UseT0 | UseShadeIv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6b31: // t0,prim,shadea,prim fT1 = 0x20; fS1c = UseT0 | UseMShadeAlpha; fS2c = UsePrim | UseMShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6b31: break; case 0x0405: // env,cmb,shade,cmb fT1 = 0x20; fS1c = UseEnv | UseShade; fS2c = UseT0 | UseShadeIv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6c31: // t0,prim,enva,prim fT1 = 0x20; fS1c = UseT0 | UseMEnvAlpha; fS2c = UsePrim | UseMEnvAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6c31: break; case 0x0405: // env,cmb,shade,cmb fT1 = 0x20; fS1c = UseEnv | UseShade; fS2c = UseT0 | UseShadeIv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x6e12: fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x6e12: break; case 0x6034: fT1 = 0x20; fS1c |= UseShade | UseT0; fS2c |= UsePrim | UseT0Iv; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x7fff: // k5,k5,0,prim fT1 = 0x10; fS1c = UsePrim; fS2c = UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x7fff: break; case 0x05f6: // cent,k5,env,cmb //fT1 = 0x20; fS1c = UsePrim | UseEnvIv; fS2c = UsePrim | UseEnvIv;//UseT0 | UseEnv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8143: // prim,shade,t0,shade fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseShade | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8143: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8145: // env,shade,t0,shade fT1 = 0x20; fS1c = UseEnv | UseT0; fS2c = UseShade | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8145: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x81f3:// prim,k5,t0,shade fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8143: break; case 0xaef0:// cmb,k5,plf,env fS1c = UseT0 | UseShade; fS2c = UseEnv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8341: // t0,shade,prim,shade fT1 = 0x20; fS1c = UseT0 | UsePrim; fS2c = UseShade | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8341: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8531: // t0,prim.env,shade fT1 = 0x20; fS1c = UseT0 | UseEnv; fS2c = UsePrim | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8531: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8545: fT1 = 0x20; fS1c = UseEnv | UseEnv; fS2c = UseShade | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8545: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8546://cent,shade,env,shade fT1 = 0x10;//0x20; fS1c = UseShade | UseEnvIv;//UseT0 | UseEnv; fS2c = UseShade | UseEnvIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8546: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8841: // t0,shade,t0a,shade fT1 = 0x20; fS1c = UseShade | UseMT0AlphaIv; fS2c = UseT0 | UseMT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8841: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8a43: // prim,shade,prima,shade fT1 = 0x20; fS1c = UsePrim | UseMPrimAlpha; fS2c = UseShade | UseMPrimAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8a43: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8c21: // t0,t1,enva shade // needs fixed fT1 = 0x20; fS1c = UseT0 | UseMEnvAlpha; fS2c = UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8c21: break; case 0xe350: // cmb,env,prim,ca fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8c45:// env,shade,enva,shade fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UseShade | UseMEnvAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8a43: break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x8e31: // t0,prim,plf,shade fT1 = 0x20; fS1c = UseT0; fS2c = UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8e31: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x9f31: fT1 = 0x10; fS1c = UseShade; fS2c = UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x8e31: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0x9ff6: // cent,k5,0,shade fT1 = 0x10; fS1c = UseShade; fS2c = UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x9ff6: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0x9fff: // k5,k5,0,shade fT1 = 0x10; fS1c = UseShade; fS2c = UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0x9fff: break; case 0x0503: // prim,cmb,env,cmb fT1 = 0x20; fS1c = UseShade | UseEnvIv; fS2c = UsePrim | UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0xa151: // t0,env,t0,env fT1 = 0x20; fS1c = UseT0; fS2c = UseEnv | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa151: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa153: // prim,env,t0,env fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa153: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa154: // shade,env,t0,env fT1 = 0x20; fS1c = UseShade | UseT0; fS2c = UseEnv | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa154: break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa156: // cent,env,t0,env fT1 = 0x10; fS1c = UseEnv | UseT0Iv; fS2c = UseEnv | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa154: break; case 0x2a10: fT1 = 0x20; fS1c = UseMPrimAlphaIv | UseT0; fS2c = UseEnv | UseMPrimAlpha | UseT0Iv; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa251: fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa251: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa253: // prim,env,t1,env fT1 = 0x20; fS1c = UsePrim | UseT1; fS2c = UseEnv | UseT1Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa253: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa351: // t0,env,prim,env fT1 = 0x20; fS1c = UseT0 | UsePrim; fS2c = UseEnv | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa351: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa353: // prim,env,prim,env fT1 = 0x20; fS1c = UsePrim; fS2c = UseEnv | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa356: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa356: // cent,env,prim,env fT1 = 0x10;//0x20; fS1c = UseEnv | UsePrimIv;//UseT0 | UsePrim; fS2c = UseEnv | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa356: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa3f4: // shad,k5,prim,env fT1 = 0x20; fS1c = UseShade | UsePrim; fS2c = UseEnv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa3f4: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa3f1: // t0,k5,prim,env fT1 = 0x20; fS1c = UseT0 | UsePrim; fS2c = UseEnv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa3f1: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa451: // t0,env,shade,env fT1 = 0x20; fS1c = UseT0 | UseShade; fS2c = UseEnv | UseShadeIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa451: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa851: // t0,env,t0a,env fT1 = 0x20; fS1c = UseT0 | UseMT0Alpha; fS2c = UseEnv | UseMT0AlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa851: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xa853: // prim,env,t0a,env fT1 = 0x20; fS1c = UsePrim | UseMT0Alpha; fS2c = UseEnv | UseMT0AlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xa853: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xab51: // t0,env,shadea,env fT1 = 0x20; fS1c = UseT0 | UseMShadeAlpha; fS2c = UseEnv | UseMShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xab51: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xab53: // prim,env,shadea,env fT1 = 0x20; fS1c = UsePrim | UseMShadeAlpha; fS2c = UseEnv | UseMShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xab53: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xae53: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xae53: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xaef1: // t0,k5,plf,env fT1 = 0x20; fS1c = UseT0; fS2c = UseEnv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xaef1: break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xbfff: fT1 = 0x10; fS1c = UseEnv; fS2c = UseEnv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xbfff: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xdfff: // fix me!!! fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xdfff: break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe132: fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe132: break; case 0x64f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe136: // cent,prim,t0,ca fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe136: break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe154: // shade,env,t0,ca // can't do correctly yet. fT1 = 0x10; fS1c = UseShade | UseT0; fS2c = UseShade | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe154: break; case 0x64f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe1f1: // t0,k5,t0,ca fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe1f1: break; case 0x64f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe1f2: // t1,k5,t0,ca fT1 = 0x10; fS1c = UseT0 | UseT1; fS2c = UseT0 | UseT1; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe1f2: break; case 0x64f0: // cm,k5,shade,prim fT1 = 0x20; fS1c |= UseShade; fS2c = UsePrim; break; case 0x8530: // cm,prim,env,shade //fT1 = 0x20; //fS1c |= UseShade; //fS2c = UsePrim; break; case 0xa3f0: // cmb,k5,prim,env fT1 = 0x20; fS1c |= UsePrim; fS2c = UseEnv; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xeaf0: fS1c |= UseMPrimAlpha; fS2c |= UseMPrimAlpha; break; default: checkup = 4; break; } } break; case 0xe1f3: // prim,k5,t0,ca fT1 = 0x10; fS1c = UsePrim | UseT0; fS2c = UsePrim | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe1f3: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe1f4: // shade,k5,t0,ca fT1 = 0x10; fS1c = UseShade | UseT0; fS2c = UseShade | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe1f4: break; case 0x0703: fT1 = 0x20; fS1c = UsePrim | UseMPrimAlpha; fS2c = UseShade | UseT0 | UseMPrimAlphaIv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe1f5: // env,k5,t0,ca fT1 = 0x10; fS1c = UseEnv | UseT0; fS2c = UseEnv | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe1f5: break; case 0x0703: fT1 = 0x20; fS1c = UsePrim | UseMPrimAlpha; fS2c = UseShade | UseT0 | UseMPrimAlphaIv; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe1f6: // cent,k5,t0,cmba fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe1f6: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe2f1: // t0,k5,t1,cmba fT1 = 0x10; fS1c = UseT1 | UseT0; fS2c = UseT1 | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe2f1: break; case 0x0703: fT1 = 0x20; fS1c = UsePrim | UseMPrimAlpha; fS2c = UseShade | UseT0 | UseMPrimAlphaIv; break; case 0x2710: fS1c = UseT0; fS2c = UseT0; break; case 0x6730: // cmb,prim,cmba,prim // needs work. break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe3f0: // cmb,k5,prim,cmba fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe3f1: // t0,k5,prim,cmba fT1 = 0x10; fS1c = UsePrim | UseT0; fS2c = UsePrim | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe3f1: break; case 0x0c05: fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UsePrim | UseT0 | UseMEnvAlphaIv; break; case 0xa053: fT1 = 0x20; fS1c = UsePrim | UseT0; fS2c = UseEnv | UseT0Iv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f4: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe3f2: //t1,k5,prim,cmba fT1 = 0x10; fS1c = UseT1 | UsePrim; fS2c = UseT1 | UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe3f2: break; case 0x64f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe3f3: // prim,k5,prim,ca fT1 = 0x10; fS1c = UsePrim; fS2c = UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe3f3: break; default: checkup = 4; break; } } break; case 0xe3f4: // shade,k5,prim,ca fT1 = 0x10; fS1c = UsePrim | UseShade; fS2c = UsePrim | UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe3f4: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe3f6: // cent,k5,prim,ca fT1 = 0x10; fS1c = UsePrim;// | UseT0; fS2c = UsePrim;// | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe3f6: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe3f7: // ca,k5,prim,ca fT1 = 0x10; fS1c = UsePrim; fS2c = UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe3f7: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe451: //t0,env,shade,ca fixme fT1 = 0x10; fS1c = UseShade | UseT0; fS2c = UseShade | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe4f1: break; case 0x0106: // cent,cmb,t0,cmb fT1 = 0x10;//0x20; fS1c = UseShade | UseT0 | UseT0Iv; fS2c = UseT0; break; case 0x04f2: // t1,0,shade,cmb fT1 = 0x20; fS1c = UseShade | UseT1; fS2c = UseT0; break; case 0x0506: // cent,cmb,env,cmb fT1 = 0x10;//0x20; fS1c = UseShade | UseT0 | UseEnvIv; fS2c = UseT0 | UseEnv; break; case 0x05f6: // cent,k5,env,cmb ???? fT1 = 0x20; fS1c = UseT0 | UseShade; fS2c = UseT0 | UseEnv; break; case 0x0b06: // cent,cmb,shadea,cmb fT1 = 0x10;//0x20; fS1c = UseShade | UseT0 | UseMShadeAlphaIv; fS2c = UseT0 | UseShadeAlpha; break; case 0x0c05: fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UseT0 | UseShade | UseMEnvAlphaIv; break; case 0x6450: //// fixme cmb, env, shade. prim fS1c = UseShade | UseT0; fS2c = UseShade | UseT0; break; case 0xa053: // prim,env,cmb,env fT1 = 0x20; fS1c = UsePrim | UseT0 | UseShade; fS2c = UseEnv | UseT0Iv | UseShadeIv; break; case 0xa3f0: // cmb,k5,prim,env fT1 = 0x20; fS1c = UsePrim | UseShade | UseT0; fS2c = UseEnv; break; case 0xac50: // cmb,env,enva,env fT1 = 0x20; fS1c = UseShade | UseT0 | UseMEnvAlpha; fS2c = UseEnv | UseMEnvAlphaIv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xecf0: // cmb,k5,enva,ca fS1c |= UseMEnvAlpha; fS2c |= UseMEnvAlpha; break; default: checkup = 4; break; } } break; case 0xe4f1: //t0,k5,shade,ca fT1 = 0x10; fS1c = UseShade | UseT0; fS2c = UseShade | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe4f1: break; case 0x0106: // cent,cmb,t0,cmb fT1 = 0x10;//0x20; fS1c = UseShade | UseT0 | UseT0Iv; fS2c = UseT0; break; case 0x04f2: // t1,0,shade,cmb fT1 = 0x20; fS1c = UseShade | UseT1; fS2c = UseT0; break; case 0x0506: // cent,cmb,env,cmb fT1 = 0x10;//0x20; fS1c = UseShade | UseT0 | UseEnvIv; fS2c = UseT0 | UseEnv; break; case 0x05f6: // cent,k5,env,cmb fT1 = 0x10;//0x20; fS1c = UseT0 | UseShade; fS2c = UseT0 | UseEnv; break; case 0x0b06: // cent,cmb,shadea,cmb fT1 = 0x10;//0x20; fS1c = UseShade | UseT0 | UseMShadeAlphaIv; fS2c = UseT0 | UseShadeAlpha; break; case 0x0c05: fT1 = 0x20; fS1c = UseEnv | UseMEnvAlpha; fS2c = UseT0 | UseShade | UseMEnvAlphaIv; break; case 0x6450: //// fixme cmb, env, shade. prim fS1c = UseShade | UseT0; fS2c = UseShade | UseT0; break; case 0xa053: // prim,env,cmb,env fT1 = 0x20; fS1c = UsePrim | UseT0 | UseShade; fS2c = UseEnv | UseT0Iv | UseShadeIv; break; case 0xa3f0: // cmb,k5,prim,env fT1 = 0x20; fS1c = UsePrim | UseShade | UseT0; fS2c = UseEnv; break; case 0xac50: // cmb,env,enva,env fT1 = 0x20; fS1c = UseShade | UseT0 | UseMEnvAlpha; fS2c = UseEnv | UseMEnvAlphaIv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xecf0: // cmb,k5,enva,ca fS1c |= UseMEnvAlpha; fS2c |= UseMEnvAlpha; break; default: checkup = 4; break; } } break; case 0xe4f3: // prim,k5,shade,ca fT1 = 0x10; fS1c = UseShade | UsePrim; fS2c = UseShade | UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe4f3: break; case 0x0205: // env,cmb,t1,cmb fT1 = 0x20; fS1c = UseT1 | UseEnv; fS2c = UsePrim | UseShade | UseT1Iv; break; case 0x0b06: // cent,cmb,shadea,cmb fT1 = 0x10; fS1c = UseShade | UsePrim | UseMShadeAlphaIv;//UseT0 | UseMShadeAlpha; fS2c = UseShade | UsePrim | UseMShadeAlphaIv; break; case 0x05f6: // cent,k5,env,cmb fT1 = 0x10;//0x20; fS1c = UsePrim | UseShade | UseEnvIv; fS2c = UseT0 | UseEnv; break; case 0x0c01: fT1 = 0x20; fS1c = UseT0 | UseMEnvAlpha; fS2c = UsePrim | UseShade | UseMEnvAlphaIv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0xe4f4: // shade,k5,shade,ca fT1 = 0x10; fS1c = UseShade;// | UseShade; fS2c = UseShade;// | UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe4f4: break; case 0x0a03: fT1 = 0x20; fS1c = UseShade | UseMPrimAlpha; fS2c = UseShade | UseMPrimAlphaIv; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; default: checkup = 4; break; } } break; case 0xe4f5: // env,k5,shade,ca fT1 = 0x10; fS1c = UseShade | UseEnv; fS2c = UseShade | UseEnv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe4f4: break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; default: checkup = 4; break; } } break; case 0xe4f6: // cent,k5,shade,ca fT1 = 0x10; fS1c = UseShadeIv;// | UseT0; fS2c = UseShadeIv;// | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe4f6: break; case 0x0a03: fT1 = 0x20; fS1c = UseShade | UseMPrimAlpha; fS2c = UseShade | UseMPrimAlphaIv; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; default: checkup = 4; break; } } break; case 0xe5f1: // t0,k5,env,ca fT1 = 0x10; fS1c = UseEnv | UseT0; fS2c = UseEnv | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe5f1: break; case 0x0c06: // cent,cmb,enva,cmb fT1 = 0x10;//0x20; fS1c = UseEnv | UseT0 | UseMEnvAlphaIv; fS2c = UseT0 | UseEnvAlpha; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe5f3: // prim,k5,env,ca fT1 = 0x10; fS1c = UseEnv | UsePrim; fS2c = UseEnv | UsePrim; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe5f3: break; case 0x0c01: fT1 = 0x20; fS1c = UseT0 | UseMEnvAlpha; fS2c = UsePrim | UseShade | UseMEnvAlphaIv; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe5f0: fS1c |= UseEnv; fS2c |= UseEnv; break; default: checkup = 4; break; } } break; case 0xe5f4: // shade,k5,env,cmba fT1 = 0x10; fS1c = UseEnv | UseShade; fS2c = UseEnv | UseShade; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe5f1: break; case 0x0c06: // cent,cmb,enva,cmb fT1 = 0x10;//0x20; fS1c = UseShade | UseEnv | UseMEnvAlphaIv; fS2c = UseT0 | UseEnvAlpha; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; default: checkup = 4; break; } } break; case 0xe5f6: // cent,k5,env,cmba fT1 = 0x10; fS1c = UseEnv;// | UseT0; fS2c = UseEnv;// | UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe5f6: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xe6f6: // cent,k5,cent,cmba ????? fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xe6f6: break; case 0xe4f0: fS1c |= UseShade; fS2c |= UseShade; break; default: checkup = 4; break; } } break; case 0xeaf1: // t0,k5,prima,ca fT1 = 0x10; fS1c = UseT0 | UseMPrimAlpha; fS2c = UseT0 | UseMPrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xeaf1: break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; default: checkup = 4; break; } } break; case 0xeaff: // k5,k5,prima,ca // don't know about this one. fT1 = 0x10; fS1c = UseMPrimAlpha; fS2c = UseMPrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xeaff: break; default: checkup = 4; break; } } break; case 0xebf1: fT1 = 0x10; //fS1c = UseShadeAlpha | UseT0; //fS2c = UseShadeAlpha | UseT0; fS1c = UseT0; fS2c = UseT0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xebf1: break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; default: checkup = 4; break; } } break; case 0xffff: fT1 = 0x10; if(tcycle1A == 0x0fff) fS1c = UseZeroAlpha; else fS1c = UsePrim; fS2c = UseZeroAlpha; //break; //fS1c = UseMT0AlphaIv | UseMPrimAlpha;//UseZeroAlpha; //fS2c = UseMT0AlphaIv | UseMPrimAlpha;//UseZeroAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2C) { case 0x1fff: case 0xffff: break; case 0x6f54: //shade,env,k5,prim fT1 = 0x20; fS1c = UsePrim; fS2c = UseShade; break; case 0xe0f3: fS1c |= UsePrim; fS2c |= UsePrim; break; case 0xe0f5: fS1c |= UseEnv; fS2c |= UseEnv; break; case 0xe3f0: fS1c |= UsePrim; fS2c |= UsePrim; break; default: checkup = 4; break; } } break; default: { checkup = 4; } } // handle alpha combine switch(tcycle1A) { case 0x0209: // t0,t0,Cmb,t0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x020a: break; case 0x01e7: // 0,shade,0,cmb break; case 0x0738: //need fixed fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x09ff: fS1a = UseShadeAlpha; fS2a = UseShadeAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f39: // t0,0,shade,0 fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x020a: // t1,t0,Cmb,t0 fS1a = UseT0Alpha;// | UseT1Alpha; fS2a = UseT0Alpha;// | UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x020a: break; case 0x01e7: // 0,shade,0,cmb break; case 0x0738: //need fixed fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x09ff: fS1a = UseShadeAlpha; fS2a = UseShadeAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f39: // t0,0,shade,0 fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0f7c: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x02bd:// env,0,t1,t0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x02bd: break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x02ca: // t1,t0,prim,t0 fS1a = UseT0Alpha;// | UsePrimAlphaIv; fS2a = UseT0Alpha;// UseT1Alpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x02ca: break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x02ce:// 1,t0,prim,t0 fS1a = UseT0AlphaIv | UsePrimAlphaIv; fS2a = UseT0AlphaIv | UsePrimAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x02ce: break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x02cf:// 0,t0,prim,t0 fS1a = UseT0Alpha | UsePrimIv; fS2a = UseT0Alpha | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x02cf: break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x030a:// t1,t0,shade,t0 // needs fixed fS1a = UseT1Alpha;// | UsePrimIv; fS2a = UseT1Alpha;// | UsePrimIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x02cf: break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x030f: // 0,T0,Shade,T0 fS1a = UseT0Alpha | UseShadeAlphaIv; fS2a = UseT0Alpha | UseShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x030f: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; default: checkup = 4; break; } } break; case 0x034a: // t1,t0,env,t0 fS1a = UseT0Alpha;// UseT0Alpha | UseEnvAlphaIv; fS2a = UseT0Alpha;// UseT1Alpha | UseEnvAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x034a: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; default: checkup = 4; break; } } break; case 0x0372: // t1,1,env,t0 // needs fixed //fT1 = 0x20; fS1a = UseT0Alpha;// UseT1Alpha * UseEnvAlpha; fS2a = UseT0Alpha;// UseT0Alpha * UseEnvAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0372: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; default: checkup = 4; break; } } break; case 0x037a: // T1,0,Env,T0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0372: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; default: checkup = 4; break; } } break; case 0x0389: // t0,t0,1(plf),t0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0389: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; default: checkup = 4; break; } } break; case 0x038a: // t1,t0,1(plf),t0 // t1 only? //fT1 = 0x20; fS1a = UseT0Alpha;// UseT1Alpha | UseT0Alpha; fS2a = UseT0Alpha;// UseT0Alpha | UseT0AlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x038a: break; case 0x0178: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0eb8: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x03a2: // T1,Shade,1,T0 // needs fixed fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x03b2: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; default: checkup = 4; break; } } break; case 0x03b2: // t1,1,1(plf),t0 fS1a = UseT0Alpha;// UseT0Alpha | UseT0AlphaIv; fS2a = UseT0Alpha;// UseT1Alpha | UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x03b2: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0ef9: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; default: checkup = 4; break; } } break; case 0x03b3: // Prim,1,1(plf),T0 // needs fixed fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x03b2: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; default: checkup = 4; break; } } break; case 0x03ba:// t1,0,1(plf),t0 // needs fixed fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x03ba: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0eb8: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; default: checkup = 4; break; } } break; case 0x03ca: // t1,t0,0,t0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x03ca: break; case 0x0eb8: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; default: checkup = 4; break; } } break; case 0x03ff: // 0,0,0,t0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x03ff: break; case 0x0af8: // cmb,0,prim,env //fS1a |= UsePrimAlpha; //fS2a |= UsePrimAlpha; break; case 0x0e3d: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0ef8: // cmb,0,prim,0 fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x04d1: // t0,t1,prim,t1 fS1a = UseT1Alpha; // UseT0Alpha; fS2a = UseT1Alpha; // UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x04d1: case 0x03ff: break; case 0x0af8: // cmb,0,prim,env fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0571: // T0,1(plf),Env,T1 // needs fixed fS1a = UseT1Alpha; fS2a = UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x05b1: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; default: checkup = 4; break; } } break; case 0x05b1: // t0,1,1,t1 fS1a = UseT1Alpha; // UseT0Alpha; fS2a = UseT1Alpha; // UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x05b1: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; default: checkup = 4; break; } } break; case 0x05ff: // 0,0,0,t1 fS1a = UseT1Alpha; fS2a = UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x05ff: break; case 0x0af8: // cmb,0,prim,env fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x065d: // env,t0,prim,t0 fS1a = UseT0AlphaIv | UsePrimAlpha; fS2a = UseT0AlphaIv | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x05ff: break; case 0x0af8: // cmb,0,prim,env fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x065f: // 0,t0,prim,t0 fS1a = UseT0AlphaIv | UsePrimAlpha; fS2a = UseT0AlphaIv | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x05ff: break; case 0x0af8: // cmb,0,prim,env fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x071a: // t1,shade,prim,shade ??? fixme // fS1a = UseShadeAlpha | UsePrimAlphaIv; // fS2a = UseShadeAlpha | UsePrimAlphaIv; // fS1a = UsePrimAlpha | UseT1Alpha; // fS2a = UsePrimAlpha | UseT1Alpha; fS1a = UseT1Alpha; fS2a = UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x071a: break; default: checkup = 4; break; } } break; case 0x071d: // env,prim,shade,prim fS1a = UseEnvAlpha; //UseShadeAlpha | UseEnvAlpha; fS2a = UseEnvAlpha; //UseShadeAlpha | UseEnvAlpha; // fS1a = UsePrim; //UseShadeAlpha | UseEnvAlpha; // fS2a = UsePrim; //UseShadeAlpha | UseEnvAlpha; // fS1a = UsePrim | UseShadeAlpha; // fS2a = UsePrim | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x071d: break; default: checkup = 4; break; } } break; case 0x0779: // t0,0,env,prim fS1a = UsePrimAlpha | UseT0Alpha; fS2a = UsePrimAlpha | UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x078e: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x078e: // 1,T0,1(plf),Prim // fixme fS1a = UsePrimAlpha | UseT0AlphaIv; fS2a = UsePrimAlpha | UseT0AlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x078e: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x07fb: // prim,0,env,0 fS1a = UsePrimAlpha | UseEnvAlpha; fS2a = UsePrimAlpha | UseEnvAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x07fb: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x07fe: // plf,0,0,prim fS1a = UsePrimAlpha; fS2a = UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x07fe: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x07ff: // 0,0,0,prim fS1a = UsePrimAlpha; fS2a = UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x07ff: break; case 0x0eb8: fS1a |= UseT1Alpha; fS2a |= UseT1Alpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0863: // prim,shade,t0,shade fS1a = UsePrimAlpha; fS2a = UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0863: break; case 0x0f78: fS1a |= UseEnvAlpha | UseT0Alpha; fS2a |= UseShadeAlpha | UseT0AlphaIv; break; default: checkup = 4; break; } } break; case 0x09ff: // 0,0,0,shade fS1a = UseShadeAlpha; fS2a = UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x09ff: break; case 0x07ff: fS1a = UsePrimAlpha; fS2a = UsePrimAlpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0f7c: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0a6b: // prim,env,t0,env fS1a = UsePrimAlpha | UseT0; fS2a = UseEnvAlpha | UseT0Iv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0a6b: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0abe: // 1,0,t1,env fS1a = UseT1Alpha; fS2a = UseEnvAlpha; fT1 = 0x20; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0a6b: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0ae9: // t0,env,prim,env // fixme fS1a = UseT0Alpha;// | UsePrimAlpha; fS2a = UseT0Alpha;// | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0ae9: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0af9: // t0,0,prim,env fS1a = UseT0Alpha | UsePrimAlpha; fS2a = UseT0Alpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0af9: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0b29: // t0,env,shade,env fS1a = UseT0Alpha;// | UseShadeAlpha; fS2a = UseT0Alpha;// | UseShadeAlpha;//UseEnvAlpha | UseShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0b29: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0b3e: // 1(plf),0,shade,env fS1a = UseEnvAlpha | UseShadeAlpha; fS2a = UseEnvAlpha | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0b3e: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0bff: // 0,0,0,env fS1a = UseEnvAlpha; fS2a = UseEnvAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0bff: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0db6: // 1,1,1,1 (plf,plf,plf,plf) fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0db6: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0df9: // t0,0,0,1(plf) fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0df9: break; case 0x0ef8: // cm.0,prim,0 fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0dff: // 0,0,0,1 fS1a = 0;//UseT0Alpha; fS2a = 0;//UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0dff: break; case 0x0ef8: // cm.0,prim,0 fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e63: // prim,shade,t0,0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e63: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e66: // shade,env,t0,0 fS1a = UseT0Alpha | UseShadeAlphaIv; fS2a = UseT0Alpha | UseShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e66: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e6c: // shade,env,t0,0 fS1a = UseT0Alpha | UseShadeAlphaIv; fS2a = UseT0Alpha | UseShadeAlphaIv; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e6c: break; case 0x00fe: // 1(plf),0,prim,cmb break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e79: // T0,0,T0,0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e79: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e7a: // t1,0,t0,0 fS1a = UseT0Alpha | UseT1Alpha; fS2a = UseT0Alpha | UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e7a: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e7b: // prim,0,t0,0 fS1a = UseT0Alpha | UsePrimAlpha; fS2a = UseT0Alpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e7b: break; case 0x01ba: break; case 0x0e38: break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e7c: //shade,0,t0,0 fS1a = UseT0Alpha | UseShadeAlpha; fS2a = UseT0Alpha | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e7c: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e7d: // env,0,t0,0 fS1a = UseT0Alpha | UseEnvAlpha; fS2a = UseT0Alpha | UseEnvAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e7d: break; case 0x01ba: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0e7e: // 1,0,t0,0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0e7e: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0eb9: // t0,0,t1,0 fS1a = UseT0Alpha | UseT1Alpha; fS2a = UseT0Alpha | UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0eb9: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0ebb: // Prim,0,T1,0 fS1a = UsePrimAlpha | UseT1Alpha; fS2a = UsePrimAlpha | UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0eb9: break; case 0x01ba: break; case 0x0dff: fS1a = 0;//UseT0Alpha; fS2a = 0;//UseT0Alpha; //fS1a |= UsePrimAlpha; //fS2a |= UsePrimAlpha; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0ebe: // 1,0,t1,0 fS1a = UseT0Alpha | UseT1Alpha; fS2a = UseT0Alpha | UseT1Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0ebe: break; case 0x01ba: break; case 0x0dff: fS1a = 0;//UseT0Alpha; fS2a = 0;//UseT0Alpha; //fS1a |= UsePrimAlpha; //fS2a |= UsePrimAlpha; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0ece: // plf,t0,prim,0 fS1a = UseT0Alpha | UsePrimAlpha; fS2a = UseT0Alpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0ebe: break; case 0x01ba: break; case 0x0dff: fS1a = 0;//UseT0Alpha; fS2a = 0;//UseT0Alpha; //fS1a |= UsePrimAlpha; //fS2a |= UsePrimAlpha; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0ee1: // t0,shade,prim,0 // needs fixed fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0ee1: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0ef9: // t0,0,prim,0 fS1a = UseT0Alpha | UsePrimAlpha; fS2a = UseT0Alpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0ef9: break; case 0x01ba: // t1,0,plf,cmb fT1 = 0x20; fS2a = UseT1Alpha | UseT0Alpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0efa: // t1,0,prim,0 fS1a = UseT1Alpha | UsePrimAlpha; fS2a = UseT1Alpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0efa: break; case 0x01ba: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0efb: // prim,0,prim,0 fS1a = UsePrimAlpha; fS2a = UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0efa: break; default: checkup = 4; break; } } break; case 0x0efc: // shade,0,prim,0 fS1a = UseShadeAlpha | UsePrimAlpha; fS2a = UseShadeAlpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0efc: break; case 0x01ba: break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0f0e: // 1,t0,shade,0 fS1a = UseT0AlphaIv | UseShadeAlpha; fS2a = UseT0AlphaIv | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f0e: break; default: checkup = 4; break; } } break; case 0x0f39: // t0,0,shade,0 fS1a = UseT0Alpha | UseShadeAlpha; fS2a = UseT0Alpha | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f39: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0f3a:// t1,0,shade,0 fS1a = UseT1Alpha | UseShadeAlpha; fS2a = UseT1Alpha | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f3a: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0f3b: fS1a = UsePrimAlpha | UseShadeAlpha; fS2a = UsePrimAlpha | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f3b: break; case 0x0085: // enva,cmba,t1a,cmba ??? fixme //fS1a |= UseT1AlphaIv; //fS2a |= UseT1AlphaIv; break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0f3d: // env,0,shade,0 fS1a = UseEnvAlpha | UseShadeAlpha; fS2a = UseEnvAlpha | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f3d: break; case 0x0085: // enva,cmba,t1a,cmba break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0f3e: // 1,0,shade,0 fS1a = UseShadeAlpha; fS2a = UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f3e: break; case 0x0085: // enva,cmba,t1a,cmba break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0f79: // t0,0,env,0 fS1a = UseT0Alpha | UseEnvAlpha; fS2a = UseT0Alpha | UseEnvAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f79: break; case 0x01ba: fT1 = 0x20l; fS2a = UseT0Alpha | UseT1Alpha; break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0f7a: // t1,0,env,0 fS1a = UseT1Alpha | UseEnvAlpha; fS2a = UseT1Alpha | UseEnvAlpha; // fS1a = UseT0 | UseEnvAlpha; // fS2a = UseT0 | UseEnvAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f7a: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0f7b: // prim,0,env,0 fS1a = UseEnvAlpha | UsePrimAlpha; fS2a = UseEnvAlpha | UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f7b: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0f7c: fS1a = UseEnvAlpha | UseShadeAlpha; fS2a = UseEnvAlpha | UseShadeAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f7c: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0f7e: // plf,0,env,0 fS1a = UseEnvAlpha; fS2a = UseEnvAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f7e: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f38: fS1a |= UseShadeAlpha; fS2a |= UseShadeAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0f9e: // ????? fS1a = UsePrimAlpha; fS2a = UsePrimAlpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0f9e: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; default: checkup = 4; break; } } break; case 0x0fb9: // t0,0,1(plf),0 fS1a = UseT0Alpha; fS2a = UseT0Alpha; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0fb9: break; case 0x01ba: break; case 0x0ef8: fS1a |= UsePrimAlpha; fS2a |= UsePrimAlpha; break; case 0x0f78: fS1a |= UseEnvAlpha; fS2a |= UseEnvAlpha; break; case 0x0fb8: fS1a |= UseT0Alpha; fS2a |= UseT0Alpha; break; default: checkup = 4; break; } } break; case 0x0fff: fS1a = 0; fS2a = 0; if (t_cycle_mode == CYCLE_MODE2) { switch(tcycle2A) { case 0x01ff: case 0x0fff: break; case 0x0dff: fS1a = 0;//UseT0Alpha; fS2a = 0;//UseT0Alpha; //fS1a |= UseT0Alpha; //fS2a |= UseT0Alpha; break; case 0x0f7a: fS1a = UseT1Alpha | UseEnvAlpha; fS2a = UseT1Alpha | UseEnvAlpha; break; default: checkup = 4; break; } } break; default: { checkup = 4; } } if (checkup != 0) { int xrt = 0; #ifdef DEBUGCC char output[1024]; if(t_cycle_mode == 0) { sprintf(output,"Mode1C = %04x\tCycleMode = %i\n" "Mode1A = %04x\n\n" "a0 = %s \tb0 = %s \tc0 = %s \td0 = %s\n\n" "Aa0 = %s \tAb0 = %s \tAc0 = %s \tAd0 = %s", cycle1C,t_cycle_mode, cycle1A, Mode[uc0_a0], Mode[uc0_b0], Mode[uc0_c0], Mode[uc0_d0], Alpha[uc0_Aa0], Alpha[uc0_Ab0], Alpha[uc0_Ac0], Alpha[uc0_Ad0]); } else { sprintf(output,"Mode1C = %04x\tMode2C = %04x\tCycleMode = %i\n" "Mode1A = %04x\tMode2A = %04x\n\n" "a0 = %s \tb0 = %s \tc0 = %s \td0 = %s\n\n" "a1 = %s \tb1 = %s \tc1 = %s \td1 = %s\n\n" "Aa0 = %s \tAb0 = %s \tAc0 = %s \tAd0 = %s\n\n" "Aa1 = %s \tAb1 = %s \tAc1 = %s \tAd1 = %s", cycle1C,cycle2C,t_cycle_mode, cycle1A,cycle2A, Mode[uc0_a0], Mode[uc0_b0], Mode[uc0_c0], Mode[uc0_d0], Mode[uc0_a1], Mode[uc0_b1], Mode[uc0_c1], Mode[uc0_d1], Alpha[uc0_Aa0], Alpha[uc0_Ab0], Alpha[uc0_Ac0], Alpha[uc0_Ad0], Alpha[uc0_Aa1], Alpha[uc0_Ab1], Alpha[uc0_Ac1], Alpha[uc0_Ad1]); } MessageBox(hGraphics, output, "DisplayCC", MB_OK); // exit(1); // rdp_reset(); #else fT1 = 0x10; fS1c = UseT0; fS2c = UseT0; fS1a = UseT0Alpha; fS2a = UseT0Alpha; #endif } Prev_fT1= fT1; Prev_fS1c = fS1c; Prev_fS2c = fS2c; Prev_fS1a = fS1a; Prev_fS2a = fS2a; } void SetFastCombine(int vn[3], _u32 t1, _u32 s1, _u32 s2) { if ((s1 & UseZeroAlpha) == UseZeroAlpha) return; // Hack!! MDrawVisualTriangle(vn,t1,s1,s2); } void NewDrawVisualTriangle(int vn[3]) //void DrawVisualTriangle(int vn[3]) { int pass; for (pass = 0; pass < CombinePasses; pass++) { TexColor = CombineArray[pass].TexColor;// this is wrong, fix it! TexMode = CombineArray[pass].TexMode; MDrawVisualTriangle(vn,CombineArray[pass].t1,CombineArray[pass].s1,CombineArray[pass].s2); } } //void OldDrawVisualTriangle(int vn[3]) void DrawVisualTriangle(int vn[3]) { Vtidx[Vtcnt] = vn[0]; Vtcnt++; Vtidx[Vtcnt] = vn[1]; Vtcnt++; Vtidx[Vtcnt] = vn[2]; Vtcnt++; } //void OldDrawVisualTriangle(int vn[3]) void DrawVisualTriangle6(int vn[3],float Sc[3],float Tc[3]) { VtSc[Vtcnt] = Sc[0]; VtTc[Vtcnt] = Tc[0]; Vtidx[Vtcnt] = vn[0]; Vtcnt++; VtSc[Vtcnt] = Sc[1]; VtTc[Vtcnt] = Tc[1]; Vtidx[Vtcnt] = vn[1]; Vtcnt++; VtSc[Vtcnt] = Sc[2]; VtTc[Vtcnt] = Tc[2]; Vtidx[Vtcnt] = vn[2]; Vtcnt++; } extern int ucode_version; void FlushVisualTriangle(int vn[]) { TexColor = 0; TexMode = 0; fT1 = 0; fS1c = 0; fS2c = 0; fS1a = 0; fS2a = 0; // handle color combine if ((cycle_mode == CYCLE_MODE1) || (cycle_mode == CYCLE_MODE2)) { BuildCombine(cycle_mode); if (checkup == 0) SetFastCombine(vn,fT1,fS1c | fS1a,fS2c | fS2a); } else if(cycle_mode == CYCLE_COPY) { checkup = 2; SetFastCombine(vn,0x10,UseT0 | UseT0Alpha,0); } else if(cycle_mode == CYCLE_FILL) { // checkup = 3; BuildCombine(cycle_mode & 1); if (checkup == 0) SetFastCombine(vn,fT1,fS1c | fS1a,fS2c | fS2a); } // else if(cycle_mode) // { // MDrawVisualTriangle(vn,0x10,UseShade,0); // } // // if (checkup != 0) // { // MDrawVisualTriangle(vn,0x10,UseShade,0); // } } //#undef DEBUGCC