[pypy-svn] r52882 - pypy/branch/gameboy-emulator/pypy/lang/gameboy/test

cami at codespeak.net cami at codespeak.net
Sun Mar 23 23:53:41 CET 2008


Author: cami
Date: Sun Mar 23 23:53:39 2008
New Revision: 52882

Modified:
   pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cpu.py
Log:
implemented more tests


Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cpu.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cpu.py	(original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cpu.py	Sun Mar 23 23:53:39 2008
@@ -406,7 +406,15 @@
     
 # ld_A_BCi
 def test_0x0A():
-    passs
+    cpu = get_cpu()
+    value = 0x12
+    address = 0xC020
+    cpu.bc.set(address)
+    cpu.write(address, value)
+    assert cpu.read(address) == value
+    cycle_test(cpu, 0x0A, 2)
+    assert_default_registers(cpu, a=value)
+    
         
 # ld_DEi_A
 def test_0x12():
@@ -418,7 +426,14 @@
 
 # load_a_DEi
 def test_0x1A():
-    pass
+    cpu = get_cpu()
+    value = 0x12
+    address = 0xC020
+    cpu.de.set(address)
+    cpu.write(address, value)
+    assert cpu.read(address) == value
+    cycle_test(cpu, 0x1A, 2)
+    assert_default_registers(cpu, a=value)
 
 # ldi_HLi_A
 def test_0x22():
@@ -430,7 +445,15 @@
 
 # ldi_A_HLi
 def test_0x2A():
-    pass
+    cpu = get_cpu()
+    value = 0x12
+    address = 0xC020
+    hlValue = cpu.hl.get()
+    cpu.hl.set(address)
+    cpu.write(address, value)
+    assert cpu.read(address) == value
+    cycle_test(cpu, 0x0A, 2)
+    assert_default_registers(cpu, a=value, hl=hlValue+1)
 
 # ldd_HLi_A
 def test_0x32():
@@ -442,7 +465,15 @@
     
 # ldd_A_HLi
 def test_0x3A():
-    pass
+    cpu = get_cpu()
+    value = 0x12
+    address = 0xC020
+    hlValue = cpu.hl.get()
+    cpu.hl.set(address)
+    cpu.write(address, value)
+    assert cpu.read(address) == value
+    cycle_test(cpu, 0x0A, 2)
+    assert_default_registers(cpu, a=value, hl=hlValue-1)
     
 # inc_BC DE HL SP
 def test_0x03_to_0x33_inc_double_registers():
@@ -459,7 +490,6 @@
         opCode += 0x10
         value += 3
  
-
 # dec_BC
 def test_0x0B_to_0c38_dec_double_registers():
     cpu = get_cpu()
@@ -562,405 +592,208 @@
     
 # rlca
 def test_0x07():
-    pass
-    
+    cpu = get_cpu()
+    cycle_test(cpu, 0x07, 1)
     
 # rrca
 def test_0x0F():
-    pass
+    cpu = get_cpu()
+    cycle_test(cpu, 0x0F, 1)
 
 # rla
 def test_0x17():
-    pass
+    cpu = get_cpu()
+    cycle_test(cpu, 0x17, 1)
 
 # rra
 def test_0x1F():
-    pass
+    cpu = get_cpu()
+    cycle_test(cpu, 0x1F, 1)
 
 # daa
 def test_0x27():
-    pass
+    cpu = get_cpu()
+    cycle_test(cpu, 0x27, 1)
 
 # cpl
 def test_0x2F():
-    pass
+    cpu = get_cpu()
+    value = 0x12
+    cpu.a.set(value)
+    cpu.f.set(value)
+    cycle_test(cpu, 0x07, 1)
+    assert_default_registers(cpu, a=value^0xFF, f=value|constants.N_FLAG+constants.H_FLAG)
 
 # scf
 def test_0x37():
-    pass
+    cpu = get_cpu()
+    value = 0x12
+    cpu.f.set(value)
+    cycle_test(cpu, 0x37, 0)
+    assert_default_registers(cpu, f=(value & constants.Z_FLAG)|constants.C_FLAG)
 
 # ccf
 def test_0x3F():
-    pass
+    cpu = get_cpu()
+    value = 0x12
+    cpu.f.set(value)
+    cycle_test(cpu, 0x3F, 0)
+    assert_default_registers(cpu, f=(value & (constants.Z_FLAG|constants.C_FLAG))^constants.C_FLAG)
 
 # halt
 def test_0x76():
-    pass
+    cpu = get_cpu()
+    assert cpu.halted == False
+    cycle_test(cpu, 0x76, 0)
+    assert cpu.halted == True
+
 
 # ld_B_B
 def test_0x40():
-    pass
-# ld_B_C
-def test_0x41():
-    pass
-# ld_B_D
-def test_0x42():
-    pass
-# ld_B_E
-def test_0x43():
-    pass
-# ld_B_H
-def test_0x44():
-    pass
-# ld_B_L
-def test_0x45():
-    pass
-# ld_B_HLi
-def test_0x46():
-    pass
-# ld_B_A
-def test_0x47():
-    pass
-# ld_C_B
-def test_0x48():
-    pass
-# ld_C_C
-def test_0x49():
-    pass
-# ld_C_D
-def test_0x4A():
-    pass
-# ld_C_E
-def test_0x4B():
-    pass
-# ld_C_H
-def test_0x4C():
-    pass
-# ld_C_L
-def test_0x4D():
-    pass
-# ld_C_HLi
-def test_0x4E():
-    pass
-# ld_C_A
-def test_0x4F():
-    pass
-# ld_D_B
-def test_0x50():
-    pass
-# ld_D_C
-def test_0x51():
-    pass
-# ld_D_D
-def test_0x52():
-    pass
-# ld_D_E
-def test_0x53():
-    pass
-# ld_D_H
-def test_0x54():
-    pass
-# ld_D_L
-def test_0x55():
-    pass
-# ld_D_HLi
-def test_0x56():
-    pass
-# ld_D_A
-def test_0x57():
-    pass
-# ld_E_B
-def test_0x58():
-    pass
-# ld_E_C
-def test_0x59():
-    pass
-# ld_E_D
-def test_0x5A():
-    pass
-# ld_E_E
-def test_0x5B():
-    pass
-# ld_E_H
-def test_0x5C():
-    pass
-# ld_E_L
-def test_0x5D():
-    pass
-# ld_E_HLi
-def test_0x5E():
-    pass
-# ld_E_A
-def test_0x5F():
-    pass
-# ld_H_B
-def test_0x60():
-    pass
-# ld_H_C
-def test_0x61():
-    pass
-# ld_H_D
-def test_0x62():
-    pass
-# ld_H_E
-def test_0x63():
-    pass
-# ld_H_H
-def test_0x64():
-    pass
-# ld_H_L
-def test_0x65():
-    pass
-# ld_H_HLi
-def test_0x66():
-    pass
-# ld_H_A
-def test_0x67():
-    pass
-# ld_L_B
-def test_0x68():
-    pass
-# ld_L_C
-def test_0x69():
-    pass
-# ld_L_D
-def test_0x6A():
-    pass
-# ld_L_E
-def test_0x6B():
-    pass
-# ld_L_H
-def test_0x6C():
-    pass
-# ld_L_L
-def test_0x6D():
-    pass
-# ld_L_HLi
-def test_0x6E():
-    pass
-# ld_L_A
-def test_0x6F():
-    pass
-# ld_HLi_B
-def test_0x70():
-    pass
-# ld_HLi_C
-def test_0x71():
-    pass
-# ld_HLi_D
-def test_0x72():
-    pass
-# ld_HLi_E
-def test_0x73():
-    pass
-# ld_HLi_H
-def test_0x74():
-    pass
-# ld_HLi_L
-def test_0x75():
-    pass
-# ld_HLi_A
-def test_0x77():
-    pass
-# ld_A_B
-def test_0x78():
-    pass
-# ld_A_C
-def test_0x79():
-    pass
-# ld_A_D
-def test_0x7A():
-    pass
-# ld_A_E
-def test_0x7B():
-    pass
-# ld_A_H
-def test_0x7C():
-    pass
-# ld_A_L
-def test_0x7D():
-    pass
-# ld_A_HLi
-def test_0x7E():
-    pass
-# ld_A_A
-def test_0x7F():
-    pass
+    cpu = get_cpu()
+    opCode = 0x04
+    value = 0x12
+    registers = [cpu.getB, cpu.getC, cpu.getD, cpu.getE, cpu.getH, cpu.getL, cpu.getHLi, cpu.getA]
+    for store in registers:
+         for load in registers:
+             cpu.reset()
+             load.set(value)
+             numCycles= 1
+             if store == cpu.getHLi or load == cpu.getHLi:
+                numCycles = 2
+             cycle_test(cpu, opCode, numCycles)
+             assert store.get() == value
+             opCode += 0x01
+
 
-# add_A_B
+# add_A_B to add_A_A
 def test_0x80():
-    pass
-# add_A_C
-def test_0x81():
-    pass
-# add_A_D
-def test_0x82():
-    pass
-# add_A_E
-def test_0x83():
-    pass
-# add_A_H
-def test_0x84():
-    pass
-# add_A_L
-def test_0x85():
-    pass
-# add_A_HLi
-def test_0x86():
-    pass
-# add_A_A
-def test_0x87():
-    pass
+    cpu = get_cpu()
+    opCode = 0x80
+    valueA = 0x11
+    value = 0x12
+    registers = [cpu.getB, cpu.getC, cpu.getD, cpu.getE, cpu.getH, cpu.getL, cpu.getHLi, cpu.getA]
+    for add in registers:
+        cpu.reset()
+        cpu.a.set(valueA)
+        add.set(value)
+        numCycles= 1
+        if add == cpu.getHLi:
+            numCycles = 2
+        cycle_test(cpu, opCode, numCycles)
+        assert cpu.a.get() == valueA+value
+        value += 3
+        opCode += 0x01
 
-# adc_A_B
+# adc_A_B to adx_A_A
 def test_0x88():
-    pass
-# adc_A_C
-def test_0x89():
-    pass
-# adc_A_D
-def test_0x8A():
-    pass
-# adc_A_E
-def test_0x8B():
-    pass
-# adc_A_H
-def test_0x8C():
-    pass
-# adc_A_L
-def test_0x8D():
-    pass
-# adc_A_HLi
-def test_0x8E():
-    pass
-# adc_A_A
-def test_0x8F():
-    pass
+    py.test.skip("need a full flag checker imlementation")
+    cpu = get_cpu()
+    opCode = 0x88
+    value = 0x12
+    registers = [cpu.getB, cpu.getC, cpu.getD, cpu.getE, cpu.getH, cpu.getL, cpu.getHLi, cpu.getA]
+    for add in registers:
+        cpu.reset()
+        cpu.a.set(value)
+        add.set(value)
+        numCycles= 1
+        if add == cpu.getHLi:
+            numCycles = 2
+        cycle_test(cpu, opCode, numCycles)
+        assert cpu.a.get() == 2*value
+        value += 3
+        opCode += 0x01
 
-# sub_A_B
+# sub_A_B to sub_A_A
 def test_0x90():
-    pass
-# sub_A_C
-def test_0x91():
-    pass
-# sub_A_D
-def test_0x92():
-    pass
-# sub_A_E
-def test_0x93():
-    pass
-# sub_A_H
-def test_0x94():
-    pass
-# sub_A_L
-def test_0x95():
-    pass
-# sub_A_HLi
-def test_0x96():
-    pass
-# sub_A_A
-def test_0x97():
-    pass
+    cpu = get_cpu()
+    opCode = 0x90
+    value = 0x12
+    registers = [cpu.getB, cpu.getC, cpu.getD, cpu.getE, cpu.getH, cpu.getL, cpu.getHLi, cpu.getA]
+    for add in registers:
+        cpu.reset()
+        cpu.a.set(value)
+        add.set(value)
+        numCycles= 1
+        if add == cpu.getHLi:
+            numCycles = 2
+        cycle_test(cpu, opCode, numCycles)
+        assert cpu.a.get() == 0
+        value += 3
+        opCode += 0x01
 
-# sbc_A_B
+# sbc_A_B to sbc_A_A
 def test_0x98():
     pass
-# sbc_A_C
-def test_0x99():
-    pass
-# sbc_A_D
-def test_0x9A():
-    pass
-# sbc_A_E
-def test_0x9B():
-    pass
-# sbc_A_H
-def test_0x9C():
-    pass
-# sbc_A_L
-def test_0x9D():
-    pass
-# sbc_A_HLi
-def test_0x9E():
-    pass
-# sbc_A_A
-def test_0x9F():
-    pass
 
-# and_A_B
+# and_A_B to and_A_A
 def test_0xA0():
-    pass
-# and_A_C
-def test_0xA1():
-    pass
-# and_A_D
-def test_0xA2():
-    pass
-# and_A_E
-def test_0xA3():
-    pass
-# and_A_H
-def test_0xA4():
-    pass
-# and_A_L
-def test_0xA5():
-    pass
-# and_A_HLi
-def test_0xA6():
-    pass
-# and_A_A
-def test_0xA7():
-    pass
+    cpu = get_cpu()
+    opCode = 0xA0
+    value = 0x12
+    valueA = 0x11
+    registers = [cpu.getB, cpu.getC, cpu.getD, cpu.getE, cpu.getH, cpu.getL, cpu.getHLi, cpu.getA]
+    for add in registers:
+        cpu.reset()
+        cpu.a.set(valueA)
+        add.set(value)
+        numCycles= 1
+        if add == cpu.getHLi:
+            numCycles = 2
+        cycle_test(cpu, opCode, numCycles)
+        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
 
-# xor_A_B
-def test_0xA8():
-    pass
-# xor_A_C
-def test_0xA9():
-    pass
-# xor_A_D
-def test_0xAA():
-    pass
-# xor_A_E
-def test_0xAB():
-    pass
-# xor_A_H
-def test_0xAC():
-    pass
-# xor_A_L
-def test_0xAD():
-    pass
-# xor_A_HLi
-def test_0xAE():
-    pass
-# xor_A_A
-def test_0xAF():
-    pass
+# xor_A_B to xor_A_A
+def test_0xA0():
+    cpu = get_cpu()
+    opCode = 0xA0
+    value = 0x12
+    valueA = 0x11
+    registers = [cpu.getB, cpu.getC, cpu.getD, cpu.getE, cpu.getH, cpu.getL, cpu.getHLi, cpu.getA]
+    for add in registers:
+        cpu.reset()
+        cpu.a.set(valueA)
+        add.set(value)
+        numCycles= 1
+        if add == cpu.getHLi:
+            numCycles = 2
+        cycle_test(cpu, opCode, numCycles)
+        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
 
-# or_A_B
+# or_A_B to or_A_A
 def test_0xB0():
-    pass
-# or_A_C
-def test_0xB1():
-    pass
-# or_A_D
-def test_0xB2():
-    pass
-# or_A_E
-def test_0xB3():
-    pass
-# or_A_H
-def test_0xB4():
-    pass
-# or_A_L
-def test_0xB5():
-    pass
-# or_A_HLi
-def test_0xB6():
-    pass
-# or_A_A
-def test_0xB7():
-    pass
+    cpu = get_cpu()
+    opCode = 0xA0
+    value = 0x12
+    valueA = 0x11
+    registers = [cpu.getB, cpu.getC, cpu.getD, cpu.getE, cpu.getH, cpu.getL, cpu.getHLi, cpu.getA]
+    for add in registers:
+        cpu.reset()
+        cpu.a.set(valueA)
+        add.set(value)
+        numCycles= 1
+        if add == cpu.getHLi:
+            numCycles = 2
+        cycle_test(cpu, opCode, numCycles)
+        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
 
 # cp_A_B
 def test_0xB8():



More information about the Pypy-commit mailing list