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

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

?? gamectrl.c

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

/*
 * This is based on version 1.307 of top.c
 * Also merged in contents from dsc.c, int.c, ir.c, ngame.c and util.c
 */

#define MAIN

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include "mvd.h"
#include "common.h"
#include "util.h"
#include "debug.h"
#include "ioport.h"
#include "ir.h"
#include "constvar.h"
#include "timedef.h"
#include "const.h"
#include "keydef.h"
#ifdef DSC
#include "dsc.h"
#endif

/* Use these absolue address to pass parameters between VCD code and game */
#define GAME_TYPE               0x8020
#define GAME_PARAMETER          0x8024
#define GAME_ECHO               0x8028

/***************************************************************************
 * Variables local to this module.
 ***************************************************************************/
unsigned long vcx_romdatastart = 0;
int which_game;
int Jump_addr;
unsigned int save_buscon_dma_scale_type;

/* Dummy variables to foo compiler */
int VCD_30;
int track_list;
ushort *hex2bcd;

/* Dummy functions to foo compiler */
int  preprocess_digit_key(int num, int *ignore_key, int ten_key);
void preprocess_function_key(int key);
int  vcd30_key_preprocess(int);

#ifdef NGAME_PARALLEL_PORT
unsigned int mirror;
void NGAME_control(int, unsigned char);
#else
unsigned int mirror_mapper;
void NGAME_control(unsigned short);
#endif

/***************************************************************************
 Various defines.
 ***************************************************************************/
#define RUN_REAL_GAME		0x0
#define RUN_RAM_CLEAR		0x1
#define RUN_BIG_GAME		0x2

#ifdef NGAME_PARALLEL_PORT
#define NGAME_DOWNLOAD          0x03     /* Download, VCD, reset         */
#define NGAME_RUNGAME           0x04     /* RunGame, game, run           */
#define NGAME_RESET             0x05     /* RunGame, game, reset         */
#define NGAME_RUNPROGRAM        0x06     /* RunGame, VCD, run            */
#define NGAME_OFFSET_0		0x00     /* where we put game code       */
#define NGAME_OFFSET_1		0x04     /* where we put game code       */
#define NGAME_OFFSET_2		0x08     /* where we put game code       */
#define NGAME_OFFSET_3		0x0c     /* where we put game code       */

#define VCD_VIDEO_OUT		0x10
#else
#define RESET_GAME		0x0000
#define RUN_GAME		0x8000
#define OFFSET_0		0x0000
#define OFFSET_1		0x2000
#define OFFSET_2		0x4000
#define OFFSET_3		0x6000
#define VCD_VIDEO		0x0100
#define GAME_VIDEO		0x0000
#endif	/* NGAME_PARALLEL_PORT */

#ifdef NGAME_PARALLEL_PORT
#define SWITCH_VIDEO_TO_GAME	CLEAR_EAUX8
#define SWITCH_VIDEO_TO_VCD	SET_EAUX8
#else
#define SWITCH_VIDEO_TO_GAME
#define SWITCH_VIDEO_TO_VCD
#endif

/***************************************************************************
 Debugging.
 ***************************************************************************/

#define PRINTF(a)

/***************************************************************************
Imported variables
 ***************************************************************************/

/***************************************************************************
 Local function prototypes.
 ***************************************************************************/
static void initialization(void);
static void install_interrupt_vectors(void);
static int *mem_shrink(int *, int*, int, int, int);
static int *mem_expand(int *, int*, int, int, int);

/* Dummy functions to link with microvfd.o */
int preprocess_digit_key(int num, int *ignore_key, int ten_key)
{
}

void preprocess_function_key(int key)
{
}

int  vcd30_key_preprocess(int x)
{
}

/***************************************************************************
 All low level initialisation.
 ***************************************************************************/
static void initialization()
{
    mvd[riface_irqmask] = 0xc000;	/* disable irqs */

    install_interrupt_vectors();
    RISC_start_timer2();

#ifdef IR
    IR_init();
#endif


#ifdef NGAME
    /* Tristate BUSCON DMA bus before going to game */
    save_buscon_dma_scale_type = mvd[buscon_dma_scale_type];
    mvd[buscon_dma_scale_type] = save_buscon_dma_scale_type | 0x80;

    /* Disable all BUSCON DMA */
    mvd[buscon_dma_disable] = 0x3fffff;

    if (which_game != RUN_RAM_CLEAR) {
	int offset;
	if (which_game == RUN_REAL_GAME)
	    offset = OFFSET_3;
	else
	    offset = OFFSET_0;		/* For big game(256K) */
	/* Run real game and switch Video output */
#ifdef NGAME_PARALLEL_PORT
    	NGAME_control(0, NGAME_RUNGAME | mirror);
#else
	NGAME_control(RUN_GAME | offset | GAME_VIDEO | (mirror_mapper << 9));
#endif
    	SWITCH_VIDEO_TO_GAME;
    }
    else {
	/* Run NGAME_ram_clear() only, do NOT switch video */
#ifdef NGAME_PARALLEL_PORT
    	NGAME_control(0, NGAME_RUNGAME | VCD_VIDEO_OUT);
#else
	NGAME_control(RUN_GAME | OFFSET_3 | VCD_VIDEO);
#endif
    }
#endif

}


