diff --git a/main.py b/main.py index 2eec0c0..629c8d5 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,8 @@ 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') @@ -28,6 +30,18 @@ if __name__ == '__main__': 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.') diff --git a/rominfo/nintendo_switch.py b/rominfo/nintendo_switch.py new file mode 100644 index 0000000..0e88511 --- /dev/null +++ b/rominfo/nintendo_switch.py @@ -0,0 +1,34 @@ +from typing import BinaryIO + + +# TODO: Implement hactool to fetch more XCI info + +def switch_get_info(opt: str, inf: BinaryIO): + match opt.lower(): + case 'title': + inf.seek(0x1000) + return inf.read(0x100) + case 'capacity': + inf.seek(0x10D) + return _get_rom_size(inf.read(0x1)) + case 'magic': + inf.seek(0x100) + return inf.read(0x4) + + +def _get_rom_size(size): + match size: + case b'\xfa': + return '1 GB ({})'.format(size) + case b'\xf8': + return '2 GB ({})'.format(size) + case b'\xf0': + return '4 GB ({})'.format(size) + case b'\xe0': + return '8 GB ({})'.format(size) + case b'\xe1': + return '16 GB ({})'.format(size) + case b'\xe2': + return '32 GB ({})'.format(size) + case _: + return size diff --git a/rominfo/super_famicom.py b/rominfo/super_famicom.py new file mode 100644 index 0000000..a324667 --- /dev/null +++ b/rominfo/super_famicom.py @@ -0,0 +1,10 @@ +from typing import BinaryIO + + +def sfc_get_info(opt: str, inf: BinaryIO): + match opt: + case 'title': + inf.seek(4016) + return inf.read(2) + case _: + return 'Unknown'