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

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

?? top.c

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

/*
 * $Log$
 */

#define MAIN

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include "mvd.h"
#include "common.h"
#include "util.h"
#include "debug.h"
#include "buffer.h"
#include "xfer.h"
#include "xport.h"
#include "vp.h"
#include "vcxi.h"
#include "display.h"
#include "huffman.h"
#include "tdm.h"
#include "fsosd.h"
#include "ioport.h"
#include "sysinfo.h"
#include "low.h"
#include "const.h"
#include "dsa.h"
#include "audio.h"
#include "cd.h"
#include "panel.h"

#ifdef SUB_PICTURE
#include "spu/spu.h"
#endif
#ifdef PLAY20 
#include "play.h"
#endif
#ifdef MPEG1
#ifdef SVCD
#include "mpegvid.h"
#else
#include "mpeg1vid.h"
#endif
#else
#include "mpeg2vid.h"
#endif
#ifdef AC3
#include "ac3.h"
#else
#include "mpgaudio.h"
#endif
#ifdef KARAOKE
#include "kara.h"
#endif
#ifdef VSCALE
#include "vscale.h"
#endif
#include "ir.h"
#ifdef FRACTINT
#include "fractint.h"
#endif
#ifdef FADE
#include "fade.h"
#endif
#ifdef SPDIF
#include "spdif.h"
#endif
#ifdef ECHO
#include "echo.h"
#endif

#ifdef REAL_CLOCK
#include "realclk.h"
#endif

#if (CUST3 && !CUST71)
#include "custdsa.h"
#endif

#ifdef DVD_VCD
#include "dsa2ide.h"
#include "talk.h"
#endif

#ifdef MZOOM
#include "mzoom.h"
#endif

#include "timedef.h"
#include "constvar.h"
#include "digest.h"	/* have to include, even we do not use digest. */
#include "pts.h"
#include "zoom.h"
#include "dsc.h"
#include "servo.h"
#include "vcd.h"

#ifdef VCDROM
#include "vcd30.h"
#endif

#ifdef C80
#include "cdconst.h"
#endif

extern int pic_width,pic_height,DISP_screen_on;
extern unsigned char repeat_a2b;

/***************************************************************************
 * Variables local to this module.
 ***************************************************************************/
#ifdef DIGEST_MVD
static int digest_go = 0;
#endif
#ifdef FADE_MVD
static int fade_go = 0;
#endif
int	xfer_mode;
int	b7_already_flushed = 0;

#ifdef VCDROM
unsigned int VCD30_PARAM[16];
unsigned int vcd20_start, vcd20_end, vcd30_cwdloc, vcd30_cwdsz, vcd30_cwdchm;
#endif

#ifdef ZOOM_MVD
static int zoom_go_in = 0;
static int zoom_go_out = 0;
static int zoom_go_left = 0;
static int zoom_go_right = 0;
static int zoom_go_up = 0;
static int zoom_go_down = 0;
#endif

static unsigned int jumpCDtime;
#if defined(DSC_ENABLE_C2PO) && defined(ERROR_CONCEALMENT)
static unsigned int last_check_time = 0;
#endif

#ifdef C80
extern unsigned char cd_presmodu ;
extern void cd_init(void) ;
extern void cd_main(void) ;
extern void s_scor_by_polling(void) ;
extern void cd_senser(void) ;
extern void cd_exchange(void) ;
extern void test_fok(void);
#endif

/***************************************************************************
 Various defines.
 ***************************************************************************/

/***************************************************************************
 Debugging.
 ***************************************************************************/
KEYDEBUGVAR(bad_video, 0);
KEYDEBUGVAR(bad_audio, 0);
KEYDEBUGVAR(bad_kara, 0);

#define PRINTF(a)

KEYDEBUGVAR(dram_at_0, 0);
KEYDEBUGVAR(dram_overwrite, 0);

/***************************************************************************
 Local function prototypes.
 ***************************************************************************/

static void initialization(void);
#ifdef DRAM_GAME
void install_interrupt_vectors(void);
#else
static void install_interrupt_vectors(void); 
#endif
static void wait_huffman_idle(void);
static void TSK_main(void);
static void TSK_decode_audio(void);
static void TSK_decode_video(void);
static void TSK_karaoke(void);
static void TSK_cdda(void);
static void TSK_background(void);
static void TSK_background_high_priority(void);
#ifdef ECHO
static void TSK_echo(void);
#endif
/***************************************************************************
 All low level initialisation.
 ***************************************************************************/
static void initialization()
{
    extern void CUST_init();
    mvd[riface_irqmask] = 0xc000;	/* disable irqs */
    VBV_wrptr = VBV_rdptr = VBV_start = MPEG_VBV_start;
    VBV_size = MPEG_VBV_size;
    PCM_rdptr = PCM_wrptr = PCM_start;
    VBV_end=VBV_start+VBV_size;

#ifdef NEW_EMULATOR
    VCX_init();		/* We are using ROM or emulator? */
#endif

    DISP_screen_on	    = 0;       /* Screen interrupt disabled. */

    LOW_init_rdma();
    LOW_init_buscon();
    LOW_init_dram();
    LOW_init_gateway();
    HUFF_init();
    VP_version();	/* Determine the version number of 3210	*/
    VP_init();
    LOW_init_private_dma();
    install_interrupt_vectors();
    LOW_init_riface();
#ifdef VCDROM
    if (play_clip) {
	mvd[riface_clear_timer2] = 0;       /* clear timer irq */
	mvd[riface_timer2] = timer2_period;
	enable_int(tim2);
    } else
      RISC_start_timer2();
#else
    RISC_start_timer2();
#endif

#ifdef SUB_PICTURE
    SUBPIC_OSD_init();
#else
    OSD_init();
#endif
    PCM_init();
#ifdef KARAOKE
    karaoke_init(&KARAvcd);
#endif 
#ifdef SPDIF
    SPDIF_in_init();
    SPDIF_out_init();
#endif
    LOW_init_audio();
#ifdef SUB_PICTURE
    initial_spu();
#else
    OSD_clear_all();
#endif

#ifdef IR
#ifdef VCDROM
    if (!play_clip)
      IR_init();
    else
      enable_int(debug);
#else
    IR_init();
#endif /* else of VCDROM */
#endif
#ifdef DSC_ENABLE_C2PO
    DSC_init_c2po(1, DSC_RISING_EDGE);
#endif
#if (SERVO || TCSERVO)
    SERVO_init();
#endif

#if (NGAME && PLAY20)
#ifdef SERVO
    NGAME_init(3);
#else
    NGAME_init(2);
#endif
#endif

#ifndef CUST4
#ifdef VCDROM
    if (!play_clip)
      DISP_init();	/* Do this late to minimize garbage */
#else
    DISP_init();	/* Do this late to minimize garbage */
#endif
#endif

#if (PLAYONLY || PLAY20)
    /* Let this be the last one, so AUX pins won't change anymore!! */
    CUST_init();
#endif

#ifdef DSC
    /* 
     * For safety! In case someone changed DSC_SELECT when setting
     * AUX pins, we want to set it back (don't use DSC_getstatus since
     * status may have changed by DSC_init). DSC_toggle uses less code
     * space than DSC_SELECT.
     */
    DSC_toggle();
#endif

    DISP_screen_on	    = 1;
}

/***************************************************************************
 Some hardware, namely the huffman and the VP, can get stuck when there
 is a serious failure somewhere (say because of bad bitstream).
 This routine will reset those hardware. Ideally we should only do this
 when we really need it. Otherwise we should let concealment do its job.
 But then how do we know that we're stuck? The timeout mechanism in
 video and audio decode is one candidate. Should work on this.
 AUD_decode() and VID_decode() should both return an error status.
 An error of -1 means hardware reset is needed. An error of -2 can be
 just ignored.
 ***************************************************************************/
void	hardware_reset(int is_video)
{
    /* Reset the huffman */
    if (is_video) {	/* video error */
	HUFF_reset_state_machine();
    } else {			/* other error */
    	HUFF_reset_output_fifo_and_state();
    }

    /* I don't think the following is done correctly in vp.h */
    VP_cmdq_reset(0);

    /* Reset the VP and reload ucode to DRAM. */
#ifdef VCDROM
    if (VCD_30==1) EVD_VP_init();
    else VP_init();
#else
    VP_init();
#endif

    /* Kill VP buscon DMA. */
    buscon_disable(vp);
}

/***************************************************************************
 Stop everything.
 ***************************************************************************/
/*
 * This routine can be called at pause to dump ABV and PCM data. When
 * restart, it will search for the next audio sync word.
 *
 * Input:
 *	zap -  0: DRAM to audio DMA is not zapped, so don't touch PCM_rdptr
 *		  and don't set PCM_starved.
 *	       1: DRAM to audio DMA zapped. Reset all pointers to PCM_start.
 */
void system_audio_partial_reset(zap)
int zap;
{
    oh_my(7);

    ABV_stop_filling();
    ABV_stop_draining();
    ABV_wrptr = ABV_rdptr = ABV_start;
    ABV_start_filling();

    /* Reset the PCM pointers */
    if (zap) {
	PCM_rdptr = PCM_start;
#ifdef KARAOKE
	PCM_raw_wrptr = PCM_end - (7*384);
	PCM_fake_data = 1;
	PCM_clear_buffer();
#ifdef SPATIAL
	SPA_wrptr = PCM_wrptr = PCM_raw_rdptr = PCM_start;
#else
	PCM_wrptr = PCM_raw_rdptr = PCM_start;
#endif /* SPATIAL */
#else  /* NOT karaoke */
	PCM_raw_wrptr = PCM_start;
#endif /* KARAOKE */
	PCM_starved = 1;
    } else {
	/*
	 * Partial reset (DRAM to DAC DMA is still going on). Don't touch
	 * PCM_rdptr and don't set PCM_starved.
	 *
	 * 1) No karaoke or spatializer: let PCM_rdptr to catch up 
	 *    PCM_raw_wrptr
	 * 2) With karaoke, no spatializer: dump MPEG raw data, let PCM rdptr
	 *    catch up PCM_wrptr automatically.
	 * 3) With karaoke and spatializer: dump MPEG raw data, dump data
	 *    waiting for spatializer processing, let PCM rdptr catch up 
	 *    SPA_wrptr automatically.
	 */
#ifdef KARAOKE
#ifdef SPATIAL
	PCM_raw_wrptr = PCM_raw_rdptr = PCM_wrptr = SPA_wrptr;
#else
	PCM_raw_wrptr = PCM_raw_rdptr = PCM_wrptr;
#endif /* SPATIAL */
#else
	PCM_raw_wrptr = PCM_rdptr;
#endif /* KARAOKE */
    }

    /* Clear zero buffer in case it is overwritten. */
    PCM_clear_zero_buffer();

#ifdef AC3
    AC3_init();
#endif
#ifdef MUSICAM
    AUD_init();
#endif
}


void	system_reset()
{
    oh_my(0xf);

    /* Stop all ABV/VBV activities */
    VBV_ABV_stop_filling();
    VBV_ABV_stop_draining();

    /* Reset the ABV/VBV pointers */
    VBV_wrptr = VBV_rdptr = VBV_start;
    ABV_wrptr = ABV_rdptr = ABV_start;

    /* Stop all PCM activities */
#ifdef VCDROM
    if (!VCD_30) {
#endif
#ifndef ECHO
    PCM_stop_take_out();
#endif

#ifdef ZERO_BUFFER
    system_audio_partial_reset(0);
#else
    system_audio_partial_reset(1);
#endif
#ifdef VCDROM
    }
#endif
    VID_init();

#ifdef VSCALE    
    if (vcx_scn_vscale != 0x10) {
      resetVscale();
    }
#endif    

#if 0
#ifdef ERROR_CONCEALMENT
    VID_error_timeout = 0;
#endif
#endif

    PTS_xsit = -1;
    audio_is_way_ahead = video_is_way_ahead = 0;

#ifdef MPEG1
    end_of_sequence = b7_already_flushed = 0;
#endif
}

/***************************************************************************
 Start everything.
 ***************************************************************************/
void	system_start()
{
    ABV_start_filling();
    VBV_start_filling();

#ifndef ZERO_BUFFER
#ifndef ECHO
    /*
     * With zero buffer, we only do PCM_start_take_out once, then
     * it will be done continously without stopping.
     */
    PCM_start_take_out();
#endif
#endif
}

/***************************************************************************
 Video decoding task.
 ***************************************************************************/
#define switch_huffman_to_video() do {	\
        mvd[huffdec_control] = 0x40c0;	\
	asm("nop"); asm("nop");		\
        mvd[huffdec_control] = 0x4ac0;	\
	mvd[huffdec_packet_counter] = 0x100; \
} while (0)

#define switch_huffman_to_audio() do {	\
        mvd[huffdec_control] = 0x4000;	\
	asm("nop"); asm("nop");		\
        mvd[huffdec_control] = 0x4a00;	\
} while (0)

