SameBoy | Accurate GB/GBC emulator |
| download: https://git.y1.nz/archives/sameboy.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit e04aeebc0a204deec6ac02fa8c1d6a3146a4424d parent 1c1d6bec78d040b840485b39ba61859527c266f0 Author: Lior Halphon <LIJI32@gmail.com> Date: Sun, 15 Jan 2023 01:43:34 +0200 Automatic save/restore Diffstat:
| M | iOS/GBROMManager.h | 10 | ++++++++++ |
| M | iOS/GBROMManager.m | 45 | +++++++++++++++++++++++++++++++++++++++++++++ |
| M | iOS/GBViewController.m | 8 | ++++++-- |
3 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/iOS/GBROMManager.h b/iOS/GBROMManager.h @@ -5,5 +5,15 @@ @property (readonly) NSArray<NSString *> *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 @@ -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<NSString *> *)allROMs { NSMutableArray<NSString *> *ret = [NSMutableArray array]; diff --git 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
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.