Exemplo n.º 1
0
        public void SetRegisterValue(Register16BitNames register, ushort value)
        {
            switch (register)
            {
            case (Register16BitNames.AF):
                registers8Bit[Register8BitNames.A].Value = (byte)((value & 0b_1111_1111_0000_0000) >> 8);
                registers8Bit[Register8BitNames.F].Value = (byte)(value & 0b_0000_0000_1111_1111);
                break;

            case (Register16BitNames.BC):
                registers8Bit[Register8BitNames.B].Value = (byte)((value & 0b_1111_1111_0000_0000) >> 8);
                registers8Bit[Register8BitNames.C].Value = (byte)(value & 0b_0000_0000_1111_1111);
                break;

            case (Register16BitNames.DE):
                registers8Bit[Register8BitNames.D].Value = (byte)((value & 0b_1111_1111_0000_0000) >> 8);
                registers8Bit[Register8BitNames.E].Value = (byte)(value & 0b_0000_0000_1111_1111);
                break;

            case (Register16BitNames.HL):
                registers8Bit[Register8BitNames.H].Value = (byte)((value & 0b_1111_1111_0000_0000) >> 8);
                registers8Bit[Register8BitNames.L].Value = (byte)(value & 0b_0000_0000_1111_1111);
                break;

            default:
                registers16Bit[register].Value = value;
                break;
            }
        }
Exemplo n.º 2
0
            public NormalOperation LD_16(Register16BitNames register) => new NormalOperation(() =>
            {
                ushort currentPC = _cpu.Registers.GetRegisterValue(Register16BitNames.PC);

                ushort lsByte = _cpu.Memory[currentPC + 0x1];
                ushort msByte = _cpu.Memory[currentPC + 0x2];

                ushort newValue = (ushort)((msByte << 8) | lsByte);

                Console.WriteLine($"LD {register.ToString()}, 0x{newValue.ToString("X4")}");

                _cpu.Registers.SetRegisterValue(register, newValue);
            }, $"LD {register.ToString()}, nn", 12, 3);
Exemplo n.º 3
0
        public ushort GetRegisterValue(Register16BitNames register)
        {
            switch (register)
            {
            case (Register16BitNames.AF):
                return((ushort)((registers8Bit[Register8BitNames.A].Value << 8) | registers8Bit[Register8BitNames.F].Value));

            case (Register16BitNames.BC):
                return((ushort)((registers8Bit[Register8BitNames.B].Value << 8) | registers8Bit[Register8BitNames.C].Value));

            case (Register16BitNames.DE):
                return((ushort)((registers8Bit[Register8BitNames.D].Value << 8) | registers8Bit[Register8BitNames.E].Value));

            case (Register16BitNames.HL):
                return((ushort)((registers8Bit[Register8BitNames.H].Value << 8) | registers8Bit[Register8BitNames.L].Value));

            default:
                return(registers16Bit[register].Value);
            }
        }