コード例 #1
0
 def overrideitem(self, rom_bank, address, value):
     if 0x0000 <= address < 0x4000:
         logger.debug(
             "Performing overwrite on address: %s:%s. New value: %s Old value: %s" %
             (hex(rom_bank), hex(address), hex(value), self.rombanks[rom_bank][address])
         )
         self.rombanks[rom_bank][address] = value
     else:
         logger.error("Invalid override address: %s" % hex(address))
コード例 #2
0
    def load_ram(self, f):
        if not self.rambank_initialized:
            logger.warning("Loading RAM is not supported on {}".format(self.carttype))
            return

        for bank in range(self.external_ram_count):
            for byte in range(8 * 1024):
                self.rambanks[bank][byte] = f.read()

        logger.debug("RAM loaded.")
コード例 #3
0
    def save_ram(self, f):
        if not self.rambank_initialized:
            logger.warning("Saving RAM is not supported on {}".format(self.carttype))
            return

        for bank in range(self.external_ram_count):
            for byte in range(8 * 1024):
                f.write(self.rambanks[bank][byte])

        logger.debug("RAM saved.")
コード例 #4
0
 def save_state(self, f):
     logger.debug("Saving state...")
     f.write(STATE_VERSION)
     f.write(self.bootrom_enabled)
     self.cpu.save_state(f)
     self.lcd.save_state(f)
     self.window.save_state(f)
     self.ram.save_state(f)
     self.cartridge.save_state(f)
     f.flush()
     logger.debug("State saved.")
コード例 #5
0
ファイル: base_mbc.py プロジェクト: studyandthink/PyBoy
 def setitem(self, address, value):
     if 0x2000 <= address < 0x4000:
         if value == 0:
             value = 1
         self.rombank_selected = (value & 0b1)
         logger.debug("Switching bank 0x%0.4x, 0x%0.2x" % (address, value))
     elif 0xA000 <= address < 0xC000:
         if self.rambanks is None:
             from . import EXTERNAL_RAM_TABLE
             logger.warning(
                 "Game tries to set value 0x%0.2x at RAM address 0x%0.4x, but "
                 "RAM banks are not initialized. Initializing %d RAM banks as "
                 "precaution" % (value, address, EXTERNAL_RAM_TABLE[0x02]))
             self.init_rambanks(EXTERNAL_RAM_TABLE[0x02])
         self.rambanks[self.rambank_selected][address - 0xA000] = value
     else:
         logger.warning("Unexpected write to 0x%0.4x, value: 0x%0.2x" %
                        (address, value))
コード例 #6
0
    def load_state(self, f):
        logger.debug("Loading state...")
        state_version = f.read()
        if state_version >= 2:
            logger.debug(f"State version: {state_version}")
            # From version 2 and above, this is the version number
            self.bootrom_enabled = f.read()
        else:
            logger.debug(f"State version: 0-1")
            # HACK: The byte wasn't a state version, but the bootrom flag
            self.bootrom_enabled = state_version
        self.cpu.load_state(f, state_version)
        self.lcd.load_state(f, state_version)
        if state_version >= 2:
            self.window.load_state(f, state_version)
        self.ram.load_state(f, state_version)
        self.cartridge.load_state(f, state_version)
        f.flush()
        logger.debug("State loaded.")

        self.window.clearcache = True
        self.window.update_cache(self.lcd)