# coding: utf-8 import sys def int16(x): return int(x, 16) def new_gbaddr(*args): if len(args) > 1: # bank:address to offset bank, address = map(int16, args) return bank * 0x4000 + address % 0x4000 else: # offset to bank:address address = int16(*args) bank = address / 0x4000 return (bank, address % 0x4000 + 0x4000 * bool(bank)) def gbaddr(argument): if type(argument) == tuple: # (bank, addr) -> address bank = int(argument[0],16) address = int(argument[1],16) return bank*0x4000 + address%0x4000 if address >= 0x4000 else address else: # address -> (bank, addr) address = int(argument,16) return (address/0x4000, (address&0x3FFF) + (0x4000 if address >= 0x4000 else 0)) def string_gbaddr(text): string = text.split(':') if len(string) == 1: (bank, address) = gbaddr('0x%s'%string[0]) return '%x:%0.4x' % (bank, address) else: address = gbaddr(('0x%s'%string[0], '0x%s'%string[1])) return '%x' % address def gbaddr_int(argument): return gbaddr( tuple(argument.split(':')) ) if ':' in argument else int(argument,16) if __name__ == '__main__': print string_gbaddr(sys.argv[1])