void monitor_print_mem(int mem_index, int rows, int cols){ int i,j; int pc = pc2int(); clear();//move(0,0); mon_print_opcodeinfo0(); mon_print_registers(); mon_print_src_line(pc); printw("\n "); for(i=0;i<cols;i++){ printw("%02x ",(mem_index+i)%256); } i=0; for(j=0; j<rows; ++j) { printw("\n%04x ", mem_index +j*cols); for(i=0; i<cols; ++i) { if(pc==mem_index+ j*cols+i){ printw("%02x ",conv_bitstr2int(memory[mem_index + j*cols+i],0,7)); //print_color(conv_bitstr2int(memory[mem_index + j*cols+i],0,7)); //printf(RED "%02x " RESET ,conv_bitstr2int(memory[mem_index + j*cols+i],0,7)); } else { printw("%02x ",conv_bitstr2int(memory[mem_index + j*cols+i],0,7)); // mvprintw(0,0,"%02x",conv_bitstr2int(memory[mem_index + j*cols+i],0,7)); //print_color(conv_bitstr2int(memory[mem_index + j*cols+i],0,7)); // printf("%02x ", conv_bitstr2int(memory[mem_index + j*cols+i],0,7)); } } } printw("\n"); doupdate(); refresh(); }
// ######## ## ## ######## ###### // ## ## ## ## ## ## // ## ## ## ## ## // ###### ### ###### ## // ## ## ## ## ## // ## ## ## ## ## ## // ######## ## ## ######## ###### // cp value into mem[pc] and exec int execute_cmd(struct _6510_cpu* cpu, char memory[][9], char* string){ int op, lb, hb; int pc=pc2int(cpu); sscanf(string, "x %2x %2x %2x", &op, &lb, &hb); int2register(op, (char*)&(memory[pc])); int2register(lb, (char*)&(memory[pc+1])); int2register(hb, (char*)&memory[pc+2]); fetch(cpu, memory); exec(cpu, memory); print_cpu_dis(cpu,memory); return 1; }
int until_cmd(struct _6510_cpu* cpu, char memory[][9], char* string){ int adr; // char* buffer; sscanf(string, " %*s %4x ", &adr); if( !(adr>MEMORY_SIZE || adr < 0) ){ while(adr!=pc2int(cpu)){ fetch(cpu, memory); exec(cpu, memory); print_cpu_dis(cpu,memory); } } return 1; }
static void read_mem_value(t_vm *vm, t_proc *proc) { int pc; pc = pc2int(proc->pc) % vm->size; if ((pc % 2) == (proc->rw->cur_pos % 2)) proc->rw->inst[proc->rw->cur_pos / 2] |= proc->rw->cur_pos % 2 ? vm->mem[pc / 2] & 0x0f : vm->mem[pc / 2] & 0xf0; else proc->rw->inst[proc->rw->cur_pos / 2] |= proc->rw->cur_pos % 2 ? (vm->mem[pc / 2] & 0xf0) >> 4 : (vm->mem[pc / 2] & 0x0f) << 4; }
static void my_store(t_func_arg *arg) { int pos; char qrt; qrt = arg->proc->wbuf->buf[arg->proc->wbuf->place / 2]; if (arg->proc->wbuf->place % 2) qrt <<= 4; pos = (pc2int(arg->proc->pc) + neg_mod(reg2int(arg->proc->reg[arg->rx - 1]) + 3 - arg->proc->wbuf->place, IDX_MOD)); while (pos < 0) pos += arg->vm->size; pos %= arg->vm->size; add_write(pos, qrt, arg); (arg->proc->wbuf->place)--; if (arg->proc->wbuf->place < 3 - arg->proc->p) { arg->proc->wbuf->place = -1; arg->proc->cur_work = WAIT_AFTER; arg->proc->rw->delay = 0; } }
void print_cpu_dis(struct _6510_cpu* cpu, char memory[][9] ) { char dis_txt[] = " \n"; int pc = pc2int(cpu); //dis(cpu, (char*)memory[pc], dis_txt); dis(cpu, memory+pc, dis_txt); printf("AC XR YR SP NV-BDIZC \n"); printf("%02x %02x %02x %02x %c%c%c%c%c%c%c%c %s\n", conv_bitstr2int(cpu->rega,0,7), conv_bitstr2int(cpu->regx,0,7), conv_bitstr2int(cpu->regy,0,7), conv_bitstr2int(cpu->sp,0,7), cpu->flags[NFLAG], cpu->flags[OFLAG], '-', cpu->flags[BFLAG], cpu->flags[DFLAG], cpu->flags[IFLAG], cpu->flags[ZFLAG], cpu->flags[CFLAG], dis_txt ); }