/***************************************************************************
 The main entry point.
 ***************************************************************************/
main()
{
    int echo_on;
    /* ******** RISC and register setups ******** */
    register int psw_shadow = 0xc3;
    asm volatile("movtos %0,psw" :  :"r" (psw_shadow) );
    mvd = (int *)OMNI_BASE;

    vcx_romdatastart += 0x60;	/* 6 commands occupy 0x60B */
    hex2bcd = T_hex2bcd;
    running_game = 1;

#ifdef MKROM
    /* Chip version detected in startup.s; 0xc3 at 0 means 3210 */
    mvd_version = (*((int *)(dram(0))) == 0xc3) ? 0x3210 : 0x3208;
#endif


#ifdef DSC
    DSC_getstatus();
#endif

    which_game = *(int *)GAME_TYPE;

    echo_on = *(int *)GAME_ECHO;

#ifdef NGAME_PARALLEL_PORT
    mirror = *(unsigned int *)GAME_PARAMETER;
#else
    mirror_mapper = *(unsigned int *)GAME_PARAMETER;
#endif

    if (which_game == RUN_BIG_GAME) {
	/* Save VCD data, stack, buffers to even bytes - *
	 * - check with memmory map to see what needs to be saved */
	mem_expand((int *)0x10000000, (int *)0x10014000, 0x2400/4, 1, 1);
	mem_expand((int *)0x1000f400, (int *)0x10018800, 0x4400/4, 1, 1);
	/* Expand game data to odd bytes -- 			*
	 * since game data is from 0x10030000 to 0x1006fffc, so	*
	 * we have to expand in two times to avoid overwriting 	*/
	mem_expand((int *)0x10030000, (int *)0x10000000, 0x30000/4, 1, 0);
	mem_expand((int *)0x1006fffc, (int *)0x1007fffc, 0x10000/4, 0, 0);
    }

    initialization();

#if (DSC && ECHO_ANALOG_BYPASS)
    /* Enable analog bypass if it is not enabled yet*/
    if ((echo_on == -1) && (which_game != RUN_RAM_CLEAR)) {
	unsigned int adc2 = 0x20;
	unsigned int shadow_audioxmt1 = 0x69;
	adc2 |= 0x8;
	DSC_cmd(dsc_audioadc2, adc2);
	shadow_audioxmt1 &= 0xbf;       /* Disable zero_mute            */
	DSC_cmd(dsc_audioxmt1, shadow_audioxmt1);
    }
#endif

    DBG_allocate_trace_buffer();

    initMicroObject();
    while (1) {
	static int timer;
	int timeout = 0, i, tmp, key;

	/* Since there is no video interrupt, we have to *
	 * simulate updating glbTimer 50-60 times per second */
	timer ++;
	if (timer == 200) {
	    timer = 0;
	    glbTimer ++;
	}

	microEngine();
	tmp = get_keycode();
	if (tmp != -1)
	    key = tmp & 0xff;

	if (which_game == RUN_RAM_CLEAR) {
	    /* Wait for it to finish */
	    for (i = 0; i < 2000000; i++) ;
	    timeout = 1;
	}
	if (key == STOP_KEY || key == POWER_KEY || timeout) {
#ifdef  NGAME_PARALLEL_PORT
            NGAME_control(0, NGAME_DOWNLOAD);
#else
	    NGAME_control(RESET_GAME | VCD_VIDEO);
#endif

	    /* Reenable BUSCON DMA bus after game is done */
    	    mvd[buscon_dma_scale_type] = save_buscon_dma_scale_type & (~0x80);
	    /* Enable all BUSCON DMA */
	    mvd[buscon_dma_disable] = 0;

	    if (which_game == RUN_BIG_GAME) {
		/* Restore VCD data, stack, buffer from even bytes */
		mem_shrink((int *)0x10014000, (int *)0x10000000,
			   0x2400/4*2, 1, 1);
		mem_shrink((int *)0x10018800, (int *)0x1000f400,
			   0x4400/4*2, 1, 1);
	    }
	    if (key == POWER_KEY)
		*(int *)GAME_PARAMETER = 1;	/* Tell VCD to power off */
	    else
		*(int *)GAME_PARAMETER = 0;
#if (DSC && ECHO_ANALOG_BYPASS)
	    /* Disable analog bypass if we didn't turn it on in VCD mode */
	    if ((echo_on == -1) && (which_game != RUN_RAM_CLEAR)) {
		unsigned int shadow_audioxmt1 = 0x69;
		DSC_cmd(dsc_audioadc2, 0x0); /* cause soft reset adc	*/
		shadow_audioxmt1 |= 0x40;       /* Enable zero_mute  */
		DSC_cmd(dsc_audioxmt1, shadow_audioxmt1);
	    }
#endif
	    SWITCH_VIDEO_TO_VCD;

	    asm("ld    _Jump_addr[r25],r2");
	    asm("jspci r2,#0,r0");
	    asm("nop");
	    asm("nop");
 	}
#ifdef VCD
	VCX_service();
#endif
    }
}

/***************************************************************************
 Misc interrupt handling.
 ***************************************************************************/
extern void trap0;
static int *trapptr0 = &trap0;

static void install_interrupt_vectors()
{
    int *a, *b, i;

#ifdef MKROM
    b = (int*)((int)trapptr0<<2);
#else
    b = (int*)((int)trapptr0);
#endif
    /* 
     * The DWORD at 0x18 is used for resume!!
     * The DWORD at 0x1c is used for real-time clock!! 
     *
     * Don't read 0x10 to 0x1f, they meant to be noncachable.
     */
    for (a = (int*)0, i = 0; i < 4; i++) *a++ = *b++;
}

/**************** This part is from version 1.63 of util.c ******************/

/*
 * 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, INTERVAL and multiplication factors are both
 * set to 1024 instead of 1000.
 */
#define INTERVAL	500	/* In msec (i.e. timer will be .5 sec)	*/

/************************************************************************
 Timer2 interrupt service.
 ************************************************************************/
void RISC_timer2_interrupt_service(void)
{

    mvd[riface_clear_timer2] = 0;      	/* clear timer irq */
    /* Timer reloaded automatically */
    
#ifdef DSC
    DSC_toggle();	/* Tell 3207 that we are not dead! */
#endif
}

/**************************************************************************
 Start timer2.
 **************************************************************************/
void RISC_start_timer2(void)
{
    timer2_period = 0x0 - (INTERVAL * CPUCLK * 100);

    mvd[riface_clear_timer2] = 0;      	/* clear timer irq */
    mvd[riface_timer2] = timer2_period;
    enable_int(tim2);
}

/**************** This part is from version 1.5 of ngame.c ******************/

/*
 * Use this routine to control the game module
 *
 * Input
 *	port:	0 is for CTL0 (i.e. admin stuff)
 *		1 is for CTL1 (i.e. remote control input)
 *
 *	data:	Data to be sent.
 */
#ifdef NGAME_PARALLEL_PORT
void NGAME_control(port, data)
int port;
unsigned char data;
{
    register volatile unsigned char * ctlptr;
    ctlptr = (unsigned char *) x18000000;

    ctlptr += port;
    *ctlptr = data;
}
#else
void NGAME_control(data)
unsigned short data;
{
    register volatile unsigned char * ctlptr;
    int i;

    ctlptr = (unsigned char *) x18000000;
    *ctlptr ++ = 0;
     
    for (i = 0; i < 16; i++) {
	*ctlptr = data;
	data >>= 1;	 
    }
}
#endif

/***************** This part is from version 1.86 of dsc.c *****************/

/************************************************************************
 * Local defines.							*
 ************************************************************************/
#ifdef DVD_VCD
#define	DSC_SELECT		SET_AUX0
#define	DSC_DESELECT		CLEAR_AUX0
#else
#define	DSC_SELECT		SET_AUX5
#define	DSC_DESELECT		CLEAR_AUX5
#endif

/************************************************************************
 * Following defines are valid for 3207VA or later chips.		*
 ************************************************************************/
#ifdef DSC_DITHER
#define	AUDIORCV1_DITHER	0x4
#else
#define	AUDIORCV1_DITHER	0
#endif

