Exemple #1
0
        public MappedRamPlugin(PluginContext context, IDictionary <string, object> pluginConfig)
        {
            var sizeInKb = pluginConfig.GetValueOrDefault <int>("sizeInKb", 4096);

            sizeInSegments = sizeInKb / 16;

            this.mappedRam = new MappedRam(sizeInSegments);

            context.Cpu.MemoryAccess += Cpu_MemoryAccess;
        }
Exemple #2
0
        public void Memory_of_less_size_than_maximum_ignores_high_bits_of_segment_numbers(int sizeInSegments)
        {
            var sut = new MappedRam(sizeInSegments);

            for (var segment = 0; segment < 256; segment++)
            {
                sut.WriteToSegmentSelectionRegister(0, (byte)segment);
                sut[0x0000] = (byte)segment;
            }

            sut.WriteToSegmentSelectionRegister(0, 0);

            var expected = 256 - sizeInSegments;
            var actual   = sut[0x0000];

            Assert.AreEqual(expected, actual);
        }
Exemple #3
0
        public void Maximum_size_memory_has_256_segments()
        {
            var sut = new MappedRam(256);

            for (var segment = 0; segment < 256; segment++)
            {
                sut.WriteToSegmentSelectionRegister(0, (byte)segment);
                sut[0x0000] = (byte)segment;
                sut[0x3FFF] = (byte)~segment;
            }

            for (var segment = 0; segment < 256; segment++)
            {
                sut.WriteToSegmentSelectionRegister(0, (byte)segment);
                Assert.AreEqual(segment, sut[0x0000]);
                Assert.AreEqual((byte)~segment, sut[0x3FFF]);
            }
        }
Exemple #4
0
        public void Same_segment_in_different_pages_mirror_memory()
        {
            var sut    = new MappedRam(4);
            var value1 = Fixture.Create <byte>();
            var value2 = Fixture.Create <byte>();

            sut.WriteToSegmentSelectionRegister(0, 1);
            sut.WriteToSegmentSelectionRegister(1, 1);
            sut.WriteToSegmentSelectionRegister(2, 1);
            sut.WriteToSegmentSelectionRegister(3, 1);

            sut[0x0000] = value1;
            sut[0x3FFE] = value2;

            Assert.AreEqual(value1, sut[0x0000]);
            Assert.AreEqual(value2, sut[0x3FFE]);
            Assert.AreEqual(value1, sut[0x4000]);
            Assert.AreEqual(value2, sut[0x7FFE]);
            Assert.AreEqual(value1, sut[0x8000]);
            Assert.AreEqual(value2, sut[0xFFFE]);
        }