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();
    }
Exemple #2
0
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);
}