Esempio n. 1
0
 def test_EX__SP__HL(self):
     cpu = CPU()
     cpu['SP'] = 0xffff
     cpu[0xffff] = 0x22
     cpu[0x0000] = 0x11
     cpu['HL'] = 0x3344
     cpu.EX__SP__HL()
     self.assertEqual(cpu.get16(0xffff), 0x3344)
     self.assertEqual(cpu['HL'], 0x1122)
Esempio n. 2
0
 def test_DEC_n(self):
     # todo add more edge cases
     tests = [(0x01, 0x00, 'ZN')]
     cpu = CPU()
     for t in tests:
         cpu['F'] = 0x00
         n = cpu.DEC_n(t[0])
         self.assertEqual(n, t[1])
         self.assertEqual(cpu.reg.get_flags('V'), t[2])
Esempio n. 3
0
 def test_EX_DE_HL(self):
     cpu = CPU()
     cpu['DE'] = 0x1234
     cpu['HL'] = 0x5678
     cpu.EX_DE_HL()
     self.assertEqual(cpu['DE'], 0x5678)
     self.assertEqual(cpu['HL'], 0x1234)
     cpu.EX_DE_HL()
     self.assertEqual(cpu['DE'], 0x1234)
     self.assertEqual(cpu['HL'], 0x5678)
Esempio n. 4
0
 def test_LD_r__HL_(self):
     cpu = CPU()
     cpu.LD_r__HL_('A')
     self.assertEqual(cpu['A'], 0x00)
     cpu[0xa1b2] = 0x42
     cpu['HL'] = 0xa1b2
     self.assertEqual(cpu['H'], 0xa1)
     self.assertEqual(cpu['L'], 0xb2)
     cpu.LD_r__HL_('H')
     self.assertEqual(cpu['H'], 0x42)
Esempio n. 5
0
 def test_RRD(self):
     # todo add more edge cases
     tests = [(0x00, 0x00, 0x00, 0x00, 'ZP')]
     cpu = CPU()
     for t in tests:
         cpu['F'] = 0x00
         cpu['A'] = t[0]
         self.assertEqual(cpu.RRD_n(t[1]), t[3])
         self.assertEqual(cpu['A'], t[2])
         self.assertEqual(cpu.reg.get_flags('P'), t[4])
Esempio n. 6
0
 def test_LD__nn__ii(self):
     cpu = CPU()
     cpu['IX'] = 0x0102
     cpu['IY'] = 0x0304
     cpu.LD__nn__ii(0xffff, 'IX')
     cpu.LD__nn__ii(0x0001, 'IY')
     self.assertEqual(cpu[0xffff], 0x02)
     self.assertEqual(cpu[0x0000], 0x01)
     self.assertEqual(cpu[0x0001], 0x04)
     self.assertEqual(cpu[0x0002], 0x03)
Esempio n. 7
0
 def test_LD_r__ii_d_(self):
     cpu = CPU()
     cpu['IX'] = 0x1012
     cpu['IY'] = 0xffff
     cpu[0x1013] = 0xff
     cpu[0x0001] = 0x10
     cpu.LD_r__ii_d_('D', 'IX', 1)
     cpu.LD_r__ii_d_('E', 'IY', 2)
     self.assertEqual(cpu['D'], 0xff)
     self.assertEqual(cpu['E'], 0x10)
Esempio n. 8
0
 def test_SUB_A_n(self):
     # todo add more edge cases
     tests = [(0x40, 0x40, False, 0x00, 'Z')]
     cpu = CPU()
     for t in tests:
         cpu['F'] = 0x00
         cpu['A'] = t[0]
         cpu['C'] = t[2]
         cpu.SUB_A_n(t[1])
         self.assertEqual(cpu['A'], t[3])
         self.assertEqual(cpu.reg.get_flags('V'), t[4])
Esempio n. 9
0
 def test_LD_r_r(self):
     cpu = CPU()
     counter = 0x00
     for r1 in "BCDEHLA":
         for r2 in "BCDEHLA":
             counter += 1
             cpu[r2] = counter
             cpu.LD_r_r(r1, r2)
             self.assertEqual(cpu[r1], counter)
     cpu['PC'] = 0x0100
     cpu[0x0100] = 0x50  # LD D, B
Esempio n. 10
0
 def test_DEC_ii(self):
     cpu = CPU()
     for ii in ['IX', 'IY']:
         cpu[ii] = 0x0000
         cpu['F'] = 0x00
         cpu.DEC_ii(ii)
         self.assertEqual(cpu[ii], 0xffff)
         self.assertEqual(cpu['F'], 0x00)
         cpu.DEC_ii(ii, 2)
         self.assertEqual(cpu[ii], 0xfffd)
         self.assertEqual(cpu['F'], 0x00)
Esempio n. 11
0
 def test_ADD_ii_nn(self):
     # todo add more edge cases
     tests = [(0x0000, 0x0000, False, 0x00000, '')]
     cpu = CPU()
     for t in tests:
         cpu['F'] = 0x00
         cpu['HL'] = t[0]
         cpu['DE'] = t[1]
         cpu['C'] = t[2]
         cpu.ADD_HL_ss('DE')
         self.assertEqual(cpu['HL'], t[3])
         self.assertEqual(cpu.reg.get_flags('V'), t[4])
Esempio n. 12
0
 def test_LD_r_n(self):
     cpu = CPU()
     cpu.LD_r_n('B', 0x01)
     cpu.LD_r_n('C', 0x02)
     cpu.LD_r_n('D', 0x03)
     cpu.LD_r_n('E', 0x04)
     cpu.LD_r_n('H', 0x05)
     cpu.LD_r_n('L', 0x06)
     cpu.LD_r_n('A', 0x07)
     self.assertEqual(cpu['B'], 0x01)
     self.assertEqual(cpu['C'], 0x02)
     self.assertEqual(cpu['D'], 0x03)
     self.assertEqual(cpu['E'], 0x04)
     self.assertEqual(cpu['H'], 0x05)
     self.assertEqual(cpu['L'], 0x06)
     self.assertEqual(cpu['A'], 0x07)
     self.assertEqual(cpu['BC'], 0x0102)
     self.assertEqual(cpu['DE'], 0x0304)
     self.assertEqual(cpu['HL'], 0x0506)
     self.assertEqual(cpu['AF'], 0x0700)
     with self.assertRaises(ValueError):
         cpu.LD_r_n('X', 0x07)
     for r in "BCDEHLA":
         with self.assertRaises(ValueError):
             cpu.LD_r_n(r, 0x100)
Esempio n. 13
0
 def test_EX_AF_alt_AF(self):
     cpu = CPU()
     cpu['A'] = 0x12
     cpu['F'] = 0x34
     self.assertEqual(cpu['AF'], 0x1234)
     cpu.EX_AF_alt_AF()
     self.assertEqual(cpu['AF'], 0x0000)
     cpu['A'] = 0x56
     cpu['F'] = 0x78
     self.assertEqual(cpu['AF'], 0x5678)
     cpu.EX_AF_alt_AF()
     self.assertEqual(cpu['AF'], 0x1234)
     cpu.EX_AF_alt_AF()
     self.assertEqual(cpu['AF'], 0x5678)
Esempio n. 14
0
 def test_LD__BCDE__A(self):
     cpu = CPU()
     start = 0x1010
     for rr, func in {'BC': cpu.LD__BC__A, 'DE': cpu.LD__DE__A}.items():
         cpu[rr] = start
         cpu['A'] = 0xff
         func()
         self.assertEqual(cpu[start], 0xff)
         start += 2
Esempio n. 15
0
 def test_LD__nn__dd(self):
     cpu = CPU()
     cpu['BC'] = 0x1122
     cpu['DE'] = 0x3344
     cpu['HL'] = 0x5566
     cpu['SP'] = 0x7788
     cpu.LD__nn__dd(0xffff, 'BC')
     cpu.LD__nn__dd(0x0001, 'DE')
     cpu.LD__nn__dd(0x0003, 'HL')
     cpu.LD__nn__dd(0x0005, 'SP')
     self.assertEqual(cpu[0xffff], 0x22)
     self.assertEqual(cpu[0x0000], 0x11)
     self.assertEqual(cpu[0x0001], 0x44)
     self.assertEqual(cpu[0x0002], 0x33)
     self.assertEqual(cpu[0x0003], 0x66)
     self.assertEqual(cpu[0x0004], 0x55)
     self.assertEqual(cpu[0x0005], 0x88)
     self.assertEqual(cpu[0x0006], 0x77)
Esempio n. 16
0
 def test_EXX(self):
     cpu = CPU()
     cpu['BC'] = 0x1122
     cpu['DE'] = 0x3344
     cpu['HL'] = 0x5566
     cpu.EXX()
     self.assertEqual(cpu['BC'], 0x0000)
     self.assertEqual(cpu['DE'], 0x0000)
     self.assertEqual(cpu['HL'], 0x0000)
     cpu['BC'] = 0x7788
     cpu['DE'] = 0x99aa
     cpu['HL'] = 0xbbcc
     cpu.EXX()
     self.assertEqual(cpu['BC'], 0x1122)
     self.assertEqual(cpu['DE'], 0x3344)
     self.assertEqual(cpu['HL'], 0x5566)
     cpu.EXX()
     self.assertEqual(cpu['BC'], 0x7788)
     self.assertEqual(cpu['DE'], 0x99aa)
     self.assertEqual(cpu['HL'], 0xbbcc)
