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()