[pypy-svn] r54874 - pypy/branch/gameboy-emulator/pypy/lang/gameboy
cami at codespeak.net
cami at codespeak.net
Sat May 17 21:50:42 CEST 2008
Author: cami
Date: Sat May 17 21:50:41 2008
New Revision: 54874
Modified:
pypy/branch/gameboy-emulator/pypy/lang/gameboy/cartridge.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/timer.py
Log:
changed MBC1 constructor to support the ramsize directly without strange initialization order
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 Sat May 17 21:50:41 2008
@@ -238,9 +238,16 @@
class MBC(iMemory):
- def __init__(self, rom, ram, clock_driver):
+ def __init__(self, rom, ram, clock_driver,
+ min_rom_bank_size=0, max_rom_bank_size=0,
+ min_ram_bank_size=0, max_ram_bank_size=0):
+ self.min_rom_bank_size = min_rom_bank_size
+ self.max_rom_bank_size = max_rom_bank_size
+ self.min_ram_bank_size = min_ram_bank_size
+ self.max_ram_bank_size = max_ram_bank_size
self.set_rom(rom)
self.set_ram(ram)
+ self.reset()
def reset(self):
self.rom_bank = constants.ROM_BANK_SIZE
@@ -250,10 +257,6 @@
self.ram = []
self.romSize = 0
self.ramSize = 0
- self.min_rom_bank_size = 0
- self.max_rom_bank_size = 0
- self.min_ram_bank_size = 0
- self.max_ram_bank_size = 0
def set_rom(self, buffer):
banks = len(buffer) / constants.ROM_BANK_SIZE
@@ -275,11 +278,10 @@
if address <= 0x3FFF: # 0000-3FFF
return self.rom[address] & 0xFF
elif address <= 0x7FFF:# 4000-7FFF
- print address, self.rom_bank
return self.rom[self.rom_bank + (address & 0x3FFF)] & 0xFF
elif address >= 0xA000 and address <= 0xBFFF and self.ramEnable: # A000-BFFF
- return self.ram[self.ram_bank + (address & 0x1FFF)] & 0xFF
- return 0xFF
+ return self.ram[self.ram_bank + (address & 0x1FFF)] & 0xFF
+ raise Exception("Invalid address")
def write(self, address, data):
pass
@@ -291,12 +293,11 @@
class DefaultMBC(MBC):
def __init__(self, rom, ram, clock_driver):
- self.reset()
- self.min_rom_bank_size = 0
- self.max_rom_bank_size = 0xFFFFFF
- self.min_ram_bank_size = 0
- self.max_ram_bank_size = 0xFFFFFF
- MBC.__init__(self, rom, ram, clock_driver)
+ MBC.__init__(self, rom, ram, clock_driver,
+ min_rom_bank_size=0,
+ max_rom_bank_size=0xFFFFFF,
+ min_ram_bank_size=0,
+ max_ram_bank_size=0xFFFFFF)
#-------------------------------------------------------------------------------
@@ -313,12 +314,11 @@
A000-BFFF RAM Bank 0-3 (8KB)
"""
def __init__(self, rom, ram, clock_driver):
- self.reset()
- self.min_ram_bank_size = 0
- self.max_ram_bank_size = 4
- self.min_rom_bank_size = 2
- self.max_rom_bank_size = 128
- MBC.__init__(self, rom, ram, clock_driver)
+ MBC.__init__(self, rom, ram, clock_driver,
+ min_ram_bank_size=0,
+ max_ram_bank_size=4,
+ min_rom_bank_size=2,
+ max_rom_bank_size=128)
def reset(self):
MBC.reset(self)
@@ -372,12 +372,11 @@
RAM_BANK_SIZE = 512
def __init__(self, rom, ram, clock_driver):
- self.reset()
- self.min_ram_bank_size = constants.RAM_BANK_SIZE
- self.max_ram_bank_size = constants.RAM_BANK_SIZE
- self.min_rom_bank_size = 2
- self.max_rom_bank_size = 16
- MBC.__init__(self, rom, ram, clock_driver)
+ MBC.__init__(self, rom, ram, clock_driver,
+ min_ram_bank_size=constants.RAM_BANK_SIZE,
+ max_ram_bank_size=constants.RAM_BANK_SIZE,
+ min_rom_bank_size=2,
+ max_rom_bank_size=16)
def read(self, address):
@@ -424,30 +423,34 @@
A000-BFFF RAM Bank 0-3 (8KB)
"""
def __init__(self, rom, ram, clock_driver):
- self.reset()
- self.min_ram_bank_size = 0
- self.max_ram_bank_size = 4
- self.min_rom_bank_size = 2
- self.max_rom_bank_size = 128
-
- self.clock = clock_driver
- self.clockLDaysclockLControl = None
-
- MBC.__init__(self, rom, ram, clock_driver)
- self.reset()
+ MBC.__init__(self, rom, ram, clock_driver,
+ min_ram_bank_size=0,
+ max_ram_bank_size=4,
+ min_rom_bank_size=2,
+ max_rom_bank_size=128)
def reset(self):
MBC.reset(self)
- self.clock_time = self.clock.get_time()
- self.clockLatch = self.clock_register = 0
- self.clockSeconds = self.clockMinutes = self.clockHours = self.clockDays = self.clockControl = 0
- self.clockLSeconds = self.clockLMinutes = self.clockLHours = self.clockLDays = self.clockLControl = 0
+ self.clockLDaysclockLControl = None
+ self.clock_time = self.clock.get_time()
+ self.clockLatch = 0
+ self.clock_register = 0
+ self.clockSeconds = 0
+ self.clockMinutes = 0
+ self.clockHours = 0
+ self.clockDays = 0
+ self.clockControl = 0
+ self.clockLSeconds = 0
+ self.clockLMinutes = 0
+ self.clockLHours = 0
+ self.clockLDays = 0
+ self.clockLControl = 0
def read(self, address):
- if (address >= 0xA000 and address <= 0xBFFF): # A000-BFFF
- if (self.ram_bank >= 0):
+ if address >= 0xA000 and address <= 0xBFFF: # A000-BFFF
+ if self.ram_bank >= 0:
return self.ram[self.ram_bank + (address & 0x1FFF)] & 0xFF
else:
return self.read_clock_data(address)
@@ -465,6 +468,7 @@
return self.clockLDays
if self.clock_register == 0x0C:
return self.clockLControl
+ raise Exception("invalid clockregister %i" % self.clock_register)
def write(self, address, data):
if address <= 0x1FFF: # 0000-1FFF
@@ -569,16 +573,16 @@
A000-BFFF RAM Bank 0-15 (8KB)
"""
def __init__(self, rom, ram, clock_driver):
-
- self.reset()
- self.min_ram_bank_size = 0
- self.max_ram_bank_size = 16
- self.min_rom_bank_size = 2
- self.max_rom_bank_size = 512
-
- self.rumble = rumble = True
- MBC.__init__(self, rom, ram, clock_driver)
+ MBC.__init__(self, rom, ram, clock_driver,
+ min_ram_bank_size=0,
+ max_ram_bank_size=16,
+ min_rom_bank_size=2,
+ max_rom_bank_size=512)
+ def reset(self):
+ MBC.reset(self)
+ self.rumble = True
+
def write(self, address, data):
if address <= self.write_ram_enable: # 0000-1FFF
@@ -628,20 +632,11 @@
A000-BFFF RAM Bank 0-15 (8KB)
"""
def __init__(self, rom, ram, clock_driver):
- self.reset()
- self.min_ram_bank_size = 0
- self.max_ram_bank_size = 4
- self.min_rom_bank_size = 2
- self.max_rom_bank_size = 128
- self.clock = clock_driver
- self.clock_register = 0
- self.clock_shift = 0
- self.clock_time = 0
- self.set_rom(rom)
- self.set_ram(ram)
- self.ram_flag = 0
- self.ram_value = 0
- MBC.__init__(self, rom, ram, clock_driver)
+ MBC.__init__(self, rom, ram, clock_driver,
+ min_ram_bank_size=0,
+ max_ram_bank_size=4,
+ min_rom_bank_size=2,
+ max_rom_bank_size=128)
def reset(self):
@@ -662,8 +657,7 @@
elif self.ram_flag == 0x0A or self.ram_flag == 0x00:
if self.ramSize > 0:
return self.ram[self.ram_bank + (address & 0x1FFF)] & 0xFF
- else:
- raise Exception("Invalid Ram Size %i" % self.ramSize)
+ raise Exception("Huc3 read error")
else:
return MBC.read(self, address)
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/timer.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/timer.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/timer.py Sat May 17 21:50:41 2008
@@ -8,6 +8,7 @@
from pypy.lang.gameboy.interrupt import *
from math import ceil
from pypy.lang.gameboy.ram import iMemory
+import time
class Timer(iMemory):
@@ -112,5 +113,5 @@
pass
def get_time(self):
- return System.currentTimeMillis() / 1000
+ return time.time()
More information about the Pypy-commit
mailing list