#ifdef DSC_FLIP_VPOWER
#define	DVECTL3_VIDEO_OFF	1
#define	DVECTL3_VIDEO_ON	0
#else
#define	DVECTL3_VIDEO_OFF	0
#define	DVECTL3_VIDEO_ON	1
#endif

#ifdef DSC_MUTE_ZERO
#define	AUDIOXMT1_MUTE_ZERO	0x40
#else
#define	AUDIOXMT1_MUTE_ZERO	0
#endif

#ifdef DSC_ANALOG_PLL
#define	AUDIOACNT0H_ANALOG_PLL	0x90
#else
#define	AUDIOACNT0H_ANALOG_PLL	0
#endif

#ifdef DSC_DETECT_CENTER
#define	AUDIOADC2_DETECT	0
#else
#define	AUDIOADC2_DETECT	0x40
#endif


/************************************************************************
 * Variables used in this module only.					*
 ************************************************************************/
PRIVATE	unsigned int	shadow_eaux0_dat;	/* Shadow for dsc_aux0_dat */
PRIVATE	unsigned int	shadow_eaux1_dat;	/* Shadow for dsc_aux1_dat */
PRIVATE	unsigned int	shadow_eaux0_ctl;	/* Shadow for dsc_aux0_ctl */
PRIVATE	unsigned int	shadow_eaux1_ctl;	/* Shadow for dsc_aux1_ctl */
PRIVATE	unsigned int	shadow_cchip_ctl;	/* Shadow for dsc_cchip_ctl*/

#ifdef DSC_IRQ
PRIVATE unsigned int    shadow_irq_ctl;         /* Shadow for dsc_irq_ctl  */
PRIVATE unsigned int    shadow_aux_mode;        /* Shadow for dsc_aux_mode */
#endif

/* 
 * This routine has to be called before all DSC routine.
 *
 * This routine will set DSC select. Then it will only be toggled in
 * timer interrupt.
 */
void DSC_getstatus()
{
    DSC_toggle();
    DSC_status = DSC_STATUS_RUNNING;
    DSC_cmd(dsc_watchdog, 0xf2);
}


