示例#1
0
        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;
        }
示例#2
0
        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();
                }
            }
        }
示例#3
0
 public void StartOutput(NESManager newManager)
 {
     manager = newManager;
     apu     = manager.Emulator.Apu;
 }