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; } }
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);
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); } }