[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