📄 iomem.c
字号:
#include "bfin-sim.h"#include "types.h"#include "mach.h"#include "mem_map.h"#include <signal.h>//#define IO_ERR {printf("\n%s io error!addr=0x%x\n",__FUNCTION__,addr);exit(-1);}#define IO_ERR {printf("\n%s io error!addr=0x%x,pc=0x%x,oldpc=0x%x,sp=0x%x\n",__FUNCTION__,addr,PCREG,OLDPCREG,SPREG);}//0xf11c4static voidisram_write_word (bu32 addr, bu16 v){ int offset = addr - ISRAM_START; //saved_state.isram[offset] = (bu16)v; saved_state.isram[offset] = v; saved_state.isram[offset + 1] = v >> 8;}static bu16isram_read_word (bu32 addr){ int offset = addr - ISRAM_START; //return (bu16)(saved_state.isram[offset]); return saved_state.isram[offset] | (saved_state. isram[offset + 1] << 8);}static voidisram_write_byte (bu32 addr, bu8 v){ int offset = addr - ISRAM_START; saved_state.isram[offset] = v;}static bu8isram_read_byte (bu32 addr){ int offset = addr - ISRAM_START; return saved_state.isram[offset];}static voiddsram_write_byte (bu32 addr, bu8 v){ int offset = addr - DSRAM_START; saved_state.dsram[offset] = v;}static bu8dsram_read_byte (bu32 addr){ int offset = addr - DSRAM_START; return saved_state.dsram[offset];}voidput_byte (unsigned char *memory, bu32 addr, bu8 v){ if ((addr >= IO_START) && (addr < IO_END)) { saved_state.p_mach->io_write_byte (addr, v); } else if (addr >= ISRAM_START && addr < ISRAM_END) { isram_write_byte (addr, v); } else if (addr >= DSRAM_START && addr < DSRAM_END) { dsram_write_byte (addr, v); } else if (addr >= SDRAM_START && addr < SDRAM_END) { memory[addr] = v; } else { IO_ERR; }}voidput_word (unsigned char *memory, bu32 addr, bu16 v){ if ((addr >= IO_START) && (addr < IO_END)) { saved_state.p_mach->io_write_word (addr, v); } else if (addr >= ISRAM_START && addr < ISRAM_END) { IO_ERR; } else if (addr >= SDRAM_START && addr < SDRAM_END) { //memory[addr] = (bu16)v; memory[addr] = v; memory[addr + 1] = v >> 8; } else { IO_ERR; }}voidput_long (unsigned char *memory, bu32 addr, bu32 v){ if ((addr > IO_START) && (addr < IO_END)) { saved_state.p_mach->io_write_long (addr, v); } else if (addr >= SDRAM_START && addr < SDRAM_END) { //memory[addr] = (bu32)v; memory[addr] = v; memory[addr + 1] = v >> 8; memory[addr + 2] = v >> 16; memory[addr + 3] = v >> 24; } else { IO_ERR; }}bu8get_byte (unsigned char *memory, bu32 addr){ if ((addr >= IO_START) && (addr < IO_END)) { return saved_state.p_mach->io_read_byte (addr); } else if (addr >= ISRAM_START && addr < ISRAM_END) { return isram_read_byte (addr); } else if (addr >= DSRAM_START && addr < DSRAM_END) { return dsram_read_byte (addr); } else if (addr >= SDRAM_START && addr < SDRAM_END) return memory[addr]; else { IO_ERR; }}bu16get_word (unsigned char *memory, bu32 addr){ if ((addr >= IO_START) && (addr < IO_END)) { return saved_state.p_mach->io_read_word (addr); } else if (addr >= ISRAM_START && addr < ISRAM_END) { return isram_read_word (addr); } else if (addr >= SDRAM_START && addr < SDRAM_END) { //return (bu16)(memory[addr]); return memory[addr] | (memory[addr + 1] << 8); } else { IO_ERR; }}bu32get_long (unsigned char *memory, bu32 addr){ if ((addr >= IO_START) && (addr < IO_END)) { return saved_state.p_mach->io_read_long (addr); } else if (addr >= ISRAM_START && addr < ISRAM_END) { IO_ERR; } else if (addr >= SDRAM_START && addr < SDRAM_END) { //return (bu32)(memory[addr]); return (memory[addr] | (memory[addr + 1] << 8) | (memory[addr + 2] << 16) | (memory[addr + 3] << 24)); } else { IO_ERR; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -