Exemple #1
0
        public void ResetWorksAsExpected()
        {
            // --- Arrange
            var dev = new SpectrumP3MemoryDevice();

            dev.OnAttachedToVm(null);

            // --- Act
            dev.Reset();

            // -- Assert
            dev.IsInAllRamMode.ShouldBeFalse();
            dev.GetSelectedRomIndex().ShouldBe(0);
            dev.GetSelectedBankIndex(1).ShouldBe(5);
            dev.GetSelectedBankIndex(2).ShouldBe(2);
            dev.GetSelectedBankIndex(3).ShouldBe(0);

            for (var i = 0; i <= 0x3FFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0x00);
            }
            for (var i = 0x4000; i <= 0xFFFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0xFF);
            }

            for (var b = 0; b < 8; b++)
            {
                dev.PageIn(3, b);
                for (var i = 0xC000; i <= 0xFFFF; i++)
                {
                    dev.Read((ushort)i).ShouldBe((byte)0xFF);
                }
            }
        }
Exemple #2
0
        public void SelectRomResetsSpecialMode(int romIndex)
        {
            // --- Arrange
            var dev = new SpectrumP3MemoryDevice();

            dev.OnAttachedToVm(null);
            dev.PageIn(2, 4);

            // --- Act
            var before = dev.IsInAllRamMode;

            dev.SelectRom(romIndex);
            var after = dev.IsInAllRamMode;

            // -- Assert
            before.ShouldBeTrue();
            after.ShouldBeFalse();
        }
Exemple #3
0
        public void CloneWorksAsExpectedWithChangedBanks()
        {
            // --- Arrange
            var dev = new SpectrumP3MemoryDevice();

            dev.OnAttachedToVm(null);
            dev.Reset();

            for (var i = 0; i < 0x4000; i++)
            {
                dev.CurrentRom[i] = 0xFC;
                for (var b = 0; b < 8; b++)
                {
                    dev.RamBanks[b][i] = (byte)b;
                }
            }
            dev.PageIn(3, 4);

            // --- Act
            var cloned = dev.CloneMemory();

            // -- Assert
            for (var i = 0; i <= 0x3FFF; i++)
            {
                cloned[i].ShouldBe((byte)0xFC);
            }
            for (var i = 0x4000; i <= 0x7FFF; i++)
            {
                cloned[i].ShouldBe((byte)0x05);
            }
            for (var i = 0x8000; i <= 0xBFFF; i++)
            {
                cloned[i].ShouldBe((byte)0x02);
            }
            for (var i = 0xC000; i <= 0xFFFF; i++)
            {
                cloned[i].ShouldBe((byte)0x04);
            }
        }
Exemple #4
0
        public void PageInWithSlot2GoesToSpecialMode(int bank)
        {
            // --- Arrange
            var dev = new SpectrumP3MemoryDevice();

            dev.OnAttachedToVm(null);
            for (var i = 0; i < 0x4000; i++)
            {
                dev.CurrentRom[i] = 0xFF;
                for (var b = 0; b < 8; b++)
                {
                    dev.RamBanks[b][i] = (byte)b;
                }
            }

            // --- Act
            dev.PageIn(2, bank);

            // --- Assert
            dev.IsInAllRamMode.ShouldBeTrue();
            for (var i = 0; i <= 0x3FFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0x00);
            }
            for (var i = 0x4000; i <= 0x7FFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0x05);
            }
            for (var i = 0x8000; i <= 0xBFFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)bank);
            }
            for (var i = 0xC000; i <= 0xFFFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0x00);
            }
        }
        public void PageInWithSlot3KeepsNormalMode()
        {
            // --- Arrange
            var dev = new SpectrumP3MemoryDevice();

            dev.OnAttachedToVm(null);
            for (var i = 0; i < 0x4000; i++)
            {
                dev.CurrentRom[i] = 0xFF;
                for (var b = 0; b < 8; b++)
                {
                    dev.RamBanks[b][i] = (byte)b;
                }
            }

            // --- Act
            dev.PageIn(3, 7);

            // --- Assert
            dev.SpecialMode.ShouldBeFalse();
            for (var i = 0; i <= 0x3FFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0xFF);
            }
            for (var i = 0x4000; i <= 0x7FFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0x05);
            }
            for (var i = 0x8000; i <= 0xBFFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0x02);
            }
            for (var i = 0xC000; i <= 0xFFFF; i++)
            {
                dev.Read((ushort)i).ShouldBe((byte)0x07);
            }
        }