コード例 #1
0
void GBDisassemble::refresh()
{
  if(gbRom == NULL)
    return;

  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 != 1)
    return;

  char disasm[80];
  u16 addr = address;
  int i;
  int sel = -1;
  for(i = 0; i < count; i++) {
    if(addr == PC.W)
      sel = i;
    addr += gbDis(disasm, addr);
    m_list.InsertString(-1, CString(disasm));
  }
  lastAddress = addr-1;
  if(sel != -1)
    m_list.SetCurSel(sel);

  TCHAR buffer[80];

  _stprintf(buffer, _T("%04x"), AF.W);
  GetDlgItem(IDC_R0)->SetWindowText(buffer);
  _stprintf(buffer, _T("%04x"), BC.W);
  GetDlgItem(IDC_R1)->SetWindowText(buffer);
  _stprintf(buffer, _T("%04x"), DE.W);
  GetDlgItem(IDC_R2)->SetWindowText(buffer);
  _stprintf(buffer, _T("%04x"), HL.W);
  GetDlgItem(IDC_R3)->SetWindowText(buffer);
  _stprintf(buffer, _T("%04x"), SP.W);
  GetDlgItem(IDC_R4)->SetWindowText(buffer);
  _stprintf(buffer, _T("%04x"), PC.W);
  GetDlgItem(IDC_R5)->SetWindowText(buffer);
  _stprintf(buffer, _T("%04x"), IFF);
  GetDlgItem(IDC_R6)->SetWindowText(buffer);
  _stprintf(buffer, _T("%04x"), register_LY);
  GetDlgItem(IDC_LY)->SetWindowText(buffer);

  m_z = (AF.B.B0 & 0x80) != 0;
  m_n = (AF.B.B0 & 0x40) != 0;
  m_h = (AF.B.B0 & 0x20) != 0;
  m_c = (AF.B.B0 & 0x10) != 0;
  UpdateData(FALSE);
}
コード例 #2
0
    void RefillListEv(wxCommandEvent& ev)
    {
        // what an unsafe calling convention
        // examination of gbDis shows that max len is 26 chars
        // (e.g. 0xe2)
        char buf[30];
        uint16_t addr = dis->topaddr;
        dis->strings.clear();
        dis->addrs.clear();
        dis->back_size = 1;

        for (int i = 0; i < dis->nlines; i++) {
            dis->addrs.push_back(addr);
            addr += gbDis(buf, addr);
            dis->strings.push_back(wxString(buf, wxConvLibc));
        }

        dis->Refill();
    }
コード例 #3
0
ファイル: GBDisassemble.cpp プロジェクト: tiagodiogo/AVE-2015
void GBDisassemble::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
  char buffer[80];

  switch(nSBCode) {
  case SB_LINEDOWN:
    address += gbDis(buffer, address);
    break;
  case SB_LINEUP:
    address--;
    break;
  case SB_PAGEDOWN:
    address = lastAddress;
    break;
  case SB_PAGEUP:
    address -= count;
    break;
  }
  refresh();

  CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}