static void wait_huffman_idle(void)
{
    volatile int stat2, last_stat2;
    int n = 0;
    VP_cmdq_wait_empty;

    while (1) {
    	stat2 = mvd[huffdec_stat2] & 0x1ffff;
	if (stat2 != last_stat2) n=0; else n++;
    	if (n>10) break;
	last_stat2 = stat2;
    }
}

static void	TSK_decode_video(void)
{
    if (vcx_playaudio_only
#ifdef FIXEFM
	|| TDM_skip_sectors
#endif
    ) {
    	VBV_rdptr = VBV_wrptr;
    	/* Need this since huffdec buscon never finish */
    	if (!VBV_filling) VBV_start_filling();
    } else {
	int error_code;
        DBG_mark_current_time(2);
	switch_huffman_to_video();
#ifndef SVCD
        error_code = VID_decode();
#else
        error_code = (mpeg2) ? VID_decode_MPEG2() : VID_decode();
#endif
    	DBG_check_elapsed(2);
#ifdef MPEG1
	if (error_code 
#ifdef ERROR_CONCEALMENT	  
	    || VID_error_concealment
#endif	 
	) {
	    KEYDEBUGINC(1, bad_video);
	    oh_my(1);
	    hardware_reset(1);
#ifdef ERROR_CONCEALMENT	  
	    VID_copy();
#endif	 
#ifdef VSCALE	    
	    /* 
	     * To fix the checker board problem on playing
	     * scratch disc, we re-page the scaling ucode
	     * again if video error found.
	     */
	    if (vcx_scn_vscale != 0x10) {
	    	initVscale(disp_mem_mode);
	    }
#endif	    
#ifdef ERROR_CONCEALMENT	    
	    if (VID_error_concealment) {
		VID_error_concealment = 0;
#if 0	      
		VID_error_timeout = 1;
#endif	      
	    } else
#endif	      
	    {
		VID_init();
	    }
	}
#endif
#ifdef MPEG2
	if (error_code == -1) {
	    hardware_reset(1);
	    VID_init();
	}
#endif
    }
}

