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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? skyeye_mach_ps7500.c

?? skyeye是一個可以模擬嵌入式硬件開發(fā)板的系統(tǒng)軟件
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*	skyeye_mach_ps7500.c - define machine ps7500 for skyeye	Copyright (C) 2003 Skyeye Develop Group	for help please send mail to <skyeye-developer@lists.gro.clinux.org>		This program is free software; you can redistribute it and/or modify	it under the terms of the GNU General Public License as published by	the Free Software Foundation; either version 2 of the License, or	(at your option) any later version.	This program is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU General Public License for more details.	You should have received a copy of the GNU General Public License	along with this program; if not, write to the Free Software	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  *//* * 3/2005 	init this file. * 		add machine ps7500's function. Most taken from original armio.c.  * 		include: ps7500_mach_init, ps7500_io_do_cycle * 		ps7500_io_read_word, ps7500_io_write_word *		Most taken from skyeye_mach_ep7312.c		 * */#include "armdefs.h"#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include "ps7500.h"/* 2007-01-18 added by Anthony Lee : for new uart device frame */#include "skyeye_uart.h"extern int skyeye_net_maxfd;extern int skyeye_net_on;#define TC_DIVISOR	(32)	/* Set your BogoMips here :) */#define FLYBACK_DIVISOR	(1000000)#define SOMETIMES_DIVISOR (100)#define NET_ADDR_START	0x03010C00#define NET_ADDR_END	(NET_ADDR_START +  0x00000400)#define IOMD_ADDR_START	0x03200000#define IOMD_ADDR_END	(IOMD_ADDR_START + 0x00001000)#define VIDEO_ADDR	0x03400000//zzc:2005-1-1#ifdef __CYGWIN__#include <sys/time.h>#endif#define PC (state->Reg[15])#define DEBUG 1#if DEBUG#define DBG_PRINT(a...) fprintf(stderr,##a)#else#define DBG_PRINT(a...)#endif/*Internal IO Register*/typedef struct ps7500_io {	ARMword		flyback;	ARMword		prescale;	ARMword		sometimes;	ARMbyte		irq[5], irqmask[5];	ARMbyte		fiq[1], fiqmask[1];	ARMbyte		iocr_write;	ARMbyte		iocr_read;		ARMword		tcd_reload[2];		/* Timer load register */	ARMword		tcd[2];			/* Timer data */	int		tc_prescale;		/* Timer prescale */	ARMword		vidstart, vidend, vidinit;	ARMbyte		vidcr;		ARMword		lcd_is_enable;	ARMword		lcd_addr_begin;	ARMword		lcd_addr_end;	ARMword		ts_int;	ARMword		ts_is_enable;	ARMword		ts_addr_begin;	ARMbyte		net_int[5];	ARMword		net_flag;		ARMbyte		kb_stat;	ARMbyte		kb_data;	ARMbyte		kb_queued[4096];	ARMword		kb_count;	ARMbyte		kb_delay;		ARMbyte		lcd_started;		} ps7500_io_t;static ps7500_io_t ps7500_io;#define io ps7500_io// Macros for setting/clearing interrupt bits// I used an array since there were more than 32 interrupt sources//    and so it didn't fit in a ARMword.   Thus, the network interrupt//    source must be less than 32.#define SET_BIT(v, x)	(v)[(x) / 8] |= (1 << ((x) % 8))#define CLR_BIT(v, x)	(v)[(x) / 8] &= ~(1 << ((x) % 8))#define SET_IRQ(x)	SET_BIT(io.irq, x); ps7500_update_int(state)#define CLR_IRQ(x)	CLR_BIT(io.irq, x); ps7500_update_int(state)#define SET_IRQMASK(x)	SET_BIT(io.irqmask); ps7500_update_int(state)#define CLR_IRQMASK(x)	CLR_BIT(io.irqmask); ps7500_update_int(state)#define SET_FIQ(x)	SET_BIT(io.fiq, x); ps7500_update_int(state)#define CLR_FIQ(x)	CLR_BIT(io.fiq, x); ps7500_update_int(state)#define SET_FIQMASK(x)	SET_BIT(io.fiqmask, x); ps7500_update_int(state)#define CLR_FIQMASK(x)	CLR_BIT(io.fiqmask, x); ps7500_update_int(state)// Indexes into IRQ array.   This must match IRQ numbers in ps7500.h#define IRQA		0	#define IRQB		1#define IRQDMA		2#define IRQC		3#define IRQD		4#define FIQ		0extern ARMul_State * state;ARMbyte ps7500_getcode(ARMbyte);static void ps7500_update_int(ARMul_State *state){	int i;		//if (io.irq[IRQB] & io.net_int[IRQB]) {	//	printf("Network interrupt set\n");	//	for (i=0; i < 5; i++) {	//		printf("IRQ[%d] %02x IRQMASK[%d] %02x\n", 	//			i, io.irq[i], i, io.irqmask[i]);	//	}	//}				state->NfiqSig = (io.fiq[FIQ] & io.fiqmask[FIQ]) ? LOW : HIGH;   	state->NirqSig = 		((io.irq[IRQA] & io.irqmask[IRQA]) ||		 (io.irq[IRQB] & io.irqmask[IRQB]) ||		 (io.irq[IRQC] & io.irqmask[IRQC]) ||		 (io.irq[IRQD] & io.irqmask[IRQD]) ||		 (io.irq[IRQDMA] & io.irqmask[IRQDMA])) ? LOW : HIGH;		 }/*  *  added some functions for device simulation by ksh *  */static voidps7500_set_intr (u32 interrupt){	//io.irq |= (1 << interrupt);	SET_IRQ(interrupt);}static intps7500_pending_intr (u32 interrupt){	return io.irq[interrupt];}static voidps7500_update_intr (void *mach){	struct machine_config *mc = (struct machine_config *) mach;	ARMul_State *state = (ARMul_State *) mc->state;	        state->NfiqSig = (io.fiq[FIQ] & io.fiqmask[FIQ]) ? LOW : HIGH;        state->NirqSig =                ((io.irq[IRQA] & io.irqmask[IRQA]) ||                 (io.irq[IRQB] & io.irqmask[IRQB]) ||                 (io.irq[IRQC] & io.irqmask[IRQC]) ||                 (io.irq[IRQD] & io.irqmask[IRQD]) ||                 (io.irq[IRQDMA] & io.irqmask[IRQDMA])) ? LOW : HIGH;}static void ps7500_io_reset(ARMul_State *state){	int i;		for (i=0; i < 4; i++)		io.irqmask[i] = io.irq[i] = 0;	io.fiqmask[FIQ] = io.fiq[FIQ] = 0;	io.irq[IRQA] = 0x80;			// SWI bit always true	io.tcd[0] = io.tcd[1] = 0xffff;	io.tcd_reload[0] = io.tcd_reload[1] = 0xffff;	io.tc_prescale = TC_DIVISOR;		io.lcd_addr_begin  	=0x10000000;	io.lcd_addr_end   	=0x10004000;		SET_BIT(io.net_int, IRQ_INT5);		// Network interrupt bit		printf("netint %02x\n", io.net_int[IRQB]);		io.sometimes = SOMETIMES_DIVISOR;		io.lcd_started = 0;			//state->Exception = TRUE;}ps7500_kb_queue(ARMul_State *state, ARMbyte c){	io.kb_queued[io.kb_count++] = c;		if ((io.kb_stat & (KB_TXB | KB_RXF)) == 0)		ps7500_kb_next(state);}ps7500_kb_next(ARMul_State *state){	int i;	int p;		if (io.kb_count) {		io.kb_data = io.kb_queued[0];		p = 0;		for (i=0; i < 8; i++) 			if (io.kb_data & (1 << i))				p++;		if (p % 2) 			io.kb_stat &= ~KB_RXP;		else			io.kb_stat |= KB_RXP;		io.kb_stat |= KB_RXF;		SET_IRQ(IRQ_KEYBOARDRX); 		io.kb_count--;		if (io.kb_count)			for (i=0; i < io.kb_count; i++) 				io.kb_queued[i] = io.kb_queued[i+1];	}}void ps7500_uart_cycle(ARMul_State *state){	/* 2007-01-18 modified by Anthony Lee : for new uart device frame */	struct timeval tv;	unsigned char buf, c;	tv.tv_sec = 0;	tv.tv_usec = 0;	if(skyeye_uart_read(-1, &buf, 1, &tv, NULL) > 0)	{	    printf("read something %02x\n", buf);	    c = ps7500_getcode(buf);	    ps7500_kb_queue(state, c);	    ps7500_kb_queue(state, 0xf0);	    ps7500_kb_queue(state, c);	}}void ps7500_io_do_cycle(ARMul_State *state){	int t;		// Timers		io.tc_prescale--;	if (io.tc_prescale < 0) {		io.tc_prescale = TC_DIVISOR;		// 64 Mhz -> 2 Mhz 		for (t=0; t < 2; t++) {			if (io.tcd[t] == 0) {				io.tcd[t] = io.tcd_reload[t];				//DBG_PRINT("Timer %d interrupt\n", t);				SET_IRQ(t ? IRQ_TIMER1 : IRQ_TIMER0);			} else {				io.tcd[t]--;			}		}	}		io.iocr_write |= 0x80;		// Flyback bit always true		// VSYNC pulse interrupt 		if (io.flyback == 0) {		io.flyback = FLYBACK_DIVISOR;		//DBG_PRINT("Flyback interrupt\n");		SET_IRQ(IRQ_VSYNCPULSE);	} else {		io.flyback--;	}		// Make sure SWI interrupt bit stays set	if ((io.irq[IRQA] & 0x80) == 0) {			io.irq[IRQA] |= 0x80;		ps7500_update_int(state);	}		// Keyboard	if (io.kb_delay != 0) {		io.kb_delay--;		if (io.kb_delay == 0) {			io.kb_stat &= ~KB_TXB;			io.kb_stat |= KB_TXE;			SET_IRQ(IRQ_KEYBOARDTX);			ps7500_kb_next(state);		}	}		if (io.sometimes == 0) {		ps7500_uart_cycle(state);		io.sometimes = SOMETIMES_DIVISOR;	} else {		io.sometimes--;	}		}ARMword ps7500_io_read_byte(ARMul_State *state, ARMword addr){	ARMword data = 0;	ARMword offset;	if ((addr >= IOMD_ADDR_START) && (addr < IOMD_ADDR_END)) {		offset = addr - IOMD_ADDR_START;		switch (offset) {				case IOMD_CONTROL:			data = io.iocr_write | io.iocr_read;			//DBG_PRINT("@0x%08x: IOCR(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;					case IOMD_IRQMASKA:			data = io.irqmask[IRQA];			//DBG_PRINT("@0x%08x: IRQMASKA(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;		case IOMD_IRQSTATA:			data = io.irq[IRQA];			//DBG_PRINT("@0x%08x: IRQSTATA(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;		case IOMD_IRQREQA:			data = io.irq[IRQA] & io.irqmask[IRQA];			//DBG_PRINT("@0x%08x: IRQREQA(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;				case IOMD_IRQMASKB:			data = io.irqmask[IRQB];			//DBG_PRINT("@0x%08x: IRQMASKB(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;		case IOMD_IRQSTATB:			data = io.irq[IRQB];			//DBG_PRINT("@0x%08x: IRQSTATB(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;		case IOMD_IRQREQB:			data = io.irq[IRQB] & io.irqmask[IRQB];			//DBG_PRINT("@0x%08x: IRQREQB(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;				case IOMD_IRQMASKC:			data = io.irqmask[IRQC];			//DBG_PRINT("@0x%08x: IRQMASKC(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;		case IOMD_IRQSTATC:			data = io.irq[IRQC];			//DBG_PRINT("@0x%08x: IRQSTATC(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;		case IOMD_IRQREQC:			data = io.irq[IRQC] & io.irqmask[IRQC];			//DBG_PRINT("@0x%08x: IRQREQC(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;						case IOMD_IRQMASKD:			data = io.irqmask[IRQD];			//DBG_PRINT("@0x%08x: IRQMASKD(0x%08x) -> %02x\n",			//	PC - 8, addr, data);			break;		case IOMD_IRQSTATD:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产91综合久久蜜臀| 成人av资源下载| 欧美精品免费视频| 日韩精品一二三| 欧美一级理论片| 国产精品99久久久久久有的能看| 2023国产精华国产精品| 国产99久久久国产精品| 国产精品高潮呻吟| 欧美主播一区二区三区美女| 偷拍与自拍一区| 精品日本一线二线三线不卡| 国产呦精品一区二区三区网站| 国产欧美1区2区3区| 97久久超碰国产精品| 亚洲无人区一区| 日韩精品中文字幕在线不卡尤物| 最新不卡av在线| 欧美精品日韩一区| 国产福利一区二区| 亚洲一区视频在线观看视频| 日韩精品最新网址| www.在线欧美| 蜜臂av日日欢夜夜爽一区| 久久人人爽爽爽人久久久| 91蝌蚪porny| 麻豆视频观看网址久久| 日韩一区在线看| 欧美精品国产精品| 高清视频一区二区| 亚洲成人av一区二区| 精品国内二区三区| 色婷婷久久久亚洲一区二区三区| 欧美aaaaaa午夜精品| 自拍偷拍国产亚洲| 精品少妇一区二区三区| 色视频一区二区| 国产最新精品免费| 午夜在线电影亚洲一区| 国产欧美一区二区精品久导航 | 国产精品一区不卡| 亚洲男人天堂av| 精品国产露脸精彩对白| 欧洲av在线精品| 国产福利一区二区三区视频| 亚洲高清久久久| 国产精品美女久久久久久久久久久| 欧美日韩一级二级| 成人免费看片app下载| 乱中年女人伦av一区二区| 一区二区三区高清| 国产清纯白嫩初高生在线观看91 | 欧美一区二区三区视频在线| 99re这里只有精品首页| 国产乱国产乱300精品| 婷婷丁香激情综合| 一区二区久久久久久| 国产精品久久久爽爽爽麻豆色哟哟| 日韩一级成人av| 欧美精品一二三区| 欧美撒尿777hd撒尿| 972aa.com艺术欧美| 懂色av中文字幕一区二区三区| 老司机精品视频导航| 日日夜夜免费精品视频| 一级特黄大欧美久久久| 亚洲天堂精品在线观看| 国产精品女人毛片| 欧美国产日韩一二三区| 久久夜色精品国产欧美乱极品| 日韩西西人体444www| 欧美日韩精品高清| 欧美日韩在线电影| 欧美三级视频在线播放| 91成人免费电影| 欧美一a一片一级一片| 欧美在线看片a免费观看| 一本久久综合亚洲鲁鲁五月天| eeuss鲁片一区二区三区| 北岛玲一区二区三区四区| 成人免费视频一区| aaa欧美日韩| 色综合久久久久久久| 色噜噜狠狠色综合欧洲selulu| 色综合天天综合| 欧美在线一区二区三区| 欧美色图激情小说| 91麻豆精品国产91久久久 | 91麻豆高清视频| 在线国产亚洲欧美| 色哟哟一区二区三区| 色呦呦日韩精品| 91福利视频久久久久| 欧美日韩国产美| 精品久久一二三区| 中文字幕精品—区二区四季| 亚洲人成网站影音先锋播放| 亚洲午夜精品网| 蜜臀av性久久久久蜜臀av麻豆| 精品亚洲porn| 成人高清伦理免费影院在线观看| 91麻豆高清视频| 欧美一区二区三区思思人| 久久精品视频一区二区| 亚洲日本欧美天堂| 视频一区视频二区中文字幕| 国产做a爰片久久毛片| 99re免费视频精品全部| 欧美丰满嫩嫩电影| 久久精品夜色噜噜亚洲a∨| 亚洲免费伊人电影| 日本vs亚洲vs韩国一区三区| 粉嫩欧美一区二区三区高清影视 | 成人性色生活片免费看爆迷你毛片| 99re这里只有精品6| 91精品国产综合久久久蜜臀图片| 久久久美女毛片| 亚洲成人综合网站| 精品一区二区三区在线播放| 91丨九色丨蝌蚪富婆spa| 日韩一区二区免费在线电影| 国产精品久久精品日日| 午夜视频久久久久久| 成人综合在线观看| 欧美日韩aaa| 国产精品三级在线观看| 日韩av电影免费观看高清完整版 | 97久久精品人人爽人人爽蜜臀| 日韩一区国产二区欧美三区| 亚洲欧洲日韩综合一区二区| 美女视频网站久久| 欧美中文字幕亚洲一区二区va在线| 亚洲精品在线免费播放| 亚洲一区中文在线| av电影在线观看一区| 精品少妇一区二区| 午夜精品久久久久久久蜜桃app| eeuss鲁片一区二区三区| 欧美岛国在线观看| 亚洲国产综合在线| 99久久亚洲一区二区三区青草 | 国产欧美日韩不卡| 蜜臀av一区二区| 欧美日韩大陆一区二区| 亚洲人成伊人成综合网小说| 国产精品456露脸| 精品免费视频一区二区| 日韩在线一区二区三区| 色爱区综合激月婷婷| 国产精品电影院| 成人一区二区三区视频在线观看| 欧美大片在线观看| 麻豆精品久久精品色综合| 欧美偷拍一区二区| 亚洲色图.com| 99久久精品国产毛片| 欧美激情综合五月色丁香| 国产一区 二区| 精品国产1区二区| 九色porny丨国产精品| 欧美一区二区视频在线观看| 亚洲电影一区二区| 欧美最猛黑人xxxxx猛交| 亚洲区小说区图片区qvod| 97精品久久久久中文字幕| 国产精品蜜臀在线观看| 99久久久精品| 亚洲色图制服丝袜| 日本乱码高清不卡字幕| 日韩美女视频19| 色哟哟国产精品| 亚洲精品成人悠悠色影视| 日本韩国视频一区二区| 亚洲综合色区另类av| 欧美在线视频日韩| 性久久久久久久| 日韩欧美色电影| 国产精品资源在线| 国产午夜三级一区二区三| 丁香一区二区三区| 最新国产成人在线观看| 在线观看一区日韩| 日韩高清中文字幕一区| 精品剧情在线观看| 国产成人精品亚洲午夜麻豆| 国产精品传媒入口麻豆| 色噜噜狠狠色综合中国| 视频一区欧美精品| 欧美岛国在线观看| 成人黄色综合网站| 亚洲激情在线播放| 日韩一区二区中文字幕| 国产在线一区二区| 中文字幕色av一区二区三区| 欧美中文字幕一区| 久99久精品视频免费观看| 国产精品你懂的在线欣赏| 色欧美乱欧美15图片| 蜜桃视频一区二区三区在线观看| 久久理论电影网|