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

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

            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 Spectrum128PalVmCreationWorks()
        {
            // --- Act
            var sm = SpectrumVmFactory.CreateSpectrum128();

            // --- Assert
            sm.ModelKey.ShouldBe(SpectrumModels.ZX_SPECTRUM_128);
            sm.EditionKey.ShouldBe(SpectrumModels.PAL);
            sm.Cpu.ShouldNotBeNull();
            sm.Roms.ShouldNotBeNull();
            sm.RomCount.ShouldBe(2);
            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 CreateSpectrum128Works()
        {
            // --- Act
            var sm = SpectrumVmFactory.CreateSpectrum128();

            // --- Assert
            sm.ShouldNotBeNull();
            sm.ModelKey.ShouldBe(SpectrumModels.ZX_SPECTRUM_128);
            sm.EditionKey.ShouldBe(SpectrumModels.PAL);
        }
예제 #4
0
        public async Task SoundSamplesCreatedForSpectrum128()
        {
            // --- Arrange
            var sm = SpectrumVmFactory.CreateSpectrum128();

            // --- Act
            sm.RunUntilFrameCompletion();
            await sm.CompletionTask;

            // --- Assert
            sm.AudioSamples.Count.ShouldBeGreaterThanOrEqualTo(sm.SoundConfiguration.SamplesPerFrame);
            sm.AudioSamples.Count.ShouldBeLessThanOrEqualTo(sm.SoundConfiguration.SamplesPerFrame + 1);
        }
예제 #5
0
        public async Task Spectrum128StartAndRunToMainWorksWithNoStateFile()
        {
            // --- Arrange
            const string STATE_FILE = SpectrumVmStateFileManagerBase.SPECTRUM_128_STARTUP_128;
            var          filename   = Path.Combine(STATE_FOLDER, STATE_FILE);

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

            sm.CachedVmStateFolder = STATE_FOLDER;

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

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

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

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