Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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)