void UIMemoryTransfer::accept() { u32 startAddress = leStartAddress->text().toUInt(0, 16); u32 endAddress = leEndAddress->text().toUInt(0, 16); if (rbDownload->isChecked() && startAddress >= endAddress) { CommonDialogs::information("Invalid Start/End Address Combination", "Error"); return; } mYabauseThread->pauseEmulation( false, true ); if (rbDownload->isChecked()) { // Let's do a ram dump MappedMemorySave(leFile->text().toLatin1(), startAddress, endAddress - startAddress); } else { // upload to ram and possibly execute // Is this a program? if (cbPC->checkState() == Qt::Checked) { MappedMemoryLoadExec(leFile->text().toLatin1(), startAddress); } else { MappedMemoryLoad(leFile->text().toLatin1(), startAddress); } } QDialog::accept(); }
void MappedMemoryLoadExec(const char *filename, u32 pc) { char *p; size_t i; if ((p = strrchr(filename, '.'))) { p = strdup(p); for (i = 0; i < strlen(p); i++) p[i] = toupper(p[i]); if (strcmp(p, ".COF") == 0 || strcmp(p, ".COFF") == 0) { MappedMemoryLoadCoff(filename); free(p); return; } else if(strcmp(p, ".ELF") == 0) { MappedMemoryLoadElf(filename); free(p); return; } free(p); } YabauseResetNoLoad(); // Setup the vector table area, etc. YabauseSpeedySetup(); MappedMemoryLoad(filename, pc); SH2GetRegisters(MSH2, &MSH2->regs); MSH2->regs.PC = pc; SH2SetRegisters(MSH2, &MSH2->regs); }
LRESULT CALLBACK MemTransferDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { char tempstr[MAX_PATH]; switch (uMsg) { case WM_INITDIALOG: { SetDlgItemText(hDlg, IDC_EDITTEXT1, mtrnsfilename); sprintf(tempstr, "%08X", (int)mtrnssaddress); SetDlgItemTextA(hDlg, IDC_EDITTEXT2, tempstr); sprintf(tempstr, "%08X", (int)mtrnseaddress); SetDlgItemTextA(hDlg, IDC_EDITTEXT3, tempstr); if (mtrnsreadwrite == 0) { SendMessage(GetDlgItem(hDlg, IDC_DOWNLOADMEM), BM_SETCHECK, BST_CHECKED, 0); SendMessage(GetDlgItem(hDlg, IDC_UPLOADMEM), BM_SETCHECK, BST_UNCHECKED, 0); EnableWindow(GetDlgItem(hDlg, IDC_EDITTEXT3), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_CHECKBOX1), FALSE); } else { SendMessage(GetDlgItem(hDlg, IDC_DOWNLOADMEM), BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(GetDlgItem(hDlg, IDC_UPLOADMEM), BM_SETCHECK, BST_CHECKED, 0); if (mtrnssetpc) SendMessage(GetDlgItem(hDlg, IDC_CHECKBOX1), BM_SETCHECK, BST_CHECKED, 0); EnableWindow(GetDlgItem(hDlg, IDC_EDITTEXT3), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CHECKBOX1), TRUE); } return TRUE; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_BROWSE: { OPENFILENAME ofn; if (SendMessage(GetDlgItem(hDlg, IDC_DOWNLOADMEM), BM_GETCHECK, 0, 0) == BST_CHECKED) { WCHAR filter[1024]; CreateFilter(filter, 1024, "All files (*.*)", "*.*", "Binary Files", "*.BIN", NULL); SetupOFN(&ofn, OFN_DEFAULTSAVE, hDlg, filter, mtrnsfilename, sizeof(mtrnsfilename)/sizeof(TCHAR)); if (GetSaveFileName(&ofn)) SetDlgItemText(hDlg, IDC_EDITTEXT1, mtrnsfilename); } else { WCHAR filter[1024]; CreateFilter(filter, 1024, "All files (*.*)", "*.*", "Binary Files", "*.BIN", "COFF Files", "*.COF;*.COFF", NULL); // setup ofn structure SetupOFN(&ofn, OFN_DEFAULTLOAD, hDlg, filter, mtrnsfilename, sizeof(mtrnsfilename)/sizeof(TCHAR)); if (GetOpenFileName(&ofn)) SetDlgItemText(hDlg, IDC_EDITTEXT1, mtrnsfilename); } return TRUE; } case IDOK: { GetDlgItemText(hDlg, IDC_EDITTEXT1, mtrnsfilename, MAX_PATH); GetDlgItemTextA(hDlg, IDC_EDITTEXT2, tempstr, 9); sscanf(tempstr, "%08lX", &mtrnssaddress); GetDlgItemTextA(hDlg, IDC_EDITTEXT3, tempstr, 9); sscanf(tempstr, "%08lX", &mtrnseaddress); if ((mtrnseaddress - mtrnssaddress) < 0) { MessageBox (hDlg, _16("Invalid Start/End Address Combination"), _16("Error"), MB_OK | MB_ICONINFORMATION); EndDialog(hDlg, TRUE); return FALSE; } WideCharToMultiByte(CP_ACP, 0, mtrnsfilename, -1, tempstr, sizeof(tempstr), NULL, NULL); if (SendMessage(GetDlgItem(hDlg, IDC_DOWNLOADMEM), BM_GETCHECK, 0, 0) == BST_CHECKED) { // Let's do a ram dump MappedMemorySave(tempstr, mtrnssaddress, mtrnseaddress - mtrnssaddress); mtrnsreadwrite = 0; } else { // upload to ram and possibly execute mtrnsreadwrite = 1; // Is this a program? if (SendMessage(GetDlgItem(hDlg, IDC_CHECKBOX1), BM_GETCHECK, 0, 0) == BST_CHECKED) { MappedMemoryLoadExec(tempstr, mtrnssaddress); mtrnssetpc = TRUE; } else { MappedMemoryLoad(tempstr, mtrnssaddress); mtrnssetpc = FALSE; } } EndDialog(hDlg, TRUE); return TRUE; } case IDCANCEL: { EndDialog(hDlg, FALSE); return TRUE; } case IDC_UPLOADMEM: { if (HIWORD(wParam) == BN_CLICKED) { EnableWindow(GetDlgItem(hDlg, IDC_EDITTEXT3), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CHECKBOX1), TRUE); } break; } case IDC_DOWNLOADMEM: { if (HIWORD(wParam) == BN_CLICKED) { EnableWindow(GetDlgItem(hDlg, IDC_EDITTEXT3), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_CHECKBOX1), FALSE); } break; } default: break; } break; } default: break; } return FALSE; }