DWORD RunInterpreterCPU(DWORD Cycles) { DWORD CycleCount; RSP_Running = TRUE; Enable_RSP_Commands_Window(); CycleCount = 0; while (RSP_Running) { if (NoOfBpoints != 0) { if (CheckForRSPBPoint(*PrgCount)) { if (InRSPCommandsWindow) { Enter_RSP_Commands_Window(); if (Stepping_Commands) { DisplayError ( "Encounted a R4300i Breakpoint" ); } else { DisplayError ( "Encounted a R4300i Breakpoint\n\nNow Stepping" ); SetRSPCommandViewto( *PrgCount ); SetRSPCommandToStepping(); } } else { DisplayError ( "Encounted a RSP Breakpoint\n\nEntering Command Window" ); Enter_RSP_Commands_Window(); } } } if (Stepping_Commands) { WaitingForStep = TRUE; SetRSPCommandViewto( *PrgCount ); UpdateRSPRegistersScreen(); while ( WaitingForStep == TRUE ){ Sleep(20); if (!Stepping_Commands) { WaitingForStep = FALSE; } } } RSP_LW_IMEM(*PrgCount, &RSPOpC.Hex); ((void (*)()) RSP_Opcode[ RSPOpC.op ])(); switch (RSP_NextInstruction) { case NORMAL: *PrgCount = (*PrgCount + 4) & 0xFFC; break; case DELAY_SLOT: RSP_NextInstruction = JUMP; *PrgCount = (*PrgCount + 4) & 0xFFC; break; case JUMP: RSP_NextInstruction = NORMAL; *PrgCount = RSP_JumpTo; break; } } *PrgCount -= 4; return Cycles; }
void Enable_RSP_Commands_Window ( void ) { SCROLLINFO si; if (!InRSPCommandsWindow) { return; } EnableWindow(hList, TRUE); EnableWindow(hAddress, TRUE); EnableWindow(hScrlBar, TRUE); EnableWindow(hGoButton, TRUE); EnableWindow(hStepButton, TRUE); EnableWindow(hSkipButton, FALSE); EnableWindow(hR4300iRegisters, TRUE); EnableWindow(hRSPRegisters, TRUE); EnableWindow(hR4300iDebugger, TRUE); EnableWindow(hMemory, TRUE); SendMessage(hBPButton, BM_SETSTYLE, BS_PUSHBUTTON,TRUE); SendMessage(hStepButton, BM_SETSTYLE, BS_DEFPUSHBUTTON,TRUE); SendMessage(RSPCommandshWnd, DM_SETDEFID,IDC_STEP_BUTTON,0); if (Stepping_Commands) { si.cbSize = sizeof(si); si.fMask = SIF_RANGE | SIF_POS | SIF_PAGE; si.nMin = 0; si.nMax = (0x1000 >> 2) -1; si.nPos = (*PrgCount >> 2); si.nPage = 30; SetScrollInfo(hScrlBar,SB_CTL,&si,TRUE); SetRSPCommandViewto( *PrgCount ); SetForegroundWindow(RSPCommandshWnd); } }