[pypy-svn] r54875 - pypy/branch/gameboy-emulator/pypy/lang/gameboy
cami at codespeak.net
cami at codespeak.net
Sat May 17 23:53:21 CEST 2008
Author: cami
Date: Sat May 17 23:53:18 2008
New Revision: 54875
Modified:
pypy/branch/gameboy-emulator/pypy/lang/gameboy/cartridge.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/cpu.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/interrupt.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/joypad.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/ram.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/serial.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/sound.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/timer.py
pypy/branch/gameboy-emulator/pypy/lang/gameboy/video.py
Log:
fixed some missing variables
now lovely translator only produces only blocked blocks, thousends of blocked blocks
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 23:53:18 2008
@@ -79,11 +79,11 @@
raise Exception("Cartridge is truncated")
def create_ram(self):
- ramSize = self.get_ram_size()
+ ram_size = self.get_ram_size()
if self.get_memory_bank_type() >= constants.TYPE_MBC2 \
and self.get_memory_bank_type() <= constants.TYPE_MBC2_BATTERY:
- ramSize = 512
- self.ram = [0xFF]*ramSize
+ ram_size = 512
+ self.ram = [0xFF]*ram_size
def load_battery(self):
if self.cartridge.has_battery():
@@ -103,9 +103,9 @@
return self.rom
def get_rom_size(self):
- romSize = self.rom[constants.CARTRIDGE_ROM_SIZE_ADDRESS] & 0xFF
- if romSize>=0x00 and romSize<=0x07:
- return 32768 << romSize
+ rom_size = self.rom[constants.CARTRIDGE_ROM_SIZE_ADDRESS] & 0xFF
+ if rom_size>=0x00 and rom_size<=0x07:
+ return 32768 << rom_size
return -1
def get_ram_size(self):
@@ -241,29 +241,30 @@
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.clock = clock_driver
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.reset()
self.set_rom(rom)
self.set_ram(ram)
- self.reset()
def reset(self):
self.rom_bank = constants.ROM_BANK_SIZE
self.ram_bank = 0
- self.ramEnable = False
+ self.ram_enable = False
self.rom = []
self.ram = []
- self.romSize = 0
- self.ramSize = 0
+ self.rom_size = 0
+ self.ram_size = 0
def set_rom(self, buffer):
banks = len(buffer) / constants.ROM_BANK_SIZE
if banks < self.min_rom_bank_size or banks > self.max_rom_bank_size:
raise Exception("Invalid constants.ROM size")
self.rom = buffer
- self.romSize = constants.ROM_BANK_SIZE*banks - 1
+ self.rom_size = constants.ROM_BANK_SIZE*banks - 1
def set_ram(self, buffer):
@@ -271,7 +272,7 @@
if banks < self.min_ram_bank_size or banks > self.max_ram_bank_size:
raise Exception("Invalid constants.RAM size")
self.ram = buffer
- self.ramSize = constants.RAM_BANK_SIZE*banks - 1
+ self.ram_size = constants.RAM_BANK_SIZE*banks - 1
def read(self, address):
@@ -279,7 +280,7 @@
return self.rom[address] & 0xFF
elif address <= 0x7FFF:# 4000-7FFF
return self.rom[self.rom_bank + (address & 0x3FFF)] & 0xFF
- elif address >= 0xA000 and address <= 0xBFFF and self.ramEnable: # A000-BFFF
+ elif address >= 0xA000 and address <= 0xBFFF and self.ram_enable: # A000-BFFF
return self.ram[self.ram_bank + (address & 0x1FFF)] & 0xFF
raise Exception("Invalid address")
@@ -333,26 +334,26 @@
self.write_rom_bank_2(address, data)
elif address <= 0x7FFF: # 6000-7FFF
self.memoryModel = data & 0x01
- elif address >= 0xA000 and address <= 0xBFFF and self.ramEnable: # A000-BFFF
+ elif address >= 0xA000 and address <= 0xBFFF and self.ram_enable: # A000-BFFF
self.ram[self.ram_bank + (address & 0x1FFF)] = data
def write_ram_enable(self, address, data):
- if self.ramSize > 0:
- self.ramEnable = ((data & 0x0A) == 0x0A)
+ if self.ram_size > 0:
+ self.ram_enable = ((data & 0x0A) == 0x0A)
def write_rom_bank_1(self, address, data):
if (data & 0x1F) == 0:
data = 1
if self.memoryModel == 0:
- self.rom_bank = ((self.rom_bank & 0x180000) + ((data & 0x1F) << 14)) & self.romSize
+ self.rom_bank = ((self.rom_bank & 0x180000) + ((data & 0x1F) << 14)) & self.rom_size
else:
- self.rom_bank = ((data & 0x1F) << 14) & self.romSize
+ self.rom_bank = ((data & 0x1F) << 14) & self.rom_size
def write_rom_bank_2(self, address, data):
if self.memoryModel == 0:
- self.rom_bank = ((self.rom_bank & 0x07FFFF) + ((data & 0x03) << 19)) & self.romSize
+ self.rom_bank = ((self.rom_bank & 0x07FFFF) + ((data & 0x03) << 19)) & self.rom_size
else:
- self.ram_bank = ((data & 0x03) << 13) & self.ramSize
+ self.ram_bank = ((data & 0x03) << 13) & self.ram_size
#-------------------------------------------------------------------------------
@@ -395,17 +396,17 @@
def write_ram_enable(self, address, data):
if (address & 0x0100) == 0:
- self.ramEnable = ((data & 0x0A) == 0x0A)
+ self.ram_enable = ((data & 0x0A) == 0x0A)
def write_rom_bank(self, address, data):
if (address & 0x0100) == 0:
return
if (data & 0x0F) == 0:
data = 1
- self.rom_bank = ((data & 0x0F) << 14) & self.romSize
+ self.rom_bank = ((data & 0x0F) << 14) & self.rom_size
def write_ram(self, address, data):
- if self.ramEnable:
+ if self.ram_enable:
self.ram[address & 0x01FF] = data & 0x0F
@@ -424,17 +425,17 @@
"""
def __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)
+ 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.clockLDaysclockLControl = None
self.clock_time = self.clock.get_time()
- self.clockLatch = 0
+ self.clock_latch = 0
self.clock_register = 0
self.clockSeconds = 0
self.clockMinutes = 0
@@ -479,36 +480,36 @@
self.write_ram_bank(address, data)
elif address <= 0x7FFF: # 6000-7FFF
self.write_clock_latch(address, data)
- elif address >= 0xA000 and address <= 0xBFFF and self.ramEnable: # A000-BFFF
+ elif address >= 0xA000 and address <= 0xBFFF and self.ram_enable: # A000-BFFF
self.write_clock_data(address, data)
def write_ram_enable(self, address, data):
- if self.ramSize > 0:
- self.ramEnable = ((data & 0x0A) == 0x0A)
+ if self.ram_size > 0:
+ self.ram_enable = ((data & 0x0A) == 0x0A)
def write_rom_bank(self, address, data):
if data == 0:
data = 1
- self.rom_bank = ((data & 0x7F) << 14) & self.romSize
+ self.rom_bank = ((data & 0x7F) << 14) & self.rom_size
def write_ram_bank(self, address, data):
if data >= 0x00 and data <= 0x03:
- self.ram_bank = (data << 13) & self.ramSize
+ self.ram_bank = (data << 13) & self.ram_size
else:
self.ram_bank = -1
self.clock_register = data
def write_clock_latch(self, address, data):
- if self.clockLatch == 0 and data == 1:
- self.latchClock()
+ if self.clock_latch == 0 and data == 1:
+ self.latch_clock()
if data == 0 or data == 1:
- self.clockLatch = data
+ self.clock_latch = data
def write_clock_data(self, address, data):
if self.ram_bank >= 0:
self.ram[self.ram_bank + (address & 0x1FFF)] = data
else:
- self.updateClock()
+ self.update_clock()
if self.clock_register == 0x08:
self.clockSeconds = data
if self.clock_register == 0x09:
@@ -522,15 +523,15 @@
def latch_clock(self):
- self.updateClock()
+ self.update_clock()
self.clockLSeconds = self.clockSeconds
self.clockLMinutes = self.clockMinutes
- self.clockLHours = self.clockHours
- self.clockLDays = self.clockDays & 0xFF
+ self.clockLHours = self.clockHours
+ self.clockLDays = self.clockDays & 0xFF
self.clockLControl = (self.clockControl & 0xFE) | ((self.clockDays >> 8) & 0x01)
- def update_clock():
+ def update_clock(self):
now = self.clock.get_time()
if (self.clockControl & 0x40) == 0:
elapsed = now - self.clock_time
@@ -586,25 +587,25 @@
def write(self, address, data):
if address <= self.write_ram_enable: # 0000-1FFF
- self.writeRAMEnable(address, data)
+ self.write_ram_enable(address, data)
elif address <= 0x2FFF: # 2000-2FFF
- self.rom_bank = ((self.rom_bank & (0x01 << 22)) + ((data & 0xFF) << 14)) & self.romSize
+ self.rom_bank = ((self.rom_bank & (0x01 << 22)) + ((data & 0xFF) << 14)) & self.rom_size
elif address <= 0x3FFF: # 3000-3FFF
- self.rom_bank = ((self.rom_bank & (0xFF << 14)) + ((data & 0x01) << 22)) & self.romSize
+ self.rom_bank = ((self.rom_bank & (0xFF << 14)) + ((data & 0x01) << 22)) & self.rom_size
elif address <= 0x4FFF: # 4000-4FFF
self.write_ram_bank(address, data)
- elif address >= 0xA000 and address <= 0xBFFF and self.ramEnable: # A000-BFFF
+ elif address >= 0xA000 and address <= 0xBFFF and self.ram_enable: # A000-BFFF
self.ram[self.ram_bank + (address & 0x1FFF)] = data
def write_ram_enable(self, address, data):
- if self.ramSize > 0:
- self.ramEnable = ((data & 0x0A) == 0x0A)
+ if self.ram_size > 0:
+ self.ram_enable = ((data & 0x0A) == 0x0A)
def write_ram_bank(self, address, data):
if self.rumble:
- self.ram_bank = ((data & 0x07) << 13) & self.ramSize
+ self.ram_bank = ((data & 0x07) << 13) & self.ram_size
else:
- self.ram_bank = ((data & 0x0F) << 13) & self.ramSize
+ self.ram_bank = ((data & 0x0F) << 13) & self.ram_size
#-------------------------------------------------------------------------------
@@ -649,39 +650,41 @@
def read(self, address):
+ address = int(address)
if address >= 0xA000 and address <= 0xBFFF:# A000-BFFF
if self.ram_flag == 0x0C:
return self.ram_value
elif self.ram_flag == 0x0D:
return 0x01
elif self.ram_flag == 0x0A or self.ram_flag == 0x00:
- if self.ramSize > 0:
+ if self.ram_size > 0:
return self.ram[self.ram_bank + (address & 0x1FFF)] & 0xFF
raise Exception("Huc3 read error")
else:
return MBC.read(self, address)
def write(self, address, data):
+ address = int(address)
if address <= 0x1FFF: # 0000-1FFF
self.ram_flag = data
elif address <= 0x3FFF:# 2000-3FFF
self.write_rom_bank(address, data)
elif address <= 0x5FFF: # 4000-5FFF
- self.ram_bank = ((data & 0x0F) << 13) & self.ramSize
+ self.ram_bank = ((data & 0x0F) << 13) & self.ram_size
elif address >= 0xA000 and address <= 0xBFFF: # A000-BFFF
self.write_ram_flag(address, data)
def write_rom_bank(self, address, data):
if (data & 0x7F) == 0:
data = 1
- self.rom_bank = ((data & 0x7F) << 14) & self.romSize
+ self.rom_bank = ((data & 0x7F) << 14) & self.rom_size
def write_ram_flag(self, address, data):
if self.ram_flag == 0x0B:
self.write_with_ram_flag_0x0B(address, data)
elif self.ram_flag >= 0x0C and self.ram_flag <= 0x0E:
pass
- elif self.ram_flag == 0x0A and self.ramSize > 0:
+ elif self.ram_flag == 0x0A and self.ram_size > 0:
self.ram[self.ram_bank + (address & 0x1FFF)] = data
def write_with_ram_flag_0x0B(self, address, data):
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/cpu.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/cpu.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/cpu.py Sat May 17 23:53:18 2008
@@ -117,6 +117,13 @@
assert isinstance(cpu, CPU)
self.cpu = cpu
self.reset()
+ #added for rpython type inference
+ self.z_flag = False
+ self.n_flag = False
+ self.h_flag = False
+ self.c_flag = False
+ self.p_flag = False
+ self.s_flag = False
def reset(self, keep_z=False, keep_n=False, keep_h=False, keep_c=False,\
keep_p=False, keep_s=False):
@@ -318,6 +325,7 @@
self.rom = banks
def emulate(self, ticks):
+ ticks = int(ticks)
self.cycles += ticks
self.handle_pending_interrupt()
while self.cycles > 0:
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/interrupt.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/interrupt.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/interrupt.py Sat May 17 23:53:18 2008
@@ -74,12 +74,14 @@
self.mask_mapping[mask].set_pending(False)
def write(self, address, data):
+ address = int(address)
if address == constants.IE:
self.set_interrupt_enable(data)
elif address == constants.IF:
self.set_fnterrupt_flag(data)
def read(self, address):
+ address = int(address)
if address == constants.IE:
return self.get_interrupt_enable()
elif address == constants.IF:
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/joypad.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/joypad.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/joypad.py Sat May 17 23:53:18 2008
@@ -26,6 +26,7 @@
return self.cycles
def emulate(self, ticks):
+ ticks = int(ticks)
self.cycles -= ticks
if self.cycles <= 0:
if self.driver.is_raised():
@@ -33,11 +34,13 @@
self.cycles = constants.JOYPAD_CLOCK
def write(self, address, data):
+ address = int(address)
if address == constants.JOYP:
self.joyp = (self.joyp & 0xC) + (data & 0x3)
self.update()
def read(self, address):
+ address = int(address)
if address == constants.JOYP:
return (self.joyp << 4) + self.button_code
return 0xFF
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/ram.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/ram.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/ram.py Sat May 17 23:53:18 2008
@@ -30,20 +30,22 @@
self.h_ram = [0x00]*128
def write(self, address, data):
- if (address >= 0xC000 and address <= 0xFDFF):
+ address = int(address)
+ if address >= 0xC000 and address <= 0xFDFF:
# C000-DFFF Work RAM (8KB)
# E000-FDFF Echo RAM
self.w_ram[address & 0x1FFF] = data
- elif (address >= 0xFF80 and address <= 0xFFFE):
+ elif address >= 0xFF80 and address <= 0xFFFE:
# FF80-FFFE High RAM
self.h_ram[address & 0x7F] = data
def read(self, address):
- if (address >= 0xC000 and address <= 0xFDFF):
+ address = int(address)
+ if address >= 0xC000 and address <= 0xFDFF:
# C000-DFFF Work RAM
# E000-FDFF Echo RAM
return self.w_ram[address & 0x1FFF] & 0xFF
- elif (address >= 0xFF80 and address <= 0xFFFE):
+ elif address >= 0xFF80 and address <= 0xFFFE:
# FF80-FFFE High RAM
return self.h_ram[address & 0x7F] & 0xFF
return 0xFF
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/serial.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/serial.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/serial.py Sat May 17 23:53:18 2008
@@ -23,6 +23,7 @@
return self.cycles
def emulate(self, ticks):
+ ticks = int(ticks)
if (self.sc & 0x81) != 0x81:
return
self.cycles -= ticks
@@ -47,12 +48,14 @@
return self.sc
def write(self, address, data):
+ address = int(address)
if address == constants.SB:
self.set_serial_data(data)
elif address == constants.SC:
self.set_serial_control(data)
def read(self, address):
+ address = int(address)
if address == constants.SB:
return self.get_serial_data()
elif address == constants.SC:
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/sound.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/sound.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/sound.py Sat May 17 23:53:18 2008
@@ -126,14 +126,14 @@
if self.sample_sweep_length > 0:
self.sample_sweep_length-=1
if self.sample_sweep_length <= 0:
- sweepSteps = (self.sample_sweep & 0x07)
- if sweepSteps != 0:
+ sweep_steps = (self.sample_sweep & 0x07)
+ if sweep_steps != 0:
frequency = ((self.audio_playback & 0x07) << 8) + \
self.audio_frequency
if (self.sample_sweep & 0x08) != 0:
- frequency -= frequency >> sweepSteps
+ frequency -= frequency >> sweep_steps
else:
- frequency += frequency >> sweepSteps
+ frequency += frequency >> sweep_steps
if frequency < 2048:
self.audio_1_frequency = self.frequency_table[frequency]
self.audio_frequency = frequency & 0xFF
@@ -146,17 +146,10 @@
((self.sample_sweep >> 4) & 0x07)
def mix_audio(self, buffer, length):
- wave_patter = 0x18
- if (self.audio_length & 0xC0) == 0x00:
- wave_patter = 0x04
- elif (self.audio_length & 0xC0) == 0x40:
- wave_patter = 0x08
- elif (self.audio_length & 0xC0) == 0x80:
- wave_patter = 0x10
- wave_patter << 22
+ wave_pattern = self.get_current_wave_pattern()
for index in range(0, length, 3):
self.audio_1_index += self.audio_1_frequency
- if (self.audio_1_index & (0x1F << 22)) >= wave_patter:
+ if (self.audio_1_index & (0x1F << 22)) >= wave_pattern:
if (self.output_terminal & 0x10) != 0:
buffer[index + 0] -= self.audio_volume
if (self.output_terminal & 0x01) != 0:
@@ -167,6 +160,17 @@
if (self.output_terminal & 0x01) != 0:
buffer[index + 1] += self.audio_volume
+ def get_current_wave_pattern(self):
+ wave_pattern = 0x18
+ if (self.audio_length & 0xC0) == 0x00:
+ wave_pattern = 0x04
+ elif (self.audio_length & 0xC0) == 0x40:
+ wave_pattern = 0x08
+ elif (self.audio_length & 0xC0) == 0x80:
+ wave_pattern = 0x10
+ return wave_pattern << 22
+
+
#SquareWaveGenerator
@@ -233,17 +237,10 @@
(self.audio_envelope & 0x07)
def mix_audio(self, buffer, length):
- wave_patter = 0x18
- if (self.audio_length & 0xC0) == 0x00:
- wave_patter = 0x04
- elif (self.audio_length & 0xC0) == 0x40:
- wave_patter = 0x08
- elif (self.audio_length & 0xC0) == 0x80:
- wave_patter = 0x10
- wave_patter << 22
+ wave_pattern = self.get_current_wave_pattern()
for index in range(0, length):
self.audio_2_index += self.audio_2_frequency
- if ((self.audio_2_index & (0x1F << 22)) >= wave_patter):
+ if ((self.audio_2_index & (0x1F << 22)) >= wave_pattern):
if ((self.output_terminal & 0x20) != 0):
buffer[index + 0] -= self.audio_volume
if ((self.output_terminal & 0x02) != 0):
@@ -254,7 +251,15 @@
if ((self.output_terminal & 0x02) != 0):
buffer[index + 1] += self.audio_volume
-
+ def get_current_wave_pattern(self):
+ wave_pattern = 0x18
+ if (self.audio_length & 0xC0) == 0x00:
+ wave_pattern = 0x04
+ elif (self.audio_length & 0xC0) == 0x40:
+ wave_pattern = 0x08
+ elif (self.audio_length & 0xC0) == 0x80:
+ wave_pattern = 0x10
+ return wave_pattern << 22
@@ -321,13 +326,7 @@
self.output_enable &= ~0x04
def mix_audio(self, buffer, length):
- wave_patter = 2
- if (self.audio_level & 0x60) == 0x00:
- wave_patter = 8
- elif (self.audio_level & 0x60) == 0x40:
- wave_patter = 0
- elif (self.audio_level & 0x60) == 0x80:
- wave_patter = 1
+ wave_pattern = self.get_current_wave_pattern()
for index in range(0, length, 2):
self.audio_3_index += self.audio_3_frequency
sample = self.audio_wave_pattern[(self.audio_3_index >> 23) & 0x0F]
@@ -335,15 +334,22 @@
sample = (sample >> 0) & 0x0F
else:
sample = (sample >> 4) & 0x0F
-
- sample = ((sample - 8) << 1) >> level
-
+ sample = int(((sample - 8) << 1) >> self.audio_level)
if (self.output_terminal & 0x40) != 0:
buffer[index + 0] += sample
if (self.output_terminal & 0x04) != 0:
buffer[index + 1] += sample
-
+ def get_current_wave_pattern(self):
+ wave_pattern = 2
+ if (self.audio_level & 0x60) == 0x00:
+ wave_pattern = 8
+ elif (self.audio_level & 0x60) == 0x40:
+ wave_pattern = 0
+ elif (self.audio_level & 0x60) == 0x80:
+ wave_pattern = 1
+ return wave_pattern
+
class NoiseGenerator(Channel):
@@ -469,7 +475,7 @@
def mix_audio(self, buffer, length):
for index in range(0, length, 2):
self.audio_4_index += self.audio_4_frequency
- polynomial
+ #polynomial
if (self.audio_polynomial & 0x08) != 0:
# 7 steps
self.audio_4_index &= 0x7FFFFF
@@ -585,10 +591,11 @@
return self.cycles
def emulate(self, ticks):
+ ticks = int(ticks)
self.cycles -= ticks
while (self.cycles <= 0):
self.update_audio()
- if self.driver.isEnabled():
+ if self.driver.is_enabled():
self.mix_down_audio()
self.cycles += constants.GAMEBOY_CLOCK / constants.SOUND_CLOCK
@@ -600,6 +607,7 @@
self.frames %= constants.SOUND_CLOCK
def read(self, address):
+ address = int(address)
if address==constants.NR10:
return self.channel1.get_audio_sweep()
elif address == constants.NR11:
@@ -653,6 +661,7 @@
return 0xFF
def write(self, address, data):
+ address = int(address)
if address==constants.NR10:
self.channel1.set_audio_sweep(data)
elif address == constants.NR11:
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 23:53:18 2008
@@ -19,29 +19,34 @@
self.reset()
def reset(self):
- self.div = 0
+ self.div = 0
self.divider_cycles = constants.DIV_CLOCK
- self.tima = self.tma = self.tac = 0x00
- self.timer_cycles = self.timer_clock = constants.TIMER_CLOCK[0]
+ self.tima = 0
+ self.tma = 0
+ self.tac = 0x00
+ self.timer_cycles = constants.TIMER_CLOCK[0]
+ self.timer_clock = constants.TIMER_CLOCK[0]
def write(self, address, data):
- if address==constants.DIV:
+ address = int(address)
+ if address == constants.DIV:
self.set_divider(data)
- elif address==constants.TIMA:
+ elif address == constants.TIMA:
self.set_timer_counter(data)
- elif address==constants.TMA:
+ elif address == constants.TMA:
self.set_timer_modulo(data)
- elif address==constants.TAC:
+ elif address == constants.TAC:
self.set_timer_control(data)
def read(self, address):
- if address==constants.DIV:
+ address = int(address)
+ if address == constants.DIV:
return self.get_divider()
- elif address==constants.TIMA:
+ elif address == constants.TIMA:
return self.get_timer_counter()
- elif address==constants.TMA:
+ elif address == constants.TMA:
return self.get_timer_modulo()
- elif address==constants.TAC:
+ elif address == constants.TAC:
return self.get_timer_control()
return 0xFF
@@ -67,7 +72,7 @@
return 0xF8 | self.tac
def set_timer_control(self, data):
- if ((self.tac & 0x03) != (data & 0x03)):
+ if (self.tac & 0x03) != (data & 0x03):
self.timer_clock = self.timer_cycles = constants.TIMER_CLOCK[data & 0x03]
self.tac = data
@@ -77,10 +82,12 @@
return self.divider_cycles
def emulate(self, ticks):
+ ticks = int(ticks)
self.emulate_divider(ticks)
self.emulate_timer(ticks)
def emulate_divider(self, ticks):
+ ticks = int(ticks)
self.divider_cycles -= ticks
if self.divider_cycles > 0:
return
@@ -89,6 +96,7 @@
self.divider_cycles += constants.DIV_CLOCK*count
def emulate_timer(self, ticks):
+ ticks = int(ticks)
if (self.tac & 0x04) == 0:
return
self.timer_cycles -= ticks
Modified: pypy/branch/gameboy-emulator/pypy/lang/gameboy/video.py
==============================================================================
--- pypy/branch/gameboy-emulator/pypy/lang/gameboy/video.py (original)
+++ pypy/branch/gameboy-emulator/pypy/lang/gameboy/video.py Sat May 17 23:53:18 2008
@@ -29,35 +29,37 @@
self.frame_skip = frame_skip
def reset(self):
- self.cycles = constants.MODE_2_TICKS
- self.control = 0x91
- self.stat = 2
- self.line_y = 0
+ self.cycles = constants.MODE_2_TICKS
+ self.control = 0x91
+ self.stat = 2
+ self.line_y = 0
self.line_y_compare = 0
- self.dma = 0xFF
- self.scroll_y = 0
- self.scroll_x = 0
- self.window_y = self.wline_y = 0
- self.window_x = 0
+ self.dma = 0xFF
+ self.scroll_y = 0
+ self.scroll_x = 0
+ self.window_y = self.wline_y = 0
+ self.window_x = 0
self.background_palette = 0xFC
- self.object_palette_0 = self.object_palette_1 = 0xFF
+ self.object_palette_0 = 0xFF
+ self.object_palette_1 = 0xFF
- self.transfer = True
- self.display = True
- self.vblank = True
- self.dirty = True
-
- self.vram = [0]*constants.VRAM_SIZE
- self.oam = [0]*constants.OAM_SIZE
-
- self.line = [0]* (8+160+8)
- self.objects = [0] * constants.OBJECTS_PER_LINE
- self.palette = [0] * 1024
+ self.transfer = True
+ self.display = True
+ self.vblank = True
+ self.dirty = True
+
+ self.vram = [0]*constants.VRAM_SIZE
+ self.oam = [0]*constants.OAM_SIZE
+
+ self.line = [0]* (8+160+8)
+ self.objects = [0] * constants.OBJECTS_PER_LINE
+ self.palette = [0] * 1024
- self.frames = 0
+ self.frames = 0
self.frame_skip = 0
def write(self, address, data):
+ address = int(address)
# assert data >= 0x00 and data <= 0xFF
if address == constants.LCDC :
self.set_control(data)
@@ -96,6 +98,7 @@
self.vram[address - constants.VRAM_ADDR] = data & 0xFF
def read(self, address):
+ address = int(address)
if address == constants.LCDC:
return self.get_control()
elif address == constants.STAT:
@@ -136,6 +139,7 @@
return self.cycles
def emulate(self, ticks):
+ ticks = int(ticks)
if (self.control & 0x80) != 0:
self.cycles -= ticks
self.consume_cycles()
@@ -307,7 +311,7 @@
def emulate_hblank_part_2(self):
if self.display:
- self.drawFrame()
+ self.draw_frame()
self.frames += 1
if self.frames >= self.frame_skip:
self.display = True
More information about the Pypy-commit
mailing list