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

    def test_zero_page_x(self):
        self.cpu.x_index = 0x01
        self.memory.load(0x1000, [0x00, 0x7F, 0xFF])
        self.cpu.program_counter = 0x1000
        self.assertEqual(self.cpu.zero_page_x_mode(), 0x01)
        self.assertEqual(self.cpu.zero_page_x_mode(), 0x80)
        self.assertEqual(self.cpu.zero_page_x_mode(), 0x00)

    def test_indirect(self):
        self.memory.load(0x20, [0x00, 0x20])
        self.memory.load(0x00, [0x12])
        self.memory.load(0xFF, [0x34])
        self.memory.load(0x100, [0x56])
        self.memory.load(0x1000, [0x20, 0x20, 0xFF, 0xFF, 0x00, 0x45, 0x23])
        self.memory.load(0x2000, [0x05])
        self.memory.load(0x1234, [0x05])
        self.memory.load(0x2345, [0x00, 0xF0])

        self.cpu.program_counter = 0x1000

        self.cpu.x_index = 0x00
        self.cpu.LDA(self.cpu.indirect_x_mode())
        self.assertEqual(self.cpu.accumulator, 0x05)

        self.cpu.y_index = 0x00
        self.cpu.LDA(self.cpu.indirect_y_mode())
        self.assertEqual(self.cpu.accumulator, 0x05)

        self.cpu.y_index = 0x00
        self.cpu.LDA(self.cpu.indirect_y_mode())
        self.assertEqual(self.cpu.accumulator, 0x05)

        self.cpu.x_index = 0x00
        self.cpu.LDA(self.cpu.indirect_x_mode())
        self.assertEqual(self.cpu.accumulator, 0x05)

        self.cpu.x_index = 0xFF
        self.cpu.LDA(self.cpu.indirect_x_mode())
        self.assertEqual(self.cpu.accumulator, 0x05)

        self.assertEqual(self.cpu.indirect_mode(), 0xF000)
示例#2
0
class TestLoadStoreOperations(unittest.TestCase):
    def setUp(self):
        self.memory = Memory(use_bus=False)
        self.cpu = CPU(self.memory)
        self.memory.load(0x1000, [0x00, 0x01, 0x7F, 0x80, 0xFF])

    def test_LDA(self):
        self.cpu.LDA(0x1000)
        self.assertEqual(self.cpu.accumulator, 0x00)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.cpu.LDA(0x1001)
        self.assertEqual(self.cpu.accumulator, 0x01)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDA(0x1002)
        self.assertEqual(self.cpu.accumulator, 0x7F)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDA(0x1003)
        self.assertEqual(self.cpu.accumulator, 0x80)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDA(0x1004)
        self.assertEqual(self.cpu.accumulator, 0xFF)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 0)

    def test_LDX(self):
        self.cpu.LDX(0x1000)
        self.assertEqual(self.cpu.x_index, 0x00)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.cpu.LDX(0x1001)
        self.assertEqual(self.cpu.x_index, 0x01)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDX(0x1002)
        self.assertEqual(self.cpu.x_index, 0x7F)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDX(0x1003)
        self.assertEqual(self.cpu.x_index, 0x80)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDX(0x1004)
        self.assertEqual(self.cpu.x_index, 0xFF)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 0)

    def test_LDY(self):
        self.cpu.LDY(0x1000)
        self.assertEqual(self.cpu.y_index, 0x00)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 1)
        self.cpu.LDY(0x1001)
        self.assertEqual(self.cpu.y_index, 0x01)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDY(0x1002)
        self.assertEqual(self.cpu.y_index, 0x7F)
        self.assertEqual(self.cpu.sign_flag, 0)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDY(0x1003)
        self.assertEqual(self.cpu.y_index, 0x80)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 0)
        self.cpu.LDY(0x1004)
        self.assertEqual(self.cpu.y_index, 0xFF)
        self.assertEqual(self.cpu.sign_flag, 1)
        self.assertEqual(self.cpu.zero_flag, 0)

    def test_STA(self):
        self.cpu.accumulator = 0x37
        self.cpu.STA(0x2000)
        self.assertEqual(self.memory.read_byte(None, 0x2000), 0x37)

    def test_STX(self):
        self.cpu.x_index = 0x38
        self.cpu.STX(0x2000)
        self.assertEqual(self.memory.read_byte(None, 0x2000), 0x38)

    def test_STY(self):
        self.cpu.y_index = 0x39
        self.cpu.STY(0x2000)
        self.assertEqual(self.memory.read_byte(None, 0x2000), 0x39)