Exemplo n.º 1
0
class TestLogicalArithmeticOpcodes(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_direct_xor(self):
        self.cpu._op_a8()
        self.assertEqual(self.cpu.registers.a, 0)
        self.assertEqual(self.cpu.registers.zero_flag, 1)

        self.cpu.registers.b = 0xf
        self.cpu._op_a8()
        self.assertEqual(self.cpu.registers.a, 0xf)
        self.assertEqual(self.cpu.registers.zero_flag, 0)

        self.cpu.registers.b = 0x5f
        self.cpu._op_a8()
        self.assertEqual(self.cpu.registers.a, 0x50)

    def test_indirect_xor(self):
        self.cpu._op_ae()
        self.assertEqual(self.cpu.registers.a, 0xff)
        self.assertEqual(self.cpu.registers.zero_flag, 0)

        self.cpu._op_ae()
        self.assertEqual(self.cpu.registers.a, 0)
        self.assertEqual(self.cpu.registers.zero_flag, 1)

    def test_direct_or(self):
        self.cpu.registers.b = 0
        self.cpu._op_b0()
        self.assertEqual(self.cpu.registers.a, 0)
        self.assertEqual(self.cpu.registers.zero_flag, 1)

        self.cpu.registers.b = 0x8
        self.cpu._op_b0()
        self.assertEqual(self.cpu.registers.a, 0x8)
        self.assertEqual(self.cpu.registers.zero_flag, 0)

        self.cpu.registers.b = 0xf7
        self.cpu._op_b0()
        self.assertEqual(self.cpu.registers.a, 0xff)

    def test_indirect_or(self):
        self.cpu._op_b6()
        self.assertEqual(self.cpu.registers.a, 0xff)
        self.assertEqual(self.cpu.registers.zero_flag, 0)

        self.cpu._op_b6()
        self.assertEqual(self.cpu.registers.a, 0xff)

    def test_and(self):
        self.cpu.registers.b = 0xf
        self.cpu._op_a0()
        self.assertEqual(self.cpu.registers.a, 0)
        self.assertEqual(self.cpu.registers.zero_flag, 1)

        self.cpu.registers.a = 0xff
        self.cpu._op_a6()
        self.assertEqual(self.cpu.registers.a, 0xff)
        self.assertEqual(self.cpu.registers.zero_flag, 0)

        self.cpu.registers.pc = 1
        self.cpu._op_e6()
        self.assertEqual(self.cpu.registers.a, 0)
        self.assertEqual(self.cpu.registers.zero_flag, 1)
        self.assertEqual(self.cpu.registers.pc, 2)

    def test_compare(self):
        self.cpu._op_b8()
        self.assertEqual(self.cpu.registers.a, 0)
        self.assertEqual(self.cpu.registers.zero_flag, 1)
        self.assertEqual(self.cpu.registers.carry_flag, 0)

        self.cpu._op_be()
        self.assertEqual(self.cpu.registers.zero_flag, 0)
        self.assertEqual(self.cpu.registers.carry_flag, 1)
        self.assertEqual(self.cpu.registers.hc_flag, 1)

        self.cpu.registers.a = 0xff
        self.cpu._op_fe()
        self.assertEqual(self.cpu.registers.zero_flag, 1)
        self.assertEqual(self.cpu.registers.carry_flag, 0)