shithub: pokecrystal

ref: 449bda272ae8f85a7a2a23fd1e1b80bcf4157245
dir: /extras/pointers.py/

View raw version
# -*- coding: utf-8 -*-
"""
Various functions related to pointer and address math. Mostly to avoid
depedency loops.
"""

def calculate_bank(address):
    """you are too lazy to divide on your own?"""
    if type(address) == str:
        address = int(address, 16)
    #if 0x4000 <= address <= 0x7FFF:
    #    raise Exception, "bank 1 does not exist"
    return int(address) / 0x4000

def calculate_pointer(short_pointer, bank=None):
    """calculates the full address given a 4-byte pointer and bank byte"""
    short_pointer = int(short_pointer)
    if 0x4000 <= short_pointer <= 0x7fff:
        short_pointer -= 0x4000
        bank = int(bank)
    else:
        bank = 0
    pointer = short_pointer + (bank * 0x4000)
    return pointer