[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