예제 #1
0
        private void TestBootSequence(Cartridge cart)
        {
            Machine machine = new Machine();
            machine.SystemBootMode = BootMode.HLE_IPL_OLD;
            machine.DeviceRCP.DevicePI.MountCartridge(cart);
            Debugger debugger = new Debugger();
            debugger.BreakOnBootMode = DebuggerBootEvent.PostBoot;
            debugger.DebugOnBreak = true;
            var mockedCPUEngine = new Mock<ExecutionEngine>();
            var mockedRCPEngine = new Mock<ExecutionEngine>();
            machine.DeviceCPU.Engine = mockedCPUEngine.Object;
            machine.DeviceRCP.Engine = mockedRCPEngine.Object;
            machine.Initialize();
            machine.Run();

            ExecutionState state = machine.DeviceCPU.State;

            /* CP0 Testing */
            Assert.Equal(0x0000001FUL, state.CP0Regs[CP0RegName.Random]);
            Assert.Equal(0x00005000UL, state.CP0Regs[CP0RegName.Count]);
            Assert.Equal(0x0000005CUL, state.CP0Regs[CP0RegName.Cause]);
            Assert.Equal(0x007FFFF0UL, state.CP0Regs[CP0RegName.Context]);
            Assert.Equal(0xFFFFFFFFUL, state.CP0Regs[CP0RegName.EPC]);
            Assert.Equal(0xFFFFFFFFUL, state.CP0Regs[CP0RegName.BadVAddr]);
            Assert.Equal(0xFFFFFFFFUL, state.CP0Regs[CP0RegName.ErrorEPC]);
            Assert.Equal(0x0006E463UL, state.CP0Regs[CP0RegName.Config]);
            Assert.Equal(0x34000000UL, state.CP0Regs[CP0RegName.SR]);

            /* PIF Testing */
            AssertPIFCodes(
                Cartridge.Current.RomImage.Region,
                Cartridge.Current.RomImage.BootRomInformation.CIC,
                state);

            debugger.Continue();
            machine.Stop();
            machine.Dispose();
        }