示例#1
0
class TestLogicalOperations(unittest.TestCase):
    def setUp(self):
        self.memory = Memory(use_bus=False)
        self.cpu = CPU(self.memory)

    def test_AND(self):
        self.memory.write_byte(None, 0x1000, 0x37)
        self.cpu.accumulator = 0x34
        self.cpu.AND(0x1000)
        self.assertEqual(self.cpu.accumulator, 0x34)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.cpu.accumulator = 0x40
        self.cpu.AND(0x1000)
        self.assertEqual(self.cpu.accumulator, 0x00)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.assertEqual(self.cpu.sign_flag, 0)

    def test_EOR(self):
        self.memory.write_byte(None, 0x1000, 0x37)
        self.cpu.accumulator = 0x34
        self.cpu.EOR(0x1000)
        self.assertEqual(self.cpu.accumulator, 0x03)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.cpu.accumulator = 0x90
        self.cpu.EOR(0x1000)
        self.assertEqual(self.cpu.accumulator, 0xA7)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.cpu.accumulator = 0x37
        self.cpu.EOR(0x1000)
        self.assertEqual(self.cpu.accumulator, 0x00)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.assertEqual(self.cpu.sign_flag, 0)

    def test_ORA(self):
        self.memory.write_byte(None, 0x1000, 0x37)
        self.cpu.accumulator = 0x34
        self.cpu.ORA(0x1000)
        self.assertEqual(self.cpu.accumulator, 0x37)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.cpu.accumulator = 0x90
        self.cpu.ORA(0x1000)
        self.assertEqual(self.cpu.accumulator, 0xB7)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.cpu.accumulator = 0x00
        self.cpu.ORA(0x1001)
        self.assertEqual(self.cpu.accumulator, 0x00)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.assertEqual(self.cpu.sign_flag, 0)

    def test_BIT(self):
        self.memory.write_byte(None, 0x1000, 0x00)
        self.cpu.accumulator = 0x00
        self.cpu.BIT(0x1000)
        self.assertEqual(self.cpu.overflow_flag, 0)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.memory.write_byte(None, 0x1000, 0x40)
        self.cpu.accumulator = 0x00
        self.cpu.BIT(0x1000)
        self.assertEqual(self.cpu.overflow_flag, 1)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.memory.write_byte(None, 0x1000, 0x80)
        self.cpu.accumulator = 0x00
        self.cpu.BIT(0x1000)
        self.assertEqual(self.cpu.overflow_flag, 0)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.memory.write_byte(None, 0x1000, 0xC0)
        self.cpu.accumulator = 0x00
        self.cpu.BIT(0x1000)
        self.assertEqual(self.cpu.overflow_flag, 1)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.memory.write_byte(None, 0x1000, 0xC0)
        self.cpu.accumulator = 0xC0
        self.cpu.BIT(0x1000)
        self.assertEqual(self.cpu.overflow_flag, 1)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 0)