void read_in_mem(t_vm *vm) { t_proc *proc; for (proc = vm->proc; proc; proc = proc->next) if (proc->cur_work == READING) { if (!proc->rw->size || (proc->rw->cur_pos < proc->rw->size)) { read_mem_value(vm, proc); inc_pc(proc->pc); proc->rw->cur_pos++; } if (!(proc->rw->cur_pos < 2) && !proc->rw->size) { proc->rw->size = get_inst_size(proc->rw->inst); proc->rw->delay = get_inst_delay(proc->rw->inst) + 1; } if (proc->rw->size && proc->rw->cur_pos >= proc->rw->size) { proc->cur_work = WAITING; if (vm->flags & TRACE) trace_mode(vm, proc); } } }
static bool read_instruction(u32 address, u32 * inst, unsigned int * inst_size) { unsigned int size; if (inst == NULL) return false; *inst = 0; size = get_inst_size(address); if (inst_size != NULL) { *inst_size = size; } address = address & ~0x1; return read_data_from_addr(address, inst, size); }