/*
 * Toggle DSC_S (a convention to tell 3207 that 3210 is still alive, so
 * it will not be reset accidentally.)
 *
 * We can't toggle DSC_S in the middle of communication, and this

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产免费久久| 日韩一级欧美一级| ww亚洲ww在线观看国产| 粉嫩13p一区二区三区| 久久精品久久99精品久久| 99精品视频在线播放观看| 欧美一级免费大片| 亚洲色欲色欲www在线观看| 99精品国产一区二区三区不卡| 在线精品国精品国产尤物884a| 国产日韩亚洲欧美综合| 亚洲6080在线| 在线播放一区二区三区| 久久综合色天天久久综合图片| 26uuu精品一区二区| 久久久蜜臀国产一区二区| 一区二区三区欧美日| 成人一区二区三区视频在线观看| 欧美电影免费观看高清完整版| 亚洲国产欧美另类丝袜| av欧美精品.com| 中文字幕av一区二区三区高| 久久99这里只有精品| 欧美日韩国产成人在线免费| 亚洲天天做日日做天天谢日日欢 | 国产成人综合亚洲网站| 欧美日韩精品一区视频| 亚洲一区中文日韩| 一道本成人在线| 国产精品区一区二区三区| 蜜桃视频一区二区| 日韩一区二区在线观看视频| 日韩国产欧美在线观看| 色播五月激情综合网| 国产精品天天看| 成人午夜电影久久影院| 久久精品一区二区三区不卡| 韩国av一区二区三区| 337p日本欧洲亚洲大胆精品| 久久激五月天综合精品| 91精品国产91久久久久久最新毛片| 午夜精品影院在线观看| 欧美日韩成人综合天天影院| 午夜精品影院在线观看| 欧美日韩亚洲高清一区二区| 亚洲成人av资源| 欧美日韩久久久| 婷婷综合久久一区二区三区| 欧美久久一二三四区| 亚洲电影在线免费观看| 欧美日韩国产综合一区二区| 亚洲国产视频在线| 欧美二区在线观看| 久久精品国产成人一区二区三区 | 9色porny自拍视频一区二区| 精品美女一区二区| 国产乱码精品一区二区三区忘忧草| 久久精品一区二区三区四区| 精品夜夜嗨av一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品一品视频| 国产精品水嫩水嫩| 色婷婷综合久久久中文字幕| 偷拍日韩校园综合在线| 精品成人一区二区| 成人亚洲精品久久久久软件| 国产精品第四页| 欧美无人高清视频在线观看| 秋霞电影网一区二区| 久久蜜桃av一区二区天堂 | 蜜桃视频在线观看一区| 久久综合九色综合97婷婷| 成人午夜视频网站| 亚洲视频小说图片| 7777精品伊人久久久大香线蕉超级流畅| 麻豆一区二区三| 国产农村妇女毛片精品久久麻豆 | 欧美精品自拍偷拍动漫精品| 日韩av二区在线播放| 久久婷婷综合激情| 成人精品免费看| 亚洲成人免费观看| 26uuu国产电影一区二区| 成人h动漫精品一区二| 亚洲二区视频在线| 久久久噜噜噜久久人人看| 一本一道久久a久久精品| 日本免费新一区视频| 国产欧美视频一区二区| 欧美日韩国产影片| 韩国欧美国产1区| 亚洲人123区| 在线成人av网站| 亚洲国产精品久久不卡毛片| 亚洲一区二区在线视频| 一区二区三区国产豹纹内裤在线| 久久精品久久久精品美女| 亚洲精品国产a久久久久久| 精品免费日韩av| 欧美一级在线免费| 欧美成人激情免费网| 精品国产伦一区二区三区观看方式| 精品国产凹凸成av人网站| 国产色91在线| 国产一区二区三区不卡在线观看| 亚洲欧美影音先锋| 欧美日韩国产高清一区二区三区 | 日韩精品在线网站| 97aⅴ精品视频一二三区| 免播放器亚洲一区| 亚洲欧美激情一区二区| 久久综合国产精品| 欧美色综合天天久久综合精品| 国产一区二区三区久久久 | 精品欧美久久久| 欧美在线一区二区三区| 国产精品亚洲午夜一区二区三区| 亚洲国产综合色| 国产精品午夜电影| 亚洲精品一线二线三线| 欧美日韩国产免费一区二区 | 国产凹凸在线观看一区二区| 亚洲成av人片观看| 综合精品久久久| 久久久精品中文字幕麻豆发布| 欧美一二三在线| 欧美日韩免费视频| 99久久免费国产| 国产a级毛片一区| 精品一区二区三区免费| 日韩精品一级中文字幕精品视频免费观看 | 91麻豆精品国产综合久久久久久 | 奇米在线7777在线精品| 一区二区三区四区蜜桃 | 欧洲国内综合视频| 粉嫩av一区二区三区在线播放 | 丝袜诱惑制服诱惑色一区在线观看| 国产精品久久久久久久久免费相片| 精品剧情在线观看| 欧美一级欧美三级在线观看| 欧美三级午夜理伦三级中视频| www.成人网.com| 国产精品1区二区.| 国模一区二区三区白浆| 日韩一区欧美二区| 香蕉久久一区二区不卡无毒影院 | 中文字幕免费在线观看视频一区| 欧美mv和日韩mv国产网站| 欧美一级专区免费大片| 337p亚洲精品色噜噜狠狠| 欧美中文字幕一区二区三区亚洲| 色美美综合视频| 91日韩精品一区| 93久久精品日日躁夜夜躁欧美| 成a人片国产精品| 成人sese在线| 成人福利视频在线看| 成人自拍视频在线观看| 懂色av中文字幕一区二区三区| 国产乱码精品一区二区三区忘忧草| 国产乱码精品一品二品| 懂色av一区二区三区免费观看| 国产jizzjizz一区二区| 高清在线不卡av| 免费在线成人网| 久久久久久久国产精品影院| 亚洲国产日日夜夜| 亚洲激情第一区| 国产精品激情偷乱一区二区∴| 国产拍揄自揄精品视频麻豆 | 国产.精品.日韩.另类.中文.在线.播放 | 欧美伊人久久久久久久久影院 | 成人精品小蝌蚪| 99精品在线免费| 日韩一级完整毛片| 99vv1com这只有精品| 国产精品色噜噜| 国产日韩欧美精品一区| 亚洲激情六月丁香| 亚洲精品水蜜桃| 亚洲裸体xxx| 亚洲视频免费观看| 亚洲最新视频在线观看| 日本在线不卡一区| 亚洲成人免费av| 一区在线播放视频| 亚洲综合精品自拍| 蜜桃av一区二区在线观看| 国精品**一区二区三区在线蜜桃| 成人午夜在线播放| 91福利视频网站| 欧美大片在线观看| 中文幕一区二区三区久久蜜桃| 成人欧美一区二区三区白人| 亚洲1区2区3区4区| 日韩激情一区二区| 国产成人8x视频一区二区| 91福利精品第一导航| 91精品国产综合久久小美女| 久久久久久久网|