[pypy-svn] r55441 - in pypy/dist/pypy/lang/gameboy: . test

cami at codespeak.net cami at codespeak.net
Sat May 31 10:25:04 CEST 2008


Author: cami
Date: Sat May 31 10:25:01 2008
New Revision: 55441

Modified:
   pypy/dist/pypy/lang/gameboy/cpu.py
   pypy/dist/pypy/lang/gameboy/test/test_cpu.py
   pypy/dist/pypy/lang/gameboy/test/test_cpu_2.py
Log:
removed some clashing tests from test_cpu.py.
test for cycles are now in test_cpu.py, those for flags in test_cpu_2.py


Modified: pypy/dist/pypy/lang/gameboy/cpu.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/cpu.py	(original)
+++ pypy/dist/pypy/lang/gameboy/cpu.py	Sat May 31 10:25:01 2008
@@ -479,39 +479,38 @@
         self.ld(CPUFetchCaller(self), setCaller)
 
     def add_a(self, getCaller, setCaller=None):
+        data = getCaller.get()
         # ALU, 1 cycle
-        added = (self.a.get() + getCaller.get()) & 0xFF
-        self.f.z_flag_compare(added)
-        self.f.h_flag_compare(added, self.a.get(), inverted=True)
-        self.f.c_flag = (added < self.a.get())
-        self.a.set(added) # 1 cycle
+        added = (self.a.get() + data) & 0xFF
+        self.add_sub_flag_finish(added, data)
         
     def add_hl(self, register):
         # 2 cycles
-        a=1
-        added = (self.hl.get() + register.get()) & 0xFFFF # 1 cycle
+        data = register.get()
+        added = (self.hl.get() + data) # 1 cycle
         self.f.partial_reset(keep_z=True)
-        self.f.h_flag_compare((added >> 8), self.hl.get())
-        self.f.c_flag_compare(added,        self.hl.get())
-        self.hl.set(added)
+        if ((added ^ self.hl.get() ^ data) & 0x1000) != 0:
+            self.f.h_flag = True
+        self.f.c_flag = (added >= 0x10000 or added < 0)
+        self.hl.set(added & 0xFFFF)
         self.cycles -= 1
         
     def add_a_with_carry(self, getCaller, setCaller=None):
         # 1 cycle
         data = getCaller.get()
         s = self.a.get() + data + int(self.f.c_flag)
-        self.carry_flag_finish(s,data)
+        self.add_sub_flag_finish(s,data)
 
     def subtract_with_carry_a(self, getCaller, setCaller=None):
         # 1 cycle
         data = getCaller.get()
         s = self.a.get() - data - int(self.f.c_flag)
-        self.carry_flag_finish(s, data)
+        self.add_sub_flag_finish(s, data)
         self.f.n_flag = True
         
-    def carry_flag_finish(self, s, data):
+    def add_sub_flag_finish(self, s, data):
         self.f.reset()
-        # set the hflag if the 0x10 bit was affected
+        # set the h flag if the 0x10 bit was affected
         if ((s ^ self.a.get() ^ data) & 0x10) != 0:
             self.f.h_flag = True
         self.f.c_flag = (s >= 0x100 or s < 0)

Modified: pypy/dist/pypy/lang/gameboy/test/test_cpu.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/test/test_cpu.py	(original)
+++ pypy/dist/pypy/lang/gameboy/test/test_cpu.py	Sat May 31 10:25:01 2008
@@ -636,14 +636,12 @@
     cpu.a.set(value)
     cycle_test(cpu, 0x07, 1)   
     assert_default_registers(cpu, a=((value << 1) | (value >> 7)) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=False)
     
     cpu.reset()
     value = 0x40
     cpu.a.set(value)
     cycle_test(cpu, 0x07, 1)
     assert_default_registers(cpu, a=((value << 1) | (value >> 7)) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=True)
     
 # rrca
 def test_0x0F():
@@ -652,66 +650,44 @@
     cpu.a.set(value)
     cycle_test(cpu, 0x0F, 1)
     assert_default_registers(cpu, a=((value >> 1) | (value << 7)) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=False)
     
     cpu.reset()
     value = 0x02
     cpu.a.set(value)
     cycle_test(cpu, 0x0F, 1)
     assert_default_registers(cpu, a=((value >> 1) | (value << 7)) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=True)
 
 # rla
 def test_0x17():
     cpu = get_cpu()
     value = 0x01
