public void RunBios() { CPU cpu = new CPU(new GPU()); MMU mmu = new MMU(); var rom = new ROM(); rom.LoadROM(File.ReadAllBytes("opus5.gb")); mmu.SetCartridge(rom); cpu.SetMMU(mmu); Stopwatch sw = new Stopwatch(); sw.Start(); try { while (true) { cpu.Step(); } } catch (Exception e) { } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); Assert.AreEqual(0x1, cpu.A); Assert.AreEqual(0xB0, cpu.F); Assert.AreEqual(0x00, cpu.B); Assert.AreEqual(0x13, cpu.C); Assert.AreEqual(0x00, cpu.D); Assert.AreEqual(0xD8, cpu.E); Assert.AreEqual(0x01, cpu.H); Assert.AreEqual(0x4D, cpu.L); Assert.AreEqual(0xFFFE, cpu.SP); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF05)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF06)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF07)); // Sound not implemented //Assert.AreEqual(0x80, cpu.MMU.ReadByte(0xFF10)); //Assert.AreEqual(0xBF, cpu.MMU.ReadByte(0xFF11)); //Assert.AreEqual(0xF3, cpu.MMU.ReadByte(0xFF12)); //Assert.AreEqual(0xBF, cpu.MMU.ReadByte(0xFF14)); //Assert.AreEqual(0x3F, cpu.MMU.ReadByte(0xFF16)); //Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF17)); //Assert.AreEqual(0xBF, cpu.MMU.ReadByte(0xFF19)); //Assert.AreEqual(0x7F, cpu.MMU.ReadByte(0xFF1A)); //Assert.AreEqual(0xFF, cpu.MMU.ReadByte(0xFF1B)); //Assert.AreEqual(0x9F, cpu.MMU.ReadByte(0xFF1C)); //Assert.AreEqual(0xBF, cpu.MMU.ReadByte(0xFF1E)); //Assert.AreEqual(0xFF, cpu.MMU.ReadByte(0xFF20)); //Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF21)); //Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF22)); //Assert.AreEqual(0xBF, cpu.MMU.ReadByte(0xFF23)); //Assert.AreEqual(0x77, cpu.MMU.ReadByte(0xFF24)); //Assert.AreEqual(0xF3, cpu.MMU.ReadByte(0xFF25)); //Assert.AreEqual(0xF1, cpu.MMU.ReadByte(0xFF26)); Assert.AreEqual(0x91, cpu.MMU.ReadByte(0xFF40)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF42)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF43)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF45)); Assert.AreEqual(0xFC, cpu.MMU.ReadByte(0xFF47)); Assert.AreEqual(0xFF, cpu.MMU.ReadByte(0xFF48)); Assert.AreEqual(0xFF, cpu.MMU.ReadByte(0xFF49)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF4A)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFF4B)); Assert.AreEqual(0x00, cpu.MMU.ReadByte(0xFFFF)); Assert.Inconclusive(cpu.ToString()); }