Exemplo n.º 1
0
def split_region(input, output, regionName, outputNameList):
    sizePerPart = int(
        len(input.regions[regionName].data) / len(outputNameList))
    i = 0
    for outputName in outputNameList:
        output.createFile(
            outputName, getPart(input.regions[regionName].data, i,
                                sizePerPart))
        i = i + 1
Exemplo n.º 2
0
def convert_mslug(input, output):

    # Same ROM for MVS/AES
    # CRC is incorrect for p1, otherwise all CRCs match
    # Shipped with MVS BIOS

    output.createFile(
        "p1.p1",
        getPart(input.regions['P'].data, 1, 1024 * KILOBYTE) +
        getPart(input.regions['P'].data, 0, 1024 * KILOBYTE))

    output.createFile("m1.m1", input.regions['M'].data)

    split_region(input, output, 'V1', ['v1.v1', 'v2.v2'])

    output.createFile("s1.s1", input.regions['S'].data)

    convert_common_c(input, output, 2)
Exemplo n.º 3
0
def convert_turfmast(input, output):

    # Same ROM for MVS/AES
    # CRC is incorrect for v4, otherwise all CRCs match
    # Shipped with MVS BIOS

    # banks are in reverse order
    output.createFile(
        "p1.p1",
        getPart(input.regions['P'].data, 1, 1024 * KILOBYTE) +
        getPart(input.regions['P'].data, 0, 1024 * KILOBYTE))

    output.createFile("m1.m1", input.regions['M'].data)

    split_region(input, output, 'V1', ['v1.v1', 'v2.v2', 'v3.v3', 'v4.v4'])

    output.createFile("s1.s1", input.regions['S'].data)

    convert_common_c(input, output, 1)
Exemplo n.º 4
0
def convert_maglordh(input, output):

    # maglordh: CRC of all files match
    # maglord: CRC of all files match except p1
    # shipped with MVS BIOS

    output.createFile("p1.p1", input.regions['P'].data)

    m = input.regions['M'].data
    output.createFile(
        "m1.m1",
        getPart(m, 0, 64 * KILOBYTE) + getPart(m, 2, 64 * KILOBYTE) +
        getPart(m, 1, 64 * KILOBYTE) + getPart(m, 2, 64 * KILOBYTE))

    split_region(input, output, 'V1', ['v11.v11'])
    split_region(input, output, 'V2', ['v21.v21', 'v22.v22'])

    output.createFile("s1.s1", input.regions['S'].data)

    convert_common_c(input, output, 3)
Exemplo n.º 5
0
def convert_magdrop3(input, output):

    # Same ROM for MVS/AES
    # CRC is incorrect for p1 and v2, otherwise all CRCs match.
    # In p1, there are only a few bytes changed. The differences are around 0x71120.
    # For the VC version, some of the frames of the Tower character's flashing
    # lightning strike animation has been removed.
    # Shipped with AES BIOS

    output.createFile("p1.p1", input.regions['P'].data)

    output.createFile("m1.m1", input.regions['M'].data)

    output.createFile(
        "v1.v1", getPart(input.regions['V1'].data, 0, 4 * 1024 * KILOBYTE))
    output.createFile("v2.v2",
                      getPart(input.regions['V1'].data, 1, 1 * 512 * KILOBYTE))

    output.createFile("s1.s1", input.regions['S'].data)

    convert_common_c(input, output, 2)
