[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