[pypy-svn] r53900 - in pypy/branch/gameboy-emulator/pypy/lang/gameboy: . test

cami at codespeak.net cami at codespeak.net
Sun Apr 20 10:31:10 CEST 2008


Author: cami
Date: Sun Apr 20 10:31:08 2008
New Revision: 53900

Modified:
   pypy/branch/gameboy-emulator/pypy/lang/gameboy/cartridge.py
   pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cartridge.py
Log:
introducing cartride classe which merges some functions from cartridgeStoreDriver and CartridgeFactory


Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/cartridge.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/cartridge.py	(original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/cartridge.py	Sun Apr 20 10:31:08 2008
@@ -2,7 +2,7 @@
 # ___________________________________________________________________________
 
 from pypy.lang.gameboy import constants
-
+import os;
 
 def hasCartridgeBattery(self, cartridgeType):    
     return (cartridgeType == constants.TYPE_MBC1_RAM_BATTERY \
@@ -33,43 +33,10 @@
 
 class CartridgeManager(object):
     
-    def __init__(self, storeDriver, clockDriver):
-        self.store = storeDriver
+    def __init__(self, clockDriver):
         self.clock = clockDriver
-    
-    def getCartridgeType(self):
-        return self.rom[constants.CARTRIDGE_TYPE_ADDRESS] & 0xFF
-    
-    def getRom(self):
-        return self.rom
-        
-    def getROMSize(self):
-        romSize = self.rom[constants.CARTRIDGE_SIZE_ADDRESS] & 0xFF
-        if romSize>=0x00 and romSize<=0x07:
-            return 32768 << romSize
-        return -1
+        self.cartridge = None
         
-    def getRAMSize(self):
-        return constants.RAM_SIZE_MAPPING[self.rom[constants.RAM_SIZE_ADDRESS]]
-    
-    def getDestinationCode(self):
-        return self.rom[constants.DESTINATION_CODE_ADDRESS] & 0xFF
-    
-    def getLicenseeCode():
-        return self.rom[constants.LICENSEE_ADDRESS] & 0xFF
-
-    def getROMVersion(self):
-        return self.rom[constants.ROM_VERSION_ADDRESS] & 0xFF
-    
-    def getHeaderChecksum(self):
-        return self.rom[constants.HEADER_CHECKSUM_ADDRESS] & 0xFF
-    
-    def getChecksum(self):
-        return ((rom[constants.CHECKSUM_A_ADDRESS] & 0xFF) << 8) + (rom[constants.CHECKSUM_B_ADDRESS] & 0xFF)
-    
-    def hasBattery(self):
-        return hasCartridgeBattery(self.getCartridgeType())
-    
     def reset(self):
         if not self.hasBattery():
             self.ram[0:len(self.ram):1] = 0xFF
@@ -81,17 +48,13 @@
     def write(self, address, data):
         self.mbc.write(address, data)
     
-    def load(self, cartridgeName):
-        self.loadROM()
+    def load(self, cartridge):
+        self.cartridge = cartridge
+        self.rom  = self.cartridge.read()
         self.checkROM()
         self.createRAM()
         self.loadBattery()
         self.mbc = self.createBankController(self.getCartridgeType(), rom, ram, clock)
-    
-    def loadROM(self):
-        romSize = self.store.getCartridgeSize(cartridgeName)
-        self.rom = [0]*romSize
-        self.store.readCartridge(cartridgeName, self.rom)
         
     def checkROM(self):
         if not self.verifyHeader():
@@ -108,11 +71,44 @@
         
     def loadBattery(self):
         if self.store.hasBattery(cartridgeName):
-            self.store.readBattery(cartridgeName, ram)
+            self.store.readBattery(cartridgeName, self.ram)
 
     def save(self, cartridgeName):
         if self.hasBattery():
             self.store.writeBattery(cartridgeName, self.ram)
+            
+    def getCartridgeType(self):
+        return self.rom[constants.MEMORY_BANK_MAPPING] & 0xFF
+    
+    def getRom(self):
+        return self.rom
+        
+    def getROMSize(self):
+        romSize = self.rom[constants.CARTRIDGE_SIZE_ADDRESS] & 0xFF
+        if romSize>=0x00 and romSize<=0x07:
+            return 32768 << romSize
+        return -1
+        
+    def getRAMSize(self):
+        return constants.RAM_SIZE_MAPPING[self.rom[constants.RAM_SIZE_ADDRESS]]
+    
+    def getDestinationCode(self):
+        return self.rom[constants.DESTINATION_CODE_ADDRESS] & 0xFF
+    
+    def getLicenseeCode():
+        return self.rom[constants.LICENSEE_ADDRESS] & 0xFF
+
+    def getROMVersion(self):
+        return self.rom[constants.ROM_VERSION_ADDRESS] & 0xFF
+    
+    def getHeaderChecksum(self):
+        return self.rom[constants.HEADER_CHECKSUM_ADDRESS] & 0xFF
+    
+    def getChecksum(self):
+        return ((rom[constants.CHECKSUM_A_ADDRESS] & 0xFF) << 8) + (rom[constants.CHECKSUM_B_ADDRESS] & 0xFF)
+    
+    def hasBattery(self):
+        return hasCartridgeBattery(self.getCartridgeType())
     
     def verify(self):
         checksum = 0
@@ -132,92 +128,55 @@
     def createBankController(self, type, rom, ram, clockDriver):
         return MEMORY_BANK_MAPPING[type](rom, ram, clockDriver)
 
-def CartridgeStoreManager(object):
+
     
-    def __init__(self):
+def Cartridge(object):
+    
+    def __init__(file=None):
+        if file != None:
+            self.load(file)
+        
+    def load(self, cartridgeFilePath):
         self.cartridgeName = ""
+        self.cartridgeFile = open(file)
+        self._loadBattery(cartridgeFilePath)
         
-    def setCartridgeName(self, cartridgeName):
-        self.cartridgeName = cartridgeName
-        self.batteryName = self.createBatteryName()
-        self.cartridgeFile = open(self.cartridgeName)
-        self.batteryFile = open(self.batteryName)
-    
-    def createBatteryName(self):
-        if self.cartridgeName.endsWith(constants.CARTRIDGE_FILE_EXTENSION):
-            self.batteryName = self.cartridgeName.replace(constants.CARTRIDGE_FILE_EXTENSION,
+        
+    def _loadBattery(self, cartridgeFilePath):
+        self.batteryFilePath = self._createBatteryFilePath(cartridgeFilePath)
+        if self.hasBattery():
+            self.batteryFile = open(self.batteryFilePath)
+    
+    def _createBatteryFilePath(self, cartridgeFilePath):
+        if cartridgeFilePath.endsWith(constants.CARTRIDGE_FILE_EXTENSION):
+            return cartridgeFilePath.replace(constants.CARTRIDGE_FILE_EXTENSION,
                     constants.BATTERY_FILE_EXTENSION);
-        elif self.cartridgeName.endsWith(constants.CARTRIDGE_COLOR_FILE_EXTENSION):
-            self.batteryName = self.cartridgeName.replace(constants.CARTRIDGE_COLOR_FILE_EXTENSION,
+        elif cartridgeFilePath.endsWith(constants.CARTRIDGE_COLOR_FILE_EXTENSION):
+            return cartridgeFilePath.replace(constants.CARTRIDGE_COLOR_FILE_EXTENSION,
                     constants.BATTERY_FILE_EXTENSION);
         else:
-            batteryName = cartridgeName + batteryName.BATTERY_FILE_EXTENSION;
-            
-    def getCartridgeName(self):
-        return self.cartridgeName
+            return cartridgeFilePath + constants.BATTERY_FILE_EXTENSION;
     
-    def getCartridgeFile(self):
-        return self.cartridgeFile
-
-    def hasCartridge(self):
-        return self.cartridgeFile.exists()
-
-    def getCartridgeSize(self):
-        return self.cartridgeFile.length()
-
-    def readCartridge(self, buffer):
-        try:
-            self.readFile(self.cartridgeFile, buffer);
-        except:
-            raise Exception("Could not load cartridge: "
-                    + self.cartridgeFile.getPath())
+    def hasBattery(self):
+        return os.path.exists(self.batteryFilePath)
     
-    def getBatteryName(self):
-        return self.batteryName;
+    def read(self):
+        return map(self.cartridgeFile.read(), self.mapToByte)
+        
+    def mapToByte(value):
+        return ord(value) & 0xFF
     
-    def getBatteryFile(self):
-        return self.batteryFile
-
-    def hasBattery(self):
-        return self.batteryFile.exists()
-
-    def getBatterySize(self):
-        return self.batteryFile.length()
-
-    def readBattery(self, buffer):
-        try:
-            self.readFile(self.batteryFile, buffer)
-        except:
-            raise Exception("Could not load battery: "
-                    + self.batteryFile.getPath())
-
-    def writeBattery(self, buffer):
-        try:
-            self.writeFile(self.batteryFile, buffer)
-        except:
-            raise Exception("Could not save battery: "
-                    + batteryFile.getPath())
-
-    def removeBattery():
-        if not self.batteryFile.delete():
-           raise Exception("Could not delete battery: "
-                    + batteryFile.getPath())
-
-    def readFile(file, buffer):
-        input = FileInputStream(file);
-        try :
-            if (input.read(buffer, 0, buffer.length) != buffer.length):
-                raise Exception("Unexpected end of file");
-        finally:
-            input.close();
-
-    def writeFile(file, buffer):
-        output = FileOutputStream(file);
-        try :
-            output.write(buffer, 0, buffer.length);
-        finally:
-            output.close();
+    def write(self, buffer):
+        self.cartridgeFile.read(map(buffer, chr))
     
+    
+    def readBattery(self):
+        return  map(self.batteryFile.read(),  self.mapToByte)
+    
+    def writeBattery(self, ram):
+        self.batteryFile.write(map(ram, chr))
+        
+        
 # ==============================================================================
 # CARTRIDGE TYPES
 
@@ -268,7 +227,6 @@
     def write(self, address, data):
         pass
 
-
 class MBC1(MBC):
     """
     PyBoy GameBoy (TM) Emulator
@@ -372,9 +330,6 @@
         if self.ramEnable:
             self.ram[address & 0x01FF] = (byte) (data & 0x0F)
 
-
-
-
 class MBC3(MBC):
     """
     PyBoy GameBoy (TM) Emulator
@@ -517,8 +472,6 @@
                 self.clockControl |= 0x80
         self.clockTime = now
 
-
-
 class MBC5(MBC):
     """
     PyBoy GameBoy (TM) Emulator
@@ -567,7 +520,6 @@
         self.reset()
         super.__init__(rom, ram, clockDriver)
 
-
 class HuC3(MBC):
     """
     PyBoy GameBoy (TM) Emulator

Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cartridge.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cartridge.py	(original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/test/test_cartridge.py	Sun Apr 20 10:31:08 2008
@@ -0,0 +1,24 @@
+
+import py
+from pypy.lang.gameboy.cartridge import *
+
+
+ROM_PATH = py.magic.autopath().dirpath().dirpath()+"/rom"
+
+
+# ------------------------------------------------------------------------------
+
+def get_cartridge_managers():
+    pass
+
+def get_cartridge():
+    return Cartridge()
+
+
+
+# ------------------------------------------------------------------------------
+
+
+# STORE MANAGER TEST -----------------------------------------------------------
+def test_store_manager_init(): 
+    cartridge = get_cartridge_managers()



More information about the Pypy-commit mailing list