void RefillListEv(wxCommandEvent& ev) { // what an unsafe calling convention // examination of disArm shows that max len is 69 chars // (e.g. 0x081cb6db), and I assume disThumb is shorter char buf[80]; dis->strings.clear(); dis->addrs.clear(); uint32_t addr = dis->topaddr; bool arm = dismode == 1 || (armState && dismode != 2); dis->back_size = arm ? 4 : 2; for (int i = 0; i < dis->nlines; i++) { dis->addrs.push_back(addr); if (arm) addr += disArm(addr, buf, DIS_VIEW_CODE | DIS_VIEW_ADDRESS); else addr += disThumb(addr, buf, DIS_VIEW_CODE | DIS_VIEW_ADDRESS); dis->strings.push_back(wxString(buf, wxConvLibc)); } dis->Refill(); }
void Disassemble::refresh() { if(rom == NULL) return; bool arm = armState; if(mode != 0) { if(mode == 1) arm = true; else arm = false; } int h = m_list.GetItemHeight(0); RECT r; m_list.GetClientRect(&r); count = (r.bottom - r.top+1)/h; m_list.ResetContent(); if(!emulating && theApp.cartridgeType == 0) return; char buffer[80]; u32 addr = address; int i; int sel = -1; for(i = 0; i < count; i++) { if(addr == armNextPC) sel = i; if(arm) { addr += disArm(addr, buffer, 3); } else { addr += disThumb(addr, buffer, 3); } m_list.InsertString(-1, buffer); } if(sel != -1) m_list.SetCurSel(sel); CPUUpdateCPSR(); for(i = 0; i < 17; i++) { sprintf(buffer, "%08x", reg[i].I); GetDlgItem(IDC_R0+i)->SetWindowText(buffer); } m_n = (reg[16].I & 0x80000000) != 0; m_z = (reg[16].I & 0x40000000) != 0; m_c = (reg[16].I & 0x20000000) != 0; m_v = (reg[16].I & 0x10000000) != 0; m_i = (reg[16].I & 0x80) != 0; m_f = (reg[16].I & 0x40) != 0; m_t = (reg[16].I & 0x20) != 0; UpdateData(FALSE); int v = reg[16].I & 0x1f; sprintf(buffer, "%02x", v); GetDlgItem(IDC_MODE)->SetWindowText(buffer); }