Exemplo n.º 6
0
def extract_SHARRIER(ccfArchive, outputFolder):

    # https://github.com/mamedev/mame/blob/master/src/mame/drivers/segahang.cpp

    def convert_roadgfx(roadInput):

        # input = vc version format
        # output = original ROM format

        # this would probably be very similar for Super Hangon which use the same Arcade hardware

        outputHalfLength = int(len(roadInput) / 8)
        outputFullLength = int(outputHalfLength * 2)
        BITS_IN_BYTE = 8

        # real rom has twice as many "rows", but each "row" has 8x bytes as the VC ROM
        returnValue = bytearray(outputFullLength)

        for outputByteOffset in range(0, outputHalfLength):
            inputByteOffset = outputByteOffset * BITS_IN_BYTE
            explodedByte = roadInput[inputByteOffset:inputByteOffset +
                                     BITS_IN_BYTE]

            returnValue[outputByteOffset] = (((explodedByte[0] & 0x1) << 7) |
                                             ((explodedByte[1] & 0x1) << 6) |
                                             ((explodedByte[2] & 0x1) << 5) |
                                             ((explodedByte[3] & 0x1) << 4) |
                                             ((explodedByte[4] & 0x1) << 3) |
                                             ((explodedByte[5] & 0x1) << 2) |
                                             ((explodedByte[6] & 0x1) << 1) |
                                             ((explodedByte[7] & 0x1)))

            returnValue[outputHalfLength + outputByteOffset] = (
                ((explodedByte[0] & 0x2) << 6) | ((explodedByte[1] & 0x2) << 5)
                | ((explodedByte[2] & 0x2) << 4) |
                ((explodedByte[3] & 0x2) << 3) | ((explodedByte[4] & 0x2) << 2)
                | ((explodedByte[5] & 0x2) << 1) | ((explodedByte[6] & 0x2)) |
                ((explodedByte[7] & 0x2) >> 1))

        return returnValue

    moduleFile = ccfArchive.find('sharrier.rso')
    module = rso(moduleFile)

    f = open(os.path.join(outputFolder, 'sharrier.rso'), 'wb')
    moduleFile.seek(0)
    f.write(moduleFile.read())
    f.close()
    moduleFile.seek(0)

    #for export in module.getAllExports():
    #    print(" -- Export " + export)

    # The separate ROM files has been merged, we need to splice them so that MAME can load them.
    # Basically this is doing the reverse of what MAME does when loading the ROMs

    #maincpu = 68000 code
    cpu1 = get_rom_file(module, 'sharrier_rom_cpu1', 0x40000)
    save_rom_file(getStripes(getPart(cpu1, 0, 0x10000), [0, 2]), outputFolder,
                  'epr-7188.ic97')
    save_rom_file(getStripes(getPart(cpu1, 0, 0x10000), [1, 3]), outputFolder,
                  'epr-7184.ic84')
    save_rom_file(getStripes(getPart(cpu1, 1, 0x10000), [0, 2]), outputFolder,
                  'epr-7189.ic98')
    save_rom_file(getStripes(getPart(cpu1, 1, 0x10000), [1, 3]), outputFolder,
                  'epr-7185.ic85')
    save_rom_file(getStripes(getPart(cpu1, 2, 0x10000), [0, 2]), outputFolder,
                  'epr-7190.ic99')
    save_rom_file(getStripes(getPart(cpu1, 2, 0x10000), [1, 3]), outputFolder,
                  'epr-7186.ic86')
    save_rom_file(getStripes(getPart(cpu1, 3, 0x10000), [0, 2]), outputFolder,
                  'epr-7191.ic100')
    save_rom_file(getStripes(getPart(cpu1, 3, 0x10000), [1, 3]), outputFolder,
                  'epr-7187.ic87')

    #subcpu = second 68000 CPU
    cpu2 = get_rom_file(module, 'sharrier_rom_cpu2', 0x10000)
    save_rom_file(getStripes(cpu2, [0, 2]), outputFolder, 'epr-7182.ic54')
    save_rom_file(getStripes(cpu2, [1, 3]), outputFolder, 'epr-7183.ic67')

    #gfx1 = tiles
    # These are 3 bits per pixel. one bit is in each rom.
    # Then the hardware or emulator read from the three separate roms to build every pixel.
    # To speed things up on the Wii, the three roms has been merged into one linear rom.
    # We need to split them up again with getBitStripe
    # Lots of help from MAME source code to figure this out
    gfx1 = get_rom_file(module, 'sharrier_rom_grp1', 0x20000)
    save_rom_file(getBitStripe(gfx1, 0), outputFolder, 'epr-7196.ic31')
    save_rom_file(getBitStripe(gfx1, 1), outputFolder, 'epr-7197.ic46')
    save_rom_file(getBitStripe(gfx1, 3), outputFolder, 'epr-7198.ic60')
    #This has data, not sure what it is though
    #save_rom_file(getBitStripe(gfx1, 2), outputFolder, 'should-be-empty-but-is-not')

    #sprites
    sprites = get_rom_file(module, 'sharrier_rom_grp2', 0x100000)
    save_rom_file(getStripes(getPart(sprites, 0, 0x20000), [3]), outputFolder,
                  'epr-7230.ic36')
    save_rom_file(getStripes(getPart(sprites, 0, 0x20000), [2]), outputFolder,
                  'epr-7222.ic28')
    save_rom_file(getStripes(getPart(sprites, 0, 0x20000), [1]), outputFolder,
                  'epr-7214.ic18')
    save_rom_file(getStripes(getPart(sprites, 0, 0x20000), [0]), outputFolder,
                  'epr-7206.ic8')
    save_rom_file(getStripes(getPart(sprites, 1, 0x20000), [3]), outputFolder,
                  'epr-7229.ic35')
    save_rom_file(getStripes(getPart(sprites, 1, 0x20000), [2]), outputFolder,
                  'epr-7221.ic27')
    save_rom_file(getStripes(getPart(sprites, 1, 0x20000), [1]), outputFolder,
                  'epr-7213.ic17')
    save_rom_file(getStripes(getPart(sprites, 1, 0x20000), [0]), outputFolder,
                  'epr-7205.ic7')
    save_rom_file(getStripes(getPart(sprites, 2, 0x20000), [3]), outputFolder,
                  'epr-7228.ic34')
    save_rom_file(getStripes(getPart(sprites, 2, 0x20000), [2]), outputFolder,
                  'epr-7220.ic26')
    save_rom_file(getStripes(getPart(sprites, 2, 0x20000), [1]), outputFolder,
                  'epr-7212.ic16')
    save_rom_file(getStripes(getPart(sprites, 2, 0x20000), [0]), outputFolder,
                  'epr-7204.ic6')
    save_rom_file(getStripes(getPart(sprites, 3, 0x20000), [3]), outputFolder,
                  'epr-7227.ic33')
    save_rom_file(getStripes(getPart(sprites, 3, 0x20000), [2]), outputFolder,
                  'epr-7219.ic25')
    save_rom_file(getStripes(getPart(sprites, 3, 0x20000), [1]), outputFolder,
                  'epr-7211.ic15')
    save_rom_file(getStripes(getPart(sprites, 3, 0x20000), [0]), outputFolder,
                  'epr-7203.ic5')
    save_rom_file(getStripes(getPart(sprites, 4, 0x20000), [3]), outputFolder,
                  'epr-7226.ic32')
    save_rom_file(getStripes(getPart(sprites, 4, 0x20000), [2]), outputFolder,
                  'epr-7218.ic24')
    save_rom_file(getStripes(getPart(sprites, 4, 0x20000), [1]), outputFolder,
                  'epr-7210.ic14')
    save_rom_file(getStripes(getPart(sprites, 4, 0x20000), [0]), outputFolder,
                  'epr-7202.ic4')
    save_rom_file(getStripes(getPart(sprites, 5, 0x20000), [3]), outputFolder,
                  'epr-7225.ic31')
    save_rom_file(getStripes(getPart(sprites, 5, 0x20000), [2]), outputFolder,
                  'epr-7217.ic23')
    save_rom_file(getStripes(getPart(sprites, 5, 0x20000), [1]), outputFolder,
                  'epr-7209.ic13')
    save_rom_file(getStripes(getPart(sprites, 5, 0x20000), [0]), outputFolder,
                  'epr-7201.ic3')
    save_rom_file(getStripes(getPart(sprites, 6, 0x20000), [3]), outputFolder,
                  'epr-7224.ic30')
    save_rom_file(getStripes(getPart(sprites, 6, 0x20000), [2]), outputFolder,
                  'epr-7216.ic22')
    save_rom_file(getStripes(getPart(sprites, 6, 0x20000), [1]), outputFolder,
                  'epr-7208.ic12')
    save_rom_file(getStripes(getPart(sprites, 6, 0x20000), [0]), outputFolder,
                  'epr-7200.ic2')
    save_rom_file(getStripes(getPart(sprites, 7, 0x20000), [3]), outputFolder,
                  'epr-7223.ic29')
    save_rom_file(getStripes(getPart(sprites, 7, 0x20000), [2]), outputFolder,
                  'epr-7215.ic21')
    save_rom_file(getStripes(getPart(sprites, 7, 0x20000), [1]), outputFolder,
                  'epr-7207.ic11')
    save_rom_file(getStripes(getPart(sprites, 7, 0x20000), [0]), outputFolder,
                  'epr-7199.ic1')

    #gfx3 = road gfx - BROKEN!
    gfx3 = get_rom_file(module, 'sharrier_rom_grp3', 0x20000)
    save_rom_file(convert_roadgfx(gfx3), outputFolder, 'epr-7181.ic2')

    #soundcpu = sound CPU
    soundcpu = get_rom_file(module, 'sharrier_rom_cpu3', 0x008000)
    save_rom_file(getPart(soundcpu, 0, 0x004000), outputFolder,
                  'epr-7234.ic73')
    save_rom_file(getPart(soundcpu, 1, 0x004000), outputFolder,
                  'epr-7233.ic72')

    #pcm = Sega PCM sound data - NOTE: the two roms are stacked in reverse order vs the actual address range
    pcm = get_rom_file(module, 'sharrier_rom_pcm', 0x10000)
    save_rom_file(getPart(pcm, 1, 0x008000), outputFolder, 'epr-7231.ic5')
    save_rom_file(getPart(pcm, 0, 0x008000), outputFolder, 'epr-7232.ic6')

    #sprites:zoom = zoom table - OK
    save_rom_file(get_rom_file(module, 'sharrier_rom_prom', 0x2000),
                  outputFolder, 'epr-6844.ic123')