trying to fix weird derailing
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
#include <Window.hpp>
|
||||
#include <algorithm>
|
||||
#include <util.hpp>
|
||||
#include <debugger.hpp>
|
||||
|
||||
namespace n64 {
|
||||
Core::Core() {
|
||||
@@ -31,32 +30,29 @@ void Core::Reset() {
|
||||
void Core::LoadROM(const std::string& rom_) {
|
||||
rom = rom_;
|
||||
mem.LoadROM(rom);
|
||||
pause = false;
|
||||
pause = true;
|
||||
romLoaded = true;
|
||||
}
|
||||
|
||||
void Core::Step() {
|
||||
MMIO& mmio = mem.mmio;
|
||||
cpu.Step(mem);
|
||||
mmio.rsp.Step(mmio.mi, cpu.regs, mmio.rdp);
|
||||
}
|
||||
|
||||
void Core::Run(Window& window) {
|
||||
MMIO& mmio = mem.mmio;
|
||||
int cycles = 0;
|
||||
for(int field = 0; field < mmio.vi.numFields; field++) {
|
||||
int frameCycles = 0;
|
||||
if(!pause && romLoaded) {
|
||||
for (int i = 0; i < mmio.vi.numHalflines; i++) {
|
||||
if ((mmio.vi.current & 0x3FE) == mmio.vi.intr) {
|
||||
InterruptRaise(mmio.mi, cpu.regs, Interrupt::VI);
|
||||
}
|
||||
|
||||
for(;cycles <= mmio.vi.cyclesPerHalfline; cycles++) {
|
||||
for(;cycles <= mmio.vi.cyclesPerHalfline; cycles++, frameCycles++) {
|
||||
cpu.Step(mem);
|
||||
mmio.rsp.Step(mmio.mi, cpu.regs, mmio.rdp);
|
||||
mmio.rsp.Step(mmio.mi, cpu.regs, mmio.rdp);
|
||||
mmio.rsp.Step(mmio.mi, cpu.regs, mmio.rdp);
|
||||
mmio.rsp.Step(mmio.mi, cpu.regs, mmio.rdp);
|
||||
|
||||
mmio.ai.Step(mem, cpu.regs, 1);
|
||||
}
|
||||
|
||||
cycles -= mmio.vi.cyclesPerHalfline;
|
||||
@@ -67,6 +63,9 @@ void Core::Run(Window& window) {
|
||||
}
|
||||
|
||||
UpdateScreenParallelRdp(*this, window, GetVI());
|
||||
|
||||
int missedCycles = N64_CYCLES_PER_FRAME - frameCycles;
|
||||
mmio.ai.Step(mem, cpu.regs, missedCycles);
|
||||
} else if(pause && romLoaded) {
|
||||
UpdateScreenParallelRdp(*this, window, GetVI());
|
||||
} else if(pause && !romLoaded) {
|
||||
|
||||
Reference in New Issue
Block a user