⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osdbasic.lst

📁 车载DVD osdIC TW8816原厂代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   OSDBASIC                                                              04/01/2008 15:02:22 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE OSDBASIC
OBJECT MODULE PLACED IN .\Output\Osdbasic.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Osdbasic.c COMPACT OPTIMIZE(9,SIZE) BROWSE MODDP2 INCDIR(.\Include\) DEFINE
                    -(INTERNAL_MCU) DEBUG OBJECTEXTEND PRINT(.\Source\Osdbasic.lst) OBJECT(.\Output\Osdbasic.obj)

line level    source

   1          //osd_basic.c
   2          // ver0.11 2/1x/2001 Change display format from hex to decimal
   3          //      1.32    LJY11262001     .Add border features to OSD window
   4          //      1.70    LJY05302003 .Support a menu with external OSD.
   5          //      2.00    BYH05102007 .Support internal MCU, which connect with direct memoty bus
   6          //                                               It needs change whole ReadTW88, WriteTW88 to regTW88
   7          
   8          #include "Config.h"
   9          
  10          #include "typedefs.h"
  11          #include "i2c.h"
  12          #include "main.h"
  13          #include "tw88.h"
  14          
  15          #include "osdbasic.h"
  16          #include "dispinfo.h"
  17          #include "measure.h"
  18          #include "printf.h"
  19          #include "udfont.h"
  20          #include "regmap.h"
  21          
  22          extern CODE struct RegisterInfo UserRange;
  23          
  24          //CODE BYTE ZoomAttr[]={        0,      0,      0x40,   0x80,   0xc0    };
  25          
  26          //IDATA struct BarInfo BarInfo;
  27          IDATA struct OSDStrInfo OSDStrInfo;
  28          extern  bit   I2CAutoIncFlagOn ;
  29          
  30          //********************************************************************
  31          //
  32          //      Font
  33          //
  34          //********************************************************************
  35          
  36          void WaitEndofDisplayArea(void)
  37          {
  38   1              BYTE ret,i;
  39   1      
  40   1              ret =  ReadTW88(OSDWINSTATUS) & 0x40;
  41   1      
  42   1              for(i=0;i<10;i++){
  43   2                      if( ret^ (ReadTW88(OSDWINSTATUS)&0x40)) break; 
  44   2              }
  45   1      }
  46          
  47          //=============================================================================
  48          //                      Download OSD Color Look up 
  49          //=============================================================================
  50          void Change_OSDColorLookup(void)
  51          {
  52   1              BYTE i,j;
  53   1              for(j=0; j<2; j++) {   
  54   2                      for(i=0; i<8; i++) {
C51 COMPILER V7.50   OSDBASIC                                                              04/01/2008 15:02:22 PAGE 2   

  55   3                              WriteTW88(0x9c, i+j*8);
  56   3                              WriteTW88(0x9d, OSD_Color_LookUp_Data_Table[j][i]);
  57   3                      }
  58   2              }
  59   1      }
  60          
  61          //=============================================================================
  62          //                      Download RAM Font Data
  63          //=============================================================================
  64          #ifdef  INTERNAL_MCU            // it doesn't have auto increase I2C mode
  65          void DownloadUDFont(void)
  66          {
  67   1              BYTE i, j;
  68   1              #ifndef INTERNAL_MCU
                      BYTE k;
                      #endif
  71   1      
  72   1              WriteTW88(TW88_MULTISTART, COLORFONT_START); // Set Color Font Start Address. 
  73   1      
  74   1              for(i=0; (i< NO_UDFONT) && (i<= MAX_FONT_RAM_CHARS) ; i++) {
  75   2                      //DownloadFont(i, RAMFONTDATA[i]);
  76   2                      WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) | 0x01);             // Font RAM access mode ON
  77   2                      WriteTW88(TW88_FONTRAMADDR, i);
  78   2      
  79   2                      WriteTW88(0xff, ReadTW88(0xff) | 0x10); // Disable I2C index auto increment during multi-write
  80   2                      //WriteI2Cn( TW88I2CAddress, TW88_FONTRAMDATA, fontdata, 27 );
  81   2                      for ( j = 0; j<27; j++ ) {
  82   3                              WriteTW88(TW88_FONTRAMDATA, RAMFONTDATA[i][j]);
  83   3                              #ifndef INTERNAL_MCU
                                      for ( k=5; k!=0; k-- ) ;
                                      #endif
  86   3                      }
  87   2      
  88   2                      WriteTW88(TW88_ENABLERAM, (ReadTW88(TW88_ENABLERAM) & 0xfe));           // OSD RAM access mode OFF
  89   2                      #ifdef  DEBUG_OSD
                              if (( i % 10 )== 0) 
                                      dPuts("\r\n");
                              dPrintf("%02xh, ", (WORD)i);
                              #endif
  94   2              }
  95   1      
  96   1      }
  97          
  98          #else
              void DownloadFont(BYTE cod, CODE_P BYTE *fontdata)
              {
                      WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) | 0x01);             // Font RAM access mode
                      WriteTW88(TW88_FONTRAMADDR, cod);
              
              //      WriteTW88(0xff, ReadTW88(0xff) | 0x10); // Disable I2C index auto increment during multi-write
                      WriteTW88(0xe0, ReadTW88(0xe0) | 0x10); // Disable I2C index auto increment during multi-write
                      WriteI2Cn( TW88I2CAddress, TW88_FONTRAMDATA, fontdata, 27 );
              
                      WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) & 0xfe);             // OSD RAM access mode
              }
              
              void DownloadUDFont(void)
              {
                      BYTE i;
              
                      WriteTW88(TW88_MULTISTART, COLORFONT_START); // Set Color Font Start Address. 
              
C51 COMPILER V7.50   OSDBASIC                                                              04/01/2008 15:02:22 PAGE 3   

                      for(i=0; i< NO_UDFONT && i<= MAX_FONT_RAM_CHARS ; i++) {
                              DownloadFont(i, RAMFONTDATA[i]);
                      }
              }
              #endif
 122          //*****************************************************************************
 123          //      OSD Window internal subfunction for TW88xx
 124          //*****************************************************************************
 125          //*****************************************************************************
 126          //      Functions for TW88xx internal OSD
 127          //*****************************************************************************
 128          #ifdef SUPPORT_OSDPOSITIONMOVE
              
              void SetOSDWindowX_TW88(BYTE winno, BYTE x)
              {
                      WORD tmp;
                      BYTE dat;
              
                      if( winno<1 || winno>8 ) return;
                      SetOSDWindowNum(winno);
              
                      tmp = x << 3;
              
                      dat = ReadTW88(TW88_WINSTART_HI) & 0xf0;
                      dat = dat | (tmp>>8);
              
                      WriteTW88(TW88_WINSTART_HI, dat);
                      WriteTW88(TW88_WINXSTART, tmp);
              }
              #endif
 147          void SetOSDWindowY_TW88(BYTE winno, BYTE y)
 148          {
 149   1              WORD tmp;
 150   1              BYTE dat;
 151   1      
 152   1              if( winno<1 || winno>8 ) return;
 153   1              SetOSDWindowNum(winno);
 154   1      
 155   1              tmp = y << 2;
 156   1      
 157   1              dat = ReadTW88(TW88_WINSTART_HI) & 0x0f;
 158   1              dat = dat | ((tmp>>8)<<4);
 159   1      
 160   1              WriteTW88(TW88_WINSTART_HI, dat);
 161   1              WriteTW88(TW88_WINYSTART, tmp);
 162   1      }
 163          
 164          //=============================================================================
 165          //                      ShowOSDWindow_TW88
 166          //=============================================================================
 167          void ShowOSDWindowAll(BYTE on)
 168          {
 169   1              BYTE rd;
 170   1      
 171   1              WaitEndofDisplayArea(); 
 172   1              rd = ReadTW88(TW88_OSDLOCKUPSEL);
 173   1      
 174   1              if( on )
 175   1                      WriteTW88(TW88_OSDLOCKUPSEL, rd&0xef);  // 
 176   1              else
 177   1                      WriteTW88(TW88_OSDLOCKUPSEL, rd|0x10);  // OSD All Off (TW8806B)
 178   1      
C51 COMPILER V7.50   OSDBASIC                                                              04/01/2008 15:02:22 PAGE 4   

 179   1      }
 180          void ShowOSDWindow_TW88(BYTE winno, BYTE onoff)
 181          {
 182   1              BYTE rd;
 183   1      
 184   1              if( winno<1 || winno>8 ) return;
 185   1              SetOSDWindowNum(winno);
 186   1      
 187   1              rd = ReadTW88(TW88_WINATTR);
 188   1              if( onoff ) rd |= 0x01;
 189   1              else            rd &= 0xfe;
 190   1      
 191   1              WaitEndofDisplayArea(); 
 192   1              WriteTW88(TW88_WINATTR, rd);
 193   1      }
 194          
 195          #ifdef SUPPORT_OSDPOSITIONMOVE
              WORD GetOSDWindowX(BYTE winno)
              {
                      WORD x;
              
                      if( winno<1 || winno>8 ) return 0;
                      SetOSDWindowNum(winno);
              
                      x = (ReadTW88(TW88_WINSTART_HI) & 0x0f) << 8;
                      x = x  | ReadTW88(TW88_WINXSTART);
              
                      return (BYTE)(x >> 3);
              }
              #endif
 209          
 210          WORD GetOSDWindowY(BYTE winno)
 211          {
 212   1              WORD y;
 213   1      
 214   1              if( winno<1 || winno>8 ) return 0;
 215   1              SetOSDWindowNum(winno);
 216   1      
 217   1              y = (ReadTW88(TW88_WINSTART_HI) & 0xf0) << 4;
 218   1              y = y  | ReadTW88(TW88_WINYSTART);
 219   1      
 220   1              return (BYTE)(y >> 2);
 221   1      }
 222          
 223          #include        "osdTW88.c"
 224          //*****************************************************************************
 225          //
 226          //      Internal Font test
 227          //
 228          //*****************************************************************************
 229          //-----------------------------------------------------------------------------
 230          //      CopyUDCharToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE attr, BYTE ch)
 231          //      - For FONT RAM Char.
 232          //-----------------------------------------------------------------------------
 233          code BYTE       FontTestWindow[] = { 0xa1, 10, 0xa2, 10, 0xa0, 0, 0xa3, 16, 0xa4, 16, 0xa5, 0x91, 
 234                                                                                  0xa6, 1, 0xa7, 1, 0xa8, 0x22, 0xa9, 0x00, 0xaa, 00, 0xab, 0x62 };
 235          void DisplayROMFont( BYTE scode )
 236          {
 237   1      BYTE    i;
 238   1      
 239   1              WriteTW88( 0x94, 0x02 );                // clear OSD RAM clear
 240   1              WriteTW88( 0x9e, 0 );                   // window #0
C51 COMPILER V7.50   OSDBASIC                                                              04/01/2008 15:02:22 PAGE 5   

 241   1              for ( i=0; i<(sizeof(FontTestWindow)/2); i++ )
 242   1                      WriteTW88(FontTestWindow[i*2], FontTestWindow[i*2+1]);
 243   1              if ( scode == 0 ) {
 244   2                      WriteTW88( 0x94, 0x00 );                //0000 1100 ROM Font select with same attribute
 245   2                      for ( i=0; i<0xfe; i++ ) {
 246   3                              WriteTW88( 0x96, i );
 247   3                              WriteTW88( 0x97, i );
 248   3                              WriteTW88( 0x98, 0x97 );
 249   3                      }
 250   2              }
 251   1              else {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -