void GBAMemoryViewer::readData(u32 address, int len, u8 *data)
{
  if(emulating && rom != NULL) {
    for(int i = 0; i < len; i++) {
      *data++ = CPUReadByteQuick(address);
      address++;
    }
  } else {
    for(int i = 0; i < len; i++) {
      *data++ = 0;
      address++;
    }    
  }
}
Esempio n. 2
0
void winOutput(const char *s, u32 addr)
{
	if (s)
	{
		log(s);
	}
	else
	{
		CString str;
		while (char c = CPUReadByteQuick(addr++))
		{
			str += c;
		}
		log(str);
	}
}
void MemoryViewerDlg::OnSave() 
{
  if(rom != NULL)
  {
  MemoryViewerAddressSize dlg;
  CString buffer;

  dlg.setAddress(m_viewer.getCurrentAddress());

  LPCTSTR exts[] = { ".dmp" };
  
  if(dlg.DoModal() == IDOK) {
    CString filter = theApp.winLoadFilter(IDS_FILTER_DUMP);
    CString title = winResLoadString(IDS_SELECT_DUMP_FILE);

    FileDlg file(this,
                 buffer,
                 filter,
                 0,
                 "DMP",
                 exts,
                 "",
                 title, 
                 true);
    if(file.DoModal() == IDOK) {
      buffer = file.GetPathName();

      FILE *f = fopen(buffer, "wb");
      
      if(f == NULL) {
        systemMessage(IDS_ERROR_CREATING_FILE, buffer);
        return;
      }

      int size = dlg.getSize();
      u32 addr = dlg.getAddress();

      for(int i = 0; i < size; i++) {
        fputc(CPUReadByteQuick(addr), f);
        addr++;
      }

      fclose(f);
    }
  }
}
}
void GBAMemoryViewer::editData(u32 address, int size, int mask, u32 value)
{
  u32 oldValue;
  
  switch(size) {
  case 8:
    oldValue = (CPUReadByteQuick(address) & mask) | value;
    CPUWriteByteQuick(address, oldValue);
    break;
  case 16:
    oldValue = (CPUReadHalfWordQuick(address) & mask) | value;
    CPUWriteHalfWordQuick(address, oldValue);
    break;
  case 32:
    oldValue = (CPUReadMemoryQuick(address) & mask) | value;
    CPUWriteMemoryQuick(address, oldValue);
    break;
  }
}