📄 mem.c
字号:
/* * Copyright 1999 Egbert Eich * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the authors not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors makes no representations * about the suitability of this software for any purpose. It is provided * "as is" without express or implied warranty. * * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */#include "debug.h"#include "v86bios.h"#include "x86emu.h"#ifdef __alpha__void* vram_map = 0;int sparse_shift = 5;#define mem_barrier() __asm__ __volatile__("mb" : : : "memory")#define vuip volatile unsigned int *CARD8mem_rb(CARD32 addr){ unsigned long result, shift;#if 1 if (addr >= 0xA0000 && addr <= 0xBFFFF) { addr -= 0xA0000; shift = (addr & 0x3) * 8; result = *(vuip) ((unsigned long)vram_map + (addr << sparse_shift)); result >>= shift; return 0xffUL & result; } else#endif return rdb(addr);}CARD16mem_rw(CARD32 addr){ unsigned long result, shift;#if 1 if (addr >= 0xA0000 && addr <= 0xBFFFF) { addr -= 0xA0000; shift = (addr & 0x2) * 8; result = *(vuip)((unsigned long)vram_map+(addr<<sparse_shift) +(1<<(sparse_shift-2))); result >>= shift; return 0xffffUL & result; } else#endif return rdw(addr);}CARD32mem_rl(CARD32 addr){ unsigned long result;#if 1 if (addr >= 0xA0000 && addr <= 0xBFFFF) { addr -= 0xA0000; result = *(vuip)((unsigned long)vram_map+(addr<<sparse_shift)+(3<<(sparse_shift-2))); return result; } else#endif return rdl(addr);}voidmem_wb(CARD32 addr, CARD8 val){ unsigned int b = val & 0xffU;#if 1 if (addr >= 0xA0000 && addr <= 0xBFFFF) { addr -= 0xA0000; *(vuip) ((unsigned long)vram_map + (addr << sparse_shift)) = b * 0x01010101; mem_barrier(); } else#endif wrb(addr,val);}voidmem_ww(CARD32 addr, CARD16 val){ unsigned int w = val & 0xffffU;#if 1 if (addr >= 0xA0000 && addr <= 0xBFFFF) { addr -= 0xA0000; *(vuip)((unsigned long)vram_map+(addr<<sparse_shift) +(1<<(sparse_shift-2))) = w * 0x00010001; mem_barrier(); } else#endif wrw(addr,val);}voidmem_wl(CARD32 addr, CARD32 val){#if 1 if (addr >= 0xA0000 && addr <= 0xBFFFF) { addr -= 0xA0000; *(vuip)((unsigned long)vram_map+(addr<<sparse_shift) +(3<<(sparse_shift-2))) = val; mem_barrier(); } else#endif wrl(addr,val);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -