int emu_step (emu *e, ut8 *buf) { int ret; ut64 addr = r_reg_getv (e->reg, r_reg_get_name (e->reg, R_REG_NAME_PC)); //Check Breakboints here: new return stat for that if (e->plugin->read) { if (e->plugin->min_read_sz) e->plugin->read (e, addr, buf, e->plugin->min_read_sz); else e->plugin->read (e, addr, buf, sizeof(int)); } else { if (e->plugin->min_read_sz) emu_read (e, addr, buf, e->plugin->min_read_sz); else emu_read (e, addr, buf, sizeof(int)); } if (e->plugin->deps & EMU_PLUGIN_DEP_ASM) { //only disassemble if it is necessary r_asm_set_pc (e->a, addr); if (e->plugin->min_read_sz) r_asm_disassemble (e->a, e->op, buf, e->plugin->min_read_sz); else r_asm_disassemble (e->a, e->op, buf, sizeof(int)); } if (e->plugin->deps & EMU_PLUGIN_DEP_ANAL) { //only analize if it is necessary if (e->plugin->min_read_sz) r_anal_op (e->anal, e->anop, addr, buf, e->plugin->min_read_sz); else r_anal_op (e->anal, e->anop, addr, buf, sizeof(int)); } ret = e->plugin->step (e, buf); if (e->plugin->deps & EMU_PLUGIN_DEP_ANAL) r_anal_op_fini (e->anop); return ret; }
int gb_read(emu *e, ut64 addr, ut8 *buf, ut32 len) { if(0x4000 <= addr && addr < 0x8000) return emu_read(e, addr + (r_reg_getv(e->reg, "mbcrom") << 16), buf, len); if(0xa000 <= addr && addr < 0xc000) return emu_read(e, addr + (r_reg_getv(e->reg, "mbcram") << 16), buf, len); return emu_read(e, addr, buf, len); }
/* * VOP_READ */ static int emufs_read(struct vnode *v, struct uio *uio) { struct emufs_vnode *ev = v->vn_data; uint32_t amt; size_t oldresid; int result; KASSERT(uio->uio_rw==UIO_READ); while (uio->uio_resid > 0) { amt = uio->uio_resid; if (amt > EMU_MAXIO) { amt = EMU_MAXIO; } oldresid = uio->uio_resid; result = emu_read(ev->ev_emu, ev->ev_handle, amt, uio); if (result) { return result; } if (uio->uio_resid == oldresid) { /* nothing read - EOF */ break; } } return 0; }