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

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

?? util.c

?? 一個兩碟控制的VCD的代碼,兩碟之間的轉動及連續播放,已大量生產的CODE.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright 1996-1997, ESS Technology, Inc. */
/* SCCSID @(#)util.c	1.88 10/28/98 */

#include "common.h"
#include "buffer.h"
#include "constvar.h"
#include "debug.h"
#include "dsc.h"
#include "low.h"
#include "mvd.h"
#include "sysinfo.h"
#include "timedef.h"
#include "util.h"
#include "vcxi.h"
#include "tdm.h"
#include "echo.h"
#include "ir.h"
#include "micro.h"
#include "vp.h"
#include "kara.h"
#include "const.h"
#include "dsa.h"

/*
 * Remote control depends on timer to get signal width. For convenience,
 * we need the least significant 20 bits of starting timer value to be 
 * all 0's. Therefore, TIMER2_INTERVAL and multiplication factors are both
 * set to 1024 instead of 1000.
 */


/*
 * Real-time clock is always at DRAM location 0x1c. The format is: 00hhmmss
 * where hh is hour (0-23), mm is minute (0-59), ss is half second (0-119)
 *
 * Since this variable is always changing, I'll make sure the cache copy
 * is consistent with the DRAM version even though we only use the DRAM
 * version (otherwise, old cache data may destroy DRAM data by accident)
 */
unsigned int *RISC_ptr_realtime = (unsigned int *) 0x1200001c;
unsigned int *RISC_cache_realtime  = (unsigned int *) 0x1c;

/* the format is 0x00ttmmss */
unsigned int *VCD_ptr_resume_info = (unsigned int *) 0x12000018;
unsigned int *VCD_cache_resume_info = (unsigned int *) 0x18;

KEYDEBUGVAR(watchdog, 0);

/************************************************************************
 Timer2 interrupt service.
 ************************************************************************/
void RISC_timer2_interrupt_service(void)
{
    register unsigned int tmp = *RISC_ptr_realtime;

    mvd[riface_clear_timer2] = 0;      	/* clear timer irq */
    /* Timer reloaded automatically */
    
#ifdef DSC
    DSC_toggle();	/* Tell 3207 that we are not dead! */
    if (IS_POWER_DOWN) {
	/*
	 * In the powerdown mode, there is no screen interrupt. I have
	 * to use timer interrupt to keep glbTimer moving. Otherwise,
	 * many waiting loop may hang due to glbTimer not moving.
	 */
	glbTimer += (60 * TIMER2_INTERVAL / 1000);
    }
#else
#ifdef CUST4
    {
	extern int power_up;
    	if (power_up) {
	    /* During powerup stage, there is no video interrupt. To update *
	     * glbTimer, we use timer2 interrupt instead */
	    glbTimer += (60 * TIMER2_INTERVAL / 1000);
    	}
    }
#endif
#endif

    tmp++;
    if ((tmp & 0xff) >= 120) {
	/* Increment minute after 60 seconds */
	tmp &= 0xffffff00;
	tmp += 0x100;
	if ((tmp & 0xff00) >= 0x3c00) {
	    /* Increment hour after 60 minutes */
	    tmp &= 0xffff0000;
	    tmp += 0x10000;
	    if (tmp >= 0x180000) 
	      tmp = 0;
	}
    }
    *RISC_cache_realtime = *RISC_ptr_realtime = tmp;
    

#ifdef NO_MICRO
    if (REMOTE_VALID) {
	/* We will do a longjump if the input key is POWER
	   key and the current_task is not 0. The user can
	   use the POWER key to power off machine if we
	   are looping in decoding task. */
#if (POWER_ON || !CUST71) /* for code cutting */
	if ((current_task != 0) && micro_is_power_key(codeIR)) {
#else
	if (current_task != 0) {
#endif
	    longjmp(err_buf, 1);
	}
#ifdef VCDROM
	if (VCD_30 && micro_is_reset_key(codeIR)) {
extern jmp_buf vcd30_power_buf;
	    longjmp(vcd30_power_buf, 1);
	}
#endif

    }
#endif

#if defined(WATCHDOG) && !defined(MVD_BOARD)
    {
	extern int xfer_mode;

#ifdef DVD_VCD
	if (!vcx_pause)
#else
	if (!vcx_pause && (xfer_mode == 5)) 
#endif
	{
	    /*
	     * We consider that system is dead if there are no
	     * xport or huffman xfer for both audio and video
	     * since last timer interrupt.
	     */
	    int system_dead = 
	      !(VBV_ABV_xport_xfer_count && 
		(VBV_ABV_huffman_xfer_count || TDM_isCDDA));
	    
	    if (current_task && system_dead) {
#ifdef ECHO
		/*
		 * When ECHO is on, the original system dead condition
		 * no longer holds. When the current_task is 6 (i.e. echo)
		 * we may not have any TDM/HUFF data.
		 *
		 * In every timer interrupt, we'll take note of the
		 * current ECHO_cnt. If between two timer interrupts,
		 * the ECHO_cnt stays the same, and the current task
		 * is ECHO, then we are really stucked in ECHO task.
		 */
		if ((current_task != 6) || (ECHO_cnt == ECHO_last_cnt)) 
#endif /* ECHO */
		{
		    KEYDEBUGINC(1, watchdog);
		    longjmp(err_buf, 1);
		}
	    } 

	    VBV_ABV_xport_xfer_count = VBV_ABV_huffman_xfer_count = 0;
#ifdef ECHO
	    ECHO_last_cnt = ECHO_cnt;
#endif /* ECHO */
	}
    }
#endif
}

/**************************************************************************
 buscon_irq_enable/disable is now a subroutine
 **************************************************************************/
#ifndef BUSCON_IRQ_USE_MACRO 

void buscon_irq_enable(int ch_runbit)
{
  do {} while (!(mvd[buscon_dma_status] & ch_runbit));
  mvd[riface_irqsuppress] = 0; asm("nop"); asm("nop");
  gbl_buscon_irqmasks |= ch_runbit;
  mvd[buscon_dma_irqmasks] = gbl_buscon_irqmasks;
}

void buscon_irq_disable(int ch_runbit)
{
  mvd[riface_irqsuppress] = 0; asm("nop"); asm("nop");
  gbl_buscon_irqmasks &= ~ch_runbit;
  mvd[buscon_dma_irqmasks] = gbl_buscon_irqmasks;
}

#endif

/**************************************************************************
 Start timer2.
 **************************************************************************/
void RISC_start_timer2(void)
{
#ifdef DSC
    if (IS_POWER_DOWN) timer2_period = 0x0 - (TIMER2_INTERVAL * IDLECLK * 100);
    else timer2_period = 0x0 - (TIMER2_INTERVAL * CPUCLK * 100);
#else
    timer2_period = 0x0 - (TIMER2_INTERVAL * CPUCLK * 100);
#endif /* DSC */

    mvd[riface_clear_timer2] = 0;      	/* clear timer irq */
    mvd[riface_timer2] = timer2_period;
    *RISC_ptr_realtime = 0;
    /* Mask off junk */
    *RISC_cache_realtime = (*RISC_ptr_realtime &= x00ffffff);
    enable_int(tim2);
}

#ifndef MKROM
/**************************************************************************
 Read the risc gateway fifo. 
 **************************************************************************/
void	risc_fifo_read(int *p, int n)
{
    while (n-- > 0) {
	get_riscfifo(*p);
	p++;
    }
}
#endif

/**************************************************************************
 Write to the risc gateway fifo. 
 **************************************************************************/
void	risc_fifo_write(int *p, int n)
{
    while (n-- > 0) {
	put_riscfifo(*p);
	p++;
    }
    gbl_gate_control |= flush_r2b;
    mvd[gate_control] = gbl_gate_control;	/* Flush r2b gateway fifo */
}

#if 0  /* NO one uses this right now */
/*****************************************************************************
 Flush the cache.
 *****************************************************************************/
void	RISC_flush(int start, int n)
{
    int i, j;
    volatile int k;
    int first, last;
    first = (start << 2) & 0xffff;
    last = ((start + n) << 2) & 0xffff;
    for (i = 0; i< 8192; i += 2048) {
      for (j = first + i; j < last + i; j += 16) {
        k = *((int *)j);
      }  
    }
}
#endif

/*****************************************************************************
 Move a block of memory from sram to dram.
 *****************************************************************************/
void	sram_to_dram(dst, srcp, n)
int  	dst;	/* dword addr in DRAM */
int  	*srcp;	/* source ptr in SRAM */
int  	n;	/* block size in dwords */
{
    int i, *dstp = (int *)dram(dst);
    while (n--) {
	*dstp++ = *srcp++;
    	for (i = 0; i < 32; i++)
	    asm("nop");
    }
}

/*****************************************************************************
 Move a block of memory from sram(actually it can be dram too) to dram.
 This one is quicker if you have a large block.
 *****************************************************************************/
void	RISC_to_dram(dst, srcp, n)
int  	dst;	/* dword addr in DRAM */
int  	*srcp;	/* source ptr in SRAM */
int  	n;	/* block size in dwords */
{
    int dx, dy, m;

#if 1
    buscon_wait(r2b);
#else
    buscon_wait_timeout(r2b, 300000);
#endif
    dy = n>>8; m = dy<<8; dx = n - m;
    if (dy) {
    	buscon_xfer(r2b, BDMA_USEDX, dst, 256, dy);
	dst += m;
        risc_fifo_write(srcp, m);
	srcp += m;
#if 1
    	buscon_wait(r2b);
#else
    	buscon_wait_timeout(r2b, 300000);
#endif
    }
    if (dx) {
    	buscon_xfer(r2b, 0, dst, dx, 1);
    	risc_fifo_write(srcp, dx);
#if 1
    	buscon_wait(r2b);
#else
    	buscon_wait_timeout(r2b, 300000);
#endif
    }
}

/*****************************************************************************
 DRAM clear via the VP.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩不卡手机在线v区| 成人听书哪个软件好| aaa国产一区| 久久精品亚洲一区二区三区浴池| 国产精品精品国产色婷婷| 久久99这里只有精品| 欧美男男青年gay1069videost | 91猫先生在线| 久久久欧美精品sm网站| 麻豆国产精品视频| www日韩大片| 国产精品综合二区| 欧美一区二区视频在线观看| 国产精品二三区| 99久久99精品久久久久久| 欧美精品一区二区三区高清aⅴ| 免费观看日韩av| 欧美一二三四区在线| 精品一区二区在线视频| 国产精品剧情在线亚洲| 99免费精品视频| 亚洲免费观看高清完整版在线| 日本久久电影网| 天天免费综合色| 久久综合九色综合久久久精品综合| 国产呦萝稀缺另类资源| 亚洲欧洲日韩女同| 欧美视频中文字幕| 韩国毛片一区二区三区| 国产精品国产自产拍高清av王其| 在线国产亚洲欧美| 黄色成人免费在线| 亚洲午夜久久久久久久久久久| 欧美一区二区三区色| 国产乱妇无码大片在线观看| 国产精品国产自产拍在线| 欧美一级二级在线观看| 色欧美片视频在线观看| 麻豆久久一区二区| 亚洲日穴在线视频| 日韩欧美一二三四区| 色婷婷久久久综合中文字幕 | 日韩专区在线视频| 欧美激情综合在线| 精品国产乱码久久久久久蜜臀| 色婷婷av久久久久久久| 精品综合免费视频观看| 日韩国产精品大片| 久久精品国内一区二区三区| 亚洲天堂免费看| 国产日韩精品一区二区三区| 日韩一区二区三| 欧美喷水一区二区| 欧美日韩国产一二三| 91无套直看片红桃| 99精品视频一区二区三区| 国产91露脸合集magnet| 精油按摩中文字幕久久| 国产精品456| 国产91精品久久久久久久网曝门| 国产精品主播直播| 97精品久久久午夜一区二区三区| av在线不卡免费看| 色香蕉成人二区免费| 欧美性受极品xxxx喷水| 69堂国产成人免费视频| 欧美一区二区三区四区五区| 欧美一区二区三区视频免费播放| 在线成人小视频| 精品国产一区二区三区不卡| xnxx国产精品| 精品国产乱码久久| 国产精品福利一区二区| 日精品一区二区三区| 国产一区福利在线| 91黄视频在线| 欧美大片在线观看一区二区| 国产精品水嫩水嫩| 久久国产精品露脸对白| 99久久婷婷国产综合精品| 成人免费视频app| 欧美亚洲一区三区| 欧美精品tushy高清| 国产丝袜欧美中文另类| 亚洲欧美国产三级| 激情小说亚洲一区| 欧美亚洲一区三区| 国产精品视频观看| 国产一区二区成人久久免费影院| 91香蕉视频mp4| 久久精品视频在线免费观看| 一区二区成人在线| eeuss鲁片一区二区三区在线看| 69堂国产成人免费视频| 欧美xxxxxxxxx| 国产视频一区在线播放| 人禽交欧美网站| 久久新电视剧免费观看| 韩国v欧美v日本v亚洲v| 久久综合狠狠综合久久激情| 偷拍自拍另类欧美| 欧美日韩午夜在线视频| 亚洲一区免费观看| 在线播放中文字幕一区| 黄色成人免费在线| 中文字幕免费不卡| 91视频免费看| 亚洲成人av一区| 欧美成人r级一区二区三区| 国产一区二区三区av电影| 久久久久久日产精品| 97se亚洲国产综合自在线 | 成人性生交大片免费看在线播放| 国产精品美女久久福利网站| www.日韩av| 91一区在线观看| 久久aⅴ国产欧美74aaa| 亚洲黄一区二区三区| 欧美日本乱大交xxxxx| 久久99久久99| 一区二区三区 在线观看视频| 日韩一区二区三区观看| 成人app网站| 免费在线观看精品| 夜夜嗨av一区二区三区 | 91亚洲精品久久久蜜桃| 蜜臀av性久久久久av蜜臀妖精| 欧美国产国产综合| 欧美精品粉嫩高潮一区二区| 91色porny在线视频| 国产精品99久久久久久宅男| 男男成人高潮片免费网站| 亚洲精品大片www| 亚洲国产电影在线观看| 日韩精品一区二区三区四区视频| 色综合久久九月婷婷色综合| 国产成人鲁色资源国产91色综 | 国产一区二区三区| 久久国产精品99精品国产| 五月天久久比比资源色| 亚洲国产日韩在线一区模特| 亚洲综合自拍偷拍| 一区二区三区在线看| 福利一区二区在线观看| 成人亚洲一区二区一| 精品亚洲成av人在线观看| 精品一区二区三区香蕉蜜桃 | 99久久婷婷国产综合精品| 波多野结衣中文字幕一区| 国产成人精品影视| 波多野结衣精品在线| 色综合天天狠狠| 色婷婷综合久久久久中文一区二区| 99精品国产热久久91蜜凸| 日本精品裸体写真集在线观看| 99精品久久只有精品| 欧美性极品少妇| 欧美mv日韩mv亚洲| 国产精品美女视频| 亚洲精品欧美在线| 欧美a级理论片| 欧美日韩三级一区| 成人亚洲一区二区一| 北岛玲一区二区三区四区| 制服丝袜一区二区三区| 亚洲精品视频观看| 在线视频观看一区| 久久精品亚洲精品国产欧美| 亚洲国产日韩a在线播放性色| 国产在线精品免费| 日韩限制级电影在线观看| 日韩美女精品在线| 国产成人综合精品三级| 精品理论电影在线观看 | 日韩不卡一二三区| 91视频观看视频| 精品av综合导航| 蜜臀久久久久久久| 91精品国产综合久久香蕉的特点| 亚洲精品伦理在线| av激情综合网| 国产精品黄色在线观看| 高清成人在线观看| 国产精品超碰97尤物18| 国产精品一区久久久久| 精品国产一区二区亚洲人成毛片 | 全部av―极品视觉盛宴亚洲| 欧美伊人久久大香线蕉综合69| 夜夜嗨av一区二区三区四季av | 91丨九色丨尤物| 欧美美女喷水视频| 日韩高清中文字幕一区| 国产欧美日韩亚州综合| 欧美亚洲国产一区二区三区| 美女尤物国产一区| 国产日韩欧美精品综合| 欧美亚洲国产一卡| 激情综合网av| 亚洲一区二区成人在线观看| 日韩精品综合一本久道在线视频|