Example #1
0
class TestJumpOpcodes(unittest.TestCase):
    def setUp(self):
        self.cpu = Cpu(MMU())
        self.cpu.mmu.rom = [0] * 128
        self.cpu.mmu.load('C:/Users/cjpowell/workspace/Python/gbpy/resources/test_file.gb')

    def test_jump_to_addr_nn(self):
        self.cpu._op_c3()
        self.assertEqual(self.cpu.registers.pc, 0xff00)

    def test_jump_to_addr_if(self):
        self.cpu._op_c2()
        self.assertEqual(self.cpu.registers.pc, 0xff00)
        self.assertEqual(self.cpu.registers.zero_flag, 0)

        self.cpu.registers.pc = 0
        self.cpu.registers.zero_flag = 1
        self.cpu._op_ca()
        self.assertEqual(self.cpu.registers.pc, 0xff00)

        self.cpu.registers.pc = 0
        self.cpu._op_d2()
        self.assertEqual(self.cpu.registers.pc, 0xff00)
        self.assertEqual(self.cpu.registers.carry_flag, 0)

        self.cpu.registers.pc = 0
        self.cpu.registers.carry_flag = 1
        self.cpu._op_da()
        self.assertEqual(self.cpu.registers.pc, 0xff00)

    def test_jump_to_address_in_HL(self):
        self.cpu.registers.h = 0
        self.cpu.registers.l = 0x41
        self.cpu._op_e9()
        self.assertEqual(self.cpu.registers.pc, 0x24)

    def test_jump_to_addr_add_n(self):
        self.cpu._op_18()
        self.assertEqual(self.cpu.registers.pc, 0xff)

    def test_jump_to_add_add_n_if(self):
        self.cpu._op_20()
        self.assertEqual(self.cpu.registers.pc, 0xff)
        self.assertEqual(self.cpu.registers.zero_flag, 0)

        self.cpu.registers.pc = 0
        self.cpu.registers.zero_flag = 1
        self.cpu._op_28()
        self.assertEqual(self.cpu.registers.pc, 0xff)

        self.cpu.registers.pc = 0
        self.cpu._op_30()
        self.assertEqual(self.cpu.registers.pc, 0xff)
        self.assertEqual(self.cpu.registers.carry_flag, 0)

        self.cpu.registers.pc = 0
        self.cpu.registers.carry_flag = 1
        self.cpu._op_38()
        self.assertEqual(self.cpu.registers.pc, 0xff)