[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