Create StepRSP and StepCPU functions (cleans up the loop a little)
This commit is contained in:
@@ -60,6 +60,32 @@ void Core::LoadROM(const std::string &rom_) {
|
|||||||
romLoaded = true;
|
romLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Core::StepCPU() {
|
||||||
|
return cpu->Step() + regs.PopStalledCycles();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Core::StepRSP(int cpuCycles) {
|
||||||
|
MMIO &mmio = mem->mmio;
|
||||||
|
|
||||||
|
if (mmio.rsp.spStatus.halt) {
|
||||||
|
regs.steps = 0;
|
||||||
|
mmio.rsp.steps = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr int cpuRatio = 3, rspRatio = 2;
|
||||||
|
|
||||||
|
regs.steps += cpuCycles;
|
||||||
|
int sets = regs.steps / cpuRatio;
|
||||||
|
mmio.rsp.steps += sets * rspRatio;
|
||||||
|
regs.steps -= sets * cpuRatio;
|
||||||
|
|
||||||
|
while (mmio.rsp.steps > 0) {
|
||||||
|
mmio.rsp.steps--;
|
||||||
|
mmio.rsp.Step();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Core::Run(float volumeL, float volumeR) {
|
void Core::Run(float volumeL, float volumeR) {
|
||||||
MMIO &mmio = mem->mmio;
|
MMIO &mmio = mem->mmio;
|
||||||
|
|
||||||
@@ -72,28 +98,9 @@ void Core::Run(float volumeL, float volumeR) {
|
|||||||
mmio.mi.InterruptRaise(MI::Interrupt::VI);
|
mmio.mi.InterruptRaise(MI::Interrupt::VI);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; cycles < mem->mmio.vi.cyclesPerHalfline; cycles++, frameCycles++) {
|
while(cycles < mem->mmio.vi.cyclesPerHalfline) {
|
||||||
u32 taken = cpu->Step();
|
u32 taken = StepCPU();
|
||||||
taken += regs.PopStalledCycles();
|
StepRSP(taken);
|
||||||
|
|
||||||
if(!Util::Error::IsHandled())
|
|
||||||
return;
|
|
||||||
|
|
||||||
regs.steps += taken;
|
|
||||||
if (mmio.rsp.spStatus.halt) {
|
|
||||||
regs.steps = 0;
|
|
||||||
mmio.rsp.steps = 0;
|
|
||||||
} else {
|
|
||||||
while (regs.steps > 2) {
|
|
||||||
mmio.rsp.steps += 2;
|
|
||||||
regs.steps -= 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (mmio.rsp.steps > 0) {
|
|
||||||
mmio.rsp.steps--;
|
|
||||||
mmio.rsp.Step();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cycles += taken;
|
cycles += taken;
|
||||||
frameCycles += taken;
|
frameCycles += taken;
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ struct Core {
|
|||||||
return *GetInstance().mem;
|
return *GetInstance().mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int StepCPU();
|
||||||
|
void StepRSP(int cpuCycles);
|
||||||
void Stop();
|
void Stop();
|
||||||
void Reset();
|
void Reset();
|
||||||
void LoadROM(const std::string &);
|
void LoadROM(const std::string &);
|
||||||
|
|||||||
Reference in New Issue
Block a user