コード例 #1
0
        public void SetByteAt(uint address, byte value)
        {
            if ((address & 0xfffc) == 0x0800)
            {
                return;
            }                                              // mirrored register
            else if ((address &= AddressMask) >= this.Storage.Length)
            {
                return;
            }

            this.Log("Set register byte at address " + address.ToString("x3") + " " + value.ToString("x"));
            IORegister reg = this.Storage[address];

            bool offset = (address & 1) > 0;

            if (!offset)
            {
                reg.Set(value, true, false);
            }
            else
            {
                reg.Set((ushort)(value << 8), false, true);
            }
        }
コード例 #2
0
        public uint?GetWordAt(uint address)
        {
            if ((address & 0xfffc) == 0x0800)
            {
                return(null);
            }                                                   // mirrored register
            else if ((address &= AddressMask) >= this.Storage.Length)
            {
                return(null);
            }
            address &= 0x00ff_fffc;  // force align

            this.Log("Get register word at address " + address.ToString("x"));
            IORegister reg = this.Storage[address];

            // force alignment makes these accesses a lot simpler!
            return((uint)(reg.Get() | (this.Storage[address + 2].Get() << 16)));
        }
コード例 #3
0
        public void SetHalfWordAt(uint address, ushort value)
        {
            if ((address & 0xfffc) == 0x0800)
            {
                return;
            }                                              // mirrored register
            else if ((address &= AddressMask) >= this.Storage.Length)
            {
                return;
            }
            address &= 0x00ff_fffe;  // force align

            this.Log("Set register halfword at address " + address.ToString("x3") + " " + value.ToString("x"));
            IORegister reg = this.Storage[address];

            // force alignment makes these accesses a lot simpler!
            reg.Set(value, true, true);
        }
コード例 #4
0
        public byte?GetByteAt(uint address)
        {
            if ((address & 0xfffc) == 0x0800)
            {
                return(null);
            }                                                   // mirrored register
            else if ((address &= AddressMask) >= this.Storage.Length)
            {
                return(null);
            }

            this.Log("Get register byte at address " + address.ToString("x3"));
            IORegister reg    = this.Storage[address];
            bool       offset = (address & 1) > 0;

            if (!offset)
            {
                return((byte)reg.Get());
            }
            else
            {
                return((byte)((reg.Get() & 0xff00) >> 8));
            }
        }