From e04aeebc0a204deec6ac02fa8c1d6a3146a4424d Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Sun, 15 Jan 2023 01:43:34 +0200 Subject: [PATCH] Automatic save/restore --- iOS/GBROMManager.h | 10 ++++++++++ iOS/GBROMManager.m | 45 ++++++++++++++++++++++++++++++++++++++++++ iOS/GBViewController.m | 8 ++++++-- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/iOS/GBROMManager.h b/iOS/GBROMManager.h index cfd6333..09cacfa 100644 --- a/iOS/GBROMManager.h +++ b/iOS/GBROMManager.h @@ -5,5 +5,15 @@ @property (readonly) NSArray *allROMs; @property (nonatomic) NSString *currentROM; + @property (readonly) NSString *romFile; +@property (readonly) NSString *batterySaveFile; +@property (readonly) NSString *autosaveStateFile; +- (NSString *)stateFile:(unsigned)index; + +- (NSString *)romFileForROM:(NSString *)rom; +- (NSString *)batterySaveFileForROM:(NSString *)rom; +- (NSString *)autosaveStateFileForROM:(NSString *)rom; +- (NSString *)stateFile:(unsigned)index forROM:(NSString *)rom; + @end diff --git a/iOS/GBROMManager.m b/iOS/GBROMManager.m index b0b8349..1c8efd7 100644 --- a/iOS/GBROMManager.m +++ b/iOS/GBROMManager.m @@ -54,6 +54,51 @@ return _romFile = [self romFileForDirectory:romDirectory]; } +- (NSString *)romFileForROM:(NSString *)rom +{ + if (rom == _currentROM) { + return self.romFile; + } + NSString *root = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true).firstObject; + NSString *romDirectory = [root stringByAppendingPathComponent:_currentROM]; + return [self romFileForDirectory:romDirectory]; +} + +- (NSString *)auxilaryFileForROM:(NSString *)rom withExtension:(NSString *)extension +{ + return [[[self romFileForROM:rom] stringByDeletingPathExtension] stringByAppendingPathExtension:extension]; +} + +- (NSString *)batterySaveFileForROM:(NSString *)rom +{ + return [self auxilaryFileForROM:rom withExtension:@"sav"]; +} + +- (NSString *)batterySaveFile +{ + return [self batterySaveFileForROM:_currentROM]; +} + +- (NSString *)autosaveStateFileForROM:(NSString *)rom +{ + return [self auxilaryFileForROM:rom withExtension:@"auto"]; +} + +- (NSString *)autosaveStateFile +{ + return [self autosaveStateFileForROM:_currentROM]; +} + +- (NSString *)stateFile:(unsigned)index forROM:(NSString *)rom +{ + return [self auxilaryFileForROM:rom withExtension:[NSString stringWithFormat:@"s%u", index]]; +} + +- (NSString *)stateFile:(unsigned)index +{ + return [self stateFile:index forROM:_currentROM]; +} + - (NSArray *)allROMs { NSMutableArray *ret = [NSMutableArray array]; diff --git a/iOS/GBViewController.m b/iOS/GBViewController.m index e9ef117..f135056 100644 --- a/iOS/GBViewController.m +++ b/iOS/GBViewController.m @@ -130,6 +130,10 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp) if (romManager.romFile) { // Todo: display errors and warnings _romLoaded = GB_load_rom(&_gb, romManager.romFile.fileSystemRepresentation) == 0; + if (_romLoaded) { + GB_load_battery(&_gb, [GBROMManager sharedManager].batterySaveFile.fileSystemRepresentation); + GB_load_state(&_gb, [GBROMManager sharedManager].autosaveStateFile.fileSystemRepresentation); + } } } @@ -238,8 +242,8 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp) [_audioClient stop]; _audioClient = nil; - // Todo - //GB_save_battery(&gb, self.savPath.UTF8String); + GB_save_battery(&_gb, [GBROMManager sharedManager].batterySaveFile.fileSystemRepresentation); + GB_save_state(&_gb, [GBROMManager sharedManager].autosaveStateFile.fileSystemRepresentation); } - (void)start