📄 mcrvsn.c
字号:
/********************************************************************************************//* mcrvsn.c : TvEncoder macrovision code* REALmagic Quasar Hardware Library* Created by Aurelia Popa-Radu* Copyright Sigma Designs Inc* Sigma Designs Proprietary and confidential* Created on 6/28/01* Description:/********************************************************************************************/#include "pch.h"#include "ci2c.h"#include "ctvenc.h"#include "regs840x.h"void CSigmaTv__StartAccessReg(ITvEncoder* pITvEncoder);void CSigmaTv__EndAccessReg(ITvEncoder* pITvEncoder);//////////////////////////////////////////////////////////////////////////////#include "tvtable.h"// macrovision related tables for EM84xx// N22 is one bit coefficient. It is 1 for macrovision tests// N22 enables the RGB macrovision. It should be 0 for any DVD macrovision.WORD SigmaTvPalMacrovisionOn[] = { 0x0036, // N22N0 0x1F33 0x221A, // N2N1 0x1F34 0x222A, // N4N3 0x1F35 0x0205, // N6N5 0x1F36 0x1C00, // N8N7 0x1F37 0x143D, // N10N9 0x1F38 0x03FE, // N11 0x1F39 0x0154, // N12 0x1F3A 0x7EFE, // N14N13 0x1F3B 0x0060, // N16N15 0x1F3C 0x0008, // N18N17 0x1F3D 0x0704, // N20N19 0x1F3E 0x0155 // N21 0x1F3F};WORD SigmaTvNtscMacrovision3[] = { 0x003E, // N22N0 0x1F33 0x1517, // N2N1 0x1F34 0x1521, // N4N3 0x1F35 0x0505, // N6N5 0x1F36 0x1B02, // N8N7 0x1F37 0x241B, // N10N9 0x1F38 0x07F8, // N11 0x1F39 0x0000, // N12 0x1F3A 0x0F0F, // N14N13 0x1F3B 0x0160, // N16N15 0x1F3C 0x000A, // N18N17 0x1F3D 0x0405, // N20N19 0x1F3E 0x03FF // N21 0x1F3F};WORD SigmaTvNtscMacrovision2[] = { 0x003E, // N22N0 0x1F33 0x111D, // N2N1 0x1F34 0x1125, // N4N3 0x1F35 0x0701, // N6N5 0x1F36 0x1B00, // N8N7 0x1F37 0x241B, // N10N9 0x1F38 0x07F8, // N11 0x1F39 0x0000, // N12 0x1F3A 0x0F0F, // N14N13 0x1F3B 0x0160, // N16N15 0x1F3C 0x000A, // N18N17 0x1F3D 0x0405, // N20N19 0x1F3E 0x03FF // N21 0x1F3F};WORD SigmaTvNtscMacrovision1[] = { 0x0036, // N22N0 0x1F33 0x0000, // N2N1 0x1F34 0x0000, // N4N3 0x1F35 0x0000, // N6N5 0x1F36 0x1B00, // N8N7 0x1F37 0x241B, // N10N9 0x1F38 0x07F8, // N11 0x1F39 0x0000, // N12 0x1F3A 0x0F0F, // N14N13 0x1F3B 0x0060, // N16N15 0x1F3C 0x0000, // N18N17 0x1F3D 0x0000, // N20N19 0x1F3E 0x0000 // N21 0x1F3F};WORD SigmaTvMacrovisionOff[] = { 0x0000, // N22N0 0x1F33 0x0000, // N2N1 0x1F34 0x0000, // N4N3 0x1F35 0x0000, // N6N5 0x1F36 0x0000, // N8N7 0x1F37 0x0000, // N10N9 0x1F38 0x0000, // N11 0x1F39 0x0000, // N12 0x1F3A 0x0000, // N14N13 0x1F3B 0x0000, // N16N15 0x1F3C 0x0000, // N18N17 0x1F3D 0x0000, // N20N19 0x1F3E 0x0000 // N21 0x1F3F};WORD SigmaTv480PMacrovisionOn[] = { 0x0024, // N22N0 0x1F33 0x0000, // N2N1 0x1F34 0x0000, // N4N3 0x1F35 0x0000, // N6N5 0x1F36 0x0300, // N8N7 0x1F37 0x0003, // N10N9 0x1F38 0x07F8, // N11 0x1F39 0x07F8, // N12 0x1F3A 0x0F00, // N14N13 0x1F3B 0x0000, // N16N15 0x1F3C 0x0000, // N18N17 0x1F3D 0x0000, // N20N19 0x1F3E 0x0000 // N21 0x1F3F};// line 6 cannot have the pulses with our design. We only // get them on lines 7-13.WORD SigmaTv576PMacrovisionOn[] = { 0x0024, // N22N0 0x1F33 0x0000, // N2N1 0x1F34 0x0000, // N4N3 0x1F35 0x0000, // N6N5 0x1F36 0x0700, // N8N7 0x1F37 0x0403, // N10N9 0x1F38 0x007F, // N11 0x1F39 0x007F, // N12 0x1F3A 0x0F00, // N14N13 0x1F3B 0x0000, // N16N15 0x1F3C 0x0000, // N18N17 0x1F3D 0x0000, // N20N19 0x1F3E 0x0000 // N21 0x1F3F};////////////////////////////////////////////////////////////////////////////// macrovision related tables for AD717xBYTE MacroVision11[] = { // AD7175A AD7170 0x40, // 0x12= 18 - 0xfe, // 0x13= 19 0x1E= 30 macrovision register 0x45, // 0x14= 20 0x1F= 31 macrovision register 0x85, // 0x15= 21 0x20= 32 macrovision register 0x54, // 0x16= 22 0x21= 33 macrovision register 0xeb, // 0x17= 23 0x22= 35 macrovision register 0xb6, // 0x18= 24 0x23= 36 macrovision register 0x91, // 0x19= 25 0x24= 37 macrovision register 0xf8, // 0x1a= 26 0x25= 38 macrovision register 0x07, // 0x1b= 27 0x26= 39 macrovision register 0x00, // 0x1c= 28 0x27= 40 macrovision register 0xc0, // 0x1d= 29 0x28= 41 macrovision register 0xc3, // 0x1e= 30 0x29= 42 macrovision register 0x03, // 0x1f= 31 0x2a= 43 macrovision register 0x58, // 0x20= 32 0x2b= 44 macrovision register 0x85, // 0x21= 33 0x2c= 45 macrovision register 0xca, // 0x22= 34 0x2d= 46 macrovision register 0xff, // 0x23= 35 0x2e= 47 macrovision register 0x00 // - 0x2f= 48 macrovision register};BYTE MacroVision10[] = { // AD7175A AD7170 0x40, // 0x12= 18 - 0x7e, // 0x13= 19 0x1E= 30 macrovision register 0x07, // 0x14= 20 macrovision register 0x95, // 0x15= 21 macrovision register 0x50, // 0x16= 22 macrovision register 0xce, // 0x17= 23 macrovision register 0xb6, // 0x18= 24 macrovision register 0x91, // 0x19= 25 macrovision register 0xf8, // 0x1a= 26 macrovision register 0x07, // 0x1b= 27 macrovision register 0x00, // 0x1c= 28 macrovision register 0xc0, // 0x1d= 29 macrovision register 0xc3, // 0x1e= 30 macrovision register 0x03, // 0x1f= 31 macrovision register 0x58, // 0x20= 32 macrovision register 0x85, // 0x21= 33 macrovision register 0xca, // 0x22= 34 macrovision register 0xff, // 0x23= 35 macrovision register 0x00 // - 0x2f= 48 macrovision register};BYTE MacroVision01[] = { // AD7175A AD7170 0x40, // 0x12= 18 - 0x76, // 0x13= 19 0x1E= 30 macrovision register 0x07, // 0x14= 20 macrovision register 0x95, // 0x15= 21 macrovision register 0x50, // 0x16= 22 macrovision register 0xce, // 0x17= 23 macrovision register 0xb6, // 0x18= 24 macrovision register 0x91, // 0x19= 25 macrovision register 0xf8, // 0x1a= 26 macrovision register 0x07, // 0x1b= 27 macrovision register 0x00, // 0x1c= 28 macrovision register 0xc0, // 0x1d= 29 macrovision register 0xc3, // 0x1e= 30 macrovision register 0x03, // 0x1f= 31 macrovision register 0x58, // 0x20= 32 macrovision register 0x85, // 0x21= 33 macrovision register 0xca, // 0x22= 34 macrovision register 0xff, // 0x23= 35 macrovision register 0x00 // - 0x2f= 48 macrovision register};BYTE PalMacrovisionOff[] ={ // AD7175A AD7170 0x40, // 0x12= 18 - 0x80, // 0x13= 19 0x1E= 30 macrovision register 0x16, // 0x14= 20 macrovision register 0xaa, // 0x15= 21 macrovision register 0x61, // 0x16= 22 macrovision register 0x05, // 0x17= 23 macrovision register 0xd7, // 0x18= 24 macrovision register 0x53, // 0x19= 25 macrovision register 0xfe, // 0x1a= 26 macrovision register 0x03, // 0x1b= 27 macrovision register 0xaa, // 0x1c= 28 macrovision register 0x80, // 0x1d= 29 macrovision register 0xbf, // 0x1e= 30 macrovision register 0x1f, // 0x1f= 31 macrovision register 0x18, // 0x20= 32 macrovision register 0x04, // 0x21= 33 macrovision register 0x7a, // 0x22= 34 macrovision register 0x55, // 0x23= 35 macrovision register 0x00 // - 0x2f= 48 macrovision register};BYTE PalMacrovisionOn[] ={ // AD7175A AD7170 0x40, // 0x12= 18 - 0xb6, // 0x13= 19 0x1E= 30 macrovision register 0x16, // 0x14= 20 macrovision register 0xaa, // 0x15= 21 macrovision register 0x61, // 0x16= 22 macrovision register 0x05, // 0x17= 23 macrovision register 0xd7, // 0x18= 24 macrovision register 0x53, // 0x19= 25 macrovision register 0xfe, // 0x1a= 26 macrovision register 0x03, // 0x1b= 27 macrovision register 0xaa, // 0x1c= 28 macrovision register 0x80, // 0x1d= 29 macrovision register 0xbf, // 0x1e= 30 macrovision register 0x1f, // 0x1f= 31 macrovision register 0x18, // 0x20= 32 macrovision register 0x04, // 0x21= 33 macrovision register 0x7a, // 0x22= 34 macrovision register 0x55, // 0x23= 35 macrovision register 0x00 // - 0x2f= 48 macrovision register};BYTE DisMacroVision[18]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};BYTE Pal60MacroVision11[] = {// Ntsc: N0=0x3F N13=0x0F N14=0x0F// Pal60: N0=0x36 N13=0x1E N14=0x1E // AD7175A AD7170 0x40, // 0x12= 18 - 0xf6,//0xfe, // 0x13= 19 0x1E= 30 macrovision register 0x45, // 0x14= 20 0x1F= 31 macrovision register 0x85, // 0x15= 21 0x20= 32 macrovision register 0x54, // 0x16= 22 0x21= 33 macrovision register 0xeb, // 0x17= 23 0x22= 35 macrovision register 0xb6, // 0x18= 24 0x23= 36 macrovision register 0x91, // 0x19= 25 0x24= 37 macrovision register 0xf8, // 0x1a= 26 0x25= 38 macrovision register 0x07, // 0x1b= 27 0x26= 39 macrovision register 0x00, // 0x1c= 28 0x27= 40 macrovision register 0x80,//0xc0, // 0x1d= 29 0x28= 41 macrovision register 0x87,//0xc3, // 0x1e= 30 0x29= 42 macrovision register 0x07,//0x03, // 0x1f= 31 0x2a= 43 macrovision register 0x58, // 0x20= 32 0x2b= 44 macrovision register 0x85, // 0x21= 33 0x2c= 45 macrovision register 0xca, // 0x22= 34 0x2d= 46 macrovision register 0xff, // 0x23= 35 0x2e= 47 macrovision register 0x00 // - 0x2f= 48 macrovision register};BYTE Pal60MacroVision10[] = {// Ntsc: N0=0x3F N13=0x0F N14=0x0F// Pal60: N0=0x36 N13=0x1E N14=0x1E // AD7175A AD7170 0x40, // 0x12= 18 - 0x76,//0x7e, // 0x13= 19 0x1E= 30 macrovision register 0x07, // 0x14= 20 macrovision register 0x95, // 0x15= 21 macrovision register 0x50, // 0x16= 22 macrovision register 0xce, // 0x17= 23 macrovision register 0xb6, // 0x18= 24 macrovision register 0x91, // 0x19= 25 macrovision register 0xf8, // 0x1a= 26 macrovision register 0x07, // 0x1b= 27 macrovision register 0x00, // 0x1c= 28 macrovision register 0x80,//0xc0, // 0x1d= 29 0x28= 41 macrovision register 0x87,//0xc3, // 0x1e= 30 0x29= 42 macrovision register 0x07,//0x03, // 0x1f= 31 0x2a= 43 macrovision register 0x58, // 0x20= 32 macrovision register 0x85, // 0x21= 33 macrovision register 0xca, // 0x22= 34 macrovision register 0xff, // 0x23= 35 macrovision register 0x00 // - 0x2f= 48 macrovision register};BYTE Pal60MacroVision01[] = {// Ntsc: N0=0x3F N13=0x0F N14=0x0F// Pal60: N0=0x36 N13=0x1E N14=0x1E // AD7175A AD7170 0x40, // 0x12= 18 - 0x76, // 0x13= 19 0x1E= 30 macrovision register 0x07, // 0x14= 20 macrovision register 0x95, // 0x15= 21 macrovision register 0x50, // 0x16= 22 macrovision register 0xce, // 0x17= 23 macrovision register 0xb6, // 0x18= 24 macrovision register 0x91, // 0x19= 25 macrovision register 0xf8, // 0x1a= 26 macrovision register 0x07, // 0x1b= 27 macrovision register 0x00, // 0x1c= 28 macrovision register 0x80,//0xc0, // 0x1d= 29 0x28= 41 macrovision register 0x87,//0xc3, // 0x1e= 30 0x29= 42 macrovision register 0x07,//0x03, // 0x1f= 31 0x2a= 43 macrovision register 0x58, // 0x20= 32 macrovision register 0x85, // 0x21= 33 macrovision register 0xca, // 0x22= 34 macrovision register 0xff, // 0x23= 35 macrovision register 0x00 // - 0x2f= 48 macrovision register};// end of tvtable.h////////////////////////////////////////////////////////////////////////////#define SIGMATV_MACROVISION 0x8000void CSigmaTv__StartAccessMacrovision(ITvEncoder* pITvEncoder){ CTvEncoder *this = (CTvEncoder*) pITvEncoder; CommonSymbolTable* pQ = (CommonSymbolTable*)this->pQ; IDecoder_WriteDM(this->m_pIDecoder, pQ->TVEncReg_Access.addr, SIGMATV_MACROVISION | 2); OSTimeDelay(5); if(IDecoder_ReadDM(this->m_pIDecoder, pQ->TVEncReg_Access.addr) != (SIGMATV_MACROVISION | 2) ) { QDbgLog((QLOG_TRACE, QDebugLevelError, TEXT("TVEncReg_Access TIMEOUT %x!"), IDecoder_ReadDM(this->m_pIDecoder, pQ->TVEncReg_Access.addr) )); } ITvEncoder_Write( pITvEncoder, SIGMATV_CONFIG, SIGMATV_MACROVISION );}void CSigmaTv__EndAccessMacrovision(ITvEncoder* pITvEncoder){ CTvEncoder *this = (CTvEncoder*) pITvEncoder; CommonSymbolTable* pQ = (CommonSymbolTable*)this->pQ; ITvEncoder_Write( pITvEncoder, SIGMATV_CONFIG, this->SigmaTvRegs[0] ); IDecoder_WriteDM(this->m_pIDecoder, pQ->TVEncReg_Access.addr, 0);}void CSigmaTv__ReadMacrovision( ITvEncoder* pITvEncoder, WORD* pN ){ // CTvEncoder *this = (CTvEncoder*) pITvEncoder; CSigmaTv__StartAccessMacrovision(pITvEncoder); *(pN + 0) = LOBYTE(ITvEncoder_Read(pITvEncoder, 0x1F33)); *(pN + 1) = LOBYTE(ITvEncoder_Read(pITvEncoder, 0x1F34)); *(pN + 2) = HIBYTE(ITvEncoder_Read(pITvEncoder, 0x1F34)); *(pN + 3) = LOBYTE(ITvEncoder_Read(pITvEncoder, 0x1F35)); *(pN + 4) = HIBYTE(ITvEncoder_Read(pITvEncoder, 0x1F35)); *(pN + 5) = LOBYTE(ITvEncoder_Read(pITvEncoder, 0x1F36)); *(pN + 6) = HIBYTE(ITvEncoder_Read(pITvEncoder, 0x1F36)); *(pN + 7) = LOBYTE(ITvEncoder_Read(pITvEncoder, 0x1F37)); *(pN + 8) = (HIBYTE(ITvEncoder_Read(pITvEncoder, 0x1F37))>>3) & 7; *(pN + 8+1) = HIBYTE(ITvEncoder_Read(pITvEncoder, 0x1F37)) & 7; *(pN + 9+1) = (LOBYTE(ITvEncoder_Read(pITvEncoder, 0x1F38))>>3) & 7; *(pN + 9+2) = LOBYTE(ITvEncoder_Read(pITvEncoder, 0x1F38)) & 7; *(pN + 10+2) = (HIBYTE(ITvEncoder_Read(pITvEncoder, 0x1F38))>>3) & 7; *(pN + 10+3) = HIBYTE(ITvEncoder_Read(pITvEncoder, 0x1F38)) & 7;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -