[pypy-svn] r55417 - pypy/dist/pypy/lang/gameboy

cami at codespeak.net cami at codespeak.net
Fri May 30 13:26:34 CEST 2008


Author: cami
Date: Fri May 30 13:26:32 2008
New Revision: 55417

Modified:
   pypy/dist/pypy/lang/gameboy/cartridge.py
   pypy/dist/pypy/lang/gameboy/cpu.py
   pypy/dist/pypy/lang/gameboy/gameboy.py
   pypy/dist/pypy/lang/gameboy/gameboyImplementation.py
Log:
updated gameboyimplementation to handle multiple keypresses
fixed non-working esc-key for quitting the emulation


Modified: pypy/dist/pypy/lang/gameboy/cartridge.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/cartridge.py	(original)
+++ pypy/dist/pypy/lang/gameboy/cartridge.py	Fri May 30 13:26:32 2008
@@ -94,6 +94,7 @@
         self.load_battery()
         self.mbc = self.create_bank_controller(self.get_memory_bank_type(), 
                                                self.rom, self.ram, self.clock)
+        print self
         
     def check_rom(self):
         if not self.verify_header():
@@ -150,7 +151,7 @@
     def get_checksum(self):
         return ((self.rom[constants.CHECKSUM_A_ADDRESS]) << 8) \
                 + (self.rom[constants.CHECKSUM_B_ADDRESS])
-    
+
     def has_battery(self):
         return has_cartridge_battery(self.get_memory_bank_type())
     
@@ -172,6 +173,12 @@
     def create_bank_controller(self, type, rom, ram, clock_driver):
         return MEMORY_BANK_MAPPING[type](rom, ram, clock_driver)
 
+    
+    def __repr__(self):
+        return "Type=%s, Destination: %s ramSize: %sKB romSize: %sKB" % \
+                        (self.get_memory_bank_type(), self.get_destination_code(),
+                        self.get_ram_size(), self.get_rom_size()/1024)
+        
 
 # ------------------------------------------------------------------------------
 
@@ -197,9 +204,9 @@
         
         
     def load(self, cartridge_path):
-        cartridge_path = str(cartridge_path)
-        self.cartridge_file_path = cartridge_path
-        self.cartridge_stream = open_file_as_stream(cartridge_path)
+        cartridge_path               = str(cartridge_path)
+        self.cartridge_file_path     = cartridge_path
+        self.cartridge_stream        = open_file_as_stream(cartridge_path)
         self.cartridge_file_contents = map_to_byte(
                                                 self.cartridge_stream.readall())
         self.load_battery(cartridge_path)
@@ -386,9 +393,9 @@
         elif address >= 0xA000 and address <= 0xBFFF and self.ram_enable:
             self.ram[self.ram_bank + (address & 0x1FFF)] = data
         else:
-            #return 
-            raise InvalidMemoryAccessException("MBC 1Invalid memory Access address: %s" 
-                                               % hex(address))
+            return 
+            #raise InvalidMemoryAccessException("MBC 1Invalid memory Access address: %s" 
+            #                                   % hex(address))
 
     def write_rom_bank_1(self, address, data):
         if (data & 0x1F) == 0:

Modified: pypy/dist/pypy/lang/gameboy/cpu.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/cpu.py	(original)
+++ pypy/dist/pypy/lang/gameboy/cpu.py	Fri May 30 13:26:32 2008
@@ -365,7 +365,7 @@
 
     def fetch_execute(self):
         opCode = self.fetch()
-        #print "    fetch exe:", hex(opCode), "  "
+        print "    fetch exe:", hex(opCode), "  "
         #, FETCH_EXECUTE_OP_CODES[opCode].__name__
         self.last_fetch_execute_op_code = opCode
         FETCH_EXECUTE_OP_CODES[opCode](self)
@@ -568,10 +568,10 @@
         self.f.z_flag_compare(self.a.get(), reset=True)
 
     def inc_double_register(self, doubleRegister):
-        self.inc(doubleRegister.get, doubleRegister.set)
+        doubleRegister.set((doubleRegister.get() + 1) & 0xFF)
         
     def dec_double_register(self, doubleRegister):
-        self.dec(doubleRegister.get, doubleRegister.set)
+        doubleRegister.set((doubleRegister.get() - 1) & 0xFF)
         
     def inc(self, getCaller, setCaller):
         # 1 cycle

Modified: pypy/dist/pypy/lang/gameboy/gameboy.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/gameboy.py	(original)
+++ pypy/dist/pypy/lang/gameboy/gameboy.py	Fri May 30 13:26:32 2008
@@ -78,7 +78,7 @@
         self.video.reset()
         self.sound.reset()
         self.cpu.set_rom(self.cartridge_manager.get_rom())
-        self.draw_logo()
+        #self.draw_logo()
 
     def get_cycles(self):
         return min(min(min(min( self.video.get_cycles(), self.serial.get_cycles()),
@@ -202,5 +202,5 @@
         for tile in range(0, 12):
             self.video.write(0x9904 + tile, tile + 1)
             self.video.write(0x9924 + tile, tile + 13)
-
         self.video.write(0x9905 + 12, 25)
+

Modified: pypy/dist/pypy/lang/gameboy/gameboyImplementation.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/gameboyImplementation.py	(original)
+++ pypy/dist/pypy/lang/gameboy/gameboyImplementation.py	Fri May 30 13:26:32 2008
@@ -32,15 +32,17 @@
    
     
     def mainLoop(self):
-        self.reset()
+        #self.reset()
         try:
-            while True:
-                if self.poll_event():
+            isRunning = True
+            while isRunning:
+                while self.poll_event():
                     if self.check_for_escape():
-                        break
+                        isRunning = False
+                        break 
                     self.joypad_driver.update(self.event) 
                 self.emulate(constants.GAMEBOY_CLOCK >> 2)
-                RSDL.Delay(10)
+                #RSDL.Delay(1)
         finally:
             lltype.free(self.event, flavor='raw')
             RSDL.Quit()
@@ -80,15 +82,15 @@
         RSDL.Flip(self.screen)
             
     def draw_pixels(self):
-        str = ""
+        #str = ""
         for y in range(self.height):
-            str += "\n"
+            #str += "\n"
             for x in range(self.width):
-                if y%2 == 0 or True:
-                    px = self.get_pixel_color(x, y)
-                    str += ["#", "%", "+", " ", " "][px]
-                #RSDL_helper.set_pixel(self.screen, x, y, self.pixel_map(x, y))
-        print str;
+                #if y%2 == 0 or True:
+                #    px = self.get_pixel_color(x, y)
+                #    str += ["#", "%", "+", " ", " "][px]
+                RSDL_helper.set_pixel(self.screen, x, y, self.pixel_map(x, y))
+        #print str;
              
     def pixel_map(self, x, y):
         return [0xFFFFFF, 0xCCCCCC, 0x666666, 0x000000][self.get_pixel_color(x, y)]



More information about the Pypy-commit mailing list