Beispiel #1
0
def Hook(rom: _io.BufferedReader, space: int, hookAt: int, register=0):
    # Align 2
    if hookAt & 1:
        hookAt -= 1

    rom.seek(hookAt)

    register &= 7

    if hookAt % 4:
        data = bytes([0x01, 0x48 | register, 0x00 | (register << 3), 0x47, 0x0, 0x0])
    else:
        data = bytes([0x00, 0x48 | register, 0x00 | (register << 3), 0x47])

    space += 0x08000001
    data += (space.to_bytes(4, 'little'))
    rom.write(bytes(data))
Beispiel #2
0
def RamRepoint(rom: _io.BufferedReader, offsetTuples: [(int, int)]):
    pointerList = []
    pointerDict = {}
    for tup in offsetTuples:  # Format is (Old Pointer, New Pointer)
        pointer = tup[0]
        pointerList.append(pointer)
        pointerDict[pointer] = tup[1]

    offset = 0
    while offset < 0xFFFFFD:
        rom.seek(offset)
        word = ExtractRamPointer(rom.read(4))
        rom.seek(offset)

        for pointer in pointerList:
            if word == pointer:
                rom.write(bytes(pointerDict[pointer].to_bytes(4, 'little')))
                break

        offset += 4
def FunctionWrap(rom: _io.BufferedReader, space: int, hookAt: int,
                 numParams: int, isReturning: int):
    # Align 2
    if hookAt & 1:
        hookAt -= 1

    rom.seek(hookAt)
    numParams = numParams - 1

    if numParams < 4:
        data = bytes([
            0x10, 0xB5, 0x3, 0x4C, 0x0, 0xF0, 0x3, 0xF8, 0x10, 0xBC,
            (isReturning + 1), 0xBC, (isReturning << 3), 0x47, 0x20, 0x47
        ])
    else:
        k = numParams - 3
        data = bytes([0x10, 0xB5, 0x82, 0xB0])
        for i in range(k + 2):
            data += bytes([i + 2, 0x9C, i, 0x94])
        data += bytes([
            0x0, 0x9C, numParams - 1, 0x94,
            0x1, 0x9C, numParams, 0x94, 0x2, 0xB0, k + 8, 0x4C, 0x0, 0xF0,
            (k << 1) + 13, 0xF8, 0x82, 0xB0, numParams, 0x9C, 0x1, 0x94,
            numParams - 1, 0x9C, 0x0, 0x94
        ])

        for i in reversed(range(k + 2)):
            data += bytes([i, 0x9C, i + 2, 0x94])
        data += bytes([
            0x2, 0xB0, 0x10, 0xBC, isReturning + 1, 0xBC, isReturning << 3,
            0x47, 0x20, 0x47
        ])

    space += 0x08000001
    data += (space.to_bytes(4, 'little'))
    rom.write(bytes(data))
Beispiel #4
0
def Repoint(rom: _io.BufferedReader, space: int, repointAt: int, slideFactor=0):
    rom.seek(repointAt)

    space += (0x08000000 + slideFactor)
    data = (space.to_bytes(4, 'little'))
    rom.write(bytes(data))