Merge branch 'dev' of git.sr.ht:~irisz64/kaizen into dev

This commit is contained in:
SimoZ64
2025-08-13 13:58:36 +02:00
2 changed files with 31 additions and 22 deletions

View File

@@ -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;

View File

@@ -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 &);