Ypsilon.Emulation.Processor.YBUS.GetDeviceMemoryReference C# (CSharp) Méthode

GetDeviceMemoryReference() private méthode

Returns the byte array of memory attached to the device. Accepts values from 0 - 16. Device 0 is ROM.
private GetDeviceMemoryReference ( Segment segment, ushort deviceIndex ) : void
segment Segment
deviceIndex ushort
Résultat void
        internal void GetDeviceMemoryReference(Segment segment, ushort deviceIndex)
        {
            if (deviceIndex == 0) {
                // request memory from ycpu
                GetROMReference(segment);
            }
            else if (deviceIndex > 16) {
                // this should never happen - requested memory from device index that cannot exist.
                segment.SetMemoryReference(null);
                segment.Reference = MemoryReferenceInfo.None;
                AddSegmentToReferences(segment);
            }
            else {
                // request memory from device in slot index.
                if (m_Devices[deviceIndex - 1] == null) {
                    segment.SetMemoryReference(null);
                    segment.Reference = MemoryReferenceInfo.None;
                }
                else {
                    segment.SetMemoryReference(m_Devices[deviceIndex - 1].GetMemoryInterface());
                    segment.Reference = MemoryReferenceInfo.Device | (MemoryReferenceInfo)deviceIndex;
                }
                AddSegmentToReferences(segment);
            }
        }

Usage Example

Exemple #1
0
        private void RefreshMemoryReference()
        {
            // set byte[] reference.
            if (IsNotPresent)
            {
                MemoryReference = null;
            }
            else
            {
                if (IsDevice)
                {
                    // will select rom if index == 0, device memory if index is between 1-15.
                    m_Bus.GetDeviceMemoryReference(this, DeviceIndex);
                }
                else
                {
                    m_Bus.GetRAMReference(this);
                }
            }

            // get size
            uint s = (m_Register & c_SegRegSize) >> c_SegRegSizeShift;

            m_Size = s == 0 ? ushort.MaxValue + 1 : s;

            // get base
            if (IsDevice)
            {
                uint b = m_Register & c_SegRegDeviceBase;
                Base = b << 8;
            }
            else
            {
                uint b = m_Register & c_SegRegMemBase;
                Base = b << 8;
            }
        }