//INC B 1 4 Z 0 H - public void INC_r(R8Bit A, R8BitFlag flag) { flag.HalfCarryFlag = (A.Value & 0x0F) == 0x0F; A++; flag.ZeroFlag = A.Value == 0; flag.SubFlag = false; }
//ADC A, B 1 4 Z 0 H C public void AddWithCarry(R8Bit A, R8Bit B, R8BitFlag flag) { byte carry = (byte)(flag.CarryFlag ? 1 : 0); flag.HalfCarryFlag = ((A.Value & 0x0F) + (B.Value & 0x0F) + carry) > 0x0F; var result = A.Value + B.Value + carry; flag.CarryFlag = result > 255; A.Value = (byte)result; flag.SubFlag = false; flag.ZeroFlag = A.Value == 0; }
//ADC A,d8 2 8 Z 0 H C public void AddImmediateWithCarry(R8Bit A, R16Bit PC, MappedMemory memory, R8BitFlag flag) { byte immediate = memory.ReadByte(PC); byte carry = (byte)(flag.CarryFlag ? 1 : 0); flag.HalfCarryFlag = ((A.Value & 0x0F) + (B.Value & 0x0F) + carry) > 0x0F; var result = A.Value + B.Value + carry; flag.CarryFlag = result > 255; A.Value = (byte)result; flag.SubFlag = false; flag.ZeroFlag = A.Value == 0; }
public CPU(MappedMemory memory) { _memory = memory; //Create Registers A = new R8Bit("a"); F = new R8BitFlag("f"); AF = new R16Bit(A, F); B = new R8Bit("b"); C = new R8Bit("c"); BC = new R16Bit(B, C); D = new R8Bit("d"); E = new R8Bit("e"); DE = new R16Bit(D, E); H = new R8Bit("h"); L = new R8Bit("l"); HL = new R16Bit(H, L); PC = new R16Bit("pc"); SP = new R16Bit("sp"); }
public R16Bit(string name) { this.Name = name; h = new R8Bit(name.ToCharArray()[0].ToString()); l = new R8Bit(name.ToCharArray()[1].ToString()); }
public R16Bit(R8Bit r1, R8Bit r2) { Name = r1.Name + r2.Name; h = r1; l = r2; }
public void SBC_r_RR(R8Bit A, R16Bit HL, R8BitFlag flag) { throw new NotImplementedException(); }
public void SBC_r_r(R8Bit A, R8Bit B, R8BitFlag flag) { throw new NotImplementedException(); }
public void LDH_r_a8(R8Bit A, R16Bit a8, R8BitFlag flag) { throw new NotImplementedException(); }
public void LD_RRrec_r(R16Bit HL, R8Bit A, R8BitFlag flag) { throw new NotImplementedException(); }
//LD (BC),A 1 8 - - - - public void LD_RR_r(R16Bit BC, R8Bit A) { _memory.WriteByte(BC, A); }
public void LD_r_a16(R8Bit A, R16Bit a16, R8BitFlag flag) { throw new NotImplementedException(); }
public void ADD_r_d8(R8Bit A, R16Bit d8, R8BitFlag flag) { throw new NotImplementedException(); }
//ADC A,(HL) 1 8 Z 0 H C public void AddWithCarryHL(R8Bit A, R16Bit HL, MappedMemory memory, R8BitFlag flag) { AddImmediateWithCarry(A, HL, memory, flag); }