/*************************************************************************************** * FUNCTION: set the fixed color associated with each backend plane * PARAMS: OvlUnit - CPCB OVL unit number(OVL0, OVL1, OVL2) * plane - plane number * Color - plane fix color value * RETURN: 1 - succeed * others - failed to load CPCB OVL values to BCM buffer ***************************************************************************************/ int VPP_OVL_SetPlaneColor(THINVPP_OBJ *vpp_obj, int OvlUnit, int Plane, unsigned int Color) { unsigned int RegAddr, RegAddr1; unsigned int Byte; CHECK_OVL_NUM(OvlUnit); switch(Plane) { case Vpp_OVL_PLANE0: if(VPP_CPCB_OVL0 == OvlUnit) { RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX_0 << 2); RegAddr1 = vpp_obj->base_addr + (CPCB0_OO_FIX0_0 << 2); } else if(VPP_CPCB_OVL1 == OvlUnit) { RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX_0 << 2); RegAddr1 = vpp_obj->base_addr + (CPCB1_OO_FIX0_0 << 2); } else { #if (BERLIN_CHIP_VERSION >= BERLIN_B_0) return (MV_THINVPP_EBADPARAM); #else RegAddr = vpp_obj->base_addr + (CPCB2_OO_FIX_0 << 2); RegAddr1 = vpp_obj->base_addr + (CPCB2_OO_FIX0_0 << 2); #endif } /*set FIX and FIX0 register for base plane*/ /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr, Byte); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr1 , Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4 , Byte); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr1 + 4 , Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8 , Byte); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr1 + 8 , Byte); break; case Vpp_OVL_PLANE1: if(VPP_CPCB_OVL0 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX1_0 << 2); else if(VPP_CPCB_OVL1 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX1_0 << 2); else #if (BERLIN_CHIP_VERSION >= BERLIN_B_0) return (MV_THINVPP_EBADPARAM); #else RegAddr = vpp_obj->base_addr + (CPCB2_OO_FIX1_0 << 2); #endif /*set FIX1 register for main*/ /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr , Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4 , Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8 , Byte); break; case Vpp_OVL_PLANE2: if(VPP_CPCB_OVL0 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX2_0 << 2); else if(VPP_CPCB_OVL1 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX2_0 << 2); else #if (BERLIN_CHIP_VERSION >= BERLIN_B_0) return (MV_THINVPP_EBADPARAM); #else RegAddr = vpp_obj->base_addr + (CPCB2_OO_FIX2_0 << 2); #endif /*set FIX2 register for PIP*/ /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr , Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4 , Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8 , Byte); break; case Vpp_OVL_PLANE3: if(VPP_CPCB_OVL0 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX3_0 << 2); else if(VPP_CPCB_OVL1 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX3_0 << 2); else return (MV_THINVPP_EBADPARAM); /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr , Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4 , Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8 , Byte); break; case Vpp_OVL_PLANE3A: if(VPP_CPCB_OVL0 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX3A_0 << 2); else if(VPP_CPCB_OVL1 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX3A_0 << 2); else return (MV_THINVPP_EBADPARAM); /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr, Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4, Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8, Byte); break; #if (BERLIN_CHIP_VERSION >= BERLIN_B_0) case Vpp_OVL_PLANE3B: if(VPP_CPCB_OVL0 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX3B_0 << 2); else if(VPP_CPCB_OVL1 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX3B_0 << 2); else return (MV_THINVPP_EBADPARAM); /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr, Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4, Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8, Byte); break; case Vpp_OVL_PLANE3C: if(VPP_CPCB_OVL0 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX3C_0 << 2); else if(VPP_CPCB_OVL1 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX3C_0 << 2); else return (MV_THINVPP_EBADPARAM); /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr, Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4, Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8, Byte); break; case Vpp_OVL_PLANE3D: if(VPP_CPCB_OVL0 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB0_OO_FIX3D_0 << 2); else if(VPP_CPCB_OVL1 == OvlUnit) RegAddr = vpp_obj->base_addr + (CPCB1_OO_FIX3D_0 << 2); else return (MV_THINVPP_EBADPARAM); /*write the first byte*/ Byte = GET_LOWEST_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr , Byte); /*write the second byte*/ Byte = GET_SECOND_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 4, Byte); /*write the third byte*/ Byte = GET_THIRD_BYTE(Color); THINVPP_BCMBUF_Write(vpp_obj->pVbiBcmBuf, RegAddr + 8, Byte); break; #endif default: return MV_THINVPP_EBADPARAM; } return (MV_THINVPP_OK); }
void CODE10(char COM) { static char RR; static int R1,R2; static long *RR1; static long *RR2; static long *REZ; RR=GET_SECOND_BYTE(); R1=(RR&0xf0)>>4; R2=(RR&0x0f); FORW_PSW(); switch(COM) { case 0x10:RR1=&R[R1];RR2=&R[R2]; *(RR1)=abs(*RR2); SET_CC_BY_SIGN(*RR1); break; case 0x11:RR1=&R[R1];RR2=&R[R2]; *(RR1)=-abs(*RR2); SET_CC_BY_SIGN(*RR1); break; case 0x12:R[R1]=R[R2]; RR1=&R[R1]; SET_CC_BY_SIGN(*RR1); break; case 0x13:RR1=&R[R1];RR2=&R[R2]; *(RR1)-=*RR2; SET_CC_BY_SIGN(*RR1); break; case 0x14:RR1=&R[R1];RR2=&R[R2]; /* !!!!!!!! */ *(RR1)=*(RR1)&*RR2; if (*(RR1)==0) PSW_CC=0; else PSW_CC=1; break; case 0x15:RR1=&R[R1];RR2=&R[R2]; /* !!!!!!!!*/ *(REZ)=*(RR1)-*(RR2); SET_CC_BY_SIGN(*REZ); break; case 0x16:RR1=&R[R1];RR2=&R[R2]; /* !!!!!!!!*/ *(RR1)=*(RR1)|*RR2; if (*(RR1)==0) PSW_CC=0; else PSW_CC=1; break; case 0x17:RR1=&R[R1];RR2=&R[R2]; /* !!!!!!!!*/ *(RR1)=*(RR1)^*RR2; if (*(RR1)==0) PSW_CC=0; else PSW_CC=1; break; case 0x18:*(R+R1)=*(R+R2); break; case 0x19: break; case 0x1a:RR1=&R[R1];RR2=&R[R2]; *(RR1)+=*RR2; SET_CC_BY_SIGN(*RR1); break; case 0x1b:RR1=&R[R1];RR2=&R[R2]; *(RR1)-=*RR2; SET_CC_BY_SIGN(*RR1); break; case 0x1c:RR1=&R[R1];RR2=&R[R2]; *(RR1)*=*RR2; SET_CC_BY_SIGN(*RR1); break; case 0x1d:RR1=&R[R1];RR2=&R[R2]; *(RR1)/=*RR2; SET_CC_BY_SIGN(*RR1); break; case 0x1e:RR1=&R[R1];RR2=&R[R2]; /* !!!!!!!! for cods*/ *(RR1)=*(RR1)&*RR2; break; case 0x1f:RR1=&R[R1];RR2=&R[R2]; /* !!!!!!!! */ *(RR1)=*(RR1)&*RR2; break; } }