📄 osd1_initial.c
字号:
//---------------------------------------------------------------------------
// Terawins Inc. Company Confidential Strictly Private
//
// $Archive: OSD1CSL.c $
// $Revision: 0.01 $
// $Author: Kevin Hsu $
// $Date: 2006/10/12 $
//
// --------------------------------------------------------------------------
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// --------------------------------------------------------------------------
// Copyright 2002(c) Terawins Inc.
// --------------------------------------------------------------------------
#include "Common.h"
#include "Global.h"
#include "ICControl.h"
#include "System.h"
#include "TWICreg.h"
#include "OSD1_Define.h"
#include "OSD1CSL.h"
//#include "ICON2BP12X18.H"
//#include "Icon4BP12x12.H"
//#include "Icon4BP12x122.H"
//#include "Icon4BP12x123.H"
#include "FONT0_Font12W18H.h"
#include "UIDraw.h"
#define ICON1BP
void OSD1Init(void);
void OSD1LoadColor(void);
void OSD1Load4BPFont(void);
void OSD1Load2BPFont(void);
void OSD1Load1BPFont(void);
code unsigned char Icon1BPColorTable[]={
0x00,0x00,0x1F,0x00,0x00,0xF8,0xE0,0x07,0x80,0xB7,0xA0,0x8D,0x80,0x53,0xA6,0x33,
0xA0,0x07,0xC4,0x24,0xB9,0x10,0x1E,0x00,0x52,0x29,0x46,0x33,0xE0,0x05,0x44,0x24
};
void OSD1InItClearMenu(uCHAR MenuIndex)
{
#ifdef T128
uCHAR i;
if(MenuIndex == MENU1)
{
for(i=0; i<Menu1Height; i++)
{
OSD1SetRamAddr(Menu1StrAdr+(Menu1Width+4)*i);
//~Set RAtt_V~//
if(i==0)
OSD1SetRamData(0x4000|Menu1StartY);
else
OSD1SetRamData(0xE001);
//~Set RAtt_H~//
OSD1SetRamData(0x6000|Menu1StartX);
//~Set RAtt_A~//
OSD1SetRamData(0xD000|0x0003);
//~Set RAtt_C~//
OSD1SetRamData(0x0000|(Menu1Width));
m_wBuff[0]=0;
while(m_wBuff[0]<Menu1Width)
{
OSD1SetRamData(0x0000|((uWORD)(0&0x0F)<<9)|(0));
m_wBuff[0]++;
}
}
}
else if(MenuIndex == MENU2)
{
for(i=0; i<Menu2Height; i++)
{
OSD1SetRamAddr(Menu2StrAdr+(Menu2Width+4)*i);
//~Set RAtt_V~//
if(i==0)
OSD1SetRamData(0x4000|Menu2StartY);
else
OSD1SetRamData(0xE001);
//~Set RAtt_H~//
OSD1SetRamData(0x6000|Menu2StartX);
//~Set RAtt_A~//
OSD1SetRamData(0xD000|0x0003);
//~Set RAtt_C~//
OSD1SetRamData(0x0000|(Menu2Width));
m_wBuff[0]=0;
while(m_wBuff[0]<Menu2Width)
{
OSD1SetRamData(0x0000|((uWORD)(0&0x0F)<<9)|(0));
m_wBuff[0]++;
}
}
}
#else
uCHAR i=0;
if(MenuIndex == MENU1)
{
for(i=0; i<Menu1Height; i++)
{
OSD1SetRamAddr(Menu1StrAdr+(Menu1Width+4)*i);
ICWr_Burst_A(OSD1_RAM_DL);
//~Set RAtt_V~//
if(i==0)
OSDSetRamDataBuest(0x4000|Menu1StartY);
else
OSDSetRamDataBuest(0xE001);
//~Set RAtt_H~//
OSDSetRamDataBuest(0x6000|Menu1StartX);
//~Set RAtt_A~//
OSDSetRamDataBuest(0xD000|0x0003);
//~Set RAtt_C~//
OSDSetRamDataBuest(0x0000|(Menu1Width));
m_wBuff[0]=0;
while(m_wBuff[0]<Menu1Width)
{
OSDSetRamDataBuest(0x0000|((uWORD)(0&0x04)<<9)|(0));
m_wBuff[0]++;
}
ICWr_Burst_P();
}
}
else if(MenuIndex == MENU2)
{
for(i=0; i<Menu2Height; i++)
{
OSD1SetRamAddr(Menu2StrAdr+(Menu2Width+4)*i);
ICWr_Burst_A(OSD1_RAM_DL);
//~Set RAtt_V~//
if(i==0)
OSDSetRamDataBuest(0x4000|Menu2StartY);
else
OSDSetRamDataBuest(0xE001);
//~Set RAtt_H~//
OSDSetRamDataBuest(0x6000|Menu2StartX);
//~Set RAtt_A~//
OSDSetRamDataBuest(0xD000|0x0003);
//~Set RAtt_C~//
OSDSetRamDataBuest(0x0000|(Menu2Width));
m_wBuff[0]=0;
while(m_wBuff[0]<Menu2Width)
{
OSDSetRamDataBuest(0x0000|((uWORD)(0&0x0F)<<9)|(0));
m_wBuff[0]++;
}
ICWr_Burst_P();
}
}
#endif
}
void OSD1Init(void)
{
//~Set Font Size.~//
if(FontWidth==OSD1FONTWIDTH12)
OSD1CfgWr(OSD_CHAR_FONT_SIZE,(0xC0)|(0x00)|FontHeight);
if(FontWidth==OSD1FONTWIDTH16)
OSD1CfgWr(OSD_CHAR_FONT_SIZE,(0xC0)|(0x20)|FontHeight);
//~Set Char2BP Font Index Base.~//
OSD1CfgWr(OSD_CHAR2BP_FONT_INDEX,Font2BPIndexStr>>1);
//~Set Char4BP Font Index Base.~//
OSD1CfgWr(OSD_CHAR4BP_FONT_INDEX,Font4BPIndexStr>>1);
//~Set Char2BP Font Memory Base Address.~//
OSD1CfgWr(OSD_CHAR2BP_FONT_MEMADD_L,Font2BPDataStrAdr&0x00FF);
OSD1CfgWr(OSD_CHAR2BP_FONT_MEMADD_M,Font2BPDataStrAdr>>8);
//~Set Char4BP Font Memory Base Address.~//
OSD1CfgWr(OSD_CHAR4BP_FONT_MEMADD_L,Font4BPDataStrAdr&0x00FF);
OSD1CfgWr(OSD_CHAR4BP_FONT_MEMADD_M,Font4BPDataStrAdr>>8);
//~Set Globa Alpha Blending Control.~//
OSD1CfgWr(OSD_GLOBAL_ALPHA_BLENDING,0x10);
//~Set Border/Shadow/Char1BP Color High Bits Offset.~//
OSD1CfgWr(OSD_BSH_COLOR_HIGHBIT,0x20);
//~Set Build-in Rom Font Index Base//
OSD1CfgWr(OSD_FONTROM_INDEX,ROMFONTIndexStr>>1);
//~Clear Ram ~//
OSD1ClearSRam();
//Clear CFG
IC_WritByte(TWIC_P0,OSD1_CFG_INDEX,0x09);
for(m_wBuff[0] =0;m_wBuff[0]<18;m_wBuff[0]++)
{
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,0);
}
//~Menue-1 Setting. ~//
OSD1CfgWr(OSD_MENU1_ENABLE,0x00);
OSD1CfgWr(OSD_MENU1_START_ADR_L,Menu1StrAdr&0x00FF);
OSD1CfgWr(OSD_MENU1_START_ADR_M,Menu1StrAdr>>8);
OSD1CfgWr(OSD_MENU1_END_ADR_L,Menu1EndAdr&0x00FF);
OSD1CfgWr(OSD_MENU1_END_ADR_M,Menu1EndAdr>>8);
//~Menue-2 Setting. ~//
OSD1CfgWr(OSD_MENU2_ENABLE,0x00);
OSD1CfgWr(OSD_MENU2_START_ADR_L,Menu2StrAdr&0x00FF);
OSD1CfgWr(OSD_MENU2_START_ADR_M,Menu2StrAdr>>8);
OSD1CfgWr(OSD_MENU2_END_ADR_L,Menu2EndAdr&0x00FF);
OSD1CfgWr(OSD_MENU2_END_ADR_M,Menu2EndAdr>>8);
//~Load Color Table.~//
#ifdef ICON1BP
OSD1Load1BPFont();
OSD1LoadColor();
#endif
#ifdef ICON2BP
OSD1LoadColor();
FontsStart = font0_000;
OSD1Load2BPFont();
#endif //ICON2BP
#ifdef ICON4BP
OSD1LoadColor();
FontsStart = font4BP0_000;
OSD1Load4BPFont();
// OSD1Load4BPFont2();
#endif //ICON4BP
OSD1InItClearMenu(MENU1);
OSD1InItClearMenu(MENU2);
}
void OSD1LoadColor()
{
//~ Load Main Color Look Up Table.~//
#ifdef ICON4BP
OSD1CfgWr(OSD_COLOR_LUT_ADR_PORT,0x00);
IC_WritByte(TWIC_P0,OSD1_CFG_INDEX,0x09);
#ifdef T128
for(m_wBuff[0] =0;m_wBuff[0]<COLORTBLNUM;m_wBuff[0]++)
{
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,Icon4BPColorTable[m_wBuff[0]]);
}
#else
ICWr_Burst_A(OSD1_CFG_DATA);
for(m_wBuff[0] =0;m_wBuff[0]<COLORTBLNUM;m_wBuff[0]++)
{
ICWr_Burst_D(Icon4BPColorTable[m_wBuff[0]]);
}
ICWr_Burst_P();
#endif //T128
OSD1CfgWr(OSD_COLOR_LUT_ADR_PORT,0x80);
IC_WritByte(TWIC_P0,OSD1_CFG_INDEX,0x09);
for(m_wBuff[0]=0;m_wBuff[0]<18;m_wBuff[0]++)
{
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,0);
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,0);
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,0);
}
#endif //ICON4BP
#ifdef ICON2BP
//~Load Char2BP Color Remap LUT.~//
OSD1CfgWr(OSD_COLOR_LUT_ADR_PORT,0x80);
IC_WritByte(TWIC_P0,OSD1_CFG_INDEX,0x09);
for(m_wBuff[0]=0;m_wBuff[0]<16;m_wBuff[0]++)
{
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,IndexColorTable[m_wBuff[0]*3+2]);
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,IndexColorTable[m_wBuff[0]*3+1]);
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,IndexColorTable[m_wBuff[0]*3]);
}
#endif //ICON2BP
#ifdef ICON1BP
OSD1CfgWr(OSD_COLOR_LUT_ADR_PORT,0x00);
IC_WritByte(TWIC_P0,OSD1_CFG_INDEX,0x09);
#ifdef T128
for(m_wBuff[0] =0;m_wBuff[0]<COLORTBLNUM;m_wBuff[0]++)
{
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,Icon1BPColorTable[m_wBuff[0]]);
}
#else
ICWr_Burst_A(OSD1_CFG_DATA);
for(m_wBuff[0] =0;m_wBuff[0]<3212;m_wBuff[0]++)
{
ICWr_Burst_D(Icon1BPColorTable[m_wBuff[0]]);
}
ICWr_Burst_P();
#endif //T128
OSD1CfgWr(OSD_COLOR_LUT_ADR_PORT,0x80);
IC_WritByte(TWIC_P0,OSD1_CFG_INDEX,0x09);
for(m_wBuff[0]=0;m_wBuff[0]<18;m_wBuff[0]++)
{
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,0);
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,0);
IC_WritByte(TWIC_P0,OSD1_CFG_DATA,0);
}
#endif //ICON1BP
}
#ifdef ICON1BP
void OSD1Load1BPFont(void)
{
unsigned int i,j,k,l;
OSD1SetRamAddr(Font1BPDataStrAdr);
ICWr_Burst_A(OSD1_RAM_DL);
if(FontWidth==OSD1FONTWIDTH12)
{
for(j=0;j<Font1BPNum;j++)
{
for(i=0; i<(FontHeight); i++)
{
k = i<<1;
l = (i+1)<<1;
m_wBuff[1] = (uWORD)(All1BPFonts[j][k])|((uWORD)(All1BPFonts[j][k+1])<<8);
m_wBuff[2] = (uWORD)(All1BPFonts[j][l])|((uWORD)(All1BPFonts[j][l+1])<<8);
switch(i&0x03)
{
case 0:
m_wBuff[0]= m_wBuff[1] |(m_wBuff[2]>>12);
ICWr_Burst_D(m_wBuff[0]&0x00FF);
ICWr_Burst_D(m_wBuff[0]>>8);
break;
case 1:
m_wBuff[0]= (m_wBuff[1] <<4)|(m_wBuff[2] >>8);
ICWr_Burst_D(m_wBuff[0]&0x00FF);
ICWr_Burst_D(m_wBuff[0]>>8);
break;
case 2:
m_wBuff[0]= (m_wBuff[1] <<8)|(m_wBuff[2]>>4);
ICWr_Burst_D(m_wBuff[0]&0x00FF);
ICWr_Burst_D(m_wBuff[0]>>8);
break;
case 3:
//Do nothing
break;
}
}
}
}
ICWr_Burst_P();
}
#endif //ICON1BP
#ifdef ICON2BP
void OSD1Load2BPFont(void)
{
OSD1SetRamAddr(Font2BPDataStrAdr);
if(FontWidth==OSD1FONTWIDTH12)
{
for(m_wBuff[1]=0;m_wBuff[1]<Font2BPNum;m_wBuff[1]++)
{
for(m_wBuff[0]=0; m_wBuff[0]<(FontHeight); m_wBuff[0]+=2)
{
m_wBuff[2] = (m_wBuff[1]* FontHeight+m_wBuff[0])*3;
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]+1]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]+3]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]+2]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]+5]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]+4]);
}
}
}
}
#endif //ICON2BP
#ifdef ICON4BP
void OSD1Load4BPFont(void)
{
OSD1SetRamAddr(Font4BPDataStrAdr);
if(FontWidth==OSD1FONTWIDTH12)
{
#ifdef T128
for(m_wBuff[0]=0;m_wBuff[0]<Font4BPNum;m_wBuff[0]++)
{
for(m_wBuff[1]=0; m_wBuff[1]<(FontHeight); m_wBuff[1]++)
{
m_wBuff[2] = (m_wBuff[0]* FontHeight+m_wBuff[1])*6;
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +1]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +3]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +2]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +5]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +4]);
}
}
#else
ICWr_Burst_A(OSD1_RAM_DL);
for(m_wBuff[0]=0;m_wBuff[0]<Font4BPNum;m_wBuff[0]++)
{
for(m_wBuff[1]=0; m_wBuff[1]<(FontHeight); m_wBuff[1]++)
{
m_wBuff[2] = (m_wBuff[0]* FontHeight+m_wBuff[1])*6;
ICWr_Burst_D(FontsStart[m_wBuff[2] +1]);
ICWr_Burst_D(FontsStart[m_wBuff[2]]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +3]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +2]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +5]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +4]);
}
}
ICWr_Burst_P();
#endif
}
else if(FontWidth==OSD1FONTWIDTH16)
{
#ifdef T128
for(m_wBuff[0]=0;m_wBuff[0]<Font4BPNum;m_wBuff[0]++)
{
for(m_wBuff[1]=0; m_wBuff[1]<(FontHeight); m_wBuff[1]++)
{
m_wBuff[2] = (m_wBuff[0]* FontHeight+m_wBuff[1])*8;
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +1]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2]]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +3]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +2]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +5]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +4]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +7]);
IC_WritByte(TWIC_P0,OSD1_RAM_DL,FontsStart[m_wBuff[2] +6]);
}
}
#else
ICWr_Burst_A(OSD1_RAM_DL);
for(m_wBuff[0]=0;m_wBuff[0]<Font4BPNum;m_wBuff[0]++)
{
for(m_wBuff[1]=0; m_wBuff[1]<(FontHeight); m_wBuff[1]++)
{
m_wBuff[2] = (m_wBuff[0]* FontHeight+m_wBuff[1])*8;
ICWr_Burst_D(FontsStart[m_wBuff[2] +1]);
ICWr_Burst_D(FontsStart[m_wBuff[2]]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +3]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +2]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +5]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +4]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +7]);
ICWr_Burst_D(FontsStart[m_wBuff[2] +6]);
}
}
ICWr_Burst_P();
#endif
}
}
#endif //ICON4BP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -