import sys from logger import Logger from rominfo.nintendo_ds import nds_get_info from rominfo.gameboy_advance import gba_get_info from rominfo.super_famicom import sfc_get_info from rominfo.nintendo_switch import switch_get_info logger = Logger('RomInfo') if __name__ == '__main__': if len(sys.argv) == 2: if sys.argv[1].endswith('.nds') or sys.argv[1].endswith('.ids'): with open(sys.argv[1], mode='rb') as nds: logger.info('Title : {}'.format(nds_get_info('title', nds))) logger.info('Game code : {}'.format(nds_get_info('gamecode', nds))) logger.info('Maker code : {}'.format(nds_get_info('makercode', nds))) logger.info('Unit code : {}'.format(nds_get_info('unitcode', nds))) logger.info('Encryption seed : {}'.format(nds_get_info('encryptionseed', nds))) logger.info('Device capacity : {}'.format(nds_get_info('devicecapacity', nds))) if 'DSi ' in nds_get_info('unitcode', nds): logger.info('Game revision : {} (DSi only)'.format(nds_get_info('gamerevision', nds))) logger.info('Game region : {}'.format(nds_get_info('region', nds))) if sys.argv[1].endswith('.gba'): with open(sys.argv[1], mode='rb') as gba: logger.info('Logo : {}'.format(gba_get_info('nintendologo', gba))) logger.info('Title : {}'.format(gba_get_info('title', gba))) logger.info('Game code : {}'.format(gba_get_info('gamecode', gba))) logger.info('Maker code : {}'.format(gba_get_info('makercode', gba))) logger.info('Software version : {}'.format(gba_get_info('softwareversion', gba))) logger.info('Complement check : {}'.format(gba_get_info('complement', gba))) if sys.argv[1].endswith('.sfc') or sys.argv[1].endswith('.smc'): with open(sys.argv[1], mode='rb') as sfc: logger.info('Title : {}'.format(sfc_get_info('title', sfc))) if sys.argv[1].endswith('.xci'): with open(sys.argv[1], mode='rb') as xci: pass # logger.info('Title : {}'.format(switch_get_info('title', xci))) # logger.info('Capacity : {}'.format(switch_get_info('capacity', xci))) # logger.info('Magic : {}'.format(switch_get_info('magic', xci))) # Always returns b'HEAD' else: logger.error('No ROM specified. App requires one argument.') # Info taken from: # https://dsibrew.org/wiki/DSi_cartridge_header # https://scenegate.github.io/Ekona/specs/cartridge/header.html # https://problemkaputt.de/gbatek-ds-cartridge-header.htm # https://gist.github.com/pleonex/6265017