Ejemplo n.º 1
0
def parse(data):
    
    if not _valid_rom_info(data):
        if len(data) % 16384 != 0:
            # SMD, omit 512B external header and deinterleave first block
            data = data[512:]
            data = _deinterleave_smd(data)    
        else:
            # MD, deinterleave entire ROM
            data = _deinterleave_bytes(data)
            
        if not _valid_rom_info(data):
            raise ValueError

    name = ' '.join(_sub(data, 0x150, 48).split())
    version = _sub(data, 0x182, 12).replace(' ', '')
    rom_start = _unpack(_sub(data, 0x1a0, 4))
    rom_end = _unpack(_sub(data, 0x1a4, 4))
    ram_start = _unpack(_sub(data, 0x1b4, 4))
    ram_end = _unpack(_sub(data, 0x1b8, 4))
    country = _sub(data, 0x1f0, 16).strip()
    return _ROM(name,
                'Genesis',
                rom_size=(rom_end-rom_start+1)/1024,
                ram_size=(ram_end-ram_start+1)/1024,
                country=country,
                version=version)
Ejemplo n.º 2
0
def parse(data):

    if not _valid_rom_info(data):
        if len(data) % 16384 != 0:
            # SMD, omit 512B external header and deinterleave first block
            data = data[512:]
            data = _deinterleave_smd(data)
        else:
            # MD, deinterleave entire ROM
            data = _deinterleave_bytes(data)

        if not _valid_rom_info(data):
            raise ValueError

    name = ' '.join(_sub(data, 0x150, 48).split())
    version = _sub(data, 0x182, 12).replace(' ', '')
    rom_start = _unpack(_sub(data, 0x1a0, 4))
    rom_end = _unpack(_sub(data, 0x1a4, 4))
    ram_start = _unpack(_sub(data, 0x1b4, 4))
    ram_end = _unpack(_sub(data, 0x1b8, 4))
    country = _sub(data, 0x1f0, 16).strip()
    return _ROM(name,
                'Genesis',
                rom_size=(rom_end - rom_start + 1) / 1024,
                ram_size=(ram_end - ram_start + 1) / 1024,
                country=country,
                version=version)
Ejemplo n.º 3
0
def parse(data):
    if _sub(data, 0x0, 4) != 'NES\x1a':
        raise ValueError

    if len(data) % 8192 != 16:
        name = _sub(data, len(data) - 128, 128).replace('\x00', '')
    else:
        name = None

    num_rom_banks = _unpack(_sub(data, 0x4, 1))
    num_vrom_banks = _unpack(_sub(data, 0x5, 1))
    rom_size = 16 * num_rom_banks + 8 * num_vrom_banks
    num_ram_banks = _unpack(_sub(data, 0x8, 1))
    ram_size = 8 * num_ram_banks

    return _ROM(name, 'NES', rom_size=rom_size, ram_size=ram_size)
Ejemplo n.º 4
0
def parse(data):
    if _sub(data, 0x0, 4) != 'NES\x1a':
        raise ValueError

    if len(data) % 8192 != 16:
        name = _sub(data, len(data)-128, 128).replace('\x00', '')
    else:
        name = None

    num_rom_banks = _unpack(_sub(data, 0x4, 1))
    num_vrom_banks = _unpack(_sub(data, 0x5, 1))
    rom_size = 16*num_rom_banks + 8*num_vrom_banks
    num_ram_banks = _unpack(_sub(data, 0x8, 1))
    ram_size = 8*num_ram_banks

    return _ROM(name,
                'NES',
                rom_size=rom_size,
                ram_size=ram_size)
Ejemplo n.º 5
0
def _has_lorom_makeup(data, hdr):
    l_nibble = _unpack(_sub(data, hdr + 0x15, 1)) & 0xf
    return l_nibble % 2 == 0
Ejemplo n.º 6
0
def _checksum_heuristic(data, hdr):
    chksum_cpl = _unpack(_sub(data, hdr + 0x1c, 2))
    chksum = _unpack(_sub(data, hdr + 0x1e, 2))
    return chksum_cpl ^ chksum == 0xffff
Ejemplo n.º 7
0
def _has_lorom_makeup(data, hdr):
    l_nibble = _unpack(_sub(data, hdr+0x15, 1)) & 0xf
    return l_nibble % 2 == 0
Ejemplo n.º 8
0
def _checksum_heuristic(data, hdr):
    chksum_cpl = _unpack(_sub(data, hdr+0x1c, 2))
    chksum = _unpack(_sub(data, hdr+0x1e, 2))
    return chksum_cpl ^ chksum == 0xffff