Exemplo n.º 1
0
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(&regs);
      updateCodeList(regs.PC);

      ScuDspSetBreakpointCallBack(SCUDSPBreakpointHandler);
   }
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
void UIDebugSCUDSP::updateAll()
{
	updateRegList();
	if (ScuRegs)
	{
		scudspregs_struct regs;
		ScuDspGetRegisters(&regs);
		updateCodeList(regs.PC);
	}
}
Exemplo n.º 4
0
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 */
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
void UIDebugSCUDSP::updateRegList()
{
   scudspregs_struct regs;
   QString str;

   if (ScuRegs == NULL)
      return;

   memset(&regs, 0, sizeof(regs));
   ScuDspGetRegisters(&regs);
   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);
}