Exemple #1
0
 private void UpdateSlotVisibleInPage3IsExpanded(Z80Page page, SlotNumber slotNumber)
 {
     if (page == 3)
     {
         slotVisibleInPage3IsExpanded = isExpanded[slotNumber.PrimarySlotNumber];
     }
 }
Exemple #2
0
        public void WriteToSlotSelectionRegister(byte value)
        {
            slotSelectionRegisterValue = value;

            for (int p = 0; p < 4; p++)
            {
                Z80Page    page = p;
                var        primarySlotNumber = value & 3;
                SlotNumber slotNumber;
                if (isExpanded[primarySlotNumber])
                {
                    var subslotNumber = secondarySlotsSelectedForEachPrimarySlot[primarySlotNumber][page];
                    slotNumber = new SlotNumber(primarySlotNumber, subslotNumber);
                }
                else
                {
                    slotNumber = new SlotNumber((byte)primarySlotNumber);
                }

                SetVisibleSlot(page, slotNumber);
                value >>= 2;
            }

            if (SlotSelectionRegisterWritten != null)
            {
                SlotSelectionRegisterWritten(this, new SlotSelectionRegisterWrittenEventArgs(slotSelectionRegisterValue));
            }
        }
Exemple #3
0
        public void Can_be_implicitly_cast_to_int(int page)
        {
            var sut        = new Z80Page(page);
            var pageNumber = (int)sut;

            Assert.AreEqual(sut.Value, pageNumber);
        }
Exemple #4
0
        public void Address_mask_can_be_retrieved_via_AddressMask_property(int page)
        {
            var masks = new[] { 0x0000, 0x4000, 0x8000, 0xC000 };
            var sut   = new Z80Page(page);

            Assert.AreEqual(masks[page], sut.AddressMask);
        }
Exemple #5
0
        public void Can_create_instance_from_address(int page)
        {
            var address = (ushort)(page * 16384);
            var sut     = Z80Page.FromAddress(address);

            Assert.AreEqual(page, sut.Value);
        }
Exemple #6
0
        public void Two_instances_are_different_if_page_number_is_not_the_same(int page)
        {
            var sut1 = new Z80Page(page);
            var sut2 = new Z80Page((page + 1) & 3);

            Assert.True(sut1 != sut2);
            Assert.False(sut1.Equals(sut2));
        }
Exemple #7
0
        public void Two_instances_are_equal_if_page_number_is_the_same(int page)
        {
            var sut1 = new Z80Page(page);
            var sut2 = new Z80Page(page);

            Assert.True(sut1 == sut2);
            Assert.True(sut1.Equals(sut2));
        }
Exemple #8
0
        public void Can_be_compared_to_int(int page)
        {
            var sut = new Z80Page(page);

            Assert.AreEqual(page, sut);

            var otherPage = (page + 1) & 3;

            Assert.AreNotEqual(otherPage, sut);
        }
Exemple #9
0
        public PlainRomPlugin(PluginContext context, IDictionary <string, object> pluginConfig)
        {
            page = pluginConfig.GetValueOrDefault <int>("page", 0);

            if (!pluginConfig.ContainsKey("file"))
            {
                throw new InvalidOperationException("No 'file' key in config file");
            }

            fileName = pluginConfig.GetMachineOrDataFilePath(pluginConfig.GetValue <string>("file"));
        }
Exemple #10
0
        public void WriteToSegmentSelectionRegister(Z80Page page, byte segmentNumber)
        {
            segmentNumber &= segmentMask;
            if (segmentsInEachPage[page] == segmentNumber)
            {
                return;
            }

            addressOffsetsPerEachPage[page.AddressMask] = segmentNumber * segmentSize;
            segmentsInEachPage[page] = segmentNumber;
            BankValueChanged?.Invoke(this, new BankValueChangedEventArgs(page, segmentNumber));
        }
Exemple #11
0
        public void EnableSlot(Z80Page page, SlotNumber slot)
        {
            ThrowIfUndefinedSlot(slot);

            SetVisibleSlot(page, slot);

            byte newSlotSelectionRegisterValue = 0;

            for (var p = 0; p < 4; p++)
            {
                newSlotSelectionRegisterValue |= (byte)(visibleSlotNumbers[p].PrimarySlotNumber << 2 * p);
            }

            slotSelectionRegisterValue = newSlotSelectionRegisterValue;
        }
Exemple #12
0
 private byte SlotSelectionRegisterValue(Z80Page page0, Z80Page page1, Z80Page page2, Z80Page page3)
 {
     return((byte)(page0 + (page1 << 2) + (page2 << 4) + (page3 << 6)));
 }
Exemple #13
0
 public SlotNumber GetCurrentSlot(Z80Page page)
 {
     return(visibleSlotNumbers[page]);
 }
Exemple #14
0
 private void SetVisibleSlot(Z80Page page, SlotNumber slotNumber)
 {
     visibleSlotNumbers[page] = slotNumber;
     visibleSlotContents[page.AddressMask] = slotContents[slotNumber];
     UpdateSlotVisibleInPage3IsExpanded(page, slotNumber);
 }
Exemple #15
0
        public void Page_number_can_be_retrieved_via_PageNumber_property(int page)
        {
            var sut = new Z80Page(page);

            Assert.AreEqual(page, sut.Value);
        }
Exemple #16
0
        public void Can_create_instances_with_values_0_to_3(int page)
        {
            var sut = new Z80Page(page);

            Assert.IsNotNull(sut);
        }