亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美精品一区二区久久婷婷 | 久久影院午夜论| 91亚洲精品久久久蜜桃| 另类小说图片综合网| 日韩激情一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产丶欧美丶日本不卡视频| 精品在线视频一区| 国产一区二区三区四区五区入口| 久久国产精品区| 国产一区欧美二区| 国产99精品国产| 盗摄精品av一区二区三区| 国产经典欧美精品| 99国产一区二区三精品乱码| 91国偷自产一区二区使用方法| 精品婷婷伊人一区三区三| 欧美一区二区三区白人| 久久九九全国免费| 亚洲精品videosex极品| 日韩国产高清在线| 国产成人免费av在线| 一本色道久久综合亚洲91| 欧美性videosxxxxx| 亚洲精品一区二区在线观看| 欧美激情一区二区三区全黄| 一区二区三区视频在线看| 日韩在线卡一卡二| 国产成人精品三级| 在线看不卡av| 日韩免费性生活视频播放| 中文成人综合网| 午夜视频在线观看一区二区| 国产一区二区不卡| 91免费国产在线| 2020日本不卡一区二区视频| 亚洲激情综合网| 国产乱淫av一区二区三区| 欧美亚洲综合久久| 国产视频一区二区在线| 偷窥少妇高潮呻吟av久久免费| 国产一区二三区| 欧美日韩国产一级二级| 国产午夜亚洲精品午夜鲁丝片| 亚洲成a人片在线观看中文| 成人看片黄a免费看在线| 欧美一区二区在线视频| 国产精品传媒入口麻豆| 九九久久精品视频| 欧美日韩在线播放三区| 中文字幕一区二区三| 国产精品自在欧美一区| 在线电影院国产精品| 亚洲另类在线一区| 粉嫩av一区二区三区在线播放| 欧美三级电影一区| 一区二区在线观看视频| 懂色av一区二区三区免费观看| 欧美成人a∨高清免费观看| 亚洲大型综合色站| 在线视频国内自拍亚洲视频| 国产精品久久久久久久久图文区 | 久久精品水蜜桃av综合天堂| 亚洲午夜精品网| 欧美在线观看视频在线| 亚洲精品自拍动漫在线| 91在线观看下载| 中文字幕一区二区三区四区不卡| 国产一区二区成人久久免费影院 | 亚洲第一久久影院| 欧美日韩一区二区不卡| 亚洲影院久久精品| 91久久免费观看| 亚洲一区二区三区在线| 日本高清不卡视频| 一区二区三区国产精品| 91麻豆视频网站| 亚洲日本免费电影| 91在线国产福利| 亚洲国产精品综合小说图片区| 狠狠色丁香九九婷婷综合五月| 欧美mv日韩mv国产网站| 麻豆91免费看| 精品国产乱码久久久久久1区2区| 91精品国产91久久综合桃花 | 国内久久精品视频| 成人黄色一级视频| 欧美日韩综合不卡| 美女视频黄 久久| 99精品视频一区二区| 欧美激情一区二区三区在线| 麻豆精品在线播放| 精品国产91乱码一区二区三区| 久久99精品国产.久久久久| 日韩精品一区二区三区在线播放 | 国产精品自拍网站| 欧美xxx久久| 国内精品免费在线观看| 日本一区二区三区免费乱视频 | 国内久久婷婷综合| 26uuu亚洲| av毛片久久久久**hd| 伊人婷婷欧美激情| 欧美一区二区网站| 国产麻豆精品95视频| 国产精品久久久久婷婷二区次| 91日韩在线专区| 视频一区国产视频| 久久蜜桃一区二区| 色婷婷综合久久久中文一区二区| 亚洲国产视频一区二区| 欧美成人a在线| kk眼镜猥琐国模调教系列一区二区 | 久久99精品国产麻豆婷婷| 国产欧美1区2区3区| 色噜噜狠狠一区二区三区果冻| 日韩专区中文字幕一区二区| 久久精品亚洲乱码伦伦中文| 91片黄在线观看| 日韩电影一区二区三区四区| 国产欧美日韩视频在线观看| 欧美日韩久久不卡| 成人av电影在线| 日韩av中文在线观看| 国产精品女主播av| 6080亚洲精品一区二区| 99免费精品在线观看| 久久国产成人午夜av影院| 精品美女被调教视频大全网站| 99精品欧美一区二区三区综合在线| 青青草国产成人av片免费| 亚洲丝袜制服诱惑| 久久在线免费观看| 日韩一区二区在线看片| 日本精品裸体写真集在线观看| 国产精品69毛片高清亚洲| 日韩精品成人一区二区在线| 国产精品久久久久久久岛一牛影视| 精品日韩一区二区三区| 欧美色大人视频| 99久久国产综合色|国产精品| 国产一区二区不卡在线| 另类综合日韩欧美亚洲| 亚洲成人av电影在线| 亚洲综合区在线| 亚洲欧美激情视频在线观看一区二区三区| 久久综合久久鬼色中文字| 欧美一卡二卡在线观看| 欧美日韩一级黄| 欧美亚洲免费在线一区| 色狠狠一区二区| 91网址在线看| 色综合久久久久久久| 99久久精品免费看国产免费软件| 国产盗摄女厕一区二区三区| 黄页视频在线91| 精品一区二区成人精品| 久久99精品国产麻豆婷婷| 黄色资源网久久资源365| 久久精品国产99| 另类综合日韩欧美亚洲| 久久成人免费日本黄色| 加勒比av一区二区| 国产精品一卡二| 成人av网站在线观看免费| 成人白浆超碰人人人人| 91片黄在线观看| 欧美日韩二区三区| 日韩精品最新网址| 久久久久亚洲蜜桃| 国产精品毛片a∨一区二区三区| 中文字幕欧美激情一区| 国产精品女同一区二区三区| 亚洲日本青草视频在线怡红院 | 欧美日韩高清在线播放| 欧美三电影在线| 亚洲精品一线二线三线 | 国产激情一区二区三区四区| 国产成人高清在线| 日本久久精品电影| 欧美一区二区三区小说| 国产视频一区二区三区在线观看 | 欧美性大战久久| 日韩欧美一区二区三区在线| 国产性做久久久久久| 亚洲美女电影在线| 另类小说色综合网站| 不卡欧美aaaaa| 日韩写真欧美这视频| 国产亚洲欧美色| 亚洲精品久久嫩草网站秘色| 久久99深爱久久99精品| a美女胸又www黄视频久久| 欧美一区二区在线看| 日本一区二区不卡视频| 日韩高清不卡一区| 91视频国产资源| 2023国产精华国产精品| 亚洲高清一区二区三区| 高清beeg欧美|