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++; } } }
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; } }