2 Star 5 Fork 0

thor/unisim

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mmu.c 1.04 KB
一键复制 编辑 原始数据 按行查看 历史
thor 提交于 2013-11-26 15:04 +08:00 . prime test passed
#include "mmu.h"
#include <stdlib.h>
#include <string.h>
char *V2P(int addr) {
int i;
char *src = NULL;
for (i = 0; i < segment_cnt; i++) {
if (segments[i].offset <= addr && segments[i].offset + segments[i].size >= addr - 4) {
src = segments[i].content + addr - segments[i].offset;
break;
}
}
return src;
}
void fetch_nbyte(int addr, void *dest, int len)
{
memcpy(dest, V2P(addr), len);
}
void fetch_dword(int addr, void *dest)
{
fetch_nbyte(addr, dest, 4);
}
void write_word(int addr, int word)
{
memcpy(V2P(addr), &word, 4);
}
void write_byte(int addr, char byte)
{
memcpy(V2P(addr), &byte, 1);
}
void write_hword(int addr, short hword)
{
memcpy(V2P(addr), &hword, 2);
}
int alloc_stack()
{
segment_t *ss = &segments[segment_cnt];
segment_cnt ++;
ss->offset = STACK_START;
ss->size = STACK_SIZE;
ss->content = malloc(STACK_SIZE);
return STACK_TOP;
}
int alloc_cs()
{
segment_t *cs = &segments[segment_cnt];
segment_cnt ++;
cs->offset = CS_START;
cs->size = CS_SIZE;
cs->content = malloc(CS_SIZE);
return CS_START;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/thor/unisim.git
git@gitee.com:thor/unisim.git
thor
unisim
unisim
master

搜索帮助