亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
2014亚洲片线观看视频免费| 91麻豆精东视频| 极品美女销魂一区二区三区| 日韩高清欧美激情| 久久精品国产99久久6| 天天综合日日夜夜精品| 亚洲bt欧美bt精品| 夜夜夜精品看看| 免费av成人在线| 激情文学综合插| 国产精品一区二区在线观看网站| 美女爽到高潮91| 国产精品18久久久久久vr| 亚洲一区二区四区蜜桃| 午夜久久久久久| 国产精品一区二区免费不卡| 99精品桃花视频在线观看| 国产一区不卡在线| 色哟哟一区二区在线观看| 欧美精品在线一区二区三区| 欧美日韩色一区| 国产精品女上位| 男人的天堂亚洲一区| 国产a级毛片一区| 欧美群妇大交群中文字幕| 国产清纯白嫩初高生在线观看91| 国产精品免费免费| 亚洲高清不卡在线| 成人av电影观看| 精品国产一区a| 亚洲网友自拍偷拍| 六月婷婷色综合| 91久久精品一区二区二区| 久久先锋影音av鲁色资源网| 亚洲日本欧美天堂| 玖玖九九国产精品| 色婷婷国产精品综合在线观看| wwwwxxxxx欧美| 日本成人中文字幕在线视频| 91香蕉国产在线观看软件| 久久九九国产精品| 精品一二三四区| 日韩欧美电影一二三| 日日骚欧美日韩| 3d动漫精品啪啪1区2区免费| 曰韩精品一区二区| 狠狠久久亚洲欧美| 欧美一级生活片| 亚洲va欧美va天堂v国产综合| 不卡视频在线看| 亚洲人妖av一区二区| 成人精品视频网站| 亚洲精品视频在线看| 色8久久精品久久久久久蜜| 一区二区三区在线观看欧美| 国产精品白丝av| 中文字幕不卡在线观看| 色综合久久久久| 天天射综合影视| 久久色.com| 日本高清不卡aⅴ免费网站| 欧美激情一区二区在线| 欧洲av在线精品| 久久国产精品99精品国产| 国产亚洲综合在线| 欧美在线一二三四区| 午夜精品久久久久久久久久久 | 亚洲一区视频在线| 在线不卡a资源高清| 国产一区二区三区观看| 一区二区三区国产| 91精品国产高清一区二区三区蜜臀 | 亚洲一二三专区| 欧美刺激午夜性久久久久久久 | 亚洲精品国产一区二区精华液| 色综合久久久久综合体| 亚洲一级在线观看| 日本一区二区三区国色天香| av高清久久久| 麻豆精品视频在线观看| **性色生活片久久毛片| 国产亚洲欧美激情| 91精品婷婷国产综合久久竹菊| 国产成人高清在线| 精品一二三四区| 日本伊人午夜精品| 亚洲国产精品自拍| 国产精品天天看| 日韩一区二区精品在线观看| 欧美日韩亚洲综合| 色婷婷久久99综合精品jk白丝| 成人综合日日夜夜| 国产麻豆成人精品| 成人一区二区在线观看| 国产在线精品一区二区三区不卡| 天天综合色天天综合色h| 亚洲国产精品久久不卡毛片| 国产女人水真多18毛片18精品视频 | 国产欧美精品区一区二区三区 | 手机精品视频在线观看| 一级女性全黄久久生活片免费| 亚洲精品水蜜桃| 一区二区高清视频在线观看| 亚洲一二三四久久| 天天色 色综合| 激情综合五月婷婷| 99久久伊人精品| 宅男噜噜噜66一区二区66| 日韩一区二区三区在线观看| 亚洲精品一区二区三区香蕉| 欧美国产一区二区在线观看| 中文字幕亚洲区| 日韩精品一二三四| 风间由美性色一区二区三区| 欧洲亚洲精品在线| 欧美顶级少妇做爰| 亚洲伊人色欲综合网| 国产精品一区二区果冻传媒| 欧美精品久久久久久久多人混战 | 欧美日韩欧美一区二区| 国产女同互慰高潮91漫画| 日本中文字幕一区二区有限公司| 国产高清不卡一区二区| 久久综合九色综合欧美就去吻| 亚洲第一主播视频| 欧美男同性恋视频网站| 中文字幕一区二区三| 成人性视频免费网站| 国产欧美日韩在线看| 国产精品自产自拍| 久久精品视频一区二区| 国产在线不卡一卡二卡三卡四卡| 日韩一卡二卡三卡四卡| 久久成人久久鬼色| 国产午夜精品美女毛片视频| 国产成人精品综合在线观看| 国产三级精品三级在线专区| 成人动漫在线一区| 亚洲裸体xxx| 91麻豆精品国产91久久久更新时间| 亚洲综合激情另类小说区| 91精品欧美一区二区三区综合在 | 欧美午夜宅男影院| 日韩精品成人一区二区在线| 欧美tickling网站挠脚心| 国产成人免费在线观看| 一区二区不卡在线播放| 精品日韩一区二区三区| 91小视频免费观看| 免费久久99精品国产| 日韩伦理电影网| 精品国产一区二区三区久久久蜜月 | 国产亚洲精品超碰| 在线日韩av片| 国产成人免费在线观看| 精品国产sm最大网站免费看| 亚洲成av人片一区二区三区 | 国产乱码精品一区二区三| 国产精品久久午夜夜伦鲁鲁| 欧美精品久久一区| 久久综合色8888| 国产精品视频看| 亚洲精品国产视频| 亚洲aaa精品| 精油按摩中文字幕久久| 国产乱码精品一区二区三| 99精品视频一区二区三区| 日本高清免费不卡视频| 日韩一区二区三免费高清| 国产日产欧美一区二区三区| 亚洲精品久久久蜜桃| 精品在线播放免费| 99精品国产99久久久久久白柏| 欧美日韩国产123区| 国产日韩精品一区二区三区在线| 亚洲另类色综合网站| 毛片av一区二区| 在线观看亚洲成人| 久久精品视频免费观看| 日韩精品一二三| 91国产免费观看| 中文字幕高清一区| 韩国av一区二区三区四区| 欧美色欧美亚洲另类二区| 国产欧美一二三区| 九九视频精品免费| 欧美日韩成人综合在线一区二区| 亚洲国产精品国自产拍av| 久久精品理论片| 日韩亚洲欧美综合| 视频一区二区三区在线| 欧美亚洲国产bt| 一区二区三区久久久| 成人性生交大片免费看中文| 欧美精品一区二区三区四区 | 亚洲一级在线观看| 色婷婷精品大在线视频| 亚洲视频资源在线| 91一区在线观看| 亚洲一区在线视频|