def read_files(self): """Reads files.""" self.roms = [] files = self.get_files() num_files = len(files) for filenum, filename in enumerate(files): fullpath = os.path.join(self.rom_path, filename) try: archive = Archive(fullpath) for fname in archive.namelist: rom_header = m64p_rom_header() ctypes.memmove( ctypes.byref(rom_header), archive.read(fname, ctypes.sizeof(rom_header)), ctypes.sizeof(rom_header)) rom_settings = self.parent.core.get_rom_settings( sl(rom_header.CRC1), sl(rom_header.CRC2)) if rom_settings: crc = "%X%X" % (sl(rom_header.CRC1), sl(rom_header.CRC2)) self.roms.append((crc, rom_settings.goodname, fullpath, fname)) archive.close() except Exception, err: log.warn(str(err)) continue percent = float(filenum) / float(num_files) * 100 self.parent.progressBar.emit(SIGNAL("valueChanged(int)"), percent)
def read_files(self): """Reads files.""" self.roms = [] files = self.get_files() num_files = len(files) for filenum, filename in enumerate(files): fullpath = os.path.join(self.rom_path, filename) try: archive = Archive(fullpath) for fname in archive.namelist: rom_header = m64p_rom_header() ctypes.memmove( ctypes.byref(rom_header), archive.read(fname, ctypes.sizeof(rom_header)), ctypes.sizeof(rom_header)) rom_settings = self.parent.core.get_rom_settings( sl(rom_header.CRC1), sl(rom_header.CRC2)) if rom_settings: crc = "%X%X" % (sl(rom_header.CRC1), sl( rom_header.CRC2)) self.roms.append( (crc, rom_settings.goodname, fullpath, fname)) archive.close() except Exception, err: log.warn(str(err)) continue percent = float(filenum) / float(num_files) * 100 self.parent.progressBar.emit(SIGNAL("valueChanged(int)"), percent)
def get_rom_crc(self, archive, fname): rom_header = m64p_rom_header() ctypes.memmove( ctypes.byref(rom_header), archive.read(fname, ctypes.sizeof(rom_header)), ctypes.sizeof(rom_header)) crc1_pre = sl(rom_header.CRC1) crc2_pre = sl(rom_header.CRC2) regs = 0 regs |= rom_header.init_PI_BSB_DOM1_LAT_REG << 24 regs |= rom_header.init_PI_BSB_DOM1_PGS_REG << 16 regs |= rom_header.init_PI_BSB_DOM1_PWD_REG << 8 regs |= rom_header.init_PI_BSB_DOM1_PGS_REG2 if regs == 0x80371240: # native *.z64 crc1 = crc1_pre crc2 = crc2_pre elif regs == 0x37804012: # byteswapped [BADC] *.v64 crc1 = 0 crc1 |= ((crc1_pre >> 0) & 0xff) << 8 crc1 |= ((crc1_pre >> 8) & 0xff) << 0 crc1 |= ((crc1_pre >> 16) & 0xff) << 24 crc1 |= ((crc1_pre >> 24) & 0xff) << 16 crc2 = 0 crc2 |= ((crc2_pre >> 0) & 0xff) << 8 crc2 |= ((crc2_pre >> 8) & 0xff) << 0 crc2 |= ((crc2_pre >> 16) & 0xff) << 24 crc2 |= ((crc2_pre >> 24) & 0xff) << 16 elif regs == 0x40123780: # wordswapped [DCBA] *.n64 crc1 = 0 crc1 |= ((crc1_pre >> 0) & 0xff) << 24 crc1 |= ((crc1_pre >> 8) & 0xff) << 16 crc1 |= ((crc1_pre >> 16) & 0xff) << 8 crc1 |= ((crc1_pre >> 24) & 0xff) << 0 crc2 = 0 crc2 |= ((crc2_pre >> 0) & 0xff) << 24 crc2 |= ((crc2_pre >> 8) & 0xff) << 16 crc2 |= ((crc2_pre >> 16) & 0xff) << 8 crc2 |= ((crc2_pre >> 24) & 0xff) << 0 else: return None return (crc1, crc2)