/***************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va在线va天堂| 成人免费高清在线| 日本v片在线高清不卡在线观看| 久久久青草青青国产亚洲免观| 日韩亚洲欧美一区二区三区| 日韩一区二区免费在线电影 | 欧美激情在线免费观看| 《视频一区视频二区| 亚洲国产精品久久人人爱| 美美哒免费高清在线观看视频一区二区 | 日日嗨av一区二区三区四区| 国产一区二区三区美女| 成人久久久精品乱码一区二区三区| av高清久久久| 日韩三级中文字幕| 中文字幕av一区二区三区高| 一区二区久久久久久| 国产最新精品精品你懂的| 粉嫩av一区二区三区粉嫩| 欧美色涩在线第一页| 国产欧美日韩在线| 日日噜噜夜夜狠狠视频欧美人| gogogo免费视频观看亚洲一| 欧美日本在线观看| 一区二区三区精品视频在线| 精品写真视频在线观看| 在线亚洲免费视频| 亚洲欧美另类综合偷拍| 国产成人亚洲精品狼色在线| 欧美一区二区三区视频在线| 中文字幕一区二区三区蜜月| 久久精品99国产国产精| 欧美影视一区二区三区| 中文字幕一区二区三区蜜月| 国产精一品亚洲二区在线视频| 欧美老女人第四色| 石原莉奈在线亚洲三区| 欧美色图激情小说| 亚洲激情六月丁香| av在线这里只有精品| 中文字幕一区二区日韩精品绯色| 国产一区二区三区免费| 国产婷婷精品av在线| 成人激情黄色小说| 一区二区在线观看av| 色综合天天性综合| 亚洲综合一区二区精品导航| 欧美性生活大片视频| 日韩在线a电影| 精品国内片67194| 成人综合激情网| 亚洲制服丝袜av| 久久久久久日产精品| 97精品久久久午夜一区二区三区| 一区二区在线观看免费| 欧美一区二区福利在线| 黑人巨大精品欧美一区| 亚洲人成精品久久久久| 91精品国产综合久久福利| 国产精一区二区三区| 日韩女优av电影在线观看| 国产精品美女久久久久久久久久久| 成人一道本在线| 看片网站欧美日韩| 性欧美大战久久久久久久久| 久久久精品欧美丰满| 欧美一区二区精品久久911| 99久久伊人久久99| 国产最新精品免费| 麻豆精品一二三| 亚洲一区视频在线| 亚洲美女免费在线| 中文字幕欧美三区| 久久欧美一区二区| 欧美一级夜夜爽| 欧美二区三区91| 欧美日高清视频| 欧美日韩高清一区二区不卡| 9i在线看片成人免费| 国产精品伊人色| 国产精品一区一区三区| 裸体一区二区三区| 经典三级一区二区| 精品一区二区三区欧美| 久久国产夜色精品鲁鲁99| 男男gaygay亚洲| 精品中文字幕一区二区| 国产在线视频一区二区| 精品一区二区免费视频| 国产福利精品导航| 99久久精品99国产精品| 99在线精品一区二区三区| 色婷婷精品久久二区二区蜜臀av| 91免费版在线| 欧美一区二区三区的| 精品国产乱码久久久久久夜甘婷婷 | 欧美一区二区成人| 久久久久久久久久电影| 日韩一区欧美小说| 日韩和欧美的一区| 国产99久久精品| 在线观看一区日韩| 久久青草国产手机看片福利盒子 | 成人午夜私人影院| 欧美日本一区二区三区| 国产午夜亚洲精品羞羞网站| 亚洲人妖av一区二区| 麻豆精品一区二区三区| 91在线观看美女| 久久久亚洲精品石原莉奈| 亚洲综合在线视频| 成人免费高清视频在线观看| 91精品婷婷国产综合久久性色| 天天av天天翘天天综合网| 成人影视亚洲图片在线| 91精品国产aⅴ一区二区| 亚洲精品国产无天堂网2021| 国产成人小视频| 欧美国产一区二区在线观看 | 欧美三级电影在线观看| 日韩理论在线观看| 成人综合在线视频| 久久免费看少妇高潮| 老司机一区二区| 亚洲精品一区二区在线观看| 天天综合天天做天天综合| 精品视频在线免费看| 国产精品久久综合| 99免费精品在线| 亚洲精品国产第一综合99久久| 成人激情综合网站| 中文字幕中文字幕一区| 91美女片黄在线观看| 亚洲国产精品自拍| 欧美情侣在线播放| 国产在线视频一区二区| 国产丝袜美腿一区二区三区| 高清不卡在线观看| 亚洲一区二区三区中文字幕| 欧美日产在线观看| 国产激情一区二区三区桃花岛亚洲 | 欧美国产精品久久| 在线视频一区二区三| 日本成人在线视频网站| 久久免费看少妇高潮| 在线观看精品一区| 久久99精品久久久久久国产越南 | 精品99久久久久久| 99久久精品费精品国产一区二区| 亚洲激情自拍视频| 久久看人人爽人人| 欧美日韩极品在线观看一区| 高清不卡在线观看| 麻豆精品一区二区综合av| 亚洲欧美色一区| 久久精品视频网| 欧美一区永久视频免费观看| 成人午夜激情影院| 国产精品一卡二卡在线观看| 天堂一区二区在线免费观看| 亚洲欧洲日韩综合一区二区| 日韩女优av电影在线观看| 欧美午夜电影网| av在线综合网| 不卡欧美aaaaa| 丁香激情综合五月| 国产精品影视在线| 精品一区二区国语对白| 视频一区二区三区中文字幕| 亚洲一二三四久久| 日韩毛片一二三区| 亚洲久本草在线中文字幕| 国产欧美久久久精品影院| 一区二区三区四区在线| 中文字幕一区二区三区乱码在线| 色哟哟国产精品免费观看| 一区二区三区日韩欧美| 精品国产电影一区二区| 99热国产精品| 精品亚洲aⅴ乱码一区二区三区| 久久99精品久久久久久久久久久久| 中文字幕日本乱码精品影院| 亚洲区小说区图片区qvod| 国产精品网友自拍| 国产精品久久久久影院色老大| 国产精品三级久久久久三级| 国产精品毛片无遮挡高清| 自拍av一区二区三区| 亚洲精品国产第一综合99久久| 亚洲一线二线三线久久久| 热久久免费视频| 高清不卡在线观看av| 欧美婷婷六月丁香综合色| 欧美精品aⅴ在线视频| 日本韩国欧美三级| 精品日韩99亚洲| 午夜欧美在线一二页| 成人黄色在线看| 久久综合中文字幕| 亚洲国产精品人人做人人爽|