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