[pypy-svn] r58458 - in pypy/dist/pypy/lang/gameboy: . test
cami at codespeak.net
cami at codespeak.net
Sun Sep 28 02:09:09 CEST 2008
Author: cami
Date: Sun Sep 28 02:09:08 2008
New Revision: 58458
Modified:
pypy/dist/pypy/lang/gameboy/test/test_video.py
pypy/dist/pypy/lang/gameboy/test/test_video_sprite.py
pypy/dist/pypy/lang/gameboy/video.py
pypy/dist/pypy/lang/gameboy/video_sprite.py
Log:
oam table acces runs directly on sprites now
added new tests to cover the direct access
made some changes for future direct acces on the vram table
Modified: pypy/dist/pypy/lang/gameboy/test/test_video.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/test/test_video.py (original)
+++ pypy/dist/pypy/lang/gameboy/test/test_video.py Sun Sep 28 02:09:08 2008
@@ -79,6 +79,15 @@
assert video.read(address) == value
counted_value = (counted_value + 1 ) % 0xFF
+def test_video_read_write_oam():
+ video = get_video()
+ value = 0
+ for i in range(constants.OAM_ADDR, constants.OAM_ADDR + constants.OAM_SIZE):
+ video.write(i, value)
+ assert video.read(i) == value
+ value = (value + 1) & 0xFF
+
+
def test_read_write_control():
video = get_video()
value = 0x2
Modified: pypy/dist/pypy/lang/gameboy/test/test_video_sprite.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/test/test_video_sprite.py (original)
+++ pypy/dist/pypy/lang/gameboy/test/test_video_sprite.py Sun Sep 28 02:09:08 2008
@@ -21,7 +21,7 @@
assert sprite.object_behind_background == False
assert sprite.x_flipped == False
assert sprite.y_flipped == False
- assert sprite.palette_number == 0
+ assert sprite.tile_number == 0
def test_reset():
@@ -54,6 +54,24 @@
sprite.reset()
test_standard_values(sprite)
+def test_video_sprite_read_write():
+ sprite = get_sprite()
+ for i in range(0xFF):
+ sprite.set_data(byte0=i)
+ assert sprite.get_data()[0] == i
+
+ for i in range(0xFF):
+ sprite.set_data(byte1=i)
+ assert sprite.get_data()[1] == i
+
+ for i in range(0xFF):
+ sprite.set_data(byte2=i)
+ assert sprite.get_data()[2] == i
+
+ for i in range(0xFF):
+ sprite.set_data(byte3=i)
+ assert sprite.get_data()[3] == i
+
def test_size():
sprite = get_sprite()
sprite.big_size = False
Modified: pypy/dist/pypy/lang/gameboy/video.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/video.py (original)
+++ pypy/dist/pypy/lang/gameboy/video.py Sun Sep 28 02:09:08 2008
@@ -414,12 +414,10 @@
the h-blank period.
"""
self.oam[address - constants.OAM_ADDR] = data & 0xFF
- #self.update_sprites(address)
self.update_sprite(address, data)
def get_oam(self, address):
- #return self.get_sprite(address).get_data()[address % 4];
- return self.oam[address - constants.OAM_ADDR]
+ return self.get_sprite(address).get_data_at(address);
def set_vram(self, address, data):
"""
Modified: pypy/dist/pypy/lang/gameboy/video_sprite.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/video_sprite.py (original)
+++ pypy/dist/pypy/lang/gameboy/video_sprite.py Sun Sep 28 02:09:08 2008
@@ -5,7 +5,6 @@
# -----------------------------------------------------------------------------
-
class Sprite(object):
def __init__(self, video):
@@ -20,10 +19,13 @@
self.object_behind_background = False
self.x_flipped = False
self.y_flipped = False
- self.palette_number = 0
+ self.tile_number = 0
self.hidden = True
+ self.rest_attributes_and_flags = 0
-
+ def get_data_at(self, address):
+ return self.get_data()[address % 4]
+
def get_data(self):
return [self.y, self.x, self.tile_number, self.get_attributes_and_flags()]
@@ -33,11 +35,11 @@
"""
if byte0 is not -1:
self.extract_y_position(byte0)
- if byte0 is not -1:
+ if byte1 is not -1:
self.extract_x_position(byte1)
- if byte0 is not -1:
+ if byte2 is not -1:
self.extract_tile_number(byte2)
- if byte0 is not -1:
+ if byte3 is not -1:
self.extract_attributes_and_flags(byte3)
def extract_y_position(self, data):
@@ -83,14 +85,16 @@
self.object_behind_background = bool(data & (1 << 7))
self.x_flipped = bool(data & (1 << 6))
self.y_flipped = bool(data & (1 << 5))
- self.palette_number = bool(data & (1 << 3))
+ self.tile_number = bool(data & (1 << 4))
+ self.rest_attributes_and_flags = data & (1+2+4+8)
def get_attributes_and_flags(self):
value = 0
value += int(self.object_behind_background) << 7
value += int(self.x_flipped) << 6
value += int(self.y_flipped) << 5
- value += int(self.palette_number ) << 3
+ value += int(self.tile_number) << 4
+ value += self.rest_attributes_and_flags
return value
def hide_check(self):
@@ -144,6 +148,16 @@
def get_selected_tile_map_space(self):
pass
+
+ def get_data_at(self, address):
+ return self.get_data()[address % self.byte_size()]
+
+ def get_data():
+ return []
+
+ def byte_size(self):
+ return 0
+
# -----------------------------------------------------------------------------
class Window(object):
More information about the Pypy-commit
mailing list