📄 l2_lcdtv.new
字号:
//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;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
osdhofst = XBYTE[0x2D08]+(XBYTE[0x2D09]<<8)-XBYTE[0x2D07]+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
}
MemStretch = tmp;
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;
tmp = XBYTE[0x2D20];
hoffset = ((XBYTE[0x2D08]+(XBYTE[0x2D09]<<8)-2)<<6)/tmp;
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;
}
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<0x2DFF;SRAMAddr++)
if(XBYTE[SRAMAddr]!=0xAA) status = 1;
}
if(bank==1||bank==3)
{
XBYTE[0x20E0]=0x00; // Disable CPUSRAMEn
XBYTE[0x2D2C]=0x03; // SRAM256x9 high byte
XBYTE[0x20E0]=0x02; // Enable CPUSRAMEn
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
XBYTE[SRAMAddr] = 0x00;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
if(XBYTE[SRAMAddr]!=0x00) status = 1;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
XBYTE[SRAMAddr] = 0x01;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
if(XBYTE[SRAMAddr]!=0x01) status = 1;
}
if(bank==2||bank==3)
{
XBYTE[0x20E0]=0x00; // Disable CPUSRAMEn
XBYTE[0x2D2C]=0x04; // SRAM256x6
XBYTE[0x20E0]=0x02; // Enable CPUSRAMEn
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
XBYTE[SRAMAddr] = 0x15;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
if(XBYTE[SRAMAddr]!=0x15) status = 1;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
XBYTE[SRAMAddr] = 0x3A;
for(SRAMAddr=0x2D00;SRAMAddr<0x2DFF;SRAMAddr++)
if(XBYTE[SRAMAddr]!=0x3A) status = 1;
}
// return
XBYTE[0x20E0]=0x00; // Disable CPUSRAMEn
MemStretch = tmp;
return(status);
}
#endif
#ifdef TestModeEn
UCHAR L2_TestLCDTV(UCHAR TestLevel) USING_0
{
UCHAR status = L2K_SUCCESS;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
//avoid warning
UCHAR Temp0 = TestLevel;
//body
//PRINT_L2(" L2_TestLCDTV: Enter\n");
// return
//PRINT_L2(" L2_TestLCDTV: Exit\n");
MemStretch = tmp;
return(status);
}
#endif
// Display zoom in factor
// 0: 1
// 1: 1.25
// 2: 1.5
// 3: 1.75
// 4: 2
UCHAR L2_DisplayZoomIn(UCHAR factor)
{
USHORT imghsize,imgvsize;
USHORT hoffset,voffset;
UCHAR imghzfac, imgvzfac;
USHORT imggrp,hpixel,vline;
USHORT dsphsize, dspvsize;
UCHAR mode;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
mode = XBYTE[0x2D00];
if(mode<8&mode%2==0) // NTSC display size
{dsphsize = 720;dspvsize = 240;}
else if(mode<8&mode%2==1) // PAL display size
{dsphsize = 720;dspvsize = 288;}
else if(mode==8) // UPS051
{dsphsize = 288;dspvsize = 220;}
else if(mode==9) // AU015AN02
{dsphsize = 312;dspvsize = 220;}
else if(mode==10) // EPSON LCD panel
{dsphsize = 312;dspvsize = 230;}
else if(mode==11) // CASIO LCD panel
{dsphsize = 354;dspvsize = 240;}
else if(mode==12) // GiantPlus STN LCD panel
{
#ifdef STNLCD
dsphsize = 240;dspvsize = 160;
#endif
#ifdef STNLCD160
dsphsize = 160;dspvsize = 120;
#endif
}
else if(mode==14) // PrimeView TFT LCD panel
{dsphsize = 640;dspvsize = 480;}
else if(mode==15) // USER define
{dsphsize = 800;dspvsize = 600;}
factor = factor%5;
if(XBYTE[0x2746]==0x01|XBYTE[0x2748]==0x00){
imgvsize = (XBYTE[0x2763]<<8)+XBYTE[0x2762];
imghsize = (XBYTE[0x2761]<<8)+XBYTE[0x2760];
}
else{
imgvsize = (XBYTE[0x2767]<<8)+XBYTE[0x2766];
imghsize = (XBYTE[0x2765]<<8)+XBYTE[0x2764];
}
voffset = (imgvsize/2)*factor/(factor+4);
hoffset = (imghsize/2)*factor/(factor+4);
XBYTE[0x2D1C] = voffset/256; // voffset high byte
XBYTE[0x2D1B] = voffset%256; // voffset low byte
XBYTE[0x2D1E] = hoffset/256; // hoffset high byte
XBYTE[0x2D1D] = ((hoffset%256)/2)*2; // hoffset low byte
hpixel = (imghsize*4)/(factor+4);
vline = (imgvsize*4)/(factor+4);
if(hpixel%16==0) imggrp = (hpixel >> 4);
else imggrp = (hpixel >> 4) + 1;
imgvzfac = ((ULONG)vline*32)/dspvsize;
imghzfac = ((ULONG)hpixel*128)/dsphsize;
XBYTE[0x2D19] = imgvzfac;
XBYTE[0x2D1A] = imghzfac;
XBYTE[0x2D1F] = imggrp;
//printf(" imghsize = %X imgvsize = %x \n",imghsize,imgvsize);
//printf(" hpixel = %X vline = %x \n",hpixel,vline);
//printf("imghzfac=%bx, imgvzfac=%bx, imggrp=%x \n",imghzfac,imgvzfac,imggrp);
MemStretch = tmp;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -