private void StartTick_(StartTickEvent _) { this.pboCacheDirty_ = true; var doLog = false; var cpu = this.cpu_; var memoryMap = this.mmu_.MemoryMap; var ioAddresses = memoryMap.IoAddresses; var stat = ioAddresses.Stat; var initialPpuMode = stat.Mode; int cyclesThisIteration = 0; if (!doLog) { cyclesThisIteration = this.cpu_.ExecuteCycles(70224); // 70221 } else { var cyclesPerTick = 1000; var registers = this.mmu_.Registers; var pc = registers.Pc; ushort initialPc = 0; var lcdc = ioAddresses.Lcdc; var ly = ioAddresses.Ly; var instruction = 0; var output = new StringBuilder(); try { for (;;) { var ppuMode = cpu.PpuMode; initialPc = pc.Value; output.AppendFormat("0x{0:x4}: ", initialPc); output.AppendFormat("{0:x2} |", memoryMap[initialPc]); output.AppendFormat(" af={0:x4}", registers.Af.Value); output.AppendFormat(" bc={0:x4}", registers.Bc.Value); output.AppendFormat(" de={0:x4}", registers.De.Value); output.AppendFormat(" hl={0:x4}", registers.Hl.Value); output.AppendFormat(" sp={0:x4}", registers.Sp.Value); output.AppendFormat(" pc={0:x4} |", registers.Pc.Value); output.AppendFormat(" scl={0}", cpu.UpwardScanlineCycleCounter); output.AppendFormat(" st={0}", cpu.PpuModeCycleCount); output.AppendFormat(" cnt={0} |", cpu.ScanlineCycleCounter / 2); output.AppendFormat(" lcdc={0:x2}", lcdc.Value); output.AppendFormat(" ly={0:x2}", ly.Value); output.AppendFormat(" ppu={0:x1} |", ppuMode); output.AppendFormat(" div={0:x2}", ioAddresses.Div.Value); output.AppendFormat(" tima={0:x2}", ioAddresses.Tima.Value); output.AppendFormat(" tma={0:x2}", ioAddresses.Tma.Value); output.AppendFormat(" tac={0:x2}", ioAddresses.Tac.Value); output.Append('\n'); var cycles = cpu.ExecuteInstructions(1); cyclesThisIteration += cycles; /*if (initialPc == 0x01c6) { * Assert.Fail("How did we get here???"); * }*/ cyclesPerTick -= cycles; if (cyclesPerTick <= 0) { break; } } } finally { this.writer_.Write(output.ToString()); } } this.apu_.Tick(cyclesThisIteration); ioAddresses.Joypad.Update(cpu); }
private void StartTick_(StartTickEvent _) { this.circularProgress_.Radians += .02f; }
private void StartTick_(StartTickEvent _) { //this.streamSource_.PollForProcessedBuffers(); }