예제 #1
0
        public async Task SpectrumP3EIn48ModeStartAndRunToMainWorksWithExistingStateFile()
        {
            // --- Arrange
            const string STATE_FILE = SpectrumVmStateFileManagerBase.SPECTRUM_P3_STARTUP_48;
            var          filename   = Path.Combine(STATE_FOLDER, STATE_FILE);

            if (File.Exists(filename))
            {
                File.Delete(filename);
            }
            var sm = SpectrumVmFactory.CreateSpectrumP3E();

            sm.CachedVmStateFolder = STATE_FOLDER;
            await sm.StartAndRunToMain(true);

            var creationTimeBefore = new FileInfo(filename).CreationTime;
            await sm.Stop();

            // --- Act
            await sm.StartAndRunToMain(true);

            // --- Assert
            var creationTimeAfter = new FileInfo(filename).CreationTime;

            sm.MachineState.ShouldBe(VmState.Paused);
            sm.Cpu.PC.ShouldBe(SpectrumVmStateFileManagerBase.SP48_MAIN_EXEC_ADDR);
            File.Exists(filename).ShouldBeTrue();
            creationTimeBefore.ShouldBe(creationTimeAfter);
        }
예제 #2
0
        public void SpectrumP3EPalVmCreationWorks()
        {
            // --- Act
            var sm = SpectrumVmFactory.CreateSpectrumP3E();

            // --- Assert
            sm.ModelKey.ShouldBe(SpectrumModels.ZX_SPECTRUM_P3_E);
            sm.EditionKey.ShouldBe(SpectrumModels.PAL);
            sm.Cpu.ShouldNotBeNull();
            sm.Roms.ShouldNotBeNull();
            sm.RomCount.ShouldBe(4);
            sm.PagingInfo.ShouldNotBeNull();
            sm.RamBanks.ShouldNotBeNull();
            sm.RamBankCount.ShouldBe(8);
            sm.Keyboard.ShouldNotBeNull();
            sm.ScreenConfiguration.ShouldNotBeNull();
            sm.ScreenConfiguration.ScreenRenderingFrameTactCount.ShouldBe(70908);
            sm.ScreenBitmap.ShouldNotBeNull();
            sm.ScreenRenderingStatus.ShouldNotBeNull();
            sm.BeeperConfiguration.ShouldNotBeNull();
            sm.BeeperSamples.ShouldNotBeNull();
            sm.SoundConfiguration.ShouldNotBeNull();
            sm.AudioSamples.ShouldNotBeNull();
            sm.Breakpoints.ShouldNotBeNull();
            sm.MachineState.ShouldBe(VmState.None);
            sm.ExecutionCompletionReason.ShouldBe(ExecutionCompletionReason.None);
            sm.IsFirstStart.ShouldBeFalse();
            sm.IsFirstPause.ShouldBeFalse();
        }
예제 #3
0
        public void CreateSpectrumP3EWorks()
        {
            // --- Act
            var sm = SpectrumVmFactory.CreateSpectrumP3E();

            // --- Assert
            sm.ShouldNotBeNull();
            sm.ModelKey.ShouldBe(SpectrumModels.ZX_SPECTRUM_P3_E);
            sm.EditionKey.ShouldBe(SpectrumModels.PAL);
        }
예제 #4
0
        public async Task SpectrumP3EStartAndRunToMainWorksWithNoStateFile()
        {
            // --- Arrange
            const string STATE_FILE = SpectrumVmStateFileManagerBase.SPECTRUM_P3_STARTUP_P3;
            var          filename   = Path.Combine(STATE_FOLDER, STATE_FILE);

            if (File.Exists(filename))
            {
                File.Delete(filename);
            }
            var sm = SpectrumVmFactory.CreateSpectrumP3E();

            sm.CachedVmStateFolder = STATE_FOLDER;

            // --- Act
            await sm.StartAndRunToMain();

            // --- Assert
            sm.MachineState.ShouldBe(VmState.Paused);
            sm.Cpu.PC.ShouldBe(SpectrumVmStateFileManagerBase.SPP3_RETURN_TO_EDITOR);
            File.Exists(filename).ShouldBeTrue();
        }
예제 #5
0
        public async Task RunningSpectrumP3EDoesNotAllowStratAndRunToMain()
        {
            // --- Arrange
            var sm = SpectrumVmFactory.CreateSpectrumP3E();

            sm.CachedVmStateFolder = STATE_FOLDER;
            sm.Start();

            // --- Act/Assert
            try
            {
                await sm.StartAndRunToMain(true);
            }
            catch (InvalidOperationException)
            {
                return;
            }
            finally
            {
                await sm.Stop();
            }
            Assert.Fail("Expected InvalidOperationException");
        }