/***************************************************************************************
 * 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);
}
Exemple #2
0
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;
   }
}