void UIDebugSH2::updateAll() { updateRegList(); if (debugSH2) { sh2regs_struct sh2regs; SH2GetRegisters(debugSH2, &sh2regs); updateCodeList(sh2regs.PC); updateBackTrace(); updateTrackInfLoop(); } }
void UIDebugSH2::updateRegList() { int i; sh2regs_struct sh2regs; QString str; if (debugSH2 == NULL) return; SH2GetRegisters(debugSH2, &sh2regs); lwRegisters->clear(); for (i = 0; i < 16; i++) { str.sprintf("R%02d = %08X", i, (int)sh2regs.R[i]); lwRegisters->addItem(str); } // SR str.sprintf("SR = %08X", (int)sh2regs.SR.all); lwRegisters->addItem(str); // GBR str.sprintf("GBR = %08X", (int)sh2regs.GBR); lwRegisters->addItem(str); // VBR str.sprintf("VBR = %08X", (int)sh2regs.VBR); lwRegisters->addItem(str); // MACH str.sprintf("MACH = %08X", (int)sh2regs.MACH); lwRegisters->addItem(str); // MACL str.sprintf("MACL = %08X", (int)sh2regs.MACL); lwRegisters->addItem(str); // PR str.sprintf("PR = %08X", (int)sh2regs.PR); lwRegisters->addItem(str); // PC str.sprintf("PC = %08X", (int)sh2regs.PC); lwRegisters->addItem(str); }
u32 UIDebugSH2::getRegister(int index, int *size) { sh2regs_struct sh2regs; u32 value; SH2GetRegisters(debugSH2, &sh2regs); if (index < 16) value = sh2regs.R[index]; else { switch(index) { case 16: value = sh2regs.SR.all; break; case 17: value = sh2regs.GBR; break; case 18: value = sh2regs.VBR; break; case 19: value = sh2regs.MACH; break; case 20: value = sh2regs.MACL; break; case 21: value = sh2regs.PR; break; case 22: value = sh2regs.PC; break; default: value = 0; break; } } *size = 4; return value; }
void UIDebugSH2::setRegister(int index, u32 value) { sh2regs_struct sh2regs; SH2GetRegisters(debugSH2, &sh2regs); if (index < 16) sh2regs.R[index] = value; else { switch(index) { case 16: sh2regs.SR.all = value; break; case 17: sh2regs.GBR = value; break; case 18: sh2regs.VBR = value; break; case 19: sh2regs.MACH = value; break; case 20: sh2regs.MACL = value; break; case 21: sh2regs.PR = value; break; case 22: sh2regs.PC = value; updateCodeList(sh2regs.PC); break; } } SH2SetRegisters(debugSH2, &sh2regs); }
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); }
void YabSetError(int type, const void *extra) { char tempstr[512]; SH2_struct *sh; switch (type) { case YAB_ERR_FILENOTFOUND: AllocAmendPrintString(_("File not found: "), extra); break; case YAB_ERR_MEMORYALLOC: YuiErrorMsg(_("Error allocating memory\n")); break; case YAB_ERR_FILEREAD: AllocAmendPrintString(_("Error reading file: "), extra); break; case YAB_ERR_FILEWRITE: AllocAmendPrintString(_("Error writing file: "), extra); break; case YAB_ERR_CANNOTINIT: AllocAmendPrintString(_("Cannot initialize "), extra); break; case YAB_ERR_SH2INVALIDOPCODE: sh = (SH2_struct *)extra; SH2GetRegisters(sh, &sh->regs); sprintf(tempstr, "%s SH2 invalid opcode\n\n" "R0 = %08lX\tR12 = %08lX\n" "R1 = %08lX\tR13 = %08lX\n" "R2 = %08lX\tR14 = %08lX\n" "R3 = %08lX\tR15 = %08lX\n" "R4 = %08lX\tSR = %08lX\n" "R5 = %08lX\tGBR = %08lX\n" "R6 = %08lX\tVBR = %08lX\n" "R7 = %08lX\tMACH = %08lX\n" "R8 = %08lX\tMACL = %08lX\n" "R9 = %08lX\tPR = %08lX\n" "R10 = %08lX\tPC = %08lX\n" "R11 = %08lX\n", sh->isslave ? "Slave" : "Master", (long)sh->regs.R[0], (long)sh->regs.R[12], (long)sh->regs.R[1], (long)sh->regs.R[13], (long)sh->regs.R[2], (long)sh->regs.R[14], (long)sh->regs.R[3], (long)sh->regs.R[15], (long)sh->regs.R[4], (long)sh->regs.SR.all, (long)sh->regs.R[5], (long)sh->regs.GBR, (long)sh->regs.R[6], (long)sh->regs.VBR, (long)sh->regs.R[7], (long)sh->regs.MACH, (long)sh->regs.R[8], (long)sh->regs.MACL, (long)sh->regs.R[9], (long)sh->regs.PR, (long)sh->regs.R[10], (long)sh->regs.PC, (long)sh->regs.R[11]); YuiErrorMsg(tempstr); break; case YAB_ERR_SH2READ: YuiErrorMsg(_("SH2 read error\n")); // fix me break; case YAB_ERR_SH2WRITE: YuiErrorMsg(_("SH2 write error\n")); // fix me break; case YAB_ERR_SDL: AllocAmendPrintString(_("SDL Error: "), extra); break; case YAB_ERR_OTHER: YuiErrorMsg((char *)extra); break; case YAB_ERR_UNKNOWN: default: YuiErrorMsg(_("Unknown error occurred\n")); break; } }