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

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

?? memory.c

?? 樹大根深三棱盡所標桿ssfsfsa fdsafs
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************			       XCopilotThis code is part of XCopilot, a port of copilot     Portions of this code are Copyright (C) 1997 Ivan A. Curtis		       icurtis@radlogic.com.auThe original MS-Windows95 copilot emulator was written by Greg Hewgill.The following copyright notice appeared on the original copilot sources:		  Copyright (c) 1996 Greg Hewgill MC68000 Emulation code is from Bernd Schmidt's Unix Amiga Emulator.       The following copyright notice appeared in those files:	  Original UAE code Copyright (c) 1995 Bernd SchmidtThis code must not be distributed without these copyright notices intact.**************************************************************************************************************************************************************Filename:	memory.cDescription:	Copilot Memory managementUpdate History:   (most recent first)   Ian Goldberg   26-Jun-98 12:40 -- generalized memory mappings   Ian Goldberg   11-Sep-97 09:48 -- added bus error support   Brian Grossman 14-Jul-97 15:00 -- $XCOPILOTRAM is now a filename   Ian Goldberg   18-Apr-97 11:13 -- can now have multiple RAM files   Ian Goldberg   10-Apr-97 16:43 -- support for Palm Pilot ROM   I. Curtis       5-Mar-97 21:47 -- mmapped scratchmemory and pilotram     rom_wput() routine now actually does something   I. Curtis      26-Feb-97 14:59 -- modified from win95 version******************************************************************************/#include <config.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <sys/ipc.h>#include <sys/shm.h>#include <fcntl.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <netinet/in.h>#include "sysdeps.h"#include "shared.h"#include "memory.h"#if 0#define RANGE_BEGIN	0x1001e3c4#define RANGE_END	(RANGE_BEGIN+4)#define _ALIGN(a, s) ((a) & ~((s) - 1))#define	CHECK_WATCH(a, s, v) \	if (_ALIGN(a, s) >= _ALIGN(RANGE_BEGIN, s) && \			_ALIGN(a, s) < _ALIGN(RANGE_END, s)) { \		fprintf(stderr, "RANGE violation at PC=0x%x addr=0x%x, value=0x%x size=0x%x\n\r",\				MC68000_getpc(), a, v, s); \	} else#else#define	CHECK_WATCH(addr, size, v)#endifint ram_size;int ram_size_mask;int rom_size;extern shared_img *Shptr;extern int exectrace;extern unsigned long text_offset;extern unsigned long data_offset;extern unsigned long bss_offset;int sram_protect = 1;int buserr = 0;addrbank *membanks;/* Default memory access functions */int default_check(CPTR a, ULONG b){    return 0;}UWORD *default_xlate(CPTR a){/*    fprintf(stderr, "Your Pilot program just did something terribly stupid\n"); */    return 0;}/* A dummy bank that only contains zeros */static ULONG dummy_lget(CPTR);static UWORD dummy_wget(CPTR);static UBYTE dummy_bget(CPTR);static void  dummy_lput(CPTR, ULONG);static void  dummy_wput(CPTR, UWORD);static void  dummy_bput(CPTR, UBYTE);static int   dummy_check(CPTR addr, ULONG size);static UWORD *dummy_xlate(CPTR addr);ULONG dummy_lget(CPTR addr){    fprintf(stderr,	"Bus error: read a long from undefined memory address 0x%08lx\n",	addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());    buserr = 1;    return 0;}UWORD dummy_wget(CPTR addr){    if ((addr & 0xFF000000) != 0x10000000) {	fprintf(stderr,	    "Bus error: read a word from undefined memory address 0x%08lx\n",	    addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());	buserr = 1;    }    return 0;}UBYTE dummy_bget(CPTR addr){    fprintf(stderr,	"Bus error: read a byte from undefined memory address 0x%08lx\n",	addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());    buserr = 1;    return 0;}void dummy_lput(CPTR addr, ULONG l){    fprintf(stderr,	"Bus error: wrote a long to undefined memory address 0x%08lx\n",	addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());    buserr = 1;}void dummy_wput(CPTR addr, UWORD w){    if ((addr & 0xFF000000) != 0x10000000) {	fprintf(stderr,	    "Bus error: wrote a word to undefined memory address 0x%08lx\n",	    addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());	buserr = 1;    }}void dummy_bput(CPTR addr, UBYTE b){    fprintf(stderr,	"Bus error: wrote a byte to undefined memory address 0x%08lx\n",	addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());    buserr = 1;}int dummy_check(CPTR addr, ULONG size){    return 0;}UWORD *dummy_xlate(CPTR addr){    return NULL;}/* RAM */UWORD *rammemory;static ULONG ram_lget(CPTR);static UWORD ram_wget(CPTR);static UBYTE ram_bget(CPTR);static void  ram_lput(CPTR, ULONG);static void  ram_wput(CPTR, UWORD);static void  ram_bput(CPTR, UBYTE);static int   ram_check(CPTR addr, ULONG size);static UWORD *ram_xlate(CPTR addr);ULONG ram_lget(CPTR addr){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    return ((ULONG)rammemory[addr >> 1] << 16) | rammemory[(addr >> 1)+1];}UWORD ram_wget(CPTR addr){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    return rammemory[addr >> 1];}UBYTE ram_bget(CPTR addr){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    if (addr & 1) 	return rammemory[addr >> 1];    else	return rammemory[addr >> 1] >> 8;}void ram_lput(CPTR addr, ULONG l){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    rammemory[addr >> 1] = l >> 16;    rammemory[(addr >> 1)+1] = (UWORD)l;}void sram_lput(CPTR addr, ULONG l){    if (sram_protect) {	fprintf(stderr,	    "Bus error: wrote a long to database RAM address 0x%08lx\n", addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());	buserr = 1;    } else {	ram_lput(addr, l);    }}void ram_wput(CPTR addr, UWORD w){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    rammemory[addr >> 1] = w;}void sram_wput(CPTR addr, UWORD w){    if (sram_protect) {	fprintf(stderr,	    "Bus error: wrote a word to database RAM address 0x%08lx\n", addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());	buserr = 1;    } else {	ram_wput(addr, w);    }}void ram_bput(CPTR addr, UBYTE b){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    if (!(addr & 1)) {	rammemory[addr>>1] = (rammemory[addr>>1] & 0xff) | (((UWORD)b) << 8);    } else {	rammemory[addr>>1] = (rammemory[addr>>1] & 0xff00) | b;    }}void sram_bput(CPTR addr, UBYTE b){    if (sram_protect) {	fprintf(stderr,	    "Bus error: wrote a byte to database RAM address 0x%08lx\n", addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());	buserr = 1;    } else {	ram_bput(addr, b);    }}int ram_check(CPTR addr, ULONG size){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    return (addr + size) <= (ULONG)ram_size;}UWORD *ram_xlate(CPTR addr){    addr -= ram_start & (ram_size_mask);    addr &= ram_size_mask;    return rammemory + (addr >> 1);}/* ROM */static UWORD *rommemory;static ULONG rom_lget(CPTR);static UWORD rom_wget(CPTR);static UBYTE rom_bget(CPTR);static void  rom_lput(CPTR, ULONG);static void  rom_wput(CPTR, UWORD);static void  rom_bput(CPTR, UBYTE);static int  rom_check(CPTR addr, ULONG size);static UWORD *rom_xlate(CPTR addr);ULONG rom_lget(CPTR addr){    addr -= rom_start & (rom_size-1);    addr &= rom_size-1;    return ((ULONG)rommemory[addr >> 1] << 16) | rommemory[(addr >> 1)+1];}UWORD rom_wget(CPTR addr){    addr -= rom_start & (rom_size-1);    addr &= rom_size-1;    return rommemory[addr >> 1];}UBYTE rom_bget(CPTR addr){    addr -= rom_start & (rom_size-1);    addr &= rom_size-1;    return rommemory[addr >> 1] >> (addr & 1 ? 0 : 8);}void rom_lput(CPTR addr, ULONG b){    fprintf(stderr,	"Bus error: wrote a long to ROM address 0x%08lx\n", addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());    buserr = 1;}void rom_wput(CPTR addr, UWORD w){    if (Shptr->allowromwrites) {	addr -= rom_start & (rom_size - 1);	addr &= rom_size - 1;	rommemory[addr >> 1] = w;    } else {	fprintf(stderr,	    "Bus error: wrote a word to ROM address 0x%08lx\n", addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());	buserr = 1;    }}void rom_bput(CPTR addr, UBYTE b){    fprintf(stderr,	"Bus error: wrote a byte to ROM address 0x%08lx\n", addr);	fprintf(stderr, "PC=0x%08lx\n", MC68000_getpc());    buserr = 1;}int rom_check(CPTR addr, ULONG size){    addr -= rom_start & (rom_size-1);    addr &= rom_size-1;    return (addr + size) <= rom_size;}UWORD *rom_xlate(CPTR addr){    addr -= rom_start & (rom_size-1);    addr &= rom_size-1;    return rommemory + (addr >> 1);}static intverify_entrypoint(const void *rom){    const unsigned char _bootsign[] = { 0x4e, 0xfa, 0x00, 0x00, 'b', 'o', 'o', 't',			       0x27, 0x10, 0xff };    const unsigned char _bootmask[] = { 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,			       0xff, 0xff, 0x00 };    const unsigned char *bootsign = _bootsign, *bootmask = _bootmask;        while ((*bootsign & *bootmask) == *bootsign)	if ((*((char *)rom)++ & *bootmask++) != *bootsign++)	    return 0;    return 1;}static const char *find_entrypoint(const char *rom){    const char *entry = rom;    while (entry - rom < rom_size)    {	if (verify_entrypoint(entry))	    return entry;	else	    entry += 2;  /* Instructions must be word aligned */    }    return NULL;}/* This routine replaces the win_load_rom routine *//* It was grabbed from copilot-linux sources */static int load_rom(const char *dir, const char *romfile, int nocheck){  int i;  char *rombuf;  char *resetv;  int f;  struct stat st;    if (romfile[0] != '/' && dir) {    rombuf = alloca(strlen(dir)+strlen(romfile)+2);    if (!rombuf) {      return PILOTCPU_ERROR_LOADING_ROM;    }    sprintf(rombuf, "%s/%s", dir, romfile);    romfile = rombuf;  }  f = open(romfile, O_RDONLY);fprintf(stderr, "load %s\n", romfile);  if (f == -1) {fprintf(stderr, "%s,%d\n", __FILE__, __LINE__);    return PILOTCPU_ROM_NOT_FOUND;  }  if (fstat(f, &st)) {    close(f);fprintf(stderr, "%s,%d\n", __FILE__, __LINE__);    return PILOTCPU_ROM_NOT_FOUND;  }  rom_size = st.st_size;  /* Round up to the next power of two */  if (rom_size & (rom_size-1)) {    /* It is not already a power of two */    int pow_of_2;    for(pow_of_2 = 1; pow_of_2 < rom_size; pow_of_2 <<= 1) ;    rom_size = pow_of_2;  }  #if 1  rommemory = malloc(rom_size + 4096);fprintf(stderr, "%s,%d - 0x%x\n", __FILE__, __LINE__, rommemory);  if (rommemory == (UWORD *)0) {fprintf(stderr, "%s,%d\n", __FILE__, __LINE__);    return PILOTCPU_ERROR_LOADING_ROM;  }  memset(rommemory, 0, rom_size);  read(f, rommemory, rom_size);  // rommemory = (char *) ((((unsigned long) rommemory) + 4095) & ~4095);#else  rommemory = (UWORD*)mmap(0, rom_size, PROT_READ|PROT_WRITE, 			   MAP_FILE|MAP_PRIVATE, f, 0);  if (rommemory == (UWORD *)-1) {fprintf(stderr, "%s,%d\n", __FILE__, __LINE__);    return PILOTCPU_ERROR_LOADING_ROM;  }#endif    if (!nocheck) {  /* Check if the reset vector looks plausible */    resetv = (char *)rommemory +    (ntohl(*(CPTR *)(((char *)rommemory)+4)) - rom_start);      if (!verify_entrypoint(resetv)) {      int offset;      int pageoffset;      void *newrom;      /* It didn't - we need to find it */      if (1 != ntohs(*(UWORD *)(((char *)rommemory)+0x0c))) {	offset = ntohl(*(CPTR *)(((char *)rommemory)+0x68)) +	  sram_start - rom_start;      }      else {	offset = resetv - find_entrypoint((char *)rommemory);      }      /* Did we find it? If not, lets go with the original. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女久久久久久| 久久av中文字幕片| 欧美a级一区二区| 不卡一区二区在线| 日韩欧美国产综合| 一区二区三区欧美激情| 国产精品亚洲一区二区三区在线 | 91精品久久久久久久99蜜桃| 久久久久久一二三区| 午夜在线电影亚洲一区| 东方aⅴ免费观看久久av| 色婷婷香蕉在线一区二区| 久久久久久麻豆| 经典三级在线一区| 538prom精品视频线放| 亚洲男人的天堂网| 成人免费视频视频| 久久婷婷久久一区二区三区| 天天色图综合网| 欧美三级电影在线观看| 亚洲精品欧美专区| 99久久久久久| 亚洲啪啪综合av一区二区三区| 国产高清久久久久| 久久久三级国产网站| 久久99精品久久久久久久久久久久| 欧洲一区二区三区在线| 亚洲综合色视频| 91国偷自产一区二区三区观看| 国产精品人妖ts系列视频| 国产精品综合在线视频| 久久先锋影音av鲁色资源网| 韩国欧美国产一区| 久久久久久久久久久黄色| 国产一区二区在线视频| 久久综合久久久久88| 激情成人综合网| 精品国产99国产精品| 韩国在线一区二区| 精品福利一二区| 国产**成人网毛片九色| 国产精品国产三级国产a| 不卡的av在线| 一区二区免费看| 欧美精品久久一区二区三区| 日本欧美在线看| 日韩美女视频在线| 国产精品456露脸| 国产精品久久久久久久久晋中| 99re免费视频精品全部| 亚洲小少妇裸体bbw| 欧美日本在线一区| 精品系列免费在线观看| 国产日韩精品一区二区三区 | 色综合久久久久网| 亚洲高清一区二区三区| 精品成人一区二区| 不卡电影免费在线播放一区| 亚洲韩国精品一区| 日韩免费成人网| www.欧美精品一二区| 亚洲线精品一区二区三区八戒| 欧美一区二区黄色| 国产91在线看| 亚洲国产wwwccc36天堂| 久久久亚洲高清| 色www精品视频在线观看| 日韩电影在线免费观看| 中文成人av在线| 欧美三区免费完整视频在线观看| 久久激情五月激情| 亚洲欧洲日韩av| 91麻豆精品国产自产在线观看一区 | 韩国女主播一区| 亚洲精品一卡二卡| 欧美精品一区二区三区一线天视频 | 日本精品一区二区三区高清| 日韩不卡一二三区| 国产精品久久久久久亚洲毛片 | 精品处破学生在线二十三| 99精品偷自拍| 国内精品在线播放| 午夜a成v人精品| 中文字幕av在线一区二区三区| 欧美美女视频在线观看| 成人中文字幕合集| 免费观看久久久4p| 一区二区三区四区亚洲| 国产日韩欧美精品综合| 欧美一卡二卡三卡| 欧美优质美女网站| 成人性视频免费网站| 另类小说视频一区二区| 亚洲一卡二卡三卡四卡| 中文字幕在线观看不卡| 久久麻豆一区二区| 日韩欧美一级在线播放| 欧美日韩日日摸| 色老汉av一区二区三区| www.欧美日韩| 成av人片一区二区| 国产成人免费视频网站 | 亚洲一级二级在线| 亚洲婷婷综合色高清在线| 国产亚洲欧美激情| 精品国产乱码久久久久久老虎 | 欧美一a一片一级一片| 91丨九色丨尤物| 成人性色生活片免费看爆迷你毛片| 精品制服美女久久| 捆绑调教美女网站视频一区| 婷婷夜色潮精品综合在线| 亚洲愉拍自拍另类高清精品| 亚洲九九爱视频| 伊人婷婷欧美激情| 亚洲视频一区二区免费在线观看| 国产欧美日韩综合| 久久免费视频一区| 国产调教视频一区| 国产精品亲子乱子伦xxxx裸| 国产日韩精品一区二区浪潮av| 国产女同互慰高潮91漫画| 欧美韩国日本不卡| 亚洲欧洲日产国码二区| 一区二区三区中文在线| 亚洲图片欧美色图| 日韩精品国产欧美| 久久不见久久见免费视频1| 久久草av在线| 成人精品国产一区二区4080| 99久久国产综合精品麻豆 | 国产成人综合在线观看| 夫妻av一区二区| 97se亚洲国产综合在线| 在线免费观看日本欧美| 欧美高清视频不卡网| 欧美成人国产一区二区| 国产日韩欧美麻豆| 亚洲免费观看高清完整版在线观看 | 性感美女久久精品| 日韩国产欧美在线播放| 九一九一国产精品| 成人av电影免费观看| 欧美日韩一区二区在线观看| 欧美一级xxx| 国产精品私人影院| 亚洲专区一二三| 狠狠色2019综合网| 色综合久久久久久久久| 欧美一区二区国产| 中文字幕日韩一区| 日韩电影免费在线看| 国产资源在线一区| 欧美性色aⅴ视频一区日韩精品| 欧美一级淫片007| 国产精品乱码一区二区三区软件| 亚洲精品一二三| 国内成人精品2018免费看| 91猫先生在线| 国产亚洲精品久| 午夜视黄欧洲亚洲| 波多野结衣亚洲一区| 制服丝袜国产精品| 亚洲猫色日本管| 激情久久久久久久久久久久久久久久| 一本久久综合亚洲鲁鲁五月天| 日韩欧美区一区二| 亚洲欧美精品午睡沙发| 国产精品自在在线| 欧美一二三在线| 一区二区三区色| 处破女av一区二区| 欧美大片免费久久精品三p | 国产精品久久看| 激情综合网天天干| 91精品国产色综合久久不卡蜜臀| 国产精品日产欧美久久久久| 精品一区二区三区久久| 欧美伦理电影网| 伊人夜夜躁av伊人久久| 成人av在线播放网址| 精品国产免费视频| 日本强好片久久久久久aaa| 91福利在线导航| 亚洲伦理在线精品| 99视频在线精品| 欧美国产综合一区二区| 国产成人av影院| 久久色在线视频| 黄色资源网久久资源365| 制服丝袜国产精品| 日本色综合中文字幕| 欧美熟乱第一页| 亚洲自拍偷拍图区| 色综合久久综合网欧美综合网| 国产精品不卡视频| 99re热视频这里只精品| 亚洲猫色日本管| 91福利小视频| 亚洲成人免费在线观看|