mirror of
https://github.com/Polprzewodnikowy/SummerCart64.git
synced 2024-11-22 14:09:16 +01:00
[SC64][SW] Added ED style save type autodetection
This commit is contained in:
parent
a8a3e7d57c
commit
9fbff668c7
@ -385,6 +385,25 @@ class SC64:
|
|||||||
if (self.__read_memory(address, len(data)) != data):
|
if (self.__read_memory(address, len(data)) != data):
|
||||||
raise ConnectionException('Flash memory program failure')
|
raise ConnectionException('Flash memory program failure')
|
||||||
|
|
||||||
|
def autodetect_save_type(self, data: bytes) -> Optional[SaveType]:
|
||||||
|
if (len(data) < 0x40):
|
||||||
|
return None
|
||||||
|
if (data[0x3C:0x3E] != b'ED'):
|
||||||
|
return None
|
||||||
|
save = (data[0x3F] >> 4) & 0x0F
|
||||||
|
if (save < 0 or save > 6):
|
||||||
|
return None
|
||||||
|
save_type_mapping = [
|
||||||
|
self.SaveType.NONE,
|
||||||
|
self.SaveType.EEPROM_4K,
|
||||||
|
self.SaveType.EEPROM_16K,
|
||||||
|
self.SaveType.SRAM,
|
||||||
|
self.SaveType.SRAM_BANKED,
|
||||||
|
self.SaveType.FLASHRAM,
|
||||||
|
self.SaveType.SRAM,
|
||||||
|
]
|
||||||
|
return save_type_mapping[save]
|
||||||
|
|
||||||
def reset_state(self) -> None:
|
def reset_state(self) -> None:
|
||||||
self.__link.execute_cmd(cmd=b'R')
|
self.__link.execute_cmd(cmd=b'R')
|
||||||
|
|
||||||
@ -822,6 +841,7 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
sc64 = SC64()
|
sc64 = SC64()
|
||||||
|
autodetected_save_type = None
|
||||||
|
|
||||||
if (args.backup_firmware):
|
if (args.backup_firmware):
|
||||||
with open(args.backup_firmware, 'wb') as f:
|
with open(args.backup_firmware, 'wb') as f:
|
||||||
@ -874,12 +894,15 @@ if __name__ == '__main__':
|
|||||||
if (args.rom):
|
if (args.rom):
|
||||||
with open(args.rom, 'rb') as f:
|
with open(args.rom, 'rb') as f:
|
||||||
print('Uploading ROM... ', end='', flush=True)
|
print('Uploading ROM... ', end='', flush=True)
|
||||||
sc64.upload_rom(f.read(), use_shadow=args.no_shadow)
|
rom_data = f.read()
|
||||||
|
sc64.upload_rom(rom_data, use_shadow=args.no_shadow)
|
||||||
|
autodetected_save_type = sc64.autodetect_save_type(rom_data)
|
||||||
print('done')
|
print('done')
|
||||||
|
|
||||||
if (args.save_type != None):
|
if (args.save_type != None or autodetected_save_type != None):
|
||||||
sc64.set_save_type(args.save_type)
|
save_type = args.save_type if args.save_type != None else autodetected_save_type
|
||||||
print(f'Save type set to [{args.save_type.name}]')
|
sc64.set_save_type(save_type)
|
||||||
|
print(f'Save type set to [{save_type.name}]{" (autodetected)" if autodetected_save_type != None else ""}')
|
||||||
|
|
||||||
if (args.save):
|
if (args.save):
|
||||||
with open(args.save, 'rb') as f:
|
with open(args.save, 'rb') as f:
|
||||||
|
Loading…
Reference in New Issue
Block a user