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

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

?? ppc_arch_interface.c

?? skyeye是一個可以模擬嵌入式硬件開發板的系統軟件
?? C
字號:
/* This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public License alongwith this program; if not, write to the Free Software Foundation, Inc.,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *//* * 12/06/2007   Michael.Kang  <blackfin.kang@gmail.com> */#include "ppc_cpu.h"#include "ppc_mmu.h"#include "ppc_exc.h"#include "ppc_memory.h"#include "ppc_io.h"#include "types.h"#include "tracers.h"#include "skyeye_types.h"#include "skyeye_config.h"#include "sysendian.h"extern PPC_CPU_State gCPU;/* For load OS image such as linux, we need to fill some entry in TLB to get 16M sdram mapped, then we can load linux to such memory */static void bootloader(){}static voidppc_reset_state (){}static voidppc_init_state (){	ppc_cpu_init();	/* initial phsical memory to DEFAULT_GMEMORY_SIZE */	if(!(boot_rom = malloc(DEFAULT_BOOTROM_SIZE))){		fprintf(stderr, "can not initialize physical memory...\n");		skyeye_exit(-1);	}	/*we set start_addr */	boot_rom_start_addr = 0xFFFFFFFF - DEFAULT_BOOTROM_SIZE + 1;	boot_romSize = DEFAULT_BOOTROM_SIZE;	/* initialize init_ram parameters */	if(!(init_ram = malloc(INIT_RAM_SIZE))){		fprintf(stderr, "malloc failed!\n");		skyeye_exit(-1);	}	if(!(ddr_ram = malloc(DDR_RAM_SIZE))){		fprintf(stderr, "malloc failed!\n");                skyeye_exit(-1);	}	init_ram_size = INIT_RAM_SIZE;	init_ram_start_addr = 0xe4010000;	gCPU.por_conf.porpllsr = 0x40004;		e500_mmu_init();		/* write something to a file for debug or profiling */	if (!prof_file) {                prof_file = fopen ("./kernel_prof.txt", "w");        }}typedef struct bd_s{	uint16 flag;	uint16 len;	uint32 buf_addr;}bd_t;static void ppc_io_do_cycle(){	/* If SCC0 Receive enalbed */	if(gCPU.cpm_reg.scc[0].gsmrl & 0x00000020){	}	/* If SCC0 transmit enabled */	if(gCPU.cpm_reg.scc[0].gsmrl & 0x00000010){		byte * ram = &gCPU.cpm_reg.dpram[0];		/* Param is stored at 0x8000 for SCC1 */		int rx_base = 0x8000; /* Receive buffer base address */		int tx_base = 0x8002; /* Transmit buffer base address */		int trans_bd_base = ppc_half_from_BE(ram[tx_base]); 		trans_bd_base = 0x88;		short bd_flag = ppc_half_from_BE(ram[trans_bd_base]);			short bd_len = ppc_half_from_BE(ram[trans_bd_base + 2]);		uint32 buf_addr = ppc_word_from_BE(*((uint32 *)&ram[trans_bd_base + 4]));		//fprintf(prof_file, "trans_bd_base=0x%x,bf_falg=0x%x,buf_addr=0x%x\n",trans_bd_base, bd_flag,buf_addr);		 /* If data ready */		if(bd_flag & 0x8000){			char c = ram[buf_addr - 0xe0080000];			skyeye_uart_write(-1, &c, 1, NULL);			*((sint16 *)&ram[trans_bd_base]) &= ppc_half_to_BE(~0x8000);		}	}}static voidppc_step_once (){	PPC_CPU_TRACE("execution started at %08x\n", gCPU.pc);	uint ops=0;	uint32 real_addr;	//gCPU.effective_code_page = 0xffffffff;//	ppc_fpu_test();//	return;	if (true) {		static uint32_t dbg_start = 0xfff84000;		static uint32_t dbg_end = 0xfff83254;		static uint32_t init_value = 0xfd25a0;		static int flag = 0;		gCPU.npc = gCPU.pc + 4;		ppc_effective_to_physical(gCPU.pc, 0, &real_addr);		if(real_addr > boot_rom_start_addr)			gCPU.current_opc = ppc_word_from_BE(*((int *)&boot_rom[real_addr - boot_rom_start_addr]));		else if(real_addr >0 && real_addr < DDR_RAM_SIZE)			gCPU.current_opc = ppc_word_from_BE(*((int *)&ddr_ram[real_addr]));  			else{			fprintf(stderr,"Can not get instruction from addr 0x%x\n",real_addr);			skyeye_exit(-1);		}		if(gCPU.pc == dbg_start)			flag = 1;		if(flag)			fprintf(prof_file,"DBG:before exec pc=0x%x,r0=0x%x,dpram=0x%x\n", gCPU.pc, gCPU.gpr[0], gCPU.cpm_reg.dpram);			ppc_exec_opc();		ppc_io_do_cycle();				gCPU.pc = gCPU.npc;	}		}static voidppc_set_pc (WORD pc){	gCPU.pc = pc;	/* Fixme, for e500 core, the first instruction should be executed at 0xFFFFFFFC */	gCPU.pc = 0xFFFFFFFC;}static WORDppc_get_pc(){	return gCPU.pc;}static intppc_ICE_write_byte (WORD addr, uint8_t v){	int offset;	if(addr <= 0xFFFFFFFF && (addr > boot_rom_start_addr)){		offset = addr - boot_rom_start_addr;			boot_rom[offset] = v;		return 0;		}	return 1;}static int ppc_ICE_read_byte (WORD addr, uint8_t *pv){	int offset;        if(addr <= 0xFFFFFFFF && (addr > boot_rom_start_addr)){                offset = addr - boot_rom_start_addr;		return ppc_read_physical_byte(offset, pv);        }	return 0;}static intppc_parse_cpu (const char *params[]){	return 0;}extern void mpc8560_mach_init();machine_config_t ppc_machines[] = {        /* machine define for MPC8560 */        {"mpc8560", mpc8560_mach_init, NULL, NULL, NULL},};static intppc_parse_mach (machine_config_t * mach, const char *params[]){		int i;	for (i = 0; i < (sizeof (ppc_machines) / sizeof (machine_config_t));	     i++) {		if (!strncmp		    (params[0], ppc_machines[i].machine_name,		     MAX_PARAM_NAME)) {			skyeye_config.mach = &ppc_machines[i];			SKYEYE_INFO				("mach info: name %s, mach_init addr %p\n",				 skyeye_config.mach->machine_name,				 skyeye_config.mach->mach_init);			return 0;		}	}	SKYEYE_ERR ("Error: Unkonw mach name \"%s\"\n", params[0]);	return -1;}static mem_config_t ppc_mem;static intppc_parse_mem (int num_params, const char *params[]){	char name[MAX_PARAM_NAME], value[MAX_PARAM_NAME];	int i, num;	mem_config_t *mc = &ppc_mem;	mem_bank_t *mb = mc->mem_banks;	mc->bank_num = mc->current_num++;	num = mc->current_num - 1;	/*mem_banks should begin from 0. */	mb[num].filename[0] = '\0';	for (i = 0; i < num_params; i++) {		if (split_param (params[i], name, value) < 0)			SKYEYE_ERR				("Error: mem_bank %d has wrong parameter \"%s\".\n",				 num, name);		if (!strncmp ("map", name, strlen (name))) {			if (!strncmp ("M", value, strlen (value))) {				mb[num].read_byte = ppc_read_byte;				mb[num].write_byte = ppc_write_byte;				mb[num].read_halfword = ppc_read_halfword;				mb[num].write_halfword = ppc_write_halfword;				mb[num].read_word = ppc_read_word;				mb[num].write_word = ppc_write_word;				mb[num].type = MEMTYPE_RAM;			}			else if (!strncmp ("I", value, strlen (value))) {				mb[num].read_byte = ppc_read_byte;				mb[num].write_byte = ppc_write_byte;				mb[num].read_halfword = ppc_read_halfword;				mb[num].write_halfword = ppc_write_halfword;				mb[num].read_word = ppc_read_word;				mb[num].write_word = ppc_write_word;				mb[num].type = MEMTYPE_IO;				/*ywc 2005-03-30 */			}			else if (!strncmp ("F", value, strlen (value))) {				mb[num].read_byte = ppc_read_byte;				mb[num].write_byte = ppc_write_byte;				mb[num].read_halfword = ppc_read_halfword;				mb[num].write_halfword = ppc_write_halfword;				mb[num].read_word = ppc_read_word;				mb[num].write_word = ppc_write_word;				mb[num].type = MEMTYPE_FLASH;			}			else {				SKYEYE_ERR					("Error: mem_bank %d \"%s\" parameter has wrong value \"%s\"\n",					 num, name, value);			}		}		else if (!strncmp ("type", name, strlen (name))) {			//chy 2003-09-21: process type			if (!strncmp ("R", value, strlen (value))) {				if (mb[num].type == MEMTYPE_RAM)					mb[num].type = MEMTYPE_ROM;				mb[num].write_byte = warn_write_byte;				mb[num].write_halfword = warn_write_halfword;				mb[num].write_word = warn_write_word;			}		}		else if (!strncmp ("addr", name, strlen (name))) {			if (value[0] == '0' && value[1] == 'x')				mb[num].addr = strtoul (value, NULL, 16);			else				mb[num].addr = strtoul (value, NULL, 10);		}		else if (!strncmp ("size", name, strlen (name))) {			if (value[0] == '0' && value[1] == 'x')				mb[num].len = strtoul (value, NULL, 16);			else				mb[num].len = strtoul (value, NULL, 10);		}		else if (!strncmp ("file", name, strlen (name))) {			strncpy (mb[num].filename, value, strlen (value) + 1);		}		else if (!strncmp ("boot", name, strlen (name))) {			/*this must be the last parameter. */			if (!strncmp ("yes", value, strlen (value)))				skyeye_config.start_address = mb[num].addr;		}		else {			SKYEYE_ERR				("Error: mem_bank %d has unknow parameter \"%s\".\n",				 num, name);		}	}	return 0;}voidinit_ppc_arch (){	static arch_config_t ppc_arch;	ppc_arch.arch_name = "ppc";	ppc_arch.init = ppc_init_state;	ppc_arch.reset = ppc_reset_state;	ppc_arch.set_pc = ppc_set_pc;	ppc_arch.get_pc = ppc_get_pc;	ppc_arch.step_once = ppc_step_once;	ppc_arch.ICE_write_byte = ppc_ICE_write_byte;	ppc_arch.ICE_read_byte = ppc_ICE_read_byte;	ppc_arch.parse_cpu = ppc_parse_cpu;	ppc_arch.parse_mach = ppc_parse_mach;	ppc_arch.parse_mem = ppc_parse_mem;	register_arch (&ppc_arch);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区成人在线观看| 国产欧美视频一区二区| av激情成人网| 成人午夜av影视| 国产精品白丝av| 国产麻豆成人精品| 国产白丝网站精品污在线入口| 国产呦精品一区二区三区网站| 精品无人区卡一卡二卡三乱码免费卡 | 一区二区三区在线视频观看58| 中文字幕日韩一区二区| 成人免费在线视频观看| 一区二区三区美女视频| 亚洲福利电影网| 丝袜美腿成人在线| 美女免费视频一区二区| 国产精品一色哟哟哟| 成人一级视频在线观看| 一本到不卡精品视频在线观看| 色妞www精品视频| 日韩免费性生活视频播放| 337p粉嫩大胆色噜噜噜噜亚洲| 久久一留热品黄| 亚洲人成亚洲人成在线观看图片| 一区av在线播放| 久久精品国产亚洲高清剧情介绍| 国产精品一级二级三级| 91麻豆.com| 欧美一区二区三区在线观看| 国产网红主播福利一区二区| 亚洲欧美日韩小说| 五月天中文字幕一区二区| 激情综合网av| 91小宝寻花一区二区三区| 欧美一级搡bbbb搡bbbb| 国产精品少妇自拍| 亚洲va天堂va国产va久| 国产不卡在线视频| 欧美三片在线视频观看| 欧美国产日韩在线观看| 亚洲国产婷婷综合在线精品| 国产精品资源在线看| 欧美午夜在线观看| 国产精品久久久久久久久搜平片| 香蕉久久一区二区不卡无毒影院| 国产高清精品在线| 69堂精品视频| 亚洲综合色网站| 国产成人在线视频网址| 在线电影院国产精品| 综合电影一区二区三区 | 久久久精品日韩欧美| 亚洲资源在线观看| 成人免费黄色在线| 久久夜色精品国产欧美乱极品| 夜色激情一区二区| www.亚洲精品| 久久久99久久| 久久国产精品免费| 91精品国产色综合久久ai换脸 | 欧美日韩另类一区| 中文字幕日韩一区| 成人亚洲精品久久久久软件| 日韩免费成人网| 日韩精品电影在线| 911精品国产一区二区在线| 一区二区三区欧美日韩| 91社区在线播放| 最新日韩在线视频| av电影天堂一区二区在线| 久久精品一区四区| 国产麻豆午夜三级精品| 26uuu精品一区二区在线观看| 午夜激情综合网| 欧美精品免费视频| 性做久久久久久久免费看| 欧美精品日韩综合在线| 丝袜诱惑亚洲看片| 日韩精品最新网址| 久久成人av少妇免费| 精品粉嫩超白一线天av| 国内精品视频一区二区三区八戒| 精品国精品国产| 国产成人在线看| 国产精品电影院| 色先锋久久av资源部| 亚洲综合成人在线| 884aa四虎影成人精品一区| 日本女优在线视频一区二区| 日韩美一区二区三区| 国产高清久久久久| 亚洲精品视频在线| 欧美肥胖老妇做爰| 激情亚洲综合在线| 最新不卡av在线| 欧美日韩国产影片| 黄色日韩三级电影| 亚洲精品欧美综合四区| 717成人午夜免费福利电影| 国内成人精品2018免费看| 国产精品毛片高清在线完整版| 色综合久久天天| 日精品一区二区| 国产午夜亚洲精品理论片色戒 | 欧美日韩一区二区在线视频| 石原莉奈一区二区三区在线观看| 精品日韩av一区二区| 国产aⅴ综合色| 亚洲高清不卡在线| 中文字幕欧美日韩一区| 欧美日韩一区二区三区在线看 | 亚洲码国产岛国毛片在线| 6080午夜不卡| 国产福利一区在线| 亚洲国产综合在线| 国产女同互慰高潮91漫画| 欧美三级视频在线观看| 国产伦精品一区二区三区视频青涩| 亚洲日本电影在线| 精品国产伦一区二区三区观看体验 | 精品在线亚洲视频| 成人免费在线观看入口| 日韩欧美亚洲一区二区| 色综合久久久久综合体| 国产黄色精品视频| 日本不卡一区二区| 亚洲另类一区二区| 中文一区二区在线观看| 日韩精品专区在线影院观看 | 一区二区三区欧美亚洲| 国产欧美日韩在线观看| 日韩色视频在线观看| 欧美午夜影院一区| 91婷婷韩国欧美一区二区| 国产精品66部| 国产久卡久卡久卡久卡视频精品| 日韩影视精彩在线| 一级精品视频在线观看宜春院 | 日韩一级片网址| 在线视频欧美精品| 99久久久国产精品免费蜜臀| 国产伦精品一区二区三区在线观看 | 成人看片黄a免费看在线| 美女一区二区久久| 日韩成人av影视| 无码av中文一区二区三区桃花岛| 一区二区三区欧美久久| 亚洲人成精品久久久久| 亚洲欧美自拍偷拍色图| 欧美激情一区三区| 国产日韩精品视频一区| 国产女人水真多18毛片18精品视频| 日韩精品一区二区三区中文精品| 欧美一区二区三区思思人| 91精品欧美久久久久久动漫| 欧美日韩精品一二三区| 精品1区2区3区| 777色狠狠一区二区三区| 欧美视频三区在线播放| 欧美性色黄大片| 欧美午夜电影一区| 欧美精品一二三| 欧美电视剧在线看免费| 精品国产人成亚洲区| 精品国产乱码久久久久久久久 | 99精品视频一区二区| 成人深夜在线观看| 91在线观看免费视频| www.欧美亚洲| 欧美自拍丝袜亚洲| 欧美一个色资源| 欧美mv和日韩mv的网站| 中文字幕乱码久久午夜不卡| 亚洲天堂精品视频| 五月天久久比比资源色| 久久国产欧美日韩精品| 大胆欧美人体老妇| 在线观看av不卡| 精品国产伦一区二区三区观看体验| 久久久激情视频| 亚洲综合色在线| 精品一区二区影视| 97精品电影院| 欧美军同video69gay| 久久久综合精品| 亚洲在线观看免费| 老司机免费视频一区二区| 成人av在线资源网| 欧美日韩1234| 欧美经典一区二区三区| 亚洲黄网站在线观看| 久久91精品国产91久久小草| 99riav一区二区三区| 亚洲精品一线二线三线无人区| 亚洲欧美色综合| 国产激情一区二区三区四区 | 欧美va天堂va视频va在线| 中文字幕一区二区5566日韩| 七七婷婷婷婷精品国产| 色天天综合色天天久久|