Esempio n. 17
0
 def test_LD_AIR_AIR(self):
     cpu = CPU()
     value = 0x10
     for regs, func in {
         ('A', 'I'): cpu.LD_A_I,
         ('A', 'R'): cpu.LD_A_R,
         ('I', 'A'): cpu.LD_I_A,
         ('R', 'A'): cpu.LD_R_A
     }.items():
         cpu[regs[1]] = value
         func()
         self.assertEqual(cpu[regs[0]], value)
         value += 1
Esempio n. 18
0
 def test_SET_b_r(self):
     cpu = CPU()
     cpu.SET_b_r(1, 'A')
     self.assertEqual(2, cpu['A'])
     cpu.SET_b_r(1, 'A')
     self.assertEqual(2, cpu['A'])
     cpu.SET_b_r(7, 'A')
     self.assertEqual(0x82, cpu['A'])
     cpu.RES_b_r(1, 'A')
     self.assertEqual(0x80, cpu['A'])
Esempio n. 19
0
 def test_EX__SP__ii(self):
     cpu = CPU()
     cpu['SP'] = 0xffff
     cpu[0xffff] = 0x22
     cpu[0x0000] = 0x11
     cpu['IX'] = 0x3344
     cpu['IY'] = 0x5566
     cpu.EX__SP__ii('IX')
     self.assertEqual(cpu['IX'], 0x1122)
     self.assertEqual(cpu.get16(0xffff), 0x3344)
     cpu.EX__SP__ii('IY')
     self.assertEqual(cpu['IY'], 0x3344)
     self.assertEqual(cpu.get16(0xffff), 0x5566)
Esempio n. 20
0
 def test_PUSH_POP_ii(self):
     cpu = CPU()
     cpu['IX'] = 0x0102
     cpu['IY'] = 0x0304
     cpu.PUSH_ii('IX')
     self.assertEqual(cpu['SP'], 0xfffe)
     self.assertEqual(cpu[0xfffe], 0x02)
     self.assertEqual(cpu[0xffff], 0x01)
     self.assertEqual(cpu.get16(0xfffe), 0x0102)
     cpu.PUSH_ii('IY')
     self.assertEqual(cpu['SP'], 0xfffc)
     self.assertEqual(cpu[0xfffc], 0x04)
     self.assertEqual(cpu[0xfffd], 0x03)
     self.assertEqual(cpu.get16(0xfffc), 0x0304)
     cpu['IX'] = 0x0000
     cpu['IY'] = 0x0000
     cpu.POP_ii('IX')
     self.assertEqual(cpu['SP'], 0xfffe)
     self.assertEqual(cpu['IX'], 0x0304)
     cpu.POP_ii('IY')
     self.assertEqual(cpu['SP'], 0x0000)
     self.assertEqual(cpu['IY'], 0x0102)
Esempio n. 21
0
 def test_LD_dd_nn(self):
     cpu = CPU()
     cpu.LD_dd_nn('BC', 0x0121)
     cpu.LD_dd_nn('DE', 0x0222)
     cpu.LD_dd_nn('HL', 0x0323)
     cpu.LD_dd_nn('SP', 0x0424)
     self.assertEqual(cpu['BC'], 0x0121)
     self.assertEqual(cpu['DE'], 0x0222)
     self.assertEqual(cpu['HL'], 0x0323)
     self.assertEqual(cpu['SP'], 0x0424)
     self.assertEqual(cpu['B'], 0x01)
     self.assertEqual(cpu['D'], 0x02)
     self.assertEqual(cpu['H'], 0x03)
     self.assertEqual(cpu['C'], 0x21)
     self.assertEqual(cpu['E'], 0x22)
     self.assertEqual(cpu['L'], 0x23)
     with self.assertRaises(ValueError):
         cpu.LD_dd_nn('BC', 0x10000)
     with self.assertRaises(ValueError):
         cpu.LD_dd_nn('DE', 0x10000)
     with self.assertRaises(ValueError):
         cpu.LD_dd_nn('HL', 0x10000)
     with self.assertRaises(ValueError):
         cpu.LD_dd_nn('SP', 0x10000)
