UIDebugSCUDSP::UIDebugSCUDSP( YabauseThread *mYabauseThread, QWidget* p ) : UIDebugCPU( mYabauseThread, p ) { this->setWindowTitle("Debug SCU DSP"); gbRegisters->setTitle("DSP Registers"); pbMemoryTransfer->setVisible( false ); gbMemoryBreakpoints->setVisible( false ); pbReserved1->setText(QtYabause::translate("Save Program")); pbReserved2->setText(QtYabause::translate("Save MD0")); pbReserved3->setText(QtYabause::translate("Save MD1")); pbReserved4->setText(QtYabause::translate("Save MD2")); pbReserved5->setText(QtYabause::translate("Save MD3")); pbReserved1->setVisible( true ); pbReserved2->setVisible( true ); pbReserved3->setVisible( true ); pbReserved4->setVisible( true ); pbReserved5->setVisible( true ); QSize size = lwRegisters->minimumSize(); size.setWidth(size.width() + lwRegisters->fontMetrics().averageCharWidth()); lwRegisters->setMinimumSize(size); size = lwDisassembledCode->minimumSize(); size.setWidth(lwRegisters->fontMetrics().averageCharWidth() * 80); lwDisassembledCode->setMinimumSize(size); updateRegList(); if (ScuRegs) { scudspregs_struct regs; const scucodebreakpoint_struct *cbp; int i; cbp = ScuDspGetBreakpointList(); for (i = 0; i < MAX_BREAKPOINTS; i++) { QString text; if (cbp[i].addr != 0xFFFFFFFF) { text.sprintf("%08X", (int)cbp[i].addr); lwCodeBreakpoints->addItem(text); } } lwDisassembledCode->setDisassembleFunction(SCUDSPDis); lwDisassembledCode->setEndAddress(0x100); lwDisassembledCode->setMinimumInstructionSize(1); ScuDspGetRegisters(®s); updateCodeList(regs.PC); ScuDspSetBreakpointCallBack(SCUDSPBreakpointHandler); } }
void yui_scudsp_update(YuiScudsp * scudsp) { scudspregs_struct scudspregs; ScuDspGetRegisters(&scudspregs); yui_scudsp_update_codelist(scudsp,scudspregs.PC); yui_scudsp_update_reglist(scudsp, &scudspregs); gtk_widget_set_sensitive(scudsp->uLabel, TRUE); gtk_widget_set_sensitive(scudsp->bpList, TRUE); gtk_widget_set_sensitive(scudsp->regList, TRUE); gtk_widget_set_sensitive(scudsp->buttonStep, TRUE); }
void UIDebugSCUDSP::updateAll() { updateRegList(); if (ScuRegs) { scudspregs_struct regs; ScuDspGetRegisters(®s); updateCodeList(regs.PC); } }
static void yui_scudsp_breakpoint_handler (u32 addr) { yui_window_pause(yui); { scudspregs_struct scudspregs; YuiScudsp* scudsp = YUI_SCUDSP(yui_scudsp_new( yui )); ScuDspGetRegisters(&scudspregs); yui_scudsp_update_reglist(scudsp, &scudspregs); yui_scudsp_update_codelist(scudsp, scudspregs.PC); } debugPauseLoop(); /* execution is suspended inside a normal cycle - enter secondary gtk loop */ }
static void scudspsetRegister( YuiScudsp *scudsp, int nReg, u32 value ) { /* set register number <nReg> to value <value> in proc <scudsp> */ scudspregs_struct scudspregs; ScuDspGetRegisters(&scudspregs); switch ( nReg ) { case 0: scudspregs.ProgControlPort.part.PR = value; break; case 1: scudspregs.ProgControlPort.part.EP = value; break; case 2: scudspregs.ProgControlPort.part.T0 = value; break; case 3: scudspregs.ProgControlPort.part.S = value; break; case 4: scudspregs.ProgControlPort.part.Z = value; break; case 5: scudspregs.ProgControlPort.part.C = value; break; case 6: scudspregs.ProgControlPort.part.V = value; break; case 7: scudspregs.ProgControlPort.part.E = value; break; case 8: scudspregs.ProgControlPort.part.ES = value; break; case 9: scudspregs.ProgControlPort.part.EX = value; break; case 10: scudspregs.ProgControlPort.part.LE = value; break; case 11: scudspregs.ProgControlPort.part.P = value; break; case 12: scudspregs.TOP = value; break; case 13: scudspregs.LOP = value; break; case 14: scudspregs.CT[0] = (value>>24) & 0xff; scudspregs.CT[1] = (value>>16) & 0xff; scudspregs.CT[2] = (value>>8) & 0xff; scudspregs.CT[3] = (value) & 0xff; break; case 15: scudspregs.RA0 = value; break; case 16: scudspregs.WA0 = value; break; case 17: scudspregs.RX = value; break; case 18: scudspregs.RY = value; break; case 19: scudspregs.P.part.H = value; break; case 20: scudspregs.P.part.L = value; break; case 21: scudspregs.AC.part.H = value; break; case 22: scudspregs.AC.part.L = value; break; } ScuDspSetRegisters(&scudspregs); }
void UIDebugSCUDSP::updateRegList() { scudspregs_struct regs; QString str; if (ScuRegs == NULL) return; memset(®s, 0, sizeof(regs)); ScuDspGetRegisters(®s); lwRegisters->clear(); str.sprintf("PR = %d EP = %d", regs.ProgControlPort.part.PR, regs.ProgControlPort.part.EP); lwRegisters->addItem(str); str.sprintf("T0 = %d S = %d", regs.ProgControlPort.part.T0, regs.ProgControlPort.part.S); lwRegisters->addItem(str); str.sprintf("Z = %d C = %d", regs.ProgControlPort.part.Z, regs.ProgControlPort.part.C); lwRegisters->addItem(str); str.sprintf("V = %d E = %d", regs.ProgControlPort.part.V, regs.ProgControlPort.part.E); lwRegisters->addItem(str); str.sprintf("ES = %d EX = %d", regs.ProgControlPort.part.ES, regs.ProgControlPort.part.EX); lwRegisters->addItem(str); str.sprintf("LE = %d", regs.ProgControlPort.part.LE); lwRegisters->addItem(str); str.sprintf("P = %02X", regs.ProgControlPort.part.P); lwRegisters->addItem(str); str.sprintf("TOP = %02X", regs.TOP); lwRegisters->addItem(str); str.sprintf("LOP = %02X", regs.LOP); lwRegisters->addItem(str); str.sprintf("CT = %02X:%02X:%02X:%02X", regs.CT[0], regs.CT[1], regs.CT[2], regs.CT[3]); lwRegisters->addItem(str); str.sprintf("RA = %08lX", regs.RA0); lwRegisters->addItem(str); str.sprintf("WA = %08lX", regs.WA0); lwRegisters->addItem(str); str.sprintf("RX = %08lX", regs.RX); lwRegisters->addItem(str); str.sprintf("RY = %08lX", regs.RX); lwRegisters->addItem(str); str.sprintf("PH = %04X", regs.P.part.H & 0xFFFF); lwRegisters->addItem(str); str.sprintf("PL = %08X", (int)(regs.P.part.L & 0xFFFFFFFF)); lwRegisters->addItem(str); str.sprintf("ACH = %04X", regs.AC.part.H & 0xFFFF); lwRegisters->addItem(str); str.sprintf("ACL = %08X", (int)(regs.AC.part.L & 0xFFFFFFFF)); lwRegisters->addItem(str); }