public Emulator(Cartridge cartridge) { LoadMapper(cartridge); if (Mapper == null) { return; } Cpu = new Cpu(this); Ppu = new Ppu(this); Apu = new Apu(this); ControllerOne = new Controller(); ControllerTwo = new Controller(); IsValid = true; }
public void Frame() { var originalOddFrame = Ppu.OddFrame; while (isRunning && originalOddFrame == Ppu.OddFrame) { if (stepMode & !shouldStep) { return; } shouldStep = false; if (shouldReset) { Cpu.Reset(); Ppu.Reset(); Apu.Reset(); originalOddFrame = Ppu.OddFrame; shouldReset = false; } onBeforeStep?.Invoke(); var cycles = Cpu.Step(); for (var i = 0; i < cycles * PpuDotsPerCpuCycle; i++) { Ppu.Step(); } for (var i = 0; i < cycles; i++) { Apu.Step(); } } }
public void StartOutput(NESManager newManager) { manager = newManager; apu = manager.Emulator.Apu; }