Esempio n. 22
0
 def test_LD_ii_nn(self):
     cpu = CPU()
     cpu.LD_ii_nn('IX', 0x0121)
     cpu.LD_ii_nn('IY', 0x1131)
     self.assertEqual(cpu['IX'], 0x0121)
     self.assertEqual(cpu['IY'], 0x1131)
Esempio n. 23
0
 def test_LD_HL__nn_(self):
     cpu = CPU()
     cpu[0xffff] = 0x01
     cpu[0x0000] = 0x10
     cpu.LD_HL__nn_(0xffff)
     self.assertEqual(cpu['HL'], 0x1001)
Esempio n. 24
0
 def test_LD__nn__HL(self):
     cpu = CPU()
     cpu['HL'] = 0x1122
     cpu.LD__nn__HL(0xffff)
     self.assertEqual(cpu[0xffff], 0x22)
     self.assertEqual(cpu[0x0000], 0x11)
Esempio n. 25
0
 def test_fetch_one_byte_instr(self):
     cpu = CPU()
     cpu.LD_ref_nn_n(0x0000, 0x0a)
     instr = cpu.fetch()
     self.assertEqual(instr.instr, ('LD', 'A', '(BC)'))
Esempio n. 26
0
 def test_LD_SP_HL(self):
     cpu = CPU()
     cpu['HL'] = 0x12ab
     cpu.LD_SP_HL()
     self.assertEqual(cpu['SP'], 0x12ab)
Esempio n. 27
0
 def test_PUSH_POP_qq(self):
     cpu = CPU()
     cpu['BC'] = 0x0102
     cpu['DE'] = 0x0304
     cpu['HL'] = 0x0506
     cpu['AF'] = 0x0607
     cpu.PUSH_qq('BC')
     self.assertEqual(cpu['SP'], 0xfffe)
     self.assertEqual(cpu[0xfffe], 0x02)
     self.assertEqual(cpu[0xffff], 0x01)
     self.assertEqual(cpu.get16(0xfffe), 0x0102)
     cpu.PUSH_qq('DE')
     self.assertEqual(cpu['SP'], 0xfffc)
     self.assertEqual(cpu[0xfffc], 0x04)
     self.assertEqual(cpu[0xfffd], 0x03)
     self.assertEqual(cpu.get16(0xfffc), 0x0304)
     cpu.PUSH_qq('HL')
     self.assertEqual(cpu['SP'], 0xfffa)
     self.assertEqual(cpu[0xfffa], 0x06)
     self.assertEqual(cpu[0xfffb], 0x05)
     self.assertEqual(cpu.get16(0xfffa), 0x0506)
     cpu.PUSH_qq('AF')
     self.assertEqual(cpu['SP'], 0xfff8)
     self.assertEqual(cpu[0xfff8], 0x07)
     self.assertEqual(cpu[0xfff9], 0x06)
     self.assertEqual(cpu.get16(0xfff8), 0x0607)
     cpu['BC'] = 0x0000
     cpu['DE'] = 0x0000
     cpu['HL'] = 0x0000
     cpu['AF'] = 0x0000
     cpu.POP_qq('BC')
     self.assertEqual(cpu['SP'], 0xfffa)
     self.assertEqual(cpu['BC'], 0x0607)
     cpu.POP_qq('DE')
     self.assertEqual(cpu['SP'], 0xfffc)
     self.assertEqual(cpu['DE'], 0x0506)
     cpu.POP_qq('HL')
     self.assertEqual(cpu['SP'], 0xfffe)
     self.assertEqual(cpu['HL'], 0x0304)
     cpu.POP_qq('AF')
     self.assertEqual(cpu['SP'], 0x0000)
     self.assertEqual(cpu['AF'], 0x0102)
Esempio n. 28
0
 def test_fetch_invalid_two_byte_instr_returns_nop(self):
     cpu = CPU()
     cpu.LD_ref_nn_n(0x0000, 0xdd)
     cpu.LD_ref_nn_n(0x0001, 0x01)
     instr = cpu.fetch()
     self.assertIsNone(instr)
Esempio n. 29
0
 def test_LD__nn__A(self):
     cpu = CPU()
     nn = 0x1010
     cpu['A'] = 0xff
     cpu.LD__nn__A(nn)
     self.assertEqual(cpu[nn], 0xff)
Esempio n. 30
0
 def test_LD__ii_d__n(self):
     cpu = CPU()
     cpu['IY'] = 0x1012
     cpu.LD__ii_d__n('IY', -1, 0xff)
     self.assertEqual(cpu[0x1011], 0xff)