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

    def test_BRK(self):
        self.cpu.program_counter = 0x1000
        self.memory.rom.load(0xFFFE, [0x00, 0x20])
        status = self.cpu.status_as_byte()
        self.cpu.BRK()
        self.assertEqual(self.cpu.program_counter, 0x2000)
        self.assertEqual(self.cpu.break_flag, 1)
        self.assertEqual(
            self.memory.read_byte(
                None, self.cpu.STACK_PAGE + self.cpu.stack_pointer + 1),
            status)
        self.assertEqual(
            self.memory.read_byte(
                None, self.cpu.STACK_PAGE + self.cpu.stack_pointer + 2), 0x01)
        self.assertEqual(
            self.memory.read_byte(
                None, self.cpu.STACK_PAGE + self.cpu.stack_pointer + 3), 0x10)

    def test_RTI(self):
        self.memory.write_byte(None, self.cpu.STACK_PAGE + 0xFF, 0x12)
        self.memory.write_byte(None, self.cpu.STACK_PAGE + 0xFE, 0x33)
        self.memory.write_byte(None, self.cpu.STACK_PAGE + 0xFD, 0x20)
        self.cpu.stack_pointer = 0xFC
        self.cpu.RTI()
        self.assertEqual(self.cpu.program_counter, 0x1233)
        self.assertEqual(self.cpu.status_as_byte(), 0x20)

    def test_NOP(self):
        self.cpu.NOP()