from cpu6502 import * import os.path import unittest class TestCPU6502(unittest.TestCase): def setUp(self): self.cpu = CPU6502() self.cpu.pc = 0x7000 self.cpu.start = self.cpu.pc self.debug = False print("") print("---------------------------") print("test method: %s" % self._testMethodName) def check_flags(self, neg, zero, carry): self.assertEqual(self.cpu.flag_n, neg) self.assertEqual(self.cpu.flag_z, zero) self.assertEqual(self.cpu.flag_c, carry) def check_x(self, val, neg, zero, carry): self.assertEqual(self.cpu.reg_x, val) self.check_flags(neg, zero, carry) def listing(self): self.cpu.end = self.cpu.pc self.cpu.disass() def run_test(self, debug=False): self.cpu.resetcyc() if self.debug: self.listing() self.cpu.run() if self.debug: self.cpu.registers() print("") print("Cycles: %d" % (self.cpu.cycles)) print("") self.assertEqual(0xff, self.cpu.sp) def test_irq(self): # Interrupt aktivieren self.cpu.flag_i = False self.cpu.mem[0xfffe] = 0x10 self.cpu.mem[0xffff] = 0x70 # Interrupt-Ausloeser fp = open(self.cpu.irq_file, 'w') fp.close() # Assembler-Programm self.cpu.addcmd('lda #', 0x80) # Interrupt-Routine wird ausgefuehrt self.cpu.addcmd('ldx #', 0x10) self.cpu.addcmd('brk') # Interrupt-Routine self.cpu.pc = 0x7010 self.cpu.addcmd('sta aa', 0xf0) self.cpu.addcmd('inc aa', 0xf0) self.cpu.addcmd('rti') self.run_test() self.assertEqual(0x81, self.cpu.mem[0xf0]) self.check_x(0x10, False, False, False) self.assertFalse(os.path.exists(self.cpu.irq_file)) if __name__ == '__main__': unittest.main()