示例#1
0
        public void CanMoveCursorViaMemoryMappedDisplayYPositionWithRemoteDisplayConnection()
        {
            var address = (ushort)(MemoryMappedDisplay.DISPLAY_CONTROL_BLOCK_ADDR + DisplayControlBlock.CURSOR_Y_ADDR);

            mem.Write(address, 20);
            Assert.Pass();
        }
示例#2
0
 public Loader Write(ushort address, byte value, string label = null)
 {
     AddLabel(label, address);
     _addressMap.Write(address, value);
     Cursor = (ushort)(address + 1);
     return(this);
 }
示例#3
0
        public void CanTriggerMemoryChangedBreakpoint()
        {
            string description = string.Empty;
            ushort address     = 0x0000;
            byte   value       = 0x00;

            MemoryDebugger.AddBreakpoint(new MemoryChangedBreakpoint(0x1234, 1));

            MemoryDebugger.BreakpointTriggered += (s, e) => {
                description = e.Breakpoint.Describe(null);
                address     = e.Address;
                value       = e.Value;
            };

            mem.Write(0x1234, 0x5a);

            Assert.AreEqual("01 MEM_CHANGE $1234", description);
            Assert.AreEqual(0x1234, address);
            Assert.AreEqual(0x5a, value);
        }
示例#4
0
        private bool AssignMemoryByte(string expression, ushort value)
        {
            ushort address;

            if (TryParseAddress(expression, out address))
            {
                _addressMap.Write(address, (byte)value);
                return(true);
            }

            return(false);
        }
示例#5
0
        public void CanWriteToRamButNoRom()
        {
            var end = (ushort)(RAM_BANK_2_START + RAM_BANK_2_SIZE - 1);

            for (var ix = RAM_BANK_1_START; ix <= end; ix++)
            {
                mem.Write(ix, 0x55);
            }

            Assert.IsTrue(IsMemoryFilledWith(mem, RAM_BANK_1_START, RAM_BANK_1_SIZE, 0x55));
            Assert.IsTrue(IsMemoryFilledWith(mem, ROM_START, ROM_SIZE, 0xFF));
            Assert.IsTrue(IsMemoryFilledWith(mem, RAM_BANK_2_START, RAM_BANK_2_SIZE, 0x55));
        }
示例#6
0
        public void CanRenderViaMemoryMappedDisplay()
        {
            ushort address = 0x0000;
            byte   value   = 0x00;

            var connection = (MockRemoteDisplayConnection)_serviceProvider.GetService <IRemoteDisplayConnection>();

            connection.OnRender += (s, e) => {
                address = e.Address;
                value   = e.Value;
            };

            mem.Write(DISPLAY_BASE_ADDR + 1, 0x55);

            Assert.AreEqual(0x0001, address);
            Assert.AreEqual(0x55, value);
        }
示例#7
0
        private void LoadInternal(string name, IAddressMap mem, int overrideStartAddress = -1)
        {
            var combined = CrossPlatformPathExtensions.Combine(WorkingDirectory, name);
            var filename = Path.GetFullPath(combined);

            using (var file = File.OpenRead(filename))
            {
                var address = file.ReadByte() + (256 * file.ReadByte());
                var length  = file.ReadByte() + (256 * file.ReadByte());

                if (overrideStartAddress >= 0)
                {
                    address = overrideStartAddress;
                }

                var byteCount = 0;

                while (byteCount < length)
                {
                    mem.Write((ushort)(address + byteCount), (byte)file.ReadByte());
                    byteCount++;
                }
            }
        }