auto R65816::op_write_addrr_w(Reg16& reg, Reg16& idx) { aa.l = readPC(); aa.h = readPC(); idle(); writeDB(aa.w + idx + 0, reg >> 0); L writeDB(aa.w + idx + 1, reg >> 8); }
auto R65816::op_write_longr_w(Reg16& idx) { aa.l = readPC(); aa.h = readPC(); aa.b = readPC(); writeLong(aa.d + idx + 0, r.a.l); L writeLong(aa.d + idx + 1, r.a.h); }
auto R65816::op_jmp_iaddr() { aa.l = readPC(); aa.h = readPC(); rd.l = readAddr(aa.w + 0); L rd.h = readAddr(aa.w + 1); r.pc.w = rd.w; }
auto R65816::op_jmp_iaddrx() { aa.l = readPC(); aa.h = readPC(); idle(); rd.l = readPB(aa.w + r.x.w + 0); L rd.h = readPB(aa.w + r.x.w + 1); r.pc.w = rd.w; }
auto R65816::op_jmp_iladdr() { aa.l = readPC(); aa.h = readPC(); rd.l = readAddr(aa.w + 0); rd.h = readAddr(aa.w + 1); L rd.b = readAddr(aa.w + 2); r.pc.d = rd.d; }
auto R65816::op_jsr_addr() { aa.l = readPC(); aa.h = readPC(); idle(); r.pc.w--; writeSP(r.pc.h); L writeSP(r.pc.l); r.pc.w = aa.w; }
auto R65816::op_branch(bool flag, bool value) { if(flag != value) { L rd.l = readPC(); } else { rd.l = readPC(); aa.w = r.pc.d + (int8)rd.l; idle6(aa.w); L idle(); r.pc.w = aa.w; } }
auto R65816::op_jsr_iaddrx() { aa.l = readPC(); writeSPn(r.pc.h); writeSPn(r.pc.l); aa.h = readPC(); idle(); rd.l = readPB(aa.w + r.x.w + 0); L rd.h = readPB(aa.w + r.x.w + 1); r.pc.w = rd.w; E r.s.h = 0x01; }
auto R65816::op_jsr_long() { aa.l = readPC(); aa.h = readPC(); writeSPn(r.pc.b); idle(); aa.b = readPC(); r.pc.w--; writeSPn(r.pc.h); L writeSPn(r.pc.l); r.pc.d = aa.d; E r.s.h = 0x01; }
auto R65816::op_sta_idp_b() { dp = readPC(); idle2(); aa.l = readDP(dp + 0); aa.h = readDP(dp + 1); L writeDB(aa.w, r.a.l); }
auto R65816::op_write_dpr_w(Reg16& reg, Reg16& idx) { dp = readPC(); idle2(); idle(); writeDP(dp + idx + 0, reg >> 0); L writeDP(dp + idx + 1, reg >> 8); }
auto R65816::op_bra() { rd.l = readPC(); aa.w = r.pc.d + (int8)rd.l; idle6(aa.w); L idle(); r.pc.w = aa.w; }
auto R65816::op_sta_isry_b() { sp = readPC(); idle(); aa.l = readSP(sp + 0); aa.h = readSP(sp + 1); idle(); L writeDB(aa.w + r.y.w, r.a.l); }
auto R65816::op_sta_ildp_b() { dp = readPC(); idle2(); aa.l = readDPn(dp + 0); aa.h = readDPn(dp + 1); aa.b = readDPn(dp + 2); L writeLong(aa.d, r.a.l); }
auto R65816::op_sta_ildpy_w() { dp = readPC(); idle2(); aa.l = readDPn(dp + 0); aa.h = readDPn(dp + 1); aa.b = readDPn(dp + 2); writeLong(aa.d + r.y.w + 0, r.a.l); L writeLong(aa.d + r.y.w + 1, r.a.h); }
auto R65816::op_sta_idpy_w() { dp = readPC(); idle2(); aa.l = readDP(dp + 0); aa.h = readDP(dp + 1); idle(); writeDB(aa.w + r.y.w + 0, r.a.l); L writeDB(aa.w + r.y.w + 1, r.a.h); }
auto R65816::op_sta_sr_b() { sp = readPC(); idle(); L writeSP(sp, r.a.l); }
auto R65816::op_sta_sr_w() { sp = readPC(); idle(); writeSP(sp + 0, r.a.l); L writeSP(sp + 1, r.a.h); }
auto R65816::op_jmp_long() { rd.l = readPC(); rd.h = readPC(); L rd.b = readPC(); r.pc.d = rd.d; }
auto R65816::op_jmp_addr() { rd.l = readPC(); L rd.h = readPC(); r.pc.w = rd.w; }
auto R65816::op_write_dpr_b(Reg16& reg, Reg16& idx) { dp = readPC(); idle2(); idle(); L writeDP(dp + idx, reg); }
auto R65816::op_write_dp_b(Reg16& reg) { dp = readPC(); idle2(); L writeDP(dp, reg); }
void updateView(WINDOW * win){ int i; int temp = 0; int x,y; y=START_Y; x=START_X+1; // print axis row for(i=0; i<16; i++){ mvwprintw(win,y,x,"%X", temp++); x+=3; } temp = 0; x = START_X-2; y=START_Y+1; // print axis col for(i=0; i<16; i++){ mvwprintw(win,y,x,"%X", temp++); y++; } y = START_Y; // Print memory for(i=0; i<256; i++){ if(i%16==0){ y++; x=START_X; } if(highlight[section] == i && section == SECTION_MEMORY){ wattron(win, A_REVERSE); mvwprintw(win,y,x,"%.2X", readMemoryAt(m,i)); wattroff(win, A_REVERSE); }else{ mvwprintw(win,y,x,"%.2X", readMemoryAt(m,i)); } x+=3; } // Print Registers x = START_X; y+=2; for(i=0; i<16; i++){ mvwprintw(win,y,x,"R%X",i ); x+= 3; } x = START_X; y++; for(i=0; i<16; i++){ if(highlight[section] == i && section == SECTION_REGISTERS){ wattron(win, A_REVERSE); mvwprintw(win,y,x,"%.2X", readRegistersAt(m,i)); wattroff(win, A_REVERSE); }else{ mvwprintw(win,y,x,"%.2X", readRegistersAt(m,i)); } x+= 3; } x = START_X; y += 2; // print pc and ic mvwprintw(win,y,x,"PC : "); if(section == SECTION_PC){ wattron(win, A_REVERSE); mvwprintw(win,y,x+5,"%.2X", readPC(m)); wattroff(win, A_REVERSE); }else{ mvwprintw(win,y,x+5,"%.2X", readPC(m)); } x+= 12; mvwprintw(win,y,x,"IR : %.4X", readIR(m)); x+= 20; mvwprintw(win,y,x,"STATUS : "); if(getStatus(m) == NORMAL){ mvwprintw(win,y,x+9,"NORMAL"); }else if(getStatus(m) == HALTED){ mvwprintw(win,y,x+9,"HALTED"); } else if(getStatus(m) == ERROR){ mvwprintw(win,y,x+9,"ERROR "); } wrefresh(win); }
auto R65816::op_write_addrr_b(Reg16& reg, Reg16& idx) { aa.l = readPC(); aa.h = readPC(); idle(); L writeDB(aa.w + idx, reg); }
auto R65816::op_write_addr_w(Reg16& reg) { aa.l = readPC(); aa.h = readPC(); writeDB(aa.w + 0, reg >> 0); L writeDB(aa.w + 1, reg >> 8); }
auto R65816::op_brl() { rd.l = readPC(); rd.h = readPC(); L idle(); r.pc.w = r.pc.d + (int16)rd.w; }
auto R65816::op_write_addr_b(Reg16& reg) { aa.l = readPC(); aa.h = readPC(); L writeDB(aa.w, reg); }
auto R65816::op_write_dp_w(Reg16& reg) { dp = readPC(); idle2(); writeDP(dp + 0, reg >> 0); L writeDP(dp + 1, reg >> 8); }