📄 armmem.c
字号:
//AJ2D---------------------------------------------------------- } */ //mbp->write_halfword(state, addr, data); global_mbp->write_halfword (state, addr, data); } else { //fprintf(stderr, "SKYEYE:NumInstrs %llu, mem_write_halfword addr = %x no bank\n",state->NumInstrs, addr); //chy 2003-09-03 //SKYEYE_OUTREGS(stderr); //exit(-1); }}voidmem_write_word (ARMul_State * state, ARMword addr, ARMword data){//chy 2003-07-10 chy: lyh change // bank_ptr(addr)->write_word(state, addr, data); //mem_bank_t *mbp = bank_ptr(addr); global_mbp = bank_ptr (addr); //if (mbp && mbp->write_word){ if (global_mbp && global_mbp->write_word) { /*ywc 2005-03-31 */ /*ywc 2005-04-22 move it to real_write_word */ /* if(!skyeye_config.no_dbct){ //teawater add for arm2x86 2005.03.18---------------------------------- tb_setdirty(state, addr, mbp); //AJ2D---------------------------------------------------------- } */ //mbp->write_word(state, addr, data); global_mbp->write_word (state, addr, data); } else { //fprintf(stderr, "SKYEYE:NumInstrs %llu, mem_write_word addr = %x no bank\n",state->NumInstrs, addr); //chy 2003-09-03 //SKYEYE_OUTREGS(stderr); //exit(-1); }}/* if you want a wanring about strange accesses put this on the region */ARMwordwarn_read_word (ARMul_State * state, ARMword addr){ fprintf (stderr, "WARNING: illegal read from 0x%x @ 0x%x\n", addr, state->pc); return (0xffffffff);}voidwarn_write_byte (ARMul_State * state, ARMword addr, ARMword data){ fprintf (stderr, "SKYEYE: WARNING: illegal write byte to 0x%x of 0x%x @ 0x%x\n", addr, data, state->pc);}voidwarn_write_halfword (ARMul_State * state, ARMword addr, ARMword data){ fprintf (stderr, "SKYEYE: WARNING: illegal write halfword to 0x%x of 0x%x @ 0x%x\n", addr, data, state->pc);}voidwarn_write_word (ARMul_State * state, ARMword addr, ARMword data){ fprintf (stderr, "SKYEYE: WARNING: illegal write word to 0x%x of 0x%x @ 0x%x\n", addr, data, state->pc);}/* Accesses that map to gaps in the memory map go here: */ARMwordfail_read_word (ARMul_State * state, ARMword addr){ fprintf (stderr, "illegal read from 0x%x\n", addr); ARMul_Debug (state, 0, 0); return (0xffffffff);}voidfail_write_word (ARMul_State * state, ARMword addr, ARMword data){ fprintf (stderr, "illegal write to 0x%x of 0x%x\n", addr, data); ARMul_Debug (state, 0, 0);}ARMword_read_word (ARMul_State * state, ARMword addr){ fprintf (stderr, "undefined read from 0x%x\n", addr); return (0xffffffff);}void_write_word (ARMul_State * state, ARMword addr, ARMword data){ fprintf (stderr, "undefined write to 0x%x of 0x%x\n", addr, data);}ARMwordreal_read_byte (ARMul_State * state, ARMword addr){ ARMword data, offset; /* mem_bank_t *mbp = bank_ptr(addr); if(!mbp) { fprintf(stderr, "real_read_byte. No bank at address 0x%x", addr); return 0; } */ //data = state->mem.rom[mbp - skyeye_config.mem.mem_banks][(addr - mbp->addr) >> 2]; data = state->mem.rom[global_mbp - state->mem_bank->mem_banks][(addr - global_mbp-> addr) >> 2]; offset = (((ARMword) state->bigendSig * 3) ^ (addr & 3)) << 3; /* bit offset into the word */ return (data >> offset & 0xffL);}ARMwordreal_read_halfword (ARMul_State * state, ARMword addr){ ARMword data, offset; /* mem_bank_t *mbp = bank_ptr(addr); if(!mbp) { fprintf(stderr, "real_read_halfword. No bank at address 0x%x", addr); return 0; } */ //data = state->mem.rom[mbp - skyeye_config.mem.mem_banks][(addr - mbp->addr) >> 2]; data = state->mem.rom[global_mbp - state->mem_bank->mem_banks][(addr - global_mbp-> addr) >> 2]; offset = (((ARMword) state->bigendSig * 2) ^ (addr & 2)) << 3; /* bit offset into the word */ return (data >> offset) & 0xffff;}ARMwordreal_read_word (ARMul_State * state, ARMword addr){ ARMword data; /* mem_bank_t *mbp = bank_ptr(addr); if(!mbp) { fprintf(stderr, "real_read_word. No bank at address 0x%x", addr); return 0; } */ //data = state->mem.rom[mbp - skyeye_config.mem.mem_banks][(addr - mbp->addr) >> 2]; data = state->mem.rom[global_mbp - state->mem_bank->mem_banks][(addr - global_mbp-> addr) >> 2]; return data;}voidreal_write_byte (ARMul_State * state, ARMword addr, ARMword data){ ARMword *temp, offset; /* mem_bank_t *mbp = bank_ptr(addr); if(!mbp) { fprintf(stderr, "real_write_byte. No bank at address 0x%x", addr); return; } */ /*ywc 2005-04-22, I move it from mem_write_byte to here */#ifndef NO_DBCT if (!skyeye_config.no_dbct) { //teawater add for arm2x86 2005.03.18---------------------------------- //tb_setdirty(state, addr, mbp); tb_setdirty (state, addr, global_mbp); //AJ2D---------------------------------------------------------- }#endif //temp = &state->mem.rom[mbp - skyeye_config.mem.mem_banks][(addr - mbp->addr) >> 2]; temp = &state->mem.rom[global_mbp - state->mem_bank->mem_banks][(addr - global_mbp-> addr) >> 2]; offset = (((ARMword) state->bigendSig * 3) ^ (addr & 3)) << 3; /* bit offset into the word */ //printf(stderr,"SKYEYE real_write_byte 1: temp %x,tempval %x,offset %x, addr %x, data %x\n",temp,*temp,offset,addr,data); *temp = (*temp & ~(0xffL << offset)) | ((data & 0xffL) << offset); //printf(stderr,"SKYEYE real_write_byte 2: temp %x,tempval %x,offset %x, addr %x, data %x\n",temp,*temp,offset,addr,data); //chy 2004-03-11: add lcd test //chy 2004-03-17 fix a bug: didn't test skyeye_config.no_lcd //chy 2004-09-29 disable blow lines /* if((!skyeye_config.no_lcd) && *(state->mach_io.lcd_is_enable) && addr >= *(state->mach_io.lcd_addr_begin) && addr <= *(state->mach_io.lcd_addr_end)){ //fprintf(stderr, "SKYEYE,lcd enabled write byte lcd memory addr %x, data %x\n",addr,*temp); skyeye_config.mach->mach_lcd_write(state,addr,*temp); } */}voidreal_write_halfword (ARMul_State * state, ARMword addr, ARMword data){ ARMword *temp, offset; /* mem_bank_t *mbp = bank_ptr(addr); if (!mbp) { fprintf(stderr, "real_write_halfword error. No bank at address 0x%x.\n", addr); return; } */ /*ywc 2005-04-22, I move it from mem_write_byte to here */#ifndef NO_DBCT if (!skyeye_config.no_dbct) { //teawater add for arm2x86 2005.03.18---------------------------------- //tb_setdirty(state, addr, mbp); tb_setdirty (state, addr, global_mbp); //AJ2D---------------------------------------------------------- }#endif //temp = &state->mem.rom[mbp - skyeye_config.mem.mem_banks][(addr - mbp->addr) >> 2]; temp = &state->mem.rom[global_mbp - state->mem_bank->mem_banks][(addr - global_mbp-> addr) >> 2]; offset = (((ARMword) state->bigendSig * 2) ^ (addr & 2)) << 3; /* bit offset into the word */ *temp = (*temp & ~(0xffffL << offset)) | ((data & 0xffffL) << offset); //chy 2004-03-11: add lcd test //chy 2004-03-17 fix a bug: didn't test skyeye_config.no_lcd //chy 2004-09-29 disable blow lines /* if((!skyeye_config.no_lcd) && *(state->mach_io.lcd_is_enable) && addr >= *(state->mach_io.lcd_addr_begin) && addr <= *(state->mach_io.lcd_addr_end)){ //fprintf(stderr, "SKYEYE,lcd enabled write byte lcd memory addr %x, data %x\n",addr,*temp); skyeye_config.mach->mach_lcd_write(state,addr,*temp); } */}voidreal_write_word (ARMul_State * state, ARMword addr, ARMword data){ /* mem_bank_t *mbp = bank_ptr(addr); if(!mbp) { fprintf(stderr, "real_write_word. No bank at address 0x%x", addr); return ; } */ /*ywc 2005-04-22, I move it from mem_write_byte to here */#ifndef NO_DBCT if (!skyeye_config.no_dbct) { //teawater add for arm2x86 2005.03.18---------------------------------- //tb_setdirty(state, addr, mbp); tb_setdirty (state, addr, global_mbp); //AJ2D---------------------------------------------------------- }#endif //state->mem.rom[mbp - skyeye_config.mem.mem_banks][(addr - mbp->addr) >> 2] = data; state->mem.rom[global_mbp - state->mem_bank->mem_banks][(addr - global_mbp->addr) >> 2] = data; //chy 2004-03-11: add lcd test //chy 2004-03-17 fix a bug: didn't test skyeye_config.no_lcd //chy 2004-09-29 disable blow lines /* if((!skyeye_config.no_lcd) && *(state->mach_io.lcd_is_enable) && addr >= *(state->mach_io.lcd_addr_begin) && addr <= *(state->mach_io.lcd_addr_end)){ //fprintf(stderr, "SKYEYE,lcd enabled write byte lcd memory addr %x, data %x\n",addr,*temp); skyeye_config.mach->mach_lcd_write(state,addr,data); } */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -