亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ucode.c

?? 車載電子影音系統dvd播放系統原程序代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
#include "winav.h"
#include "w99av.h"
#include "ucode.h"
#include "setup.h"
#include "hal.h"
#include "cc.h"
#include "chips.h" //Kevin1.11a


/////////////////////////////////////////////////////////////////////
// ***** Big Modification History Area *****
// LLY.273, some modification
// [1] Remove "OFFSET" becasue it's unnecessary any more
// [2] Use "START" to replace "2" while accessing *.inc
// [3] Rename "ADDR" to "IRAM_ADDR"
// [4] Different ERAM_ADDR value -- because IRAM space is bigger
//     0x1a00 : use for F/W version >= 37
//     0x1900 : use for F/W version < 37
// [5] Different CSS_ADDR value  -- because IRAM space is bigger
//     IRAM_ADDR+5632-512 : use for F/W version >= 40
//     IRAM_ADDR+5406-512 : use for F/W version < 40
// [6] Re-arrange the UCODE usage ID
/////////////////////////////////////////////////////////////////////
// ***** Big Modification History Area *****
// Chuan 278 2002/10/28: The PRAM/ERAM must download together, else DSP will run at wrong 
// code after release audio. For example: The first instruction is jump to ERAM for JPGPRAM. 
// But at that time, JPGERAM is not ready. If it jump to critical point, it may make DSP crash.
// UCODE_PMRAM_XXX / UCODE_ERAM_XXX -> UCODE_DSPRAM_XXX
// Related to CSS key management in DVDPRAM.INC has been moved out as keypar.INC.
// UCODE_PRAM_KEY to load keypar.INC

/*
/////////////////////////////////////////////////////////////////////////
// ***** Common Define For UCODE LOAD Area *****
#define     START       2    // 0:date , 1:count number, 2:real data start point
#define     IRAM_ADDR   0x0200      // the start address of iram.inc
#define     ERAM_ADDR   0x1a00      // dsp eram's dram address
// 0x1600 = IRAM_ADDR+5632-512
// 512: the 512n '0' in the IRAM start address, ie 0x200 ~ 0x400 must fill with '0'
#define     IRAMEXT_ADDR    0x1600  // the start address of IRAM extension ucode
#define     CSS_ADDR        IRAMEXT_ADDR    // the start address of css.inc
#define     OGT_ADDR        IRAMEXT_ADDR    // the start address of ogt.inc
*/

//////////////////////////////////////////////////////////////////
// ***** Internal Global Variables Define Area *****
// LLY.273, It's unnecessary because UCODE_Load will initialize them
BYTE    _bPramCur; // = UCODE_PRAM_NONE ;
BYTE    _bDSPramCur;

// Chuan0.83, CT908 no need to load IRAMEXT
// BYTE    _bIRAMExtCur;  // Keep current IRAM extension code
// Chuan DVD_171 12/11/2001: Declare as code *. If want know in detail, please refer to tracernote 100
DWORD code *dwRAM;

#ifndef SYSTEM_8051
DWORD *pdwUcode = NULL;
char cFile[20] = "\0";
#endif  // #ifndef SYSTEM_8051

//For internal function usage.
// TCC161, UCODE_Load/UCODE_LoadCode and UCODE_Check/UCODE_CheckCode can't use same global variable for return value.
BYTE bRet ;

DWORD dwData;  // Chuan 278 2002/10/28: No need initial value.
WORD  _UCODEIndex;  // Chuan 278 2002/10/28: No need initial value.
DWORD dwTemp;
WORD code *wptr;  // pointer to WORD


//alex1.24a Scan Dram ok or not at Power on  
#ifdef SUPPORT_DRAM_SCAN_POWERON
DWORD code _dwURAMTest[]=
{
#include "uramtest.inc"
};

DWORD code _dwCRAMTest[]=
{
#include "cramtest.inc"
};
#endif //#ifdef SUPPORT_DRAM_SCAN_POWERON  

// include the micro-code of RISC URAM
DWORD code _dwURAM[]=
{
#include "uram.inc"
};

//////////////////////////////////////////////////////////////////
// Chuan1.20, For UCode Reduce Part
#ifdef SUPPORT_GZIP_COMPRESSION



// include the micro-code of PRAM
DWORD code _dwDVDPAR[]=
{
#include "dvdpar.inc"
};

// Chuan 278 2002/10/30: The code related to CSS key management in DVDPRAM.INC has been moved out.
DWORD code _dwKEYPAR[]=
{
#include "keypar.inc"
};

DWORD code _dwALLPAR[] =
{
#include "allpar.inc"
};

// wyc1.10, new parser code.
DWORD code _dwDATPAR[] =
{
#include "datpar.inc"
};

// include the micro-code of MP3's PRAM
DWORD code _dwCDROMPAR[]=
{
#include "cdrompar.inc"
};

DWORD code _dwIRAMGZIP[]=
{
#include "iramgzip.inc"
};

DWORD code _dwGZIPPRAM[]=
{
#include "gzippram.inc"
};

// ********************************************************************
//  Function    :   UCODE_Load
//  Description :   Download micro-code to IRAM and PRAM
//  Arguments   :   none
//  Return      :   TRUE or FALSE
//  Side Effect :
// ********************************************************************
BIT UCODE_Load(void)
{
    // Step 1: Initialize all current code as none,
    //         because this API will be called to re-load all code
    _bPramCur = UCODE_NONE;
    _bDSPramCur = UCODE_NONE;
                              
	//Kevin2.31, comment
    //if (!UCODE_LoadCode (UCODE_PRAM, UCODE_PRAM_VCD))
    //    return FALSE ;     

	//Kevin2.31, comment
    //if (!UCODE_LoadCode (UCODE_DSPRAM, UCODE_DSPRAM_NORMAL))
    //    return FALSE ;

    return TRUE;
}

// ********************************************************************
//  Function    :   UCODE_Check
//  Description :   Check the procedure of download micro-code
//  Arguments   :
//  Return      :   TRUE or FALSE
//  Side Effect :
// ********************************************************************
BIT UCODE_Check(void)
{

// Chuan1.05, define it to check ucode
#ifdef  CHECK_UCODE_LOAD    
    if (!UCODE_CheckCode (UCODE_IRAM, (BYTE)NULL))
        return FALSE ;
        
	//Kevin2.31, comment
    //if (!UCODE_CheckCode (UCODE_PRAM, UCODE_PRAM_VCD))
    //    return FALSE ;

	//Kevin2.31, comment
    //if (!UCODE_CheckCode (UCODE_DSPRAM, UCODE_DSPRAM_NORMAL))
    //    return FALSE ; 
#endif
    return TRUE;
}

// ********************************************************************
//  Function    :   UCODE_LoadCode
//  Description :   Download the desired micro-code
//  Arguments   :   bRam, the desired ucode;
//                  bCode, the subtype of the desired code
//  Return      :   TRUE or FALSE
//  Side Effect :
// ********************************************************************
#pragma DISABLE
BYTE UCODE_LoadCode(BYTE bRam, BYTE bCode)
{
    extern  void _WriteInternalRegW_IO(BYTE bReg, WORD wLo);

    bRet = TRUE ;

    switch (bRam)
    {
    //////////////////////////////////////////////////////////////////
    // ***** Load IRAM Code  *****
    case UCODE_IRAM :
        if (bCode==NULL)
        {
            bRet = FALSE;
            break;
        }
#ifdef SYSTEM_8051
        dwRAM = _dwIRAMGZIP;
#else   
        bRet = _OpenUCODE ("iramgzip.inc"); 
#endif  
        
#ifdef SUPPORT_DRAM_PROTECTION
        //Kevin1.01, unprotect IRAM
        W99AV_WriteRegDW( UPR, 0x0000, 0x1E00);
#endif
        // First 17 DW IRAM.INC must download in last time.
        // So must re-adjust the download procedure.
        // [1] download 15 ~ end first
        // Chuan2.80a, Now 28AF has 16 ret code. CT908 has 17 ret code.
        if ( ! W99AV_WriteDRAMBurst( (IRAM_ADDR+17), &dwRAM[START+17], (WORD)(dwRAM[1]-17)))
        {
    #ifdef SUPPORT_PRINTF
            printf ( "\n **** DownLoad IRAM Failure...." );
    #endif
            bRet = FALSE ;
        }

        // [2] Download 1 ~ 17 last
        if ( ! W99AV_WriteDRAMBurst (IRAM_ADDR, &dwRAM[START], (WORD)(17)))
        {
    #ifdef SUPPORT_PRINTF
            printf ( "\n **** DownLoad IRAM Failure...." );
    #endif
            bRet = FALSE ;
        }
#ifdef SUPPORT_DRAM_PROTECTION        
        //Kevin1.01, protect IRAM form IRAM_ADDR to IRAM_END_ADDR
        dwTemp = 0x1F000000 | ((DWORD)(IRAM_END_ADDR>>8)<<12) | IRAM_ADDR>>8;
        W99AV_WriteRegDW( UPR, LOWORD(dwTemp), HIWORD(dwTemp));
#endif
        break ;
        
    //////////////////////////////////////////////////////////////////
    // ***** Load Parser Code  *****
    case UCODE_PRAM :
        if (bCode == _bPramCur)
        {
            // TCC040, let upper level know that code not changed
            bRet = UCODE_LOAD_NONE ;
            break ;
        }

        // Keep the desired subtype code in current variable
        _bPramCur = bCode ;
        
        // Depending on the desired subtype to load ucode
        switch (bCode)
        {
        case UCODE_DVDPRAM :
#ifdef SYSTEM_8051
            dwRAM = _dwDVDPAR ;
#else
            bRet = _OpenUCODE ("dvdpar.inc");  
#endif
            break ;
        // Chuan 278 2002/10/30: The code related to CSS key management in DVDPRAM.INC has been moved out.
        case UCODE_KEYPRAM :
#ifdef SYSTEM_8051
            dwRAM = _dwKEYPAR ;
#else
            bRet = _OpenUCODE ("keypar.inc"); 
#endif
            break ;
        case UCODE_CDROMPRAM :
#ifdef SYSTEM_8051
            dwRAM = _dwCDROMPAR ;
#elif defined(BITSTREAM_WITHOUT_SYNC)
            bRet = _OpenUCODE ( "dosall.inc" ); // Chuan2.80p, DosTest - Host path w/o SYNC
#else
            bRet = _OpenUCODE ( "cdrompar.inc" ); // Chuan2.80p, Emulator ATAPIIF/CDIF only
#endif
            break ;
        case UCODE_ALLPRAM :
#ifdef SYSTEM_8051
            dwRAM = _dwALLPAR ;
#elif defined(BITSTREAM_WITHOUT_SYNC)
            bRet = _OpenUCODE ( "dosall.inc" ); // Chuan2.80p, DosTest - Host path w/o SYNC
#else
            bRet = _OpenUCODE ( "allpar.inc" ); // Chuan2.80p, Emulator ATAPIIF/CDIF only
#endif
            break ;

        // wyc1.10, new parser code for playing DVD-DAT / CD-DAT files.
        case UCODE_DATPRAM:
#ifdef SYSTEM_8051
            dwRAM = _dwDATPAR ;
#else
            bRet = _OpenUCODE ( "datpar.inc" ); // Chuan2.80p, Emulator ATAPIIF/CDIF only
#endif
            break;

#ifdef BITSTREAM_WITHOUT_SYNC
        case UCODE_DOSJPEG:
            bRet = _OpenUCODE ( "dosjpeg.inc" ); // Chuan2.80p, DosTest - Host path w/o SYNC
            break ;
#endif
        default :
#ifdef SUPPORT_PRINTF
            printf ("\nWrong Parser Ramcode specified !") ;
#endif
            return FALSE ;
        }

        // LLY.0411, using HAL_Reset(HAL_RESET_PARSER), becasue it will
        // issue disable parser and parser reset.
        // Must call HAL_ControlParser(HAL_PARSER_ENABLE, NULL)
        // LLY.043, fix recursive call -- expand HAL_Reset(HAL_RESET_PARSER) procedure
        // LLY.050-1, push 16 DWORD zero to vcfifo before parser reset
        __dwW99AVCmdArg[0]=2;
        __dwW99AVCmdArg[1]=0xFFFF;  // don't care commnad argument
        __dwW99AVCmdArg[2]=0x00102000; // [31:16]: data cnt; [15:0] specify fifo
        W99AV_CommandN(COMMAND_FFIFO);  // Chuan2.80p, Use define instead of number
        __wW99AVPCRLow &= 0xDFFF ;  //(Bit 13, Parser Disable)
        // LLY.041-3 begin ....
        W99AV_WriteRegDW (PCR, __wW99AVPCRLow, __wW99AVPCRHigh) ;
        // LLY.041-3 end ...
        // Soft Reset Parser
        __wW99AVPCRLow |= 0x1000 ;  //(Bit 12, Parser Reset)
        W99AV_WriteRegDW (PCR, __wW99AVPCRLow, __wW99AVPCRHigh) ;
        // LLY.043 end ...

        // download parser ram
        for (_UCODEIndex=0; _UCODEIndex<dwRAM[1]; _UCODEIndex++)
        {
            // Chuan DVD_171 12/11/2001: use simple way
            W99AV_OutIndex (W99AV_AIRID_PARRAM | _UCODEIndex) ;
            W99AV_OutData (dwRAM [_UCODEIndex+START]) ;            
        }

        // LLY.043, fix recursive call -- expand HAL_ControlParser(HAL_PARSER_ENABLE, NULL) procedure
        // Restore previous state
        __wW99AVPCRLow &= 0xEFFF ;  //(Bit 12, Parser Reset)
        // LLY.0411 begin ....
        W99AV_WriteRegDW (PCR, __wW99AVPCRLow, __wW99AVPCRHigh) ;
        // LLY.0411 end ...
        // DVD016, not enable parser
        //DVD016MICKY
        __wW99AVPCRLow |= 0x2000 ;  //(Bit 13, Parser Enable)
        W99AV_WriteRegDW (PCR, __wW99AVPCRLow, __wW99AVPCRHigh) ;
        // LLY.043 end ...
        break ;

    //////////////////////////////////////////////////////////////////
    // ***** Load URAM Code  *****
    case    UCODE_URAM :
#ifdef SUPPORT_DRAM_SCAN_POWERON //alex1.24a, Scan Dram
    case    UCODE_URAM_DRAMTEST :     
      if (bRam == UCODE_URAM_DRAMTEST)
      {
#ifdef SYSTEM_8051
        dwRAM = _dwURAMTest;
#else
        bRet = _OpenUCODE ("uramtest.inc");   
#endif
      }  
      else  
#endif //#ifdef SUPPORT_DRAM_SCAN_POWERON
      {
#ifdef SYSTEM_8051
        dwRAM = _dwURAM;
#else
        bRet = _OpenUCODE ("uram.inc"); 
#endif
      }

        wptr=(WORD code *)& dwRAM[START];

        // Step 1 : Reset URAM
        __dwW99AVCmdArg[0]=1;
        __dwW99AVCmdArg[1]=CMDARG_URAMRST;
        if(!W99AV_CommandN(COMMAND_URAMRST))  // Chuan2.80p, Use define instead of number
            bRet =FALSE;

        // Step 2 : set URAM write enable
        _WriteInternalRegW_IO(CFR,0x0060);    // CF, to stall CPU
        _WriteInternalRegW_IO(RMADRR,0x0080);    // rm_adr
        _WriteInternalRegDW_IO(DCCTLR,0x0,0x1); // Chuan-Test0.01
        
        // Step 3 : load nonzero URAM data to register

        for(_UCODEIndex=0; _UCODEIndex<dwRAM[1];_UCODEIndex++)
        {
            if(dwRAM[_UCODEIndex+START]!=0)
            {
                _WriteInternalRegW_IO(RMADRR,(WORD)(0x0080|((_UCODEIndex&0x00FF)<<8)));
#ifdef USE_LITTLE_ENDIAN
                _WriteInternalRegW_IO (DIR0R, (*wptr)) ;
                _WriteInternalRegW_IO (DIR1R, (*(wptr+1))) ;
#else
                _WriteInternalRegW_IO (DIR0R, (*(wptr+1))) ;
                _WriteInternalRegW_IO (DIR1R, (*wptr)) ;
#endif
            }
            wptr+=2;
        }
        // Step 4 : set URAM write disable
        _WriteInternalRegW_IO(RMADRR,0x0000);
        _WriteInternalRegW_IO(CFR,0x0000);
        // Chuan-Test0.01, Enable URAM_EN

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文一区二区三区| 精品福利二区三区| 国产精品一卡二| 亚洲成国产人片在线观看| 精品国产一区二区在线观看| 91视频.com| 国产一区二区三区免费看| 亚洲综合一二三区| 国产日产欧美一区| 日韩一级片在线观看| av电影天堂一区二区在线| 久久国产婷婷国产香蕉| 午夜av区久久| 亚洲免费色视频| 国产网站一区二区三区| 日韩视频一区二区| 欧美日韩在线一区二区| 99国产精品99久久久久久| 国产一区 二区| 青青草原综合久久大伊人精品优势 | 精品亚洲成a人在线观看| 一级日本不卡的影视| 久久精品人人爽人人爽| 日韩三级中文字幕| 欧美日韩高清影院| 欧美性videosxxxxx| 色久优优欧美色久优优| 成人黄色国产精品网站大全在线免费观看| 日韩黄色一级片| 亚洲国产成人精品视频| 亚洲免费在线观看| 亚洲男同性视频| 亚洲女厕所小便bbb| 自拍偷自拍亚洲精品播放| 国产日产欧美一区| 欧美国产1区2区| 亚洲国产岛国毛片在线| 国产精品丝袜黑色高跟| 国产精品久久777777| 国产日韩欧美一区二区三区乱码| 久久久久国产成人精品亚洲午夜 | 国产精品久久久久久久蜜臀| 国产丝袜在线精品| 欧美国产国产综合| 国产精品久久久久永久免费观看| 欧美国产精品v| 国产精品久久久久婷婷| 国产精品久久久久久久久搜平片| 中文字幕第一区第二区| **性色生活片久久毛片| 亚洲色图一区二区| 一区二区日韩av| 天天综合网 天天综合色| 美女精品一区二区| 久久99精品一区二区三区| 国产乱码一区二区三区| 成人手机电影网| 91福利国产精品| 在线观看91av| 久久伊人蜜桃av一区二区| 国产精品美女久久福利网站| 亚洲乱码国产乱码精品精小说| 亚洲国产人成综合网站| 毛片基地黄久久久久久天堂| 国产精品自在欧美一区| 99国内精品久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 精品视频在线视频| 精品国产伦一区二区三区观看体验 | 精品一区二区在线观看| 成人免费高清在线| 91成人免费在线| 精品欧美一区二区三区精品久久| 久久久精品日韩欧美| 亚洲色图丝袜美腿| 蜜桃91丨九色丨蝌蚪91桃色| 成人18视频日本| 欧美色爱综合网| 久久蜜桃av一区精品变态类天堂| 亚洲欧美一区二区不卡| 蜜桃91丨九色丨蝌蚪91桃色| 99国产精品久久| 日韩精品中文字幕一区二区三区 | 精品不卡在线视频| 综合电影一区二区三区| 麻豆国产欧美一区二区三区| 99天天综合性| 日韩一区二区三区免费看| 中文字幕一区二区三区不卡| 天堂成人免费av电影一区| 国产精品99久久久久久久vr| 欧美日韩精品欧美日韩精品一| 久久久国产精品不卡| 亚洲aaa精品| 不卡av在线免费观看| 日韩欧美一区二区免费| 亚洲九九爱视频| 国产精品一卡二卡在线观看| 欧美精品在欧美一区二区少妇| 国产精品网站在线| 美女一区二区久久| 欧美午夜在线观看| 国产精品久久久久国产精品日日| 日本成人在线网站| 色哟哟在线观看一区二区三区| 久久久久久久网| 青青草97国产精品免费观看 | 国产精品中文有码| 69p69国产精品| 亚洲激情第一区| 成人v精品蜜桃久久一区| 精品久久久久久久久久久久久久久久久| 亚洲精品中文在线观看| 国产精品一区二区你懂的| 91麻豆精品国产91久久久久久| 亚洲人成网站色在线观看| 丁香激情综合五月| 欧美精品一区二区高清在线观看| 视频一区二区三区在线| 在线视频中文字幕一区二区| 国产精品成人午夜| 国产成人精品综合在线观看| 精品88久久久久88久久久| 日韩成人午夜精品| 欧美午夜精品久久久久久孕妇| 亚洲欧美偷拍卡通变态| 99久久国产免费看| 中文字幕日本乱码精品影院| 国产成人av电影免费在线观看| 久久青草国产手机看片福利盒子| 麻豆中文一区二区| 日韩一区二区精品| 美女视频黄久久| 精品日韩一区二区三区免费视频| 日本怡春院一区二区| 91精品国产一区二区| 免费成人结看片| 日韩免费视频一区| 韩国三级电影一区二区| 久久久99精品免费观看| 高清av一区二区| 欧美国产日韩亚洲一区| 丁香婷婷综合网| 综合欧美亚洲日本| 色94色欧美sute亚洲线路一久| 一区二区三区四区中文字幕| 欧美亚洲国产一区二区三区| 亚洲v中文字幕| 欧美一级理论性理论a| 美美哒免费高清在线观看视频一区二区 | 日韩亚洲欧美高清| 精品一区二区av| 中文字幕高清不卡| 色狠狠av一区二区三区| 视频一区免费在线观看| 欧美电视剧在线观看完整版| 国产精品一区二区三区网站| 一区视频在线播放| 欧美亚洲精品一区| 美国三级日本三级久久99| 日本一区二区三区四区在线视频| 97久久超碰国产精品电影| 午夜伦理一区二区| 久久久亚洲欧洲日产国码αv| 国产精品亚洲视频| 亚洲天堂免费看| 正在播放一区二区| 国产激情一区二区三区桃花岛亚洲 | 欧美精品一区二区三区高清aⅴ | 成人av网在线| 亚洲国产精品嫩草影院| 2020国产精品自拍| 99久久综合99久久综合网站| 亚洲国产综合91精品麻豆| 欧美一级视频精品观看| 粉嫩av一区二区三区在线播放 | 日本一区二区三区在线观看| 91黄色激情网站| 精品一区二区三区视频在线观看 | 91麻豆精品国产91久久久久久久久 | 欧美精品v国产精品v日韩精品| 久草在线在线精品观看| 亚洲视频一区二区在线| 制服丝袜中文字幕一区| 成人做爰69片免费看网站| 亚洲18女电影在线观看| 国产女主播在线一区二区| 欧美日韩在线播放三区| 国产成人精品亚洲777人妖| 亚洲一区二区三区四区中文字幕| 精品国产一区二区国模嫣然| 一本色道a无线码一区v| 国产尤物一区二区在线| 亚洲成人久久影院| 久久久久久一级片| 欧美精品日韩精品| 99re热视频这里只精品| 久久不见久久见免费视频7| 亚洲午夜国产一区99re久久| 欧美国产精品一区|