亚洲欧美第一页_禁久久精品乱码_粉嫩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麻豆自制传媒国产之光| 色狠狠色狠狠综合| 91黄视频在线| 国产午夜精品在线观看| 天天av天天翘天天综合网 | 日本欧美一区二区| 国产一区二区成人久久免费影院| 国产精品综合av一区二区国产馆| 色伊人久久综合中文字幕| 精品视频一区三区九区| 欧美高清在线精品一区| 视频在线观看91| 欧美日韩亚洲综合在线| 日本一区二区三级电影在线观看 | 91丨porny丨国产入口| 欧美一区二区在线观看| 亚洲欧洲av色图| 国内精品在线播放| 欧美日韩精品电影| 国产精品久久久99| 成人毛片在线观看| 欧美电影免费观看高清完整版| 日韩电影在线一区二区三区| 亚洲天堂免费在线观看视频| 2023国产精品自拍| 亚洲成a人片综合在线| 岛国av在线一区| 欧美r级电影在线观看| 亚洲成人先锋电影| 成人黄色片在线观看| 日本一区二区三区电影| 久久99精品网久久| 欧美一级夜夜爽| 亚洲午夜激情网站| 欧美日韩国产天堂| 亚洲精品日产精品乱码不卡| 成人精品视频一区二区三区| 2014亚洲片线观看视频免费| 亚洲成av人片一区二区梦乃| 在线综合视频播放| 天天av天天翘天天综合网色鬼国产 | 久久综合给合久久狠狠狠97色69| 亚洲国产成人va在线观看天堂| 欧美在线观看18| 亚洲精品欧美综合四区| 欧美日韩一区视频| 亚洲成av人片在线| 久久综合久久综合久久综合| 蜜臀av一区二区| 日韩欧美一级片| 国产精品91xxx| 国产日韩欧美a| 91免费视频大全| 亚洲制服丝袜一区| 日韩一区二区三区观看| 精品影院一区二区久久久| 国产亚洲一本大道中文在线| 国产成人自拍网| 亚洲成人免费电影| 欧美tickling挠脚心丨vk| 亚洲高清三级视频| 日韩午夜在线播放| 国产美女精品在线| 亚洲人成精品久久久久久| 色综合久久久网| 久色婷婷小香蕉久久| 精品国内片67194| 91蜜桃网址入口| 亚洲图片欧美一区| 国产女同性恋一区二区| 91香蕉视频污在线| 国产欧美中文在线| 欧美一级二级在线观看| 国产一区视频网站| 日韩精品欧美精品| 久久婷婷一区二区三区| 在线免费精品视频| 日产国产高清一区二区三区| 国产精品私人影院| 欧美日韩一区二区不卡| av亚洲产国偷v产偷v自拍| 亚洲第一主播视频| 国产精品美女久久久久久久网站| 欧美性一级生活| 丝袜美腿高跟呻吟高潮一区| 久久久久久久久伊人| 欧美日韩一区二区在线观看| 韩日欧美一区二区三区| 亚洲国产欧美日韩另类综合| 欧美精品一区二区三区在线播放 | 亚洲精品高清视频在线观看| 久久色视频免费观看| 一本色道久久加勒比精品| 国产精品一二三在| 亚洲综合激情另类小说区| 国产精品欧美久久久久无广告| 欧美在线观看一二区| 不卡视频一二三四| 麻豆免费看一区二区三区| 国产精品久久毛片av大全日韩| 日韩免费高清电影| 91精品办公室少妇高潮对白| 不卡的电影网站| 美女国产一区二区三区| 午夜不卡av免费| 亚洲精品国产无套在线观| 亚洲欧洲性图库| 久久先锋影音av鲁色资源网| 欧美一级久久久| 欧美特级限制片免费在线观看| 91视频免费观看| 福利电影一区二区| 国产成人av一区二区三区在线观看| 午夜电影网一区| 亚洲激情图片一区| 亚洲韩国精品一区| 一区二区三区国产精华| 亚洲国产视频在线| 一区二区三区高清| 亚洲国产日韩a在线播放性色| 中文字幕日韩一区| 亚洲人成网站精品片在线观看 | 成人黄色一级视频| 国产成人精品免费在线| 日韩经典中文字幕一区| 日韩成人精品在线| 亚洲永久免费av| 日韩二区三区四区| 青青草91视频| 国产精品一二三区在线| 国产一区中文字幕| 99久久久久久| 99久久精品免费看| 欧美日韩国产精品成人| 欧美午夜电影在线播放| 欧美一区二区三区视频| 日韩欧美一级二级三级| 久久久av毛片精品| 国产精品美女久久久久久久久久久 | 精品理论电影在线| 日韩欧美黄色影院| 国产精品久久毛片| 夜夜精品浪潮av一区二区三区| 日韩av中文在线观看| 奇米色一区二区三区四区| 成人性色生活片免费看爆迷你毛片| 成人免费视频视频在线观看免费| av影院午夜一区| 欧美在线不卡视频| 欧美绝品在线观看成人午夜影视| 欧美肥妇毛茸茸| 欧美体内she精视频| 精品不卡在线视频| 最近日韩中文字幕| 蜜桃视频免费观看一区| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品夜夜嗨| 色激情天天射综合网| 日韩欧美激情一区| 一区二区视频免费在线观看| 免费人成黄页网站在线一区二区| 成人白浆超碰人人人人| 欧美日韩在线播放三区四区| 欧美欧美欧美欧美| 国产日韩欧美精品电影三级在线 | 91免费国产视频网站| 在线播放中文一区| 国产蜜臀97一区二区三区 | 蜜桃av一区二区在线观看| 97久久精品人人爽人人爽蜜臀| 欧美人狂配大交3d怪物一区| 国产精品视频免费看| 亚洲成人免费观看| 97精品国产露脸对白| 日韩美女一区二区三区| 亚洲精品国产无天堂网2021| 国产一区二区三区在线观看免费 | 成人福利视频网站| 欧美老肥妇做.爰bbww| 玉米视频成人免费看| 国产一区二区三区四| 日韩一区二区三区电影在线观看| 国产精品视频九色porn| 国产在线播放一区| 欧美精品tushy高清| 午夜欧美一区二区三区在线播放| 九九国产精品视频| 日韩一区二区免费视频| 亚洲日本电影在线| 一本大道av伊人久久综合| 欧美性大战久久久久久久| 亚洲精品videosex极品| 韩国午夜理伦三级不卡影院| 欧美三级资源在线| 日本一区二区三区dvd视频在线| 另类小说色综合网站| 日韩精品在线一区二区| 日韩av电影天堂| 欧美一区二区三区性视频| 亚洲电影中文字幕在线观看|