+    cpu.f.set(0x00)
     cpu.a.set(value)
-    cpu.f.c_flag = False
     cycle_test(cpu, 0x17, 1)
     assert_default_registers(cpu, a=(value << 1) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=False)
-    
-    cpu.reset()
-    value = 0x01
-    cpu.a.set(value)
-    cpu.f.c_flag = True
-    cycle_test(cpu, 0x17, 1)
-    assert_default_registers(cpu, a=((value << 1)+1) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=False)
-    
-    cpu.reset()
-    value = 0x40
-    cpu.a.set(value)
-    cpu.f.c_flag = False
-    cycle_test(cpu, 0x17, 1)
-    assert_default_registers(cpu, a=(value << 1) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=True)
     
 # rra
 def test_0x1F():
     cpu = get_cpu()
     value = 0x40
+    cpu.f.set(0x00)
     cpu.a.set(value)
-    cpu.f.c_flag = False
     cycle_test(cpu, 0x1F, 1)
     assert_default_registers(cpu, a=(value >> 1) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=False)
     
     cpu.reset()
+    cpu.f.set(0x00)
     value = 0x40
     cpu.a.set(value)
-    cpu.f.c_flag = True
     cycle_test(cpu, 0x1F, 1)
-    assert_default_registers(cpu, a=(0x08+(value >> 1)) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=False)
+    assert_default_registers(cpu, a=(value >> 1) & 0xFF, f=None);
     
     cpu.reset()
+    cpu.f.set(0x00)
     value = 0x02
     cpu.a.set(value)
-    cpu.f.c_flag = False
     cycle_test(cpu, 0x1F, 1)
     assert_default_registers(cpu, a=(value >> 1) & 0xFF, f=None);
-    assert_default_flags(cpu, z_flag=False, c_flag=True)
 
 # daa
 def test_0x27():
@@ -728,7 +704,6 @@
     cpu.a.set(value)
     cycle_test(cpu, 0x2F, 1)
     assert_default_registers(cpu, a=value^0xFF, f=None)
-    assert_default_flags(cpu, n_flag=True, h_flag=True)
 
 # scf
 def test_0x37():
@@ -788,21 +763,6 @@
              assert store.get() == value
              opCode += 0x01
 
-
-def test_add_flags():
-    cpu = get_cpu()
-    
-    cpu.a.set(0)
-    cpu.b.set(0)
-    cpu.add_a(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=True, h_flag=False)
-    
-    cpu.reset()
-    cpu.a.set(0x0F)
-    cpu.b.set(0x01)
-    cpu.add_a(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=False, h_flag=True)
-    
     
 # add_A_B to add_A_A
 def test_0x80_to_0x87():
@@ -826,42 +786,6 @@
         value += 3
         opCode += 0x01
 
-
-def test_adc_flags():
-    cpu = get_cpu()
-    b = cpu.b
-    a = cpu.a
-    
-    cpu.reset()
-    a.set(0)
-    b.set(0)
-    cpu.add_with_carry(RegisterCallWrapper(cpu.b), None)
-    assert_default_registers(cpu, a=0, f=None)
-    assert_default_flags(cpu, z_flag=True, c_flag=False, h_flag=False)
-    
-    cpu.reset()
-    a.set(0)
-    b.set(0)
-    cpu.f.c_flag = True
-    cpu.add_with_carry(RegisterCallWrapper(cpu.b), None)
-    assert_default_registers(cpu, a=1, f=None)
-    assert_default_flags(cpu, z_flag=False, c_flag=False, h_flag=False)
-    
-    cpu.reset()
-    a.set(0xF0)
-    b.set(0xFF)
-    cpu.add_with_carry(RegisterCallWrapper(cpu.b), None)
-    # overflow for a
-    assert_default_registers(cpu, a=0xEF, bc=None, f=None)
-    assert_default_flags(cpu, z_flag=False, c_flag=True, h_flag=False)
-    
-    cpu.reset()
-    a.set(0x0F)
-    b.set(0x01)
-    cpu.add_with_carry(RegisterCallWrapper(cpu.b), None)
-    assert_default_registers(cpu, a=0x10, f=None, bc=None)
-    assert_default_flags(cpu, z_flag=False, c_flag=False, h_flag=True)
-    
 # adc_A_B to adx_A_A
 def test_0x88_to_0x8F():
     cpu = get_cpu()
@@ -911,36 +835,6 @@
         assert cpu.a.get() == 0
         value += 3
         opCode += 0x01
-
-def test_sbc_flags():
-    cpu = get_cpu()
-    b = cpu.b
-    a = cpu.a
-    value = 0xFF
-    
-    cpu.reset()
-    a.set(value)
-    b.set(value)
-    cpu.subtract_with_carry(RegisterCallWrapper(cpu.b), None)
-    assert_default_registers(cpu, a=0, bc=None, f=None)
-    assert_default_flags(cpu, z_flag=True, c_flag=False, h_flag=False, n_flag=True)
-    
-    cpu.reset()
-    a.set(value)
-    b.set(value-1)
-    cpu.f.c_flag = True
-    cpu.subtract_with_carry(RegisterCallWrapper(cpu.b), None)
-    assert_default_registers(cpu, a=0, bc=None, f=None)
-    assert_default_flags(cpu, z_flag=True, c_flag=False, h_flag=False, n_flag=True)
-    
-    cpu.reset()
-    a.set(0x20)
-    b.set(0x01)
-    cpu.subtract_with_carry(RegisterCallWrapper(cpu.b), None)
-    # overflow for a
-    assert_default_registers(cpu, a=0x1F, bc=None, f=None)
-    assert_default_flags(cpu, z_flag=False, c_flag=False, h_flag=True, n_flag=True)
-    
     
 # sbc_A_B to sbc_A_A
 def test_0x98_0x9F():
@@ -973,20 +867,6 @@
         
         value += 3
         opCode += 0x01
-
-def test_and_flags():
-    cpu = get_cpu()
-    value = 0x12
-    cpu.a.set(value)
-    cpu.b.set(value)
-    cpu.AND(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=False)
-    
-    cpu.reset()
-    cpu.a.set(value)
-    cpu.b.set(0)
-    cpu.AND(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=True)
     
 # and_A_B to and_A_A
 def test_0xA0_to_0xA7():
@@ -1007,27 +887,8 @@
             assert cpu.a.get() == (value & value)
         else:
             assert cpu.a.get() == (valueA & value)
-        if cpu.a.get() == 0:
-            assert cpu.f.get() == constants.Z_FLAG
-        else:
-            assert cpu.f.get() == 0
         value += 1
         opCode += 0x01
-
-
-def test_xor_flags():
-    cpu = get_cpu()
-    value = 0x12
-    cpu.a.set(value)
-    cpu.b.set(value)
-    cpu.XOR(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=True)
-    
-    cpu.reset()
-    cpu.a.set(value)
-    cpu.b.set(value+1)
-    cpu.XOR(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=False)
     
 # xor_A_B to xor_A_A
 def test_0xA8_to_0xAF():
@@ -1048,26 +909,9 @@
             assert cpu.a.get() == (value ^ value)
         else:
             assert cpu.a.get() == (valueA ^ value)
-        if cpu.a.get() == 0:
-            assert cpu.f.z_flag == True
-        else:
-            assert cpu.f.get() == 0
         value += 1
         opCode += 0x01
 
-def test_or_flags():
-    cpu = get_cpu()
-    value = 0x12
-    cpu.a.set(value)
-    cpu.b.set(value)
-    cpu.OR(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=False)
-    
-    cpu.reset()
-    cpu.a.set(0)
-    cpu.b.set(0)
-    cpu.OR(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=True)
     
 # or_A_B to or_A_A
 def test_0xB0_to_0xB7():
@@ -1088,34 +932,9 @@
             assert cpu.a.get() == (value | value)
         else:
             assert cpu.a.get() == (valueA | value)
-        if cpu.a.get() == 0:
-            assert cpu.f.get() == constants.Z_FLAG
-        else:
-            assert cpu.f.get() == 0
         value += 1
         opCode += 0x01
 
-def test_cp_flags():
-    cpu = get_cpu()
-    value = 0x12
-    cpu.a.set(value)
-    cpu.b.set(value)
-    cpu.compare_a(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=True, n_flag=True)
-    
-    cpu.reset()
-    cpu.a.set(value)
-    cpu.b.set(0)
-    cpu.compare_a(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=False, n_flag=True)
-    
-    cpu.reset()
-    cpu.a.set(0xF0) 
-    cpu.b.set(0x01)
-    cpu.compare_a(RegisterCallWrapper(cpu.b), None)
-    assert_default_flags(cpu, z_flag=False, h_flag=True, n_flag=True)
-    
-                         
 # cp_A_B to cp_A_A
 def test_0xB8_to_0xBF_compare_a():
     cpu = get_cpu()
@@ -1133,13 +952,6 @@
         cycle_test(cpu, opCode, numCycles)
         if register == cpu.a:
             valueA = value
-        assert cpu.f.n_flag == True
-        if valueA == value:
-            assert cpu.f.z_flag == True
-        if value < 0:
-            assert cpu.f.c_flag == True
-        if ((valueA-value) & 0x0F) > (valueA & 0x0F):
-            assert cpu.f.h_flag == True
         value += 1
         opCode += 0x01
 
@@ -1554,21 +1366,6 @@
     assert_default_registers(cpu, pc=pc+1)
     
 
-def test_rotateLeft_flags():
-    cpu = get_cpu()
-    a = cpu.a
-    a.set(0x01)
-    assert_default_flags(cpu)
-    cpu.rotate_left_a()
-    assert_default_flags(cpu, z_flag=False, c_flag=False)
-    assert_default_registers(cpu, a=0x02, f=None)
-    
-    cpu.reset()
-    a.set(0x40)
-    cpu.rotate_left_a()
-    assert_default_flags(cpu, z_flag=False, c_flag=True)
-    assert_default_registers(cpu, a=0x80, f=None)
-    
     
 # SECOND ORDER OPCODES ---------------------------------------------------------
 

Modified: pypy/dist/pypy/lang/gameboy/test/test_cpu_2.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/test/test_cpu_2.py	(original)
+++ pypy/dist/pypy/lang/gameboy/test/test_cpu_2.py	Sat May 31 10:25:01 2008
@@ -158,7 +158,6 @@
     assert_flags(cpu, z=True, n=False, h=True, c=True)
     
 def test_add_a():
-    py.test.skip("Flag check broken")
     cpu = get_cpu()
     cpu.f.set(0xFF)
     cpu.a.set(0x00)
@@ -169,7 +168,6 @@
     
     
 def test_add_hl():
-    py.test.skip("Carry flag check broken")
     cpu = get_cpu()
     cpu.f.set(0xFF)
     cpu.hl.set(0x0000)
@@ -223,8 +221,7 @@
     method_value_call(cpu, CPU.and_a, 0x12)
     assert cpu.a.get() == 0x12
     assert_flags(cpu, z=False, n=False, h=True, c=False)
-    
-    
+      
 def test_or_a():
     cpu = get_cpu()
     cpu.f.set(0xFF)
@@ -257,8 +254,6 @@
     assert cpu.a.get() == 0xFF
     assert_flags(cpu, z=False, n=False, h=False, c=False)
     
-
-    
 def test_xor_a():
     cpu = get_cpu()
     cpu.f.set(0xFF)
@@ -348,8 +343,7 @@
         method_register_value_call(cpu, CPU.reset_bit, cpu.a, i)
         assert cpu.a.get() == 0xFF - (0x01 << i)
         assert cpu.f.get() == 0x00
-
-    
+ 
 def test_unconditional_call():
     cpu = get_cpu()
     cpu.f.set(0x12)
@@ -363,7 +357,6 @@
     assert cpu.pop() == 0x12
     assert cpu.pc.get() == 0x5678
     
-
 def test_conditional_call():
     cpu = get_cpu()
     cpu.f.set(0x12)



More information about the Pypy-commit mailing list