📄 l2_lcdtv.c
字号:
else if(index==4){
XBYTE[0x2D43] = r/8; // set R
XBYTE[0x2D44] = g/8; // set G
XBYTE[0x2D45] = b/8; // set B
}
else if(index==5){
XBYTE[0x2D46] = r/8; // set R
XBYTE[0x2D47] = g/8; // set G
XBYTE[0x2D48] = b/8; // set B
}
else if(index==6){
XBYTE[0x2D49] = r/8; // set R
XBYTE[0x2D4A] = g/8; // set G
XBYTE[0x2D4B] = b/8; // set B
}
else if(index==7){
XBYTE[0x2D4C] = r/8; // set R
XBYTE[0x2D4D] = g/8; // set G
XBYTE[0x2D4E] = b/8; // set B
}
else{
XBYTE[0x2D4F] = r/8; // set R
XBYTE[0x2D50] = g/8; // set G
XBYTE[0x2D51] = b/8; // set B
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_SetFOSDIndex
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetFOSDIndex(UCHAR y, UCHAR x, USHORT value)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(x>24 || y>9 || value >511)
LCD_state = 1;
else{
if(value>255){
XBYTE[0x2D2C] = 0x03; // turn on buffer enable
}
else{
XBYTE[0x2D2C] = 0x02; // turn on buffer enable
}
XBYTE[0x2D2D] = (25*y) + x; // set buffer address
XBYTE[0x2D2E] = value; // set the index
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_SetFOSDAttr
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetFOSDAttr(UCHAR y, UCHAR x, UCHAR attr)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(x>24 || y>9 || attr>63)
LCD_state = 1;
else{
XBYTE[0x2D2C] = 4; // turn on buffer enable
XBYTE[0x2D2D] = (25*y) + x; // set buffer address
XBYTE[0x2D2E] = attr; // set the attribute
}
MemStretch = tmp;
return 0;
}
//-----------------------------------------------------------------------------
//L2_SetFOSDOffset
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetFOSDOffset(UCHAR x, UCHAR y, UCHAR scrll)
{
USHORT osdhofst;
UCHAR LCD_state = 0;
USHORT tmp;
//patch4.3@yichang@0611 for version B/C chip co-exist
UCHAR tmp1;
//patch4.3@yichang@0611 for version B/C chip co-exist
tmp1 = MemStretch;
MemStretch = 0x01;
tmp = XBYTE[0x2D21];
osdhofst = ((XBYTE[0x2D08]+(XBYTE[0x2D09]<<8)-XBYTE[0x2D07])*tmp/64)+x;
// printf("osdhofst = %x \n",osdhofst);
if(x>24 || y>9)
LCD_state = 1;
else{
XBYTE[0x2D31] = scrll; // set the scrolling vector
XBYTE[0x2D33] = y; // set vertical offset
XBYTE[0x2D34] = (osdhofst%256); // set horizontal offset
}
//patch4.3@yichang@0611 for version B/C chip co-exist
MemStretch = tmp1;
return 0;
}
//-----------------------------------------------------------------------------
//L2_SetFOSDBGMixlevel
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetFOSDBGMixlevel(UCHAR level)
{
UCHAR regdata;
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(level>7)
LCD_state = 1;
else{
regdata = XBYTE[0x2D35]; // read original value
XBYTE[0x2D35] = (level*4)+(regdata&0x03); // set the new blending level
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_SetOSDSelWindow
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetOSDSelWindow(USHORT x0, USHORT y0, USHORT x1, USHORT y1, UCHAR color)
{
UCHAR LCD_state = 0;
USHORT voffset, hoffset;
USHORT tmp;
//patch4.3@yichang@0611 for version B/C chip co-exist
UCHAR tmp1;
tmp1 = MemStretch;
MemStretch = 0x01;
//printf("(%d,%d),(%d,%d),%bd\n",x0,y0,x1,y1,color);
tmp = XBYTE[0x2D20];
hoffset = ((XBYTE[0x2D08]+(XBYTE[0x2D09]<<8)-2))*tmp/64;
voffset = XBYTE[0x2D0a] + (XBYTE[0x2D0b]<<8);
XBYTE[0x2D10] = (x0+hoffset)%256; // selwx0
XBYTE[0x2D11] = (x0+hoffset)/256; // selwx0
XBYTE[0x2D12] = (y0+voffset)%256; // selwy0
XBYTE[0x2D13] = (y0+voffset)/256; // selwy0
XBYTE[0x2D14] = (x1+hoffset)%256; // selwx1
XBYTE[0x2D15] = (x1+hoffset)/256; // selwx1
XBYTE[0x2D16] = (y1+voffset)%256; // selwy1
XBYTE[0x2D17] = (y1+voffset)/256; // selwy1
// printf("2d08 = %bx 2d09 = %bx \n",XBYTE[0x2D08],XBYTE[0x2D09]);
// printf("2d20 = %bx hoffset= %x voffset = %x \n",XBYTE[0x2D20],hoffset,voffset);
if(color<8){
XBYTE[0x2D18] = 0x84 + (color*16); // set select window color
}
else if(color==8){
XBYTE[0x2D18] = 0x00; // turn off select window
}
else if(color==9){ // set select window size
XBYTE[0x2D18] = 0x8f; // set select window color
}
else if(color==10){ // set select window size
XBYTE[0x2D18] = 0x8e; // set select window color
}
else{
LCD_state = 1;
}
//patch4.3@yichang@0611 for version B/C chip co-exist
MemStretch = tmp1;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_SetLCDTVGamma
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetLCDTVGamma(UCHAR* table)
{
UCHAR i;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
for(i=0;i<16;i++)
XBYTE[0x2D60+i] = table[i];
MemStretch = tmp;
return 0;
}
//-----------------------------------------------------------------------------
//L2_TurnOnTVGamma
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_TurnOnTVGamma(UCHAR mode)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(mode==0){
XBYTE[0x2D2B] = XBYTE[0x2D2B] & 0xFE; // turn off Gamma
}
else if(mode==1){
XBYTE[0x2D2B] = XBYTE[0x2D2B] | 0x01; // turn on Gamma
}
else{
LCD_state = 1;
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_DefineColorKey
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_DefineColorKey(UCHAR attrib)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(attrib==0){
XBYTE[0x2D2F] = 0x00; // turn off color key function
}
else{
XBYTE[0x2D2F] = attrib | 0x80; // set the color key threshold
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_CtrlScreen
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_CtrlScreen(UCHAR attrib)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
// //printf("L2_CtrlScreen Enter \n");
if(attrib==0){ // normal display
XBYTE[0x2D30] = 0x00;
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
}
else if(attrib==1){ // turn on FOSD
XBYTE[0x2D30] = 0x02;
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
}
else if(attrib==2){ // show BG color
XBYTE[0x2D30] = 0x01;
XBYTE[0x2D01] = XBYTE[0x2D01] & 0x0f;
}
else if(attrib==3){ // no image
XBYTE[0x2D01] = XBYTE[0x2D01] & 0x0f;
}
else{
LCD_state = 1;
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_ShowFOSDEffect
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_ShowFOSDEffect(UCHAR attrib, UCHAR color)
{
UCHAR i, j;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
for(j=0;j<10;j++)
for(i=0;i<25;i++)
{
L2_SetFOSDIndex(j, i, j*32+i);
L2_SetFOSDAttr(j, i, attrib*16+8+color);
}
XBYTE[0x2D30] = 0x02;
MemStretch = tmp;
return 0;
}
//-----------------------------------------------------------------------------
//L2_SetDisplayOffset
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetDisplayOffset(USHORT xoff, USHORT yoff)
{
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
XBYTE[0x2D1B] = (UCHAR)yoff;
XBYTE[0x2D1C] = (UCHAR)(yoff>>8);
XBYTE[0x2D1D] = (UCHAR)xoff;
XBYTE[0x2D1E] = (UCHAR)(xoff>>8);
MemStretch = tmp;
return 0;
}
//-----------------------------------------------------------------------------
// L2_TestTVSRAM
//-----------------------------------------------------------------------------
// return value
// 0: success
// 1: SRAM256x9 low byte error
// 2: SRAM256x9 high byte error
// 3: SRAM256x6 error
#ifdef TestModeEn
UCHAR L2_TestTVSRAM(UCHAR bank)
{
UCHAR status = L2K_SUCCESS;
ULONG SRAMAddr;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
//body
// TV SRAM Test
if(bank==0|bank==3)
{
XBYTE[0x20E0]=0x00; // Disable CPUSRAMEn
XBYTE[0x2D2C]=0x02; // SRAM256x9 low byte
XBYTE[0x20E0]=0x03; // Enable CPUSRAMEn
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
XBYTE[SRAMAddr] = 0x55;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
if(XBYTE[SRAMAddr]!=0x55) status = 1;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
XBYTE[SRAMAddr] = 0xAA;
for(SRAMAddr=0x2D00;SRAMAddr<
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -