public void _Fx1E_add_I_Vx() { var registers = new RegisterModule(); registers.SetGeneralValue(0, 0x12); registers.SetI(0x123); var emulator = CHIP8Factory.GetChip8(registers: registers); var instructions = new byte[] { 0xF0, //Add v0 and I, store in I 0x1E }; emulator.LoadProgram(instructions); emulator.Tick += (e, a) => { emulator.Stop(); }; emulator.Start(); Assert.Equal(0x123 + 0x12, registers.GetI()); }
public void _Fx33_LD_B_Vx() { /* * Stores the BCD of vx in I, I+1, and I+2 of memory * 125: * Hex: 0x7D * BCD: 0001 0010 0101 */ var registers = new RegisterModule(); registers.SetGeneralValue(0, 0x7D); registers.SetI(0x123); var memory = new MemoryModule(Enumerable.Repeat((byte)0x0, 4096)); var emulator = CHIP8Factory.GetChip8(registers: registers, mem: memory); var instructions = new byte[] { 0xF0, //Store BCD of v0 in memory 0x33 }; emulator.LoadProgram(instructions); emulator.Tick += (e, a) => { emulator.Stop(); }; emulator.Start(); var startPoint = registers.GetI(); var hundreds = memory[startPoint]; startPoint++; var tens = memory[startPoint]; startPoint++; var ones = memory[startPoint]; Assert.Equal(0x1, hundreds); Assert.Equal(0x2, tens); Assert.Equal(0x5, ones); }
public void _Annn_LD_I_addr() { var registers = new RegisterModule(); var emulator = CHIP8Factory.GetChip8(registers: registers); var instructions = new byte[] { 0xA1, 0x23 }; emulator.LoadProgram(instructions); emulator.Start(); Assert.Equal(0x123, registers.GetI()); }
public void _Fx65_LD_Vx_I() { /* * Set registers v0 through vx from memory starting at I */ var registers = new RegisterModule(); registers.SetI(0x278); var startPoint = registers.GetI(); var memory = new MemoryModule(Enumerable.Repeat((byte)0x0, 4096)); memory[startPoint] = 0x7D; startPoint++; memory[startPoint] = 0x55; startPoint++; memory[startPoint] = 0x18; startPoint++; memory[startPoint] = 0x90; var emulator = CHIP8Factory.GetChip8(registers: registers, mem: memory); var instructions = new byte[] { 0xF3, //Set v0 - v3 from memory 0x65 }; emulator.LoadProgram(instructions); emulator.Tick += (e, a) => { emulator.Stop(); }; emulator.Start(); var v0 = registers.GetGeneralValue(0); var v1 = registers.GetGeneralValue(1); var v2 = registers.GetGeneralValue(2); var v3 = registers.GetGeneralValue(3); Assert.Equal(0x7D, v0); Assert.Equal(0x55, v1); Assert.Equal(0x18, v2); Assert.Equal(0x90, v3); }