Example #1
0
        public void JumpToAddress(byte addrHigh, byte addrLow, ref ushort pc)
        {
            ushort address = BitUtils.BytesToUshort(addrHigh, addrLow);

            //JumpToAddress(address, ref pc); //TODO Should not cause ticks?
            pc = address;
        }
Example #2
0
 public void Push(ref ushort pointer, byte valueHigh, byte valueLow)
 {
     pointer -= 2;
     TickEvent?.Invoke();
     memory.WriteWord(pointer, BitUtils.BytesToUshort(valueHigh, valueLow));
     TickEvent?.Invoke();
     TickEvent?.Invoke();
 }
Example #3
0
        public void DecrementWord(ref ushort target)
        {
            byte high = BitUtils.MostSignificantByte(target);
            byte low  = BitUtils.LeastSignificantByte(target);

            DecrementWord(ref high, ref low);
            target = BitUtils.BytesToUshort(high, low);
        }
Example #4
0
        public void DecrementWord(ref byte targetHigh, ref byte targetLow)
        {
            ushort target = BitUtils.BytesToUshort(targetHigh, targetLow);

            target     = (ushort)(target - 1);
            targetHigh = BitUtils.MostSignificantByte(target);
            targetLow  = BitUtils.LeastSignificantByte(target);
            TickEvent?.Invoke();
        }
Example #5
0
        public void RotateLeftThroughCarry(byte addrHigh, byte addrLow, ref byte flags)
        {
            ushort address = BitUtils.BytesToUshort(addrHigh, addrLow);
            byte   data    = memory.ReadByte(address);

            TickEvent?.Invoke();
            RotateLeftThroughCarry(ref data, ref flags, false);
            memory.WriteByte(address, data);
            TickEvent?.Invoke();
        }
Example #6
0
        public void Swap(byte addrHigh, byte addrLow, ref byte flags)
        {
            ushort address = BitUtils.BytesToUshort(addrHigh, addrLow);
            byte   data    = memory.ReadByte(address);

            TickEvent?.Invoke();
            Swap(ref data, ref flags);
            memory.WriteByte(address, data);
            TickEvent?.Invoke();
        }
Example #7
0
        public void SetBit(byte addrHigh, byte addrLow, int index, bool bit)
        {
            ushort address = BitUtils.BytesToUshort(addrHigh, addrLow);
            byte   data    = memory.ReadByte(address);

            TickEvent?.Invoke();
            SetBit(ref data, index, bit);
            memory.WriteByte(address, data);
            TickEvent?.Invoke();
        }
Example #8
0
        public void WriteToAddressAndIncrement(ref byte addrHigh, ref byte addrLow, byte value, short addValue)
        {
            ushort address = BitUtils.BytesToUshort(addrHigh, addrLow);

            memory.WriteByte(address, value);
            TickEvent?.Invoke();
            address  = (ushort)(address + addValue);
            addrHigh = BitUtils.MostSignificantByte(address);
            addrLow  = BitUtils.LeastSignificantByte(address);
        }
Example #9
0
        public void LoadFromAddressAndIncrement(ref byte dest, ref byte addrHigh, ref byte addrLow, short value)
        {
            ushort address = BitUtils.BytesToUshort(addrHigh, addrLow);

            dest = memory.ReadByte(address);
            TickEvent?.Invoke();
            address  = (ushort)(address + value);
            addrHigh = BitUtils.MostSignificantByte(address);
            addrLow  = BitUtils.LeastSignificantByte(address);
        }
Example #10
0
        public void DecrementInMemory(byte addrHigh, byte addrLow, ref byte flags)
        {
            ushort address   = BitUtils.BytesToUshort(addrHigh, addrLow);
            byte   origValue = memory.ReadByte(address);

            TickEvent?.Invoke();
            memory.WriteByte(address, (byte)(origValue - 1));
            FlagUtils.SetFlag(Flag.Z, (byte)(origValue - 1) == 0, ref flags);
            FlagUtils.SetFlag(Flag.N, true, ref flags);
            FlagUtils.SetFlag(Flag.H, (origValue & 0x0F) < 1, ref flags);
            TickEvent?.Invoke();
        }
Example #11
0
        public void Add(ref byte toHigh, ref byte toLow, byte valueHigh, byte valueLow, ref byte flags)
        {
            ushort to     = BitUtils.BytesToUshort(toHigh, toLow);
            ushort value  = BitUtils.BytesToUshort(valueHigh, valueLow);
            ushort result = (ushort)((to + value) & 0xFFFF);

            toHigh = BitUtils.MostSignificantByte(result);
            toLow  = BitUtils.LeastSignificantByte(result);
            // Zero flag is not affected
            FlagUtils.SetFlag(Flag.N, false, ref flags);
            FlagUtils.SetFlag(Flag.H, (to & 0xFFF) + (value & 0xFFF) > 0xFFF, ref flags);
            FlagUtils.SetFlag(Flag.C, to + value > 0xFFFF, ref flags);
            TickEvent?.Invoke();
        }
Example #12
0
        public void LoadAdjustedPositiveTest()
        {
            var    memory   = new Memory();
            var    loadUnit = new LoadUnit(memory);
            byte   H        = 0xF0;
            byte   L        = 0xF0;
            ushort SP       = 0x0000;
            byte   flags    = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0001, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x0001;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0002, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x000F;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0010, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0b00100000, flags);

            SP    = 0x0010;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0011, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x001F;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0020, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0b00100000, flags);

            SP    = 0x007F;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0080, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0b00100000, flags);

            SP    = 0x0080;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0081, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x00FF;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0100, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0b00110000, flags);

            SP    = 0x0100;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0101, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x0F00;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0F01, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x1F00;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x1F01, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x1000;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x1001, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0x7FFF;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x8000, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0b00110000, flags);

            SP    = 0x8000;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x8001, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0x0, flags);

            SP    = 0xFFFF;
            flags = 0x0;

            loadUnit.LoadAdjusted(ref H, ref L, SP, 0x01, ref flags);

            Assert.Equal(0x0000, BitUtils.BytesToUshort(H, L));
            Assert.Equal(0b00110000, flags);
        }
Example #13
0
 public void WriteToAddress(byte addrHigh, byte addrLow, byte value)
 {
     WriteToAddress(BitUtils.BytesToUshort(addrHigh, addrLow), value);
 }
Example #14
0
 public void LoadFromAddress(ref byte dest, byte addrHigh, byte addrLow)
 {
     LoadFromAddress(ref dest, BitUtils.BytesToUshort(addrHigh, addrLow));
 }
Example #15
0
 public void Load(ref ushort dest, byte valueHigh, byte valueLow)
 {
     dest = BitUtils.BytesToUshort(valueHigh, valueLow);
     TickEvent?.Invoke();
 }
Example #16
0
        public void BytesToUshortTest()
        {
            ushort result = BitUtils.BytesToUshort(0xAA, 0xFF);

            Assert.Equal(0xAAFF, result);
        }