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

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

?? bus.c

?? skyeye_1_2_2_Rel.rar 最新skyeye源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * ---------------------------------------------------------- * Add a mapping to the linked list of mappings of device * ----------------------------------------------------------- */void Mem_AreaAddMapping(BusDevice *bdev,uint32_t base,uint32_t mapsize,uint32_t flags) {	MemMapping *mapping=malloc(sizeof(MemMapping));	if(!mapping) {		fprintf(stderr,"Out of memory allocating MemMaping\n");		exit(837);	}	mapping->next=bdev->first_mapping;	bdev->first_mapping=mapping;	mapping->base=base;	mapping->mapsize = mapsize;	mapping->flags = flags & bdev->hw_flags;	bdev->Map(bdev->owner,base,mapping->mapsize,flags);	/* Check for traces ??? */        /* Need to Invalidate Tlb because we cache Host Virtual Addresses */	if(InvalidateProc) {		InvalidateProc();	}}/* * --------------------------------------------------------------------------------- * Map a range *	Forwards all decoded bits (devsize-1) to the device *	This function may only called by device emulators in response to *	a map request.  * --------------------------------------------------------------------------------- */ voidMem_MapRange(uint32_t base,uint8_t *start_mem,uint32_t devsize,uint32_t mapsize,uint32_t flags) {	uint32_t count=0;	uint32_t addr;	uint32_t pos=base & (devsize-1);	uint8_t *mem = start_mem+pos; 	for(addr=base; 1 ;) {		if((mapsize>=MEM_MAP_BLOCKSIZE) && !(addr & MEM_MAP_BLOCKMASK)) {			Mem_MapBlock(addr,mem,flags);			mem+=MEM_MAP_BLOCKSIZE;			pos+=MEM_MAP_BLOCKSIZE;			count+=MEM_MAP_BLOCKSIZE;			addr+=MEM_MAP_BLOCKSIZE;			mapsize-=MEM_MAP_BLOCKSIZE;		} else if((mapsize >= twoLevelMMap.scnd_lvl_blocksize) && !(addr & twoLevelMMap.scnd_lvl_blockmask)) {			Mem_Map2LvlBlock(addr,mem,flags);			mem+=twoLevelMMap.scnd_lvl_blocksize;			pos+=twoLevelMMap.scnd_lvl_blocksize;			count+=twoLevelMMap.scnd_lvl_blocksize;			addr+=twoLevelMMap.scnd_lvl_blocksize;			mapsize-=twoLevelMMap.scnd_lvl_blocksize;		} else {			if(mapsize) {				fprintf(stderr,"Bus: Can not map completely, rest: %08x, addr %08x"					", twoLevelMMap.scnd_lvl_blockmask %08x blocksize %08x\n",mapsize,addr,twoLevelMMap.scnd_lvl_blockmask,twoLevelMMap.scnd_lvl_blocksize);				exit(3789);			}			return;		}                 if(pos>=devsize) {                        pos=0;                        mem=start_mem;                }                /* Special case 4GB */                if(!count) {                        return;                }        }}static voidMem_SplitLargePage(uint32_t pgaddr) {	uint32_t addr = pgaddr & ~MEM_MAP_BLOCKMASK;	int index=(addr>>MEM_MAP_SHIFT);	uint8_t *rhva = mem_map_read[index]; 	uint8_t *whva = mem_map_write[index];	uint8_t *hva = 0;	uint32_t slvl_size =  twoLevelMMap.scnd_lvl_blocksize;	int flags;	int count;	flags = 0;	if(!rhva && ! whva) {		/* nothing to split */		return;	}	if((rhva != whva) && (rhva !=0) && (whva !=0)) {		fprintf(stderr,"Can not split page with different read/write addresses\n");		return;	}	if(rhva) {		flags |= MEM_FLAG_READABLE;		hva = rhva;	} 	if(whva) {		flags |= MEM_FLAG_WRITABLE;		hva = whva;	}	if(!Mem_UnMapBlock(addr)) {		fprintf(stderr,"Failed to unmap block at %08x\n",addr);		}	for(count=0;count < MEM_MAP_BLOCKSIZE;count+=slvl_size) {		Mem_Map2LvlBlock(addr+count,hva+count,flags); 	}}voidMem_TracePage(uint32_t pgaddr) {	int index;	uint8_t *hva;	uint8_t **slvl_map;	Mem_SplitLargePage(pgaddr);	index = pgaddr >> twoLevelMMap.frst_lvl_shift; 	if(unlikely(!(slvl_map = twoLevelMMap.flvlmap_write[index]))) {		fprintf(stderr,"no slvl map for addr %08x\n",pgaddr); // jk		return;	}	index = (pgaddr & twoLevelMMap.scnd_lvl_mask) >> twoLevelMMap.scnd_lvl_shift;	hva = slvl_map[index];	if(hva && !((unsigned long)hva & PG_TRACED)) {				slvl_map[index] += PG_TRACED;	} else {		fprintf(stderr,"Page is already traced %08x hva %p %08x\n",pgaddr,hva,!((unsigned long)hva & PG_TRACED));	}	if(InvalidateProc) {		InvalidateProc();	}}voidMem_UntracePage(uint32_t pgaddr) {	int index;	uint8_t *hva;	uint8_t **slvl_map;	index = pgaddr >> twoLevelMMap.frst_lvl_shift; 	if(unlikely(!(slvl_map = twoLevelMMap.flvlmap_write[index]))) {		fprintf(stderr,"no slvl map for addr %08x\n",pgaddr); // jk		return;	}	index = (pgaddr & twoLevelMMap.scnd_lvl_mask) >> twoLevelMMap.scnd_lvl_shift;	hva = slvl_map[index];	if(hva && ((unsigned long)hva & PG_TRACED)) {		slvl_map[index] -= PG_TRACED;		//fprintf(stderr,"Untraced page at %08x, hva %p\n",pgaddr,slvl_map[index]);	} else {		fprintf(stderr,"Page was not traced %08x, hva %p\n",pgaddr,slvl_map[index]);	}	if(InvalidateProc) {		InvalidateProc();	}}void Mem_TraceRegion(uint32_t start,uint32_t length) {	uint32_t i;	int slvl_size =  twoLevelMMap.scnd_lvl_blocksize;	fprintf(stderr,"Trace region from %08x length %08x\n",start,length); // jk	for(i=0;i<length;i+=slvl_size) {		Mem_TracePage(start+i);	} }void Mem_UntraceRegion(uint32_t start,uint32_t length) {	uint32_t i;	int slvl_size =  twoLevelMMap.scnd_lvl_blocksize;	fprintf(stderr,"Untrace region from %08x length %08x\n",start,length); // jk	for(i=0;i<length;i+=slvl_size) {		Mem_UntracePage(start+i);	} }/* * -------------------------------------------------------------------- * Take existing mapping and split up a range from large pages * into small pages. * address may not wrap and size may not be 4G * -------------------------------------------------------------------- */voidMem_SplitLargePages(uint32_t start,uint32_t size) {	uint32_t addr = start & ~MEM_MAP_BLOCKMASK;	do {		Mem_SplitLargePage(addr); 		addr += MEM_MAP_BLOCKSIZE;			} while((addr-start) < size);}/* * --------------------------------------------------------------------------------- * UnMap a range *	This function may only called by device emulators in response to *	an unmap request.  * --------------------------------------------------------------------------------- */ voidMem_UnMapRange(uint32_t base,uint32_t mapsize) {        uint32_t addr;        uint32_t count=0;        for(addr=base;1;) {		if((mapsize>=MEM_MAP_BLOCKSIZE) && !(addr & MEM_MAP_BLOCKMASK)) {			if(Mem_UnMapBlock(addr) > 0) {				count+=MEM_MAP_BLOCKSIZE;				addr+=MEM_MAP_BLOCKSIZE;				mapsize-=MEM_MAP_BLOCKSIZE;			} else {				Mem_UnMap2LvlBlock(addr);				count+=twoLevelMMap.scnd_lvl_blocksize;				addr+=twoLevelMMap.scnd_lvl_blocksize;				mapsize-=twoLevelMMap.scnd_lvl_blocksize;			}		} else if((mapsize >= twoLevelMMap.scnd_lvl_blocksize) && !(addr & twoLevelMMap.scnd_lvl_blockmask)) {			Mem_UnMap2LvlBlock(addr);			count+=twoLevelMMap.scnd_lvl_blocksize;			addr+=twoLevelMMap.scnd_lvl_blocksize;			mapsize-=twoLevelMMap.scnd_lvl_blocksize;		} else {			return;		}                 /* Special case 4GB */                if(!count) {                        return;                }        }}void Mem_AreaDeleteMappings(BusDevice *bdev) {	while(bdev->first_mapping) {		MemMapping *mapping=bdev->first_mapping;		bdev->UnMap(bdev->owner,mapping->base,mapping->mapsize);		bdev->first_mapping=mapping->next;		free(mapping);	}        /* Need to Invalidate Tlb because we cache Host Virtual Addresses */	if(InvalidateProc) {		InvalidateProc();	}}/* * ---------------------------------------------------------------------- * Update Mappings is called by a chip emulator whenever it changes * its memory map by itself * ---------------------------------------------------------------------- */void Mem_AreaUpdateMappings(BusDevice *bdev) {	MemMapping *cursor;	/* First do a total Cleanup then map again */ 	for(cursor=bdev->first_mapping; cursor; cursor=cursor->next) {		bdev->UnMap(bdev->owner,cursor->base,cursor->mapsize);	}	for(cursor=bdev->first_mapping; cursor; cursor=cursor->next) {		bdev->Map(bdev->owner,cursor->base,cursor->mapsize,cursor->flags);	}        /* Need to Invalidate Tlb because we cache Host Virtual Addresses */	if(InvalidateProc) {		InvalidateProc();	}}/* * ------------------------------- * IO-Handling * ------------------------------- */#define IOH_HASH(addr) ((addr) + ((addr)>>18))&IOH_HASH_MASKIOHandler *IOH_Find(uint32_t address) {	IOHandler *cursor;	IOHandler **slvl_map;	uint32_t hash=IOH_HASH(address);	uint32_t index;	for(cursor=iohandlerHash[hash];cursor;cursor=cursor->next) {		if(cursor->cpu_addr==address) {			return cursor;		}	}	index=(address>>IOH_MAP_SHIFT);	if(iohandlerMap[index]) {		return (iohandlerMap[index]);	}	index = (address>>IOH_FLVL_SHIFT);	if((slvl_map = iohandlerFlvlMap[index])) {		index = (address & IOH_SLVL_MASK) >> IOH_SLVL_SHIFT;				return slvl_map[index];	} 	return NULL;}IOHandler *IOH_HashFind(uint32_t address) {	IOHandler *cursor;	uint32_t hash=IOH_HASH(address);	for(cursor=iohandlerHash[hash];cursor;cursor=cursor->next) {		if(cursor->cpu_addr==address) {			return cursor;		}	}	return NULL;}static voidIOH_New(uint32_t cpu_addr,IOReadProc *readproc,IOWriteProc *writeproc,void *clientData,int len,uint32_t flags) {	uint32_t hash;	IOHandler *h;	int swap_endian;	int byteorder;	if(flags & IOH_FLG_BIG_ENDIAN) {		byteorder = en_BIG_ENDIAN;	} else if(flags & IOH_FLG_HOST_ENDIAN) {		byteorder = HOST_BYTEORDER;	} else {		byteorder = en_LITTLE_ENDIAN;	}	if(byteorder != HOST_BYTEORDER) {		swap_endian=1;	} else {		swap_endian=0;	}	if(IOH_HashFind(cpu_addr)) {		fprintf(stderr,"Bug, more than one IO-Handler for address %08x\n",cpu_addr);		exit(4324);	}	h=malloc(sizeof(IOHandler));	if(!h) {		perror("Out of memory allocating IOHandler\n");			exit(97);	}	memset(h,0,sizeof(IOHandler));	h->cpu_addr=cpu_addr;	h->clientData=clientData;	h->readproc=readproc;	h->writeproc=writeproc;	hash=IOH_HASH(cpu_addr);	h->next=iohandlerHash[hash];	h->swap_endian = swap_endian;	h->flags = flags;	h->len = len;	iohandlerHash[hash]=h;}voidIOH_New8f(uint32_t cpu_addr,IOReadProc *readproc,IOWriteProc *writeproc,void *clientData,uint32_t flags) {	IOH_New(cpu_addr,readproc,writeproc,clientData,1,flags);}voidIOH_New16f(uint32_t cpu_addr,IOReadProc *readproc,IOWriteProc *writeproc,void *clientData,uint32_t flags) {	if(flags & (IOH_FLG_PA_CBSE)) {		int i;		for(i=0;i<2;i++) {			IOH_New(cpu_addr+i,readproc,writeproc,clientData,2,flags); 		}	} else {		IOH_New(cpu_addr,readproc,writeproc,clientData,2,flags); 	}}voidIOH_New32f(uint32_t cpu_addr,IOReadProc *readproc,IOWriteProc *writeproc,void *clientData,uint32_t flags) {	/* Partial access: call base */	if(flags & IOH_FLG_PA_CBSE) {		int i;		for(i=0;i<4;i++) {			IOH_New(cpu_addr+i,readproc,writeproc,clientData,4,flags); 		}	} else {		IOH_New(cpu_addr,readproc,writeproc,clientData,4,flags); 	}}/* * ------------------------------------------------------------- * Allocate an iohandler and initialize the structure  * ------------------------------------------------------------- */static inline IOHandler *allocate_iohandler(uint32_t addr,IOReadProc *readproc,IOWriteProc *writeproc,int swap_endian,void *clientData) {	IOHandler *h;	h=malloc(sizeof(IOHandler));	if(!h) {		perror("Out of memory allocating IOHandler\n");			exit(97);	}	memset(h,0,sizeof(IOHandler));	h->cpu_addr=addr;	h->clientData=clientData;	h->readproc=readproc;	h->writeproc=writeproc;	h->next=NULL;	h->swap_endian = swap_endian;	return h;}static inline void IOH_MapBlock(uint32_t addr, IOHandler *h) {	uint32_t index=addr>>IOH_MAP_SHIFT;	if(iohandlerMap[index]) {		fprintf(stderr,"IO-Region %08x already allocated !\n",addr); 		exit(5342);	}	iohandlerMap[index]=h;}static inline voidIOH_Map2LvlBlock(uint32_t addr,IOHandler *h) {	IOHandler **sl_map;	int fl_index=addr>>IOH_FLVL_SHIFT;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久网| 蜜桃视频免费观看一区| 欧美一区二区在线视频| 欧美日韩国产一区二区三区地区| 91香蕉视频污| 在线观看视频欧美| 欧美日韩视频在线观看一区二区三区| 色女孩综合影院| 欧美系列日韩一区| 91精品国产综合久久久久久久| 欧美精品九九99久久| 欧美一区二区女人| 国产亚洲精品免费| 中文字幕永久在线不卡| 亚洲伦在线观看| 午夜电影久久久| 裸体健美xxxx欧美裸体表演| 国产资源在线一区| 色综合天天综合网天天看片| 欧美自拍丝袜亚洲| 日韩片之四级片| 欧美国产欧美综合| 亚洲第一搞黄网站| 韩国欧美一区二区| 色噜噜久久综合| 精品成人私密视频| 国产欧美综合色| 一区二区三区日韩精品| 奇米一区二区三区| 成人ar影院免费观看视频| 欧美日韩一区国产| 337p日本欧洲亚洲大胆色噜噜| 中文字幕av免费专区久久| 亚洲福中文字幕伊人影院| 久久99精品久久只有精品| 91在线一区二区三区| 日韩视频一区二区三区在线播放| 中文字幕二三区不卡| 日韩综合一区二区| voyeur盗摄精品| 精品国免费一区二区三区| 亚洲欧美偷拍卡通变态| 国内精品在线播放| 欧美日韩国产一级二级| 国产农村妇女精品| 美日韩一区二区| 东方欧美亚洲色图在线| 欧美群妇大交群中文字幕| 国产精品视频免费| 另类欧美日韩国产在线| 国产高清在线精品| 欧美无砖专区一中文字| 中文字幕人成不卡一区| 国产综合久久久久影院| 日韩一区二区三区免费看| 亚洲一区在线观看免费观看电影高清 | 国产真实乱偷精品视频免| 欧洲一区在线观看| 亚洲人成精品久久久久| 成人av午夜电影| 欧美激情一二三区| 国产资源在线一区| 欧美大片在线观看| 毛片av一区二区| 日韩亚洲欧美一区| 奇米在线7777在线精品| 欧美日韩视频在线第一区| 一区二区三区四区在线免费观看| 成人黄色免费短视频| 国产亲近乱来精品视频| 国产成人在线视频播放| 精品久久久久久最新网址| 日日摸夜夜添夜夜添亚洲女人| 欧美日韩综合色| 日韩av中文在线观看| 884aa四虎影成人精品一区| 香蕉乱码成人久久天堂爱免费| 欧美丝袜丝交足nylons图片| 亚洲综合色成人| 欧美日韩精品一二三区| 五月天欧美精品| 欧美一区二区免费视频| 久久av老司机精品网站导航| 精品国产乱子伦一区| 国产成人精品影视| 亚洲三级理论片| 欧美日韩精品欧美日韩精品一| 三级欧美韩日大片在线看| 3d动漫精品啪啪一区二区竹菊 | 国模大尺度一区二区三区| 久久精品视频网| 国产99久久久国产精品| 亚洲狼人国产精品| 制服丝袜国产精品| 韩国女主播成人在线观看| 国产精品视频九色porn| 欧美亚洲尤物久久| 精品影院一区二区久久久| 伊人一区二区三区| 欧美一级片免费看| 成人午夜电影网站| 亚洲影院免费观看| 精品国产伦一区二区三区观看方式| 成人免费黄色大片| 五月开心婷婷久久| 欧美国产国产综合| 欧美日韩国产色站一区二区三区| 老司机免费视频一区二区| 国产精品久久久久久久久果冻传媒| 欧美性欧美巨大黑白大战| 久久99精品国产.久久久久| 国产精品久久久久久久岛一牛影视| 欧美三级三级三级| 国产aⅴ精品一区二区三区色成熟| 亚洲国产精品尤物yw在线观看| 精品国产乱码久久久久久蜜臀| 色综合久久久久| 国产精品一区二区果冻传媒| 亚洲曰韩产成在线| 日本一区二区三区视频视频| 欧美日韩国产综合草草| 白白色亚洲国产精品| 精品亚洲国产成人av制服丝袜| 亚洲伦在线观看| 中文字幕欧美激情一区| 欧美一区二区三区不卡| 91久久线看在观草草青青| 国产激情偷乱视频一区二区三区| 亚洲18女电影在线观看| 亚洲另类一区二区| 亚洲欧美综合网| 国产肉丝袜一区二区| 欧美一级在线观看| 欧美性猛交xxxx乱大交退制版| 成人av综合在线| 国产剧情av麻豆香蕉精品| 蜜桃久久久久久| 日韩福利电影在线观看| 亚洲一区二区在线免费观看视频 | 日韩欧美在线1卡| 欧美视频日韩视频在线观看| 日本精品视频一区二区| 成人黄色片在线观看| www.在线成人| av电影一区二区| 99久久久精品免费观看国产蜜| 国产精品自产自拍| 91麻豆蜜桃一区二区三区| 国产成人av网站| 懂色av噜噜一区二区三区av| 国产福利电影一区二区三区| 国产激情偷乱视频一区二区三区 | 国产精品视频麻豆| 中文字幕欧美日韩一区| 国产精品久久国产精麻豆99网站| 国产人久久人人人人爽| 中文字幕二三区不卡| 国产精品久久久久永久免费观看 | 日韩欧美国产一区二区在线播放| 7777精品伊人久久久大香线蕉 | 亚洲黄网站在线观看| 一区二区三区在线免费观看| 一区二区三区在线视频免费观看| 一区二区三区视频在线看| 亚洲成av人在线观看| 美洲天堂一区二卡三卡四卡视频| 日韩精品五月天| 狠狠色丁香婷婷综合| 91黄色小视频| 欧美日韩五月天| 精品粉嫩aⅴ一区二区三区四区| 国产午夜精品福利| 亚洲精品菠萝久久久久久久| 亚洲成人动漫在线观看| 久久福利资源站| 成人app在线| 91精品国产91久久久久久一区二区 | 亚洲一区二区三区免费视频| 婷婷成人激情在线网| 韩国欧美国产1区| thepron国产精品| 欧美一二三区在线| 欧美国产1区2区| 图片区日韩欧美亚洲| 国产精品一区二区x88av| 色香蕉成人二区免费| 日韩西西人体444www| 国产精品乱码妇女bbbb| 午夜欧美视频在线观看| 国产精品888| 国产三区在线成人av| 亚洲欧洲色图综合| 免费成人av在线| 91视频xxxx| 国产午夜精品一区二区| 视频一区欧美精品| 色综合婷婷久久| 国产肉丝袜一区二区| 免费成人在线观看| 欧美系列日韩一区|