From 6537ca2257aa1a03af2dc89e2ceadbbb7dcc4737 Mon Sep 17 00:00:00 2001 From: Tom Yaxley Date: Wed, 3 Nov 2021 11:36:57 +1100 Subject: [PATCH 1/4] Update sameboy to 0.14.7 --- .../SameBoy/.github/actions/sanity_tests.sh | 12 +- .../SameBoy/.github/workflows/sanity.yml | 4 +- thirdparty/SameBoy/BESS.md | 2 +- thirdparty/SameBoy/BootROMs/cgb_boot.asm | 24 +- thirdparty/SameBoy/Cocoa/AppDelegate.h | 13 +- thirdparty/SameBoy/Cocoa/AppDelegate.m | 313 ++++- thirdparty/SameBoy/Cocoa/Document.h | 4 +- thirdparty/SameBoy/Cocoa/Document.m | 243 +++- thirdparty/SameBoy/Cocoa/Document.xib | 11 +- thirdparty/SameBoy/Cocoa/GBAudioClient.m | 6 +- thirdparty/SameBoy/Cocoa/GBBorderView.m | 4 +- .../SameBoy/Cocoa/GBCheatTextFieldCell.m | 2 +- .../SameBoy/Cocoa/GBCheatWindowController.m | 4 +- thirdparty/SameBoy/Cocoa/GBColorCell.m | 7 +- thirdparty/SameBoy/Cocoa/GBOSDView.h | 6 + thirdparty/SameBoy/Cocoa/GBOSDView.m | 104 ++ thirdparty/SameBoy/Cocoa/GBOpenGLView.m | 2 +- .../SameBoy/Cocoa/GBPreferencesWindow.h | 5 +- .../SameBoy/Cocoa/GBPreferencesWindow.m | 144 ++- thirdparty/SameBoy/Cocoa/GBSplitView.m | 2 +- .../SameBoy/Cocoa/GBTerminalTextFieldCell.m | 4 +- thirdparty/SameBoy/Cocoa/GBView.h | 5 +- thirdparty/SameBoy/Cocoa/GBView.m | 62 +- thirdparty/SameBoy/Cocoa/GBViewGL.m | 6 +- thirdparty/SameBoy/Cocoa/GBViewMetal.m | 25 +- thirdparty/SameBoy/Cocoa/GBVisualizerView.h | 8 - thirdparty/SameBoy/Cocoa/GBVisualizerView.m | 8 - thirdparty/SameBoy/Cocoa/GBWarningPopover.m | 4 +- thirdparty/SameBoy/Cocoa/MainMenu.xib | 17 + thirdparty/SameBoy/Cocoa/Preferences.xib | 297 +++-- thirdparty/SameBoy/Cocoa/UpdateWindow.xib | 139 +++ thirdparty/SameBoy/Core/apu.c | 105 +- thirdparty/SameBoy/Core/apu.h | 8 +- thirdparty/SameBoy/Core/debugger.c | 111 +- thirdparty/SameBoy/Core/display.c | 53 +- thirdparty/SameBoy/Core/display.h | 1 + thirdparty/SameBoy/Core/gb.c | 219 +++- thirdparty/SameBoy/Core/gb.h | 23 +- thirdparty/SameBoy/Core/joypad.c | 3 +- thirdparty/SameBoy/Core/mbc.c | 1 + thirdparty/SameBoy/Core/memory.c | 298 +++-- thirdparty/SameBoy/Core/memory.h | 1 - thirdparty/SameBoy/Core/save_state.c | 89 +- thirdparty/SameBoy/Core/save_state.h | 4 +- thirdparty/SameBoy/Core/sgb.c | 65 +- thirdparty/SameBoy/Core/sgb.h | 2 +- thirdparty/SameBoy/Core/sm83_cpu.c | 672 +++++------ thirdparty/SameBoy/Core/timing.c | 38 +- .../SameBoy/FreeDesktop/sameboy.desktop | 4 +- .../JoyKit/ControllerConfiguration.inc | 52 +- thirdparty/SameBoy/JoyKit/JOYAxis.h | 7 + thirdparty/SameBoy/JoyKit/JOYAxis.m | 45 +- thirdparty/SameBoy/JoyKit/JOYButton.h | 10 + thirdparty/SameBoy/JoyKit/JOYButton.m | 8 +- thirdparty/SameBoy/JoyKit/JOYController.h | 2 +- thirdparty/SameBoy/JoyKit/JOYController.m | 225 +++- thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m | 3 +- thirdparty/SameBoy/JoyKit/JOYHat.m | 2 + thirdparty/SameBoy/Makefile | 9 +- thirdparty/SameBoy/OpenDialog/cocoa.m | 6 + thirdparty/SameBoy/QuickLook/generator.m | 4 +- thirdparty/SameBoy/SDL/console.c | 1020 +++++++++++++++++ thirdparty/SameBoy/SDL/console.h | 49 + thirdparty/SameBoy/SDL/gui.c | 122 +- thirdparty/SameBoy/SDL/gui.h | 11 +- thirdparty/SameBoy/SDL/main.c | 254 +++- thirdparty/SameBoy/SDL/shader.c | 4 + thirdparty/SameBoy/Tester/main.c | 80 +- thirdparty/SameBoy/Windows/pthread.h | 86 ++ thirdparty/SameBoy/Windows/unistd.h | 1 + thirdparty/SameBoy/libretro/Makefile | 2 +- thirdparty/SameBoy/libretro/jni/Android.mk | 2 +- thirdparty/SameBoy/libretro/libretro.c | 603 ++++++---- thirdparty/SameBoy/libretro/libretro.h | 482 +++++++- .../libretro/libretro_core_options.inc | 679 +++++++++++ thirdparty/SameBoy/libretro/retro_inline.h | 39 + thirdparty/SameBoy/version.mk | 2 +- 77 files changed, 5679 insertions(+), 1314 deletions(-) create mode 100644 thirdparty/SameBoy/Cocoa/GBOSDView.h create mode 100644 thirdparty/SameBoy/Cocoa/GBOSDView.m create mode 100644 thirdparty/SameBoy/Cocoa/UpdateWindow.xib create mode 100644 thirdparty/SameBoy/SDL/console.c create mode 100644 thirdparty/SameBoy/SDL/console.h create mode 100644 thirdparty/SameBoy/Windows/pthread.h create mode 100644 thirdparty/SameBoy/libretro/libretro_core_options.inc create mode 100644 thirdparty/SameBoy/libretro/retro_inline.h diff --git a/thirdparty/SameBoy/.github/actions/sanity_tests.sh b/thirdparty/SameBoy/.github/actions/sanity_tests.sh index 8984b264e..13b5e39b1 100755 --- a/thirdparty/SameBoy/.github/actions/sanity_tests.sh +++ b/thirdparty/SameBoy/.github/actions/sanity_tests.sh @@ -1,10 +1,10 @@ set -e ./build/bin/tester/sameboy_tester --jobs 5 \ - --length 40 .github/actions/cgb_sound.gb \ + --length 45 .github/actions/cgb_sound.gb \ --length 10 .github/actions/cgb-acid2.gbc \ --length 10 .github/actions/dmg-acid2.gb \ ---dmg --length 40 .github/actions/dmg_sound-2.gb \ +--dmg --length 45 .github/actions/dmg_sound-2.gb \ --dmg --length 20 .github/actions/oam_bug-2.gb mv .github/actions/dmg{,-mode}-acid2.bmp @@ -15,18 +15,18 @@ mv .github/actions/dmg{,-mode}-acid2.bmp set +e FAILED_TESTS=` -shasum .github/actions/*.bmp | grep -q -E -v \(\ -44ce0c7d49254df0637849c9155080ac7dc3ef3d\ \ .github/actions/cgb-acid2.bmp\|\ +shasum .github/actions/*.bmp | grep -E -v \(\ +5283564df0cf5bb78a7a90aff026c1a4692fd39e\ \ .github/actions/cgb-acid2.bmp\|\ dbcc438dcea13b5d1b80c5cd06bda2592cc5d9e0\ \ .github/actions/cgb_sound.bmp\|\ 0caadf9634e40247ae9c15ff71992e8f77bbf89e\ \ .github/actions/dmg-acid2.bmp\|\ -c50daed36c57a8170ff362042694786676350997\ \ .github/actions/dmg-mode-acid2.bmp\|\ +a732077f98f43d9231453b1764d9f797a836924d\ \ .github/actions/dmg-mode-acid2.bmp\|\ c9e944b7e01078bdeba1819bc2fa9372b111f52d\ \ .github/actions/dmg_sound-2.bmp\|\ f0172cc91867d3343fbd113a2bb98100074be0de\ \ .github/actions/oam_bug-2.bmp\ \)` if [ -n "$FAILED_TESTS" ] ; then echo "Failed the following tests:" - echo $FAILED_TESTS | tr " " "\n" | grep -q -o -E "[^/]+\.bmp" | sed s/.bmp// | sort + echo $FAILED_TESTS | tr " " "\n" | grep -o -E "[^/]+\.bmp" | sed s/.bmp// | sort exit 1 fi diff --git a/thirdparty/SameBoy/.github/workflows/sanity.yml b/thirdparty/SameBoy/.github/workflows/sanity.yml index f460931b3..ac3732397 100644 --- a/thirdparty/SameBoy/.github/workflows/sanity.yml +++ b/thirdparty/SameBoy/.github/workflows/sanity.yml @@ -6,7 +6,7 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-latest, ubuntu-latest, ubuntu-16.04] + os: [macos-latest, ubuntu-latest, ubuntu-18.04] cc: [gcc, clang] include: - os: macos-latest @@ -33,4 +33,4 @@ jobs: uses: actions/upload-artifact@v1 with: name: sameboy-canary-${{ matrix.os }}-${{ matrix.cc }} - path: build/bin \ No newline at end of file + path: build/bin diff --git a/thirdparty/SameBoy/BESS.md b/thirdparty/SameBoy/BESS.md index b4d96247b..e040d903b 100644 --- a/thirdparty/SameBoy/BESS.md +++ b/thirdparty/SameBoy/BESS.md @@ -26,7 +26,7 @@ BESS uses a block format where each block contains the following header: | 0 | A four-letter ASCII identifier | | 4 | Length of the block, excluding header | -Every block is followed by another blocked, until the END block is reached. If an implementation encounters an unsupported block, it should be completely ignored (Should not have any effect and should not trigger a failure). +Every block is followed by another block, until the END block is reached. If an implementation encounters an unsupported block, it should be completely ignored (Should not have any effect and should not trigger a failure). #### NAME block diff --git a/thirdparty/SameBoy/BootROMs/cgb_boot.asm b/thirdparty/SameBoy/BootROMs/cgb_boot.asm index 1345915d6..0bc2b179c 100644 --- a/thirdparty/SameBoy/BootROMs/cgb_boot.asm +++ b/thirdparty/SameBoy/BootROMs/cgb_boot.asm @@ -25,6 +25,7 @@ Start: ; Init waveform ld c, $10 + ld hl, $FF30 .waveformLoop ldi [hl], a cpl @@ -44,7 +45,6 @@ Start: ldh [$25], a ld a, $77 ldh [$24], a - ld hl, $FF30 ; Init BG palette ld a, $fc @@ -190,10 +190,9 @@ ENDC IF !DEF(FAST) call DoIntroAnimation - ld a, 45 + ld a, 48 ; frames to wait after playing the chime ldh [WaitLoopCounter], a -; Wait ~0.75 seconds - ld b, a + ld b, 4 ; frames to wait before playing the chime call WaitBFrames ; Play first sound @@ -271,7 +270,7 @@ TitleChecksums: db $A2 ; STAR WARS-NOA db $49 ; db $4E ; WAVERACE - db $43 | $80 ; + db $43 ; db $68 ; LOLO2 db $E0 ; YOSHI'S COOKIE db $8B ; MYSTIC QUEST @@ -330,7 +329,7 @@ ChecksumsEnd: PalettePerChecksum: palette_index: MACRO ; palette, flags - db ((\1) * 3) | (\2) ; | $80 means game requires DMG boot tilemap + db ((\1)) | (\2) ; | $80 means game requires DMG boot tilemap ENDM palette_index 0, 0 ; Default Palette palette_index 4, 0 ; ALLEY WAY @@ -374,7 +373,7 @@ ENDM palette_index 45, 0 ; STAR WARS-NOA palette_index 36, 0 ; palette_index 38, 0 ; WAVERACE - palette_index 26, 0 ; + palette_index 26, $80 ; palette_index 42, 0 ; LOLO2 palette_index 30, 0 ; YOSHI'S COOKIE palette_index 41, 0 ; MYSTIC QUEST @@ -475,7 +474,7 @@ ENDM palette_comb 17, 4, 13 raw_palette_comb 28 * 4 - 1, 0 * 4, 14 * 4 raw_palette_comb 28 * 4 - 1, 4 * 4, 15 * 4 - palette_comb 19, 22, 9 + raw_palette_comb 19 * 4, 23 * 4 - 1, 9 * 4 palette_comb 16, 28, 10 palette_comb 4, 23, 28 palette_comb 17, 22, 2 @@ -918,7 +917,10 @@ EmulateDMG: call GetPaletteIndex bit 7, a call nz, LoadDMGTilemap - and $7F + res 7, a + ld b, a + add b + add b ld b, a ldh a, [InputPalette] and a @@ -978,7 +980,7 @@ GetPaletteIndex: ; We might have a match, Do duplicate/4th letter check ld a, l - sub FirstChecksumWithDuplicate - TitleChecksums + sub FirstChecksumWithDuplicate - TitleChecksums + 1 jr c, .match ; Does not have a duplicate, must be a match! ; Has a duplicate; check 4th letter push hl @@ -1184,7 +1186,7 @@ ChangeAnimationPalette: call WaitFrame call LoadPalettesFromHRAM ; Delay the wait loop while the user is selecting a palette - ld a, 45 + ld a, 48 ldh [WaitLoopCounter], a pop de pop bc diff --git a/thirdparty/SameBoy/Cocoa/AppDelegate.h b/thirdparty/SameBoy/Cocoa/AppDelegate.h index e74b19163..a9b00487e 100644 --- a/thirdparty/SameBoy/Cocoa/AppDelegate.h +++ b/thirdparty/SameBoy/Cocoa/AppDelegate.h @@ -1,16 +1,25 @@ #import +#import -@interface AppDelegate : NSObject +@interface AppDelegate : NSObject @property (nonatomic, strong) IBOutlet NSWindow *preferencesWindow; @property (nonatomic, strong) IBOutlet NSView *graphicsTab; @property (nonatomic, strong) IBOutlet NSView *emulationTab; @property (nonatomic, strong) IBOutlet NSView *audioTab; @property (nonatomic, strong) IBOutlet NSView *controlsTab; +@property (nonatomic, strong) IBOutlet NSView *updatesTab; - (IBAction)showPreferences: (id) sender; - (IBAction)toggleDeveloperMode:(id)sender; - (IBAction)switchPreferencesTab:(id)sender; @property (nonatomic, weak) IBOutlet NSMenuItem *linkCableMenuItem; - +@property (nonatomic, strong) IBOutlet NSWindow *updateWindow; +@property (nonatomic, strong) IBOutlet WebView *updateChanges; +@property (nonatomic, strong) IBOutlet NSProgressIndicator *updatesSpinner; +@property (strong) IBOutlet NSButton *updatesButton; +@property (strong) IBOutlet NSTextField *updateProgressLabel; +@property (strong) IBOutlet NSButton *updateProgressButton; +@property (strong) IBOutlet NSWindow *updateProgressWindow; +@property (strong) IBOutlet NSProgressIndicator *updateProgressSpinner; @end diff --git a/thirdparty/SameBoy/Cocoa/AppDelegate.m b/thirdparty/SameBoy/Cocoa/AppDelegate.m index aee2111e7..48514a05c 100644 --- a/thirdparty/SameBoy/Cocoa/AppDelegate.m +++ b/thirdparty/SameBoy/Cocoa/AppDelegate.m @@ -4,11 +4,33 @@ #include #import #import +#import + +#define UPDATE_SERVER "https://sameboy.github.io" + +static uint32_t color_to_int(NSColor *color) +{ + color = [color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + return (((unsigned)(color.redComponent * 0xFF)) << 16) | + (((unsigned)(color.greenComponent * 0xFF)) << 8) | + ((unsigned)(color.blueComponent * 0xFF)); +} @implementation AppDelegate { NSWindow *preferences_window; NSArray *preferences_tabs; + NSString *_lastVersion; + NSString *_updateURL; + NSURLSessionDownloadTask *_updateTask; + enum { + UPDATE_DOWNLOADING, + UPDATE_EXTRACTING, + UPDATE_WAIT_INSTALL, + UPDATE_INSTALLING, + UPDATE_FAILED, + } _updateState; + NSString *_downloadDirectory; } - (void) applicationDidFinishLaunching:(NSNotification *)notification @@ -44,6 +66,8 @@ - (void) applicationDidFinishLaunching:(NSNotification *)notification @"GBCGBModel": @(GB_MODEL_CGB_E), @"GBSGBModel": @(GB_MODEL_SGB2), @"GBRumbleMode": @(GB_RUMBLE_CARTRIDGE_ONLY), + + @"GBVolume": @(1.0), }]; [JOYController startOnRunLoop:[NSRunLoop currentRunLoop] withOptions:@{ @@ -54,6 +78,16 @@ - (void) applicationDidFinishLaunching:(NSNotification *)notification if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBNotificationsUsed"]) { [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self; } + + [self askAutoUpdates]; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBAutoUpdatesEnabled"]) { + [self checkForUpdates]; + } + + if ([[NSProcessInfo processInfo].arguments containsObject:@"--update-launch"]) { + [NSApp activateIgnoringOtherApps:true]; + } } - (IBAction)toggleDeveloperMode:(id)sender @@ -72,7 +106,7 @@ - (IBAction)switchPreferencesTab:(id)sender NSRect new = [_preferencesWindow frameRectForContentRect:tab.frame]; new.origin.x = old.origin.x; new.origin.y = old.origin.y + (old.size.height - new.size.height); - [_preferencesWindow setFrame:new display:YES animate:_preferencesWindow.visible]; + [_preferencesWindow setFrame:new display:true animate:_preferencesWindow.visible]; [_preferencesWindow.contentView addSubview:tab]; } @@ -111,15 +145,19 @@ - (IBAction) showPreferences: (id) sender [[NSBundle mainBundle] loadNibNamed:@"Preferences" owner:self topLevelObjects:&objects]; NSToolbarItem *first_toolbar_item = [_preferencesWindow.toolbar.items firstObject]; _preferencesWindow.toolbar.selectedItemIdentifier = [first_toolbar_item itemIdentifier]; - preferences_tabs = @[self.emulationTab, self.graphicsTab, self.audioTab, self.controlsTab]; + preferences_tabs = @[self.emulationTab, self.graphicsTab, self.audioTab, self.controlsTab, self.updatesTab]; [self switchPreferencesTab:first_toolbar_item]; [_preferencesWindow center]; +#ifndef UPDATE_SUPPORT + [_preferencesWindow.toolbar removeItemAtIndex:4]; +#endif } [_preferencesWindow makeKeyAndOrderFront:self]; } - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender { + [self askAutoUpdates]; /* Bring an existing panel to the foreground */ for (NSWindow *window in [[NSApplication sharedApplication] windows]) { if ([window isKindOfClass:[NSOpenPanel class]]) { @@ -133,7 +171,276 @@ - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender - (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { - [[NSDocumentController sharedDocumentController] openDocumentWithContentsOfFile:notification.identifier display:YES]; + [[NSDocumentController sharedDocumentController] openDocumentWithContentsOfFile:notification.identifier display:true]; +} + +- (void)updateFound +{ + [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@UPDATE_SERVER "/raw_changes"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + + NSColor *linkColor = [NSColor colorWithRed:0.125 green:0.325 blue:1.0 alpha:1.0]; + if (@available(macOS 10.10, *)) { + linkColor = [NSColor linkColor]; + } + + NSString *changes = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSRange cutoffRange = [changes rangeOfString:@""]; + if (cutoffRange.location != NSNotFound) { + changes = [changes substringToIndex:cutoffRange.location]; + } + + NSString *html = [NSString stringWithFormat:@"" + "" + "%@", + color_to_int([NSColor textColor]), + color_to_int(linkColor), + changes]; + + if ([(NSHTTPURLResponse *)response statusCode] == 200) { + dispatch_async(dispatch_get_main_queue(), ^{ + NSArray *objects; + [[NSBundle mainBundle] loadNibNamed:@"UpdateWindow" owner:self topLevelObjects:&objects]; + self.updateChanges.preferences.standardFontFamily = [NSFont systemFontOfSize:0].familyName; + self.updateChanges.preferences.fixedFontFamily = @"Menlo"; + self.updateChanges.drawsBackground = false; + [self.updateChanges.mainFrame loadHTMLString:html baseURL:nil]; + }); + } + }] resume]; +} + +- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems +{ + // Disable reload context menu + if ([defaultMenuItems count] <= 2) { + return nil; + } + return defaultMenuItems; +} + +- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sender.mainFrame.frameView.documentView.enclosingScrollView.drawsBackground = true; + sender.mainFrame.frameView.documentView.enclosingScrollView.backgroundColor = [NSColor textBackgroundColor]; + sender.policyDelegate = self; + [self.updateWindow center]; + [self.updateWindow makeKeyAndOrderFront:nil]; + }); +} + +- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener +{ + [listener ignore]; + [[NSWorkspace sharedWorkspace] openURL:[request URL]]; +} + +- (void)checkForUpdates +{ +#ifdef UPDATE_SUPPORT + [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@UPDATE_SERVER "/latest_version"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.updatesSpinner stopAnimation:nil]; + [self.updatesButton setEnabled:true]; + }); + if ([(NSHTTPURLResponse *)response statusCode] == 200) { + NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSArray *components = [string componentsSeparatedByString:@"|"]; + if (components.count != 2) return; + _lastVersion = components[0]; + _updateURL = components[1]; + if (![@GB_VERSION isEqualToString:_lastVersion] && + ![[[NSUserDefaults standardUserDefaults] stringForKey:@"GBSkippedVersion"] isEqualToString:_lastVersion]) { + [self updateFound]; + } + } + }] resume]; +#endif +} + +- (IBAction)userCheckForUpdates:(id)sender +{ + if (self.updateWindow) { + [self.updateWindow makeKeyAndOrderFront:sender]; + } + else { + [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"GBSkippedVersion"]; + [self checkForUpdates]; + [sender setEnabled:false]; + [self.updatesSpinner startAnimation:sender]; + } +} + +- (void)askAutoUpdates +{ +#ifdef UPDATE_SUPPORT + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"GBAskedAutoUpdates"]) { + NSAlert *alert = [[NSAlert alloc] init]; + alert.messageText = @"Should SameBoy check for updates when launched?"; + alert.informativeText = @"SameBoy is frequently updated with new features, accuracy improvements, and bug fixes. This setting can always be changed in the preferences window."; + [alert addButtonWithTitle:@"Check on Launch"]; + [alert addButtonWithTitle:@"Don't Check on Launch"]; + + [[NSUserDefaults standardUserDefaults] setBool:[alert runModal] == NSAlertFirstButtonReturn forKey:@"GBAutoUpdatesEnabled"]; + [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"GBAskedAutoUpdates"]; + } +#endif +} + +- (IBAction)skipVersion:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:_lastVersion forKey:@"GBSkippedVersion"]; + [self.updateWindow performClose:sender]; +} + +- (IBAction)installUpdate:(id)sender +{ + [self.updateProgressSpinner startAnimation:nil]; + self.updateProgressButton.title = @"Cancel"; + self.updateProgressButton.enabled = true; + self.updateProgressLabel.stringValue = @"Downloading update..."; + _updateState = UPDATE_DOWNLOADING; + _updateTask = [[NSURLSession sharedSession] downloadTaskWithURL: [NSURL URLWithString:_updateURL] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { + _updateTask = nil; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Extracting update..."; + _updateState = UPDATE_EXTRACTING; + }); + + _downloadDirectory = [[[NSFileManager defaultManager] URLForDirectory:NSItemReplacementDirectory + inDomain:NSUserDomainMask + appropriateForURL:[[NSBundle mainBundle] bundleURL] + create:true + error:nil] path]; + NSTask *unzipTask; + if (!_downloadDirectory) { + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to extract update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + } + + unzipTask = [[NSTask alloc] init]; + unzipTask.launchPath = @"/usr/bin/unzip"; + unzipTask.arguments = @[location.path, @"-d", _downloadDirectory]; + [unzipTask launch]; + [unzipTask waitUntilExit]; + if (unzipTask.terminationStatus != 0 || unzipTask.terminationReason != NSTaskTerminationReasonExit) { + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to extract update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + return; + } + + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Update ready, save your game progress and click Install."; + _updateState = UPDATE_WAIT_INSTALL; + self.updateProgressButton.title = @"Install"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + }]; + [_updateTask resume]; + + self.updateProgressWindow.preventsApplicationTerminationWhenModal = false; + [self.updateWindow beginSheet:self.updateProgressWindow completionHandler:^(NSModalResponse returnCode) { + [self.updateWindow close]; + }]; +} + +- (void)performUpgrade +{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Instaling update..."; + _updateState = UPDATE_INSTALLING; + self.updateProgressButton.enabled = false; + [self.updateProgressSpinner startAnimation:nil]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSString *executablePath = [[NSBundle mainBundle] executablePath]; + NSString *contentsPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents"]; + NSString *contentsTempPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"TempContents"]; + NSString *updateContentsPath = [_downloadDirectory stringByAppendingPathComponent:@"SameBoy.app/Contents"]; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtPath:contentsPath toPath:contentsTempPath error:&error]; + if (error) { + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + _downloadDirectory = nil; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to install update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + return; + } + [[NSFileManager defaultManager] moveItemAtPath:updateContentsPath toPath:contentsPath error:&error]; + if (error) { + [[NSFileManager defaultManager] moveItemAtPath:contentsTempPath toPath:contentsPath error:nil]; + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + _downloadDirectory = nil; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to install update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + return; + } + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + [[NSFileManager defaultManager] removeItemAtPath:contentsTempPath error:nil]; + _downloadDirectory = nil; + atexit_b(^{ + execl(executablePath.UTF8String, executablePath.UTF8String, "--update-launch", NULL); + }); + + dispatch_async(dispatch_get_main_queue(), ^{ + [NSApp terminate:nil]; + }); + }); +} + +- (IBAction)updateAction:(id)sender +{ + switch (_updateState) { + case UPDATE_DOWNLOADING: + [_updateTask cancelByProducingResumeData:nil]; + _updateTask = nil; + [self.updateProgressWindow close]; + break; + case UPDATE_WAIT_INSTALL: + [self performUpgrade]; + break; + case UPDATE_EXTRACTING: + case UPDATE_INSTALLING: + break; + case UPDATE_FAILED: + [self.updateProgressWindow close]; + break; + } +} + +- (void)dealloc +{ + if (_downloadDirectory) { + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + } } - (IBAction)nop:(id)sender diff --git a/thirdparty/SameBoy/Cocoa/Document.h b/thirdparty/SameBoy/Cocoa/Document.h index 884738591..d6f89de9f 100644 --- a/thirdparty/SameBoy/Cocoa/Document.h +++ b/thirdparty/SameBoy/Cocoa/Document.h @@ -3,6 +3,7 @@ #include "GBImageView.h" #include "GBSplitView.h" #include "GBVisualizerView.h" +#include "GBOSDView.h" @class GBCheatWindowController; @@ -49,11 +50,12 @@ @property (strong) IBOutlet NSButton *gbsRewindButton; @property (strong) IBOutlet NSSegmentedControl *gbsNextPrevButton; @property (strong) IBOutlet GBVisualizerView *gbsVisualizer; +@property (strong) IBOutlet GBOSDView *osdView; -(uint8_t) readMemory:(uint16_t) addr; -(void) writeMemory:(uint16_t) addr value:(uint8_t)value; -(void) performAtomicBlock: (void (^)())block; -(void) connectLinkCable:(NSMenuItem *)sender; -- (bool)loadStateFile:(const char *)path; +-(int)loadStateFile:(const char *)path noErrorOnNotFound:(bool)noErrorOnFileNotFound; @end diff --git a/thirdparty/SameBoy/Cocoa/Document.m b/thirdparty/SameBoy/Cocoa/Document.m index 2fbec7c1d..2a54a1391 100644 --- a/thirdparty/SameBoy/Cocoa/Document.m +++ b/thirdparty/SameBoy/Cocoa/Document.m @@ -314,13 +314,14 @@ - (void) updateMinSize self.mainWindow.contentView.bounds.size.width < GB_get_screen_height(&gb)) { [self.mainWindow zoom:nil]; } + self.osdView.usesSGBScale = GB_get_screen_width(&gb) == 256; } - (void) vblank { if (_gbsVisualizer) { dispatch_async(dispatch_get_main_queue(), ^{ - [_gbsVisualizer setNeedsDisplay:YES]; + [_gbsVisualizer setNeedsDisplay:true]; }); } [self.view flip]; @@ -344,6 +345,7 @@ - (void) vblank } if (self.view.isRewinding) { rewind = true; + [self.osdView displayText:@"Rewinding..."]; } } @@ -369,6 +371,11 @@ - (void)gotNewSample:(GB_sample_t *)sample } audioBuffer = realloc(audioBuffer, sizeof(*sample) * audioBufferSize); } + double volume = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"]; + if (volume != 1) { + sample->left *= volume; + sample->right *= volume; + } audioBuffer[audioBufferPosition++] = *sample; } if (audioBufferPosition == audioBufferNeeded) { @@ -415,7 +422,7 @@ - (void) preRun if (![[NSUserDefaults standardUserDefaults] boolForKey:@"Mute"]) { [self.audioClient start]; } - hex_timer = [NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(reloadMemoryView) userInfo:nil repeats:YES]; + hex_timer = [NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(reloadMemoryView) userInfo:nil repeats:true]; [[NSRunLoop mainRunLoop] addTimer:hex_timer forMode:NSDefaultRunLoopMode]; /* Clear pending alarms, don't play alarms while playing */ @@ -495,7 +502,7 @@ - (void)postRun [audioLock unlock]; [self.audioClient stop]; self.audioClient = nil; - self.view.mouseHidingEnabled = NO; + self.view.mouseHidingEnabled = false; GB_save_battery(&gb, [[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sav"].path UTF8String]); GB_save_cheats(&gb, [[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"cht"].path UTF8String]); unsigned time_to_alarm = GB_time_to_alarm(&gb); @@ -586,12 +593,7 @@ - (IBAction)reset:(id)sender current_model = (enum model)[sender tag]; } - if (!modelsChanging && [sender tag] == MODEL_NONE) { - GB_reset(&gb); - } - else { - GB_switch_model_and_reset(&gb, [self internalModel]); - } + GB_switch_model_and_reset(&gb, [self internalModel]); if (old_width != GB_get_screen_width(&gb)) { [self.view screenSizeChanged]; @@ -616,6 +618,10 @@ - (IBAction)reset:(id)sender [(GBMemoryByteArray *)(hex_controller.byteArray) setSelectedBank:0]; [self hexUpdateBank:self.memoryBankInput ignoreErrors:true]; } + + char title[17]; + GB_get_rom_title(&gb, title); + [self.osdView displayText:[NSString stringWithFormat:@"SameBoy v" GB_VERSION "\n%s\n%08X", title, GB_get_rom_crc32(&gb)]]; } - (IBAction)togglePause:(id)sender @@ -678,9 +684,13 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)aController window_frame.size.width); window_frame.size.height = MAX([[NSUserDefaults standardUserDefaults] integerForKey:@"LastWindowHeight"], window_frame.size.height); - [self.mainWindow setFrame:window_frame display:YES]; + [self.mainWindow setFrame:window_frame display:true]; self.vramStatusLabel.cell.backgroundStyle = NSBackgroundStyleRaised; - + + NSUInteger height_diff = self.vramWindow.frame.size.height - self.vramWindow.contentView.frame.size.height; + CGRect vram_window_rect = self.vramWindow.frame; + vram_window_rect.size.height = 384 + height_diff + 48; + [self.vramWindow setFrame:vram_window_rect display:true animate:false]; self.consoleWindow.title = [NSString stringWithFormat:@"Debug Console – %@", [self.fileURL.path lastPathComponent]]; @@ -775,9 +785,17 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)aController [self initCommon]; self.view.gb = &gb; + self.view.osdView = _osdView; [self.view screenSizeChanged]; - [self loadROM]; - [self reset:nil]; + if ([self loadROM]) { + _mainWindow.alphaValue = 0; // Hack hack ugly hack + dispatch_async(dispatch_get_main_queue(), ^{ + [self close]; + }); + } + else { + [self reset:nil]; + } } - (void) initMemoryView @@ -828,7 +846,7 @@ - (void) initMemoryView + (BOOL)autosavesInPlace { - return YES; + return true; } - (NSString *)windowNibName @@ -840,7 +858,7 @@ - (NSString *)windowNibName - (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type { - return YES; + return true; } - (IBAction)changeGBSTrack:(id)sender @@ -879,7 +897,7 @@ - (void)prepareGBSInterface: (GB_gbs_info_t *)info { GB_set_rendering_disabled(&gb, true); _view = nil; - for (NSView *view in _mainWindow.contentView.subviews) { + for (NSView *view in [_mainWindow.contentView.subviews copy]) { [view removeFromSuperview]; } [[NSBundle mainBundle] loadNibNamed:@"GBS" owner:self topLevelObjects:nil]; @@ -919,21 +937,22 @@ - (void)prepareGBSInterface: (GB_gbs_info_t *)info } } -- (void) loadROM +- (int) loadROM { + __block int ret = 0; NSString *rom_warnings = [self captureOutputForBlock:^{ GB_debugger_clear_symbols(&gb); if ([[[self.fileType pathExtension] lowercaseString] isEqualToString:@"isx"]) { - GB_load_isx(&gb, self.fileURL.path.UTF8String); + ret = GB_load_isx(&gb, self.fileURL.path.UTF8String); GB_load_battery(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"ram"].path.UTF8String); } else if ([[[self.fileType pathExtension] lowercaseString] isEqualToString:@"gbs"]) { __block GB_gbs_info_t info; - GB_load_gbs(&gb, self.fileURL.path.UTF8String, &info); + ret = GB_load_gbs(&gb, self.fileURL.path.UTF8String, &info); [self prepareGBSInterface:&info]; } else { - GB_load_rom(&gb, [self.fileURL.path UTF8String]); + ret = GB_load_rom(&gb, [self.fileURL.path UTF8String]); } GB_load_battery(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sav"].path.UTF8String); GB_load_cheats(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"cht"].path.UTF8String); @@ -941,10 +960,17 @@ - (void) loadROM GB_debugger_load_symbol_file(&gb, [[[NSBundle mainBundle] pathForResource:@"registers" ofType:@"sym"] UTF8String]); GB_debugger_load_symbol_file(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sym"].path.UTF8String); }]; - if (rom_warnings && !rom_warning_issued) { + if (ret) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:rom_warnings?: @"Could not load ROM"]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + } + else if (rom_warnings && !rom_warning_issued) { rom_warning_issued = true; [GBWarningPopover popoverWithContents:rom_warnings onWindow:self.mainWindow]; } + return ret; } - (void)close @@ -979,6 +1005,9 @@ - (IBAction)mute:(id)sender } else { [self.audioClient start]; + if ([[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"] == 0) { + [GBWarningPopover popoverWithContents:@"Warning: Volume is set to to zero in the preferences panel" onWindow:self.mainWindow]; + } } [[NSUserDefaults standardUserDefaults] setBool:!self.audioClient.isPlaying forKey:@"Mute"]; } @@ -1032,7 +1061,7 @@ - (void) windowWillEnterFullScreen:(NSNotification *)notification - (void) windowWillExitFullScreen:(NSNotification *)notification { fullScreen = false; - self.view.mouseHidingEnabled = NO; + self.view.mouseHidingEnabled = false; } - (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)newFrame @@ -1127,14 +1156,14 @@ - (void) log: (const char *) string withAttributes: (GB_log_attributes) attribut } if (![console_output_timer isValid]) { - console_output_timer = [NSTimer timerWithTimeInterval:(NSTimeInterval)0.05 target:self selector:@selector(appendPendingOutput) userInfo:nil repeats:NO]; + console_output_timer = [NSTimer timerWithTimeInterval:(NSTimeInterval)0.05 target:self selector:@selector(appendPendingOutput) userInfo:nil repeats:false]; [[NSRunLoop mainRunLoop] addTimer:console_output_timer forMode:NSDefaultRunLoopMode]; } [console_output_lock unlock]; /* Make sure mouse is not hidden while debugging */ - self.view.mouseHidingEnabled = NO; + self.view.mouseHidingEnabled = false; } - (IBAction)showConsoleWindow:(id)sender @@ -1261,28 +1290,41 @@ - (IBAction)saveState:(id)sender [GBWarningPopover popoverWithContents:@"Failed to write save state." onWindow:self.mainWindow]; NSBeep(); } + else { + [self.osdView displayText:@"State saved"]; + } } -- (bool)loadStateFile:(const char *)path +- (int)loadStateFile:(const char *)path noErrorOnNotFound:(bool)noErrorOnFileNotFound; { - bool __block success = false; + int __block result = false; NSString *error = [self captureOutputForBlock:^{ - success = GB_load_state(&gb, path) == 0; + result = GB_load_state(&gb, path); }]; - if (!success) { + if (result == ENOENT && noErrorOnFileNotFound) { + return ENOENT; + } + + if (result) { NSBeep(); } + else { + [self.osdView displayText:@"State loaded"]; + } if (error) { [GBWarningPopover popoverWithContents:error onWindow:self.mainWindow]; } - return success; + return result; } - (IBAction)loadState:(id)sender { - [self loadStateFile:[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"s%ld", (long)[sender tag] ]].path.UTF8String]; + int ret = [self loadStateFile:[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"s%ld", (long)[sender tag]]].path.UTF8String noErrorOnNotFound:true]; + if (ret == ENOENT) { + [self loadStateFile:[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"sn%ld", (long)[sender tag]]].path.UTF8String noErrorOnNotFound:false]; + } } - (IBAction)clearConsole:(id)sender @@ -1348,7 +1390,7 @@ + (NSImage *) imageFromData:(NSData *)data width:(NSUInteger) width height:(NSUI bitmapInfo, provider, NULL, - YES, + true, renderingIntent); CGDataProviderRelease(provider); CGColorSpaceRelease(colorSpaceRef); @@ -1556,7 +1598,7 @@ - (IBAction)hexUpdateSpace:(NSPopUpButtonCell *)sender } [self.memoryBankInput setStringValue:[NSString stringWithFormat:@"$%x", byteArray.selectedBank]]; [hex_controller reloadData]; - [self.memoryView setNeedsDisplay:YES]; + [self.memoryView setNeedsDisplay:true]; } - (GB_gameboy_t *) gameboy @@ -1566,12 +1608,12 @@ - (GB_gameboy_t *) gameboy + (BOOL)canConcurrentlyReadDocumentsOfType:(NSString *)typeName { - return YES; + return true; } - (void)cameraRequestUpdate { - dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @try { if (!cameraSession) { if (@available(macOS 10.14, *)) { @@ -1707,14 +1749,14 @@ - (IBAction)vramTabChanged:(NSSegmentedControl *)sender window_rect.size.height = 512 + height_diff + 48; break; case 3: - window_rect.size.height = 20 * 16 + height_diff + 24; + window_rect.size.height = 20 * 16 + height_diff + 34; break; default: break; } window_rect.origin.y -= window_rect.size.height; - [self.vramWindow setFrame:window_rect display:YES animate:YES]; + [self.vramWindow setFrame:window_rect display:true animate:true]; } - (void)mouseDidLeaveImageView:(GBImageView *)view @@ -1809,7 +1851,7 @@ - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColum case 0: return [Document imageFromData:[NSData dataWithBytesNoCopy:oamInfo[row].image length:64 * 4 * 2 - freeWhenDone:NO] + freeWhenDone:false] width:8 height:oamHeight scale:16.0/oamHeight]; @@ -1852,7 +1894,7 @@ - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row - (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row { - return NO; + return false; } - (IBAction)showVRAMViewer:(id)sender @@ -1882,7 +1924,7 @@ - (void) printImage:(uint32_t *)imageBytes height:(unsigned) height frame.size = self.feedImageView.image.size; [self.printerFeedWindow setContentMaxSize:frame.size]; frame.size.height += self.printerFeedWindow.frame.size.height - self.printerFeedWindow.contentView.frame.size.height; - [self.printerFeedWindow setFrame:frame display:NO animate: self.printerFeedWindow.isVisible]; + [self.printerFeedWindow setFrame:frame display:false animate: self.printerFeedWindow.isVisible]; [self.printerFeedWindow orderFront:NULL]; }); @@ -1913,8 +1955,8 @@ - (IBAction)savePrinterFeed:(id)sender NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithCGImage:cgRef]; [imageRep setSize:(NSSize){160, self.feedImageView.image.size.height / 2}]; NSData *data = [imageRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; - [data writeToURL:savePanel.URL atomically:NO]; - [self.printerFeedWindow setIsVisible:NO]; + [data writeToURL:savePanel.URL atomically:false]; + [self.printerFeedWindow setIsVisible:false]; } if (shouldResume) { [self start]; @@ -2035,9 +2077,9 @@ - (void)setFileURL:(NSURL *)fileURL - (BOOL)splitView:(GBSplitView *)splitView canCollapseSubview:(NSView *)subview; { if ([[splitView arrangedSubviews] lastObject] == subview) { - return YES; + return true; } - return NO; + return false; } - (CGFloat)splitView:(GBSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex @@ -2053,9 +2095,9 @@ - (CGFloat)splitView:(GBSplitView *)splitView constrainMaxCoordinate:(CGFloat)pr - (BOOL)splitView:(GBSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)view { if ([[splitView arrangedSubviews] lastObject] == view) { - return NO; + return false; } - return YES; + return true; } - (void)splitViewDidResizeSubviews:(NSNotification *)notification @@ -2159,4 +2201,115 @@ - (GB_gameboy_t *)gb { return &gb; } + +- (NSImage *)takeScreenshot +{ + NSImage *ret = nil; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBFilterScreenshots"]) { + ret = [_view renderToImage]; + } + if (!ret) { + ret = [Document imageFromData:[NSData dataWithBytesNoCopy:_view.currentBuffer + length:GB_get_screen_width(&gb) * GB_get_screen_height(&gb) * 4 + freeWhenDone:false] + width:GB_get_screen_width(&gb) + height:GB_get_screen_height(&gb) + scale:1.0]; + } + [ret lockFocus]; + NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, + ret.size.width, ret.size.height)]; + [ret unlockFocus]; + ret = [[NSImage alloc] initWithSize:ret.size]; + [ret addRepresentation:bitmapRep]; + return ret; +} + +- (NSString *)screenshotFilename +{ + NSDate *date = [NSDate date]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterLongStyle; + dateFormatter.timeStyle = NSDateFormatterMediumStyle; + return [[NSString stringWithFormat:@"%@ – %@.png", + self.fileURL.lastPathComponent.stringByDeletingPathExtension, + [dateFormatter stringFromDate:date]] stringByReplacingOccurrencesOfString:@":" withString:@"."]; // Gotta love Mac OS Classic + +} + +- (IBAction)saveScreenshot:(id)sender +{ + NSString *folder = [[NSUserDefaults standardUserDefaults] stringForKey:@"GBScreenshotFolder"]; + BOOL isDirectory = false; + if (folder) { + [[NSFileManager defaultManager] fileExistsAtPath:folder isDirectory:&isDirectory]; + } + if (!folder) { + bool shouldResume = running; + [self stop]; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + openPanel.canChooseFiles = false; + openPanel.canChooseDirectories = true; + openPanel.message = @"Choose a folder for screenshots"; + [openPanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [[NSUserDefaults standardUserDefaults] setObject:openPanel.URL.path + forKey:@"GBScreenshotFolder"]; + [self saveScreenshot:sender]; + } + if (shouldResume) { + [self start]; + } + + }]; + return; + } + NSImage *image = [self takeScreenshot]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterLongStyle; + dateFormatter.timeStyle = NSDateFormatterMediumStyle; + NSString *filename = [self screenshotFilename]; + filename = [folder stringByAppendingPathComponent:filename]; + unsigned i = 2; + while ([[NSFileManager defaultManager] fileExistsAtPath:filename]) { + filename = [[filename stringByDeletingPathExtension] stringByAppendingFormat:@" %d.png", i++]; + } + + NSBitmapImageRep *imageRep = (NSBitmapImageRep *)image.representations.firstObject; + NSData *data = [imageRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; + [data writeToFile:filename atomically:false]; + [self.osdView displayText:@"Screenshot saved"]; +} + +- (IBAction)saveScreenshotAs:(id)sender +{ + bool shouldResume = running; + [self stop]; + NSImage *image = [self takeScreenshot]; + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setNameFieldStringValue:[self screenshotFilename]]; + [savePanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [savePanel orderOut:self]; + NSBitmapImageRep *imageRep = (NSBitmapImageRep *)image.representations.firstObject; + NSData *data = [imageRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; + [data writeToURL:savePanel.URL atomically:false]; + [[NSUserDefaults standardUserDefaults] setObject:savePanel.URL.path.stringByDeletingLastPathComponent + forKey:@"GBScreenshotFolder"]; + } + if (shouldResume) { + [self start]; + } + }]; + [self.osdView displayText:@"Screenshot saved"]; +} + +- (IBAction)copyScreenshot:(id)sender +{ + NSImage *image = [self takeScreenshot]; + [[NSPasteboard generalPasteboard] clearContents]; + [[NSPasteboard generalPasteboard] writeObjects:@[image]]; + [self.osdView displayText:@"Screenshot copied"]; +} + @end diff --git a/thirdparty/SameBoy/Cocoa/Document.xib b/thirdparty/SameBoy/Cocoa/Document.xib index a2cf5ee30..c76c148ac 100644 --- a/thirdparty/SameBoy/Cocoa/Document.xib +++ b/thirdparty/SameBoy/Cocoa/Document.xib @@ -25,6 +25,7 @@ + @@ -65,6 +66,10 @@ + + + + @@ -978,7 +983,7 @@ - + @@ -999,7 +1004,7 @@ - + @@ -1024,7 +1029,7 @@ - + diff --git a/thirdparty/SameBoy/Cocoa/GBAudioClient.m b/thirdparty/SameBoy/Cocoa/GBAudioClient.m index 7f2115d75..81a51fd56 100644 --- a/thirdparty/SameBoy/Cocoa/GBAudioClient.m +++ b/thirdparty/SameBoy/Cocoa/GBAudioClient.m @@ -90,7 +90,7 @@ -(void) start { OSErr err = AudioOutputUnitStart(audioUnit); NSAssert1(err == noErr, @"Error starting unit: %hd", err); - _playing = YES; + _playing = true; } @@ -98,7 +98,7 @@ -(void) start -(void) stop { AudioOutputUnitStop(audioUnit); - _playing = NO; + _playing = false; } -(void) dealloc @@ -108,4 +108,4 @@ -(void) dealloc AudioComponentInstanceDispose(audioUnit); } -@end \ No newline at end of file +@end diff --git a/thirdparty/SameBoy/Cocoa/GBBorderView.m b/thirdparty/SameBoy/Cocoa/GBBorderView.m index a5f5e8173..d992e298a 100644 --- a/thirdparty/SameBoy/Cocoa/GBBorderView.m +++ b/thirdparty/SameBoy/Cocoa/GBBorderView.m @@ -5,12 +5,12 @@ @implementation GBBorderView - (void)awakeFromNib { - self.wantsLayer = YES; + self.wantsLayer = true; } - (BOOL)wantsUpdateLayer { - return YES; + return true; } - (void)updateLayer diff --git a/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m b/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m index 611cadebc..1fdafea04 100644 --- a/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m +++ b/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m @@ -114,7 +114,7 @@ - (NSTextView *)fieldEditorForView:(NSView *)controlView return _fieldEditor; } _fieldEditor = [[GBCheatTextView alloc] initWithFrame:controlView.frame]; - _fieldEditor.fieldEditor = YES; + _fieldEditor.fieldEditor = true; _fieldEditor.usesAddressFormat = self.usesAddressFormat; return _fieldEditor; } diff --git a/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m b/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m index c10e2a945..5cc8f5959 100644 --- a/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m +++ b/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m @@ -52,7 +52,7 @@ - (nullable id)tableView:(NSTableView *)tableView objectValueForTableColumn:(nul if (row >= cheatCount) { switch (columnIndex) { case 0: - return @(YES); + return @YES; case 1: return @NO; @@ -67,7 +67,7 @@ - (nullable id)tableView:(NSTableView *)tableView objectValueForTableColumn:(nul switch (columnIndex) { case 0: - return @(NO); + return @NO; case 1: return @(cheats[row]->enabled); diff --git a/thirdparty/SameBoy/Cocoa/GBColorCell.m b/thirdparty/SameBoy/Cocoa/GBColorCell.m index 0ad102a6c..761ad43b3 100644 --- a/thirdparty/SameBoy/Cocoa/GBColorCell.m +++ b/thirdparty/SameBoy/Cocoa/GBColorCell.m @@ -13,13 +13,13 @@ @implementation GBColorCell - (void)setObjectValue:(id)objectValue { - _integerValue = [objectValue integerValue]; uint8_t r = _integerValue & 0x1F, g = (_integerValue >> 5) & 0x1F, b = (_integerValue >> 10) & 0x1F; super.objectValue = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"$%04x", (uint16_t)(_integerValue & 0x7FFF)] attributes:@{ - NSForegroundColorAttributeName: r * 3 + g * 4 + b * 2 > 120? [NSColor blackColor] : [NSColor whiteColor] + NSForegroundColorAttributeName: r * 3 + g * 4 + b * 2 > 120? [NSColor blackColor] : [NSColor whiteColor], + NSFontAttributeName: [NSFont userFixedPitchFontOfSize:12] }]; } @@ -36,13 +36,14 @@ - (int)intValue - (NSColor *) backgroundColor { + /* Todo: color correction */ uint16_t color = self.integerValue; return [NSColor colorWithRed:scale_channel(color) green:scale_channel(color >> 5) blue:scale_channel(color >> 10) alpha:1.0]; } - (BOOL)drawsBackground { - return YES; + return true; } @end diff --git a/thirdparty/SameBoy/Cocoa/GBOSDView.h b/thirdparty/SameBoy/Cocoa/GBOSDView.h new file mode 100644 index 000000000..4771d2fd6 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBOSDView.h @@ -0,0 +1,6 @@ +#import + +@interface GBOSDView : NSView +@property bool usesSGBScale; +- (void)displayText:(NSString *)text; +@end diff --git a/thirdparty/SameBoy/Cocoa/GBOSDView.m b/thirdparty/SameBoy/Cocoa/GBOSDView.m new file mode 100644 index 000000000..710229ecd --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBOSDView.m @@ -0,0 +1,104 @@ +#import "GBOSDView.h" + +@implementation GBOSDView +{ + bool _usesSGBScale; + NSString *_text; + double _animation; + NSTimer *_timer; +} + +- (void)setUsesSGBScale:(bool)usesSGBScale +{ + _usesSGBScale = usesSGBScale; + [self setNeedsDisplay:true]; +} + +- (bool)usesSGBScale +{ + return _usesSGBScale; +} + +- (void)displayText:(NSString *)text +{ + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"GBOSDEnabled"]) return; + dispatch_async(dispatch_get_main_queue(), ^{ + if (![_text isEqualToString:text]) { + [self setNeedsDisplay:true]; + } + _text = text; + self.alphaValue = 1.0; + _animation = 2.5; + // Longer strings should appear longer + if ([_text rangeOfString:@"\n"].location != NSNotFound) { + _animation += 4; + } + [_timer invalidate]; + self.hidden = false; + _timer = [NSTimer scheduledTimerWithTimeInterval:0.025 target:self selector:@selector(animate) userInfo:nil repeats:true]; + }); +} + +- (void)animate +{ + _animation -= 0.1; + if (_animation < 1.0) { + self.alphaValue = _animation; + }; + if (_animation == 0) { + self.hidden = true; + [_timer invalidate]; + _text = nil; + } +} + +- (void)drawRect:(NSRect)dirtyRect +{ + [super drawRect:dirtyRect]; + if (!_text.length) return; + + double fontSize = 8; + NSSize size = self.frame.size; + if (_usesSGBScale) { + fontSize *= MIN(size.width / 256, size.height / 224); + } + else { + fontSize *= MIN(size.width / 160, size.height / 144); + } + + NSFont *font = [NSFont boldSystemFontOfSize:fontSize]; + + /* The built in stroke attribute uses an inside stroke, which is typographically terrible. + We'll use a naïve manual stroke instead which looks better. */ + + NSDictionary *attributes = @{ + NSFontAttributeName: font, + NSForegroundColorAttributeName: [NSColor blackColor], + }; + + NSAttributedString *text = [[NSAttributedString alloc] initWithString:_text attributes:attributes]; + + [text drawAtPoint:NSMakePoint(fontSize + 1, fontSize + 0)]; + [text drawAtPoint:NSMakePoint(fontSize - 1, fontSize + 0)]; + [text drawAtPoint:NSMakePoint(fontSize + 0, fontSize + 1)]; + [text drawAtPoint:NSMakePoint(fontSize + 0, fontSize - 1)]; + + // The uses of sqrt(2)/2, which is more correct, results in severe ugly-looking rounding errors + if (self.window.screen.backingScaleFactor > 1) { + [text drawAtPoint:NSMakePoint(fontSize + 0.5, fontSize + 0.5)]; + [text drawAtPoint:NSMakePoint(fontSize - 0.5, fontSize + 0.5)]; + [text drawAtPoint:NSMakePoint(fontSize - 0.5, fontSize - 0.5)]; + [text drawAtPoint:NSMakePoint(fontSize + 0.5, fontSize - 0.5)]; + } + + attributes = @{ + NSFontAttributeName: font, + NSForegroundColorAttributeName: [NSColor whiteColor], + }; + + text = [[NSAttributedString alloc] initWithString:_text attributes:attributes]; + + [text drawAtPoint:NSMakePoint(fontSize, fontSize)]; +} + +@end diff --git a/thirdparty/SameBoy/Cocoa/GBOpenGLView.m b/thirdparty/SameBoy/Cocoa/GBOpenGLView.m index 90ebf8d57..2e4eb70f6 100644 --- a/thirdparty/SameBoy/Cocoa/GBOpenGLView.m +++ b/thirdparty/SameBoy/Cocoa/GBOpenGLView.m @@ -34,6 +34,6 @@ - (instancetype)initWithFrame:(NSRect)frameRect pixelFormat:(NSOpenGLPixelFormat - (void) filterChanged { self.shader = nil; - [self setNeedsDisplay:YES]; + [self setNeedsDisplay:true]; } @end diff --git a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h index b25e47673..e11c5d3cd 100644 --- a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h +++ b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h @@ -25,5 +25,8 @@ @property (nonatomic, weak) IBOutlet NSPopUpButton *cgbPopupButton; @property (nonatomic, weak) IBOutlet NSPopUpButton *preferredJoypadButton; @property (nonatomic, weak) IBOutlet NSPopUpButton *playerListButton; - +@property (nonatomic, weak) IBOutlet NSButton *autoUpdatesCheckbox; +@property (weak) IBOutlet NSSlider *volumeSlider; +@property (weak) IBOutlet NSButton *OSDCheckbox; +@property (weak) IBOutlet NSButton *screenshotFilterCheckbox; @end diff --git a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m index 54d190fb9..60df2dde7 100644 --- a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m +++ b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m @@ -2,6 +2,7 @@ #import "NSString+StringForKey.h" #import "GBButtons.h" #import "BigSurToolbar.h" +#import "GBViewMetal.h" #import @implementation GBPreferencesWindow @@ -29,6 +30,10 @@ @implementation GBPreferencesWindow NSPopUpButton *_rumbleModePopupButton; NSSlider *_temperatureSlider; NSSlider *_interferenceSlider; + NSSlider *_volumeSlider; + NSButton *_autoUpdatesCheckbox; + NSButton *_OSDCheckbox; + NSButton *_screenshotFilterCheckbox; } + (NSArray *)filterList @@ -64,8 +69,8 @@ - (NSWindowToolbarStyle)toolbarStyle - (void)close { joystick_configuration_state = -1; - [self.configureJoypadButton setEnabled:YES]; - [self.skipButton setEnabled:NO]; + [self.configureJoypadButton setEnabled:true]; + [self.skipButton setEnabled:false]; [self.configureJoypadButton setTitle:@"Configure Controller"]; [super close]; } @@ -122,6 +127,17 @@ - (NSSlider *)interferenceSlider return _interferenceSlider; } +- (void)setVolumeSlider:(NSSlider *)volumeSlider +{ + _volumeSlider = volumeSlider; + [volumeSlider setDoubleValue:[[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"] * 256]; +} + +- (NSSlider *)volumeSlider +{ + return _volumeSlider; +} + - (void)setFrameBlendingModePopupButton:(NSPopUpButton *)frameBlendingModePopupButton { _frameBlendingModePopupButton = frameBlendingModePopupButton; @@ -252,12 +268,12 @@ - (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn dispatch_async(dispatch_get_main_queue(), ^{ is_button_being_modified = true; button_being_modified = row; - tableView.enabled = NO; - self.playerListButton.enabled = NO; + tableView.enabled = false; + self.playerListButton.enabled = false; [tableView reloadData]; [self makeFirstResponder:self]; }); - return NO; + return false; } -(void)keyDown:(NSEvent *)theEvent @@ -273,8 +289,8 @@ -(void)keyDown:(NSEvent *)theEvent [[NSUserDefaults standardUserDefaults] setInteger:theEvent.keyCode forKey:button_to_preference_name(button_being_modified, self.playerListButton.selectedTag)]; - self.controlsTableView.enabled = YES; - self.playerListButton.enabled = YES; + self.controlsTableView.enabled = true; + self.playerListButton.enabled = true; [self.controlsTableView reloadData]; [self makeFirstResponder:self.controlsTableView]; } @@ -329,12 +345,17 @@ - (IBAction)lightTemperatureChanged:(id)sender [[NSNotificationCenter defaultCenter] postNotificationName:@"GBLightTemperatureChanged" object:nil]; } -- (IBAction)volumeTemperatureChanged:(id)sender +- (IBAction)interferenceVolumeChanged:(id)sender { [[NSUserDefaults standardUserDefaults] setObject:@([sender doubleValue] / 256.0) forKey:@"GBInterferenceVolume"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"GBInterferenceVolumeChanged" object:nil]; +} +- (IBAction)volumeChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender doubleValue] / 256.0) + forKey:@"GBVolume"]; } - (IBAction)franeBlendingModeChanged:(id)sender @@ -381,10 +402,16 @@ - (IBAction)rtcModeChanged:(id)sender } +- (IBAction)changeAutoUpdates:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBAutoUpdatesEnabled"]; +} + - (IBAction) configureJoypad:(id)sender { - [self.configureJoypadButton setEnabled:NO]; - [self.skipButton setEnabled:YES]; + [self.configureJoypadButton setEnabled:false]; + [self.skipButton setEnabled:true]; joystick_being_configured = nil; [self advanceConfigurationStateMachine]; } @@ -405,8 +432,8 @@ - (void) advanceConfigurationStateMachine } else { joystick_configuration_state = -1; - [self.configureJoypadButton setEnabled:YES]; - [self.skipButton setEnabled:NO]; + [self.configureJoypadButton setEnabled:true]; + [self.skipButton setEnabled:false]; [self.configureJoypadButton setTitle:@"Configure Joypad"]; } } @@ -453,30 +480,37 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b static const unsigned gb_to_joykit[] = { - [GBRight]=JOYButtonUsageDPadRight, - [GBLeft]=JOYButtonUsageDPadLeft, - [GBUp]=JOYButtonUsageDPadUp, - [GBDown]=JOYButtonUsageDPadDown, - [GBA]=JOYButtonUsageA, - [GBB]=JOYButtonUsageB, - [GBSelect]=JOYButtonUsageSelect, - [GBStart]=JOYButtonUsageStart, - [GBTurbo]=JOYButtonUsageL1, - [GBRewind]=JOYButtonUsageL2, - [GBUnderclock]=JOYButtonUsageR1, + [GBRight] = JOYButtonUsageDPadRight, + [GBLeft] = JOYButtonUsageDPadLeft, + [GBUp] = JOYButtonUsageDPadUp, + [GBDown] = JOYButtonUsageDPadDown, + [GBA] = JOYButtonUsageA, + [GBB] = JOYButtonUsageB, + [GBSelect] = JOYButtonUsageSelect, + [GBStart] = JOYButtonUsageStart, + [GBTurbo] = JOYButtonUsageL1, + [GBRewind] = JOYButtonUsageL2, + [GBUnderclock] = JOYButtonUsageR1, }; if (joystick_configuration_state == GBUnderclock) { + mapping[@"AnalogUnderclock"] = nil; + double max = 0; for (JOYAxis *axis in controller.axes) { - if (axis.value > 0.5) { + if ((axis.value > 0.5 || (axis.equivalentButtonUsage == button.usage)) && axis.value >= max) { + max = axis.value; mapping[@"AnalogUnderclock"] = @(axis.uniqueID); + break; } } } if (joystick_configuration_state == GBTurbo) { + mapping[@"AnalogTurbo"] = nil; + double max = 0; for (JOYAxis *axis in controller.axes) { - if (axis.value > 0.5) { + if ((axis.value > 0.5 || (axis.equivalentButtonUsage == button.usage)) && axis.value >= max) { + max = axis.value; mapping[@"AnalogTurbo"] = @(axis.uniqueID); } } @@ -531,8 +565,8 @@ - (void)dealloc - (IBAction)selectOtherBootROMFolder:(id)sender { NSOpenPanel *panel = [[NSOpenPanel alloc] init]; - [panel setCanChooseDirectories:YES]; - [panel setCanChooseFiles:NO]; + [panel setCanChooseDirectories:true]; + [panel setCanChooseFiles:false]; [panel setPrompt:@"Select"]; [panel setDirectoryURL:[[NSUserDefaults standardUserDefaults] URLForKey:@"GBBootROMsFolder"]]; [panel beginSheetModalForWindow:self completionHandler:^(NSModalResponse result) { @@ -556,12 +590,12 @@ - (void) updateBootROMFolderButton [self.bootROMsFolderItem setTitle:[url lastPathComponent]]; NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:[url path]]; [icon setSize:NSMakeSize(16, 16)]; - [self.bootROMsFolderItem setHidden:NO]; + [self.bootROMsFolderItem setHidden:false]; [self.bootROMsFolderItem setImage:icon]; [self.bootROMsButton selectItemAtIndex:1]; } else { - [self.bootROMsFolderItem setHidden:YES]; + [self.bootROMsFolderItem setHidden:true]; [self.bootROMsButton selectItemAtIndex:0]; } } @@ -705,4 +739,56 @@ - (IBAction)changeDefaultJoypad:(id)sender } [[NSUserDefaults standardUserDefaults] setObject:default_joypads forKey:@"JoyKitDefaultControllers"]; } + +- (NSButton *)autoUpdatesCheckbox +{ + return _autoUpdatesCheckbox; +} + +- (void)setAutoUpdatesCheckbox:(NSButton *)autoUpdatesCheckbox +{ + _autoUpdatesCheckbox = autoUpdatesCheckbox; + [_autoUpdatesCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAutoUpdatesEnabled"]]; +} + +- (NSButton *)OSDCheckbox +{ + return _OSDCheckbox; +} + +- (void)setOSDCheckbox:(NSButton *)OSDCheckbox +{ + _OSDCheckbox = OSDCheckbox; + [_OSDCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBOSDEnabled"]]; +} + +- (IBAction)changeOSDEnabled:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool:[(NSButton *)sender state] == NSOnState + forKey:@"GBOSDEnabled"]; + +} + +- (IBAction)changeFilterScreenshots:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool:[(NSButton *)sender state] == NSOnState + forKey:@"GBFilterScreenshots"]; +} + +- (NSButton *)screenshotFilterCheckbox +{ + return _screenshotFilterCheckbox; +} + +- (void)setScreenshotFilterCheckbox:(NSButton *)screenshotFilterCheckbox +{ + _screenshotFilterCheckbox = screenshotFilterCheckbox; + if (![GBViewMetal isSupported]) { + [_screenshotFilterCheckbox setEnabled:false]; + } + else { + [_screenshotFilterCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBFilterScreenshots"]]; + } +} + @end diff --git a/thirdparty/SameBoy/Cocoa/GBSplitView.m b/thirdparty/SameBoy/Cocoa/GBSplitView.m index a56c24e69..d24d58065 100644 --- a/thirdparty/SameBoy/Cocoa/GBSplitView.m +++ b/thirdparty/SameBoy/Cocoa/GBSplitView.m @@ -8,7 +8,7 @@ @implementation GBSplitView - (void)setDividerColor:(NSColor *)color { _dividerColor = color; - [self setNeedsDisplay:YES]; + [self setNeedsDisplay:true]; } - (NSColor *)dividerColor diff --git a/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m b/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m index c1ed20368..e1ba95779 100644 --- a/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m +++ b/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m @@ -17,7 +17,7 @@ - (NSTextView *)fieldEditorForView:(NSView *)controlView return field_editor; } field_editor = [[GBTerminalTextView alloc] init]; - [field_editor setFieldEditor:YES]; + [field_editor setFieldEditor:true]; field_editor.gb = self.gb; return field_editor; } @@ -109,7 +109,7 @@ - (void)keyDown:(NSEvent *)event [self updateReverseSearch]; } else { - [self setNeedsDisplay:YES]; + [self setNeedsDisplay:true]; reverse_search_mode = true; } diff --git a/thirdparty/SameBoy/Cocoa/GBView.h b/thirdparty/SameBoy/Cocoa/GBView.h index f9aab83e7..01481a7d1 100644 --- a/thirdparty/SameBoy/Cocoa/GBView.h +++ b/thirdparty/SameBoy/Cocoa/GBView.h @@ -1,6 +1,7 @@ #import #include #import +#import "GBOSDView.h" @class Document; typedef enum { @@ -17,12 +18,14 @@ typedef enum { @property (nonatomic, weak) IBOutlet Document *document; @property (nonatomic) GB_gameboy_t *gb; @property (nonatomic) GB_frame_blending_mode_t frameBlendingMode; -@property (nonatomic, getter=isMouseHidingEnabled) BOOL mouseHidingEnabled; +@property (nonatomic, getter=isMouseHidingEnabled) bool mouseHidingEnabled; @property (nonatomic) bool isRewinding; @property (nonatomic, strong) NSView *internalView; +@property (weak) GBOSDView *osdView; - (void) createInternalView; - (uint32_t *)currentBuffer; - (uint32_t *)previousBuffer; - (void)screenSizeChanged; - (void)setRumble: (double)amp; +- (NSImage *)renderToImage; @end diff --git a/thirdparty/SameBoy/Cocoa/GBView.m b/thirdparty/SameBoy/Cocoa/GBView.m index 5c1922c5f..6c92c3f0b 100644 --- a/thirdparty/SameBoy/Cocoa/GBView.m +++ b/thirdparty/SameBoy/Cocoa/GBView.m @@ -106,9 +106,9 @@ @implementation GBView { uint32_t *image_buffers[3]; unsigned char current_buffer; - BOOL mouse_hidden; + bool mouse_hidden; NSTrackingArea *tracking_area; - BOOL _mouseHidingEnabled; + bool _mouseHidingEnabled; bool axisActive[2]; bool underclockKeyDown; double clockMultiplier; @@ -117,6 +117,7 @@ @implementation GBView NSEventModifierFlags previousModifiers; JOYController *lastController; GB_frame_blending_mode_t _frameBlendingMode; + bool _turbo; } + (instancetype)alloc @@ -182,7 +183,7 @@ - (void) ratioKeepingChanged - (void) setFrameBlendingMode:(GB_frame_blending_mode_t)frameBlendingMode { _frameBlendingMode = frameBlendingMode; - [self setNeedsDisplay:YES]; + [self setNeedsDisplay:true]; } @@ -259,6 +260,7 @@ - (void)setFrame:(NSRect)frame - (void) flip { if (analogClockMultiplierValid && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAnalogControls"]) { + clockMultiplier = 1.0; GB_set_clock_multiplier(_gb, analogClockMultiplier); if (self.document.partner) { GB_set_clock_multiplier(self.document.partner.gb, analogClockMultiplier); @@ -266,6 +268,12 @@ - (void) flip if (analogClockMultiplier == 1.0) { analogClockMultiplierValid = false; } + if (analogClockMultiplier < 2.0 && analogClockMultiplier > 1.0) { + GB_set_turbo_mode(_gb, false, false); + if (self.document.partner) { + GB_set_turbo_mode(self.document.partner.gb, false, false); + } + } } else { if (underclockKeyDown && clockMultiplier > 0.5) { @@ -283,6 +291,14 @@ - (void) flip } } } + if ((!analogClockMultiplierValid && clockMultiplier > 1) || + _turbo || (analogClockMultiplierValid && analogClockMultiplier > 1)) { + [self.osdView displayText:@"Fast forwarding..."]; + } + else if ((!analogClockMultiplierValid && clockMultiplier < 1) || + (analogClockMultiplierValid && analogClockMultiplier < 1)) { + [self.osdView displayText:@"Slow motion..."]; + } current_buffer = (current_buffer + 1) % self.numberOfBuffers; } @@ -329,6 +345,7 @@ -(void)keyDown:(NSEvent *)theEvent else { GB_set_turbo_mode(_gb, true, self.isRewinding); } + _turbo = true; analogClockMultiplierValid = false; break; @@ -336,6 +353,7 @@ -(void)keyDown:(NSEvent *)theEvent if (!self.document.partner) { self.isRewinding = true; GB_set_turbo_mode(_gb, false, false); + _turbo = false; } break; @@ -401,6 +419,7 @@ -(void)keyUp:(NSEvent *)theEvent else { GB_set_turbo_mode(_gb, false, false); } + _turbo = false; analogClockMultiplierValid = false; break; @@ -451,13 +470,13 @@ - (void)controller:(JOYController *)controller movedAxis:(JOYAxis *)axis if ((axis.usage == JOYAxisUsageR1 && !mapping) || axis.uniqueID == [mapping[@"AnalogUnderclock"] unsignedLongValue]){ - analogClockMultiplier = MIN(MAX(1 - axis.value + 0.2, 1.0 / 3), 1.0); + analogClockMultiplier = MIN(MAX(1 - axis.value + 0.05, 1.0 / 3), 1.0); analogClockMultiplierValid = true; } else if ((axis.usage == JOYAxisUsageL1 && !mapping) || axis.uniqueID == [mapping[@"AnalogTurbo"] unsignedLongValue]){ - analogClockMultiplier = MIN(MAX(axis.value * 3 + 0.8, 1.0), 3.0); + analogClockMultiplier = MIN(MAX(axis.value * 3 + 0.95, 1.0), 3.0); analogClockMultiplierValid = true; } } @@ -483,7 +502,7 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b continue; } dispatch_async(dispatch_get_main_queue(), ^{ - [controller setPlayerLEDs:1 << player]; + [controller setPlayerLEDs:[controller LEDMaskForPlayer:player]]; }); NSDictionary *mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitInstanceMapping"][controller.uniqueID]; if (!mapping) { @@ -534,17 +553,22 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b else { GB_set_turbo_mode(_gb, false, false); } + _turbo = false; } break; } case JOYButtonUsageL1: { - if (self.document.isSlave) { - GB_set_turbo_mode(self.document.partner.gb, button.isPressed, false); break; - } - else { - GB_set_turbo_mode(_gb, button.isPressed, button.isPressed && self.isRewinding); break; + if (!analogClockMultiplierValid || analogClockMultiplier == 1.0 || !button.isPressed) { + if (self.document.isSlave) { + GB_set_turbo_mode(self.document.partner.gb, button.isPressed, false); + } + else { + GB_set_turbo_mode(_gb, button.isPressed, button.isPressed && self.isRewinding); + } + _turbo = button.isPressed; } + break; } case JOYButtonUsageR1: underclockKeyDown = button.isPressed; break; @@ -561,7 +585,7 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b - (BOOL)acceptsFirstResponder { - return YES; + return true; } - (void)mouseEntered:(NSEvent *)theEvent @@ -586,7 +610,7 @@ - (void)mouseExited:(NSEvent *)theEvent [super mouseExited:theEvent]; } -- (void)setMouseHidingEnabled:(BOOL)mouseHidingEnabled +- (void)setMouseHidingEnabled:(bool)mouseHidingEnabled { if (mouseHidingEnabled == _mouseHidingEnabled) return; @@ -601,7 +625,7 @@ - (void)setMouseHidingEnabled:(BOOL)mouseHidingEnabled } } -- (BOOL)isMouseHidingEnabled +- (bool)isMouseHidingEnabled { return _mouseHidingEnabled; } @@ -634,7 +658,7 @@ -(NSDragOperation)draggingEntered:(id)sender if ( [[pboard types] containsObject:NSURLPboardType] ) { NSURL *fileURL = [NSURL URLFromPasteboard:pboard]; - if (GB_is_stave_state(fileURL.fileSystemRepresentation)) { + if (GB_is_save_state(fileURL.fileSystemRepresentation)) { return NSDragOperationGeneric; } } @@ -647,10 +671,16 @@ -(BOOL)performDragOperation:(id)sender if ( [[pboard types] containsObject:NSURLPboardType] ) { NSURL *fileURL = [NSURL URLFromPasteboard:pboard]; - return [_document loadStateFile:fileURL.fileSystemRepresentation]; + return [_document loadStateFile:fileURL.fileSystemRepresentation noErrorOnNotFound:false]; } return false; } +- (NSImage *)renderToImage; +{ + /* Not going to support this on OpenGL, OpenGL is too much of a terrible API for me + to bother figuring out how the hell something so trivial can be done. */ + return nil; +} @end diff --git a/thirdparty/SameBoy/Cocoa/GBViewGL.m b/thirdparty/SameBoy/Cocoa/GBViewGL.m index b80973e40..dda85843e 100644 --- a/thirdparty/SameBoy/Cocoa/GBViewGL.m +++ b/thirdparty/SameBoy/Cocoa/GBViewGL.m @@ -19,7 +19,7 @@ - (void)createInternalView NSOpenGLContext *context = [[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil]; self.internalView = [[GBOpenGLView alloc] initWithFrame:self.frame pixelFormat:pf]; - ((GBOpenGLView *)self.internalView).wantsBestResolutionOpenGLSurface = YES; + ((GBOpenGLView *)self.internalView).wantsBestResolutionOpenGLSurface = true; ((GBOpenGLView *)self.internalView).openGLContext = context; } @@ -27,8 +27,8 @@ - (void)flip { [super flip]; dispatch_async(dispatch_get_main_queue(), ^{ - [self.internalView setNeedsDisplay:YES]; - [self setNeedsDisplay:YES]; + [self.internalView setNeedsDisplay:true]; + [self setNeedsDisplay:true]; }); } diff --git a/thirdparty/SameBoy/Cocoa/GBViewMetal.m b/thirdparty/SameBoy/Cocoa/GBViewMetal.m index 580db2ca3..ae7443f6b 100644 --- a/thirdparty/SameBoy/Cocoa/GBViewMetal.m +++ b/thirdparty/SameBoy/Cocoa/GBViewMetal.m @@ -1,3 +1,4 @@ +#import #import "GBViewMetal.h" #pragma clang diagnostic ignored "-Wpartial-availability" @@ -51,8 +52,9 @@ - (void)createInternalView MTKView *view = [[MTKView alloc] initWithFrame:self.frame device:(device = MTLCreateSystemDefaultDevice())]; view.delegate = self; self.internalView = view; - view.paused = YES; - view.enableSetNeedsDisplay = YES; + view.paused = true; + view.enableSetNeedsDisplay = true; + view.framebufferOnly = false; vertices = [device newBufferWithBytes:rect length:sizeof(rect) @@ -92,7 +94,7 @@ - (void) loadShader withString:scaler_source]; MTLCompileOptions *options = [[MTLCompileOptions alloc] init]; - options.fastMathEnabled = YES; + options.fastMathEnabled = true; id library = [device newLibraryWithSource:shader_source options:options error:&error]; @@ -208,8 +210,23 @@ - (void)flip { [super flip]; dispatch_async(dispatch_get_main_queue(), ^{ - [(MTKView *)self.internalView setNeedsDisplay:YES]; + [(MTKView *)self.internalView setNeedsDisplay:true]; }); } +- (NSImage *)renderToImage +{ + CIImage *ciImage = [CIImage imageWithMTLTexture:[[(MTKView *)self.internalView currentDrawable] texture] + options:@{ + kCIImageColorSpace: (__bridge_transfer id)CGColorSpaceCreateDeviceRGB() + }]; + ciImage = [ciImage imageByApplyingTransform:CGAffineTransformTranslate(CGAffineTransformMakeScale(1, -1), + 0, ciImage.extent.size.height)]; + CIContext *context = [CIContext context]; + CGImageRef cgImage = [context createCGImage:ciImage fromRect:ciImage.extent]; + NSImage *ret = [[NSImage alloc] initWithCGImage:cgImage size:self.internalView.bounds.size]; + CGImageRelease(cgImage); + return ret; +} + @end diff --git a/thirdparty/SameBoy/Cocoa/GBVisualizerView.h b/thirdparty/SameBoy/Cocoa/GBVisualizerView.h index 43cda4bfe..5ee4638e5 100644 --- a/thirdparty/SameBoy/Cocoa/GBVisualizerView.h +++ b/thirdparty/SameBoy/Cocoa/GBVisualizerView.h @@ -1,11 +1,3 @@ -// -// GBVisualizerView.h -// SameBoySDL -// -// Created by Lior Halphon on 7/4/21. -// Copyright © 2021 Lior Halphon. All rights reserved. -// - #import #include diff --git a/thirdparty/SameBoy/Cocoa/GBVisualizerView.m b/thirdparty/SameBoy/Cocoa/GBVisualizerView.m index c09cfe1ef..61688e628 100644 --- a/thirdparty/SameBoy/Cocoa/GBVisualizerView.m +++ b/thirdparty/SameBoy/Cocoa/GBVisualizerView.m @@ -1,11 +1,3 @@ -// -// GBVisualizerView.m -// SameBoySDL -// -// Created by Lior Halphon on 7/4/21. -// Copyright © 2021 Lior Halphon. All rights reserved. -// - #import "GBVisualizerView.h" #include diff --git a/thirdparty/SameBoy/Cocoa/GBWarningPopover.m b/thirdparty/SameBoy/Cocoa/GBWarningPopover.m index 411e38837..74f6444da 100644 --- a/thirdparty/SameBoy/Cocoa/GBWarningPopover.m +++ b/thirdparty/SameBoy/Cocoa/GBWarningPopover.m @@ -10,7 +10,7 @@ + (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView * lastPopover = [[self alloc] init]; [lastPopover setBehavior:NSPopoverBehaviorApplicationDefined]; - [lastPopover setAnimates:YES]; + [lastPopover setAnimates:true]; lastPopover.contentViewController = [[NSViewController alloc] initWithNibName:@"PopoverView" bundle:nil]; NSTextField *field = (NSTextField *)lastPopover.contentViewController.view; [field setStringValue:contents]; @@ -20,7 +20,7 @@ + (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView * [lastPopover setContentSize:textSize]; if (!view.window.isVisible) { - [view.window setIsVisible:YES]; + [view.window setIsVisible:true]; } [lastPopover showRelativeToRect:view.bounds diff --git a/thirdparty/SameBoy/Cocoa/MainMenu.xib b/thirdparty/SameBoy/Cocoa/MainMenu.xib index 04bcf8f83..348e9605a 100644 --- a/thirdparty/SameBoy/Cocoa/MainMenu.xib +++ b/thirdparty/SameBoy/Cocoa/MainMenu.xib @@ -316,6 +316,23 @@ + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/Preferences.xib b/thirdparty/SameBoy/Cocoa/Preferences.xib index ce3cb7c77..6d726521a 100644 --- a/thirdparty/SameBoy/Cocoa/Preferences.xib +++ b/thirdparty/SameBoy/Cocoa/Preferences.xib @@ -13,6 +13,9 @@ + + + @@ -21,10 +24,10 @@ - + - + @@ -49,17 +52,25 @@ + + + + + + + + @@ -79,19 +90,21 @@ + + - + - - + + @@ -99,8 +112,8 @@ - - + + @@ -135,9 +148,20 @@ + - - + + @@ -145,8 +169,8 @@ - - + + @@ -159,6 +183,7 @@ + @@ -166,9 +191,26 @@ + + + + + + + + + + + + + + + + + - - + + @@ -176,8 +218,8 @@ - - + + @@ -196,8 +238,8 @@ - - + + @@ -205,8 +247,8 @@ - - + + @@ -226,8 +268,8 @@ - - + + @@ -235,8 +277,8 @@ - - + + @@ -254,26 +296,9 @@ - - - - - - - - - - - - - - - - - + - + - + - - + + @@ -299,8 +335,8 @@ - - + + @@ -308,8 +344,8 @@ - - + + @@ -317,8 +353,8 @@ - - + + @@ -326,8 +362,8 @@ - - + + @@ -345,8 +381,8 @@ - - + + @@ -354,8 +390,8 @@ - - + + @@ -375,8 +411,8 @@ - - + + @@ -384,12 +420,12 @@ - - + + - - + + @@ -406,8 +442,8 @@ - - + + @@ -425,8 +461,8 @@ - - + + @@ -449,8 +485,8 @@ - - + + @@ -476,12 +512,29 @@ - + + + + + + + + + + + + + + + + + + - - + + @@ -500,8 +553,8 @@ - - + + @@ -509,8 +562,8 @@ - - + + @@ -518,18 +571,18 @@ - - + + - + - + - + @@ -542,8 +595,8 @@ - - + + @@ -551,14 +604,14 @@ - - + + - + - + @@ -577,7 +630,7 @@ - + @@ -609,8 +662,8 @@ - - + + @@ -618,8 +671,8 @@ - - + + @@ -634,8 +687,8 @@ - - + + @@ -666,8 +719,8 @@ - - + + @@ -684,8 +737,8 @@ + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/UpdateWindow.xib b/thirdparty/SameBoy/Cocoa/UpdateWindow.xib new file mode 100644 index 000000000..e34f8f219 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/UpdateWindow.xib @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Core/apu.c b/thirdparty/SameBoy/Core/apu.c index b159b2ea2..537ae0168 100644 --- a/thirdparty/SameBoy/Core/apu.c +++ b/thirdparty/SameBoy/Core/apu.c @@ -289,6 +289,19 @@ static void update_square_sample(GB_gameboy_t *gb, unsigned index) 0); } +static inline void update_wave_sample(GB_gameboy_t *gb, unsigned cycles) +{ + if (gb->apu.wave_channel.current_sample_index & 1) { + update_sample(gb, GB_WAVE, + (gb->apu.wave_channel.current_sample_byte & 0xF) >> gb->apu.wave_channel.shift, + cycles); + } + else { + update_sample(gb, GB_WAVE, + (gb->apu.wave_channel.current_sample_byte >> 4) >> gb->apu.wave_channel.shift, + cycles); + } +} /* the effects of NRX2 writes on current volume are not well documented and differ between models and variants. The exact behavior can only be verified on CGB as it @@ -516,6 +529,16 @@ void GB_apu_div_event(GB_gameboy_t *gb) if (gb->apu.wave_channel.length_enabled) { if (gb->apu.wave_channel.pulse_length) { if (!--gb->apu.wave_channel.pulse_length) { + if (gb->apu.is_active[GB_WAVE] && gb->model == GB_MODEL_AGB) { + if (gb->apu.wave_channel.sample_countdown == 0) { + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (((gb->apu.wave_channel.current_sample_index + 1) & 0xF) >> 1)]; + } + else if (gb->apu.wave_channel.sample_countdown == 9) { + // TODO: wtf? + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START]; + } + } gb->apu.is_active[GB_WAVE] = false; update_sample(gb, GB_WAVE, 0, 0); } @@ -583,6 +606,12 @@ void GB_apu_run(GB_gameboy_t *gb) gb->apu.apu_cycles = 0; if (!cycles) return; + if (unlikely(gb->apu.channel_3_delayed_bugged_read)) { + gb->apu.channel_3_delayed_bugged_read = false; + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (gb->address_bus & 0xF)]; + } + bool start_ch4 = false; if (likely(!gb->stopped || GB_is_cgb(gb))) { if (gb->apu.channel_4_dmg_delayed_start) { @@ -665,11 +694,9 @@ void GB_apu_run(GB_gameboy_t *gb) gb->apu.wave_channel.sample_countdown = gb->apu.wave_channel.sample_length ^ 0x7FF; gb->apu.wave_channel.current_sample_index++; gb->apu.wave_channel.current_sample_index &= 0x1F; - gb->apu.wave_channel.current_sample = - gb->apu.wave_channel.wave_form[gb->apu.wave_channel.current_sample_index]; - update_sample(gb, GB_WAVE, - gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift, - cycles - cycles_left); + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (gb->apu.wave_channel.current_sample_index >> 1)]; + update_wave_sample(gb, cycles - cycles_left); gb->apu.wave_channel.wave_form_just_read = true; } if (cycles_left) { @@ -677,6 +704,23 @@ void GB_apu_run(GB_gameboy_t *gb) gb->apu.wave_channel.wave_form_just_read = false; } } + else if (gb->apu.wave_channel.enable && gb->apu.channel_3_pulsed && gb->model < GB_MODEL_AGB) { + uint8_t cycles_left = cycles; + while (unlikely(cycles_left > gb->apu.wave_channel.sample_countdown)) { + cycles_left -= gb->apu.wave_channel.sample_countdown + 1; + gb->apu.wave_channel.sample_countdown = gb->apu.wave_channel.sample_length ^ 0x7FF; + if (cycles_left) { + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (gb->address_bus & 0xF)]; + } + else { + gb->apu.channel_3_delayed_bugged_read = true; + } + } + if (cycles_left) { + gb->apu.wave_channel.sample_countdown -= cycles_left; + } + } // The noise channel can step even if inactive on the DMG if (gb->apu.is_active[GB_NOISE] || !GB_is_cgb(gb)) { @@ -729,12 +773,8 @@ void GB_apu_run(GB_gameboy_t *gb) void GB_apu_init(GB_gameboy_t *gb) { memset(&gb->apu, 0, sizeof(gb->apu)); - /* Restore the wave form */ - for (unsigned reg = GB_IO_WAV_START; reg <= GB_IO_WAV_END; reg++) { - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2] = gb->io_registers[reg] >> 4; - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2 + 1] = gb->io_registers[reg] & 0xF; - } gb->apu.lf_div = 1; + gb->apu.wave_channel.shift = 4; /* APU glitch: When turning the APU on while DIV's bit 4 (or 5 in double speed mode) is on, the first DIV/APU event is skipped. */ if (gb->div_counter & (gb->cgb_double_speed? 0x2000 : 0x1000)) { @@ -922,7 +962,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) } if (reg >= GB_IO_WAV_START && reg <= GB_IO_WAV_END && gb->apu.is_active[GB_WAVE]) { - if (!GB_is_cgb(gb) && !gb->apu.wave_channel.wave_form_just_read) { + if ((!GB_is_cgb(gb) && !gb->apu.wave_channel.wave_form_just_read) || gb->model == GB_MODEL_AGB) { return; } reg = GB_IO_WAV_START + gb->apu.wave_channel.current_sample_index / 2; @@ -1059,7 +1099,6 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) if (!(value & 4) && !(((gb->apu.square_channels[index].sample_countdown - 1) / 2) & 0x400)) { gb->apu.square_channels[index].current_sample_index++; gb->apu.square_channels[index].current_sample_index &= 0x7; - gb->apu.is_active[index] = true; } /* Todo: verify with the schematics what's going on in here */ else if (gb->apu.square_channels[index].sample_length == 0x7FF && @@ -1150,6 +1189,16 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR30: gb->apu.wave_channel.enable = value & 0x80; if (!gb->apu.wave_channel.enable) { + gb->apu.channel_3_pulsed = false; + if (gb->apu.is_active[GB_WAVE]) { + // Todo: I assume this happens on pre-CGB models; test this with an audible test + if (gb->apu.wave_channel.sample_countdown == 0 && gb->model < GB_MODEL_AGB) { + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START + (gb->pc & 0xF)]; + } + else if (gb->apu.wave_channel.wave_form_just_read && gb->model <= GB_MODEL_CGB_C) { + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START + (GB_IO_NR30 & 0xF)]; + } + } gb->apu.is_active[GB_WAVE] = false; update_sample(gb, GB_WAVE, 0, 0); } @@ -1160,7 +1209,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR32: gb->apu.wave_channel.shift = (uint8_t[]){4, 0, 1, 2}[(value >> 5) & 3]; if (gb->apu.is_active[GB_WAVE]) { - update_sample(gb, GB_WAVE, gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift, 0); + update_wave_sample(gb, 0); } break; case GB_IO_NR33: @@ -1170,13 +1219,13 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR34: gb->apu.wave_channel.sample_length &= 0xFF; gb->apu.wave_channel.sample_length |= (value & 7) << 8; - if ((value & 0x80)) { + if (value & 0x80) { + gb->apu.channel_3_pulsed = true; /* DMG bug: wave RAM gets corrupted if the channel is retriggerred 1 cycle before the APU reads from it. */ if (!GB_is_cgb(gb) && gb->apu.is_active[GB_WAVE] && - gb->apu.wave_channel.sample_countdown == 0 && - gb->apu.wave_channel.enable) { + gb->apu.wave_channel.sample_countdown == 0) { unsigned offset = ((gb->apu.wave_channel.current_sample_index + 1) >> 1) & 0xF; /* This glitch varies between models and even specific instances: @@ -1188,26 +1237,24 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) are all deterministic. */ if (offset < 4) { gb->io_registers[GB_IO_WAV_START] = gb->io_registers[GB_IO_WAV_START + offset]; - gb->apu.wave_channel.wave_form[0] = gb->apu.wave_channel.wave_form[offset / 2]; - gb->apu.wave_channel.wave_form[1] = gb->apu.wave_channel.wave_form[offset / 2 + 1]; } else { memcpy(gb->io_registers + GB_IO_WAV_START, gb->io_registers + GB_IO_WAV_START + (offset & ~3), 4); - memcpy(gb->apu.wave_channel.wave_form, - gb->apu.wave_channel.wave_form + (offset & ~3) * 2, - 8); } } - if (!gb->apu.is_active[GB_WAVE]) { + gb->apu.wave_channel.current_sample_index = 0; + if (gb->apu.is_active[GB_WAVE] && gb->apu.wave_channel.sample_countdown == 0) { + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START]; + } + if (gb->apu.wave_channel.enable) { gb->apu.is_active[GB_WAVE] = true; update_sample(gb, GB_WAVE, - gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift, + (gb->apu.wave_channel.current_sample_byte >> 4) >> gb->apu.wave_channel.shift, 0); } gb->apu.wave_channel.sample_countdown = (gb->apu.wave_channel.sample_length ^ 0x7FF) + 3; - gb->apu.wave_channel.current_sample_index = 0; if (gb->apu.wave_channel.pulse_length == 0) { gb->apu.wave_channel.pulse_length = 0x100; gb->apu.wave_channel.length_enabled = false; @@ -1232,10 +1279,6 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) } } gb->apu.wave_channel.length_enabled = value & 0x40; - if (gb->apu.is_active[GB_WAVE] && !gb->apu.wave_channel.enable) { - gb->apu.is_active[GB_WAVE] = false; - update_sample(gb, GB_WAVE, 0, 0); - } break; @@ -1401,12 +1444,6 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) gb->apu.noise_channel.length_enabled = value & 0x40; break; } - - default: - if (reg >= GB_IO_WAV_START && reg <= GB_IO_WAV_END) { - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2] = value >> 4; - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2 + 1] = value & 0xF; - } } gb->io_registers[reg] = value; } diff --git a/thirdparty/SameBoy/Core/apu.h b/thirdparty/SameBoy/Core/apu.h index e44b0b6ff..ead4088ae 100644 --- a/thirdparty/SameBoy/Core/apu.h +++ b/thirdparty/SameBoy/Core/apu.h @@ -99,9 +99,9 @@ typedef struct uint16_t sample_countdown; // in APU ticks (Reloaded from sample_length, xorred $7FF) uint8_t current_sample_index; - uint8_t current_sample; // Current sample before shifting. + uint8_t current_sample_byte; // Current sample byte. - int8_t wave_form[32]; + GB_PADDING(int8_t, wave_form)[32]; bool wave_form_just_read; } wave_channel; @@ -122,6 +122,7 @@ typedef struct } noise_channel; + /* Todo: merge these into their structs when breaking save state compatibility */ #define GB_SKIP_DIV_EVENT_INACTIVE 0 #define GB_SKIP_DIV_EVENT_SKIPPED 1 #define GB_SKIP_DIV_EVENT_SKIP 2 @@ -136,6 +137,8 @@ typedef struct GB_envelope_clock_t square_envelope_clock[2]; GB_envelope_clock_t noise_envelope_clock; + bool channel_3_pulsed; + bool channel_3_delayed_bugged_read; } GB_apu_t; typedef enum { @@ -184,7 +187,6 @@ void GB_apu_div_secondary_event(GB_gameboy_t *gb); void GB_apu_init(GB_gameboy_t *gb); void GB_apu_run(GB_gameboy_t *gb); void GB_apu_update_cycles_per_sample(GB_gameboy_t *gb); -void GB_borrow_sgb_border(GB_gameboy_t *gb); #endif #endif /* apu_h */ diff --git a/thirdparty/SameBoy/Core/debugger.c b/thirdparty/SameBoy/Core/debugger.c index 371a86521..db4b02fd9 100644 --- a/thirdparty/SameBoy/Core/debugger.c +++ b/thirdparty/SameBoy/Core/debugger.c @@ -428,23 +428,23 @@ static lvalue_t debugger_evaluate_lvalue(GB_gameboy_t *gb, const char *string, if (string[0] != '$' && (string[0] < '0' || string[0] > '9')) { if (length == 1) { switch (string[0]) { - case 'a': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->registers[GB_REGISTER_AF]}; - case 'f': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->registers[GB_REGISTER_AF]}; - case 'b': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->registers[GB_REGISTER_BC]}; - case 'c': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->registers[GB_REGISTER_BC]}; - case 'd': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->registers[GB_REGISTER_DE]}; - case 'e': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->registers[GB_REGISTER_DE]}; - case 'h': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->registers[GB_REGISTER_HL]}; - case 'l': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->registers[GB_REGISTER_HL]}; + case 'a': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->af}; + case 'f': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->af}; + case 'b': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->bc}; + case 'c': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->bc}; + case 'd': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->de}; + case 'e': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->de}; + case 'h': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->hl}; + case 'l': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->hl}; } } else if (length == 2) { switch (string[0]) { - case 'a': if (string[1] == 'f') return (lvalue_t){LVALUE_REG16, .register_address = &gb->registers[GB_REGISTER_AF]}; - case 'b': if (string[1] == 'c') return (lvalue_t){LVALUE_REG16, .register_address = &gb->registers[GB_REGISTER_BC]}; - case 'd': if (string[1] == 'e') return (lvalue_t){LVALUE_REG16, .register_address = &gb->registers[GB_REGISTER_DE]}; - case 'h': if (string[1] == 'l') return (lvalue_t){LVALUE_REG16, .register_address = &gb->registers[GB_REGISTER_HL]}; - case 's': if (string[1] == 'p') return (lvalue_t){LVALUE_REG16, .register_address = &gb->registers[GB_REGISTER_SP]}; + case 'a': if (string[1] == 'f') return (lvalue_t){LVALUE_REG16, .register_address = &gb->af}; + case 'b': if (string[1] == 'c') return (lvalue_t){LVALUE_REG16, .register_address = &gb->bc}; + case 'd': if (string[1] == 'e') return (lvalue_t){LVALUE_REG16, .register_address = &gb->de}; + case 'h': if (string[1] == 'l') return (lvalue_t){LVALUE_REG16, .register_address = &gb->hl}; + case 's': if (string[1] == 'p') return (lvalue_t){LVALUE_REG16, .register_address = &gb->sp}; case 'p': if (string[1] == 'c') return (lvalue_t){LVALUE_REG16, .register_address = &gb->pc}; } } @@ -606,23 +606,23 @@ value_t debugger_evaluate(GB_gameboy_t *gb, const char *string, if (string[0] != '$' && (string[0] < '0' || string[0] > '9')) { if (length == 1) { switch (string[0]) { - case 'a': ret = VALUE_16(gb->registers[GB_REGISTER_AF] >> 8); goto exit; - case 'f': ret = VALUE_16(gb->registers[GB_REGISTER_AF] & 0xFF); goto exit; - case 'b': ret = VALUE_16(gb->registers[GB_REGISTER_BC] >> 8); goto exit; - case 'c': ret = VALUE_16(gb->registers[GB_REGISTER_BC] & 0xFF); goto exit; - case 'd': ret = VALUE_16(gb->registers[GB_REGISTER_DE] >> 8); goto exit; - case 'e': ret = VALUE_16(gb->registers[GB_REGISTER_DE] & 0xFF); goto exit; - case 'h': ret = VALUE_16(gb->registers[GB_REGISTER_HL] >> 8); goto exit; - case 'l': ret = VALUE_16(gb->registers[GB_REGISTER_HL] & 0xFF); goto exit; + case 'a': ret = VALUE_16(gb->af >> 8); goto exit; + case 'f': ret = VALUE_16(gb->af & 0xFF); goto exit; + case 'b': ret = VALUE_16(gb->bc >> 8); goto exit; + case 'c': ret = VALUE_16(gb->bc & 0xFF); goto exit; + case 'd': ret = VALUE_16(gb->de >> 8); goto exit; + case 'e': ret = VALUE_16(gb->de & 0xFF); goto exit; + case 'h': ret = VALUE_16(gb->hl >> 8); goto exit; + case 'l': ret = VALUE_16(gb->hl & 0xFF); goto exit; } } else if (length == 2) { switch (string[0]) { - case 'a': if (string[1] == 'f') {ret = VALUE_16(gb->registers[GB_REGISTER_AF]); goto exit;} - case 'b': if (string[1] == 'c') {ret = VALUE_16(gb->registers[GB_REGISTER_BC]); goto exit;} - case 'd': if (string[1] == 'e') {ret = VALUE_16(gb->registers[GB_REGISTER_DE]); goto exit;} - case 'h': if (string[1] == 'l') {ret = VALUE_16(gb->registers[GB_REGISTER_HL]); goto exit;} - case 's': if (string[1] == 'p') {ret = VALUE_16(gb->registers[GB_REGISTER_SP]); goto exit;} + case 'a': if (string[1] == 'f') {ret = VALUE_16(gb->af); goto exit;} + case 'b': if (string[1] == 'c') {ret = VALUE_16(gb->bc); goto exit;} + case 'd': if (string[1] == 'e') {ret = VALUE_16(gb->de); goto exit;} + case 'h': if (string[1] == 'l') {ret = VALUE_16(gb->hl); goto exit;} + case 's': if (string[1] == 'p') {ret = VALUE_16(gb->sp); goto exit;} case 'p': if (string[1] == 'c') {ret = (value_t){true, bank_for_addr(gb, gb->pc), gb->pc}; goto exit;} } } @@ -811,15 +811,15 @@ static bool registers(GB_gameboy_t *gb, char *arguments, char *modifiers, const } - GB_log(gb, "AF = $%04x (%c%c%c%c)\n", gb->registers[GB_REGISTER_AF], /* AF can't really be an address */ + GB_log(gb, "AF = $%04x (%c%c%c%c)\n", gb->af, /* AF can't really be an address */ (gb->f & GB_CARRY_FLAG)? 'C' : '-', (gb->f & GB_HALF_CARRY_FLAG)? 'H' : '-', (gb->f & GB_SUBTRACT_FLAG)? 'N' : '-', (gb->f & GB_ZERO_FLAG)? 'Z' : '-'); - GB_log(gb, "BC = %s\n", value_to_string(gb, gb->registers[GB_REGISTER_BC], false)); - GB_log(gb, "DE = %s\n", value_to_string(gb, gb->registers[GB_REGISTER_DE], false)); - GB_log(gb, "HL = %s\n", value_to_string(gb, gb->registers[GB_REGISTER_HL], false)); - GB_log(gb, "SP = %s\n", value_to_string(gb, gb->registers[GB_REGISTER_SP], false)); + GB_log(gb, "BC = %s\n", value_to_string(gb, gb->bc, false)); + GB_log(gb, "DE = %s\n", value_to_string(gb, gb->de, false)); + GB_log(gb, "HL = %s\n", value_to_string(gb, gb->hl, false)); + GB_log(gb, "SP = %s\n", value_to_string(gb, gb->sp, false)); GB_log(gb, "PC = %s\n", value_to_string(gb, gb->pc, false)); GB_log(gb, "IME = %s\n", gb->ime? "Enabled" : "Disabled"); return true; @@ -1550,7 +1550,7 @@ static bool mbc(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg if (cartridge->has_ram) { GB_log(gb, "Current mapped RAM bank: %x\n", gb->mbc_ram_bank); if (gb->cartridge_type->mbc_type != GB_HUC1) { - GB_log(gb, "RAM is curently %s\n", gb->mbc_ram_enable? "enabled" : "disabled"); + GB_log(gb, "RAM is currently %s\n", gb->mbc_ram_enable? "enabled" : "disabled"); } } if (cartridge->mbc_type == GB_MBC1 && gb->mbc1_wiring == GB_STANDARD_MBC1_WIRING) { @@ -1606,8 +1606,12 @@ static bool ticks(GB_gameboy_t *gb, char *arguments, char *modifiers, const debu return true; } - GB_log(gb, "Ticks: %llu. (Resetting)\n", (unsigned long long)gb->debugger_ticks); + GB_log(gb, "T-cycles: %llu\n", (unsigned long long)gb->debugger_ticks); + GB_log(gb, "M-cycles: %llu\n", (unsigned long long)gb->debugger_ticks / 4); + GB_log(gb, "Absolute 8MHz ticks: %llu\n", (unsigned long long)gb->absolute_debugger_ticks); + GB_log(gb, "Tick count reset.\n"); gb->debugger_ticks = 0; + gb->absolute_debugger_ticks = 0; return true; } @@ -1793,8 +1797,9 @@ static bool apu(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg GB_log(gb, "\nCH3:\n"); GB_log(gb, " Wave:"); - for (uint8_t i = 0; i < 32; i++) { - GB_log(gb, "%s%X", i%4?"":" ", gb->apu.wave_channel.wave_form[i]); + for (uint8_t i = 0; i < 16; i++) { + GB_log(gb, "%s%X", i % 2? "" : " ", gb->io_registers[GB_IO_WAV_START + i] >> 4); + GB_log(gb, "%X", gb->io_registers[GB_IO_WAV_START + i] & 0xF); } GB_log(gb, "\n"); GB_log(gb, " Current position: %u\n", gb->apu.wave_channel.current_sample_index); @@ -1876,11 +1881,14 @@ static bool wave(GB_gameboy_t *gb, char *arguments, char *modifiers, const debug for (int8_t cur_val = 0xf & mask; cur_val >= 0; cur_val -= shift_amount) { for (uint8_t i = 0; i < 32; i++) { - if ((gb->apu.wave_channel.wave_form[i] & mask) == cur_val) { - GB_log(gb, "%X", gb->apu.wave_channel.wave_form[i]); + uint8_t sample = i & 1? + (gb->io_registers[GB_IO_WAV_START + i / 2] & 0xF) : + (gb->io_registers[GB_IO_WAV_START + i / 2] >> 4); + if ((sample & mask) == cur_val) { + GB_log(gb, "%X", sample); } else { - GB_log(gb, "%c", i%4 == 2 ? '-' : ' '); + GB_log(gb, "%c", i % 4 == 2 ? '-' : ' '); } } GB_log(gb, "\n"); @@ -2035,7 +2043,7 @@ void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr) gb->debug_stopped = true; } else { - gb->sp_for_call_depth[gb->debug_call_depth] = gb->registers[GB_REGISTER_SP]; + gb->sp_for_call_depth[gb->debug_call_depth] = gb->sp; gb->addr_for_call_depth[gb->debug_call_depth] = gb->pc; } } @@ -2043,7 +2051,7 @@ void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr) if (gb->backtrace_size < sizeof(gb->backtrace_sps) / sizeof(gb->backtrace_sps[0])) { while (gb->backtrace_size) { - if (gb->backtrace_sps[gb->backtrace_size - 1] < gb->registers[GB_REGISTER_SP]) { + if (gb->backtrace_sps[gb->backtrace_size - 1] < gb->sp) { gb->backtrace_size--; } else { @@ -2051,7 +2059,7 @@ void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr) } } - gb->backtrace_sps[gb->backtrace_size] = gb->registers[GB_REGISTER_SP]; + gb->backtrace_sps[gb->backtrace_size] = gb->sp; gb->backtrace_returns[gb->backtrace_size].bank = bank_for_addr(gb, call_addr); gb->backtrace_returns[gb->backtrace_size].addr = call_addr; gb->backtrace_size++; @@ -2072,9 +2080,9 @@ void GB_debugger_ret_hook(GB_gameboy_t *gb) gb->debug_stopped = true; } else { - if (gb->registers[GB_REGISTER_SP] != gb->sp_for_call_depth[gb->debug_call_depth]) { + if (gb->sp != gb->sp_for_call_depth[gb->debug_call_depth]) { GB_log(gb, "Stack leak detected for function %s!\n", value_to_string(gb, gb->addr_for_call_depth[gb->debug_call_depth], true)); - GB_log(gb, "SP is $%04x, should be $%04x.\n", gb->registers[GB_REGISTER_SP], + GB_log(gb, "SP is $%04x, should be $%04x.\n", gb->sp, gb->sp_for_call_depth[gb->debug_call_depth]); gb->debug_stopped = true; } @@ -2082,7 +2090,7 @@ void GB_debugger_ret_hook(GB_gameboy_t *gb) } while (gb->backtrace_size) { - if (gb->backtrace_sps[gb->backtrace_size - 1] <= gb->registers[GB_REGISTER_SP]) { + if (gb->backtrace_sps[gb->backtrace_size - 1] <= gb->sp) { gb->backtrace_size--; } else { @@ -2239,7 +2247,6 @@ bool GB_debugger_execute_command(GB_gameboy_t *gb, char *input) } } -/* Returns true if debugger waits for more commands */ char *GB_debugger_complete_substring(GB_gameboy_t *gb, char *input, uintptr_t *context) { char *command_string = input; @@ -2560,13 +2567,13 @@ static bool condition_code(GB_gameboy_t *gb, uint8_t opcode) { switch ((opcode >> 3) & 0x3) { case 0: - return !(gb->registers[GB_REGISTER_AF] & GB_ZERO_FLAG); + return !(gb->af & GB_ZERO_FLAG); case 1: - return (gb->registers[GB_REGISTER_AF] & GB_ZERO_FLAG); + return (gb->af & GB_ZERO_FLAG); case 2: - return !(gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG); + return !(gb->af & GB_CARRY_FLAG); case 3: - return (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG); + return (gb->af & GB_CARRY_FLAG); } return false; @@ -2583,8 +2590,8 @@ static uint16_t jr_cc_r8(GB_gameboy_t *gb, uint8_t opcode) static uint16_t ret(GB_gameboy_t *gb, uint8_t opcode) { - return GB_read_memory(gb, gb->registers[GB_REGISTER_SP]) | - (GB_read_memory(gb, gb->registers[GB_REGISTER_SP] + 1) << 8); + return GB_read_memory(gb, gb->sp) | + (GB_read_memory(gb, gb->sp + 1) << 8); } @@ -2666,7 +2673,7 @@ static jump_to_return_t test_jump_to_breakpoints(GB_gameboy_t *gb, uint16_t *add if (!gb->has_jump_to_breakpoints) return JUMP_TO_NONE; if (!is_in_trivial_memory(gb->pc) || !is_in_trivial_memory(gb->pc + 2) || - !is_in_trivial_memory(gb->registers[GB_REGISTER_SP]) || !is_in_trivial_memory(gb->registers[GB_REGISTER_SP] + 1)) { + !is_in_trivial_memory(gb->sp) || !is_in_trivial_memory(gb->sp + 1)) { return JUMP_TO_NONTRIVIAL; } diff --git a/thirdparty/SameBoy/Core/display.c b/thirdparty/SameBoy/Core/display.c index b94ff26e7..aa958de49 100644 --- a/thirdparty/SameBoy/Core/display.c +++ b/thirdparty/SameBoy/Core/display.c @@ -292,12 +292,24 @@ uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border) new_r = new_r * 7 / 8 + ( g + b) / 16; new_g = new_g * 7 / 8 + (r + b) / 16; new_b = new_b * 7 / 8 + (r + g ) / 16; - new_r = new_r * (224 - 32) / 255 + 32; new_g = new_g * (220 - 36) / 255 + 36; new_b = new_b * (216 - 40) / 255 + 40; } + else if (gb->color_correction_mode == GB_COLOR_CORRECTION_LOW_CONTRAST) { + r = new_r; + g = new_r; + b = new_r; + + new_r = new_r * 7 / 8 + ( g + b) / 16; + new_g = new_g * 7 / 8 + (r + b) / 16; + new_b = new_b * 7 / 8 + (r + g ) / 16; + + new_r = new_r * (162 - 67) / 255 + 67; + new_g = new_g * (167 - 62) / 255 + 62; + new_b = new_b * (157 - 58) / 255 + 58; + } else if (gb->color_correction_mode == GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS) { uint8_t old_max = MAX(r, MAX(g, b)); uint8_t new_max = MAX(new_r, MAX(new_g, new_b)); @@ -620,7 +632,7 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) GB_FETCHER_SLEEP, } fetcher_step_t; - fetcher_step_t fetcher_state_machine [8] = { + static const fetcher_step_t fetcher_state_machine [8] = { GB_FETCHER_SLEEP, GB_FETCHER_GET_TILE, GB_FETCHER_SLEEP, @@ -654,7 +666,10 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) x = gb->window_tile_x; } else { - x = ((gb->io_registers[GB_IO_SCX] / 8) + gb->fetcher_x) & 0x1F; + /* TODO: There is some CGB timing error around here. + Adjusting SCX by 7 or less shouldn't have an effect on a CGB, + but SameBoy is affected by a change of both 7 and 6 (but not less). */ + x = ((gb->io_registers[GB_IO_SCX] + gb->position_in_line + 8) / 8) & 0x1F; } if (gb->model > GB_MODEL_CGB_C) { /* This value is cached on the CGB-D and newer, so it cannot be used to mix tiles together */ @@ -765,12 +780,6 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) // fallthrough case GB_FETCHER_PUSH: { - if (gb->fetcher_state == 6) { - /* The background map index increase at this specific point. If this state is not reached, - it will simply not increase. */ - gb->fetcher_x++; - gb->fetcher_x &= 0x1f; - } if (gb->fetcher_state < 7) { gb->fetcher_state++; } @@ -854,7 +863,7 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) GB_STATE(gb, display, 21); GB_STATE(gb, display, 22); GB_STATE(gb, display, 23); - // GB_STATE(gb, display, 24); + GB_STATE(gb, display, 24); GB_STATE(gb, display, 25); GB_STATE(gb, display, 26); GB_STATE(gb, display, 27); @@ -1037,7 +1046,6 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->position_in_line = - (gb->io_registers[GB_IO_SCX] & 7) - 8; gb->lcd_x = 0; - gb->fetcher_x = 0; gb->extra_penalty_for_sprite_at_0 = (gb->io_registers[GB_IO_SCX] & 7); @@ -1287,7 +1295,9 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->wy_triggered = true; } GB_SLEEP(gb, display, 31, 2); - gb->mode_for_interrupt = 2; + if (gb->current_line != LINES - 1) { + gb->mode_for_interrupt = 2; + } // Todo: unverified timing gb->current_lcd_line++; @@ -1305,20 +1315,22 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->io_registers[GB_IO_LY] = gb->current_line; gb->ly_for_comparison = -1; GB_SLEEP(gb, display, 26, 2); - if (gb->current_line == LINES) { - gb->mode_for_interrupt = 2; + if (gb->current_line == LINES && !gb->stat_interrupt_line && (gb->io_registers[GB_IO_STAT] & 0x20)) { + gb->io_registers[GB_IO_IF] |= 2; } - GB_STAT_update(gb); GB_SLEEP(gb, display, 12, 2); gb->ly_for_comparison = gb->current_line; - + GB_STAT_update(gb); + GB_SLEEP(gb, display, 24, 1); + if (gb->current_line == LINES) { /* Entering VBlank state triggers the OAM interrupt */ gb->io_registers[GB_IO_STAT] &= ~3; gb->io_registers[GB_IO_STAT] |= 1; gb->io_registers[GB_IO_IF] |= 1; - gb->mode_for_interrupt = 2; - GB_STAT_update(gb); + if (!gb->stat_interrupt_line && (gb->io_registers[GB_IO_STAT] & 0x20)) { + gb->io_registers[GB_IO_IF] |= 2; + } gb->mode_for_interrupt = 1; GB_STAT_update(gb); @@ -1350,8 +1362,7 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) } } - GB_STAT_update(gb); - GB_SLEEP(gb, display, 13, LINE_LENGTH - 4); + GB_SLEEP(gb, display, 13, LINE_LENGTH - 5); } /* TODO: Verified on SGB2 and CGB-E. Actual interrupt timings not tested. */ @@ -1515,7 +1526,7 @@ uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *sprite_h uint8_t count = 0; *sprite_height = (gb->io_registers[GB_IO_LCDC] & 4) ? 16:8; uint8_t oam_to_dest_index[40] = {0,}; - for (unsigned y = 0; y < LINES; y++) { + for (signed y = 0; y < LINES; y++) { GB_object_t *sprite = (GB_object_t *) &gb->oam; uint8_t sprites_in_line = 0; for (uint8_t i = 0; i < 40; i++, sprite++) { diff --git a/thirdparty/SameBoy/Core/display.h b/thirdparty/SameBoy/Core/display.h index fdaf172ad..c9411dc85 100644 --- a/thirdparty/SameBoy/Core/display.h +++ b/thirdparty/SameBoy/Core/display.h @@ -51,6 +51,7 @@ typedef enum { GB_COLOR_CORRECTION_EMULATE_HARDWARE, GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS, GB_COLOR_CORRECTION_REDUCE_CONTRAST, + GB_COLOR_CORRECTION_LOW_CONTRAST, } GB_color_correction_mode_t; void GB_draw_tileset(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette_type, uint8_t palette_index); diff --git a/thirdparty/SameBoy/Core/gb.c b/thirdparty/SameBoy/Core/gb.c index ae2a30c48..a845797a3 100644 --- a/thirdparty/SameBoy/Core/gb.c +++ b/thirdparty/SameBoy/Core/gb.c @@ -284,7 +284,7 @@ int GB_load_rom(GB_gameboy_t *gb, const char *path) gb->rom_size |= gb->rom_size >> 1; gb->rom_size++; } - if (gb->rom_size == 0) { + if (gb->rom_size < 0x8000) { gb->rom_size = 0x8000; } fseek(f, 0, SEEK_SET); @@ -302,6 +302,28 @@ int GB_load_rom(GB_gameboy_t *gb, const char *path) return 0; } +#define GBS_ENTRY 0x61 +#define GBS_ENTRY_SIZE 13 + +static void generate_gbs_entry(GB_gameboy_t *gb, uint8_t *data) +{ + memcpy(data, (uint8_t[]) { + 0xCD, // Call $XXXX + LE16(gb->gbs_header.init_address), + LE16(gb->gbs_header.init_address) >> 8, + 0x76, // HALT + 0x00, // NOP + 0xAF, // XOR a + 0xE0, // LDH [$FFXX], a + GB_IO_IF, + 0xCD, // Call $XXXX + LE16(gb->gbs_header.play_address), + LE16(gb->gbs_header.play_address) >> 8, + 0x18, // JR pc ± $XX + -10 // To HALT + }, GBS_ENTRY_SIZE); +} + void GB_gbs_switch_track(GB_gameboy_t *gb, uint8_t track) { GB_reset(gb); @@ -323,33 +345,49 @@ void GB_gbs_switch_track(GB_gameboy_t *gb, uint8_t track) if (gb->gbs_header.TAC & 0x80) { gb->cgb_double_speed = true; // Might mean double speed mode on a DMG } - gb->sp = LE16(gb->gbs_header.sp); - gb->pc = 0x100; + if (gb->gbs_header.load_address) { + gb->sp = LE16(gb->gbs_header.sp); + gb->pc = GBS_ENTRY; + } + else { + gb->pc = gb->sp = LE16(gb->gbs_header.sp - GBS_ENTRY_SIZE); + uint8_t entry[GBS_ENTRY_SIZE]; + generate_gbs_entry(gb, entry); + for (unsigned i = 0; i < sizeof(entry); i++) { + GB_write_memory(gb, gb->pc + i, entry[i]); + } + } + gb->boot_rom_finished = true; gb->a = track; if (gb->sgb) { gb->sgb->intro_animation = GB_SGB_INTRO_ANIMATION_LENGTH; gb->sgb->disable_commands = true; } + if (gb->gbs_header.TAC & 0x40) { + gb->interrupt_enable = true; + } } -int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info) +int GB_load_gbs_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size, GB_gbs_info_t *info) { - FILE *f = fopen(path, "rb"); - if (!f) { - GB_log(gb, "Could not open GBS: %s.\n", strerror(errno)); - return errno; + if (size < sizeof(gb->gbs_header)) { + GB_log(gb, "Not a valid GBS file.\n"); + return -1; } - fread(&gb->gbs_header, sizeof(gb->gbs_header), 1, f); + + memcpy(&gb->gbs_header, buffer, sizeof(gb->gbs_header)); + if (gb->gbs_header.magic != BE32('GBS\x01') || - LE16(gb->gbs_header.load_address) < 0x400 || - LE16(gb->gbs_header.load_address) >= 0x8000) { - GB_log(gb, "Not a valid GBS file: %s.\n", strerror(errno)); - fclose(f); + ((LE16(gb->gbs_header.load_address) < GBS_ENTRY + GBS_ENTRY_SIZE || + LE16(gb->gbs_header.load_address) >= 0x8000) && + LE16(gb->gbs_header.load_address) != 0)) { + GB_log(gb, "Not a valid GBS file.\n"); return -1; } - fseek(f, 0, SEEK_END); - size_t data_size = ftell(f) - sizeof(gb->gbs_header); + + size_t data_size = size - sizeof(gb->gbs_header); + gb->rom_size = (data_size + LE16(gb->gbs_header.load_address) + 0x3FFF) & ~0x3FFF; /* Round to bank */ /* And then round to a power of two */ while (gb->rom_size & (gb->rom_size - 1)) { @@ -358,22 +396,23 @@ int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info) gb->rom_size++; } - if (gb->rom_size == 0) { + if (gb->rom_size < 0x8000) { gb->rom_size = 0x8000; } - fseek(f, sizeof(gb->gbs_header), SEEK_SET); + if (gb->rom) { free(gb->rom); } + gb->rom = malloc(gb->rom_size); memset(gb->rom, 0xFF, gb->rom_size); /* Pad with 0xFFs */ - fread(gb->rom + LE16(gb->gbs_header.load_address), 1, data_size, f); - fclose(f); + memcpy(gb->rom + LE16(gb->gbs_header.load_address), buffer + sizeof(gb->gbs_header), data_size); gb->cartridge_type = &GB_cart_defs[0x11]; if (gb->mbc_ram) { free(gb->mbc_ram); gb->mbc_ram = NULL; + gb->mbc_ram_size = 0; } if (gb->cartridge_type->has_ram) { @@ -382,32 +421,23 @@ int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info) memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); } - // Generate interrupt handlers - for (unsigned i = 0; i <= 0x38; i += 8) { - gb->rom[i] = 0xc3; // jp $XXXX - gb->rom[i + 1] = (LE16(gb->gbs_header.load_address) + i); - gb->rom[i + 2] = (LE16(gb->gbs_header.load_address) + i) >> 8; - } - for (unsigned i = 0x40; i <= 0x60; i += 8) { - gb->rom[i] = 0xc9; // ret - } + bool has_interrupts = gb->gbs_header.TAC & 0x40; - // Generate entry - memcpy(gb->rom + 0x100, (uint8_t[]) { - 0xCD, // Call $XXXX - LE16(gb->gbs_header.init_address), - LE16(gb->gbs_header.init_address) >> 8, - 0x76, // HALT - 0x00, // NOP - 0xAF, // XOR a - 0xE0, // LDH [$FFXX], a - GB_IO_IF, - 0xCD, // Call $XXXX - LE16(gb->gbs_header.play_address), - LE16(gb->gbs_header.play_address) >> 8, - 0x18, // JR pc ± $XX - -10 // To HALT - }, 13); + if (gb->gbs_header.load_address) { + // Generate interrupt handlers + for (unsigned i = 0; i <= (has_interrupts? 0x50 : 0x38); i += 8) { + gb->rom[i] = 0xc3; // jp $XXXX + gb->rom[i + 1] = (LE16(gb->gbs_header.load_address) + i); + gb->rom[i + 2] = (LE16(gb->gbs_header.load_address) + i) >> 8; + } + for (unsigned i = has_interrupts? 0x58 : 0x40; i <= 0x60; i += 8) { + gb->rom[i] = 0xc9; // ret + } + + // Generate entry + generate_gbs_entry(gb, gb->rom + GBS_ENTRY); + } + GB_gbs_switch_track(gb, gb->gbs_header.first_track - 1); if (info) { @@ -425,6 +455,25 @@ int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info) return 0; } +int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + GB_log(gb, "Could not open GBS: %s.\n", strerror(errno)); + return errno; + } + fseek(f, 0, SEEK_END); + size_t file_size = MIN(ftell(f), sizeof(GB_gbs_header_t) + 0x4000 * 0x100); // Cap with the maximum MBC3 ROM size + GBS header + fseek(f, 0, SEEK_SET); + uint8_t *file_data = malloc(file_size); + fread(file_data, 1, file_size, f); + fclose(f); + + int r = GB_load_gbs_from_buffer(gb, file_data, file_size, info); + free(file_data); + return r; +} + int GB_load_isx(GB_gameboy_t *gb, const char *path) { FILE *f = fopen(path, "rb"); @@ -1150,7 +1199,7 @@ uint8_t GB_run(GB_gameboy_t *gb) { gb->vblank_just_occured = false; - if (gb->sgb && gb->sgb->intro_animation < 140) { + if (gb->sgb && gb->sgb->intro_animation < 96) { /* On the SGB, the GB is halted after finishing the boot ROM. Then, after the boot animation is almost done, it's reset. Since the SGB HLE does not perform any header validity checks, @@ -1487,18 +1536,13 @@ static void reset_ram(GB_gameboy_t *gb) case GB_MODEL_SGB_PAL_NO_SFC: /* Unverified */ case GB_MODEL_SGB2: case GB_MODEL_SGB2_NO_SFC: { - uint8_t temp; for (unsigned i = 0; i < GB_IO_WAV_END - GB_IO_WAV_START; i++) { if (i & 1) { - temp = GB_random() & GB_random() & GB_random(); + gb->io_registers[GB_IO_WAV_START + i] = GB_random() & GB_random() & GB_random(); } else { - temp = GB_random() | GB_random() | GB_random(); + gb->io_registers[GB_IO_WAV_START + i] = GB_random() | GB_random() | GB_random(); } - gb->apu.wave_channel.wave_form[i * 2] = temp >> 4; - gb->apu.wave_channel.wave_form[i * 2 + 1] = temp & 0xF; - gb->io_registers[GB_IO_WAV_START + i] = temp; - } break; } @@ -1554,7 +1598,10 @@ void GB_reset(GB_gameboy_t *gb) { uint32_t mbc_ram_size = gb->mbc_ram_size; GB_model_t model = gb->model; + uint8_t rtc_section[GB_SECTION_SIZE(rtc)]; + memcpy(rtc_section, GB_GET_SECTION(gb, rtc), sizeof(rtc_section)); memset(gb, 0, (size_t)GB_GET_SECTION((GB_gameboy_t *) 0, unsaved)); + memcpy(GB_GET_SECTION(gb, rtc), rtc_section, sizeof(rtc_section)); gb->model = model; gb->version = GB_STRUCT_VERSION; @@ -1826,3 +1873,71 @@ void GB_set_rtc_mode(GB_gameboy_t *gb, GB_rtc_mode_t mode) gb->last_rtc_second = time(NULL); } } + +void GB_get_rom_title(GB_gameboy_t *gb, char *title) +{ + memset(title, 0, 17); + if (gb->rom_size >= 0x4000) { + for (unsigned i = 0; i < 0x10; i++) { + if (gb->rom[0x134 + i] < 0x20 || gb->rom[0x134 + i] >= 0x80) break; + title[i] = gb->rom[0x134 + i]; + } + } +} + +uint32_t GB_get_rom_crc32(GB_gameboy_t *gb) +{ + static const uint32_t table[] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + }; + + const uint8_t *byte = gb->rom; + uint32_t size = gb->rom_size; + uint32_t ret = 0xFFFFFFFF; + while (size--) { + ret = table[(ret ^ *byte++) & 0xFF] ^ (ret >> 8); + } + return ~ret; +} diff --git a/thirdparty/SameBoy/Core/gb.h b/thirdparty/SameBoy/Core/gb.h index a2e8db19f..655346bf3 100644 --- a/thirdparty/SameBoy/Core/gb.h +++ b/thirdparty/SameBoy/Core/gb.h @@ -24,6 +24,7 @@ #include "cheats.h" #include "rumble.h" #include "workboy.h" +#include "random.h" #define GB_STRUCT_VERSION 13 @@ -297,7 +298,6 @@ typedef enum { #define SGB_NTSC_FREQUENCY (21477272 / 5) #define SGB_PAL_FREQUENCY (21281370 / 5) #define DIV_CYCLES (0x100) -#define INTERNAL_DIV_CYCLES (0x40000) #if !defined(MIN) #define MIN(A, B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; }) @@ -435,6 +435,7 @@ struct GB_gameboy_internal_s { int32_t ir_sensor; bool effective_ir_input; + uint16_t address_bus; ); /* DMA and HDMA */ @@ -532,6 +533,9 @@ struct GB_gameboy_internal_s { uint16_t serial_length; uint8_t double_speed_alignment; uint8_t serial_count; + int32_t speed_switch_halt_countdown; + uint8_t speed_switch_countdown; // To compensate for the lack of pipeline emulation + uint8_t speed_switch_freeze; // Solely for realigning the PPU, should be removed when the odd modes are implemented ); /* APU */ @@ -543,7 +547,7 @@ struct GB_gameboy_internal_s { GB_SECTION(rtc, GB_rtc_time_t rtc_real, rtc_latched; uint64_t last_rtc_second; - bool rtc_latch; + GB_PADDING(bool, rtc_latch); uint32_t rtc_cycles; uint8_t tpp1_mr4; ); @@ -551,7 +555,7 @@ struct GB_gameboy_internal_s { /* Video Display */ GB_SECTION(video, uint32_t vram_size; // Different between CGB and DMG - uint8_t cgb_vram_bank; + bool cgb_vram_bank; uint8_t oam[0xA0]; uint8_t background_palettes_data[0x40]; uint8_t sprite_palettes_data[0x40]; @@ -579,7 +583,7 @@ struct GB_gameboy_internal_s { uint8_t current_line; uint16_t ly_for_comparison; GB_fifo_t bg_fifo, oam_fifo; - uint8_t fetcher_x; + GB_PADDING(uint8_t, fetcher_x); uint8_t fetcher_y; uint16_t cycles_for_line; uint8_t current_tile; @@ -717,6 +721,7 @@ struct GB_gameboy_internal_s { /* Ticks command */ uint64_t debugger_ticks; + uint64_t absolute_debugger_ticks; /* Undo */ uint8_t *undo_state; @@ -819,6 +824,7 @@ void GB_load_boot_rom_from_buffer(GB_gameboy_t *gb, const unsigned char *buffer, int GB_load_rom(GB_gameboy_t *gb, const char *path); void GB_load_rom_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size); int GB_load_isx(GB_gameboy_t *gb, const char *path); +int GB_load_gbs_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size, GB_gbs_info_t *info); int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info); void GB_gbs_switch_track(GB_gameboy_t *gb, uint8_t track); @@ -883,5 +889,14 @@ unsigned GB_get_screen_width(GB_gameboy_t *gb); unsigned GB_get_screen_height(GB_gameboy_t *gb); double GB_get_usual_frame_rate(GB_gameboy_t *gb); unsigned GB_get_player_count(GB_gameboy_t *gb); + +/* Handy ROM info APIs */ +// `title` must be at least 17 bytes in size +void GB_get_rom_title(GB_gameboy_t *gb, char *title); +uint32_t GB_get_rom_crc32(GB_gameboy_t *gb); + +#ifdef GB_INTERNAL +void GB_borrow_sgb_border(GB_gameboy_t *gb); +#endif #endif /* GB_h */ diff --git a/thirdparty/SameBoy/Core/joypad.c b/thirdparty/SameBoy/Core/joypad.c index b8d4fdb47..c0655f084 100644 --- a/thirdparty/SameBoy/Core/joypad.c +++ b/thirdparty/SameBoy/Core/joypad.c @@ -12,7 +12,7 @@ void GB_update_joyp(GB_gameboy_t *gb) previous_state = gb->io_registers[GB_IO_JOYP] & 0xF; key_selection = (gb->io_registers[GB_IO_JOYP] >> 4) & 3; gb->io_registers[GB_IO_JOYP] &= 0xF0; - uint8_t current_player = gb->sgb? (gb->sgb->current_player & (gb->sgb->player_count - 1) & 3) : 0; + uint8_t current_player = gb->sgb? gb->sgb->current_player : 0; switch (key_selection) { case 3: if (gb->sgb && gb->sgb->player_count > 1) { @@ -52,6 +52,7 @@ void GB_update_joyp(GB_gameboy_t *gb) break; default: + __builtin_unreachable(); break; } diff --git a/thirdparty/SameBoy/Core/mbc.c b/thirdparty/SameBoy/Core/mbc.c index 1e15f8a69..a9e758ebe 100644 --- a/thirdparty/SameBoy/Core/mbc.c +++ b/thirdparty/SameBoy/Core/mbc.c @@ -141,6 +141,7 @@ void GB_configure_cart(GB_gameboy_t *gb) if (gb->mbc_ram) { free(gb->mbc_ram); gb->mbc_ram = NULL; + gb->mbc_ram_size = 0; } if (gb->cartridge_type->has_ram) { diff --git a/thirdparty/SameBoy/Core/memory.c b/thirdparty/SameBoy/Core/memory.c index a25b860f8..426e5d645 100644 --- a/thirdparty/SameBoy/Core/memory.c +++ b/thirdparty/SameBoy/Core/memory.c @@ -29,33 +29,80 @@ static GB_bus_t bus_for_addr(GB_gameboy_t *gb, uint16_t addr) return GB_BUS_INTERNAL; } -static uint8_t bitwise_glitch(uint8_t a, uint8_t b, uint8_t c) +static uint16_t bitwise_glitch(uint16_t a, uint16_t b, uint16_t c) { return ((a ^ c) & (b ^ c)) ^ c; } -static uint8_t bitwise_glitch_read(uint8_t a, uint8_t b, uint8_t c) +static uint16_t bitwise_glitch_read(uint16_t a, uint16_t b, uint16_t c) { return b | (a & c); } -static uint8_t bitwise_glitch_read_increase(uint8_t a, uint8_t b, uint8_t c, uint8_t d) +static uint16_t bitwise_glitch_read_secondary(uint16_t a, uint16_t b, uint16_t c, uint16_t d) { return (b & (a | c | d)) | (a & c & d); } +/* + Used on the MGB in some scenarios +static uint16_t bitwise_glitch_mgb(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e, bool variant) +{ + return (c & (e | d | b | (variant? 0 : a))) | (b & d & (a | e)); +} +*/ + +static uint16_t bitwise_glitch_tertiary_read_1(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e) +{ + return c | (a & b & d & e); +} + +static uint16_t bitwise_glitch_tertiary_read_2(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e) +{ + return (c & (a | b | d | e)) | (a & b & d & e); +} + +static uint16_t bitwise_glitch_tertiary_read_3(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e) +{ + return (c & (a | b | d | e)) | (b & d & e); +} + +static uint16_t bitwise_glitch_quaternary_read_dmg(uint16_t a, uint16_t b, uint16_t c, uint16_t d, + uint16_t e, uint16_t f, uint16_t g, uint16_t h) +{ + /* On my DMG, some cases are non-deterministic, while on some other DMGs they yield constant zeros. + The non deterministic cases are affected by (on the row 40 case) 34, 36, 3e and 28, and potentially + others. For my own sanity I'm going to emulate the DMGs that output zeros. */ + (void)a; + return (e & (h | g | (~d & f) | c | b)) | (c & g & h); +} + +/* + +// Oh my. +static uint16_t bitwise_glitch_quaternary_read_mgb(uint16_t a, uint16_t b, uint16_t c, uint16_t d, + uint16_t e, uint16_t f, uint16_t g, uint16_t h) +{ + return (e & (h | g | c | (a & b))) | ((c & h) & (g & (~f | b | a | ~d) | (a & b & f))); +} +*/ + +static uint16_t bitwise_glitch_quaternary_read_sgb2(uint16_t a, uint16_t b, uint16_t c, uint16_t d, + uint16_t e, uint16_t f, uint16_t g, uint16_t h) +{ + return (e & (h | g | c | (a & b))) | ((c & g & h) & (b | a | ~f)); +} + void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address) { if (GB_is_cgb(gb)) return; if (address >= 0xFE00 && address < 0xFF00) { if (gb->accessed_oam_row != 0xff && gb->accessed_oam_row >= 8) { - gb->oam[gb->accessed_oam_row] = bitwise_glitch(gb->oam[gb->accessed_oam_row], - gb->oam[gb->accessed_oam_row - 8], - gb->oam[gb->accessed_oam_row - 4]); - gb->oam[gb->accessed_oam_row + 1] = bitwise_glitch(gb->oam[gb->accessed_oam_row + 1], - gb->oam[gb->accessed_oam_row - 7], - gb->oam[gb->accessed_oam_row - 3]); + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + base[0] = bitwise_glitch(base[0], + base[-4], + base[-2]); for (unsigned i = 2; i < 8; i++) { gb->oam[gb->accessed_oam_row + i] = gb->oam[gb->accessed_oam_row - 8 + i]; } @@ -63,50 +110,141 @@ void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address) } } -void GB_trigger_oam_bug_read(GB_gameboy_t *gb, uint16_t address) +static void oam_bug_secondary_read_corruption(GB_gameboy_t *gb) { - if (GB_is_cgb(gb)) return; - - if (address >= 0xFE00 && address < 0xFF00) { - if (gb->accessed_oam_row != 0xff && gb->accessed_oam_row >= 8) { - gb->oam[gb->accessed_oam_row - 8] = - gb->oam[gb->accessed_oam_row] = bitwise_glitch_read(gb->oam[gb->accessed_oam_row], - gb->oam[gb->accessed_oam_row - 8], - gb->oam[gb->accessed_oam_row - 4]); - gb->oam[gb->accessed_oam_row - 7] = - gb->oam[gb->accessed_oam_row + 1] = bitwise_glitch_read(gb->oam[gb->accessed_oam_row + 1], - gb->oam[gb->accessed_oam_row - 7], - gb->oam[gb->accessed_oam_row - 3]); - for (unsigned i = 2; i < 8; i++) { - gb->oam[gb->accessed_oam_row + i] = gb->oam[gb->accessed_oam_row - 8 + i]; - } + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + base[-4] = bitwise_glitch_read_secondary(base[-8], + base[-4], + base[0], + base[-2]); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; } } } -void GB_trigger_oam_bug_read_increase(GB_gameboy_t *gb, uint16_t address) +/* +static void oam_bug_tertiary_read_corruption_mgb(GB_gameboy_t *gb) +{ + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + uint16_t temp = bitwise_glitch_mgb( + base[0], + base[-2], + base[-4], + base[-8], + base[-16], + true); + + base[-4] = bitwise_glitch_mgb( + base[0], + base[-2], + base[-4], + base[-8], + base[-16], + false); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x20 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + } + + base[-8] = temp; + base[-16] = temp; + } +} +*/ + +static void oam_bug_quaternary_read_corruption(GB_gameboy_t *gb, typeof(bitwise_glitch_quaternary_read_dmg) *bitwise_op) +{ + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + + base[-4] = bitwise_op(*(uint16_t *)gb->oam, + base[0], + base[-2], + base[-3], + base[-4], + base[-7], + base[-8], + base[-16]); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x20 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + } + } +} + +static void oam_bug_tertiary_read_corruption(GB_gameboy_t *gb, typeof(bitwise_glitch_tertiary_read_1) *bitwise_op) +{ + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + + /* On some instances, the corruption row is copied to the first row for some accessed row. On my DMG it happens + for row 80, and on my MGB it happens on row 60. Some instances only copy odd or even bytes. Additionally, + for some instances on accessed rows that do not affect the first row, the last two bytes of the preceeding + row are also corrupted in a non-deterministic probability. */ + + base[-4] = bitwise_op( + base[0], + base[-2], + base[-4], + base[-8], + base[-16]); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x20 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + } + } +} + +void GB_trigger_oam_bug_read(GB_gameboy_t *gb, uint16_t address) { if (GB_is_cgb(gb)) return; if (address >= 0xFE00 && address < 0xFF00) { - if (gb->accessed_oam_row != 0xff && gb->accessed_oam_row >= 0x20 && gb->accessed_oam_row < 0x98) { - gb->oam[gb->accessed_oam_row - 0x8] = bitwise_glitch_read_increase(gb->oam[gb->accessed_oam_row - 0x10], - gb->oam[gb->accessed_oam_row - 0x08], - gb->oam[gb->accessed_oam_row ], - gb->oam[gb->accessed_oam_row - 0x04] - ); - gb->oam[gb->accessed_oam_row - 0x7] = bitwise_glitch_read_increase(gb->oam[gb->accessed_oam_row - 0x0f], - gb->oam[gb->accessed_oam_row - 0x07], - gb->oam[gb->accessed_oam_row + 0x01], - gb->oam[gb->accessed_oam_row - 0x03] - ); + if (gb->accessed_oam_row != 0xff && gb->accessed_oam_row >= 8) { + if ((gb->accessed_oam_row & 0x18) == 0x10) { + oam_bug_secondary_read_corruption(gb); + } + else if ((gb->accessed_oam_row & 0x18) == 0x00) { + /* Everything in this specific case is *extremely* revision and instance specific. */ + if (gb->accessed_oam_row == 0x40) { + oam_bug_quaternary_read_corruption(gb, + ((gb->model & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB2)? + bitwise_glitch_quaternary_read_sgb2: + bitwise_glitch_quaternary_read_dmg); + } + else if ((gb->model & ~GB_MODEL_NO_SFC_BIT) != GB_MODEL_SGB2) { + if (gb->accessed_oam_row == 0x20) { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_2); + } + else if (gb->accessed_oam_row == 0x60) { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_3); + } + else { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_1); + } + } + else { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_2); + } + } + else { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + base[-4] = + base[0] = bitwise_glitch_read(base[0], + base[-4], + base[-2]); + } for (unsigned i = 0; i < 8; i++) { - gb->oam[gb->accessed_oam_row + i] = gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + gb->oam[gb->accessed_oam_row + i] = gb->oam[gb->accessed_oam_row - 8 + i]; + } + if (gb->accessed_oam_row == 0x80) { + memcpy(gb->oam, gb->oam + gb->accessed_oam_row, 8); } } } } + static bool is_addr_in_dma_use(GB_gameboy_t *gb, uint16_t addr) { if (!gb->dma_steps_left || (gb->dma_cycles < 0 && !gb->is_dma_restarting) || addr >= 0xFE00) return false; @@ -153,7 +291,7 @@ static uint8_t read_vram(GB_gameboy_t *gb, uint16_t addr) addr = gb->last_tile_data_address; } } - return gb->vram[(addr & 0x1FFF) + (uint16_t) gb->cgb_vram_bank * 0x2000]; + return gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)]; } static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) @@ -281,26 +419,53 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) if (gb->oam_read_blocked) { if (!GB_is_cgb(gb)) { if (addr < 0xFEA0) { + uint16_t *oam = (uint16_t *)gb->oam; if (gb->accessed_oam_row == 0) { - gb->oam[(addr & 0xf8)] = - gb->oam[0] = bitwise_glitch_read(gb->oam[0], - gb->oam[(addr & 0xf8)], - gb->oam[(addr & 0xfe)]); - gb->oam[(addr & 0xf8) + 1] = - gb->oam[1] = bitwise_glitch_read(gb->oam[1], - gb->oam[(addr & 0xf8) + 1], - gb->oam[(addr & 0xfe) | 1]); + oam[(addr & 0xf8) >> 1] = + oam[0] = bitwise_glitch_read(oam[0], + oam[(addr & 0xf8) >> 1], + oam[(addr & 0xff) >> 1]); + for (unsigned i = 2; i < 8; i++) { gb->oam[i] = gb->oam[(addr & 0xf8) + i]; } } else if (gb->accessed_oam_row == 0xa0) { - gb->oam[0x9e] = bitwise_glitch_read(gb->oam[0x9c], - gb->oam[0x9e], - gb->oam[(addr & 0xf8) | 6]); - gb->oam[0x9f] = bitwise_glitch_read(gb->oam[0x9d], - gb->oam[0x9f], - gb->oam[(addr & 0xf8) | 7]); + uint8_t target = (addr & 7) | 0x98; + uint16_t a = oam[0x9c >> 1], + b = oam[target >> 1], + c = oam[(addr & 0xf8) >> 1]; + switch (addr & 7) { + case 0: + case 1: + /* Probably instance specific */ + if ((gb->model & GB_MODEL_FAMILY_MASK) == GB_MODEL_DMG_FAMILY) { + oam[target >> 1] = (a & b) | (a & c) | (b & c); + } + else { + oam[target >> 1] = bitwise_glitch_read(a, b, c); + } + break; + case 2: + case 3: { + /* Probably instance specific */ + c = oam[(addr & 0xfe) >> 1]; + + // MGB only: oam[target >> 1] = bitwise_glitch_read(a, b, c); + oam[target >> 1] = (a & b) | (a & c) | (b & c); + break; + } + case 4: + case 5: + break; // No additional corruption + case 6: + case 7: + oam[target >> 1] = bitwise_glitch_read(a, b, c); + break; + + default: + __builtin_unreachable(); + } for (unsigned i = 0; i < 8; i++) { gb->oam[(addr & 0xf8) + i] = gb->oam[0x98 + i]; @@ -470,8 +635,7 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) } return 0xFF; } - /* Hardware registers */ - return 0; + __builtin_unreachable(); } if (addr == 0xFFFF) { @@ -541,16 +705,13 @@ static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) gb->mbc3_rtc_mapped = value & 8; break; case 0x6000: case 0x7000: - if (!gb->rtc_latch && (value & 1)) { /* Todo: verify condition is correct */ - memcpy(&gb->rtc_latched, &gb->rtc_real, sizeof(gb->rtc_real)); - } - gb->rtc_latch = value & 1; + memcpy(&gb->rtc_latched, &gb->rtc_real, sizeof(gb->rtc_real)); break; } break; case GB_MBC5: switch (addr & 0xF000) { - case 0x0000: case 0x1000: gb->mbc_ram_enable = (value & 0xF) == 0xA; break; + case 0x0000: case 0x1000: gb->mbc_ram_enable = value == 0x0A; break; case 0x2000: gb->mbc5.rom_bank_low = value; break; case 0x3000: gb->mbc5.rom_bank_high = value; break; case 0x4000: case 0x5000: @@ -653,7 +814,7 @@ static void write_vram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) addr = gb->last_tile_data_address; } } - gb->vram[(addr & 0x1FFF) + (uint16_t) gb->cgb_vram_bank * 0x2000] = value; + gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)] = value; } static bool huc3_write(GB_gameboy_t *gb, uint8_t value) @@ -781,7 +942,7 @@ static void write_mbc_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) if (gb->mbc_ram_bank == 0) { gb->rtc_cycles = 0; } - gb->rtc_latched.data[gb->mbc_ram_bank] = gb->rtc_real.data[gb->mbc_ram_bank] = value; + gb->rtc_real.data[gb->mbc_ram_bank] = value; } return; } @@ -1072,12 +1233,11 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) gb->io_registers[GB_IO_DMA] = value; return; case GB_IO_SVBK: - if (!gb->cgb_mode) { - return; - } - gb->cgb_ram_bank = value & 0x7; - if (!gb->cgb_ram_bank) { - gb->cgb_ram_bank++; + if (gb->cgb_mode || (GB_is_cgb(gb) && !gb->boot_rom_finished)) { + gb->cgb_ram_bank = value & 0x7; + if (!gb->cgb_ram_bank) { + gb->cgb_ram_bank++; + } } return; case GB_IO_VBK: @@ -1234,7 +1394,7 @@ static GB_write_function_t * const write_map[] = write_vram, write_vram, /* 8XXX, 9XXX */ write_mbc_ram, write_mbc_ram, /* AXXX, BXXX */ write_ram, write_banked_ram, /* CXXX, DXXX */ - write_ram, write_high_memory, /* EXXX FXXX */ + write_ram, write_high_memory, /* EXXX FXXX */ }; void GB_write_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) diff --git a/thirdparty/SameBoy/Core/memory.h b/thirdparty/SameBoy/Core/memory.h index f0d03907f..80020f176 100644 --- a/thirdparty/SameBoy/Core/memory.h +++ b/thirdparty/SameBoy/Core/memory.h @@ -12,7 +12,6 @@ void GB_write_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value); void GB_dma_run(GB_gameboy_t *gb); void GB_hdma_run(GB_gameboy_t *gb); void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address); -void GB_trigger_oam_bug_read_increase(GB_gameboy_t *gb, uint16_t address); #endif #endif /* memory_h */ diff --git a/thirdparty/SameBoy/Core/save_state.c b/thirdparty/SameBoy/Core/save_state.c index b83790b6d..17777505b 100644 --- a/thirdparty/SameBoy/Core/save_state.c +++ b/thirdparty/SameBoy/Core/save_state.c @@ -6,11 +6,20 @@ #define str(x) #x #define xstr(x) str(x) #ifdef GB_BIG_ENDIAN -#define BESS_NAME "SameBoy v" xstr(VERSION) " (Big Endian)" +#define BESS_NAME "SameBoy v" xstr(GB_VERSION) " (Big Endian)" #else -#define BESS_NAME "SameBoy v" xstr(VERSION) +#define BESS_NAME "SameBoy v" xstr(GB_VERSION) #endif +_Static_assert((GB_SECTION_OFFSET(core_state) & 7) == 0, "Section core_state is not aligned"); +_Static_assert((GB_SECTION_OFFSET(dma) & 7) == 0, "Section dma is not aligned"); +_Static_assert((GB_SECTION_OFFSET(mbc) & 7) == 0, "Section mbc is not aligned"); +_Static_assert((GB_SECTION_OFFSET(hram) & 7) == 0, "Section hram is not aligned"); +_Static_assert((GB_SECTION_OFFSET(timing) & 7) == 0, "Section timing is not aligned"); +_Static_assert((GB_SECTION_OFFSET(apu) & 7) == 0, "Section apu is not aligned"); +_Static_assert((GB_SECTION_OFFSET(rtc) & 7) == 0, "Section rtc is not aligned"); +_Static_assert((GB_SECTION_OFFSET(video) & 7) == 0, "Section video is not aligned"); + typedef struct __attribute__((packed)) { uint32_t magic; uint32_t size; @@ -222,7 +231,7 @@ static size_t bess_size_for_cartridge(const GB_cartridge_t *cart) case GB_MBC2: return sizeof(BESS_block_t) + 2 * sizeof(BESS_MBC_pair_t); case GB_MBC3: - return sizeof(BESS_block_t) + 4 * sizeof(BESS_MBC_pair_t) + (cart->has_rtc? sizeof(BESS_RTC_t) : 0); + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t) + (cart->has_rtc? sizeof(BESS_RTC_t) : 0); case GB_MBC5: return sizeof(BESS_block_t) + 4 * sizeof(BESS_MBC_pair_t); case GB_HUC1: @@ -300,6 +309,11 @@ static bool verify_and_update_state_compatibility(GB_gameboy_t *gb, GB_gameboy_t return false; } + if (GB_is_cgb(gb) != GB_is_cgb(save) || GB_is_hle_sgb(gb) != GB_is_hle_sgb(save)) { + GB_log(gb, "The save state is for a different Game Boy model. Try changing the emulated model.\n"); + return false; + } + if (gb->mbc_ram_size < save->mbc_ram_size) { GB_log(gb, "The save state has non-matching MBC RAM size.\n"); return false; @@ -326,7 +340,24 @@ static bool verify_and_update_state_compatibility(GB_gameboy_t *gb, GB_gameboy_t } } - return true; + switch (save->model) { + case GB_MODEL_DMG_B: return true; + case GB_MODEL_SGB_NTSC: return true; + case GB_MODEL_SGB_PAL: return true; + case GB_MODEL_SGB_NTSC_NO_SFC: return true; + case GB_MODEL_SGB_PAL_NO_SFC: return true; + case GB_MODEL_SGB2: return true; + case GB_MODEL_SGB2_NO_SFC: return true; + case GB_MODEL_CGB_C: return true; + case GB_MODEL_CGB_E: return true; + case GB_MODEL_AGB: return true; + } + if ((gb->model & GB_MODEL_FAMILY_MASK) == (save->model & GB_MODEL_FAMILY_MASK)) { + save->model = gb->model; + return true; + } + GB_log(gb, "This save state is for an unknown Game Boy model\n"); + return false; } static void sanitize_state(GB_gameboy_t *gb) @@ -340,8 +371,36 @@ static void sanitize_state(GB_gameboy_t *gb) gb->bg_fifo.write_end &= 0xF; gb->oam_fifo.read_end &= 0xF; gb->oam_fifo.write_end &= 0xF; + gb->last_tile_index_address &= 0x1FFF; + gb->window_tile_x &= 0x1F; + + /* These are kind of DOS-ish if too large */ + if (abs(gb->display_cycles) > 0x8000) { + gb->display_cycles = 0; + } + + if (abs(gb->div_cycles) > 0x8000) { + gb->div_cycles = 0; + } + + if (!GB_is_cgb(gb)) { + gb->cgb_mode = false; + } + + if (gb->ram_size == 0x8000) { + gb->cgb_ram_bank &= 0x7; + } + else { + gb->cgb_ram_bank = 1; + } + if (gb->vram_size != 0x4000) { + gb->cgb_vram_bank = 0; + } + if (!GB_is_cgb(gb)) { + gb->current_tile_attributes = 0; + } + gb->object_low_line_address &= gb->vram_size & ~1; - gb->fetcher_x &= 0x1f; if (gb->lcd_x > gb->position_in_line) { gb->lcd_x = gb->position_in_line; } @@ -349,6 +408,12 @@ static void sanitize_state(GB_gameboy_t *gb) if (gb->object_priority == GB_OBJECT_PRIORITY_UNDEFINED) { gb->object_priority = gb->cgb_mode? GB_OBJECT_PRIORITY_INDEX : GB_OBJECT_PRIORITY_X; } + if (gb->sgb) { + if (gb->sgb->player_count != 1 && gb->sgb->player_count != 2 && gb->sgb->player_count != 4) { + gb->sgb->player_count = 1; + } + gb->sgb->current_player &= gb->sgb->player_count - 1; + } if (gb->sgb && !gb->sgb->v14_3) { #ifdef GB_BIG_ENDIAN for (unsigned i = 0; i < sizeof(gb->sgb->border.raw_data) / 2; i++) { @@ -437,8 +502,7 @@ static int save_bess_mbc_block(GB_gameboy_t *gb, virtual_file_t *file) pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc3.rom_bank}; pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc3.ram_bank | (gb->mbc3_rtc_mapped? 8 : 0)}; - pairs[3] = (BESS_MBC_pair_t){LE16(0x6000), gb->rtc_latch}; - mbc_block.size = 4 * sizeof(pairs[0]); + mbc_block.size = 3 * sizeof(pairs[0]); break; case GB_MBC5: pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; @@ -714,7 +778,7 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe bess_sgb.attribute_files = (BESS_buffer_t){LE32(sizeof(gb->sgb->attribute_files)), LE32(sgb_offset + offsetof(GB_sgb_t, attribute_files))}; - bess_sgb.multiplayer_state = (gb->sgb->player_count << 4) | (gb->sgb->current_player & (gb->sgb->player_count - 1)); + bess_sgb.multiplayer_state = (gb->sgb->player_count << 4) | gb->sgb->current_player; if (file->write(file, &bess_sgb, sizeof(bess_sgb)) != sizeof(bess_sgb)) { goto error; } @@ -907,7 +971,9 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo save.halted = core.execution_mode == 1; save.stopped = core.execution_mode == 2; - + + // Done early for compatibility with 0.14.x + GB_write_memory(&save, 0xFF00 + GB_IO_SVBK, core.io_registers[GB_IO_SVBK]); // CPU related // Determines DMG mode @@ -968,7 +1034,6 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo GB_write_memory(&save, 0xFF00 + GB_IO_BGPI, core.io_registers[GB_IO_BGPI]); GB_write_memory(&save, 0xFF00 + GB_IO_OBPI, core.io_registers[GB_IO_OBPI]); GB_write_memory(&save, 0xFF00 + GB_IO_OPRI, core.io_registers[GB_IO_OPRI]); - GB_write_memory(&save, 0xFF00 + GB_IO_SVBK, core.io_registers[GB_IO_SVBK]); // Interrupts GB_write_memory(&save, 0xFF00 + GB_IO_IF, core.io_registers[GB_IO_IF]); @@ -1007,6 +1072,7 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo case BE32('MBC '): if (!found_core) goto parse_error; if (LE32(block.size) % 3 != 0) goto parse_error; + if (LE32(block.size) > 0x1000) goto parse_error; for (unsigned i = LE32(block.size); i > 0; i -= 3) { BESS_MBC_pair_t pair; file->read(file, &pair, sizeof(pair)); @@ -1154,6 +1220,7 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo GB_log(gb, "Attempted to import a save state from a different emulator or incompatible version, but the save state is invalid.\n"); } GB_free(&save); + sanitize_state(gb); return errno; } @@ -1261,7 +1328,7 @@ int GB_load_state_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t le } -bool GB_is_stave_state(const char *path) +bool GB_is_save_state(const char *path) { bool ret = false; FILE *f = fopen(path, "rb"); diff --git a/thirdparty/SameBoy/Core/save_state.h b/thirdparty/SameBoy/Core/save_state.h index 79e8c0615..bf43a65ca 100644 --- a/thirdparty/SameBoy/Core/save_state.h +++ b/thirdparty/SameBoy/Core/save_state.h @@ -10,7 +10,7 @@ as anonymous enums inside unions */ #define GB_SECTION(name, ...) __attribute__ ((aligned (8))) __VA_ARGS__ #else -#define GB_SECTION(name, ...) __attribute__ ((aligned (8))) union {uint8_t name##_section_start; struct {__VA_ARGS__};}; uint8_t name##_section_end[0] +#define GB_SECTION(name, ...) union __attribute__ ((aligned (8))) {uint8_t name##_section_start; struct {__VA_ARGS__};}; uint8_t name##_section_end[0] #define GB_SECTION_OFFSET(name) (offsetof(GB_gameboy_t, name##_section_start)) #define GB_SECTION_SIZE(name) (offsetof(GB_gameboy_t, name##_section_end) - offsetof(GB_gameboy_t, name##_section_start)) #define GB_GET_SECTION(gb, name) ((void*)&((gb)->name##_section_start)) @@ -27,7 +27,7 @@ void GB_save_state_to_buffer(GB_gameboy_t *gb, uint8_t *buffer); int GB_load_state(GB_gameboy_t *gb, const char *path); int GB_load_state_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t length); -bool GB_is_stave_state(const char *path); +bool GB_is_save_state(const char *path); #ifdef GB_INTERNAL static inline uint32_t state_magic(void) { diff --git a/thirdparty/SameBoy/Core/sgb.c b/thirdparty/SameBoy/Core/sgb.c index 894ae9663..0e5326686 100644 --- a/thirdparty/SameBoy/Core/sgb.c +++ b/thirdparty/SameBoy/Core/sgb.c @@ -375,39 +375,36 @@ static void command_ready(GB_gameboy_t *gb) } break; case PAL_TRN: - gb->sgb->vram_transfer_countdown = 2; + gb->sgb->vram_transfer_countdown = 3; gb->sgb->transfer_dest = TRANSFER_PALETTES; break; case DATA_SND: // Not supported, but used by almost all SGB games for hot patching, so let's mute the warning for this break; case MLT_REQ: - if (gb->sgb->player_count == 1) { - gb->sgb->current_player = 0; - } gb->sgb->player_count = (gb->sgb->command[1] & 3) + 1; /* Todo: When breaking save state comaptibility, fix this to be 0 based. */ if (gb->sgb->player_count == 3) { - gb->sgb->current_player++; + gb->sgb->player_count++; } - gb->sgb->mlt_lock = true; + gb->sgb->current_player &= (gb->sgb->player_count - 1); break; case CHR_TRN: - gb->sgb->vram_transfer_countdown = 2; + gb->sgb->vram_transfer_countdown = 3; gb->sgb->transfer_dest = (gb->sgb->command[1] & 1)? TRANSFER_HIGH_TILES : TRANSFER_LOW_TILES; break; case PCT_TRN: - gb->sgb->vram_transfer_countdown = 2; + gb->sgb->vram_transfer_countdown = 3; gb->sgb->transfer_dest = TRANSFER_BORDER_DATA; break; case ATTR_TRN: - gb->sgb->vram_transfer_countdown = 2; + gb->sgb->vram_transfer_countdown = 3; gb->sgb->transfer_dest = TRANSFER_ATTRIBUTES; break; case ATTR_SET: - load_attribute_file(gb, gb->sgb->command[0] & 0x3F); + load_attribute_file(gb, gb->sgb->command[1] & 0x3F); - if (gb->sgb->command[0] & 0x40) { + if (gb->sgb->command[1] & 0x40) { gb->sgb->mask_mode = MASK_DISABLED; } break; @@ -437,27 +434,22 @@ void GB_sgb_write(GB_gameboy_t *gb, uint8_t value) return; } if (gb->sgb->disable_commands) return; - if (gb->sgb->command_write_index >= sizeof(gb->sgb->command) * 8) { - return; - } uint16_t command_size = (gb->sgb->command[0] & 7 ?: 1) * SGB_PACKET_SIZE * 8; if ((gb->sgb->command[0] & 0xF1) == 0xF1) { command_size = SGB_PACKET_SIZE * 8; } - if ((value & 0x20) == 0 && (gb->io_registers[GB_IO_JOYP] & 0x20) != 0) { - gb->sgb->mlt_lock ^= true; + if ((value & 0x20) != 0 && (gb->io_registers[GB_IO_JOYP] & 0x20) == 0) { + if ((gb->sgb->player_count & 1) == 0) { + gb->sgb->current_player++; + gb->sgb->current_player &= (gb->sgb->player_count - 1); + } } switch ((value >> 4) & 3) { case 3: gb->sgb->ready_for_pulse = true; - if ((gb->sgb->player_count & 1) == 0 && !gb->sgb->mlt_lock) { - gb->sgb->current_player++; - gb->sgb->current_player &= 3; - gb->sgb->mlt_lock = true; - } break; case 2: // Zero @@ -473,10 +465,12 @@ void GB_sgb_write(GB_gameboy_t *gb, uint8_t value) gb->sgb->ready_for_stop = false; } else { - gb->sgb->command_write_index++; - gb->sgb->ready_for_pulse = false; - if (((gb->sgb->command_write_index) & (SGB_PACKET_SIZE * 8 - 1)) == 0) { - gb->sgb->ready_for_stop = true; + if (gb->sgb->command_write_index < sizeof(gb->sgb->command) * 8) { + gb->sgb->command_write_index++; + gb->sgb->ready_for_pulse = false; + if (((gb->sgb->command_write_index) & (SGB_PACKET_SIZE * 8 - 1)) == 0) { + gb->sgb->ready_for_stop = true; + } } } break; @@ -490,11 +484,13 @@ void GB_sgb_write(GB_gameboy_t *gb, uint8_t value) memset(gb->sgb->command, 0, sizeof(gb->sgb->command)); } else { - gb->sgb->command[gb->sgb->command_write_index / 8] |= 1 << (gb->sgb->command_write_index & 7); - gb->sgb->command_write_index++; - gb->sgb->ready_for_pulse = false; - if (((gb->sgb->command_write_index) & (SGB_PACKET_SIZE * 8 - 1)) == 0) { - gb->sgb->ready_for_stop = true; + if (gb->sgb->command_write_index < sizeof(gb->sgb->command) * 8) { + gb->sgb->command[gb->sgb->command_write_index / 8] |= 1 << (gb->sgb->command_write_index & 7); + gb->sgb->command_write_index++; + gb->sgb->ready_for_pulse = false; + if (((gb->sgb->command_write_index) & (SGB_PACKET_SIZE * 8 - 1)) == 0) { + gb->sgb->ready_for_stop = true; + } } } break; @@ -537,7 +533,6 @@ static uint32_t convert_rgb15_with_fade(GB_gameboy_t *gb, uint16_t color, uint8_ return GB_convert_rgb15(gb, color, false); } -#include static void render_boot_animation (GB_gameboy_t *gb) { #include "graphics/sgb_animation_logo.inc" @@ -653,7 +648,7 @@ void GB_sgb_render(GB_gameboy_t *gb) } } if (gb->sgb->transfer_dest == TRANSFER_BORDER_DATA) { - gb->sgb->border_animation = 64; + gb->sgb->border_animation = 105; // Measured on an SGB2, but might be off by ±2 } } } @@ -734,7 +729,10 @@ void GB_sgb_render(GB_gameboy_t *gb) } uint32_t border_colors[16 * 4]; - if (gb->sgb->border_animation == 0 || gb->sgb->intro_animation < GB_SGB_INTRO_ANIMATION_LENGTH) { + if (gb->sgb->border_animation == 0 || gb->sgb->border_animation > 64 || gb->sgb->intro_animation < GB_SGB_INTRO_ANIMATION_LENGTH) { + if (gb->sgb->border_animation != 0) { + gb->sgb->border_animation--; + } for (unsigned i = 0; i < 16 * 4; i++) { border_colors[i] = convert_rgb15(gb, LE16(gb->sgb->border.palette[i])); } @@ -767,6 +765,7 @@ void GB_sgb_render(GB_gameboy_t *gb) continue; } uint16_t tile = LE16(gb->sgb->border.map[tile_x + tile_y * 32]); + if (tile & 0x300) continue; // Unused tile uint8_t flip_x = (tile & 0x4000)? 0:7; uint8_t flip_y = (tile & 0x8000)? 7:0; uint8_t palette = (tile >> 10) & 3; diff --git a/thirdparty/SameBoy/Core/sgb.h b/thirdparty/SameBoy/Core/sgb.h index 1e67835d3..1e1a5c28b 100644 --- a/thirdparty/SameBoy/Core/sgb.h +++ b/thirdparty/SameBoy/Core/sgb.h @@ -61,7 +61,7 @@ struct GB_sgb_s { uint8_t received_header[0x54]; /* Multiplayer (cont) */ - bool mlt_lock; + GB_PADDING(bool, mlt_lock); bool v14_3; // True on save states created on 0.14.3 or newer; Remove when breaking save state compatibility! }; diff --git a/thirdparty/SameBoy/Core/sm83_cpu.c b/thirdparty/SameBoy/Core/sm83_cpu.c index 377f519fe..d4829d586 100644 --- a/thirdparty/SameBoy/Core/sm83_cpu.c +++ b/thirdparty/SameBoy/Core/sm83_cpu.c @@ -35,7 +35,8 @@ static const GB_conflict_t cgb_conflict_map[0x80] = { [GB_IO_OBP0] = GB_CONFLICT_PALETTE_CGB, [GB_IO_OBP1] = GB_CONFLICT_PALETTE_CGB, [GB_IO_NR10] = GB_CONFLICT_NR10, - + [GB_IO_SCX] = GB_CONFLICT_WRITE_CPU, // TODO: Similar to BGP, there's some time travelling involved + /* Todo: most values not verified, and probably differ between revisions */ }; @@ -82,17 +83,7 @@ static uint8_t cycle_read(GB_gameboy_t *gb, uint16_t addr) if (gb->pending_cycles) { GB_advance_cycles(gb, gb->pending_cycles); } - uint8_t ret = GB_read_memory(gb, addr); - gb->pending_cycles = 4; - return ret; -} - -static uint8_t cycle_read_inc_oam_bug(GB_gameboy_t *gb, uint16_t addr) -{ - if (gb->pending_cycles) { - GB_advance_cycles(gb, gb->pending_cycles); - } - GB_trigger_oam_bug_read_increase(gb, addr); /* Todo: test T-cycle timing */ + gb->address_bus = addr; uint8_t ret = GB_read_memory(gb, addr); gb->pending_cycles = 4; return ret; @@ -103,10 +94,12 @@ static uint8_t cycle_read_inc_oam_bug(GB_gameboy_t *gb, uint16_t addr) is both read be the CPU, modified by the ISR, and modified by an actual interrupt. If this timing proves incorrect, the ISR emulation must be updated so IF reads are timed correctly. */ +/* TODO: Does this affect the address bus? Verify. */ static uint8_t cycle_write_if(GB_gameboy_t *gb, uint8_t value) { assert(gb->pending_cycles); GB_advance_cycles(gb, gb->pending_cycles); + gb->address_bus = 0xFF00 + GB_IO_IF; uint8_t old = (gb->io_registers[GB_IO_IF]) & 0x1F; GB_write_memory(gb, 0xFF00 + GB_IO_IF, value); gb->pending_cycles = 4; @@ -135,19 +128,19 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, gb->pending_cycles); GB_write_memory(gb, addr, value); gb->pending_cycles = 4; - return; + break; case GB_CONFLICT_READ_NEW: GB_advance_cycles(gb, gb->pending_cycles - 1); GB_write_memory(gb, addr, value); gb->pending_cycles = 5; - return; + break; case GB_CONFLICT_WRITE_CPU: GB_advance_cycles(gb, gb->pending_cycles + 1); GB_write_memory(gb, addr, value); gb->pending_cycles = 3; - return; + break; /* The DMG STAT-write bug is basically the STAT register being read as FF for a single T-cycle */ case GB_CONFLICT_STAT_DMG: @@ -165,7 +158,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, 1); GB_write_memory(gb, addr, value); gb->pending_cycles = 3; - return; + break; case GB_CONFLICT_STAT_CGB: { /* Todo: Verify this with SCX adjustments */ @@ -176,7 +169,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, 1); GB_write_memory(gb, addr, value); gb->pending_cycles = 3; - return; + break; } /* There is some "time travel" going on with these two values, as it appears @@ -191,14 +184,14 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, 1); GB_write_memory(gb, addr, value); gb->pending_cycles = 5; - return; + break; } case GB_CONFLICT_PALETTE_CGB: { GB_advance_cycles(gb, gb->pending_cycles - 2); GB_write_memory(gb, addr, value); gb->pending_cycles = 6; - return; + break; } case GB_CONFLICT_DMG_LCDC: { @@ -222,7 +215,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, 1); GB_write_memory(gb, addr, value); gb->pending_cycles = 5; - return; + break; } case GB_CONFLICT_SGB_LCDC: { @@ -236,7 +229,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, 1); GB_write_memory(gb, addr, value); gb->pending_cycles = 5; - return; + break; } case GB_CONFLICT_WX: @@ -246,7 +239,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, 1); gb->wx_just_changed = false; gb->pending_cycles = 3; - return; + break; case GB_CONFLICT_CGB_LCDC: if ((value ^ gb->io_registers[GB_IO_LCDC]) & 0x10) { @@ -275,7 +268,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_write_memory(gb, addr, value); gb->pending_cycles = 4; } - return; + break; case GB_CONFLICT_NR10: /* Hack: Due to the coupling between DIV and the APU, GB_apu_run only runs at M-cycle @@ -288,13 +281,16 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) gb->apu.square_sweep_calculate_countdown -= 2; } gb->apu.enable_zombie_calculate_stepping = true; - GB_write_memory(gb, addr, 0xFF); + /* TODO: this causes audio regressions in the Donkey Kong Land series. + The exact behavior of this quirk should be further investigated, as it seems + more complicated than a single FF pseudo-write. */ + // GB_write_memory(gb, addr, 0xFF); } GB_write_memory(gb, addr, value); gb->pending_cycles = 4; - return; - + break; } + gb->address_bus = addr; } static void cycle_no_access(GB_gameboy_t *gb) @@ -304,28 +300,20 @@ static void cycle_no_access(GB_gameboy_t *gb) static void cycle_oam_bug(GB_gameboy_t *gb, uint8_t register_id) { - if (GB_is_cgb(gb)) { - /* Slight optimization */ - gb->pending_cycles += 4; - return; - } if (gb->pending_cycles) { GB_advance_cycles(gb, gb->pending_cycles); } + gb->address_bus = gb->registers[register_id]; GB_trigger_oam_bug(gb, gb->registers[register_id]); /* Todo: test T-cycle timing */ gb->pending_cycles = 4; } static void cycle_oam_bug_pc(GB_gameboy_t *gb) { - if (GB_is_cgb(gb)) { - /* Slight optimization */ - gb->pending_cycles += 4; - return; - } if (gb->pending_cycles) { GB_advance_cycles(gb, gb->pending_cycles); } + gb->address_bus = gb->pc; GB_trigger_oam_bug(gb, gb->pc); /* Todo: test T-cycle timing */ gb->pending_cycles = 4; } @@ -354,6 +342,9 @@ static void nop(GB_gameboy_t *gb, uint8_t opcode) static void enter_stop_mode(GB_gameboy_t *gb) { GB_write_memory(gb, 0xFF00 + GB_IO_DIV, 0); + if (!gb->ime) { // TODO: I don't trust this if, + gb->div_cycles = -4; // Emulate the CPU-side DIV-reset signal being held + } gb->stopped = true; gb->oam_ppu_blocked = !gb->oam_read_blocked; gb->vram_ppu_blocked = !gb->vram_read_blocked; @@ -366,53 +357,67 @@ static void leave_stop_mode(GB_gameboy_t *gb) gb->oam_ppu_blocked = false; gb->vram_ppu_blocked = false; gb->cgb_palettes_ppu_blocked = false; - /* The CPU takes more time to wake up then the other components */ - for (unsigned i = 0x1FFF; i--;) { - GB_advance_cycles(gb, 0x10); - } - GB_advance_cycles(gb, gb->cgb_double_speed? 0x10 : 0xF); - GB_write_memory(gb, 0xFF00 + GB_IO_DIV, 0); } +/* TODO: Speed switch timing needs far more tests. Double to single is wrong to avoid odd mode. */ static void stop(GB_gameboy_t *gb, uint8_t opcode) { - if (gb->io_registers[GB_IO_KEY1] & 0x1) { + flush_pending_cycles(gb); + bool exit_by_joyp = ((gb->io_registers[GB_IO_JOYP] & 0xF) != 0xF); + bool speed_switch = (gb->io_registers[GB_IO_KEY1] & 0x1) && !exit_by_joyp; + bool immediate_exit = speed_switch || exit_by_joyp; + bool interrupt_pending = (gb->interrupt_enable & gb->io_registers[GB_IO_IF] & 0x1F); + // When entering with IF&IE, the 2nd byte of STOP is actually executed + if (!exit_by_joyp) { + enter_stop_mode(gb); + } + + if (!interrupt_pending) { + cycle_read(gb, gb->pc++); + } + + /* Todo: speed switching takes 2 extra T-cycles (so 2 PPU ticks in single->double and 1 PPU tick in double->single) */ + if (speed_switch) { flush_pending_cycles(gb); - bool needs_alignment = false; - GB_advance_cycles(gb, 0x4); - /* Make sure we keep the CPU ticks aligned correctly when returning from double speed mode */ - - if (gb->double_speed_alignment & 7) { - GB_advance_cycles(gb, 0x4); - needs_alignment = true; - GB_log(gb, "ROM triggered PPU odd mode, which is currently not supported. Reverting to even-mode.\n"); + if (gb->io_registers[GB_IO_LCDC] & 0x80 && gb->cgb_double_speed) { + GB_log(gb, "ROM triggered a PPU odd mode, which is currently not supported. Reverting to even-mode.\n"); + if (gb->double_speed_alignment & 7) { + gb->speed_switch_freeze = 2; + } + } + if (gb->apu.global_enable && gb->cgb_double_speed) { + GB_log(gb, "ROM triggered an APU odd mode, which is currently not tested.\n"); } - - gb->cgb_double_speed ^= true; - gb->io_registers[GB_IO_KEY1] = 0; - enter_stop_mode(gb); - leave_stop_mode(gb); + if (gb->cgb_double_speed) { + gb->cgb_double_speed = false; + } + else { + gb->speed_switch_countdown = 6; + gb->speed_switch_freeze = 1; + } - if (!needs_alignment) { - GB_advance_cycles(gb, 0x4); + if (interrupt_pending) { + } + else { + gb->speed_switch_halt_countdown = 0x20008; + gb->speed_switch_freeze = 5; } + gb->io_registers[GB_IO_KEY1] = 0; } - else { - GB_timing_sync(gb); - if ((gb->io_registers[GB_IO_JOYP] & 0xF) != 0xF) { - /* TODO: HW Bug? When STOP is executed while a button is down, the CPU enters halt - mode instead. Fine details not confirmed yet. */ + + if (immediate_exit) { + leave_stop_mode(gb); + if (!interrupt_pending) { gb->halted = true; + gb->just_halted = true; } else { - enter_stop_mode(gb); + gb->speed_switch_halt_countdown = 0; } } - /* Todo: is PC being actually read? */ - gb->pc++; } /* Operand naming conventions for functions: @@ -431,8 +436,8 @@ static void ld_rr_d16(GB_gameboy_t *gb, uint8_t opcode) uint8_t register_id; uint16_t value; register_id = (opcode >> 4) + 1; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - value |= cycle_read_inc_oam_bug(gb, gb->pc++) << 8; + value = cycle_read(gb, gb->pc++); + value |= cycle_read(gb, gb->pc++) << 8; gb->registers[register_id] = value; } @@ -440,7 +445,7 @@ static void ld_drr_a(GB_gameboy_t *gb, uint8_t opcode) { uint8_t register_id; register_id = (opcode >> 4) + 1; - cycle_write(gb, gb->registers[register_id], gb->registers[GB_REGISTER_AF] >> 8); + cycle_write(gb, gb->registers[register_id], gb->af >> 8); } static void inc_rr(GB_gameboy_t *gb, uint8_t opcode) @@ -455,14 +460,14 @@ static void inc_hr(GB_gameboy_t *gb, uint8_t opcode) uint8_t register_id; register_id = ((opcode >> 4) + 1) & 0x03; gb->registers[register_id] += 0x100; - gb->registers[GB_REGISTER_AF] &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); if ((gb->registers[register_id] & 0x0F00) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ((gb->registers[register_id] & 0xFF00) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } static void dec_hr(GB_gameboy_t *gb, uint8_t opcode) @@ -470,15 +475,15 @@ static void dec_hr(GB_gameboy_t *gb, uint8_t opcode) uint8_t register_id; register_id = ((opcode >> 4) + 1) & 0x03; gb->registers[register_id] -= 0x100; - gb->registers[GB_REGISTER_AF] &= ~(GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); - gb->registers[GB_REGISTER_AF] |= GB_SUBTRACT_FLAG; + gb->af &= ~(GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af |= GB_SUBTRACT_FLAG; if ((gb->registers[register_id] & 0x0F00) == 0xF00) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ((gb->registers[register_id] & 0xFF00) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -487,30 +492,30 @@ static void ld_hr_d8(GB_gameboy_t *gb, uint8_t opcode) uint8_t register_id; register_id = ((opcode >> 4) + 1) & 0x03; gb->registers[register_id] &= 0xFF; - gb->registers[register_id] |= cycle_read_inc_oam_bug(gb, gb->pc++) << 8; + gb->registers[register_id] |= cycle_read(gb, gb->pc++) << 8; } static void rlca(GB_gameboy_t *gb, uint8_t opcode) { - bool carry = (gb->registers[GB_REGISTER_AF] & 0x8000) != 0; + bool carry = (gb->af & 0x8000) != 0; - gb->registers[GB_REGISTER_AF] = (gb->registers[GB_REGISTER_AF] & 0xFF00) << 1; + gb->af = (gb->af & 0xFF00) << 1; if (carry) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG | 0x0100; + gb->af |= GB_CARRY_FLAG | 0x0100; } } static void rla(GB_gameboy_t *gb, uint8_t opcode) { - bool bit7 = (gb->registers[GB_REGISTER_AF] & 0x8000) != 0; - bool carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; + bool bit7 = (gb->af & 0x8000) != 0; + bool carry = (gb->af & GB_CARRY_FLAG) != 0; - gb->registers[GB_REGISTER_AF] = (gb->registers[GB_REGISTER_AF] & 0xFF00) << 1; + gb->af = (gb->af & 0xFF00) << 1; if (carry) { - gb->registers[GB_REGISTER_AF] |= 0x0100; + gb->af |= 0x0100; } if (bit7) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -518,30 +523,30 @@ static void ld_da16_sp(GB_gameboy_t *gb, uint8_t opcode) { /* Todo: Verify order is correct */ uint16_t addr; - addr = cycle_read_inc_oam_bug(gb, gb->pc++); - addr |= cycle_read_inc_oam_bug(gb, gb->pc++) << 8; - cycle_write(gb, addr, gb->registers[GB_REGISTER_SP] & 0xFF); - cycle_write(gb, addr + 1, gb->registers[GB_REGISTER_SP] >> 8); + addr = cycle_read(gb, gb->pc++); + addr |= cycle_read(gb, gb->pc++) << 8; + cycle_write(gb, addr, gb->sp & 0xFF); + cycle_write(gb, addr + 1, gb->sp >> 8); } static void add_hl_rr(GB_gameboy_t *gb, uint8_t opcode) { - uint16_t hl = gb->registers[GB_REGISTER_HL]; + uint16_t hl = gb->hl; uint16_t rr; uint8_t register_id; cycle_no_access(gb); register_id = (opcode >> 4) + 1; rr = gb->registers[register_id]; - gb->registers[GB_REGISTER_HL] = hl + rr; - gb->registers[GB_REGISTER_AF] &= ~(GB_SUBTRACT_FLAG | GB_CARRY_FLAG | GB_HALF_CARRY_FLAG); + gb->hl = hl + rr; + gb->af &= ~(GB_SUBTRACT_FLAG | GB_CARRY_FLAG | GB_HALF_CARRY_FLAG); /* The meaning of the Half Carry flag is really hard to track -_- */ if (((hl & 0xFFF) + (rr & 0xFFF)) & 0x1000) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ( ((unsigned) hl + (unsigned) rr) & 0x10000) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -549,8 +554,8 @@ static void ld_a_drr(GB_gameboy_t *gb, uint8_t opcode) { uint8_t register_id; register_id = (opcode >> 4) + 1; - gb->registers[GB_REGISTER_AF] &= 0xFF; - gb->registers[GB_REGISTER_AF] |= cycle_read(gb, gb->registers[register_id]) << 8; + gb->af &= 0xFF; + gb->af |= cycle_read(gb, gb->registers[register_id]) << 8; } static void dec_rr(GB_gameboy_t *gb, uint8_t opcode) @@ -569,14 +574,14 @@ static void inc_lr(GB_gameboy_t *gb, uint8_t opcode) value = (gb->registers[register_id] & 0xFF) + 1; gb->registers[register_id] = (gb->registers[register_id] & 0xFF00) | value; - gb->registers[GB_REGISTER_AF] &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); if ((gb->registers[register_id] & 0x0F) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ((gb->registers[register_id] & 0xFF) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } static void dec_lr(GB_gameboy_t *gb, uint8_t opcode) @@ -588,15 +593,15 @@ static void dec_lr(GB_gameboy_t *gb, uint8_t opcode) value = (gb->registers[register_id] & 0xFF) - 1; gb->registers[register_id] = (gb->registers[register_id] & 0xFF00) | value; - gb->registers[GB_REGISTER_AF] &= ~(GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); - gb->registers[GB_REGISTER_AF] |= GB_SUBTRACT_FLAG; + gb->af &= ~(GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af |= GB_SUBTRACT_FLAG; if ((gb->registers[register_id] & 0x0F) == 0xF) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ((gb->registers[register_id] & 0xFF) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -605,37 +610,37 @@ static void ld_lr_d8(GB_gameboy_t *gb, uint8_t opcode) uint8_t register_id; register_id = (opcode >> 4) + 1; gb->registers[register_id] &= 0xFF00; - gb->registers[register_id] |= cycle_read_inc_oam_bug(gb, gb->pc++); + gb->registers[register_id] |= cycle_read(gb, gb->pc++); } static void rrca(GB_gameboy_t *gb, uint8_t opcode) { - bool carry = (gb->registers[GB_REGISTER_AF] & 0x100) != 0; + bool carry = (gb->af & 0x100) != 0; - gb->registers[GB_REGISTER_AF] = (gb->registers[GB_REGISTER_AF] >> 1) & 0xFF00; + gb->af = (gb->af >> 1) & 0xFF00; if (carry) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG | 0x8000; + gb->af |= GB_CARRY_FLAG | 0x8000; } } static void rra(GB_gameboy_t *gb, uint8_t opcode) { - bool bit1 = (gb->registers[GB_REGISTER_AF] & 0x0100) != 0; - bool carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; + bool bit1 = (gb->af & 0x0100) != 0; + bool carry = (gb->af & GB_CARRY_FLAG) != 0; - gb->registers[GB_REGISTER_AF] = (gb->registers[GB_REGISTER_AF] >> 1) & 0xFF00; + gb->af = (gb->af >> 1) & 0xFF00; if (carry) { - gb->registers[GB_REGISTER_AF] |= 0x8000; + gb->af |= 0x8000; } if (bit1) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } static void jr_r8(GB_gameboy_t *gb, uint8_t opcode) { /* Todo: Verify timing */ - gb->pc += (int8_t)cycle_read_inc_oam_bug(gb, gb->pc) + 1; + gb->pc += (int8_t)cycle_read(gb, gb->pc) + 1; cycle_no_access(gb); } @@ -643,21 +648,22 @@ static bool condition_code(GB_gameboy_t *gb, uint8_t opcode) { switch ((opcode >> 3) & 0x3) { case 0: - return !(gb->registers[GB_REGISTER_AF] & GB_ZERO_FLAG); + return !(gb->af & GB_ZERO_FLAG); case 1: - return (gb->registers[GB_REGISTER_AF] & GB_ZERO_FLAG); + return (gb->af & GB_ZERO_FLAG); case 2: - return !(gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG); + return !(gb->af & GB_CARRY_FLAG); case 3: - return (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG); + return (gb->af & GB_CARRY_FLAG); } + __builtin_unreachable(); return false; } static void jr_cc_r8(GB_gameboy_t *gb, uint8_t opcode) { - int8_t offset = cycle_read_inc_oam_bug(gb, gb->pc++); + int8_t offset = cycle_read(gb, gb->pc++); if (condition_code(gb, opcode)) { gb->pc += offset; cycle_no_access(gb); @@ -666,118 +672,118 @@ static void jr_cc_r8(GB_gameboy_t *gb, uint8_t opcode) static void daa(GB_gameboy_t *gb, uint8_t opcode) { - int16_t result = gb->registers[GB_REGISTER_AF] >> 8; + int16_t result = gb->af >> 8; - gb->registers[GB_REGISTER_AF] &= ~(0xFF00 | GB_ZERO_FLAG); + gb->af &= ~(0xFF00 | GB_ZERO_FLAG); - if (gb->registers[GB_REGISTER_AF] & GB_SUBTRACT_FLAG) { - if (gb->registers[GB_REGISTER_AF] & GB_HALF_CARRY_FLAG) { + if (gb->af & GB_SUBTRACT_FLAG) { + if (gb->af & GB_HALF_CARRY_FLAG) { result = (result - 0x06) & 0xFF; } - if (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) { + if (gb->af & GB_CARRY_FLAG) { result -= 0x60; } } else { - if ((gb->registers[GB_REGISTER_AF] & GB_HALF_CARRY_FLAG) || (result & 0x0F) > 0x09) { + if ((gb->af & GB_HALF_CARRY_FLAG) || (result & 0x0F) > 0x09) { result += 0x06; } - if ((gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) || result > 0x9F) { + if ((gb->af & GB_CARRY_FLAG) || result > 0x9F) { result += 0x60; } } if ((result & 0xFF) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((result & 0x100) == 0x100) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } - gb->registers[GB_REGISTER_AF] &= ~GB_HALF_CARRY_FLAG; - gb->registers[GB_REGISTER_AF] |= result << 8; + gb->af &= ~GB_HALF_CARRY_FLAG; + gb->af |= result << 8; } static void cpl(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_AF] ^= 0xFF00; - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG; + gb->af ^= 0xFF00; + gb->af |= GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG; } static void scf(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; - gb->registers[GB_REGISTER_AF] &= ~(GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG); + gb->af |= GB_CARRY_FLAG; + gb->af &= ~(GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG); } static void ccf(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_AF] ^= GB_CARRY_FLAG; - gb->registers[GB_REGISTER_AF] &= ~(GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG); + gb->af ^= GB_CARRY_FLAG; + gb->af &= ~(GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG); } static void ld_dhli_a(GB_gameboy_t *gb, uint8_t opcode) { - cycle_write(gb, gb->registers[GB_REGISTER_HL]++, gb->registers[GB_REGISTER_AF] >> 8); + cycle_write(gb, gb->hl++, gb->af >> 8); } static void ld_dhld_a(GB_gameboy_t *gb, uint8_t opcode) { - cycle_write(gb, gb->registers[GB_REGISTER_HL]--, gb->registers[GB_REGISTER_AF] >> 8); + cycle_write(gb, gb->hl--, gb->af >> 8); } static void ld_a_dhli(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_AF] &= 0xFF; - gb->registers[GB_REGISTER_AF] |= cycle_read_inc_oam_bug(gb, gb->registers[GB_REGISTER_HL]++) << 8; + gb->af &= 0xFF; + gb->af |= cycle_read(gb, gb->hl++) << 8; } static void ld_a_dhld(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_AF] &= 0xFF; - gb->registers[GB_REGISTER_AF] |= cycle_read_inc_oam_bug(gb, gb->registers[GB_REGISTER_HL]--) << 8; + gb->af &= 0xFF; + gb->af |= cycle_read(gb, gb->hl--) << 8; } static void inc_dhl(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value; - value = cycle_read(gb, gb->registers[GB_REGISTER_HL]) + 1; - cycle_write(gb, gb->registers[GB_REGISTER_HL], value); + value = cycle_read(gb, gb->hl) + 1; + cycle_write(gb, gb->hl, value); - gb->registers[GB_REGISTER_AF] &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); if ((value & 0x0F) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ((value & 0xFF) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } static void dec_dhl(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value; - value = cycle_read(gb, gb->registers[GB_REGISTER_HL]) - 1; - cycle_write(gb, gb->registers[GB_REGISTER_HL], value); + value = cycle_read(gb, gb->hl) - 1; + cycle_write(gb, gb->hl, value); - gb->registers[GB_REGISTER_AF] &= ~( GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); - gb->registers[GB_REGISTER_AF] |= GB_SUBTRACT_FLAG; + gb->af &= ~( GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af |= GB_SUBTRACT_FLAG; if ((value & 0x0F) == 0x0F) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ((value & 0xFF) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } static void ld_dhl_d8(GB_gameboy_t *gb, uint8_t opcode) { - uint8_t data = cycle_read_inc_oam_bug(gb, gb->pc++); - cycle_write(gb, gb->registers[GB_REGISTER_HL], data); + uint8_t data = cycle_read(gb, gb->pc++); + cycle_write(gb, gb->hl, data); } static uint8_t get_src_value(GB_gameboy_t *gb, uint8_t opcode) @@ -788,9 +794,9 @@ static uint8_t get_src_value(GB_gameboy_t *gb, uint8_t opcode) src_low = opcode & 1; if (src_register_id == GB_REGISTER_AF) { if (src_low) { - return gb->registers[GB_REGISTER_AF] >> 8; + return gb->af >> 8; } - return cycle_read(gb, gb->registers[GB_REGISTER_HL]); + return cycle_read(gb, gb->hl); } if (src_low) { return gb->registers[src_register_id] & 0xFF; @@ -807,11 +813,11 @@ static void set_src_value(GB_gameboy_t *gb, uint8_t opcode, uint8_t value) if (src_register_id == GB_REGISTER_AF) { if (src_low) { - gb->registers[GB_REGISTER_AF] &= 0xFF; - gb->registers[GB_REGISTER_AF] |= value << 8; + gb->af &= 0xFF; + gb->af |= value << 8; } else { - cycle_write(gb, gb->registers[GB_REGISTER_HL], value); + cycle_write(gb, gb->hl, value); } } else { @@ -840,13 +846,13 @@ static void ld_##x##_##y(GB_gameboy_t *gb, uint8_t opcode) \ #define LD_X_DHL(x) \ static void ld_##x##_##dhl(GB_gameboy_t *gb, uint8_t opcode) \ { \ -gb->x = cycle_read(gb, gb->registers[GB_REGISTER_HL]); \ +gb->x = cycle_read(gb, gb->hl); \ } #define LD_DHL_Y(y) \ static void ld_##dhl##_##y(GB_gameboy_t *gb, uint8_t opcode) \ { \ -cycle_write(gb, gb->registers[GB_REGISTER_HL], gb->y); \ +cycle_write(gb, gb->hl, gb->y); \ } LD_X_Y(b,c) LD_X_Y(b,d) LD_X_Y(b,e) LD_X_Y(b,h) LD_X_Y(b,l) LD_X_DHL(b) LD_X_Y(b,a) @@ -870,16 +876,16 @@ static void add_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = (a + value) << 8; + a = gb->af >> 8; + gb->af = (a + value) << 8; if ((uint8_t)(a + value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) + (value & 0xF) > 0x0F) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (((unsigned) a) + ((unsigned) value) > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -887,18 +893,18 @@ static void adc_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a, carry; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; - gb->registers[GB_REGISTER_AF] = (a + value + carry) << 8; + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = (a + value + carry) << 8; if ((uint8_t)(a + value + carry) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) + (value & 0xF) + carry > 0x0F) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (((unsigned) a) + ((unsigned) value) + carry > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -906,16 +912,16 @@ static void sub_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = ((a - value) << 8) | GB_SUBTRACT_FLAG; + a = gb->af >> 8; + gb->af = ((a - value) << 8) | GB_SUBTRACT_FLAG; if (a == value) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) < (value & 0xF)) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (a < value) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -923,18 +929,18 @@ static void sbc_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a, carry; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; - gb->registers[GB_REGISTER_AF] = ((a - value - carry) << 8) | GB_SUBTRACT_FLAG; + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = ((a - value - carry) << 8) | GB_SUBTRACT_FLAG; if ((uint8_t) (a - value - carry) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) < (value & 0xF) + carry) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (((unsigned) a) - ((unsigned) value) - carry > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -942,10 +948,10 @@ static void and_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = ((a & value) << 8) | GB_HALF_CARRY_FLAG; + a = gb->af >> 8; + gb->af = ((a & value) << 8) | GB_HALF_CARRY_FLAG; if ((a & value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -953,10 +959,10 @@ static void xor_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = (a ^ value) << 8; + a = gb->af >> 8; + gb->af = (a ^ value) << 8; if ((a ^ value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -964,10 +970,10 @@ static void or_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = (a | value) << 8; + a = gb->af >> 8; + gb->af = (a | value) << 8; if ((a | value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -975,17 +981,17 @@ static void cp_a_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; value = get_src_value(gb, opcode); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] &= 0xFF00; - gb->registers[GB_REGISTER_AF] |= GB_SUBTRACT_FLAG; + a = gb->af >> 8; + gb->af &= 0xFF00; + gb->af |= GB_SUBTRACT_FLAG; if (a == value) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) < (value & 0xF)) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (a < value) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -1014,15 +1020,15 @@ static void pop_rr(GB_gameboy_t *gb, uint8_t opcode) { uint8_t register_id; register_id = ((opcode >> 4) + 1) & 3; - gb->registers[register_id] = cycle_read_inc_oam_bug(gb, gb->registers[GB_REGISTER_SP]++); - gb->registers[register_id] |= cycle_read(gb, gb->registers[GB_REGISTER_SP]++) << 8; - gb->registers[GB_REGISTER_AF] &= 0xFFF0; // Make sure we don't set impossible flags on F! See Blargg's PUSH AF test. + gb->registers[register_id] = cycle_read(gb, gb->sp++); + gb->registers[register_id] |= cycle_read(gb, gb->sp++) << 8; + gb->af &= 0xFFF0; // Make sure we don't set impossible flags on F! See Blargg's PUSH AF test. } static void jp_cc_a16(GB_gameboy_t *gb, uint8_t opcode) { - uint16_t addr = cycle_read_inc_oam_bug(gb, gb->pc++); - addr |= (cycle_read_inc_oam_bug(gb, gb->pc++) << 8); + uint16_t addr = cycle_read(gb, gb->pc++); + addr |= (cycle_read(gb, gb->pc++) << 8); if (condition_code(gb, opcode)) { cycle_no_access(gb); gb->pc = addr; @@ -1031,8 +1037,8 @@ static void jp_cc_a16(GB_gameboy_t *gb, uint8_t opcode) static void jp_a16(GB_gameboy_t *gb, uint8_t opcode) { - uint16_t addr = cycle_read_inc_oam_bug(gb, gb->pc); - addr |= (cycle_read_inc_oam_bug(gb, gb->pc + 1) << 8); + uint16_t addr = cycle_read(gb, gb->pc); + addr |= (cycle_read(gb, gb->pc + 1) << 8); cycle_no_access(gb); gb->pc = addr; @@ -1041,12 +1047,12 @@ static void jp_a16(GB_gameboy_t *gb, uint8_t opcode) static void call_cc_a16(GB_gameboy_t *gb, uint8_t opcode) { uint16_t call_addr = gb->pc - 1; - uint16_t addr = cycle_read_inc_oam_bug(gb, gb->pc++); - addr |= (cycle_read_inc_oam_bug(gb, gb->pc++) << 8); + uint16_t addr = cycle_read(gb, gb->pc++); + addr |= (cycle_read(gb, gb->pc++) << 8); if (condition_code(gb, opcode)) { cycle_oam_bug(gb, GB_REGISTER_SP); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) >> 8); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) & 0xFF); + cycle_write(gb, --gb->sp, (gb->pc) >> 8); + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); gb->pc = addr; GB_debugger_call_hook(gb, call_addr); @@ -1058,130 +1064,130 @@ static void push_rr(GB_gameboy_t *gb, uint8_t opcode) uint8_t register_id; cycle_oam_bug(gb, GB_REGISTER_SP); register_id = ((opcode >> 4) + 1) & 3; - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->registers[register_id]) >> 8); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->registers[register_id]) & 0xFF); + cycle_write(gb, --gb->sp, (gb->registers[register_id]) >> 8); + cycle_write(gb, --gb->sp, (gb->registers[register_id]) & 0xFF); } static void add_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = (a + value) << 8; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = (a + value) << 8; if ((uint8_t) (a + value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) + (value & 0xF) > 0x0F) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (((unsigned) a) + ((unsigned) value) > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } static void adc_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a, carry; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; - gb->registers[GB_REGISTER_AF] = (a + value + carry) << 8; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = (a + value + carry) << 8; - if (gb->registers[GB_REGISTER_AF] == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + if (gb->af == 0) { + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) + (value & 0xF) + carry > 0x0F) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (((unsigned) a) + ((unsigned) value) + carry > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } static void sub_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = ((a - value) << 8) | GB_SUBTRACT_FLAG; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = ((a - value) << 8) | GB_SUBTRACT_FLAG; if (a == value) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) < (value & 0xF)) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (a < value) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } static void sbc_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a, carry; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; - gb->registers[GB_REGISTER_AF] = ((a - value - carry) << 8) | GB_SUBTRACT_FLAG; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = ((a - value - carry) << 8) | GB_SUBTRACT_FLAG; if ((uint8_t) (a - value - carry) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) < (value & 0xF) + carry) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (((unsigned) a) - ((unsigned) value) - carry > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } static void and_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = ((a & value) << 8) | GB_HALF_CARRY_FLAG; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = ((a & value) << 8) | GB_HALF_CARRY_FLAG; if ((a & value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } static void xor_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = (a ^ value) << 8; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = (a ^ value) << 8; if ((a ^ value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } static void or_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] = (a | value) << 8; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = (a | value) << 8; if ((a | value) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } static void cp_a_d8(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value, a; - value = cycle_read_inc_oam_bug(gb, gb->pc++); - a = gb->registers[GB_REGISTER_AF] >> 8; - gb->registers[GB_REGISTER_AF] &= 0xFF00; - gb->registers[GB_REGISTER_AF] |= GB_SUBTRACT_FLAG; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af &= 0xFF00; + gb->af |= GB_SUBTRACT_FLAG; if (a == value) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } if ((a & 0xF) < (value & 0xF)) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if (a < value) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } @@ -1189,8 +1195,8 @@ static void rst(GB_gameboy_t *gb, uint8_t opcode) { uint16_t call_addr = gb->pc - 1; cycle_oam_bug(gb, GB_REGISTER_SP); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) >> 8); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) & 0xFF); + cycle_write(gb, --gb->sp, (gb->pc) >> 8); + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); gb->pc = opcode ^ 0xC7; GB_debugger_call_hook(gb, call_addr); } @@ -1198,8 +1204,8 @@ static void rst(GB_gameboy_t *gb, uint8_t opcode) static void ret(GB_gameboy_t *gb, uint8_t opcode) { GB_debugger_ret_hook(gb); - gb->pc = cycle_read_inc_oam_bug(gb, gb->registers[GB_REGISTER_SP]++); - gb->pc |= cycle_read(gb, gb->registers[GB_REGISTER_SP]++) << 8; + gb->pc = cycle_read(gb, gb->sp++); + gb->pc |= cycle_read(gb, gb->sp++) << 8; cycle_no_access(gb); } @@ -1223,80 +1229,80 @@ static void ret_cc(GB_gameboy_t *gb, uint8_t opcode) static void call_a16(GB_gameboy_t *gb, uint8_t opcode) { uint16_t call_addr = gb->pc - 1; - uint16_t addr = cycle_read_inc_oam_bug(gb, gb->pc++); - addr |= (cycle_read_inc_oam_bug(gb, gb->pc++) << 8); + uint16_t addr = cycle_read(gb, gb->pc++); + addr |= (cycle_read(gb, gb->pc++) << 8); cycle_oam_bug(gb, GB_REGISTER_SP); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) >> 8); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) & 0xFF); + cycle_write(gb, --gb->sp, (gb->pc) >> 8); + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); gb->pc = addr; GB_debugger_call_hook(gb, call_addr); } static void ld_da8_a(GB_gameboy_t *gb, uint8_t opcode) { - uint8_t temp = cycle_read_inc_oam_bug(gb, gb->pc++); - cycle_write(gb, 0xFF00 + temp, gb->registers[GB_REGISTER_AF] >> 8); + uint8_t temp = cycle_read(gb, gb->pc++); + cycle_write(gb, 0xFF00 + temp, gb->af >> 8); } static void ld_a_da8(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_AF] &= 0xFF; - uint8_t temp = cycle_read_inc_oam_bug(gb, gb->pc++); - gb->registers[GB_REGISTER_AF] |= cycle_read(gb, 0xFF00 + temp) << 8; + gb->af &= 0xFF; + uint8_t temp = cycle_read(gb, gb->pc++); + gb->af |= cycle_read(gb, 0xFF00 + temp) << 8; } static void ld_dc_a(GB_gameboy_t *gb, uint8_t opcode) { - cycle_write(gb, 0xFF00 + (gb->registers[GB_REGISTER_BC] & 0xFF), gb->registers[GB_REGISTER_AF] >> 8); + cycle_write(gb, 0xFF00 + (gb->bc & 0xFF), gb->af >> 8); } static void ld_a_dc(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_AF] &= 0xFF; - gb->registers[GB_REGISTER_AF] |= cycle_read(gb, 0xFF00 + (gb->registers[GB_REGISTER_BC] & 0xFF)) << 8; + gb->af &= 0xFF; + gb->af |= cycle_read(gb, 0xFF00 + (gb->bc & 0xFF)) << 8; } static void add_sp_r8(GB_gameboy_t *gb, uint8_t opcode) { int16_t offset; - uint16_t sp = gb->registers[GB_REGISTER_SP]; - offset = (int8_t) cycle_read_inc_oam_bug(gb, gb->pc++); + uint16_t sp = gb->sp; + offset = (int8_t) cycle_read(gb, gb->pc++); cycle_no_access(gb); cycle_no_access(gb); - gb->registers[GB_REGISTER_SP] += offset; + gb->sp += offset; - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; /* A new instruction, a new meaning for Half Carry! */ if ((sp & 0xF) + (offset & 0xF) > 0xF) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; } if ((sp & 0xFF) + (offset & 0xFF) > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } } static void jp_hl(GB_gameboy_t *gb, uint8_t opcode) { - gb->pc = gb->registers[GB_REGISTER_HL]; + gb->pc = gb->hl; } static void ld_da16_a(GB_gameboy_t *gb, uint8_t opcode) { uint16_t addr; - addr = cycle_read_inc_oam_bug(gb, gb->pc++); - addr |= cycle_read_inc_oam_bug(gb, gb->pc++) << 8; - cycle_write(gb, addr, gb->registers[GB_REGISTER_AF] >> 8); + addr = cycle_read(gb, gb->pc++); + addr |= cycle_read(gb, gb->pc++) << 8; + cycle_write(gb, addr, gb->af >> 8); } static void ld_a_da16(GB_gameboy_t *gb, uint8_t opcode) { uint16_t addr; - gb->registers[GB_REGISTER_AF] &= 0xFF; - addr = cycle_read_inc_oam_bug(gb, gb->pc++); - addr |= cycle_read_inc_oam_bug(gb, gb->pc++) << 8; - gb->registers[GB_REGISTER_AF] |= cycle_read(gb, addr) << 8; + gb->af &= 0xFF; + addr = cycle_read(gb, gb->pc++); + addr |= cycle_read(gb, gb->pc++) << 8; + gb->af |= cycle_read(gb, addr) << 8; } static void di(GB_gameboy_t *gb, uint8_t opcode) @@ -1317,24 +1323,24 @@ static void ei(GB_gameboy_t *gb, uint8_t opcode) static void ld_hl_sp_r8(GB_gameboy_t *gb, uint8_t opcode) { int16_t offset; - gb->registers[GB_REGISTER_AF] &= 0xFF00; - offset = (int8_t) cycle_read_inc_oam_bug(gb, gb->pc++); + gb->af &= 0xFF00; + offset = (int8_t) cycle_read(gb, gb->pc++); cycle_no_access(gb); - gb->registers[GB_REGISTER_HL] = gb->registers[GB_REGISTER_SP] + offset; + gb->hl = gb->sp + offset; - if ((gb->registers[GB_REGISTER_SP] & 0xF) + (offset & 0xF) > 0xF) { - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + if ((gb->sp & 0xF) + (offset & 0xF) > 0xF) { + gb->af |= GB_HALF_CARRY_FLAG; } - if ((gb->registers[GB_REGISTER_SP] & 0xFF) + (offset & 0xFF) > 0xFF) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + if ((gb->sp & 0xFF) + (offset & 0xFF) > 0xFF) { + gb->af |= GB_CARRY_FLAG; } } static void ld_sp_hl(GB_gameboy_t *gb, uint8_t opcode) { - gb->registers[GB_REGISTER_SP] = gb->registers[GB_REGISTER_HL]; - cycle_no_access(gb); + gb->sp = gb->hl; + cycle_oam_bug(gb, GB_REGISTER_HL); } static void rlc_r(GB_gameboy_t *gb, uint8_t opcode) @@ -1343,13 +1349,13 @@ static void rlc_r(GB_gameboy_t *gb, uint8_t opcode) uint8_t value; value = get_src_value(gb, opcode); carry = (value & 0x80) != 0; - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; set_src_value(gb, opcode, (value << 1) | carry); if (carry) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } if (!(value << 1)) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1359,14 +1365,14 @@ static void rrc_r(GB_gameboy_t *gb, uint8_t opcode) uint8_t value; value = get_src_value(gb, opcode); carry = (value & 0x01) != 0; - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; value = (value >> 1) | (carry << 7); set_src_value(gb, opcode, value); if (carry) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } if (value == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1376,17 +1382,17 @@ static void rl_r(GB_gameboy_t *gb, uint8_t opcode) uint8_t value; bool bit7; value = get_src_value(gb, opcode); - carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; + carry = (gb->af & GB_CARRY_FLAG) != 0; bit7 = (value & 0x80) != 0; - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; value = (value << 1) | carry; set_src_value(gb, opcode, value); if (bit7) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } if (value == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1397,17 +1403,17 @@ static void rr_r(GB_gameboy_t *gb, uint8_t opcode) bool bit1; value = get_src_value(gb, opcode); - carry = (gb->registers[GB_REGISTER_AF] & GB_CARRY_FLAG) != 0; + carry = (gb->af & GB_CARRY_FLAG) != 0; bit1 = (value & 0x1) != 0; - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; value = (value >> 1) | (carry << 7); set_src_value(gb, opcode, value); if (bit1) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } if (value == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1417,13 +1423,13 @@ static void sla_r(GB_gameboy_t *gb, uint8_t opcode) bool carry; value = get_src_value(gb, opcode); carry = (value & 0x80) != 0; - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; set_src_value(gb, opcode, (value << 1)); if (carry) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } if ((value & 0x7F) == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1433,14 +1439,14 @@ static void sra_r(GB_gameboy_t *gb, uint8_t opcode) uint8_t value; value = get_src_value(gb, opcode); bit7 = value & 0x80; - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; if (value & 1) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } value = (value >> 1) | bit7; set_src_value(gb, opcode, value); if (value == 0) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1448,13 +1454,13 @@ static void srl_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value; value = get_src_value(gb, opcode); - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; set_src_value(gb, opcode, (value >> 1)); if (value & 1) { - gb->registers[GB_REGISTER_AF] |= GB_CARRY_FLAG; + gb->af |= GB_CARRY_FLAG; } if (!(value >> 1)) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1462,10 +1468,10 @@ static void swap_r(GB_gameboy_t *gb, uint8_t opcode) { uint8_t value; value = get_src_value(gb, opcode); - gb->registers[GB_REGISTER_AF] &= 0xFF00; + gb->af &= 0xFF00; set_src_value(gb, opcode, (value >> 4) | (value << 4)); if (!value) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } @@ -1476,10 +1482,10 @@ static void bit_r(GB_gameboy_t *gb, uint8_t opcode) value = get_src_value(gb, opcode); bit = 1 << ((opcode >> 3) & 7); if ((opcode & 0xC0) == 0x40) { /* Bit */ - gb->registers[GB_REGISTER_AF] &= 0xFF00 | GB_CARRY_FLAG; - gb->registers[GB_REGISTER_AF] |= GB_HALF_CARRY_FLAG; + gb->af &= 0xFF00 | GB_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; if (!(bit & value)) { - gb->registers[GB_REGISTER_AF] |= GB_ZERO_FLAG; + gb->af |= GB_ZERO_FLAG; } } else if ((opcode & 0xC0) == 0x80) { /* res */ @@ -1492,7 +1498,7 @@ static void bit_r(GB_gameboy_t *gb, uint8_t opcode) static void cb_prefix(GB_gameboy_t *gb, uint8_t opcode) { - opcode = cycle_read_inc_oam_bug(gb, gb->pc++); + opcode = cycle_read(gb, gb->pc++); switch (opcode >> 3) { case 0: rlc_r(gb, opcode); @@ -1600,28 +1606,30 @@ void GB_cpu_run(GB_gameboy_t *gb) /* Wake up from HALT mode without calling interrupt code. */ if (gb->halted && !effective_ime && interrupt_queue) { gb->halted = false; + gb->speed_switch_halt_countdown = 0; } /* Call interrupt */ else if (effective_ime && interrupt_queue) { gb->halted = false; + gb->speed_switch_halt_countdown = 0; uint16_t call_addr = gb->pc; - gb->last_opcode_read = cycle_read_inc_oam_bug(gb, gb->pc++); + gb->last_opcode_read = cycle_read(gb, gb->pc++); cycle_oam_bug_pc(gb); gb->pc--; - GB_trigger_oam_bug(gb, gb->registers[GB_REGISTER_SP]); /* Todo: test T-cycle timing */ + GB_trigger_oam_bug(gb, gb->sp); /* Todo: test T-cycle timing */ cycle_no_access(gb); - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) >> 8); + cycle_write(gb, --gb->sp, (gb->pc) >> 8); interrupt_queue = gb->interrupt_enable; - if (gb->registers[GB_REGISTER_SP] == GB_IO_IF + 0xFF00 + 1) { - gb->registers[GB_REGISTER_SP]--; + if (gb->sp == GB_IO_IF + 0xFF00 + 1) { + gb->sp--; interrupt_queue &= cycle_write_if(gb, (gb->pc) & 0xFF); } else { - cycle_write(gb, --gb->registers[GB_REGISTER_SP], (gb->pc) & 0xFF); + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); interrupt_queue &= (gb->io_registers[GB_IO_IF]) & 0x1F; } @@ -1642,7 +1650,7 @@ void GB_cpu_run(GB_gameboy_t *gb) } /* Run mode */ else if (!gb->halted) { - gb->last_opcode_read = cycle_read_inc_oam_bug(gb, gb->pc++); + gb->last_opcode_read = cycle_read(gb, gb->pc++); if (gb->halt_bug) { gb->pc--; gb->halt_bug = false; diff --git a/thirdparty/SameBoy/Core/timing.c b/thirdparty/SameBoy/Core/timing.c index 7b79b7259..786dbc9bc 100644 --- a/thirdparty/SameBoy/Core/timing.c +++ b/thirdparty/SameBoy/Core/timing.c @@ -145,7 +145,6 @@ static void increase_tima(GB_gameboy_t *gb) static void GB_set_internal_div_counter(GB_gameboy_t *gb, uint16_t value) { /* TIMA increases when a specific high-bit becomes a low-bit. */ - value &= INTERNAL_DIV_CYCLES - 1; uint16_t triggers = gb->div_counter & ~value; if ((gb->io_registers[GB_IO_TAC] & 4) && (triggers & GB_TAC_TRIGGER_BITS[gb->io_registers[GB_IO_TAC] & 3])) { increase_tima(gb); @@ -347,6 +346,22 @@ static void GB_rtc_run(GB_gameboy_t *gb, uint8_t cycles) void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles) { + if (gb->speed_switch_countdown) { + if (gb->speed_switch_countdown == cycles) { + gb->cgb_double_speed ^= true; + gb->speed_switch_countdown = 0; + } + else if (gb->speed_switch_countdown > cycles) { + gb->speed_switch_countdown -= cycles; + } + else { + uint8_t old_cycles = gb->speed_switch_countdown; + cycles -= old_cycles; + gb->speed_switch_countdown = 0; + GB_advance_cycles(gb, old_cycles); + gb->cgb_double_speed ^= true; + } + } gb->apu.pcm_mask[0] = gb->apu.pcm_mask[1] = 0xFF; // Sort of hacky, but too many cross-component interactions to do it right // Affected by speed boost gb->dma_cycles += cycles; @@ -356,12 +371,31 @@ void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles) advance_serial(gb, cycles); // TODO: Verify what happens in STOP mode } + if (gb->speed_switch_halt_countdown) { + gb->speed_switch_halt_countdown -= cycles; + if (gb->speed_switch_halt_countdown <= 0) { + gb->speed_switch_halt_countdown = 0; + gb->halted = false; + } + } + gb->debugger_ticks += cycles; + + if (gb->speed_switch_freeze) { + if (gb->speed_switch_freeze >= cycles) { + gb->speed_switch_freeze -= cycles; + return; + } + cycles -= gb->speed_switch_freeze; + gb->speed_switch_freeze = 0; + } if (!gb->cgb_double_speed) { cycles <<= 1; } + gb->absolute_debugger_ticks += cycles; + // Not affected by speed boost if (gb->io_registers[GB_IO_LCDC] & 0x80) { gb->double_speed_alignment += cycles; @@ -400,7 +434,7 @@ void GB_emulate_timer_glitch(GB_gameboy_t *gb, uint8_t old_tac, uint8_t new_tac) /* The bit used for overflow testing must have been 1 */ if (gb->div_counter & old_clocks) { /* And now either the timer must be disabled, or the new bit used for overflow testing be 0. */ - if (!(new_tac & 4) || gb->div_counter & new_clocks) { + if (!(new_tac & 4) || !(gb->div_counter & new_clocks)) { increase_tima(gb); } } diff --git a/thirdparty/SameBoy/FreeDesktop/sameboy.desktop b/thirdparty/SameBoy/FreeDesktop/sameboy.desktop index 20b1b46eb..80d0902f5 100644 --- a/thirdparty/SameBoy/FreeDesktop/sameboy.desktop +++ b/thirdparty/SameBoy/FreeDesktop/sameboy.desktop @@ -8,5 +8,5 @@ Comment=Game Boy and Game Boy Color emulator Keywords=game;boy;gameboy;color;emulator Terminal=false StartupNotify=false -Categories=Application;Game; -MimeType=application/x-gameboy-rom;application/x-gameboy-color-rom;application/x-gameboy-isx \ No newline at end of file +Categories=Game;Emulator; +MimeType=application/x-gameboy-rom;application/x-gameboy-color-rom;application/x-gameboy-isx diff --git a/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc b/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc index ea3ba9a46..fb7df6301 100644 --- a/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc +++ b/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc @@ -4,8 +4,6 @@ hacksByManufacturer = @{ @(0x045E): @{ // Microsoft - /* Generally untested, but Microsoft goes by the book when it comes to HID report descriptors, so - it should work out of the box. The hack is only here for automatic mapping */ JOYAxisGroups: @{ @(kHIDUsage_GD_X): @(0), @@ -13,7 +11,7 @@ hacksByManufacturer = @{ @(kHIDUsage_GD_Z): @(2), @(kHIDUsage_GD_Rx): @(1), @(kHIDUsage_GD_Ry): @(1), - @(kHIDUsage_GD_Rz): @(3), + @(kHIDUsage_GD_Rz): @(2), }, JOYButtonUsageMapping: @{ @@ -37,8 +35,10 @@ hacksByManufacturer = @{ JOYAxes2DUsageMapping: @{ AXES2D(1): @(JOYAxes2DUsageLeftStick), - AXES2D(4): @(JOYAxes2DUsageRightStick), + AXES2D(3): @(JOYAxes2DUsageRightStick), }, + + JOYEmulateAxisButtons: @YES, }, @(0x054C): @{ // Sony @@ -71,14 +71,49 @@ hacksByManufacturer = @{ }, JOYAxisUsageMapping: @{ - AXIS(4): @(JOYAxisUsageL1), - AXIS(5): @(JOYAxisUsageR1), + AXIS(4): @(JOYAxisUsageL2), + AXIS(5): @(JOYAxisUsageR2), }, JOYAxes2DUsageMapping: @{ AXES2D(1): @(JOYAxes2DUsageLeftStick), AXES2D(4): @(JOYAxes2DUsageRightStick), }, + + // When DualSense mode is activated on BT, The report ID is 0x31 and there's an extra byte + JOYCustomReports: @{ + @(0x31): @[ + /* 1D and 2D axes */ + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x08, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x10, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x18, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x20, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x28, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x30, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0, @"max": @255}, + + /* Hat Switch*/ + @{@"reportID": @(0x31), @"size":@4, @"offset":@0x40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Hatswitch), @"min": @0, @"max": @7}, + + /* Buttons */ + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x44, @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x45, @"usagePage":@(kHIDPage_Button), @"usage":@2}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x46, @"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x47, @"usagePage":@(kHIDPage_Button), @"usage":@4}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x48, @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x49, @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4a, @"usagePage":@(kHIDPage_Button), @"usage":@7}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4b, @"usagePage":@(kHIDPage_Button), @"usage":@8}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4c, @"usagePage":@(kHIDPage_Button), @"usage":@9}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4d, @"usagePage":@(kHIDPage_Button), @"usage":@10}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4e, @"usagePage":@(kHIDPage_Button), @"usage":@11}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4f, @"usagePage":@(kHIDPage_Button), @"usage":@12}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x50, @"usagePage":@(kHIDPage_Button), @"usage":@13}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x51, @"usagePage":@(kHIDPage_Button), @"usage":@14}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x52, @"usagePage":@(kHIDPage_Button), @"usage":@15}, + ], + }, + + JOYIsSony: @YES, } }; @@ -407,10 +442,9 @@ hacksByName = @{ @{@"reportID": @(1), @"size":@12, @"offset":@76, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0xFFF, @"max": @0}, ], }, + + JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken }, - - JOYIgnoredReports: @(0x30), // Ignore the real 0x30 report as it's broken - @"PLAYSTATION(R)3 Controller": @{ // DualShock 3 JOYAxisGroups: @{ @(kHIDUsage_GD_X): @(0), diff --git a/thirdparty/SameBoy/JoyKit/JOYAxis.h b/thirdparty/SameBoy/JoyKit/JOYAxis.h index 5a4c1669e..8d4b7abe3 100644 --- a/thirdparty/SameBoy/JoyKit/JOYAxis.h +++ b/thirdparty/SameBoy/JoyKit/JOYAxis.h @@ -1,4 +1,5 @@ #import +#import "JOYButton.h" typedef enum { JOYAxisUsageNone, @@ -8,11 +9,16 @@ typedef enum { JOYAxisUsageR1, JOYAxisUsageR2, JOYAxisUsageR3, + + JOYAxisUsageSlider, + JOYAxisUsageDial, JOYAxisUsageWheel, + JOYAxisUsageRudder, JOYAxisUsageThrottle, JOYAxisUsageAccelerator, JOYAxisUsageBrake, + JOYAxisUsageNonGenericMax, JOYAxisUsageGeneric0 = 0x10000, @@ -23,6 +29,7 @@ typedef enum { + (NSString *)usageToString: (JOYAxisUsage) usage; - (uint64_t)uniqueID; - (double)value; +- (JOYButtonUsage)equivalentButtonUsage; @property JOYAxisUsage usage; @end diff --git a/thirdparty/SameBoy/JoyKit/JOYAxis.m b/thirdparty/SameBoy/JoyKit/JOYAxis.m index 169eaee86..afe90d268 100644 --- a/thirdparty/SameBoy/JoyKit/JOYAxis.m +++ b/thirdparty/SameBoy/JoyKit/JOYAxis.m @@ -19,6 +19,8 @@ + (NSString *)usageToString: (JOYAxisUsage) usage @"Analog R1", @"Analog R2", @"Analog R3", + @"Slider", + @"Dial", @"Wheel", @"Rudder", @"Throttle", @@ -57,10 +59,23 @@ - (instancetype)initWithElement:(JOYElement *)element if (element.usagePage == kHIDPage_GenericDesktop) { - uint16_t usage = element.usage; - _usage = JOYAxisUsageGeneric0 + usage - kHIDUsage_GD_X + 1; + switch (element.usage) { + case kHIDUsage_GD_Slider: _usage = JOYAxisUsageSlider; break; + case kHIDUsage_GD_Dial: _usage = JOYAxisUsageDial; break; + case kHIDUsage_GD_Wheel: _usage = JOYAxisUsageWheel; break; + default: + _usage = JOYAxisUsageGeneric0 + element.usage - kHIDUsage_GD_X + 1; + break; + } + } + else if (element.usagePage == kHIDPage_Simulation) { + switch (element.usage) { + case kHIDUsage_Sim_Accelerator: _usage = JOYAxisUsageAccelerator; break; + case kHIDUsage_Sim_Brake: _usage = JOYAxisUsageBrake; break; + case kHIDUsage_Sim_Rudder: _usage = JOYAxisUsageRudder; break; + case kHIDUsage_Sim_Throttle: _usage = JOYAxisUsageThrottle; break; + } } - _min = 1.0; return self; @@ -87,4 +102,28 @@ - (bool)updateState return old != _state; } +- (JOYButtonUsage)equivalentButtonUsage +{ + if (self.usage >= JOYAxisUsageGeneric0) { + return self.usage - JOYAxisUsageGeneric0 + JOYButtonUsageGeneric0; + } + switch (self.usage) { + case JOYAxisUsageL1: return JOYButtonUsageL1; + case JOYAxisUsageL2: return JOYButtonUsageL2; + case JOYAxisUsageL3: return JOYButtonUsageL3; + case JOYAxisUsageR1: return JOYButtonUsageR1; + case JOYAxisUsageR2: return JOYButtonUsageR2; + case JOYAxisUsageR3: return JOYButtonUsageR3; + case JOYAxisUsageSlider: return JOYButtonUsageSlider; + case JOYAxisUsageDial: return JOYButtonUsageDial; + case JOYAxisUsageWheel: return JOYButtonUsageWheel; + case JOYAxisUsageRudder: return JOYButtonUsageRudder; + case JOYAxisUsageThrottle: return JOYButtonUsageThrottle; + case JOYAxisUsageAccelerator: return JOYButtonUsageAccelerator; + case JOYAxisUsageBrake: return JOYButtonUsageBrake; + default: return JOYButtonUsageNone; + } +} + + @end diff --git a/thirdparty/SameBoy/JoyKit/JOYButton.h b/thirdparty/SameBoy/JoyKit/JOYButton.h index f732c8e6a..6a67c6c16 100644 --- a/thirdparty/SameBoy/JoyKit/JOYButton.h +++ b/thirdparty/SameBoy/JoyKit/JOYButton.h @@ -26,6 +26,16 @@ typedef enum { JOYButtonUsageDPadRight, JOYButtonUsageDPadUp, JOYButtonUsageDPadDown, + + JOYButtonUsageSlider, + JOYButtonUsageDial, + JOYButtonUsageWheel, + + JOYButtonUsageRudder, + JOYButtonUsageThrottle, + JOYButtonUsageAccelerator, + JOYButtonUsageBrake, + JOYButtonUsageNonGenericMax, JOYButtonUsageGeneric0 = 0x10000, diff --git a/thirdparty/SameBoy/JoyKit/JOYButton.m b/thirdparty/SameBoy/JoyKit/JOYButton.m index 3e6026d1e..18970cde8 100644 --- a/thirdparty/SameBoy/JoyKit/JOYButton.m +++ b/thirdparty/SameBoy/JoyKit/JOYButton.m @@ -1,5 +1,6 @@ #import "JOYButton.h" #import "JOYElement.h" +#import @implementation JOYButton { @@ -80,6 +81,12 @@ - (instancetype)initWithElement:(JOYElement *)element case kHIDUsage_GD_SystemMainMenu: _usage = JOYButtonUsageHome; break; } } + else if (element.usagePage == kHIDPage_Consumer) { + switch (element.usage) { + case kHIDUsage_Csmr_ACHome: _usage = JOYButtonUsageHome; break; + case kHIDUsage_Csmr_ACBack: _usage = JOYButtonUsageSelect; break; + } + } return self; } @@ -98,5 +105,4 @@ - (bool)updateState } return false; } - @end diff --git a/thirdparty/SameBoy/JoyKit/JOYController.h b/thirdparty/SameBoy/JoyKit/JOYController.h index 9ed7cf7b1..8f5f6f447 100644 --- a/thirdparty/SameBoy/JoyKit/JOYController.h +++ b/thirdparty/SameBoy/JoyKit/JOYController.h @@ -4,7 +4,6 @@ #import "JOYAxes2D.h" #import "JOYHat.h" -static NSString const *JOYAxesEmulateButtonsKey = @"JOYAxesEmulateButtons"; static NSString const *JOYAxes2DEmulateButtonsKey = @"JOYAxes2DEmulateButtons"; static NSString const *JOYHatsEmulateButtonsKey = @"JOYHatsEmulateButtons"; @@ -35,6 +34,7 @@ static NSString const *JOYHatsEmulateButtonsKey = @"JOYHatsEmulateButtons"; - (NSArray *) hats; - (void)setRumbleAmplitude:(double)amp; - (void)setPlayerLEDs:(uint8_t)mask; +- (uint8_t)LEDMaskForPlayer:(unsigned)player; @property (readonly, getter=isConnected) bool connected; @end diff --git a/thirdparty/SameBoy/JoyKit/JOYController.m b/thirdparty/SameBoy/JoyKit/JOYController.m index 8ec127948..1097ef65b 100644 --- a/thirdparty/SameBoy/JoyKit/JOYController.m +++ b/thirdparty/SameBoy/JoyKit/JOYController.m @@ -7,6 +7,9 @@ #import "JOYEmulatedButton.h" #include +#include +extern NSTextField *globalDebugField; + #define PWM_RESOLUTION 16 static NSString const *JOYAxisGroups = @"JOYAxisGroups"; @@ -26,6 +29,8 @@ static NSString const *JOYActivationReport = @"JOYActivationReport"; static NSString const *JOYIgnoredReports = @"JOYIgnoredReports"; static NSString const *JOYIsDualShock3 = @"JOYIsDualShock3"; +static NSString const *JOYIsSony = @"JOYIsSony"; +static NSString const *JOYEmulateAxisButtons = @"JOYEmulateAxisButtons"; static NSMutableDictionary *controllers; // Physical controllers static NSMutableArray *exposedControllers; // Logical controllers @@ -35,7 +40,6 @@ static NSMutableSet> *listeners = nil; -static bool axesEmulateButtons = false; static bool axes2DEmulateButtons = false; static bool hatsEmulateButtons = false; @@ -94,7 +98,7 @@ static void HIDReport(void *context, IOReturn result, void *sender, IOHIDReportT uint32_t reportID, uint8_t *report, CFIndex reportLength) { if (reportLength) { - [(__bridge JOYController *)context gotReport:[[NSData alloc] initWithBytesNoCopy:report length:reportLength freeWhenDone:NO]]; + [(__bridge JOYController *)context gotReport:[[NSData alloc] initWithBytesNoCopy:report length:reportLength freeWhenDone:false]]; } } @@ -125,9 +129,37 @@ typedef struct __attribute__((packed)) { uint8_t padding3[13]; } JOYDualShock3Output; +typedef struct __attribute__((packed)) { + uint8_t reportID; + uint8_t sequence; + union { + uint8_t tag; + uint8_t reportIDOnUSB; + }; + uint16_t flags; + uint8_t rumbleRightStrength; // Weak + uint8_t rumbleLeftStrength; // Strong + uint8_t reserved[4]; + uint8_t muteButtonLED; + uint8_t powerSaveControl; + uint8_t reserved2[28]; + uint8_t flags2; + uint8_t reserved3[2]; + uint8_t lightbarSetup; + uint8_t LEDBrightness; + uint8_t playerLEDs; + uint8_t lightbarRed; + uint8_t lightbarGreen; + uint8_t lightbarBlue; + uint8_t bluetoothSpecific[24]; + uint32_t crc32; +} JOYDualSenseOutput; + + typedef union { JOYSwitchPacket switchPacket; JOYDualShock3Output ds3Output; + JOYDualSenseOutput dualsenseOutput; } JOYVendorSpecificOutput; @implementation JOYController @@ -151,6 +183,10 @@ @implementation JOYController NSString *_serialSuffix; bool _isSwitch; // Does this controller use the Switch protocol? bool _isDualShock3; // Does this controller use DS3 outputs? + bool _isSony; // Is this a DS4 or newer Sony controller? + bool _isDualSense; + bool _isUSBDualSense; + JOYVendorSpecificOutput _lastVendorSpecificOutput; volatile double _rumbleAmplitude; bool _physicallyConnected; @@ -201,29 +237,40 @@ -(void)createInputForElement:(JOYElement *)element return; } - if (element.usagePage == kHIDPage_Button) { + NSDictionary *axisGroups = @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(1), + @(kHIDUsage_GD_Rx): @(2), + @(kHIDUsage_GD_Ry): @(2), + @(kHIDUsage_GD_Rz): @(1), + }; + + axisGroups = _hacks[JOYAxisGroups] ?: axisGroups; + + if (element.usagePage == kHIDPage_Button || + (element.usagePage == kHIDPage_Consumer && (element.usage == kHIDUsage_Csmr_ACHome || + element.usage == kHIDUsage_Csmr_ACBack))) { button: { JOYButton *button = [[JOYButton alloc] initWithElement: element]; [_buttons setObject:button forKey:element]; - NSNumber *replacementUsage = _hacks[JOYButtonUsageMapping][@(button.usage)]; + NSNumber *replacementUsage = element.usagePage == kHIDPage_Button? _hacks[JOYButtonUsageMapping][@(button.usage)] : nil; if (replacementUsage) { button.usage = [replacementUsage unsignedIntValue]; } return; } } + else if (element.usagePage == kHIDPage_Simulation) { + switch (element.usage) { + case kHIDUsage_Sim_Accelerator: + case kHIDUsage_Sim_Brake: + case kHIDUsage_Sim_Rudder: + case kHIDUsage_Sim_Throttle: + goto single; + } + } else if (element.usagePage == kHIDPage_GenericDesktop) { - NSDictionary *axisGroups = @{ - @(kHIDUsage_GD_X): @(0), - @(kHIDUsage_GD_Y): @(0), - @(kHIDUsage_GD_Z): @(1), - @(kHIDUsage_GD_Rx): @(2), - @(kHIDUsage_GD_Ry): @(2), - @(kHIDUsage_GD_Rz): @(1), - }; - - axisGroups = _hacks[JOYAxisGroups] ?: axisGroups; - switch (element.usage) { case kHIDUsage_GD_X: case kHIDUsage_GD_Y: @@ -285,30 +332,26 @@ -(void)createInputForElement:(JOYElement *)element }*/ break; } - single: case kHIDUsage_GD_Slider: case kHIDUsage_GD_Dial: - case kHIDUsage_GD_Wheel: { + case kHIDUsage_GD_Wheel: + { single: { JOYAxis *axis = [[JOYAxis alloc] initWithElement: element]; [_axes setObject:axis forKey:element]; - NSNumber *replacementUsage = _hacks[JOYAxisUsageMapping][@(axis.usage)]; + NSNumber *replacementUsage = element.usagePage == kHIDPage_GenericDesktop? _hacks[JOYAxisUsageMapping][@(axis.usage)] : nil; if (replacementUsage) { axis.usage = [replacementUsage unsignedIntValue]; } - if (axesEmulateButtons && axis.usage >= JOYAxisUsageL1 && axis.usage <= JOYAxisUsageR3) { + if ([_hacks[JOYEmulateAxisButtons] boolValue]) { _axisEmulatedButtons[@(axis.uniqueID)] = - [[JOYEmulatedButton alloc] initWithUsage:axis.usage - JOYAxisUsageL1 + JOYButtonUsageL1 uniqueID:axis.uniqueID]; + [[JOYEmulatedButton alloc] initWithUsage:axis.equivalentButtonUsage uniqueID:axis.uniqueID]; } - if (axesEmulateButtons && axis.usage >= JOYAxisUsageGeneric0) { - _axisEmulatedButtons[@(axis.uniqueID)] = - [[JOYEmulatedButton alloc] initWithUsage:axis.usage - JOYAxisUsageGeneric0 + JOYButtonUsageGeneric0 uniqueID:axis.uniqueID]; - } break; - } + }} case kHIDUsage_GD_DPadUp: case kHIDUsage_GD_DPadDown: case kHIDUsage_GD_DPadRight: @@ -365,6 +408,7 @@ - (instancetype)initWithDevice:(IOHIDDeviceRef)device reportIDFilter:(NSArray > 8); + + while (size--) { + ret = table[(ret ^ *byte++) & 0xFF] ^ (ret >> 8); + } + + _lastVendorSpecificOutput.dualsenseOutput.crc32 = ~ret; + + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.dualsenseOutput length:sizeof(_lastVendorSpecificOutput.dualsenseOutput)]]; +} + +- (uint8_t)LEDMaskForPlayer:(unsigned)player +{ + if (_isDualShock3) { + return 2 << player; + } + if (_isUSBDualSense) { + switch (player) { + case 0: return 0x04; + case 1: return 0x0A; + case 2: return 0x15; + case 3: return 0x1B; + default: return 0; + } + } + return 1 << player; +} + - (void)setPlayerLEDs:(uint8_t)mask { - mask &= 0xF; if (mask == _playerLEDs) { return; } @@ -735,14 +888,18 @@ - (void)setPlayerLEDs:(uint8_t)mask _lastVendorSpecificOutput.switchPacket.sequence++; _lastVendorSpecificOutput.switchPacket.sequence &= 0xF; _lastVendorSpecificOutput.switchPacket.command = 0x30; // LED - _lastVendorSpecificOutput.switchPacket.commandData[0] = mask; + _lastVendorSpecificOutput.switchPacket.commandData[0] = mask & 0xF; [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.switchPacket length:sizeof(_lastVendorSpecificOutput.switchPacket)]]; } else if (_isDualShock3) { _lastVendorSpecificOutput.ds3Output.reportID = 1; - _lastVendorSpecificOutput.ds3Output.ledsEnabled = mask << 1; + _lastVendorSpecificOutput.ds3Output.ledsEnabled = (mask & 0x1F); [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.ds3Output length:sizeof(_lastVendorSpecificOutput.ds3Output)]]; } + else if (_isDualSense) { + _lastVendorSpecificOutput.dualsenseOutput.playerLEDs = mask & 0x1F; + [self sendDualSenseOutput]; + } } - (void)updateRumble @@ -750,7 +907,7 @@ - (void)updateRumble if (!self.connected) { return; } - if (!_rumbleElement && !_isSwitch && !_isDualShock3) { + if (!_rumbleElement && !_isSwitch && !_isDualShock3 && !_isDualSense) { return; } if (_rumbleElement.max == 1 && _rumbleElement.min == 0) { @@ -809,6 +966,11 @@ - (void)updateRumble _lastVendorSpecificOutput.ds3Output.rumbleLeftStrength = _lastVendorSpecificOutput.ds3Output.rumbleRightStrength = round(_rumbleAmplitude * 0xff); [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.ds3Output length:sizeof(_lastVendorSpecificOutput.ds3Output)]]; } + else if (_isDualSense) { + _lastVendorSpecificOutput.dualsenseOutput.rumbleLeftStrength = round(_rumbleAmplitude * _rumbleAmplitude * 0xff); + _lastVendorSpecificOutput.dualsenseOutput.rumbleRightStrength = _rumbleAmplitude > 0.25 ? round(pow(_rumbleAmplitude - 0.25, 2) * 0xff) : 0; + [self sendDualSenseOutput]; + } else { [_rumbleElement setValue:_rumbleAmplitude * (_rumbleElement.max - _rumbleElement.min) + _rumbleElement.min]; } @@ -878,7 +1040,6 @@ +(void)unregisterListener:(id)listener + (void)startOnRunLoop:(NSRunLoop *)runloop withOptions: (NSDictionary *)options { - axesEmulateButtons = [options[JOYAxesEmulateButtonsKey] boolValue]; axes2DEmulateButtons = [options[JOYAxes2DEmulateButtonsKey] boolValue]; hatsEmulateButtons = [options[JOYHatsEmulateButtonsKey] boolValue]; diff --git a/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m b/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m index 1ebed3aee..b62670a62 100644 --- a/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m +++ b/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m @@ -1,4 +1,5 @@ #import "JOYEmulatedButton.h" +#import @interface JOYButton () { @@ -28,7 +29,7 @@ - (uint64_t)uniqueID - (bool)updateStateFromAxis:(JOYAxis *)axis { bool old = _state; - _state = [axis value] > 0.5; + _state = [axis value] > 0.8; return _state != old; } diff --git a/thirdparty/SameBoy/JoyKit/JOYHat.m b/thirdparty/SameBoy/JoyKit/JOYHat.m index 743e49c3e..b5a18f0b4 100644 --- a/thirdparty/SameBoy/JoyKit/JOYHat.m +++ b/thirdparty/SameBoy/JoyKit/JOYHat.m @@ -1,5 +1,6 @@ #import "JOYHat.h" #import "JOYElement.h" +#import @implementation JOYHat { @@ -27,6 +28,7 @@ - (instancetype)initWithElement:(JOYElement *)element if (!self) return self; _element = element; + _state = -1; return self; } diff --git a/thirdparty/SameBoy/Makefile b/thirdparty/SameBoy/Makefile index fcaae75fa..7bfe5803d 100644 --- a/thirdparty/SameBoy/Makefile +++ b/thirdparty/SameBoy/Makefile @@ -121,14 +121,17 @@ endif CFLAGS += $(WARNINGS) -CFLAGS += -std=gnu11 -D_GNU_SOURCE -DVERSION="$(VERSION)" -I. -D_USE_MATH_DEFINES +CFLAGS += -std=gnu11 -D_GNU_SOURCE -DGB_VERSION='"$(VERSION)"' -I. -D_USE_MATH_DEFINES +ifneq (,$(UPDATE_SUPPORT)) +CFLAGS += -DUPDATE_SUPPORT +endif ifeq (,$(PKG_CONFIG)) SDL_CFLAGS := $(shell sdl2-config --cflags) -SDL_LDFLAGS := $(shell sdl2-config --libs) +SDL_LDFLAGS := $(shell sdl2-config --libs) -lpthread else SDL_CFLAGS := $(shell $(PKG_CONFIG) --cflags sdl2) -SDL_LDFLAGS := $(shell $(PKG_CONFIG) --libs sdl2) +SDL_LDFLAGS := $(shell $(PKG_CONFIG) --libs sdl2) -lpthread endif ifeq (,$(PKG_CONFIG)) GL_LDFLAGS := -lGL diff --git a/thirdparty/SameBoy/OpenDialog/cocoa.m b/thirdparty/SameBoy/OpenDialog/cocoa.m index aeeb98aa9..cfb2553a8 100644 --- a/thirdparty/SameBoy/OpenDialog/cocoa.m +++ b/thirdparty/SameBoy/OpenDialog/cocoa.m @@ -5,6 +5,8 @@ char *do_open_rom_dialog(void) { @autoreleasepool { + int stderr_fd = dup(STDERR_FILENO); + close(STDERR_FILENO); NSWindow *key = [NSApp keyWindow]; NSOpenPanel *dialog = [NSOpenPanel openPanel]; dialog.title = @"Open ROM"; @@ -12,6 +14,7 @@ [dialog runModal]; [key makeKeyAndOrderFront:nil]; NSString *ret = [[[dialog URLs] firstObject] path]; + dup2(stderr_fd, STDERR_FILENO); if (ret) { return strdup(ret.UTF8String); } @@ -22,6 +25,8 @@ char *do_open_folder_dialog(void) { @autoreleasepool { + int stderr_fd = dup(STDERR_FILENO); + close(STDERR_FILENO); NSWindow *key = [NSApp keyWindow]; NSOpenPanel *dialog = [NSOpenPanel openPanel]; dialog.title = @"Select Boot ROMs Folder"; @@ -30,6 +35,7 @@ [dialog runModal]; [key makeKeyAndOrderFront:nil]; NSString *ret = [[[dialog URLs] firstObject] path]; + dup2(stderr_fd, STDERR_FILENO); if (ret) { return strdup(ret.UTF8String); } diff --git a/thirdparty/SameBoy/QuickLook/generator.m b/thirdparty/SameBoy/QuickLook/generator.m index 92bb6ac10..f2651d289 100644 --- a/thirdparty/SameBoy/QuickLook/generator.m +++ b/thirdparty/SameBoy/QuickLook/generator.m @@ -43,10 +43,10 @@ static OSStatus render(CGContextRef cgContext, CFURLRef url, bool showBorder) bitmapInfo, provider, NULL, - YES, + true, renderingIntent); CGContextSetInterpolationQuality(cgContext, kCGInterpolationNone); - NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithGraphicsPort:(void *)cgContext flipped:NO]; + NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithGraphicsPort:(void *)cgContext flipped:false]; [NSGraphicsContext setCurrentContext:context]; diff --git a/thirdparty/SameBoy/SDL/console.c b/thirdparty/SameBoy/SDL/console.c new file mode 100644 index 000000000..ad9c2b545 --- /dev/null +++ b/thirdparty/SameBoy/SDL/console.c @@ -0,0 +1,1020 @@ +#include "console.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ESC(x) "\x1B" x +#define CSI(x) ESC("[" x) +#define SGR(x) CSI(x "m") + +static bool initialized = false; +typedef struct listent_s listent_t; + +struct listent_s { + listent_t *prev; + listent_t *next; + char content[]; +}; + +typedef struct { + listent_t *first; + listent_t *last; +} fifo_t; + +static fifo_t lines; +static fifo_t history; + +static void remove_entry(fifo_t *fifo, listent_t *entry) +{ + if (fifo->last == entry) { + fifo->last = entry->prev; + } + if (fifo->first == entry) { + fifo->first = entry->next; + } + if (entry->next) { + entry->next->prev = entry->prev; + } + if (entry->prev) { + entry->prev->next = entry->next; + } + free(entry); +} + +static void add_entry(fifo_t *fifo, const char *content) +{ + size_t length = strlen(content); + listent_t *entry = malloc(sizeof(*entry) + length + 1); + entry->next = NULL; + entry->prev = fifo->last; + memcpy(entry->content, content, length); + entry->content[length] = 0; + if (fifo->last) { + fifo->last->next = entry; + } + fifo->last = entry; + if (!fifo->first) { + fifo->first = entry; + } +} + +static listent_t *reverse_find(listent_t *entry, const char *string, bool exact) +{ + while (entry) { + if (exact && strcmp(entry->content, string) == 0) { + return entry; + } + if (!exact && strstr(entry->content, string)) { + return entry; + } + entry = entry->prev; + } + return NULL; +} + +static bool is_term(void) +{ + if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO)) return false; +#ifdef _WIN32 + if (AllocConsole()) { + FreeConsole(); + return false; + } + + unsigned long input_mode, output_mode; + + GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &input_mode); + GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &output_mode); + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); + + CONSOLE_SCREEN_BUFFER_INFO before = {0,}; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &before); + + printf(SGR("0")); + + CONSOLE_SCREEN_BUFFER_INFO after = {0,}; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &after); + + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), input_mode); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), output_mode); + + + if (before.dwCursorPosition.X != after.dwCursorPosition.X || + before.dwCursorPosition.Y != after.dwCursorPosition.Y) { + printf("\r \r"); + return false; + } + return true; +#else + return getenv("TERM"); +#endif +} + +static unsigned width, height; + +static char raw_getc(void) +{ +#ifdef _WIN32 + char c; + unsigned long ret; + ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &ret, NULL); +#else + ssize_t ret; + char c; + + do { + ret = read(STDIN_FILENO, &c, 1); + } while (ret == -1 && errno == EINTR); +#endif + return ret == 1? c : EOF; +} + +#ifdef _WIN32 +#pragma clang diagnostic ignored "-Wmacro-redefined" +#include + +static void update_size(void) +{ + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); + width = csbi.srWindow.Right - csbi.srWindow.Left + 1; + height = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +} + +static unsigned long input_mode, output_mode; + +static void cleanup(void) +{ + printf(CSI("!p")); // reset + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), input_mode); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), output_mode); + fflush(stdout); +} + +static bool initialize(void) +{ + if (!is_term()) return false; + update_size(); + if (width == 0 || height == 0) { + return false; + } + + static bool once = false; + if (!once) { + atexit(cleanup); + GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &input_mode); + GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &output_mode); + once = true; + } + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); + + printf(CSI("%dB") "\n" CSI("A") ESC("7") CSI("B"), height); + + fflush(stdout); + initialized = true; + return true; +} +#else +#include + +static void update_size(void) +{ + struct winsize winsize; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize); + width = winsize.ws_col; + height = winsize.ws_row; +} + +static void terminal_resized(int ignored) +{ + update_size(); +} + +#include +static struct termios terminal; + + +static void cleanup(void) +{ + printf(CSI("!p")); // reset + tcsetattr(STDIN_FILENO, TCSAFLUSH, &terminal); + fflush(stdout); +} + +static bool initialize(void) +{ + if (!is_term()) return false; + update_size(); + if (width == 0 || height == 0) { + return false; + } + + static bool once = false; + if (!once) { + atexit(cleanup); + signal(SIGWINCH, terminal_resized); + tcgetattr(STDIN_FILENO, &terminal); +#ifdef _WIN32 + _setmode(STDIN_FILENO, _O_TEXT); +#endif + once = true; + } + struct termios raw_terminal; + raw_terminal = terminal; + raw_terminal.c_lflag = 0; + tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw_terminal); + + printf(CSI("%dB") "\n" CSI("A") ESC("7") CSI("B"), height); + + fflush(stdout); + initialized = true; + return true; +} +#endif + +static struct { + char *content; + size_t allocation_size; + size_t length; + size_t position; + size_t scroll; + bool reverse_search; + listent_t *search_line; +} line; + +#define CTL(x) ((x) - 'A' + 1) + +static const char *prompt = ""; +static size_t prompt_length = 0; +static bool repeat_empty = false; + +static bool redraw_prompt(bool force) +{ + if (line.reverse_search) { + if (!force) return false; + if (line.length == 0) { + printf("\r" CSI("K") "%s" SGR("2") "Reverse Search..." SGR("0") CSI("%zuG"), prompt, prompt_length + 1); + return true; + } + if (!line.search_line) { + printf("\r" CSI("K") "%s" SGR("1") "%s" SGR("0"), prompt, line.content); + return true; + } + const char *loc = strstr(line.search_line->content, line.content); + printf("\r" CSI("K") "%s" "%.*s" SGR("1") "%s" SGR("0") "%s" CSI("%uG"), + prompt, + (int)(loc - line.search_line->content), + line.search_line->content, + line.content, + loc + line.length, + (unsigned)(loc - line.search_line->content + line.length + prompt_length + 1)); + return true; + } + + size_t max = width - 1 - prompt_length; + + if (line.scroll && line.length <= max) { + line.scroll = 0; + force = true; + } + + if (line.scroll > line.length - max) { + line.scroll = line.length - max; + force = true; + } + + if (line.position < line.scroll + 1 && line.position) { + line.scroll = line.position - 1; + force = true; + } + + if (line.position == 0 && line.scroll) { + line.scroll = 0; + force = true; + } + + if (line.position > line.scroll + max) { + line.scroll = line.position - max; + force = true; + } + + if (!force && line.length <= max) { + return false; + } + + if (line.length <= max) { + printf("\r" CSI("K") "%s%s" CSI("%uG"), prompt, line.content, (unsigned)(line.position + prompt_length + 1)); + return true; + } + + size_t left = max; + const char *string = line.content + line.scroll; + printf("\r" CSI("K") "%s", prompt); + if (line.scroll) { + printf(SGR("2") "%c" SGR("0"), *string); + string++; + left--; + } + if (line.scroll + max == line.length) { + printf("%s", string); + } + else { + printf("%.*s", (int)(left - 1), string); + string += left; + left = 1; + printf(SGR("2") "%c" SGR("0"), *string); + } + printf(CSI("%uG"), (unsigned)(line.position - line.scroll + prompt_length + 1)); + + return true; +} + +static void set_position(size_t position) +{ + if (position > line.length) { + printf("\a"); + return; + } + line.position = position; + if (!redraw_prompt(false)) { + printf(CSI("%uG"), (unsigned)(position + prompt_length + 1)); + } +} + +static void set_line(const char *content) +{ + line.length = strlen(content); + if (line.length + 1 > line.allocation_size) { + line.content = realloc(line.content, line.length + 1); + line.allocation_size = line.length + 1; + } + else if (line.allocation_size > 256 && line.length < 128) { + line.content = realloc(line.content, line.length + 1); + line.allocation_size = line.length + 1; + } + line.position = line.length; + strcpy(line.content, content); + redraw_prompt(true); +} + +static void insert(const char *string) +{ + size_t insertion_length = strlen(string); + size_t new_length = insertion_length + line.length; + bool need_realloc = false; + while (line.allocation_size < new_length + 1) { + line.allocation_size *= 2; + need_realloc = true; + } + if (need_realloc) { + line.content = realloc(line.content, line.allocation_size); + } + memmove(line.content + line.position + insertion_length, + line.content + line.position, + line.length - line.position); + memcpy(line.content + line.position, string, insertion_length); + line.position += insertion_length; + line.content[new_length] = 0; + line.length = new_length; + if (!redraw_prompt(line.position != line.length)) { + printf("%s", string); + } +} + +static void delete(size_t size, bool forward) +{ + if (line.length < size) { + printf("\a"); + return; + } + if (forward) { + if (line.position > line.length - size) { + printf("\a"); + return; + } + else { + line.position += size; + } + } + else if (line.position < size) { + printf("\a"); + return; + } + memmove(line.content + line.position - size, + line.content + line.position, + line.length - line.position); + line.length -= size; + line.content[line.length] = 0; + line.position -= size; + + if (!redraw_prompt(line.position != line.length)) { + printf(CSI("%uG") CSI("K"), + (unsigned)(line.position + prompt_length + 1)); + } +} + +static void move_word(bool forward) +{ + signed offset = forward? 1 : -1; + size_t end = forward? line.length : 0; + signed check_offset = forward? 0 : -1; + if (line.position == end) { + printf("\a"); + return; + } + line.position += offset; + while (line.position != end && isalnum(line.content[line.position + check_offset])) { + line.position += offset; + } + if (!redraw_prompt(false)) { + printf(CSI("%uG"), (unsigned)(line.position + prompt_length + 1)); + } +} + +static void delete_word(bool forward) +{ + size_t original_pos = line.position; + signed offset = forward? 1 : -1; + size_t end = forward? line.length : 0; + signed check_offset = forward? 0 : -1; + if (line.position == end) { + printf("\a"); + return; + } + line.position += offset; + while (line.position != end && isalnum(line.content[line.position + check_offset])) { + line.position += offset; + } + if (forward) { + delete(line.position - original_pos, false); + } + else { + delete(original_pos - line.position, true); + } +} + +#define MOD_ALT(x) (0x100 | x) +#define MOD_SHIFT(x) (0x200 | x) +#define MOD_CTRL(x) (0x400 | x) +#define MOD_SPECIAL(x) (0x800 | x) + +static unsigned get_extended_key(void) +{ + unsigned modifiers = 0; + char c = 0; +restart: + c = raw_getc(); + if (c == 0x1B) { + modifiers = MOD_SHIFT(MOD_ALT(0)); + goto restart; + } + else if (c != '[' && c != 'O') { + return MOD_ALT(c); + } + unsigned ret = 0; + while (true) { + c = raw_getc(); + if (c >= '0' && c <= '9') { + ret = ret * 10 + c - '0'; + } + else if (c == ';') { + if (ret == 1) { + modifiers |= MOD_ALT(0); + } + else if (ret == 2) { + modifiers |= MOD_SHIFT(0); + } + else if (ret == 5) { + modifiers |= MOD_CTRL(0); + } + ret = 0; + } + else if (c == '~') { + return MOD_SPECIAL(ret) | modifiers; + } + else { + if (ret == 1) { + modifiers |= MOD_ALT(0); + } + else if (ret == 2) { + modifiers |= MOD_SHIFT(0); + } + else if (ret == 5) { + modifiers |= MOD_CTRL(0); + } + return c | modifiers; + } + } +} + +#define SWAP(x, y) do {typeof(*(x)) _tmp = *(x); *(x) = *(y);*(y) = _tmp;} while (0) +static pthread_mutex_t terminal_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t lines_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t lines_cond = PTHREAD_COND_INITIALIZER; + +static char reverse_search_mainloop(void) +{ + while (true) { + char c = raw_getc(); + pthread_mutex_lock(&terminal_lock); + + switch (c) { + case CTL('C'): + line.search_line = NULL; + set_line(""); + pthread_mutex_unlock(&terminal_lock); + return CTL('A'); + case CTL('R'): + line.search_line = reverse_find(line.search_line? line.search_line->prev : history.last, line.content, false); + if (!line.search_line) { + printf("\a"); + } + redraw_prompt(true); + break; + case CTL('W'): + delete_word(false); + redraw_prompt(true); + break; +#ifndef _WIN32 + case CTL('Z'): + set_line(""); + raise(SIGSTOP); + initialize(); // Reinitialize + redraw_prompt(true); + break; +#endif + case CTL('H'): + case 0x7F: // Backspace + delete(1, false); + redraw_prompt(true); + break; + default: + if (c >= ' ') { + char string[2] = {c, 0}; + insert(string); + line.search_line = reverse_find(line.search_line?: history.last, line.content, false); + if (!line.search_line) { + printf("\a"); + } + redraw_prompt(true); + } + else { + pthread_mutex_unlock(&terminal_lock); + return c; + } + break; + } + pthread_mutex_unlock(&terminal_lock); + fflush(stdout); + } + +} + + +static +#ifdef _WIN32 +int __stdcall +#else +void * +#endif +mainloop(char *(*completer)(const char *substring, uintptr_t *context)) +{ + listent_t *history_line = NULL; + uintptr_t complete_context = 0; + size_t completion_length = 0; + while (true) { + char c; + if (line.reverse_search) { + c = reverse_search_mainloop(); + line.reverse_search = false; + if (line.search_line) { + size_t pos = strstr(line.search_line->content, line.content) - line.search_line->content + line.length; + set_line(line.search_line->content); + line.search_line = NULL; + set_position(pos); + } + else { + redraw_prompt(true); + } + } + else { + c = raw_getc(); + } + pthread_mutex_lock(&terminal_lock); + + switch (c) { + case CTL('A'): + set_position(0); + complete_context = completion_length = 0; + break; + case CTL('B'): + set_position(line.position - 1); + complete_context = completion_length = 0; + break; + case CTL('C'): + if (line.length) { + set_line(""); + history_line = NULL; + complete_context = completion_length = 0; + } + else { +#ifdef _WIN32 + raise(SIGINT); +#else + kill(getpid(), SIGINT); +#endif + } + break; + case CTL('D'): + if (line.length) { + delete(1, true); + complete_context = completion_length = 0; + } + else { + pthread_mutex_lock(&lines_lock); + add_entry(&lines, CON_EOF); + pthread_cond_signal(&lines_cond); + pthread_mutex_unlock(&lines_lock); + } + break; + case CTL('E'): + set_position(line.length); + complete_context = completion_length = 0; + break; + case CTL('F'): + set_position(line.position + 1); + complete_context = completion_length = 0; + break; + case CTL('K'): + printf(CSI("K")); + if (!redraw_prompt(false)) { + line.length = line.position; + line.content[line.length] = 0; + } + complete_context = completion_length = 0; + break; + case CTL('R'): + complete_context = completion_length = 0; + line.reverse_search = true; + set_line(""); + + break; + case CTL('T'): + if (line.length < 2) { + printf("\a"); + break; + } + if (line.position && line.position == line.length) { + line.position--; + } + if (line.position == 0) { + printf("\a"); + break; + } + SWAP(line.content + line.position, + line.content + line.position - 1); + line.position++; + redraw_prompt(true); + complete_context = completion_length = 0; + break; + case CTL('W'): + delete_word(false); + complete_context = completion_length = 0; + break; +#ifndef _WIN32 + case CTL('Z'): + set_line(""); + complete_context = completion_length = 0; + raise(SIGSTOP); + initialize(); // Reinitialize + break; +#endif + case '\r': + case '\n': + pthread_mutex_lock(&lines_lock); + if (line.length == 0 && repeat_empty && history.last) { + add_entry(&lines, history.last->content); + } + else { + add_entry(&lines, line.content); + } + pthread_cond_signal(&lines_cond); + pthread_mutex_unlock(&lines_lock); + if (line.length) { + listent_t *dup = reverse_find(history.last, line.content, true); + if (dup) { + remove_entry(&history, dup); + } + add_entry(&history, line.content); + set_line(""); + history_line = NULL; + } + complete_context = completion_length = 0; + break; + case CTL('H'): + case 0x7F: // Backspace + delete(1, false); + complete_context = completion_length = 0; + break; + case 0x1B: + switch (get_extended_key()) { + case MOD_SPECIAL(1): // Home + case MOD_SPECIAL(7): + case 'H': + set_position(0); + complete_context = completion_length = 0; + break; + case MOD_SPECIAL(8): // End + case 'F': + set_position(line.length); + complete_context = completion_length = 0; + break; + case MOD_SPECIAL(3): // Delete + delete(1, true); + complete_context = completion_length = 0; + break; + case 'A': // Up + if (!history_line) { + history_line = history.last; + } + else { + history_line = history_line->prev; + } + if (history_line) { + set_line(history_line->content); + complete_context = completion_length = 0; + } + else { + history_line = history.first; + printf("\a"); + } + + break; + case 'B': // Down + if (!history_line) { + printf("\a"); + break; + } + history_line = history_line->next; + if (history_line) { + set_line(history_line->content); + complete_context = completion_length = 0; + } + else { + set_line(""); + complete_context = completion_length = 0; + } + break; + case 'C': // Right + set_position(line.position + 1); + complete_context = completion_length = 0; + break; + case 'D': // Left + set_position(line.position - 1); + complete_context = completion_length = 0; + break; + case MOD_ALT('b'): + case MOD_ALT('D'): + move_word(false); + complete_context = completion_length = 0; + break; + case MOD_ALT('f'): + case MOD_ALT('C'): + move_word(true); + complete_context = completion_length = 0; + break; + case MOD_ALT(0x7f): // ALT+Backspace + delete_word(false); + complete_context = completion_length = 0; + break; + case MOD_ALT('('): // ALT+Delete + delete_word(true); + complete_context = completion_length = 0; + break; + default: + printf("\a"); + break; + } + break; + case '\t': { + char temp = line.content[line.position - completion_length]; + line.content[line.position - completion_length] = 0; + char *completion = completer? completer(line.content, &complete_context) : NULL; + line.content[line.position - completion_length] = temp; + if (completion) { + if (completion_length) { + delete(completion_length, false); + } + insert(completion); + completion_length = strlen(completion); + free(completion); + } + else { + printf("\a"); + } + break; + } + default: + if (c >= ' ') { + char string[2] = {c, 0}; + insert(string); + complete_context = completion_length = 0; + } + else { + printf("\a"); + } + break; + } + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); + } + return 0; +} + +char *CON_readline(const char *new_prompt) +{ + pthread_mutex_lock(&terminal_lock); + const char *old_prompt = prompt; + prompt = new_prompt; + prompt_length = strlen(prompt); + redraw_prompt(true); + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); + + pthread_mutex_lock(&lines_lock); + while (!lines.first) { + pthread_cond_wait(&lines_cond, &lines_lock); + } + char *ret = strdup(lines.first->content); + remove_entry(&lines, lines.first); + pthread_mutex_unlock(&lines_lock); + + pthread_mutex_lock(&terminal_lock); + prompt = old_prompt; + prompt_length = strlen(prompt); + redraw_prompt(true); + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); + return ret; +} + +char *CON_readline_async(void) +{ + char *ret = NULL; + pthread_mutex_lock(&lines_lock); + if (lines.first) { + ret = strdup(lines.first->content); + remove_entry(&lines, lines.first); + } + pthread_mutex_unlock(&lines_lock); + return ret; +} + +bool CON_start(char *(*completer)(const char *substring, uintptr_t *context)) +{ + if (!initialize()) { + return false; + } + set_line(""); + pthread_t thread; + return pthread_create(&thread, NULL, (void *)mainloop, completer) == 0; +} + +void CON_attributed_print(const char *string, CON_attributes_t *attributes) +{ + if (!initialized) { + printf("%s", string); + return; + } + static bool pending_newline = false; + pthread_mutex_lock(&terminal_lock); + printf(ESC("8")); + bool needs_reset = false; + if (attributes) { + if (attributes->color) { + if (attributes->color >= 0x10) { + printf(SGR("%d"), attributes->color - 0x11 + 90); + } + else { + printf(SGR("%d"), attributes->color - 1 + 30); + } + needs_reset = true; + } + if (attributes->background) { + if (attributes->background >= 0x10) { + printf(SGR("%d"), attributes->background - 0x11 + 100); + } + else { + printf(SGR("%d"), attributes->background - 1 + 40); + } + needs_reset = true; + } + if (attributes->bold) { + printf(SGR("1")); + needs_reset = true; + } + if (attributes->italic) { + printf(SGR("3")); + needs_reset = true; + } + if (attributes->underline) { + printf(SGR("4")); + needs_reset = true; + } + } + const char *it = string; + bool need_redraw_prompt = false; + while (*it) { + if (pending_newline) { + need_redraw_prompt = true; + printf("\n" CSI("K") "\n" CSI("A")); + pending_newline = false; + continue; + } + if (*it == '\n') { + printf("%.*s", (int)(it - string), string); + string = it + 1; + pending_newline = true; + } + it++; + } + if (*string) { + printf("%s", string); + } + if (needs_reset) { + printf(SGR("0")); + } + printf(ESC("7") CSI("B")); + if (need_redraw_prompt) { + redraw_prompt(true); + } + else { + set_position(line.position); + } + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); +} + +void CON_print(const char *string) +{ + CON_attributed_print(string, NULL); +} + +void CON_vprintf(const char *fmt, va_list args) +{ + char *string = NULL; + vasprintf(&string, fmt, args); + CON_attributed_print(string, NULL); + free(string); +} + +void CON_attributed_vprintf(const char *fmt, CON_attributes_t *attributes, va_list args) +{ + char *string = NULL; + vasprintf(&string, fmt, args); + CON_attributed_print(string, attributes); + free(string); +} + +void CON_printf(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + CON_vprintf(fmt, args); + va_end(args); +} + + +void CON_attributed_printf(const char *fmt, CON_attributes_t *attributes,...) +{ + va_list args; + va_start(args, attributes); + CON_attributed_vprintf(fmt, attributes, args); + va_end(args); +} + +void CON_set_async_prompt(const char *string) +{ + pthread_mutex_lock(&terminal_lock); + prompt = string; + prompt_length = strlen(string); + redraw_prompt(true); + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); +} + +void CON_set_repeat_empty(bool repeat) +{ + repeat_empty = repeat; +} diff --git a/thirdparty/SameBoy/SDL/console.h b/thirdparty/SameBoy/SDL/console.h new file mode 100644 index 000000000..d15898888 --- /dev/null +++ b/thirdparty/SameBoy/SDL/console.h @@ -0,0 +1,49 @@ +#include +#include +#include + +#define CON_EOF "\x04" +bool CON_start(char *(*completer)(const char *substring, uintptr_t *context)); +char *CON_readline(const char *prompt); +char *CON_readline_async(void); + +typedef struct { + enum { + CON_COLOR_NONE = 0, + CON_COLOR_BLACK, + CON_COLOR_RED, + CON_COLOR_GREEN, + CON_COLOR_YELLOW, + CON_COLOR_BLUE, + CON_COLOR_MAGENTA, + CON_COLOR_CYAN, + CON_COLOR_LIGHT_GREY, + + CON_COLOR_DARK_GREY = CON_COLOR_BLACK + 0x10, + CON_COLOR_BRIGHT_RED = CON_COLOR_RED + 0x10, + CON_COLOR_BRIGHT_GREEN = CON_COLOR_GREEN + 0x10, + CON_COLOR_BRIGHT_YELLOW = CON_COLOR_YELLOW + 0x10, + CON_COLOR_BRIGHT_BLUE = CON_COLOR_BLUE + 0x10, + CON_COLOR_BRIGHT_MAGENTA = CON_COLOR_MAGENTA + 0x10, + CON_COLOR_BRIGHT_CYAN = CON_COLOR_CYAN + 0x10, + CON_COLOR_WHITE = CON_COLOR_LIGHT_GREY + 0x10, + } color:8, background:8; + bool bold; + bool italic; + bool underline; +} CON_attributes_t; + +#ifndef __printflike +/* Missing from Linux headers. */ +#define __printflike(fmtarg, firstvararg) \ +__attribute__((__format__ (__printf__, fmtarg, firstvararg))) +#endif + +void CON_print(const char *string); +void CON_attributed_print(const char *string, CON_attributes_t *attributes); +void CON_vprintf(const char *fmt, va_list args); +void CON_attributed_vprintf(const char *fmt, CON_attributes_t *attributes, va_list args); +void CON_printf(const char *fmt, ...) __printflike(1, 2); +void CON_attributed_printf(const char *fmt, CON_attributes_t *attributes,...) __printflike(1, 3); +void CON_set_async_prompt(const char *string); +void CON_set_repeat_empty(bool repeat); diff --git a/thirdparty/SameBoy/SDL/gui.c b/thirdparty/SameBoy/SDL/gui.c index b8e69cddd..d9a58e548 100644 --- a/thirdparty/SameBoy/SDL/gui.c +++ b/thirdparty/SameBoy/SDL/gui.c @@ -198,11 +198,13 @@ static void draw_char(uint32_t *buffer, unsigned width, unsigned height, unsigne } static signed scroll = 0; -static void draw_unbordered_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color) +static void draw_unbordered_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, bool is_osd) { - y -= scroll; + if (!is_osd) { + y -= scroll; + } unsigned orig_x = x; - unsigned y_offset = (GB_get_screen_height(&gb) - 144) / 2; + unsigned y_offset = is_osd? 0 : (GB_get_screen_height(&gb) - 144) / 2; while (*string) { if (*string == '\n') { x = orig_x; @@ -215,21 +217,39 @@ static void draw_unbordered_text(uint32_t *buffer, unsigned width, unsigned heig break; } - draw_char(&buffer[(signed)(x + width * y)], width, height, *string, color, &buffer[width * y_offset], &buffer[width * (y_offset + 144)]); + draw_char(&buffer[(signed)(x + width * y)], width, height, *string, color, &buffer[width * y_offset], &buffer[width * (is_osd? GB_get_screen_height(&gb) : y_offset + 144)]); x += GLYPH_WIDTH; string++; } } -static void draw_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, uint32_t border) +void draw_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, uint32_t border, bool is_osd) { - draw_unbordered_text(buffer, width, height, x - 1, y, string, border); - draw_unbordered_text(buffer, width, height, x + 1, y, string, border); - draw_unbordered_text(buffer, width, height, x, y - 1, string, border); - draw_unbordered_text(buffer, width, height, x, y + 1, string, border); - draw_unbordered_text(buffer, width, height, x, y, string, color); + draw_unbordered_text(buffer, width, height, x - 1, y, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x + 1, y, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x, y - 1, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x, y + 1, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x, y, string, color, is_osd); } +const char *osd_text = NULL; +unsigned osd_countdown = 0; +unsigned osd_text_lines = 1; + +void show_osd_text(const char *text) +{ + osd_text_lines = 1; + osd_text = text; + osd_countdown = 30; + while (*text++) { + if (*text == '\n') { + osd_text_lines++; + osd_countdown += 30; + } + } +} + + enum decoration { DECORATION_NONE, DECORATION_SELECTION, @@ -239,14 +259,14 @@ enum decoration { static void draw_text_centered(uint32_t *buffer, unsigned width, unsigned height, unsigned y, const char *string, uint32_t color, uint32_t border, enum decoration decoration) { unsigned x = width / 2 - (unsigned) strlen(string) * GLYPH_WIDTH / 2; - draw_text(buffer, width, height, x, y, string, color, border); + draw_text(buffer, width, height, x, y, string, color, border, false); switch (decoration) { case DECORATION_SELECTION: - draw_text(buffer, width, height, x - GLYPH_WIDTH, y, SELECTION_STRING, color, border); + draw_text(buffer, width, height, x - GLYPH_WIDTH, y, SELECTION_STRING, color, border, false); break; case DECORATION_ARROWS: - draw_text(buffer, width, height, x - GLYPH_WIDTH, y, LEFT_ARROW_STRING, color, border); - draw_text(buffer, width, height, width - x, y, RIGHT_ARROW_STRING, color, border); + draw_text(buffer, width, height, x - GLYPH_WIDTH, y, LEFT_ARROW_STRING, color, border, false); + draw_text(buffer, width, height, width - x, y, RIGHT_ARROW_STRING, color, border, false); break; case DECORATION_NONE: @@ -529,7 +549,7 @@ const char *current_default_scale(unsigned index) const char *current_color_correction_mode(unsigned index) { - return (const char *[]){"Disabled", "Correct Color Curves", "Emulate Hardware", "Preserve Brightness", "Reduce Contrast"} + return (const char *[]){"Disabled", "Correct Color Curves", "Emulate Hardware", "Preserve Brightness", "Reduce Contrast", "Harsh Reality"} [configuration.color_correction_mode]; } @@ -604,7 +624,7 @@ void cycle_default_scale_backwards(unsigned index) static void cycle_color_correction(unsigned index) { - if (configuration.color_correction_mode == GB_COLOR_CORRECTION_REDUCE_CONTRAST) { + if (configuration.color_correction_mode == GB_COLOR_CORRECTION_LOW_CONTRAST) { configuration.color_correction_mode = GB_COLOR_CORRECTION_DISABLED; } else { @@ -615,7 +635,7 @@ static void cycle_color_correction(unsigned index) static void cycle_color_correction_backwards(unsigned index) { if (configuration.color_correction_mode == GB_COLOR_CORRECTION_DISABLED) { - configuration.color_correction_mode = GB_COLOR_CORRECTION_REDUCE_CONTRAST; + configuration.color_correction_mode = GB_COLOR_CORRECTION_LOW_CONTRAST; } else { configuration.color_correction_mode--; @@ -676,6 +696,7 @@ static void cycle_border_mode_backwards(unsigned index) } } +extern bool uses_gl(void); struct shader_name { const char *file_name; const char *display_name; @@ -699,6 +720,7 @@ struct shader_name { static void cycle_filter(unsigned index) { + if (!uses_gl()) return; unsigned i = 0; for (; i < sizeof(shaders) / sizeof(shaders[0]); i++) { if (strcmp(shaders[i].file_name, configuration.filter) == 0) { @@ -721,6 +743,7 @@ static void cycle_filter(unsigned index) static void cycle_filter_backwards(unsigned index) { + if (!uses_gl()) return; unsigned i = 0; for (; i < sizeof(shaders) / sizeof(shaders[0]); i++) { if (strcmp(shaders[i].file_name, configuration.filter) == 0) { @@ -740,8 +763,9 @@ static void cycle_filter_backwards(unsigned index) } } -const char *current_filter_name(unsigned index) +static const char *current_filter_name(unsigned index) { + if (!uses_gl()) return "Requires OpenGL 3.2+"; unsigned i = 0; for (; i < sizeof(shaders) / sizeof(shaders[0]); i++) { if (strcmp(shaders[i].file_name, configuration.filter) == 0) { @@ -758,6 +782,7 @@ const char *current_filter_name(unsigned index) static void cycle_blending_mode(unsigned index) { + if (!uses_gl()) return; if (configuration.blending_mode == GB_FRAME_BLENDING_MODE_ACCURATE) { configuration.blending_mode = GB_FRAME_BLENDING_MODE_DISABLED; } @@ -768,6 +793,7 @@ static void cycle_blending_mode(unsigned index) static void cycle_blending_mode_backwards(unsigned index) { + if (!uses_gl()) return; if (configuration.blending_mode == GB_FRAME_BLENDING_MODE_DISABLED) { configuration.blending_mode = GB_FRAME_BLENDING_MODE_ACCURATE; } @@ -776,12 +802,24 @@ static void cycle_blending_mode_backwards(unsigned index) } } -const char *blending_mode_string(unsigned index) +static const char *blending_mode_string(unsigned index) { + if (!uses_gl()) return "Requires OpenGL 3.2+"; return (const char *[]){"Disabled", "Simple", "Accurate"} [configuration.blending_mode]; } +static void toggle_osd(unsigned index) +{ + osd_countdown = 0; + configuration.osd = !configuration.osd; +} + +static const char *current_osd_mode(unsigned index) +{ + return configuration.osd? "Enabled" : "Disabled"; +} + static const struct menu_item graphics_menu[] = { {"Scaling Mode:", cycle_scaling, current_scaling_mode, cycle_scaling_backwards}, {"Default Window Scale:", cycle_default_scale, current_default_scale, cycle_default_scale_backwards}, @@ -791,6 +829,8 @@ static const struct menu_item graphics_menu[] = { {"Frame Blending:", cycle_blending_mode, blending_mode_string, cycle_blending_mode_backwards}, {"Mono Palette:", cycle_palette, current_palette, cycle_palette_backwards}, {"Display Border:", cycle_border_mode, current_border_mode, cycle_border_mode_backwards}, + {"On-Screen Display:", toggle_osd, current_osd_mode, toggle_osd}, + {"Back", return_to_root_menu}, {NULL,} }; @@ -914,10 +954,7 @@ static const struct menu_item controls_menu[] = { static const char *key_name(unsigned index) { - if (index >= 8) { - if (index == 8) { - return SDL_GetScancodeName(configuration.keys[8]); - } + if (index > 8) { return SDL_GetScancodeName(configuration.keys_2[index - 9]); } return SDL_GetScancodeName(configuration.keys[index]); @@ -1123,6 +1160,12 @@ void run_gui(bool is_running) static SDL_Surface *converted_background = NULL; if (!converted_background) { SDL_Surface *background = SDL_LoadBMP(resource_path("background.bmp")); + + /* Create a blank background if background.bmp could not be loaded */ + if (!background) { + background = SDL_CreateRGBSurface(0, 160, 144, 8, 0, 0, 0, 0); + } + SDL_SetPaletteColors(background->format->palette, gui_palette, 0, 4); converted_background = SDL_ConvertSurface(background, pixel_format, 0); SDL_LockSurface(converted_background); @@ -1301,7 +1344,7 @@ void run_gui(bool is_running) break; } case SDL_DROPFILE: { - if (GB_is_stave_state(event.drop.file)) { + if (GB_is_save_state(event.drop.file)) { if (GB_is_inited(&gb)) { dropped_state_file = event.drop.file; pending_command = GB_SDL_LOAD_STATE_FROM_FILE_COMMAND; @@ -1368,7 +1411,17 @@ void run_gui(bool is_running) case SDL_KEYDOWN: - if (event_hotkey_code(&event) == SDL_SCANCODE_F && event.key.keysym.mod & MODIFIER) { + if (gui_state == WAITING_FOR_KEY) { + if (current_selection > 8) { + configuration.keys_2[current_selection - 9] = event.key.keysym.scancode; + } + else { + configuration.keys[current_selection] = event.key.keysym.scancode; + } + gui_state = SHOWING_MENU; + should_render = true; + } + else if (event_hotkey_code(&event) == SDL_SCANCODE_F && event.key.keysym.mod & MODIFIER) { if ((SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_DESKTOP) == false) { SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); } @@ -1377,7 +1430,7 @@ void run_gui(bool is_running) } update_viewport(); } - if (event_hotkey_code(&event) == SDL_SCANCODE_O) { + else if (event_hotkey_code(&event) == SDL_SCANCODE_O) { if (event.key.keysym.mod & MODIFIER) { char *filename = do_open_rom_dialog(); if (filename) { @@ -1470,21 +1523,6 @@ void run_gui(bool is_running) } should_render = true; } - else if (gui_state == WAITING_FOR_KEY) { - if (current_selection >= 8) { - if (current_selection == 8) { - configuration.keys[8] = event.key.keysym.scancode; - } - else { - configuration.keys_2[current_selection - 9] = event.key.keysym.scancode; - } - } - else { - configuration.keys[current_selection] = event.key.keysym.scancode; - } - gui_state = SHOWING_MENU; - should_render = true; - } break; } @@ -1575,7 +1613,7 @@ void run_gui(bool is_running) } break; case SHOWING_HELP: - draw_text(pixels, width, height, 2 + x_offset, 2 + y_offset, help[current_help_page], gui_palette_native[3], gui_palette_native[0]); + draw_text(pixels, width, height, 2 + x_offset, 2 + y_offset, help[current_help_page], gui_palette_native[3], gui_palette_native[0], false); break; case WAITING_FOR_KEY: draw_text_centered(pixels, width, height, 68 + y_offset, "Press a Key", gui_palette_native[3], gui_palette_native[0], DECORATION_NONE); diff --git a/thirdparty/SameBoy/SDL/gui.h b/thirdparty/SameBoy/SDL/gui.h index baa678992..1764c8b97 100644 --- a/thirdparty/SameBoy/SDL/gui.h +++ b/thirdparty/SameBoy/SDL/gui.h @@ -49,8 +49,8 @@ extern unsigned command_parameter; extern char *dropped_state_file; typedef enum { - JOYPAD_BUTTON_LEFT, JOYPAD_BUTTON_RIGHT, + JOYPAD_BUTTON_LEFT, JOYPAD_BUTTON_UP, JOYPAD_BUTTON_DOWN, JOYPAD_BUTTON_A, @@ -119,6 +119,9 @@ typedef struct { char bootrom_path[4096]; uint8_t interference_volume; GB_rtc_mode_t rtc_mode; + + /* v0.14.4 */ + bool osd; } configuration_t; extern configuration_t configuration; @@ -140,4 +143,10 @@ static SDL_Scancode event_hotkey_code(SDL_Event *event) return event->key.keysym.scancode; } +void draw_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, uint32_t border, bool is_osd); +void show_osd_text(const char *text); +extern const char *osd_text; +extern unsigned osd_countdown; +extern unsigned osd_text_lines; + #endif diff --git a/thirdparty/SameBoy/SDL/main.c b/thirdparty/SameBoy/SDL/main.c index 29398b715..ccfa906df 100644 --- a/thirdparty/SameBoy/SDL/main.c +++ b/thirdparty/SameBoy/SDL/main.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -9,6 +10,7 @@ #include "gui.h" #include "shader.h" #include "audio/audio.h" +#include "console.h" #ifndef _WIN32 #include @@ -16,6 +18,7 @@ #include #endif +static bool stop_on_start = false; GB_gameboy_t gb; static bool paused = false; static uint32_t pixel_buffer_1[256 * 224], pixel_buffer_2[256 * 224]; @@ -25,8 +28,14 @@ static double clock_mutliplier = 1.0; static char *filename = NULL; static typeof(free) *free_function = NULL; -static char *battery_save_path_ptr; +static char *battery_save_path_ptr = NULL; +static SDL_GLContext gl_context = NULL; +static bool console_supported = false; +bool uses_gl(void) +{ + return gl_context; +} void set_filename(const char *new_filename, typeof(free) *new_free_function) { @@ -37,6 +46,80 @@ void set_filename(const char *new_filename, typeof(free) *new_free_function) free_function = new_free_function; } +static char *completer(const char *substring, uintptr_t *context) +{ + if (!GB_is_inited(&gb)) return NULL; + char *temp = strdup(substring); + char *ret = GB_debugger_complete_substring(&gb, temp, context); + free(temp); + return ret; +} + +static void log_callback(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) +{ + CON_attributes_t con_attributes = {0,}; + con_attributes.bold = attributes & GB_LOG_BOLD; + con_attributes.underline = attributes & GB_LOG_UNDERLINE; + if (attributes & GB_LOG_DASHED_UNDERLINE) { + while (*string) { + con_attributes.underline ^= true; + CON_attributed_printf("%c", &con_attributes, *string); + string++; + } + } + else { + CON_attributed_print(string, &con_attributes); + } +} + +static void handle_eof(void) +{ + CON_set_async_prompt(""); + char *line = CON_readline("Quit? [y]/n > "); + if (line[0] == 'n' || line[0] == 'N') { + free(line); + CON_set_async_prompt("> "); + } + else { + exit(0); + } +} + +static char *input_callback(GB_gameboy_t *gb) +{ +retry: { + char *ret = CON_readline("Stopped> "); + if (strcmp(ret, CON_EOF) == 0) { + handle_eof(); + free(ret); + goto retry; + } + else { + CON_attributes_t attributes = {.bold = true}; + CON_attributed_printf("> %s\n", &attributes, ret); + } + return ret; +} +} + +static char *asyc_input_callback(GB_gameboy_t *gb) +{ +retry: { + char *ret = CON_readline_async(); + if (ret && strcmp(ret, CON_EOF) == 0) { + handle_eof(); + free(ret); + goto retry; + } + else if (ret) { + CON_attributes_t attributes = {.bold = true}; + CON_attributed_printf("> %s\n", &attributes, ret); + } + return ret; +} +} + + static char *captured_log = NULL; static void log_capture_callback(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) @@ -58,16 +141,16 @@ static void start_capturing_logs(void) GB_set_log_callback(&gb, log_capture_callback); } -static const char *end_capturing_logs(bool show_popup, bool should_exit, uint32_t popup_flags) +static const char *end_capturing_logs(bool show_popup, bool should_exit, uint32_t popup_flags, const char *title) { - GB_set_log_callback(&gb, NULL); + GB_set_log_callback(&gb, console_supported? log_callback : NULL); if (captured_log[0] == 0) { free(captured_log); captured_log = NULL; } else { if (show_popup) { - SDL_ShowSimpleMessageBox(popup_flags, "Error", captured_log, window); + SDL_ShowSimpleMessageBox(popup_flags, title, captured_log, window); } if (should_exit) { exit(1); @@ -135,14 +218,14 @@ static void open_menu(void) static void handle_events(GB_gameboy_t *gb) { SDL_Event event; - while (SDL_PollEvent(&event)) { + while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: pending_command = GB_SDL_QUIT_COMMAND; break; case SDL_DROPFILE: { - if (GB_is_stave_state(event.drop.file)) { + if (GB_is_save_state(event.drop.file)) { dropped_state_file = event.drop.file; pending_command = GB_SDL_LOAD_STATE_FROM_FILE_COMMAND; } @@ -185,7 +268,7 @@ static void handle_events(GB_gameboy_t *gb) open_menu(); } } - break; + break; case SDL_JOYAXISMOTION: { static bool axis_active[2] = {false, false}; @@ -225,22 +308,21 @@ static void handle_events(GB_gameboy_t *gb) } } } - break; - - case SDL_JOYHATMOTION: - { + break; + + case SDL_JOYHATMOTION: { uint8_t value = event.jhat.value; int8_t updown = - value == SDL_HAT_LEFTUP || value == SDL_HAT_UP || value == SDL_HAT_RIGHTUP ? -1 : (value == SDL_HAT_LEFTDOWN || value == SDL_HAT_DOWN || value == SDL_HAT_RIGHTDOWN ? 1 : 0); + value == SDL_HAT_LEFTUP || value == SDL_HAT_UP || value == SDL_HAT_RIGHTUP ? -1 : (value == SDL_HAT_LEFTDOWN || value == SDL_HAT_DOWN || value == SDL_HAT_RIGHTDOWN ? 1 : 0); int8_t leftright = - value == SDL_HAT_LEFTUP || value == SDL_HAT_LEFT || value == SDL_HAT_LEFTDOWN ? -1 : (value == SDL_HAT_RIGHTUP || value == SDL_HAT_RIGHT || value == SDL_HAT_RIGHTDOWN ? 1 : 0); + value == SDL_HAT_LEFTUP || value == SDL_HAT_LEFT || value == SDL_HAT_LEFTDOWN ? -1 : (value == SDL_HAT_RIGHTUP || value == SDL_HAT_RIGHT || value == SDL_HAT_RIGHTDOWN ? 1 : 0); GB_set_key_state(gb, GB_KEY_LEFT, leftright == -1); GB_set_key_state(gb, GB_KEY_RIGHT, leftright == 1); GB_set_key_state(gb, GB_KEY_UP, updown == -1); GB_set_key_state(gb, GB_KEY_DOWN, updown == 1); break; - }; + }; case SDL_KEYDOWN: switch (event_hotkey_code(&event)) { @@ -250,6 +332,7 @@ static void handle_events(GB_gameboy_t *gb) } case SDL_SCANCODE_C: if (event.type == SDL_KEYDOWN && (event.key.keysym.mod & KMOD_CTRL)) { + CON_print("^C\a\n"); GB_debugger_break(gb); } break; @@ -270,7 +353,7 @@ static void handle_events(GB_gameboy_t *gb) } break; } - + case SDL_SCANCODE_P: if (event.key.keysym.mod & MODIFIER) { paused = !paused; @@ -286,14 +369,14 @@ static void handle_events(GB_gameboy_t *gb) #endif GB_audio_set_paused(GB_audio_is_playing()); } - break; - + break; + case SDL_SCANCODE_F: if (event.key.keysym.mod & MODIFIER) { if ((SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_DESKTOP) == false) { SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); } - else { + else { SDL_SetWindowFullscreen(window, 0); } update_viewport(); @@ -342,9 +425,14 @@ static void handle_events(GB_gameboy_t *gb) break; default: break; - } } } +} + +static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) +{ + return SDL_MapRGB(pixel_format, r, g, b); +} static void vblank(GB_gameboy_t *gb) { @@ -356,6 +444,26 @@ static void vblank(GB_gameboy_t *gb) clock_mutliplier += 1.0/16; GB_set_clock_multiplier(gb, clock_mutliplier); } + + if (turbo_down) { + show_osd_text("Fast forward..."); + } + else if (underclock_down) { + show_osd_text("Slow motion..."); + } + else if (rewind_down) { + show_osd_text("Rewinding..."); + } + + if (osd_countdown && configuration.osd) { + unsigned width = GB_get_screen_width(gb); + unsigned height = GB_get_screen_height(gb); + draw_text(active_pixel_buffer, + width, height, 8, height - 8 - osd_text_lines * 12, osd_text, + rgb_encode(gb, 255, 255, 255), rgb_encode(gb, 0, 0, 0), + true); + osd_countdown--; + } if (configuration.blending_mode) { render_texture(active_pixel_buffer, previous_pixel_buffer); uint32_t *temp = active_pixel_buffer; @@ -370,12 +478,6 @@ static void vblank(GB_gameboy_t *gb) handle_events(gb); } - -static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) -{ - return SDL_MapRGB(pixel_format, r, g, b); -} - static void rumble(GB_gameboy_t *gb, double amp) { SDL_HapticRumblePlay(haptic, amp, 250); @@ -383,12 +485,15 @@ static void rumble(GB_gameboy_t *gb, double amp) static void debugger_interrupt(int ignore) { - if (!GB_is_inited(&gb)) return; + if (!GB_is_inited(&gb)) exit(0); /* ^C twice to exit */ if (GB_debugger_is_stopped(&gb)) { GB_save_battery(&gb, battery_save_path_ptr); exit(0); } + if (console_supported) { + CON_print("^C\n"); + } GB_debugger_break(&gb); } @@ -417,14 +522,13 @@ static void gb_audio_callback(GB_gameboy_t *gb, GB_sample_t *sample) GB_audio_queue_sample(sample); } - static bool handle_pending_command(void) { switch (pending_command) { case GB_SDL_LOAD_STATE_COMMAND: case GB_SDL_SAVE_STATE_COMMAND: { - char save_path[strlen(filename) + 4]; + char save_path[strlen(filename) + 5]; char save_extension[] = ".s0"; save_extension[2] += command_parameter; replace_extension(filename, strlen(filename), save_path, save_extension); @@ -432,20 +536,40 @@ static bool handle_pending_command(void) start_capturing_logs(); bool success; if (pending_command == GB_SDL_LOAD_STATE_COMMAND) { - success = GB_load_state(&gb, save_path) == 0; + int result = GB_load_state(&gb, save_path); + if (result == ENOENT) { + char save_extension[] = ".sn0"; + save_extension[3] += command_parameter; + replace_extension(filename, strlen(filename), save_path, save_extension); + start_capturing_logs(); + result = GB_load_state(&gb, save_path); + } + success = result == 0; } else { success = GB_save_state(&gb, save_path) == 0; } - end_capturing_logs(true, false, success? SDL_MESSAGEBOX_INFORMATION : SDL_MESSAGEBOX_ERROR); + end_capturing_logs(true, + false, + success? SDL_MESSAGEBOX_INFORMATION : SDL_MESSAGEBOX_ERROR, + success? "Notice" : "Error"); + if (success) { + show_osd_text(pending_command == GB_SDL_LOAD_STATE_COMMAND? "State loaded" : "State saved"); + } return false; } case GB_SDL_LOAD_STATE_FROM_FILE_COMMAND: start_capturing_logs(); bool success = GB_load_state(&gb, dropped_state_file) == 0; - end_capturing_logs(true, false, success? SDL_MESSAGEBOX_INFORMATION : SDL_MESSAGEBOX_ERROR); + end_capturing_logs(true, + false, + success? SDL_MESSAGEBOX_INFORMATION : SDL_MESSAGEBOX_ERROR, + success? "Notice" : "Error"); SDL_free(dropped_state_file); + if (success) { + show_osd_text("State loaded"); + } return false; case GB_SDL_NO_COMMAND: @@ -484,7 +608,7 @@ static void load_boot_rom(GB_gameboy_t *gb, GB_boot_rom_t type) if (use_built_in) { start_capturing_logs(); GB_load_boot_rom(gb, resource_path(names[type])); - end_capturing_logs(true, false, SDL_MESSAGEBOX_ERROR); + end_capturing_logs(true, false, SDL_MESSAGEBOX_ERROR, "Error"); } } @@ -532,6 +656,17 @@ static void run(void) GB_set_rtc_mode(&gb, configuration.rtc_mode); GB_set_update_input_hint_callback(&gb, handle_events); GB_apu_set_sample_callback(&gb, gb_audio_callback); + + if (console_supported) { + CON_set_async_prompt("> "); + GB_set_log_callback(&gb, log_callback); + GB_set_input_callback(&gb, input_callback); + GB_set_async_input_callback(&gb, asyc_input_callback); + } + } + if (stop_on_start) { + stop_on_start = false; + GB_debugger_break(&gb); } bool error = false; @@ -557,8 +692,14 @@ static void run(void) else { GB_load_rom(&gb, filename); } - end_capturing_logs(true, error, SDL_MESSAGEBOX_WARNING); + end_capturing_logs(true, error, SDL_MESSAGEBOX_WARNING, "Warning"); + static char start_text[64]; + static char title[17]; + GB_get_rom_title(&gb, title); + sprintf(start_text, "SameBoy v" GB_VERSION "\n%s\n%08X", title, GB_get_rom_crc32(&gb)); + show_osd_text(start_text); + /* Configure battery */ char battery_save_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .sav + NULL */ @@ -627,19 +768,30 @@ static bool get_arg_flag(const char *flag, int *argc, char **argv) return false; } +#ifdef __APPLE__ +#include +static void enable_smooth_scrolling(void) +{ + CFPreferencesSetAppValue(CFSTR("AppleMomentumScrollSupported"), kCFBooleanTrue, kCFPreferencesCurrentApplication); +} +#endif + int main(int argc, char **argv) { #ifdef _WIN32 SetProcessDPIAware(); #endif -#define str(x) #x -#define xstr(x) str(x) - fprintf(stderr, "SameBoy v" xstr(VERSION) "\n"); - - bool fullscreen = get_arg_flag("--fullscreen", &argc, argv); +#ifdef __APPLE__ + enable_smooth_scrolling(); +#endif - if (argc > 2) { - fprintf(stderr, "Usage: %s [--fullscreen] [rom]\n", argv[0]); + bool fullscreen = get_arg_flag("--fullscreen", &argc, argv) || get_arg_flag("-f", &argc, argv); + bool nogl = get_arg_flag("--nogl", &argc, argv); + stop_on_start = get_arg_flag("--stop-debugger", &argc, argv) || get_arg_flag("-s", &argc, argv); + + if (argc > 2 || (argc == 2 && argv[1][0] == '-')) { + fprintf(stderr, "SameBoy v" GB_VERSION "\n"); + fprintf(stderr, "Usage: %s [--fullscreen|-f] [--nogl] [--stop-debugger|-s] [rom]\n", argv[0]); exit(1); } @@ -650,6 +802,13 @@ int main(int argc, char **argv) signal(SIGINT, debugger_interrupt); SDL_Init(SDL_INIT_EVERYTHING); + if ((console_supported = CON_start(completer))) { + CON_set_repeat_empty(true); + CON_printf("SameBoy v" GB_VERSION "\n"); + } + else { + fprintf(stderr, "SameBoy v" GB_VERSION "\n"); + } strcpy(prefs_path, resource_path("prefs.bin")); if (access(prefs_path, R_OK | W_OK) != 0) { @@ -664,7 +823,7 @@ int main(int argc, char **argv) fclose(prefs_file); /* Sanitize for stability */ - configuration.color_correction_mode %= GB_COLOR_CORRECTION_REDUCE_CONTRAST +1; + configuration.color_correction_mode %= GB_COLOR_CORRECTION_LOW_CONTRAST +1; configuration.scaling_mode %= GB_SDL_SCALING_MAX; configuration.default_scale %= GB_SDL_DEFAULT_SCALE_MAX + 1; configuration.blending_mode %= GB_FRAME_BLENDING_MODE_ACCURATE + 1; @@ -692,7 +851,7 @@ int main(int argc, char **argv) SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - window = SDL_CreateWindow("SameBoy v" xstr(VERSION), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + window = SDL_CreateWindow("SameBoy v" GB_VERSION, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 160 * configuration.default_scale, 144 * configuration.default_scale, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); if (window == NULL) { fputs(SDL_GetError(), stderr); @@ -704,13 +863,15 @@ int main(int argc, char **argv) SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); } - SDL_GLContext gl_context = SDL_GL_CreateContext(window); + gl_context = nogl? NULL : SDL_GL_CreateContext(window); GLint major = 0, minor = 0; - glGetIntegerv(GL_MAJOR_VERSION, &major); - glGetIntegerv(GL_MINOR_VERSION, &minor); + if (gl_context) { + glGetIntegerv(GL_MAJOR_VERSION, &major); + glGetIntegerv(GL_MINOR_VERSION, &minor); + } - if (major * 0x100 + minor < 0x302) { + if (gl_context && major * 0x100 + minor < 0x302) { SDL_GL_DeleteContext(gl_context); gl_context = NULL; } @@ -734,6 +895,7 @@ int main(int argc, char **argv) update_viewport(); if (filename == NULL) { + stop_on_start = false; run_gui(false); } else { diff --git a/thirdparty/SameBoy/SDL/shader.c b/thirdparty/SameBoy/SDL/shader.c index de2ba564f..44de29044 100644 --- a/thirdparty/SameBoy/SDL/shader.c +++ b/thirdparty/SameBoy/SDL/shader.c @@ -62,8 +62,11 @@ static GLuint create_program(const char *vsh, const char *fsh) return program; } +extern bool uses_gl(void); bool init_shader_with_name(shader_t *shader, const char *name) { + if (!uses_gl()) return false; + GLint major = 0, minor = 0; glGetIntegerv(GL_MAJOR_VERSION, &major); glGetIntegerv(GL_MINOR_VERSION, &minor); @@ -187,6 +190,7 @@ void render_bitmap_with_shader(shader_t *shader, void *bitmap, void *previous, void free_shader(shader_t *shader) { + if (!uses_gl()) return; GLint major = 0, minor = 0; glGetIntegerv(GL_MAJOR_VERSION, &major); glGetIntegerv(GL_MINOR_VERSION, &minor); diff --git a/thirdparty/SameBoy/Tester/main.c b/thirdparty/SameBoy/Tester/main.c index b0f1b3189..a3add107d 100755 --- a/thirdparty/SameBoy/Tester/main.c +++ b/thirdparty/SameBoy/Tester/main.c @@ -27,13 +27,13 @@ static FILE *log_file; static void replace_extension(const char *src, size_t length, char *dest, const char *ext); static bool push_start_a, start_is_not_first, a_is_bad, b_is_confirm, push_faster, push_slower, do_not_stop, push_a_twice, start_is_bad, allow_weird_sp_values, large_stack, push_right, - semi_random, limit_start, pointer_control; + semi_random, limit_start, pointer_control, unsafe_speed_switch; static unsigned int test_length = 60 * 40; GB_gameboy_t gb; static unsigned int frames = 0; static bool use_tga = false; -static const uint8_t bmp_header[] = { +static uint8_t bmp_header[] = { 0x42, 0x4D, 0x48, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x70, 0xFF, @@ -45,13 +45,13 @@ static const uint8_t bmp_header[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static const uint8_t tga_header[] = { +static uint8_t tga_header[] = { 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x90, 0x00, 0x20, 0x28, }; -uint32_t bitmap[160*144]; +uint32_t bitmap[256*224]; static char *async_input_callback(GB_gameboy_t *gb) { @@ -60,6 +60,9 @@ static char *async_input_callback(GB_gameboy_t *gb) static void handle_buttons(GB_gameboy_t *gb) { + if (!gb->cgb_double_speed && unsafe_speed_switch) { + return; + } /* Do not press any buttons during the last two seconds, this might cause a screenshot to be taken while the LCD is off if the press makes the game load graphics. */ @@ -129,7 +132,7 @@ static void vblank(GB_gameboy_t *gb) gb->registers[GB_REGISTER_SP], gb->backtrace_size); frames = test_length - 1; } - if (gb->halted && !gb->interrupt_enable) { + if (gb->halted && !gb->interrupt_enable && gb->speed_switch_halt_countdown == 0) { GB_log(gb, "The game is deadlocked.\n"); frames = test_length - 1; } @@ -137,10 +140,22 @@ static void vblank(GB_gameboy_t *gb) if (frames >= test_length && !gb->disable_rendering) { bool is_screen_blank = true; - for (unsigned i = 160*144; i--;) { - if (bitmap[i] != bitmap[0]) { - is_screen_blank = false; - break; + if (!gb->sgb) { + for (unsigned i = 160 * 144; i--;) { + if (bitmap[i] != bitmap[0]) { + is_screen_blank = false; + break; + } + } + } + else { + if (gb->sgb->mask_mode == 0) { + for (unsigned i = 160 * 144; i--;) { + if (gb->sgb->screen_buffer[i] != gb->sgb->screen_buffer[0]) { + is_screen_blank = false; + break; + } + } } } @@ -148,12 +163,20 @@ static void vblank(GB_gameboy_t *gb) if (!is_screen_blank || frames >= test_length + 60 * 4) { FILE *f = fopen(bmp_filename, "wb"); if (use_tga) { + tga_header[0xC] = GB_get_screen_width(gb); + tga_header[0xD] = GB_get_screen_width(gb) >> 8; + tga_header[0xE] = GB_get_screen_height(gb); + tga_header[0xF] = GB_get_screen_height(gb) >> 8; fwrite(&tga_header, 1, sizeof(tga_header), f); } else { + (*(uint32_t *)&bmp_header[0x2]) = sizeof(bmp_header) + sizeof(bitmap[0]) * GB_get_screen_width(gb) * GB_get_screen_height(gb) + 2; + (*(uint32_t *)&bmp_header[0x12]) = GB_get_screen_width(gb); + (*(int32_t *)&bmp_header[0x16]) = -GB_get_screen_height(gb); + (*(uint32_t *)&bmp_header[0x22]) = sizeof(bitmap[0]) * GB_get_screen_width(gb) * GB_get_screen_height(gb) + 2; fwrite(&bmp_header, 1, sizeof(bmp_header), f); } - fwrite(&bitmap, 1, sizeof(bitmap), f); + fwrite(&bitmap, 1, sizeof(bitmap[0]) * GB_get_screen_width(gb) * GB_get_screen_height(gb), f); fclose(f); if (!gb->boot_rom_finished) { GB_log(gb, "Boot ROM did not finish.\n"); @@ -265,12 +288,10 @@ static void replace_extension(const char *src, size_t length, char *dest, const int main(int argc, char **argv) { -#define str(x) #x -#define xstr(x) str(x) - fprintf(stderr, "SameBoy Tester v" xstr(VERSION) "\n"); + fprintf(stderr, "SameBoy Tester v" GB_VERSION "\n"); if (argc == 1) { - fprintf(stderr, "Usage: %s [--dmg] [--start] [--length seconds] [--sav] [--boot path to boot ROM]" + fprintf(stderr, "Usage: %s [--dmg] [--sgb] [--cgb] [--start] [--length seconds] [--sav] [--boot path to boot ROM]" #ifndef _WIN32 " [--jobs number of tests to run simultaneously]" #endif @@ -284,6 +305,7 @@ int main(int argc, char **argv) #endif bool dmg = false; + bool sgb = false; bool sav = false; const char *boot_rom_path = NULL; @@ -293,6 +315,21 @@ int main(int argc, char **argv) if (strcmp(argv[i], "--dmg") == 0) { fprintf(stderr, "Using DMG mode\n"); dmg = true; + sgb = false; + continue; + } + + if (strcmp(argv[i], "--sgb") == 0) { + fprintf(stderr, "Using SGB mode\n"); + sgb = true; + dmg = false; + continue; + } + + if (strcmp(argv[i], "--cgb") == 0) { + fprintf(stderr, "Using CGB mode\n"); + dmg = false; + sgb = false; continue; } @@ -373,6 +410,13 @@ int main(int argc, char **argv) exit(1); } } + else if (sgb) { + GB_init(&gb, GB_MODEL_SGB2); + if (GB_load_boot_rom(&gb, boot_rom_path ?: executable_relative_path("sgb2_boot.bin"))) { + fprintf(stderr, "Failed to load boot ROM from '%s'\n", boot_rom_path ?: executable_relative_path("sgb2_boot.bin")); + exit(1); + } + } else { GB_init(&gb, GB_MODEL_CGB_E); if (GB_load_boot_rom(&gb, boot_rom_path ?: executable_relative_path("cgb_boot.bin"))) { @@ -406,7 +450,8 @@ int main(int argc, char **argv) strcmp((const char *)(gb.rom + 0x134), "ONI 5") == 0; b_is_confirm = strcmp((const char *)(gb.rom + 0x134), "ELITE SOCCER") == 0 || strcmp((const char *)(gb.rom + 0x134), "SOCCER") == 0 || - strcmp((const char *)(gb.rom + 0x134), "GEX GECKO") == 0; + strcmp((const char *)(gb.rom + 0x134), "GEX GECKO") == 0 || + strcmp((const char *)(gb.rom + 0x134), "BABE") == 0; push_faster = strcmp((const char *)(gb.rom + 0x134), "MOGURA DE PON!") == 0 || strcmp((const char *)(gb.rom + 0x134), "HUGO2 1/2") == 0 || strcmp((const char *)(gb.rom + 0x134), "HUGO") == 0; @@ -445,6 +490,11 @@ int main(int argc, char **argv) pointer_control = memcmp((const char *)(gb.rom + 0x134), "LEGO ATEAM BLPP", strlen("LEGO ATEAM BLPP")) == 0; push_faster |= pointer_control; + /* Games that perform an unsafe speed switch, don't input until in double speed */ + unsafe_speed_switch = strcmp((const char *)(gb.rom + 0x134), "GBVideo") == 0 || // lulz this is my fault + strcmp((const char *)(gb.rom + 0x134), "POKEMONGOLD 2") == 0; // Pokemon Adventure + + /* Run emulation */ running = true; gb.turbo = gb.turbo_dont_skip = gb.disable_rendering = true; diff --git a/thirdparty/SameBoy/Windows/pthread.h b/thirdparty/SameBoy/Windows/pthread.h new file mode 100644 index 000000000..7bf328bb0 --- /dev/null +++ b/thirdparty/SameBoy/Windows/pthread.h @@ -0,0 +1,86 @@ +/* Very minimal pthread implementation for Windows */ +#include +#include + +typedef HANDLE pthread_t; +typedef struct pthread_attr_s pthread_attr_t; + +static inline int pthread_create(pthread_t *pthread, + const pthread_attr_t *attrs, + LPTHREAD_START_ROUTINE function, + void *context) +{ + assert(!attrs); + *pthread = CreateThread(NULL, 0, function, + context, 0, NULL); + return *pthread? 0 : GetLastError(); +} + + +typedef struct { + unsigned status; + CRITICAL_SECTION cs; +} pthread_mutex_t; +#define PTHREAD_MUTEX_INITIALIZER {0,} + +static inline CRITICAL_SECTION *pthread_mutex_to_cs(pthread_mutex_t *mutex) +{ +retry: + if (mutex->status == 2) return &mutex->cs; + + unsigned expected = 0; + unsigned desired = 1; + if (__atomic_compare_exchange(&mutex->status, &expected, &desired, false, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) { + InitializeCriticalSection(&mutex->cs); + mutex->status = 2; + return &mutex->cs; + } + goto retry; +} + +static inline int pthread_mutex_lock(pthread_mutex_t *mutex) +{ + EnterCriticalSection(pthread_mutex_to_cs(mutex)); + return 0; +} + +static inline int pthread_mutex_unlock(pthread_mutex_t *mutex) +{ + LeaveCriticalSection(pthread_mutex_to_cs(mutex)); + return 0; +} + +typedef struct { + unsigned status; + CONDITION_VARIABLE cond; +} pthread_cond_t; +#define PTHREAD_COND_INITIALIZER {0,} + +static inline CONDITION_VARIABLE *pthread_cond_to_win(pthread_cond_t *cond) +{ +retry: + if (cond->status == 2) return &cond->cond; + + unsigned expected = 0; + unsigned desired = 1; + if (__atomic_compare_exchange(&cond->status, &expected, &desired, false, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) { + InitializeConditionVariable(&cond->cond); + cond->status = 2; + return &cond->cond; + } + goto retry; +} + + +static inline int pthread_cond_signal(pthread_cond_t *cond) +{ + WakeConditionVariable(pthread_cond_to_win(cond)); + return 0; +} + +static inline int pthread_cond_wait(pthread_cond_t *cond, + pthread_mutex_t *mutex) +{ + // Mutex is locked therefore already initialized + return SleepConditionVariableCS(pthread_cond_to_win(cond), &mutex->cs, INFINITE); +} diff --git a/thirdparty/SameBoy/Windows/unistd.h b/thirdparty/SameBoy/Windows/unistd.h index b7aabf295..62e2337c3 100644 --- a/thirdparty/SameBoy/Windows/unistd.h +++ b/thirdparty/SameBoy/Windows/unistd.h @@ -5,3 +5,4 @@ #define read(...) _read(__VA_ARGS__) #define write(...) _write(__VA_ARGS__) +#define isatty(...) _isatty(__VA_ARGS__) diff --git a/thirdparty/SameBoy/libretro/Makefile b/thirdparty/SameBoy/libretro/Makefile index 50ab91fdb..ada200df2 100644 --- a/thirdparty/SameBoy/libretro/Makefile +++ b/thirdparty/SameBoy/libretro/Makefile @@ -311,7 +311,7 @@ endif include Makefile.common -CFLAGS += -DSAMEBOY_CORE_VERSION=\"$(VERSION)\" +CFLAGS += -DGB_VERSION=\"$(VERSION)\" OBJECTS := $(patsubst $(CORE_DIR)/%.c,$(CORE_DIR)/build/obj/%_libretro.c.o,$(SOURCES_C)) diff --git a/thirdparty/SameBoy/libretro/jni/Android.mk b/thirdparty/SameBoy/libretro/jni/Android.mk index e0646b9af..8ac1b3bab 100644 --- a/thirdparty/SameBoy/libretro/jni/Android.mk +++ b/thirdparty/SameBoy/libretro/jni/Android.mk @@ -8,7 +8,7 @@ include $(CORE_DIR)/libretro/Makefile.common GENERATED_SOURCES := $(filter %_boot.c,$(SOURCES_C)) -COREFLAGS := -DINLINE=inline -D__LIBRETRO__ -DGB_INTERNAL $(INCFLAGS) -DSAMEBOY_CORE_VERSION=\"$(VERSION)\" -Wno-multichar -DANDROID +COREFLAGS := -DINLINE=inline -D__LIBRETRO__ -DGB_INTERNAL $(INCFLAGS) -DGB_VERSION=\"$(VERSION)\" -Wno-multichar -DANDROID GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)" ifneq ($(GIT_VERSION)," unknown") diff --git a/thirdparty/SameBoy/libretro/libretro.c b/thirdparty/SameBoy/libretro/libretro.c index 918a657f9..5a559c4c8 100644 --- a/thirdparty/SameBoy/libretro/libretro.c +++ b/thirdparty/SameBoy/libretro/libretro.c @@ -6,7 +6,7 @@ #include #include #include - +#include #ifndef WIIU #define AUDIO_FREQUENCY 384000 #else @@ -22,6 +22,7 @@ #include #include "libretro.h" +#include "libretro_core_options.inc" #ifdef _WIN32 static const char slash = '\\'; @@ -45,20 +46,24 @@ char battery_save_path[512]; char symbols_path[512]; enum model { - MODEL_DMG, - MODEL_CGB, + MODEL_DMG_B, + MODEL_CGB_C, + MODEL_CGB_E, MODEL_AGB, - MODEL_SGB, + MODEL_SGB_PAL, + MODEL_SGB_NTSC, MODEL_SGB2, MODEL_AUTO }; static const GB_model_t libretro_to_internal_model[] = { - [MODEL_DMG] = GB_MODEL_DMG_B, - [MODEL_CGB] = GB_MODEL_CGB_E, + [MODEL_DMG_B] = GB_MODEL_DMG_B, + [MODEL_CGB_C] = GB_MODEL_CGB_C, + [MODEL_CGB_E] = GB_MODEL_CGB_E, [MODEL_AGB] = GB_MODEL_AGB, - [MODEL_SGB] = GB_MODEL_SGB, + [MODEL_SGB_PAL] = GB_MODEL_SGB_PAL, + [MODEL_SGB_NTSC] = GB_MODEL_SGB_NTSC, [MODEL_SGB2] = GB_MODEL_SGB2 }; @@ -73,7 +78,7 @@ enum audio_out { }; static enum model model[2]; -static enum model auto_model = MODEL_CGB; +static enum model auto_model = MODEL_CGB_E; static uint32_t *frame_buf = NULL; static uint32_t *frame_buf_copy = NULL; @@ -131,7 +136,7 @@ static void GB_update_keys_status(GB_gameboy_t *gb, unsigned port) else { unsigned j; - for (j = 0; j < (RETRO_DEVICE_ID_JOYPAD_R3+1); j++) { + for (j = 0; j < (RETRO_DEVICE_ID_JOYPAD_R3 + 1); j++) { if (input_state_cb(port, RETRO_DEVICE_JOYPAD, 0, j)) { joypad_bits |= (1 << j); } @@ -160,7 +165,7 @@ static void GB_update_keys_status(GB_gameboy_t *gb, unsigned port) static void rumble_callback(GB_gameboy_t *gb, double amplitude) { if (!rumble.set_rumble_state) return; - + if (gb == &gameboy[0]) { rumble.set_rumble_state(0, RETRO_RUMBLE_STRONG, 65535 * amplitude); } @@ -230,33 +235,68 @@ static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) static retro_environment_t environ_cb; -/* variables for single cart mode */ -static const struct retro_variable vars_single[] = { - { "sameboy_color_correction_mode", "Color correction; emulate hardware|preserve brightness|reduce contrast|off|correct curves" }, - { "sameboy_high_pass_filter_mode", "High-pass filter; accurate|remove dc offset|off" }, - { "sameboy_model", "Emulated model (Restart game); Auto|Game Boy|Game Boy Color|Game Boy Advance|Super Game Boy|Super Game Boy 2" }, - { "sameboy_border", "Display border; Super Game Boy only|always|never" }, - { "sameboy_rumble", "Enable rumble; rumble-enabled games|all games|never" }, - { "sameboy_rtc", "Real Time Clock emulation; sync to system clock|accurate" }, - { NULL } -}; +static void set_variable_visibility(void) +{ + struct retro_core_option_display option_display_singlecart; + struct retro_core_option_display option_display_dualcart; -/* variables for dual cart dual gameboy mode */ -static const struct retro_variable vars_dual[] = { - { "sameboy_link", "Link cable emulation; enabled|disabled" }, - /*{ "sameboy_ir", "Infrared Sensor Emulation; disabled|enabled" },*/ - { "sameboy_screen_layout", "Screen layout; top-down|left-right" }, - { "sameboy_audio_output", "Audio output; Game Boy #1|Game Boy #2" }, - { "sameboy_model_1", "Emulated model for Game Boy #1 (Restart game); Auto|Game Boy|Game Boy Color|Game Boy Advance" }, - { "sameboy_model_2", "Emulated model for Game Boy #2 (Restart game); Auto|Game Boy|Game Boy Color|Game Boy Advance" }, - { "sameboy_color_correction_mode_1", "Color correction for Game Boy #1; emulate hardware|preserve brightness|reduce contrast|off|correct curves" }, - { "sameboy_color_correction_mode_2", "Color correction for Game Boy #2; emulate hardware|preserve brightness|reduce contrast|off|correct curves" }, - { "sameboy_high_pass_filter_mode_1", "High-pass filter for Game Boy #1; accurate|remove dc offset|off" }, - { "sameboy_high_pass_filter_mode_2", "High-pass filter for Game Boy #2; accurate|remove dc offset|off" }, - { "sameboy_rumble_1", "Enable rumble for Game Boy #1; rumble-enabled games|all games|never" }, - { "sameboy_rumble_2", "Enable rumble for Game Boy #2; rumble-enabled games|all games|never" }, - { NULL } -}; + size_t i; + size_t num_options = 0; + + // Show/hide options depending on the number of emulated devices + if (emulated_devices == 1) { + option_display_singlecart.visible = true; + option_display_dualcart.visible = false; + } + else if (emulated_devices == 2) { + option_display_singlecart.visible = false; + option_display_dualcart.visible = true; + } + + // Determine number of options + while (true) { + if (!option_defs_us[num_options].key) break; + num_options++; + } + + // Copy parameters from option_defs_us array + for (i = 0; i < num_options; i++) { + const char *key = option_defs_us[i].key; + if ((strcmp(key, "sameboy_model") == 0) || + (strcmp(key, "sameboy_rtc") == 0) || + (strcmp(key, "sameboy_scaling_filter") == 0) || + (strcmp(key, "sameboy_mono_palette") == 0) || + (strcmp(key, "sameboy_color_correction_mode") == 0) || + (strcmp(key, "sameboy_light_temperature") == 0) || + (strcmp(key, "sameboy_border") == 0) || + (strcmp(key, "sameboy_high_pass_filter_mode") == 0) || + (strcmp(key, "sameboy_audio_interference") == 0) || + (strcmp(key, "sameboy_rumble") == 0)) { + option_display_singlecart.key = key; + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display_singlecart); + } + else if ((strcmp(key, "sameboy_link") == 0) || + (strcmp(key, "sameboy_screen_layout") == 0) || + (strcmp(key, "sameboy_audio_output") == 0) || + (strcmp(key, "sameboy_model_1") == 0) || + (strcmp(key, "sameboy_model_2") == 0) || + (strcmp(key, "sameboy_mono_palette_1") == 0) || + (strcmp(key, "sameboy_mono_palette_2") == 0) || + (strcmp(key, "sameboy_color_correction_mode_1") == 0) || + (strcmp(key, "sameboy_color_correction_mode_2") == 0) || + (strcmp(key, "sameboy_light_temperature_1") == 0) || + (strcmp(key, "sameboy_light_temperature_2") == 0) || + (strcmp(key, "sameboy_high_pass_filter_mode_1") == 0) || + (strcmp(key, "sameboy_high_pass_filter_mode_2") == 0) || + (strcmp(key, "sameboy_audio_interference_1") == 0) || + (strcmp(key, "sameboy_audio_interference_2") == 0) || + (strcmp(key, "sameboy_rumble_1") == 0) || + (strcmp(key, "sameboy_rumble_2") == 0)) { + option_display_dualcart.key = key; + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display_dualcart); + } + } +} static const struct retro_subsystem_memory_info gb1_memory[] = { { "srm", RETRO_MEMORY_GAMEBOY_1_SRAM }, @@ -357,7 +397,7 @@ static struct retro_input_descriptor descriptors_4p[] = { static void set_link_cable_state(bool state) { - if (state && emulated_devices == 2) { + if (state && emulated_devices == 2) { GB_set_serial_transfer_bit_start_callback(&gameboy[0], serial_start1); GB_set_serial_transfer_bit_end_callback(&gameboy[0], serial_end1); GB_set_serial_transfer_bit_start_callback(&gameboy[1], serial_start2); @@ -365,7 +405,7 @@ static void set_link_cable_state(bool state) GB_set_infrared_callback(&gameboy[0], infrared_callback1); GB_set_infrared_callback(&gameboy[1], infrared_callback2); } - else if (!state) { + else if (!state) { GB_set_serial_transfer_bit_start_callback(&gameboy[0], NULL); GB_set_serial_transfer_bit_end_callback(&gameboy[0], NULL); GB_set_serial_transfer_bit_start_callback(&gameboy[1], NULL); @@ -377,7 +417,7 @@ static void set_link_cable_state(bool state) static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) { - const char *model_name = (char *[]){ + const char *model_name = (char *[]) { [GB_BOOT_ROM_DMG0] = "dmg0", [GB_BOOT_ROM_DMG] = "dmg", [GB_BOOT_ROM_MGB] = "mgb", @@ -387,9 +427,8 @@ static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) [GB_BOOT_ROM_CGB] = "cgb", [GB_BOOT_ROM_AGB] = "agb", }[type]; - - const uint8_t *boot_code = (const unsigned char *[]) - { + + const uint8_t *boot_code = (const unsigned char *[]) { [GB_BOOT_ROM_DMG0] = dmg_boot, // dmg0 not implemented yet [GB_BOOT_ROM_DMG] = dmg_boot, [GB_BOOT_ROM_MGB] = dmg_boot, // mgb not implemented yet @@ -399,8 +438,8 @@ static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) [GB_BOOT_ROM_CGB] = cgb_boot, [GB_BOOT_ROM_AGB] = agb_boot, }[type]; - - unsigned boot_length = (unsigned []){ + + unsigned boot_length = (unsigned []) { [GB_BOOT_ROM_DMG0] = dmg_boot_length, // dmg0 not implemented yet [GB_BOOT_ROM_DMG] = dmg_boot_length, [GB_BOOT_ROM_MGB] = dmg_boot_length, // mgb not implemented yet @@ -410,7 +449,7 @@ static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) [GB_BOOT_ROM_CGB] = cgb_boot_length, [GB_BOOT_ROM_AGB] = agb_boot_length, }[type]; - + char buf[256]; snprintf(buf, sizeof(buf), "%s%c%s_boot.bin", retro_system_directory, slash, model_name); log_cb(RETRO_LOG_INFO, "Initializing as model: %s\n", model_name); @@ -527,7 +566,7 @@ static void init_for_current_model(unsigned id) } /* Let's be extremely nitpicky about how devices and descriptors are set */ - if (emulated_devices == 1 && (model[0] == MODEL_SGB || model[0] == MODEL_SGB2)) { + if (emulated_devices == 1 && (model[0] == MODEL_SGB_PAL || model[0] == MODEL_SGB_NTSC || model[0] == MODEL_SGB2)) { static const struct retro_controller_info ports[] = { { controllers_sgb, 1 }, { controllers_sgb, 1 }, @@ -538,7 +577,7 @@ static void init_for_current_model(unsigned id) environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, descriptors_4p); } - else if (emulated_devices == 1) { + else if (emulated_devices == 1) { static const struct retro_controller_info ports[] = { { controllers, 1 }, { NULL, 0 }, @@ -546,7 +585,7 @@ static void init_for_current_model(unsigned id) environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, descriptors_1p); } - else { + else { static const struct retro_controller_info ports[] = { { controllers, 1 }, { controllers, 1 }, @@ -555,16 +594,76 @@ static void init_for_current_model(unsigned id) environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, descriptors_2p); } - } static void check_variables() { struct retro_variable var = {0}; - if (emulated_devices == 1) { + if (emulated_devices == 1) { + + var.key = "sameboy_model"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + enum model new_model = model[0]; + if (strcmp(var.value, "Game Boy") == 0) { + new_model = MODEL_DMG_B; + } + else if (strcmp(var.value, "Game Boy Color C") == 0) { + new_model = MODEL_CGB_C; + } + else if (strcmp(var.value, "Game Boy Color") == 0) { + new_model = MODEL_CGB_E; + } + else if (strcmp(var.value, "Game Boy Advance") == 0) { + new_model = MODEL_AGB; + } + else if (strcmp(var.value, "Super Game Boy") == 0) { + new_model = MODEL_SGB_NTSC; + } + else if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else { + new_model = MODEL_AUTO; + } + + model[0] = new_model; + } + + var.key = "sameboy_rtc"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "sync to system clock") == 0) { + GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_SYNC_TO_HOST); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_ACCURATE); + } + } + + var.key = "sameboy_mono_palette"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "greyscale") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GREY); + } + else if (strcmp(var.value, "lime") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_DMG); + } + else if (strcmp(var.value, "olive") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_MGB); + } + else if (strcmp(var.value, "teal") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GBL); + } + } + var.key = "sameboy_color_correction_mode"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "off") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_DISABLED); } @@ -580,8 +679,52 @@ static void check_variables() else if (strcmp(var.value, "reduce contrast") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_REDUCE_CONTRAST); } + else if (strcmp(var.value, "harsh reality") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_LOW_CONTRAST); + } + } + + var.key = "sameboy_light_temperature"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_light_temperature(&gameboy[0], atof(var.value)); + } + + var.key = "sameboy_border"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "never") == 0) { + GB_set_border_mode(&gameboy[0], GB_BORDER_NEVER); + } + else if (strcmp(var.value, "Super Game Boy only") == 0) { + GB_set_border_mode(&gameboy[0], GB_BORDER_SGB); + } + else if (strcmp(var.value, "always") == 0) { + GB_set_border_mode(&gameboy[0], GB_BORDER_ALWAYS); + } + geometry_updated = true; + } + + var.key = "sameboy_high_pass_filter_mode"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "off") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_OFF); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_ACCURATE); + } + else if (strcmp(var.value, "remove dc offset") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_REMOVE_DC_OFFSET); + } } - + + var.key = "sameboy_audio_interference"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_interference_volume(&gameboy[0], atoi(var.value) / 100.0); + } + var.key = "sameboy_rumble"; var.value = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { @@ -595,47 +738,77 @@ static void check_variables() GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_ALL_GAMES); } } - - var.key = "sameboy_rtc"; + + } + else { + GB_set_border_mode(&gameboy[0], GB_BORDER_NEVER); + GB_set_border_mode(&gameboy[1], GB_BORDER_NEVER); + GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_ACCURATE); + GB_set_rtc_mode(&gameboy[1], GB_RTC_MODE_ACCURATE); + + var.key = "sameboy_link"; var.value = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (strcmp(var.value, "sync to system clock") == 0) { - GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_SYNC_TO_HOST); + bool tmp = link_cable_emulation; + if (strcmp(var.value, "enabled") == 0) { + link_cable_emulation = true; } - else if (strcmp(var.value, "accurate") == 0) { - GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_ACCURATE); + else { + link_cable_emulation = false; + } + if (link_cable_emulation && link_cable_emulation != tmp) { + set_link_cable_state(true); + } + else if (!link_cable_emulation && link_cable_emulation != tmp) { + set_link_cable_state(false); } } - var.key = "sameboy_high_pass_filter_mode"; + var.key = "sameboy_screen_layout"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (strcmp(var.value, "off") == 0) { - GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_OFF); + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "top-down") == 0) { + screen_layout = LAYOUT_TOP_DOWN; } - else if (strcmp(var.value, "accurate") == 0) { - GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_ACCURATE); + else { + screen_layout = LAYOUT_LEFT_RIGHT; } - else if (strcmp(var.value, "remove dc offset") == 0) { - GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_REMOVE_DC_OFFSET); + + geometry_updated = true; + } + + var.key = "sameboy_audio_output"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "Game Boy #1") == 0) { + audio_out = GB_1; + } + else { + audio_out = GB_2; } } - var.key = "sameboy_model"; + var.key = "sameboy_model_1"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { enum model new_model = model[0]; if (strcmp(var.value, "Game Boy") == 0) { - new_model = MODEL_DMG; + new_model = MODEL_DMG_B; + } + else if (strcmp(var.value, "Game Boy Color C") == 0) { + new_model = MODEL_CGB_C; } else if (strcmp(var.value, "Game Boy Color") == 0) { - new_model = MODEL_CGB; + new_model = MODEL_CGB_E; } else if (strcmp(var.value, "Game Boy Advance") == 0) { new_model = MODEL_AGB; } else if (strcmp(var.value, "Super Game Boy") == 0) { - new_model = MODEL_SGB; + new_model = MODEL_SGB_NTSC; + } + else if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; } else if (strcmp(var.value, "Super Game Boy 2") == 0) { new_model = MODEL_SGB2; @@ -647,30 +820,75 @@ static void check_variables() model[0] = new_model; } - var.key = "sameboy_border"; + var.key = "sameboy_model_2"; var.value = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (strcmp(var.value, "never") == 0) { - GB_set_border_mode(&gameboy[0], GB_BORDER_NEVER); + enum model new_model = model[1]; + if (strcmp(var.value, "Game Boy") == 0) { + new_model = MODEL_DMG_B; } - else if (strcmp(var.value, "Super Game Boy only") == 0) { - GB_set_border_mode(&gameboy[0], GB_BORDER_SGB); + else if (strcmp(var.value, "Game Boy Color C") == 0) { + new_model = MODEL_CGB_C; } - else if (strcmp(var.value, "always") == 0) { - GB_set_border_mode(&gameboy[0], GB_BORDER_ALWAYS); + else if (strcmp(var.value, "Game Boy Color") == 0) { + new_model = MODEL_CGB_E; } - - geometry_updated = true; + else if (strcmp(var.value, "Game Boy Advance") == 0) { + new_model = MODEL_AGB; + } + else if (strcmp(var.value, "Super Game Boy") == 0) { + new_model = MODEL_SGB_NTSC; + } + else if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else { + new_model = MODEL_AUTO; + } + + model[1] = new_model; } - } - else { - GB_set_border_mode(&gameboy[0], GB_BORDER_NEVER); - GB_set_border_mode(&gameboy[1], GB_BORDER_NEVER); - GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_ACCURATE); - GB_set_rtc_mode(&gameboy[1], GB_RTC_MODE_ACCURATE); + + var.key = "sameboy_mono_palette_1"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "greyscale") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GREY); + } + else if (strcmp(var.value, "lime") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_DMG); + } + else if (strcmp(var.value, "olive") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_MGB); + } + else if (strcmp(var.value, "teal") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GBL); + } + } + + var.key = "sameboy_mono_palette_2"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "greyscale") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_GREY); + } + else if (strcmp(var.value, "lime") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_DMG); + } + else if (strcmp(var.value, "olive") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_MGB); + } + else if (strcmp(var.value, "teal") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_GBL); + } + } + var.key = "sameboy_color_correction_mode_1"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "off") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_DISABLED); } @@ -686,11 +904,14 @@ static void check_variables() else if (strcmp(var.value, "reduce contrast") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_REDUCE_CONTRAST); } + else if (strcmp(var.value, "harsh reality") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_LOW_CONTRAST); + } } var.key = "sameboy_color_correction_mode_2"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "off") == 0) { GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_DISABLED); } @@ -706,40 +927,26 @@ static void check_variables() else if (strcmp(var.value, "reduce contrast") == 0) { GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_REDUCE_CONTRAST); } - + else if (strcmp(var.value, "harsh reality") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_LOW_CONTRAST); + } } - - var.key = "sameboy_rumble_1"; + + var.key = "sameboy_light_temperature_1"; var.value = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (strcmp(var.value, "never") == 0) { - GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_DISABLED); - } - else if (strcmp(var.value, "rumble-enabled games") == 0) { - GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_CARTRIDGE_ONLY); - } - else if (strcmp(var.value, "all games") == 0) { - GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_ALL_GAMES); - } + GB_set_light_temperature(&gameboy[0], atof(var.value)); } - - var.key = "sameboy_rumble_2"; + + var.key = "sameboy_light_temperature_2"; var.value = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (strcmp(var.value, "never") == 0) { - GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_DISABLED); - } - else if (strcmp(var.value, "rumble-enabled games") == 0) { - GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_CARTRIDGE_ONLY); - } - else if (strcmp(var.value, "all games") == 0) { - GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_ALL_GAMES); - } + GB_set_light_temperature(&gameboy[1], atof(var.value)); } var.key = "sameboy_high_pass_filter_mode_1"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "off") == 0) { GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_OFF); } @@ -753,7 +960,7 @@ static void check_variables() var.key = "sameboy_high_pass_filter_mode_2"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "off") == 0) { GB_set_highpass_filter_mode(&gameboy[1], GB_HIGHPASS_OFF); } @@ -765,100 +972,48 @@ static void check_variables() } } - var.key = "sameboy_model_1"; + var.key = "sameboy_audio_interference_1"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - enum model new_model = model[0]; - if (strcmp(var.value, "Game Boy") == 0) { - new_model = MODEL_DMG; - } - else if (strcmp(var.value, "Game Boy Color") == 0) { - new_model = MODEL_CGB; - } - else if (strcmp(var.value, "Game Boy Advance") == 0) { - new_model = MODEL_AGB; - } - else if (strcmp(var.value, "Super Game Boy") == 0) { - new_model = MODEL_SGB; - } - else if (strcmp(var.value, "Super Game Boy 2") == 0) { - new_model = MODEL_SGB2; - } - else { - new_model = MODEL_AUTO; - } - - model[0] = new_model; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_interference_volume(&gameboy[0], atoi(var.value) / 100.0); } - var.key = "sameboy_model_2"; + var.key = "sameboy_audio_interference_2"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - enum model new_model = model[1]; - if (strcmp(var.value, "Game Boy") == 0) { - new_model = MODEL_DMG; - } - else if (strcmp(var.value, "Game Boy Color") == 0) { - new_model = MODEL_CGB; - } - else if (strcmp(var.value, "Game Boy Advance") == 0) { - new_model = MODEL_AGB; - } - else if (strcmp(var.value, "Super Game Boy") == 0) { - new_model = MODEL_SGB; - } - else if (strcmp(var.value, "Super Game Boy 2") == 0) { - new_model = MODEL_SGB; - } - else { - new_model = MODEL_AUTO; - } - - model[1] = new_model; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_interference_volume(&gameboy[1], atoi(var.value) / 100.0); } - var.key = "sameboy_screen_layout"; + var.key = "sameboy_rumble_1"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (strcmp(var.value, "top-down") == 0) { - screen_layout = LAYOUT_TOP_DOWN; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "never") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_DISABLED); } - else { - screen_layout = LAYOUT_LEFT_RIGHT; + else if (strcmp(var.value, "rumble-enabled games") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_CARTRIDGE_ONLY); + } + else if (strcmp(var.value, "all games") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_ALL_GAMES); } - - geometry_updated = true; } - var.key = "sameboy_link"; + var.key = "sameboy_rumble_2"; var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - bool tmp = link_cable_emulation; - if (strcmp(var.value, "enabled") == 0) { - link_cable_emulation = true; - } - else { - link_cable_emulation = false; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "never") == 0) { + GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_DISABLED); } - if (link_cable_emulation && link_cable_emulation != tmp) { - set_link_cable_state(true); + else if (strcmp(var.value, "rumble-enabled games") == 0) { + GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_CARTRIDGE_ONLY); } - else if (!link_cable_emulation && link_cable_emulation != tmp) { - set_link_cable_state(false); + else if (strcmp(var.value, "all games") == 0) { + GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_ALL_GAMES); } } - var.key = "sameboy_audio_output"; - var.value = NULL; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (strcmp(var.value, "Game Boy #1") == 0) { - audio_out = GB_1; - } - else { - audio_out = GB_2; - } - } } + set_variable_visibility(); } void retro_init(void) @@ -916,9 +1071,9 @@ void retro_get_system_info(struct retro_system_info *info) memset(info, 0, sizeof(*info)); info->library_name = "SameBoy"; #ifdef GIT_VERSION - info->library_version = SAMEBOY_CORE_VERSION GIT_VERSION; + info->library_version = GB_VERSION GIT_VERSION; #else - info->library_version = SAMEBOY_CORE_VERSION; + info->library_version = GB_VERSION; #endif info->need_fullpath = true; info->valid_extensions = "gb|gbc"; @@ -929,7 +1084,7 @@ void retro_get_system_av_info(struct retro_system_av_info *info) struct retro_game_geometry geom; struct retro_system_timing timing = { GB_get_usual_frame_rate(&gameboy[0]), AUDIO_FREQUENCY }; - if (emulated_devices == 2) { + if (emulated_devices == 2) { if (screen_layout == LAYOUT_TOP_DOWN) { geom.base_width = GB_get_screen_width(&gameboy[0]); geom.base_height = GB_get_screen_height(&gameboy[0]) * emulated_devices; @@ -941,7 +1096,7 @@ void retro_get_system_av_info(struct retro_system_av_info *info) geom.aspect_ratio = ((double)GB_get_screen_width(&gameboy[0]) * emulated_devices) / GB_get_screen_height(&gameboy[0]); } } - else { + else { geom.base_width = GB_get_screen_width(&gameboy[0]); geom.base_height = GB_get_screen_height(&gameboy[0]); geom.aspect_ratio = (double)GB_get_screen_width(&gameboy[0]) / GB_get_screen_height(&gameboy[0]); @@ -959,6 +1114,8 @@ void retro_set_environment(retro_environment_t cb) { environ_cb = cb; + libretro_set_core_options(environ_cb); + cb(RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO, (void*)subsystems); } @@ -1022,11 +1179,11 @@ void retro_run(void) check_variables(); } - if (emulated_devices == 2) { + if (emulated_devices == 2) { GB_update_keys_status(&gameboy[0], 0); GB_update_keys_status(&gameboy[1], 1); } - else if (emulated_devices == 1 && (model[0] == MODEL_SGB || model[0] == MODEL_SGB2)) { + else if (emulated_devices == 1 && (model[0] == MODEL_SGB_PAL || model[0] == MODEL_SGB_NTSC || model[0] == MODEL_SGB2)) { for (unsigned i = 0; i < 4; i++) { GB_update_keys_status(&gameboy[0], i); } @@ -1037,7 +1194,7 @@ void retro_run(void) vblank1_occurred = vblank2_occurred = false; signed delta = 0; - if (emulated_devices == 2) { + if (emulated_devices == 2) { while (!vblank1_occurred || !vblank2_occurred) { if (delta >= 0) { delta -= GB_run(&gameboy[0]); @@ -1047,11 +1204,11 @@ void retro_run(void) } } } - else { + else { GB_run_frame(&gameboy[0]); } - if (emulated_devices == 2) { + if (emulated_devices == 2) { if (screen_layout == LAYOUT_TOP_DOWN) { video_cb(frame_buf, GB_get_screen_width(&gameboy[0]), @@ -1085,24 +1242,23 @@ void retro_run(void) bool retro_load_game(const struct retro_game_info *info) { - environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void *)vars_single); check_variables(); frame_buf = (uint32_t *)malloc(MAX_VIDEO_PIXELS * emulated_devices * sizeof(uint32_t)); memset(frame_buf, 0, MAX_VIDEO_PIXELS * emulated_devices * sizeof(uint32_t)); enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; - if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { + if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { log_cb(RETRO_LOG_INFO, "XRGB8888 is not supported\n"); return false; } - auto_model = (info->path[strlen(info->path) - 1] & ~0x20) == 'C' ? MODEL_CGB : MODEL_DMG; + auto_model = (info->path[strlen(info->path) - 1] & ~0x20) == 'C' ? MODEL_CGB_E : MODEL_DMG_B; snprintf(retro_game_path, sizeof(retro_game_path), "%s", info->path); - for (int i = 0; i < emulated_devices; i++) { + for (int i = 0; i < emulated_devices; i++) { init_for_current_model(i); - if (GB_load_rom(&gameboy[i], info->path)) { + if (GB_load_rom(&gameboy[i], info->path)) { log_cb(RETRO_LOG_INFO, "Failed to load ROM at %s\n", info->path); return false; } @@ -1148,7 +1304,6 @@ bool retro_load_game_special(unsigned type, const struct retro_game_info *info, return false; /* all other types are unhandled for now */ } - environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void *)vars_dual); check_variables(); frame_buf = (uint32_t*)malloc(emulated_devices * MAX_VIDEO_PIXELS * sizeof(uint32_t)); @@ -1158,17 +1313,17 @@ bool retro_load_game_special(unsigned type, const struct retro_game_info *info, memset(frame_buf_copy, 0, emulated_devices * MAX_VIDEO_PIXELS * sizeof(uint32_t)); enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; - if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { + if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { log_cb(RETRO_LOG_INFO, "XRGB8888 is not supported\n"); return false; } - auto_model = (info->path[strlen(info->path) - 1] & ~0x20) == 'C' ? MODEL_CGB : MODEL_DMG; + auto_model = (info->path[strlen(info->path) - 1] & ~0x20) == 'C' ? MODEL_CGB_E : MODEL_DMG_B; snprintf(retro_game_path, sizeof(retro_game_path), "%s", info->path); - for (int i = 0; i < emulated_devices; i++) { + for (int i = 0; i < emulated_devices; i++) { init_for_current_model(i); - if (GB_load_rom(&gameboy[i], info[i].path)) { + if (GB_load_rom(&gameboy[i], info[i].path)) { log_cb(RETRO_LOG_INFO, "Failed to load ROM\n"); return false; } @@ -1194,21 +1349,21 @@ size_t retro_serialize_size(void) if (maximum_save_size) { return maximum_save_size * 2; } - + GB_gameboy_t temp; - + GB_init(&temp, GB_MODEL_DMG_B); maximum_save_size = GB_get_save_state_size(&temp); GB_free(&temp); - + GB_init(&temp, GB_MODEL_CGB_E); maximum_save_size = MAX(maximum_save_size, GB_get_save_state_size(&temp)); GB_free(&temp); - + GB_init(&temp, GB_MODEL_SGB2); maximum_save_size = MAX(maximum_save_size, GB_get_save_state_size(&temp)); GB_free(&temp); - + return maximum_save_size * 2; } @@ -1226,7 +1381,7 @@ bool retro_serialize(void *data, size_t size) if (state_size > size) { return false; } - + GB_save_state_to_buffer(&gameboy[i], ((uint8_t *) data) + offset); offset += state_size; size -= state_size; @@ -1237,7 +1392,7 @@ bool retro_serialize(void *data, size_t size) bool retro_unserialize(const void *data, size_t size) { - for (int i = 0; i < emulated_devices; i++) { + for (int i = 0; i < emulated_devices; i++) { size_t state_size = GB_get_save_state_size(&gameboy[i]); if (state_size > size) { return false; @@ -1246,7 +1401,7 @@ bool retro_unserialize(const void *data, size_t size) if (GB_load_state_from_buffer(&gameboy[i], data, state_size)) { return false; } - + size -= state_size; data = ((uint8_t *)data) + state_size; } @@ -1258,8 +1413,8 @@ bool retro_unserialize(const void *data, size_t size) void *retro_get_memory_data(unsigned type) { void *data = NULL; - if (emulated_devices == 1) { - switch (type) { + if (emulated_devices == 1) { + switch (type) { case RETRO_MEMORY_SYSTEM_RAM: data = gameboy[0].ram; break; @@ -1286,8 +1441,8 @@ void *retro_get_memory_data(unsigned type) break; } } - else { - switch (type) { + else { + switch (type) { case RETRO_MEMORY_GAMEBOY_1_SRAM: if (gameboy[0].cartridge_type->has_battery && gameboy[0].mbc_ram_size != 0) { data = gameboy[0].mbc_ram; @@ -1331,8 +1486,8 @@ void *retro_get_memory_data(unsigned type) size_t retro_get_memory_size(unsigned type) { size_t size = 0; - if (emulated_devices == 1) { - switch (type) { + if (emulated_devices == 1) { + switch (type) { case RETRO_MEMORY_SYSTEM_RAM: size = gameboy[0].ram_size; break; @@ -1359,8 +1514,8 @@ size_t retro_get_memory_size(unsigned type) break; } } - else { - switch (type) { + else { + switch (type) { case RETRO_MEMORY_GAMEBOY_1_SRAM: if (gameboy[0].cartridge_type->has_battery && gameboy[0].mbc_ram_size != 0) { size = gameboy[0].mbc_ram_size; diff --git a/thirdparty/SameBoy/libretro/libretro.h b/thirdparty/SameBoy/libretro/libretro.h index 1fd2f5b79..e6ee6269d 100644 --- a/thirdparty/SameBoy/libretro/libretro.h +++ b/thirdparty/SameBoy/libretro/libretro.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2018 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this libretro API header (libretro.h). @@ -69,7 +69,7 @@ extern "C" { # endif # endif # else -# if defined(__GNUC__) && __GNUC__ >= 4 && !defined(__CELLOS_LV2__) +# if defined(__GNUC__) && __GNUC__ >= 4 # define RETRO_API RETRO_CALLCONV __attribute__((__visibility__("default"))) # else # define RETRO_API RETRO_CALLCONV @@ -278,6 +278,11 @@ enum retro_language RETRO_LANGUAGE_ARABIC = 16, RETRO_LANGUAGE_GREEK = 17, RETRO_LANGUAGE_TURKISH = 18, + RETRO_LANGUAGE_SLOVAK = 19, + RETRO_LANGUAGE_PERSIAN = 20, + RETRO_LANGUAGE_HEBREW = 21, + RETRO_LANGUAGE_ASTURIAN = 22, + RETRO_LANGUAGE_FINNISH = 23, RETRO_LANGUAGE_LAST, /* Ensure sizeof(enum) == sizeof(int) */ @@ -708,6 +713,9 @@ enum retro_mod * state of rumble motors in controllers. * A strong and weak motor is supported, and they can be * controlled indepedently. + * Should be called from either retro_init() or retro_load_game(). + * Should not be called from retro_set_environment(). + * Returns false if rumble functionality is unavailable. */ #define RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES 24 /* uint64_t * -- @@ -1087,10 +1095,10 @@ enum retro_mod #define RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE (50 | RETRO_ENVIRONMENT_EXPERIMENTAL) /* float * -- - * Float value that lets us know what target refresh rate + * Float value that lets us know what target refresh rate * is curently in use by the frontend. * - * The core can use the returned value to set an ideal + * The core can use the returned value to set an ideal * refresh rate/framerate. */ @@ -1098,7 +1106,7 @@ enum retro_mod /* bool * -- * Boolean value that indicates whether or not the frontend supports * input bitmasks being returned by retro_input_state_t. The advantage - * of this is that retro_input_state_t has to be only called once to + * of this is that retro_input_state_t has to be only called once to * grab all button states instead of multiple times. * * If it returns true, you can pass RETRO_DEVICE_ID_JOYPAD_MASK as 'id' @@ -1117,7 +1125,7 @@ enum retro_mod * This may be still be done regardless of the core options * interface version. * - * If version is 1 however, core options may instead be set by + * If version is >= 1 however, core options may instead be set by * passing an array of retro_core_option_definition structs to * RETRO_ENVIRONMENT_SET_CORE_OPTIONS, or a 2D array of * retro_core_option_definition structs to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. @@ -1132,8 +1140,8 @@ enum retro_mod * GET_VARIABLE. * This allows the frontend to present these variables to * a user dynamically. - * This should only be called if RETRO_ENVIRONMENT_GET_ENHANCED_CORE_OPTIONS - * returns an API version of 1. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 1. * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. * This should be called the first time as early as * possible (ideally in retro_set_environment). @@ -1169,8 +1177,6 @@ enum retro_mod * i.e. it should be feasible to cycle through options * without a keyboard. * - * First entry should be treated as a default. - * * Example entry: * { * "foo_option", @@ -1196,8 +1202,8 @@ enum retro_mod * GET_VARIABLE. * This allows the frontend to present these variables to * a user dynamically. - * This should only be called if RETRO_ENVIRONMENT_GET_ENHANCED_CORE_OPTIONS - * returns an API version of 1. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 1. * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. * This should be called the first time as early as * possible (ideally in retro_set_environment). @@ -1248,6 +1254,140 @@ enum retro_mod * default when calling SET_VARIABLES/SET_CORE_OPTIONS. */ +#define RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER 56 + /* unsigned * -- + * + * Allows an implementation to ask frontend preferred hardware + * context to use. Core should use this information to deal + * with what specific context to request with SET_HW_RENDER. + * + * 'data' points to an unsigned variable + */ + +#define RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION 57 + /* unsigned * -- + * Unsigned value is the API version number of the disk control + * interface supported by the frontend. If callback return false, + * API version is assumed to be 0. + * + * In legacy code, the disk control interface is defined by passing + * a struct of type retro_disk_control_callback to + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE. + * This may be still be done regardless of the disk control + * interface version. + * + * If version is >= 1 however, the disk control interface may + * instead be defined by passing a struct of type + * retro_disk_control_ext_callback to + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. + * This allows the core to provide additional information about + * disk images to the frontend and/or enables extra + * disk control functionality by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE 58 + /* const struct retro_disk_control_ext_callback * -- + * Sets an interface which frontend can use to eject and insert + * disk images, and also obtain information about individual + * disk image files registered by the core. + * This is used for games which consist of multiple images and + * must be manually swapped out by the user (e.g. PSX, floppy disk + * based systems). + */ + +#define RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION 59 + /* unsigned * -- + * Unsigned value is the API version number of the message + * interface supported by the frontend. If callback returns + * false, API version is assumed to be 0. + * + * In legacy code, messages may be displayed in an + * implementation-specific manner by passing a struct + * of type retro_message to RETRO_ENVIRONMENT_SET_MESSAGE. + * This may be still be done regardless of the message + * interface version. + * + * If version is >= 1 however, messages may instead be + * displayed by passing a struct of type retro_message_ext + * to RETRO_ENVIRONMENT_SET_MESSAGE_EXT. This allows the + * core to specify message logging level, priority and + * destination (OSD, logging interface or both). + */ + +#define RETRO_ENVIRONMENT_SET_MESSAGE_EXT 60 + /* const struct retro_message_ext * -- + * Sets a message to be displayed in an implementation-specific + * manner for a certain amount of 'frames'. Additionally allows + * the core to specify message logging level, priority and + * destination (OSD, logging interface or both). + * Should not be used for trivial messages, which should simply be + * logged via RETRO_ENVIRONMENT_GET_LOG_INTERFACE (or as a + * fallback, stderr). + */ + +#define RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS 61 + /* unsigned * -- + * Unsigned value is the number of active input devices + * provided by the frontend. This may change between + * frames, but will remain constant for the duration + * of each frame. + * If callback returns true, a core need not poll any + * input device with an index greater than or equal to + * the number of active devices. + * If callback returns false, the number of active input + * devices is unknown. In this case, all input devices + * should be considered active. + */ + +#define RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK 62 + /* const struct retro_audio_buffer_status_callback * -- + * Lets the core know the occupancy level of the frontend + * audio buffer. Can be used by a core to attempt frame + * skipping in order to avoid buffer under-runs. + * A core may pass NULL to disable buffer status reporting + * in the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY 63 + /* const unsigned * -- + * Sets minimum frontend audio latency in milliseconds. + * Resultant audio latency may be larger than set value, + * or smaller if a hardware limit is encountered. A frontend + * is expected to honour requests up to 512 ms. + * + * - If value is less than current frontend + * audio latency, callback has no effect + * - If value is zero, default frontend audio + * latency is set + * + * May be used by a core to increase audio latency and + * therefore decrease the probability of buffer under-runs + * (crackling) when performing 'intensive' operations. + * A core utilising RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK + * to implement audio-buffer-based frame skipping may achieve + * optimal results by setting the audio latency to a 'high' + * (typically 6x or 8x) integer multiple of the expected + * frame time. + * + * WARNING: This can only be called from within retro_run(). + * Calling this can require a full reinitialization of audio + * drivers in the frontend, so it is important to call it very + * sparingly, and usually only with the users explicit consent. + * An eventual driver reinitialize will happen so that audio + * callbacks happening after this call within the same retro_run() + * call will target the newly initialized driver. + */ + +#define RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE 64 + /* const struct retro_fastforwarding_override * -- + * Used by a libretro core to override the current + * fastforwarding mode of the frontend. + * If NULL is passed to this function, the frontend + * will return true if fastforwarding override + * functionality is supported (no change in + * fastforwarding state will occur in this case). + */ + /* VFS functionality */ /* File paths: @@ -1383,28 +1523,28 @@ typedef int (RETRO_CALLCONV *retro_vfs_closedir_t)(struct retro_vfs_dir_handle * struct retro_vfs_interface { - /* VFS API v1 */ - retro_vfs_get_path_t get_path; - retro_vfs_open_t open; - retro_vfs_close_t close; - retro_vfs_size_t size; - retro_vfs_tell_t tell; - retro_vfs_seek_t seek; - retro_vfs_read_t read; - retro_vfs_write_t write; - retro_vfs_flush_t flush; - retro_vfs_remove_t remove; - retro_vfs_rename_t rename; - /* VFS API v2 */ - retro_vfs_truncate_t truncate; - /* VFS API v3 */ - retro_vfs_stat_t stat; - retro_vfs_mkdir_t mkdir; - retro_vfs_opendir_t opendir; - retro_vfs_readdir_t readdir; - retro_vfs_dirent_get_name_t dirent_get_name; - retro_vfs_dirent_is_dir_t dirent_is_dir; - retro_vfs_closedir_t closedir; + /* VFS API v1 */ + retro_vfs_get_path_t get_path; + retro_vfs_open_t open; + retro_vfs_close_t close; + retro_vfs_size_t size; + retro_vfs_tell_t tell; + retro_vfs_seek_t seek; + retro_vfs_read_t read; + retro_vfs_write_t write; + retro_vfs_flush_t flush; + retro_vfs_remove_t remove; + retro_vfs_rename_t rename; + /* VFS API v2 */ + retro_vfs_truncate_t truncate; + /* VFS API v3 */ + retro_vfs_stat_t stat; + retro_vfs_mkdir_t mkdir; + retro_vfs_opendir_t opendir; + retro_vfs_readdir_t readdir; + retro_vfs_dirent_get_name_t dirent_get_name; + retro_vfs_dirent_is_dir_t dirent_is_dir; + retro_vfs_closedir_t closedir; }; struct retro_vfs_interface_info @@ -1422,13 +1562,13 @@ struct retro_vfs_interface_info enum retro_hw_render_interface_type { - RETRO_HW_RENDER_INTERFACE_VULKAN = 0, - RETRO_HW_RENDER_INTERFACE_D3D9 = 1, - RETRO_HW_RENDER_INTERFACE_D3D10 = 2, - RETRO_HW_RENDER_INTERFACE_D3D11 = 3, - RETRO_HW_RENDER_INTERFACE_D3D12 = 4, - RETRO_HW_RENDER_INTERFACE_GSKIT_PS2 = 5, - RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX + RETRO_HW_RENDER_INTERFACE_VULKAN = 0, + RETRO_HW_RENDER_INTERFACE_D3D9 = 1, + RETRO_HW_RENDER_INTERFACE_D3D10 = 2, + RETRO_HW_RENDER_INTERFACE_D3D11 = 3, + RETRO_HW_RENDER_INTERFACE_D3D12 = 4, + RETRO_HW_RENDER_INTERFACE_GSKIT_PS2 = 5, + RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX }; /* Base struct. All retro_hw_render_interface_* types @@ -1924,6 +2064,10 @@ enum retro_sensor_action { RETRO_SENSOR_ACCELEROMETER_ENABLE = 0, RETRO_SENSOR_ACCELEROMETER_DISABLE, + RETRO_SENSOR_GYROSCOPE_ENABLE, + RETRO_SENSOR_GYROSCOPE_DISABLE, + RETRO_SENSOR_ILLUMINANCE_ENABLE, + RETRO_SENSOR_ILLUMINANCE_DISABLE, RETRO_SENSOR_DUMMY = INT_MAX }; @@ -1932,6 +2076,10 @@ enum retro_sensor_action #define RETRO_SENSOR_ACCELEROMETER_X 0 #define RETRO_SENSOR_ACCELEROMETER_Y 1 #define RETRO_SENSOR_ACCELEROMETER_Z 2 +#define RETRO_SENSOR_GYROSCOPE_X 3 +#define RETRO_SENSOR_GYROSCOPE_Y 4 +#define RETRO_SENSOR_GYROSCOPE_Z 5 +#define RETRO_SENSOR_ILLUMINANCE 6 typedef bool (RETRO_CALLCONV *retro_set_sensor_state_t)(unsigned port, enum retro_sensor_action action, unsigned rate); @@ -2129,6 +2277,30 @@ struct retro_frame_time_callback retro_usec_t reference; }; +/* Notifies a libretro core of the current occupancy + * level of the frontend audio buffer. + * + * - active: 'true' if audio buffer is currently + * in use. Will be 'false' if audio is + * disabled in the frontend + * + * - occupancy: Given as a value in the range [0,100], + * corresponding to the occupancy percentage + * of the audio buffer + * + * - underrun_likely: 'true' if the frontend expects an + * audio buffer underrun during the + * next frame (indicates that a core + * should attempt frame skipping) + * + * It will be called right before retro_run() every frame. */ +typedef void (RETRO_CALLCONV *retro_audio_buffer_status_callback_t)( + bool active, unsigned occupancy, bool underrun_likely); +struct retro_audio_buffer_status_callback +{ + retro_audio_buffer_status_callback_t callback; +}; + /* Pass this to retro_video_refresh_t if rendering to hardware. * Passing NULL to retro_video_refresh_t is still a frame dupe as normal. * */ @@ -2289,7 +2461,8 @@ struct retro_keyboard_callback retro_keyboard_event_t callback; }; -/* Callbacks for RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE. +/* Callbacks for RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE & + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. * Should be set for implementations which can swap out multiple disk * images in runtime. * @@ -2347,6 +2520,53 @@ typedef bool (RETRO_CALLCONV *retro_replace_image_index_t)(unsigned index, * with replace_image_index. */ typedef bool (RETRO_CALLCONV *retro_add_image_index_t)(void); +/* Sets initial image to insert in drive when calling + * core_load_game(). + * Since we cannot pass the initial index when loading + * content (this would require a major API change), this + * is set by the frontend *before* calling the core's + * retro_load_game()/retro_load_game_special() implementation. + * A core should therefore cache the index/path values and handle + * them inside retro_load_game()/retro_load_game_special(). + * - If 'index' is invalid (index >= get_num_images()), the + * core should ignore the set value and instead use 0 + * - 'path' is used purely for error checking - i.e. when + * content is loaded, the core should verify that the + * disk specified by 'index' has the specified file path. + * This is to guard against auto selecting the wrong image + * if (for example) the user should modify an existing M3U + * playlist. We have to let the core handle this because + * set_initial_image() must be called before loading content, + * i.e. the frontend cannot access image paths in advance + * and thus cannot perform the error check itself. + * If set path and content path do not match, the core should + * ignore the set 'index' value and instead use 0 + * Returns 'false' if index or 'path' are invalid, or core + * does not support this functionality + */ +typedef bool (RETRO_CALLCONV *retro_set_initial_image_t)(unsigned index, const char *path); + +/* Fetches the path of the specified disk image file. + * Returns 'false' if index is invalid (index >= get_num_images()) + * or path is otherwise unavailable. + */ +typedef bool (RETRO_CALLCONV *retro_get_image_path_t)(unsigned index, char *path, size_t len); + +/* Fetches a core-provided 'label' for the specified disk + * image file. In the simplest case this may be a file name + * (without extension), but for cores with more complex + * content requirements information may be provided to + * facilitate user disk swapping - for example, a core + * running floppy-disk-based content may uniquely label + * save disks, data disks, level disks, etc. with names + * corresponding to in-game disk change prompts (so the + * frontend can provide better user guidance than a 'dumb' + * disk index value). + * Returns 'false' if index is invalid (index >= get_num_images()) + * or label is otherwise unavailable. + */ +typedef bool (RETRO_CALLCONV *retro_get_image_label_t)(unsigned index, char *label, size_t len); + struct retro_disk_control_callback { retro_set_eject_state_t set_eject_state; @@ -2360,6 +2580,27 @@ struct retro_disk_control_callback retro_add_image_index_t add_image_index; }; +struct retro_disk_control_ext_callback +{ + retro_set_eject_state_t set_eject_state; + retro_get_eject_state_t get_eject_state; + + retro_get_image_index_t get_image_index; + retro_set_image_index_t set_image_index; + retro_get_num_images_t get_num_images; + + retro_replace_image_index_t replace_image_index; + retro_add_image_index_t add_image_index; + + /* NOTE: Frontend will only attempt to record/restore + * last used disk index if both set_initial_image() + * and get_image_path() are implemented */ + retro_set_initial_image_t set_initial_image; /* Optional - may be NULL */ + + retro_get_image_path_t get_image_path; /* Optional - may be NULL */ + retro_get_image_label_t get_image_label; /* Optional - may be NULL */ +}; + enum retro_pixel_format { /* 0RGB1555, native endian. @@ -2390,6 +2631,104 @@ struct retro_message unsigned frames; /* Duration in frames of message. */ }; +enum retro_message_target +{ + RETRO_MESSAGE_TARGET_ALL = 0, + RETRO_MESSAGE_TARGET_OSD, + RETRO_MESSAGE_TARGET_LOG +}; + +enum retro_message_type +{ + RETRO_MESSAGE_TYPE_NOTIFICATION = 0, + RETRO_MESSAGE_TYPE_NOTIFICATION_ALT, + RETRO_MESSAGE_TYPE_STATUS, + RETRO_MESSAGE_TYPE_PROGRESS +}; + +struct retro_message_ext +{ + /* Message string to be displayed/logged */ + const char *msg; + /* Duration (in ms) of message when targeting the OSD */ + unsigned duration; + /* Message priority when targeting the OSD + * > When multiple concurrent messages are sent to + * the frontend and the frontend does not have the + * capacity to display them all, messages with the + * *highest* priority value should be shown + * > There is no upper limit to a message priority + * value (within the bounds of the unsigned data type) + * > In the reference frontend (RetroArch), the same + * priority values are used for frontend-generated + * notifications, which are typically assigned values + * between 0 and 3 depending upon importance */ + unsigned priority; + /* Message logging level (info, warn, error, etc.) */ + enum retro_log_level level; + /* Message destination: OSD, logging interface or both */ + enum retro_message_target target; + /* Message 'type' when targeting the OSD + * > RETRO_MESSAGE_TYPE_NOTIFICATION: Specifies that a + * message should be handled in identical fashion to + * a standard frontend-generated notification + * > RETRO_MESSAGE_TYPE_NOTIFICATION_ALT: Specifies that + * message is a notification that requires user attention + * or action, but that it should be displayed in a manner + * that differs from standard frontend-generated notifications. + * This would typically correspond to messages that should be + * displayed immediately (independently from any internal + * frontend message queue), and/or which should be visually + * distinguishable from frontend-generated notifications. + * For example, a core may wish to inform the user of + * information related to a disk-change event. It is + * expected that the frontend itself may provide a + * notification in this case; if the core sends a + * message of type RETRO_MESSAGE_TYPE_NOTIFICATION, an + * uncomfortable 'double-notification' may occur. A message + * of RETRO_MESSAGE_TYPE_NOTIFICATION_ALT should therefore + * be presented such that visual conflict with regular + * notifications does not occur + * > RETRO_MESSAGE_TYPE_STATUS: Indicates that message + * is not a standard notification. This typically + * corresponds to 'status' indicators, such as a core's + * internal FPS, which are intended to be displayed + * either permanently while a core is running, or in + * a manner that does not suggest user attention or action + * is required. 'Status' type messages should therefore be + * displayed in a different on-screen location and in a manner + * easily distinguishable from both standard frontend-generated + * notifications and messages of type RETRO_MESSAGE_TYPE_NOTIFICATION_ALT + * > RETRO_MESSAGE_TYPE_PROGRESS: Indicates that message reports + * the progress of an internal core task. For example, in cases + * where a core itself handles the loading of content from a file, + * this may correspond to the percentage of the file that has been + * read. Alternatively, an audio/video playback core may use a + * message of type RETRO_MESSAGE_TYPE_PROGRESS to display the current + * playback position as a percentage of the runtime. 'Progress' type + * messages should therefore be displayed as a literal progress bar, + * where: + * - 'retro_message_ext.msg' is the progress bar title/label + * - 'retro_message_ext.progress' determines the length of + * the progress bar + * NOTE: Message type is a *hint*, and may be ignored + * by the frontend. If a frontend lacks support for + * displaying messages via alternate means than standard + * frontend-generated notifications, it will treat *all* + * messages as having the type RETRO_MESSAGE_TYPE_NOTIFICATION */ + enum retro_message_type type; + /* Task progress when targeting the OSD and message is + * of type RETRO_MESSAGE_TYPE_PROGRESS + * > -1: Unmetered/indeterminate + * > 0-100: Current progress percentage + * NOTE: Since message type is a hint, a frontend may ignore + * progress values. Where relevant, a core should therefore + * include progress percentage within the message string, + * such that the message intent remains clear when displayed + * as a standard frontend-generated notification */ + int8_t progress; +}; + /* Describes how the libretro implementation maps a libretro input bind * to its internal input system through a human readable string. * This string can be used to better let a user configure input. */ @@ -2410,7 +2749,7 @@ struct retro_input_descriptor struct retro_system_info { /* All pointers are owned by libretro implementation, and pointers must - * remain valid until retro_deinit() is called. */ + * remain valid until it is unloaded. */ const char *library_name; /* Descriptive name of library. Should not * contain any version numbers, etc. */ @@ -2504,8 +2843,20 @@ struct retro_core_option_display }; /* Maximum number of values permitted for a core option - * NOTE: This may be increased on a core-by-core basis - * if required (doing so has no effect on the frontend) */ + * > Note: We have to set a maximum value due the limitations + * of the C language - i.e. it is not possible to create an + * array of structs each containing a variable sized array, + * so the retro_core_option_definition values array must + * have a fixed size. The size limit of 128 is a balancing + * act - it needs to be large enough to support all 'sane' + * core options, but setting it too large may impact low memory + * platforms. In practise, if a core option has more than + * 128 values then the implementation is likely flawed. + * To quote the above API reference: + * "The number of possible options should be very limited + * i.e. it should be feasible to cycle through options + * without a keyboard." + */ #define RETRO_NUM_CORE_OPTION_VALUES_MAX 128 struct retro_core_option_value @@ -2597,6 +2948,47 @@ struct retro_framebuffer Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ }; +/* Used by a libretro core to override the current + * fastforwarding mode of the frontend */ +struct retro_fastforwarding_override +{ + /* Specifies the runtime speed multiplier that + * will be applied when 'fastforward' is true. + * For example, a value of 5.0 when running 60 FPS + * content will cap the fast-forward rate at 300 FPS. + * Note that the target multiplier may not be achieved + * if the host hardware has insufficient processing + * power. + * Setting a value of 0.0 (or greater than 0.0 but + * less than 1.0) will result in an uncapped + * fast-forward rate (limited only by hardware + * capacity). + * If the value is negative, it will be ignored + * (i.e. the frontend will use a runtime speed + * multiplier of its own choosing) */ + float ratio; + + /* If true, fastforwarding mode will be enabled. + * If false, fastforwarding mode will be disabled. */ + bool fastforward; + + /* If true, and if supported by the frontend, an + * on-screen notification will be displayed while + * 'fastforward' is true. + * If false, and if supported by the frontend, any + * on-screen fast-forward notifications will be + * suppressed */ + bool notification; + + /* If true, the core will have sole control over + * when fastforwarding mode is enabled/disabled; + * the frontend will not be able to change the + * state set by 'fastforward' until either + * 'inhibit_toggle' is set to false, or the core + * is unloaded */ + bool inhibit_toggle; +}; + /* Callbacks */ /* Environment callback. Gives implementations a way of performing diff --git a/thirdparty/SameBoy/libretro/libretro_core_options.inc b/thirdparty/SameBoy/libretro/libretro_core_options.inc new file mode 100644 index 000000000..118576326 --- /dev/null +++ b/thirdparty/SameBoy/libretro/libretro_core_options.inc @@ -0,0 +1,679 @@ +#ifndef LIBRETRO_CORE_OPTIONS_H__ +#define LIBRETRO_CORE_OPTIONS_H__ + +#include +#include + +#include "libretro.h" +#include "retro_inline.h" + +/* + ******************************** + * VERSION: 1.3 + ******************************** + * + * - 1.3: Move translations to libretro_core_options_intl.h + * - libretro_core_options_intl.h includes BOM and utf-8 + * fix for MSVC 2010-2013 + * - Added HAVE_NO_LANGEXTRA flag to disable translations + * on platforms/compilers without BOM support + * - 1.2: Use core options v1 interface when + * RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION is >= 1 + * (previously required RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION == 1) + * - 1.1: Support generation of core options v0 retro_core_option_value + * arrays containing options with a single value + * - 1.0: First commit + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + ******************************** + * Core Option Definitions + ******************************** + */ + +/* RETRO_LANGUAGE_ENGLISH */ + +/* Default language: + * - All other languages must include the same keys and values + * - Will be used as a fallback in the event that frontend language + * is not available + * - Will be used as a fallback for any missing entries in + * frontend language definition */ + +struct retro_core_option_definition option_defs_us[] = { + + /* Core options used in single cart mode */ + + { + "sameboy_model", + "System - Emulated Model (Requires Restart)", + "Chooses which system model the content should be started on. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + { + { "Auto", "Detect automatically" }, + { "Game Boy", "Game Boy (DMG-CPU B)" }, + { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, + { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, + { "Game Boy Advance", NULL }, + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Auto" + }, + { + "sameboy_rtc", + "System - Real Time Clock Emulation", + "Specifies how the emulation of the real-time clock feature used in certain Game Boy and Game Boy Color games should function.", + { + { "sync to system clock", "Sync to System Clock" }, + { "accurate", "Accurate" }, + { NULL, NULL }, + }, + "sync to system clock" + }, + + { + "sameboy_mono_palette", + "Video - GB Mono Palette", + "Selects the color palette that should be used when playing Game Boy games.", + { + { "greyscale", "Greyscale" }, + { "lime", "Lime (Game Boy)" }, + { "olive", "Olive (Game Boy Pocket)" }, + { "teal", "Teal (Game Boy Light)" }, + { NULL, NULL }, + }, + "greyscale" + }, + { + "sameboy_color_correction_mode", + "Video - GBC Color Correction", + "Defines which type of color correction should be applied when playing Game Boy Color games.", + { + { "emulate hardware", "Emulate Hardware" }, + { "preserve brightness", "Preserve Brightness" }, + { "reduce contrast", "Reduce Contrast" }, + { "correct curves", "Correct Color Curves" }, + { "harsh reality", "Harsh Reality (Low Contrast)" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "emulate hardware" + }, + { + "sameboy_light_temperature", + "Video - Ambient Light Temperature", + "Simulates an ambient light’s effect on non-backlit Game Boy screens, by setting a user-controlled color temperature. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + { + { "1.0", "1000K (Warmest)" }, + { "0.9", "1550K" }, + { "0.8", "2100K" }, + { "0.7", "2650K" }, + { "0.6", "3200K" }, + { "0.5", "3750K" }, + { "0.4", "4300K" }, + { "0.3", "4850K" }, + { "0.2", "5400K" }, + { "0.1", "5950K" }, + { "0", "6500K (Neutral White)" }, + { "-0.1", "7050K" }, + { "-0.2", "7600K" }, + { "-0.3", "8150K" }, + { "-0.4", "8700K" }, + { "-0.5", "9250K" }, + { "-0.6", "9800K" }, + { "-0.7", "10350K" }, + { "-0.8", "10900K" }, + { "-0.9", "11450K" }, + { "-1.0", "12000K (Coolest)" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_border", + "Video - Display Border", + "Defines when to display an on-screen border around the content.", + { + { "always", "Always" }, + { "Super Game Boy only", "Only for Super Game Boy" }, + { "never", "Disabled" }, + { NULL, NULL }, + }, + "Super Game Boy only" + }, + { + "sameboy_high_pass_filter_mode", + "Audio - Highpass Filter", + "Applies a filter to the audio output, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + { + { "accurate", "Accurate" }, + { "remove dc offset", "Preserve Waveform" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "accurate" + }, + { + "sameboy_audio_interference", + "Audio - Interference Volume", + "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers.", + { + { "0", "0%" }, + { "5", "5%" }, + { "10", "10%" }, + { "15", "15%" }, + { "20", "20%" }, + { "25", "25%" }, + { "30", "30%" }, + { "35", "35%" }, + { "40", "40%" }, + { "45", "45%" }, + { "50", "50%" }, + { "55", "55%" }, + { "60", "60%" }, + { "65", "65%" }, + { "70", "70%" }, + { "75", "75%" }, + { "80", "80%" }, + { "85", "85%" }, + { "90", "90%" }, + { "95", "95%" }, + { "100", "100%" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_rumble", + "Input - Rumble Mode", + "Defines which type of content should trigger rumble effects.", + { + { "all games", "Always" }, + { "rumble-enabled games", "Only for rumble-enabled games" }, + { "never", "Never" }, + { NULL, NULL }, + }, + "rumble-enabled games" + }, + + /* Core options used in dual cart mode */ + + { + "sameboy_link", + "System - Link Cable Emulation", + "Enables the emulation of the link cable, allowing communication and exchange of data between two Game Boy systems.", + { + { "enabled", "Enabled" }, + { "disabled", "Disabled" }, + { NULL, NULL }, + }, + "enabled" + }, + { + "sameboy_screen_layout", + "System - Screen Layout", + "When emulating two systems at once, this option defines the respective position of the two screens.", + { + { "top-down", "Top-Down" }, + { "left-right", "Left-Right" }, + { NULL, NULL }, + }, + "top-down" + }, + { + "sameboy_audio_output", + "System - Audio Output", + "Selects which of the two emulated Game Boy systems should output audio.", + { + { "Game Boy #1", NULL }, + { "Game Boy #2", NULL }, + { NULL, NULL }, + }, + "Game Boy #1" + }, + { + "sameboy_model_1", + "System - Emulated Model for Game Boy #1 (Requires Restart)", + "Chooses which system model the content should be started on for Game Boy #1. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + { + { "Auto", "Detect automatically" }, + { "Game Boy", "Game Boy (DMG-CPU B)" }, + { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, + { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, + { "Game Boy Advance", NULL }, + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Auto" + }, + { + "sameboy_model_2", + "System - Emulated Model for Game Boy #2 (Requires Restart)", + "Chooses which system model the content should be started on for Game Boy #2. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + { + { "Auto", "Detect automatically" }, + { "Game Boy", "Game Boy (DMG-CPU B)" }, + { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, + { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, + { "Game Boy Advance", NULL }, + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Auto" + }, + { + "sameboy_mono_palette_1", + "Video - GB Mono Palette for Game Boy #1", + "Selects the color palette that should be used when playing Game Boy games on Game Boy #1.", + { + { "greyscale", "Greyscale" }, + { "lime", "Lime (Game Boy)" }, + { "olive", "Olive (Game Boy Pocket)" }, + { "teal", "Teal (Game Boy Light)" }, + { NULL, NULL }, + }, + "greyscale" + }, + { + "sameboy_mono_palette_2", + "Video - GB Mono Palette for Game Boy #2", + "Selects the color palette that should be used when playing Game Boy games on Game Boy #2.", + { + { "greyscale", "Greyscale" }, + { "lime", "Lime (Game Boy)" }, + { "olive", "Olive (Game Boy Pocket)" }, + { "teal", "Teal (Game Boy Light)" }, + { NULL, NULL }, + }, + "greyscale" + }, + { + "sameboy_color_correction_mode_1", + "Video - GBC Color Correction for Game Boy #1", + "Defines which type of color correction should be applied when playing Game Boy Color games on Game Boy #1.", + { + { "emulate hardware", "Emulate Hardware" }, + { "preserve brightness", "Preserve Brightness" }, + { "reduce contrast", "Reduce Contrast" }, + { "correct curves", "Correct Color Curves" }, + { "harsh reality", "Harsh Reality (Low Contrast)" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "emulate hardware" + }, + { + "sameboy_color_correction_mode_2", + "Video - GBC Color Correction for Game Boy #2", + "Defines which type of color correction should be applied when playing Game Boy Color games on Game Boy #2.", + { + { "emulate hardware", "Emulate Hardware" }, + { "preserve brightness", "Preserve Brightness" }, + { "reduce contrast", "Reduce Contrast" }, + { "correct curves", "Correct Color Curves" }, + { "harsh reality", "Harsh Reality (Low Contrast)" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "emulate hardware" + }, + { + "sameboy_light_temperature_1", + "Video - Ambient Light Temperature for Game Boy #1", + "Simulates an ambient light’s effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #1. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + { + { "1.0", "1000K (Warmest)" }, + { "0.9", "1550K" }, + { "0.8", "2100K" }, + { "0.7", "2650K" }, + { "0.6", "3200K" }, + { "0.5", "3750K" }, + { "0.4", "4300K" }, + { "0.3", "4850K" }, + { "0.2", "5400K" }, + { "0.1", "5950K" }, + { "0", "6500K (Neutral White)" }, + { "-0.1", "7050K" }, + { "-0.2", "7600K" }, + { "-0.3", "8150K" }, + { "-0.4", "8700K" }, + { "-0.5", "9250K" }, + { "-0.6", "9800K" }, + { "-0.7", "10350K" }, + { "-0.8", "10900K" }, + { "-0.9", "11450K" }, + { "-1.0", "12000K (Coolest)" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_light_temperature_2", + "Video - Ambient Light Temperature for Game Boy #2", + "Simulates an ambient light’s effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #2. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + { + { "1.0", "1000K (Warmest)" }, + { "0.9", "1550K" }, + { "0.8", "2100K" }, + { "0.7", "2650K" }, + { "0.6", "3200K" }, + { "0.5", "3750K" }, + { "0.4", "4300K" }, + { "0.3", "4850K" }, + { "0.2", "5400K" }, + { "0.1", "5950K" }, + { "0", "6500K (Neutral White)" }, + { "-0.1", "7050K" }, + { "-0.2", "7600K" }, + { "-0.3", "8150K" }, + { "-0.4", "8700K" }, + { "-0.5", "9250K" }, + { "-0.6", "9800K" }, + { "-0.7", "10350K" }, + { "-0.8", "10900K" }, + { "-0.9", "11450K" }, + { "-1.0", "12000K (Coolest)" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_high_pass_filter_mode_1", + "Audio - Highpass Filter for Game Boy #1", + "Applies a filter to the audio output for Game Boy #1, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + { + { "accurate", "Accurate" }, + { "remove dc offset", "Preserve Waveform" }, + { "off", "disabled" }, + { NULL, NULL }, + }, + "accurate" + }, + { + "sameboy_high_pass_filter_mode_2", + "Audio - Highpass Filter for Game Boy #2", + "Applies a filter to the audio output for Game Boy #2, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + { + { "accurate", "Accurate" }, + { "remove dc offset", "Preserve Waveform" }, + { "off", "disabled" }, + { NULL, NULL }, + }, + "accurate" + }, + { + "sameboy_audio_interference_1", + "Audio - Interference Volume for Game Boy #1", + "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers on Game Boy #1.", + { + { "0", "0%" }, + { "5", "5%" }, + { "10", "10%" }, + { "15", "15%" }, + { "20", "20%" }, + { "25", "25%" }, + { "30", "30%" }, + { "35", "35%" }, + { "40", "40%" }, + { "45", "45%" }, + { "50", "50%" }, + { "55", "55%" }, + { "60", "60%" }, + { "65", "65%" }, + { "70", "70%" }, + { "75", "75%" }, + { "80", "80%" }, + { "85", "85%" }, + { "90", "90%" }, + { "95", "95%" }, + { "100", "100%" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_audio_interference_2", + "Audio - Interference Volume for Game Boy #2", + "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers on Game Boy #2.", + { + { "0", "0%" }, + { "5", "5%" }, + { "10", "10%" }, + { "15", "15%" }, + { "20", "20%" }, + { "25", "25%" }, + { "30", "30%" }, + { "35", "35%" }, + { "40", "40%" }, + { "45", "45%" }, + { "50", "50%" }, + { "55", "55%" }, + { "60", "60%" }, + { "65", "65%" }, + { "70", "70%" }, + { "75", "75%" }, + { "80", "80%" }, + { "85", "85%" }, + { "90", "90%" }, + { "95", "95%" }, + { "100", "100%" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_rumble_1", + "Input - Rumble Mode for Game Boy #1", + "Defines which type of content should trigger rumble effects when played on Game Boy #1.", + { + { "all games", "Always" }, + { "rumble-enabled games", "Only for rumble-enabled games" }, + { "never", "Never" }, + { NULL, NULL }, + }, + "rumble-enabled games" + }, + { + "sameboy_rumble_2", + "Input - Rumble Mode for Game Boy #2", + "Defines which type of content should trigger rumble effects when played on Game Boy #2.", + { + { "all games", "Always" }, + { "rumble-enabled games", "Only for rumble-enabled games" }, + { "never", "Never" }, + { NULL, NULL }, + }, + "rumble-enabled games" + }, + + { NULL, NULL, NULL, {{0}}, NULL }, +}; + +/* + ******************************** + * Language Mapping + ******************************** + */ + +#ifndef HAVE_NO_LANGEXTRA +struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = { + option_defs_us, /* RETRO_LANGUAGE_ENGLISH */ + NULL, /* RETRO_LANGUAGE_JAPANESE */ + NULL, /* RETRO_LANGUAGE_FRENCH */ + NULL, /* RETRO_LANGUAGE_SPANISH */ + NULL, /* RETRO_LANGUAGE_GERMAN */ + NULL, /* RETRO_LANGUAGE_ITALIAN */ + NULL, /* RETRO_LANGUAGE_DUTCH */ + NULL, /* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */ + NULL, /* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */ + NULL, /* RETRO_LANGUAGE_RUSSIAN */ + NULL, /* RETRO_LANGUAGE_KOREAN */ + NULL, /* RETRO_LANGUAGE_CHINESE_TRADITIONAL */ + NULL, /* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */ + NULL, /* RETRO_LANGUAGE_ESPERANTO */ + NULL, /* RETRO_LANGUAGE_POLISH */ + NULL, /* RETRO_LANGUAGE_VIETNAMESE */ + NULL, /* RETRO_LANGUAGE_ARABIC */ + NULL, /* RETRO_LANGUAGE_GREEK */ + NULL, /* RETRO_LANGUAGE_TURKISH */ + NULL, /* RETRO_LANGUAGE_SLOVAK */ + NULL, /* RETRO_LANGUAGE_PERSIAN */ + NULL, /* RETRO_LANGUAGE_HEBREW */ + NULL, /* RETRO_LANGUAGE_ASTURIAN */ + NULL, /* RETRO_LANGUAGE_FINNISH */ + +}; +#endif + +/* + ******************************** + * Functions + ******************************** + */ + +/* Handles configuration/setting of core options. + * Should be called as early as possible - ideally inside + * retro_set_environment(), and no later than retro_load_game() + * > We place the function body in the header to avoid the + * necessity of adding more .c files (i.e. want this to + * be as painless as possible for core devs) + */ + +static INLINE void libretro_set_core_options(retro_environment_t environ_cb) +{ + unsigned version = 0; + + if (!environ_cb) return; + + if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version) && (version >= 1)) { +#ifndef HAVE_NO_LANGEXTRA + struct retro_core_options_intl core_options_intl; + unsigned language = 0; + + core_options_intl.us = option_defs_us; + core_options_intl.local = NULL; + + if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) && + (language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH)) + core_options_intl.local = option_defs_intl[language]; + + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_intl); +#else + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS, &option_defs_us); +#endif + } + else { + size_t i; + size_t num_options = 0; + struct retro_variable *variables = NULL; + char **values_buf = NULL; + + /* Determine number of options */ + while (true) { + if (!option_defs_us[num_options].key) break; + num_options++; + } + + /* Allocate arrays */ + variables = (struct retro_variable *)calloc(num_options + 1, sizeof(struct retro_variable)); + values_buf = (char **)calloc(num_options, sizeof(char *)); + + if (!variables || !values_buf) goto error; + + /* Copy parameters from option_defs_us array */ + for (i = 0; i < num_options; i++) { + const char *key = option_defs_us[i].key; + const char *desc = option_defs_us[i].desc; + const char *default_value = option_defs_us[i].default_value; + struct retro_core_option_value *values = option_defs_us[i].values; + size_t buf_len = 3; + size_t default_index = 0; + + values_buf[i] = NULL; + + if (desc) { + size_t num_values = 0; + + /* Determine number of values */ + while (true) { + if (!values[num_values].value) break; + + /* Check if this is the default value */ + if (default_value) { + if (strcmp(values[num_values].value, default_value) == 0) default_index = num_values; + } + + buf_len += strlen(values[num_values].value); + num_values++; + } + + /* Build values string */ + if (num_values > 0) { + size_t j; + + buf_len += num_values - 1; + buf_len += strlen(desc); + + values_buf[i] = (char *)calloc(buf_len, sizeof(char)); + if (!values_buf[i]) goto error; + + strcpy(values_buf[i], desc); + strcat(values_buf[i], "; "); + + /* Default value goes first */ + strcat(values_buf[i], values[default_index].value); + + /* Add remaining values */ + for (j = 0; j < num_values; j++) { + if (j != default_index) { + strcat(values_buf[i], "|"); + strcat(values_buf[i], values[j].value); + } + } + } + } + + variables[i].key = key; + variables[i].value = values_buf[i]; + } + + /* Set variables */ + environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables); + + error: + + /* Clean up */ + if (values_buf) { + for (i = 0; i < num_options; i++) { + if (values_buf[i]) { + free(values_buf[i]); + values_buf[i] = NULL; + } + } + + free(values_buf); + values_buf = NULL; + } + + if (variables) { + free(variables); + variables = NULL; + } + } +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/SameBoy/libretro/retro_inline.h b/thirdparty/SameBoy/libretro/retro_inline.h new file mode 100644 index 000000000..14c038ccd --- /dev/null +++ b/thirdparty/SameBoy/libretro/retro_inline.h @@ -0,0 +1,39 @@ +/* Copyright (C) 2010-2020 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (retro_inline.h). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __LIBRETRO_SDK_INLINE_H +#define __LIBRETRO_SDK_INLINE_H + +#ifndef INLINE + +#if defined(_WIN32) || defined(__INTEL_COMPILER) +#define INLINE __inline +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define INLINE inline +#elif defined(__GNUC__) +#define INLINE __inline__ +#else +#define INLINE +#endif + +#endif +#endif diff --git a/thirdparty/SameBoy/version.mk b/thirdparty/SameBoy/version.mk index 6831f8426..89642709d 100644 --- a/thirdparty/SameBoy/version.mk +++ b/thirdparty/SameBoy/version.mk @@ -1 +1 @@ -VERSION := 0.14.3 \ No newline at end of file +VERSION := 0.14.7 \ No newline at end of file From c6b1e7ffa7ca051c3ca6aae1ca58600fbc290727 Mon Sep 17 00:00:00 2001 From: Tom Yaxley Date: Tue, 1 Nov 2022 11:46:49 +1100 Subject: [PATCH 2/4] Update sameboy to v0.15.7 --- premake5.lua | 2 +- scripts/sameboy.lua | 24 +- src/plugs/SameBoyPlug.cpp | 12 +- src/plugs/SameBoyPlug.h | 4 +- thirdparty/SameBoy-old/.gitattributes | 10 + thirdparty/SameBoy-old/.github/FUNDING.yml | 3 + .../SameBoy-old/.github/actions/LICENSE | 25 + .../SameBoy-old/.github/actions/cgb-acid2.gbc | Bin 0 -> 32768 bytes .../SameBoy-old/.github/actions/cgb_sound.gb | Bin 0 -> 65536 bytes .../SameBoy-old/.github/actions/dmg-acid2.gb | Bin 0 -> 32768 bytes .../.github/actions/dmg_sound-2.gb | Bin 0 -> 65536 bytes .../.github/actions/install_deps.sh | 23 + .../SameBoy-old/.github/actions/oam_bug-2.gb | Bin 0 -> 65536 bytes .../.github/actions/sanity_tests.sh | 33 + .../SameBoy-old/.github/workflows/sanity.yml | 36 + thirdparty/SameBoy-old/.gitignore | 1 + thirdparty/SameBoy-old/BESS.md | 259 ++ .../SameBoy-old/BootROMs/SameBoyLogo.png | Bin 0 -> 477 bytes thirdparty/SameBoy-old/BootROMs/agb_boot.asm | 2 + thirdparty/SameBoy-old/BootROMs/cgb0_boot.asm | 2 + thirdparty/SameBoy-old/BootROMs/cgb_boot.asm | 1249 ++++++ .../SameBoy-old/BootROMs/cgb_boot_fast.asm | 2 + thirdparty/SameBoy-old/BootROMs/dmg_boot.asm | 183 + thirdparty/SameBoy-old/BootROMs/hardware.inc | 919 +++++ thirdparty/SameBoy-old/BootROMs/mgb_boot.asm | 2 + thirdparty/SameBoy-old/BootROMs/pb12.c | 102 + thirdparty/SameBoy-old/BootROMs/sgb2_boot.asm | 2 + thirdparty/SameBoy-old/BootROMs/sgb_boot.asm | 215 + thirdparty/SameBoy-old/CHANGES.md | 1 + thirdparty/SameBoy-old/CONTRIBUTING.md | 79 + thirdparty/SameBoy-old/Cocoa/AppIcon.icns | Bin 0 -> 631345 bytes .../Cocoa/AudioRecordingAccessoryView.xib | 51 + thirdparty/SameBoy-old/Cocoa/BigSurToolbar.h | 30 + thirdparty/SameBoy-old/Cocoa/CPU.png | Bin 0 -> 1109 bytes thirdparty/SameBoy-old/Cocoa/CPU@2x.png | Bin 0 -> 36662 bytes thirdparty/SameBoy-old/Cocoa/CPU~solid.png | Bin 0 -> 304 bytes thirdparty/SameBoy-old/Cocoa/CPU~solid@2x.png | Bin 0 -> 586 bytes .../SameBoy-old/Cocoa/CPU~solid~dark.png | Bin 0 -> 311 bytes .../SameBoy-old/Cocoa/CPU~solid~dark@2x.png | Bin 0 -> 605 bytes thirdparty/SameBoy-old/Cocoa/Cartridge.icns | Bin 0 -> 75751 bytes .../SameBoy-old/Cocoa/ColorCartridge.icns | Bin 0 -> 265838 bytes thirdparty/SameBoy-old/Cocoa/Display.png | Bin 0 -> 483 bytes thirdparty/SameBoy-old/Cocoa/Display@2x.png | Bin 0 -> 870 bytes .../SameBoy-old/Cocoa/Display~solid.png | Bin 0 -> 252 bytes .../SameBoy-old/Cocoa/Display~solid@2x.png | Bin 0 -> 456 bytes .../SameBoy-old/Cocoa/Display~solid~dark.png | Bin 0 -> 255 bytes .../Cocoa/Display~solid~dark@2x.png | Bin 0 -> 454 bytes thirdparty/SameBoy-old/Cocoa/Document.h | 69 + thirdparty/SameBoy-old/Cocoa/Document.m | 2510 ++++++++++++ thirdparty/SameBoy-old/Cocoa/Document.xib | 883 ++++ .../Cocoa/GBApp.h} | 3 +- .../Cocoa/GBApp.m} | 216 +- thirdparty/SameBoy-old/Cocoa/GBAudioClient.h | 12 + thirdparty/SameBoy-old/Cocoa/GBAudioClient.m | 111 + thirdparty/SameBoy-old/Cocoa/GBBorderView.h | 5 + thirdparty/SameBoy-old/Cocoa/GBBorderView.m | 26 + thirdparty/SameBoy-old/Cocoa/GBButtons.h | 41 + thirdparty/SameBoy-old/Cocoa/GBButtons.m | 4 + .../SameBoy-old/Cocoa/GBCheatTextFieldCell.h | 5 + .../SameBoy-old/Cocoa/GBCheatTextFieldCell.m | 121 + .../Cocoa/GBCheatWindowController.h | 16 + .../Cocoa/GBCheatWindowController.m | 240 ++ .../SameBoy-old/Cocoa/GBCompleteByteSlice.h | 7 + .../SameBoy-old/Cocoa/GBCompleteByteSlice.m | 26 + thirdparty/SameBoy-old/Cocoa/GBGLShader.h | 7 + thirdparty/SameBoy-old/Cocoa/GBGLShader.m | 190 + .../SameBoy-old/Cocoa/GBHueSliderCell.h | 9 + .../SameBoy-old/Cocoa/GBHueSliderCell.m | 113 + thirdparty/SameBoy-old/Cocoa/GBImageView.h | 23 + thirdparty/SameBoy-old/Cocoa/GBImageView.m | 166 + .../SameBoy-old/Cocoa/GBMemoryByteArray.h | 17 + .../SameBoy-old/Cocoa/GBMemoryByteArray.m | 256 ++ thirdparty/SameBoy-old/Cocoa/GBOSDView.h | 6 + thirdparty/SameBoy-old/Cocoa/GBOSDView.m | 104 + thirdparty/SameBoy-old/Cocoa/GBObjectView.h | 6 + thirdparty/SameBoy-old/Cocoa/GBObjectView.m | 124 + .../SameBoy-old/Cocoa/GBObjectViewItem.xib | 94 + thirdparty/SameBoy-old/Cocoa/GBOpenGLView.h | 6 + thirdparty/SameBoy-old/Cocoa/GBOpenGLView.m | 39 + .../Cocoa/GBOptionalVisualEffectView.h | 6 + .../Cocoa/GBOptionalVisualEffectView.m | 18 + .../Cocoa/GBPaletteEditorController.h | 18 + .../Cocoa/GBPaletteEditorController.m | 378 ++ thirdparty/SameBoy-old/Cocoa/GBPaletteView.h | 6 + thirdparty/SameBoy-old/Cocoa/GBPaletteView.m | 91 + .../SameBoy-old/Cocoa/GBPaletteViewRow.xib | 74 + .../SameBoy-old/Cocoa/GBPreferencesWindow.h | 41 + .../SameBoy-old/Cocoa/GBPreferencesWindow.m | 1002 +++++ thirdparty/SameBoy-old/Cocoa/GBS.xib | 128 + thirdparty/SameBoy-old/Cocoa/GBS11.xib | 128 + thirdparty/SameBoy-old/Cocoa/GBSplitView.h | 7 + thirdparty/SameBoy-old/Cocoa/GBSplitView.m | 33 + .../Cocoa/GBTerminalTextFieldCell.h | 6 + .../Cocoa/GBTerminalTextFieldCell.m | 231 ++ thirdparty/SameBoy-old/Cocoa/GBView.h | 32 + thirdparty/SameBoy-old/Cocoa/GBView.m | 795 ++++ thirdparty/SameBoy-old/Cocoa/GBViewGL.h | 5 + thirdparty/SameBoy-old/Cocoa/GBViewGL.m | 35 + thirdparty/SameBoy-old/Cocoa/GBViewMetal.h | 7 + thirdparty/SameBoy-old/Cocoa/GBViewMetal.m | 232 ++ .../SameBoy-old/Cocoa/GBVisualizerView.h | 6 + .../SameBoy-old/Cocoa/GBVisualizerView.m | 71 + .../SameBoy-old/Cocoa/GBWarningPopover.h | 9 + .../SameBoy-old/Cocoa/GBWarningPopover.m | 63 + thirdparty/SameBoy-old/Cocoa/Icon.png | Bin 0 -> 3156 bytes thirdparty/SameBoy-old/Cocoa/Icon@2x.png | Bin 0 -> 9515 bytes thirdparty/SameBoy-old/Cocoa/Info.plist | 222 + thirdparty/SameBoy-old/Cocoa/Joypad.png | Bin 0 -> 740 bytes thirdparty/SameBoy-old/Cocoa/Joypad@2x.png | Bin 0 -> 1564 bytes thirdparty/SameBoy-old/Cocoa/Joypad~dark.png | Bin 0 -> 1307 bytes .../SameBoy-old/Cocoa/Joypad~dark@2x.png | Bin 0 -> 2845 bytes thirdparty/SameBoy-old/Cocoa/Joypad~solid.png | Bin 0 -> 427 bytes .../SameBoy-old/Cocoa/Joypad~solid@2x.png | Bin 0 -> 710 bytes .../Cocoa/KeyboardShortcutPrivateAPIs.h | 26 + thirdparty/SameBoy-old/Cocoa/License.html | 80 + thirdparty/SameBoy-old/Cocoa/MainMenu.xib | 538 +++ .../Cocoa/NSImageNamedDarkSupport.m | 49 + .../Cocoa/NSObject+MavericksCompat.m | 7 + .../SameBoy-old/Cocoa/NSString+StringForKey.h | 6 + .../SameBoy-old/Cocoa/NSString+StringForKey.m | 46 + thirdparty/SameBoy-old/Cocoa/Next.png | Bin 0 -> 158 bytes thirdparty/SameBoy-old/Cocoa/Next@2x.png | Bin 0 -> 257 bytes thirdparty/SameBoy-old/Cocoa/Pause.png | Bin 0 -> 107 bytes thirdparty/SameBoy-old/Cocoa/Pause@2x.png | Bin 0 -> 131 bytes thirdparty/SameBoy-old/Cocoa/PkgInfo | 1 + thirdparty/SameBoy-old/Cocoa/Play.png | Bin 0 -> 144 bytes thirdparty/SameBoy-old/Cocoa/Play@2x.png | Bin 0 -> 221 bytes thirdparty/SameBoy-old/Cocoa/PopoverView.xib | 27 + thirdparty/SameBoy-old/Cocoa/Preferences.xib | 1311 ++++++ thirdparty/SameBoy-old/Cocoa/Previous.png | Bin 0 -> 148 bytes thirdparty/SameBoy-old/Cocoa/Previous@2x.png | Bin 0 -> 266 bytes thirdparty/SameBoy-old/Cocoa/Rewind.png | Bin 0 -> 147 bytes thirdparty/SameBoy-old/Cocoa/Rewind@2x.png | Bin 0 -> 215 bytes thirdparty/SameBoy-old/Cocoa/Speaker.png | Bin 0 -> 1145 bytes thirdparty/SameBoy-old/Cocoa/Speaker@2x.png | Bin 0 -> 1825 bytes thirdparty/SameBoy-old/Cocoa/Speaker~dark.png | Bin 0 -> 1076 bytes .../SameBoy-old/Cocoa/Speaker~dark@2x.png | Bin 0 -> 1751 bytes .../SameBoy-old/Cocoa/Speaker~solid.png | Bin 0 -> 548 bytes .../SameBoy-old/Cocoa/Speaker~solid@2x.png | Bin 0 -> 905 bytes thirdparty/SameBoy-old/Cocoa/UpdateWindow.xib | 139 + thirdparty/SameBoy-old/Cocoa/Updates.png | Bin 0 -> 1576 bytes thirdparty/SameBoy-old/Cocoa/Updates@2x.png | Bin 0 -> 3156 bytes .../SameBoy-old/Cocoa/Updates~solid.png | Bin 0 -> 428 bytes .../SameBoy-old/Cocoa/Updates~solid@2x.png | Bin 0 -> 1145 bytes .../SameBoy-old/Cocoa/Updates~solid~dark.png | Bin 0 -> 366 bytes .../Cocoa/Updates~solid~dark@2x.png | Bin 0 -> 1021 bytes thirdparty/SameBoy-old/Cocoa/main.m | 6 + thirdparty/SameBoy-old/Core/apu.c | 1740 ++++++++ thirdparty/SameBoy-old/Core/apu.h | 196 + thirdparty/SameBoy-old/Core/camera.c | 164 + thirdparty/SameBoy-old/Core/camera.h | 29 + thirdparty/SameBoy-old/Core/cheats.c | 314 ++ thirdparty/SameBoy-old/Core/cheats.h | 42 + thirdparty/SameBoy-old/Core/debugger.c | 2750 +++++++++++++ thirdparty/SameBoy-old/Core/debugger.h | 46 + thirdparty/SameBoy-old/Core/defs.h | 50 + thirdparty/SameBoy-old/Core/display.c | 2276 +++++++++++ thirdparty/SameBoy-old/Core/display.h | 83 + thirdparty/SameBoy-old/Core/gb.c | 1992 +++++++++ thirdparty/SameBoy-old/Core/gb.h | 966 +++++ .../SameBoy-old/Core/graphics/agb_border.inc | 522 +++ .../SameBoy-old/Core/graphics/cgb_border.inc | 446 ++ .../SameBoy-old/Core/graphics/dmg_border.inc | 558 +++ .../SameBoy-old/Core/graphics/mgb_border.inc | 477 +++ .../Core/graphics/sgb_animation_logo.inc | 563 +++ .../SameBoy-old/Core/graphics/sgb_border.inc | 658 +++ thirdparty/SameBoy-old/Core/joypad.c | 224 + thirdparty/SameBoy-old/Core/joypad.h | 46 + thirdparty/SameBoy-old/Core/mbc.c | 275 ++ thirdparty/SameBoy-old/Core/mbc.h | 33 + thirdparty/SameBoy-old/Core/memory.c | 1871 +++++++++ thirdparty/SameBoy-old/Core/memory.h | 22 + thirdparty/SameBoy-old/Core/printer.c | 220 + thirdparty/SameBoy-old/Core/printer.h | 63 + thirdparty/SameBoy-old/Core/random.c | 38 + thirdparty/SameBoy-old/Core/random.h | 12 + thirdparty/SameBoy-old/Core/rewind.c | 208 + thirdparty/SameBoy-old/Core/rewind.h | 14 + thirdparty/SameBoy-old/Core/rumble.c | 57 + thirdparty/SameBoy-old/Core/rumble.h | 17 + thirdparty/SameBoy-old/Core/save_state.c | 1408 +++++++ thirdparty/SameBoy-old/Core/save_state.h | 48 + thirdparty/SameBoy-old/Core/sgb.c | 910 +++++ thirdparty/SameBoy-old/Core/sgb.h | 71 + thirdparty/SameBoy-old/Core/sm83_cpu.c | 1717 ++++++++ thirdparty/SameBoy-old/Core/sm83_cpu.h | 11 + .../SameBoy-old/Core/sm83_disassembler.c | 790 ++++ thirdparty/SameBoy-old/Core/symbol_hash.c | 111 + thirdparty/SameBoy-old/Core/symbol_hash.h | 38 + thirdparty/SameBoy-old/Core/timing.c | 483 +++ thirdparty/SameBoy-old/Core/timing.h | 66 + thirdparty/SameBoy-old/Core/workboy.c | 169 + thirdparty/SameBoy-old/Core/workboy.h | 118 + .../FreeDesktop/AppIcon/128x128.png | Bin 0 -> 9515 bytes .../SameBoy-old/FreeDesktop/AppIcon/16x16.png | Bin 0 -> 411 bytes .../FreeDesktop/AppIcon/256x256.png | Bin 0 -> 29094 bytes .../SameBoy-old/FreeDesktop/AppIcon/32x32.png | Bin 0 -> 1035 bytes .../FreeDesktop/AppIcon/512x512.png | Bin 0 -> 93124 bytes .../SameBoy-old/FreeDesktop/AppIcon/64x64.png | Bin 0 -> 3156 bytes .../FreeDesktop/Cartridge/128x128.png | Bin 0 -> 4861 bytes .../FreeDesktop/Cartridge/16x16.png | Bin 0 -> 424 bytes .../FreeDesktop/Cartridge/256x256.png | Bin 0 -> 12696 bytes .../FreeDesktop/Cartridge/32x32.png | Bin 0 -> 977 bytes .../FreeDesktop/Cartridge/512x512.png | Bin 0 -> 37757 bytes .../FreeDesktop/Cartridge/64x64.png | Bin 0 -> 2196 bytes .../FreeDesktop/ColorCartridge/128x128.png | Bin 0 -> 4827 bytes .../FreeDesktop/ColorCartridge/16x16.png | Bin 0 -> 501 bytes .../FreeDesktop/ColorCartridge/256x256.png | Bin 0 -> 11778 bytes .../FreeDesktop/ColorCartridge/32x32.png | Bin 0 -> 1014 bytes .../FreeDesktop/ColorCartridge/512x512.png | Bin 0 -> 33721 bytes .../FreeDesktop/ColorCartridge/64x64.png | Bin 0 -> 2166 bytes .../SameBoy-old/FreeDesktop/sameboy.desktop | 12 + .../SameBoy-old/FreeDesktop/sameboy.xml | 23 + .../SameBoy-old/HexFiend/HFAnnotatedTree.h | 57 + .../SameBoy-old/HexFiend/HFAnnotatedTree.m | 432 ++ thirdparty/SameBoy-old/HexFiend/HFBTree.h | 40 + thirdparty/SameBoy-old/HexFiend/HFBTree.m | 1099 +++++ .../SameBoy-old/HexFiend/HFBTreeByteArray.h | 30 + .../SameBoy-old/HexFiend/HFBTreeByteArray.m | 279 ++ thirdparty/SameBoy-old/HexFiend/HFByteArray.h | 180 + thirdparty/SameBoy-old/HexFiend/HFByteArray.m | 218 + .../HexFiend/HFByteArray_Internal.h | 8 + thirdparty/SameBoy-old/HexFiend/HFByteSlice.h | 53 + thirdparty/SameBoy-old/HexFiend/HFByteSlice.m | 85 + .../HexFiend/HFByteSlice_Private.h | 7 + .../SameBoy-old/HexFiend/HFController.h | 395 ++ .../SameBoy-old/HexFiend/HFController.m | 1905 +++++++++ .../HexFiend/HFFullMemoryByteArray.h | 21 + .../HexFiend/HFFullMemoryByteArray.m | 70 + .../HexFiend/HFFullMemoryByteSlice.h | 21 + .../HexFiend/HFFullMemoryByteSlice.m | 46 + thirdparty/SameBoy-old/HexFiend/HFFunctions.h | 533 +++ thirdparty/SameBoy-old/HexFiend/HFFunctions.m | 1172 ++++++ .../HexFiend/HFFunctions_Private.h | 52 + thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.h | 49 + thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.m | 93 + .../HexFiend/HFHexTextRepresenter.h | 21 + .../HexFiend/HFHexTextRepresenter.m | 203 + .../SameBoy-old/HexFiend/HFHexTextView.h | 15 + .../SameBoy-old/HexFiend/HFHexTextView.m | 13 + .../HexFiend/HFLayoutRepresenter.h | 80 + .../HexFiend/HFLayoutRepresenter.m | 361 ++ .../HexFiend/HFLineCountingRepresenter.h | 67 + .../HexFiend/HFLineCountingRepresenter.m | 250 ++ .../SameBoy-old/HexFiend/HFLineCountingView.h | 32 + .../SameBoy-old/HexFiend/HFLineCountingView.m | 675 +++ .../SameBoy-old/HexFiend/HFPasteboardOwner.h | 51 + .../SameBoy-old/HexFiend/HFPasteboardOwner.m | 287 ++ .../HexFiend/HFPrivilegedHelperConnection.h | 3 + .../SameBoy-old/HexFiend/HFRepresenter.h | 121 + .../SameBoy-old/HexFiend/HFRepresenter.m | 120 + .../HexFiend/HFRepresenterHexTextView.h | 21 + .../HexFiend/HFRepresenterHexTextView.m | 95 + .../HFRepresenterStringEncodingTextView.h | 37 + .../HFRepresenterStringEncodingTextView.m | 540 +++ .../HexFiend/HFRepresenterTextView.h | 146 + .../HexFiend/HFRepresenterTextView.m | 1766 ++++++++ .../HexFiend/HFRepresenterTextViewCallout.h | 31 + .../HexFiend/HFRepresenterTextViewCallout.m | 477 +++ .../HexFiend/HFRepresenterTextView_Internal.h | 11 + .../HexFiend/HFRepresenter_Internal.h | 7 + .../HexFiend/HFSharedMemoryByteSlice.h | 32 + .../HexFiend/HFSharedMemoryByteSlice.m | 209 + .../HexFiend/HFStatusBarRepresenter.h | 31 + .../HexFiend/HFStatusBarRepresenter.m | 240 ++ .../HFStringEncodingTextRepresenter.h | 26 + .../HFStringEncodingTextRepresenter.m | 121 + .../SameBoy-old/HexFiend/HFTextRepresenter.h | 39 + .../SameBoy-old/HexFiend/HFTextRepresenter.m | 377 ++ .../HexFiend/HFTextRepresenter_Internal.h | 33 + .../HexFiend/HFTextRepresenter_KeyBinding.m | 128 + .../HexFiend/HFTextVisualStyleRun.h | 23 + .../HexFiend/HFTextVisualStyleRun.m | 80 + thirdparty/SameBoy-old/HexFiend/HFTypes.h | 13 + .../HexFiend/HFVerticalScrollerRepresenter.h | 21 + .../HexFiend/HFVerticalScrollerRepresenter.m | 133 + thirdparty/SameBoy-old/HexFiend/HexFiend.h | 78 + .../HexFiend/HexFiend_2_Framework_Prefix.pch | 99 + thirdparty/SameBoy-old/HexFiend/License.txt | 21 + .../JoyKit/ControllerConfiguration.inc | 532 +++ thirdparty/SameBoy-old/JoyKit/JOYAxes2D.h | 24 + thirdparty/SameBoy-old/JoyKit/JOYAxes2D.m | 181 + thirdparty/SameBoy-old/JoyKit/JOYAxes3D.h | 27 + thirdparty/SameBoy-old/JoyKit/JOYAxes3D.m | 108 + thirdparty/SameBoy-old/JoyKit/JOYAxis.h | 36 + thirdparty/SameBoy-old/JoyKit/JOYAxis.m | 129 + thirdparty/SameBoy-old/JoyKit/JOYButton.h | 58 + thirdparty/SameBoy-old/JoyKit/JOYButton.m | 113 + thirdparty/SameBoy-old/JoyKit/JOYController.h | 44 + thirdparty/SameBoy-old/JoyKit/JOYController.m | 1168 ++++++ thirdparty/SameBoy-old/JoyKit/JOYElement.h | 20 + thirdparty/SameBoy-old/JoyKit/JOYElement.m | 133 + .../SameBoy-old/JoyKit/JOYEmulatedButton.h | 11 + .../SameBoy-old/JoyKit/JOYEmulatedButton.m | 99 + .../SameBoy-old/JoyKit/JOYFullReportElement.h | 10 + .../SameBoy-old/JoyKit/JOYFullReportElement.m | 74 + thirdparty/SameBoy-old/JoyKit/JOYHat.h | 11 + thirdparty/SameBoy-old/JoyKit/JOYHat.m | 62 + .../JoyKit/JOYMultiplayerController.h | 8 + .../JoyKit/JOYMultiplayerController.m | 50 + thirdparty/SameBoy-old/JoyKit/JOYSubElement.h | 14 + thirdparty/SameBoy-old/JoyKit/JOYSubElement.m | 106 + thirdparty/SameBoy-old/JoyKit/JoyKit.h | 6 + thirdparty/SameBoy-old/LICENSE | 21 + thirdparty/SameBoy-old/Makefile | 540 +++ .../SameBoy-old/Misc/Palettes/Desert.sbp | Bin 0 -> 32 bytes .../SameBoy-old/Misc/Palettes/Evening.sbp | 1 + thirdparty/SameBoy-old/Misc/Palettes/Fog.sbp | Bin 0 -> 32 bytes .../Misc/Palettes/Magic Eggplant.sbp | Bin 0 -> 32 bytes .../Misc/Palettes/Radioactive Pea.sbp | Bin 0 -> 32 bytes .../SameBoy-old/Misc/Palettes/Seaweed.sbp | Bin 0 -> 32 bytes .../SameBoy-old/Misc/Palettes/Twilight.sbp | Bin 0 -> 32 bytes thirdparty/SameBoy-old/Misc/registers.sym | 134 + thirdparty/SameBoy-old/OpenDialog/cocoa.m | 66 + thirdparty/SameBoy-old/OpenDialog/gtk.c | 370 ++ .../SameBoy-old/OpenDialog/open_dialog.h | 7 + thirdparty/SameBoy-old/OpenDialog/windows.c | 104 + .../QuickLook/CartridgeTemplate.png | Bin 0 -> 80261 bytes .../QuickLook/ColorCartridgeTemplate.png | Bin 0 -> 1097768 bytes thirdparty/SameBoy-old/QuickLook/Info.plist | 63 + .../QuickLook/UniversalCartridgeTemplate.png | Bin 0 -> 73171 bytes thirdparty/SameBoy-old/QuickLook/exports.sym | 1 + thirdparty/SameBoy-old/QuickLook/generator.m | 119 + .../SameBoy-old/QuickLook/get_image_for_rom.c | 103 + .../SameBoy-old/QuickLook/get_image_for_rom.h | 10 + thirdparty/SameBoy-old/QuickLook/main.c | 201 + thirdparty/SameBoy-old/README.md | 58 + thirdparty/SameBoy-old/SDL/audio.c | 111 + thirdparty/SameBoy-old/SDL/audio/audio.h | 45 + thirdparty/SameBoy-old/SDL/audio/openal.c | 317 ++ thirdparty/SameBoy-old/SDL/audio/sdl.c | 111 + thirdparty/SameBoy-old/SDL/audio/xaudio2.c | 159 + thirdparty/SameBoy-old/SDL/audio/xaudio2_7.c | 179 + thirdparty/SameBoy-old/SDL/audio/xaudio2_7.h | 108 + thirdparty/SameBoy-old/SDL/background.bmp | Bin 0 -> 11592 bytes thirdparty/SameBoy-old/SDL/configuration.c | 54 + thirdparty/SameBoy-old/SDL/configuration.h | 140 + thirdparty/SameBoy-old/SDL/console.c | 1020 +++++ thirdparty/SameBoy-old/SDL/console.h | 49 + thirdparty/SameBoy-old/SDL/font.c | 1124 +++++ thirdparty/SameBoy-old/SDL/font.h | 20 + thirdparty/SameBoy-old/SDL/gui.c | 2152 ++++++++++ thirdparty/SameBoy-old/SDL/gui.h | 69 + thirdparty/SameBoy-old/SDL/main.c | 992 +++++ thirdparty/SameBoy-old/SDL/opengl_compat.c | 34 + thirdparty/SameBoy-old/SDL/opengl_compat.h | 45 + thirdparty/SameBoy-old/SDL/shader.c | 206 + thirdparty/SameBoy-old/SDL/shader.h | 34 + thirdparty/SameBoy-old/SDL/utils.c | 50 + thirdparty/SameBoy-old/SDL/utils.h | 8 + .../SameBoy-old/Shaders/AAOmniScaleLegacy.fsh | 118 + thirdparty/SameBoy-old/Shaders/AAScale2x.fsh | 38 + thirdparty/SameBoy-old/Shaders/AAScale4x.fsh | 75 + thirdparty/SameBoy-old/Shaders/Bilinear.fsh | 14 + thirdparty/SameBoy-old/Shaders/CRT.fsh | 162 + thirdparty/SameBoy-old/Shaders/HQ2x.fsh | 113 + thirdparty/SameBoy-old/Shaders/LCD.fsh | 68 + .../SameBoy-old/Shaders/MasterShader.fsh | 78 + .../SameBoy-old/Shaders/MasterShader.metal | 101 + thirdparty/SameBoy-old/Shaders/MonoLCD.fsh | 50 + .../SameBoy-old/Shaders/NearestNeighbor.fsh | 4 + thirdparty/SameBoy-old/Shaders/OmniScale.fsh | 262 ++ .../SameBoy-old/Shaders/OmniScaleLegacy.fsh | 104 + thirdparty/SameBoy-old/Shaders/Scale2x.fsh | 35 + thirdparty/SameBoy-old/Shaders/Scale4x.fsh | 72 + .../SameBoy-old/Shaders/SmoothBilinear.fsh | 16 + thirdparty/SameBoy-old/Tester/main.c | 537 +++ thirdparty/SameBoy-old/Windows/dirent.c | 51 + thirdparty/SameBoy-old/Windows/dirent.h | 15 + thirdparty/SameBoy-old/Windows/inttypes.h | 1 + thirdparty/SameBoy-old/Windows/math.h | 9 + thirdparty/SameBoy-old/Windows/pthread.h | 86 + thirdparty/SameBoy-old/Windows/resources.rc | Bin 0 -> 1210 bytes thirdparty/SameBoy-old/Windows/sameboy.ico | Bin 0 -> 132946 bytes thirdparty/SameBoy-old/Windows/stdint.h | 3 + thirdparty/SameBoy-old/Windows/stdio.h | 91 + thirdparty/SameBoy-old/Windows/string.h | 4 + thirdparty/SameBoy-old/Windows/unistd.h | 10 + thirdparty/SameBoy-old/Windows/utf8_compat.c | 31 + thirdparty/SameBoy-old/libretro/Makefile | 373 ++ .../SameBoy-old/libretro/Makefile.common | 29 + .../SameBoy-old/libretro/jni/Android.mk | 32 + .../SameBoy-old/libretro/jni/Application.mk | 1 + thirdparty/SameBoy-old/libretro/libretro.c | 1817 ++++++++ thirdparty/SameBoy-old/libretro/libretro.h | 3638 +++++++++++++++++ .../libretro/libretro_core_options.inc | 946 +++++ thirdparty/SameBoy-old/libretro/link.T | 5 + .../SameBoy-old/libretro/retro_inline.h | 39 + thirdparty/SameBoy-old/version.mk | 1 + thirdparty/SameBoy/.github/FUNDING.yml | 3 + .../SameBoy/.github/actions/install_deps.sh | 2 +- .../SameBoy/.github/actions/sanity_tests.sh | 4 +- thirdparty/SameBoy/BESS.md | 44 +- thirdparty/SameBoy/BootROMs/SameBoyLogo.png | Bin 479 -> 477 bytes thirdparty/SameBoy/BootROMs/cgb0_boot.asm | 2 + thirdparty/SameBoy/BootROMs/cgb_boot.asm | 100 +- thirdparty/SameBoy/BootROMs/dmg_boot.asm | 36 +- thirdparty/SameBoy/BootROMs/hardware.inc | 988 +++++ thirdparty/SameBoy/BootROMs/mgb_boot.asm | 2 + thirdparty/SameBoy/BootROMs/pb12.c | 4 +- thirdparty/SameBoy/BootROMs/sgb_boot.asm | 30 +- thirdparty/SameBoy/Cocoa/AppIcon.icns | Bin 312085 -> 631345 bytes .../Cocoa/AudioRecordingAccessoryView.xib | 51 + thirdparty/SameBoy/Cocoa/CPU.png | Bin 18330 -> 1109 bytes thirdparty/SameBoy/Cocoa/CPU@2x.png | Bin 19184 -> 1887 bytes thirdparty/SameBoy/Cocoa/CPU~solid.png | Bin 0 -> 304 bytes thirdparty/SameBoy/Cocoa/CPU~solid@2x.png | Bin 0 -> 586 bytes thirdparty/SameBoy/Cocoa/CPU~solid~dark.png | Bin 0 -> 311 bytes .../SameBoy/Cocoa/CPU~solid~dark@2x.png | Bin 0 -> 605 bytes thirdparty/SameBoy/Cocoa/Cartridge.icns | Bin 274241 -> 75751 bytes thirdparty/SameBoy/Cocoa/ContinueTemplate.png | Bin 0 -> 197 bytes .../SameBoy/Cocoa/ContinueTemplate@2x.png | Bin 0 -> 314 bytes thirdparty/SameBoy/Cocoa/Display.png | Bin 19795 -> 483 bytes thirdparty/SameBoy/Cocoa/Display@2x.png | Bin 20722 -> 870 bytes thirdparty/SameBoy/Cocoa/Display~solid.png | Bin 0 -> 252 bytes thirdparty/SameBoy/Cocoa/Display~solid@2x.png | Bin 0 -> 456 bytes .../SameBoy/Cocoa/Display~solid~dark.png | Bin 0 -> 255 bytes .../SameBoy/Cocoa/Display~solid~dark@2x.png | Bin 0 -> 454 bytes thirdparty/SameBoy/Cocoa/Document.h | 32 +- thirdparty/SameBoy/Cocoa/Document.m | 891 ++-- thirdparty/SameBoy/Cocoa/Document.xib | 449 +- thirdparty/SameBoy/Cocoa/FinishTemplate.png | Bin 0 -> 166 bytes .../SameBoy/Cocoa/FinishTemplate@2x.png | Bin 0 -> 298 bytes thirdparty/SameBoy/Cocoa/GBApp.h | 26 + thirdparty/SameBoy/Cocoa/GBApp.m | 663 +++ thirdparty/SameBoy/Cocoa/GBButtons.h | 10 +- thirdparty/SameBoy/Cocoa/GBButtons.m | 2 +- .../SameBoy/Cocoa/GBCheatTextFieldCell.m | 14 +- .../SameBoy/Cocoa/GBCheatWindowController.m | 6 +- thirdparty/SameBoy/Cocoa/GBColorCell.h | 5 - thirdparty/SameBoy/Cocoa/GBColorCell.m | 49 - thirdparty/SameBoy/Cocoa/GBDebuggerButton.h | 7 + thirdparty/SameBoy/Cocoa/GBDebuggerButton.m | 48 + thirdparty/SameBoy/Cocoa/GBHueSliderCell.h | 9 + thirdparty/SameBoy/Cocoa/GBHueSliderCell.m | 113 + thirdparty/SameBoy/Cocoa/GBImageCell.h | 5 - thirdparty/SameBoy/Cocoa/GBImageCell.m | 10 - thirdparty/SameBoy/Cocoa/GBImageView.m | 81 +- thirdparty/SameBoy/Cocoa/GBJoyConManager.h | 13 + thirdparty/SameBoy/Cocoa/GBJoyConManager.m | 323 ++ thirdparty/SameBoy/Cocoa/GBMemoryByteArray.m | 295 +- thirdparty/SameBoy/Cocoa/GBObjectView.h | 6 + thirdparty/SameBoy/Cocoa/GBObjectView.m | 124 + thirdparty/SameBoy/Cocoa/GBObjectViewItem.xib | 94 + .../SameBoy/Cocoa/GBPaletteEditorController.h | 18 + .../SameBoy/Cocoa/GBPaletteEditorController.m | 378 ++ thirdparty/SameBoy/Cocoa/GBPaletteView.h | 6 + thirdparty/SameBoy/Cocoa/GBPaletteView.m | 91 + thirdparty/SameBoy/Cocoa/GBPaletteViewRow.xib | 74 + .../SameBoy/Cocoa/GBPreferencesWindow.h | 64 +- .../SameBoy/Cocoa/GBPreferencesWindow.m | 241 +- thirdparty/SameBoy/Cocoa/GBS.xib | 54 +- thirdparty/SameBoy/Cocoa/GBS11.xib | 128 + thirdparty/SameBoy/Cocoa/GBSplitView.m | 6 + .../SameBoy/Cocoa/GBTerminalTextFieldCell.m | 23 +- thirdparty/SameBoy/Cocoa/GBTintedImageCell.h | 5 + thirdparty/SameBoy/Cocoa/GBTintedImageCell.m | 20 + thirdparty/SameBoy/Cocoa/GBView.h | 1 + thirdparty/SameBoy/Cocoa/GBView.m | 126 +- thirdparty/SameBoy/Cocoa/GBVisualizerView.m | 20 +- thirdparty/SameBoy/Cocoa/GBWarningPopover.h | 1 + thirdparty/SameBoy/Cocoa/GBWarningPopover.m | 25 +- thirdparty/SameBoy/Cocoa/HelpTemplate.png | Bin 0 -> 183 bytes thirdparty/SameBoy/Cocoa/HelpTemplate@2x.png | Bin 0 -> 323 bytes .../Cocoa/HorizontalJoyConLeftTemplate.png | Bin 0 -> 263 bytes .../Cocoa/HorizontalJoyConLeftTemplate@2x.png | Bin 0 -> 394 bytes .../Cocoa/HorizontalJoyConRightTemplate.png | Bin 0 -> 266 bytes .../HorizontalJoyConRightTemplate@2x.png | Bin 0 -> 398 bytes thirdparty/SameBoy/Cocoa/Icon.png | Bin 0 -> 3156 bytes thirdparty/SameBoy/Cocoa/Icon@2x.png | Bin 0 -> 9515 bytes thirdparty/SameBoy/Cocoa/Info.plist | 24 +- .../SameBoy/Cocoa/InterruptTemplate.png | Bin 0 -> 93 bytes .../SameBoy/Cocoa/InterruptTemplate@2x.png | Bin 0 -> 118 bytes .../SameBoy/Cocoa/JoyConDualTemplate.png | Bin 0 -> 315 bytes .../SameBoy/Cocoa/JoyConDualTemplate@2x.png | Bin 0 -> 483 bytes .../SameBoy/Cocoa/JoyConLeftTemplate.png | Bin 0 -> 266 bytes .../SameBoy/Cocoa/JoyConLeftTemplate@2x.png | Bin 0 -> 502 bytes .../SameBoy/Cocoa/JoyConRightTemplate.png | Bin 0 -> 262 bytes .../SameBoy/Cocoa/JoyConRightTemplate@2x.png | Bin 0 -> 411 bytes thirdparty/SameBoy/Cocoa/Joypad.png | Bin 19966 -> 740 bytes thirdparty/SameBoy/Cocoa/Joypad@2x.png | Bin 20863 -> 1564 bytes thirdparty/SameBoy/Cocoa/Joypad~dark.png | Bin 6244 -> 1307 bytes thirdparty/SameBoy/Cocoa/Joypad~dark@2x.png | Bin 7175 -> 2845 bytes thirdparty/SameBoy/Cocoa/Joypad~solid.png | Bin 0 -> 427 bytes thirdparty/SameBoy/Cocoa/Joypad~solid@2x.png | Bin 0 -> 710 bytes thirdparty/SameBoy/Cocoa/License.html | 2 +- thirdparty/SameBoy/Cocoa/MainMenu.xib | 104 +- .../SameBoy/Cocoa/NSImageNamedDarkSupport.m | 7 + .../SameBoy/Cocoa/NSTextFieldCell+Inset.h | 6 + .../SameBoy/Cocoa/NSTextFieldCell+Inset.m | 39 + thirdparty/SameBoy/Cocoa/Next.png | Bin 1676 -> 158 bytes thirdparty/SameBoy/Cocoa/Next@2x.png | Bin 1787 -> 257 bytes thirdparty/SameBoy/Cocoa/NextTemplate.png | Bin 0 -> 188 bytes thirdparty/SameBoy/Cocoa/NextTemplate@2x.png | Bin 0 -> 309 bytes thirdparty/SameBoy/Cocoa/Pause.png | Bin 1614 -> 107 bytes thirdparty/SameBoy/Cocoa/Pause@2x.png | Bin 4436 -> 131 bytes thirdparty/SameBoy/Cocoa/Play.png | Bin 4442 -> 144 bytes thirdparty/SameBoy/Cocoa/Play@2x.png | Bin 4527 -> 221 bytes thirdparty/SameBoy/Cocoa/Preferences.xib | 985 ++++- thirdparty/SameBoy/Cocoa/Previous.png | Bin 1664 -> 148 bytes thirdparty/SameBoy/Cocoa/Previous@2x.png | Bin 4569 -> 266 bytes thirdparty/SameBoy/Cocoa/Rewind.png | Bin 1664 -> 147 bytes thirdparty/SameBoy/Cocoa/Rewind@2x.png | Bin 4515 -> 215 bytes thirdparty/SameBoy/Cocoa/Speaker.png | Bin 18543 -> 1145 bytes thirdparty/SameBoy/Cocoa/Speaker@2x.png | Bin 19746 -> 1825 bytes thirdparty/SameBoy/Cocoa/Speaker~dark.png | Bin 4562 -> 1076 bytes thirdparty/SameBoy/Cocoa/Speaker~dark@2x.png | Bin 5992 -> 1751 bytes thirdparty/SameBoy/Cocoa/Speaker~solid.png | Bin 0 -> 548 bytes thirdparty/SameBoy/Cocoa/Speaker~solid@2x.png | Bin 0 -> 905 bytes thirdparty/SameBoy/Cocoa/StepTemplate.png | Bin 0 -> 130 bytes thirdparty/SameBoy/Cocoa/StepTemplate@2x.png | Bin 0 -> 255 bytes thirdparty/SameBoy/Cocoa/UpdateWindow.xib | 2 +- thirdparty/SameBoy/Cocoa/Updates.png | Bin 0 -> 1576 bytes thirdparty/SameBoy/Cocoa/Updates@2x.png | Bin 0 -> 3156 bytes thirdparty/SameBoy/Cocoa/Updates~solid.png | Bin 0 -> 428 bytes thirdparty/SameBoy/Cocoa/Updates~solid@2x.png | Bin 0 -> 1145 bytes .../SameBoy/Cocoa/Updates~solid~dark.png | Bin 0 -> 366 bytes .../SameBoy/Cocoa/Updates~solid~dark@2x.png | Bin 0 -> 1021 bytes thirdparty/SameBoy/Core/apu.c | 566 ++- thirdparty/SameBoy/Core/apu.h | 92 +- thirdparty/SameBoy/Core/camera.c | 35 +- thirdparty/SameBoy/Core/camera.h | 2 +- thirdparty/SameBoy/Core/cheats.c | 11 +- thirdparty/SameBoy/Core/cheats.h | 4 +- thirdparty/SameBoy/Core/debugger.c | 484 ++- thirdparty/SameBoy/Core/debugger.h | 18 +- thirdparty/SameBoy/Core/defs.h | 50 + thirdparty/SameBoy/Core/display.c | 1241 ++++-- thirdparty/SameBoy/Core/display.h | 35 +- thirdparty/SameBoy/Core/gb.c | 641 +-- thirdparty/SameBoy/Core/gb.h | 449 +- thirdparty/SameBoy/Core/gb_struct_def.h | 5 - .../SameBoy/Core/graphics/mgb_border.inc | 477 +++ thirdparty/SameBoy/Core/joypad.c | 163 +- thirdparty/SameBoy/Core/joypad.h | 25 +- thirdparty/SameBoy/Core/mbc.c | 210 +- thirdparty/SameBoy/Core/mbc.h | 16 +- thirdparty/SameBoy/Core/memory.c | 944 +++-- thirdparty/SameBoy/Core/memory.h | 13 +- thirdparty/SameBoy/Core/printer.c | 4 +- thirdparty/SameBoy/Core/printer.h | 2 +- thirdparty/SameBoy/Core/rewind.c | 4 +- thirdparty/SameBoy/Core/rewind.h | 6 +- thirdparty/SameBoy/Core/rumble.h | 4 +- thirdparty/SameBoy/Core/save_state.c | 299 +- thirdparty/SameBoy/Core/save_state.h | 11 +- thirdparty/SameBoy/Core/sgb.c | 10 +- thirdparty/SameBoy/Core/sgb.h | 22 +- thirdparty/SameBoy/Core/sm83_cpu.c | 131 +- thirdparty/SameBoy/Core/sm83_cpu.h | 4 +- thirdparty/SameBoy/Core/sm83_disassembler.c | 9 +- thirdparty/SameBoy/Core/symbol_hash.c | 17 +- thirdparty/SameBoy/Core/symbol_hash.h | 14 +- thirdparty/SameBoy/Core/timing.c | 234 +- thirdparty/SameBoy/Core/timing.h | 40 +- thirdparty/SameBoy/Core/workboy.h | 2 +- .../SameBoy/FreeDesktop/AppIcon/128x128.png | Bin 26046 -> 9515 bytes .../SameBoy/FreeDesktop/AppIcon/16x16.png | Bin 19956 -> 411 bytes .../SameBoy/FreeDesktop/AppIcon/256x256.png | Bin 16633 -> 29094 bytes .../SameBoy/FreeDesktop/AppIcon/32x32.png | Bin 20600 -> 1035 bytes .../SameBoy/FreeDesktop/AppIcon/512x512.png | Bin 36303 -> 93124 bytes .../SameBoy/FreeDesktop/AppIcon/64x64.png | Bin 20732 -> 3156 bytes .../SameBoy/FreeDesktop/Cartridge/128x128.png | Bin 26853 -> 4861 bytes .../SameBoy/FreeDesktop/Cartridge/16x16.png | Bin 20557 -> 424 bytes .../SameBoy/FreeDesktop/Cartridge/256x256.png | Bin 35511 -> 12696 bytes .../SameBoy/FreeDesktop/Cartridge/32x32.png | Bin 21299 -> 977 bytes .../SameBoy/FreeDesktop/Cartridge/512x512.png | Bin 60580 -> 37757 bytes .../SameBoy/FreeDesktop/Cartridge/64x64.png | Bin 23016 -> 2196 bytes .../FreeDesktop/ColorCartridge/128x128.png | Bin 26446 -> 4827 bytes .../FreeDesktop/ColorCartridge/16x16.png | Bin 20504 -> 501 bytes .../FreeDesktop/ColorCartridge/256x256.png | Bin 34200 -> 11778 bytes .../FreeDesktop/ColorCartridge/32x32.png | Bin 21157 -> 1014 bytes .../FreeDesktop/ColorCartridge/512x512.png | Bin 57482 -> 33721 bytes .../FreeDesktop/ColorCartridge/64x64.png | Bin 22767 -> 2166 bytes thirdparty/SameBoy/HexFiend/HFController.m | 7 +- .../SameBoy/HexFiend/HFHexTextRepresenter.m | 2 +- .../JoyKit/ControllerConfiguration.inc | 155 +- thirdparty/SameBoy/JoyKit/JOYAxes2D.h | 5 +- thirdparty/SameBoy/JoyKit/JOYAxes2D.m | 117 +- thirdparty/SameBoy/JoyKit/JOYAxes3D.h | 26 + thirdparty/SameBoy/JoyKit/JOYAxes3D.m | 129 + thirdparty/SameBoy/JoyKit/JOYAxis.h | 5 +- thirdparty/SameBoy/JoyKit/JOYAxis.m | 4 +- thirdparty/SameBoy/JoyKit/JOYButton.h | 15 +- thirdparty/SameBoy/JoyKit/JOYButton.m | 15 +- thirdparty/SameBoy/JoyKit/JOYController.h | 31 +- thirdparty/SameBoy/JoyKit/JOYController.m | 622 ++- thirdparty/SameBoy/JoyKit/JOYEmulatedButton.h | 2 +- thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m | 11 +- .../SameBoy/JoyKit/JOYFullReportElement.m | 5 +- thirdparty/SameBoy/JoyKit/JOYHat.h | 4 +- thirdparty/SameBoy/JoyKit/JOYHat.m | 11 +- thirdparty/SameBoy/JoyKit/JOYInput.h | 8 + thirdparty/SameBoy/JoyKit/JOYInput.m | 21 + thirdparty/SameBoy/JoyKit/JOYSubElement.m | 6 + thirdparty/SameBoy/LICENSE | 2 +- thirdparty/SameBoy/Makefile | 97 +- thirdparty/SameBoy/Misc/Palettes/Desert.sbp | Bin 0 -> 32 bytes thirdparty/SameBoy/Misc/Palettes/Evening.sbp | 1 + thirdparty/SameBoy/Misc/Palettes/Fog.sbp | Bin 0 -> 32 bytes .../SameBoy/Misc/Palettes/Magic Eggplant.sbp | Bin 0 -> 32 bytes .../SameBoy/Misc/Palettes/Radioactive Pea.sbp | Bin 0 -> 32 bytes thirdparty/SameBoy/Misc/Palettes/Seaweed.sbp | Bin 0 -> 32 bytes thirdparty/SameBoy/Misc/Palettes/Twilight.sbp | Bin 0 -> 32 bytes thirdparty/SameBoy/Misc/registers.sym | 79 +- thirdparty/SameBoy/OpenDialog/cocoa.m | 26 +- thirdparty/SameBoy/OpenDialog/gtk.c | 194 +- thirdparty/SameBoy/OpenDialog/open_dialog.h | 1 + thirdparty/SameBoy/OpenDialog/windows.c | 99 +- .../SameBoy/QuickLook/CartridgeTemplate.png | Bin 129141 -> 80261 bytes .../QuickLook/ColorCartridgeTemplate.png | Bin 1139466 -> 1097768 bytes thirdparty/SameBoy/QuickLook/Info.plist | 2 +- .../QuickLook/UniversalCartridgeTemplate.png | Bin 116827 -> 73171 bytes .../SameBoy/QuickLook/get_image_for_rom.c | 4 +- thirdparty/SameBoy/SDL/audio.c | 111 + thirdparty/SameBoy/SDL/audio/audio.h | 31 +- thirdparty/SameBoy/SDL/audio/openal.c | 317 ++ thirdparty/SameBoy/SDL/audio/sdl.c | 37 +- thirdparty/SameBoy/SDL/audio/xaudio2.c | 159 + thirdparty/SameBoy/SDL/audio/xaudio2_7.c | 179 + thirdparty/SameBoy/SDL/audio/xaudio2_7.h | 108 + thirdparty/SameBoy/SDL/background.bmp | Bin 11592 -> 11592 bytes thirdparty/SameBoy/SDL/configuration.c | 54 + thirdparty/SameBoy/SDL/configuration.h | 140 + thirdparty/SameBoy/SDL/console.c | 2 +- thirdparty/SameBoy/SDL/font.c | 30 + thirdparty/SameBoy/SDL/font.h | 4 +- thirdparty/SameBoy/SDL/gui.c | 851 +++- thirdparty/SameBoy/SDL/gui.h | 90 +- thirdparty/SameBoy/SDL/main.c | 193 +- thirdparty/SameBoy/Shaders/AAScale2x.fsh | 18 +- thirdparty/SameBoy/Shaders/AAScale4x.fsh | 41 +- thirdparty/SameBoy/Shaders/CRT.fsh | 18 +- thirdparty/SameBoy/Shaders/HQ2x.fsh | 62 +- thirdparty/SameBoy/Shaders/LCD.fsh | 18 +- thirdparty/SameBoy/Shaders/MasterShader.fsh | 6 + thirdparty/SameBoy/Shaders/MasterShader.metal | 7 + thirdparty/SameBoy/Shaders/OmniScale.fsh | 80 +- thirdparty/SameBoy/Shaders/Scale2x.fsh | 18 +- thirdparty/SameBoy/Shaders/Scale4x.fsh | 41 +- thirdparty/SameBoy/Tester/main.c | 3 +- thirdparty/SameBoy/Windows/dirent.c | 51 + thirdparty/SameBoy/Windows/dirent.h | 15 + thirdparty/SameBoy/Windows/resources.rc | Bin 1210 -> 1238 bytes thirdparty/SameBoy/Windows/sameboy.ico | Bin 115106 -> 132946 bytes thirdparty/SameBoy/Windows/stdio.h | 15 +- thirdparty/SameBoy/Windows/stdlib.h | 3 + thirdparty/SameBoy/Windows/string.h | 3 +- thirdparty/SameBoy/Windows/unistd.h | 2 + thirdparty/SameBoy/Windows/utf8_compat.c | 7 + thirdparty/SameBoy/libretro/Makefile.common | 2 + thirdparty/SameBoy/libretro/libretro.c | 508 ++- thirdparty/SameBoy/libretro/libretro.h | 494 +++ .../libretro/libretro_core_options.inc | 525 ++- thirdparty/SameBoy/version.mk | 2 +- 655 files changed, 87701 insertions(+), 3945 deletions(-) create mode 100644 thirdparty/SameBoy-old/.gitattributes create mode 100644 thirdparty/SameBoy-old/.github/FUNDING.yml create mode 100644 thirdparty/SameBoy-old/.github/actions/LICENSE create mode 100644 thirdparty/SameBoy-old/.github/actions/cgb-acid2.gbc create mode 100644 thirdparty/SameBoy-old/.github/actions/cgb_sound.gb create mode 100644 thirdparty/SameBoy-old/.github/actions/dmg-acid2.gb create mode 100644 thirdparty/SameBoy-old/.github/actions/dmg_sound-2.gb create mode 100644 thirdparty/SameBoy-old/.github/actions/install_deps.sh create mode 100644 thirdparty/SameBoy-old/.github/actions/oam_bug-2.gb create mode 100644 thirdparty/SameBoy-old/.github/actions/sanity_tests.sh create mode 100644 thirdparty/SameBoy-old/.github/workflows/sanity.yml create mode 100644 thirdparty/SameBoy-old/.gitignore create mode 100644 thirdparty/SameBoy-old/BESS.md create mode 100644 thirdparty/SameBoy-old/BootROMs/SameBoyLogo.png create mode 100644 thirdparty/SameBoy-old/BootROMs/agb_boot.asm create mode 100644 thirdparty/SameBoy-old/BootROMs/cgb0_boot.asm create mode 100644 thirdparty/SameBoy-old/BootROMs/cgb_boot.asm create mode 100644 thirdparty/SameBoy-old/BootROMs/cgb_boot_fast.asm create mode 100644 thirdparty/SameBoy-old/BootROMs/dmg_boot.asm create mode 100644 thirdparty/SameBoy-old/BootROMs/hardware.inc create mode 100644 thirdparty/SameBoy-old/BootROMs/mgb_boot.asm create mode 100644 thirdparty/SameBoy-old/BootROMs/pb12.c create mode 100644 thirdparty/SameBoy-old/BootROMs/sgb2_boot.asm create mode 100644 thirdparty/SameBoy-old/BootROMs/sgb_boot.asm create mode 100644 thirdparty/SameBoy-old/CHANGES.md create mode 100644 thirdparty/SameBoy-old/CONTRIBUTING.md create mode 100644 thirdparty/SameBoy-old/Cocoa/AppIcon.icns create mode 100644 thirdparty/SameBoy-old/Cocoa/AudioRecordingAccessoryView.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/BigSurToolbar.h create mode 100644 thirdparty/SameBoy-old/Cocoa/CPU.png create mode 100644 thirdparty/SameBoy-old/Cocoa/CPU@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/CPU~solid.png create mode 100644 thirdparty/SameBoy-old/Cocoa/CPU~solid@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/CPU~solid~dark.png create mode 100644 thirdparty/SameBoy-old/Cocoa/CPU~solid~dark@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Cartridge.icns create mode 100644 thirdparty/SameBoy-old/Cocoa/ColorCartridge.icns create mode 100644 thirdparty/SameBoy-old/Cocoa/Display.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Display@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Display~solid.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Display~solid@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Display~solid~dark.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Display~solid~dark@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Document.h create mode 100644 thirdparty/SameBoy-old/Cocoa/Document.m create mode 100644 thirdparty/SameBoy-old/Cocoa/Document.xib rename thirdparty/{SameBoy/Cocoa/AppDelegate.h => SameBoy-old/Cocoa/GBApp.h} (84%) rename thirdparty/{SameBoy/Cocoa/AppDelegate.m => SameBoy-old/Cocoa/GBApp.m} (60%) create mode 100644 thirdparty/SameBoy-old/Cocoa/GBAudioClient.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBAudioClient.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBBorderView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBBorderView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBButtons.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBButtons.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBGLShader.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBGLShader.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBImageView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBImageView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBOSDView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBOSDView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBObjectView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBObjectView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBObjectViewItem.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/GBOpenGLView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBOpenGLView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBPaletteView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBPaletteView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBPaletteViewRow.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBS.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/GBS11.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/GBSplitView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBSplitView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBViewGL.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBViewGL.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBViewMetal.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBViewMetal.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBVisualizerView.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBVisualizerView.m create mode 100644 thirdparty/SameBoy-old/Cocoa/GBWarningPopover.h create mode 100644 thirdparty/SameBoy-old/Cocoa/GBWarningPopover.m create mode 100644 thirdparty/SameBoy-old/Cocoa/Icon.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Icon@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Info.plist create mode 100644 thirdparty/SameBoy-old/Cocoa/Joypad.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Joypad@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Joypad~dark.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Joypad~dark@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Joypad~solid.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Joypad~solid@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/KeyboardShortcutPrivateAPIs.h create mode 100644 thirdparty/SameBoy-old/Cocoa/License.html create mode 100644 thirdparty/SameBoy-old/Cocoa/MainMenu.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/NSImageNamedDarkSupport.m create mode 100644 thirdparty/SameBoy-old/Cocoa/NSObject+MavericksCompat.m create mode 100644 thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.h create mode 100644 thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.m create mode 100644 thirdparty/SameBoy-old/Cocoa/Next.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Next@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Pause.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Pause@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/PkgInfo create mode 100644 thirdparty/SameBoy-old/Cocoa/Play.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Play@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/PopoverView.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/Preferences.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/Previous.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Previous@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Rewind.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Rewind@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Speaker.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Speaker@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Speaker~dark.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Speaker~dark@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Speaker~solid.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Speaker~solid@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/UpdateWindow.xib create mode 100644 thirdparty/SameBoy-old/Cocoa/Updates.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Updates@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Updates~solid.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Updates~solid@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Updates~solid~dark.png create mode 100644 thirdparty/SameBoy-old/Cocoa/Updates~solid~dark@2x.png create mode 100644 thirdparty/SameBoy-old/Cocoa/main.m create mode 100644 thirdparty/SameBoy-old/Core/apu.c create mode 100644 thirdparty/SameBoy-old/Core/apu.h create mode 100644 thirdparty/SameBoy-old/Core/camera.c create mode 100644 thirdparty/SameBoy-old/Core/camera.h create mode 100644 thirdparty/SameBoy-old/Core/cheats.c create mode 100644 thirdparty/SameBoy-old/Core/cheats.h create mode 100644 thirdparty/SameBoy-old/Core/debugger.c create mode 100644 thirdparty/SameBoy-old/Core/debugger.h create mode 100644 thirdparty/SameBoy-old/Core/defs.h create mode 100644 thirdparty/SameBoy-old/Core/display.c create mode 100644 thirdparty/SameBoy-old/Core/display.h create mode 100644 thirdparty/SameBoy-old/Core/gb.c create mode 100644 thirdparty/SameBoy-old/Core/gb.h create mode 100644 thirdparty/SameBoy-old/Core/graphics/agb_border.inc create mode 100644 thirdparty/SameBoy-old/Core/graphics/cgb_border.inc create mode 100644 thirdparty/SameBoy-old/Core/graphics/dmg_border.inc create mode 100644 thirdparty/SameBoy-old/Core/graphics/mgb_border.inc create mode 100644 thirdparty/SameBoy-old/Core/graphics/sgb_animation_logo.inc create mode 100644 thirdparty/SameBoy-old/Core/graphics/sgb_border.inc create mode 100644 thirdparty/SameBoy-old/Core/joypad.c create mode 100644 thirdparty/SameBoy-old/Core/joypad.h create mode 100644 thirdparty/SameBoy-old/Core/mbc.c create mode 100644 thirdparty/SameBoy-old/Core/mbc.h create mode 100644 thirdparty/SameBoy-old/Core/memory.c create mode 100644 thirdparty/SameBoy-old/Core/memory.h create mode 100644 thirdparty/SameBoy-old/Core/printer.c create mode 100644 thirdparty/SameBoy-old/Core/printer.h create mode 100644 thirdparty/SameBoy-old/Core/random.c create mode 100644 thirdparty/SameBoy-old/Core/random.h create mode 100644 thirdparty/SameBoy-old/Core/rewind.c create mode 100644 thirdparty/SameBoy-old/Core/rewind.h create mode 100644 thirdparty/SameBoy-old/Core/rumble.c create mode 100644 thirdparty/SameBoy-old/Core/rumble.h create mode 100644 thirdparty/SameBoy-old/Core/save_state.c create mode 100644 thirdparty/SameBoy-old/Core/save_state.h create mode 100644 thirdparty/SameBoy-old/Core/sgb.c create mode 100644 thirdparty/SameBoy-old/Core/sgb.h create mode 100644 thirdparty/SameBoy-old/Core/sm83_cpu.c create mode 100644 thirdparty/SameBoy-old/Core/sm83_cpu.h create mode 100644 thirdparty/SameBoy-old/Core/sm83_disassembler.c create mode 100644 thirdparty/SameBoy-old/Core/symbol_hash.c create mode 100644 thirdparty/SameBoy-old/Core/symbol_hash.h create mode 100644 thirdparty/SameBoy-old/Core/timing.c create mode 100644 thirdparty/SameBoy-old/Core/timing.h create mode 100644 thirdparty/SameBoy-old/Core/workboy.c create mode 100644 thirdparty/SameBoy-old/Core/workboy.h create mode 100644 thirdparty/SameBoy-old/FreeDesktop/AppIcon/128x128.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/AppIcon/16x16.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/AppIcon/256x256.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/AppIcon/32x32.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/AppIcon/512x512.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/AppIcon/64x64.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/Cartridge/128x128.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/Cartridge/16x16.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/Cartridge/256x256.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/Cartridge/32x32.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/Cartridge/512x512.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/Cartridge/64x64.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/128x128.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/16x16.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/256x256.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/32x32.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/512x512.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/64x64.png create mode 100644 thirdparty/SameBoy-old/FreeDesktop/sameboy.desktop create mode 100644 thirdparty/SameBoy-old/FreeDesktop/sameboy.xml create mode 100644 thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFBTree.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFBTree.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFByteArray.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFByteArray.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFByteArray_Internal.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFByteSlice.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFByteSlice.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFByteSlice_Private.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFController.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFController.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFFunctions.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFFunctions.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFFunctions_Private.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFHexTextView.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFHexTextView.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFLineCountingView.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFLineCountingView.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFPrivilegedHelperConnection.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView_Internal.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFRepresenter_Internal.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_Internal.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_KeyBinding.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HFTypes.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.m create mode 100644 thirdparty/SameBoy-old/HexFiend/HexFiend.h create mode 100644 thirdparty/SameBoy-old/HexFiend/HexFiend_2_Framework_Prefix.pch create mode 100644 thirdparty/SameBoy-old/HexFiend/License.txt create mode 100644 thirdparty/SameBoy-old/JoyKit/ControllerConfiguration.inc create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYAxes2D.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYAxes2D.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYAxes3D.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYAxes3D.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYAxis.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYAxis.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYButton.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYButton.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYController.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYController.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYElement.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYElement.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYHat.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYHat.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYSubElement.h create mode 100644 thirdparty/SameBoy-old/JoyKit/JOYSubElement.m create mode 100644 thirdparty/SameBoy-old/JoyKit/JoyKit.h create mode 100644 thirdparty/SameBoy-old/LICENSE create mode 100644 thirdparty/SameBoy-old/Makefile create mode 100644 thirdparty/SameBoy-old/Misc/Palettes/Desert.sbp create mode 100644 thirdparty/SameBoy-old/Misc/Palettes/Evening.sbp create mode 100644 thirdparty/SameBoy-old/Misc/Palettes/Fog.sbp create mode 100644 thirdparty/SameBoy-old/Misc/Palettes/Magic Eggplant.sbp create mode 100644 thirdparty/SameBoy-old/Misc/Palettes/Radioactive Pea.sbp create mode 100644 thirdparty/SameBoy-old/Misc/Palettes/Seaweed.sbp create mode 100644 thirdparty/SameBoy-old/Misc/Palettes/Twilight.sbp create mode 100644 thirdparty/SameBoy-old/Misc/registers.sym create mode 100644 thirdparty/SameBoy-old/OpenDialog/cocoa.m create mode 100644 thirdparty/SameBoy-old/OpenDialog/gtk.c create mode 100644 thirdparty/SameBoy-old/OpenDialog/open_dialog.h create mode 100644 thirdparty/SameBoy-old/OpenDialog/windows.c create mode 100644 thirdparty/SameBoy-old/QuickLook/CartridgeTemplate.png create mode 100644 thirdparty/SameBoy-old/QuickLook/ColorCartridgeTemplate.png create mode 100644 thirdparty/SameBoy-old/QuickLook/Info.plist create mode 100644 thirdparty/SameBoy-old/QuickLook/UniversalCartridgeTemplate.png create mode 100644 thirdparty/SameBoy-old/QuickLook/exports.sym create mode 100644 thirdparty/SameBoy-old/QuickLook/generator.m create mode 100644 thirdparty/SameBoy-old/QuickLook/get_image_for_rom.c create mode 100644 thirdparty/SameBoy-old/QuickLook/get_image_for_rom.h create mode 100644 thirdparty/SameBoy-old/QuickLook/main.c create mode 100644 thirdparty/SameBoy-old/README.md create mode 100644 thirdparty/SameBoy-old/SDL/audio.c create mode 100644 thirdparty/SameBoy-old/SDL/audio/audio.h create mode 100644 thirdparty/SameBoy-old/SDL/audio/openal.c create mode 100644 thirdparty/SameBoy-old/SDL/audio/sdl.c create mode 100644 thirdparty/SameBoy-old/SDL/audio/xaudio2.c create mode 100644 thirdparty/SameBoy-old/SDL/audio/xaudio2_7.c create mode 100644 thirdparty/SameBoy-old/SDL/audio/xaudio2_7.h create mode 100644 thirdparty/SameBoy-old/SDL/background.bmp create mode 100644 thirdparty/SameBoy-old/SDL/configuration.c create mode 100644 thirdparty/SameBoy-old/SDL/configuration.h create mode 100644 thirdparty/SameBoy-old/SDL/console.c create mode 100644 thirdparty/SameBoy-old/SDL/console.h create mode 100644 thirdparty/SameBoy-old/SDL/font.c create mode 100644 thirdparty/SameBoy-old/SDL/font.h create mode 100644 thirdparty/SameBoy-old/SDL/gui.c create mode 100644 thirdparty/SameBoy-old/SDL/gui.h create mode 100644 thirdparty/SameBoy-old/SDL/main.c create mode 100644 thirdparty/SameBoy-old/SDL/opengl_compat.c create mode 100644 thirdparty/SameBoy-old/SDL/opengl_compat.h create mode 100644 thirdparty/SameBoy-old/SDL/shader.c create mode 100644 thirdparty/SameBoy-old/SDL/shader.h create mode 100644 thirdparty/SameBoy-old/SDL/utils.c create mode 100644 thirdparty/SameBoy-old/SDL/utils.h create mode 100644 thirdparty/SameBoy-old/Shaders/AAOmniScaleLegacy.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/AAScale2x.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/AAScale4x.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/Bilinear.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/CRT.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/HQ2x.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/LCD.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/MasterShader.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/MasterShader.metal create mode 100644 thirdparty/SameBoy-old/Shaders/MonoLCD.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/NearestNeighbor.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/OmniScale.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/OmniScaleLegacy.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/Scale2x.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/Scale4x.fsh create mode 100644 thirdparty/SameBoy-old/Shaders/SmoothBilinear.fsh create mode 100644 thirdparty/SameBoy-old/Tester/main.c create mode 100644 thirdparty/SameBoy-old/Windows/dirent.c create mode 100644 thirdparty/SameBoy-old/Windows/dirent.h create mode 100644 thirdparty/SameBoy-old/Windows/inttypes.h create mode 100644 thirdparty/SameBoy-old/Windows/math.h create mode 100644 thirdparty/SameBoy-old/Windows/pthread.h create mode 100644 thirdparty/SameBoy-old/Windows/resources.rc create mode 100644 thirdparty/SameBoy-old/Windows/sameboy.ico create mode 100644 thirdparty/SameBoy-old/Windows/stdint.h create mode 100644 thirdparty/SameBoy-old/Windows/stdio.h create mode 100644 thirdparty/SameBoy-old/Windows/string.h create mode 100644 thirdparty/SameBoy-old/Windows/unistd.h create mode 100644 thirdparty/SameBoy-old/Windows/utf8_compat.c create mode 100644 thirdparty/SameBoy-old/libretro/Makefile create mode 100644 thirdparty/SameBoy-old/libretro/Makefile.common create mode 100644 thirdparty/SameBoy-old/libretro/jni/Android.mk create mode 100644 thirdparty/SameBoy-old/libretro/jni/Application.mk create mode 100644 thirdparty/SameBoy-old/libretro/libretro.c create mode 100644 thirdparty/SameBoy-old/libretro/libretro.h create mode 100644 thirdparty/SameBoy-old/libretro/libretro_core_options.inc create mode 100644 thirdparty/SameBoy-old/libretro/link.T create mode 100644 thirdparty/SameBoy-old/libretro/retro_inline.h create mode 100644 thirdparty/SameBoy-old/version.mk create mode 100644 thirdparty/SameBoy/.github/FUNDING.yml create mode 100644 thirdparty/SameBoy/BootROMs/cgb0_boot.asm create mode 100644 thirdparty/SameBoy/BootROMs/hardware.inc create mode 100644 thirdparty/SameBoy/BootROMs/mgb_boot.asm create mode 100644 thirdparty/SameBoy/Cocoa/AudioRecordingAccessoryView.xib create mode 100644 thirdparty/SameBoy/Cocoa/CPU~solid.png create mode 100644 thirdparty/SameBoy/Cocoa/CPU~solid@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/CPU~solid~dark.png create mode 100644 thirdparty/SameBoy/Cocoa/CPU~solid~dark@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/ContinueTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/ContinueTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Display~solid.png create mode 100644 thirdparty/SameBoy/Cocoa/Display~solid@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Display~solid~dark.png create mode 100644 thirdparty/SameBoy/Cocoa/Display~solid~dark@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/FinishTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/FinishTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/GBApp.h create mode 100644 thirdparty/SameBoy/Cocoa/GBApp.m delete mode 100644 thirdparty/SameBoy/Cocoa/GBColorCell.h delete mode 100644 thirdparty/SameBoy/Cocoa/GBColorCell.m create mode 100644 thirdparty/SameBoy/Cocoa/GBDebuggerButton.h create mode 100644 thirdparty/SameBoy/Cocoa/GBDebuggerButton.m create mode 100644 thirdparty/SameBoy/Cocoa/GBHueSliderCell.h create mode 100644 thirdparty/SameBoy/Cocoa/GBHueSliderCell.m delete mode 100644 thirdparty/SameBoy/Cocoa/GBImageCell.h delete mode 100644 thirdparty/SameBoy/Cocoa/GBImageCell.m create mode 100644 thirdparty/SameBoy/Cocoa/GBJoyConManager.h create mode 100644 thirdparty/SameBoy/Cocoa/GBJoyConManager.m create mode 100644 thirdparty/SameBoy/Cocoa/GBObjectView.h create mode 100644 thirdparty/SameBoy/Cocoa/GBObjectView.m create mode 100644 thirdparty/SameBoy/Cocoa/GBObjectViewItem.xib create mode 100644 thirdparty/SameBoy/Cocoa/GBPaletteEditorController.h create mode 100644 thirdparty/SameBoy/Cocoa/GBPaletteEditorController.m create mode 100644 thirdparty/SameBoy/Cocoa/GBPaletteView.h create mode 100644 thirdparty/SameBoy/Cocoa/GBPaletteView.m create mode 100644 thirdparty/SameBoy/Cocoa/GBPaletteViewRow.xib create mode 100644 thirdparty/SameBoy/Cocoa/GBS11.xib create mode 100644 thirdparty/SameBoy/Cocoa/GBTintedImageCell.h create mode 100644 thirdparty/SameBoy/Cocoa/GBTintedImageCell.m create mode 100644 thirdparty/SameBoy/Cocoa/HelpTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/HelpTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/HorizontalJoyConLeftTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/HorizontalJoyConLeftTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/HorizontalJoyConRightTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/HorizontalJoyConRightTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Icon.png create mode 100644 thirdparty/SameBoy/Cocoa/Icon@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/InterruptTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/InterruptTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/JoyConDualTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/JoyConDualTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/JoyConLeftTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/JoyConLeftTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/JoyConRightTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/JoyConRightTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Joypad~solid.png create mode 100644 thirdparty/SameBoy/Cocoa/Joypad~solid@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.h create mode 100644 thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.m create mode 100644 thirdparty/SameBoy/Cocoa/NextTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/NextTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Speaker~solid.png create mode 100644 thirdparty/SameBoy/Cocoa/Speaker~solid@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/StepTemplate.png create mode 100644 thirdparty/SameBoy/Cocoa/StepTemplate@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Updates.png create mode 100644 thirdparty/SameBoy/Cocoa/Updates@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Updates~solid.png create mode 100644 thirdparty/SameBoy/Cocoa/Updates~solid@2x.png create mode 100644 thirdparty/SameBoy/Cocoa/Updates~solid~dark.png create mode 100644 thirdparty/SameBoy/Cocoa/Updates~solid~dark@2x.png create mode 100644 thirdparty/SameBoy/Core/defs.h delete mode 100644 thirdparty/SameBoy/Core/gb_struct_def.h create mode 100644 thirdparty/SameBoy/Core/graphics/mgb_border.inc create mode 100644 thirdparty/SameBoy/JoyKit/JOYAxes3D.h create mode 100644 thirdparty/SameBoy/JoyKit/JOYAxes3D.m create mode 100644 thirdparty/SameBoy/JoyKit/JOYInput.h create mode 100644 thirdparty/SameBoy/JoyKit/JOYInput.m create mode 100644 thirdparty/SameBoy/Misc/Palettes/Desert.sbp create mode 100644 thirdparty/SameBoy/Misc/Palettes/Evening.sbp create mode 100644 thirdparty/SameBoy/Misc/Palettes/Fog.sbp create mode 100644 thirdparty/SameBoy/Misc/Palettes/Magic Eggplant.sbp create mode 100644 thirdparty/SameBoy/Misc/Palettes/Radioactive Pea.sbp create mode 100644 thirdparty/SameBoy/Misc/Palettes/Seaweed.sbp create mode 100644 thirdparty/SameBoy/Misc/Palettes/Twilight.sbp create mode 100644 thirdparty/SameBoy/SDL/audio.c create mode 100644 thirdparty/SameBoy/SDL/audio/openal.c create mode 100644 thirdparty/SameBoy/SDL/audio/xaudio2.c create mode 100644 thirdparty/SameBoy/SDL/audio/xaudio2_7.c create mode 100644 thirdparty/SameBoy/SDL/audio/xaudio2_7.h create mode 100644 thirdparty/SameBoy/SDL/configuration.c create mode 100644 thirdparty/SameBoy/SDL/configuration.h create mode 100644 thirdparty/SameBoy/Windows/dirent.c create mode 100644 thirdparty/SameBoy/Windows/dirent.h create mode 100644 thirdparty/SameBoy/Windows/stdlib.h diff --git a/premake5.lua b/premake5.lua index 14dc06a9d..0b0bda3a0 100644 --- a/premake5.lua +++ b/premake5.lua @@ -94,7 +94,7 @@ project "RetroPlug" configuration { "not emscripten" } prebuildcommands { - "%{wks.location}/bin/x64/Debug/ScriptCompiler ../../src/compiler.config.lua" + "%{wks.location}/bin/%{cfg.platform}/Debug/ScriptCompiler ../../src/compiler.config.lua" } filter { "system:windows", "files:src/retroplug/luawrapper/**" } diff --git a/scripts/sameboy.lua b/scripts/sameboy.lua index 7368aed1c..719c27f66 100644 --- a/scripts/sameboy.lua +++ b/scripts/sameboy.lua @@ -40,7 +40,7 @@ project "SameBoyBootRoms" files { SAMEBOY_DIR .. "BootROMs/**.asm" } prebuildcommands { - 'rgbgfx -h -u -o "%{cfg.objdir}/SameBoyLogo.2bpp" "' .. BOOTROM_DIR .. '/SameBoyLogo.png"', + 'rgbgfx -Z -u -c embedded -o "%{cfg.objdir}/SameBoyLogo.2bpp" "' .. BOOTROM_DIR .. '/SameBoyLogo.png"', '"%{cfg.buildtarget.directory}/pb12" < "%{cfg.objdir}/SameBoyLogo.2bpp" > "%{cfg.objdir}/SameBoyLogo.pb12"' } @@ -57,12 +57,32 @@ project "SameBoyBootRoms" end +local function getVersion() + local file = io.open("../thirdparty/SameBoy/version.mk", "r") + if file == nil then + error("Failed to detect SameBoy version: version.mk could not be opened") + end + + local version = file:read() + local st, en = version:find(":= ") + + if st == nil then + error("Failed to detect SameBoy version: version.mk contains invalid data") + end + + version = version:sub(en + 1) + + file:close() + + return version +end + project "SameBoy" kind "StaticLib" language "C" toolset "clang" - defines { "GB_INTERNAL", "GB_DISABLE_TIMEKEEPING" } + defines { "GB_INTERNAL", "GB_DISABLE_TIMEKEEPING", [[GB_VERSION="]] .. getVersion() .. [["]] } sysincludedirs { SAMEBOY_DIR .. "Core", diff --git a/src/plugs/SameBoyPlug.cpp b/src/plugs/SameBoyPlug.cpp index 2075a8ba2..8a40c383d 100644 --- a/src/plugs/SameBoyPlug.cpp +++ b/src/plugs/SameBoyPlug.cpp @@ -3,10 +3,6 @@ #include #include -extern "C" { - #include -} - #include "retroplug/Constants.h" #include "retroplug/util/SampleConverter.h" #include "generated/bootroms/agb_boot.h" @@ -16,6 +12,10 @@ extern "C" { #include "generated/bootroms/sgb_boot.h" #include "generated/bootroms/sgb2_boot.h" +extern "C" { +#include +} + const size_t LINK_TICKS_MAX = 3907; const size_t MAX_SERIAL_ITEMS = 128; @@ -83,7 +83,7 @@ static uint32_t rgbEncode(GB_gameboy_t* gb, uint8_t r, uint8_t g, uint8_t b) { return 255 << 24 | b << 16 | g << 8 | r; } -static void vblankHandler(GB_gameboy_t* gb) { +static void vblankHandler(GB_gameboy_t* gb, GB_vblank_type_t type) { SameBoyPlugState* state = (SameBoyPlugState*)GB_get_user_data(gb); state->vblankOccurred = true; } @@ -136,7 +136,7 @@ void SameBoyPlug::init(GameboyModel model) { GB_set_serial_transfer_bit_start_callback(_state.gb, serialStart); GB_set_serial_transfer_bit_end_callback(_state.gb, serialEnd); - GB_set_color_correction_mode(_state.gb, GB_COLOR_CORRECTION_EMULATE_HARDWARE); + GB_set_color_correction_mode(_state.gb, GB_COLOR_CORRECTION_MODERN_BALANCED); GB_set_highpass_filter_mode(_state.gb, GB_HIGHPASS_ACCURATE); GB_set_rendering_disabled(_state.gb, true); diff --git a/src/plugs/SameBoyPlug.h b/src/plugs/SameBoyPlug.h index b43dd6fa0..695f33a2c 100644 --- a/src/plugs/SameBoyPlug.h +++ b/src/plugs/SameBoyPlug.h @@ -2,10 +2,12 @@ #include #include -#include #include "retroplug/Messages.h" +struct GB_gameboy_s; +typedef struct GB_gameboy_s GB_gameboy_t; + const size_t PIXEL_WIDTH = 160; const size_t PIXEL_HEIGHT = 144; const size_t PIXEL_COUNT = (PIXEL_WIDTH * PIXEL_HEIGHT); diff --git a/thirdparty/SameBoy-old/.gitattributes b/thirdparty/SameBoy-old/.gitattributes new file mode 100644 index 000000000..2149ea1dc --- /dev/null +++ b/thirdparty/SameBoy-old/.gitattributes @@ -0,0 +1,10 @@ +# Always use LF line endings for shaders +*.fsh text eol=lf +*.metal text eol=lf + +HexFiend/* linguist-vendored +*.inc linguist-language=C +Core/*.h linguist-language=C +SDL/*.h linguist-language=C +Windows/*.h linguist-language=C +Cocoa/*.h linguist-language=Objective-C diff --git a/thirdparty/SameBoy-old/.github/FUNDING.yml b/thirdparty/SameBoy-old/.github/FUNDING.yml new file mode 100644 index 000000000..a4c3a1bbd --- /dev/null +++ b/thirdparty/SameBoy-old/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: LIJI32 diff --git a/thirdparty/SameBoy-old/.github/actions/LICENSE b/thirdparty/SameBoy-old/.github/actions/LICENSE new file mode 100644 index 000000000..8c295a2b8 --- /dev/null +++ b/thirdparty/SameBoy-old/.github/actions/LICENSE @@ -0,0 +1,25 @@ +Blargg's Test ROMs by Shay Green + +Acid2 tests by Matt Currie under MIT: + +MIT License + +Copyright (c) 2020 Matt Currie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/thirdparty/SameBoy-old/.github/actions/cgb-acid2.gbc b/thirdparty/SameBoy-old/.github/actions/cgb-acid2.gbc new file mode 100644 index 0000000000000000000000000000000000000000..5f71bd36060b46eefcf7785f81ce16a5a6c5fc67 GIT binary patch literal 32768 zcmeI4e`s6R702(B6iIIULvq*Rfw3ebr>2mSWRz%~_VVn=jpBvQHdA8u&xD&fT4z$% zrkOUxlcJ2yHpOuhmfGMZ#(%8TEA{qA3nLKHn%NPK?f*u@njw-bW^7%x1yW}b@9x}t z-_w&Nx!$1J#yI!!{OVbFZHNdXJDVr~T>63G<(ivd|^1e%jxEy@u?x4wEya zn$!@d+cPpsYCpMt^6t%>H>NIMKJnto+P_@C`N`C!%fI=WeDF~F?zV%6L;FOvR|`e| z`NF901Q`c+ zJ;?`h3T})F`yZBnA)f|0Ddc<0_vN!7-xl)X@?CiX(c8rR#w0s~f;0%!PTtE=~z)fI(nY{=>wgnRMhR#!@b!FCc;>`E*Q zXBV8k4kZ?aGY03NgYr~3rBO@Pw{LVY3wn1B4 zGqnp^FlcJ4m3f#tl~NS9+tjSLcdx0PPC_OpP0f1Q>}FlASPq-boJV)J+uhxL_N*k; z)-vxdm?TepOM_Sue(mX;@;IB`Pg{{Bd$zdr;`=v})a zk)uZ=k(L&rhll;Vf6{oH0>NeG~uPHbQxBg zpQ;KkcCwxEHk^Nia~(9LQ}jIC&A^qydyWZh5%h22%p~DOM>D>N7YrtjCyvC!i6e>Q zEMGj%dwzZwUQ2}hbK0VohI3AX8rXQAlkLyKYk_(c{WV5aRohu@W{bz;VK~6v)Fkgy z`?SUU>l>4~93e2D1^NaZg=!brm_#BGf=bxl=kay>J)RTh!}S#Xo8hnXNo#*^s&8uI z^`^Cp^bCDK&#-z`Rr`o*JwEU`O&`=%@uRK~Z^4L{Owtdb|6%gS-~o1>7ylKq`5M~b z~OQI^>Z_4%Bqmmnu! zAGKd?r@x2seEl>H<}xKtF(2SH1>X96bo&(ZVRoMVl9mP!UV)*ti@6EGTl)xXZ-76~ z2X;1=W#jqy+VuzhtO~xr*i2xp^LO$;&F78%rM(9GiTmer5El+3-{+sxw_r7Y&JQ5K zv;<*WcBg*+zwAxmi4pG^m(Br@%ZnJ?RfpS#QbsnVXgm1*FTX^pHB{ZzM33XpHCzT z&x6AAN|xd2wz@H?t-_9w34#5Zq378zvvSLYva`UTUcQofy8iK<@n3s4 zGVsNi1}l6j#zz#1IN@tCnPbgh`HA;Irn$zO&(yxuV5yDWPu;41`qmEb!_0~UK2g(_ zJqVwXxt8sK56Rrg9)i!i#O8e$!geQo35R|3X5I(ip&{OtXV~X#iiD47wKFUG!*X|4 z$rN6buUs_VMFL0w2_OL^fCP{L5 z8~?lh_IfqR{NF^tM8HJAM8HJAM8HJAM8HJAM8HJAM8HJAM8HJAM8HJAM8HJAM8HJA zM8HJAM8HJAM8HJAM8HJAMBvXEflZ}CU+sBi;`?)Fi|=;HLZ2i=t0Gcwv`U(YR!W`G zib!l&Du`YveHfi5^+hi#ubM#4JSqDh#1DtYBFtNkd`duGOq#>GE2RDG&WbVI*W)<2 zMHIF#TsSGeFP^_nIC!lnEL^xwfGDXnS^`by;qLRLUD3ItRc~a8XCew}G{4wdd!p#z zT{Z9ZN0cmU$%&#o@qIci5%tq8`NC+`cWUNnbvQ&ia>cj0`XdLzTG|mxyIdTLD8tRt zoZ{Y!VBW#3O7T5+)kMB(>am z&?COHwri+A!h!ifZ9Fv+H)V@wir3Gs8P@JZp;MNBJtGXhQ4${AJmcqg*3Z^V(6&3RQ#cX!v z=J^hpn}>TXeWRT5_A)V;7t3 zJ{0gSLmIP{Ge2>v5q}7-XdtS@}X~?*vYUic93{%Wpj+yy!lY^!uXeE29CPKCU3t{MhSWIW`FN-3oiS!s+E#?tUyXod* zOSa*|w$zMKxod0aX8l%qS@qF8>jw+1!lA66hXp={eyt9lclZTwSA0OlwzJNP9h4tQ zeHlb70=lv{x-)ujbXO#%ygFRIYvP)^>*_vN_s>-Y2iG0E=-~W?){@)1-u|ym-ETj) zW!u}kZoT_$u~Pi^s)*=W z<<-~@%PTRZ3%7OmTS77A%FkL(#gvVkEpM^@irB%m?7qseH|C5NuFDS22wLR_t7D3# zD5fA`R&mqwN1mxHE@aPC2Cb+JYMsA4_Yvy{JGXSp43I-DmC{ zZ0mGqdV0kr$`wV>M z;4^_wmGQmFjxJ%Fs@Zp{*(>}pYiz#bcCWj`)l^7N&9fCL4+xvRm^T>8V(fQSY&izz zu_ZEF5<|1b#>iYUHIlVYdS)bhpJW@!*@u@(?mnq^MA#P@j-A;B zly?s{FJ6PEb{BeW_u!JT&Y=ivuaiOMG~L`_iTxjvYPw`CBI<)`QKZ#2y*)K@TQNkuT@KrMAzev ztE7LAZj%3h4NoeKt{;nh-;yo$zR`=S(8E=8@o=ns?_llt9&zT_xL8xjx@ux$&(>Y) z>cp25m0~}tL3Qyzq$tB@9vci6paqgx{>{PsxhwO;52U?l8@?8_n{mg{2clPwMP8+w z-BneWTvEDs@Z$N4?uL%jL$Ac&6&CsvEJAB*D}Q~oj<@2UAXub^`uyz{!O?25HU#ez z%GQ*vb2~mQ6crWm`-;m@uB=#SUx(wmc0q8|Pt-e*WwG=?p!#REHsGX3yAp(k1|d7Y z2m;p&^$yoohofGwP>7RDA3Z%tqp}Imn{^6WTs(R2~=)cp|APE)-=y5oN?G6Y1LwZ9)1LStK zIvkGHF6eLA-q3)0@neG^H8i-OQa~<>IfQzuzNKEsr$3ZKnRb*#Q|Yfq2);djG#CsD zj;%dCC`k3iUp?1{8~F9s);0VZDoKAm$pMJ;M|$wb^*QS6Edpd69e*409Q9On%BL!* zxIo_mUTlG|o?4%uEp+kgE}>*yYcSpqf-v6KVAU?`^CigV@S^Bajk+@!5J9=f8c98({Q?j;x}C-<2S80nebC8#{1jU(Rw~EU1DAG-r3lr+eGR9c zP=_wg1pzM@dTUz7Bk@OprC$!~iv*q>V5B`HZ)ED$6d#E?c@K9eWXY^1bzb~FYO&)6KI7B*(9%`f= zp|s!6Lv8K^3;% z<_Rq7pDUi>B}#K}^U9=r>YmZ6@pk{Q0DL%fI*L<%cSY{??oPYM>1q}?Tz`w`ZE<(B zHo2;OqRrv3H~P3fIH=aLC;LcBxpks;d@Ty^7+){O$hXF&)a4~faXTEEB()l%RrI+< zc&$Z`z1d6tF7|ycjs!5~S7qei+G2N!D7#cI>}+4oo%WS};x992fV zF3V=5$bn{erwCbX@VV(SaAIrH1fdR8UjAMnD_brvnJD}znwYb6$9R?ayNH^E^O_lj zKk!fvbXVdtpYB*M4o7;g5GG!lp#Scf_%_Za1mPt?XrIvkCchr!50o^nY(CC(SGIBF z!Igcbyo1JJ8k_w8pey?!nOTCWD_cDl^6McsEOS@3B5SVfq5xYFV4n`K4FNVN!?(66 z0LLOPgH!IxzBn+oD|=HQ#g+Y#Os?!30!CN1C7A5WzB>R{_T2%vvK2YWm95AbT-kVr zxGVb}IfA+lv#4xvW$#y#T-i}M?#f1v(Um2dMRR4Jq_=8jSN6OhyD-Qu2(riVAV+2EiaLE@d$~7zr%c}L8)Q5q z7)y*s5Bq#SyxIE|?#=cqC_Kh43d-|?F|Yt?Y|QGZrddA zwMF`Xj=1hS5gEO2(`ePcfn|{h%kfiaf4l_G@FN2xC2XnAzSiz)_O*z2*c;t#WOT6V zT)(l^Zu5vA2~qMk7%W`fqR-ie zNMsaNYxvHInDlUpkWc4s@cHa*?LN{EqXLN#Th)4XI#IcJop=sUYO{4Y+dA3|vV{|) z_g~Il?bEAPo_Djy+1zYL8z$RORM}di4A^Ms#iWHPb*#-#mL~dOt?;2{T0L!E(O9LJ zbVXc*-YLn|+b}~H$lKH8^xE#A=>?iRwa#Lr+qKp1G3Wt2Q|kc?ycxaP5rZQMmSqJS zxhldsNf+6eJoY-fi|QdZw%A-Qd#i>~qA{$@ugVur;FOPnWivBK#Ncta>q;71-Hl&{ zQoYA8P6dpHgk)9hdZeWev+BYd`M{z|CwlYutt}pn@px^Q&Qfa&sI@lg1K#U%!XU=$ zsZ~0q^{69+olaBlzO?nOFZu{&iSDH_uXgU#$_cbA_KzW$5%5g2#9N>b9euRi@Bplw zo#>a18?Mru*`$uNcopUvfKI-L!%najFtrs8Vs8`7e{(_pK=6t-S z6w-!pUCHO%tsQOj{<1Z;kbeD@L)s@HCJd=ql#))IVnn>9cM2c6yi@QRipVz%q%kY< zuP@!KX#7HhS#fV@2leRmniXFUv9)VfKH*?3-b> zJPfnq6JeMYc^RB?v!X9NwOR3raEe*+^$?jA|1oSdE4B?Jn-vd-VOBgGhFP&JoMcuk z3uiDZ;>(De6_17@sOvCW8#b5~^9Pd5ifhAhvm$bgX2s=UfPnG|vts^0idhj&r{?p| z=ffGyii07xB_c12)Uww@>CB272Q;(d#(^o#ieDaJtpoUt!G6mdWnEc^x3<{m^Khf$ zV2F&0NpAzysF**%jfxji(J|&4klh0@v`aTCt_>TFiux5dD&hwY`g)R4acww_Q89nO zG%EhtlLfN@CITh`A1egp&!08_zm53+=FI#b`F-*HY2yFTafoyn`9IQ*P};fU|J%as z%}^5mU!wB=5|#g}`9}WF^Dkt`C;qSI8~H!-iT@*?_`jNOUIr8QHF!;avi!-3n zyWSI+>0H2o%OK&h3Ax+?(6wpwKKA3j=lmzbVEW$)TQ+3Je_K0Uq8D@@!3!<6RtFsX zI!9|q+=08vz_3!tkg9wfKX+%4&NoS?s&f4aDVx3D&vjj%W7Oqvdc3|VRi%=yNqQbm z(vzj@S(>}S)$QZI*YB`Q$LN&JLESFFf~Oihlhm7*THRpJ3o zYLrXdBdPAmGLz~&xed6!UvI;zxT!(2Ds;H&93H!Un_aJkuLVqvb04h=>06Pcu~#1i zeBkMWfNUrFU<4nH4~caJy19eviq}Bvu~fqcnF~ax@As%kAGdJ4-ydgV2Hdr$flMIU z*t~Y8RuLK`ye=H#c*o*tSfNv8b@=-_osD)L>yt1&sPLt!oL(8;(Mt;TMkh+TeJyrR zr_&3GYCw-V5DcP-;q#}<0BkRHr=f{L{PE}A9B;Zlqh3eAJ9v1_}%{x?ESiu4oH2cd~dLU)AE`ZfxxEh@BK`q&-N8 zpi*CSx_gnrHIqd(+&IsF>)^!z?Dm*l`)qM1rh@)c0xL$_)ly*cIc z(h+$6{i73jl!$*Lfxv$O1RnX*OW>ajv1J;8SC57KdWd}(;spM9NF(qSVfL9YyD7~6 zD$GVhAn>;nf#+p#$_f0XA3@-6PbKhAasuy6BJj&55%@=mz&}a^{&*;fz#k7~AnC}AwxhNBX-y32j z5&2}emOYu4z~|`%K5uFQzjT1r4X`Bx?1y;!pAK19)oCU%PT==)0`DYq9!3(Qv7-|B zP=pis!3c_uvE>7@6$E}Xq!aklAtQm;uQ-9nF9`JYBm#drl!m~EIDa>zf<9Ki{>{di z2$%?bk`a*eLTBs$pQ(WVp9y62|0BOIoA#5a zLl-f?SyQ%e_DBJ%><*6EH+QU?-aC^QCoFMtMfKEFa<#DXm7G{7e2_*T^)8;V|P-cZMxAx ziwV$LiN)|Fg_gogfT#0UCBj+OGP#wZ6DTuTzE=*A^tYf)hg(N9twmx1HtyB_aixdRNHQ&V}*8LcN@> z-L*4y@siabp1LWmczyVA@h6kS>rgH!)J0yNNu&;|TIB+*;~`V6W(FwAW+enCMkOB# z6!2SL^zRFcTrgGvUnh8GAYYa5ja>N?DxQVe9xL+mTD z9^q3;oU9?oNY=ik00fjzkTp*zg{-0J)O`L4DjB@3*C^~KLHY4uExSQU=WTr^qXl;f9N(NGL`JGOwS$(W zIh(m-y4~a43hM$w#@oBerypnGDVBlrK&5h_wHMqD+UZv5aDqWEe&c4$x(JS7QNv_+d5qs%WPVA@1FnOhED3 z&F~CUOOll&m?fb%S%ZbpORw=S@{={HEy6?v)eYKd>yBGi(pm==qETtoac0WXdH?XC zK&+qGeZ1jwQmd6zO~|IuZgd5&JMUzvn-aIgh3K7LIpd~|JA57+7KGqU=3X^gEZ_&wB#H688X@Zue` zfcqtC7m>pKnHA~-VeQOY$aoZ=c91l9v9$ts4y*P7(dk8`f;!7Y)!~DVd|k({6OBb$ zOnNzSO*S<&91zNn1?5xej0OD7q8keULi}9=W5H?|3y?p(#)2M&6~iG(#sc+N$d5zp zm})FIpc@Ou6}C9Y>Vj-lkPVQr;4(56@G>~%#)3J)sf`7fr5X!*xUt}>Bx6BwIN4ax zM#h3RG8P<2HWnPnWGui-iW>{=g0Wx##)88}W5IWmjRl7j#scIRjRgY=KtTC~vEaL@ z#sV~*n$JJK&15X_Dr_VuM_?@INoy<^){OfwADQV!c!~7U(;F zaHD~j8x8PGPb3~HZZ!C=YBYE*1Oa1gPFOAp$Iv?6XmB{mXrNzlqruI*$0r#L4yQ93 zeAhG@Oz|_x%rX%$5ik)j5ik+>SRo)EmO)6)YX1Mxe(-+;?q%Ac4*7lY{AuF<&~b=# z82LZaj!@b;;r}$ve_qzMXi3(@{oT>?yTBz%{Cvl`yjcg^Yu-Be9FzTX4}PKMm+Ve| z*84L{1K(!B7a(zzZpp5%;YWC`H2w=@RK9`I|!NS z%u^$EGX9F>`QD-S0ztOd+UvZZ5JKpb;Sc=D=#1TF-$d}sBu^v_&fk?7GGNSpsDO05)Rju zeWj0#vqG6pK0Cqk>4bdD=$S$48A{~2lN0%!$fcoa%){Lri@N;ymIYc}Ja(@gaT6<6 zt`q;)HjxM7A`DvDLE3 zB}@=g6v6K3Tx7}T1=HAF_=wZ(F2*qkyUVrM2>|)iYj^p&%$8|80jNjJ_{H@QJE`sj z@Up%Wz&ySUz|{fv*#J91I|1AffZc_cp_Tk;Q~Tpv zu!nX6*h4!3yqvrfz{{C-0>FdA{lZ_tP5>t`2u6%M0fdrw0vJi`1b`f)-Q|P~5Kum0 zcL}BL1c0Vf^Z92M3|MJ5wg0NjvK4s?M?uBLCx-x7sQCkY>scb zz=&*J%a`m@$FKH+pa+&)UcSnA1^6QE3V?CNXe6;Vvb==UT>%Cawgmp{(zS zcLf+p+7&>*;+B_I-t&_zFC*!81qhkD0{n5mnN4jb0ww|`0ww|`0ww|`0@H(lT*JxF z*{uJ+)DQlDu|K2#ANhUp{AuF<&~b=#82LZaj!@b;;s2nD7b5!mB2F0*?M=(};d%kC z%W+&xtMf|&?WD(|qV!_)Q_@M$&R<365#2@22dU=VuZm6fK9BYEbJ%5m{P0H>qb%C- zjv~PITjTn&v63HF`2$fUty%m^*PW~7@fu(yz#sRq-#|;^lT|2}es(L%3doPh^2u~j z1sqSE-5L=FyRG%_psGzTyY>0mEClOPRDpUdL=}XMQ3X#XM-_wSb=`U$?aeAj-Nzs!|B2bo;1S>rswO$lxiYiB48q5 zB48q5B48q5BJd}Mfc)ZF$N%?H{Qv&U@&Cy0i|0=h|A&r4q{GPnk#>aA&JF+PyUfQ} zNB>wbYy4_4mUU{d^tR8jzm?@mIkE+}Fe)cUb(qBCm z^6MdHQ#tttos&P{2PI|){Ol)wb~ABunIipp8Ju!XzV{;{{pHk1{{qg*SyH6`wS^E6KWet!gY9cH%~Ir*AoPJUa0lOxB-$#3=p1e8yBoY$ms zax|Tq&p$gdaq%gKE@C-+Uw$sY?~*Ln7L0cHUwzs+yGtgh3xmG5ST zaF7-!_VaVQI3xd%Tb&pM`eRTr8b;h8C9hE#`6iNrovi}$w-M-nbDWXimc+>QE6&J& z#k+kHBfl*jBVS`O@;|X}3bQ&U0ww|`0ww|`0ww|`0ww|<2L$AwpEdtKLi``gJ7t>x zkNm!P{xtD_=r}|=jQk&IM=0%2g#W+XQ>r|~z9-9vwlB2 z=x49^sd+JWEHV54m}(P%8$A;1vJA(%Ekm(wmgBLzEw9D4TV9Rru)Gpex=NP zZB5t&(#-xx)6p*V^GGI}K&hWSAj{3L36!O^3H-sc|Choh(C%MhRc!+L4gyJLfl}_M zA0o2=#ucNHq?!fN&i`+Tn+4jF%mVrqHw&ENJwM4T(4NjLV9x*lIDF}tZ7>lq5ik)j z5ik)j5ik)j5jbZE$UWpOJgfQt_fq`7H*@?y^84cX)5QOw;}GdE@_(cqp|o?t|0%qG zg2MZ0`uN)j@gI$zNAda(`=z}MHEX7tQ4s$y3&|ESJ3gP??Vx=C-5sq>*w5W=^N82o zxI&#vkGtpcJp(SlRADNVGi9Mwd;&h-9gt=Nps=R@3ewL=KS>+VrR7c~ZS@K+jV33c z@F1_eHj{y-CZJU(jZzCBl>!;`d!eYne?dV04_V%zq?t3%dr7xepisQuV6EuItODdu zueD;p&%UJ1Do~Gw{CWuU2l%Xl9DU9_V#?hz>z3I)GMh(p=J(L70$v8EJc8kiA2F+7 zPwK3K0dB2$IB8bFmnO|Bc%G~k&y%$xCwb0%PNq5Y7$bbn{7+!5m z+V+0hl3s3)*xq9EQq(n;t>fF~CD!xPCIwuK}Z7xvInC z!M<(c9o^Up4Vwlw+3rB-w#|o4;IRi9MRePmny~hrQCe}mLByiG>)f6;TdQbmY_xl^ znqZ6F#kbMZx6f-zE{wL!Ct;|EAn5fd%D>g)L*L*499LqpxW&!CN_LO@Khwe(cH#q$cT!Pb5qc2{FJwnYS5TWzh* zNmWFF1Vq&{H`|;pA3oSlk%QgtaYLiNMch_*t9ZF+jjJs~HTf(INI4N#TU$7_6fZV7 zw7WGyH0J{dO%^2QDd(R$Q1kwHDFC1aAy+B1Aml0~b$-W9=~fivV_3J27)Ld%BTryO zLF7-bb>vMLJ+u`C)ng&Q9%35;+&WSo&~|cY39$biVBZK}N(WmVfOX{WX+=R^2B+LQ z()|%D3jTfSih^(Q6$PJ8T2atFX+^`c0l}wf0YMBSMgvE+h!h0* z)(sa?xiQurl<&d0g7eW_=`?&0t%!xH!%%-rc$P zzGumDvi;MI(Vg>ndiQ(JdFP({xli}M_XzoN?9X3Ln*V;5>2AxyU&GQ0^_6`#!=Uc7PR`uLSAhh92d@t3(9pN&sk`Q0wL{kgq6TG~3>cNSJV@vCnx ze}i6|-xrv#33%Trb`jk&O6Io&yvg&jRN=1omwVQpx?nWCn$?vYvk)r_(CjX9&Z6*O zPmxO*Guojd7fD(q3yXoVcDSNb5dArsne^2|iSD~{j>}P@fEV3W{vQ{aVXdPaUwYYTcD5=h}-dAM_x^`Hv zGchy!H@OL ziM&iZ^K9KON$br#x6|yjfSK*hev8ElW=3rCb1#qJDGL4Iwq3AV&Geh^%8|H}WsMa{ck zR15{=_2oC$i#8gx&OtY_Y&avoNv8~zG z*c{m;GELbUT1joJ&#~fItek81(F{a`WwV)OZArT`_4(B2-Q9MnyVu^-+imae?X^dJ z%EeJdx%jCs1lQ2TPo?bvA~k)VNWOj|DR2gUM5NvWL<+$*GC-s#^u-Pm2{zS;uZ%>L zG9?m#vm4IdawQUiGXiI{ob-IlNqYRHq^F;qPU3r}h$zn#6W`$?k8-%!6Z>vu-sDTb zUU?<21DbpHZq$Y9)~#GmNeLliV>!KLi`$*aa+HJ$@ktH8cKqR2)Fx-FWm0sWuXY^>~uOiJI|dnHKXQs z-@9jOao^OGsXMsEVy2e3WipbaX{^s>nCZ9M{r>iLzu(l1+L<#izG!N8RTQ&2LYRMe z_{b5{|HKp9!LD94b!TS_SX-N^>+Ah~k0)2Z*>7G&eWj&Nr`>L|v3;(k#bPNfy?fVg zudWs~o3VIB0!RP}AOR$R1dsp{Kmter2_OL^fCP{L5*^Akz0x=`l1kmYDfH7%cXTv1Zryt5kkH|9Fc=QEg9*KD zTQInPe=ykCDD>c9LqmPN*K59Q$=;o0Z8Z8JFPv6P!z+DIKS0p*IazcwIRj*JnU~3}-r#AS9Pxfn=_#mon%xtR$J?P2_U!ZghJTrl3G?B4oc`U6H~6IVyR}ud zwY=Vxex9D7_vr~%ud3=Fac$%WK11|=rIR1<`mm92+RT?o&<~;gVd5A>fZyQ7|AlP6 zrZ)N1)g_M5PqOFeCy66D=@WwJ~JwK>mPyd zG{p1qz|Zbwqw(?h+J*fMtP1{ov6;YHXK!bJoXwigm;Nd|Pdq-8fxK{-CeUee0?S$##moIKe1Qx=f#-MdVWJs z!)##p z>a+3q`hKv!U&%7;ZVRhp`T{%=G9mE1rs-Ms&wQ|D+VxS-Kho^WF6z~J5}5rU{bbda zM`G`KR@3n1nQEJhjCzS;Atmrdne>5r@ErHtPuG`wvgwK+R9h<|E6JN>Pu?u@tfl82 zfy-Kp)&`%LxvF)*M`mtodoO$8^EJdX|5N~4dc}qL-2wSKnv$l8-|YY4jtAF-y+{BF zAOR$R1dsp{Kmter2_OL^fCP{L5Mi$oN1F!&__JA51%hP9B8x}_%i(cQ8n zV=DsN{F0f3@E(a@7~;HvyvaN=guJYnKdq|%O1XCM7!d1WXqk~$q7abCG&TmLx6iFl zSF5{4vK+-BQ(A7<=hi*vo_%js_de&`y3^Bt*+1d0?N7;Haq#y}=dTtB^Rqm{ZlOR} zAmkMfc>bqNWg^9`^RWH=qaFBFli|_OfMh=9vb4TdhW#VKcFxDb1 zEF35g<_u?4h#z)VPUi~4+p9Cza}kwO*+c)h91xU9A4fk2yOyFwpF?Z1#Z&9+*9+Ou zBYv=!LF-}&EarG%KjYC)vN#?eO2Tljm{B(vQMxPFP(mE)`0q6nWDMR#MIaD_D8CQnG?AsF>Ju zp!!N|$JjX)*L8P@&PG?8qgnJiJYG+}FiNLg9nG%ouIBE>wzfXe+3D6!w|BZ7Vza}G z3Z9E_jy0AsXBp5cmL}16LUd7Kj&yHyaZJi$_moT1G$0rOzd-!W#Gdhi5#{}glftfX z;rX588PC5`mic_fBSNt-!ivi?a)si7Y3z&^7AapXyYZCpeCMf*=UYD95i91GmFbt2 z@ypmRmrq7Y7A>FO`;>Sx0{huR73`?}lo+Sie+RU-fE^{o`eJ;b6wE!vY^eZ>huQ1Af5mG6qy^C+jKSMdcAA z$Hv%+*aURtK=iKY-O=5VSm2ehvfa~H)oiKxTFt*z<_*^lpEq2x%wBYB@4LU>-1qL& zTX(#>`^G!p6)VL5sGMHzUUkQ+uF;nVCnK?`eE(oM`)(C>B~jbv^X(`rsrYTomc>q$ zuRI`rh`VxQ1#?!gt_rrj0=*oGv7Hrq9qdj9VuS3uior;%*ESaGvyH}f*p9~Tw7nkN zX?rEM%l2|C(2L9Z25q5O;EP|ey&nr~y2kbn8!V3vZ(#RSOdel2m0z0~oENk!->r%T zYz46ZPRuWCe&)!}Dhl)2&nkj;GzP8CU7h`){o}i~_TsQFGCCGpv0^0#!LISUMs|+h zJu->Tda=TmIgK9rMR`OUkzZ}}cpS~bs3a)At2{L@QdgaGS@qkth15fvIy)SC$z3Cz zr|uqU=|50?7HR?n{Ey40ro~Jt165-a1FK^bcj0q4KD$?w>BeV$#bjh+;5qT^iMyT^ z7fjs!jF>mE`)M&t`DHn)sZpNG#ve5UcKG(SJtn-{XJRqQ8K>}7ttHMh6i>gnw6XwIj*=a=P4Hws&@ zf*TH{G4^pK+kgT3)`iL|7sg=T(m! z;)nc-FLihw?vBPb(cyM?x&h%d5R&r81wqOl-#sGjAKx<~y*Zw-U;5d2=6coufsc^-lOrC*qjReyKnJeb8YzCII=3N^n^&^vC(D;Z z&R`Cn_%ZhVD(S&!J+8Py`j6;l~3zhwEH&~b9~W#gG)qd&nWw6(SIr$^gV8~zD` zO=_si-Dwk?Z8m#D@E)ObeQ9l{^9w>jK>@$6uoU%53x%#)Y-_s&!C5z5=R}ds)(?T| zpWWVooqp{|5E>eU%-jM9tQYE>9owDGI>AQuZT&c=f_|aDz*dlp^97}KZT-;I->@^6 zj_Vp4cGC6zbeY|b>z(wEwo-0EE$O9y+SV?R7Q2nw3ibGheX6PIfxXawdq;yL*dUV#bSLp{{# zLS2|jfBi!6-KkfD!Jy#W-rtXk)L#76aecUeA8&74&yS&!^w*IbfJlF&2Y+0jv#!o2 zK-Q~M??Rrlj+##8)C3h5=v&IGEfwm?`rJ&Rmml{EMYU}~qaOre%GY4m4(oCy$mj6F zeu0o~AbTXP7st+i9GBX60(Po{^HMG_0bI~;6KbIW{Rs5&*9Gv}$o^V>ScmK1Apo#d zuP1qAzk0m0fy;wHIwm}DOal-7NC*_-nAAw>7WNB3;MJWpRyhFbd9(+e%*Rim&1R>1 zTs?5pS zD4(MUHFO*#9p(r%&K;q1e_VvxKKN&iP>-?u{k9dETdrGUui0|lC2PdSj%Kl^al1pj zZsRp#kK5&StadvZ5tLgZu&BIPJjH7iXW`VydOJl#twpz^#Y1r}_9Pca0vMB38M!yMIyywuU8PrcwRBKuo15w( z5vcC+AZA7~&>B^aD#K{YMe~y6Kyzo02wCljwdpdj)7Y#DLK~>Q@)LhXrczcko&O?C z%v!Z;s#5&Vhv9FC_A8N zq3i-bTjOV6@UxA6HliS=w%Lz>BCms89?Cx7KYJ*9vp*@6{Vjz;+1L8bp=>dj7|OoW zk5KlVeuT0EN~AO$v~`R{6;mktnLt7)JE|C=Y?PQo*&_--K>c_q z`y4e`TUdNPZP?%OJOJd%4`0W>|4rgq3ja@EtGwNp04Rb*-L|LS&*F{WRKv6 zjw<#wHTnSe@M!j33PrQ8RdBChOfeco?506Pv!4m@X!cM5l_yzQP+1;~!9qQn9aYTH zZ2gEwvv1?QJ|mhPRZ>K=p9w_hPZ2IR?geYdLcl`6Lcl`6Lcl`6Lcl`cvyOoBy$F%9 zKP5wbCjb9I2>kzBp|t!Tm!ez%Cn5}Whl=x*Dpi4B1G6) zUrd_E0K*8uFtIn7y;Z6|hHb`H>0{dB*mo>4anI(7%KbwZMItOqrqq6;1}~6N0CEzx zRb^i7=xFh_inlqMI@`(VVAr{RQ=6mFEqc6--foa`_WuTB(rQBtTL2#c>X&C}^_vt+TNiS@Ml=SakG>UROIZkx^M~;RnZJ(zla@d?9q?*2azwN1KLG+!$6WtMY|o z*yUs3qO;OS#Ng@d(v>u|bvAt+O7$MYI2AA&;*wRd^*EP2%&PLQ;{%Ht9q-LQwzar5 zri|9EnySQh znsKSNi;r@&tLPYiK+V!}K3>f&VD;^HRt#~*Lw_<5H!L3*tPUBX@ml1a>z8Z?4tz&FM*yL6$97=F2ZU`H0MUKRmvbRICxfQP-(%gzy56$XU^b9fY z5Poa0KXBvhYiscI7Mr|o?o=EJkyA0@sh~O)3x~Kuz(U|}0|Dix)8_xT5dXg>J^x3!&nTZG z{tq1oNr##LDTDpz%k5p&SSu3gmBr6Qtkoh-8^v*d)D`~{9YJL|3_il z#!Tb4wW~w)fbJuCp|!Eii2%RO(Yla#(AjKaSV?3^RX&BEyYoorZ%C)Avi_Kq$vzt7 zx-QEy>vFo>9`CHGl1bMLJ>O2ylcDQbmA$c}&&z+W-{$bRnjIdMc$jFS7r)=R6*>Vi z`AeoW3_+1OYMkV7UJ6s*Q%zZu^ChR&y!OVgLxIMbcR1XgMp}fKAn1C)3Z~=oRjPR*X{;#foNm%>a(-P$;Sd`gi@RZsPL95!H=}73uygm9&uGiC#Ax|&&k-H=d z?h?&a`W}A+iZOI6_tTS8DM>}(`S*`b;8DZ)MgoDq83Z2Xb4%bK3$gVYfmgTr{CJdo z65<5@XhKY1pa6!fxsUPr6KTmFmeL_JrMYb&=@-zG7%6s9J?6Fx1`~sc8FPNRcUp&Mv8Di^(*e~!ca57|H zSEIScIDy~C3A~HkdKgiR#*j+j4@EeEk48{+l5H4LYC+&9LOOvz88Q=i{fHBI{E|SQ z&miz8Ln#RSA76KLm|Ai4yazdvY|351L{(s7!HvW%tpHV(X{2w|F zk`6Qf$GIbP?u_t%w#$cr|6=Ja^__DOdfD92BS8wUqg^A^E;=PY5(MSm62w#i@H|he z%juQutHh?pwx;ej#MwMzXNUfa7(aB8`C!HP zwB}BShx0>SYLd{RxCnC#Su2Pw8YgB$oJ#mp%2Qh=n1y7pB?0_Cfvt>e)g@h=v(bqu z0AhDnb0ZJogB;z_?dWLgOE9`ocRFY}0h*O~8J-lNSK-A$)CE@&Pu5{`b#_SQ8?L$v zrmF!=j~>BPTbhZMwm?>pW5`WhJuk6--DR2p4LdV!S7Y5;Uu@Icl*ZzfdGW5`#8AbN zdRhBTrv*TXNI|CF6$;t8%or@x%c<;Md6q6-vYW(HH>DJ>4<9c6y#(<(lo#gfA}>oP zQioM-a-P=lkf}B^4HTvGai4jj@s}M(GGDfl!KQ zD}Pw%WX=5e09l(C*hK?*ZpqrU0X7OkNbe(5xA}ZK%KkOL$=U+}jjX*KU>^jS5M;SQ z_D=zjwSu5t2fLiC9Sh7JZ7m2UMO&{8P_%VP&>U?Y#VZTV?<1@af~?gCLDn7!B#^ZS z0%^z^9w3~oZ3;xt)-m>Yz(m$|5c`V1kMQw;LDo=WCTsr`00^ibCu=)GNn{PClllA; z45W#+UKL<31eHgEE7`Sy*`lpahqP$x)ASXYeiFx9Ar=j>H$$v3NXFSOuJQCZ99^8M zT@|2MYvQADH%;K!5#m(sn^bX<9SbRlbi+EGsy!YsQ#JjFQ?)AI<1?t*qBf z$RR*!(8e(*iW%&R09Z0kGE&8<9ki^6HtD33nIg0NurWCvn2FpYOoP{sWpB+H<%5hg0A zVbGq&KEtz;(mSvWMx{{4nJGWd`-cw&V*SMK4Z{~EH!Go;kWH!G=nCF;-pNuQo!n{& z(L23j-u2zLdEJe8Ap|#}+XJ_fx2LlTUXjlBt~N(IvamTy6iYUmP>SaN42bQW(I-T% zxf6z~e~&68jInije}p=*y1NS;Uc8N7+WHkba{}epw2Q;b$Fp8SJ&}Y+*q88Nr&Rcj0u}-m0u}-m0)Hb2D2Ejg zlGB?1|LP$4KN9!Stx$(@pHV(X{2w|Fk`6Qf$GIbP?u_t%n&!VGV@I?oWBT5{=%QY5 zi6WV=IF~bjxU2e|;is7*FCMf|=ZMou8Po06#f0xQmdPTYj=sX3ryFO8i9K=JV|+>yddd^F~<z)xP6^*Y$){Nzb_c7F1@oD|GlDpN4?ZP^^meBPhPPZlWPCkqttlN;rP zVCIc-nqcPV6qTP8%MrA7jJah~FmszfA(-iwjbJ89%>3kb86cp3oS$s-Cj~QMI+@Qu z56NkQnTurhfTFmRm29azTQKt>zZT4Vh+cr0KA8EepFQVi&-mFzc-@{`wy&@0#7hO7 z^a{p!CJJXMi)3;Jy*&t)g3-ljJdvA9P`3GbXwykzCfN&qFa1}g+kX3gvd`t9*$0=m2SdIQ&N-Q+cF6~f^89g&XJwqpX>CBV-N|e&j zG?(FOjzvwbv1EbP7PrIWK;FcfwYB1Z+adA|7D z>vwrrVe7S(0MspJ{Ni|&y{E1Oa7bSXUn~w!|%fD(3|{eQTwV- zSqb3Uu0P4u$NW>*h?z`97_;(`TR2<4y=@m+J94FnE_=KD*-$_>q-C% zf|}oDK@cM+z2D{HAiIPI=zolr0LB&j2L8$}bsTFC3c7K*=jEGxRe-;zRRJ)*7>y{_ zPM()T>Z$^hM)@4^f9N1-+eL5@;no78RxEqo0%B1MPe>x`gO1T0TN8 z=kZi5vUd~Sr=P_xmGOfgMU0AQ#XHIX*Dp2nW#UbKc*`G%DrwE&N4oB8t&Fz-ZvuSQ z$9@Yf@lVD=R=mm1GW^PeigF@VRsqLTXSZgA!ERT|yQpb%%Wl0gTZCj?$|_K|`FuNy z`~jX-@KZgj0Kw$*6t+TP7bwg}Sp};Vy$*IcyUkH%&nj50BxMzNc~-%tiaD!bQ6Mp^ zpoy{ynkcK_r-@kwKTVfaaEF#v(1NT2AF>L<=B$Dz60-`z@vH)rnAxq5CsFuJSp`od zXBEJ7GM|6Y@u}IZOU7z+%1g*9@Xnf5Fs^46jL)7`P#j=q2Ut;n?E!TU%l2CRh16nm zH($Q8i`KE^mzdegql|Hf**1w+2Vk5P9O%b^t6I-LRx`-#L4ZK`2d(f zZo{e43ZAgi3jW+*FqS+E0Sf^O0Sf^O0Sf^O0Ske@Dg>10PdoqLNBRFxrO*FIxz8w{ zBmNH^2T6yS|Kr>dI(KIHKVM}&#<~Y5gBep-im{CDcZ=VOu>YYb6-sd5=CVfz*?;$O zuYeFO?Twx<-3#ZyRP=m`PovQjcD7572*u0SZQADSxo_XUKKHAm?@lZCr{d(?MxB$J ztp+E55t;rdpIc6zC$q=3On-Ho&yPo0qsqxQ>YV&O8I+hEkl70|yMZ{lLYe-&4t6;w z-}fn*{z`JDe;()LEFshX@fn%^CuDH)6EZmY#zaoOF&!t*(Kz`>gAufKjNM}9Gx*owIZDfA+J- z{Oo`EnGKx$7TJDjO;6)?zN#70LRwu|*RQjKGxATk_lZ%WKL!`0;lv$Nilj2~tt4fV z{n)SkZzTHPU@-Dq5*WFD#2NXUy!&S`@>^0da>-)ke^uWXR%0v#ECehBECehBECehB zECfE=2q?ckZT^3R_&;9nly3e%%6&%p9PxkXI7m9o{2%9z(7C@7{x3gK{PXX!pD4 zdTgidmDn!Z%dtQ&Y9z(!OSw;AG{Gk@bN2syiqp@hIQ_OnpTM?sK7sQzpTI)I>099w z=ra2RX3YNYiu(j+%>HkcSvT1l_X(t!{SVV&m-=}yoll@xX7?#d3w#2lv-$-7cC6N02v`VM2v`VM2v`VM2v`W5Aq14WDN1-+^Z)Om{QsWx`Tr>Q8Rc`t z|Dod`=`izuoI672&Itdf^!{l|@2BbG?;^#2B6>FE>pvt*`xsi*LM@{t{xLSJ*u+d@ zK6|H=)&cD7ZfnMR?v6&cxaGPv>RftUy_l~Va2}=zQ>Cm~E3M-b@cHV1G#dbwHT{>9 zen$F9+K?u#JUfLnS~XBxdVI@u7q8(GX@UX-jBo?A*$kTGg=WclkW9%8`n6D&C!gn6 zey1qc1X8@OkoT1Cu|OrG@8Gf6gP8>=pIeW`L7BOq6 zYs&l?`gXI_S_oJOSO{1MSO{1MSO{1M%tSzW<+S7fuT%VgD1H1N zE(u_%MyVHrQnw=spxc}Ta8u&MfbMt_07}f1x?Khcs2``)HziLDfazpD|2&*731ErL z{y|aNkOWXRE2Vx|pBV7)>=Oep!~R7-mTF*YK&iXsHEY!*fF8FCi|!?)04(9G`Z%Qk zV01AWPb#avNu3$sA~BQ9=T`)t3JW|e+H}WPL%?1lQlD7=EK}N awh*uoun@2iun@2iun@2iun_nZ1pYrO(txG_ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/.github/actions/install_deps.sh b/thirdparty/SameBoy-old/.github/actions/install_deps.sh new file mode 100644 index 000000000..1c9749efc --- /dev/null +++ b/thirdparty/SameBoy-old/.github/actions/install_deps.sh @@ -0,0 +1,23 @@ +case `echo $1 | cut -d '-' -f 1` in + ubuntu) + sudo apt-get -qq update + sudo apt-get install -yq bison libpng-dev pkg-config libsdl2-dev + ( + cd `mktemp -d` + curl -L https://github.com/rednex/rgbds/archive/v0.4.0.zip > rgbds.zip + unzip rgbds.zip + cd rgbds-* + make -sj + sudo make install + cd .. + rm -rf * + ) + ;; + macos) + brew install rgbds sdl2 + ;; + *) + echo "Unsupported OS" + exit 1 + ;; +esac \ No newline at end of file diff --git a/thirdparty/SameBoy-old/.github/actions/oam_bug-2.gb b/thirdparty/SameBoy-old/.github/actions/oam_bug-2.gb new file mode 100644 index 0000000000000000000000000000000000000000..a3f55af1049fff765424216fed8c6553c2262ecd GIT binary patch literal 65536 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 Gf&T}g$kes~ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/.github/actions/sanity_tests.sh b/thirdparty/SameBoy-old/.github/actions/sanity_tests.sh new file mode 100644 index 000000000..1d8b33e2c --- /dev/null +++ b/thirdparty/SameBoy-old/.github/actions/sanity_tests.sh @@ -0,0 +1,33 @@ +set -e + +./build/bin/tester/sameboy_tester --jobs 5 \ + --length 45 .github/actions/cgb_sound.gb \ + --length 10 .github/actions/cgb-acid2.gbc \ + --length 10 .github/actions/dmg-acid2.gb \ +--dmg --length 45 .github/actions/dmg_sound-2.gb \ +--dmg --length 20 .github/actions/oam_bug-2.gb + +mv .github/actions/dmg{,-mode}-acid2.bmp + +./build/bin/tester/sameboy_tester \ +--dmg --length 10 .github/actions/dmg-acid2.gb + +set +e + +FAILED_TESTS=` +shasum .github/actions/*.bmp | grep -E -v \(\ +64c3fd9a5fe9aee40fe15f3371029c0d2f20f5bc\ \ .github/actions/cgb-acid2.bmp\|\ +dbcc438dcea13b5d1b80c5cd06bda2592cc5d9e0\ \ .github/actions/cgb_sound.bmp\|\ +0caadf9634e40247ae9c15ff71992e8f77bbf89e\ \ .github/actions/dmg-acid2.bmp\|\ +fbdb5e342bfdd2edda3ea5601d35d0ca60d18034\ \ .github/actions/dmg-mode-acid2.bmp\|\ +c9e944b7e01078bdeba1819bc2fa9372b111f52d\ \ .github/actions/dmg_sound-2.bmp\|\ +f0172cc91867d3343fbd113a2bb98100074be0de\ \ .github/actions/oam_bug-2.bmp\ +\)` + +if [ -n "$FAILED_TESTS" ] ; then + echo "Failed the following tests:" + echo $FAILED_TESTS | tr " " "\n" | grep -o -E "[^/]+\.bmp" | sed s/.bmp// | sort + exit 1 +fi + +echo Passed all tests \ No newline at end of file diff --git a/thirdparty/SameBoy-old/.github/workflows/sanity.yml b/thirdparty/SameBoy-old/.github/workflows/sanity.yml new file mode 100644 index 000000000..ac3732397 --- /dev/null +++ b/thirdparty/SameBoy-old/.github/workflows/sanity.yml @@ -0,0 +1,36 @@ +name: "Bulidability and Sanity" +on: push + +jobs: + sanity: + strategy: + fail-fast: false + matrix: + os: [macos-latest, ubuntu-latest, ubuntu-18.04] + cc: [gcc, clang] + include: + - os: macos-latest + cc: clang + extra_target: cocoa + exclude: + - os: macos-latest + cc: gcc + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Install deps + shell: bash + run: | + ./.github/actions/install_deps.sh ${{ matrix.os }} + - name: Build + run: | + ${{ matrix.cc }} -v; (make -j sdl tester libretro ${{ matrix.extra_target }} CONF=release CC=${{ matrix.cc }} || (echo "==== Build Failed ==="; make sdl tester libretro ${{ matrix.extra_target }} CONF=release CC=${{ matrix.cc }})) + - name: Sanity tests + shell: bash + run: | + ./.github/actions/sanity_tests.sh + - name: Upload binaries + uses: actions/upload-artifact@v1 + with: + name: sameboy-canary-${{ matrix.os }}-${{ matrix.cc }} + path: build/bin diff --git a/thirdparty/SameBoy-old/.gitignore b/thirdparty/SameBoy-old/.gitignore new file mode 100644 index 000000000..c795b054e --- /dev/null +++ b/thirdparty/SameBoy-old/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/thirdparty/SameBoy-old/BESS.md b/thirdparty/SameBoy-old/BESS.md new file mode 100644 index 000000000..1807943c6 --- /dev/null +++ b/thirdparty/SameBoy-old/BESS.md @@ -0,0 +1,259 @@ +# BESS – Best Effort Save State 1.0 + +## Motivation + +BESS is a save state format specification designed to allow different emulators, as well as majorly different versions of the same emulator, to import save states from other BESS-compliant save states. BESS works by appending additional, implementation-agnostic information about the emulation state. This allows a single save state file to be read as both a fully-featured, implementation specific save state which includes detailed timing information; and as a portable "best effort" save state that represents a state accurately enough to be restored in casual use-cases. + +## Specification + +Every integer used in the BESS specification is stored in Little Endian encoding. + +### BESS footer + +BESS works by appending a detectable footer at the end of an existing save state format. The footer uses the following format: + +| Offset from end of file | Content | +|-------------------------|-------------------------------------------------------| +| -8 | Offset to the first BESS Block, from the file's start | +| -4 | The ASCII string 'BESS' | + +### BESS blocks + +BESS uses a block format where each block contains the following header: + +| Offset | Content | +|--------|---------------------------------------| +| 0 | A four-letter ASCII identifier | +| 4 | Length of the block, excluding header | + +Every block is followed by another block, until the END block is reached. If an implementation encounters an unsupported block, it should be completely ignored (Should not have any effect and should not trigger a failure). + +#### NAME block + +The NAME block uses the `'NAME'` identifier, and is an optional block that contains the name of the emulator that created this save state. While optional, it is highly recommended to be included in every implementation – it allows the user to know which emulator and version is compatible with the native save state format contained in this file. When used, this block should come first. + +The length of the NAME block is variable, and it only contains the name and version of the originating emulator in ASCII. + + +#### INFO block + +The INFO block uses the `'INFO'` identifier, and is an optional block that contains information about the ROM this save state originates from. When used, this block should come before `CORE` but after `NAME`. This block is 0x12 bytes long, and it follows this structure: + +| Offset | Content | +|--------|--------------------------------------------------| +| 0x00 | Bytes 0x134-0x143 from the ROM (Title) | +| 0x10 | Bytes 0x14E-0x14F from the ROM (Global checksum) | + +#### CORE block + +The CORE block uses the `'CORE'` identifier, and is a required block that contains both core state information, as well as basic information about the BESS version used. This block must be the first block, unless the `NAME` or `INFO` blocks exist then it must come directly after them. An implementation should not enforce block order on blocks unknown to it for future compatibility. + +The length of the CORE block is 0xD0 bytes, but implementations are expected to ignore any excess bytes. Following the BESS block header, the structure is as follows: + +| Offset | Content | +|--------|----------------------------------------| +| 0x00 | Major BESS version as a 16-bit integer | +| 0x02 | Minor BESS version as a 16-bit integer | + +Both major and minor versions should be 1. Implementations are expected to reject incompatible majors, but still attempt to read newer minor versions. + +| Offset | Content | +|--------|----------------------------------------| +| 0x04 | A four-character ASCII model identifier | + +BESS uses a four-character string to identify Game Boy models: + + * The first letter represents mutually-incompatible families of models and is required. The allowed values are `'G'` for the original Game Boy family, `'S'` for the Super Game Boy family, and `'C'` for the Game Boy Color and Advance family. +* The second letter represents a specific model within the family, and is optional (If an implementation does not distinguish between specific models in a family, a space character may be used). The allowed values for family G are `'D'` for DMG and `'M'` for MGB; the allowed values for family S are `'N'` for NTSC, `'P'` for PAL, and `'2'` for SGB2; and the allowed values for family C are `'C'` for CGB, and `'A'` for the various GBA line models. +* The third letter represents a specific CPU revision within a model, and is optional (If an implementation does not distinguish between revisions, a space character may be used). The allowed values for model GD (DMG) are `'0'` and `'A'`, through `'C'`; the allowed values for model CC (CGB) are `'0'` and `'A'`, through `'E'`; the allowed values for model CA (AGB, AGS, GBP) are `'0'`, `'A'` and `'B'`; and for every other model this value must be a space character. +* The last character is used for padding and must be a space character. + +For example; `'GD '` represents a DMG of an unspecified revision, `'S '` represents some model of the SGB family, and `'CCE '` represent a CGB using CPU revision E. + +| Offset | Content | +|--------|--------------------------------------------------------| +| 0x08 | The value of the PC register | +| 0x0A | The value of the AF register | +| 0x0C | The value of the BC register | +| 0x0E | The value of the DE register | +| 0x10 | The value of the HL register | +| 0x12 | The value of the SP register | +| 0x14 | The value of IME (0 or 1) | +| 0x15 | The value of the IE register | +| 0x16 | Execution state (0 = running; 1 = halted; 2 = stopped) | +| 0x17 | Reserved, must be 0 | +| 0x18 | The values of every memory-mapped register (128 bytes) | + +The values of memory-mapped registers should be written 'as-is' to memory as if the actual ROM wrote them, with the following exceptions and note: +* Unused registers have Don't-Care values which should be ignored +* Unused register bits have Don't-Care values which should be ignored +* If the model is CGB or newer, the value of KEY0 (FF4C) must be valid as it determines DMG mode + * Bit 2 determines DMG mode. A value of 0x04 usually denotes DMG mode, while a value of `0x80` usually denotes CGB mode. +* Object priority is derived from KEY0 (FF4C) instead of OPRI (FF6C) because OPRI can be modified after booting, but only the value of OPRI during boot ROM execution takes effect +* If a register doesn't exist on the emulated model (For example, KEY0 (FF4C) on a DMG), its value should be ignored. +* BANK (FF50) should be 0 if the boot ROM is still mapped, and 1 otherwise, and must be valid. +* Implementations should not start a serial transfer when writing the value of SB +* Similarly, no value of NRx4 should trigger a sound pulse on save state load +* And similarly again, implementations should not trigger DMA transfers when writing the values of DMA or HDMA5 +* The value store for DIV will be used to set the internal divisor to `DIV << 8` +* Implementation should apply care when ordering the write operations (For example, writes to NR52 must come before writes to the other APU registers) + +| Offset | Content | +|--------|--------------------------------------------------------------------| +| 0x98 | The size of RAM (32-bit integer) | +| 0x9C | The offset of RAM from file start (32-bit integer) | +| 0xA0 | The size of VRAM (32-bit integer) | +| 0xA4 | The offset of VRAM from file start (32-bit integer) | +| 0xA8 | The size of MBC RAM (32-bit integer) | +| 0xAC | The offset of MBC RAM from file start (32-bit integer) | +| 0xB0 | The size of OAM (=0xA0, 32-bit integer) | +| 0xB4 | The offset of OAM from file start (32-bit integer) | +| 0xB8 | The size of HRAM (=0x7F, 32-bit integer) | +| 0xBC | The offset of HRAM from file start (32-bit integer) | +| 0xC0 | The size of background palettes (=0x40 or 0, 32-bit integer) | +| 0xC4 | The offset of background palettes from file start (32-bit integer) | +| 0xC8 | The size of object palettes (=0x40 or 0, 32-bit integer) | +| 0xCC | The offset of object palettes from file start (32-bit integer) | + +The contents of large buffers are stored outside of BESS structure so data from an implementation's native save state format can be reused. The offsets are absolute offsets from the save state file's start. Background and object palette sizes must be 0 for models prior to Game Boy Color. + +An implementation needs handle size mismatches gracefully. For example, if too large MBC RAM size is specified, the superfluous data should be ignored. On the other hand, if a too small VRAM size is specified (For example, if it's a save state from an emulator emulating a CGB in DMG mode, and it didn't save the second CGB VRAM bank), the implementation is expected to set that extra bank to all zeros. + +#### XOAM block + +The XOAM block uses the `'XOAM'` identifier, and is an optional block that contains the data of extra OAM (addresses `0xFEA0-0xFEFF`). This block length must be `0x60`. Implementations that do not emulate this extra range are free to ignore the excess bytes, and to not create this block. + + +#### MBC block + +The MBC block uses the `'MBC '` identifier, and is an optional block that is only used when saving states of ROMs that use an MBC. The length of this block is variable and must be divisible by 3. + +This block contains an MBC-specific number of 3-byte-long pairs that represent the values of each MBC register. For example, for MBC5 the contents would look like: + +| Offset | Content | +|--------|---------------------------------------| +| 0x0 | The value 0x0000 as a 16-bit integer | +| 0x2 | 0x0A if RAM is enabled, 0 otherwise | +| 0x3 | The value 0x2000 as a 16-bit integer | +| 0x5 | The lower 8 bits of the ROM bank | +| 0x6 | The value 0x3000 as a 16-bit integer | +| 0x8 | The bit 9 of the ROM bank | +| 0x9 | The value 0x4000 as a 16-bit integer | +| 0xB | The current RAM bank | + +An implementation should parse this block as a series of writes to be made. Values outside the `0x0000-0x7FFF` and `0xA000-0xBFFF` ranges are not allowed. Implementations must perform the writes in order (i.e. not reverse, sorted, or any other transformation on their order) + +#### RTC block +The RTC block uses the `'RTC '` identifier, and is an optional block that is used while emulating an MBC3 with an RTC. The contents of this block are identical to 64-bit RTC saves from VBA, which are also used by SameBoy and different emulators such as BGB. + +The length of this block is 0x30 bytes long and it follows the following structure: + +| Offset | Content | +|--------|------------------------------------------------------------------------| +| 0x00 | Current seconds (1 byte), followed by 3 bytes of padding | +| 0x04 | Current minutes (1 byte), followed by 3 bytes of padding | +| 0x08 | Current hours (1 byte), followed by 3 bytes of padding | +| 0x0C | Current days (1 byte), followed by 3 bytes of padding | +| 0x10 | Current high/overflow/running (1 byte), followed by 3 bytes of padding | +| 0x14 | Latched seconds (1 byte), followed by 3 bytes of padding | +| 0x18 | Latched minutes (1 byte), followed by 3 bytes of padding | +| 0x1C | Latched hours (1 byte), followed by 3 bytes of padding | +| 0x20 | Latched days (1 byte), followed by 3 bytes of padding | +| 0x24 | Latched high/overflow/running (1 byte), followed by 3 bytes of padding | +| 0x28 | UNIX timestamp at the time of the save state (64-bit) | + +#### HUC3 block +The HUC3 block uses the `'HUC3'` identifier, and is an optional block that is used while emulating an HuC3 cartridge to store RTC and alarm information. The contents of this block are identical to HuC3 RTC saves from SameBoy. + +The length of this block is 0x11 bytes long and it follows the following structure: + +| Offset | Content | +|--------|-------------------------------------------------------| +| 0x00 | UNIX timestamp at the time of the save state (64-bit) | +| 0x08 | RTC minutes (16-bit) | +| 0x0A | RTC days (16-bit) | +| 0x0C | Scheduled alarm time minutes (16-bit) | +| 0x0E | Scheduled alarm time days (16-bit) | +| 0x10 | Alarm enabled flag (8-bits, either 0 or 1) | + +#### TPP1 block +The TPP1 block uses the `'TPP1'` identifier, and is an optional block that is used while emulating a TPP1 cartridge to store RTC information. This block can be omitted if the ROM header does not specify the inclusion of a RTC. + +The length of this block is 0x11 bytes long and it follows the following structure: + +| Offset | Content | +|--------|-------------------------------------------------------| +| 0x00 | UNIX timestamp at the time of the save state (64-bit) | +| 0x08 | The current RTC data (4 bytes) | +| 0x0C | The latched RTC data (4 bytes) | +| 0x10 | The value of the MR4 register (8-bits) | + + +#### MBC7 block +The MBC7 block uses the `'MBC7'` identifier, and is an optional block that is used while emulating an MBC7 cartridge to store the EEPROM communication state and motion control state. + +The length of this block is 0xA bytes long and it follows the following structure: + +| Offset | Content | +|--------|-------------------------------------------------------| +| 0x00 | Flags (8-bits) | +| 0x01 | Argument bits left (8-bits) | +| 0x02 | Current EEPROM command (16-bits) | +| 0x04 | Pending bits to read (16-bits) | +| 0x06 | Latched gyro X value (16-bits) | +| 0x08 | Latched gyro Y value (16-bits) | + +The meaning of the individual bits in flags are: + * Bit 0: Latch ready; set after writing `0x55` to `0xAX0X` and reset after writing `0xAA` to `0xAX1X` + * Bit 1: EEPROM DO line + * Bit 2: EEPROM DI line + * Bit 3: EEPROM CLK line + * Bit 4: EEPROM CS line + * Bit 5: EEPROM write enable; set after an `EWEN` command, reset after an `EWDS` command + * Bits 6-7: Unused. + +The current EEPROM command field has bits pushed to its LSB first, padded with zeros. For example, if the ROM clocked a single `1` bit, this field should contain `0b1`; if the ROM later clocks a `0` bit, this field should contain `0b10`. + +If the currently transmitted command has an argument, the "Argument bits left" field should contain the number argument bits remaining. Otherwise, it should contain 0. + +The "Pending bits to read" field contains the pending bits waiting to be shifted into the DO signal, MSB first, padded with ones. + +#### SGB block + +The SGB block uses the `'SGB '` identifier, and is an optional block that is only used while emulating an SGB or SGB2 *and* SGB commands enabled. Implementations must not save this block on other models or when SGB commands are disabled, and should assume SGB commands are disabled if this block is missing. + +The length of this block is 0x39 bytes, but implementations should allow and ignore excess data in this block for extensions. The block follows the following structure: + +| Offset | Content | +|--------|--------------------------------------------------------------------------------------------------------------------------| +| 0x00 | The size of the border tile data (=0x2000, 32-bit integer) | +| 0x04 | The offset of the border tile data (SNES tile format, 32-bit integer) | +| 0x08 | The size of the border tilemap (=0x800, 32-bit integer) | +| 0x0C | The offset of the border tilemap (LE 16-bit sequences, 32-bit integer) | +| 0x10 | The size of the border palettes (=0x80, 32-bit integer) | +| 0x14 | The offset of the border palettes (LE 16-bit sequences, 32-bit integer) | +| 0x18 | The size of active colorization palettes (=0x20, 32-bit integer) | +| 0x1C | The offset of the active colorization palettes (LE 16-bit sequences, 32-bit integer) | +| 0x20 | The size of RAM colorization palettes (=0x1000, 32-bit integer) | +| 0x24 | The offset of the RAM colorization palettes (LE 16-bit sequences, 32-bit integer) | +| 0x28 | The size of the attribute map (=0x168, 32-bit integer) | +| 0x2C | The offset of the attribute map (32-bit integer) | +| 0x30 | The size of the attribute files (=0xfd2, 32-bit integer) | +| 0x34 | The offset of the attribute files (32-bit integer) | +| 0x38 | Multiplayer status (1 byte); high nibble is player count (1, 2 or 4), low nibble is current player (Where Player 1 is 0) | + +If only some of the size-offset pairs are available (for example, partial HLE SGB implementation), missing fields are allowed to have 0 as their size, and implementations are expected to fall back to a sane default. + +#### END block +The END block uses the `'END '` identifier, and is a required block that marks the end of BESS data. Naturally, it must be the last block. The length of the END block must be 0. + +## Validation and Failures + +Other than previously specified required fail conditions, an implementation is free to decide what format errors should abort the loading of a save file. Structural errors (e.g. a block with an invalid length, a file offset that is outside the file's range, or a missing END block) should be considered as irrecoverable errors. Other errors that are considered fatal by SameBoy's implementation: +* Duplicate CORE block +* A known block, other than NAME, appearing before CORE +* An invalid length for the XOAM, RTC, SGB or HUC3 blocks +* An invalid length of MBC (not a multiple of 3) +* A write outside the $0000-$7FFF and $A000-$BFFF ranges in the MBC block +* An SGB block on a save state targeting another model +* An END block with non-zero length \ No newline at end of file diff --git a/thirdparty/SameBoy-old/BootROMs/SameBoyLogo.png b/thirdparty/SameBoy-old/BootROMs/SameBoyLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..ad1a760c02e47b9cb802373b3b5c4b035b0968d0 GIT binary patch literal 477 zcmV<30V4j1P)WAF66e-}Gf3J`N*PQiY+)6YvB>+8J%CE@>xKQ-zRm z2iyTFke0I42~u`|#s#WSWm0e3L%lsN3(2N4q{>pA-Yv4etqNHo4q$YtK)3K=vFv3Tq`_z*Ss2pM>1bg= zd-?$D0Ch>yiSXW{4g8XJ+rHcFkrq;ml9D8k9iokWFKHoJh-*kb-hl-$+t?}DhSY}k zYe;*q^8jx^w&D2+xKD`#nEcn;uIc?>V5p)xCHX5qr%HPFS!a9Q9@^`b!t1^c0NjVl z^6pWmLptOMm>)YWA3EW^jZY8)`T-i#yH4!q)-4>S!&!~>zVvDP`l+|G{x5$4@!eI< TGDtwF00000NkvXXu0mjf9% $900 + FAIL "BootROM overflowed: {BootEnd}" +ENDC + +SECTION "HRAM", HRAM[$FF80] +TitleChecksum: + ds 1 +BgPalettes: + ds 8 * 4 * 2 +InputPalette: + ds 1 +WaitLoopCounter: + ds 1 diff --git a/thirdparty/SameBoy-old/BootROMs/cgb_boot_fast.asm b/thirdparty/SameBoy-old/BootROMs/cgb_boot_fast.asm new file mode 100644 index 000000000..cddb47503 --- /dev/null +++ b/thirdparty/SameBoy-old/BootROMs/cgb_boot_fast.asm @@ -0,0 +1,2 @@ +FAST EQU 1 +include "cgb_boot.asm" \ No newline at end of file diff --git a/thirdparty/SameBoy-old/BootROMs/dmg_boot.asm b/thirdparty/SameBoy-old/BootROMs/dmg_boot.asm new file mode 100644 index 000000000..1d282744b --- /dev/null +++ b/thirdparty/SameBoy-old/BootROMs/dmg_boot.asm @@ -0,0 +1,183 @@ +; SameBoy DMG bootstrap ROM + +INCLUDE "hardware.inc" + +SECTION "BootCode", ROM0[$0] +Start: +; Init stack pointer + ld sp, $fffe + +; Clear memory VRAM + ld hl, $8000 + +.clearVRAMLoop + ldi [hl], a + bit 5, h + jr z, .clearVRAMLoop + +; Init Audio + ld a, $80 + ldh [rNR52], a + ldh [rNR11], a + ld a, $f3 + ldh [rNR12], a + ldh [rNR51], a + ld a, $77 + ldh [rNR50], a + +; Init BG palette + ld a, $54 + ldh [rBGP], a + +; Load logo from ROM. +; A nibble represents a 4-pixels line, 2 bytes represent a 4x4 tile, scaled to 8x8. +; Tiles are ordered left to right, top to bottom. + ld de, $104 ; Logo start + ld hl, $8010 ; This is where we load the tiles in VRAM + +.loadLogoLoop + ld a, [de] ; Read 2 rows + ld b, a + call DoubleBitsAndWriteRow + call DoubleBitsAndWriteRow + inc de + ld a, e + xor $34 ; End of logo + jr nz, .loadLogoLoop + +; Load trademark symbol + ld de, TrademarkSymbol + ld c,$08 +.loadTrademarkSymbolLoop: + ld a,[de] + inc de + ldi [hl],a + inc hl + dec c + jr nz, .loadTrademarkSymbolLoop + +; Set up tilemap + ld a,$19 ; Trademark symbol + ld [$9910], a ; ... put in the superscript position + ld hl,$992f ; Bottom right corner of the logo + ld c,$c ; Tiles in a logo row +.tilemapLoop + dec a + jr z, .tilemapDone + ldd [hl], a + dec c + jr nz, .tilemapLoop + ld l,$0f ; Jump to top row + jr .tilemapLoop +.tilemapDone + + ld a, 30 + ldh [rSCY], a + + ; Turn on LCD + ld a, $91 + ldh [rLCDC], a + + ld d, (-119) & $FF + ld c, 15 + +.animate + call WaitFrame + ld a, d + sra a + sra a + ldh [rSCY], a + ld a, d + add c + ld d, a + ld a, c + cp 8 + jr nz, .noPaletteChange + ld a, $A8 + ldh [rBGP], a +.noPaletteChange + dec c + jr nz, .animate + ld a, $fc + ldh [rBGP], a + + ; Play first sound + ld a, $83 + call PlaySound + ld b, 5 + call WaitBFrames + ; Play second sound + ld a, $c1 + call PlaySound + + + +; Wait ~1 second + ld b, 60 + call WaitBFrames + +; Set registers to match the original DMG boot +IF DEF(MGB) + ld hl, $FFB0 +ELSE + ld hl, $01B0 +ENDC + push hl + pop af + ld hl, $014D + ld bc, $0013 + ld de, $00D8 + +; Boot the game + jp BootGame + + +DoubleBitsAndWriteRow: +; Double the most significant 4 bits, b is shifted by 4 + ld a, 4 + ld c, 0 +.doubleCurrentBit + sla b + push af + rl c + pop af + rl c + dec a + jr nz, .doubleCurrentBit + ld a, c +; Write as two rows + ldi [hl], a + inc hl + ldi [hl], a + inc hl + ret + +WaitFrame: + push hl + ld hl, $FF0F + res 0, [hl] +.wait + bit 0, [hl] + jr z, .wait + pop hl + ret + +WaitBFrames: + call WaitFrame + dec b + jr nz, WaitBFrames + ret + +PlaySound: + ldh [rNR13], a + ld a, $87 + ldh [rNR14], a + ret + + +TrademarkSymbol: +db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c + +SECTION "BootGame", ROM0[$fe] +BootGame: + ldh [rBANK], a ; unmap boot ROM \ No newline at end of file diff --git a/thirdparty/SameBoy-old/BootROMs/hardware.inc b/thirdparty/SameBoy-old/BootROMs/hardware.inc new file mode 100644 index 000000000..ca57bcd6a --- /dev/null +++ b/thirdparty/SameBoy-old/BootROMs/hardware.inc @@ -0,0 +1,919 @@ +;* +;* Gameboy Hardware definitions +;* +;* Based on Jones' hardware.inc +;* And based on Carsten Sorensen's ideas. +;* +;* Rev 1.1 - 15-Jul-97 : Added define check +;* Rev 1.2 - 18-Jul-97 : Added revision check macro +;* Rev 1.3 - 19-Jul-97 : Modified for RGBASM V1.05 +;* Rev 1.4 - 27-Jul-97 : Modified for new subroutine prefixes +;* Rev 1.5 - 15-Aug-97 : Added _HRAM, PAD, CART defines +;* : and Nintendo Logo +;* Rev 1.6 - 30-Nov-97 : Added rDIV, rTIMA, rTMA, & rTAC +;* Rev 1.7 - 31-Jan-98 : Added _SCRN0, _SCRN1 +;* Rev 1.8 - 15-Feb-98 : Added rSB, rSC +;* Rev 1.9 - 16-Feb-98 : Converted I/O registers to $FFXX format +;* Rev 2.0 - : Added GBC registers +;* Rev 2.1 - : Added MBC5 & cart RAM enable/disable defines +;* Rev 2.2 - : Fixed NR42,NR43, & NR44 equates +;* Rev 2.3 - : Fixed incorrect _HRAM equate +;* Rev 2.4 - 27-Apr-13 : Added some cart defines (AntonioND) +;* Rev 2.5 - 03-May-15 : Fixed format (AntonioND) +;* Rev 2.6 - 09-Apr-16 : Added GBC OAM and cart defines (AntonioND) +;* Rev 2.7 - 19-Jan-19 : Added rPCMXX (ISSOtm) +;* Rev 2.8 - 03-Feb-19 : Added audio registers flags (Álvaro Cuesta) +;* Rev 2.9 - 28-Feb-20 : Added utility rP1 constants +;* Rev 3.0 - 27-Aug-20 : Register ordering, byte-based sizes, OAM additions, general cleanup (Blitter Object) + +; If all of these are already defined, don't do it again. + + IF !DEF(HARDWARE_INC) +HARDWARE_INC = 1 + +rev_Check_hardware_inc : MACRO +;NOTE: REVISION NUMBER CHANGES MUST BE ADDED +;TO SECOND PARAMETER IN FOLLOWING LINE. + IF \1 > 3.0 ;PUT REVISION NUMBER HERE + WARN "Version \1 or later of 'hardware.inc' is required." + ENDC +ENDM + +_VRAM EQU $8000 ; $8000->$9FFF +_VRAM8000 EQU _VRAM +_VRAM8800 EQU _VRAM+$800 +_VRAM9000 EQU _VRAM+$1000 +_SCRN0 EQU $9800 ; $9800->$9BFF +_SCRN1 EQU $9C00 ; $9C00->$9FFF +_SRAM EQU $A000 ; $A000->$BFFF +_RAM EQU $C000 ; $C000->$CFFF / $C000->$DFFF +_RAMBANK EQU $D000 ; $D000->$DFFF +_OAMRAM EQU $FE00 ; $FE00->$FE9F +_IO EQU $FF00 ; $FF00->$FF7F,$FFFF +_AUD3WAVERAM EQU $FF30 ; $FF30->$FF3F +_HRAM EQU $FF80 ; $FF80->$FFFE + +; *** MBC5 Equates *** + +rRAMG EQU $0000 ; $0000->$1fff +rROMB0 EQU $2000 ; $2000->$2fff +rROMB1 EQU $3000 ; $3000->$3fff - If more than 256 ROM banks are present. +rRAMB EQU $4000 ; $4000->$5fff - Bit 3 enables rumble (if present) + + +;*************************************************************************** +;* +;* Custom registers +;* +;*************************************************************************** + +; -- +; -- P1 ($FF00) +; -- Register for reading joy pad info. (R/W) +; -- +rP1 EQU $FF00 + +P1F_5 EQU %00100000 ; P15 out port, set to 0 to get buttons +P1F_4 EQU %00010000 ; P14 out port, set to 0 to get dpad +P1F_3 EQU %00001000 ; P13 in port +P1F_2 EQU %00000100 ; P12 in port +P1F_1 EQU %00000010 ; P11 in port +P1F_0 EQU %00000001 ; P10 in port + +P1F_GET_DPAD EQU P1F_5 +P1F_GET_BTN EQU P1F_4 +P1F_GET_NONE EQU P1F_4 | P1F_5 + + +; -- +; -- SB ($FF01) +; -- Serial Transfer Data (R/W) +; -- +rSB EQU $FF01 + + +; -- +; -- SC ($FF02) +; -- Serial I/O Control (R/W) +; -- +rSC EQU $FF02 + + +; -- +; -- DIV ($FF04) +; -- Divider register (R/W) +; -- +rDIV EQU $FF04 + + +; -- +; -- TIMA ($FF05) +; -- Timer counter (R/W) +; -- +rTIMA EQU $FF05 + + +; -- +; -- TMA ($FF06) +; -- Timer modulo (R/W) +; -- +rTMA EQU $FF06 + + +; -- +; -- TAC ($FF07) +; -- Timer control (R/W) +; -- +rTAC EQU $FF07 + +TACF_START EQU %00000100 +TACF_STOP EQU %00000000 +TACF_4KHZ EQU %00000000 +TACF_16KHZ EQU %00000011 +TACF_65KHZ EQU %00000010 +TACF_262KHZ EQU %00000001 + + +; -- +; -- IF ($FF0F) +; -- Interrupt Flag (R/W) +; -- +rIF EQU $FF0F + + +; -- +; -- AUD1SWEEP/NR10 ($FF10) +; -- Sweep register (R/W) +; -- +; -- Bit 6-4 - Sweep Time +; -- Bit 3 - Sweep Increase/Decrease +; -- 0: Addition (frequency increases???) +; -- 1: Subtraction (frequency increases???) +; -- Bit 2-0 - Number of sweep shift (# 0-7) +; -- Sweep Time: (n*7.8ms) +; -- +rNR10 EQU $FF10 +rAUD1SWEEP EQU rNR10 + +AUD1SWEEP_UP EQU %00000000 +AUD1SWEEP_DOWN EQU %00001000 + + +; -- +; -- AUD1LEN/NR11 ($FF11) +; -- Sound length/Wave pattern duty (R/W) +; -- +; -- Bit 7-6 - Wave Pattern Duty (00:12.5% 01:25% 10:50% 11:75%) +; -- Bit 5-0 - Sound length data (# 0-63) +; -- +rNR11 EQU $FF11 +rAUD1LEN EQU rNR11 + + +; -- +; -- AUD1ENV/NR12 ($FF12) +; -- Envelope (R/W) +; -- +; -- Bit 7-4 - Initial value of envelope +; -- Bit 3 - Envelope UP/DOWN +; -- 0: Decrease +; -- 1: Range of increase +; -- Bit 2-0 - Number of envelope sweep (# 0-7) +; -- +rNR12 EQU $FF12 +rAUD1ENV EQU rNR12 + + +; -- +; -- AUD1LOW/NR13 ($FF13) +; -- Frequency low byte (W) +; -- +rNR13 EQU $FF13 +rAUD1LOW EQU rNR13 + + +; -- +; -- AUD1HIGH/NR14 ($FF14) +; -- Frequency high byte (W) +; -- +; -- Bit 7 - Initial (when set, sound restarts) +; -- Bit 6 - Counter/consecutive selection +; -- Bit 2-0 - Frequency's higher 3 bits +; -- +rNR14 EQU $FF14 +rAUD1HIGH EQU rNR14 + + +; -- +; -- AUD2LEN/NR21 ($FF16) +; -- Sound Length; Wave Pattern Duty (R/W) +; -- +; -- see AUD1LEN for info +; -- +rNR21 EQU $FF16 +rAUD2LEN EQU rNR21 + + +; -- +; -- AUD2ENV/NR22 ($FF17) +; -- Envelope (R/W) +; -- +; -- see AUD1ENV for info +; -- +rNR22 EQU $FF17 +rAUD2ENV EQU rNR22 + + +; -- +; -- AUD2LOW/NR23 ($FF18) +; -- Frequency low byte (W) +; -- +rNR23 EQU $FF18 +rAUD2LOW EQU rNR23 + + +; -- +; -- AUD2HIGH/NR24 ($FF19) +; -- Frequency high byte (W) +; -- +; -- see AUD1HIGH for info +; -- +rNR24 EQU $FF19 +rAUD2HIGH EQU rNR24 + + +; -- +; -- AUD3ENA/NR30 ($FF1A) +; -- Sound on/off (R/W) +; -- +; -- Bit 7 - Sound ON/OFF (1=ON,0=OFF) +; -- +rNR30 EQU $FF1A +rAUD3ENA EQU rNR30 + + +; -- +; -- AUD3LEN/NR31 ($FF1B) +; -- Sound length (R/W) +; -- +; -- Bit 7-0 - Sound length +; -- +rNR31 EQU $FF1B +rAUD3LEN EQU rNR31 + + +; -- +; -- AUD3LEVEL/NR32 ($FF1C) +; -- Select output level +; -- +; -- Bit 6-5 - Select output level +; -- 00: 0/1 (mute) +; -- 01: 1/1 +; -- 10: 1/2 +; -- 11: 1/4 +; -- +rNR32 EQU $FF1C +rAUD3LEVEL EQU rNR32 + + +; -- +; -- AUD3LOW/NR33 ($FF1D) +; -- Frequency low byte (W) +; -- +; -- see AUD1LOW for info +; -- +rNR33 EQU $FF1D +rAUD3LOW EQU rNR33 + + +; -- +; -- AUD3HIGH/NR34 ($FF1E) +; -- Frequency high byte (W) +; -- +; -- see AUD1HIGH for info +; -- +rNR34 EQU $FF1E +rAUD3HIGH EQU rNR34 + + +; -- +; -- AUD4LEN/NR41 ($FF20) +; -- Sound length (R/W) +; -- +; -- Bit 5-0 - Sound length data (# 0-63) +; -- +rNR41 EQU $FF20 +rAUD4LEN EQU rNR41 + + +; -- +; -- AUD4ENV/NR42 ($FF21) +; -- Envelope (R/W) +; -- +; -- see AUD1ENV for info +; -- +rNR42 EQU $FF21 +rAUD4ENV EQU rNR42 + + +; -- +; -- AUD4POLY/NR43 ($FF22) +; -- Polynomial counter (R/W) +; -- +; -- Bit 7-4 - Selection of the shift clock frequency of the (scf) +; -- polynomial counter (0000-1101) +; -- freq=drf*1/2^scf (not sure) +; -- Bit 3 - Selection of the polynomial counter's step +; -- 0: 15 steps +; -- 1: 7 steps +; -- Bit 2-0 - Selection of the dividing ratio of frequencies (drf) +; -- 000: f/4 001: f/8 010: f/16 011: f/24 +; -- 100: f/32 101: f/40 110: f/48 111: f/56 (f=4.194304 Mhz) +; -- +rNR43 EQU $FF22 +rAUD4POLY EQU rNR43 + + +; -- +; -- AUD4GO/NR44 ($FF23) +; -- +; -- Bit 7 - Inital +; -- Bit 6 - Counter/consecutive selection +; -- +rNR44 EQU $FF23 +rAUD4GO EQU rNR44 + + +; -- +; -- AUDVOL/NR50 ($FF24) +; -- Channel control / ON-OFF / Volume (R/W) +; -- +; -- Bit 7 - Vin->SO2 ON/OFF (Vin??) +; -- Bit 6-4 - SO2 output level (volume) (# 0-7) +; -- Bit 3 - Vin->SO1 ON/OFF (Vin??) +; -- Bit 2-0 - SO1 output level (volume) (# 0-7) +; -- +rNR50 EQU $FF24 +rAUDVOL EQU rNR50 + +AUDVOL_VIN_LEFT EQU %10000000 ; SO2 +AUDVOL_VIN_RIGHT EQU %00001000 ; SO1 + + +; -- +; -- AUDTERM/NR51 ($FF25) +; -- Selection of Sound output terminal (R/W) +; -- +; -- Bit 7 - Output sound 4 to SO2 terminal +; -- Bit 6 - Output sound 3 to SO2 terminal +; -- Bit 5 - Output sound 2 to SO2 terminal +; -- Bit 4 - Output sound 1 to SO2 terminal +; -- Bit 3 - Output sound 4 to SO1 terminal +; -- Bit 2 - Output sound 3 to SO1 terminal +; -- Bit 1 - Output sound 2 to SO1 terminal +; -- Bit 0 - Output sound 0 to SO1 terminal +; -- +rNR51 EQU $FF25 +rAUDTERM EQU rNR51 + +; SO2 +AUDTERM_4_LEFT EQU %10000000 +AUDTERM_3_LEFT EQU %01000000 +AUDTERM_2_LEFT EQU %00100000 +AUDTERM_1_LEFT EQU %00010000 +; SO1 +AUDTERM_4_RIGHT EQU %00001000 +AUDTERM_3_RIGHT EQU %00000100 +AUDTERM_2_RIGHT EQU %00000010 +AUDTERM_1_RIGHT EQU %00000001 + + +; -- +; -- AUDENA/NR52 ($FF26) +; -- Sound on/off (R/W) +; -- +; -- Bit 7 - All sound on/off (sets all audio regs to 0!) +; -- Bit 3 - Sound 4 ON flag (read only) +; -- Bit 2 - Sound 3 ON flag (read only) +; -- Bit 1 - Sound 2 ON flag (read only) +; -- Bit 0 - Sound 1 ON flag (read only) +; -- +rNR52 EQU $FF26 +rAUDENA EQU rNR52 + +AUDENA_ON EQU %10000000 +AUDENA_OFF EQU %00000000 ; sets all audio regs to 0! + + +; -- +; -- LCDC ($FF40) +; -- LCD Control (R/W) +; -- +rLCDC EQU $FF40 + +LCDCF_OFF EQU %00000000 ; LCD Control Operation +LCDCF_ON EQU %10000000 ; LCD Control Operation +LCDCF_WIN9800 EQU %00000000 ; Window Tile Map Display Select +LCDCF_WIN9C00 EQU %01000000 ; Window Tile Map Display Select +LCDCF_WINOFF EQU %00000000 ; Window Display +LCDCF_WINON EQU %00100000 ; Window Display +LCDCF_BG8800 EQU %00000000 ; BG & Window Tile Data Select +LCDCF_BG8000 EQU %00010000 ; BG & Window Tile Data Select +LCDCF_BG9800 EQU %00000000 ; BG Tile Map Display Select +LCDCF_BG9C00 EQU %00001000 ; BG Tile Map Display Select +LCDCF_OBJ8 EQU %00000000 ; OBJ Construction +LCDCF_OBJ16 EQU %00000100 ; OBJ Construction +LCDCF_OBJOFF EQU %00000000 ; OBJ Display +LCDCF_OBJON EQU %00000010 ; OBJ Display +LCDCF_BGOFF EQU %00000000 ; BG Display +LCDCF_BGON EQU %00000001 ; BG Display +; "Window Character Data Select" follows BG + + +; -- +; -- STAT ($FF41) +; -- LCDC Status (R/W) +; -- +rSTAT EQU $FF41 + +STATF_LYC EQU %01000000 ; LYC=LY Coincidence (Selectable) +STATF_MODE10 EQU %00100000 ; Mode 10 +STATF_MODE01 EQU %00010000 ; Mode 01 (V-Blank) +STATF_MODE00 EQU %00001000 ; Mode 00 (H-Blank) +STATF_LYCF EQU %00000100 ; Coincidence Flag +STATF_HBL EQU %00000000 ; H-Blank +STATF_VBL EQU %00000001 ; V-Blank +STATF_OAM EQU %00000010 ; OAM-RAM is used by system +STATF_LCD EQU %00000011 ; Both OAM and VRAM used by system +STATF_BUSY EQU %00000010 ; When set, VRAM access is unsafe + + +; -- +; -- SCY ($FF42) +; -- Scroll Y (R/W) +; -- +rSCY EQU $FF42 + + +; -- +; -- SCY ($FF43) +; -- Scroll X (R/W) +; -- +rSCX EQU $FF43 + + +; -- +; -- LY ($FF44) +; -- LCDC Y-Coordinate (R) +; -- +; -- Values range from 0->153. 144->153 is the VBlank period. +; -- +rLY EQU $FF44 + + +; -- +; -- LYC ($FF45) +; -- LY Compare (R/W) +; -- +; -- When LY==LYC, STATF_LYCF will be set in STAT +; -- +rLYC EQU $FF45 + + +; -- +; -- DMA ($FF46) +; -- DMA Transfer and Start Address (W) +; -- +rDMA EQU $FF46 + + +; -- +; -- BGP ($FF47) +; -- BG Palette Data (W) +; -- +; -- Bit 7-6 - Intensity for %11 +; -- Bit 5-4 - Intensity for %10 +; -- Bit 3-2 - Intensity for %01 +; -- Bit 1-0 - Intensity for %00 +; -- +rBGP EQU $FF47 + + +; -- +; -- OBP0 ($FF48) +; -- Object Palette 0 Data (W) +; -- +; -- See BGP for info +; -- +rOBP0 EQU $FF48 + + +; -- +; -- OBP1 ($FF49) +; -- Object Palette 1 Data (W) +; -- +; -- See BGP for info +; -- +rOBP1 EQU $FF49 + + +; -- +; -- WY ($FF4A) +; -- Window Y Position (R/W) +; -- +; -- 0 <= WY <= 143 +; -- When WY = 0, the window is displayed from the top edge of the LCD screen. +; -- +rWY EQU $FF4A + + +; -- +; -- WX ($FF4B) +; -- Window X Position (R/W) +; -- +; -- 7 <= WX <= 166 +; -- When WX = 7, the window is displayed from the left edge of the LCD screen. +; -- Values of 0-6 and 166 are unreliable due to hardware bugs. +; -- +rWX EQU $FF4B + + +; -- +; -- SPEED ($FF4D) +; -- Select CPU Speed (R/W) +; -- +rKEY1 EQU $FF4D +rSPD EQU rKEY1 + +KEY1F_DBLSPEED EQU %10000000 ; 0=Normal Speed, 1=Double Speed (R) +KEY1F_PREPARE EQU %00000001 ; 0=No, 1=Prepare (R/W) + + +; -- +; -- VBK ($FF4F) +; -- Select Video RAM Bank (R/W) +; -- +; -- Bit 0 - Bank Specification (0: Specify Bank 0; 1: Specify Bank 1) +; -- +rVBK EQU $FF4F + + +; -- +; -- HDMA1 ($FF51) +; -- High byte for Horizontal Blanking/General Purpose DMA source address (W) +; -- CGB Mode Only +; -- +rHDMA1 EQU $FF51 + + +; -- +; -- HDMA2 ($FF52) +; -- Low byte for Horizontal Blanking/General Purpose DMA source address (W) +; -- CGB Mode Only +; -- +rHDMA2 EQU $FF52 + + +; -- +; -- HDMA3 ($FF53) +; -- High byte for Horizontal Blanking/General Purpose DMA destination address (W) +; -- CGB Mode Only +; -- +rHDMA3 EQU $FF53 + + +; -- +; -- HDMA4 ($FF54) +; -- Low byte for Horizontal Blanking/General Purpose DMA destination address (W) +; -- CGB Mode Only +; -- +rHDMA4 EQU $FF54 + + +; -- +; -- HDMA5 ($FF55) +; -- Transfer length (in tiles minus 1)/mode/start for Horizontal Blanking, General Purpose DMA (R/W) +; -- CGB Mode Only +; -- +rHDMA5 EQU $FF55 + +HDMA5F_MODE_GP EQU %00000000 ; General Purpose DMA (W) +HDMA5F_MODE_HBL EQU %10000000 ; HBlank DMA (W) + +; -- Once DMA has started, use HDMA5F_BUSY to check when the transfer is complete +HDMA5F_BUSY EQU %10000000 ; 0=Busy (DMA still in progress), 1=Transfer complete (R) + + +; -- +; -- RP ($FF56) +; -- Infrared Communications Port (R/W) +; -- +rRP EQU $FF56 + + +; -- +; -- BCPS ($FF68) +; -- Background Color Palette Specification (R/W) +; -- +rBCPS EQU $FF68 + +BCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) + + +; -- +; -- BCPD ($FF69) +; -- Background Color Palette Data (R/W) +; -- +rBCPD EQU $FF69 + + +; -- +; -- OCPS ($FF6A) +; -- Object Color Palette Specification (R/W) +; -- +rOCPS EQU $FF6A + +OCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) + + +; -- +; -- OCPD ($FF6B) +; -- Object Color Palette Data (R/W) +; -- +rOCPD EQU $FF6B + + +; -- +; -- SMBK/SVBK ($FF70) +; -- Select Main RAM Bank (R/W) +; -- +; -- Bit 2-0 - Bank Specification (0,1: Specify Bank 1; 2-7: Specify Banks 2-7) +; -- +rSVBK EQU $FF70 +rSMBK EQU rSVBK + + +; -- +; -- PCM12 ($FF76) +; -- Sound channel 1&2 PCM amplitude (R) +; -- +; -- Bit 7-4 - Copy of sound channel 2's PCM amplitude +; -- Bit 3-0 - Copy of sound channel 1's PCM amplitude +; -- +rPCM12 EQU $FF76 + + +; -- +; -- PCM34 ($FF77) +; -- Sound channel 3&4 PCM amplitude (R) +; -- +; -- Bit 7-4 - Copy of sound channel 4's PCM amplitude +; -- Bit 3-0 - Copy of sound channel 3's PCM amplitude +; -- +rPCM34 EQU $FF77 + + +; -- +; -- IE ($FFFF) +; -- Interrupt Enable (R/W) +; -- +rIE EQU $FFFF + +IEF_HILO EQU %00010000 ; Transition from High to Low of Pin number P10-P13 +IEF_SERIAL EQU %00001000 ; Serial I/O transfer end +IEF_TIMER EQU %00000100 ; Timer Overflow +IEF_LCDC EQU %00000010 ; LCDC (see STAT) +IEF_VBLANK EQU %00000001 ; V-Blank + + +;*************************************************************************** +;* +;* Flags common to multiple sound channels +;* +;*************************************************************************** + +; -- +; -- Square wave duty cycle +; -- +; -- Can be used with AUD1LEN and AUD2LEN +; -- See AUD1LEN for more info +; -- +AUDLEN_DUTY_12_5 EQU %00000000 ; 12.5% +AUDLEN_DUTY_25 EQU %01000000 ; 25% +AUDLEN_DUTY_50 EQU %10000000 ; 50% +AUDLEN_DUTY_75 EQU %11000000 ; 75% + + +; -- +; -- Audio envelope flags +; -- +; -- Can be used with AUD1ENV, AUD2ENV, AUD4ENV +; -- See AUD1ENV for more info +; -- +AUDENV_UP EQU %00001000 +AUDENV_DOWN EQU %00000000 + + +; -- +; -- Audio trigger flags +; -- +; -- Can be used with AUD1HIGH, AUD2HIGH, AUD3HIGH +; -- See AUD1HIGH for more info +; -- + +AUDHIGH_RESTART EQU %10000000 +AUDHIGH_LENGTH_ON EQU %01000000 +AUDHIGH_LENGTH_OFF EQU %00000000 + + +;*************************************************************************** +;* +;* CPU values on bootup (a=type, b=qualifier) +;* +;*************************************************************************** + +BOOTUP_A_DMG EQU $01 ; Dot Matrix Game +BOOTUP_A_CGB EQU $11 ; Color GameBoy +BOOTUP_A_MGB EQU $FF ; Mini GameBoy (Pocket GameBoy) + +; if a=BOOTUP_A_CGB, bit 0 in b can be checked to determine if real CGB or +; other system running in GBC mode +BOOTUP_B_CGB EQU %00000000 +BOOTUP_B_AGB EQU %00000001 ; GBA, GBA SP, Game Boy Player, or New GBA SP + + +;*************************************************************************** +;* +;* Cart related +;* +;*************************************************************************** + +; $0143 Color GameBoy compatibility code +CART_COMPATIBLE_DMG EQU $00 +CART_COMPATIBLE_DMG_GBC EQU $80 +CART_COMPATIBLE_GBC EQU $C0 + +; $0146 GameBoy/Super GameBoy indicator +CART_INDICATOR_GB EQU $00 +CART_INDICATOR_SGB EQU $03 + +; $0147 Cartridge type +CART_ROM EQU $00 +CART_ROM_MBC1 EQU $01 +CART_ROM_MBC1_RAM EQU $02 +CART_ROM_MBC1_RAM_BAT EQU $03 +CART_ROM_MBC2 EQU $05 +CART_ROM_MBC2_BAT EQU $06 +CART_ROM_RAM EQU $08 +CART_ROM_RAM_BAT EQU $09 +CART_ROM_MMM01 EQU $0B +CART_ROM_MMM01_RAM EQU $0C +CART_ROM_MMM01_RAM_BAT EQU $0D +CART_ROM_MBC3_BAT_RTC EQU $0F +CART_ROM_MBC3_RAM_BAT_RTC EQU $10 +CART_ROM_MBC3 EQU $11 +CART_ROM_MBC3_RAM EQU $12 +CART_ROM_MBC3_RAM_BAT EQU $13 +CART_ROM_MBC5 EQU $19 +CART_ROM_MBC5_BAT EQU $1A +CART_ROM_MBC5_RAM_BAT EQU $1B +CART_ROM_MBC5_RUMBLE EQU $1C +CART_ROM_MBC5_RAM_RUMBLE EQU $1D +CART_ROM_MBC5_RAM_BAT_RUMBLE EQU $1E +CART_ROM_MBC7_RAM_BAT_GYRO EQU $22 +CART_ROM_POCKET_CAMERA EQU $FC +CART_ROM_BANDAI_TAMA5 EQU $FD +CART_ROM_HUDSON_HUC3 EQU $FE +CART_ROM_HUDSON_HUC1 EQU $FF + +; $0148 ROM size +; these are kilobytes +CART_ROM_32K EQU $00 ; 2 banks +CART_ROM_64K EQU $01 ; 4 banks +CART_ROM_128K EQU $02 ; 8 banks +CART_ROM_256K EQU $03 ; 16 banks +CART_ROM_512K EQU $04 ; 32 banks +CART_ROM_1024K EQU $05 ; 64 banks +CART_ROM_2048K EQU $06 ; 128 banks +CART_ROM_4096K EQU $07 ; 256 banks +CART_ROM_8192K EQU $08 ; 512 banks +CART_ROM_1152K EQU $52 ; 72 banks +CART_ROM_1280K EQU $53 ; 80 banks +CART_ROM_1536K EQU $54 ; 96 banks + +; $0149 SRAM size +; these are kilobytes +CART_SRAM_NONE EQU 0 +CART_SRAM_2K EQU 1 ; 1 incomplete bank +CART_SRAM_8K EQU 2 ; 1 bank +CART_SRAM_32K EQU 3 ; 4 banks +CART_SRAM_128K EQU 4 ; 16 banks + +CART_SRAM_ENABLE EQU $0A +CART_SRAM_DISABLE EQU $00 + +; $014A Destination code +CART_DEST_JAPANESE EQU $00 +CART_DEST_NON_JAPANESE EQU $01 + + +;*************************************************************************** +;* +;* Keypad related +;* +;*************************************************************************** + +PADF_DOWN EQU $80 +PADF_UP EQU $40 +PADF_LEFT EQU $20 +PADF_RIGHT EQU $10 +PADF_START EQU $08 +PADF_SELECT EQU $04 +PADF_B EQU $02 +PADF_A EQU $01 + +PADB_DOWN EQU $7 +PADB_UP EQU $6 +PADB_LEFT EQU $5 +PADB_RIGHT EQU $4 +PADB_START EQU $3 +PADB_SELECT EQU $2 +PADB_B EQU $1 +PADB_A EQU $0 + + +;*************************************************************************** +;* +;* Screen related +;* +;*************************************************************************** + +SCRN_X EQU 160 ; Width of screen in pixels +SCRN_Y EQU 144 ; Height of screen in pixels +SCRN_X_B EQU 20 ; Width of screen in bytes +SCRN_Y_B EQU 18 ; Height of screen in bytes + +SCRN_VX EQU 256 ; Virtual width of screen in pixels +SCRN_VY EQU 256 ; Virtual height of screen in pixels +SCRN_VX_B EQU 32 ; Virtual width of screen in bytes +SCRN_VY_B EQU 32 ; Virtual height of screen in bytes + + +;*************************************************************************** +;* +;* OAM related +;* +;*************************************************************************** + +; OAM attributes +; each entry in OAM RAM is 4 bytes (sizeof_OAM_ATTRS) +RSRESET +OAMA_Y RB 1 ; y pos +OAMA_X RB 1 ; x pos +OAMA_TILEID RB 1 ; tile id +OAMA_FLAGS RB 1 ; flags (see below) +sizeof_OAM_ATTRS RB 0 + +OAM_COUNT EQU 40 ; number of OAM entries in OAM RAM + +; flags +OAMF_PRI EQU %10000000 ; Priority +OAMF_YFLIP EQU %01000000 ; Y flip +OAMF_XFLIP EQU %00100000 ; X flip +OAMF_PAL0 EQU %00000000 ; Palette number; 0,1 (DMG) +OAMF_PAL1 EQU %00010000 ; Palette number; 0,1 (DMG) +OAMF_BANK0 EQU %00000000 ; Bank number; 0,1 (GBC) +OAMF_BANK1 EQU %00001000 ; Bank number; 0,1 (GBC) + +OAMF_PALMASK EQU %00000111 ; Palette (GBC) + +OAMB_PRI EQU 7 ; Priority +OAMB_YFLIP EQU 6 ; Y flip +OAMB_XFLIP EQU 5 ; X flip +OAMB_PAL1 EQU 4 ; Palette number; 0,1 (DMG) +OAMB_BANK1 EQU 3 ; Bank number; 0,1 (GBC) + + +;* +;* Nintendo scrolling logo +;* (Code won't work on a real GameBoy) +;* (if next lines are altered.) +NINTENDO_LOGO : MACRO + DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D + DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 + DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E +ENDM + +; SameBoy additions +rKEY0 EQU $FF4C +rBANK EQU $FF50 +rOPRI EQU $FF6C + +rJOYP EQU rP1 +rBGPI EQU rBCPS +rBGPD EQU rBCPD +rOBPI EQU rOCPS +rOBPD EQU rOCPD + + ENDC ;HARDWARE_INC + diff --git a/thirdparty/SameBoy-old/BootROMs/mgb_boot.asm b/thirdparty/SameBoy-old/BootROMs/mgb_boot.asm new file mode 100644 index 000000000..3a98aefd8 --- /dev/null +++ b/thirdparty/SameBoy-old/BootROMs/mgb_boot.asm @@ -0,0 +1,2 @@ +MGB EQU 1 +include "dmg_boot.asm" \ No newline at end of file diff --git a/thirdparty/SameBoy-old/BootROMs/pb12.c b/thirdparty/SameBoy-old/BootROMs/pb12.c new file mode 100644 index 000000000..cfedf6bb1 --- /dev/null +++ b/thirdparty/SameBoy-old/BootROMs/pb12.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include +#include + +void opts(uint8_t byte, uint8_t *options) +{ + *(options++) = byte | ((byte << 1) & 0xff); + *(options++) = byte & (byte << 1); + *(options++) = byte | ((byte >> 1) & 0xff); + *(options++) = byte & (byte >> 1); +} + +void write_all(int fd, const void *buf, size_t count) { + while (count) { + ssize_t written = write(fd, buf, count); + if (written < 0) { + fprintf(stderr, "write"); + exit(1); + } + count -= written; + buf += written; + } +} + +int main() +{ + static uint8_t source[0x4000]; + size_t size = read(STDIN_FILENO, &source, sizeof(source)); + unsigned pos = 0; + assert(size <= 0x4000); + while (size && source[size - 1] == 0) { + size--; + } + + uint8_t literals[8]; + size_t literals_size = 0; + unsigned bits = 0; + unsigned control = 0; + unsigned prev[2] = {-1, -1}; // Unsigned to allow "not set" values + + while (true) { + + uint8_t byte = 0; + if (pos == size){ + if (bits == 0) break; + } + else { + byte = source[pos++]; + } + + if (byte == prev[0] || byte == prev[1]) { + bits += 2; + control <<= 1; + control |= 1; + control <<= 1; + if (byte == prev[1]) { + control |= 1; + } + } + else { + bits += 2; + control <<= 2; + uint8_t options[4]; + opts(prev[1], options); + bool found = false; + for (unsigned i = 0; i < 4; i++) { + if (options[i] == byte) { + // 01 = modify + control |= 1; + + bits += 2; + control <<= 2; + control |= i; + found = true; + break; + } + } + if (!found) { + literals[literals_size++] = byte; + } + } + + prev[0] = prev[1]; + prev[1] = byte; + if (bits >= 8) { + uint8_t outctl = control >> (bits - 8); + assert(outctl != 1); + write_all(STDOUT_FILENO, &outctl, 1); + write_all(STDOUT_FILENO, literals, literals_size); + bits -= 8; + control &= (1 << bits) - 1; + literals_size = 0; + } + } + uint8_t end_byte = 1; + write_all(STDOUT_FILENO, &end_byte, 1); + + return 0; +} diff --git a/thirdparty/SameBoy-old/BootROMs/sgb2_boot.asm b/thirdparty/SameBoy-old/BootROMs/sgb2_boot.asm new file mode 100644 index 000000000..1c3d85847 --- /dev/null +++ b/thirdparty/SameBoy-old/BootROMs/sgb2_boot.asm @@ -0,0 +1,2 @@ +SGB2 EQU 1 +include "sgb_boot.asm" \ No newline at end of file diff --git a/thirdparty/SameBoy-old/BootROMs/sgb_boot.asm b/thirdparty/SameBoy-old/BootROMs/sgb_boot.asm new file mode 100644 index 000000000..e0928616a --- /dev/null +++ b/thirdparty/SameBoy-old/BootROMs/sgb_boot.asm @@ -0,0 +1,215 @@ +; SameBoy SGB bootstrap ROM + +INCLUDE "hardware.inc" + +SECTION "BootCode", ROM0[$0] +Start: +; Init stack pointer + ld sp, $fffe + +; Clear memory VRAM + ld hl, $8000 + +.clearVRAMLoop + ldi [hl], a + bit 5, h + jr z, .clearVRAMLoop + +; Init Audio + ld a, $80 + ldh [rNR52], a + ldh [rNR11], a + ld a, $f3 + ldh [rNR12], a + ldh [rNR51], a + ld a, $77 + ldh [rNR50], a + +; Init BG palette to white + ld a, $0 + ldh [rBGP], a + +; Load logo from ROM. +; A nibble represents a 4-pixels line, 2 bytes represent a 4x4 tile, scaled to 8x8. +; Tiles are ordered left to right, top to bottom. + ld de, $104 ; Logo start + ld hl, $8010 ; This is where we load the tiles in VRAM + +.loadLogoLoop + ld a, [de] ; Read 2 rows + ld b, a + call DoubleBitsAndWriteRow + call DoubleBitsAndWriteRow + inc de + ld a, e + xor $34 ; End of logo + jr nz, .loadLogoLoop + +; Load trademark symbol + ld de, TrademarkSymbol + ld c,$08 +.loadTrademarkSymbolLoop: + ld a,[de] + inc de + ldi [hl],a + inc hl + dec c + jr nz, .loadTrademarkSymbolLoop + +; Set up tilemap + ld a,$19 ; Trademark symbol + ld [$9910], a ; ... put in the superscript position + ld hl,$992f ; Bottom right corner of the logo + ld c,$c ; Tiles in a logo row +.tilemapLoop + dec a + jr z, .tilemapDone + ldd [hl], a + dec c + jr nz, .tilemapLoop + ld l,$0f ; Jump to top row + jr .tilemapLoop +.tilemapDone + + ; Turn on LCD + ld a, $91 + ldh [rLCDC], a + + ld a, $f1 ; Packet magic, increases by 2 for every packet + ldh [_HRAM], a + ld hl, $104 ; Header start + + xor a + ld c, a ; JOYP + +.sendCommand + xor a + ld [c], a + ld a, $30 + ld [c], a + + ldh a, [_HRAM] + call SendByte + push hl + ld b, $e + ld d, 0 + +.checksumLoop + call ReadHeaderByte + add d + ld d, a + dec b + jr nz, .checksumLoop + + ; Send checksum + call SendByte + pop hl + + ld b, $e +.sendLoop + call ReadHeaderByte + call SendByte + dec b + jr nz, .sendLoop + + ; Done bit + ld a, $20 + ld [c], a + ld a, $30 + ld [c], a + + ; Update command + ldh a, [_HRAM] + add 2 + ldh [_HRAM], a + + ld a, $58 + cp l + jr nz, .sendCommand + + ; Write to sound registers for DMG compatibility + ld c, $13 + ld a, $c1 + ld [c], a + inc c + ld a, 7 + ld [c], a + + ; Init BG palette + ld a, $fc + ldh [rBGP], a + +; Set registers to match the original SGB boot +IF DEF(SGB2) + ld a, $FF +ELSE + ld a, 1 +ENDC + ld hl, $c060 + +; Boot the game + jp BootGame + +ReadHeaderByte: + ld a, $4F + cp l + jr c, .zero + ld a, [hli] + ret +.zero: + inc hl + xor a + ret + +SendByte: + ld e, a + ld d, 8 +.loop + ld a, $10 + rr e + jr c, .zeroBit + add a ; 10 -> 20 +.zeroBit + ld [c], a + ld a, $30 + ld [c], a + dec d + ret z + jr .loop + +DoubleBitsAndWriteRow: +; Double the most significant 4 bits, b is shifted by 4 + ld a, 4 + ld c, 0 +.doubleCurrentBit + sla b + push af + rl c + pop af + rl c + dec a + jr nz, .doubleCurrentBit + ld a, c +; Write as two rows + ldi [hl], a + inc hl + ldi [hl], a + inc hl + ret + +WaitFrame: + push hl + ld hl, $FF0F + res 0, [hl] +.wait + bit 0, [hl] + jr z, .wait + pop hl + ret + +TrademarkSymbol: +db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c + +SECTION "BootGame", ROM0[$fe] +BootGame: + ldh [rBANK], a \ No newline at end of file diff --git a/thirdparty/SameBoy-old/CHANGES.md b/thirdparty/SameBoy-old/CHANGES.md new file mode 100644 index 000000000..b94aec4c7 --- /dev/null +++ b/thirdparty/SameBoy-old/CHANGES.md @@ -0,0 +1 @@ +See https://sameboy.github.io/changelog/ \ No newline at end of file diff --git a/thirdparty/SameBoy-old/CONTRIBUTING.md b/thirdparty/SameBoy-old/CONTRIBUTING.md new file mode 100644 index 000000000..94627d1a5 --- /dev/null +++ b/thirdparty/SameBoy-old/CONTRIBUTING.md @@ -0,0 +1,79 @@ +# SameBoy Coding and Contribution Guidelines + +## Issues + +GitHub Issues are the most effective way to report a bug or request a feature in SameBoy. When reporting a bug, make sure you use the latest stable release, and make sure you mention the SameBoy frontend (Cocoa, SDL, Libretro) and operating system you're using. If you're using Linux/BSD/etc, or you build your own copy of SameBoy for another reason, give as much details as possible on your environment. + +If your bug involves a crash, please attach a crash log or a core dump. If you're using Linux/BSD/etc, or if you're using the Libretro core, please attach the `sameboy` binary (or `libretro_sameboy` library) in that case. + +If your bug is a regression, it'd be extremely helpful if you can report the the first affected version. You get extra credits if you use `git bisect` to point the exact breaking commit. + +If your bug is an emulation bug (Such as a failing test ROM), and you have access to a Game Boy you can test on, please confirm SameBoy is indeed behaving differently from hardware, and report both the emulated model and revision in SameBoy, and the hardware revision you're testing on. + +If your issue is a feature request, demonstrating use cases can help me better prioritize it. + +## Pull Requests + +To allow quicker integration into SameBoy's master branch, contributors are asked to follow SameBoy's style and coding guidelines. Keep in mind that despite the seemingly strict guidelines, all pull requests are welcome – not following the guidelines does not mean your pull request will not be accepted, but it will require manual tweaks from my side for integrating. + +### Languages and Compilers + +SameBoy's core, SDL frontend, Libretro frontend, and automatic tester (Folders `Core`, `SDL` & `OpenDialog`, `libretro`, and `Tester`; respectively) are all written in C11. The Cocoa frontend, SameBoy's fork of Hex Fiend, JoyKit and the Quick Look previewer (Folders `Cocoa`, `HexFiend`, `JoyKit` and `QuickLook`; respectively) are all written in ARC-enabled Objective-C. The SameBoot ROMs (Under `BootROMs`) are written in rgbds-flavor SM83 assembly, with build tools in C11. The shaders (inside `Shaders`) are written in a polyglot GLSL and Metal style, with a few GLSL- and Metal-specific sources. The build system uses standalone Make, in the GNU flavor. Avoid adding new languages (C++, Swift, Python, CMake...) to any of the existing sub-projects. + +SameBoy's main target compiler is Clang, but GCC is also supported when targeting Linux and Libretro. Other compilers (e.g. MSVC) are not supported, and unless there's a good reason, there's no need to go out of your way to add specific support for them. Extensions that are supported by both compilers (Such as `typeof`) may be used if it makes sense. It's OK if you can't test one of these compilers yourself; once you push a commit, the CI bot will let you know if you broke something. + +### Third Party Libraries and Tools + +Avoid adding new required dependencies; run-time and compile-time dependencies alike. Most importantly, avoid linking against GPL licensed libraries (LGPL libraries are fine), so SameBoy can retain its MIT license. + +### Spacing, Indentation and Formatting + +In all files and languages (Other than Makefiles when required), 4 spaces are used for indentation. Unix line endings (`\n`) are used exclusively, even in Windows-specific source files. (`\r` and `\t` shouldn't appear in any source file). Opening braces belong on the same line as their control flow directive, and on their own line when following a function prototype. The `else` keyword always starts on its own line. The `case` keyword is indented relative to its `switch` block, and the code inside a `case` is indented relative to its label. A control flow keyword should have a space between it and the following `(`, commas should follow a space, and operator (except `.` and `->`) should be surrounded by spaces. + +Control flow statements must use `{}`, with the exception of `if` statements that only contain a single `break`, `continue`, or trivial `return` statements. If `{}`s are omitted, the statement must be on the same line as the `if` condition. Functions that do not have any argument must be specified as `(void)`, as mandated by the C standard. The `sizeof` and `typeof` operators should be used as if they're functions (With `()`). `*`, when used to declare pointer types (including functions that return pointers), and when used to dereference a pointer, is attached to the right side (The variable name) – not to the left, and not with spaces on both sides. + +No strict limitations on a line's maximum width, but use your best judgement if you think a statement would benefit from an additional line break. + +Well formatted code example: + +``` +static void my_function(void) +{ + GB_something_t *thing = GB_function(&gb, GB_FLAG_ONE | GB_FLAG_TWO, sizeof(thing)); + if (GB_is_thing(thing)) return; + + switch (*thing) { + case GB_QUACK: + // Something + case GB_DUCK: + // Something else + } +} +``` + +Badly formatted code example: +``` +static void my_function(){ + GB_something_t* thing=GB_function(&gb , GB_FLAG_ONE|GB_FLAG_TWO , sizeof thing); + if( GB_is_thing ( thing ) ) + return; + + switch(* thing) + { + case GB_QUACK: + // Something + case GB_DUCK: + // Something else + } +} +``` + +### Other Coding Conventions + +The primitive types to be used in SameBoy are `unsigned` and `signed` (Without the `int` keyword), the `(u)int*_t` types, `char *` for UTF-8 strings, `double` for non-integer numbers, and `bool` for booleans (Including in Objective-C code, avoid `BOOL`). As long as it's not mandated by a 3rd-party API (e.g. `int` when using file descriptors), avoid using other primitive types. Use `const` whenever possible. + +Most C names should be `lower_case_snake_case`. Constants and macros use `UPPER_CASE_SNAKE_CASE`. Type definitions use a `_t` suffix. Type definitions, as well as non-static (exported) core symbols, should be prefixed with `GB_` (SameBoy's core is intended to be used as a library, so it shouldn't contaminate the global namespace without prefixes). Exported symbols that are only meant to be used by other parts of the core should still get the `GB_` prefix, but their header definition should be inside `#ifdef GB_INTERNAL`. + +For Objective-C naming conventions, use Apple's conventions (Some old Objective-C code mixes these with the C naming convention; new code should use Apple's convention exclusively). The name prefix for SameBoy classes and constants is `GB`. JoyKit's prefix is `JOY`, and Hex Fiend's prefix is `HF`. + +In all languages, prefer long, unambiguous names over short ambiguous ones. diff --git a/thirdparty/SameBoy-old/Cocoa/AppIcon.icns b/thirdparty/SameBoy-old/Cocoa/AppIcon.icns new file mode 100644 index 0000000000000000000000000000000000000000..2a85022a965752735fd24d90c4151a7628a44089 GIT binary patch literal 631345 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 z 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�DD{D78rBqD(fCjB8G$N_$?x7V)2E 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�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

l0T2F!wS$P_Oho(bE zl(OazX^HX#jaVnPikZTWNpIMc5q1MBi=!%gB|duI(`5-*)E*p+H?~`OWN=caytb+i za`Ml4(8^Gwwtzzck7{}mRd5%;oX*f^TI+@OaU&SN_!l2+plgXU^nZW$0?iN0>;L)2 zkMErMtpA?Ow5~iO@9WihI&7J^YXj&p(>mQ2b3$A(aQt!c^?Z(SWKc-9s;0)#v`Xcg%X7~X?Gy0&nn z2&V;yS+?5W_I&8O_Ss-;?Kj2IsJzpeugfmpoc^4c{3$Y}sn&9R=f8Z%FJruRZr=d3 zLS!fE_dYWZOzTDLlNT9;qYd(yrG?U5a}v-fr3rJqwmL3f*>J&awYQvqBKWN$Se({V z#}u%5`KL~IylC@nUJ)}5`f~QMukx#AVqMi51kwG>)olwFkY=Xu`%7XzLyg)9w*^c1 zGz)rEFRE5-(j2zxa9cDS*+9b2n5Lh;uq{f%iRu>7Bn@;}lrd6q3?=Doqj^=2g}}?Q=0zE(c2wX_^3cDKpC&Hu_78Ti zx-O8#Ir46ZT$XwT|C}R@_a9$jAIU~o5IuI$`B2bKw$A2CmG3W0LeRPM&gb)-zvK?w zdsyS}Rh(e|ZuNns*MIxTi~5E!TOGD z8xq@R(vzbQUA@5RQ9ZjqMhr0aj5tZ~BK=D9csWDb&o|?t^)%s!jV%_Bn4q(ZH)*9) zkl<^q3gS!i40>zg27nkjNG;ec($1&sfI>Svs^%qXEOPJntp%hGWOXb{v1;vydk9N;^4~|rZ_B8l#Hxby2`N=TE+Gqju9F{j6x{rIW zUfMG}`{P2G*2Zx_?k8m1Nt?phoR zCI&8g(~w7_C|?@!sQ&1HjAAJt?cqBPCXXpX3*Xl(u@Yz2mKl<^e44TDiv0eQ_1Rf= z)gRHB@cj)*{lgiX@c&KiboZzr;-&{SO7^BOeQ5p-u^@|Al(zZgFpe2}8-=kcyKOx0 zD$yX;CaYiCA$aG1^X7am#Vu=d*uSEK9Vls=rO!mcBneeB-Q}p+UeL%#bm^u~x|)Ce zgT$;Xz>E}5f|Ot|UONA}q7*^bT@YAYVH1Fqj`$7$qXp1|!sZQ83#oX!;4ZXs`5O9% z&@X+cMQW+>N#|Zsf_?Nx{o}7GAvgZOeO3fq`o)O}g`Hr!OaCLA=x{sr2cSLhf%u+a z9LHH}-`hpng^jhd6TC*A1FF>Wjtf??@W2;4KQBBqnpHZ|&g&B+(E?cPD$-;2Z*O*a zIlX)_C%(h_%l`O*62E58O100wN+t$xLD-NT$p{5Kj5;6P;EfRgCZ}>$XuK0#j`KUN z5~@~f!29bif$JH9@{=(ZwaPoEGa*?FS#s=ll)PYgAM`r(QQcwvNFG9Ju>rnP=%LNb zL6J@KG7gj34=xxBeY8wQ9DPKb1xb+SQiV!ebY^(!B+?eD;q#2&ZK399i#H9CuK+Wo zI))u%n>*Fr6a}!Iz-$1Ah-w6w(h_HI+pN_{izD3B8o3_e+P)n`(6P{WG}fYl$`U4-ky(;Hlbbr7BffQR)u54D zM`iH8OQbe9K4cw?zk_Z|u69tyd;l zMA;!aR+GQm0ws3u@Qe($I!GXtt|Gh%38_G8LJFERC8_8t2k8N0JA*BiZz)iJ(je-x z_#S(L@TcJ|eyQ?(DBuuz3YEbXte;wHb$xB_S_W@*Iyz!39xdb{mMxf2LIZSQW?dTO@V11?m zD-9AekU0VgW}*a0ld?iuH4JRJtqlc|;sVJU8Iza{ga(5xELaBXQ9CsoN#u4R58Xxr z!2{HYArQ41H|L2!_{*TEj3{OnGI$hU>y)9(JjesWX?aJCk0dLjEn}M!Ex>i1sc^MF zK9N|~$=VUHh!x@CKzYE{bN^vpsRPAzb}xg-s+$?!a&kOh#Saw#Ionq*15&!jM}Lpc zTTBAP$_~1d9PGT)ETzdtTgSc%-;JNx^}fMU43SPYi14`F-jU&Qk9Cfn?WS{ssjcW! zLt|!WO)_CT_{95SXJ3JDof%W}@Z~Tph(()3Z8u&M7C8zybJnCq`xfxO-}2gsy70{I z-q$*zAHc}&iH@|pf3rD1-M!6Ok)S@!Jpgh3Vz<`Pe&-g;d@a{`|Se8$eqL!@K_mCr!^_M^zPO_i|Jy| ze@T(*cKP009*0*K8^kFqTh}{7)0^spVn`Bsu0Q1V0`_qleX|z;b;JBgjJ;9kI)`ov zk4@C(gwER}-x-^{xm##GZS*@~-(V3DJ-!vZr`1b1TJlhwR>^5)zJK$2axD~CE%}nT zqct$e4?f@fZFqx)n;iDEs$aS3F*LU)v~XxcNzE4>s`VlJ-%Cvr364V^xPa+D{TjE) zb(4(;26=fxykfTuKjmjk6tkB`BqCVfpp(b#C00}5O^~sn;ZyP z7u1e;=!)BU8O1fEb4L^YWcMWC<>^2NdqeN##6G_o1+kgTr$Ahuo~N^_6mm$xDJ6FI zHblbuS*#GC_>26_5of}FU);%T1lQT4^*;2SL6yv=5k_v~{C9B<`MK1R!Jv8$6Lwya z4)O47(?s*$vSDDhue03MEd+T?WQ6A+q3s8wN4b?b3uFE5fGU5rb}pfa_kL@U0+CPT zPj|(o;yLj5mcA!OXJh^d#f=`@*Wqee0xVEt5W6YKV_me&;%=Ckn3eOJ52F(D;ElhD z3;`L>PqrC}f|HTAbbtEC<-eg78GSpg1AdZ|vHI&O z%m>rWy}+yq#0^-3>gO+9^|?{5v0~FuiC1F$f4%wIxBPCx!lq{X(LgDT$yV*|u=w65 z5agZ8d1ICDw#mJ@dhi45@IvTci}{u*y1t#;uEg)QR9E1bb~ZfrEhQ@k0PS36Xi*FR z$?PLgogg(-0C$KBg8WKN?-1722=sVfRln->g9o1^f9aLSHnP~Zo zqLK#2vLz2z)MUGPdO8qOc>-=2MQ?D8Lb@MOr=NOyl=%U{)^iipD-D!2pf!o z%fFp+3esMb&EL&Y+U>vb^ZGL~=1=J|Na)F5!1nTWHnqV zrj7nfkk+)?xS>$)Wr>8Bl_NHjoq%_~#l2J+NI%{e2H;XL+U_X65@}l;U}lsacTP_H zkAyF&_+U8Dezp6=#E1<-!DtqyXTS?bhDZaKlz6I_ZfsSaJy??Y)-FCc_Kmq z`_ca|^+|v50OEbBkPoa;EG0NHY_i$n@NUd07KTH9=ZBU1rRDJgDtGy!*_btV=b^P0 zFF4`0e3SPo)yr&7k8km|(@UP$jUF$59;)e_P!F8Wz3K3gU2ma_{@S2=kh*u1=(06H zY(6h9c`9fqG7-a@VVPIba$hot=XtE|{;;auZG*tRwj~}lGL0J7$NK!S>t>S9d5?~^ zlW*H`di~Zq&+yR~Ke)n6!r?L8X#2ou64L#x=JZp^EximEK#PL}uLziS1-|t`9Sace zRPEG~?s>QEycB(C5~!kAW^17{0>*jXmb>JkvrY>Gt60YJc{=KyP@b(c{vB`gmL@mg zX9(gcj|s9ipR@0{gb-}V2?|z2QSQyiIL6+;NDtBhux%U z8w(*z?aPNs(448ez!-kj-s4{uCjdS38MhfE;+VdmB@`>m7B%}0li zv|riii?kb}kbPB2eJ0B~xj#-wzr=dCtFNe>8Z7_0`MDfFE>*jJ8Dg5&QyZO9>A>H| z{1D;bO2*tur%z9rF0D0vh&GpU8SrvziTViZ+z3u$p5xIDSZYf#?sz9MT`O_a(xL&0 zP5@YNY`kbqhf&B|-qk>f+|jkS+_TOnN41Mbps(i&Zq&H6dI`|($`jdOY%IJ?0OqP! z=T9;;uklp-&t7)HdIx_o_toWE`3Sxz`PsbNH5Wg8jFqqAN{IZPVrfzt&fX{VUs1fq zH}6zYmw1De8cw5!J_OU@5f2ba$m6mPeu68+eZ{_uOALL%0Jns+n)=}`8+^4&bNwyt zJfv^&$zHqswy0_P5=3G{)YKtI-}{k3+A@Fr%DA=M=a}0qW5V|{41N-VUhd@w4Rl0E zyG0=Ee{ufQzO#5DO}#PH(gQMd&yZ;( z2Whv5(_{Q;cTa_T&hX!#J;4NWYRenorf@&Z3n7!>vh(p&$tdqOzi&n;KvXpqe$62_ z-9@pVI%HjCZ;_&!N8alQYOiToF-%

pxce>n5d0a+hCM0t&^lL%Ozm}b5DJR@6Yx=oDdGs&^<;8Ag~EED(M98QgHF40_zv@4TKs0nDOD6})J6 zzBA_Z9V*U;D`(x256O#%FIIdL$PiP^`TmK$yue6XOUAp^FUeiCq6_&)eZ;7wyL({F z@?5AD!jw>{7=!ftISTI7z)bCu0?$vXwHUIqPOA<*t;)Zxk}@4H^>y9U}Rgs2)C-JFS8U!?m6dD@5`soC_|THeJy_`qX-$rn76u9&-MROOl1#P zbpc3wtsD1#8|$t2OoZ|#&iLHQdf_&1THtw9GD8L8Bo6oJRXRIM}3?~>K&Wz zk=!`_mMT3B?S?GkT+*=Fmx?C<#dXRCeL(_*F*zy$a;4L`ixj5%e|sxTGvQ$OCdVmK19ZYiCdWCB%8`xt2|8`oH8ko5n#? zjPqEt`N#F7P+Z%p(D~PsgeYvw>xNZ=f`wQbEdA}>*iOQ-kIHPsXa_@HVGs--8o(NI z7Yg9T84wcaXnH-Z|K{PQ2Q(3-XG%=4F4IPCO|fsI zH+QgTe!RdwxE%Rva%glQ#I)q6wcI$&m@vxN-qV-0dt&$6>k52rl^1&4d&Gk5<>!io zBi6{ZoMi!D7k+|=gui6Ef8Fs@dc(@`h}Puk-bjLrIBokxX?ZDpBFF2q0B7>Rj$L|$ z53N`5a32g&=z*N+)%C|Z+mI-SE3509wPh&%Q_-NzK5Go&(IFrZ&9@V^OCRAos|Ou9#C|0`?O5g}(rae|d=qdF zu29#1!l_vZ=}b(=&`3@Dmf2A^PHi_j(TK^qP%``3M?YpXC}&{6S}Utcjn>(6RGpPy zqE-yi(xMZ}C)0v1*_VeP%O;(#%bu%G+>NhT9?=`N?YCJ;9M1j|0fe9feWBNb^Ot9B zNC7n=-)fimIkKf*B7x5-z-HL7{@bDFjx$B8p^B~FETPS! zoJdaBFj2XBNzCl8*5@&<)_H#J@;@G>WlI!^jI(p%tAfD<&>2URFAbgyn&f%p9k=<9 zU$u=|ziYBb$3*EFq$CpQP3Qb|^Ae_bsCeb9rr%aC;uRDO?U!bz3}OBj!f7F2*tg#u z@cx#M`gnYn$98sNtO6n!Sx4?lOn1D>DEi|L_>%&7@fCJq0U5w_dE;zeW;z-BhrQiRj zE0#FFz}wPY+OdSSU*00)#!>g^mKJ!nng%s(K!Z4XltKvDw~`Q_9?K|;>I`S;`jU>mn(wgA0}S_h}yj%~pBduXeAa3+a&AIbqW)$un4< zCgUgu<~$u2W`F%wqN=L07i{~!bv;V@c=*lF_Y@};d8u45|MESBzinX*&cyel&M_>! zwOr%UntiJ*qBWAr@Rp>O&hT0my)5Q!1%Bd(-^fJ;r=tnoxe0XpQGxIU%pmItGaI^( z@{czgUO41XvXlOs%>x+X{R5bXEW}-b<#x`_^`+YcR?s8zfxwYHBu;Bu3Z&;SafOFi zC^#;Y2o<7NxH52UoaYOOP(v5~-)9_Yuhe6;{Nd{ApvoVHl%&p6Sl>xI&jZi#4cBQY zydywC97uiI2KL1fbkzsaf{z{oZV+UTO$Cd>#e=>|T^#|@xNHI}1kiVc3EZ*rskraR z2KY!8;b_s_i39cK4kcXj{TpE!BP6*{LJ`yg8baTibSwIqyw~nibCy3O_#&{ge_%{Y z{tlW*9x7)Jita41Y zp?|$F%O#3;;-zRU*P9JATBH$2eRKe;0*3OM;f#}j*idR9U2`JwGBW`EtW&Smad(gl z^oU2+abHmNP|q68r2uYa0(^HO%t`EfD^TcM>#$d!c+ECY;|TREO49j|Nh`BH#j>V- z5l~yl3T+gjlwbz;X);_Gz1LL6KlW)WFI~@vQUyfN+@#$G{|;dE#`$LDI3jps7nf-& z9R^cgq@DaSV@VB4lKMEWblbFxL9L|~GQC+Yu7u5RDz0MiDN6iI zVvPz@yBd}8g)k{aFG3CIvhR3kDaY23g36%gP3#dW7lB1%{U6LA6V;VJ?N9MNgXpAO z!@7{QwxJ&EKj{RVQQ@yZND8Eiy5gg(jF!M3l0@*HFtpnfn4%x_>=t++h%rxpp+yc* z^Ah-gi|1N{L=Mb2!!|Chnt+3*Qgjw#zArCNK~nn+^hDohvOIkRw=O&(Nb~1>MJ>Qr zQp9|by}I0-tCp54q7kL_4Rbb_54Zq|Vu7h%Zd#;wUf+TY0$Y;)%5|K!S#RJ-A2gnE{lGGQxL&>(5{g4dNV%`L@42e9vvfb%v`n@{*FYf4-NDXhUdC(VmmVu= zof@`WiHYMmJZAZ_KmVz)X9STxg@<~(O}IW!t}YigVuSTg9d@2d+I5t z`-;`6>?wQFiV3*QtTzH;`Usmp;jcm^QeCfg8~InVUixTB-MSrpz+}ZZuYEvP-iw#t zBJ@!f>(V4lm+3COt>XxUDl{~NMwwjI$)*r?I_w;BAw#^nLg$yOndTetPDh2!L8Q!LAJ6bWSX{vtm;7gP0)FOxzm%y=HWT>Q%Ncf=I+@&;SnRvOWnF8Ly z*GSQgh-3l4D!0gv<6+K7qwbe2)K6hY`Ta;yv3%7KsSu}-WSAF75e&`FB_xPpXJL@d zoX6$vb;8>4kNlOs&54?kjGM1MGI-!yKH6{k2R51?P%JNUBH(vz?Nf*=cxt!64Mnkk zU^iP~bRtvtHg8~7-}C4|62A!Ch#V*f+|7Urc#&kRzC!sD)5wGpK9YU2rvZka)9^^!=8~H_Nd;SLchjjo>Y^PNNB^rP!8s)GDkmk=tsQ zbR&3XcSGzE$&hbrn}=@%VaPyYps!~-=34zMnvET)plsu-VFzt6N(Xdf?o zibg~#gf2rT5=t9TLMazE7w&MXKKZe+w<(0z7zT*dKOcncy5nYswI*A4-VJVD`O6Ao z0pie+^`D(SZ65$3j(?>!AnAw;V|{&M_|7W?z+Rl>F1LnEZF(c-gp}nv-uDjGnYiC3 z*Slydh7{;us_;9nu41{87oMI#dXVQRe$$DM_c7YRVk^m$n^>emJsXer0Wqjh`(PKi zsI-?8@;;*g*`_t3z;2_!j^N!08xoUsk}sq0Tveuje>n@*_L)&XR&2V#?ZNrTk(+sl z{uviRWiweZgwBLlxk44*&?vwEr-QdeY0$ef{9afKCRqG@HRp% z`Ww$m+f>OwWL1UvdpyQ0F*LYvIFf67dZ~UTZ+RvxYd%)6?om@)wWv?-90Q1+t=4n> z!-Odf7`LP0#yoF$wX~qrCmLQp?}vW#2F)VjN&gdvB5STJcT*?hn(i17uQ!mrg+9#y`oI0N> zY4?FVI#Z3Zq@0GrCni(8890O{WAMV-}JjRn@ z&9I|nVI$%G`>Nx<6;d_xtwurZ-D`OkA_fU9_pSxRi4n7cyF~$#p-t+s$4XS}))hM? zn{N-mZIGBPamp)fIZ;c+m_th}C=`?F#YU(PTc-bMhTF%DnUnT<6Cc#jl=CpmnvWHcV>bBpe=Kk-_^XrL<{!g-6MD*69$j76_=Y{3 zRR=Lsi>0@ep~I34qfTj|a796i2DQ!X?X0F3S)s7}-`m39{{A#q&E+glDy4b5GJM!w zk8_eZY%Dd`C=+NkQeUNCFsA`^AXCrST@eR#5c$ry-VbH426wx^uJ7Cl-PJ6#-3@3g zUl#b)cC20TjYtbvDd+IgSl51r8ui!q>d6mcq_Spw93GKznGo>ab6$r~c%BihKXeIt zM!s5Pyj;7}9~81a-cdZRDR$g$K*W&IganX|gcHiYKE)^naR3YLcMRfSm}Y~&6%@*4 zI5D4iFNv&jS$XrdLT6?~-^EJ>Hh!ozJH397f4DQI!H~P(ub?hA|I=Ji{Ns+@b0rhG zyN;j2qWiioVs4tU0l@K3?+M+h`J(??P?5niD}eiuSl27W98mS_r?~Mg*Mw0P?^KoA zO%}fzlfFvR5PhOhtlP{yDWWZMA%c%un&?QYP)NrLL672l!UL(J70;!@Ic#+0FPZTv zdfFs$-wRcM7Cd?k6NV)Fxx@2qz4rRCCurxd@tvpCsuQg*2j2O1sP^_hl7e;_CfJ)G zYc@D0z`Hjlz%Ov5H_o&MKClaO3uF#=y>}V*{bTwc;(Q3?R|6ume_Oc z&pBW9FK|L6@=u4R@(mS6b0`&NN{?4ncfVMrMxkWSV?6HuV2(@mZHuUw{^^3~eueU_ zy=8X}r6|{f>~pWf{d7}PIP0^4_TbE;72vK65PLa8M17aK;waU*?mVLJHjaSz6)RU! zIcQKIr$xu4#nvizZpjx&`S+v(<>nXbhNE32f+T4xj$y{cD38+}eOch6Ys>4+#{2jA z@{p@`P{*0R?d!oxnA>1ZgajQw-N!RqRl^SDO#^0BQ^H83f?W0l^P|)H`A+Q48yX)` z$7QW=!A4ut+HsW{ZX8oli65Kj=x$Qx+F*HRONrL_N-fJ+nux9A7PkZY8$O!z2Ozxr z@?TKvE9}#r*wR_}oNtXDZO#872^m?%yD)muo(lOhBa2vtJ$)K`-JgiC)4ndxYzkov zFO42I%ei`&+d8-1#%bIKKgmmUqsXOQBVIZDi!9lTqlk0ZNq!jaLrvX}TL(Isc(6L| zFUYh4I|WruyQtV|Di($Hh~;*TZMG&EM=(J2vsD`GHD>ZIgJGn1Zodv_vnn_$SpVcq z>jY^-^dCz%+E)H995r}KXfe<*!BG*byP(f%xR3IHh&8C%_1U%QBG6l-0$ zC@yE*iPYN0gWu$82Bom$LODh33@LGNtO7@zutGw`^KpvOW{F1zaxvMJrUwO&h&bL# zn_}u$(6_}@a~Vg-;Wa!JOzWu(##1l;SF8N@Qi!nQn+(~)kZCt{uUlq13u-FR?P7`L zB+@(TCZ{xq{K5osmv<($k<%j72hrI=oulQd>N0l|4DZw2qIt?x>{JrP5ZTA>-L)Rw z0ke_$=TBvT_}XVEN@-L-W z>2mV@5|6f-*a`NwH`UeF7=<&~x8xMUC)Hh&6Z4r$ z(xPBiPMc!COOX<*ecFGI{iU=Nh2_hJQfL3`A&bGkQ0uQyc`wvY@Xg$T> zRSBi%=s1)tv?#-V7%)gHl^9>x@#<-0p_J6qr{s_AXYn%2ed3zGsp|U9RN`SKOBBm! zNsY~g?r;iQ(Gc64b^vn`(E3?=B7XOwa<#o4N`8jwPJSwnC>BV|#4iz@Tqh<)@^81w zib~W4E}8$mF~Yej(Li`XKA|8~aZvrS^P%OXz6wNz2Fp%&xG78xxhw=e4s0;SX1!c{ z@vt|;lw1t~qkh!<-WuT$%^^%w+zQ-cH8=TjTjf-^T}Gjb!(vj#W*EkxG)GqwzK1hM zs5`e)<8!T5DjOP9&SRAjjn^z1DEiWnD)O(pA~ZKNwBR`hqG#n8{5Tx4<^nz;B?x1` zmd490#Vb~*TvOx`6^)mWsUm{|@Fp(b3aMW87xZ{2wd4;7oUa5s%Ile>bs72VVJg$1 zG&j=4uoV2Uaw@8PCIoCWpZL^h3oTufT}TD7dRVo}3!dGC{qfFvUhmVC_Sa8mGX1~%L<@9OuqXj+ethYkskM|lc+0r*V1i5sw9o4$O^w(Sa6AbA?!9=T&$@W zp<0^cvz15`fq|pa++_xa#U_F-OKNJ6XD})+2PCp74i$9WN)zmo}$l96?hL;ub2ATj3YM% z8O921hj&``%5+9(QjV$ie959|d=%;b-pFBR!P<&+`_7Xg_7~Pf>YfxR$=?hJUJiAN z(LzdW^%N{+qf@|_MGyhs!7yW{y|MRpe22T#`izpj^f+&f4g&VdW36!{C~PWz(7@%; zBw`RL+6Jr6!38`?2vj49ooao>>tU=r)+`$hDzzNnlhkf9s@LFrF2oCdgM-wsrL<92GuUF6g~!WiSZW zUAMp&Ek%~u+08OULjgpx8p!Y|pa9|o;r5tz0A!T=HiI1m4|{yLcrO zb~pi|QPh0z)^o#-g)v*G9Ik)}u!V@?)<^0P@T*0@#yDhbndXWH8fv<^r*$DMmtx?H z1g;?AV0@9tcgRqZ)zgkBrP&trma&m@L;mXu$y^A7J)CLd z5asK(0;7efnmxg+1}1|a($gq%8panT`aCIP@AZ5>F4+~5(z7hfYa2SAZGjFG`p*7rLygyO>{Mbt zX7L=%Pd$3ZF)buK1(U_&diyPfL(c-GUZ&L79qm@L7hdBHK;2Az4q9I>P!6e9avig< zcO#IBhBwHz=S0D80cfOK#_{&lsC;}6D$<1B53C!+MZ>Nh1X*P_Zv(6)!aS?6RuqF0 zRi%ERo5q>?M{y<;IHSjyaYZG`jiY{||%!U~Q1h zGe3BwW(S_;jkPeKflI|yQ$CgBHV~$X{Y(hZ6D@?zGn-90;n}m)G+`umw^&iPTgJLG zZM0nb9_;kUog{t0>weSU%nxkR#)IMBV*w-`%lw&eka}KlIfLGv=t$DLONGeK+fsaG z$-9=UhQipE1iwsl5$6dFbqw~Szk-DnmIn(G~K==(}%F8vTFAIv4GlvkFZaP7iR=46K4*y;9ro{KyP{I01Y0;&<@#xBHK+)}ZvvY4;%^ z4;#MoLlgMDb?DQP&10<0Va{h!UVa8|!h3G!?hUE1yJqxq_>Cu3JbqABiS0mO`$`*P z%>@_n?laR4Mkr#5b@tVKkR7&?b5*H)OMG`Lx+TW8WU5k$k!6Jx&*3lE3UdpMX}8OW zc+Vre47dI0j?`tp|9f+63@Q1hf0qxramg=+MlGjD%pHY+NuEJoUo$o>)c^h(QhQI+ z(ZFosy(n}|vfgUKG&YEqxa9H9a{QxrCPn~R_C=7yq(VH>$hX7 zC$4I9rKR!=@h9naEdAOD(;rc)pghYd-=Tt4D|YZ{R-X=7Y>PFtO=fX7dut3 zeeHnBwFNZx0S$6_*!1*FuaY)|iv{uo1>OhslVUiVFZcrRsGO)Wa0BP<;=Wh_{)ZVR z&NP#RQrTAm;e*?LtEXB>FXSa=rgo-kwi`HFe)Xm3*Cm+`A3Q(gXAn%cvl|&vl5Km8 zmDA*6lLSK^loBmQcD~GBF|?H=6mpT+%(fGLxsS>G;#j0y@Ax!I7S1dAc3KLS=UV&w z!n{z>=RtfIQ}R?S7z$zdU;qX=tk^eA_;USR@3_A51?7*f%m$>tv<{i@92+=2;2Y3I z@x%*72qQbFmO@K&xdx;xhG{W&Y`Zz{zSaXtTZ2mMP}gsC1xQYJax$4teow$|=k>zh zK%DV?IlVI7@0zo`?wSu2{QV-SYd(sFADie(^kRFtof5#N0~Tw6l1$^X!`qCxkMZn# zWbV5$c?bG#TSYy;^u&rU24(B7Zpf;@C+`f1U-C?Xe@2QF42_uL8^IYf=e$oJ`?428 zKyC;Z+y`p=nMBKnF*U`XFPV_MpL80Kt>sf3ns<Le~q&Gp+fuqhxF&q6cxzeg9wyV^1&S-HU+1QUya@2D@Kz} zAacyeD@R0tG3V0c@Bj8j1@r&> z`JPC|uXqbpDRD-mp9MZhW_0^d)v`Wk42i#b!(Rtiho3DydgV=EyXaljBvD8fRplO!1I$fb%;QD$w#o4tX_=*VsKeFC3AnK@T8{Y+_ySqag z>0Y|KL%K^40qGQw?w0Nb0THCTyH#2m31NXH_P^Zk^WLvM|1bMxzx>WQGjm;Y&CEHs z_04gJdA>*NATR^f!;I%e|4hNPq``d15OAH!s-u-502A2_Zj)SsYV>mruk>CQ9O+MG z*U@=stLWnu)_rfc9@yTY{;Bw_1YKbYe6kbqRXgG!DWQ{xISv`E%kEgRk(KUPTK&ra zHg)|+nu$2~sY)KGxy_fVvCOHJsqU18mv1>9dZ$FN=>i8Dkp(#MYoq>S>;F0b1|-;; zvlga9JRnKK*dR};_}P>0Hgk$q%}O0LYx+4iZ$&0P7rxqTg1%6UeG>KM7vUsR>QFkI z*Vj~9Hz*Vyu@gJSfJ1#?{PwLGA`mj84(Ax%iV&Z7w}J)T>1M!<#q!%hN!qd>RV|mx z31q(lc+OkCHVRS$IA5rLn;DFWj_5D19n(*t8kvGprIka^zC_ol-|!h_{%Kkcb>0Cj z(#g9RSngQHp=M{jj5Li)ERhb68vj^v#3teS+V;EE#8P?hclsks^tlscRPAaOE8(4$ zR4+IUQuXd4QDG6y)ZM`1Pu>Kt|n-cO{M zC~}bZ!dJQC(zGC3jn=G-LX@?X4EuUEn_&=Kg3~vJ!7RL2=o-Hea6(@?osfU`WwPsH z6RS9y%RbSx8&?5KPhIq404s1ajH;c{=L;jy+(bm_j@T?lay1@%6QL(QI4@Jx(2%j+ zrs?guB>Cf~(P`g~>sr@G8n=o~;jhCgW(8NC1=2ng6_Be90otS`xgkE0wciHJR^zFp zFH?-+5xN}Vw^o>5jI-$;nTRy8m1S9jvs{)l85@OYCNXg`)pp}2Y9dGmKE7RwfAtBz z3G%1<@!w@Tq69Zn%R z<8S8T#_Vr1Yq_zHSNF87HUO`&gFnZn05DcsrG&>~sz=jN z)Z{gKfD%q^6TUn747)qq6}4y5=ht7TVFB)}yF!;X{|k!=^Y8}vy!(*|R#Qn(?^}bu zIp-wJ#W>)9Q7QgN)Wnr?piK}#h#D8$!a@5R(=N)Z49KD#yrIKMq+$!UJUXPGm z!UVmQ`}g&@Ugu5{`;m)M2Yqpca;jI}=y+|1znkgd{=4j+7qUGNF$L}JF=0Kt=~2rH zA5{7ea~uk`$ey>$JiOnC`&P`6>I5gK%U)CuR(LyLyXGLs-clMP_M4lp9p=Oxb9k|BhpO{W@(k^+#i zO>%&vgIMF*HyDXiT=gpn<^VK=zaA(^AOg2k0r#?iSd2buTG)@bM%)cCA zUb8!r&Q9HJ*1j&-NV zC=WFEd6sKo7~gt1Ukz`X#d8?hNk;z{v8dtnaYAa$N&-q%xKR}kOro-|L+Y;nuqojP z!xsIWl%h|5>LiIUQa^4soOK2N6>b!#vo41j4F*DiGCWjJ7<}XUo z$%3m=@~pNRN0v?Lh8?7jrXd{r3uAPpopeRlz~{_-TD|+1Eo0-G;;B7Tx>_S+2_M44 z!C;%_V5A^oB=RvND?*A7)T(q*VT%_R7xz!AAm~|_=Iay>+S?>I008iR?gDUODzqq0 z7|r~R^1RLzkc?*R=ecGUsvlMDRM4n=NJrCr6INt&t**F%<8{U|^kR1-5R65$8)PqT zx#lDqy5u~wT{85tS&G8!Q!I0+SXYXj!|LWFQ$nKbs}xfN)>ds^=diCuH6LF$BQmR< z$3)Vp4y68ds4~>FiPveVqxAD`M{PQg5JHqMQ{u1#bxs01caA)KO1i0?%T>Qrl1Z{i zA&BHq@!sSN4TgOsehBe^8v~l;t zyZ&i-G-SovekaiuqXmdU>ZH@$He2tO9Dgz;jLKs&WMD<0B`Eb1;t_&Ytb&tiU=)|O zKq!bZLFhxMWR=ujY@R!mVrlb4o42>~sQ4F+4n{5!*E!N>81-~_nz3mInNke$2wQzjKnjLXW8(oY z&9UK8VsW_GdNR~-6(BFnZlAh~Q7Kd_vW#T1=w}J=6VSr`6N=Ocjx6=XtKAZbT^tzi zk2fw|pp7-h-H5C@);d=P#ou5&>URTJzDc6kJWh`MwzyOxClpcoJ9^V0d8%VjrGB{{ zG@h@jf%~n(bF)U$&(5+1pZ>90>fo-_ zfcE$UfN&kvQj=1MN|>ot{XTK3nDOx|J$#d|bq!oO@6bO`pzmDH^1OY#{j5$!xjSet z%+`Y-(aK~%d=>c$eh8C)?(5r~z1D#H_kq(XxdXh+vKsq9{)@2z&XwEZ-Of7s`itNe zqOed*pc=r#z*(jC?b~!BDE_*0V)|9@w~asRP4bihC!pSfjVFiFh(-ge{)A?*nUlBR z=?qxm4-OKP__nJh0rxoBSb9yCs$0X52y6Txi~l4Y>q9{;7Ij3!DMccZ ziSEy)^8bOC|H+Lo;ns%xh#;@8F%1dp92T`dQBsM1HCCyCs~ypSD& z*DNkIpfA=SJ;z>M{ZLowCRNfKbW%^N;N3@+4tE?8e90J$$!c9=zJsKSg{jtkXWV^y zAF8F}sG}-d8X2c*)G?ZsM+b{Qg7W7`pTTLv`uy)+k$4yLJ@!)FHFh%++`$^;Lx6#| z^@m%)CCCSqU>KtMI>m$_N|9o^yu{`|$BqbM38ii33SsHOc?sJ5b~2k*PDB!#$MsQ4 z=#%@*l9IFB)U-}^(nxWYZIX)O|ILH`1E|g)B#xYzL+a^gzlQMmOkH#HH;0j;Yxo&_!xd;k=z!BqKQc+BDYjhk&6imGY z(aVDk|J$WnI?etPa7g*6&xq-9AE4(NY(1Kg&`R_|6h;C}L2jyI<=%Rm`vEuE zgWlc#4dX8(Y$)r0n&gcUXVW#a7#h=-j%zP$F}{-k`+KiQ_%TuP+rHll5127mVzT5>j(k8k-W_tUk7Za6rQ!pV#M`A|^`|r17FOfYhf-aOFx# zFY0GBt_pjo8%+uLtQK}d9RxGvHachx8+!*Kmed1RqU)i1KQHJBq-7({5fv82weS)0 zIn!2qERJeEhhqK(4vgoAn!gdkXHhsV<^!{K9dT|S24!|hpDsdaT6(+dpz@{hzNv=a zQDPq?M>6VwwhQ~X++Ou)LGnQrZB?%Lzb0UmL}ZL$MmdAY9SNr%xI+5#Vk1jg!PTlnG8)oy<$ z=!Wu+sJe2O?SFtp*(oINT2qc=(t2HWXSVRR)hxDB*MRTe)!zJUzZMfVW|}Mb_`wYf z>DIf__+~{HB1i4tY!Mw7Hbw0Cho)_4sGk%Kza)SQ7hABBq;=J=-Ke=jnO+enIakg1-O z;iS6wfJEMDA?b8tf&+q*0%#eXPv^U4X;pFjNY(OGeh+?&46$5e7YfLcXKH41Rk6Os zlS6+>TAvyE7xZ(|Etdko zHX_uXenxP!+c7QP44D`+mx8M-U2dbD<-@$nV1bI0xEkSv_MvcG!n|S{w{AujPw;1V z4{-tp*?+=|UrdiVsBZZNZAq0%8$Ym6KzL^V`rwwB;q;W FuUJfhdA`xk3T2=Y%~ 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

nr2z+7Ff|`3i@N+go5P{;wzKnzEgWk!dVaye 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/AudioRecordingAccessoryView.xib b/thirdparty/SameBoy-old/Cocoa/AudioRecordingAccessoryView.xib new file mode 100644 index 000000000..6dda38b7d --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/AudioRecordingAccessoryView.xib @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/BigSurToolbar.h b/thirdparty/SameBoy-old/Cocoa/BigSurToolbar.h new file mode 100644 index 000000000..9057d340b --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/BigSurToolbar.h @@ -0,0 +1,30 @@ +#import +#ifndef BigSurToolbar_h +#define BigSurToolbar_h + +/* Backport the toolbarStyle property to allow compilation with older SDKs*/ +#ifndef __MAC_10_16 +typedef NS_ENUM(NSInteger, NSWindowToolbarStyle) { + // The default value. The style will be determined by the window's given configuration + NSWindowToolbarStyleAutomatic, + // The toolbar will appear below the window title + NSWindowToolbarStyleExpanded, + // The toolbar will appear below the window title and the items in the toolbar will attempt to have equal widths when possible + NSWindowToolbarStylePreference, + // The window title will appear inline with the toolbar when visible + NSWindowToolbarStyleUnified, + // Same as NSWindowToolbarStyleUnified, but with reduced margins in the toolbar allowing more focus to be on the contents of the window + NSWindowToolbarStyleUnifiedCompact +} API_AVAILABLE(macos(11.0)); + +@interface NSWindow (toolbarStyle) +@property (nonatomic) NSWindowToolbarStyle toolbarStyle API_AVAILABLE(macos(11.0)); +@end + +@interface NSImage (SFSymbols) ++ (instancetype)imageWithSystemSymbolName:(NSString *)symbolName accessibilityDescription:(NSString *)description API_AVAILABLE(macos(11.0)); +@end + +#endif + +#endif diff --git a/thirdparty/SameBoy-old/Cocoa/CPU.png b/thirdparty/SameBoy-old/Cocoa/CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..2601ac4646c37a25989adbb8257c2d0dacba35b3 GIT binary patch literal 1109 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 AtpET3 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/CPU~solid@2x.png b/thirdparty/SameBoy-old/Cocoa/CPU~solid@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ff17bd84a58e8adfb49ff17462a26ed0c90ed4cf GIT binary patch literal 586 zcmV-Q0=4~#P)~W7tTt9cuLN0Xtn-}NhA*#V#`!hdP0C38(3+MuVgMf(-&T1b_`vT5Ozev~> zaCX}ia8>&`0xmB>_dxf+YXUOqIu9i77z_gr(X|-}CNkiO2sbj30e4iu zvn6mCa*5s(aL5Cev5MX+!66U$jXSWk|LB1`32-=sTeWAvsgQIg2i8&G8v)=MFqqx` zpUQ!BJ_jzG3)+4kqv6XQsQI@>23rQBQ9w~`F~sljK+C^13dB!1s)uK;2JAr(wETNS zj}*d4z%i7f2qTfW+5fjZ(DLsQ-StetFfu3~C|kzntV14X`L{+v1uQg}n5z;Zl3W( zEHjCSFslvy200$-{Sgn?va~>CA|XH|Xqr9P`i(pAf(I7tfM5ZO072z|D*}bgjK`7m zZV4H|GXoC)B@cEzkV^?1Q7;RkduKhym3eVl&p18C5s+sDY?UCE#DSzU|KbB7WAU0K z5D~4n$0G!yCblFjt|`?E9@w7I^QYzZ-p+wO7jzH&W)EEcvikDZ_5F)U7tjU#wXf&@ Y0G7-;(^#VORsaA107*qoM6N<$f>UYuKL7v# literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/CPU~solid~dark.png b/thirdparty/SameBoy-old/Cocoa/CPU~solid~dark.png new file mode 100644 index 0000000000000000000000000000000000000000..eea9a43d78cbdb6366093f7a87ab26ea1709cfba GIT binary patch literal 311 zcmV-70m%M|P)kdg00009a7bBm000XU z000XU0RWnu7ytkO=}AOER7l6=)xm88ArMAkTA&45m=YUrEBZW8BP#sH!eB z$s#F26^bG>pF002ov JPDHLkV1f(ujK=OUBG_nX9-sY z033EPokOb-OVV=L%l8_2-b6r)|Gfm<#K6-9bOwGI0~+%>1`HA;Lp9^kS z%@zg%frKUs%>y1wV!&XD41%F={Bydb_gff9d7DsJju;{ei<30=O8b4I2ku~CwjD(z zp-4m&PUI*;78ubCcmhUxE24>b1{49G{orl}bS^=_%FimIoE_wvkmtpDUlZh-fFs@_ zpw&$_Cw3T_`DYFynuM1m4oj4Jdpr?`mBa}{BIHut$$)Npo&K_IpY1--=Yr0_Mh2e# rs`jm3R=@mpeg9(81#|)b?d$m`Fq|R{gJ*5}00000NkvXXu0mjfAH4pV literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Cartridge.icns b/thirdparty/SameBoy-old/Cocoa/Cartridge.icns new file mode 100644 index 0000000000000000000000000000000000000000..1dae2b4a21282e887360ea7f7745afaedd8ab0a4 GIT binary patch literal 75751 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 aiSrh&+Oz)%$lE}#GD2tuStt#ojsXAzrUrBX literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/ColorCartridge.icns b/thirdparty/SameBoy-old/Cocoa/ColorCartridge.icns new file mode 100644 index 0000000000000000000000000000000000000000..35fb29324c711e06c357b06732b9d48278dbb207 GIT binary patch literal 265838 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Display.png b/thirdparty/SameBoy-old/Cocoa/Display.png new file mode 100644 index 0000000000000000000000000000000000000000..c955c4688acf1fa49a8a3b8cfa52099f515d9edb GIT binary patch literal 483 zcmV<90UZ8`P)Xbo9aCUGOSLxzpH;dpP zx+v%%BG`Z;4t9~^(qD4*dvG5KZCxa<9WtD}_ik>^`4V12IwI29q|6~nlJZyLSY;JJ zq9~Fu45i!cisyNa2yZgTBGUp4hePT0da_t7oQNzkYXJRz-x&Z|EkF$*j$`M0fXo)a z0_Zou6@Y#VS^x_$7z`u`0^4wN_aXcuAXea-p~>N zABHLbrd)stW(cFb!*es&Foocp_T4|eni@X(Way)={$!E45`a6b24RjNft;g`v4+yC za}CluYdm#a3&4Bn`@U`9(f@a&{pCRxnQH->*7gDDpO7m6{WIDg0Cpw+Y_0&vBC`ds z0PITF0A$txT)&1(0BM>^mSs{Dh2(kOi0~$Ztd&o|wJZSdC7XiLg*2-QP`V1QXlemA ZsUI@^+vaV&GDZLZ002ovPDHLkV1iGD(iQ*! literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Display@2x.png b/thirdparty/SameBoy-old/Cocoa/Display@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2cca50e3f5b107b575c643bb85fbc8f1acdeb454 GIT binary patch literal 870 zcmV-s1DX7ZP)~wDK@^7bqc$I#WH;G-ZqlW-N+BdzTUd*&Y-8ni zieMqyC}<%fXrYLO+sLv_K-Qlz<{9@5C)b;}Spu@-DGoDt=G>X{KJ&p$xG97X3jebe z9Kc1U*=!Exc0RX|xS?^72Ox?c4u?sbAmjmv4hIJZ$&NnS1Ysor(t5ofc6WC}sZdX6ngigJ$d$SQTOfSd#pQp_;OK39>1G+9xb&&8NNJI zr}pG4ANgh9w=s-v9ml?3y!sHI-+%lX{XTy=iGH{5J>4Dv8l*!yxqI|{(HTa$0?L+2 ztlF?;5`FymO*8}w9HJ1Qyui>dc?KY_E%k$)o}O(FfI5S?Emt54){2#20~Qpf_Z8aDNPSpub?d$YuROi4`uixJo}Cnt4%U*`fp_kFb!$k?yUd97=4z~ zRn7rx0dQaLbUN|gTrQWBI|!l4YIFb&zyUabB>-F(+wJz^%aGIn=t~i4bN~*(0XTpq z02~!ttyVlT@_AWm0MKMLIsgaY033h=umCtK^EEZ;&dyG90MKMLI)HTmQe6U<29WA? z_|gDIqfr=-$6-31hRI}dtql!mLDNPvAXRe!s{n9Y;=eScDVsDpfK>oEC8a7JZR-G> w3qs0v0pn*LfFTvBFM+xJK&$_G+5!BwUlROx4D8DXr~m)}07*qoM6N<$f>LpATmS$7 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Display~solid.png b/thirdparty/SameBoy-old/Cocoa/Display~solid.png new file mode 100644 index 0000000000000000000000000000000000000000..2980ad71a7959b9dc00172c91344cc7ffe17972b GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UoCO|{#S9GG!XV7ZFl&wkP;i~6 zi(`n#@wZnUbB`MEFkEn7DB_hU;shiWL8O!7^S{BGGnzEN$eU$O_nTbzb*uN=&G9+f zlVsN|Z9abbYQO#iCuaKt+J(&KALJ5D&t$w%a}6$;y=?Z`UCT7=)}%XVsm0Ec4O8Ut z72KsK>MVMwhRtN5$I4qvFSIW7$~4@Nd8o+j(687K-n&}4tG28TidYh>Pvo4tvoAC0?qCJ7K}ccu$F!`6@ek^6h|eu&zHO{- z!kna1D;MA7awxldJHwBH%3qW9?eZEK53kdX{Um`?tj^pxK z2X%68Du?7)78!FalzV%fWA{0YFBU7W9cQ?@Zu^UadT-pn3x?LlDl+x?Z&B<96xBfb3`d-`LA$#?be`u@oGhEvf-G8(^cG_yMdDEGT zb?em@OI?)Lz5Ma)m-|0?y6vvNKHq7hBKd^lL ka{GVN&wszUr!Ms;Z-vp@AAhBHmw;l()78&qol`;+02n2}Gynhq literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Display~solid~dark.png b/thirdparty/SameBoy-old/Cocoa/Display~solid~dark.png new file mode 100644 index 0000000000000000000000000000000000000000..05245deeab1cd3e1139abd9361e7984121db3698 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UoCO|{#S9GG!XV7ZFl&wkP;jHC zi(`n#@wZnUbB{RiuwHOKDB`0i;*_YN)4I?=#7R-)*&W-dP8uzT-YlG2t1!Wuey=bwd%E?OEo%_CL*F?0mtNF~D5SBQp z?N2WI@A=uc-#hPWG-saP{ItID^TS_;JEY$0cbTfUFVdQ&MBb@04_yh Au>b%7 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Display~solid~dark@2x.png b/thirdparty/SameBoy-old/Cocoa/Display~solid~dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3dec49d5d07959399019faf2f56984282ce42bfb GIT binary patch literal 454 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;&H|6fVg?3oVGw3ym^DX&fq}8Y z)5S3) z5lVe;YUJ+E=Qz3Qx>-KshljtuXvf#yVYoj1&Y!PrD^{h;ht@hDxU99FQECAK-ILqk znGhJdJ0&Po_}2`_psydhZr*mVI^NGQ_iopkT^?=689ddcQ$w#Vw64}nld-MZd^7D( z)`2YN^v!q9u9~#OhE3t-;{6F78&wv%Jcv7(w0(8e$vmftO_7g(cg!<>X3uCmBZRft zwC+rcuTjF5dHFw8gU+o;+SeT-k|ZgocW9CNx#P9#jr2S|?vzrl;fyg{aEEc%iPng} z?F^eeO_Ln+O_EH6SKGV#Re4TJwHAvMFP@asFY$H#92*7+rJ08#YuqFGCP_X2ctqy- z{G%RWp?2=iKF>UPzmlh0=IgJ|+jeiMKg5>NfIvU&7QCHda^OFA#o1#|uk(I*`TFJb i|4%>Hnyrt&S;x#NzC%W9$_f)u{CK+hxvX +#import "GBView.h" +#import "GBImageView.h" +#import "GBSplitView.h" +#import "GBVisualizerView.h" +#import "GBOSDView.h" + +@class GBCheatWindowController; +@class GBPaletteView; +@class GBObjectView; + +@interface Document : NSDocument +@property (nonatomic, readonly) GB_gameboy_t *gb; +@property (nonatomic, strong) IBOutlet GBView *view; +@property (nonatomic, strong) IBOutlet NSTextView *consoleOutput; +@property (nonatomic, strong) IBOutlet NSPanel *consoleWindow; +@property (nonatomic, strong) IBOutlet NSTextField *consoleInput; +@property (nonatomic, strong) IBOutlet NSWindow *mainWindow; +@property (nonatomic, strong) IBOutlet NSView *memoryView; +@property (nonatomic, strong) IBOutlet NSPanel *memoryWindow; +@property (nonatomic, readonly) GB_gameboy_t *gameboy; +@property (nonatomic, strong) IBOutlet NSTextField *memoryBankInput; +@property (nonatomic, strong) IBOutlet NSToolbarItem *memoryBankItem; +@property (nonatomic, strong) IBOutlet GBImageView *tilesetImageView; +@property (nonatomic, strong) IBOutlet NSPopUpButton *tilesetPaletteButton; +@property (nonatomic, strong) IBOutlet GBImageView *tilemapImageView; +@property (nonatomic, strong) IBOutlet NSPopUpButton *tilemapPaletteButton; +@property (nonatomic, strong) IBOutlet NSPopUpButton *tilemapMapButton; +@property (nonatomic, strong) IBOutlet NSPopUpButton *TilemapSetButton; +@property (nonatomic, strong) IBOutlet NSButton *gridButton; +@property (nonatomic, strong) IBOutlet NSTabView *vramTabView; +@property (nonatomic, strong) IBOutlet NSPanel *vramWindow; +@property (nonatomic, strong) IBOutlet NSTextField *vramStatusLabel; +@property (nonatomic, strong) IBOutlet GBPaletteView *paletteView; +@property (nonatomic, strong) IBOutlet GBObjectView *objectView; +@property (nonatomic, strong) IBOutlet NSPanel *printerFeedWindow; +@property (nonatomic, strong) IBOutlet NSImageView *feedImageView; +@property (nonatomic, strong) IBOutlet NSTextView *debuggerSideViewInput; +@property (nonatomic, strong) IBOutlet NSTextView *debuggerSideView; +@property (nonatomic, strong) IBOutlet GBSplitView *debuggerSplitView; +@property (nonatomic, strong) IBOutlet NSBox *debuggerVerticalLine; +@property (nonatomic, strong) IBOutlet NSPanel *cheatsWindow; +@property (nonatomic, strong) IBOutlet GBCheatWindowController *cheatWindowController; +@property (nonatomic, readonly) Document *partner; +@property (nonatomic, readonly) bool isSlave; +@property (strong) IBOutlet NSView *gbsPlayerView; +@property (strong) IBOutlet NSTextField *gbsTitle; +@property (strong) IBOutlet NSTextField *gbsAuthor; +@property (strong) IBOutlet NSTextField *gbsCopyright; +@property (strong) IBOutlet NSPopUpButton *gbsTracks; +@property (strong) IBOutlet NSButton *gbsPlayPauseButton; +@property (strong) IBOutlet NSButton *gbsRewindButton; +@property (strong) IBOutlet NSSegmentedControl *gbsNextPrevButton; +@property (strong) IBOutlet GBVisualizerView *gbsVisualizer; +@property (strong) IBOutlet GBOSDView *osdView; +@property (readonly) GB_oam_info_t *oamInfo; +@property uint8_t oamCount; +@property uint8_t oamHeight; +@property (strong) IBOutlet NSView *audioRecordingAccessoryView; +@property (strong) IBOutlet NSPopUpButton *audioFormatButton; + ++ (NSImage *) imageFromData:(NSData *)data width:(NSUInteger) width height:(NSUInteger) height scale:(double) scale; +-(uint8_t) readMemory:(uint16_t) addr; +-(void) writeMemory:(uint16_t) addr value:(uint8_t)value; +-(void) performAtomicBlock: (void (^)())block; +-(void) connectLinkCable:(NSMenuItem *)sender; +-(int)loadStateFile:(const char *)path noErrorOnNotFound:(bool)noErrorOnFileNotFound; +@end + diff --git a/thirdparty/SameBoy-old/Cocoa/Document.m b/thirdparty/SameBoy-old/Cocoa/Document.m new file mode 100644 index 000000000..e2b12c0ba --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/Document.m @@ -0,0 +1,2510 @@ +#import +#import +#import +#import "GBAudioClient.h" +#import "Document.h" +#import "GBApp.h" +#import "HexFiend/HexFiend.h" +#import "GBMemoryByteArray.h" +#import "GBWarningPopover.h" +#import "GBCheatWindowController.h" +#import "GBTerminalTextFieldCell.h" +#import "BigSurToolbar.h" +#import "GBPaletteEditorController.h" +#import "GBObjectView.h" +#import "GBPaletteView.h" + +#define likely(x) GB_likely(x) +#define unlikely(x) GB_unlikely(x) + +@implementation NSString (relativePath) + +- (NSString *)pathRelativeToDirectory:(NSString *)directory +{ + NSMutableArray *baseComponents = [[directory pathComponents] mutableCopy]; + NSMutableArray *selfComponents = [[self pathComponents] mutableCopy]; + + while (baseComponents.count) { + if (![baseComponents.firstObject isEqualToString:selfComponents.firstObject]) { + break; + } + + [baseComponents removeObjectAtIndex:0]; + [selfComponents removeObjectAtIndex:0]; + } + while (baseComponents.count) { + [baseComponents removeObjectAtIndex:0]; + [selfComponents insertObject:@".." atIndex:0]; + } + return [selfComponents componentsJoinedByString:@"/"]; +} + +@end + +#define GB_MODEL_PAL_BIT_OLD 0x1000 + +/* Todo: The general Objective-C coding style conflicts with SameBoy's. This file needs a cleanup. */ +/* Todo: Split into category files! This is so messy!!! */ + +enum model { + MODEL_NONE, + MODEL_DMG, + MODEL_CGB, + MODEL_AGB, + MODEL_SGB, + MODEL_MGB, +}; + +@interface Document () +@property GBAudioClient *audioClient; +@end + +@implementation Document +{ + GB_gameboy_t gb; + volatile bool running; + volatile bool stopping; + NSConditionLock *has_debugger_input; + NSMutableArray *debugger_input_queue; + + NSMutableAttributedString *pending_console_output; + NSRecursiveLock *console_output_lock; + NSTimer *console_output_timer; + NSTimer *hex_timer; + + bool fullScreen; + bool in_sync_input; + HFController *hex_controller; + + NSString *lastConsoleInput; + HFLineCountingRepresenter *lineRep; + + CVImageBufferRef cameraImage; + AVCaptureSession *cameraSession; + AVCaptureConnection *cameraConnection; + AVCaptureStillImageOutput *cameraOutput; + + GB_oam_info_t _oamInfo[40]; + + NSMutableData *currentPrinterImageData; + enum {GBAccessoryNone, GBAccessoryPrinter, GBAccessoryWorkboy, GBAccessoryLinkCable} accessory; + + bool rom_warning_issued; + + NSMutableString *capturedOutput; + bool logToSideView; + bool shouldClearSideView; + enum model current_model; + + bool rewind; + bool modelsChanging; + + NSCondition *audioLock; + GB_sample_t *audioBuffer; + size_t audioBufferSize; + size_t audioBufferPosition; + size_t audioBufferNeeded; + double _volume; + + bool borderModeChanged; + + /* Link cable*/ + Document *master; + Document *slave; + signed linkOffset; + bool linkCableBit; + + NSSavePanel *_audioSavePanel; + bool _isRecordingAudio; + + void (^ volatile _pendingAtomicBlock)(); +} + +static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self loadBootROM: type]; +} + +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self vblankWithType:type]; +} + +static void consoleLog(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self log:string withAttributes: attributes]; +} + +static char *consoleInput(GB_gameboy_t *gb) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + return [self getDebuggerInput]; +} + +static char *asyncConsoleInput(GB_gameboy_t *gb) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + char *ret = [self getAsyncDebuggerInput]; + return ret; +} + +static uint32_t rgbEncode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) +{ + return (r << 0) | (g << 8) | (b << 16) | 0xFF000000; +} + +static void cameraRequestUpdate(GB_gameboy_t *gb) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self cameraRequestUpdate]; +} + +static uint8_t cameraGetPixel(GB_gameboy_t *gb, uint8_t x, uint8_t y) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + return [self cameraGetPixelAtX:x andY:y]; +} + +static void printImage(GB_gameboy_t *gb, uint32_t *image, uint8_t height, + uint8_t top_margin, uint8_t bottom_margin, uint8_t exposure) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self printImage:image height:height topMargin:top_margin bottomMargin:bottom_margin exposure:exposure]; +} + +static void setWorkboyTime(GB_gameboy_t *gb, time_t t) +{ + [[NSUserDefaults standardUserDefaults] setInteger:time(NULL) - t forKey:@"GBWorkboyTimeOffset"]; +} + +static time_t getWorkboyTime(GB_gameboy_t *gb) +{ + return time(NULL) - [[NSUserDefaults standardUserDefaults] integerForKey:@"GBWorkboyTimeOffset"]; +} + +static void audioCallback(GB_gameboy_t *gb, GB_sample_t *sample) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self gotNewSample:sample]; +} + +static void rumbleCallback(GB_gameboy_t *gb, double amp) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self rumbleChanged:amp]; +} + + +static void linkCableBitStart(GB_gameboy_t *gb, bool bit_to_send) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self linkCableBitStart:bit_to_send]; +} + +static bool linkCableBitEnd(GB_gameboy_t *gb) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + return [self linkCableBitEnd]; +} + +static void infraredStateChanged(GB_gameboy_t *gb, bool on) +{ + Document *self = (__bridge Document *)GB_get_user_data(gb); + [self infraredStateChanged:on]; +} + + +- (instancetype)init +{ + self = [super init]; + if (self) { + has_debugger_input = [[NSConditionLock alloc] initWithCondition:0]; + debugger_input_queue = [[NSMutableArray alloc] init]; + console_output_lock = [[NSRecursiveLock alloc] init]; + audioLock = [[NSCondition alloc] init]; + _volume = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"]; + } + return self; +} + +- (NSString *)bootROMPathForName:(NSString *)name +{ + NSURL *url = [[NSUserDefaults standardUserDefaults] URLForKey:@"GBBootROMsFolder"]; + if (url) { + NSString *path = [url path]; + path = [path stringByAppendingPathComponent:name]; + path = [path stringByAppendingPathExtension:@"bin"]; + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + return path; + } + } + + return [[NSBundle mainBundle] pathForResource:name ofType:@"bin"]; +} + +- (GB_model_t)internalModel +{ + switch (current_model) { + case MODEL_DMG: + return (GB_model_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"GBDMGModel"]; + + case MODEL_NONE: + case MODEL_CGB: + return (GB_model_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"GBCGBModel"]; + + case MODEL_SGB: { + GB_model_t model = (GB_model_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"GBSGBModel"]; + if (model == (GB_MODEL_SGB | GB_MODEL_PAL_BIT_OLD)) { + model = GB_MODEL_SGB_PAL; + } + return model; + } + + case MODEL_MGB: + return GB_MODEL_MGB; + + case MODEL_AGB: + return (GB_model_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"GBAGBModel"]; + } +} + +- (void) updatePalette +{ + GB_set_palette(&gb, [GBPaletteEditorController userPalette]); +} + +- (void) updateBorderMode +{ + borderModeChanged = true; +} + +- (void) updateRumbleMode +{ + GB_set_rumble_mode(&gb, [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRumbleMode"]); +} + +- (void) initCommon +{ + GB_init(&gb, [self internalModel]); + GB_set_user_data(&gb, (__bridge void *)(self)); + GB_set_boot_rom_load_callback(&gb, (GB_boot_rom_load_callback_t)boot_rom_load); + GB_set_vblank_callback(&gb, (GB_vblank_callback_t) vblank); + GB_set_log_callback(&gb, (GB_log_callback_t) consoleLog); + GB_set_input_callback(&gb, (GB_input_callback_t) consoleInput); + GB_set_async_input_callback(&gb, (GB_input_callback_t) asyncConsoleInput); + GB_set_color_correction_mode(&gb, (GB_color_correction_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorCorrection"]); + GB_set_light_temperature(&gb, [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBLightTemperature"]); + GB_set_interference_volume(&gb, [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBInterferenceVolume"]); + GB_set_border_mode(&gb, (GB_border_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBBorderMode"]); + [self updatePalette]; + GB_set_rgb_encode_callback(&gb, rgbEncode); + GB_set_camera_get_pixel_callback(&gb, cameraGetPixel); + GB_set_camera_update_request_callback(&gb, cameraRequestUpdate); + GB_set_highpass_filter_mode(&gb, (GB_highpass_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBHighpassFilter"]); + GB_set_rewind_length(&gb, [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRewindLength"]); + GB_set_rtc_mode(&gb, [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRTCMode"]); + GB_apu_set_sample_callback(&gb, audioCallback); + GB_set_rumble_callback(&gb, rumbleCallback); + GB_set_infrared_callback(&gb, infraredStateChanged); + [self updateRumbleMode]; +} + +- (void) updateMinSize +{ + self.mainWindow.contentMinSize = NSMakeSize(GB_get_screen_width(&gb), GB_get_screen_height(&gb)); + if (self.mainWindow.contentView.bounds.size.width < GB_get_screen_width(&gb) || + self.mainWindow.contentView.bounds.size.width < GB_get_screen_height(&gb)) { + [self.mainWindow zoom:nil]; + } + self.osdView.usesSGBScale = GB_get_screen_width(&gb) == 256; +} + +- (void) vblankWithType:(GB_vblank_type_t)type +{ + if (_gbsVisualizer) { + dispatch_async(dispatch_get_main_queue(), ^{ + [_gbsVisualizer setNeedsDisplay:true]; + }); + } + if (type != GB_VBLANK_TYPE_REPEAT) { + [self.view flip]; + if (borderModeChanged) { + dispatch_sync(dispatch_get_main_queue(), ^{ + size_t previous_width = GB_get_screen_width(&gb); + GB_set_border_mode(&gb, (GB_border_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBBorderMode"]); + if (GB_get_screen_width(&gb) != previous_width) { + [self.view screenSizeChanged]; + [self updateMinSize]; + } + }); + borderModeChanged = false; + } + GB_set_pixels_output(&gb, self.view.pixels); + } + + if (self.vramWindow.isVisible) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.view.mouseHidingEnabled = (self.mainWindow.styleMask & NSWindowStyleMaskFullScreen) != 0; + [self reloadVRAMData: nil]; + }); + } + if (self.view.isRewinding) { + rewind = true; + [self.osdView displayText:@"Rewinding..."]; + } +} + +- (void)gotNewSample:(GB_sample_t *)sample +{ + if (_gbsVisualizer) { + [_gbsVisualizer addSample:sample]; + } + [audioLock lock]; + if (_audioClient.isPlaying) { + if (audioBufferPosition == audioBufferSize) { + if (audioBufferSize >= 0x4000) { + audioBufferPosition = 0; + [audioLock unlock]; + return; + } + + if (audioBufferSize == 0) { + audioBufferSize = 512; + } + else { + audioBufferSize += audioBufferSize >> 2; + } + audioBuffer = realloc(audioBuffer, sizeof(*sample) * audioBufferSize); + } + if (_volume != 1) { + sample->left *= _volume; + sample->right *= _volume; + } + audioBuffer[audioBufferPosition++] = *sample; + } + if (audioBufferPosition == audioBufferNeeded) { + [audioLock signal]; + audioBufferNeeded = 0; + } + [audioLock unlock]; +} + +- (void)rumbleChanged:(double)amp +{ + [_view setRumble:amp]; +} + +- (void) preRun +{ + GB_set_pixels_output(&gb, self.view.pixels); + GB_set_sample_rate(&gb, 96000); + _audioClient = [[GBAudioClient alloc] initWithRendererBlock:^(UInt32 sampleRate, UInt32 nFrames, GB_sample_t *buffer) { + [audioLock lock]; + + if (audioBufferPosition < nFrames) { + audioBufferNeeded = nFrames; + [audioLock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.125]]; + } + + if (stopping || GB_debugger_is_stopped(&gb)) { + memset(buffer, 0, nFrames * sizeof(*buffer)); + [audioLock unlock]; + return; + } + + if (audioBufferPosition < nFrames) { + // Not enough audio + memset(buffer, 0, (nFrames - audioBufferPosition) * sizeof(*buffer)); + memcpy(buffer, audioBuffer, audioBufferPosition * sizeof(*buffer)); + audioBufferPosition = 0; + } + else if (audioBufferPosition < nFrames + 4800) { + memcpy(buffer, audioBuffer, nFrames * sizeof(*buffer)); + memmove(audioBuffer, audioBuffer + nFrames, (audioBufferPosition - nFrames) * sizeof(*buffer)); + audioBufferPosition = audioBufferPosition - nFrames; + } + else { + memcpy(buffer, audioBuffer + (audioBufferPosition - nFrames), nFrames * sizeof(*buffer)); + audioBufferPosition = 0; + } + [audioLock unlock]; + } andSampleRate:96000]; + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"Mute"]) { + [_audioClient start]; + } + hex_timer = [NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(reloadMemoryView) userInfo:nil repeats:true]; + [[NSRunLoop mainRunLoop] addTimer:hex_timer forMode:NSDefaultRunLoopMode]; + + /* Clear pending alarms, don't play alarms while playing */ + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBNotificationsUsed"]) { + NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; + for (NSUserNotification *notification in [center scheduledNotifications]) { + if ([notification.identifier isEqualToString:self.fileURL.path]) { + [center removeScheduledNotification:notification]; + break; + } + } + + for (NSUserNotification *notification in [center deliveredNotifications]) { + if ([notification.identifier isEqualToString:self.fileURL.path]) { + [center removeDeliveredNotification:notification]; + break; + } + } + } +} + +static unsigned *multiplication_table_for_frequency(unsigned frequency) +{ + unsigned *ret = malloc(sizeof(*ret) * 0x100); + for (unsigned i = 0; i < 0x100; i++) { + ret[i] = i * frequency; + } + return ret; +} + +- (void)run +{ + assert(!master); + [self preRun]; + if (slave) { + [slave preRun]; + unsigned *masterTable = multiplication_table_for_frequency(GB_get_clock_rate(&gb)); + unsigned *slaveTable = multiplication_table_for_frequency(GB_get_clock_rate(&slave->gb)); + while (running) { + if (linkOffset <= 0) { + linkOffset += slaveTable[GB_run(&gb)]; + } + else { + linkOffset -= masterTable[GB_run(&slave->gb)]; + } + if (unlikely(_pendingAtomicBlock)) { + _pendingAtomicBlock(); + _pendingAtomicBlock = nil; + } + } + free(masterTable); + free(slaveTable); + [slave postRun]; + } + else { + while (running) { + if (rewind) { + rewind = false; + GB_rewind_pop(&gb); + if (!GB_rewind_pop(&gb)) { + rewind = self.view.isRewinding; + } + } + else { + GB_run(&gb); + } + if (unlikely(_pendingAtomicBlock)) { + _pendingAtomicBlock(); + _pendingAtomicBlock = nil; + } + } + } + [self postRun]; + stopping = false; +} + +- (void)postRun +{ + [hex_timer invalidate]; + [audioLock lock]; + memset(audioBuffer, 0, (audioBufferSize - audioBufferPosition) * sizeof(*audioBuffer)); + audioBufferPosition = audioBufferNeeded; + [audioLock signal]; + [audioLock unlock]; + [_audioClient stop]; + _audioClient = nil; + self.view.mouseHidingEnabled = false; + GB_save_battery(&gb, self.savPath.UTF8String); + GB_save_cheats(&gb, self.chtPath.UTF8String); + unsigned time_to_alarm = GB_time_to_alarm(&gb); + + if (time_to_alarm) { + [NSUserNotificationCenter defaultUserNotificationCenter].delegate = (id)[NSApp delegate]; + NSUserNotification *notification = [[NSUserNotification alloc] init]; + NSString *friendlyName = [[self.fileURL lastPathComponent] stringByDeletingPathExtension]; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\([^)]+\\)|\\[[^\\]]+\\]" options:0 error:nil]; + friendlyName = [regex stringByReplacingMatchesInString:friendlyName options:0 range:NSMakeRange(0, [friendlyName length]) withTemplate:@""]; + friendlyName = [friendlyName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + + notification.title = [NSString stringWithFormat:@"%@ Played an Alarm", friendlyName]; + notification.informativeText = [NSString stringWithFormat:@"%@ requested your attention by playing a scheduled alarm", friendlyName]; + notification.identifier = self.fileURL.path; + notification.deliveryDate = [NSDate dateWithTimeIntervalSinceNow:time_to_alarm]; + notification.soundName = NSUserNotificationDefaultSoundName; + [[NSUserNotificationCenter defaultUserNotificationCenter] scheduleNotification:notification]; + [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"GBNotificationsUsed"]; + } + [_view setRumble:0]; +} + +- (void) start +{ + self.gbsPlayPauseButton.state = true; + self.view.mouseHidingEnabled = (self.mainWindow.styleMask & NSWindowStyleMaskFullScreen) != 0; + if (master) { + [master start]; + return; + } + if (running) return; + running = true; + [[[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil] start]; +} + +- (void) stop +{ + self.gbsPlayPauseButton.state = false; + if (master) { + if (!master->running) return; + GB_debugger_set_disabled(&gb, true); + if (GB_debugger_is_stopped(&gb)) { + [self interruptDebugInputRead]; + } + [master stop]; + GB_debugger_set_disabled(&gb, false); + return; + } + if (!running) return; + GB_debugger_set_disabled(&gb, true); + if (GB_debugger_is_stopped(&gb)) { + [self interruptDebugInputRead]; + } + [audioLock lock]; + stopping = true; + [audioLock signal]; + [audioLock unlock]; + running = false; + while (stopping) { + [audioLock lock]; + [audioLock signal]; + [audioLock unlock]; + } + GB_debugger_set_disabled(&gb, false); +} + +- (void) loadBootROM: (GB_boot_rom_t)type +{ + static NSString *const names[] = { + [GB_BOOT_ROM_DMG_0] = @"dmg0_boot", + [GB_BOOT_ROM_DMG] = @"dmg_boot", + [GB_BOOT_ROM_MGB] = @"mgb_boot", + [GB_BOOT_ROM_SGB] = @"sgb_boot", + [GB_BOOT_ROM_SGB2] = @"sgb2_boot", + [GB_BOOT_ROM_CGB_0] = @"cgb0_boot", + [GB_BOOT_ROM_CGB] = @"cgb_boot", + [GB_BOOT_ROM_AGB] = @"agb_boot", + }; + GB_load_boot_rom(&gb, [[self bootROMPathForName:names[type]] UTF8String]); +} + +- (IBAction)reset:(id)sender +{ + [self stop]; + size_t old_width = GB_get_screen_width(&gb); + + if ([sender tag] != MODEL_NONE) { + current_model = (enum model)[sender tag]; + } + + GB_switch_model_and_reset(&gb, [self internalModel]); + + if (old_width != GB_get_screen_width(&gb)) { + [self.view screenSizeChanged]; + } + + [self updateMinSize]; + + if ([sender tag] != 0) { + /* User explictly selected a model, save the preference */ + [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_DMG forKey:@"EmulateDMG"]; + [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_SGB forKey:@"EmulateSGB"]; + [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_AGB forKey:@"EmulateAGB"]; + [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_MGB forKey:@"EmulateMGB"]; + } + + /* Reload the ROM, SAV and SYM files */ + [self loadROM]; + + [self start]; + + if (hex_controller) { + /* Verify bank sanity, especially when switching models. */ + [(GBMemoryByteArray *)(hex_controller.byteArray) setSelectedBank:0]; + [self hexUpdateBank:self.memoryBankInput ignoreErrors:true]; + } + + char title[17]; + GB_get_rom_title(&gb, title); + [self.osdView displayText:[NSString stringWithFormat:@"SameBoy v" GB_VERSION "\n%s\n%08X", title, GB_get_rom_crc32(&gb)]]; +} + +- (IBAction)togglePause:(id)sender +{ + if (master) { + [master togglePause:sender]; + return; + } + if (running) { + [self stop]; + } + else { + [self start]; + } +} + +- (void)dealloc +{ + [cameraSession stopRunning]; + self.view.gb = NULL; + GB_free(&gb); + if (cameraImage) { + CVBufferRelease(cameraImage); + } + if (audioBuffer) { + free(audioBuffer); + } +} + +- (void)windowControllerDidLoadNib:(NSWindowController *)aController +{ + [super windowControllerDidLoadNib:aController]; + // Interface Builder bug? + [self.consoleWindow setContentSize:self.consoleWindow.minSize]; + /* Close Open Panels, if any */ + for (NSWindow *window in [[NSApplication sharedApplication] windows]) { + if ([window isKindOfClass:[NSOpenPanel class]]) { + [(NSOpenPanel *)window cancel:self]; + } + } + + NSMutableParagraphStyle *paragraph_style = [[NSMutableParagraphStyle alloc] init]; + [paragraph_style setLineSpacing:2]; + + self.debuggerSideViewInput.font = [NSFont userFixedPitchFontOfSize:12]; + self.debuggerSideViewInput.textColor = [NSColor whiteColor]; + self.debuggerSideViewInput.defaultParagraphStyle = paragraph_style; + [self.debuggerSideViewInput setString:@"registers\nbacktrace\n"]; + ((GBTerminalTextFieldCell *)self.consoleInput.cell).gb = &gb; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateSideView) + name:NSTextDidChangeNotification + object:self.debuggerSideViewInput]; + + self.consoleOutput.textContainerInset = NSMakeSize(4, 4); + [self.view becomeFirstResponder]; + self.view.frameBlendingMode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBFrameBlendingMode"]; + CGRect window_frame = self.mainWindow.frame; + window_frame.size.width = MAX([[NSUserDefaults standardUserDefaults] integerForKey:@"LastWindowWidth"], + window_frame.size.width); + window_frame.size.height = MAX([[NSUserDefaults standardUserDefaults] integerForKey:@"LastWindowHeight"], + window_frame.size.height); + [self.mainWindow setFrame:window_frame display:true]; + self.vramStatusLabel.cell.backgroundStyle = NSBackgroundStyleRaised; + + NSUInteger height_diff = self.vramWindow.frame.size.height - self.vramWindow.contentView.frame.size.height; + CGRect vram_window_rect = self.vramWindow.frame; + vram_window_rect.size.height = 384 + height_diff + 48; + [self.vramWindow setFrame:vram_window_rect display:true animate:false]; + + + self.consoleWindow.title = [NSString stringWithFormat:@"Debug Console – %@", [self.fileURL.path lastPathComponent]]; + self.debuggerSplitView.dividerColor = [NSColor clearColor]; + if (@available(macOS 11.0, *)) { + self.memoryWindow.toolbarStyle = NSWindowToolbarStyleExpanded; + self.printerFeedWindow.toolbarStyle = NSWindowToolbarStyleUnifiedCompact; + [self.printerFeedWindow.toolbar removeItemAtIndex:1]; + self.printerFeedWindow.toolbar.items.firstObject.image = + [NSImage imageWithSystemSymbolName:@"square.and.arrow.down" + accessibilityDescription:@"Save"]; + self.printerFeedWindow.toolbar.items.lastObject.image = + [NSImage imageWithSystemSymbolName:@"printer" + accessibilityDescription:@"Print"]; + } + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateHighpassFilter) + name:@"GBHighpassFilterChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateColorCorrectionMode) + name:@"GBColorCorrectionChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateLightTemperature) + name:@"GBLightTemperatureChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateInterferenceVolume) + name:@"GBInterferenceVolumeChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateFrameBlendingMode) + name:@"GBFrameBlendingModeChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updatePalette) + name:@"GBColorPaletteChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateBorderMode) + name:@"GBBorderModeChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateRumbleMode) + name:@"GBRumbleModeChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateRewindLength) + name:@"GBRewindLengthChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateRTCMode) + name:@"GBRTCModeChanged" + object:nil]; + + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(dmgModelChanged) + name:@"GBDMGModelChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(sgbModelChanged) + name:@"GBSGBModelChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(cgbModelChanged) + name:@"GBCGBModelChanged" + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(agbModelChanged) + name:@"GBAGBModelChanged" + object:nil]; + + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateVolume) + name:@"GBVolumeChanged" + object:nil]; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateDMG"]) { + current_model = MODEL_DMG; + } + else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateSGB"]) { + current_model = MODEL_SGB; + } + else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateMGB"]) { + current_model = MODEL_MGB; + } + else { + current_model = [[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateAGB"]? MODEL_AGB : MODEL_CGB; + } + + [self initCommon]; + self.view.gb = &gb; + self.view.osdView = _osdView; + [self.view screenSizeChanged]; + if ([self loadROM]) { + _mainWindow.alphaValue = 0; // Hack hack ugly hack + dispatch_async(dispatch_get_main_queue(), ^{ + [self close]; + }); + } + else { + [self reset:nil]; + } +} + +- (void) initMemoryView +{ + hex_controller = [[HFController alloc] init]; + [hex_controller setBytesPerColumn:1]; + [hex_controller setEditMode:HFOverwriteMode]; + + [hex_controller setByteArray:[[GBMemoryByteArray alloc] initWithDocument:self]]; + + /* Here we're going to make three representers - one for the hex, one for the ASCII, and one for the scrollbar. To lay these all out properly, we'll use a fourth HFLayoutRepresenter. */ + HFLayoutRepresenter *layoutRep = [[HFLayoutRepresenter alloc] init]; + HFHexTextRepresenter *hexRep = [[HFHexTextRepresenter alloc] init]; + HFStringEncodingTextRepresenter *asciiRep = [[HFStringEncodingTextRepresenter alloc] init]; + HFVerticalScrollerRepresenter *scrollRep = [[HFVerticalScrollerRepresenter alloc] init]; + lineRep = [[HFLineCountingRepresenter alloc] init]; + HFStatusBarRepresenter *statusRep = [[HFStatusBarRepresenter alloc] init]; + + lineRep.lineNumberFormat = HFLineNumberFormatHexadecimal; + + /* Add all our reps to the controller. */ + [hex_controller addRepresenter:layoutRep]; + [hex_controller addRepresenter:hexRep]; + [hex_controller addRepresenter:asciiRep]; + [hex_controller addRepresenter:scrollRep]; + [hex_controller addRepresenter:lineRep]; + [hex_controller addRepresenter:statusRep]; + + /* Tell the layout rep which reps it should lay out. */ + [layoutRep addRepresenter:hexRep]; + [layoutRep addRepresenter:scrollRep]; + [layoutRep addRepresenter:asciiRep]; + [layoutRep addRepresenter:lineRep]; + [layoutRep addRepresenter:statusRep]; + + + [(NSView *)[hexRep view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + + /* Grab the layout rep's view and stick it into our container. */ + NSView *layoutView = [layoutRep view]; + NSRect layoutViewFrame = self.memoryView.frame; + [layoutView setFrame:layoutViewFrame]; + [layoutView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable | NSViewMaxYMargin]; + [self.memoryView addSubview:layoutView]; + self.memoryView = layoutView; + + self.memoryBankItem.enabled = false; +} + ++ (BOOL)autosavesInPlace +{ + return true; +} + +- (NSString *)windowNibName +{ + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"Document"; +} + +- (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type +{ + return true; +} + +- (IBAction)changeGBSTrack:(id)sender +{ + if (!running) { + [self start]; + } + [self performAtomicBlock:^{ + GB_gbs_switch_track(&gb, self.gbsTracks.indexOfSelectedItem); + }]; +} +- (IBAction)gbsNextPrevPushed:(id)sender +{ + if (self.gbsNextPrevButton.selectedSegment == 0) { + // Previous + if (self.gbsTracks.indexOfSelectedItem == 0) { + [self.gbsTracks selectItemAtIndex:self.gbsTracks.numberOfItems - 1]; + } + else { + [self.gbsTracks selectItemAtIndex:self.gbsTracks.indexOfSelectedItem - 1]; + } + } + else { + // Next + if (self.gbsTracks.indexOfSelectedItem == self.gbsTracks.numberOfItems - 1) { + [self.gbsTracks selectItemAtIndex: 0]; + } + else { + [self.gbsTracks selectItemAtIndex:self.gbsTracks.indexOfSelectedItem + 1]; + } + } + [self changeGBSTrack:sender]; +} + +- (void)prepareGBSInterface: (GB_gbs_info_t *)info +{ + GB_set_rendering_disabled(&gb, true); + _view = nil; + for (NSView *view in [_mainWindow.contentView.subviews copy]) { + [view removeFromSuperview]; + } + if (@available(macOS 11, *)) { + [[NSBundle mainBundle] loadNibNamed:@"GBS11" owner:self topLevelObjects:nil]; + } + else { + [[NSBundle mainBundle] loadNibNamed:@"GBS" owner:self topLevelObjects:nil]; + } + [_mainWindow setContentSize:self.gbsPlayerView.bounds.size]; + _mainWindow.styleMask &= ~NSWindowStyleMaskResizable; + dispatch_async(dispatch_get_main_queue(), ^{ // Cocoa is weird, no clue why it's needed + [_mainWindow standardWindowButton:NSWindowZoomButton].enabled = false; + }); + [_mainWindow.contentView addSubview:self.gbsPlayerView]; + _mainWindow.movableByWindowBackground = true; + [_mainWindow setContentBorderThickness:24 forEdge:NSRectEdgeMinY]; + + self.gbsTitle.stringValue = [NSString stringWithCString:info->title encoding:NSISOLatin1StringEncoding] ?: @"GBS Player"; + self.gbsAuthor.stringValue = [NSString stringWithCString:info->author encoding:NSISOLatin1StringEncoding] ?: @"Unknown Composer"; + NSString *copyright = [NSString stringWithCString:info->copyright encoding:NSISOLatin1StringEncoding]; + if (copyright) { + copyright = [@"©" stringByAppendingString:copyright]; + } + self.gbsCopyright.stringValue = copyright ?: @"Missing copyright information"; + for (unsigned i = 0; i < info->track_count; i++) { + [self.gbsTracks addItemWithTitle:[NSString stringWithFormat:@"Track %u", i + 1]]; + } + [self.gbsTracks selectItemAtIndex:info->first_track]; + self.gbsPlayPauseButton.image.template = true; + self.gbsPlayPauseButton.alternateImage.template = true; + self.gbsRewindButton.image.template = true; + for (unsigned i = 0; i < 2; i++) { + [self.gbsNextPrevButton imageForSegment:i].template = true; + } + + if (!_audioClient.isPlaying) { + [_audioClient start]; + } + + if (@available(macOS 10.10, *)) { + _mainWindow.titlebarAppearsTransparent = true; + } +} + +- (bool)isCartContainer +{ + return [self.fileName.pathExtension.lowercaseString isEqualToString:@"gbcart"]; +} + +- (NSString *)savPath +{ + if (self.isCartContainer) { + return [self.fileName stringByAppendingPathComponent:@"battery.sav"]; + } + + return [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sav"].path; +} + +- (NSString *)chtPath +{ + if (self.isCartContainer) { + return [self.fileName stringByAppendingPathComponent:@"cheats.cht"]; + } + + return [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"cht"].path; +} + +- (NSString *)saveStatePath:(unsigned)index +{ + if (self.isCartContainer) { + return [self.fileName stringByAppendingPathComponent:[NSString stringWithFormat:@"state.s%u", index]]; + } + return [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"s%u", index]].path; +} + +- (NSString *)romPath +{ + NSString *fileName = self.fileName; + if (self.isCartContainer) { + NSArray *paths = [[NSString stringWithContentsOfFile:[fileName stringByAppendingPathComponent:@"rom.gbl"] + encoding:NSUTF8StringEncoding + error:nil] componentsSeparatedByString:@"\n"]; + fileName = nil; + bool needsRebuild = false; + for (NSString *path in paths) { + NSURL *url = [NSURL URLWithString:path relativeToURL:self.fileURL]; + if ([[NSFileManager defaultManager] fileExistsAtPath:url.path]) { + if (fileName && ![fileName isEqualToString:url.path]) { + needsRebuild = true; + break; + } + fileName = url.path; + } + else { + needsRebuild = true; + } + } + if (fileName && needsRebuild) { + [[NSString stringWithFormat:@"%@\n%@\n%@", + [fileName pathRelativeToDirectory:self.fileName], + fileName, + [[NSURL fileURLWithPath:fileName].fileReferenceURL.absoluteString substringFromIndex:strlen("file://")]] + writeToFile:[self.fileName stringByAppendingPathComponent:@"rom.gbl"] + atomically:false + encoding:NSUTF8StringEncoding + error:nil]; + } + } + + return fileName; +} + +static bool is_path_writeable(const char *path) +{ + if (!access(path, W_OK)) return true; + int fd = creat(path, 0644); + if (fd == -1) return false; + close(fd); + unlink(path); + return true; +} + +- (int) loadROM +{ + __block int ret = 0; + NSString *fileName = self.romPath; + if (!fileName) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:@"Could not locate the ROM referenced by this Game Boy Cartridge"]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + return 1; + } + + NSString *rom_warnings = [self captureOutputForBlock:^{ + GB_debugger_clear_symbols(&gb); + if ([[[fileName pathExtension] lowercaseString] isEqualToString:@"isx"]) { + ret = GB_load_isx(&gb, fileName.UTF8String); + if (!self.isCartContainer) { + GB_load_battery(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"ram"].path.UTF8String); + } + } + else if ([[[fileName pathExtension] lowercaseString] isEqualToString:@"gbs"]) { + __block GB_gbs_info_t info; + ret = GB_load_gbs(&gb, fileName.UTF8String, &info); + [self prepareGBSInterface:&info]; + } + else { + ret = GB_load_rom(&gb, [fileName UTF8String]); + } + if (GB_save_battery_size(&gb)) { + if (!is_path_writeable(self.savPath.UTF8String)) { + GB_log(&gb, "The save path for this ROM is not writeable, progress will not be saved.\n"); + } + } + GB_load_battery(&gb, self.savPath.UTF8String); + GB_load_cheats(&gb, self.chtPath.UTF8String); + [self.cheatWindowController cheatsUpdated]; + GB_debugger_load_symbol_file(&gb, [[[NSBundle mainBundle] pathForResource:@"registers" ofType:@"sym"] UTF8String]); + GB_debugger_load_symbol_file(&gb, [[fileName stringByDeletingPathExtension] stringByAppendingPathExtension:@"sym"].UTF8String); + }]; + if (ret) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:rom_warnings?: @"Could not load ROM"]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + } + else if (rom_warnings && !rom_warning_issued) { + rom_warning_issued = true; + [GBWarningPopover popoverWithContents:rom_warnings onWindow:self.mainWindow]; + } + return ret; +} + +- (void)close +{ + [self disconnectLinkCable]; + if (!self.gbsPlayerView) { + [[NSUserDefaults standardUserDefaults] setInteger:self.mainWindow.frame.size.width forKey:@"LastWindowWidth"]; + [[NSUserDefaults standardUserDefaults] setInteger:self.mainWindow.frame.size.height forKey:@"LastWindowHeight"]; + } + [self stop]; + [self.consoleWindow close]; + [self.memoryWindow close]; + [self.vramWindow close]; + [self.printerFeedWindow close]; + [self.cheatsWindow close]; + [super close]; +} + +- (IBAction) interrupt:(id)sender +{ + [self log:"^C\n"]; + GB_debugger_break(&gb); + [self start]; + [self.consoleWindow makeKeyAndOrderFront:nil]; + [self.consoleInput becomeFirstResponder]; +} + +- (IBAction)mute:(id)sender +{ + if (_audioClient.isPlaying) { + [_audioClient stop]; + } + else { + [_audioClient start]; + if (_volume == 0) { + [GBWarningPopover popoverWithContents:@"Warning: Volume is set to to zero in the preferences panel" onWindow:self.mainWindow]; + } + } + [[NSUserDefaults standardUserDefaults] setBool:!_audioClient.isPlaying forKey:@"Mute"]; +} + +- (BOOL)validateUserInterfaceItem:(id)anItem +{ + if ([anItem action] == @selector(mute:)) { + [(NSMenuItem *)anItem setState:!_audioClient.isPlaying]; + } + else if ([anItem action] == @selector(togglePause:)) { + if (master) { + [(NSMenuItem *)anItem setState:(!master->running) || (GB_debugger_is_stopped(&gb)) || (GB_debugger_is_stopped(&gb))]; + } + [(NSMenuItem *)anItem setState:(!running) || (GB_debugger_is_stopped(&gb))]; + return !GB_debugger_is_stopped(&gb); + } + else if ([anItem action] == @selector(reset:) && anItem.tag != MODEL_NONE) { + [(NSMenuItem *)anItem setState:anItem.tag == current_model]; + } + else if ([anItem action] == @selector(interrupt:)) { + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"DeveloperMode"]) { + return false; + } + } + else if ([anItem action] == @selector(disconnectAllAccessories:)) { + [(NSMenuItem *)anItem setState:accessory == GBAccessoryNone]; + } + else if ([anItem action] == @selector(connectPrinter:)) { + [(NSMenuItem *)anItem setState:accessory == GBAccessoryPrinter]; + } + else if ([anItem action] == @selector(connectWorkboy:)) { + [(NSMenuItem *)anItem setState:accessory == GBAccessoryWorkboy]; + } + else if ([anItem action] == @selector(connectLinkCable:)) { + [(NSMenuItem *)anItem setState:[(NSMenuItem *)anItem representedObject] == master || + [(NSMenuItem *)anItem representedObject] == slave]; + } + else if ([anItem action] == @selector(toggleCheats:)) { + [(NSMenuItem *)anItem setState:GB_cheats_enabled(&gb)]; + } + else if ([anItem action] == @selector(toggleDisplayBackground:)) { + [(NSMenuItem *)anItem setState:!GB_is_background_rendering_disabled(&gb)]; + } + else if ([anItem action] == @selector(toggleDisplayObjects:)) { + [(NSMenuItem *)anItem setState:!GB_is_object_rendering_disabled(&gb)]; + } + else if ([anItem action] == @selector(toggleAudioRecording:)) { + [(NSMenuItem *)anItem setTitle:_isRecordingAudio? @"Stop Audio Recording" : @"Start Audio Recording…"]; + } + + return [super validateUserInterfaceItem:anItem]; +} + + +- (void) windowWillEnterFullScreen:(NSNotification *)notification +{ + fullScreen = true; + self.view.mouseHidingEnabled = running; +} + +- (void) windowWillExitFullScreen:(NSNotification *)notification +{ + fullScreen = false; + self.view.mouseHidingEnabled = false; +} + +- (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)newFrame +{ + if (fullScreen) { + return newFrame; + } + size_t width = GB_get_screen_width(&gb), + height = GB_get_screen_height(&gb); + + NSRect rect = window.contentView.frame; + + unsigned titlebarSize = window.contentView.superview.frame.size.height - rect.size.height; + unsigned step = width / [[window screen] backingScaleFactor]; + + rect.size.width = floor(rect.size.width / step) * step + step; + rect.size.height = rect.size.width * height / width + titlebarSize; + + if (rect.size.width > newFrame.size.width) { + rect.size.width = width; + rect.size.height = height + titlebarSize; + } + else if (rect.size.height > newFrame.size.height) { + rect.size.width = width; + rect.size.height = height + titlebarSize; + } + + rect.origin = window.frame.origin; + rect.origin.y -= rect.size.height - window.frame.size.height; + + return rect; +} + +- (void) appendPendingOutput +{ + [console_output_lock lock]; + if (shouldClearSideView) { + shouldClearSideView = false; + [self.debuggerSideView setString:@""]; + } + if (pending_console_output) { + NSTextView *textView = logToSideView? self.debuggerSideView : self.consoleOutput; + + [hex_controller reloadData]; + [self reloadVRAMData: nil]; + + [textView.textStorage appendAttributedString:pending_console_output]; + [textView scrollToEndOfDocument:nil]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DeveloperMode"]) { + [self.consoleWindow orderFront:nil]; + } + pending_console_output = nil; + } + [console_output_lock unlock]; +} + +- (void) log: (const char *) string withAttributes: (GB_log_attributes) attributes +{ + NSString *nsstring = @(string); // For ref-counting + if (capturedOutput) { + [capturedOutput appendString:nsstring]; + return; + } + + + NSFont *font = [NSFont userFixedPitchFontOfSize:12]; + NSUnderlineStyle underline = NSUnderlineStyleNone; + if (attributes & GB_LOG_BOLD) { + font = [[NSFontManager sharedFontManager] convertFont:font toHaveTrait:NSBoldFontMask]; + } + + if (attributes & GB_LOG_UNDERLINE_MASK) { + underline = (attributes & GB_LOG_UNDERLINE_MASK) == GB_LOG_DASHED_UNDERLINE? NSUnderlinePatternDot | NSUnderlineStyleSingle : NSUnderlineStyleSingle; + } + + NSMutableParagraphStyle *paragraph_style = [[NSMutableParagraphStyle alloc] init]; + [paragraph_style setLineSpacing:2]; + NSMutableAttributedString *attributed = + [[NSMutableAttributedString alloc] initWithString:nsstring + attributes:@{NSFontAttributeName: font, + NSForegroundColorAttributeName: [NSColor whiteColor], + NSUnderlineStyleAttributeName: @(underline), + NSParagraphStyleAttributeName: paragraph_style}]; + + [console_output_lock lock]; + if (!pending_console_output) { + pending_console_output = attributed; + } + else { + [pending_console_output appendAttributedString:attributed]; + } + + if (![console_output_timer isValid]) { + console_output_timer = [NSTimer timerWithTimeInterval:(NSTimeInterval)0.05 target:self selector:@selector(appendPendingOutput) userInfo:nil repeats:false]; + [[NSRunLoop mainRunLoop] addTimer:console_output_timer forMode:NSDefaultRunLoopMode]; + } + + [console_output_lock unlock]; + + /* Make sure mouse is not hidden while debugging */ + self.view.mouseHidingEnabled = false; +} + +- (IBAction)showConsoleWindow:(id)sender +{ + [self.consoleWindow orderBack:nil]; +} + +- (IBAction)consoleInput:(NSTextField *)sender +{ + NSString *line = [sender stringValue]; + if ([line isEqualToString:@""] && lastConsoleInput) { + line = lastConsoleInput; + } + else if (line) { + lastConsoleInput = line; + } + else { + line = @""; + } + + if (!in_sync_input) { + [self log:">"]; + } + [self log:[line UTF8String]]; + [self log:"\n"]; + [has_debugger_input lock]; + [debugger_input_queue addObject:line]; + [has_debugger_input unlockWithCondition:1]; + + [sender setStringValue:@""]; +} + +- (void) interruptDebugInputRead +{ + [has_debugger_input lock]; + [debugger_input_queue addObject:[NSNull null]]; + [has_debugger_input unlockWithCondition:1]; +} + +- (void) updateSideView +{ + if (!GB_debugger_is_stopped(&gb)) { + return; + } + + if (![NSThread isMainThread]) { + dispatch_sync(dispatch_get_main_queue(), ^{ + [self updateSideView]; + }); + return; + } + + [console_output_lock lock]; + shouldClearSideView = true; + [self appendPendingOutput]; + logToSideView = true; + [console_output_lock unlock]; + + for (NSString *line in [self.debuggerSideViewInput.string componentsSeparatedByString:@"\n"]) { + NSString *stripped = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + if ([stripped length]) { + char *dupped = strdup([stripped UTF8String]); + GB_attributed_log(&gb, GB_LOG_BOLD, "%s:\n", dupped); + GB_debugger_execute_command(&gb, dupped); + GB_log(&gb, "\n"); + free(dupped); + } + } + + [console_output_lock lock]; + [self appendPendingOutput]; + logToSideView = false; + [console_output_lock unlock]; +} + +- (char *) getDebuggerInput +{ + bool isPlaying = _audioClient.isPlaying; + if (isPlaying) { + [_audioClient stop]; + } + [audioLock lock]; + [audioLock signal]; + [audioLock unlock]; + [self updateSideView]; + [self log:">"]; + in_sync_input = true; + [has_debugger_input lockWhenCondition:1]; + NSString *input = [debugger_input_queue firstObject]; + [debugger_input_queue removeObjectAtIndex:0]; + [has_debugger_input unlockWithCondition:[debugger_input_queue count] != 0]; + in_sync_input = false; + shouldClearSideView = true; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(NSEC_PER_SEC / 10)), dispatch_get_main_queue(), ^{ + if (shouldClearSideView) { + shouldClearSideView = false; + [self.debuggerSideView setString:@""]; + } + }); + if (isPlaying) { + [_audioClient start]; + } + if ((id) input == [NSNull null]) { + return NULL; + } + return strdup([input UTF8String]); +} + +- (char *) getAsyncDebuggerInput +{ + [has_debugger_input lock]; + NSString *input = [debugger_input_queue firstObject]; + if (input) { + [debugger_input_queue removeObjectAtIndex:0]; + } + [has_debugger_input unlockWithCondition:[debugger_input_queue count] != 0]; + if ((id)input == [NSNull null]) { + return NULL; + } + return input? strdup([input UTF8String]): NULL; +} + +- (IBAction)saveState:(id)sender +{ + bool __block success = false; + [self performAtomicBlock:^{ + success = GB_save_state(&gb, [self saveStatePath:[sender tag]].UTF8String) == 0; + }]; + + if (!success) { + [GBWarningPopover popoverWithContents:@"Failed to write save state." onWindow:self.mainWindow]; + NSBeep(); + } + else { + [self.osdView displayText:@"State saved"]; + } +} + +- (int)loadStateFile:(const char *)path noErrorOnNotFound:(bool)noErrorOnFileNotFound; +{ + int __block result = false; + NSString *error = + [self captureOutputForBlock:^{ + result = GB_load_state(&gb, path); + }]; + + if (result == ENOENT && noErrorOnFileNotFound) { + return ENOENT; + } + + if (result) { + NSBeep(); + } + else { + [self.osdView displayText:@"State loaded"]; + } + if (error) { + [GBWarningPopover popoverWithContents:error onWindow:self.mainWindow]; + } + return result; +} + +- (IBAction)loadState:(id)sender +{ + int ret = [self loadStateFile:[self saveStatePath:[sender tag]].UTF8String noErrorOnNotFound:true]; + if (ret == ENOENT && !self.isCartContainer) { + [self loadStateFile:[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"sn%ld", (long)[sender tag]]].path.UTF8String noErrorOnNotFound:false]; + } +} + +- (IBAction)clearConsole:(id)sender +{ + [self.consoleOutput setString:@""]; +} + +- (void)log:(const char *)log +{ + [self log:log withAttributes:0]; +} + +- (uint8_t) readMemory:(uint16_t)addr +{ + while (!GB_is_inited(&gb)); + return GB_safe_read_memory(&gb, addr); +} + +- (void) writeMemory:(uint16_t)addr value:(uint8_t)value +{ + while (!GB_is_inited(&gb)); + GB_write_memory(&gb, addr, value); +} + +- (void) performAtomicBlock: (void (^)())block +{ + while (!GB_is_inited(&gb)); + bool isRunning = running && !GB_debugger_is_stopped(&gb); + if (master) { + isRunning |= master->running; + } + if (!isRunning) { + block(); + return; + } + + if (master) { + [master performAtomicBlock:block]; + return; + } + + _pendingAtomicBlock = block; + while (_pendingAtomicBlock); +} + +- (NSString *)captureOutputForBlock: (void (^)())block +{ + capturedOutput = [[NSMutableString alloc] init]; + [self performAtomicBlock:block]; + NSString *ret = [capturedOutput stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; + capturedOutput = nil; + return [ret length]? ret : nil; +} + ++ (NSImage *) imageFromData:(NSData *)data width:(NSUInteger) width height:(NSUInteger) height scale:(double) scale +{ + + NSImage *ret = [[NSImage alloc] initWithSize:NSMakeSize(width * scale, height * scale)]; + NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL + pixelsWide:width + pixelsHigh:height + bitsPerSample:8 + samplesPerPixel:3 + hasAlpha:false + isPlanar:false + colorSpaceName:NSDeviceRGBColorSpace + bitmapFormat:0 + bytesPerRow:4 * width + bitsPerPixel:32]; + memcpy(rep.bitmapData, data.bytes, data.length); + [ret addRepresentation:rep]; + return ret; +} + +- (void) reloadMemoryView +{ + if (self.memoryWindow.isVisible) { + [hex_controller reloadData]; + } +} + +- (IBAction) reloadVRAMData: (id) sender +{ + if (self.vramWindow.isVisible) { + uint8_t *io_regs = GB_get_direct_access(&gb, GB_DIRECT_ACCESS_IO, NULL, NULL); + switch ([self.vramTabView.tabViewItems indexOfObject:self.vramTabView.selectedTabViewItem]) { + case 0: + /* Tileset */ + { + GB_palette_type_t palette_type = GB_PALETTE_NONE; + NSUInteger palette_menu_index = self.tilesetPaletteButton.indexOfSelectedItem; + if (palette_menu_index) { + palette_type = palette_menu_index > 8? GB_PALETTE_OAM : GB_PALETTE_BACKGROUND; + } + size_t bufferLength = 256 * 192 * 4; + NSMutableData *data = [NSMutableData dataWithCapacity:bufferLength]; + data.length = bufferLength; + GB_draw_tileset(&gb, (uint32_t *)data.mutableBytes, palette_type, (palette_menu_index - 1) & 7); + + self.tilesetImageView.image = [Document imageFromData:data width:256 height:192 scale:1.0]; + self.tilesetImageView.layer.magnificationFilter = kCAFilterNearest; + } + break; + + case 1: + /* Tilemap */ + { + GB_palette_type_t palette_type = GB_PALETTE_NONE; + NSUInteger palette_menu_index = self.tilemapPaletteButton.indexOfSelectedItem; + if (palette_menu_index > 1) { + palette_type = palette_menu_index > 9? GB_PALETTE_OAM : GB_PALETTE_BACKGROUND; + } + else if (palette_menu_index == 1) { + palette_type = GB_PALETTE_AUTO; + } + + size_t bufferLength = 256 * 256 * 4; + NSMutableData *data = [NSMutableData dataWithCapacity:bufferLength]; + data.length = bufferLength; + GB_draw_tilemap(&gb, (uint32_t *)data.mutableBytes, palette_type, (palette_menu_index - 2) & 7, + (GB_map_type_t) self.tilemapMapButton.indexOfSelectedItem, + (GB_tileset_type_t) self.TilemapSetButton.indexOfSelectedItem); + + self.tilemapImageView.scrollRect = NSMakeRect(io_regs[GB_IO_SCX], + io_regs[GB_IO_SCY], + 160, 144); + self.tilemapImageView.image = [Document imageFromData:data width:256 height:256 scale:1.0]; + self.tilemapImageView.layer.magnificationFilter = kCAFilterNearest; + } + break; + + case 2: + /* OAM */ + { + _oamCount = GB_get_oam_info(&gb, _oamInfo, &_oamHeight); + dispatch_async(dispatch_get_main_queue(), ^{ + [self.objectView reloadData:self]; + }); + } + break; + + case 3: + /* Palettes */ + { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.paletteView reloadData:self]; + }); + } + break; + } + } +} + +- (IBAction) showMemory:(id)sender +{ + if (!hex_controller) { + [self initMemoryView]; + } + [self.memoryWindow makeKeyAndOrderFront:sender]; +} + +- (IBAction)hexGoTo:(id)sender +{ + NSString *error = [self captureOutputForBlock:^{ + uint16_t addr; + if (GB_debugger_evaluate(&gb, [[sender stringValue] UTF8String], &addr, NULL)) { + return; + } + addr -= lineRep.valueOffset; + if (addr >= hex_controller.byteArray.length) { + GB_log(&gb, "Value $%04x is out of range.\n", addr); + return; + } + [hex_controller setSelectedContentsRanges:@[[HFRangeWrapper withRange:HFRangeMake(addr, 0)]]]; + [hex_controller _ensureVisibilityOfLocation:addr]; + [self.memoryWindow makeFirstResponder:self.memoryView.subviews[0].subviews[0]]; + }]; + if (error) { + NSBeep(); + [GBWarningPopover popoverWithContents:error onView:sender]; + } +} + +- (void)hexUpdateBank:(NSControl *)sender ignoreErrors: (bool)ignore_errors +{ + NSString *error = [self captureOutputForBlock:^{ + uint16_t addr, bank; + if (GB_debugger_evaluate(&gb, [[sender stringValue] UTF8String], &addr, &bank)) { + return; + } + + if (bank == (uint16_t) -1) { + bank = addr; + } + + uint16_t n_banks = 1; + switch ([(GBMemoryByteArray *)(hex_controller.byteArray) mode]) { + case GBMemoryROM: { + size_t rom_size; + GB_get_direct_access(&gb, GB_DIRECT_ACCESS_ROM, &rom_size, NULL); + n_banks = rom_size / 0x4000; + break; + } + case GBMemoryVRAM: + n_banks = GB_is_cgb(&gb) ? 2 : 1; + break; + case GBMemoryExternalRAM: { + size_t ram_size; + GB_get_direct_access(&gb, GB_DIRECT_ACCESS_CART_RAM, &ram_size, NULL); + n_banks = (ram_size + 0x1FFF) / 0x2000; + break; + } + case GBMemoryRAM: + n_banks = GB_is_cgb(&gb) ? 8 : 1; + break; + case GBMemoryEntireSpace: + break; + } + + bank %= n_banks; + + [sender setStringValue:[NSString stringWithFormat:@"$%x", bank]]; + [(GBMemoryByteArray *)(hex_controller.byteArray) setSelectedBank:bank]; + [hex_controller reloadData]; + }]; + + if (error && !ignore_errors) { + NSBeep(); + [GBWarningPopover popoverWithContents:error onView:sender]; + } +} + +- (IBAction)hexUpdateBank:(NSControl *)sender +{ + [self hexUpdateBank:sender ignoreErrors:false]; +} + +- (IBAction)hexUpdateSpace:(NSPopUpButtonCell *)sender +{ + self.memoryBankItem.enabled = [sender indexOfSelectedItem] != GBMemoryEntireSpace; + GBMemoryByteArray *byteArray = (GBMemoryByteArray *)(hex_controller.byteArray); + [byteArray setMode:(GB_memory_mode_t)[sender indexOfSelectedItem]]; + uint16_t bank; + switch ((GB_memory_mode_t)[sender indexOfSelectedItem]) { + case GBMemoryEntireSpace: + case GBMemoryROM: + lineRep.valueOffset = 0; + GB_get_direct_access(&gb, GB_DIRECT_ACCESS_ROM, NULL, &bank); + byteArray.selectedBank = bank; + break; + case GBMemoryVRAM: + lineRep.valueOffset = 0x8000; + GB_get_direct_access(&gb, GB_DIRECT_ACCESS_VRAM, NULL, &bank); + byteArray.selectedBank = bank; + break; + case GBMemoryExternalRAM: + lineRep.valueOffset = 0xA000; + GB_get_direct_access(&gb, GB_DIRECT_ACCESS_CART_RAM, NULL, &bank); + byteArray.selectedBank = bank; + break; + case GBMemoryRAM: + lineRep.valueOffset = 0xC000; + GB_get_direct_access(&gb, GB_DIRECT_ACCESS_RAM, NULL, &bank); + byteArray.selectedBank = bank; + break; + } + [self.memoryBankInput setStringValue:[NSString stringWithFormat:@"$%x", byteArray.selectedBank]]; + [hex_controller reloadData]; + for (NSView *view in self.memoryView.subviews) { + [view setNeedsDisplay:true]; + } +} + +- (GB_gameboy_t *) gameboy +{ + return &gb; +} + ++ (BOOL)canConcurrentlyReadDocumentsOfType:(NSString *)typeName +{ + return true; +} + +- (void)cameraRequestUpdate +{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + @try { + if (!cameraSession) { + if (@available(macOS 10.14, *)) { + switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { + case AVAuthorizationStatusAuthorized: + break; + case AVAuthorizationStatusNotDetermined: { + [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { + [self cameraRequestUpdate]; + }]; + return; + } + case AVAuthorizationStatusDenied: + case AVAuthorizationStatusRestricted: + GB_camera_updated(&gb); + return; + } + } + + NSError *error; + AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeVideo]; + AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice: device error: &error]; + CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions([[[device formats] firstObject] formatDescription]); + + if (!input) { + GB_camera_updated(&gb); + return; + } + + cameraOutput = [[AVCaptureStillImageOutput alloc] init]; + /* Greyscale is not widely supported, so we use YUV, whose first element is the brightness. */ + [cameraOutput setOutputSettings: @{(id)kCVPixelBufferPixelFormatTypeKey: @(kYUVSPixelFormat), + (id)kCVPixelBufferWidthKey: @(MAX(128, 112 * dimensions.width / dimensions.height)), + (id)kCVPixelBufferHeightKey: @(MAX(112, 128 * dimensions.height / dimensions.width)),}]; + + + cameraSession = [AVCaptureSession new]; + cameraSession.sessionPreset = AVCaptureSessionPresetPhoto; + + [cameraSession addInput: input]; + [cameraSession addOutput: cameraOutput]; + [cameraSession startRunning]; + cameraConnection = [cameraOutput connectionWithMediaType: AVMediaTypeVideo]; + } + + [cameraOutput captureStillImageAsynchronouslyFromConnection: cameraConnection completionHandler: ^(CMSampleBufferRef sampleBuffer, NSError *error) { + if (error) { + GB_camera_updated(&gb); + } + else { + if (cameraImage) { + CVBufferRelease(cameraImage); + cameraImage = NULL; + } + cameraImage = CVBufferRetain(CMSampleBufferGetImageBuffer(sampleBuffer)); + /* We only need the actual buffer, no need to ever unlock it. */ + CVPixelBufferLockBaseAddress(cameraImage, 0); + } + + GB_camera_updated(&gb); + }]; + } + @catch (NSException *exception) { + /* I have not tested camera support on many devices, so we catch exceptions just in case. */ + GB_camera_updated(&gb); + } + }); +} + +- (uint8_t)cameraGetPixelAtX:(uint8_t)x andY:(uint8_t) y +{ + if (!cameraImage) { + return 0; + } + + uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(cameraImage); + size_t bytesPerRow = CVPixelBufferGetBytesPerRow(cameraImage); + uint8_t offsetX = (CVPixelBufferGetWidth(cameraImage) - 128) / 2; + uint8_t offsetY = (CVPixelBufferGetHeight(cameraImage) - 112) / 2; + uint8_t ret = baseAddress[(x + offsetX) * 2 + (y + offsetY) * bytesPerRow]; + + return ret; +} + +- (IBAction)toggleTilesetGrid:(NSButton *)sender +{ + if (sender.state) { + self.tilesetImageView.horizontalGrids = @[ + [[GBImageViewGridConfiguration alloc] initWithColor:[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.25] size:8], + [[GBImageViewGridConfiguration alloc] initWithColor:[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.5] size:128], + + ]; + self.tilesetImageView.verticalGrids = @[ + [[GBImageViewGridConfiguration alloc] initWithColor:[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.25] size:8], + [[GBImageViewGridConfiguration alloc] initWithColor:[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.5] size:64], + ]; + self.tilemapImageView.horizontalGrids = @[ + [[GBImageViewGridConfiguration alloc] initWithColor:[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.25] size:8], + ]; + self.tilemapImageView.verticalGrids = @[ + [[GBImageViewGridConfiguration alloc] initWithColor:[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.25] size:8], + ]; + } + else { + self.tilesetImageView.horizontalGrids = nil; + self.tilesetImageView.verticalGrids = nil; + self.tilemapImageView.horizontalGrids = nil; + self.tilemapImageView.verticalGrids = nil; + } +} + +- (IBAction)toggleScrollingDisplay:(NSButton *)sender +{ + self.tilemapImageView.displayScrollRect = sender.state; +} + +- (IBAction)vramTabChanged:(NSSegmentedControl *)sender +{ + [self.vramTabView selectTabViewItemAtIndex:[sender selectedSegment]]; + [self reloadVRAMData:sender]; + [self.vramTabView.selectedTabViewItem.view addSubview:self.gridButton]; + self.gridButton.hidden = [sender selectedSegment] >= 2; + + NSUInteger height_diff = self.vramWindow.frame.size.height - self.vramWindow.contentView.frame.size.height; + CGRect window_rect = self.vramWindow.frame; + window_rect.origin.y += window_rect.size.height; + switch ([sender selectedSegment]) { + case 0: + case 2: + window_rect.size.height = 384 + height_diff + 48; + break; + case 1: + window_rect.size.height = 512 + height_diff + 48; + break; + case 3: + window_rect.size.height = 24 * 16 + height_diff; + break; + + default: + break; + } + window_rect.origin.y -= window_rect.size.height; + [self.vramWindow setFrame:window_rect display:true animate:true]; +} + +- (void)mouseDidLeaveImageView:(GBImageView *)view +{ + self.vramStatusLabel.stringValue = @""; +} + +- (void)imageView:(GBImageView *)view mouseMovedToX:(NSUInteger)x Y:(NSUInteger)y +{ + if (view == self.tilesetImageView) { + uint8_t bank = x >= 128? 1 : 0; + x &= 127; + uint16_t tile = x / 8 + y / 8 * 16; + self.vramStatusLabel.stringValue = [NSString stringWithFormat:@"Tile number $%02x at %d:$%04x", tile & 0xFF, bank, 0x8000 + tile * 0x10]; + } + else if (view == self.tilemapImageView) { + uint16_t map_offset = x / 8 + y / 8 * 32; + uint16_t map_base = 0x1800; + GB_map_type_t map_type = (GB_map_type_t) self.tilemapMapButton.indexOfSelectedItem; + GB_tileset_type_t tileset_type = (GB_tileset_type_t) self.TilemapSetButton.indexOfSelectedItem; + uint8_t lcdc = ((uint8_t *)GB_get_direct_access(&gb, GB_DIRECT_ACCESS_IO, NULL, NULL))[GB_IO_LCDC]; + uint8_t *vram = GB_get_direct_access(&gb, GB_DIRECT_ACCESS_VRAM, NULL, NULL); + + if (map_type == GB_MAP_9C00 || (map_type == GB_MAP_AUTO && lcdc & 0x08)) { + map_base = 0x1C00; + } + + if (tileset_type == GB_TILESET_AUTO) { + tileset_type = (lcdc & 0x10)? GB_TILESET_8800 : GB_TILESET_8000; + } + + uint8_t tile = vram[map_base + map_offset]; + uint16_t tile_address = 0; + if (tileset_type == GB_TILESET_8000) { + tile_address = 0x8000 + tile * 0x10; + } + else { + tile_address = 0x9000 + (int8_t)tile * 0x10; + } + + if (GB_is_cgb(&gb)) { + uint8_t attributes = vram[map_base + map_offset + 0x2000]; + self.vramStatusLabel.stringValue = [NSString stringWithFormat:@"Tile number $%02x (%d:$%04x) at map address $%04x (Attributes: %c%c%c%d%d)", + tile, + attributes & 0x8? 1 : 0, + tile_address, + 0x8000 + map_base + map_offset, + (attributes & 0x80) ? 'P' : '-', + (attributes & 0x40) ? 'V' : '-', + (attributes & 0x20) ? 'H' : '-', + attributes & 0x8? 1 : 0, + attributes & 0x7 + ]; + } + else { + self.vramStatusLabel.stringValue = [NSString stringWithFormat:@"Tile number $%02x ($%04x) at map address $%04x", + tile, + tile_address, + 0x8000 + map_base + map_offset + ]; + } + + } +} + +- (GB_oam_info_t *)oamInfo +{ + return _oamInfo; +} + +- (IBAction)showVRAMViewer:(id)sender +{ + [self.vramWindow makeKeyAndOrderFront:sender]; + [self reloadVRAMData: nil]; +} + +- (void) printImage:(uint32_t *)imageBytes height:(unsigned) height + topMargin:(unsigned) topMargin bottomMargin: (unsigned) bottomMargin + exposure:(unsigned) exposure +{ + uint32_t paddedImage[160 * (topMargin + height + bottomMargin)]; + memset(paddedImage, 0xFF, sizeof(paddedImage)); + memcpy(paddedImage + (160 * topMargin), imageBytes, 160 * height * sizeof(imageBytes[0])); + if (!self.printerFeedWindow.isVisible) { + currentPrinterImageData = [[NSMutableData alloc] init]; + } + [currentPrinterImageData appendBytes:paddedImage length:sizeof(paddedImage)]; + /* UI related code must run on main thread. */ + dispatch_async(dispatch_get_main_queue(), ^{ + self.feedImageView.image = [Document imageFromData:currentPrinterImageData + width:160 + height:currentPrinterImageData.length / 160 / sizeof(imageBytes[0]) + scale:2.0]; + NSRect frame = self.printerFeedWindow.frame; + frame.size = self.feedImageView.image.size; + [self.printerFeedWindow setContentMaxSize:frame.size]; + frame.size.height += self.printerFeedWindow.frame.size.height - self.printerFeedWindow.contentView.frame.size.height; + [self.printerFeedWindow setFrame:frame display:false animate: self.printerFeedWindow.isVisible]; + [self.printerFeedWindow orderFront:NULL]; + }); + +} + +- (void)printDocument:(id)sender +{ + if (self.feedImageView.image.size.height == 0) { + NSBeep(); return; + } + NSImageView *view = [[NSImageView alloc] initWithFrame:(NSRect){{0,0}, self.feedImageView.image.size}]; + view.image = self.feedImageView.image; + [[NSPrintOperation printOperationWithView:view] runOperationModalForWindow:self.printerFeedWindow delegate:nil didRunSelector:NULL contextInfo:NULL]; +} + +- (IBAction)savePrinterFeed:(id)sender +{ + bool shouldResume = running; + [self stop]; + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setAllowedFileTypes:@[@"png"]]; + [savePanel beginSheetModalForWindow:self.printerFeedWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [savePanel orderOut:self]; + CGImageRef cgRef = [self.feedImageView.image CGImageForProposedRect:NULL + context:nil + hints:nil]; + NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithCGImage:cgRef]; + [imageRep setSize:(NSSize){160, self.feedImageView.image.size.height / 2}]; + NSData *data = [imageRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; + [data writeToURL:savePanel.URL atomically:false]; + [self.printerFeedWindow setIsVisible:false]; + } + if (shouldResume) { + [self start]; + } + }]; +} + +- (IBAction)disconnectAllAccessories:(id)sender +{ + [self disconnectLinkCable]; + [self performAtomicBlock:^{ + accessory = GBAccessoryNone; + GB_disconnect_serial(&gb); + }]; +} + +- (IBAction)connectPrinter:(id)sender +{ + [self disconnectLinkCable]; + [self performAtomicBlock:^{ + accessory = GBAccessoryPrinter; + GB_connect_printer(&gb, printImage); + }]; +} + +- (IBAction)connectWorkboy:(id)sender +{ + [self disconnectLinkCable]; + [self performAtomicBlock:^{ + accessory = GBAccessoryWorkboy; + GB_connect_workboy(&gb, setWorkboyTime, getWorkboyTime); + }]; +} + +- (void) updateVolume +{ + _volume = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"]; +} + +- (void) updateHighpassFilter +{ + if (GB_is_inited(&gb)) { + GB_set_highpass_filter_mode(&gb, (GB_highpass_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBHighpassFilter"]); + } +} + +- (void) updateColorCorrectionMode +{ + if (GB_is_inited(&gb)) { + GB_set_color_correction_mode(&gb, (GB_color_correction_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorCorrection"]); + } +} + +- (void) updateLightTemperature +{ + if (GB_is_inited(&gb)) { + GB_set_light_temperature(&gb, [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBLightTemperature"]); + } +} + +- (void) updateInterferenceVolume +{ + if (GB_is_inited(&gb)) { + GB_set_interference_volume(&gb, [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBInterferenceVolume"]); + } +} + +- (void) updateFrameBlendingMode +{ + self.view.frameBlendingMode = (GB_frame_blending_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBFrameBlendingMode"]; +} + +- (void) updateRewindLength +{ + [self performAtomicBlock:^{ + if (GB_is_inited(&gb)) { + GB_set_rewind_length(&gb, [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRewindLength"]); + } + }]; +} + +- (void) updateRTCMode +{ + if (GB_is_inited(&gb)) { + GB_set_rtc_mode(&gb, [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRTCMode"]); + } +} + +- (void)dmgModelChanged +{ + modelsChanging = true; + if (current_model == MODEL_DMG) { + [self reset:nil]; + } + modelsChanging = false; +} + +- (void)sgbModelChanged +{ + modelsChanging = true; + if (current_model == MODEL_SGB) { + [self reset:nil]; + } + modelsChanging = false; +} + +- (void)cgbModelChanged +{ + modelsChanging = true; + if (current_model == MODEL_CGB) { + [self reset:nil]; + } + modelsChanging = false; +} + +- (void)agbModelChanged +{ + modelsChanging = true; + if (current_model == MODEL_AGB) { + [self reset:nil]; + } + modelsChanging = false; +} + +- (void)setFileURL:(NSURL *)fileURL +{ + [super setFileURL:fileURL]; + self.consoleWindow.title = [NSString stringWithFormat:@"Debug Console – %@", [[fileURL path] lastPathComponent]]; + +} + +- (BOOL)splitView:(GBSplitView *)splitView canCollapseSubview:(NSView *)subview; +{ + if ([[splitView arrangedSubviews] lastObject] == subview) { + return true; + } + return false; +} + +- (CGFloat)splitView:(GBSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex +{ + return 600; +} + +- (CGFloat)splitView:(GBSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex +{ + return splitView.frame.size.width - 321; +} + +- (BOOL)splitView:(GBSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)view +{ + if ([[splitView arrangedSubviews] lastObject] == view) { + return false; + } + return true; +} + +- (void)splitViewDidResizeSubviews:(NSNotification *)notification +{ + GBSplitView *splitview = notification.object; + if ([[[splitview arrangedSubviews] firstObject] frame].size.width < 600) { + [splitview setPosition:600 ofDividerAtIndex:0]; + } + /* NSSplitView renders its separator without the proper vibrancy, so we made it transparent and move an + NSBox-based separator that renders properly so it acts like the split view's separator. */ + NSRect rect = self.debuggerVerticalLine.frame; + rect.origin.x = [[[splitview arrangedSubviews] firstObject] frame].size.width - 1; + self.debuggerVerticalLine.frame = rect; +} + +- (IBAction)showCheats:(id)sender +{ + [self.cheatsWindow makeKeyAndOrderFront:nil]; +} + +- (IBAction)toggleCheats:(id)sender +{ + GB_set_cheats_enabled(&gb, !GB_cheats_enabled(&gb)); +} + +- (void)disconnectLinkCable +{ + bool wasRunning = self->running; + Document *partner = master ?: slave; + if (partner) { + wasRunning |= partner->running; + [self stop]; + partner->master = nil; + partner->slave = nil; + master = nil; + slave = nil; + if (wasRunning) { + [partner start]; + [self start]; + } + GB_set_turbo_mode(&gb, false, false); + GB_set_turbo_mode(&partner->gb, false, false); + partner->accessory = GBAccessoryNone; + accessory = GBAccessoryNone; + } +} + +- (void)connectLinkCable:(NSMenuItem *)sender +{ + [self disconnectAllAccessories:sender]; + Document *partner = [sender representedObject]; + [partner disconnectAllAccessories:sender]; + + bool wasRunning = self->running; + [self stop]; + [partner stop]; + GB_set_turbo_mode(&partner->gb, true, true); + slave = partner; + partner->master = self; + linkOffset = 0; + partner->accessory = GBAccessoryLinkCable; + accessory = GBAccessoryLinkCable; + GB_set_serial_transfer_bit_start_callback(&gb, linkCableBitStart); + GB_set_serial_transfer_bit_start_callback(&partner->gb, linkCableBitStart); + GB_set_serial_transfer_bit_end_callback(&gb, linkCableBitEnd); + GB_set_serial_transfer_bit_end_callback(&partner->gb, linkCableBitEnd); + if (wasRunning) { + [self start]; + } +} + +- (void)linkCableBitStart:(bool)bit +{ + linkCableBit = bit; +} + +-(bool)linkCableBitEnd +{ + bool ret = GB_serial_get_data_bit(&self.partner->gb); + GB_serial_set_data_bit(&self.partner->gb, linkCableBit); + return ret; +} + +- (void)infraredStateChanged:(bool)state +{ + if (self.partner) { + GB_set_infrared_input(&self.partner->gb, state); + } +} + +-(Document *)partner +{ + return slave ?: master; +} + +- (bool)isSlave +{ + return master; +} + +- (GB_gameboy_t *)gb +{ + return &gb; +} + +- (NSImage *)takeScreenshot +{ + NSImage *ret = nil; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBFilterScreenshots"]) { + ret = [_view renderToImage]; + [ret lockFocus]; + NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, + ret.size.width, ret.size.height)]; + [ret unlockFocus]; + ret = [[NSImage alloc] initWithSize:ret.size]; + [ret addRepresentation:bitmapRep]; + } + if (!ret) { + ret = [Document imageFromData:[NSData dataWithBytesNoCopy:_view.currentBuffer + length:GB_get_screen_width(&gb) * GB_get_screen_height(&gb) * 4 + freeWhenDone:false] + width:GB_get_screen_width(&gb) + height:GB_get_screen_height(&gb) + scale:1.0]; + } + return ret; +} + +- (NSString *)screenshotFilename +{ + NSDate *date = [NSDate date]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterLongStyle; + dateFormatter.timeStyle = NSDateFormatterMediumStyle; + return [[NSString stringWithFormat:@"%@ – %@.png", + self.fileURL.lastPathComponent.stringByDeletingPathExtension, + [dateFormatter stringFromDate:date]] stringByReplacingOccurrencesOfString:@":" withString:@"."]; // Gotta love Mac OS Classic + +} + +- (IBAction)saveScreenshot:(id)sender +{ + NSString *folder = [[NSUserDefaults standardUserDefaults] stringForKey:@"GBScreenshotFolder"]; + BOOL isDirectory = false; + if (folder) { + [[NSFileManager defaultManager] fileExistsAtPath:folder isDirectory:&isDirectory]; + } + if (!folder) { + bool shouldResume = running; + [self stop]; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + openPanel.canChooseFiles = false; + openPanel.canChooseDirectories = true; + openPanel.message = @"Choose a folder for screenshots"; + [openPanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [[NSUserDefaults standardUserDefaults] setObject:openPanel.URL.path + forKey:@"GBScreenshotFolder"]; + [self saveScreenshot:sender]; + } + if (shouldResume) { + [self start]; + } + + }]; + return; + } + NSImage *image = [self takeScreenshot]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterLongStyle; + dateFormatter.timeStyle = NSDateFormatterMediumStyle; + NSString *filename = [self screenshotFilename]; + filename = [folder stringByAppendingPathComponent:filename]; + unsigned i = 2; + while ([[NSFileManager defaultManager] fileExistsAtPath:filename]) { + filename = [[filename stringByDeletingPathExtension] stringByAppendingFormat:@" %d.png", i++]; + } + + NSBitmapImageRep *imageRep = (NSBitmapImageRep *)image.representations.firstObject; + NSData *data = [imageRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; + [data writeToFile:filename atomically:false]; + [self.osdView displayText:@"Screenshot saved"]; +} + +- (IBAction)saveScreenshotAs:(id)sender +{ + bool shouldResume = running; + [self stop]; + NSImage *image = [self takeScreenshot]; + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setNameFieldStringValue:[self screenshotFilename]]; + [savePanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [savePanel orderOut:self]; + NSBitmapImageRep *imageRep = (NSBitmapImageRep *)image.representations.firstObject; + NSData *data = [imageRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; + [data writeToURL:savePanel.URL atomically:false]; + [[NSUserDefaults standardUserDefaults] setObject:savePanel.URL.path.stringByDeletingLastPathComponent + forKey:@"GBScreenshotFolder"]; + } + if (shouldResume) { + [self start]; + } + }]; + [self.osdView displayText:@"Screenshot saved"]; +} + +- (IBAction)copyScreenshot:(id)sender +{ + NSImage *image = [self takeScreenshot]; + [[NSPasteboard generalPasteboard] clearContents]; + [[NSPasteboard generalPasteboard] writeObjects:@[image]]; + [self.osdView displayText:@"Screenshot copied"]; +} + +- (IBAction)toggleDisplayBackground:(id)sender +{ + GB_set_background_rendering_disabled(&gb, !GB_is_background_rendering_disabled(&gb)); +} + +- (IBAction)toggleDisplayObjects:(id)sender +{ + GB_set_object_rendering_disabled(&gb, !GB_is_object_rendering_disabled(&gb)); +} + +- (IBAction)newCartridgeInstance:(id)sender +{ + bool shouldResume = running; + [self stop]; + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setAllowedFileTypes:@[@"gbcart"]]; + [savePanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [savePanel orderOut:self]; + NSString *romPath = self.romPath; + [[NSFileManager defaultManager] trashItemAtURL:savePanel.URL resultingItemURL:nil error:nil]; + [[NSFileManager defaultManager] createDirectoryAtURL:savePanel.URL withIntermediateDirectories:false attributes:nil error:nil]; + [[NSString stringWithFormat:@"%@\n%@\n%@", + [romPath pathRelativeToDirectory:savePanel.URL.path], + romPath, + [[NSURL fileURLWithPath:romPath].fileReferenceURL.absoluteString substringFromIndex:strlen("file://")] + ] writeToURL:[savePanel.URL URLByAppendingPathComponent:@"rom.gbl"] atomically:false encoding:NSUTF8StringEncoding error:nil]; + [[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:savePanel.URL display:true completionHandler:nil]; + } + if (shouldResume) { + [self start]; + } + }]; +} + +- (IBAction)toggleAudioRecording:(id)sender +{ + + bool shouldResume = running; + [self stop]; + if (_isRecordingAudio) { + _isRecordingAudio = false; + int error = GB_stop_audio_recording(&gb); + if (error) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:[NSString stringWithFormat:@"Could not finalize recording: %s", strerror(error)]]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + } + else { + [self.osdView displayText:@"Audio recording ended"]; + } + if (shouldResume) { + [self start]; + } + return; + } + _audioSavePanel = [NSSavePanel savePanel]; + if (!self.audioRecordingAccessoryView) { + [[NSBundle mainBundle] loadNibNamed:@"AudioRecordingAccessoryView" owner:self topLevelObjects:nil]; + } + _audioSavePanel.accessoryView = self.audioRecordingAccessoryView; + [self audioFormatChanged:self.audioFormatButton]; + + [_audioSavePanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [_audioSavePanel orderOut:self]; + int error = GB_start_audio_recording(&gb, _audioSavePanel.URL.fileSystemRepresentation, self.audioFormatButton.selectedTag); + if (error) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:[NSString stringWithFormat:@"Could not start recording: %s", strerror(error)]]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + } + else { + [self.osdView displayText:@"Audio recording started"]; + _isRecordingAudio = true; + } + } + if (shouldResume) { + [self start]; + } + _audioSavePanel = nil; + }]; +} + +- (IBAction)audioFormatChanged:(NSPopUpButton *)sender +{ + switch ((GB_audio_format_t)sender.selectedTag) { + case GB_AUDIO_FORMAT_RAW: + _audioSavePanel.allowedFileTypes = @[@"raw", @"pcm"]; + break; + case GB_AUDIO_FORMAT_AIFF: + _audioSavePanel.allowedFileTypes = @[@"aiff", @"aif", @"aifc"]; + break; + case GB_AUDIO_FORMAT_WAV: + _audioSavePanel.allowedFileTypes = @[@"wav"]; + break; + } +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/Document.xib b/thirdparty/SameBoy-old/Cocoa/Document.xib new file mode 100644 index 000000000..24e2daaf6 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/Document.xib @@ -0,0 +1,883 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/AppDelegate.h b/thirdparty/SameBoy-old/Cocoa/GBApp.h similarity index 84% rename from thirdparty/SameBoy/Cocoa/AppDelegate.h rename to thirdparty/SameBoy-old/Cocoa/GBApp.h index a9b00487e..0ad7ac309 100644 --- a/thirdparty/SameBoy/Cocoa/AppDelegate.h +++ b/thirdparty/SameBoy-old/Cocoa/GBApp.h @@ -1,7 +1,8 @@ #import #import +#import -@interface AppDelegate : NSObject +@interface GBApp : NSApplication @property (nonatomic, strong) IBOutlet NSWindow *preferencesWindow; @property (nonatomic, strong) IBOutlet NSView *graphicsTab; diff --git a/thirdparty/SameBoy/Cocoa/AppDelegate.m b/thirdparty/SameBoy-old/Cocoa/GBApp.m similarity index 60% rename from thirdparty/SameBoy/Cocoa/AppDelegate.m rename to thirdparty/SameBoy-old/Cocoa/GBApp.m index 48514a05c..8c85c520a 100644 --- a/thirdparty/SameBoy/Cocoa/AppDelegate.m +++ b/thirdparty/SameBoy-old/Cocoa/GBApp.m @@ -1,10 +1,12 @@ -#import "AppDelegate.h" +#import "GBApp.h" #include "GBButtons.h" #include "GBView.h" +#include "Document.h" #include #import #import #import +#import #define UPDATE_SERVER "https://sameboy.github.io" @@ -16,10 +18,9 @@ static uint32_t color_to_int(NSColor *color) ((unsigned)(color.blueComponent * 0xFF)); } -@implementation AppDelegate +@implementation GBApp { - NSWindow *preferences_window; - NSArray *preferences_tabs; + NSArray *_preferencesTabs; NSString *_lastVersion; NSString *_updateURL; NSURLSessionDownloadTask *_updateTask; @@ -31,10 +32,15 @@ @implementation AppDelegate UPDATE_FAILED, } _updateState; NSString *_downloadDirectory; + AuthorizationRef _auth; + bool _simulatingMenuEvent; } - (void) applicationDidFinishLaunching:(NSNotification *)notification { + // Refresh icon if launched via a software update + [NSApplication sharedApplication].applicationIconImage = [NSImage imageNamed:@"AppIcon"]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; for (unsigned i = 0; i < GBButtonCount; i++) { if ([[defaults objectForKey:button_to_preference_name(i, 0)] isKindOfClass:[NSString class]]) { @@ -57,17 +63,83 @@ - (void) applicationDidFinishLaunching:(NSNotification *)notification @"GBSlow-Motion": @(kVK_Shift), @"GBFilter": @"NearestNeighbor", - @"GBColorCorrection": @(GB_COLOR_CORRECTION_EMULATE_HARDWARE), + @"GBColorCorrection": @(GB_COLOR_CORRECTION_MODERN_BALANCED), @"GBHighpassFilter": @(GB_HIGHPASS_REMOVE_DC_OFFSET), @"GBRewindLength": @(10), @"GBFrameBlendingMode": @([defaults boolForKey:@"DisableFrameBlending"]? GB_FRAME_BLENDING_MODE_DISABLED : GB_FRAME_BLENDING_MODE_ACCURATE), @"GBDMGModel": @(GB_MODEL_DMG_B), @"GBCGBModel": @(GB_MODEL_CGB_E), + @"GBAGBModel": @(GB_MODEL_AGB_A), @"GBSGBModel": @(GB_MODEL_SGB2), @"GBRumbleMode": @(GB_RUMBLE_CARTRIDGE_ONLY), @"GBVolume": @(1.0), + + @"GBMBC7JoystickOverride": @NO, + @"GBMBC7AllowMouse": @YES, + + // Default themes + @"GBThemes": @{ + @"Desert": @{ + @"BrightnessBias": @0.0, + @"Colors": @[@0xff302f3e, @0xff576674, @0xff839ba4, @0xffb1d0d2, @0xffb7d7d8], + @"DisabledLCDColor": @YES, + @"HueBias": @0.10087773904382469, + @"HueBiasStrength": @0.062142056772908363, + @"Manual": @NO, + }, + @"Evening": @{ + @"BrightnessBias": @-0.10168700106441975, + @"Colors": @[@0xff362601, @0xff695518, @0xff899853, @0xffa6e4ae, @0xffa9eebb], + @"DisabledLCDColor": @YES, + @"HueBias": @0.60027079191058874, + @"HueBiasStrength": @0.33816297305747867, + @"Manual": @NO, + }, + @"Fog": @{ + @"BrightnessBias": @0.0, + @"Colors": @[@0xff373c34, @0xff737256, @0xff9da386, @0xffc3d2bf, @0xffc7d8c6], + @"DisabledLCDColor": @YES, + @"HueBias": @0.55750435756972117, + @"HueBiasStrength": @0.18424738545816732, + @"Manual": @NO, + }, + @"Magic Eggplant": @{ + @"BrightnessBias": @0.0, + @"Colors": @[@0xff3c2136, @0xff942e84, @0xffc7699d, @0xfff1e4b0, @0xfff6f9b2], + @"DisabledLCDColor": @YES, + @"HueBias": @0.87717878486055778, + @"HueBiasStrength": @0.65018052788844627, + @"Manual": @NO, + }, + @"Radioactive Pea": @{ + @"BrightnessBias": @-0.48079556772908372, + @"Colors": @[@0xff215200, @0xff1f7306, @0xff169e34, @0xff03ceb8, @0xff00d4d1], + @"DisabledLCDColor": @YES, + @"HueBias": @0.3795131972111554, + @"HueBiasStrength": @0.34337649402390436, + @"Manual": @NO, + }, + @"Seaweed": @{ + @"BrightnessBias": @-0.28532744023904377, + @"Colors": @[@0xff3f0015, @0xff426532, @0xff58a778, @0xff95e0df, @0xffa0e7ee], + @"DisabledLCDColor": @YES, + @"HueBias": @0.2694067480079681, + @"HueBiasStrength": @0.51565612549800799, + @"Manual": @NO, + }, + @"Twilight": @{ + @"BrightnessBias": @-0.091789093625498031, + @"Colors": @[@0xff3f0015, @0xff461286, @0xff6254bd, @0xff97d3e9, @0xffa0e7ee], + @"DisabledLCDColor": @YES, + @"HueBias": @0.0, + @"HueBiasStrength": @0.49710532868525897, + @"Manual": @NO, + }, + }, + + @"NSToolbarItemForcesStandardSize": @YES, // Forces Monterey to resepect toolbar item sizes }]; [JOYController startOnRunLoop:[NSRunLoop currentRunLoop] withOptions:@{ @@ -75,6 +147,8 @@ - (void) applicationDidFinishLaunching:(NSNotification *)notification JOYHatsEmulateButtonsKey: @YES, }]; + [JOYController registerListener:self]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBNotificationsUsed"]) { [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self; } @@ -98,10 +172,10 @@ - (IBAction)toggleDeveloperMode:(id)sender - (IBAction)switchPreferencesTab:(id)sender { - for (NSView *view in preferences_tabs) { + for (NSView *view in _preferencesTabs) { [view removeFromSuperview]; } - NSView *tab = preferences_tabs[[sender tag]]; + NSView *tab = _preferencesTabs[[sender tag]]; NSRect old = [_preferencesWindow frame]; NSRect new = [_preferencesWindow frameRectForContentRect:tab.frame]; new.origin.x = old.origin.x; @@ -145,12 +219,16 @@ - (IBAction) showPreferences: (id) sender [[NSBundle mainBundle] loadNibNamed:@"Preferences" owner:self topLevelObjects:&objects]; NSToolbarItem *first_toolbar_item = [_preferencesWindow.toolbar.items firstObject]; _preferencesWindow.toolbar.selectedItemIdentifier = [first_toolbar_item itemIdentifier]; - preferences_tabs = @[self.emulationTab, self.graphicsTab, self.audioTab, self.controlsTab, self.updatesTab]; + _preferencesTabs = @[self.emulationTab, self.graphicsTab, self.audioTab, self.controlsTab, self.updatesTab]; [self switchPreferencesTab:first_toolbar_item]; [_preferencesWindow center]; #ifndef UPDATE_SUPPORT [_preferencesWindow.toolbar removeItemAtIndex:4]; #endif + if (@available(macOS 11.0, *)) { + [_preferencesWindow.toolbar insertItemWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier atIndex:0]; + [_preferencesWindow.toolbar insertItemWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier atIndex:_preferencesWindow.toolbar.items.count]; + } } [_preferencesWindow makeKeyAndOrderFront:self]; } @@ -294,8 +372,55 @@ - (IBAction)skipVersion:(id)sender [self.updateWindow performClose:sender]; } +- (bool)executePath:(NSString *)path withArguments:(NSArray *)arguments +{ + if (!_auth) { + NSTask *task = [[NSTask alloc] init]; + task.launchPath = path; + task.arguments = arguments; + [task launch]; + [task waitUntilExit]; + return task.terminationStatus == 0 && task.terminationReason == NSTaskTerminationReasonExit; + } + + char *argv[arguments.count + 1]; + argv[arguments.count] = NULL; + for (unsigned i = 0; i < arguments.count; i++) { + argv[i] = (char *)arguments[i].UTF8String; + } + + return AuthorizationExecuteWithPrivileges(_auth, path.UTF8String, kAuthorizationFlagDefaults, argv, NULL) == errAuthorizationSuccess; +} + +- (void)deauthorize +{ + if (_auth) { + AuthorizationFree(_auth, kAuthorizationFlagDefaults); + _auth = nil; + } +} + - (IBAction)installUpdate:(id)sender { + bool needsAuthorization = false; + if ([self executePath:@"/usr/sbin/spctl" withArguments:@[@"--status"]]) { // Succeeds when GateKeeper is on + // GateKeeper is on, we need to --add ourselves as root, else we might get a GateKeeper crash + needsAuthorization = true; + } + else if (access(_dyld_get_image_name(0), W_OK)) { + // We don't have write access, so we need authorization to update as root + needsAuthorization = true; + } + + if (needsAuthorization && !_auth) { + AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagPreAuthorize | kAuthorizationFlagInteractionAllowed, &_auth); + // Make sure we can modify the bundle + if (![self executePath:@"/usr/sbin/chown" withArguments:@[@"-R", [NSString stringWithFormat:@"%d:%d", getuid(), getgid()], [NSBundle mainBundle].bundlePath]]) { + [self deauthorize]; + return; + } + } + [self.updateProgressSpinner startAnimation:nil]; self.updateProgressButton.title = @"Cancel"; self.updateProgressButton.enabled = true; @@ -314,8 +439,8 @@ - (IBAction)installUpdate:(id)sender appropriateForURL:[[NSBundle mainBundle] bundleURL] create:true error:nil] path]; - NSTask *unzipTask; if (!_downloadDirectory) { + [self deauthorize]; dispatch_sync(dispatch_get_main_queue(), ^{ self.updateProgressButton.enabled = false; self.updateProgressLabel.stringValue = @"Failed to extract update."; @@ -324,14 +449,17 @@ - (IBAction)installUpdate:(id)sender self.updateProgressButton.enabled = true; [self.updateProgressSpinner stopAnimation:nil]; }); + return; } + NSTask *unzipTask; unzipTask = [[NSTask alloc] init]; unzipTask.launchPath = @"/usr/bin/unzip"; unzipTask.arguments = @[location.path, @"-d", _downloadDirectory]; [unzipTask launch]; [unzipTask waitUntilExit]; if (unzipTask.terminationStatus != 0 || unzipTask.terminationReason != NSTaskTerminationReasonExit) { + [self deauthorize]; [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; dispatch_sync(dispatch_get_main_queue(), ^{ self.updateProgressButton.enabled = false; @@ -376,6 +504,7 @@ - (void)performUpgrade NSError *error = nil; [[NSFileManager defaultManager] moveItemAtPath:contentsPath toPath:contentsTempPath error:&error]; if (error) { + [self deauthorize]; [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; _downloadDirectory = nil; dispatch_sync(dispatch_get_main_queue(), ^{ @@ -390,6 +519,7 @@ - (void)performUpgrade } [[NSFileManager defaultManager] moveItemAtPath:updateContentsPath toPath:contentsPath error:&error]; if (error) { + [self deauthorize]; [[NSFileManager defaultManager] moveItemAtPath:contentsTempPath toPath:contentsPath error:nil]; [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; _downloadDirectory = nil; @@ -436,6 +566,74 @@ - (IBAction)updateAction:(id)sender } } +- (void)orderFrontAboutPanel:(id)sender +{ + // NSAboutPanelOptionApplicationIcon is not available prior to 10.13, but the key is still there and working. + [[NSApplication sharedApplication] orderFrontStandardAboutPanelWithOptions:@{ + @"ApplicationIcon": [NSImage imageNamed:@"Icon"] + }]; +} + +- (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)button +{ + if (!button.isPressed) return; + NSDictionary *mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitInstanceMapping"][controller.uniqueID]; + if (!mapping) { + mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitNameMapping"][controller.deviceName]; + } + + JOYButtonUsage usage = ((JOYButtonUsage)[mapping[n2s(button.uniqueID)] unsignedIntValue]) ?: -1; + if (!mapping && usage >= JOYButtonUsageGeneric0) { + usage = (const JOYButtonUsage[]){JOYButtonUsageY, JOYButtonUsageA, JOYButtonUsageB, JOYButtonUsageX}[(usage - JOYButtonUsageGeneric0) & 3]; + } + + if (usage == GBJoyKitHotkey1 || usage == GBJoyKitHotkey2) { + if (_preferencesWindow && self.keyWindow == _preferencesWindow) { + return; + } + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"GBAllowBackgroundControllers"] && !self.keyWindow) { + return; + } + + NSString *keyEquivalent = [[NSUserDefaults standardUserDefaults] stringForKey:usage == GBJoyKitHotkey1? @"GBJoypadHotkey1" : @"GBJoypadHotkey2"]; + NSEventModifierFlags flags = NSEventModifierFlagCommand; + if ([keyEquivalent hasPrefix:@"^"]) { + flags |= NSEventModifierFlagShift; + [keyEquivalent substringFromIndex:1]; + } + _simulatingMenuEvent = true; + [[NSApplication sharedApplication] sendEvent:[NSEvent keyEventWithType:NSEventTypeKeyDown + location:(NSPoint){0,} + modifierFlags:flags + timestamp:0 + windowNumber:0 + context:NULL + characters:keyEquivalent + charactersIgnoringModifiers:keyEquivalent + isARepeat:false + keyCode:0]]; + _simulatingMenuEvent = false; + } +} + +- (NSWindow *)keyWindow +{ + NSWindow *ret = [super keyWindow]; + if (!ret && _simulatingMenuEvent) { + ret = [(Document *)self.orderedDocuments.firstObject mainWindow]; + } + return ret; +} + +- (NSWindow *)mainWindow +{ + NSWindow *ret = [super mainWindow]; + if (!ret && _simulatingMenuEvent) { + ret = [(Document *)self.orderedDocuments.firstObject mainWindow]; + } + return ret; +} + - (void)dealloc { if (_downloadDirectory) { diff --git a/thirdparty/SameBoy-old/Cocoa/GBAudioClient.h b/thirdparty/SameBoy-old/Cocoa/GBAudioClient.h new file mode 100644 index 000000000..03ed70114 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBAudioClient.h @@ -0,0 +1,12 @@ +#import +#import + +@interface GBAudioClient : NSObject +@property (nonatomic, strong) void (^renderBlock)(UInt32 sampleRate, UInt32 nFrames, GB_sample_t *buffer); +@property (nonatomic, readonly) UInt32 rate; +@property (nonatomic, readonly, getter=isPlaying) bool playing; +-(void) start; +-(void) stop; +-(id) initWithRendererBlock:(void (^)(UInt32 sampleRate, UInt32 nFrames, GB_sample_t *buffer)) block + andSampleRate:(UInt32) rate; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBAudioClient.m b/thirdparty/SameBoy-old/Cocoa/GBAudioClient.m new file mode 100644 index 000000000..81a51fd56 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBAudioClient.m @@ -0,0 +1,111 @@ +#import +#import +#import "GBAudioClient.h" + +static OSStatus render( + GBAudioClient *self, + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, + UInt32 inNumberFrames, + AudioBufferList *ioData) + +{ + GB_sample_t *buffer = (GB_sample_t *)ioData->mBuffers[0].mData; + + self.renderBlock(self.rate, inNumberFrames, buffer); + + return noErr; +} + +@implementation GBAudioClient +{ + AudioComponentInstance audioUnit; +} + +-(id) initWithRendererBlock:(void (^)(UInt32 sampleRate, UInt32 nFrames, GB_sample_t *buffer)) block + andSampleRate:(UInt32) rate +{ + if (!(self = [super init])) { + return nil; + } + + // Configure the search parameters to find the default playback output unit + // (called the kAudioUnitSubType_RemoteIO on iOS but + // kAudioUnitSubType_DefaultOutput on Mac OS X) + AudioComponentDescription defaultOutputDescription; + defaultOutputDescription.componentType = kAudioUnitType_Output; + defaultOutputDescription.componentSubType = kAudioUnitSubType_DefaultOutput; + defaultOutputDescription.componentManufacturer = kAudioUnitManufacturer_Apple; + defaultOutputDescription.componentFlags = 0; + defaultOutputDescription.componentFlagsMask = 0; + + // Get the default playback output unit + AudioComponent defaultOutput = AudioComponentFindNext(NULL, &defaultOutputDescription); + NSAssert(defaultOutput, @"Can't find default output"); + + // Create a new unit based on this that we'll use for output + OSErr err = AudioComponentInstanceNew(defaultOutput, &audioUnit); + NSAssert1(audioUnit, @"Error creating unit: %hd", err); + + // Set our tone rendering function on the unit + AURenderCallbackStruct input; + input.inputProc = (void*)render; + input.inputProcRefCon = (__bridge void * _Nullable)(self); + err = AudioUnitSetProperty(audioUnit, + kAudioUnitProperty_SetRenderCallback, + kAudioUnitScope_Input, + 0, + &input, + sizeof(input)); + NSAssert1(err == noErr, @"Error setting callback: %hd", err); + + AudioStreamBasicDescription streamFormat; + streamFormat.mSampleRate = rate; + streamFormat.mFormatID = kAudioFormatLinearPCM; + streamFormat.mFormatFlags = + kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked | kAudioFormatFlagsNativeEndian; + streamFormat.mBytesPerPacket = 4; + streamFormat.mFramesPerPacket = 1; + streamFormat.mBytesPerFrame = 4; + streamFormat.mChannelsPerFrame = 2; + streamFormat.mBitsPerChannel = 2 * 8; + err = AudioUnitSetProperty (audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Input, + 0, + &streamFormat, + sizeof(AudioStreamBasicDescription)); + NSAssert1(err == noErr, @"Error setting stream format: %hd", err); + err = AudioUnitInitialize(audioUnit); + NSAssert1(err == noErr, @"Error initializing unit: %hd", err); + + self.renderBlock = block; + _rate = rate; + + return self; +} + +-(void) start +{ + OSErr err = AudioOutputUnitStart(audioUnit); + NSAssert1(err == noErr, @"Error starting unit: %hd", err); + _playing = true; + +} + + +-(void) stop +{ + AudioOutputUnitStop(audioUnit); + _playing = false; +} + +-(void) dealloc +{ + [self stop]; + AudioUnitUninitialize(audioUnit); + AudioComponentInstanceDispose(audioUnit); +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBBorderView.h b/thirdparty/SameBoy-old/Cocoa/GBBorderView.h new file mode 100644 index 000000000..477add17e --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBBorderView.h @@ -0,0 +1,5 @@ +#import + +@interface GBBorderView : NSView + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBBorderView.m b/thirdparty/SameBoy-old/Cocoa/GBBorderView.m new file mode 100644 index 000000000..d992e298a --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBBorderView.m @@ -0,0 +1,26 @@ +#import "GBBorderView.h" + +@implementation GBBorderView + + +- (void)awakeFromNib +{ + self.wantsLayer = true; +} + +- (BOOL)wantsUpdateLayer +{ + return true; +} + +- (void)updateLayer +{ + /* Wonderful, wonderful windowserver(?) bug. Using 0,0,0 here would cause it to render garbage + on fullscreen windows on some High Sierra machines. Any other value, including the one used + here (which is rendered exactly the same due to rounding) works around this bug. */ + self.layer.backgroundColor = [NSColor colorWithCalibratedRed:0 + green:0 + blue:1.0 / 1024.0 + alpha:1.0].CGColor; +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBButtons.h b/thirdparty/SameBoy-old/Cocoa/GBButtons.h new file mode 100644 index 000000000..f5c76dab7 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBButtons.h @@ -0,0 +1,41 @@ +#ifndef GBButtons_h +#define GBButtons_h + +typedef enum : NSUInteger { + GBRight, + GBLeft, + GBUp, + GBDown, + GBA, + GBB, + GBSelect, + GBStart, + GBTurbo, + GBRewind, + GBUnderclock, + GBHotkey1, + GBHotkey2, + GBJoypadButtonCount, + GBButtonCount = GBUnderclock + 1, + GBGameBoyButtonCount = GBStart + 1, +} GBButton; + +#define GBJoyKitHotkey1 JOYButtonUsageGeneric0 + 0x100 +#define GBJoyKitHotkey2 JOYButtonUsageGeneric0 + 0x101 + +extern NSString const *GBButtonNames[GBJoypadButtonCount]; + +static inline NSString *n2s(uint64_t number) +{ + return [NSString stringWithFormat:@"%llx", number]; +} + +static inline NSString *button_to_preference_name(GBButton button, unsigned player) +{ + if (player) { + return [NSString stringWithFormat:@"GBPlayer%d%@", player + 1, GBButtonNames[button]]; + } + return [NSString stringWithFormat:@"GB%@", GBButtonNames[button]]; +} + +#endif diff --git a/thirdparty/SameBoy-old/Cocoa/GBButtons.m b/thirdparty/SameBoy-old/Cocoa/GBButtons.m new file mode 100644 index 000000000..ef86738f0 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBButtons.m @@ -0,0 +1,4 @@ +#import +#import "GBButtons.h" + +NSString const *GBButtonNames[] = {@"Right", @"Left", @"Up", @"Down", @"A", @"B", @"Select", @"Start", @"Turbo", @"Rewind", @"Slow-Motion", @"Hotkey 1", @"Hotkey 2"}; diff --git a/thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.h b/thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.h new file mode 100644 index 000000000..e7fd91779 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.h @@ -0,0 +1,5 @@ +#import + +@interface GBCheatTextFieldCell : NSTextFieldCell +@property (nonatomic) bool usesAddressFormat; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.m b/thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.m new file mode 100644 index 000000000..1fdafea04 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBCheatTextFieldCell.m @@ -0,0 +1,121 @@ +#import "GBCheatTextFieldCell.h" + +@interface GBCheatTextView : NSTextView +@property bool usesAddressFormat; +@end + +@implementation GBCheatTextView + +- (bool)_insertText:(NSString *)string replacementRange:(NSRange)range +{ + if (range.location == NSNotFound) { + range = self.selectedRange; + } + + NSString *new = [self.string stringByReplacingCharactersInRange:range withString:string]; + if (!self.usesAddressFormat) { + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(\\$[0-9A-Fa-f]{1,2}|[0-9]{1,3})$" options:0 error:NULL]; + if ([regex numberOfMatchesInString:new options:0 range:NSMakeRange(0, new.length)]) { + [super insertText:string replacementRange:range]; + return true; + } + if ([regex numberOfMatchesInString:[@"$" stringByAppendingString:new] options:0 range:NSMakeRange(0, new.length + 1)]) { + [super insertText:string replacementRange:range]; + [super insertText:@"$" replacementRange:NSMakeRange(0, 0)]; + return true; + } + if ([new isEqualToString:@"$"] || [string length] == 0) { + self.string = @"$00"; + self.selectedRange = NSMakeRange(1, 2); + return true; + } + } + else { + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(\\$[0-9A-Fa-f]{1,3}:)?\\$[0-9a-fA-F]{1,4}$" options:0 error:NULL]; + if ([regex numberOfMatchesInString:new options:0 range:NSMakeRange(0, new.length)]) { + [super insertText:string replacementRange:range]; + return true; + } + if ([string length] == 0) { + NSUInteger index = [new rangeOfString:@":"].location; + if (index != NSNotFound) { + if (range.location > index) { + self.string = [[new componentsSeparatedByString:@":"] firstObject]; + self.selectedRange = NSMakeRange(self.string.length, 0); + return true; + } + self.string = [[new componentsSeparatedByString:@":"] lastObject]; + self.selectedRange = NSMakeRange(0, 0); + return true; + } + else if ([[self.string substringWithRange:range] isEqualToString:@":"]) { + self.string = [[self.string componentsSeparatedByString:@":"] lastObject]; + self.selectedRange = NSMakeRange(0, 0); + return true; + } + } + if ([new isEqualToString:@"$"] || [string length] == 0) { + self.string = @"$0000"; + self.selectedRange = NSMakeRange(1, 4); + return true; + } + if (([string isEqualToString:@"$"] || [string isEqualToString:@":"]) && range.length == 0 && range.location == 0) { + if ([self _insertText:@"$00:" replacementRange:range]) { + self.selectedRange = NSMakeRange(1, 2); + return true; + } + } + if ([string isEqualToString:@":"] && range.length + range.location == self.string.length) { + if ([self _insertText:@":$0" replacementRange:range]) { + self.selectedRange = NSMakeRange(self.string.length - 2, 2); + return true; + } + } + if ([string isEqualToString:@"$"]) { + if ([self _insertText:@"$0" replacementRange:range]) { + self.selectedRange = NSMakeRange(range.location + 1, 1); + return true; + } + } + } + return false; +} + +- (NSUndoManager *)undoManager +{ + return nil; +} + +- (void)insertText:(id)string replacementRange:(NSRange)replacementRange +{ + if (![self _insertText:string replacementRange:replacementRange]) { + NSBeep(); + } +} + +/* Private API, don't tell the police! */ +- (void)_userReplaceRange:(NSRange)range withString:(NSString *)string +{ + [self insertText:string replacementRange:range]; +} + +@end + +@implementation GBCheatTextFieldCell +{ + bool _drawing, _editing; + GBCheatTextView *_fieldEditor; +} + +- (NSTextView *)fieldEditorForView:(NSView *)controlView +{ + if (_fieldEditor) { + _fieldEditor.usesAddressFormat = self.usesAddressFormat; + return _fieldEditor; + } + _fieldEditor = [[GBCheatTextView alloc] initWithFrame:controlView.frame]; + _fieldEditor.fieldEditor = true; + _fieldEditor.usesAddressFormat = self.usesAddressFormat; + return _fieldEditor; +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.h b/thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.h new file mode 100644 index 000000000..eddebc5ac --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.h @@ -0,0 +1,16 @@ +#import +#import +#import "Document.h" + +@interface GBCheatWindowController : NSObject +@property (nonatomic, weak) IBOutlet NSTableView *cheatsTable; +@property (nonatomic, weak) IBOutlet NSTextField *addressField; +@property (nonatomic, weak) IBOutlet NSTextField *valueField; +@property (nonatomic, weak) IBOutlet NSTextField *oldValueField; +@property (nonatomic, weak) IBOutlet NSButton *oldValueCheckbox; +@property (nonatomic, weak) IBOutlet NSTextField *descriptionField; +@property (nonatomic, weak) IBOutlet NSTextField *importCodeField; +@property (nonatomic, weak) IBOutlet NSTextField *importDescriptionField; +@property (nonatomic, weak) IBOutlet Document *document; +- (void)cheatsUpdated; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.m b/thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.m new file mode 100644 index 000000000..5cc8f5959 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBCheatWindowController.m @@ -0,0 +1,240 @@ +#import "GBCheatWindowController.h" +#import "GBWarningPopover.h" +#import "GBCheatTextFieldCell.h" + +@implementation GBCheatWindowController + ++ (NSString *)addressStringFromCheat:(const GB_cheat_t *)cheat +{ + if (cheat->bank != GB_CHEAT_ANY_BANK) { + return [NSString stringWithFormat:@"$%x:$%04x", cheat->bank, cheat->address]; + } + return [NSString stringWithFormat:@"$%04x", cheat->address]; +} + ++ (NSString *)actionDescriptionForCheat:(const GB_cheat_t *)cheat +{ + if (cheat->use_old_value) { + return [NSString stringWithFormat:@"[%@]($%02x) = $%02x", [self addressStringFromCheat:cheat], cheat->old_value, cheat->value]; + } + return [NSString stringWithFormat:@"[%@] = $%02x", [self addressStringFromCheat:cheat], cheat->value]; +} + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + GB_gameboy_t *gb = self.document.gameboy; + if (!gb) return 0; + size_t cheatCount; + GB_get_cheats(gb, &cheatCount); + return cheatCount + 1; +} + +- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + GB_gameboy_t *gb = self.document.gameboy; + if (!gb) return nil; + size_t cheatCount; + GB_get_cheats(gb, &cheatCount); + NSUInteger columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; + if (row >= cheatCount && columnIndex == 0) { + return [[NSCell alloc] init]; + } + return nil; +} + +- (nullable id)tableView:(NSTableView *)tableView objectValueForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row +{ + size_t cheatCount; + GB_gameboy_t *gb = self.document.gameboy; + if (!gb) return nil; + const GB_cheat_t *const *cheats = GB_get_cheats(gb, &cheatCount); + NSUInteger columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; + if (row >= cheatCount) { + switch (columnIndex) { + case 0: + return @YES; + + case 1: + return @NO; + + case 2: + return @"Add Cheat..."; + + case 3: + return @""; + } + } + + switch (columnIndex) { + case 0: + return @NO; + + case 1: + return @(cheats[row]->enabled); + + case 2: + return @(cheats[row]->description); + + case 3: + return [GBCheatWindowController actionDescriptionForCheat:cheats[row]]; + } + + return nil; +} + +- (IBAction)importCheat:(id)sender +{ + GB_gameboy_t *gb = self.document.gameboy; + if (!gb) return; + + [self.document performAtomicBlock:^{ + if (GB_import_cheat(gb, + self.importCodeField.stringValue.UTF8String, + self.importDescriptionField.stringValue.UTF8String, + true)) { + self.importCodeField.stringValue = @""; + self.importDescriptionField.stringValue = @""; + [self.cheatsTable reloadData]; + [self tableViewSelectionDidChange:nil]; + } + else { + NSBeep(); + [GBWarningPopover popoverWithContents:@"This code is not a valid GameShark or GameGenie code" onView:self.importCodeField]; + } + }]; +} + +- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + GB_gameboy_t *gb = self.document.gameboy; + if (!gb) return; + size_t cheatCount; + const GB_cheat_t *const *cheats = GB_get_cheats(gb, &cheatCount); + NSUInteger columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; + [self.document performAtomicBlock:^{ + if (columnIndex == 1) { + if (row >= cheatCount) { + GB_add_cheat(gb, "New Cheat", 0, 0, 0, 0, false, true); + } + else { + GB_update_cheat(gb, cheats[row], cheats[row]->description, cheats[row]->address, cheats[row]->bank, cheats[row]->value, cheats[row]->old_value, cheats[row]->use_old_value, !cheats[row]->enabled); + } + } + else if (row < cheatCount) { + GB_remove_cheat(gb, cheats[row]); + } + }]; + [self.cheatsTable reloadData]; + [self tableViewSelectionDidChange:nil]; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)notification +{ + GB_gameboy_t *gb = self.document.gameboy; + if (!gb) return; + + size_t cheatCount; + const GB_cheat_t *const *cheats = GB_get_cheats(gb, &cheatCount); + unsigned row = self.cheatsTable.selectedRow; + const GB_cheat_t *cheat = NULL; + if (row >= cheatCount) { + static const GB_cheat_t template = { + .address = 0, + .bank = 0, + .value = 0, + .old_value = 0, + .use_old_value = false, + .enabled = false, + .description = "New Cheat", + }; + cheat = &template; + } + else { + cheat = cheats[row]; + } + + self.addressField.stringValue = [GBCheatWindowController addressStringFromCheat:cheat]; + self.valueField.stringValue = [NSString stringWithFormat:@"$%02x", cheat->value]; + self.oldValueField.stringValue = [NSString stringWithFormat:@"$%02x", cheat->old_value]; + self.oldValueCheckbox.state = cheat->use_old_value; + self.descriptionField.stringValue = @(cheat->description); +} + +- (void)awakeFromNib +{ + [self tableViewSelectionDidChange:nil]; + ((GBCheatTextFieldCell *)self.addressField.cell).usesAddressFormat = true; +} + +- (void)controlTextDidChange:(NSNotification *)obj +{ + [self updateCheat:nil]; +} + +- (IBAction)updateCheat:(id)sender +{ + GB_gameboy_t *gb = self.document.gameboy; + if (!gb) return; + + uint16_t address = 0; + uint16_t bank = GB_CHEAT_ANY_BANK; + if ([self.addressField.stringValue rangeOfString:@":"].location != NSNotFound) { + sscanf(self.addressField.stringValue.UTF8String, "$%hx:$%hx", &bank, &address); + } + else { + sscanf(self.addressField.stringValue.UTF8String, "$%hx", &address); + } + + uint8_t value = 0; + if ([self.valueField.stringValue characterAtIndex:0] == '$') { + sscanf(self.valueField.stringValue.UTF8String, "$%02hhx", &value); + } + else { + sscanf(self.valueField.stringValue.UTF8String, "%hhd", &value); + } + + uint8_t oldValue = 0; + if ([self.oldValueField.stringValue characterAtIndex:0] == '$') { + sscanf(self.oldValueField.stringValue.UTF8String, "$%02hhx", &oldValue); + } + else { + sscanf(self.oldValueField.stringValue.UTF8String, "%hhd", &oldValue); + } + + size_t cheatCount; + const GB_cheat_t *const *cheats = GB_get_cheats(gb, &cheatCount); + unsigned row = self.cheatsTable.selectedRow; + + [self.document performAtomicBlock:^{ + if (row >= cheatCount) { + GB_add_cheat(gb, + self.descriptionField.stringValue.UTF8String, + address, + bank, + value, + oldValue, + self.oldValueCheckbox.state, + false); + } + else { + GB_update_cheat(gb, + cheats[row], + self.descriptionField.stringValue.UTF8String, + address, + bank, + value, + oldValue, + self.oldValueCheckbox.state, + cheats[row]->enabled); + } + }]; + [self.cheatsTable reloadData]; +} + +- (void)cheatsUpdated +{ + [self.cheatsTable reloadData]; + [self tableViewSelectionDidChange:nil]; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.h b/thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.h new file mode 100644 index 000000000..24f3ba001 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.h @@ -0,0 +1,7 @@ +#import "Document.h" +#import "HexFiend/HexFiend.h" +#import "HexFiend/HFByteSlice.h" + +@interface GBCompleteByteSlice : HFByteSlice +- (instancetype) initWithByteArray:(HFByteArray *)array; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.m b/thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.m new file mode 100644 index 000000000..44e7ee695 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBCompleteByteSlice.m @@ -0,0 +1,26 @@ +#import "GBCompleteByteSlice.h" + +@implementation GBCompleteByteSlice +{ + HFByteArray *_array; +} + +- (instancetype) initWithByteArray:(HFByteArray *)array +{ + if ((self = [super init])) { + _array = array; + } + return self; +} + +- (unsigned long long)length +{ + return [_array length]; +} + +- (void)copyBytes:(unsigned char *)dst range:(HFRange)range +{ + [_array copyBytes:dst range:range]; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBGLShader.h b/thirdparty/SameBoy-old/Cocoa/GBGLShader.h new file mode 100644 index 000000000..8e46f93fc --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBGLShader.h @@ -0,0 +1,7 @@ +#import +#import "GBView.h" + +@interface GBGLShader : NSObject +- (instancetype)initWithName:(NSString *) shaderName; +- (void) renderBitmap: (void *)bitmap previous:(void*) previous sized:(NSSize)srcSize inSize:(NSSize)dstSize scale: (double) scale withBlendingMode: (GB_frame_blending_mode_t)blendingMode; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBGLShader.m b/thirdparty/SameBoy-old/Cocoa/GBGLShader.m new file mode 100644 index 000000000..920226b6c --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBGLShader.m @@ -0,0 +1,190 @@ +#import "GBGLShader.h" +#import + +/* + Loosely based of https://www.raywenderlich.com/70208/opengl-es-pixel-shaders-tutorial + + This code probably makes no sense after I upgraded it to OpenGL 3, since OpenGL makes aboslute no sense and has zero + helpful documentation. + */ + +static NSString * const vertex_shader = @"\n\ +#version 150 \n\ +in vec4 aPosition;\n\ +void main(void) {\n\ + gl_Position = aPosition;\n\ +}\n\ +"; + +@implementation GBGLShader +{ + GLuint resolution_uniform; + GLuint texture_uniform; + GLuint previous_texture_uniform; + GLuint frame_blending_mode_uniform; + + GLuint position_attribute; + GLuint texture; + GLuint previous_texture; + GLuint program; +} + ++ (NSString *) shaderSourceForName:(NSString *) name +{ + return [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name + ofType:@"fsh" + inDirectory:@"Shaders"] + encoding:NSUTF8StringEncoding + error:nil]; +} + +- (instancetype)initWithName:(NSString *) shaderName +{ + self = [super init]; + if (self) { + // Program + NSString *fragment_shader = [[self class] shaderSourceForName:@"MasterShader"]; + fragment_shader = [fragment_shader stringByReplacingOccurrencesOfString:@"{filter}" + withString:[[self class] shaderSourceForName:shaderName]]; + program = [[self class] programWithVertexShader:vertex_shader fragmentShader:fragment_shader]; + // Attributes + position_attribute = glGetAttribLocation(program, "aPosition"); + // Uniforms + resolution_uniform = glGetUniformLocation(program, "output_resolution"); + + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glBindTexture(GL_TEXTURE_2D, 0); + texture_uniform = glGetUniformLocation(program, "image"); + + glGenTextures(1, &previous_texture); + glBindTexture(GL_TEXTURE_2D, previous_texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glBindTexture(GL_TEXTURE_2D, 0); + previous_texture_uniform = glGetUniformLocation(program, "previous_image"); + + frame_blending_mode_uniform = glGetUniformLocation(program, "frame_blending_mode"); + + // Configure OpenGL + [self configureOpenGL]; + + } + return self; +} + +- (void) renderBitmap: (void *)bitmap previous:(void*) previous sized:(NSSize)srcSize inSize:(NSSize)dstSize scale: (double) scale withBlendingMode:(GB_frame_blending_mode_t)blendingMode +{ + glUseProgram(program); + glUniform2f(resolution_uniform, dstSize.width * scale, dstSize.height * scale); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, srcSize.width, srcSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap); + glUniform1i(texture_uniform, 0); + glUniform1i(frame_blending_mode_uniform, blendingMode); + if (blendingMode) { + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, previous_texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, srcSize.width, srcSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, previous); + glUniform1i(previous_texture_uniform, 1); + } + glBindFragDataLocation(program, 0, "frag_color"); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); +} + +- (void)configureOpenGL +{ + // Program + + glUseProgram(program); + + GLuint vao; + glGenVertexArrays(1, &vao); + glBindVertexArray(vao); + + GLuint vbo; + glGenBuffers(1, &vbo); + + // Attributes + + + static GLfloat const quad[16] = { + -1.f, -1.f, 0, 1, + -1.f, +1.f, 0, 1, + +1.f, -1.f, 0, 1, + +1.f, +1.f, 0, 1, + }; + + + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(quad), quad, GL_STATIC_DRAW); + glEnableVertexAttribArray(position_attribute); + glVertexAttribPointer(position_attribute, 4, GL_FLOAT, GL_FALSE, 0, 0); +} + ++ (GLuint)programWithVertexShader:(NSString*)vsh fragmentShader:(NSString*)fsh +{ + // Build shaders + GLuint vertex_shader = [self shaderWithContents:vsh type:GL_VERTEX_SHADER]; + GLuint fragment_shader = [self shaderWithContents:fsh type:GL_FRAGMENT_SHADER]; + // Create program + GLuint program = glCreateProgram(); + // Attach shaders + glAttachShader(program, vertex_shader); + glAttachShader(program, fragment_shader); + // Link program + glLinkProgram(program); + // Check for errors + GLint status; + glGetProgramiv(program, GL_LINK_STATUS, &status); + if (status == GL_FALSE) { + GLchar messages[1024]; + glGetProgramInfoLog(program, sizeof(messages), 0, &messages[0]); + NSLog(@"%@:- GLSL Program Error: %s", self, messages); + } + // Delete shaders + glDeleteShader(vertex_shader); + glDeleteShader(fragment_shader); + + return program; +} + +- (void)dealloc +{ + glDeleteProgram(program); + glDeleteTextures(1, &texture); + glDeleteTextures(1, &previous_texture); + + /* OpenGL is black magic. Closing one view causes others to be completely black unless we reload their shaders */ + /* We're probably not freeing thing in the right place. */ + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBFilterChanged" object:nil]; +} + ++ (GLuint)shaderWithContents:(NSString*)contents type:(GLenum)type +{ + + const GLchar *source = [contents UTF8String]; + // Create the shader object + GLuint shader = glCreateShader(type); + // Load the shader source + glShaderSource(shader, 1, &source, 0); + // Compile the shader + glCompileShader(shader); + // Check for errors + GLint status = 0; + glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + if (status == GL_FALSE) { + GLchar messages[1024]; + glGetShaderInfoLog(shader, sizeof(messages), 0, &messages[0]); + NSLog(@"%@:- GLSL Shader Error: %s", self, messages); + } + return shader; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.h b/thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.h new file mode 100644 index 000000000..f293124b5 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.h @@ -0,0 +1,9 @@ +#import + +@interface NSSlider (GBHueSlider) +-(NSColor *)colorValue; +@end + +@interface GBHueSliderCell : NSSliderCell +-(NSColor *)colorValue; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.m b/thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.m new file mode 100644 index 000000000..9b397cb46 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBHueSliderCell.m @@ -0,0 +1,113 @@ +#import "GBHueSliderCell.h" + +@interface NSSliderCell(privateAPI) +- (double)_normalizedDoubleValue; +@end + +@implementation GBHueSliderCell +{ + bool _drawingTrack; +} + +-(NSColor *)colorValue +{ + double hue = self.doubleValue / 360.0; + double r = 0, g = 0, b =0 ; + double t = fmod(hue * 6, 1); + switch ((int)(hue * 6) % 6) { + case 0: + r = 1; + g = t; + break; + case 1: + r = 1 - t; + g = 1; + break; + case 2: + g = 1; + b = t; + break; + case 3: + g = 1 - t; + b = 1; + break; + case 4: + b = 1; + r = t; + break; + case 5: + b = 1 - t; + r = 1; + break; + } + return [NSColor colorWithRed:r green:g blue:b alpha:1.0]; +} + +-(void)drawKnob:(NSRect)knobRect +{ + [super drawKnob:knobRect]; + NSRect peekRect = knobRect; + peekRect.size.width /= 2; + peekRect.size.height = peekRect.size.width; + peekRect.origin.x += peekRect.size.width / 2; + peekRect.origin.y += peekRect.size.height / 2; + NSColor *color = self.colorValue; + if (!self.enabled) { + color = [color colorWithAlphaComponent:0.5]; + } + [color setFill]; + NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:peekRect]; + [path fill]; + [[NSColor colorWithWhite:0 alpha:0.25] setStroke]; + [path setLineWidth:0.5]; + [path stroke]; +} + +-(double)_normalizedDoubleValue +{ + if (_drawingTrack) return 0; + return [super _normalizedDoubleValue]; +} + +-(void)drawBarInside:(NSRect)rect flipped:(BOOL)flipped +{ + if (!self.enabled) { + [super drawBarInside:rect flipped:flipped]; + return; + } + + _drawingTrack = true; + [super drawBarInside:rect flipped:flipped]; + _drawingTrack = false; + + NSGradient *gradient = [[NSGradient alloc] initWithColors:@[ + [NSColor redColor], + [NSColor yellowColor], + [NSColor greenColor], + [NSColor cyanColor], + [NSColor blueColor], + [NSColor magentaColor], + [NSColor redColor], + ]]; + + rect.origin.y += rect.size.height / 2 - 0.5; + rect.size.height = 1; + rect.size.width -= 2; + rect.origin.x += 1; + [[NSColor redColor] set]; + NSRectFill(rect); + + rect.size.width -= self.knobThickness + 2; + rect.origin.x += self.knobThickness / 2 - 1; + + [gradient drawInRect:rect angle:0]; +} + +@end + +@implementation NSSlider (GBHueSlider) +- (NSColor *)colorValue +{ + return ((GBHueSliderCell *)self.cell).colorValue; +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBImageView.h b/thirdparty/SameBoy-old/Cocoa/GBImageView.h new file mode 100644 index 000000000..c15c4e744 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBImageView.h @@ -0,0 +1,23 @@ +#import + +@protocol GBImageViewDelegate; + +@interface GBImageViewGridConfiguration : NSObject +@property (nonatomic, strong) NSColor *color; +@property (nonatomic) NSUInteger size; +- (instancetype) initWithColor: (NSColor *) color size: (NSUInteger) size; +@end + +@interface GBImageView : NSImageView +@property (nonatomic, strong) NSArray *horizontalGrids; +@property (nonatomic, strong) NSArray *verticalGrids; +@property (nonatomic) bool displayScrollRect; +@property NSRect scrollRect; +@property (nonatomic, weak) IBOutlet id delegate; +@end + +@protocol GBImageViewDelegate +@optional +- (void) mouseDidLeaveImageView: (GBImageView *)view; +- (void) imageView: (GBImageView *)view mouseMovedToX:(NSUInteger) x Y:(NSUInteger) y; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBImageView.m b/thirdparty/SameBoy-old/Cocoa/GBImageView.m new file mode 100644 index 000000000..c496d9667 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBImageView.m @@ -0,0 +1,166 @@ +#import "GBImageView.h" + +@implementation GBImageViewGridConfiguration +- (instancetype)initWithColor:(NSColor *)color size:(NSUInteger)size +{ + self = [super init]; + self.color = color; + self.size = size; + return self; +} +@end + +@interface GBGridView : NSView +@end + +@implementation GBGridView + +- (void)drawRect:(NSRect)dirtyRect +{ + GBImageView *parent = (GBImageView *)self.superview; + + CGFloat y_ratio = parent.frame.size.height / parent.image.size.height; + CGFloat x_ratio = parent.frame.size.width / parent.image.size.width; + for (GBImageViewGridConfiguration *conf in parent.verticalGrids) { + [conf.color set]; + for (CGFloat y = conf.size * y_ratio; y < self.frame.size.height; y += conf.size * y_ratio) { + NSBezierPath *line = [NSBezierPath bezierPath]; + [line moveToPoint:NSMakePoint(0, y - 0.5)]; + [line lineToPoint:NSMakePoint(self.frame.size.width, y - 0.5)]; + [line setLineWidth:1.0]; + [line stroke]; + } + } + + for (GBImageViewGridConfiguration *conf in parent.horizontalGrids) { + [conf.color set]; + for (CGFloat x = conf.size * x_ratio; x < self.frame.size.width; x += conf.size * x_ratio) { + NSBezierPath *line = [NSBezierPath bezierPath]; + [line moveToPoint:NSMakePoint(x + 0.5, 0)]; + [line lineToPoint:NSMakePoint(x + 0.5, self.frame.size.height)]; + [line setLineWidth:1.0]; + [line stroke]; + } + } + + if (parent.displayScrollRect) { + NSBezierPath *path = [NSBezierPath bezierPathWithRect:CGRectInfinite]; + for (unsigned x = 0; x < 2; x++) { + for (unsigned y = 0; y < 2; y++) { + NSRect rect = parent.scrollRect; + rect.origin.x *= x_ratio; + rect.origin.y *= y_ratio; + rect.size.width *= x_ratio; + rect.size.height *= y_ratio; + rect.origin.y = self.frame.size.height - rect.origin.y - rect.size.height; + + rect.origin.x -= self.frame.size.width * x; + rect.origin.y += self.frame.size.height * y; + + + NSBezierPath *subpath = [NSBezierPath bezierPathWithRect:rect]; + [path appendBezierPath:subpath]; + } + } + [path setWindingRule:NSEvenOddWindingRule]; + [path setLineWidth:4.0]; + [path setLineJoinStyle:NSRoundLineJoinStyle]; + [[NSColor colorWithWhite:0.2 alpha:0.5] set]; + [path fill]; + [path addClip]; + [[NSColor colorWithWhite:0.0 alpha:0.6] set]; + [path stroke]; + } +} +@end + +@implementation GBImageView +{ + NSTrackingArea *_trackingArea; + GBGridView *_gridView; + NSRect _scrollRect; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + self.wantsLayer = true; + _gridView = [[GBGridView alloc] initWithFrame:self.bounds]; + _gridView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [self addSubview:_gridView]; + return self; +} + +-(void)viewWillDraw +{ + [super viewWillDraw]; + for (CALayer *layer in self.layer.sublayers) { + layer.magnificationFilter = kCAFilterNearest; + } +} + +- (void)setHorizontalGrids:(NSArray *)horizontalGrids +{ + self->_horizontalGrids = horizontalGrids; + [_gridView setNeedsDisplay:true]; +} + +- (void)setVerticalGrids:(NSArray *)verticalGrids +{ + self->_verticalGrids = verticalGrids; + [_gridView setNeedsDisplay:true]; +} + +- (void)setDisplayScrollRect:(bool)displayScrollRect +{ + self->_displayScrollRect = displayScrollRect; + [_gridView setNeedsDisplay:true]; +} + +- (void)updateTrackingAreas +{ + if (_trackingArea != nil) { + [self removeTrackingArea:_trackingArea]; + } + + _trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] + options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingMouseMoved + owner:self + userInfo:nil]; + [self addTrackingArea:_trackingArea]; +} + +- (void)mouseExited:(NSEvent *)theEvent +{ + if ([self.delegate respondsToSelector:@selector(mouseDidLeaveImageView:)]) { + [self.delegate mouseDidLeaveImageView:self]; + } +} + +- (void)mouseMoved:(NSEvent *)theEvent +{ + if ([self.delegate respondsToSelector:@selector(imageView:mouseMovedToX:Y:)]) { + NSPoint location = [self convertPoint:theEvent.locationInWindow fromView:nil]; + location.x /= self.bounds.size.width; + location.y /= self.bounds.size.height; + location.y = 1 - location.y; + location.x *= self.image.size.width; + location.y *= self.image.size.height; + [self.delegate imageView:self mouseMovedToX:(NSUInteger)location.x Y:(NSUInteger)location.y]; + } +} + +- (void)setScrollRect:(NSRect)scrollRect +{ + if (memcmp(&scrollRect, &_scrollRect, sizeof(scrollRect)) != 0) { + _scrollRect = scrollRect; + [_gridView setNeedsDisplay:true]; + } +} + +- (NSRect)scrollRect +{ + return _scrollRect; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.h b/thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.h new file mode 100644 index 000000000..17abe2054 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.h @@ -0,0 +1,17 @@ +#import "Document.h" +#import "HexFiend/HexFiend.h" +#import "HexFiend/HFByteArray.h" + +typedef enum { + GBMemoryEntireSpace, + GBMemoryROM, + GBMemoryVRAM, + GBMemoryExternalRAM, + GBMemoryRAM +} GB_memory_mode_t; + +@interface GBMemoryByteArray : HFByteArray +- (instancetype) initWithDocument:(Document *)document; +@property (nonatomic) uint16_t selectedBank; +@property (nonatomic) GB_memory_mode_t mode; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.m b/thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.m new file mode 100644 index 000000000..55e1bd152 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBMemoryByteArray.m @@ -0,0 +1,256 @@ +#import "GBMemoryByteArray.h" +#import "GBCompleteByteSlice.h" + + +@implementation GBMemoryByteArray +{ + Document *_document; +} + +- (instancetype) initWithDocument:(Document *)document +{ + if ((self = [super init])) { + _document = document; + } + return self; +} + +- (unsigned long long)length +{ + switch (_mode) { + case GBMemoryEntireSpace: + return 0x10000; + case GBMemoryROM: + return 0x8000; + case GBMemoryVRAM: + return 0x2000; + case GBMemoryExternalRAM: + return 0x2000; + case GBMemoryRAM: + return 0x2000; + } +} + +- (uint16_t)base +{ + switch (_mode) { + case GBMemoryEntireSpace: return 0; + case GBMemoryROM: return 0; + case GBMemoryVRAM: return 0x8000; + case GBMemoryExternalRAM: return 0xA000; + case GBMemoryRAM: return 0xC000; + } +} + +- (void)copyBytes:(unsigned char *)dst range:(HFRange)range +{ + // Do everything in 0x1000 chunks, never cross a 0x1000 boundary + if ((range.location & 0xF000) != ((range.location + range.length) & 0xF000)) { + size_t partial = 0x1000 - (range.location & 0xFFF); + [self copyBytes:dst + partial range:HFRangeMake(range.location + partial, range.length - partial)]; + range.length = partial; + } + range.location += self.base; + + GB_gameboy_t *gb = _document.gameboy; + + switch (range.location >> 12) { + case 0x0: + case 0x1: + case 0x2: + case 0x3: { + uint16_t bank; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_ROM0, NULL, &bank); + memcpy(dst, data + bank * 0x4000 + range.location, range.length); + break; + } + case 0x4: + case 0x5: + case 0x6: + case 0x7: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_ROM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x4000 - 1); + } + memcpy(dst, data + bank * 0x4000 + range.location - 0x4000, range.length); + break; + } + case 0x8: + case 0x9: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_VRAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x2000 - 1); + } + memcpy(dst, data + bank * 0x2000 + range.location - 0x8000, range.length); + break; + } + case 0xA: + case 0xB: { + // Some carts are special, use memory read directly in full mem mode + if (_mode == GBMemoryEntireSpace) { + case 0xF: + slow_path: + [_document performAtomicBlock:^{ + for (unsigned i = 0; i < range.length; i++) { + dst[i] = GB_safe_read_memory(gb, range.location + i); + } + }]; + break; + } + else { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_CART_RAM, &size, &bank); + bank = self.selectedBank & (size / 0x2000 - 1); + if (size == 0) { + memset(dst, 0xFF, range.length); + } + else if (range.location + range.length - 0xA000 > size) { + goto slow_path; + } + else { + memcpy(dst, data + bank * 0x2000 + range.location - 0xA000, range.length); + } + break; + } + } + case 0xC: + case 0xE: { + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, NULL, NULL); + memcpy(dst, data + (range.location & 0xFFF), range.length); + break; + } + + case 0xD: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x1000 - 1); + } + memcpy(dst, data + bank * 0x1000 + range.location - 0xD000, range.length); + break; + } + } +} + +- (NSArray *)byteSlices +{ + return @[[[GBCompleteByteSlice alloc] initWithByteArray:self]]; +} + +- (HFByteArray *)subarrayWithRange:(HFRange)range +{ + unsigned char arr[range.length]; + [self copyBytes:arr range:range]; + HFByteArray *ret = [[HFBTreeByteArray alloc] init]; + HFFullMemoryByteSlice *slice = [[HFFullMemoryByteSlice alloc] initWithData:[NSData dataWithBytes:arr length:range.length]]; + [ret insertByteSlice:slice inRange:HFRangeMake(0, 0)]; + return ret; +} + +- (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)range +{ + if (slice.length != range.length) return; /* Insertion is not allowed, only overwriting. */ + // Do everything in 0x1000 chunks, never cross a 0x1000 boundary + if ((range.location & 0xF000) != ((range.location + range.length) & 0xF000)) { + size_t partial = 0x1000 - (range.location & 0xFFF); + if (slice.length - partial) { + [self insertByteSlice:[slice subsliceWithRange:HFRangeMake(partial, slice.length - partial)] + inRange:HFRangeMake(range.location + partial, range.length - partial)]; + } + range.length = partial; + } + range.location += self.base; + + GB_gameboy_t *gb = _document.gameboy; + + + switch (range.location >> 12) { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + case 0x7: { + return; // ROM not writeable + } + case 0x8: + case 0x9: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_VRAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x2000 - 1); + } + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + memcpy(data + bank * 0x2000 + range.location - 0x8000, sliceData, range.length); + break; + } + case 0xA: + case 0xB: { + // Some carts are special, use memory write directly in full mem mode + if (_mode == GBMemoryEntireSpace) { + case 0xF: + slow_path: + [_document performAtomicBlock:^{ + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + for (unsigned i = 0; i < range.length; i++) { + GB_write_memory(gb, range.location + i, sliceData[i]); + } + }]; + break; + } + else { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_CART_RAM, &size, &bank); + bank = self.selectedBank & (size / 0x2000 - 1); + if (size == 0) { + // Nothing to write to + } + else if (range.location + range.length - 0xA000 > size) { + goto slow_path; + } + else { + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + memcpy(data + bank * 0x2000 + range.location - 0xA000, sliceData, range.length); + } + break; + } + } + case 0xC: + case 0xE: { + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, NULL, NULL); + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + memcpy(data + (range.location & 0xFFF), sliceData, range.length); + break; + } + + case 0xD: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x1000 - 1); + } + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + + memcpy(data + bank * 0x1000 + range.location - 0xD000, sliceData, range.length); + break; + } + } +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBOSDView.h b/thirdparty/SameBoy-old/Cocoa/GBOSDView.h new file mode 100644 index 000000000..4771d2fd6 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBOSDView.h @@ -0,0 +1,6 @@ +#import + +@interface GBOSDView : NSView +@property bool usesSGBScale; +- (void)displayText:(NSString *)text; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBOSDView.m b/thirdparty/SameBoy-old/Cocoa/GBOSDView.m new file mode 100644 index 000000000..710229ecd --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBOSDView.m @@ -0,0 +1,104 @@ +#import "GBOSDView.h" + +@implementation GBOSDView +{ + bool _usesSGBScale; + NSString *_text; + double _animation; + NSTimer *_timer; +} + +- (void)setUsesSGBScale:(bool)usesSGBScale +{ + _usesSGBScale = usesSGBScale; + [self setNeedsDisplay:true]; +} + +- (bool)usesSGBScale +{ + return _usesSGBScale; +} + +- (void)displayText:(NSString *)text +{ + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"GBOSDEnabled"]) return; + dispatch_async(dispatch_get_main_queue(), ^{ + if (![_text isEqualToString:text]) { + [self setNeedsDisplay:true]; + } + _text = text; + self.alphaValue = 1.0; + _animation = 2.5; + // Longer strings should appear longer + if ([_text rangeOfString:@"\n"].location != NSNotFound) { + _animation += 4; + } + [_timer invalidate]; + self.hidden = false; + _timer = [NSTimer scheduledTimerWithTimeInterval:0.025 target:self selector:@selector(animate) userInfo:nil repeats:true]; + }); +} + +- (void)animate +{ + _animation -= 0.1; + if (_animation < 1.0) { + self.alphaValue = _animation; + }; + if (_animation == 0) { + self.hidden = true; + [_timer invalidate]; + _text = nil; + } +} + +- (void)drawRect:(NSRect)dirtyRect +{ + [super drawRect:dirtyRect]; + if (!_text.length) return; + + double fontSize = 8; + NSSize size = self.frame.size; + if (_usesSGBScale) { + fontSize *= MIN(size.width / 256, size.height / 224); + } + else { + fontSize *= MIN(size.width / 160, size.height / 144); + } + + NSFont *font = [NSFont boldSystemFontOfSize:fontSize]; + + /* The built in stroke attribute uses an inside stroke, which is typographically terrible. + We'll use a naïve manual stroke instead which looks better. */ + + NSDictionary *attributes = @{ + NSFontAttributeName: font, + NSForegroundColorAttributeName: [NSColor blackColor], + }; + + NSAttributedString *text = [[NSAttributedString alloc] initWithString:_text attributes:attributes]; + + [text drawAtPoint:NSMakePoint(fontSize + 1, fontSize + 0)]; + [text drawAtPoint:NSMakePoint(fontSize - 1, fontSize + 0)]; + [text drawAtPoint:NSMakePoint(fontSize + 0, fontSize + 1)]; + [text drawAtPoint:NSMakePoint(fontSize + 0, fontSize - 1)]; + + // The uses of sqrt(2)/2, which is more correct, results in severe ugly-looking rounding errors + if (self.window.screen.backingScaleFactor > 1) { + [text drawAtPoint:NSMakePoint(fontSize + 0.5, fontSize + 0.5)]; + [text drawAtPoint:NSMakePoint(fontSize - 0.5, fontSize + 0.5)]; + [text drawAtPoint:NSMakePoint(fontSize - 0.5, fontSize - 0.5)]; + [text drawAtPoint:NSMakePoint(fontSize + 0.5, fontSize - 0.5)]; + } + + attributes = @{ + NSFontAttributeName: font, + NSForegroundColorAttributeName: [NSColor whiteColor], + }; + + text = [[NSAttributedString alloc] initWithString:_text attributes:attributes]; + + [text drawAtPoint:NSMakePoint(fontSize, fontSize)]; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBObjectView.h b/thirdparty/SameBoy-old/Cocoa/GBObjectView.h new file mode 100644 index 000000000..2d1c955de --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBObjectView.h @@ -0,0 +1,6 @@ +#import +#import "Document.h" + +@interface GBObjectView : NSView +- (void)reloadData:(Document *)document; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBObjectView.m b/thirdparty/SameBoy-old/Cocoa/GBObjectView.m new file mode 100644 index 000000000..0fb22a158 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBObjectView.m @@ -0,0 +1,124 @@ +#import "GBObjectView.h" + +@interface GBObjectViewItem : NSObject +@property IBOutlet NSView *view; +@property IBOutlet NSImageView *image; +@property IBOutlet NSTextField *oamAddress; +@property IBOutlet NSTextField *position; +@property IBOutlet NSTextField *attributes; +@property IBOutlet NSTextField *tile; +@property IBOutlet NSTextField *tileAddress; +@property IBOutlet NSImageView *warningIcon; +@property IBOutlet NSBox *verticalLine; +@end + +@implementation GBObjectViewItem +{ + @public + uint32_t _lastImageData[128]; + uint8_t _lastHeight; +} +@end + +@implementation GBObjectView +{ + NSMutableArray *_items; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + _items = [NSMutableArray array]; + CGFloat height = self.frame.size.height; + for (unsigned i = 0; i < 40; i++) { + GBObjectViewItem *item = [[GBObjectViewItem alloc] init]; + [_items addObject:item]; + [[NSBundle mainBundle] loadNibNamed:@"GBObjectViewItem" owner:item topLevelObjects:nil]; + item.view.hidden = true; + [self addSubview:item.view]; + [item.view setFrameOrigin:NSMakePoint((i % 4) * 120, height - (i / 4 * 68) - 68)]; + item.oamAddress.toolTip = @"OAM address"; + item.position.toolTip = @"Position"; + item.attributes.toolTip = @"Attributes"; + item.tile.toolTip = @"Tile index"; + item.tileAddress.toolTip = @"Tile address"; + item.warningIcon.toolTip = @"Dropped: too many objects in line"; + if ((i % 4) == 3) { + [item.verticalLine removeFromSuperview]; + } + item.view.autoresizingMask = NSViewMaxXMargin | NSViewMinYMargin; + } + return self; +} + +- (void)reloadData:(Document *)document +{ + GB_oam_info_t *info = document.oamInfo; + uint8_t length = document.oamCount; + bool cgb = GB_is_cgb(document.gb); + uint8_t height = document.oamHeight; + for (unsigned i = 0; i < 40; i++) { + GBObjectViewItem *item = _items[i]; + if (i >= length) { + item.view.hidden = true; + } + else { + item.view.hidden = false; + item.oamAddress.stringValue = [NSString stringWithFormat:@"$%04X", info[i].oam_addr]; + item.position.stringValue = [NSString stringWithFormat:@"(%d, %d)", + ((signed)(unsigned)info[i].x) - 8, + ((signed)(unsigned)info[i].y) - 16]; + item.tile.stringValue = [NSString stringWithFormat:@"$%02X", info[i].tile]; + item.tileAddress.stringValue = [NSString stringWithFormat:@"$%04X", 0x8000 + info[i].tile * 0x10]; + item.warningIcon.hidden = !info[i].obscured_by_line_limit; + if (cgb) { + item.attributes.stringValue = [NSString stringWithFormat:@"%c%c%c%d%d", + info[i].flags & 0x80? 'P' : '-', + info[i].flags & 0x40? 'Y' : '-', + info[i].flags & 0x20? 'X' : '-', + info[i].flags & 0x08? 1 : 0, + info[i].flags & 0x07]; + } + else { + item.attributes.stringValue = [NSString stringWithFormat:@"%c%c%c%d", + info[i].flags & 0x80? 'P' : '-', + info[i].flags & 0x40? 'Y' : '-', + info[i].flags & 0x20? 'X' : '-', + info[i].flags & 0x10? 1 : 0]; + } + size_t imageSize = 8 * 4 * height; + if (height == item->_lastHeight && memcmp(item->_lastImageData, info[i].image, imageSize) == 0) { + continue; + } + memcpy(item->_lastImageData, info[i].image, imageSize); + item->_lastHeight = height; + item.image.image = [Document imageFromData:[NSData dataWithBytesNoCopy:info[i].image + length:64 * 4 * 2 + freeWhenDone:false] + width:8 + height:height + scale:32.0 / height]; + } + } + + NSRect frame = self.frame; + CGFloat newHeight = MAX(68 * ((length + 3) / 4), self.superview.frame.size.height); + frame.origin.y -= newHeight - frame.size.height; + frame.size.height = newHeight; + self.frame = frame; +} + +- (void)drawRect:(NSRect)dirtyRect +{ + if (@available(macOS 10.14, *)) { + [[NSColor alternatingContentBackgroundColors].lastObject setFill]; + } + else { + [[NSColor colorWithDeviceWhite:0.96 alpha:1] setFill]; + } + NSRect frame = self.frame; + for (unsigned i = 1; i <= 5; i++) { + NSRectFill(NSMakeRect(0, frame.size.height - i * 68 * 2, frame.size.width, 68)); + } +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBObjectViewItem.xib b/thirdparty/SameBoy-old/Cocoa/GBObjectViewItem.xib new file mode 100644 index 000000000..85b37820e --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBObjectViewItem.xib @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/GBOpenGLView.h b/thirdparty/SameBoy-old/Cocoa/GBOpenGLView.h new file mode 100644 index 000000000..66001c9d7 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBOpenGLView.h @@ -0,0 +1,6 @@ +#import +#import "GBGLShader.h" + +@interface GBOpenGLView : NSOpenGLView +@property (nonatomic) GBGLShader *shader; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBOpenGLView.m b/thirdparty/SameBoy-old/Cocoa/GBOpenGLView.m new file mode 100644 index 000000000..2e4eb70f6 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBOpenGLView.m @@ -0,0 +1,39 @@ +#import "GBOpenGLView.h" +#import "GBView.h" +#include + +@implementation GBOpenGLView + +- (void)drawRect:(NSRect)dirtyRect +{ + if (!self.shader) { + self.shader = [[GBGLShader alloc] initWithName:[[NSUserDefaults standardUserDefaults] objectForKey:@"GBFilter"]]; + } + + GBView *gbview = (GBView *)self.superview; + double scale = self.window.backingScaleFactor; + glViewport(0, 0, self.bounds.size.width * scale, self.bounds.size.height * scale); + + if (gbview.gb) { + [self.shader renderBitmap:gbview.currentBuffer + previous:gbview.frameBlendingMode? gbview.previousBuffer : NULL + sized:NSMakeSize(GB_get_screen_width(gbview.gb), GB_get_screen_height(gbview.gb)) + inSize:self.bounds.size + scale:scale + withBlendingMode:gbview.frameBlendingMode]; + } + glFlush(); +} + +- (instancetype)initWithFrame:(NSRect)frameRect pixelFormat:(NSOpenGLPixelFormat *)format +{ + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(filterChanged) name:@"GBFilterChanged" object:nil]; + return [super initWithFrame:frameRect pixelFormat:format]; +} + +- (void) filterChanged +{ + self.shader = nil; + [self setNeedsDisplay:true]; +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.h b/thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.h new file mode 100644 index 000000000..135507157 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.h @@ -0,0 +1,6 @@ +#import + +/* Fake interface so the compiler assumes it conforms to NSVisualEffectView */ +@interface GBOptionalVisualEffectView : NSVisualEffectView + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.m b/thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.m new file mode 100644 index 000000000..c28eb5957 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBOptionalVisualEffectView.m @@ -0,0 +1,18 @@ +#import + +@interface GBOptionalVisualEffectView : NSView + +@end + +@implementation GBOptionalVisualEffectView + ++ (instancetype)allocWithZone:(struct _NSZone *)zone +{ + Class NSVisualEffectView = NSClassFromString(@"NSVisualEffectView"); + if (NSVisualEffectView) { + return (id)[NSVisualEffectView alloc]; + } + return [super allocWithZone:zone]; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.h b/thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.h new file mode 100644 index 000000000..fd362ec14 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.h @@ -0,0 +1,18 @@ +#import +#import + +@interface GBPaletteEditorController : NSObject +@property (weak) IBOutlet NSColorWell *colorWell0; +@property (weak) IBOutlet NSColorWell *colorWell1; +@property (weak) IBOutlet NSColorWell *colorWell2; +@property (weak) IBOutlet NSColorWell *colorWell3; +@property (weak) IBOutlet NSColorWell *colorWell4; +@property (weak) IBOutlet NSButton *disableLCDColorCheckbox; +@property (weak) IBOutlet NSButton *manualModeCheckbox; +@property (weak) IBOutlet NSSlider *brightnessSlider; +@property (weak) IBOutlet NSSlider *hueSlider; +@property (weak) IBOutlet NSSlider *hueStrengthSlider; +@property (weak) IBOutlet NSTableView *themesList; +@property (weak) IBOutlet NSMenu *menu; ++ (const GB_palette_t *)userPalette; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.m b/thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.m new file mode 100644 index 000000000..0a613fba4 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBPaletteEditorController.m @@ -0,0 +1,378 @@ +#import "GBPaletteEditorController.h" +#import "GBHueSliderCell.h" +#import + +#define MAGIC 'SBPL' + +typedef struct __attribute__ ((packed)) { + uint32_t magic; + bool manual:1; + bool disabled_lcd_color:1; + unsigned padding:6; + struct GB_color_s colors[5]; + int32_t brightness_bias; + uint32_t hue_bias; + uint32_t hue_bias_strength; +} theme_t; + +static double blend(double from, double to, double position) +{ + return from * (1 - position) + to * position; +} + +@implementation NSColor (GBColor) + +- (struct GB_color_s)gbColor +{ + NSColor *sRGB = [self colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + return (struct GB_color_s){round(sRGB.redComponent * 255), round(sRGB.greenComponent * 255), round(sRGB.blueComponent * 255)}; +} + +- (uint32_t)intValue +{ + struct GB_color_s color = self.gbColor; + return (color.r << 0) | (color.g << 8) | (color.b << 16) | 0xFF000000; +} + +@end + +@implementation GBPaletteEditorController + +- (NSArray *)colorWells +{ + return @[_colorWell0, _colorWell1, _colorWell2, _colorWell3, _colorWell4]; +} + +- (void)updateEnabledControls +{ + if (self.manualModeCheckbox.state) { + _brightnessSlider.enabled = false; + _hueSlider.enabled = false; + _hueStrengthSlider.enabled = false; + _colorWell1.enabled = true; + _colorWell2.enabled = true; + _colorWell3.enabled = true; + if (!(_colorWell4.enabled = self.disableLCDColorCheckbox.state)) { + _colorWell4.color = _colorWell3.color; + } + } + else { + _colorWell1.enabled = false; + _colorWell2.enabled = false; + _colorWell3.enabled = false; + _colorWell4.enabled = true; + _brightnessSlider.enabled = true; + _hueSlider.enabled = true; + _hueStrengthSlider.enabled = true; + [self updateAutoColors]; + } +} + +- (NSColor *)autoColorAtPositon:(double)position +{ + NSColor *first = [_colorWell0.color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + NSColor *second = [_colorWell4.color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + double brightness = 1 / pow(4, (_brightnessSlider.doubleValue - 128) / 128.0); + position = pow(position, brightness); + NSColor *hue = _hueSlider.colorValue; + double bias = _hueStrengthSlider.doubleValue / 256.0; + double red = 1 / pow(4, (hue.redComponent * 2 - 1) * bias); + double green = 1 / pow(4, (hue.greenComponent * 2 - 1) * bias); + double blue = 1 / pow(4, (hue.blueComponent * 2 - 1) * bias); + NSColor *ret = [NSColor colorWithRed:blend(first.redComponent, second.redComponent, pow(position, red)) + green:blend(first.greenComponent, second.greenComponent, pow(position, green)) + blue:blend(first.blueComponent, second.blueComponent, pow(position, blue)) + alpha:1.0]; + return ret; +} + +- (IBAction)updateAutoColors:(id)sender +{ + if (!self.manualModeCheckbox.state) { + [self updateAutoColors]; + } + else { + [self savePalette:sender]; + } +} + +- (void)updateAutoColors +{ + if (_disableLCDColorCheckbox.state) { + _colorWell1.color = [self autoColorAtPositon:8 / 25.0]; + _colorWell2.color = [self autoColorAtPositon:16 / 25.0]; + _colorWell3.color = [self autoColorAtPositon:24 / 25.0]; + } + else { + _colorWell1.color = [self autoColorAtPositon:1 / 3.0]; + _colorWell2.color = [self autoColorAtPositon:2 / 3.0]; + _colorWell3.color = _colorWell4.color; + } + [self savePalette:nil]; +} + +- (IBAction)disabledLCDColorCheckboxChanged:(id)sender +{ + [self updateEnabledControls]; +} + +- (IBAction)manualModeChanged:(id)sender +{ + [self updateEnabledControls]; +} + +- (IBAction)updateColor4:(id)sender +{ + if (!self.disableLCDColorCheckbox.state) { + self.colorWell4.color = self.colorWell3.color; + } + [self savePalette:self]; +} + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + if (themes.count == 0) { + [defaults setObject:@"Untitled Palette" forKey:@"GBCurrentTheme"]; + [self savePalette:nil]; + return 1; + } + return themes.count; +} + +-(void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + NSString *oldName = [self tableView:tableView objectValueForTableColumn:tableColumn row:row]; + if ([oldName isEqualToString:object]) { + return; + } + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSMutableDictionary *themes = [[defaults dictionaryForKey:@"GBThemes"] ?: @{} mutableCopy]; + NSString *newName = object; + unsigned i = 2; + if (!newName.length) { + newName = @"Untitled Palette"; + } + while (themes[newName]) { + newName = [NSString stringWithFormat:@"%@ %d", object, i]; + } + themes[newName] = themes[oldName]; + [themes removeObjectForKey:oldName]; + if ([oldName isEqualToString:[defaults stringForKey:@"GBCurrentTheme"]]) { + [defaults setObject:newName forKey:@"GBCurrentTheme"]; + } + [defaults setObject:themes forKey:@"GBThemes"]; + [tableView reloadData]; + [self awakeFromNib]; +} + +- (IBAction)deleteTheme:(id)sender +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *name = [defaults stringForKey:@"GBCurrentTheme"]; + NSMutableDictionary *themes = [[defaults dictionaryForKey:@"GBThemes"] ?: @{} mutableCopy]; + [themes removeObjectForKey:name]; + [defaults setObject:themes forKey:@"GBThemes"]; + [_themesList reloadData]; + [self awakeFromNib]; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)notification +{ + NSString *name = [self tableView:nil objectValueForTableColumn:nil row:_themesList.selectedRow]; + [[NSUserDefaults standardUserDefaults] setObject:name forKey:@"GBCurrentTheme"]; + [self loadPalette]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorPaletteChanged" object:nil]; +} + +- (void)tableViewSelectionIsChanging:(NSNotification *)notification +{ + [self tableViewSelectionDidChange:notification]; +} + +- (void)awakeFromNib +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSString *theme = [defaults stringForKey:@"GBCurrentTheme"]; + if (theme && themes[theme]) { + unsigned index = [[themes.allKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] indexOfObject:theme]; + [_themesList selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:false]; + } + else { + [_themesList selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:false]; + } + [self tableViewSelectionDidChange:nil]; +} + +- (IBAction)addTheme:(id)sender +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSString *newName = @"Untitled Palette"; + unsigned i = 2; + while (themes[newName]) { + newName = [NSString stringWithFormat:@"Untitled Palette %d", i++]; + } + [defaults setObject:newName forKey:@"GBCurrentTheme"]; + [self savePalette:sender]; + [_themesList reloadData]; + [self awakeFromNib]; +} + +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + return [themes.allKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)][row]; +} + +- (void)loadPalette +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *theme = [defaults dictionaryForKey:@"GBThemes"][[defaults stringForKey:@"GBCurrentTheme"]]; + NSArray *colors = theme[@"Colors"]; + if (colors.count == 5) { + unsigned i = 0; + for (NSNumber *color in colors) { + uint32_t c = [color unsignedIntValue]; + self.colorWells[i++].color = [NSColor colorWithRed:(c & 0xFF) / 255.0 + green:((c >> 8) & 0xFF) / 255.0 + blue:((c >> 16) & 0xFF) / 255.0 + alpha:1.0]; + } + } + _disableLCDColorCheckbox.state = [theme[@"DisabledLCDColor"] boolValue]; + _manualModeCheckbox.state = [theme[@"Manual"] boolValue]; + _brightnessSlider.doubleValue = [theme[@"BrightnessBias"] doubleValue] * 128 + 128; + _hueSlider.doubleValue = [theme[@"HueBias"] doubleValue] * 360; + _hueStrengthSlider.doubleValue = [theme[@"HueBiasStrength"] doubleValue] * 256; + [self updateEnabledControls]; +} + +- (IBAction)savePalette:(id)sender +{ + NSDictionary *theme = @{ + @"Colors": + @[@(_colorWell0.color.intValue), + @(_colorWell1.color.intValue), + @(_colorWell2.color.intValue), + @(_colorWell3.color.intValue), + @(_colorWell4.color.intValue)], + @"DisabledLCDColor": _disableLCDColorCheckbox.state? @YES : @NO, + @"Manual": _manualModeCheckbox.state? @YES : @NO, + @"BrightnessBias": @((_brightnessSlider.doubleValue - 128) / 128.0), + @"HueBias": @(_hueSlider.doubleValue / 360.0), + @"HueBiasStrength": @(_hueStrengthSlider.doubleValue / 256.0) + }; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSMutableDictionary *themes = [[defaults dictionaryForKey:@"GBThemes"] ?: @{} mutableCopy]; + themes[[defaults stringForKey:@"GBCurrentTheme"]] = theme; + [defaults setObject:themes forKey:@"GBThemes"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorPaletteChanged" object:nil]; +} + ++ (const GB_palette_t *)userPalette +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + switch ([defaults integerForKey:@"GBColorPalette"]) { + case 1: return &GB_PALETTE_DMG; + case 2: return &GB_PALETTE_MGB; + case 3: return &GB_PALETTE_GBL; + default: return &GB_PALETTE_GREY; + case -1: { + static GB_palette_t customPalette; + NSArray *colors = [defaults dictionaryForKey:@"GBThemes"][[defaults stringForKey:@"GBCurrentTheme"]][@"Colors"]; + if (colors.count == 5) { + unsigned i = 0; + for (NSNumber *color in colors) { + uint32_t c = [color unsignedIntValue]; + customPalette.colors[i++] = (struct GB_color_s) {c, c >> 8, c >> 16}; + } + } + return &customPalette; + } + } +} + +- (IBAction)export:(id)sender +{ + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setAllowedFileTypes:@[@"sbp"]]; + savePanel.nameFieldStringValue = [NSString stringWithFormat:@"%@.sbp", [[NSUserDefaults standardUserDefaults] stringForKey:@"GBCurrentTheme"]]; + if ([savePanel runModal] == NSModalResponseOK) { + theme_t theme = {0,}; + theme.magic = MAGIC; + theme.manual = _manualModeCheckbox.state; + theme.disabled_lcd_color = _disableLCDColorCheckbox.state; + unsigned i = 0; + for (NSColorWell *well in self.colorWells) { + theme.colors[i++] = well.color.gbColor; + } + theme.brightness_bias = (_brightnessSlider.doubleValue - 128) * (0x40000000 / 128); + theme.hue_bias = round(_hueSlider.doubleValue * (0x80000000 / 360.0)); + theme.hue_bias_strength = (_hueStrengthSlider.doubleValue) * (0x80000000 / 256); + size_t size = sizeof(theme); + if (theme.manual) { + size = theme.disabled_lcd_color? 5 + 5 * sizeof(theme.colors[0]) : 5 + 4 * sizeof(theme.colors[0]); + } + [[NSData dataWithBytes:&theme length:size] writeToURL:savePanel.URL atomically:false]; + } +} + +- (IBAction)import:(id)sender +{ + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowedFileTypes:@[@"sbp"]]; + if ([openPanel runModal] == NSModalResponseOK) { + NSData *data = [NSData dataWithContentsOfURL:openPanel.URL]; + theme_t theme = {0,}; + memcpy(&theme, data.bytes, MIN(sizeof(theme), data.length)); + if (theme.magic != MAGIC) { + NSBeep(); + return; + } + _manualModeCheckbox.state = theme.manual; + _disableLCDColorCheckbox.state = theme.disabled_lcd_color; + unsigned i = 0; + for (NSColorWell *well in self.colorWells) { + well.color = [NSColor colorWithRed:theme.colors[i].r / 255.0 + green:theme.colors[i].g / 255.0 + blue:theme.colors[i].b / 255.0 + alpha:1.0]; + i++; + } + if (!theme.disabled_lcd_color) { + _colorWell4.color = _colorWell3.color; + } + _brightnessSlider.doubleValue = theme.brightness_bias / (0x40000000 / 128.0) + 128; + _hueSlider.doubleValue = theme.hue_bias / (0x80000000 / 360.0); + _hueStrengthSlider.doubleValue = theme.hue_bias_strength / (0x80000000 / 256.0); + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSString *baseName = openPanel.URL.lastPathComponent.stringByDeletingPathExtension; + NSString *newName = baseName; + i = 2; + while (themes[newName]) { + newName = [NSString stringWithFormat:@"%@ %d", baseName, i++]; + } + [defaults setObject:newName forKey:@"GBCurrentTheme"]; + [self savePalette:sender]; + [self awakeFromNib]; + } +} + +- (IBAction)done:(NSButton *)sender +{ + [sender.window.sheetParent endSheet:sender.window]; +} + +- (instancetype)init +{ + static id singleton = nil; + if (singleton) return singleton; + return (singleton = [super init]); +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBPaletteView.h b/thirdparty/SameBoy-old/Cocoa/GBPaletteView.h new file mode 100644 index 000000000..d92cb5f17 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBPaletteView.h @@ -0,0 +1,6 @@ +#import +#import "Document.h" + +@interface GBPaletteView : NSView +- (void)reloadData:(Document *)document; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBPaletteView.m b/thirdparty/SameBoy-old/Cocoa/GBPaletteView.m new file mode 100644 index 000000000..6aeddc05c --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBPaletteView.m @@ -0,0 +1,91 @@ +#import "GBPaletteView.h" + +@interface GBPaletteViewItem : NSObject +@property IBOutlet NSView *view; +@property (strong) IBOutlet NSTextField *label; +@property (strong) IBOutlet NSTextField *color0; +@property (strong) IBOutlet NSTextField *color1; +@property (strong) IBOutlet NSTextField *color2; +@property (strong) IBOutlet NSTextField *color3; +@end + +@implementation GBPaletteViewItem +@end + +@implementation GBPaletteView +{ + NSMutableArray *_colors; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + _colors = [NSMutableArray array]; + CGFloat height = self.frame.size.height; + for (unsigned i = 0; i < 16; i++) { + GBPaletteViewItem *item = [[GBPaletteViewItem alloc] init]; + [[NSBundle mainBundle] loadNibNamed:@"GBPaletteViewRow" owner:item topLevelObjects:nil]; + [self addSubview:item.view]; + [item.view setFrameOrigin:NSMakePoint(0, height - (i * 24) - 24)]; + item.label.stringValue = [NSString stringWithFormat:@"%@ %d", i < 8? @"Background" : @"Object", i % 8]; + item.view.autoresizingMask = NSViewMaxXMargin | NSViewMinYMargin; + [_colors addObject:item.color0]; + [_colors addObject:item.color1]; + [_colors addObject:item.color2]; + [_colors addObject:item.color3]; + + } + return self; +} + +- (void)reloadData:(Document *)document +{ + GB_gameboy_t *gb = document.gb; + uint8_t *bg = GB_get_direct_access(gb, GB_DIRECT_ACCESS_BGP, NULL, NULL); + uint8_t *obj = GB_get_direct_access(gb, GB_DIRECT_ACCESS_OBP, NULL, NULL); + + for (unsigned i = 0; i < 4 * 8 * 2; i++) { + uint8_t index = i % (4 * 8); + uint8_t *palette = i >= 4 * 8 ? obj : bg; + uint16_t color = (palette[(index << 1) + 1] << 8) | palette[(index << 1)]; + uint32_t nativeColor = GB_convert_rgb15(gb, color, false); + + uint8_t r = color & 0x1F, + g = (color >> 5) & 0x1F, + b = (color >> 10) & 0x1F; + + NSTextField *field = _colors[i]; + field.stringValue = [NSString stringWithFormat:@"$%04X", color]; + field.textColor = r * 3 + g * 4 + b * 2 > 120? [NSColor blackColor] : [NSColor whiteColor]; + field.toolTip = [NSString stringWithFormat:@"Red: %d, Green: %d, Blue: %d", r, g, b]; + field.backgroundColor = [NSColor colorWithRed:(nativeColor & 0xFF) / 255.0 + green:((nativeColor >> 8) & 0xFF) / 255.0 + blue:((nativeColor >> 16) & 0xFF) / 255.0 + alpha:1.0]; + } +} + +- (void)drawRect:(NSRect)dirtyRect +{ + NSRect frame = self.frame; + if (@available(macOS 10.14, *)) { + [[NSColor alternatingContentBackgroundColors].lastObject setFill]; + } + else { + [[NSColor colorWithDeviceWhite:0.96 alpha:1] setFill]; + } + for (unsigned i = 1; i <= 8; i++) { + NSRectFill(NSMakeRect(0, frame.size.height - i * 24 * 2, frame.size.width, 24)); + } + + if (@available(macOS 10.14, *)) { + [[NSColor alternatingContentBackgroundColors].firstObject setFill]; + } + else { + [[NSColor controlBackgroundColor] setFill]; + } + for (unsigned i = 0; i < 8; i++) { + NSRectFill(NSMakeRect(0, frame.size.height - i * 24 * 2 - 24, frame.size.width, 24)); + } +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBPaletteViewRow.xib b/thirdparty/SameBoy-old/Cocoa/GBPaletteViewRow.xib new file mode 100644 index 000000000..950b199a7 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBPaletteViewRow.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.h b/thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.h new file mode 100644 index 000000000..8e11830eb --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.h @@ -0,0 +1,41 @@ +#import +#import +#import "GBPaletteEditorController.h" + +@interface GBPreferencesWindow : NSWindow +@property IBOutlet NSTableView *controlsTableView; +@property IBOutlet NSPopUpButton *graphicsFilterPopupButton; +@property IBOutlet NSButton *analogControlsCheckbox; +@property IBOutlet NSButton *controllersFocusCheckbox; +@property IBOutlet NSButton *aspectRatioCheckbox; +@property IBOutlet NSPopUpButton *highpassFilterPopupButton; +@property IBOutlet NSPopUpButton *colorCorrectionPopupButton; +@property IBOutlet NSPopUpButton *frameBlendingModePopupButton; +@property IBOutlet NSPopUpButton *colorPalettePopupButton; +@property IBOutlet NSPopUpButton *displayBorderPopupButton; +@property IBOutlet NSPopUpButton *rewindPopupButton; +@property IBOutlet NSPopUpButton *rtcPopupButton; +@property IBOutlet NSButton *configureJoypadButton; +@property IBOutlet NSButton *skipButton; +@property IBOutlet NSMenuItem *bootROMsFolderItem; +@property IBOutlet NSPopUpButtonCell *bootROMsButton; +@property IBOutlet NSPopUpButton *rumbleModePopupButton; +@property IBOutlet NSPopUpButton *hotkey1PopupButton; +@property IBOutlet NSPopUpButton *hotkey2PopupButton; +@property IBOutlet NSSlider *temperatureSlider; +@property IBOutlet NSSlider *interferenceSlider; +@property IBOutlet NSPopUpButton *dmgPopupButton; +@property IBOutlet NSPopUpButton *sgbPopupButton; +@property IBOutlet NSPopUpButton *cgbPopupButton; +@property IBOutlet NSPopUpButton *agbPopupButton; +@property IBOutlet NSPopUpButton *preferredJoypadButton; +@property IBOutlet NSPopUpButton *playerListButton; +@property IBOutlet NSButton *autoUpdatesCheckbox; +@property IBOutlet NSSlider *volumeSlider; +@property IBOutlet NSButton *OSDCheckbox; +@property IBOutlet NSButton *screenshotFilterCheckbox; +@property IBOutlet GBPaletteEditorController *paletteEditorController; +@property IBOutlet NSWindow *paletteEditor; +@property IBOutlet NSButton *joystickMBC7Checkbox; +@property IBOutlet NSButton *mouseMBC7Checkbox; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.m b/thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.m new file mode 100644 index 000000000..a9c2c913a --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBPreferencesWindow.m @@ -0,0 +1,1002 @@ +#import "GBPreferencesWindow.h" +#import "NSString+StringForKey.h" +#import "GBButtons.h" +#import "BigSurToolbar.h" +#import "GBViewMetal.h" +#import "GBWarningPopover.h" +#import + +@implementation GBPreferencesWindow +{ + bool is_button_being_modified; + NSInteger button_being_modified; + signed joystick_configuration_state; + NSString *joystick_being_configured; + bool joypad_wait; + + NSPopUpButton *_graphicsFilterPopupButton; + NSPopUpButton *_highpassFilterPopupButton; + NSPopUpButton *_colorCorrectionPopupButton; + NSPopUpButton *_frameBlendingModePopupButton; + NSPopUpButton *_colorPalettePopupButton; + NSPopUpButton *_displayBorderPopupButton; + NSPopUpButton *_rewindPopupButton; + NSPopUpButton *_rtcPopupButton; + NSButton *_aspectRatioCheckbox; + NSButton *_analogControlsCheckbox; + NSButton *_controllersFocusCheckbox; + NSEventModifierFlags previousModifiers; + + NSPopUpButton *_dmgPopupButton, *_sgbPopupButton, *_cgbPopupButton, *_agbPopupButton; + NSPopUpButton *_preferredJoypadButton; + NSPopUpButton *_rumbleModePopupButton; + NSPopUpButton *_hotkey1PopupButton; + NSPopUpButton *_hotkey2PopupButton; + NSSlider *_temperatureSlider; + NSSlider *_interferenceSlider; + NSSlider *_volumeSlider; + NSButton *_autoUpdatesCheckbox; + NSButton *_OSDCheckbox; + NSButton *_screenshotFilterCheckbox; + NSButton *_joystickMBC7Checkbox; + NSButton *_mouseMBC7Checkbox; +} + ++ (NSArray *)filterList +{ + /* The filter list as ordered in the popup button */ + static NSArray * filters = nil; + if (!filters) { + filters = @[ + @"NearestNeighbor", + @"Bilinear", + @"SmoothBilinear", + @"MonoLCD", + @"LCD", + @"CRT", + @"Scale2x", + @"Scale4x", + @"AAScale2x", + @"AAScale4x", + @"HQ2x", + @"OmniScale", + @"OmniScaleLegacy", + @"AAOmniScaleLegacy", + ]; + } + return filters; +} + +- (NSWindowToolbarStyle)toolbarStyle +{ + return NSWindowToolbarStyleExpanded; +} + +- (void)close +{ + joystick_configuration_state = -1; + [self.configureJoypadButton setEnabled:true]; + [self.skipButton setEnabled:false]; + [self.configureJoypadButton setTitle:@"Configure Controller"]; + [super close]; +} + +- (NSPopUpButton *)graphicsFilterPopupButton +{ + return _graphicsFilterPopupButton; +} + +- (void)setGraphicsFilterPopupButton:(NSPopUpButton *)graphicsFilterPopupButton +{ + _graphicsFilterPopupButton = graphicsFilterPopupButton; + NSString *filter = [[NSUserDefaults standardUserDefaults] objectForKey:@"GBFilter"]; + [_graphicsFilterPopupButton selectItemAtIndex:[[[self class] filterList] indexOfObject:filter]]; +} + +- (NSPopUpButton *)highpassFilterPopupButton +{ + return _highpassFilterPopupButton; +} + +- (void)setColorCorrectionPopupButton:(NSPopUpButton *)colorCorrectionPopupButton +{ + _colorCorrectionPopupButton = colorCorrectionPopupButton; + NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorCorrection"]; + [_colorCorrectionPopupButton selectItemWithTag:mode]; +} + + +- (NSPopUpButton *)colorCorrectionPopupButton +{ + return _colorCorrectionPopupButton; +} + +- (void)setTemperatureSlider:(NSSlider *)temperatureSlider +{ + _temperatureSlider = temperatureSlider; + [temperatureSlider setDoubleValue:[[NSUserDefaults standardUserDefaults] doubleForKey:@"GBLightTemperature"] * 256]; +} + +- (NSSlider *)temperatureSlider +{ + return _temperatureSlider; +} + +- (void)setInterferenceSlider:(NSSlider *)interferenceSlider +{ + _interferenceSlider = interferenceSlider; + [interferenceSlider setDoubleValue:[[NSUserDefaults standardUserDefaults] doubleForKey:@"GBInterferenceVolume"] * 256]; +} + +- (NSSlider *)interferenceSlider +{ + return _interferenceSlider; +} + +- (void)setVolumeSlider:(NSSlider *)volumeSlider +{ + _volumeSlider = volumeSlider; + [volumeSlider setDoubleValue:[[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"] * 256]; +} + +- (NSSlider *)volumeSlider +{ + return _volumeSlider; +} + +- (void)setFrameBlendingModePopupButton:(NSPopUpButton *)frameBlendingModePopupButton +{ + _frameBlendingModePopupButton = frameBlendingModePopupButton; + NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBFrameBlendingMode"]; + [_frameBlendingModePopupButton selectItemAtIndex:mode]; +} + +- (NSPopUpButton *)frameBlendingModePopupButton +{ + return _frameBlendingModePopupButton; +} + +- (void)setColorPalettePopupButton:(NSPopUpButton *)colorPalettePopupButton +{ + _colorPalettePopupButton = colorPalettePopupButton; + [self updatePalettesMenu]; + NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorPalette"]; + if (mode >= 0) { + [_colorPalettePopupButton selectItemWithTag:mode]; + } + else { + [_colorPalettePopupButton selectItemWithTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"GBCurrentTheme"] ?: @""]; + } +} + +- (NSPopUpButton *)colorPalettePopupButton +{ + return _colorPalettePopupButton; +} + +- (void)setDisplayBorderPopupButton:(NSPopUpButton *)displayBorderPopupButton +{ + _displayBorderPopupButton = displayBorderPopupButton; + NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBBorderMode"]; + [_displayBorderPopupButton selectItemWithTag:mode]; +} + +- (NSPopUpButton *)displayBorderPopupButton +{ + return _displayBorderPopupButton; +} + +- (void)setRumbleModePopupButton:(NSPopUpButton *)rumbleModePopupButton +{ + _rumbleModePopupButton = rumbleModePopupButton; + NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRumbleMode"]; + [_rumbleModePopupButton selectItemWithTag:mode]; +} + +- (NSPopUpButton *)rumbleModePopupButton +{ + return _rumbleModePopupButton; +} + +static inline NSString *keyEquivalentString(NSMenuItem *item) +{ + return [NSString stringWithFormat:@"%s%@", (item.keyEquivalentModifierMask & NSEventModifierFlagShift)? "^":"", item.keyEquivalent]; +} + +- (void)setHotkey1PopupButton:(NSPopUpButton *)hotkey1PopupButton +{ + _hotkey1PopupButton = hotkey1PopupButton; + NSString *keyEquivalent = [[NSUserDefaults standardUserDefaults] stringForKey:@"GBJoypadHotkey1"]; + for (NSMenuItem *item in _hotkey1PopupButton.menu.itemArray) { + if ([keyEquivalent isEqualToString:keyEquivalentString(item)]) { + [_hotkey1PopupButton selectItem:item]; + break; + } + } +} + +- (NSPopUpButton *)hotkey1PopupButton +{ + return _hotkey1PopupButton; +} + +- (void)setHotkey2PopupButton:(NSPopUpButton *)hotkey2PopupButton +{ + _hotkey2PopupButton = hotkey2PopupButton; + NSString *keyEquivalent = [[NSUserDefaults standardUserDefaults] stringForKey:@"GBJoypadHotkey2"]; + for (NSMenuItem *item in _hotkey2PopupButton.menu.itemArray) { + if ([keyEquivalent isEqualToString:keyEquivalentString(item)]) { + [_hotkey2PopupButton selectItem:item]; + break; + } + } +} + +- (NSPopUpButton *)hotkey2PopupButton +{ + return _hotkey2PopupButton; +} + +- (void)setRewindPopupButton:(NSPopUpButton *)rewindPopupButton +{ + _rewindPopupButton = rewindPopupButton; + NSInteger length = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRewindLength"]; + [_rewindPopupButton selectItemWithTag:length]; +} + +- (NSPopUpButton *)rewindPopupButton +{ + return _rewindPopupButton; +} + +- (NSPopUpButton *)rtcPopupButton +{ + return _rtcPopupButton; +} + +- (void)setRtcPopupButton:(NSPopUpButton *)rtcPopupButton +{ + _rtcPopupButton = rtcPopupButton; + NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRTCMode"]; + [_rtcPopupButton selectItemAtIndex:mode]; +} + +- (void)setHighpassFilterPopupButton:(NSPopUpButton *)highpassFilterPopupButton +{ + _highpassFilterPopupButton = highpassFilterPopupButton; + [_highpassFilterPopupButton selectItemAtIndex:[[[NSUserDefaults standardUserDefaults] objectForKey:@"GBHighpassFilter"] unsignedIntegerValue]]; +} + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + if (self.playerListButton.selectedTag == 0) { + return GBButtonCount; + } + return GBGameBoyButtonCount; +} + +- (unsigned) usesForKey:(unsigned) key +{ + unsigned ret = 0; + for (unsigned player = 4; player--;) { + for (unsigned button = player == 0? GBButtonCount:GBGameBoyButtonCount; button--;) { + NSNumber *other = [[NSUserDefaults standardUserDefaults] valueForKey:button_to_preference_name(button, player)]; + if (other && [other unsignedIntValue] == key) { + ret++; + } + } + } + return ret; +} + +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + if ([tableColumn.identifier isEqualToString:@"keyName"]) { + return GBButtonNames[row]; + } + + if (is_button_being_modified && button_being_modified == row) { + return @"Select a new key..."; + } + + NSNumber *key = [[NSUserDefaults standardUserDefaults] valueForKey:button_to_preference_name(row, self.playerListButton.selectedTag)]; + if (key) { + if ([self usesForKey:[key unsignedIntValue]] > 1) { + return [[NSAttributedString alloc] initWithString:[NSString displayStringForKeyCode: [key unsignedIntegerValue]] + attributes:@{NSForegroundColorAttributeName: [NSColor colorWithRed:0.9375 green:0.25 blue:0.25 alpha:1.0], + NSFontAttributeName: [NSFont boldSystemFontOfSize:[NSFont systemFontSize]] + }]; + } + return [NSString displayStringForKeyCode: [key unsignedIntegerValue]]; + } + + return @""; +} + +- (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + + dispatch_async(dispatch_get_main_queue(), ^{ + is_button_being_modified = true; + button_being_modified = row; + tableView.enabled = false; + self.playerListButton.enabled = false; + [tableView reloadData]; + [self makeFirstResponder:self]; + }); + return false; +} + +-(void)keyDown:(NSEvent *)theEvent +{ + if (!is_button_being_modified) { + if (self.firstResponder != self.controlsTableView && [theEvent type] != NSEventTypeFlagsChanged) { + [super keyDown:theEvent]; + } + return; + } + + is_button_being_modified = false; + + [[NSUserDefaults standardUserDefaults] setInteger:theEvent.keyCode + forKey:button_to_preference_name(button_being_modified, self.playerListButton.selectedTag)]; + self.controlsTableView.enabled = true; + self.playerListButton.enabled = true; + [self.controlsTableView reloadData]; + [self makeFirstResponder:self.controlsTableView]; +} + +- (void) flagsChanged:(NSEvent *)event +{ + if (event.modifierFlags > previousModifiers) { + [self keyDown:event]; + } + + previousModifiers = event.modifierFlags; +} + +- (IBAction)graphicFilterChanged:(NSPopUpButton *)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:[[self class] filterList][[sender indexOfSelectedItem]] + forKey:@"GBFilter"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBFilterChanged" object:nil]; +} + +- (IBAction)highpassFilterChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender indexOfSelectedItem]) + forKey:@"GBHighpassFilter"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBHighpassFilterChanged" object:nil]; +} + + +- (IBAction)changeMBC7JoystickOverride:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBMBC7JoystickOverride"]; +} + +- (IBAction)changeMBC7AllowMouse:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBMBC7AllowMouse"]; +} + +- (IBAction)changeAnalogControls:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBAnalogControls"]; +} + +- (IBAction)changeControllerFocus:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBAllowBackgroundControllers"]; +} + +- (IBAction)changeAspectRatio:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] != NSOnState + forKey:@"GBAspectRatioUnkept"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBAspectChanged" object:nil]; +} + +- (IBAction)colorCorrectionChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedItem].tag) + forKey:@"GBColorCorrection"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorCorrectionChanged" object:nil]; +} + +- (IBAction)lightTemperatureChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender doubleValue] / 256.0) + forKey:@"GBLightTemperature"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBLightTemperatureChanged" object:nil]; +} + +- (IBAction)interferenceVolumeChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender doubleValue] / 256.0) + forKey:@"GBInterferenceVolume"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBInterferenceVolumeChanged" object:nil]; +} + +- (IBAction)volumeChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender doubleValue] / 256.0) + forKey:@"GBVolume"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBVolumeChanged" object:nil]; +} + +- (IBAction)franeBlendingModeChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender indexOfSelectedItem]) + forKey:@"GBFrameBlendingMode"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBFrameBlendingModeChanged" object:nil]; + +} + +- (void)updatePalettesMenu +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSMenu *menu = _colorPalettePopupButton.menu; + while (menu.itemArray.count != 4) { + [menu removeItemAtIndex:4]; + } + [menu addItem:[NSMenuItem separatorItem]]; + for (NSString *name in [themes.allKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]) { + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:name action:nil keyEquivalent:@""]; + item.tag = -2; + [menu addItem:item]; + } + if (themes) { + [menu addItem:[NSMenuItem separatorItem]]; + } + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:@"Custom…" action:nil keyEquivalent:@""]; + item.tag = -1; + [menu addItem:item]; +} + +- (IBAction)colorPaletteChanged:(id)sender +{ + signed tag = [sender selectedItem].tag; + if (tag == -2) { + [[NSUserDefaults standardUserDefaults] setObject:@(-1) + forKey:@"GBColorPalette"]; + [[NSUserDefaults standardUserDefaults] setObject:[sender selectedItem].title + forKey:@"GBCurrentTheme"]; + + } + else if (tag == -1) { + [[NSUserDefaults standardUserDefaults] setObject:@(-1) + forKey:@"GBColorPalette"]; + [_paletteEditorController awakeFromNib]; + [self beginSheet:_paletteEditor completionHandler:^(NSModalResponse returnCode) { + [self updatePalettesMenu]; + [_colorPalettePopupButton selectItemWithTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"GBCurrentTheme"] ?: @""]; + }]; + } + else { + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedItem].tag) + forKey:@"GBColorPalette"]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorPaletteChanged" object:nil]; +} + +- (IBAction)displayBorderChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedItem].tag) + forKey:@"GBBorderMode"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBBorderModeChanged" object:nil]; +} + +- (IBAction)rumbleModeChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedItem].tag) + forKey:@"GBRumbleMode"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBRumbleModeChanged" object:nil]; +} + +- (IBAction)hotkey1Changed:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:keyEquivalentString([sender selectedItem]) + forKey:@"GBJoypadHotkey1"]; +} + +- (IBAction)hotkey2Changed:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:keyEquivalentString([sender selectedItem]) + forKey:@"GBJoypadHotkey2"]; +} + +- (IBAction)rewindLengthChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) + forKey:@"GBRewindLength"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBRewindLengthChanged" object:nil]; +} + +- (IBAction)rtcModeChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender indexOfSelectedItem]) + forKey:@"GBRTCMode"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBRTCModeChanged" object:nil]; + +} + +- (IBAction)changeAutoUpdates:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBAutoUpdatesEnabled"]; +} + +- (IBAction) configureJoypad:(id)sender +{ + [self.configureJoypadButton setEnabled:false]; + [self.skipButton setEnabled:true]; + joystick_being_configured = nil; + [self advanceConfigurationStateMachine]; +} + +- (IBAction) skipButton:(id)sender +{ + [self advanceConfigurationStateMachine]; +} + +- (void) advanceConfigurationStateMachine +{ + joystick_configuration_state++; + if (joystick_configuration_state == GBUnderclock) { + [self.configureJoypadButton setTitle:@"Press Button for Slo-Mo"]; // Full name is too long :< + } + else if (joystick_configuration_state < GBJoypadButtonCount) { + [self.configureJoypadButton setTitle:[NSString stringWithFormat:@"Press Button for %@", GBButtonNames[joystick_configuration_state]]]; + } + else { + joystick_configuration_state = -1; + [self.configureJoypadButton setEnabled:true]; + [self.skipButton setEnabled:false]; + [self.configureJoypadButton setTitle:@"Configure Joypad"]; + } +} + +- (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)button +{ + /* Debounce */ + if (joypad_wait) return; + joypad_wait = true; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + joypad_wait = false; + }); + + if (!button.isPressed) return; + if (joystick_configuration_state == -1) return; + if (joystick_configuration_state == GBJoypadButtonCount) return; + if (!joystick_being_configured) { + joystick_being_configured = controller.uniqueID; + } + else if (![joystick_being_configured isEqualToString:controller.uniqueID]) { + return; + } + + NSMutableDictionary *instance_mappings = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitInstanceMapping"] mutableCopy]; + + NSMutableDictionary *name_mappings = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitNameMapping"] mutableCopy]; + + + if (!instance_mappings) { + instance_mappings = [[NSMutableDictionary alloc] init]; + } + + if (!name_mappings) { + name_mappings = [[NSMutableDictionary alloc] init]; + } + + NSMutableDictionary *mapping = nil; + if (joystick_configuration_state != 0) { + mapping = [instance_mappings[controller.uniqueID] mutableCopy]; + } + else { + mapping = [[NSMutableDictionary alloc] init]; + } + + + static const unsigned gb_to_joykit[] = { + [GBRight] = JOYButtonUsageDPadRight, + [GBLeft] = JOYButtonUsageDPadLeft, + [GBUp] = JOYButtonUsageDPadUp, + [GBDown] = JOYButtonUsageDPadDown, + [GBA] = JOYButtonUsageA, + [GBB] = JOYButtonUsageB, + [GBSelect] = JOYButtonUsageSelect, + [GBStart] = JOYButtonUsageStart, + [GBTurbo] = JOYButtonUsageL1, + [GBRewind] = JOYButtonUsageL2, + [GBUnderclock] = JOYButtonUsageR1, + [GBHotkey1] = GBJoyKitHotkey1, + [GBHotkey2] = GBJoyKitHotkey2, + }; + + if (joystick_configuration_state == GBUnderclock) { + mapping[@"AnalogUnderclock"] = nil; + double max = 0; + for (JOYAxis *axis in controller.axes) { + if ((axis.value > 0.5 || (axis.equivalentButtonUsage == button.usage)) && axis.value >= max) { + mapping[@"AnalogUnderclock"] = @(axis.uniqueID); + break; + } + } + } + + if (joystick_configuration_state == GBTurbo) { + mapping[@"AnalogTurbo"] = nil; + double max = 0; + for (JOYAxis *axis in controller.axes) { + if ((axis.value > 0.5 || (axis.equivalentButtonUsage == button.usage)) && axis.value >= max) { + max = axis.value; + mapping[@"AnalogTurbo"] = @(axis.uniqueID); + } + } + } + + mapping[n2s(button.uniqueID)] = @(gb_to_joykit[joystick_configuration_state]); + + instance_mappings[controller.uniqueID] = mapping; + name_mappings[controller.deviceName] = mapping; + [[NSUserDefaults standardUserDefaults] setObject:instance_mappings forKey:@"JoyKitInstanceMapping"]; + [[NSUserDefaults standardUserDefaults] setObject:name_mappings forKey:@"JoyKitNameMapping"]; + [self advanceConfigurationStateMachine]; +} + +- (NSButton *)joystickMBC7Checkbox +{ + return _joystickMBC7Checkbox; +} + +- (void)setJoystickMBC7Checkbox:(NSButton *)joystickMBC7Checkbox +{ + _joystickMBC7Checkbox = joystickMBC7Checkbox; + [_joystickMBC7Checkbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7JoystickOverride"]]; +} + +- (NSButton *)mouseMBC7Checkbox +{ + return _mouseMBC7Checkbox; +} + +- (void)setMouseMBC7Checkbox:(NSButton *)mouseMBC7Checkbox +{ + _mouseMBC7Checkbox = mouseMBC7Checkbox; + [_mouseMBC7Checkbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7AllowMouse"]]; +} + +- (NSButton *)analogControlsCheckbox +{ + return _analogControlsCheckbox; +} + +- (void)setAnalogControlsCheckbox:(NSButton *)analogControlsCheckbox +{ + _analogControlsCheckbox = analogControlsCheckbox; + [_analogControlsCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAnalogControls"]]; +} + +- (NSButton *)controllersFocusCheckbox +{ + return _controllersFocusCheckbox; +} + +- (void)setControllersFocusCheckbox:(NSButton *)controllersFocusCheckbox +{ + _controllersFocusCheckbox = controllersFocusCheckbox; + [_controllersFocusCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAllowBackgroundControllers"]]; +} + +- (NSButton *)aspectRatioCheckbox +{ + return _aspectRatioCheckbox; +} + +- (void)setAspectRatioCheckbox:(NSButton *)aspectRatioCheckbox +{ + _aspectRatioCheckbox = aspectRatioCheckbox; + [_aspectRatioCheckbox setState: ![[NSUserDefaults standardUserDefaults] boolForKey:@"GBAspectRatioUnkept"]]; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self updateBootROMFolderButton]; + [[NSDistributedNotificationCenter defaultCenter] addObserver:self.controlsTableView selector:@selector(reloadData) name:(NSString*)kTISNotifySelectedKeyboardInputSourceChanged object:nil]; + [JOYController registerListener:self]; + joystick_configuration_state = -1; +} + +- (void)dealloc +{ + [JOYController unregisterListener:self]; + [[NSDistributedNotificationCenter defaultCenter] removeObserver:self.controlsTableView]; +} + +- (IBAction)selectOtherBootROMFolder:(id)sender +{ + NSOpenPanel *panel = [[NSOpenPanel alloc] init]; + [panel setCanChooseDirectories:true]; + [panel setCanChooseFiles:false]; + [panel setPrompt:@"Select"]; + [panel setDirectoryURL:[[NSUserDefaults standardUserDefaults] URLForKey:@"GBBootROMsFolder"]]; + [panel beginSheetModalForWindow:self completionHandler:^(NSModalResponse result) { + if (result == NSModalResponseOK) { + NSURL *url = [[panel URLs] firstObject]; + [[NSUserDefaults standardUserDefaults] setURL:url forKey:@"GBBootROMsFolder"]; + } + [self updateBootROMFolderButton]; + }]; + +} + +- (void) updateBootROMFolderButton +{ + NSURL *url = [[NSUserDefaults standardUserDefaults] URLForKey:@"GBBootROMsFolder"]; + BOOL is_dir = false; + [[NSFileManager defaultManager] fileExistsAtPath:[url path] isDirectory:&is_dir]; + if (!is_dir) url = nil; + + if (url) { + [self.bootROMsFolderItem setTitle:[url lastPathComponent]]; + NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:[url path]]; + [icon setSize:NSMakeSize(16, 16)]; + [self.bootROMsFolderItem setHidden:false]; + [self.bootROMsFolderItem setImage:icon]; + [self.bootROMsButton selectItemAtIndex:1]; + } + else { + [self.bootROMsFolderItem setHidden:true]; + [self.bootROMsButton selectItemAtIndex:0]; + } +} + +- (IBAction)useBuiltinBootROMs:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setURL:nil forKey:@"GBBootROMsFolder"]; + [self updateBootROMFolderButton]; +} + +- (void)setDmgPopupButton:(NSPopUpButton *)dmgPopupButton +{ + _dmgPopupButton = dmgPopupButton; + [_dmgPopupButton selectItemWithTag:[[NSUserDefaults standardUserDefaults] integerForKey:@"GBDMGModel"]]; +} + +- (NSPopUpButton *)dmgPopupButton +{ + return _dmgPopupButton; +} + +- (void)setSgbPopupButton:(NSPopUpButton *)sgbPopupButton +{ + _sgbPopupButton = sgbPopupButton; + [_sgbPopupButton selectItemWithTag:[[NSUserDefaults standardUserDefaults] integerForKey:@"GBSGBModel"]]; +} + +- (NSPopUpButton *)sgbPopupButton +{ + return _sgbPopupButton; +} + +- (void)setCgbPopupButton:(NSPopUpButton *)cgbPopupButton +{ + _cgbPopupButton = cgbPopupButton; + [_cgbPopupButton selectItemWithTag:[[NSUserDefaults standardUserDefaults] integerForKey:@"GBCGBModel"]]; +} + +- (NSPopUpButton *)cgbPopupButton +{ + return _cgbPopupButton; +} + +- (void)setAgbPopupButton:(NSPopUpButton *)agbPopupButton +{ + _agbPopupButton = agbPopupButton; + [_agbPopupButton selectItemWithTag:[[NSUserDefaults standardUserDefaults] integerForKey:@"GBAGBModel"]]; +} + +- (NSPopUpButton *)agbPopupButton +{ + return _agbPopupButton; +} + +- (IBAction)dmgModelChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) + forKey:@"GBDMGModel"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBDMGModelChanged" object:nil]; + +} + +- (IBAction)sgbModelChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) + forKey:@"GBSGBModel"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBSGBModelChanged" object:nil]; +} + +- (IBAction)cgbModelChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) + forKey:@"GBCGBModel"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBCGBModelChanged" object:nil]; +} + +- (IBAction)agbModelChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) + forKey:@"GBAGBModel"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBAGBModelChanged" object:nil]; +} + +- (IBAction)reloadButtonsData:(id)sender +{ + [self.controlsTableView reloadData]; +} + +- (void)setPreferredJoypadButton:(NSPopUpButton *)preferredJoypadButton +{ + _preferredJoypadButton = preferredJoypadButton; + [self refreshJoypadMenu:nil]; +} + +- (NSPopUpButton *)preferredJoypadButton +{ + return _preferredJoypadButton; +} + +- (void)controllerConnected:(JOYController *)controller +{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self refreshJoypadMenu:nil]; + }); +} + +- (void)controllerDisconnected:(JOYController *)controller +{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self refreshJoypadMenu:nil]; + }); +} + +- (IBAction)refreshJoypadMenu:(id)sender +{ + bool preferred_is_connected = false; + NSString *player_string = n2s(self.playerListButton.selectedTag); + NSString *selected_controller = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitDefaultControllers"][player_string]; + + [self.preferredJoypadButton removeAllItems]; + [self.preferredJoypadButton addItemWithTitle:@"None"]; + for (JOYController *controller in [JOYController allControllers]) { + [self.preferredJoypadButton addItemWithTitle:[NSString stringWithFormat:@"%@ (%@)", controller.deviceName, controller.uniqueID]]; + + self.preferredJoypadButton.lastItem.identifier = controller.uniqueID; + + if ([controller.uniqueID isEqualToString:selected_controller]) { + preferred_is_connected = true; + [self.preferredJoypadButton selectItem:self.preferredJoypadButton.lastItem]; + } + } + + if (!preferred_is_connected && selected_controller) { + [self.preferredJoypadButton addItemWithTitle:[NSString stringWithFormat:@"Unavailable Controller (%@)", selected_controller]]; + self.preferredJoypadButton.lastItem.identifier = selected_controller; + [self.preferredJoypadButton selectItem:self.preferredJoypadButton.lastItem]; + } + + + if (!selected_controller) { + [self.preferredJoypadButton selectItemWithTitle:@"None"]; + } + [self.controlsTableView reloadData]; +} + +- (IBAction)changeDefaultJoypad:(id)sender +{ + NSMutableDictionary *default_joypads = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitDefaultControllers"] mutableCopy]; + if (!default_joypads) { + default_joypads = [[NSMutableDictionary alloc] init]; + } + + NSString *player_string = n2s(self.playerListButton.selectedTag); + if ([[sender titleOfSelectedItem] isEqualToString:@"None"]) { + [default_joypads removeObjectForKey:player_string]; + } + else { + default_joypads[player_string] = [[sender selectedItem] identifier]; + } + [[NSUserDefaults standardUserDefaults] setObject:default_joypads forKey:@"JoyKitDefaultControllers"]; +} + +- (NSButton *)autoUpdatesCheckbox +{ + return _autoUpdatesCheckbox; +} + +- (void)setAutoUpdatesCheckbox:(NSButton *)autoUpdatesCheckbox +{ + _autoUpdatesCheckbox = autoUpdatesCheckbox; + [_autoUpdatesCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAutoUpdatesEnabled"]]; +} + +- (NSButton *)OSDCheckbox +{ + return _OSDCheckbox; +} + +- (void)setOSDCheckbox:(NSButton *)OSDCheckbox +{ + _OSDCheckbox = OSDCheckbox; + [_OSDCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBOSDEnabled"]]; +} + +- (IBAction)changeOSDEnabled:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool:[(NSButton *)sender state] == NSOnState + forKey:@"GBOSDEnabled"]; + +} + +- (IBAction)changeFilterScreenshots:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool:[(NSButton *)sender state] == NSOnState + forKey:@"GBFilterScreenshots"]; +} + +- (NSButton *)screenshotFilterCheckbox +{ + return _screenshotFilterCheckbox; +} + +- (void)setScreenshotFilterCheckbox:(NSButton *)screenshotFilterCheckbox +{ + _screenshotFilterCheckbox = screenshotFilterCheckbox; + if (![GBViewMetal isSupported]) { + [_screenshotFilterCheckbox setEnabled:false]; + } + else { + [_screenshotFilterCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBFilterScreenshots"]]; + } +} + +- (IBAction)displayColorCorrectionHelp:(id)sender +{ + [GBWarningPopover popoverWithContents: + (NSString * const[]){ + [GB_COLOR_CORRECTION_DISABLED] = @"Colors are directly interpreted as sRGB, resulting in unbalanced colors and inaccurate hues.", + [GB_COLOR_CORRECTION_CORRECT_CURVES] = @"Colors have their brightness corrected, but hues remain unbalanced.", + [GB_COLOR_CORRECTION_MODERN_BALANCED] = @"Emulates a modern display. Blue contrast is moderately enhanced at the cost of slight hue inaccuracy.", + [GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST] = @"Like Modern – Balanced, but further boosts the contrast of greens and magentas that is lacking on the original hardware.", + [GB_COLOR_CORRECTION_REDUCE_CONTRAST] = @"Slightly reduce the contrast to better represent the tint and contrast of the original display.", + [GB_COLOR_CORRECTION_LOW_CONTRAST] = @"Harshly reduce the contrast to accurately represent the tint low constrast of the original display.", + [GB_COLOR_CORRECTION_MODERN_ACCURATE] = @"Emulates a modern display. Colors have their hues and brightness corrected.", + } [self.colorCorrectionPopupButton.selectedItem.tag] + title:self.colorCorrectionPopupButton.selectedItem.title + onView:sender + timeout:6 + preferredEdge:NSRectEdgeMaxX]; +} + +- (IBAction)displayHighPassHelp:(id)sender +{ + [GBWarningPopover popoverWithContents: + (NSString * const[]){ + [GB_HIGHPASS_OFF] = @"No high-pass filter will be applied. DC offset will be kept, pausing and resuming will trigger audio pops.", + [GB_HIGHPASS_ACCURATE] = @"An accurate high-pass filter will be applied, removing the DC offset while somewhat attenuating the bass.", + [GB_HIGHPASS_REMOVE_DC_OFFSET] = @"A high-pass filter will be applied to the DC offset itself, removing the DC offset while preserving the waveform.", + } [self.highpassFilterPopupButton.indexOfSelectedItem] + title:self.highpassFilterPopupButton.selectedItem.title + onView:sender + timeout:6 + preferredEdge:NSRectEdgeMaxX]; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBS.xib b/thirdparty/SameBoy-old/Cocoa/GBS.xib new file mode 100644 index 000000000..65bd44f82 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBS.xib @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/GBS11.xib b/thirdparty/SameBoy-old/Cocoa/GBS11.xib new file mode 100644 index 000000000..b7a69fd56 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBS11.xib @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/GBSplitView.h b/thirdparty/SameBoy-old/Cocoa/GBSplitView.h new file mode 100644 index 000000000..6ab97cf02 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBSplitView.h @@ -0,0 +1,7 @@ +#import + +@interface GBSplitView : NSSplitView + +-(void) setDividerColor:(NSColor *)color; +- (NSArray *)arrangedSubviews; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBSplitView.m b/thirdparty/SameBoy-old/Cocoa/GBSplitView.m new file mode 100644 index 000000000..d24d58065 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBSplitView.m @@ -0,0 +1,33 @@ +#import "GBSplitView.h" + +@implementation GBSplitView +{ + NSColor *_dividerColor; +} + +- (void)setDividerColor:(NSColor *)color +{ + _dividerColor = color; + [self setNeedsDisplay:true]; +} + +- (NSColor *)dividerColor +{ + if (_dividerColor) { + return _dividerColor; + } + return [super dividerColor]; +} + +/* Mavericks comaptibility */ +- (NSArray *)arrangedSubviews +{ + if (@available(macOS 10.11, *)) { + return [super arrangedSubviews]; + } + else { + return [self subviews]; + } +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.h b/thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.h new file mode 100644 index 000000000..b76033605 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.h @@ -0,0 +1,6 @@ +#import +#include + +@interface GBTerminalTextFieldCell : NSTextFieldCell +@property (nonatomic) GB_gameboy_t *gb; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.m b/thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.m new file mode 100644 index 000000000..e1ba95779 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBTerminalTextFieldCell.m @@ -0,0 +1,231 @@ +#import +#import "GBTerminalTextFieldCell.h" + +@interface GBTerminalTextView : NSTextView +@property GB_gameboy_t *gb; +@end + +@implementation GBTerminalTextFieldCell +{ + GBTerminalTextView *field_editor; +} + +- (NSTextView *)fieldEditorForView:(NSView *)controlView +{ + if (field_editor) { + field_editor.gb = self.gb; + return field_editor; + } + field_editor = [[GBTerminalTextView alloc] init]; + [field_editor setFieldEditor:true]; + field_editor.gb = self.gb; + return field_editor; +} + +@end + +@implementation GBTerminalTextView +{ + NSMutableOrderedSet *lines; + NSUInteger current_line; + bool reverse_search_mode; + NSRange auto_complete_range; + uintptr_t auto_complete_context; +} + +- (instancetype)init +{ + self = [super init]; + if (!self) { + return NULL; + } + lines = [[NSMutableOrderedSet alloc] init]; + return self; +} + +- (void)moveUp:(id)sender +{ + reverse_search_mode = false; + if (current_line != 0) { + current_line--; + [self setString:[lines objectAtIndex:current_line]]; + } + else { + [self setSelectedRange:NSMakeRange(0, 0)]; + NSBeep(); + } +} + +- (void)moveDown:(id)sender +{ + reverse_search_mode = false; + if (current_line == [lines count]) { + [self setString:@""]; + NSBeep(); + return; + } + current_line++; + if (current_line == [lines count]) { + [self setString:@""]; + } + else { + [self setString:[lines objectAtIndex:current_line]]; + } +} + +-(void)insertNewline:(id)sender +{ + if ([self.string length]) { + NSString *string = [self.string copy]; + [lines removeObject:string]; + [lines addObject:string]; + } + [super insertNewline:sender]; + current_line = [lines count]; + reverse_search_mode = false; +} + +- (void)keyDown:(NSEvent *)event +{ + if (event.keyCode == kVK_ANSI_R && (event.modifierFlags & NSEventModifierFlagDeviceIndependentFlagsMask) == NSEventModifierFlagControl) { + if ([lines count] == 0) { + NSBeep(); + return; + } + if (!reverse_search_mode) { + [self selectAll:self]; + current_line = [lines count] - 1; + } + else { + if (current_line != 0) { + current_line--; + } + else { + NSBeep(); + } + } + + if (self.string.length) { + [self updateReverseSearch]; + } + else { + [self setNeedsDisplay:true]; + reverse_search_mode = true; + } + + } + else { + [super keyDown:event]; + } +} + +- (void) updateReverseSearch +{ + NSUInteger old_line = current_line; + reverse_search_mode = false; + NSString *substring = [self.string substringWithRange:self.selectedRange]; + do { + NSString *line = [lines objectAtIndex:current_line]; + NSRange range = [line rangeOfString:substring]; + if (range.location != NSNotFound) { + self.string = line; + [self setSelectedRange:range]; + reverse_search_mode = true; + return; + } + } while (current_line--); + current_line = old_line; + reverse_search_mode = true; + NSBeep(); +} + +- (void) insertText:(NSString *)string replacementRange:(NSRange)range +{ + if (reverse_search_mode) { + range = self.selectedRange; + self.string = [[self.string substringWithRange:range] stringByAppendingString:string]; + [self selectAll:nil]; + [self updateReverseSearch]; + } + else { + [super insertText:string replacementRange:range]; + } +} + +-(void)deleteBackward:(id)sender +{ + if (reverse_search_mode && self.string.length) { + NSRange range = self.selectedRange; + range.length--; + self.string = [self.string substringWithRange:range]; + if (range.length) { + [self selectAll:nil]; + [self updateReverseSearch]; + } + else { + reverse_search_mode = true; + current_line = [lines count] - 1; + } + } + else { + [super deleteBackward:sender]; + } +} + +-(void)setSelectedRanges:(NSArray *)ranges affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag +{ + reverse_search_mode = false; + auto_complete_context = 0; + [super setSelectedRanges:ranges affinity:affinity stillSelecting:stillSelectingFlag]; +} + +- (BOOL)resignFirstResponder +{ + reverse_search_mode = false; + return [super resignFirstResponder]; +} + +-(void)drawRect:(NSRect)dirtyRect +{ + [super drawRect:dirtyRect]; + if (reverse_search_mode && [super string].length == 0) { + NSMutableDictionary *attributes = [self.typingAttributes mutableCopy]; + NSColor *color = [attributes[NSForegroundColorAttributeName] colorWithAlphaComponent:0.5]; + [attributes setObject:color forKey:NSForegroundColorAttributeName]; + [[[NSAttributedString alloc] initWithString:@"Reverse search..." attributes:attributes] drawAtPoint:NSMakePoint(2, 0)]; + } +} + +/* Todo: lazy design, make it use a delegate instead of having a gb reference*/ + +- (void)insertTab:(id)sender +{ + if (auto_complete_context == 0) { + NSRange selection = self.selectedRange; + if (selection.length) { + [self delete:nil]; + } + auto_complete_range = NSMakeRange(selection.location, 0); + } + char *substring = strdup([self.string substringToIndex:auto_complete_range.location].UTF8String); + uintptr_t context = auto_complete_context; + char *completion = GB_debugger_complete_substring(self.gb, substring, &context); + free(substring); + if (completion) { + NSString *ns_completion = @(completion); + free(completion); + if (!ns_completion) { + goto error; + } + self.selectedRange = auto_complete_range; + auto_complete_range.length = ns_completion.length; + [self replaceCharactersInRange:self.selectedRange withString:ns_completion]; + auto_complete_context = context; + return; + } +error: + auto_complete_context = context; + NSBeep(); +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBView.h b/thirdparty/SameBoy-old/Cocoa/GBView.h new file mode 100644 index 000000000..a264d29a4 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBView.h @@ -0,0 +1,32 @@ +#import +#include +#import +#import "GBOSDView.h" + +@class Document; + +typedef enum { + GB_FRAME_BLENDING_MODE_DISABLED, + GB_FRAME_BLENDING_MODE_SIMPLE, + GB_FRAME_BLENDING_MODE_ACCURATE, + GB_FRAME_BLENDING_MODE_ACCURATE_EVEN = GB_FRAME_BLENDING_MODE_ACCURATE, + GB_FRAME_BLENDING_MODE_ACCURATE_ODD, +} GB_frame_blending_mode_t; + +@interface GBView : NSView +- (void) flip; +- (uint32_t *) pixels; +@property (nonatomic, weak) IBOutlet Document *document; +@property (nonatomic) GB_gameboy_t *gb; +@property (nonatomic) GB_frame_blending_mode_t frameBlendingMode; +@property (nonatomic, getter=isMouseHidingEnabled) bool mouseHidingEnabled; +@property (nonatomic) bool isRewinding; +@property (nonatomic, strong) NSView *internalView; +@property (weak) GBOSDView *osdView; +- (void) createInternalView; +- (uint32_t *)currentBuffer; +- (uint32_t *)previousBuffer; +- (void)screenSizeChanged; +- (void)setRumble: (double)amp; +- (NSImage *)renderToImage; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBView.m b/thirdparty/SameBoy-old/Cocoa/GBView.m new file mode 100644 index 000000000..cf591e052 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBView.m @@ -0,0 +1,795 @@ +#import +#import +#import "GBView.h" +#import "GBViewGL.h" +#import "GBViewMetal.h" +#import "GBButtons.h" +#import "NSString+StringForKey.h" +#import "Document.h" + +#define JOYSTICK_HIGH 0x4000 +#define JOYSTICK_LOW 0x3800 + +static const uint8_t workboy_ascii_to_key[] = { + ['0'] = GB_WORKBOY_0, + ['`'] = GB_WORKBOY_UMLAUT, + ['1'] = GB_WORKBOY_1, + ['2'] = GB_WORKBOY_2, + ['3'] = GB_WORKBOY_3, + ['4'] = GB_WORKBOY_4, + ['5'] = GB_WORKBOY_5, + ['6'] = GB_WORKBOY_6, + ['7'] = GB_WORKBOY_7, + ['8'] = GB_WORKBOY_8, + ['9'] = GB_WORKBOY_9, + + ['\r'] = GB_WORKBOY_ENTER, + [3] = GB_WORKBOY_ENTER, + + ['!'] = GB_WORKBOY_EXCLAMATION_MARK, + ['$'] = GB_WORKBOY_DOLLAR, + ['#'] = GB_WORKBOY_HASH, + ['~'] = GB_WORKBOY_TILDE, + ['*'] = GB_WORKBOY_ASTERISK, + ['+'] = GB_WORKBOY_PLUS, + ['-'] = GB_WORKBOY_MINUS, + ['('] = GB_WORKBOY_LEFT_PARENTHESIS, + [')'] = GB_WORKBOY_RIGHT_PARENTHESIS, + [';'] = GB_WORKBOY_SEMICOLON, + [':'] = GB_WORKBOY_COLON, + ['%'] = GB_WORKBOY_PERCENT, + ['='] = GB_WORKBOY_EQUAL, + [','] = GB_WORKBOY_COMMA, + ['<'] = GB_WORKBOY_LT, + ['.'] = GB_WORKBOY_DOT, + ['>'] = GB_WORKBOY_GT, + ['/'] = GB_WORKBOY_SLASH, + ['?'] = GB_WORKBOY_QUESTION_MARK, + [' '] = GB_WORKBOY_SPACE, + ['\''] = GB_WORKBOY_QUOTE, + ['@'] = GB_WORKBOY_AT, + + ['q'] = GB_WORKBOY_Q, + ['w'] = GB_WORKBOY_W, + ['e'] = GB_WORKBOY_E, + ['r'] = GB_WORKBOY_R, + ['t'] = GB_WORKBOY_T, + ['y'] = GB_WORKBOY_Y, + ['u'] = GB_WORKBOY_U, + ['i'] = GB_WORKBOY_I, + ['o'] = GB_WORKBOY_O, + ['p'] = GB_WORKBOY_P, + ['a'] = GB_WORKBOY_A, + ['s'] = GB_WORKBOY_S, + ['d'] = GB_WORKBOY_D, + ['f'] = GB_WORKBOY_F, + ['g'] = GB_WORKBOY_G, + ['h'] = GB_WORKBOY_H, + ['j'] = GB_WORKBOY_J, + ['k'] = GB_WORKBOY_K, + ['l'] = GB_WORKBOY_L, + ['z'] = GB_WORKBOY_Z, + ['x'] = GB_WORKBOY_X, + ['c'] = GB_WORKBOY_C, + ['v'] = GB_WORKBOY_V, + ['b'] = GB_WORKBOY_B, + ['n'] = GB_WORKBOY_N, + ['m'] = GB_WORKBOY_M, +}; + +static const uint8_t workboy_vk_to_key[] = { + [kVK_F1] = GB_WORKBOY_CLOCK, + [kVK_F2] = GB_WORKBOY_TEMPERATURE, + [kVK_F3] = GB_WORKBOY_MONEY, + [kVK_F4] = GB_WORKBOY_CALCULATOR, + [kVK_F5] = GB_WORKBOY_DATE, + [kVK_F6] = GB_WORKBOY_CONVERSION, + [kVK_F7] = GB_WORKBOY_RECORD, + [kVK_F8] = GB_WORKBOY_WORLD, + [kVK_F9] = GB_WORKBOY_PHONE, + [kVK_F10] = GB_WORKBOY_UNKNOWN, + [kVK_Delete] = GB_WORKBOY_BACKSPACE, + [kVK_Shift] = GB_WORKBOY_SHIFT_DOWN, + [kVK_RightShift] = GB_WORKBOY_SHIFT_DOWN, + [kVK_UpArrow] = GB_WORKBOY_UP, + [kVK_DownArrow] = GB_WORKBOY_DOWN, + [kVK_LeftArrow] = GB_WORKBOY_LEFT, + [kVK_RightArrow] = GB_WORKBOY_RIGHT, + [kVK_Escape] = GB_WORKBOY_ESCAPE, + [kVK_ANSI_KeypadDecimal] = GB_WORKBOY_DECIMAL_POINT, + [kVK_ANSI_KeypadClear] = GB_WORKBOY_M, + [kVK_ANSI_KeypadMultiply] = GB_WORKBOY_H, + [kVK_ANSI_KeypadDivide] = GB_WORKBOY_J, +}; + +@implementation GBView +{ + uint32_t *image_buffers[3]; + unsigned char current_buffer; + bool mouse_hidden; + NSTrackingArea *tracking_area; + bool _mouseHidingEnabled; + bool axisActive[2]; + bool underclockKeyDown; + double clockMultiplier; + double analogClockMultiplier; + bool analogClockMultiplierValid; + NSEventModifierFlags previousModifiers; + JOYController *lastController; + GB_frame_blending_mode_t _frameBlendingMode; + bool _turbo; + bool _mouseControlEnabled; +} + ++ (instancetype)alloc +{ + return [self allocWithZone:NULL]; +} + ++ (instancetype)allocWithZone:(struct _NSZone *)zone +{ + if (self == [GBView class]) { + if ([GBViewMetal isSupported]) { + return [GBViewMetal allocWithZone: zone]; + } + return [GBViewGL allocWithZone: zone]; + } + return [super allocWithZone:zone]; +} + +- (void) createInternalView +{ + assert(false && "createInternalView must not be inherited"); +} + +- (void) _init +{ + [self registerForDraggedTypes:[NSArray arrayWithObjects: NSFilenamesPboardType, nil]]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ratioKeepingChanged) name:@"GBAspectChanged" object:nil]; + tracking_area = [ [NSTrackingArea alloc] initWithRect:(NSRect){} + options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingInVisibleRect | NSTrackingMouseMoved + owner:self + userInfo:nil]; + [self addTrackingArea:tracking_area]; + clockMultiplier = 1.0; + [self createInternalView]; + [self addSubview:self.internalView]; + self.internalView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [JOYController registerListener:self]; + _mouseControlEnabled = true; +} + +- (void)screenSizeChanged +{ + if (image_buffers[0]) free(image_buffers[0]); + if (image_buffers[1]) free(image_buffers[1]); + if (image_buffers[2]) free(image_buffers[2]); + + size_t buffer_size = sizeof(image_buffers[0][0]) * GB_get_screen_width(_gb) * GB_get_screen_height(_gb); + + image_buffers[0] = calloc(1, buffer_size); + image_buffers[1] = calloc(1, buffer_size); + image_buffers[2] = calloc(1, buffer_size); + + dispatch_async(dispatch_get_main_queue(), ^{ + [self setFrame:self.superview.frame]; + }); +} + +- (void) ratioKeepingChanged +{ + [self setFrame:self.superview.frame]; +} + +- (void) setFrameBlendingMode:(GB_frame_blending_mode_t)frameBlendingMode +{ + _frameBlendingMode = frameBlendingMode; + [self setNeedsDisplay:true]; +} + + +- (GB_frame_blending_mode_t)frameBlendingMode +{ + if (_frameBlendingMode == GB_FRAME_BLENDING_MODE_ACCURATE) { + if (!_gb || GB_is_sgb(_gb)) { + return GB_FRAME_BLENDING_MODE_SIMPLE; + } + return GB_is_odd_frame(_gb)? GB_FRAME_BLENDING_MODE_ACCURATE_ODD : GB_FRAME_BLENDING_MODE_ACCURATE_EVEN; + } + return _frameBlendingMode; +} +- (unsigned char) numberOfBuffers +{ + return _frameBlendingMode? 3 : 2; +} + +- (void)dealloc +{ + free(image_buffers[0]); + free(image_buffers[1]); + free(image_buffers[2]); + if (mouse_hidden) { + mouse_hidden = false; + [NSCursor unhide]; + } + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [self setRumble:0]; + [JOYController unregisterListener:self]; +} +- (instancetype)initWithCoder:(NSCoder *)coder +{ + if (!(self = [super initWithCoder:coder])) { + return self; + } + [self _init]; + return self; +} + +- (instancetype)initWithFrame:(NSRect)frameRect +{ + if (!(self = [super initWithFrame:frameRect])) { + return self; + } + [self _init]; + return self; +} + +- (void)setFrame:(NSRect)frame +{ + frame = self.superview.frame; + if (_gb && ![[NSUserDefaults standardUserDefaults] boolForKey:@"GBAspectRatioUnkept"]) { + double ratio = frame.size.width / frame.size.height; + double width = GB_get_screen_width(_gb); + double height = GB_get_screen_height(_gb); + if (ratio >= width / height) { + double new_width = round(frame.size.height / height * width); + frame.origin.x = floor((frame.size.width - new_width) / 2); + frame.size.width = new_width; + frame.origin.y = 0; + } + else { + double new_height = round(frame.size.width / width * height); + frame.origin.y = floor((frame.size.height - new_height) / 2); + frame.size.height = new_height; + frame.origin.x = 0; + } + } + + [super setFrame:frame]; +} + +- (void) flip +{ + if (analogClockMultiplierValid && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAnalogControls"]) { + clockMultiplier = 1.0; + GB_set_clock_multiplier(_gb, analogClockMultiplier); + if (self.document.partner) { + GB_set_clock_multiplier(self.document.partner.gb, analogClockMultiplier); + } + if (analogClockMultiplier == 1.0) { + analogClockMultiplierValid = false; + } + if (analogClockMultiplier < 2.0 && analogClockMultiplier > 1.0) { + GB_set_turbo_mode(_gb, false, false); + if (self.document.partner) { + GB_set_turbo_mode(self.document.partner.gb, false, false); + } + } + } + else { + if (underclockKeyDown && clockMultiplier > 0.5) { + clockMultiplier -= 1.0/16; + GB_set_clock_multiplier(_gb, clockMultiplier); + if (self.document.partner) { + GB_set_clock_multiplier(self.document.partner.gb, clockMultiplier); + } + } + if (!underclockKeyDown && clockMultiplier < 1.0) { + clockMultiplier += 1.0/16; + GB_set_clock_multiplier(_gb, clockMultiplier); + if (self.document.partner) { + GB_set_clock_multiplier(self.document.partner.gb, clockMultiplier); + } + } + } + if ((!analogClockMultiplierValid && clockMultiplier > 1) || + _turbo || (analogClockMultiplierValid && analogClockMultiplier > 1)) { + [self.osdView displayText:@"Fast forwarding..."]; + } + else if ((!analogClockMultiplierValid && clockMultiplier < 1) || + (analogClockMultiplierValid && analogClockMultiplier < 1)) { + [self.osdView displayText:@"Slow motion..."]; + } + current_buffer = (current_buffer + 1) % self.numberOfBuffers; +} + +- (uint32_t *) pixels +{ + return image_buffers[(current_buffer + 1) % self.numberOfBuffers]; +} + +-(void)keyDown:(NSEvent *)theEvent +{ + if ([theEvent type] != NSEventTypeFlagsChanged && theEvent.isARepeat) return; + unsigned short keyCode = theEvent.keyCode; + if (GB_workboy_is_enabled(_gb)) { + if (theEvent.keyCode < sizeof(workboy_vk_to_key) && workboy_vk_to_key[theEvent.keyCode]) { + GB_workboy_set_key(_gb, workboy_vk_to_key[theEvent.keyCode]); + return; + } + unichar c = [theEvent type] != NSEventTypeFlagsChanged? [theEvent.charactersIgnoringModifiers.lowercaseString characterAtIndex:0] : 0; + if (c < sizeof(workboy_ascii_to_key) && workboy_ascii_to_key[c]) { + GB_workboy_set_key(_gb, workboy_ascii_to_key[c]); + return; + } + } + + bool handled = false; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + unsigned player_count = GB_get_player_count(_gb); + if (self.document.partner) { + player_count = 2; + } + for (unsigned player = 0; player < player_count; player++) { + for (GBButton button = 0; button < GBButtonCount; button++) { + NSNumber *key = [defaults valueForKey:button_to_preference_name(button, player)]; + if (!key) continue; + + if (key.unsignedShortValue == keyCode) { + handled = true; + switch (button) { + case GBTurbo: + if (self.document.isSlave) { + GB_set_turbo_mode(self.document.partner.gb, true, false); + } + else { + GB_set_turbo_mode(_gb, true, self.isRewinding); + } + _turbo = true; + analogClockMultiplierValid = false; + break; + + case GBRewind: + if (!self.document.partner) { + self.isRewinding = true; + GB_set_turbo_mode(_gb, false, false); + _turbo = false; + } + break; + + case GBUnderclock: + underclockKeyDown = true; + analogClockMultiplierValid = false; + break; + + default: + if (self.document.partner) { + if (player == 0) { + GB_set_key_state_for_player(_gb, (GB_key_t)button, 0, true); + } + else { + GB_set_key_state_for_player(self.document.partner.gb, (GB_key_t)button, 0, true); + } + } + else { + GB_set_key_state_for_player(_gb, (GB_key_t)button, player, true); + } + break; + } + } + } + } + + if (!handled && [theEvent type] != NSEventTypeFlagsChanged) { + [super keyDown:theEvent]; + } +} + +-(void)keyUp:(NSEvent *)theEvent +{ + unsigned short keyCode = theEvent.keyCode; + if (GB_workboy_is_enabled(_gb)) { + if (keyCode == kVK_Shift || keyCode == kVK_RightShift) { + GB_workboy_set_key(_gb, GB_WORKBOY_SHIFT_UP); + } + else { + GB_workboy_set_key(_gb, GB_WORKBOY_NONE); + } + + } + bool handled = false; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + unsigned player_count = GB_get_player_count(_gb); + if (self.document.partner) { + player_count = 2; + } + for (unsigned player = 0; player < player_count; player++) { + for (GBButton button = 0; button < GBButtonCount; button++) { + NSNumber *key = [defaults valueForKey:button_to_preference_name(button, player)]; + if (!key) continue; + + if (key.unsignedShortValue == keyCode) { + handled = true; + switch (button) { + case GBTurbo: + if (self.document.isSlave) { + GB_set_turbo_mode(self.document.partner.gb, false, false); + } + else { + GB_set_turbo_mode(_gb, false, false); + } + _turbo = false; + analogClockMultiplierValid = false; + break; + + case GBRewind: + self.isRewinding = false; + break; + + case GBUnderclock: + underclockKeyDown = false; + analogClockMultiplierValid = false; + break; + + default: + if (self.document.partner) { + if (player == 0) { + GB_set_key_state_for_player(_gb, (GB_key_t)button, 0, false); + } + else { + GB_set_key_state_for_player(self.document.partner.gb, (GB_key_t)button, 0, false); + } + } + else { + GB_set_key_state_for_player(_gb, (GB_key_t)button, player, false); + } + break; + } + } + } + } + if (!handled && [theEvent type] != NSEventTypeFlagsChanged) { + [super keyUp:theEvent]; + } +} + +- (void)setRumble:(double)amp +{ + [lastController setRumbleAmplitude:amp]; +} + +- (bool)shouldControllerUseJoystickForMotion:(JOYController *)controller +{ + if (!_gb) return false; + if (!GB_has_accelerometer(_gb)) return false; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7JoystickOverride"]) return true; + for (JOYAxes3D *axes in controller.axes3D) { + if (axes.usage == JOYAxes3DUsageOrientation || axes.usage == JOYAxes3DUsageAcceleration) { + return false; + } + } + return true; +} + +- (bool)allowController +{ + if ([self.window isMainWindow]) return true; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBAllowBackgroundControllers"]) { + if ([(Document *)[NSApplication sharedApplication].orderedDocuments.firstObject mainWindow] == self.window) { + return true; + } + } + return false; +} + +- (void)controller:(JOYController *)controller movedAxis:(JOYAxis *)axis +{ + if (!_gb) return; + if (![self allowController]) return; + + NSDictionary *mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitInstanceMapping"][controller.uniqueID]; + if (!mapping) { + mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitNameMapping"][controller.deviceName]; + } + + if ((axis.usage == JOYAxisUsageR1 && !mapping) || + axis.uniqueID == [mapping[@"AnalogUnderclock"] unsignedLongValue]){ + analogClockMultiplier = MIN(MAX(1 - axis.value + 0.05, 1.0 / 3), 1.0); + analogClockMultiplierValid = true; + } + + else if ((axis.usage == JOYAxisUsageL1 && !mapping) || + axis.uniqueID == [mapping[@"AnalogTurbo"] unsignedLongValue]){ + analogClockMultiplier = MIN(MAX(axis.value * 3 + 0.95, 1.0), 3.0); + analogClockMultiplierValid = true; + } +} + +- (void)controller:(JOYController *)controller movedAxes2D:(JOYAxes2D *)axes +{ + if (!_gb) return; + if ([self shouldControllerUseJoystickForMotion:controller]) { + if (!self.mouseControlsActive) { + GB_set_accelerometer_values(_gb, -axes.value.x, -axes.value.y); + } + } +} + +- (void)controller:(JOYController *)controller movedAxes3D:(JOYAxes3D *)axes +{ + if (!_gb) return; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7JoystickOverride"]) return; + if (self.mouseControlsActive) return; + + if (axes.usage == JOYAxes3DUsageOrientation) { + for (JOYAxes3D *axes in controller.axes3D) { + // Only use orientation if there's no acceleration axes + if (axes.usage == JOYAxes3DUsageAcceleration) { + return; + } + } + JOYPoint3D point = axes.normalizedValue; + GB_set_accelerometer_values(_gb, point.x, point.z); + } + else if (axes.usage == JOYAxes3DUsageAcceleration) { + JOYPoint3D point = axes.gUnitsValue; + GB_set_accelerometer_values(_gb, point.x, point.z); + } +} + +- (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)button +{ + if (!_gb) return; + if (![self allowController]) return; + _mouseControlEnabled = false; + if (button.type == JOYButtonTypeAxes2DEmulated && [self shouldControllerUseJoystickForMotion:controller]) return; + + unsigned player_count = GB_get_player_count(_gb); + if (self.document.partner) { + player_count = 2; + } + + IOPMAssertionID assertionID; + IOPMAssertionDeclareUserActivity(CFSTR(""), kIOPMUserActiveLocal, &assertionID); + + for (unsigned player = 0; player < player_count; player++) { + NSString *preferred_joypad = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitDefaultControllers"] + objectForKey:n2s(player)]; + if (player_count != 1 && // Single player, accpet inputs from all joypads + !(player == 0 && !preferred_joypad) && // Multiplayer, but player 1 has no joypad configured, so it takes inputs from all joypads + ![preferred_joypad isEqualToString:controller.uniqueID]) { + continue; + } + dispatch_async(dispatch_get_main_queue(), ^{ + [controller setPlayerLEDs:[controller LEDMaskForPlayer:player]]; + }); + NSDictionary *mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitInstanceMapping"][controller.uniqueID]; + if (!mapping) { + mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitNameMapping"][controller.deviceName]; + } + + JOYButtonUsage usage = ((JOYButtonUsage)[mapping[n2s(button.uniqueID)] unsignedIntValue]) ?: button.usage; + if (!mapping && usage >= JOYButtonUsageGeneric0) { + usage = (const JOYButtonUsage[]){JOYButtonUsageY, JOYButtonUsageA, JOYButtonUsageB, JOYButtonUsageX}[(usage - JOYButtonUsageGeneric0) & 3]; + } + + GB_gameboy_t *effectiveGB = _gb; + unsigned effectivePlayer = player; + + if (player && self.document.partner) { + effectiveGB = self.document.partner.gb; + effectivePlayer = 0; + if (controller != self.document.partner.view->lastController) { + [self setRumble:0]; + self.document.partner.view->lastController = controller; + } + } + else { + if (controller != lastController) { + [self setRumble:0]; + lastController = controller; + } + } + + switch (usage) { + + case JOYButtonUsageNone: break; + case JOYButtonUsageA: GB_set_key_state_for_player(effectiveGB, GB_KEY_A, effectivePlayer, button.isPressed); break; + case JOYButtonUsageB: GB_set_key_state_for_player(effectiveGB, GB_KEY_B, effectivePlayer, button.isPressed); break; + case JOYButtonUsageC: break; + case JOYButtonUsageStart: + case JOYButtonUsageX: GB_set_key_state_for_player(effectiveGB, GB_KEY_START, effectivePlayer, button.isPressed); break; + case JOYButtonUsageSelect: + case JOYButtonUsageY: GB_set_key_state_for_player(effectiveGB, GB_KEY_SELECT, effectivePlayer, button.isPressed); break; + case JOYButtonUsageR2: + case JOYButtonUsageL2: + case JOYButtonUsageZ: { + self.isRewinding = button.isPressed; + if (button.isPressed) { + if (self.document.isSlave) { + GB_set_turbo_mode(self.document.partner.gb, false, false); + } + else { + GB_set_turbo_mode(_gb, false, false); + } + _turbo = false; + } + break; + } + + case JOYButtonUsageL1: { + if (!analogClockMultiplierValid || analogClockMultiplier == 1.0 || !button.isPressed) { + if (self.document.isSlave) { + GB_set_turbo_mode(self.document.partner.gb, button.isPressed, false); + } + else { + GB_set_turbo_mode(_gb, button.isPressed, button.isPressed && self.isRewinding); + } + _turbo = button.isPressed; + } + break; + } + + case JOYButtonUsageR1: underclockKeyDown = button.isPressed; break; + case JOYButtonUsageDPadLeft: GB_set_key_state_for_player(effectiveGB, GB_KEY_LEFT, effectivePlayer, button.isPressed); break; + case JOYButtonUsageDPadRight: GB_set_key_state_for_player(effectiveGB, GB_KEY_RIGHT, effectivePlayer, button.isPressed); break; + case JOYButtonUsageDPadUp: GB_set_key_state_for_player(effectiveGB, GB_KEY_UP, effectivePlayer, button.isPressed); break; + case JOYButtonUsageDPadDown: GB_set_key_state_for_player(effectiveGB, GB_KEY_DOWN, effectivePlayer, button.isPressed); break; + + default: + break; + } + } +} + +- (BOOL)acceptsFirstResponder +{ + return true; +} + +- (bool)mouseControlsActive +{ + return _gb && GB_is_inited(_gb) && GB_has_accelerometer(_gb) && + _mouseControlEnabled && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7AllowMouse"]; +} + +- (void)mouseEntered:(NSEvent *)theEvent +{ + if (!mouse_hidden) { + mouse_hidden = true; + if (_mouseHidingEnabled && + !self.mouseControlsActive) { + [NSCursor hide]; + } + } + [super mouseEntered:theEvent]; +} + +- (void)mouseExited:(NSEvent *)theEvent +{ + if (mouse_hidden) { + mouse_hidden = false; + if (_mouseHidingEnabled) { + [NSCursor unhide]; + } + } + [super mouseExited:theEvent]; +} + +- (void)mouseDown:(NSEvent *)event +{ + _mouseControlEnabled = true; + if (self.mouseControlsActive) { + if (event.type == NSEventTypeLeftMouseDown) { + GB_set_key_state(_gb, GB_KEY_A, true); + } + } +} + +- (void)mouseUp:(NSEvent *)event +{ + if (self.mouseControlsActive) { + if (event.type == NSEventTypeLeftMouseUp) { + GB_set_key_state(_gb, GB_KEY_A, false); + } + } +} + +- (void)mouseMoved:(NSEvent *)event +{ + if (self.mouseControlsActive) { + NSPoint point = [self convertPoint:[event locationInWindow] toView:nil]; + + point.x /= self.frame.size.width; + point.x *= 2; + point.x -= 1; + + point.y /= self.frame.size.height; + point.y *= 2; + point.y -= 1; + + if (GB_get_screen_width(_gb) != 160) { // has border + point.x *= 256 / 160.0; + point.y *= 224 / 114.0; + } + GB_set_accelerometer_values(_gb, -point.x, point.y); + } +} + +- (void)setMouseHidingEnabled:(bool)mouseHidingEnabled +{ + if (mouseHidingEnabled == _mouseHidingEnabled) return; + + _mouseHidingEnabled = mouseHidingEnabled; + + if (mouse_hidden && _mouseHidingEnabled) { + [NSCursor hide]; + } + + if (mouse_hidden && !_mouseHidingEnabled) { + [NSCursor unhide]; + } +} + +- (bool)isMouseHidingEnabled +{ + return _mouseHidingEnabled; +} + +- (void) flagsChanged:(NSEvent *)event +{ + if (event.modifierFlags > previousModifiers) { + [self keyDown:event]; + } + else { + [self keyUp:event]; + } + + previousModifiers = event.modifierFlags; +} + +- (uint32_t *)currentBuffer +{ + return image_buffers[current_buffer]; +} + +- (uint32_t *)previousBuffer +{ + return image_buffers[(current_buffer + 2) % self.numberOfBuffers]; +} + +-(NSDragOperation)draggingEntered:(id)sender +{ + NSPasteboard *pboard = [sender draggingPasteboard]; + + if ( [[pboard types] containsObject:NSURLPboardType] ) { + NSURL *fileURL = [NSURL URLFromPasteboard:pboard]; + if (GB_is_save_state(fileURL.fileSystemRepresentation)) { + return NSDragOperationGeneric; + } + } + return NSDragOperationNone; +} + +-(BOOL)performDragOperation:(id)sender +{ + NSPasteboard *pboard = [sender draggingPasteboard]; + + if ( [[pboard types] containsObject:NSURLPboardType] ) { + NSURL *fileURL = [NSURL URLFromPasteboard:pboard]; + return [_document loadStateFile:fileURL.fileSystemRepresentation noErrorOnNotFound:false]; + } + + return false; +} + +- (NSImage *)renderToImage; +{ + /* Not going to support this on OpenGL, OpenGL is too much of a terrible API for me + to bother figuring out how the hell something so trivial can be done. */ + return nil; +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBViewGL.h b/thirdparty/SameBoy-old/Cocoa/GBViewGL.h new file mode 100644 index 000000000..28db4848c --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBViewGL.h @@ -0,0 +1,5 @@ +#import "GBView.h" + +@interface GBViewGL : GBView + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBViewGL.m b/thirdparty/SameBoy-old/Cocoa/GBViewGL.m new file mode 100644 index 000000000..dda85843e --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBViewGL.m @@ -0,0 +1,35 @@ +#import "GBViewGL.h" +#import "GBOpenGLView.h" + +@implementation GBViewGL + +- (void)createInternalView +{ + NSOpenGLPixelFormatAttribute attrs[] = + { + NSOpenGLPFAOpenGLProfile, + NSOpenGLProfileVersion3_2Core, + 0 + }; + + NSOpenGLPixelFormat *pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; + + assert(pf); + + NSOpenGLContext *context = [[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil]; + + self.internalView = [[GBOpenGLView alloc] initWithFrame:self.frame pixelFormat:pf]; + ((GBOpenGLView *)self.internalView).wantsBestResolutionOpenGLSurface = true; + ((GBOpenGLView *)self.internalView).openGLContext = context; +} + +- (void)flip +{ + [super flip]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.internalView setNeedsDisplay:true]; + [self setNeedsDisplay:true]; + }); +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBViewMetal.h b/thirdparty/SameBoy-old/Cocoa/GBViewMetal.h new file mode 100644 index 000000000..521c3c720 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBViewMetal.h @@ -0,0 +1,7 @@ +#import +#import +#import "GBView.h" + +@interface GBViewMetal : GBView ++ (bool) isSupported; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBViewMetal.m b/thirdparty/SameBoy-old/Cocoa/GBViewMetal.m new file mode 100644 index 000000000..ae7443f6b --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBViewMetal.m @@ -0,0 +1,232 @@ +#import +#import "GBViewMetal.h" +#pragma clang diagnostic ignored "-Wpartial-availability" + + +static const vector_float2 rect[] = +{ + {-1, -1}, + { 1, -1}, + {-1, 1}, + { 1, 1}, +}; + +@implementation GBViewMetal +{ + id device; + id texture, previous_texture; + id vertices; + id pipeline_state; + id command_queue; + id frame_blending_mode_buffer; + id output_resolution_buffer; + vector_float2 output_resolution; +} + ++ (bool)isSupported +{ + if (MTLCopyAllDevices) { + return [MTLCopyAllDevices() count]; + } + return false; +} + +- (void) allocateTextures +{ + if (!device) return; + + MTLTextureDescriptor *texture_descriptor = [[MTLTextureDescriptor alloc] init]; + + texture_descriptor.pixelFormat = MTLPixelFormatRGBA8Unorm; + + texture_descriptor.width = GB_get_screen_width(self.gb); + texture_descriptor.height = GB_get_screen_height(self.gb); + + texture = [device newTextureWithDescriptor:texture_descriptor]; + previous_texture = [device newTextureWithDescriptor:texture_descriptor]; + +} + +- (void)createInternalView +{ + MTKView *view = [[MTKView alloc] initWithFrame:self.frame device:(device = MTLCreateSystemDefaultDevice())]; + view.delegate = self; + self.internalView = view; + view.paused = true; + view.enableSetNeedsDisplay = true; + view.framebufferOnly = false; + + vertices = [device newBufferWithBytes:rect + length:sizeof(rect) + options:MTLResourceStorageModeShared]; + + static const GB_frame_blending_mode_t default_blending_mode = GB_FRAME_BLENDING_MODE_DISABLED; + frame_blending_mode_buffer = [device newBufferWithBytes:&default_blending_mode + length:sizeof(default_blending_mode) + options:MTLResourceStorageModeShared]; + + output_resolution_buffer = [device newBufferWithBytes:&output_resolution + length:sizeof(output_resolution) + options:MTLResourceStorageModeShared]; + + output_resolution = (simd_float2){view.drawableSize.width, view.drawableSize.height}; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadShader) name:@"GBFilterChanged" object:nil]; + [self loadShader]; +} + +- (void) loadShader +{ + NSError *error = nil; + NSString *shader_source = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"MasterShader" + ofType:@"metal" + inDirectory:@"Shaders"] + encoding:NSUTF8StringEncoding + error:nil]; + + NSString *shader_name = [[NSUserDefaults standardUserDefaults] objectForKey:@"GBFilter"]; + NSString *scaler_source = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:shader_name + ofType:@"fsh" + inDirectory:@"Shaders"] + encoding:NSUTF8StringEncoding + error:nil]; + + shader_source = [shader_source stringByReplacingOccurrencesOfString:@"{filter}" + withString:scaler_source]; + + MTLCompileOptions *options = [[MTLCompileOptions alloc] init]; + options.fastMathEnabled = true; + id library = [device newLibraryWithSource:shader_source + options:options + error:&error]; + if (error) { + NSLog(@"Error: %@", error); + if (!library) { + return; + } + } + + id vertex_function = [library newFunctionWithName:@"vertex_shader"]; + id fragment_function = [library newFunctionWithName:@"fragment_shader"]; + + // Set up a descriptor for creating a pipeline state object + MTLRenderPipelineDescriptor *pipeline_state_descriptor = [[MTLRenderPipelineDescriptor alloc] init]; + pipeline_state_descriptor.vertexFunction = vertex_function; + pipeline_state_descriptor.fragmentFunction = fragment_function; + pipeline_state_descriptor.colorAttachments[0].pixelFormat = ((MTKView *)self.internalView).colorPixelFormat; + + error = nil; + pipeline_state = [device newRenderPipelineStateWithDescriptor:pipeline_state_descriptor + error:&error]; + if (error) { + NSLog(@"Failed to created pipeline state, error %@", error); + return; + } + + command_queue = [device newCommandQueue]; +} + +- (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size +{ + output_resolution = (vector_float2){size.width, size.height}; + dispatch_async(dispatch_get_main_queue(), ^{ + [(MTKView *)self.internalView draw]; + }); +} + +- (void)drawInMTKView:(MTKView *)view +{ + if (!(view.window.occlusionState & NSWindowOcclusionStateVisible)) return; + if (!self.gb) return; + if (texture.width != GB_get_screen_width(self.gb) || + texture.height != GB_get_screen_height(self.gb)) { + [self allocateTextures]; + } + + MTLRegion region = { + {0, 0, 0}, // MTLOrigin + {texture.width, texture.height, 1} // MTLSize + }; + + [texture replaceRegion:region + mipmapLevel:0 + withBytes:[self currentBuffer] + bytesPerRow:texture.width * 4]; + if ([self frameBlendingMode]) { + [previous_texture replaceRegion:region + mipmapLevel:0 + withBytes:[self previousBuffer] + bytesPerRow:texture.width * 4]; + } + + MTLRenderPassDescriptor *render_pass_descriptor = view.currentRenderPassDescriptor; + id command_buffer = [command_queue commandBuffer]; + + if (render_pass_descriptor != nil) { + *(GB_frame_blending_mode_t *)[frame_blending_mode_buffer contents] = [self frameBlendingMode]; + *(vector_float2 *)[output_resolution_buffer contents] = output_resolution; + + id render_encoder = + [command_buffer renderCommandEncoderWithDescriptor:render_pass_descriptor]; + + [render_encoder setViewport:(MTLViewport){0.0, 0.0, + output_resolution.x, + output_resolution.y, + -1.0, 1.0}]; + + [render_encoder setRenderPipelineState:pipeline_state]; + + [render_encoder setVertexBuffer:vertices + offset:0 + atIndex:0]; + + [render_encoder setFragmentBuffer:frame_blending_mode_buffer + offset:0 + atIndex:0]; + + [render_encoder setFragmentBuffer:output_resolution_buffer + offset:0 + atIndex:1]; + + [render_encoder setFragmentTexture:texture + atIndex:0]; + + [render_encoder setFragmentTexture:previous_texture + atIndex:1]; + + [render_encoder drawPrimitives:MTLPrimitiveTypeTriangleStrip + vertexStart:0 + vertexCount:4]; + + [render_encoder endEncoding]; + + [command_buffer presentDrawable:view.currentDrawable]; + } + + + [command_buffer commit]; +} + +- (void)flip +{ + [super flip]; + dispatch_async(dispatch_get_main_queue(), ^{ + [(MTKView *)self.internalView setNeedsDisplay:true]; + }); +} + +- (NSImage *)renderToImage +{ + CIImage *ciImage = [CIImage imageWithMTLTexture:[[(MTKView *)self.internalView currentDrawable] texture] + options:@{ + kCIImageColorSpace: (__bridge_transfer id)CGColorSpaceCreateDeviceRGB() + }]; + ciImage = [ciImage imageByApplyingTransform:CGAffineTransformTranslate(CGAffineTransformMakeScale(1, -1), + 0, ciImage.extent.size.height)]; + CIContext *context = [CIContext context]; + CGImageRef cgImage = [context createCGImage:ciImage fromRect:ciImage.extent]; + NSImage *ret = [[NSImage alloc] initWithCGImage:cgImage size:self.internalView.bounds.size]; + CGImageRelease(cgImage); + return ret; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBVisualizerView.h b/thirdparty/SameBoy-old/Cocoa/GBVisualizerView.h new file mode 100644 index 000000000..5ee4638e5 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBVisualizerView.h @@ -0,0 +1,6 @@ +#import +#include + +@interface GBVisualizerView : NSView +- (void)addSample:(GB_sample_t *)sample; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBVisualizerView.m b/thirdparty/SameBoy-old/Cocoa/GBVisualizerView.m new file mode 100644 index 000000000..08f6024db --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBVisualizerView.m @@ -0,0 +1,71 @@ +#import "GBVisualizerView.h" +#import "GBPaletteEditorController.h" +#include + +#define SAMPLE_COUNT 1024 + +static NSColor *color_to_effect_color(typeof(GB_PALETTE_DMG.colors[0]) color) +{ + if (@available(macOS 10.10, *)) { + double tint = MAX(color.r, MAX(color.g, color.b)) + 64; + + return [NSColor colorWithRed:color.r / tint + green:color.g / tint + blue:color.b / tint + alpha:tint/(255 + 64)]; + + } + return [NSColor colorWithRed:color.r / 255.0 + green:color.g / 255.0 + blue:color.b / 255.0 + alpha:1.0]; +} + +@implementation GBVisualizerView +{ + GB_sample_t _samples[SAMPLE_COUNT]; + size_t _position; +} + +- (void)drawRect:(NSRect)dirtyRect +{ + const GB_palette_t *palette = [GBPaletteEditorController userPalette]; + NSSize size = self.bounds.size; + + [color_to_effect_color(palette->colors[0]) setFill]; + NSRectFill(self.bounds); + + NSBezierPath *line = [NSBezierPath bezierPath]; + [line moveToPoint:NSMakePoint(0, size.height / 2)]; + + for (unsigned i = 0; i < SAMPLE_COUNT; i++) { + GB_sample_t *sample = _samples + ((i + _position) % SAMPLE_COUNT); + double volume = ((signed)sample->left + (signed)sample->right) / 32768.0; + [line lineToPoint:NSMakePoint(size.width * (i + 0.5) / SAMPLE_COUNT, + (volume + 1) * size.height / 2)]; + } + + [line lineToPoint:NSMakePoint(size.width, size.height / 2)]; + [line setLineWidth:1.0]; + + [color_to_effect_color(palette->colors[2]) setFill]; + [line fill]; + + [color_to_effect_color(palette->colors[1]) setFill]; + NSRectFill(NSMakeRect(0, size.height / 2 - 0.5, size.width, 1)); + + [color_to_effect_color(palette->colors[3]) setStroke]; + [line stroke]; + + [super drawRect:dirtyRect]; +} + +- (void)addSample:(GB_sample_t *)sample +{ + _samples[_position++] = *sample; + if (_position == SAMPLE_COUNT) { + _position = 0; + } +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBWarningPopover.h b/thirdparty/SameBoy-old/Cocoa/GBWarningPopover.h new file mode 100644 index 000000000..953aa3c91 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBWarningPopover.h @@ -0,0 +1,9 @@ +#import + +@interface GBWarningPopover : NSPopover + ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView *)view; ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents onWindow:(NSWindow *)window; ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents title:(NSString *)title onView:(NSView *)view timeout:(double)seconds preferredEdge:(NSRectEdge)preferredEdge; + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/GBWarningPopover.m b/thirdparty/SameBoy-old/Cocoa/GBWarningPopover.m new file mode 100644 index 000000000..b66186ba2 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/GBWarningPopover.m @@ -0,0 +1,63 @@ +#import "GBWarningPopover.h" + +static GBWarningPopover *lastPopover; + +@implementation GBWarningPopover + ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents title:(NSString *)title onView:(NSView *)view timeout:(double)seconds preferredEdge:(NSRectEdge)preferredEdge +{ + [lastPopover close]; + lastPopover = [[self alloc] init]; + + [lastPopover setBehavior:NSPopoverBehaviorApplicationDefined]; + [lastPopover setAnimates:true]; + lastPopover.contentViewController = [[NSViewController alloc] initWithNibName:@"PopoverView" bundle:nil]; + NSTextField *field = (NSTextField *)lastPopover.contentViewController.view; + if (!title) { + [field setStringValue:contents]; + } + else { + NSMutableAttributedString *fullContents = [[NSMutableAttributedString alloc] initWithString:title + attributes:@{NSFontAttributeName: [NSFont boldSystemFontOfSize:[NSFont systemFontSize]]}]; + [fullContents appendAttributedString:[[NSAttributedString alloc] initWithString:[@"\n" stringByAppendingString:contents] + attributes:@{NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]]}]]; + [field setAttributedStringValue:fullContents]; + + } + NSSize textSize = [field.cell cellSizeForBounds:[field.cell drawingRectForBounds:NSMakeRect(0, 0, 240, CGFLOAT_MAX)]]; + textSize.width = ceil(textSize.width) + 16; + textSize.height = ceil(textSize.height) + 12; + [lastPopover setContentSize:textSize]; + + if (!view.window.isVisible) { + [view.window setIsVisible:true]; + } + + [lastPopover showRelativeToRect:view.bounds + ofView:view + preferredEdge:preferredEdge]; + + NSRect frame = field.frame; + frame.origin.x += 8; + frame.origin.y += 6; + frame.size.width -= 16; + frame.size.height -= 12; + field.frame = frame; + + + [lastPopover performSelector:@selector(close) withObject:nil afterDelay:3.0]; + + return lastPopover; +} + ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView *)view +{ + return [self popoverWithContents:contents title:nil onView:view timeout:3.0 preferredEdge:NSMinYEdge]; +} + ++ (GBWarningPopover *)popoverWithContents:(NSString *)contents onWindow:(NSWindow *)window +{ + return [self popoverWithContents:contents onView:window.contentView.superview.subviews.lastObject]; +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/Icon.png b/thirdparty/SameBoy-old/Cocoa/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a5675ca2c3d4f0ccc34e4ffbdccba45593646c50 GIT binary patch literal 3156 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Info.plist b/thirdparty/SameBoy-old/Cocoa/Info.plist new file mode 100644 index 000000000..97e197dcd --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/Info.plist @@ -0,0 +1,222 @@ + + + + + CFBundleDisplayName + SameBoy + CFBundleDevelopmentRegion + en + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + gb + + CFBundleTypeIconFile + Cartridge + CFBundleTypeName + Game Boy Game + CFBundleTypeRole + Viewer + LSItemContentTypes + + com.github.liji32.sameboy.gb + + LSTypeIsPackage + 0 + NSDocumentClass + Document + + + CFBundleTypeExtensions + + gbc + + CFBundleTypeIconFile + ColorCartridge + CFBundleTypeName + Game Boy Color Game + CFBundleTypeRole + Viewer + LSItemContentTypes + + com.github.liji32.sameboy.gbc + + LSTypeIsPackage + 0 + NSDocumentClass + Document + + + CFBundleTypeExtensions + + isx + + CFBundleTypeIconFile + ColorCartridge + CFBundleTypeName + Game Boy ISX File + CFBundleTypeRole + Viewer + LSItemContentTypes + + com.github.liji32.sameboy.isx + + LSTypeIsPackage + 0 + NSDocumentClass + Document + + + CFBundleTypeExtensions + + gbs + + CFBundleTypeIconFile + ColorCartridge + CFBundleTypeName + Game Boy Sound File + CFBundleTypeRole + Viewer + LSItemContentTypes + + com.github.liji32.sameboy.gbs + + LSTypeIsPackage + 0 + NSDocumentClass + Document + + + CFBundleTypeExtensions + + gbcart + + CFBundleTypeIconFile + ColorCartridge + CFBundleTypeName + Game Boy Cartridge + CFBundleTypeRole + Viewer + LSItemContentTypes + + LSTypeIsPackage + 1 + NSDocumentClass + Document + + + CFBundleExecutable + SameBoy + CFBundleIconFile + AppIcon.icns + CFBundleIdentifier + com.github.liji32.sameboy + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SameBoy + CFBundlePackageType + APPL + CFBundleShortVersionString + Version @VERSION + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + LSMinimumSystemVersion + 10.9 + NSHumanReadableCopyright + Copyright © 2015-2022 Lior Halphon + NSMainNibFile + MainMenu + NSPrincipalClass + GBApp + UTExportedTypeDeclarations + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Game Boy Game + UTTypeIconFile + Cartridge + UTTypeIdentifier + com.github.liji32.sameboy.gb + UTTypeTagSpecification + + public.filename-extension + + gb + + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Game Boy Color Game + UTTypeIconFile + ColorCartridge + UTTypeIdentifier + com.github.liji32.sameboy.gbc + UTTypeTagSpecification + + public.filename-extension + + gbc + + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Game Boy ISX File + UTTypeIconFile + ColorCartridge + UTTypeIdentifier + com.github.liji32.sameboy.isx + UTTypeTagSpecification + + public.filename-extension + + isx + + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Game Boy Sound File + UTTypeIconFile + ColorCartridge + UTTypeIdentifier + com.github.liji32.sameboy.gbs + UTTypeTagSpecification + + public.filename-extension + + gbs + + + + + NSCameraUsageDescription + SameBoy needs to access your camera to emulate the Game Boy Camera + NSSupportsAutomaticGraphicsSwitching + + + diff --git a/thirdparty/SameBoy-old/Cocoa/Joypad.png b/thirdparty/SameBoy-old/Cocoa/Joypad.png new file mode 100644 index 0000000000000000000000000000000000000000..46cd64837cc6cadfe2d07e4f056a956d6da5fd52 GIT binary patch literal 740 zcmVkdg00009a7bBm000XU z000XU0RWnu7ytkQmPtfGR7l6Im2Gd+Fc8Pxg)vr;8cOMdCr|5J+4bNWJGp>t?SA@x71S~b8%H`A0u6Uv|ov;d%!sf}s?r(-N& zMlm$U=#&9QIh6q^-g-(29RiSG#DI2nKwAJg!mS>;f?OK+hK?V$f}Sz7t_*;fdiMi{ zTi%X0TxmSoznDn|Y_MIyly)!1qiZj3XSlTjIQ~yg*|g9cI>yp7O0j_{#Hn1uHY
OaL}^YOh&AfJh*t$A7CX~ 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 RpX2}l002ovPDHLkV1mDUX!-yE literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Joypad~dark@2x.png b/thirdparty/SameBoy-old/Cocoa/Joypad~dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6b5c006a59526759876c88a94f85ede7f1c518 GIT binary patch literal 2845 zcmV+&3*z*NP)Xn<$ z&d$!dgN$&iq2aF9iH_jVDr>M0K_C^?Gw#ZEWqRrbf%98}7N~-Xq=E z+)?YzEw!{<`8ttGCn8C}!%rUfmshIat!->7;Q0AV_2Sjv)JwvPSAW&%OYzLW^U3qi zRdc(gT6>2olgoei@X_P`ND)APXYW6Fn5nL=sm6L!EC1y9xjK4!LU^VQb!u>E%Z`qp znUtQNoIF>@&t9ti!zZe+xTMe)+KdtbzZ$zYzFe!Xs|HzreREr_kxRp^*(26ue#2kB zZn1y(R27OPHFkG=8Er<1fM1V{j@66@YzjrC@>^=TQX^CY@3$Nwd*lImB4A|nP7Q5F ziGVkUM@H))piV;o$}|EbU}(U-frhOUBx3Kt3<0!-Hls&C-6J3fn&DN^5`erTMx-DB z9xyy|Cwc_j4tfBkJRIt48_xQS)yBHdJM<7ZII;wcMw5U_t*(_d$~T>L7nhd(1dx)& zQrWAwZb*nU0mD85j6(2+8Vw654aIVGC(d^zV0w0Lj?U=cA~px%w|4f_R%_4Xb-G7Z@!-8T zDazosSig}!d~%`*fHF83L1F9-5C^~suvA`AON27zQHFP@1K=CP3Qt~quHynAVrTcj z*Z;Pat*uPRYV_FEXAoL;znz|$n+qiXA*W<2^ADc5Wb96-U-)Br!8o48vlp+_!O^kW zq_`e7K&&{$2=(?ina-%W*u0vWo>fybvuZXLr?RX&8XF?kwC8MY@2dTyr<#ah9I=xu zI`;U5zr4QI)a}j8#s4nDYrb(yF06%Q))1J~5!~&Ti{5fXcXL}ji##lju@A+0OoLRM z0Lcv%SwPLq#z>Hunw^Vl<&g*Q4n&|XNWixc8rDOI3~i&2&7eHKXO?lty+eJ>CwN9b zaz2p+yhCH9%@sM1ROZe5x^`oKS$kb5G@ndqg<<*ld{V^|NtH;ZsXR^jl!{Rq-l5Js zJ>we?7i>!cb-2%9zhTcH03<`#Faq9#h2R0fj=}&}%`OxWw(eRF1c6vqoF+*9oXIZe zZ!@_C4fIVzP}f0Sn!Ma_XoFQQtG~}vy_Ha71pyDDc@E0H7fJxeCOVbOBQH^2@f2qT zWPJ&gV}B2YU}-3xUC6t00LFaL9*?o(Lwg_s9uSKsbU8ed+Yk0*$TM<4Cdd|)Tjp`$ zf_bMi0c3%42Ld2SE?=M}X+eW6ht7i}F+e8j!u_Fqj+BJbv_xvpfVV+t|%dd$N@ zXbWq;cRuiMhf&5Ppf0`v0ceBUll_2{Opt(#-#~cgVFX|$`D}Wo8v$w0LYja@Z3#xY zts~b0A}k>1i*SZnw${o;-O`Zz0I~OGA4oN4pX${v|Rud-ca=wI#jVvj5cx-)l4Q8*&m;hd4Ie4lK zBHETPa%6oe<|N))2X#Q7T?xSQQxXJ(0Ye1tB}wR3*AP(BLP-MjMQPK!2MiLx%cHki z1W|E{WA_M|c=&dbr}0_>l4b`60RZ{2S7yp_k-@CD)v@2QC5v|1gM0J#mM=*_M8n<| z@wQnLK;K{p$#$1SyMW$25x8EkuG9f}kld93ItuHK{U2945>mE-&S0k!Jgb+=#Eu*r0Fg!5VJbFB- zChk9QeYyTSAP&vXVB}=cM^Or z-}U$Z?u0_wUx9rnj3E#tA`H4N5y0P=i_{VX{|asP_4(!De!09iSSDn=bgB0Ux3yr)TcIH_OM?D|7vT;3 zDCrdV&EU;jYZ%`c*HU3$zEt+7grdzOg$E!&a`V>5YiRS7GQDAS`+4pKNa#A2)S}%8 zvGQhv;~`ikiNYL!&>7l_+{K6?px}0bov`RgSaQ2RF2@B)#0e-m0uTyA@Y4iDQ!X&7 z^GN5D?j4p;5CIQ}%}1F4QpCmnNFkr%LgAP!(-Gma{>BiHh%NzHL4e-;kVinFm{UHf zpILd7=N1Z%Fl>*pGmS6-dAI##64>HQ1cR*)#knpMKr2f02!POt+shC*Z-I^S36BI) z5`c%~#V^KiPMC|&N1Ff~S>+ERks|I8R2~~1`TN1V{lysW6e3H2jt2XF3}sSy0W1r} zIraTo%+`y%2V}$$2>v<@5olN!KrGVxncSkQ0|Ib)8d(Amrp8`?6*5O)R?u9T!NRP( zE*FI1I1B=A4Bm_$0T4QEufy1?k_eRH;sd8WpXCJ+ktX2!jlntsme>n;mNx+qpS25q z#U(%huCpUaz`)gO6!<;(pCG!*_t6QVNsSc7(n zK6vkM`O5Gu+OScaNd40k0uMce4++DBu^)*M+eS~+{%sE7wYRP15QH2cT>XInaOxuOR@1nmT}N z7{I0kLj@&hwIY-tu@ENShJ(8PLDXpcV-!!Kyv$Sh7n}e#0GU#7FH_P8FuVnd(x)gq zttBXQq<_;)AOrI}q%Ps?Q>+sSq4^@DErd>l(d-xs0j{6HPQk~+ZrLfwca#CB&>9Ne VoLZSs5PARr002ovPDHLkV1i}u`KoEvsS;~)H**<{JfPD#b2*f24$$JOVAr62z z1Zk+KlRLPg0#^wYBE=}$&mR!m@y5W;7Av`!U5y?I&&)eBsB3`pfdTMW599705CTXN zAWeUFk_6ZZ;O>5e0D?f>Yra2109mH)wJaMUfFf7-T9IoCAdZ38m??m&0xSzyZ|FBW z0AVO?qlg)R&kta=lD4ZAP?n4UcwW=~#bW}X$btF1X}?$khXVruPtVw780La?GaoVd$5+T`rv{Ru9X^oRXZqvh9Ou*fOY94ouS2!qoZ z`PS82P@V`m&TtYT*S%39)RqcwdrXDxzEWW=iy`*quwW#J>_mqo76kfBV!q!hi5XSc z05AXy00ZDp0oWI`$G1AR$Jq}^)HUF`r|&tA=0j4)igHug)p|&Z{g~W$Z=or#lbqc> zT&YRtb%707*qoM6N<$f=co@o&W#< literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/KeyboardShortcutPrivateAPIs.h b/thirdparty/SameBoy-old/Cocoa/KeyboardShortcutPrivateAPIs.h new file mode 100644 index 000000000..a80dfde97 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/KeyboardShortcutPrivateAPIs.h @@ -0,0 +1,26 @@ +#ifndef KeyboardShortcutPrivateAPIs_h +#define KeyboardShortcutPrivateAPIs_h + +/* These are private APIs, but they are a very simple and comprehensive way + to convert a key equivalent to its display name. */ + +@interface NSKeyboardShortcut : NSObject + ++ (id)shortcutWithPreferencesEncoding:(NSString *)encoding; ++ (id)shortcutWithKeyEquivalent:(NSString *)key_equivalent modifierMask:(unsigned long long)mask; +- (id)initWithKeyEquivalent:(NSString *)key_equivalent modifierMask:(unsigned long long)mask; + +@property(readonly) unsigned long long modifierMask; +@property(readonly) NSString *keyEquivalent; +@property(readonly) NSString *preferencesEncoding; +@property(readonly) NSString *localizedModifierMaskDisplayName; +@property(readonly) NSString *localizedKeyEquivalentDisplayName; +@property(readonly) NSString *localizedDisplayName; + +@end + +@interface NSPrefPaneUtils : NSObject ++ (id)stringForVirtualKey:(unsigned int)key modifiers:(unsigned int)flags; +@end + +#endif \ No newline at end of file diff --git a/thirdparty/SameBoy-old/Cocoa/License.html b/thirdparty/SameBoy-old/Cocoa/License.html new file mode 100644 index 000000000..c6db03e92 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/License.html @@ -0,0 +1,80 @@ + + + + + + + + + +

SameBoy

+

MIT License

+

Copyright © 2015-2022 Lior Halphon

+ +

Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions:

+ +

The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software.

+ +

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.

+ +

Third-party Libraries

+

HexFiend

+

Copyright © 2005-2009, Peter Ammon +All rights reserved.

+ +

Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met:

+ +
    +
  • Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.
  • +
  • Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution.
  • +
+ +

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE

+ + \ No newline at end of file diff --git a/thirdparty/SameBoy-old/Cocoa/MainMenu.xib b/thirdparty/SameBoy-old/Cocoa/MainMenu.xib new file mode 100644 index 000000000..386d2e27e --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/MainMenu.xib @@ -0,0 +1,538 @@ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/NSImageNamedDarkSupport.m b/thirdparty/SameBoy-old/Cocoa/NSImageNamedDarkSupport.m new file mode 100644 index 000000000..73e7b64b7 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/NSImageNamedDarkSupport.m @@ -0,0 +1,49 @@ +#import +#import + +@interface NSImageRep(PrivateAPI) +@property(setter=_setAppearanceName:) NSString *_appearanceName; +@end + +static NSImage * (*imageNamed)(Class self, SEL _cmd, NSString *name); + +@implementation NSImage(DarkHooks) + ++ (NSImage *)imageNamedWithDark:(NSImageName)name +{ + if (@available(macOS 11.0, *)) { + if (![name containsString:@"~solid"]) { + NSImage *solid = [self imageNamed:[name stringByAppendingString:@"~solid"]]; + [solid setTemplate:true]; + if (solid) return solid; + } + } + NSImage *light = imageNamed(self, _cmd, name); + if (@available(macOS 10.14, *)) { + NSImage *dark = imageNamed(self, _cmd, [name stringByAppendingString:@"~dark"]); + if (!dark) { + return light; + } + NSImage *ret = [[NSImage alloc] initWithSize:light.size]; + for (NSImageRep *rep in light.representations) { + [rep _setAppearanceName:NSAppearanceNameAqua]; + [ret addRepresentation:rep]; + } + for (NSImageRep *rep in dark.representations) { + [rep _setAppearanceName:NSAppearanceNameDarkAqua]; + [ret addRepresentation:rep]; + } + return ret; + } + return light; +} + ++(void)load +{ + if (@available(macOS 10.14, *)) { + imageNamed = (void *)[self methodForSelector:@selector(imageNamed:)]; + method_setImplementation(class_getClassMethod(self, @selector(imageNamed:)), + [self methodForSelector:@selector(imageNamedWithDark:)]); + } +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/NSObject+MavericksCompat.m b/thirdparty/SameBoy-old/Cocoa/NSObject+MavericksCompat.m new file mode 100644 index 000000000..6c065143d --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/NSObject+MavericksCompat.m @@ -0,0 +1,7 @@ +#import +@implementation NSObject (MavericksCompat) +- (instancetype)initWithCoder:(NSCoder *)coder +{ + return [self init]; +} +@end diff --git a/thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.h b/thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.h new file mode 100644 index 000000000..11aabd2d6 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.h @@ -0,0 +1,6 @@ +#import + +@interface NSString (StringForKey) ++ (NSString *) displayStringForKeyString: (NSString *)key_string; ++ (NSString *) displayStringForKeyCode:(unsigned short) keyCode; +@end diff --git a/thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.m b/thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.m new file mode 100644 index 000000000..f5a9aa324 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/NSString+StringForKey.m @@ -0,0 +1,46 @@ +#import "NSString+StringForKey.h" +#import "KeyboardShortcutPrivateAPIs.h" +#import + +@implementation NSString (StringForKey) + ++ (NSString *) displayStringForKeyString: (NSString *)key_string +{ + return [[NSKeyboardShortcut shortcutWithKeyEquivalent:key_string modifierMask:0] localizedDisplayName]; +} + ++ (NSString *) displayStringForKeyCode:(unsigned short) keyCode +{ + /* These cases are not handled by stringForVirtualKey */ + switch (keyCode) { + + case kVK_Home: return @"↖"; + case kVK_End: return @"↘"; + case kVK_PageUp: return @"⇞"; + case kVK_PageDown: return @"⇟"; + case kVK_Delete: return @"⌫"; + case kVK_ForwardDelete: return @"⌦"; + case kVK_ANSI_KeypadEnter: return @"⌤"; + case kVK_CapsLock: return @"⇪"; + case kVK_Shift: return @"Left ⇧"; + case kVK_Control: return @"Left ⌃"; + case kVK_Option: return @"Left ⌥"; + case kVK_Command: return @"Left ⌘"; + case kVK_RightShift: return @"Right ⇧"; + case kVK_RightControl: return @"Right ⌃"; + case kVK_RightOption: return @"Right ⌥"; + case kVK_RightCommand: return @"Right ⌘"; + case kVK_Function: return @"fn"; + + /* Label Keypad buttons accordingly */ + default: + if ((keyCode < kVK_ANSI_Keypad0 || keyCode > kVK_ANSI_Keypad9)) { + return [NSPrefPaneUtils stringForVirtualKey:keyCode modifiers:0]; + } + + case kVK_ANSI_KeypadDecimal: case kVK_ANSI_KeypadMultiply: case kVK_ANSI_KeypadPlus: case kVK_ANSI_KeypadDivide: case kVK_ANSI_KeypadMinus: case kVK_ANSI_KeypadEquals: + return [@"Keypad " stringByAppendingString:[NSPrefPaneUtils stringForVirtualKey:keyCode modifiers:0]]; + } +} + +@end diff --git a/thirdparty/SameBoy-old/Cocoa/Next.png b/thirdparty/SameBoy-old/Cocoa/Next.png new file mode 100644 index 0000000000000000000000000000000000000000..eb4d135222d1fbb3518f044c942dd84e8115ca96 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDb50q$YKTtF;x&|^bAt@02B=H zba4!kxSX7D00000NkvXX Hu0mjfR)$~; literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Pause.png b/thirdparty/SameBoy-old/Cocoa/Pause.png new file mode 100644 index 0000000000000000000000000000000000000000..d81a4f632c7bb36560ddc3d57f14db69cbb7d6de GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V3y@T|W;X*;oCO|{#S9E$svykh8Km+7C@Aac z;uyjao&4iG1B-lvfZu<1WdX)z3SSh&T#9WNyw+Iz+PG~F1uA6lboFyt=akR{0J|O* AGynhq literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Pause@2x.png b/thirdparty/SameBoy-old/Cocoa/Pause@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..965b40f24291881086171b031e7f7ee9a3e7987d GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc0wmQNuC@Uw&H|6fVg?2=RS;(M3{v?36g2g8 zaSYKopZw!IL(>Tc>Hqd~k`gR<(qz&OoN^EQAs@*y*M3z&h~ivPC!tq@Y-?&#T3I$R ZF(~TkGO+|koCg}f;OXk;vd$@?2>_DsA}#;` literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/PkgInfo b/thirdparty/SameBoy-old/Cocoa/PkgInfo new file mode 100644 index 000000000..bd04210fb --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/thirdparty/SameBoy-old/Cocoa/Play.png b/thirdparty/SameBoy-old/Cocoa/Play.png new file mode 100644 index 0000000000000000000000000000000000000000..fd43bc97f5903d9dccd34b3ca58f23de4efb3c85 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V3y@T|W;X*;oCO|{#S9E$svykh8Km+7DCp$r z;uyjaot%)6aO2#9qYaGzjQ=FgIIYmB$I&!jGE1`J0;}T(NoOHu;av(GaVZ}Ti0o<7 n>sa{L*jaX!Ys8$EhZPJ9KIxoH={ctaG>yU2)z4*}Q$iB}ZlNk$ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Play@2x.png b/thirdparty/SameBoy-old/Cocoa/Play@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a0edda659328e8234ece8cd3c4158227c5006876 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc0wmQNuC@Uw&H|6fVg?2=RS;(M3{v?36zunO zaSYKopPazZ_?1VC$EEQ<&wYs~i5;DR98LU^N}a(RO}{0-bO!&J|Iqw!2%BS)NYjJt zHXb%L5W|u!`;o}M^dHAJOmUnf(W>xc=E6CRy+B6A?1SAAt@n;Z#CqO%RnK!;Vo3+5 zTyzqXO?N><^P+$mGh7lKECOwq)QsJnPQGC`c=$=cZ-+EzIxE8>_mwJ_F3tZ0bQ*)F LtDnm{r-UW|mt#yb literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/PopoverView.xib b/thirdparty/SameBoy-old/Cocoa/PopoverView.xib new file mode 100644 index 000000000..7ccdf4967 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/PopoverView.xib @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/Preferences.xib b/thirdparty/SameBoy-old/Cocoa/Preferences.xib new file mode 100644 index 000000000..57a4755c0 --- /dev/null +++ b/thirdparty/SameBoy-old/Cocoa/Preferences.xib @@ -0,0 +1,1311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/Previous.png b/thirdparty/SameBoy-old/Cocoa/Previous.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc6141a8aa05d26d5df6f390ebed1af0fb543c2 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDb50q$YKTtF;x&|^bAt@02Fld zba4!kxSX8ugQ11v!RZfDbHB@TC?05dsAeYT;xQ+Y|FFG*bThlsGs8cvMTV6gK5r&i su(GUWu*{b4QvSZsN@%?~CyNNf+B12o=_zKjfhIC|y85}Sb4q9e0PQCzumAu6 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Previous@2x.png b/thirdparty/SameBoy-old/Cocoa/Previous@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0f7f65cf8db95efbd3552e44a1ca54ef7066e39 GIT binary patch literal 266 zcmV+l0rmcgP)05ba4a^FO|st=ES!{Y|AXw# z3`V48Y&9`3C^5>QXh6;l)5Hl3!vd$4oE+0c3+C*ra9hwIVZn$s4=-+-bOn7@TpHn8 z5F~BEf@3G_1cG=1CTw^H(?Kq{XxjXvYMkuupx zS-g>4jb$s3m*B8Mr750k4NOU}V@_J|W4@)n+uE}!o|3;0TlnRc?ht~$oPqcTDneXJ-wvuPR;HeGTDM=?1 zDtgy&>~_j-D}K>sAY$ZUq?7ui-B)tgq4PIH6Se;Mm$te@>mJ?EqjA2W`S`Ss2aW6% zVup--jE9c6DDp@MOx93n5S(#FZlRVG`ed_?*O`# N!PC{xWt~$(696?GO&|aO literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Speaker.png b/thirdparty/SameBoy-old/Cocoa/Speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..e6464c928fb3fae21b86c23e9c783be3617e929e GIT binary patch literal 1145 zcmV-<1cv*GP)kdg0000WV@Og>004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkR|4BqaR7l6Am0N5SWfaH%?Myq%UT0@-o$hw_zB9ACv$T6FS5uV4gnEI9CMZS> zG(sQb!GH<)AjC`5NK7SZpEMeR*2GwRXnas&R1yfOra@v99x#A{0fR!JwPpW4EK-Uz zv?1r=JLe?d@8y?s4v2dT+%rI)b3law9f8}r^8kbcXFNM$K%5r<0(?*rgaBLo)7bCg zB82A$SRm-0cZ3QQMpLouHT7MXaLx$;0nHE~I`eH4{yt>b$Ux2#j0QzZU2Odb1_ZX1w&*p_T7;>8Efq&&Kfpq0Hh|*V=-CYeBE8wInJL$5w9@=Q z>Np-ff;{Xr^2^LxU^_B(ozov}aKjA|Qp-zila5EBGPhgmI2rvGS=gA)-*3{t6>+L` zRfm$lHC5|6rvbs{r9u%Z-F}C8Li-9?NKCbNoAmV}$_VY{;pAzd2$^|Z%a5ylb)C}y zU+^3Mm#`o)VXZN!^dL%&_R_(`NudL7=8RNsLVX+QnK}VKqR?PRqqZSQc>^@YD3uPy ze`zeh#hhVeCqu6xMH_w9zVzkWbpjFPGy6Jd)DjKtM`AxVSa8xb7iOnIyO5-lN_8Oh zx3mm?7H-wKe6wEjK8`Tp(ni9gD8Np`teCaHP9*51-1%YZqO=q~7BW8T&+xt*I(zl& zb)8rA2hPL~!v!j-E~6IMjsydAR|k`SG<8B@K@VD&!|y>yBO~P(^qV@1KSdA2gv2!m zKYscc3t)(j@=)?@Qw1_DJ)9p?2arJn)zXg4q_g`royLZBCWAfj(9a&e%H@#3c0HOO zSNo7wz|f*sGUJX1(ZXDpt^L#;bUw8H)Z!6}G8FjX1!T}kf91{eRr^W=X)UoYJgW`E zL^Bh`wFZ?#wQ=yj;V~Ee~J=)*L z!vAKc{!kxoE{?{&uaApWHEV$#NKj!*_i*ZhU57}6yyfy1wRJDTRJd(yKesVD>*ASC zxzLE+)Y<<0uGfSB=T_5m*R6eP!OqVUO{`FuA3)@){x2#Q8Is|J0`FYz)y$GfzQuk%F^_|Huh;os*MRB{XWvD800000 LNkvXXu0mjfMF$qF literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Speaker@2x.png b/thirdparty/SameBoy-old/Cocoa/Speaker@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a07f21b1eafcd4d5c91a608b16d0e7a95030a206 GIT binary patch literal 1825 zcmV++2j2LJP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkUr%6OXRA}DqnR{$gWfZ_qUu)O3Tif-yw(HieYuB#bqocjIMI9r64g-dVBGF(( zhy+NcCSnMQ&WJ>VZ;Tj&C`4uiL{LT)Vn~RQ7~?CL-~$W~A6aIQOvlF9j^Dk#y}c`K z*VY#Pklg>i^nUq$kMld{o&v)4ec%Sb4FCj92_CQk4KpDOmh8VP9e}s`ka?u?RS1Fd z`T$tmBhBa>E?W%F>jNP5Z>6yfYd(eu=&u0)l!K8xa(?1gyOA28v1vlJ2D~6DF#xEc zS$d~rA+&*(o45?k!L>2$K*vd#p7|;k3qYe>QZr&1E?=EoE&7eJ@HbIxM%^Vb==1FJ0)x? z5^f?Zh&n!sVG9~}LOZCqQ59-idt=y+w$FhAWAOlN#v`?8J|~_7Hh!v>Mjt&ALC=Wd zuB3c0VpT`Z(CEji_22_>u>h2={cU7Y!!{CloNBQW)osr*tF;~_@-c9uQgk#gjgiBt zKO>$2)*=C*%^9M`BG@=AUnE#9W!F%@)9Ay>M+D(mPY&m36oaVW3azP`Ax8i(KqJ{e z8-KqwC~w~qi>o%AP%T-lEwG%CPu~tNYKeTByfH>T4S&hz32?(s6E#S1$17HWN0=FM0zkRS7P#1fp7Dy6*SPPQSVfOVm3R5kSPp~mS zUncUoBo~yWNZTqSXBk&kt%D{eo>%~qR;NKH*;r%JU7j{NuG)nus{J)L)e=`$w7b37zb3F$!Znc54ETisJ6Ng)nde82qx<`Q9KwNo@ z#oa=172FQEMtxW}BwGM=d8js+U9~8~n&5*h?vImP>Gy=A;}L8aDw_|raey-a4vIvx z zmmQdLWEy-hcayiRr_>OwP-|9XcvpS zm*8r+Q3ZBy-f{b-We13C;$es_W=^%5+*G?RXVr$>4w_l*nDRaWt_xqn!}uE6G7exW z)lRBvv7J}#<0-2B;40NBvASggi~B|LhG~iHOr*-uCPl=mc7JBo+Hz8@+nuUf=Ew-{ zX~vb>H3@yCO~?6EwXACUdDSX2tCqzL&RD{R<12|sNDok`Y8OpbEp=X~T6WZdOM1Uv zb-sTkQdz6wBCGZmfh*hbP27X`pgKE1aaH>=*#l|v(iuQE^{3gCRqa86E0e07T$cKq zB8+O?7iED&Zppbr!l`!rKdDxa?s-f+P3YYy%@ZK2YI|~4?d*XK&!2jGKXzk9-T*mN zwdqy6o48WL-=!!%g=^7~!$)2kfI?NfG^r#lRFg*w1p#DL?Y=asHMOp1%hC_ieg78* zkf&--2WJgZ=nC4^C)Ipa= zizcILYdO`P67dBF1FXyG%H`D~%B0%k(#SE^mG?t=5gL4105Vmzv$n739E)7;B5_($ zfQ+iu;fBFa1`c8mYDx_tP_3+6P^ig?unj0LMwfkx1_e>AIMm0e*79!pPG^Y$n5)=i ziwzU`3{7q>T{{3J>#z8e4p*7+0>KRxNsQ3x0}QF&jJ1g;y_Ip2=I3t P00000NkvXXu0mjfAZkdg00009a7bBm000XU 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Speaker~solid.png b/thirdparty/SameBoy-old/Cocoa/Speaker~solid.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9fce9c5d07991272d28b46f4700ab9b8b85b14 GIT binary patch literal 548 zcmV+<0^9wGP)kdg00009a7bBm000XU z000XU0RWnu7ytkP)=5M`R7l6=)jvp-VHg1L->IO|;gFb7U_lMGRP<-b8jOgXvZcZy z8?vcfB5UUwR&2cL*&#)5CK- z&&&7z?tR}>Jn82G&Y}6@?gcD&OsNB_ z%;+n^`Ns3G+;%sAf5d$gfn}|4u7v8@qMUn04i|3UI$0M&e%`DNfpe@V=YYYbgctn? zEVafxj88-4z!J{du%(M4?W21|Io}4(O>#~p{eh3m+ZA)Z4xC%fIUOIUeMti<3@_q5 z5$ZQ&tSs&L?vZya=KLHu8%;Y{>J{?9gcUL8<$`;ugjip|*;xJsddc^gv!|T3|8RbC mcX^LThp~V9+NGBJy#E5}Y>Hh9QVYod0000}ws7OZjSHiQZcw0Dh9H8dP1?nITWHkzJ>$$do;d?C z@A6@0zIT3Rp83w1fQWCBNEArqzfB8Ysg7rXX~Y!k;#c4@LbS%OKo+Bj5ZnA3xQ1+l z)F4DZ0YAoXBFF@#7M9FQggEL)fqe+kYrNa-gb*WS#=bx*?-8QX;2j9jmhz5h6Lx?V~3*1M%BhA7JnL&Ib-$Iu&gb+KuEpQJZ>J8e6 z5FG}sM2PpKdRd^DpNJ{)EHr}=geW&2-GdNyeyH{+LcAi`LQDCDm|(5@aaEjUMHH$H z(1#E;#`CWu#BI0Z^9dnt81(qOYOPz;#QwcicZ zrttwG4j8ZT5Fr{P7idO^JqCT^K(#v&Vt{29TEH}7hJr{1b|J(ETh&fSsoG}y|yP;C=Jv>EgeLcAr#`p`kDJXdWd zBZv^&4OjLeMD4$D1~E>q=c=tnh!=({H#2L_Ye6=uJz=}mmN`&u68#7*xI&tnck?gE zb)niT20dk~+HHgoqhwj=+`QnwsMa&p9yW^IL5NEWK8k}@A%)v&?NwXnK(%>HA%0Ng ztQ9R<+L!)oz(rZMwS(Wy~&FwYLx<NmoNTrBs?Ff+f_=(C z+^F_~x0hWpQLU4NQ|+TgRD0LkGjOKbk2XG7a-3|ntEn(9T|G#+t@d+tTdfyaOto*^ zs@B + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy-old/Cocoa/Updates.png b/thirdparty/SameBoy-old/Cocoa/Updates.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bbbb6a615fbc4f66aff56dafac4fdc35c2ad43 GIT binary patch literal 1576 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 LNkvXXu0mjfMydn$ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Updates~solid~dark.png b/thirdparty/SameBoy-old/Cocoa/Updates~solid~dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5f21264f4f566e010bf4c243d8eb8cd6b2e760 GIT binary patch literal 366 zcmV-!0g?WRP)m*4PaSND#2g?#iHPAXj#x`z-9xXgKbcFZ^e5K(tB^a>Z!}$!FX6LOYeAguXoVJ?K>%)5eCLsK{0u%o4;Wi!@NdN!< M07*qoM6N<$g6T_=PXGV_ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Cocoa/Updates~solid~dark@2x.png b/thirdparty/SameBoy-old/Cocoa/Updates~solid~dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eb35dad9f98c5bd7b0034a17fc8050b1d1f5cfef GIT binary patch literal 1021 zcmV*VnaOFqz=MA(V3kP6p8330_{> zu%pR@;uqj#06o7o<;#j;oC^W$+6~vPqjZ|ayrX8zjgK#E-v*a2X#jwaA4*r3Q!H)n z|KRNnoxfZUV1yqZJph2-|Ii!&$L9zI#bA&CBmfCO0+0YC00}?>kN_kA2|xmn03-kj zKmzb^0D*z<{hJ2^h>3yvI;{e5{GQWa0P+t*UY<4qjFt2Om=*&yuSI#>)d2AJL+N&6 zSv)El9zTNch|wCsu^S_d<;F-rAVfsK)^y0tf$`o0!o!sS{wH;{Fmo0dji9RHYLQPy z2vNnos*1KDs2L9MUaa1^H)&qv}@!@#Gzhb?y5z;c@ZG%`1-nt?5E(hR00e(5q1MFDZ zW{Q34bl+@IUpc@|tlI#XJqOO8g-x4v24E;2V1dxPTGS2zOE`=s@!5%W&zlJvjiTUk zEZ^?ZSl?6OuyDx8u)93gH-I5jhTH>y$pqQCP+ksA?*`ZB9E1mDgX`TI!2J?Y83H(d z6q1r`t@=N`+XIMXEu^Hv zj~`-OA86sQaA<9XtgL@0y!toL(jt!PELrMi0K&qp6Pm%?+fptcOxN87ckaNHDe$os zs%zlLVK69e1Yj6-ej9oDLWE56dU*0wc*%wocvT5IcIbQ()bQ zDNLLQJ9k1`8_J|$9Rpaj5bl*gs4C*VtPGYch6VAW&BKQ%t5)k2K#v*n@?q9=m^u}j znjv+g?cQKoCQ9*b9nS + +int main(int argc, const char * argv[]) +{ + return NSApplicationMain(argc, argv); +} diff --git a/thirdparty/SameBoy-old/Core/apu.c b/thirdparty/SameBoy-old/Core/apu.c new file mode 100644 index 000000000..e8d82a1b3 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/apu.c @@ -0,0 +1,1740 @@ +#include +#include +#include +#include +#include +#include "gb.h" + +static const uint8_t duties[] = { + 0, 0, 0, 0, 0, 0, 0, 1, + 1, 0, 0, 0, 0, 0, 0, 1, + 1, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 0, +}; + +static void refresh_channel(GB_gameboy_t *gb, unsigned index, unsigned cycles_offset) +{ + unsigned multiplier = gb->apu_output.cycles_since_render + cycles_offset - gb->apu_output.last_update[index]; + gb->apu_output.summed_samples[index].left += gb->apu_output.current_sample[index].left * multiplier; + gb->apu_output.summed_samples[index].right += gb->apu_output.current_sample[index].right * multiplier; + gb->apu_output.last_update[index] = gb->apu_output.cycles_since_render + cycles_offset; +} + +bool GB_apu_is_DAC_enabled(GB_gameboy_t *gb, unsigned index) +{ + if (gb->model > GB_MODEL_CGB_E) { + /* On the AGB, mixing is done digitally, so there are no per-channel + DACs. Instead, all channels are summed digital regardless of + whatever the DAC state would be on a CGB or earlier model. */ + return true; + } + + switch (index) { + case GB_SQUARE_1: + return gb->io_registers[GB_IO_NR12] & 0xF8; + + case GB_SQUARE_2: + return gb->io_registers[GB_IO_NR22] & 0xF8; + + case GB_WAVE: + return gb->apu.wave_channel.enable; + + case GB_NOISE: + return gb->io_registers[GB_IO_NR42] & 0xF8; + + nodefault; + } + + return false; +} + +static uint8_t agb_bias_for_channel(GB_gameboy_t *gb, unsigned index) +{ + if (!gb->apu.is_active[index]) return 0; + + switch (index) { + case GB_SQUARE_1: + return gb->apu.square_channels[GB_SQUARE_1].current_volume; + case GB_SQUARE_2: + return gb->apu.square_channels[GB_SQUARE_2].current_volume; + case GB_WAVE: + return 0; + case GB_NOISE: + return gb->apu.noise_channel.current_volume; + + nodefault; + } + return 0; +} + +static void update_sample(GB_gameboy_t *gb, unsigned index, int8_t value, unsigned cycles_offset) +{ + + if (gb->model > GB_MODEL_CGB_E) { + /* On the AGB, because no analog mixing is done, the behavior of NR51 is a bit different. + A channel that is not connected to a terminal is idenitcal to a connected channel + playing PCM sample 0. */ + gb->apu.samples[index] = value; + + if (gb->apu_output.sample_rate) { + unsigned right_volume = (gb->io_registers[GB_IO_NR50] & 7) + 1; + unsigned left_volume = ((gb->io_registers[GB_IO_NR50] >> 4) & 7) + 1; + + if (index == GB_WAVE) { + /* For some reason, channel 3 is inverted on the AGB */ + value ^= 0xF; + } + + GB_sample_t output; + uint8_t bias = agb_bias_for_channel(gb, index); + + if (gb->io_registers[GB_IO_NR51] & (1 << index)) { + output.right = (0xF - value * 2 + bias) * right_volume; + } + else { + output.right = 0xF * right_volume; + } + + if (gb->io_registers[GB_IO_NR51] & (0x10 << index)) { + output.left = (0xF - value * 2 + bias) * left_volume; + } + else { + output.left = 0xF * left_volume; + } + + if (*(uint32_t *)&(gb->apu_output.current_sample[index]) != *(uint32_t *)&output) { + refresh_channel(gb, index, cycles_offset); + gb->apu_output.current_sample[index] = output; + } + } + + return; + } + + if (value == 0 && gb->apu.samples[index] == 0) return; + + if (!GB_apu_is_DAC_enabled(gb, index)) { + value = gb->apu.samples[index]; + } + else { + gb->apu.samples[index] = value; + } + + if (gb->apu_output.sample_rate) { + unsigned right_volume = 0; + if (gb->io_registers[GB_IO_NR51] & (1 << index)) { + right_volume = (gb->io_registers[GB_IO_NR50] & 7) + 1; + } + unsigned left_volume = 0; + if (gb->io_registers[GB_IO_NR51] & (0x10 << index)) { + left_volume = ((gb->io_registers[GB_IO_NR50] >> 4) & 7) + 1; + } + GB_sample_t output = {(0xF - value * 2) * left_volume, (0xF - value * 2) * right_volume}; + if (*(uint32_t *)&(gb->apu_output.current_sample[index]) != *(uint32_t *)&output) { + refresh_channel(gb, index, cycles_offset); + gb->apu_output.current_sample[index] = output; + } + } +} + +static double smooth(double x) +{ + return 3*x*x - 2*x*x*x; +} + +static signed interference(GB_gameboy_t *gb) +{ + /* These aren't scientifically measured, but based on ear based on several recordings */ + signed ret = 0; + if (gb->halted) { + if (gb->model <= GB_MODEL_CGB_E) { + ret -= MAX_CH_AMP / 5; + } + else { + ret -= MAX_CH_AMP / 12; + } + } + if (gb->io_registers[GB_IO_LCDC] & 0x80) { + ret += MAX_CH_AMP / 7; + if ((gb->io_registers[GB_IO_STAT] & 3) == 3 && gb->model <= GB_MODEL_CGB_E) { + ret += MAX_CH_AMP / 14; + } + else if ((gb->io_registers[GB_IO_STAT] & 3) == 1) { + ret -= MAX_CH_AMP / 7; + } + } + + if (gb->apu.global_enable) { + ret += MAX_CH_AMP / 10; + } + + if (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_E && (gb->io_registers[GB_IO_RP] & 1)) { + ret += MAX_CH_AMP / 10; + } + + if (!GB_is_cgb(gb)) { + ret /= 4; + } + + ret += rand() % (MAX_CH_AMP / 12); + + return ret; +} + +static void render(GB_gameboy_t *gb) +{ + GB_sample_t output = {0, 0}; + + unrolled for (unsigned i = 0; i < GB_N_CHANNELS; i++) { + double multiplier = CH_STEP; + + if (gb->model <= GB_MODEL_CGB_E) { + if (!GB_apu_is_DAC_enabled(gb, i)) { + gb->apu_output.dac_discharge[i] -= ((double) DAC_DECAY_SPEED) / gb->apu_output.sample_rate; + if (gb->apu_output.dac_discharge[i] < 0) { + multiplier = 0; + gb->apu_output.dac_discharge[i] = 0; + } + else { + multiplier *= smooth(gb->apu_output.dac_discharge[i]); + } + } + else { + gb->apu_output.dac_discharge[i] += ((double) DAC_ATTACK_SPEED) / gb->apu_output.sample_rate; + if (gb->apu_output.dac_discharge[i] > 1) { + gb->apu_output.dac_discharge[i] = 1; + } + else { + multiplier *= smooth(gb->apu_output.dac_discharge[i]); + } + } + } + + if (likely(gb->apu_output.last_update[i] == 0)) { + output.left += gb->apu_output.current_sample[i].left * multiplier; + output.right += gb->apu_output.current_sample[i].right * multiplier; + } + else { + refresh_channel(gb, i, 0); + output.left += (signed long) gb->apu_output.summed_samples[i].left * multiplier + / gb->apu_output.cycles_since_render; + output.right += (signed long) gb->apu_output.summed_samples[i].right * multiplier + / gb->apu_output.cycles_since_render; + gb->apu_output.summed_samples[i] = (GB_sample_t){0, 0}; + } + gb->apu_output.last_update[i] = 0; + } + gb->apu_output.cycles_since_render = 0; + + if (gb->sgb && gb->sgb->intro_animation < GB_SGB_INTRO_ANIMATION_LENGTH) return; + + GB_sample_t filtered_output = gb->apu_output.highpass_mode? + (GB_sample_t) {output.left - gb->apu_output.highpass_diff.left, + output.right - gb->apu_output.highpass_diff.right} : + output; + + switch (gb->apu_output.highpass_mode) { + case GB_HIGHPASS_OFF: + gb->apu_output.highpass_diff = (GB_double_sample_t) {0, 0}; + break; + case GB_HIGHPASS_ACCURATE: + gb->apu_output.highpass_diff = (GB_double_sample_t) + {output.left - filtered_output.left * gb->apu_output.highpass_rate, + output.right - filtered_output.right * gb->apu_output.highpass_rate}; + break; + case GB_HIGHPASS_REMOVE_DC_OFFSET: { + unsigned mask = gb->io_registers[GB_IO_NR51]; + unsigned left_volume = 0; + unsigned right_volume = 0; + unrolled for (unsigned i = GB_N_CHANNELS; i--;) { + if (GB_apu_is_DAC_enabled(gb, i)) { + if (mask & 1) { + left_volume += ((gb->io_registers[GB_IO_NR50] & 7) + 1) * CH_STEP * 0xF; + } + if (mask & 0x10) { + right_volume += (((gb->io_registers[GB_IO_NR50] >> 4) & 7) + 1) * CH_STEP * 0xF; + } + } + mask >>= 1; + } + gb->apu_output.highpass_diff = (GB_double_sample_t) + {left_volume * (1 - gb->apu_output.highpass_rate) + gb->apu_output.highpass_diff.left * gb->apu_output.highpass_rate, + right_volume * (1 - gb->apu_output.highpass_rate) + gb->apu_output.highpass_diff.right * gb->apu_output.highpass_rate}; + + case GB_HIGHPASS_MAX:; + } + + } + + + if (gb->apu_output.interference_volume) { + signed interference_bias = interference(gb); + int16_t interference_sample = (interference_bias - gb->apu_output.interference_highpass); + gb->apu_output.interference_highpass = gb->apu_output.interference_highpass * gb->apu_output.highpass_rate + + (1 - gb->apu_output.highpass_rate) * interference_sample; + interference_bias *= gb->apu_output.interference_volume; + + filtered_output.left = MAX(MIN(filtered_output.left + interference_bias, 0x7FFF), -0x8000); + filtered_output.right = MAX(MIN(filtered_output.right + interference_bias, 0x7FFF), -0x8000); + } + assert(gb->apu_output.sample_callback); + gb->apu_output.sample_callback(gb, &filtered_output); + if (unlikely(gb->apu_output.output_file)) { +#ifdef GB_BIG_ENDIAN + if (gb->apu_output.output_format == GB_AUDIO_FORMAT_WAV) { + filtered_output.left = LE16(filtered_output.left); + filtered_output.right = LE16(filtered_output.right); + } +#endif + if (fwrite(&filtered_output, sizeof(filtered_output), 1, gb->apu_output.output_file) != 1) { + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + gb->apu_output.output_error = errno; + } + } +} + +static void update_square_sample(GB_gameboy_t *gb, unsigned index) +{ + if (gb->apu.square_channels[index].sample_surpressed) { + if (gb->model > GB_MODEL_CGB_E) { + update_sample(gb, index, gb->apu.samples[index], 0); + } + return; + } + + uint8_t duty = gb->io_registers[index == GB_SQUARE_1? GB_IO_NR11 :GB_IO_NR21] >> 6; + update_sample(gb, index, + duties[gb->apu.square_channels[index].current_sample_index + duty * 8]? + gb->apu.square_channels[index].current_volume : 0, + 0); +} + +static inline void update_wave_sample(GB_gameboy_t *gb, unsigned cycles) +{ + if (gb->apu.wave_channel.current_sample_index & 1) { + update_sample(gb, GB_WAVE, + (gb->apu.wave_channel.current_sample_byte & 0xF) >> gb->apu.wave_channel.shift, + cycles); + } + else { + update_sample(gb, GB_WAVE, + (gb->apu.wave_channel.current_sample_byte >> 4) >> gb->apu.wave_channel.shift, + cycles); + } +} + +static void _nrx2_glitch(uint8_t *volume, uint8_t value, uint8_t old_value, uint8_t *countdown, GB_envelope_clock_t *lock) +{ + if (lock->clock) { + *countdown = value & 7; + } + bool should_tick = (value & 7) && !(old_value & 7) && !lock->locked; + bool should_invert = (value & 8) ^ (old_value & 8); + + if ((value & 0xF) == 8 && (old_value & 0xF) == 8 && !lock->locked) { + should_tick = true; + } + + if (should_invert) { + // The weird way and over-the-top way clocks for this counter are connected cause + // some weird ways for it to invert + if (value & 8) { + if (!(old_value & 7) && !lock->locked) { + *volume ^= 0xF; + } + else { + *volume = 0xE - *volume; + *volume &= 0xF; + } + should_tick = false; // Somehow prevents ticking? + } + else { + *volume = 0x10 - *volume; + *volume &= 0xF; + } + } + if (should_tick) { + if (value & 8) { + (*volume)++; + } + else { + (*volume)--; + } + *volume &= 0xF; + } + else if (!(value & 7) && lock->clock) { + // *lock->locked = false; // Excepted from the schematics, but doesn't actually happen on any model? + if (!should_invert) { + if (*volume == 0xF && (value & 8)) { + lock->locked = true; + } + else if (*volume == 0 && !(value & 8)) { + lock->locked = true; + } + } + else if (*volume == 1 && !(value & 8)) { + lock->locked = true; + } + else if (*volume == 0xE && (value & 8)) { + lock->locked = true; + } + lock->clock = false; + } +} + +static void nrx2_glitch(GB_gameboy_t *gb, uint8_t *volume, uint8_t value, uint8_t old_value, uint8_t *countdown, GB_envelope_clock_t *lock) +{ + if (gb->model <= GB_MODEL_CGB_C) { + _nrx2_glitch(volume, 0xFF, old_value, countdown, lock); + _nrx2_glitch(volume, value, 0xFF, countdown, lock); + } + else { + _nrx2_glitch(volume, value, old_value, countdown, lock); + } +} + +static void tick_square_envelope(GB_gameboy_t *gb, enum GB_CHANNELS index) +{ + uint8_t nrx2 = gb->io_registers[index == GB_SQUARE_1? GB_IO_NR12 : GB_IO_NR22]; + + if (gb->apu.square_channels[index].envelope_clock.locked) return; + if (!(nrx2 & 7)) return; + if (gb->cgb_double_speed) { + if (index == GB_SQUARE_1) { + gb->apu.pcm_mask[0] &= gb->apu.square_channels[GB_SQUARE_1].current_volume | 0xF1; + } + else { + gb->apu.pcm_mask[0] &= (gb->apu.square_channels[GB_SQUARE_2].current_volume << 2) | 0x1F; + } + } + + if (nrx2 & 8) { + if (gb->apu.square_channels[index].current_volume < 0xF) { + gb->apu.square_channels[index].current_volume++; + } + else { + gb->apu.square_channels[index].envelope_clock.locked = true; + } + } + else { + if (gb->apu.square_channels[index].current_volume > 0) { + gb->apu.square_channels[index].current_volume--; + } + else { + gb->apu.square_channels[index].envelope_clock.locked = true; + } + } + + if (gb->apu.is_active[index]) { + update_square_sample(gb, index); + } +} + +static void tick_noise_envelope(GB_gameboy_t *gb) +{ + uint8_t nr42 = gb->io_registers[GB_IO_NR42]; + + if (gb->apu.noise_channel.envelope_clock.locked) return; + if (!(nr42 & 7)) return; + + if (gb->cgb_double_speed) { + gb->apu.pcm_mask[0] &= (gb->apu.noise_channel.current_volume << 2) | 0x1F; + } + + if (nr42 & 8) { + if (gb->apu.noise_channel.current_volume < 0xF) { + gb->apu.noise_channel.current_volume++; + } + else { + gb->apu.noise_channel.envelope_clock.locked = true; + } + } + else { + if (gb->apu.noise_channel.current_volume > 0) { + gb->apu.noise_channel.current_volume--; + } + else { + gb->apu.noise_channel.envelope_clock.locked = true; + } + } + + if (gb->apu.is_active[GB_NOISE]) { + update_sample(gb, GB_NOISE, + (gb->apu.noise_channel.lfsr & 1) ? + gb->apu.noise_channel.current_volume : 0, + 0); + } +} + +static void trigger_sweep_calculation(GB_gameboy_t *gb) +{ + if ((gb->io_registers[GB_IO_NR10] & 0x70) && gb->apu.square_sweep_countdown == 7) { + if (gb->io_registers[GB_IO_NR10] & 0x07) { + gb->apu.square_channels[GB_SQUARE_1].sample_length = + gb->apu.sweep_length_addend + gb->apu.shadow_sweep_sample_length + !!(gb->io_registers[GB_IO_NR10] & 0x8); + gb->apu.square_channels[GB_SQUARE_1].sample_length &= 0x7FF; + } + if (gb->apu.channel_1_restart_hold == 0) { + gb->apu.sweep_length_addend = gb->apu.square_channels[GB_SQUARE_1].sample_length; + gb->apu.sweep_length_addend >>= (gb->io_registers[GB_IO_NR10] & 7); + } + + /* Recalculation and overflow check only occurs after a delay */ + gb->apu.square_sweep_calculate_countdown = (gb->io_registers[GB_IO_NR10] & 0x7) * 2 + 5 - gb->apu.lf_div; + if (gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { + // gb->apu.square_sweep_calculate_countdown += 2; + } + gb->apu.enable_zombie_calculate_stepping = false; + gb->apu.unshifted_sweep = !(gb->io_registers[GB_IO_NR10] & 0x7); + gb->apu.square_sweep_countdown = ((gb->io_registers[GB_IO_NR10] >> 4) & 7) ^ 7; + } +} + +void GB_apu_div_event(GB_gameboy_t *gb) +{ + GB_apu_run(gb, true); + if (!gb->apu.global_enable) return; + if (gb->apu.skip_div_event == GB_SKIP_DIV_EVENT_SKIP) { + gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_SKIPPED; + return; + } + if (gb->apu.skip_div_event == GB_SKIP_DIV_EVENT_SKIPPED) { + gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_INACTIVE; + } + else { + gb->apu.div_divider++; + } + + if ((gb->apu.div_divider & 7) == 7) { + unrolled for (unsigned i = GB_SQUARE_2 + 1; i--;) { + if (!gb->apu.square_channels[i].envelope_clock.clock) { + gb->apu.square_channels[i].volume_countdown--; + gb->apu.square_channels[i].volume_countdown &= 7; + } + } + if (!gb->apu.noise_channel.envelope_clock.clock) { + gb->apu.noise_channel.volume_countdown--; + gb->apu.noise_channel.volume_countdown &= 7; + } + } + + unrolled for (unsigned i = GB_SQUARE_2 + 1; i--;) { + if (gb->apu.square_channels[i].envelope_clock.clock) { + tick_square_envelope(gb, i); + gb->apu.square_channels[i].envelope_clock.clock = false; + } + } + + if (gb->apu.noise_channel.envelope_clock.clock) { + tick_noise_envelope(gb); + gb->apu.noise_channel.envelope_clock.clock = false; + } + + if ((gb->apu.div_divider & 1) == 1) { + unrolled for (unsigned i = GB_SQUARE_2 + 1; i--;) { + if (gb->apu.square_channels[i].length_enabled) { + if (gb->apu.square_channels[i].pulse_length) { + if (!--gb->apu.square_channels[i].pulse_length) { + gb->apu.is_active[i] = false; + update_sample(gb, i, 0, 0); + } + } + } + } + + if (gb->apu.wave_channel.length_enabled) { + if (gb->apu.wave_channel.pulse_length) { + if (!--gb->apu.wave_channel.pulse_length) { + if (gb->apu.is_active[GB_WAVE] && gb->model > GB_MODEL_CGB_E) { + if (gb->apu.wave_channel.sample_countdown == 0) { + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (((gb->apu.wave_channel.current_sample_index + 1) & 0xF) >> 1)]; + } + else if (gb->apu.wave_channel.sample_countdown == 9) { + // TODO: wtf? + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START]; + } + } + gb->apu.is_active[GB_WAVE] = false; + update_sample(gb, GB_WAVE, 0, 0); + } + } + } + + if (gb->apu.noise_channel.length_enabled) { + if (gb->apu.noise_channel.pulse_length) { + if (!--gb->apu.noise_channel.pulse_length) { + gb->apu.is_active[GB_NOISE] = false; + update_sample(gb, GB_NOISE, 0, 0); + } + } + } + } + + if ((gb->apu.div_divider & 3) == 3) { + gb->apu.square_sweep_countdown++; + gb->apu.square_sweep_countdown &= 7; + trigger_sweep_calculation(gb); + } +} + +void GB_apu_div_secondary_event(GB_gameboy_t *gb) +{ + GB_apu_run(gb, true); + if (!gb->apu.global_enable) return; + unrolled for (unsigned i = GB_SQUARE_2 + 1; i--;) { + uint8_t nrx2 = gb->io_registers[i == GB_SQUARE_1? GB_IO_NR12 : GB_IO_NR22]; + if (gb->apu.is_active[i] && gb->apu.square_channels[i].volume_countdown == 0) { + gb->apu.square_channels[i].envelope_clock.clock = (gb->apu.square_channels[i].volume_countdown = nrx2 & 7); + } + } + + if (gb->apu.is_active[GB_NOISE] && gb->apu.noise_channel.volume_countdown == 0) { + gb->apu.noise_channel.envelope_clock.clock = (gb->apu.noise_channel.volume_countdown = gb->io_registers[GB_IO_NR42] & 7); + } +} + +static void step_lfsr(GB_gameboy_t *gb, unsigned cycles_offset) +{ + unsigned high_bit_mask = gb->apu.noise_channel.narrow ? 0x4040 : 0x4000; + bool new_high_bit = (gb->apu.noise_channel.lfsr ^ (gb->apu.noise_channel.lfsr >> 1) ^ 1) & 1; + gb->apu.noise_channel.lfsr >>= 1; + + if (new_high_bit) { + gb->apu.noise_channel.lfsr |= high_bit_mask; + } + else { + /* This code is not redundent, it's relevant when switching LFSR widths */ + gb->apu.noise_channel.lfsr &= ~high_bit_mask; + } + + gb->apu.noise_channel.current_lfsr_sample = gb->apu.noise_channel.lfsr & 1; + if (gb->apu.is_active[GB_NOISE]) { + update_sample(gb, GB_NOISE, + gb->apu.noise_channel.current_lfsr_sample ? + gb->apu.noise_channel.current_volume : 0, + cycles_offset); + } +} + +void GB_apu_run(GB_gameboy_t *gb, bool force) +{ + uint32_t clock_rate = GB_get_clock_rate(gb) * 2; + if (!force || + (gb->apu.apu_cycles > 0x1000) || + (gb->apu_output.sample_cycles >= clock_rate) || + (gb->apu.square_sweep_calculate_countdown || gb->apu.channel_1_restart_hold) || + (gb->model <= GB_MODEL_CGB_E && (gb->apu.wave_channel.bugged_read_countdown || (gb->apu.wave_channel.enable && gb->apu.wave_channel.pulsed)))) { + force = true; + } + if (!force) { + return; + } + /* Convert 4MHZ to 2MHz. apu_cycles is always divisable by 4. */ + uint16_t cycles = gb->apu.apu_cycles >> 2; + gb->apu.apu_cycles = 0; + if (!cycles) return; + + if (unlikely(gb->apu.wave_channel.bugged_read_countdown)) { + uint16_t cycles_left = cycles; + while (cycles_left) { + cycles_left--; + if (--gb->apu.wave_channel.bugged_read_countdown == 0) { + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (gb->address_bus & 0xF)]; + if (gb->apu.is_active[GB_WAVE]) { + update_wave_sample(gb, 0); + } + break; + } + } + } + + bool start_ch4 = false; + if (likely(!gb->stopped || GB_is_cgb(gb))) { + if (gb->apu.noise_channel.dmg_delayed_start) { + if (gb->apu.noise_channel.dmg_delayed_start == cycles) { + gb->apu.noise_channel.dmg_delayed_start = 0; + start_ch4 = true; + } + else if (gb->apu.noise_channel.dmg_delayed_start > cycles) { + gb->apu.noise_channel.dmg_delayed_start -= cycles; + } + else { + /* Split it into two */ + cycles -= gb->apu.noise_channel.dmg_delayed_start; + gb->apu.apu_cycles = gb->apu.noise_channel.dmg_delayed_start * 4; + GB_apu_run(gb, true); + } + } + /* To align the square signal to 1MHz */ + gb->apu.lf_div ^= cycles & 1; + gb->apu.noise_channel.alignment += cycles; + + if (gb->apu.square_sweep_calculate_countdown && + (((gb->io_registers[GB_IO_NR10] & 7) || gb->apu.unshifted_sweep) || + gb->apu.square_sweep_calculate_countdown <= 3)) { // Calculation is paused if the lower bits are 0 + if (gb->apu.square_sweep_calculate_countdown > cycles) { + gb->apu.square_sweep_calculate_countdown -= cycles; + } + else { + /* APU bug: sweep frequency is checked after adding the sweep delta twice */ + if (gb->apu.channel_1_restart_hold == 0) { + gb->apu.shadow_sweep_sample_length = gb->apu.square_channels[GB_SQUARE_1].sample_length; + } + if (gb->io_registers[GB_IO_NR10] & 8) { + gb->apu.sweep_length_addend ^= 0x7FF; + } + if (gb->apu.shadow_sweep_sample_length + gb->apu.sweep_length_addend > 0x7FF && !(gb->io_registers[GB_IO_NR10] & 8)) { + gb->apu.is_active[GB_SQUARE_1] = false; + update_sample(gb, GB_SQUARE_1, 0, gb->apu.square_sweep_calculate_countdown - cycles); + } + gb->apu.channel1_completed_addend = gb->apu.sweep_length_addend; + + gb->apu.square_sweep_calculate_countdown = 0; + } + } + + if (gb->apu.channel_1_restart_hold) { + if (gb->apu.channel_1_restart_hold > cycles) { + gb->apu.channel_1_restart_hold -= cycles; + } + else { + gb->apu.channel_1_restart_hold = 0; + } + } + + unrolled for (unsigned i = GB_SQUARE_1; i <= GB_SQUARE_2; i++) { + if (gb->apu.is_active[i]) { + uint16_t cycles_left = cycles; + if (unlikely(gb->apu.square_channels[i].delay)) { + if (gb->apu.square_channels[i].delay < cycles_left) { + gb->apu.square_channels[i].delay = 0; + } + else { + gb->apu.square_channels[i].delay -= cycles_left; + } + } + while (unlikely(cycles_left > gb->apu.square_channels[i].sample_countdown)) { + cycles_left -= gb->apu.square_channels[i].sample_countdown + 1; + gb->apu.square_channels[i].sample_countdown = (gb->apu.square_channels[i].sample_length ^ 0x7FF) * 2 + 1; + gb->apu.square_channels[i].current_sample_index++; + gb->apu.square_channels[i].current_sample_index &= 0x7; + gb->apu.square_channels[i].sample_surpressed = false; + if (cycles_left == 0 && gb->apu.samples[i] == 0) { + gb->apu.pcm_mask[0] &= i == GB_SQUARE_1? 0xF0 : 0x0F; + } + gb->apu.square_channels[i].did_tick = true; + update_square_sample(gb, i); + } + if (cycles_left) { + gb->apu.square_channels[i].sample_countdown -= cycles_left; + } + } + } + + gb->apu.wave_channel.wave_form_just_read = false; + if (gb->apu.is_active[GB_WAVE]) { + uint16_t cycles_left = cycles; + while (unlikely(cycles_left > gb->apu.wave_channel.sample_countdown)) { + cycles_left -= gb->apu.wave_channel.sample_countdown + 1; + gb->apu.wave_channel.sample_countdown = gb->apu.wave_channel.sample_length ^ 0x7FF; + gb->apu.wave_channel.current_sample_index++; + gb->apu.wave_channel.current_sample_index &= 0x1F; + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (gb->apu.wave_channel.current_sample_index >> 1)]; + update_wave_sample(gb, cycles - cycles_left); + gb->apu.wave_channel.wave_form_just_read = true; + } + if (cycles_left) { + gb->apu.wave_channel.sample_countdown -= cycles_left; + gb->apu.wave_channel.wave_form_just_read = false; + } + } + else if (gb->apu.wave_channel.enable && gb->apu.wave_channel.pulsed && gb->model <= GB_MODEL_CGB_E) { + uint16_t cycles_left = cycles; + while (unlikely(cycles_left > gb->apu.wave_channel.sample_countdown)) { + cycles_left -= gb->apu.wave_channel.sample_countdown + 1; + gb->apu.wave_channel.sample_countdown = gb->apu.wave_channel.sample_length ^ 0x7FF; + if (cycles_left) { + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (gb->address_bus & 0xF)]; + } + else { + gb->apu.wave_channel.bugged_read_countdown = 1; + } + } + if (cycles_left) { + gb->apu.wave_channel.sample_countdown -= cycles_left; + } + if (gb->apu.wave_channel.sample_countdown == 0) { + gb->apu.wave_channel.bugged_read_countdown = 2; + } + } + + // The noise channel can step even if inactive on the DMG + if (gb->apu.is_active[GB_NOISE] || !GB_is_cgb(gb)) { + uint16_t cycles_left = cycles; + unsigned divisor = (gb->io_registers[GB_IO_NR43] & 0x07) << 2; + if (!divisor) divisor = 2; + if (gb->apu.noise_channel.counter_countdown == 0) { + gb->apu.noise_channel.counter_countdown = divisor; + } + // This while doesn't get an unlikely because the noise channel steps frequently enough + while (cycles_left >= gb->apu.noise_channel.counter_countdown) { + cycles_left -= gb->apu.noise_channel.counter_countdown; + gb->apu.noise_channel.counter_countdown = divisor + gb->apu.noise_channel.delta; + gb->apu.noise_channel.delta = 0; + bool old_bit = (gb->apu.noise_channel.counter >> (gb->io_registers[GB_IO_NR43] >> 4)) & 1; + gb->apu.noise_channel.counter++; + gb->apu.noise_channel.counter &= 0x3FFF; + bool new_bit = (gb->apu.noise_channel.counter >> (gb->io_registers[GB_IO_NR43] >> 4)) & 1; + + /* Step LFSR */ + if (new_bit && !old_bit) { + if (cycles_left == 0 && gb->apu.samples[GB_NOISE] == 0) { + gb->apu.pcm_mask[1] &= 0x0F; + } + step_lfsr(gb, cycles - cycles_left); + } + } + if (cycles_left) { + gb->apu.noise_channel.counter_countdown -= cycles_left; + gb->apu.noise_channel.countdown_reloaded = false; + } + else { + gb->apu.noise_channel.countdown_reloaded = true; + } + } + } + + if (gb->apu_output.sample_rate) { + gb->apu_output.cycles_since_render += cycles; + + if (gb->apu_output.sample_cycles >= clock_rate) { + gb->apu_output.sample_cycles -= clock_rate; + render(gb); + } + } + if (start_ch4) { + GB_apu_write(gb, GB_IO_NR44, gb->io_registers[GB_IO_NR44] | 0x80); + } +} + +void GB_apu_init(GB_gameboy_t *gb) +{ + memset(&gb->apu, 0, sizeof(gb->apu)); + gb->apu.lf_div = 1; + gb->apu.wave_channel.shift = 4; + /* APU glitch: When turning the APU on while DIV's bit 4 (or 5 in double speed mode) is on, + the first DIV/APU event is skipped. */ + if (gb->div_counter & (gb->cgb_double_speed? 0x2000 : 0x1000)) { + gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_SKIP; + gb->apu.div_divider = 1; + } + gb->apu.square_channels[GB_SQUARE_1].sample_countdown = -1; + gb->apu.square_channels[GB_SQUARE_2].sample_countdown = -1; +} + +uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg) +{ + GB_apu_run(gb, true); + if (reg == GB_IO_NR52) { + uint8_t value = 0; + for (unsigned i = 0; i < GB_N_CHANNELS; i++) { + value >>= 1; + if (gb->apu.is_active[i]) { + value |= 0x8; + } + } + if (gb->apu.global_enable) { + value |= 0x80; + } + value |= 0x70; + return value; + } + + static const char read_mask[GB_IO_WAV_END - GB_IO_NR10 + 1] = { + /* NRX0 NRX1 NRX2 NRX3 NRX4 */ + 0x80, 0x3F, 0x00, 0xFF, 0xBF, // NR1X + 0xFF, 0x3F, 0x00, 0xFF, 0xBF, // NR2X + 0x7F, 0xFF, 0x9F, 0xFF, 0xBF, // NR3X + 0xFF, 0xFF, 0x00, 0x00, 0xBF, // NR4X + 0x00, 0x00, 0x70, 0xFF, 0xFF, // NR5X + + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Unused + // Wave RAM + 0, /* ... */ + }; + + if (reg >= GB_IO_WAV_START && reg <= GB_IO_WAV_END && gb->apu.is_active[GB_WAVE]) { + if (!GB_is_cgb(gb) && !gb->apu.wave_channel.wave_form_just_read) { + return 0xFF; + } + if (gb->model > GB_MODEL_CGB_E) { + return 0xFF; + } + reg = GB_IO_WAV_START + gb->apu.wave_channel.current_sample_index / 2; + } + + return gb->io_registers[reg] | read_mask[reg - GB_IO_NR10]; +} + +static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) +{ + /* + TODO: On revisions older than the CGB-D, this behaves differently when + the counter advanced this exact T-cycle. Also, in these revisions, + it seems that "passive" changes (due to the temporary FF value NR43 + has during writes) behave slightly different from non-passive ones. + */ + uint16_t effective_counter = gb->apu.noise_channel.counter; + /* Ladies and gentlemen, I present you the holy grail glitch of revision detection! */ + switch (gb->model) { + /* Pre CGB revisions are assumed to be like CGB-C, A and 0 for the lack of a better guess. + TODO: It could be verified with audio based test ROMs. */ + case GB_MODEL_CGB_B: + if (effective_counter & 8) { + effective_counter |= 0xE; // Seems to me F under some circumstances? + } + if (effective_counter & 0x80) { + effective_counter |= 0xFF; + } + if (effective_counter & 0x100) { + effective_counter |= 0x1; + } + if (effective_counter & 0x200) { + effective_counter |= 0x2; + } + if (effective_counter & 0x400) { + effective_counter |= 0x4; + } + if (effective_counter & 0x800) { + effective_counter |= 0x408; // TODO: Only my CGB-B does that! Others behave like C! + } + if (effective_counter & 0x1000) { + effective_counter |= 0x10; + } + if (effective_counter & 0x2000) { + effective_counter |= 0x20; + } + break; + case GB_MODEL_DMG_B: + case GB_MODEL_MGB: + case GB_MODEL_SGB_NTSC: + case GB_MODEL_SGB_PAL: + case GB_MODEL_SGB_NTSC_NO_SFC: + case GB_MODEL_SGB_PAL_NO_SFC: + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_C: + if (effective_counter & 8) { + effective_counter |= 0xE; // Sometimes F on some instances + } + if (effective_counter & 0x80) { + effective_counter |= 0xFF; + } + if (effective_counter & 0x100) { + effective_counter |= 0x1; + } + if (effective_counter & 0x200) { + effective_counter |= 0x2; + } + if (effective_counter & 0x400) { + effective_counter |= 0x4; + } + if (effective_counter & 0x800) { + if ((gb->io_registers[GB_IO_NR43] & 8)) { + effective_counter |= 0x400; + } + effective_counter |= 0x8; + } + if (effective_counter & 0x1000) { + effective_counter |= 0x10; + } + if (effective_counter & 0x2000) { + effective_counter |= 0x20; + } + break; + case GB_MODEL_CGB_D: + if (effective_counter & ((gb->io_registers[GB_IO_NR43] & 8)? 0x40 : 0x80)) { // This is so weird + effective_counter |= 0xFF; + } + if (effective_counter & 0x100) { + effective_counter |= 0x1; + } + if (effective_counter & 0x200) { + effective_counter |= 0x2; + } + if (effective_counter & 0x400) { + effective_counter |= 0x4; + } + if (effective_counter & 0x800) { + effective_counter |= 0x8; + } + if (effective_counter & 0x1000) { + effective_counter |= 0x10; + } + break; + case GB_MODEL_CGB_E: + if (effective_counter & ((gb->io_registers[GB_IO_NR43] & 8)? 0x40 : 0x80)) { // This is so weird + effective_counter |= 0xFF; + } + if (effective_counter & 0x1000) { + effective_counter |= 0x10; + } + break; + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + /* TODO: AGBs are not affected, but AGSes are. They don't seem to follow a simple + pattern like the other revisions. */ + /* For the most part, AGS seems to do: + 0x20 -> 0xA0 + 0x200 -> 0xA00 + 0x1000 -> 0x1010, but only if wide + */ + break; + } + return effective_counter; +} + +void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) +{ + GB_apu_run(gb, true); + if (!gb->apu.global_enable && reg != GB_IO_NR52 && reg < GB_IO_WAV_START && (GB_is_cgb(gb) || + ( + reg != GB_IO_NR11 && + reg != GB_IO_NR21 && + reg != GB_IO_NR31 && + reg != GB_IO_NR41 + ) + )) { + return; + } + + if (reg >= GB_IO_WAV_START && reg <= GB_IO_WAV_END && gb->apu.is_active[GB_WAVE]) { + if ((!GB_is_cgb(gb) && !gb->apu.wave_channel.wave_form_just_read) || gb->model > GB_MODEL_CGB_E) { + return; + } + reg = GB_IO_WAV_START + gb->apu.wave_channel.current_sample_index / 2; + } + + /* Todo: this can and should be rewritten with a function table. */ + switch (reg) { + /* Globals */ + case GB_IO_NR50: + case GB_IO_NR51: + gb->io_registers[reg] = value; + /* These registers affect the output of all 4 channels (but not the output of the PCM registers).*/ + /* We call update_samples with the current value so the APU output is updated with the new outputs */ + for (unsigned i = GB_N_CHANNELS; i--;) { + int8_t sample = gb->apu.samples[i]; + gb->apu.samples[i] = 0x10; // Invalidate to force update + update_sample(gb, i, sample, 0); + } + break; + case GB_IO_NR52: { + + uint8_t old_pulse_lengths[] = { + gb->apu.square_channels[0].pulse_length, + gb->apu.square_channels[1].pulse_length, + gb->apu.wave_channel.pulse_length, + gb->apu.noise_channel.pulse_length + }; + if ((value & 0x80) && !gb->apu.global_enable) { + GB_apu_init(gb); + gb->apu.global_enable = true; + } + else if (!(value & 0x80) && gb->apu.global_enable) { + for (unsigned i = GB_N_CHANNELS; i--;) { + update_sample(gb, i, 0, 0); + } + memset(&gb->apu, 0, sizeof(gb->apu)); + memset(gb->io_registers + GB_IO_NR10, 0, GB_IO_WAV_START - GB_IO_NR10); + gb->apu.global_enable = false; + } + + if (!GB_is_cgb(gb) && (value & 0x80)) { + gb->apu.square_channels[0].pulse_length = old_pulse_lengths[0]; + gb->apu.square_channels[1].pulse_length = old_pulse_lengths[1]; + gb->apu.wave_channel.pulse_length = old_pulse_lengths[2]; + gb->apu.noise_channel.pulse_length = old_pulse_lengths[3]; + } + } + break; + + /* Square channels */ + case GB_IO_NR10:{ + bool old_negate = gb->io_registers[GB_IO_NR10] & 8; + gb->io_registers[GB_IO_NR10] = value; + if (gb->apu.shadow_sweep_sample_length + gb->apu.channel1_completed_addend + old_negate > 0x7FF && + !(value & 8)) { + gb->apu.is_active[GB_SQUARE_1] = false; + update_sample(gb, GB_SQUARE_1, 0, 0); + } + trigger_sweep_calculation(gb); + break; + } + + case GB_IO_NR11: + case GB_IO_NR21: { + unsigned index = reg == GB_IO_NR21? GB_SQUARE_2: GB_SQUARE_1; + gb->apu.square_channels[index].pulse_length = (0x40 - (value & 0x3F)); + if (!gb->apu.global_enable) { + value &= 0x3F; + } + break; + } + + case GB_IO_NR12: + case GB_IO_NR22: { + unsigned index = reg == GB_IO_NR22? GB_SQUARE_2: GB_SQUARE_1; + if ((value & 0xF8) == 0) { + /* This disables the DAC */ + gb->io_registers[reg] = value; + gb->apu.is_active[index] = false; + update_sample(gb, index, 0, 0); + } + else if (gb->apu.is_active[index]) { + nrx2_glitch(gb, &gb->apu.square_channels[index].current_volume, + value, gb->io_registers[reg], &gb->apu.square_channels[index].volume_countdown, + &gb->apu.square_channels[index].envelope_clock); + update_square_sample(gb, index); + } + + break; + } + + case GB_IO_NR13: + case GB_IO_NR23: { + unsigned index = reg == GB_IO_NR23? GB_SQUARE_2: GB_SQUARE_1; + gb->apu.square_channels[index].sample_length &= ~0xFF; + gb->apu.square_channels[index].sample_length |= value & 0xFF; + break; + } + + case GB_IO_NR14: + case GB_IO_NR24: { + unsigned index = reg == GB_IO_NR24? GB_SQUARE_2: GB_SQUARE_1; + bool was_active = gb->apu.is_active[index]; + /* TODO: When the sample length changes right before being updated from ≥$700 to <$700, the countdown + should change to the old length, but the current sample should not change. Because our write + timing isn't accurate to the T-cycle, we hack around it by stepping the sample index backwards. */ + if ((value & 0x80) == 0 && gb->apu.is_active[index] && (gb->io_registers[reg] & 0x7) == 7 && (value & 7) != 7) { + /* On an AGB, as well as on CGB C and earlier (TODO: Tested: 0, B and C), it behaves slightly different on + double speed. */ + if (gb->model == GB_MODEL_CGB_E || gb->model == GB_MODEL_CGB_D || gb->apu.square_channels[index].sample_countdown & 1) { + if (gb->apu.square_channels[index].did_tick && + gb->apu.square_channels[index].sample_countdown >> 1 == (gb->apu.square_channels[index].sample_length ^ 0x7FF)) { + gb->apu.square_channels[index].current_sample_index--; + gb->apu.square_channels[index].current_sample_index &= 7; + gb->apu.square_channels[index].sample_surpressed = false; + } + } + } + + uint16_t old_sample_length = gb->apu.square_channels[index].sample_length; + gb->apu.square_channels[index].sample_length &= 0xFF; + gb->apu.square_channels[index].sample_length |= (value & 7) << 8; + if (value & 0x80) { + /* Current sample index remains unchanged when restarting channels 1 or 2. It is only reset by + turning the APU off. */ + gb->apu.square_channels[index].envelope_clock.locked = false; + gb->apu.square_channels[index].envelope_clock.clock = false; + gb->apu.square_channels[index].did_tick = false; + bool force_unsurpressed = false; + if (!gb->apu.is_active[index]) { + if (gb->model == GB_MODEL_CGB_E || gb->model == GB_MODEL_CGB_D) { + if (!(value & 4) && !(((gb->apu.square_channels[index].sample_countdown - gb->apu.square_channels[index].delay) / 2) & 0x400)) { + gb->apu.square_channels[index].current_sample_index++; + gb->apu.square_channels[index].current_sample_index &= 0x7; + force_unsurpressed = true; + } + } + gb->apu.square_channels[index].delay = 6 - gb->apu.lf_div; + gb->apu.square_channels[index].sample_countdown = (gb->apu.square_channels[index].sample_length ^ 0x7FF) * 2 + gb->apu.square_channels[index].delay; + if (gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { + gb->apu.square_channels[index].sample_countdown += 2; + gb->apu.square_channels[index].delay += 2; + } + } + else { + unsigned extra_delay = 0; + if (gb->model == GB_MODEL_CGB_E || gb->model == GB_MODEL_CGB_D) { + if (!(value & 4) && !(((gb->apu.square_channels[index].sample_countdown - 1 - gb->apu.square_channels[index].delay) / 2) & 0x400)) { + gb->apu.square_channels[index].current_sample_index++; + gb->apu.square_channels[index].current_sample_index &= 0x7; + gb->apu.square_channels[index].sample_surpressed = false; + } + /* Todo: verify with the schematics what's going on in here */ + else if (gb->apu.square_channels[index].sample_length == 0x7FF && + old_sample_length != 0x7FF && + (gb->apu.square_channels[index].sample_surpressed)) { + extra_delay += 2; + } + } + /* Timing quirk: if already active, sound starts 2 (2MHz) ticks earlier.*/ + gb->apu.square_channels[index].delay = 4 - gb->apu.lf_div + extra_delay; + gb->apu.square_channels[index].sample_countdown = (gb->apu.square_channels[index].sample_length ^ 0x7FF) * 2 + gb->apu.square_channels[index].delay; + if (gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { + gb->apu.square_channels[index].sample_countdown += 2; + gb->apu.square_channels[index].delay += 2; + } + } + gb->apu.square_channels[index].current_volume = gb->io_registers[index == GB_SQUARE_1 ? GB_IO_NR12 : GB_IO_NR22] >> 4; + /* The volume changes caused by NRX4 sound start take effect instantly (i.e. the effect the previously + started sound). The playback itself is not instant which is why we don't update the sample for other + cases. */ + if (gb->apu.is_active[index]) { + update_square_sample(gb, index); + } + + gb->apu.square_channels[index].volume_countdown = gb->io_registers[index == GB_SQUARE_1 ? GB_IO_NR12 : GB_IO_NR22] & 7; + + if ((gb->io_registers[index == GB_SQUARE_1 ? GB_IO_NR12 : GB_IO_NR22] & 0xF8) != 0 && !gb->apu.is_active[index]) { + gb->apu.is_active[index] = true; + update_sample(gb, index, 0, 0); + gb->apu.square_channels[index].sample_surpressed = true && !force_unsurpressed; + } + if (gb->apu.square_channels[index].pulse_length == 0) { + gb->apu.square_channels[index].pulse_length = 0x40; + gb->apu.square_channels[index].length_enabled = false; + } + + if (index == GB_SQUARE_1) { + gb->apu.shadow_sweep_sample_length = 0; + gb->apu.channel1_completed_addend = 0; + if (gb->io_registers[GB_IO_NR10] & 7) { + /* APU bug: if shift is nonzero, overflow check also occurs on trigger */ + gb->apu.square_sweep_calculate_countdown = (gb->io_registers[GB_IO_NR10] & 0x7) * 2 + 5 - gb->apu.lf_div; + if (gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { + /* TODO: I used to think this is correct, but it caused several regressions. + More research is needed to figure how calculation time is different + in models prior to CGB-D */ + // gb->apu.square_sweep_calculate_countdown += 2; + } + gb->apu.enable_zombie_calculate_stepping = false; + gb->apu.unshifted_sweep = false; + if (!was_active) { + gb->apu.square_sweep_calculate_countdown += 2; + } + gb->apu.sweep_length_addend = gb->apu.square_channels[GB_SQUARE_1].sample_length; + gb->apu.sweep_length_addend >>= (gb->io_registers[GB_IO_NR10] & 7); + } + else { + gb->apu.sweep_length_addend = 0; + } + gb->apu.channel_1_restart_hold = 2 - gb->apu.lf_div + (GB_is_cgb(gb) && gb->model != GB_MODEL_CGB_D) * 2; + /* + if (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { + // TODO: This if makes channel_1_sweep_restart_2 fail on CGB-C mode + gb->apu.channel_1_restart_hold += 2; + }*/ + gb->apu.square_sweep_countdown = ((gb->io_registers[GB_IO_NR10] >> 4) & 7) ^ 7; + } + } + + /* APU glitch - if length is enabled while the DIV-divider's LSB is 1, tick the length once. */ + if (((value & 0x40) || (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_B)) && // Current value is irrelevant on CGB-B and older + !gb->apu.square_channels[index].length_enabled && + (gb->apu.div_divider & 1) && + gb->apu.square_channels[index].pulse_length) { + gb->apu.square_channels[index].pulse_length--; + if (gb->apu.square_channels[index].pulse_length == 0) { + if (value & 0x80) { + gb->apu.square_channels[index].pulse_length = 0x3F; + } + else { + gb->apu.is_active[index] = false; + update_sample(gb, index, 0, 0); + } + } + } + gb->apu.square_channels[index].length_enabled = value & 0x40; + break; + } + + /* Wave channel */ + case GB_IO_NR30: + gb->apu.wave_channel.enable = value & 0x80; + if (!gb->apu.wave_channel.enable) { + gb->apu.wave_channel.pulsed = false; + if (gb->apu.is_active[GB_WAVE]) { + // Todo: I assume this happens on pre-CGB models; test this with an audible test + if (gb->apu.wave_channel.sample_countdown == 0 && gb->model <= GB_MODEL_CGB_E) { + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START + (gb->pc & 0xF)]; + } + else if (gb->apu.wave_channel.wave_form_just_read && gb->model <= GB_MODEL_CGB_C) { + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START + (GB_IO_NR30 & 0xF)]; + } + } + gb->apu.is_active[GB_WAVE] = false; + update_sample(gb, GB_WAVE, 0, 0); + } + break; + case GB_IO_NR31: + gb->apu.wave_channel.pulse_length = (0x100 - value); + break; + case GB_IO_NR32: + gb->apu.wave_channel.shift = (const uint8_t[]){4, 0, 1, 2}[(value >> 5) & 3]; + if (gb->apu.is_active[GB_WAVE]) { + update_wave_sample(gb, 0); + } + break; + case GB_IO_NR33: + gb->apu.wave_channel.sample_length &= ~0xFF; + gb->apu.wave_channel.sample_length |= value & 0xFF; + break; + case GB_IO_NR34: + gb->apu.wave_channel.sample_length &= 0xFF; + gb->apu.wave_channel.sample_length |= (value & 7) << 8; + if (value & 0x80) { + gb->apu.wave_channel.pulsed = true; + /* DMG bug: wave RAM gets corrupted if the channel is retriggerred 1 cycle before the APU + reads from it. */ + if (!GB_is_cgb(gb) && + gb->apu.is_active[GB_WAVE] && + gb->apu.wave_channel.sample_countdown == 0) { + unsigned offset = ((gb->apu.wave_channel.current_sample_index + 1) >> 1) & 0xF; + + /* This glitch varies between models and even specific instances: + DMG-B: Most of them behave as emulated. A few behave differently. + SGB: As far as I know, all tested instances behave as emulated. + MGB, SGB2: Most instances behave non-deterministically, a few behave as emulated. + + For DMG-B emulation I emulate the most common behavior, which blargg's tests expect (not my own DMG-B, which fails it) + For MGB emulation, I emulate my Game Boy Light, which happens to be deterministic. + + Additionally, I believe DMGs, including those we behave differently than emulated, + are all deterministic. */ + if (offset < 4 && gb->model != GB_MODEL_MGB) { + gb->io_registers[GB_IO_WAV_START] = gb->io_registers[GB_IO_WAV_START + offset]; + } + else { + memcpy(gb->io_registers + GB_IO_WAV_START, + gb->io_registers + GB_IO_WAV_START + (offset & ~3), + 4); + } + } + gb->apu.wave_channel.current_sample_index = 0; + if (gb->apu.is_active[GB_WAVE] && gb->apu.wave_channel.sample_countdown == 0) { + gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START]; + } + if (gb->apu.wave_channel.enable) { + gb->apu.is_active[GB_WAVE] = true; + update_sample(gb, GB_WAVE, + (gb->apu.wave_channel.current_sample_byte >> 4) >> gb->apu.wave_channel.shift, + 0); + } + gb->apu.wave_channel.sample_countdown = (gb->apu.wave_channel.sample_length ^ 0x7FF) + 3; + if (gb->apu.wave_channel.pulse_length == 0) { + gb->apu.wave_channel.pulse_length = 0x100; + gb->apu.wave_channel.length_enabled = false; + } + /* Note that we don't change the sample just yet! This was verified on hardware. */ + } + + /* APU glitch - if length is enabled while the DIV-divider's LSB is 1, tick the length once. */ + if (((value & 0x40) || (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_B)) && // Current value is irrelevant on CGB-B and older + !gb->apu.wave_channel.length_enabled && + (gb->apu.div_divider & 1) && + gb->apu.wave_channel.pulse_length) { + gb->apu.wave_channel.pulse_length--; + if (gb->apu.wave_channel.pulse_length == 0) { + if (value & 0x80) { + gb->apu.wave_channel.pulse_length = 0xFF; + } + else { + gb->apu.is_active[GB_WAVE] = false; + update_sample(gb, GB_WAVE, 0, 0); + } + } + } + gb->apu.wave_channel.length_enabled = value & 0x40; + + break; + + /* Noise Channel */ + + case GB_IO_NR41: { + gb->apu.noise_channel.pulse_length = (0x40 - (value & 0x3F)); + break; + } + + case GB_IO_NR42: { + if ((value & 0xF8) == 0) { + /* This disables the DAC */ + gb->io_registers[reg] = value; + gb->apu.is_active[GB_NOISE] = false; + update_sample(gb, GB_NOISE, 0, 0); + } + else if (gb->apu.is_active[GB_NOISE]) { + nrx2_glitch(gb, &gb->apu.noise_channel.current_volume, + value, gb->io_registers[reg], &gb->apu.noise_channel.volume_countdown, + &gb->apu.noise_channel.envelope_clock); + update_sample(gb, GB_NOISE, + gb->apu.noise_channel.current_lfsr_sample ? + gb->apu.noise_channel.current_volume : 0, + 0); + } + break; + } + + case GB_IO_NR43: { + gb->apu.noise_channel.narrow = value & 8; + uint16_t effective_counter = effective_channel4_counter(gb); + bool old_bit = (effective_counter >> (gb->io_registers[GB_IO_NR43] >> 4)) & 1; + gb->io_registers[GB_IO_NR43] = value; + bool new_bit = (effective_counter >> (gb->io_registers[GB_IO_NR43] >> 4)) & 1; + if (gb->apu.noise_channel.countdown_reloaded) { + unsigned divisor = (gb->io_registers[GB_IO_NR43] & 0x07) << 2; + if (!divisor) divisor = 2; + if (gb->model > GB_MODEL_CGB_C) { + gb->apu.noise_channel.counter_countdown = + divisor + (divisor == 2? 0 : (const uint8_t[]){2, 1, 0, 3}[(gb->apu.noise_channel.alignment) & 3]); + } + else { + gb->apu.noise_channel.counter_countdown = + divisor + (divisor == 2? 0 : (const uint8_t[]){2, 1, 4, 3}[(gb->apu.noise_channel.alignment) & 3]); + } + gb->apu.noise_channel.delta = 0; + } + /* Step LFSR */ + if (new_bit && (!old_bit || gb->model <= GB_MODEL_CGB_C)) { + if (gb->model <= GB_MODEL_CGB_C) { + bool previous_narrow = gb->apu.noise_channel.narrow; + gb->apu.noise_channel.narrow = true; + step_lfsr(gb, 0); + gb->apu.noise_channel.narrow = previous_narrow; + } + else { + step_lfsr(gb, 0); + } + } + break; + } + + case GB_IO_NR44: { + if (value & 0x80) { + gb->apu.noise_channel.envelope_clock.locked = false; + gb->apu.noise_channel.envelope_clock.clock = false; + if (!GB_is_cgb(gb) && (gb->apu.noise_channel.alignment & 3) != 0) { + gb->apu.noise_channel.dmg_delayed_start = 6; + } + else { + unsigned divisor = (gb->io_registers[GB_IO_NR43] & 0x07) << 2; + if (!divisor) divisor = 2; + gb->apu.noise_channel.delta = 0; + gb->apu.noise_channel.counter_countdown = divisor + 4; + if (divisor == 2) { + if (gb->model <= GB_MODEL_CGB_C) { + gb->apu.noise_channel.counter_countdown += gb->apu.lf_div; + if (!gb->cgb_double_speed) { + gb->apu.noise_channel.counter_countdown -= 1; + } + } + else { + gb->apu.noise_channel.counter_countdown += 1 - gb->apu.lf_div; + } + } + else { + if (gb->model <= GB_MODEL_CGB_C) { + gb->apu.noise_channel.counter_countdown += (const uint8_t[]){2, 1, 4, 3}[gb->apu.noise_channel.alignment & 3]; + } + else { + gb->apu.noise_channel.counter_countdown += (const uint8_t[]){2, 1, 0, 3}[gb->apu.noise_channel.alignment & 3]; + } + if (((gb->apu.noise_channel.alignment + 1) & 3) < 2) { + if ((gb->io_registers[GB_IO_NR43] & 0x07) == 1) { + gb->apu.noise_channel.counter_countdown -= 2; + gb->apu.noise_channel.delta = 2; + } + else { + gb->apu.noise_channel.counter_countdown -= 4; + } + } + } + + /* TODO: These are quite weird. Verify further */ + if (gb->model <= GB_MODEL_CGB_C) { + if (gb->cgb_double_speed) { + if (!(gb->io_registers[GB_IO_NR43] & 0xF0) && (gb->io_registers[GB_IO_NR43] & 0x07)) { + gb->apu.noise_channel.counter_countdown -= 1; + } + else if ((gb->io_registers[GB_IO_NR43] & 0xF0) && !(gb->io_registers[GB_IO_NR43] & 0x07)) { + gb->apu.noise_channel.counter_countdown += 1; + } + } + else { + gb->apu.noise_channel.counter_countdown -= 2; + } + } + + gb->apu.noise_channel.current_volume = gb->io_registers[GB_IO_NR42] >> 4; + + /* The volume changes caused by NRX4 sound start take effect instantly (i.e. the effect the previously + started sound). The playback itself is not instant which is why we don't update the sample for other + cases. */ + if (gb->apu.is_active[GB_NOISE]) { + update_sample(gb, GB_NOISE, + gb->apu.noise_channel.current_lfsr_sample ? + gb->apu.noise_channel.current_volume : 0, + 0); + } + gb->apu.noise_channel.lfsr = 0; + gb->apu.noise_channel.current_lfsr_sample = false; + gb->apu.noise_channel.volume_countdown = gb->io_registers[GB_IO_NR42] & 7; + + if (!gb->apu.is_active[GB_NOISE] && (gb->io_registers[GB_IO_NR42] & 0xF8) != 0) { + gb->apu.is_active[GB_NOISE] = true; + update_sample(gb, GB_NOISE, 0, 0); + } + + if (gb->apu.noise_channel.pulse_length == 0) { + gb->apu.noise_channel.pulse_length = 0x40; + gb->apu.noise_channel.length_enabled = false; + } + } + } + + /* APU glitch - if length is enabled while the DIV-divider's LSB is 1, tick the length once. */ + if ((value & 0x40) && + !gb->apu.noise_channel.length_enabled && + (gb->apu.div_divider & 1) && + gb->apu.noise_channel.pulse_length) { + gb->apu.noise_channel.pulse_length--; + if (gb->apu.noise_channel.pulse_length == 0) { + if (value & 0x80) { + gb->apu.noise_channel.pulse_length = 0x3F; + } + else { + gb->apu.is_active[GB_NOISE] = false; + update_sample(gb, GB_NOISE, 0, 0); + } + } + } + gb->apu.noise_channel.length_enabled = value & 0x40; + break; + } + } + gb->io_registers[reg] = value; +} + +void GB_set_sample_rate(GB_gameboy_t *gb, unsigned sample_rate) +{ + + gb->apu_output.sample_rate = sample_rate; + if (sample_rate) { + gb->apu_output.highpass_rate = pow(0.999958, GB_get_clock_rate(gb) / (double)sample_rate); + } +} + +void GB_set_sample_rate_by_clocks(GB_gameboy_t *gb, double cycles_per_sample) +{ + + if (cycles_per_sample == 0) { + GB_set_sample_rate(gb, 0); + return; + } + gb->apu_output.sample_rate = GB_get_clock_rate(gb) / cycles_per_sample * 2; + gb->apu_output.highpass_rate = pow(0.999958, cycles_per_sample); +} + +unsigned GB_get_sample_rate(GB_gameboy_t *gb) +{ + return gb->apu_output.sample_rate; +} + +void GB_apu_set_sample_callback(GB_gameboy_t *gb, GB_sample_callback_t callback) +{ + gb->apu_output.sample_callback = callback; +} + +void GB_set_highpass_filter_mode(GB_gameboy_t *gb, GB_highpass_mode_t mode) +{ + gb->apu_output.highpass_mode = mode; +} + +void GB_set_interference_volume(GB_gameboy_t *gb, double volume) +{ + gb->apu_output.interference_volume = volume; +} + +typedef struct __attribute__((packed)) { + uint32_t format_chunk; // = BE32('FORM') + uint32_t size; // = BE32(file size - 8) + uint32_t format; // = BE32('AIFC') + + uint32_t fver_chunk; // = BE32('FVER') + uint32_t fver_size; // = BE32(4) + uint32_t fver; + + uint32_t comm_chunk; // = BE32('COMM') + uint32_t comm_size; // = BE32(0x18) + + uint16_t channels; // = BE16(2) + uint32_t samples_per_channel; // = BE32(total number of samples / 2) + uint16_t bit_depth; // = BE16(16) + uint16_t frequency_exponent; + uint64_t frequency_significand; + uint32_t compression_type; // = 'NONE' (BE) or 'twos' (LE) + uint16_t compression_name; // = 0 + + uint32_t ssnd_chunk; // = BE32('SSND') + uint32_t ssnd_size; // = BE32(length of samples - 8) + uint32_t ssnd_offset; // = 0 + uint32_t ssnd_block; // = 0 +} aiff_header_t; + +typedef struct __attribute__((packed)) { + uint32_t marker; // = BE32('RIFF') + uint32_t size; // = LE32(file size - 8) + uint32_t type; // = BE32('WAVE') + + uint32_t fmt_chunk; // = BE32('fmt ') + uint32_t fmt_size; // = LE16(16) + uint16_t format; // = LE16(1) + uint16_t channels; // = LE16(2) + uint32_t sample_rate; // = LE32(sample_rate) + uint32_t byte_rate; // = LE32(sample_rate * 4) + uint16_t frame_size; // = LE32(4) + uint16_t bit_depth; // = LE16(16) + + uint32_t data_chunk; // = BE32('data') + uint32_t data_size; // = LE32(length of samples) +} wav_header_t; + + +int GB_start_audio_recording(GB_gameboy_t *gb, const char *path, GB_audio_format_t format) +{ + if (gb->apu_output.sample_rate == 0) { + return EINVAL; + } + + if (gb->apu_output.output_file) { + GB_stop_audio_recording(gb); + } + gb->apu_output.output_file = fopen(path, "wb"); + if (!gb->apu_output.output_file) return errno; + + gb->apu_output.output_format = format; + switch (format) { + case GB_AUDIO_FORMAT_RAW: + return 0; + case GB_AUDIO_FORMAT_AIFF: { + aiff_header_t header = {0,}; + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + return errno; + } + return 0; + } + case GB_AUDIO_FORMAT_WAV: { + wav_header_t header = {0,}; + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + return errno; + } + return 0; + } + default: + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + return EINVAL; + } +} +int GB_stop_audio_recording(GB_gameboy_t *gb) +{ + if (!gb->apu_output.output_file) { + int ret = gb->apu_output.output_error ?: -1; + gb->apu_output.output_error = 0; + return ret; + } + gb->apu_output.output_error = 0; + switch (gb->apu_output.output_format) { + case GB_AUDIO_FORMAT_RAW: + break; + case GB_AUDIO_FORMAT_AIFF: { + size_t file_size = ftell(gb->apu_output.output_file); + size_t frames = (file_size - sizeof(aiff_header_t)) / sizeof(GB_sample_t); + aiff_header_t header = { + .format_chunk = BE32('FORM'), + .size = BE32(file_size - 8), + .format = BE32('AIFC'), + + .fver_chunk = BE32('FVER'), + .fver_size = BE32(4), + .fver = BE32(0xA2805140), + + .comm_chunk = BE32('COMM'), + .comm_size = BE32(0x18), + .channels = BE16(2), + .samples_per_channel = BE32(frames), + .bit_depth = BE16(16), +#ifdef GB_BIG_ENDIAN + .compression_type = 'NONE', +#else + .compression_type = 'twos', +#endif + .compression_name = 0, + .ssnd_chunk = BE32('SSND'), + .ssnd_size = BE32(frames * sizeof(GB_sample_t) - 8), + .ssnd_offset = 0, + .ssnd_block = 0, + }; + + uint64_t significand = gb->apu_output.sample_rate; + uint16_t exponent = 0x403E; + while ((int64_t)significand > 0) { + significand <<= 1; + exponent--; + } + header.frequency_exponent = BE16(exponent); + header.frequency_significand = BE64(significand); + + fseek(gb->apu_output.output_file, 0, SEEK_SET); + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + gb->apu_output.output_error = errno; + } + break; + } + case GB_AUDIO_FORMAT_WAV: { + size_t file_size = ftell(gb->apu_output.output_file); + size_t frames = (file_size - sizeof(wav_header_t)) / sizeof(GB_sample_t); + wav_header_t header = { + .marker = BE32('RIFF'), + .size = LE32(file_size - 8), + .type = BE32('WAVE'), + + .fmt_chunk = BE32('fmt '), + .fmt_size = LE16(16), + .format = LE16(1), + .channels = LE16(2), + .sample_rate = LE32(gb->apu_output.sample_rate), + .byte_rate = LE32(gb->apu_output.sample_rate * 4), + .frame_size = LE32(4), + .bit_depth = LE16(16), + + .data_chunk = BE32('data'), + .data_size = LE32(frames * sizeof(GB_sample_t)), + }; + + fseek(gb->apu_output.output_file, 0, SEEK_SET); + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + gb->apu_output.output_error = errno; + } + break; + } + } + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + + int ret = gb->apu_output.output_error; + gb->apu_output.output_error = 0; + return ret; +} diff --git a/thirdparty/SameBoy-old/Core/apu.h b/thirdparty/SameBoy-old/Core/apu.h new file mode 100644 index 000000000..5cbfbf2f9 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/apu.h @@ -0,0 +1,196 @@ +#ifndef apu_h +#define apu_h +#include +#include +#include +#include +#include "defs.h" + +#ifdef GB_INTERNAL +/* Speed = 1 / Length (in seconds) */ +#define DAC_DECAY_SPEED 20000 +#define DAC_ATTACK_SPEED 20000 + + +/* Divides nicely and never overflows with 4 channels and 8 (1-8) volume levels */ +#ifdef WIIU +/* Todo: Remove this hack once https://github.com/libretro/RetroArch/issues/6252 is fixed*/ +#define MAX_CH_AMP (0xFF0 / 2) +#else +#define MAX_CH_AMP 0xFF0 +#endif +#define CH_STEP (MAX_CH_AMP/0xF/8) +#endif + + + +/* APU ticks are 2MHz, triggered by an internal APU clock. */ + +typedef struct +{ + int16_t left; + int16_t right; +} GB_sample_t; + +typedef struct +{ + double left; + double right; +} GB_double_sample_t; + +enum GB_CHANNELS { + GB_SQUARE_1, + GB_SQUARE_2, + GB_WAVE, + GB_NOISE, + GB_N_CHANNELS +}; + +typedef struct +{ + bool locked:1; + bool clock:1; // Represents FOSY on channel 4 + unsigned padding:6; +} GB_envelope_clock_t; + +typedef void (*GB_sample_callback_t)(GB_gameboy_t *gb, GB_sample_t *sample); + +typedef struct +{ + bool global_enable; + uint16_t apu_cycles; + + uint8_t samples[GB_N_CHANNELS]; + bool is_active[GB_N_CHANNELS]; + + uint8_t div_divider; // The DIV register ticks the APU at 512Hz, but is then divided + // once more to generate 128Hz and 64Hz clocks + + uint8_t lf_div; // The APU runs in 2MHz, but channels 1, 2 and 4 run in 1MHZ so we divide + // need to divide the signal. + + uint8_t square_sweep_countdown; // In 128Hz + uint8_t square_sweep_calculate_countdown; // In 2 MHz + uint16_t sweep_length_addend; + uint16_t shadow_sweep_sample_length; + bool unshifted_sweep; + bool enable_zombie_calculate_stepping; + + uint8_t channel_1_restart_hold; + uint16_t channel1_completed_addend; + struct { + uint16_t pulse_length; // Reloaded from NRX1 (xorred), in 256Hz DIV ticks + uint8_t current_volume; // Reloaded from NRX2 + uint8_t volume_countdown; // Reloaded from NRX2 + uint8_t current_sample_index; + bool sample_surpressed; + + uint16_t sample_countdown; // in APU ticks (Reloaded from sample_length, xorred $7FF) + uint16_t sample_length; // From NRX3, NRX4, in APU ticks + bool length_enabled; // NRX4 + GB_envelope_clock_t envelope_clock; + uint8_t delay; // Hack for CGB D/E phantom step due to how sample_countdown is implemented in SameBoy + bool did_tick; + } square_channels[2]; + + struct { + bool enable; // NR30 + uint16_t pulse_length; // Reloaded from NR31 (xorred), in 256Hz DIV ticks + uint8_t shift; // NR32 + uint16_t sample_length; // NR33, NR34, in APU ticks + bool length_enabled; // NR34 + + uint16_t sample_countdown; // in APU ticks (Reloaded from sample_length, xorred $7FF) + uint8_t current_sample_index; + uint8_t current_sample_byte; // Current sample byte. + bool wave_form_just_read; + bool pulsed; + uint8_t bugged_read_countdown; + } wave_channel; + + struct { + uint16_t pulse_length; // Reloaded from NR41 (xorred), in 256Hz DIV ticks + uint8_t current_volume; // Reloaded from NR42 + uint8_t volume_countdown; // Reloaded from NR42 + uint16_t lfsr; + bool narrow; + + uint8_t counter_countdown; // Counts from 0-7 to 0 to tick counter (Scaled from 512KHz to 2MHz) + uint16_t counter; // A bit from this 14-bit register ticks LFSR + bool length_enabled; // NR44 + + uint8_t alignment; // If (NR43 & 7) != 0, samples are aligned to 512KHz clock instead of + // 1MHz. This variable keeps track of the alignment. + bool current_lfsr_sample; + int8_t delta; + bool countdown_reloaded; + uint8_t dmg_delayed_start; + GB_envelope_clock_t envelope_clock; + } noise_channel; + + enum { + GB_SKIP_DIV_EVENT_INACTIVE, + GB_SKIP_DIV_EVENT_SKIPPED, + GB_SKIP_DIV_EVENT_SKIP, + } skip_div_event:8; + uint8_t pcm_mask[2]; // For CGB-0 to CGB-C PCM read glitch +} GB_apu_t; + +typedef enum { + GB_HIGHPASS_OFF, // Do not apply any filter, keep DC offset + GB_HIGHPASS_ACCURATE, // Apply a highpass filter similar to the one used on hardware + GB_HIGHPASS_REMOVE_DC_OFFSET, // Remove DC Offset without affecting the waveform + GB_HIGHPASS_MAX +} GB_highpass_mode_t; + +typedef enum { + GB_AUDIO_FORMAT_RAW, // Native endian + GB_AUDIO_FORMAT_AIFF, // Native endian + GB_AUDIO_FORMAT_WAV, +} GB_audio_format_t; + +typedef struct { + unsigned sample_rate; + + unsigned sample_cycles; // Counts by sample_rate until it reaches the clock frequency + + // Samples are NOT normalized to MAX_CH_AMP * 4 at this stage! + unsigned cycles_since_render; + unsigned last_update[GB_N_CHANNELS]; + GB_sample_t current_sample[GB_N_CHANNELS]; + GB_sample_t summed_samples[GB_N_CHANNELS]; + double dac_discharge[GB_N_CHANNELS]; + + GB_highpass_mode_t highpass_mode; + double highpass_rate; + GB_double_sample_t highpass_diff; + + GB_sample_callback_t sample_callback; + + double interference_volume; + double interference_highpass; + + FILE *output_file; + GB_audio_format_t output_format; + int output_error; +} GB_apu_output_t; + +void GB_set_sample_rate(GB_gameboy_t *gb, unsigned sample_rate); +unsigned GB_get_sample_rate(GB_gameboy_t *gb); +void GB_set_sample_rate_by_clocks(GB_gameboy_t *gb, double cycles_per_sample); /* Cycles are in 8MHz units */ +void GB_set_highpass_filter_mode(GB_gameboy_t *gb, GB_highpass_mode_t mode); +void GB_set_interference_volume(GB_gameboy_t *gb, double volume); +void GB_apu_set_sample_callback(GB_gameboy_t *gb, GB_sample_callback_t callback); +int GB_start_audio_recording(GB_gameboy_t *gb, const char *path, GB_audio_format_t format); +int GB_stop_audio_recording(GB_gameboy_t *gb); +#ifdef GB_INTERNAL +internal bool GB_apu_is_DAC_enabled(GB_gameboy_t *gb, unsigned index); +internal void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value); +internal uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg); +internal void GB_apu_div_event(GB_gameboy_t *gb); +internal void GB_apu_div_secondary_event(GB_gameboy_t *gb); +internal void GB_apu_init(GB_gameboy_t *gb); +internal void GB_apu_run(GB_gameboy_t *gb, bool force); +#endif + +#endif /* apu_h */ diff --git a/thirdparty/SameBoy-old/Core/camera.c b/thirdparty/SameBoy-old/Core/camera.c new file mode 100644 index 000000000..22ecf5de0 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/camera.c @@ -0,0 +1,164 @@ +#include "gb.h" + +static uint32_t noise_seed = 0; + +/* This is not a complete emulation of the camera chip. Only the features used by the Game Boy Camera ROMs are supported. + We also do not emulate the timing of the real cart when a webcam is used, as it might be actually faster than the webcam. */ + +static uint8_t generate_noise(uint8_t x, uint8_t y) +{ + uint32_t value = (x * 151 + y * 149) ^ noise_seed; + uint32_t hash = 0; + + while (value) { + hash <<= 1; + if (hash & 0x100) { + hash ^= 0x101; + } + if (value & 0x80000000) { + hash ^= 0xA1; + } + value <<= 1; + } + return hash; +} + +static long get_processed_color(GB_gameboy_t *gb, uint8_t x, uint8_t y) +{ + if (x >= 128) { + x = 0; + } + if (y >= 112) { + y = 0; + } + + long color = gb->camera_get_pixel_callback? gb->camera_get_pixel_callback(gb, x, y) : (generate_noise(x, y)); + + static const double gain_values[] = + {0.8809390, 0.9149149, 0.9457498, 0.9739758, + 1.0000000, 1.0241412, 1.0466537, 1.0677433, + 1.0875793, 1.1240310, 1.1568911, 1.1868043, + 1.2142561, 1.2396208, 1.2743837, 1.3157323, + 1.3525190, 1.3856512, 1.4157897, 1.4434309, + 1.4689574, 1.4926697, 1.5148087, 1.5355703, + 1.5551159, 1.5735801, 1.5910762, 1.6077008, + 1.6235366, 1.6386550, 1.6531183, 1.6669808}; + /* Multiply color by gain value */ + color *= gain_values[gb->camera_registers[GB_CAMERA_GAIN_AND_EDGE_ENHACEMENT_FLAGS] & 0x1F]; + + + /* Color is multiplied by the exposure register to simulate exposure. */ + color = color * ((gb->camera_registers[GB_CAMERA_EXPOSURE_HIGH] << 8) + gb->camera_registers[GB_CAMERA_EXPOSURE_LOW]) / 0x1000; + + return color; +} + +uint8_t GB_camera_read_image(GB_gameboy_t *gb, uint16_t addr) +{ + uint8_t tile_x = addr / 0x10 % 0x10; + uint8_t tile_y = addr / 0x10 / 0x10; + + uint8_t y = ((addr >> 1) & 0x7) + tile_y * 8; + uint8_t bit = addr & 1; + + uint8_t ret = 0; + + for (uint8_t x = tile_x * 8; x < tile_x * 8 + 8; x++) { + + long color = get_processed_color(gb, x, y); + + static const double edge_enhancement_ratios[] = {0.5, 0.75, 1, 1.25, 2, 3, 4, 5}; + double edge_enhancement_ratio = edge_enhancement_ratios[(gb->camera_registers[GB_CAMERA_EDGE_ENHANCEMENT_INVERT_AND_VOLTAGE] >> 4) & 0x7]; + if ((gb->camera_registers[GB_CAMERA_GAIN_AND_EDGE_ENHACEMENT_FLAGS] & 0xE0) == 0xE0) { + color += (color * 4) * edge_enhancement_ratio; + color -= get_processed_color(gb, x - 1, y) * edge_enhancement_ratio; + color -= get_processed_color(gb, x + 1, y) * edge_enhancement_ratio; + color -= get_processed_color(gb, x, y - 1) * edge_enhancement_ratio; + color -= get_processed_color(gb, x, y + 1) * edge_enhancement_ratio; + } + + + /* The camera's registers are used as a threshold pattern, which defines the dithering */ + uint8_t pattern_base = ((x & 3) + (y & 3) * 4) * 3 + GB_CAMERA_DITHERING_PATTERN_START; + + if (color < gb->camera_registers[pattern_base]) { + color = 3; + } + else if (color < gb->camera_registers[pattern_base + 1]) { + color = 2; + } + else if (color < gb->camera_registers[pattern_base + 2]) { + color = 1; + } + else { + color = 0; + } + + ret <<= 1; + ret |= (color >> bit) & 1; + } + + return ret; +} + +void GB_set_camera_get_pixel_callback(GB_gameboy_t *gb, GB_camera_get_pixel_callback_t callback) +{ + gb->camera_get_pixel_callback = callback; +} + +void GB_set_camera_update_request_callback(GB_gameboy_t *gb, GB_camera_update_request_callback_t callback) +{ + if (gb->camera_countdown > 0 && callback) { + GB_log(gb, "Camera update request callback set while camera was proccessing, clearing camera countdown.\n"); + gb->camera_countdown = 0; + GB_camera_updated(gb); + } + + gb->camera_update_request_callback = callback; +} + +void GB_camera_updated(GB_gameboy_t *gb) +{ + gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] &= ~1; +} + +void GB_camera_write_register(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + addr &= 0x7F; + if (addr == GB_CAMERA_SHOOT_AND_1D_FLAGS) { + value &= 0x7; + noise_seed = GB_random(); + if ((value & 1) && !(gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1)) { + if (gb->camera_update_request_callback) { + gb->camera_update_request_callback(gb); + } + else { + /* If no callback is set, wait the amount of time the real camera would take before clearing the busy bit */ + uint16_t exposure = (gb->camera_registers[GB_CAMERA_EXPOSURE_HIGH] << 8) | gb->camera_registers[GB_CAMERA_EXPOSURE_LOW]; + gb->camera_countdown = 129792 + ((gb->camera_registers[GB_CAMERA_GAIN_AND_EDGE_ENHACEMENT_FLAGS] & 0x80)? 0 : 2048) + (exposure * 64) + (gb->camera_alignment & 4); + } + } + + if (!(value & 1) && (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1)) { + /* We don't support cancelling a camera shoot */ + GB_log(gb, "ROM attempted to cancel camera shoot, which is currently not supported. The camera shoot will not be cancelled.\n"); + value |= 1; + } + + gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] = value; + } + else { + if (addr >= 0x36) { + GB_log(gb, "Wrote invalid camera register %02x: %2x\n", addr, value); + return; + } + gb->camera_registers[addr] = value; + } +} +uint8_t GB_camera_read_register(GB_gameboy_t *gb, uint16_t addr) +{ + if ((addr & 0x7F) == 0) { + return gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS]; + } + return 0; +} diff --git a/thirdparty/SameBoy-old/Core/camera.h b/thirdparty/SameBoy-old/Core/camera.h new file mode 100644 index 000000000..1461f3adf --- /dev/null +++ b/thirdparty/SameBoy-old/Core/camera.h @@ -0,0 +1,29 @@ +#ifndef camera_h +#define camera_h +#include +#include "defs.h" + +typedef uint8_t (*GB_camera_get_pixel_callback_t)(GB_gameboy_t *gb, uint8_t x, uint8_t y); +typedef void (*GB_camera_update_request_callback_t)(GB_gameboy_t *gb); + +enum { + GB_CAMERA_SHOOT_AND_1D_FLAGS = 0, + GB_CAMERA_GAIN_AND_EDGE_ENHACEMENT_FLAGS = 1, + GB_CAMERA_EXPOSURE_HIGH = 2, + GB_CAMERA_EXPOSURE_LOW = 3, + GB_CAMERA_EDGE_ENHANCEMENT_INVERT_AND_VOLTAGE = 4, + GB_CAMERA_DITHERING_PATTERN_START = 6, + GB_CAMERA_DITHERING_PATTERN_END = 0x35, +}; + +uint8_t GB_camera_read_image(GB_gameboy_t *gb, uint16_t addr); + +void GB_set_camera_get_pixel_callback(GB_gameboy_t *gb, GB_camera_get_pixel_callback_t callback); +void GB_set_camera_update_request_callback(GB_gameboy_t *gb, GB_camera_update_request_callback_t callback); + +void GB_camera_updated(GB_gameboy_t *gb); + +void GB_camera_write_register(GB_gameboy_t *gb, uint16_t addr, uint8_t value); +uint8_t GB_camera_read_register(GB_gameboy_t *gb, uint16_t addr); + +#endif diff --git a/thirdparty/SameBoy-old/Core/cheats.c b/thirdparty/SameBoy-old/Core/cheats.c new file mode 100644 index 000000000..8b5a7a0ee --- /dev/null +++ b/thirdparty/SameBoy-old/Core/cheats.c @@ -0,0 +1,314 @@ +#include "gb.h" +#include "cheats.h" +#include +#include +#include + +static inline uint8_t hash_addr(uint16_t addr) +{ + return addr; +} + +static uint16_t bank_for_addr(GB_gameboy_t *gb, uint16_t addr) +{ + if (addr < 0x4000) { + return gb->mbc_rom0_bank; + } + + if (addr < 0x8000) { + return gb->mbc_rom_bank; + } + + if (addr < 0xD000) { + return 0; + } + + if (addr < 0xE000) { + return gb->cgb_ram_bank; + } + + return 0; +} + +void GB_apply_cheat(GB_gameboy_t *gb, uint16_t address, uint8_t *value) +{ + if (likely(!gb->cheat_enabled)) return; + if (likely(gb->cheat_count == 0)) return; // Optimization + if (unlikely(!gb->boot_rom_finished)) return; + const GB_cheat_hash_t *hash = gb->cheat_hash[hash_addr(address)]; + if (unlikely(hash)) { + for (unsigned i = 0; i < hash->size; i++) { + GB_cheat_t *cheat = hash->cheats[i]; + if (cheat->address == address && cheat->enabled && (!cheat->use_old_value || cheat->old_value == *value)) { + if (cheat->bank == GB_CHEAT_ANY_BANK || cheat->bank == bank_for_addr(gb, address)) { + *value = cheat->value; + break; + } + } + } + } +} + +bool GB_cheats_enabled(GB_gameboy_t *gb) +{ + return gb->cheat_enabled; +} + +void GB_set_cheats_enabled(GB_gameboy_t *gb, bool enabled) +{ + gb->cheat_enabled = enabled; +} + +void GB_add_cheat(GB_gameboy_t *gb, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled) +{ + GB_cheat_t *cheat = malloc(sizeof(*cheat)); + cheat->address = address; + cheat->bank = bank; + cheat->value = value; + cheat->old_value = old_value; + cheat->use_old_value = use_old_value; + cheat->enabled = enabled; + strncpy(cheat->description, description, sizeof(cheat->description)); + cheat->description[sizeof(cheat->description) - 1] = 0; + gb->cheats = realloc(gb->cheats, (++gb->cheat_count) * sizeof(gb->cheats[0])); + gb->cheats[gb->cheat_count - 1] = cheat; + + GB_cheat_hash_t **hash = &gb->cheat_hash[hash_addr(address)]; + if (!*hash) { + *hash = malloc(sizeof(GB_cheat_hash_t) + sizeof(cheat)); + (*hash)->size = 1; + (*hash)->cheats[0] = cheat; + } + else { + (*hash)->size++; + *hash = realloc(*hash, sizeof(GB_cheat_hash_t) + sizeof(cheat) * (*hash)->size); + (*hash)->cheats[(*hash)->size - 1] = cheat; + } +} + +const GB_cheat_t *const *GB_get_cheats(GB_gameboy_t *gb, size_t *size) +{ + *size = gb->cheat_count; + return (void *)gb->cheats; +} +void GB_remove_cheat(GB_gameboy_t *gb, const GB_cheat_t *cheat) +{ + for (unsigned i = 0; i < gb->cheat_count; i++) { + if (gb->cheats[i] == cheat) { + gb->cheats[i] = gb->cheats[--gb->cheat_count]; + if (gb->cheat_count == 0) { + free(gb->cheats); + gb->cheats = NULL; + } + else { + gb->cheats = realloc(gb->cheats, gb->cheat_count * sizeof(gb->cheats[0])); + } + break; + } + } + + GB_cheat_hash_t **hash = &gb->cheat_hash[hash_addr(cheat->address)]; + for (unsigned i = 0; i < (*hash)->size; i++) { + if ((*hash)->cheats[i] == cheat) { + (*hash)->cheats[i] = (*hash)->cheats[--(*hash)->size]; + if ((*hash)->size == 0) { + free(*hash); + *hash = NULL; + } + else { + *hash = malloc(sizeof(GB_cheat_hash_t) + sizeof(cheat) * (*hash)->size); + } + break; + } + } + + free((void *)cheat); +} + +bool GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *description, bool enabled) +{ + uint8_t dummy; + /* GameShark */ + { + uint8_t bank; + uint8_t value; + uint16_t address; + if (sscanf(cheat, "%02hhx%02hhx%04hx%c", &bank, &value, &address, &dummy) == 3) { + if (bank >= 0x80) { + bank &= 0xF; + } + GB_add_cheat(gb, description, address, bank, value, 0, false, enabled); + return true; + } + } + + /* GameGenie */ + { + char stripped_cheat[10] = {0,}; + for (unsigned i = 0; i < 9 && *cheat; i++) { + stripped_cheat[i] = *(cheat++); + while (*cheat == '-') { + cheat++; + } + } + + // Delete the 7th character; + stripped_cheat[7] = stripped_cheat[8]; + stripped_cheat[8] = 0; + + uint8_t old_value; + uint8_t value; + uint16_t address; + if (sscanf(stripped_cheat, "%02hhx%04hx%02hhx%c", &value, &address, &old_value, &dummy) == 3) { + address = (uint16_t)(address >> 4) | (uint16_t)(address << 12); + address ^= 0xF000; + if (address > 0x7FFF) { + return false; + } + old_value = (uint8_t)(old_value >> 2) | (uint8_t)(old_value << 6); + old_value ^= 0xBA; + GB_add_cheat(gb, description, address, GB_CHEAT_ANY_BANK, value, old_value, true, enabled); + return true; + } + + if (sscanf(stripped_cheat, "%02hhx%04hx%c", &value, &address, &dummy) == 2) { + address = (uint16_t)(address >> 4) | (uint16_t)(address << 12); + address ^= 0xF000; + if (address > 0x7FFF) { + return false; + } + GB_add_cheat(gb, description, address, GB_CHEAT_ANY_BANK, value, false, true, enabled); + return true; + } + } + return false; +} + +void GB_update_cheat(GB_gameboy_t *gb, const GB_cheat_t *_cheat, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled) +{ + GB_cheat_t *cheat = NULL; + for (unsigned i = 0; i < gb->cheat_count; i++) { + if (gb->cheats[i] == _cheat) { + cheat = gb->cheats[i]; + break; + } + } + + assert(cheat); + + if (cheat->address != address) { + /* Remove from old bucket */ + GB_cheat_hash_t **hash = &gb->cheat_hash[hash_addr(cheat->address)]; + for (unsigned i = 0; i < (*hash)->size; i++) { + if ((*hash)->cheats[i] == cheat) { + (*hash)->cheats[i] = (*hash)->cheats[--(*hash)->size]; + if ((*hash)->size == 0) { + free(*hash); + *hash = NULL; + } + else { + *hash = malloc(sizeof(GB_cheat_hash_t) + sizeof(cheat) * (*hash)->size); + } + break; + } + } + cheat->address = address; + + /* Add to new bucket */ + hash = &gb->cheat_hash[hash_addr(address)]; + if (!*hash) { + *hash = malloc(sizeof(GB_cheat_hash_t) + sizeof(cheat)); + (*hash)->size = 1; + (*hash)->cheats[0] = cheat; + } + else { + (*hash)->size++; + *hash = realloc(*hash, sizeof(GB_cheat_hash_t) + sizeof(cheat) * (*hash)->size); + (*hash)->cheats[(*hash)->size - 1] = cheat; + } + } + cheat->bank = bank; + cheat->value = value; + cheat->old_value = old_value; + cheat->use_old_value = use_old_value; + cheat->enabled = enabled; + if (description != cheat->description) { + strncpy(cheat->description, description, sizeof(cheat->description)); + cheat->description[sizeof(cheat->description) - 1] = 0; + } +} + +#define CHEAT_MAGIC 'SBCh' + +void GB_load_cheats(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + return; + } + + uint32_t magic = 0; + uint32_t struct_size = 0; + fread(&magic, sizeof(magic), 1, f); + fread(&struct_size, sizeof(struct_size), 1, f); + if (magic != LE32(CHEAT_MAGIC) && magic != BE32(CHEAT_MAGIC)) { + GB_log(gb, "The file is not a SameBoy cheat database"); + return; + } + + if (struct_size != sizeof(GB_cheat_t)) { + GB_log(gb, "This cheat database is not compatible with this version of SameBoy"); + return; + } + + // Remove all cheats first + while (gb->cheats) { + GB_remove_cheat(gb, gb->cheats[0]); + } + + GB_cheat_t cheat; + while (fread(&cheat, sizeof(cheat), 1, f)) { + if (magic != CHEAT_MAGIC) { + cheat.address = __builtin_bswap16(cheat.address); + cheat.bank = __builtin_bswap16(cheat.bank); + } + cheat.description[sizeof(cheat.description) - 1] = 0; + GB_add_cheat(gb, cheat.description, cheat.address, cheat.bank, cheat.value, cheat.old_value, cheat.use_old_value, cheat.enabled); + } + + return; +} + +int GB_save_cheats(GB_gameboy_t *gb, const char *path) +{ + if (!gb->cheat_count) return 0; // Nothing to save. + FILE *f = fopen(path, "wb"); + if (!f) { + GB_log(gb, "Could not dump cheat database: %s.\n", strerror(errno)); + return errno; + } + + uint32_t magic = CHEAT_MAGIC; + uint32_t struct_size = sizeof(GB_cheat_t); + + if (fwrite(&magic, sizeof(magic), 1, f) != 1) { + fclose(f); + return EIO; + } + + if (fwrite(&struct_size, sizeof(struct_size), 1, f) != 1) { + fclose(f); + return EIO; + } + + for (size_t i = 0; i cheat_count; i++) { + if (fwrite(gb->cheats[i], sizeof(*gb->cheats[i]), 1, f) != 1) { + fclose(f); + return EIO; + } + } + + errno = 0; + fclose(f); + return errno; +} diff --git a/thirdparty/SameBoy-old/Core/cheats.h b/thirdparty/SameBoy-old/Core/cheats.h new file mode 100644 index 000000000..f9c076c64 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/cheats.h @@ -0,0 +1,42 @@ +#ifndef cheats_h +#define cheats_h +#include "defs.h" + +#define GB_CHEAT_ANY_BANK 0xFFFF + +typedef struct GB_cheat_s GB_cheat_t; + +void GB_add_cheat(GB_gameboy_t *gb, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled); +void GB_update_cheat(GB_gameboy_t *gb, const GB_cheat_t *cheat, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled); +bool GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *description, bool enabled); +const GB_cheat_t *const *GB_get_cheats(GB_gameboy_t *gb, size_t *size); +void GB_remove_cheat(GB_gameboy_t *gb, const GB_cheat_t *cheat); +bool GB_cheats_enabled(GB_gameboy_t *gb); +void GB_set_cheats_enabled(GB_gameboy_t *gb, bool enabled); +void GB_load_cheats(GB_gameboy_t *gb, const char *path); +int GB_save_cheats(GB_gameboy_t *gb, const char *path); + +#ifdef GB_INTERNAL +#ifdef GB_DISABLE_CHEATS +#define GB_apply_cheat(...) +#else +internal void GB_apply_cheat(GB_gameboy_t *gb, uint16_t address, uint8_t *value); +#endif +#endif + +typedef struct { + size_t size; + GB_cheat_t *cheats[]; +} GB_cheat_hash_t; + +struct GB_cheat_s { + uint16_t address; + uint16_t bank; + uint8_t value; + uint8_t old_value; + bool use_old_value; + bool enabled; + char description[128]; +}; + +#endif diff --git a/thirdparty/SameBoy-old/Core/debugger.c b/thirdparty/SameBoy-old/Core/debugger.c new file mode 100644 index 000000000..2bec9e65f --- /dev/null +++ b/thirdparty/SameBoy-old/Core/debugger.c @@ -0,0 +1,2750 @@ +#include +#include +#include +#include "gb.h" + +typedef struct { + bool has_bank; + uint16_t bank:9; + uint16_t value; +} value_t; + +typedef struct { + enum { + LVALUE_MEMORY, + LVALUE_MEMORY16, + LVALUE_REG16, + LVALUE_REG_H, + LVALUE_REG_L, + } kind; + union { + uint16_t *register_address; + value_t memory_address; + }; +} lvalue_t; + +#define VALUE_16(x) ((value_t){false, 0, (x)}) + +struct GB_breakpoint_s { + union { + struct { + uint16_t addr; + uint16_t bank; /* -1 = any bank*/ + }; + uint32_t key; /* For sorting and comparing */ + }; + char *condition; + bool is_jump_to; +}; + +#define BP_KEY(x) (((struct GB_breakpoint_s){.addr = ((x).value), .bank = (x).has_bank? (x).bank : -1 }).key) + +#define GB_WATCHPOINT_R (1) +#define GB_WATCHPOINT_W (2) + +struct GB_watchpoint_s { + union { + struct { + uint16_t addr; + uint16_t bank; /* -1 = any bank*/ + }; + uint32_t key; /* For sorting and comparing */ + }; + char *condition; + uint8_t flags; +}; + +#define WP_KEY(x) (((struct GB_watchpoint_s){.addr = ((x).value), .bank = (x).has_bank? (x).bank : -1 }).key) + +static uint16_t bank_for_addr(GB_gameboy_t *gb, uint16_t addr) +{ + if (addr < 0x4000) { + return gb->mbc_rom0_bank; + } + + if (addr < 0x8000) { + return gb->mbc_rom_bank; + } + + if (addr < 0xD000) { + return 0; + } + + if (addr < 0xE000) { + return gb->cgb_ram_bank; + } + + return 0; +} + +typedef struct { + uint16_t rom0_bank; + uint16_t rom_bank; + uint8_t mbc_ram_bank; + bool mbc_ram_enable; + uint8_t ram_bank; + uint8_t vram_bank; +} banking_state_t; + +static inline void save_banking_state(GB_gameboy_t *gb, banking_state_t *state) +{ + state->rom0_bank = gb->mbc_rom0_bank; + state->rom_bank = gb->mbc_rom_bank; + state->mbc_ram_bank = gb->mbc_ram_bank; + state->mbc_ram_enable = gb->mbc_ram_enable; + state->ram_bank = gb->cgb_ram_bank; + state->vram_bank = gb->cgb_vram_bank; +} + +static inline void restore_banking_state(GB_gameboy_t *gb, banking_state_t *state) +{ + + gb->mbc_rom0_bank = state->rom0_bank; + gb->mbc_rom_bank = state->rom_bank; + gb->mbc_ram_bank = state->mbc_ram_bank; + gb->mbc_ram_enable = state->mbc_ram_enable; + gb->cgb_ram_bank = state->ram_bank; + gb->cgb_vram_bank = state->vram_bank; +} + +static inline void switch_banking_state(GB_gameboy_t *gb, uint16_t bank) +{ + gb->mbc_rom0_bank = bank; + gb->mbc_rom_bank = bank; + gb->mbc_ram_bank = bank; + gb->mbc_ram_enable = true; + if (GB_is_cgb(gb)) { + gb->cgb_ram_bank = bank & 7; + gb->cgb_vram_bank = bank & 1; + if (gb->cgb_ram_bank == 0) { + gb->cgb_ram_bank = 1; + } + } +} + +static const char *value_to_string(GB_gameboy_t *gb, uint16_t value, bool prefer_name) +{ + static __thread char output[256]; + const GB_bank_symbol_t *symbol = GB_debugger_find_symbol(gb, value); + + if (symbol && (value - symbol->addr > 0x1000 || symbol->addr == 0) ) { + symbol = NULL; + } + + if (!symbol) { + snprintf(output, sizeof(output), "$%04x", value); + } + + else if (symbol->addr == value) { + if (prefer_name) { + snprintf(output, sizeof(output), "%s ($%04x)", symbol->name, value); + } + else { + snprintf(output, sizeof(output), "$%04x (%s)", value, symbol->name); + } + } + + else { + if (prefer_name) { + snprintf(output, sizeof(output), "%s+$%03x ($%04x)", symbol->name, value - symbol->addr, value); + } + else { + snprintf(output, sizeof(output), "$%04x (%s+$%03x)", value, symbol->name, value - symbol->addr); + } + } + return output; +} + +static GB_symbol_map_t *get_symbol_map(GB_gameboy_t *gb, uint16_t bank) +{ + if (bank >= gb->n_symbol_maps) { + return NULL; + } + return gb->bank_symbols[bank]; +} + +static const char *debugger_value_to_string(GB_gameboy_t *gb, value_t value, bool prefer_name) +{ + if (!value.has_bank) return value_to_string(gb, value.value, prefer_name); + + static __thread char output[256]; + const GB_bank_symbol_t *symbol = GB_map_find_symbol(get_symbol_map(gb, value.bank), value.value); + + if (symbol && (value.value - symbol->addr > 0x1000 || symbol->addr == 0) ) { + symbol = NULL; + } + + if (!symbol) { + snprintf(output, sizeof(output), "$%02x:$%04x", value.bank, value.value); + } + + else if (symbol->addr == value.value) { + if (prefer_name) { + snprintf(output, sizeof(output), "%s ($%02x:$%04x)", symbol->name, value.bank, value.value); + } + else { + snprintf(output, sizeof(output), "$%02x:$%04x (%s)", value.bank, value.value, symbol->name); + } + } + + else { + if (prefer_name) { + snprintf(output, sizeof(output), "%s+$%03x ($%02x:$%04x)", symbol->name, value.value - symbol->addr, value.bank, value.value); + } + else { + snprintf(output, sizeof(output), "$%02x:$%04x (%s+$%03x)", value.bank, value.value, symbol->name, value.value - symbol->addr); + } + } + return output; +} + +static value_t read_lvalue(GB_gameboy_t *gb, lvalue_t lvalue) +{ + /* Not used until we add support for operators like += */ + switch (lvalue.kind) { + case LVALUE_MEMORY: + if (lvalue.memory_address.has_bank) { + banking_state_t state; + save_banking_state(gb, &state); + switch_banking_state(gb, lvalue.memory_address.bank); + value_t r = VALUE_16(GB_read_memory(gb, lvalue.memory_address.value)); + restore_banking_state(gb, &state); + return r; + } + return VALUE_16(GB_read_memory(gb, lvalue.memory_address.value)); + + case LVALUE_MEMORY16: + if (lvalue.memory_address.has_bank) { + banking_state_t state; + save_banking_state(gb, &state); + switch_banking_state(gb, lvalue.memory_address.bank); + value_t r = VALUE_16(GB_read_memory(gb, lvalue.memory_address.value) | + (GB_read_memory(gb, lvalue.memory_address.value + 1) * 0x100)); + restore_banking_state(gb, &state); + return r; + } + return VALUE_16(GB_read_memory(gb, lvalue.memory_address.value) | + (GB_read_memory(gb, lvalue.memory_address.value + 1) * 0x100)); + + case LVALUE_REG16: + return VALUE_16(*lvalue.register_address); + + case LVALUE_REG_L: + return VALUE_16(*lvalue.register_address & 0x00FF); + + case LVALUE_REG_H: + return VALUE_16(*lvalue.register_address >> 8); + } + + return VALUE_16(0); +} + +static void write_lvalue(GB_gameboy_t *gb, lvalue_t lvalue, uint16_t value) +{ + switch (lvalue.kind) { + case LVALUE_MEMORY: + if (lvalue.memory_address.has_bank) { + banking_state_t state; + save_banking_state(gb, &state); + switch_banking_state(gb, lvalue.memory_address.bank); + GB_write_memory(gb, lvalue.memory_address.value, value); + restore_banking_state(gb, &state); + return; + } + GB_write_memory(gb, lvalue.memory_address.value, value); + return; + + case LVALUE_MEMORY16: + if (lvalue.memory_address.has_bank) { + banking_state_t state; + save_banking_state(gb, &state); + switch_banking_state(gb, lvalue.memory_address.bank); + GB_write_memory(gb, lvalue.memory_address.value, value); + GB_write_memory(gb, lvalue.memory_address.value + 1, value >> 8); + restore_banking_state(gb, &state); + return; + } + GB_write_memory(gb, lvalue.memory_address.value, value); + GB_write_memory(gb, lvalue.memory_address.value + 1, value >> 8); + return; + + case LVALUE_REG16: + *lvalue.register_address = value; + return; + + case LVALUE_REG_L: + *lvalue.register_address &= 0xFF00; + *lvalue.register_address |= value & 0xFF; + return; + + case LVALUE_REG_H: + *lvalue.register_address &= 0x00FF; + *lvalue.register_address |= value << 8; + return; + } +} + +/* 16 bit value 16 bit value = 16 bit value + 25 bit address 16 bit value = 25 bit address + 16 bit value 25 bit address = 25 bit address + 25 bit address 25 bit address = 16 bit value (since adding pointers, for examples, makes no sense) + + Boolean operators always return a 16-bit value + */ +#define FIX_BANK(x) ((value_t){a.has_bank ^ b.has_bank, a.has_bank? a.bank : b.bank, (x)}) + +static value_t add(value_t a, value_t b) {return FIX_BANK(a.value + b.value);} +static value_t sub(value_t a, value_t b) {return FIX_BANK(a.value - b.value);} +static value_t mul(value_t a, value_t b) {return FIX_BANK(a.value * b.value);} +static value_t _div(value_t a, value_t b) +{ + if (b.value == 0) { + return FIX_BANK(0); + } + return FIX_BANK(a.value / b.value); +}; +static value_t mod(value_t a, value_t b) +{ + if (b.value == 0) { + return FIX_BANK(0); + } + return FIX_BANK(a.value % b.value); +}; +static value_t and(value_t a, value_t b) {return FIX_BANK(a.value & b.value);} +static value_t or(value_t a, value_t b) {return FIX_BANK(a.value | b.value);} +static value_t xor(value_t a, value_t b) {return FIX_BANK(a.value ^ b.value);} +static value_t shleft(value_t a, value_t b) {return FIX_BANK(a.value << b.value);} +static value_t shright(value_t a, value_t b) {return FIX_BANK(a.value >> b.value);} +static value_t assign(GB_gameboy_t *gb, lvalue_t a, uint16_t b) +{ + write_lvalue(gb, a, b); + return read_lvalue(gb, a); +} + +static value_t bool_and(value_t a, value_t b) {return VALUE_16(a.value && b.value);} +static value_t bool_or(value_t a, value_t b) {return VALUE_16(a.value || b.value);} +static value_t equals(value_t a, value_t b) {return VALUE_16(a.value == b.value);} +static value_t different(value_t a, value_t b) {return VALUE_16(a.value != b.value);} +static value_t lower(value_t a, value_t b) {return VALUE_16(a.value < b.value);} +static value_t greater(value_t a, value_t b) {return VALUE_16(a.value > b.value);} +static value_t lower_equals(value_t a, value_t b) {return VALUE_16(a.value <= b.value);} +static value_t greater_equals(value_t a, value_t b) {return VALUE_16(a.value >= b.value);} +static value_t bank(value_t a, value_t b) {return (value_t) {true, a.value, b.value};} + + +static struct { + const char *string; + int8_t priority; + value_t (*operator)(value_t, value_t); + value_t (*lvalue_operator)(GB_gameboy_t *, lvalue_t, uint16_t); +} operators[] = +{ + // Yes. This is not C-like. But it makes much more sense. + // Deal with it. + {"+", 0, add}, + {"-", 0, sub}, + {"||", 0, bool_or}, + {"|", 0, or}, + {"*", 1, mul}, + {"/", 1, _div}, + {"%", 1, mod}, + {"&&", 1, bool_and}, + {"&", 1, and}, + {"^", 1, xor}, + {"<<", 2, shleft}, + {"<=", 3, lower_equals}, + {"<", 3, lower}, + {">>", 2, shright}, + {">=", 3, greater_equals}, + {">", 3, greater}, + {"==", 3, equals}, + {"=", -1, NULL, assign}, + {"!=", 3, different}, + {":", 4, bank}, +}; + +value_t debugger_evaluate(GB_gameboy_t *gb, const char *string, + size_t length, bool *error, + uint16_t *watchpoint_address, uint8_t *watchpoint_new_value); + +static lvalue_t debugger_evaluate_lvalue(GB_gameboy_t *gb, const char *string, + size_t length, bool *error, + uint16_t *watchpoint_address, uint8_t *watchpoint_new_value) +{ + *error = false; + // Strip whitespace + while (length && (string[0] == ' ' || string[0] == '\n' || string[0] == '\r' || string[0] == '\t')) { + string++; + length--; + } + while (length && (string[length-1] == ' ' || string[length-1] == '\n' || string[length-1] == '\r' || string[length-1] == '\t')) { + length--; + } + if (length == 0) { + GB_log(gb, "Expected expression.\n"); + *error = true; + return (lvalue_t){0,}; + } + if (string[0] == '(' && string[length - 1] == ')') { + // Attempt to strip parentheses + signed depth = 0; + for (unsigned i = 0; i < length; i++) { + if (string[i] == '(') depth++; + if (depth == 0) { + // First and last are not matching + depth = 1; + break; + } + if (string[i] == ')') depth--; + } + if (depth == 0) return debugger_evaluate_lvalue(gb, string + 1, length - 2, error, watchpoint_address, watchpoint_new_value); + } + else if (string[0] == '[' && string[length - 1] == ']') { + // Attempt to strip square parentheses (memory dereference) + signed depth = 0; + for (unsigned i = 0; i < length; i++) { + if (string[i] == '[') depth++; + if (depth == 0) { + // First and last are not matching + depth = 1; + break; + } + if (string[i] == ']') depth--; + } + if (depth == 0) { + return (lvalue_t){LVALUE_MEMORY, .memory_address = debugger_evaluate(gb, string + 1, length - 2, error, watchpoint_address, watchpoint_new_value)}; + } + } + else if (string[0] == '{' && string[length - 1] == '}') { + // Attempt to strip curly parentheses (memory dereference) + signed depth = 0; + for (unsigned i = 0; i < length; i++) { + if (string[i] == '{') depth++; + if (depth == 0) { + // First and last are not matching + depth = 1; + break; + } + if (string[i] == '}') depth--; + } + if (depth == 0) { + return (lvalue_t){LVALUE_MEMORY16, .memory_address = debugger_evaluate(gb, string + 1, length - 2, error, watchpoint_address, watchpoint_new_value)}; + } + } + + // Registers + if (string[0] != '$' && (string[0] < '0' || string[0] > '9')) { + if (length == 1) { + switch (string[0]) { + case 'a': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->af}; + case 'f': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->af}; + case 'b': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->bc}; + case 'c': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->bc}; + case 'd': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->de}; + case 'e': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->de}; + case 'h': return (lvalue_t){LVALUE_REG_H, .register_address = &gb->hl}; + case 'l': return (lvalue_t){LVALUE_REG_L, .register_address = &gb->hl}; + } + } + else if (length == 2) { + switch (string[0]) { + case 'a': if (string[1] == 'f') return (lvalue_t){LVALUE_REG16, .register_address = &gb->af}; + case 'b': if (string[1] == 'c') return (lvalue_t){LVALUE_REG16, .register_address = &gb->bc}; + case 'd': if (string[1] == 'e') return (lvalue_t){LVALUE_REG16, .register_address = &gb->de}; + case 'h': if (string[1] == 'l') return (lvalue_t){LVALUE_REG16, .register_address = &gb->hl}; + case 's': if (string[1] == 'p') return (lvalue_t){LVALUE_REG16, .register_address = &gb->sp}; + case 'p': if (string[1] == 'c') return (lvalue_t){LVALUE_REG16, .register_address = &gb->pc}; + } + } + GB_log(gb, "Unknown register: %.*s\n", (unsigned) length, string); + *error = true; + return (lvalue_t){0,}; + } + + GB_log(gb, "Expression is not an lvalue: %.*s\n", (unsigned) length, string); + *error = true; + return (lvalue_t){0,}; +} + +#define ERROR ((value_t){0,}) +value_t debugger_evaluate(GB_gameboy_t *gb, const char *string, + size_t length, bool *error, + uint16_t *watchpoint_address, uint8_t *watchpoint_new_value) +{ + /* Disable watchpoints while evaluating expressions */ + uint16_t n_watchpoints = gb->n_watchpoints; + gb->n_watchpoints = 0; + + value_t ret = ERROR; + + *error = false; + // Strip whitespace + while (length && (string[0] == ' ' || string[0] == '\n' || string[0] == '\r' || string[0] == '\t')) { + string++; + length--; + } + while (length && (string[length-1] == ' ' || string[length-1] == '\n' || string[length-1] == '\r' || string[length-1] == '\t')) { + length--; + } + if (length == 0) { + GB_log(gb, "Expected expression.\n"); + *error = true; + goto exit; + } + if (string[0] == '(' && string[length - 1] == ')') { + // Attempt to strip parentheses + signed depth = 0; + for (unsigned i = 0; i < length; i++) { + if (string[i] == '(') depth++; + if (depth == 0) { + // First and last are not matching + depth = 1; + break; + } + if (string[i] == ')') depth--; + } + if (depth == 0) { + ret = debugger_evaluate(gb, string + 1, length - 2, error, watchpoint_address, watchpoint_new_value); + goto exit; + } + } + else if (string[0] == '[' && string[length - 1] == ']') { + // Attempt to strip square parentheses (memory dereference) + signed depth = 0; + for (unsigned i = 0; i < length; i++) { + if (string[i] == '[') depth++; + if (depth == 0) { + // First and last are not matching + depth = 1; + break; + } + if (string[i] == ']') depth--; + } + + if (depth == 0) { + value_t addr = debugger_evaluate(gb, string + 1, length - 2, error, watchpoint_address, watchpoint_new_value); + banking_state_t state; + if (addr.bank) { + save_banking_state(gb, &state); + switch_banking_state(gb, addr.bank); + } + ret = VALUE_16(GB_read_memory(gb, addr.value)); + if (addr.bank) { + restore_banking_state(gb, &state); + } + goto exit; + } + } + else if (string[0] == '{' && string[length - 1] == '}') { + // Attempt to strip curly parentheses (memory dereference) + signed depth = 0; + for (unsigned i = 0; i < length; i++) { + if (string[i] == '{') depth++; + if (depth == 0) { + // First and last are not matching + depth = 1; + break; + } + if (string[i] == '}') depth--; + } + + if (depth == 0) { + value_t addr = debugger_evaluate(gb, string + 1, length - 2, error, watchpoint_address, watchpoint_new_value); + banking_state_t state; + if (addr.bank) { + save_banking_state(gb, &state); + switch_banking_state(gb, addr.bank); + } + ret = VALUE_16(GB_read_memory(gb, addr.value) | (GB_read_memory(gb, addr.value + 1) * 0x100)); + if (addr.bank) { + restore_banking_state(gb, &state); + } + goto exit; + } + } + // Search for lowest priority operator + signed depth = 0; + unsigned operator_index = -1; + unsigned operator_pos = 0; + for (unsigned i = 0; i < length; i++) { + if (string[i] == '(') depth++; + else if (string[i] == ')') depth--; + else if (string[i] == '[') depth++; + else if (string[i] == ']') depth--; + else if (depth == 0) { + for (unsigned j = 0; j < sizeof(operators) / sizeof(operators[0]); j++) { + unsigned operator_length = strlen(operators[j].string); + if (operator_length > length - i) continue; // Operator too long + + if (memcmp(string + i, operators[j].string, operator_length) == 0) { + if (operator_index != -1 && operators[operator_index].priority < operators[j].priority) { + /* for supporting = vs ==, etc*/ + i += operator_length - 1; + break; + } + // Found an operator! + operator_pos = i; + operator_index = j; + /* for supporting = vs ==, etc*/ + i += operator_length - 1; + break; + } + } + } + } + if (operator_index != -1) { + unsigned right_start = (unsigned)(operator_pos + strlen(operators[operator_index].string)); + value_t right = debugger_evaluate(gb, string + right_start, length - right_start, error, watchpoint_address, watchpoint_new_value); + if (*error) goto exit; + if (operators[operator_index].lvalue_operator) { + lvalue_t left = debugger_evaluate_lvalue(gb, string, operator_pos, error, watchpoint_address, watchpoint_new_value); + if (*error) goto exit; + ret = operators[operator_index].lvalue_operator(gb, left, right.value); + goto exit; + } + value_t left = debugger_evaluate(gb, string, operator_pos, error, watchpoint_address, watchpoint_new_value); + if (*error) goto exit; + ret = operators[operator_index].operator(left, right); + goto exit; + } + + // Not an expression - must be a register or a literal + + // Registers + if (string[0] != '$' && (string[0] < '0' || string[0] > '9')) { + if (length == 1) { + switch (string[0]) { + case 'a': ret = VALUE_16(gb->af >> 8); goto exit; + case 'f': ret = VALUE_16(gb->af & 0xFF); goto exit; + case 'b': ret = VALUE_16(gb->bc >> 8); goto exit; + case 'c': ret = VALUE_16(gb->bc & 0xFF); goto exit; + case 'd': ret = VALUE_16(gb->de >> 8); goto exit; + case 'e': ret = VALUE_16(gb->de & 0xFF); goto exit; + case 'h': ret = VALUE_16(gb->hl >> 8); goto exit; + case 'l': ret = VALUE_16(gb->hl & 0xFF); goto exit; + } + } + else if (length == 2) { + switch (string[0]) { + case 'a': if (string[1] == 'f') {ret = VALUE_16(gb->af); goto exit;} + case 'b': if (string[1] == 'c') {ret = VALUE_16(gb->bc); goto exit;} + case 'd': if (string[1] == 'e') {ret = VALUE_16(gb->de); goto exit;} + case 'h': if (string[1] == 'l') {ret = VALUE_16(gb->hl); goto exit;} + case 's': if (string[1] == 'p') {ret = VALUE_16(gb->sp); goto exit;} + case 'p': if (string[1] == 'c') {ret = (value_t){true, bank_for_addr(gb, gb->pc), gb->pc}; goto exit;} + } + } + else if (length == 3) { + if (watchpoint_address && memcmp(string, "old", 3) == 0) { + ret = VALUE_16(GB_read_memory(gb, *watchpoint_address)); + goto exit; + } + + if (watchpoint_new_value && memcmp(string, "new", 3) == 0) { + ret = VALUE_16(*watchpoint_new_value); + goto exit; + } + + /* $new is identical to $old in read conditions */ + if (watchpoint_address && memcmp(string, "new", 3) == 0) { + ret = VALUE_16(GB_read_memory(gb, *watchpoint_address)); + goto exit; + } + } + + char symbol_name[length + 1]; + memcpy(symbol_name, string, length); + symbol_name[length] = 0; + const GB_symbol_t *symbol = GB_reversed_map_find_symbol(&gb->reversed_symbol_map, symbol_name); + if (symbol) { + ret = (value_t){true, symbol->bank, symbol->addr}; + goto exit; + } + + GB_log(gb, "Unknown register or symbol: %.*s\n", (unsigned) length, string); + *error = true; + goto exit; + } + + char *end; + unsigned base = 10; + if (string[0] == '$') { + string++; + base = 16; + length--; + } + uint16_t literal = (uint16_t) (strtol(string, &end, base)); + if (end != string + length) { + GB_log(gb, "Failed to parse: %.*s\n", (unsigned) length, string); + *error = true; + goto exit; + } + ret = VALUE_16(literal); +exit: + gb->n_watchpoints = n_watchpoints; + return ret; +} + +struct debugger_command_s; +typedef bool debugger_command_imp_t(GB_gameboy_t *gb, char *arguments, char *modifiers, const struct debugger_command_s *command); +typedef char *debugger_completer_imp_t(GB_gameboy_t *gb, const char *string, uintptr_t *context); + +typedef struct debugger_command_s { + const char *command; + uint8_t min_length; + debugger_command_imp_t *implementation; + const char *help_string; // Null if should not appear in help + const char *arguments_format; // For usage message + const char *modifiers_format; // For usage message + debugger_completer_imp_t *argument_completer; + debugger_completer_imp_t *modifiers_completer; +} debugger_command_t; + +static const char *lstrip(const char *str) +{ + while (*str == ' ' || *str == '\t') { + str++; + } + return str; +} + +#define STOPPED_ONLY \ +if (!gb->debug_stopped) { \ +GB_log(gb, "Program is running. \n"); \ +return false; \ +} + +#define NO_MODIFIERS \ +if (modifiers) { \ +print_usage(gb, command); \ +return true; \ +} + +static void print_usage(GB_gameboy_t *gb, const debugger_command_t *command) +{ + GB_log(gb, "Usage: %s", command->command); + + if (command->modifiers_format) { + GB_log(gb, "[/%s]", command->modifiers_format); + } + + if (command->arguments_format) { + GB_log(gb, " %s", command->arguments_format); + } + + GB_log(gb, "\n"); +} + +static bool cont(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + STOPPED_ONLY + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + gb->debug_stopped = false; + return false; +} + +static bool next(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + STOPPED_ONLY + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + gb->debug_stopped = false; + gb->debug_next_command = true; + gb->debug_call_depth = 0; + return false; +} + +static bool step(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + STOPPED_ONLY + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + return false; +} + +static bool finish(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + STOPPED_ONLY + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + gb->debug_stopped = false; + gb->debug_fin_command = true; + gb->debug_call_depth = 0; + return false; +} + +static bool registers(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + + GB_log(gb, "AF = $%04x (%c%c%c%c)\n", gb->af, /* AF can't really be an address */ + (gb->f & GB_CARRY_FLAG)? 'C' : '-', + (gb->f & GB_HALF_CARRY_FLAG)? 'H' : '-', + (gb->f & GB_SUBTRACT_FLAG)? 'N' : '-', + (gb->f & GB_ZERO_FLAG)? 'Z' : '-'); + GB_log(gb, "BC = %s\n", value_to_string(gb, gb->bc, false)); + GB_log(gb, "DE = %s\n", value_to_string(gb, gb->de, false)); + GB_log(gb, "HL = %s\n", value_to_string(gb, gb->hl, false)); + GB_log(gb, "SP = %s\n", value_to_string(gb, gb->sp, false)); + GB_log(gb, "PC = %s\n", value_to_string(gb, gb->pc, false)); + GB_log(gb, "IME = %s\n", gb->ime? "Enabled" : "Disabled"); + return true; +} + +static char *on_off_completer(GB_gameboy_t *gb, const char *string, uintptr_t *context) +{ + size_t length = strlen(string); + const char *suggestions[] = {"on", "off"}; + while (*context < sizeof(suggestions) / sizeof(suggestions[0])) { + if (memcmp(string, suggestions[*context], length) == 0) { + return strdup(suggestions[(*context)++] + length); + } + (*context)++; + } + return NULL; +} + +/* Enable or disable software breakpoints */ +static bool softbreak(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strcmp(lstrip(arguments), "on") == 0 || !strlen(lstrip(arguments))) { + gb->has_software_breakpoints = true; + } + else if (strcmp(lstrip(arguments), "off") == 0) { + gb->has_software_breakpoints = false; + } + else { + print_usage(gb, command); + } + + return true; +} + +/* Find the index of the closest breakpoint equal or greater to addr */ +static uint16_t find_breakpoint(GB_gameboy_t *gb, value_t addr) +{ + if (!gb->breakpoints) { + return 0; + } + + uint32_t key = BP_KEY(addr); + + unsigned min = 0; + unsigned max = gb->n_breakpoints; + while (min < max) { + uint16_t pivot = (min + max) / 2; + if (gb->breakpoints[pivot].key == key) return pivot; + if (gb->breakpoints[pivot].key > key) { + max = pivot; + } + else { + min = pivot + 1; + } + } + return (uint16_t) min; +} + +static inline bool is_legal_symbol_char(char c) +{ + if (c >= '0' && c <= '9') return true; + if (c >= 'A' && c <= 'Z') return true; + if (c >= 'a' && c <= 'z') return true; + if (c == '_') return true; + if (c == '.') return true; + return false; +} + +static char *symbol_completer(GB_gameboy_t *gb, const char *string, uintptr_t *_context) +{ + const char *symbol_prefix = string; + while (*string) { + if (!is_legal_symbol_char(*string)) { + symbol_prefix = string + 1; + } + string++; + } + + if (*symbol_prefix == '$') { + return NULL; + } + + struct { + uint16_t bank; + uint32_t symbol; + } *context = (void *)_context; + + + size_t length = strlen(symbol_prefix); + while (context->bank < 0x200) { + GB_symbol_map_t *map = get_symbol_map(gb, context->bank); + if (map == NULL || + context->symbol >= map->n_symbols) { + context->bank++; + context->symbol = 0; + continue; + } + const char *candidate = map->symbols[context->symbol++].name; + if (memcmp(symbol_prefix, candidate, length) == 0) { + return strdup(candidate + length); + } + } + return NULL; +} + +static char *j_completer(GB_gameboy_t *gb, const char *string, uintptr_t *context) +{ + size_t length = strlen(string); + const char *suggestions[] = {"j"}; + while (*context < sizeof(suggestions) / sizeof(suggestions[0])) { + if (memcmp(string, suggestions[*context], length) == 0) { + return strdup(suggestions[(*context)++] + length); + } + (*context)++; + } + return NULL; +} + +static bool breakpoint(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + bool is_jump_to = true; + if (!modifiers) { + is_jump_to = false; + } + else if (strcmp(modifiers, "j") != 0) { + print_usage(gb, command); + return true; + } + + if (strlen(lstrip(arguments)) == 0) { + print_usage(gb, command); + return true; + } + + if (gb->n_breakpoints == (typeof(gb->n_breakpoints)) -1) { + GB_log(gb, "Too many breakpoints set\n"); + return true; + } + + char *condition = NULL; + if ((condition = strstr(arguments, " if "))) { + *condition = 0; + condition += strlen(" if "); + /* Verify condition is sane (Todo: This might have side effects!) */ + bool error; + debugger_evaluate(gb, condition, (unsigned)strlen(condition), &error, NULL, NULL); + if (error) return true; + + } + + bool error; + value_t result = debugger_evaluate(gb, arguments, (unsigned)strlen(arguments), &error, NULL, NULL); + uint32_t key = BP_KEY(result); + + if (error) return true; + + uint16_t index = find_breakpoint(gb, result); + if (index < gb->n_breakpoints && gb->breakpoints[index].key == key) { + GB_log(gb, "Breakpoint already set at %s\n", debugger_value_to_string(gb, result, true)); + if (!gb->breakpoints[index].condition && condition) { + GB_log(gb, "Added condition to breakpoint\n"); + gb->breakpoints[index].condition = strdup(condition); + } + else if (gb->breakpoints[index].condition && condition) { + GB_log(gb, "Replaced breakpoint condition\n"); + free(gb->breakpoints[index].condition); + gb->breakpoints[index].condition = strdup(condition); + } + else if (gb->breakpoints[index].condition && !condition) { + GB_log(gb, "Removed breakpoint condition\n"); + free(gb->breakpoints[index].condition); + gb->breakpoints[index].condition = NULL; + } + return true; + } + + gb->breakpoints = realloc(gb->breakpoints, (gb->n_breakpoints + 1) * sizeof(gb->breakpoints[0])); + memmove(&gb->breakpoints[index + 1], &gb->breakpoints[index], (gb->n_breakpoints - index) * sizeof(gb->breakpoints[0])); + gb->breakpoints[index].key = key; + + if (condition) { + gb->breakpoints[index].condition = strdup(condition); + } + else { + gb->breakpoints[index].condition = NULL; + } + gb->n_breakpoints++; + + gb->breakpoints[index].is_jump_to = is_jump_to; + + if (is_jump_to) { + gb->has_jump_to_breakpoints = true; + } + + GB_log(gb, "Breakpoint set at %s\n", debugger_value_to_string(gb, result, true)); + return true; +} + +static bool delete(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments)) == 0) { + for (unsigned i = gb->n_breakpoints; i--;) { + if (gb->breakpoints[i].condition) { + free(gb->breakpoints[i].condition); + } + } + free(gb->breakpoints); + gb->breakpoints = NULL; + gb->n_breakpoints = 0; + return true; + } + + bool error; + value_t result = debugger_evaluate(gb, arguments, (unsigned)strlen(arguments), &error, NULL, NULL); + uint32_t key = BP_KEY(result); + + if (error) return true; + + uint16_t index = 0; + for (unsigned i = 0; i < gb->n_breakpoints; i++) { + if (gb->breakpoints[i].key == key) { + /* Full match */ + index = i; + break; + } + if (gb->breakpoints[i].addr == result.value && result.has_bank != (gb->breakpoints[i].bank != (uint16_t) -1)) { + /* Partial match */ + index = i; + } + } + + if (index >= gb->n_breakpoints) { + GB_log(gb, "No breakpoint set at %s\n", debugger_value_to_string(gb, result, true)); + return true; + } + + result.bank = gb->breakpoints[index].bank; + result.has_bank = gb->breakpoints[index].bank != (uint16_t) -1; + + if (gb->breakpoints[index].condition) { + free(gb->breakpoints[index].condition); + } + + if (gb->breakpoints[index].is_jump_to) { + gb->has_jump_to_breakpoints = false; + for (unsigned i = 0; i < gb->n_breakpoints; i++) { + if (i == index) continue; + if (gb->breakpoints[i].is_jump_to) { + gb->has_jump_to_breakpoints = true; + break; + } + } + } + + memmove(&gb->breakpoints[index], &gb->breakpoints[index + 1], (gb->n_breakpoints - index - 1) * sizeof(gb->breakpoints[0])); + gb->n_breakpoints--; + gb->breakpoints = realloc(gb->breakpoints, gb->n_breakpoints * sizeof(gb->breakpoints[0])); + + GB_log(gb, "Breakpoint removed from %s\n", debugger_value_to_string(gb, result, true)); + return true; +} + +/* Find the index of the closest watchpoint equal or greater to addr */ +static uint16_t find_watchpoint(GB_gameboy_t *gb, value_t addr) +{ + if (!gb->watchpoints) { + return 0; + } + uint32_t key = WP_KEY(addr); + unsigned min = 0; + unsigned max = gb->n_watchpoints; + while (min < max) { + uint16_t pivot = (min + max) / 2; + if (gb->watchpoints[pivot].key == key) return pivot; + if (gb->watchpoints[pivot].key > key) { + max = pivot; + } + else { + min = pivot + 1; + } + } + return (uint16_t) min; +} + +static char *rw_completer(GB_gameboy_t *gb, const char *string, uintptr_t *context) +{ + size_t length = strlen(string); + const char *suggestions[] = {"r", "rw", "w"}; + while (*context < sizeof(suggestions) / sizeof(suggestions[0])) { + if (memcmp(string, suggestions[*context], length) == 0) { + return strdup(suggestions[(*context)++] + length); + } + (*context)++; + } + return NULL; +} + +static bool watch(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + if (strlen(lstrip(arguments)) == 0) { +print_usage: + print_usage(gb, command); + return true; + } + + if (gb->n_watchpoints == (typeof(gb->n_watchpoints)) -1) { + GB_log(gb, "Too many watchpoints set\n"); + return true; + } + + if (!modifiers) { + modifiers = "w"; + } + + uint8_t flags = 0; + while (*modifiers) { + switch (*modifiers) { + case 'r': + flags |= GB_WATCHPOINT_R; + break; + case 'w': + flags |= GB_WATCHPOINT_W; + break; + default: + goto print_usage; + } + modifiers++; + } + + if (!flags) { + goto print_usage; + } + + char *condition = NULL; + if ((condition = strstr(arguments, " if "))) { + *condition = 0; + condition += strlen(" if "); + /* Verify condition is sane (Todo: This might have side effects!) */ + bool error; + /* To make $new and $old legal */ + uint16_t dummy = 0; + uint8_t dummy2 = 0; + debugger_evaluate(gb, condition, (unsigned)strlen(condition), &error, &dummy, &dummy2); + if (error) return true; + + } + + bool error; + value_t result = debugger_evaluate(gb, arguments, (unsigned)strlen(arguments), &error, NULL, NULL); + uint32_t key = WP_KEY(result); + + if (error) return true; + + uint16_t index = find_watchpoint(gb, result); + if (index < gb->n_watchpoints && gb->watchpoints[index].key == key) { + GB_log(gb, "Watchpoint already set at %s\n", debugger_value_to_string(gb, result, true)); + if (gb->watchpoints[index].flags != flags) { + GB_log(gb, "Modified watchpoint type\n"); + gb->watchpoints[index].flags = flags; + } + if (!gb->watchpoints[index].condition && condition) { + GB_log(gb, "Added condition to watchpoint\n"); + gb->watchpoints[index].condition = strdup(condition); + } + else if (gb->watchpoints[index].condition && condition) { + GB_log(gb, "Replaced watchpoint condition\n"); + free(gb->watchpoints[index].condition); + gb->watchpoints[index].condition = strdup(condition); + } + else if (gb->watchpoints[index].condition && !condition) { + GB_log(gb, "Removed watchpoint condition\n"); + free(gb->watchpoints[index].condition); + gb->watchpoints[index].condition = NULL; + } + return true; + } + + gb->watchpoints = realloc(gb->watchpoints, (gb->n_watchpoints + 1) * sizeof(gb->watchpoints[0])); + memmove(&gb->watchpoints[index + 1], &gb->watchpoints[index], (gb->n_watchpoints - index) * sizeof(gb->watchpoints[0])); + gb->watchpoints[index].key = key; + gb->watchpoints[index].flags = flags; + if (condition) { + gb->watchpoints[index].condition = strdup(condition); + } + else { + gb->watchpoints[index].condition = NULL; + } + gb->n_watchpoints++; + + GB_log(gb, "Watchpoint set at %s\n", debugger_value_to_string(gb, result, true)); + return true; +} + +static bool unwatch(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments)) == 0) { + for (unsigned i = gb->n_watchpoints; i--;) { + if (gb->watchpoints[i].condition) { + free(gb->watchpoints[i].condition); + } + } + free(gb->watchpoints); + gb->watchpoints = NULL; + gb->n_watchpoints = 0; + return true; + } + + bool error; + value_t result = debugger_evaluate(gb, arguments, (unsigned)strlen(arguments), &error, NULL, NULL); + uint32_t key = WP_KEY(result); + + if (error) return true; + + uint16_t index = 0; + for (unsigned i = 0; i < gb->n_watchpoints; i++) { + if (gb->watchpoints[i].key == key) { + /* Full match */ + index = i; + break; + } + if (gb->watchpoints[i].addr == result.value && result.has_bank != (gb->watchpoints[i].bank != (uint16_t) -1)) { + /* Partial match */ + index = i; + } + } + + if (index >= gb->n_watchpoints) { + GB_log(gb, "No watchpoint set at %s\n", debugger_value_to_string(gb, result, true)); + return true; + } + + result.bank = gb->watchpoints[index].bank; + result.has_bank = gb->watchpoints[index].bank != (uint16_t) -1; + + if (gb->watchpoints[index].condition) { + free(gb->watchpoints[index].condition); + } + + memmove(&gb->watchpoints[index], &gb->watchpoints[index + 1], (gb->n_watchpoints - index - 1) * sizeof(gb->watchpoints[0])); + gb->n_watchpoints--; + gb->watchpoints = realloc(gb->watchpoints, gb->n_watchpoints *sizeof(gb->watchpoints[0])); + + GB_log(gb, "Watchpoint removed from %s\n", debugger_value_to_string(gb, result, true)); + return true; +} + +static bool list(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + if (gb->n_breakpoints == 0) { + GB_log(gb, "No breakpoints set.\n"); + } + else { + GB_log(gb, "%d breakpoint(s) set:\n", gb->n_breakpoints); + for (uint16_t i = 0; i < gb->n_breakpoints; i++) { + value_t addr = (value_t){gb->breakpoints[i].bank != (uint16_t)-1, gb->breakpoints[i].bank, gb->breakpoints[i].addr}; + if (gb->breakpoints[i].condition) { + GB_log(gb, " %d. %s (%sCondition: %s)\n", i + 1, + debugger_value_to_string(gb, addr, addr.has_bank), + gb->breakpoints[i].is_jump_to? "Jump to, ": "", + gb->breakpoints[i].condition); + } + else { + GB_log(gb, " %d. %s%s\n", i + 1, + debugger_value_to_string(gb, addr, addr.has_bank), + gb->breakpoints[i].is_jump_to? " (Jump to)" : ""); + } + } + } + + if (gb->n_watchpoints == 0) { + GB_log(gb, "No watchpoints set.\n"); + } + else { + GB_log(gb, "%d watchpoint(s) set:\n", gb->n_watchpoints); + for (uint16_t i = 0; i < gb->n_watchpoints; i++) { + value_t addr = (value_t){gb->watchpoints[i].bank != (uint16_t)-1, gb->watchpoints[i].bank, gb->watchpoints[i].addr}; + if (gb->watchpoints[i].condition) { + GB_log(gb, " %d. %s (%c%c, Condition: %s)\n", i + 1, debugger_value_to_string(gb, addr, addr.has_bank), + (gb->watchpoints[i].flags & GB_WATCHPOINT_R)? 'r' : '-', + (gb->watchpoints[i].flags & GB_WATCHPOINT_W)? 'w' : '-', + gb->watchpoints[i].condition); + } + else { + GB_log(gb, " %d. %s (%c%c)\n", i + 1, debugger_value_to_string(gb, addr, addr.has_bank), + (gb->watchpoints[i].flags & GB_WATCHPOINT_R)? 'r' : '-', + (gb->watchpoints[i].flags & GB_WATCHPOINT_W)? 'w' : '-'); + } + } + } + + return true; +} + +static bool _should_break(GB_gameboy_t *gb, value_t addr, bool jump_to) +{ + uint16_t index = find_breakpoint(gb, addr); + uint32_t key = BP_KEY(addr); + + if (index < gb->n_breakpoints && gb->breakpoints[index].key == key && gb->breakpoints[index].is_jump_to == jump_to) { + if (!gb->breakpoints[index].condition) { + return true; + } + bool error; + bool condition = debugger_evaluate(gb, gb->breakpoints[index].condition, + (unsigned)strlen(gb->breakpoints[index].condition), &error, NULL, NULL).value; + if (error) { + /* Should never happen */ + GB_log(gb, "An internal error has occured\n"); + return true; + } + return condition; + } + return false; +} + +static bool should_break(GB_gameboy_t *gb, uint16_t addr, bool jump_to) +{ + /* Try any-bank breakpoint */ + value_t full_addr = (VALUE_16(addr)); + if (_should_break(gb, full_addr, jump_to)) return true; + + /* Try bank-specific breakpoint */ + full_addr.has_bank = true; + full_addr.bank = bank_for_addr(gb, addr); + return _should_break(gb, full_addr, jump_to); +} + +static char *format_completer(GB_gameboy_t *gb, const char *string, uintptr_t *context) +{ + size_t length = strlen(string); + const char *suggestions[] = {"a", "b", "d", "o", "x"}; + while (*context < sizeof(suggestions) / sizeof(suggestions[0])) { + if (memcmp(string, suggestions[*context], length) == 0) { + return strdup(suggestions[(*context)++] + length); + } + (*context)++; + } + return NULL; +} + +static bool print(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + if (strlen(lstrip(arguments)) == 0) { + print_usage(gb, command); + return true; + } + + if (!modifiers || !modifiers[0]) { + modifiers = "a"; + } + else if (modifiers[1]) { + print_usage(gb, command); + return true; + } + + bool error; + value_t result = debugger_evaluate(gb, arguments, (unsigned)strlen(arguments), &error, NULL, NULL); + if (!error) { + switch (modifiers[0]) { + case 'a': + GB_log(gb, "=%s\n", debugger_value_to_string(gb, result, false)); + break; + case 'd': + GB_log(gb, "=%d\n", result.value); + break; + case 'x': + GB_log(gb, "=$%x\n", result.value); + break; + case 'o': + GB_log(gb, "=0%o\n", result.value); + break; + case 'b': + { + if (!result.value) { + GB_log(gb, "=%%0\n"); + break; + } + char binary[17]; + binary[16] = 0; + char *ptr = &binary[16]; + while (result.value) { + *(--ptr) = (result.value & 1)? '1' : '0'; + result.value >>= 1; + } + GB_log(gb, "=%%%s\n", ptr); + break; + } + default: + break; + } + } + return true; +} + +static bool examine(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + if (strlen(lstrip(arguments)) == 0) { + print_usage(gb, command); + return true; + } + + bool error; + value_t addr = debugger_evaluate(gb, arguments, (unsigned)strlen(arguments), &error, NULL, NULL); + uint16_t count = 32; + + if (modifiers) { + char *end; + count = (uint16_t) (strtol(modifiers, &end, 10)); + if (*end) { + print_usage(gb, command); + return true; + } + } + + if (!error) { + if (addr.has_bank) { + banking_state_t old_state; + save_banking_state(gb, &old_state); + switch_banking_state(gb, addr.bank); + + while (count) { + GB_log(gb, "%02x:%04x: ", addr.bank, addr.value); + for (unsigned i = 0; i < 16 && count; i++) { + GB_log(gb, "%02x ", GB_safe_read_memory(gb, addr.value + i)); + count--; + } + addr.value += 16; + GB_log(gb, "\n"); + } + + restore_banking_state(gb, &old_state); + } + else { + while (count) { + GB_log(gb, "%04x: ", addr.value); + for (unsigned i = 0; i < 16 && count; i++) { + GB_log(gb, "%02x ", GB_safe_read_memory(gb, addr.value + i)); + count--; + } + addr.value += 16; + GB_log(gb, "\n"); + } + } + } + return true; +} + +static bool disassemble(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + if (strlen(lstrip(arguments)) == 0) { + arguments = "pc"; + } + + bool error; + value_t addr = debugger_evaluate(gb, arguments, (unsigned)strlen(arguments), &error, NULL, NULL); + uint16_t count = 5; + + if (modifiers) { + char *end; + count = (uint16_t) (strtol(modifiers, &end, 10)); + if (*end) { + print_usage(gb, command); + return true; + } + } + + if (!error) { + if (addr.has_bank) { + banking_state_t old_state; + save_banking_state(gb, &old_state); + switch_banking_state(gb, addr.bank); + + GB_cpu_disassemble(gb, addr.value, count); + + restore_banking_state(gb, &old_state); + } + else { + GB_cpu_disassemble(gb, addr.value, count); + } + } + return true; +} + +static bool mbc(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + const GB_cartridge_t *cartridge = gb->cartridge_type; + + if (cartridge->has_ram) { + bool has_battery = gb->cartridge_type->has_battery && + (gb->cartridge_type->mbc_type != GB_TPP1 || (gb->rom[0x153] & 8)); + GB_log(gb, "Cartridge includes%s RAM: $%x bytes\n", has_battery? " battery-backed": "", gb->mbc_ram_size); + } + else { + GB_log(gb, "No cartridge RAM\n"); + } + + if (cartridge->mbc_type) { + if (gb->is_mbc30) { + GB_log(gb, "MBC30\n"); + } + else { + static const char *const mapper_names[] = { + [GB_MBC1] = "MBC1", + [GB_MBC2] = "MBC2", + [GB_MBC3] = "MBC3", + [GB_MBC5] = "MBC5", + [GB_MBC7] = "MBC7", + [GB_MMM01] = "MMM01", + [GB_HUC1] = "HUC-1", + [GB_HUC3] = "HUC-3", + [GB_CAMERA] = "MAC-GBD", + + }; + GB_log(gb, "%s\n", mapper_names[cartridge->mbc_type]); + } + if (cartridge->mbc_type == GB_MMM01 || cartridge->mbc_type == GB_MBC1) { + GB_log(gb, "Current mapped ROM0 bank: %x\n", gb->mbc_rom0_bank); + } + GB_log(gb, "Current mapped ROM bank: %x\n", gb->mbc_rom_bank); + if (cartridge->has_ram) { + GB_log(gb, "Current mapped RAM bank: %x\n", gb->mbc_ram_bank); + if (gb->cartridge_type->mbc_type != GB_HUC1) { + GB_log(gb, "RAM is currently %s\n", gb->mbc_ram_enable? "enabled" : "disabled"); + } + } + if (cartridge->mbc_type == GB_MBC1 && gb->mbc1_wiring == GB_STANDARD_MBC1_WIRING) { + GB_log(gb, "MBC1 banking mode is %s\n", gb->mbc1.mode == 1 ? "RAM" : "ROM"); + } + if (cartridge->mbc_type == GB_MBC1 && gb->mbc1_wiring == GB_MBC1M_WIRING) { + GB_log(gb, "MBC1 uses MBC1M wiring. \n"); + GB_log(gb, "Current mapped ROM0 bank: %x\n", gb->mbc_rom0_bank); + GB_log(gb, "MBC1 multicart banking mode is %s\n", gb->mbc1.mode == 1 ? "enabled" : "disabled"); + } + + } + else { + GB_log(gb, "No MBC\n"); + } + + if (gb->cartridge_type->has_rumble && + (gb->cartridge_type->mbc_type != GB_TPP1 || (gb->rom[0x153] & 1))) { + GB_log(gb, "Cart contains a Rumble Pak\n"); + } + + if (cartridge->has_rtc) { + GB_log(gb, "Cart contains a real time clock\n"); + } + + return true; +} + +static bool backtrace(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + GB_log(gb, " 1. %s\n", debugger_value_to_string(gb, (value_t){true, bank_for_addr(gb, gb->pc), gb->pc}, true)); + for (unsigned i = gb->backtrace_size; i--;) { + GB_log(gb, "%3d. %s\n", gb->backtrace_size - i + 1, debugger_value_to_string(gb, (value_t){true, gb->backtrace_returns[i].bank, gb->backtrace_returns[i].addr}, true)); + } + + return true; +} + +static bool ticks(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + STOPPED_ONLY + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + GB_log(gb, "T-cycles: %llu\n", (unsigned long long)gb->debugger_ticks); + GB_log(gb, "M-cycles: %llu\n", (unsigned long long)gb->debugger_ticks / 4); + GB_log(gb, "Absolute 8MHz ticks: %llu\n", (unsigned long long)gb->absolute_debugger_ticks); + GB_log(gb, "Tick count reset.\n"); + gb->debugger_ticks = 0; + gb->absolute_debugger_ticks = 0; + + return true; +} + + +static bool palettes(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + if (!GB_is_cgb(gb)) { + GB_log(gb, "Not available on a DMG.\n"); + return true; + } + + GB_log(gb, "Background palettes: \n"); + for (unsigned i = 0; i < 32; i++) { + GB_log(gb, "%04x ", ((uint16_t *)&gb->background_palettes_data)[i]); + if (i % 4 == 3) { + GB_log(gb, "\n"); + } + } + + GB_log(gb, "Object palettes: \n"); + for (unsigned i = 0; i < 32; i++) { + GB_log(gb, "%04x ", ((uint16_t *)&gb->object_palettes_data)[i]); + if (i % 4 == 3) { + GB_log(gb, "\n"); + } + } + + return true; +} + +static bool dma(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + if (!GB_is_dma_active(gb)) { + GB_log(gb, "DMA is inactive\n"); + return true; + } + + if (gb->dma_current_dest == 0xFF) { + GB_log(gb, "DMA warming up\n"); // Shouldn't actually happen, as it only lasts 2 T-cycles + return true; + } + + GB_log(gb, "Next DMA write: [$FE%02X] = [$%04X]\n", gb->dma_current_dest, gb->dma_current_src); + + return true; +} + +static bool lcd(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + GB_log(gb, "LCDC:\n"); + GB_log(gb, " LCD enabled: %s\n",(gb->io_registers[GB_IO_LCDC] & 128)? "Enabled" : "Disabled"); + GB_log(gb, " %s: %s\n", (gb->cgb_mode? "Object priority flags" : "Background and Window"), + (gb->io_registers[GB_IO_LCDC] & 1)? "Enabled" : "Disabled"); + GB_log(gb, " Objects: %s\n", (gb->io_registers[GB_IO_LCDC] & 2)? "Enabled" : "Disabled"); + GB_log(gb, " Object size: %s\n", (gb->io_registers[GB_IO_LCDC] & 4)? "8x16" : "8x8"); + GB_log(gb, " Background tilemap: %s\n", (gb->io_registers[GB_IO_LCDC] & 8)? "$9C00" : "$9800"); + GB_log(gb, " Background and Window Tileset: %s\n", (gb->io_registers[GB_IO_LCDC] & 16)? "$8000" : "$8800"); + GB_log(gb, " Window: %s\n", (gb->io_registers[GB_IO_LCDC] & 32)? "Enabled" : "Disabled"); + GB_log(gb, " Window tilemap: %s\n", (gb->io_registers[GB_IO_LCDC] & 64)? "$9C00" : "$9800"); + + GB_log(gb, "\nSTAT:\n"); + static const char *modes[] = {"Mode 0, H-Blank", "Mode 1, V-Blank", "Mode 2, OAM", "Mode 3, Rendering"}; + GB_log(gb, " Current mode: %s\n", modes[gb->io_registers[GB_IO_STAT] & 3]); + GB_log(gb, " LYC flag: %s\n", (gb->io_registers[GB_IO_STAT] & 4)? "On" : "Off"); + GB_log(gb, " H-Blank interrupt: %s\n", (gb->io_registers[GB_IO_STAT] & 8)? "Enabled" : "Disabled"); + GB_log(gb, " V-Blank interrupt: %s\n", (gb->io_registers[GB_IO_STAT] & 16)? "Enabled" : "Disabled"); + GB_log(gb, " OAM interrupt: %s\n", (gb->io_registers[GB_IO_STAT] & 32)? "Enabled" : "Disabled"); + GB_log(gb, " LYC interrupt: %s\n", (gb->io_registers[GB_IO_STAT] & 64)? "Enabled" : "Disabled"); + + + + GB_log(gb, "\nCurrent line: %d\n", gb->current_line); + GB_log(gb, "Current state: "); + if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) { + GB_log(gb, "Off\n"); + } + else if (gb->display_state == 7 || gb->display_state == 8) { + GB_log(gb, "Reading OAM data (%d/40)\n", gb->display_state == 8? gb->oam_search_index : 0); + } + else if (gb->display_state <= 3 || gb->display_state == 24 || gb->display_state == 31) { + GB_log(gb, "Glitched line 0 OAM mode (%d cycles to next event)\n", -gb->display_cycles / 2); + } + else if (gb->mode_for_interrupt == 3) { + if (((uint8_t)(gb->position_in_line + 16) < 8)) { + GB_log(gb, "Adjusting for scrolling (%d/%d)\n", gb->position_in_line & 7, gb->io_registers[GB_IO_SCX] & 7); + } + else { + signed pixel = gb->position_in_line > 160? (int8_t) gb->position_in_line : gb->position_in_line; + GB_log(gb, "Rendering pixel (%d/160)\n", pixel); + } + } + else { + GB_log(gb, "Sleeping (%d cycles to next event)\n", -gb->display_cycles / 2); + } + GB_log(gb, "LY: %d\n", gb->io_registers[GB_IO_LY]); + GB_log(gb, "LYC: %d\n", gb->io_registers[GB_IO_LYC]); + GB_log(gb, "Window position: %d, %d\n", (signed) gb->io_registers[GB_IO_WX] - 7, gb->io_registers[GB_IO_WY]); + GB_log(gb, "Interrupt line: %s\n", gb->stat_interrupt_line? "On" : "Off"); + + return true; +} + +static bool apu(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + const char *stripped = lstrip(arguments); + if (strlen(stripped)) { + if (stripped[0] != 0 && (stripped[0] < '1' || stripped[0] > '5')) { + print_usage(gb, command); + return true; + } + } + + if (stripped[0] == 0 || stripped[0] == '5') { + GB_log(gb, "Current state: "); + if (!gb->apu.global_enable) { + GB_log(gb, "Disabled\n"); + } + else { + GB_log(gb, "Enabled\n"); + for (uint8_t channel = 0; channel < GB_N_CHANNELS; channel++) { + GB_log(gb, "CH%u is %s, DAC %s; current sample = 0x%x\n", channel + 1, + gb->apu.is_active[channel] ? "active " : "inactive", + GB_apu_is_DAC_enabled(gb, channel) ? "active " : "inactive", + gb->apu.samples[channel]); + } + } + + GB_log(gb, "SO1 (left output): volume %u,", gb->io_registers[GB_IO_NR50] & 0x07); + if (gb->io_registers[GB_IO_NR51] & 0x0F) { + for (uint8_t channel = 0, mask = 0x01; channel < GB_N_CHANNELS; channel++, mask <<= 1) { + if (gb->io_registers[GB_IO_NR51] & mask) { + GB_log(gb, " CH%u", channel + 1); + } + } + } + else { + GB_log(gb, " no channels"); + } + GB_log(gb, "%s\n", gb->io_registers[GB_IO_NR50] & 0x80 ? " VIN": ""); + + GB_log(gb, "SO2 (right output): volume %u,", gb->io_registers[GB_IO_NR50] & 0x70 >> 4); + if (gb->io_registers[GB_IO_NR51] & 0xF0) { + for (uint8_t channel = 0, mask = 0x10; channel < GB_N_CHANNELS; channel++, mask <<= 1) { + if (gb->io_registers[GB_IO_NR51] & mask) { + GB_log(gb, " CH%u", channel + 1); + } + } + } + else { + GB_log(gb, " no channels"); + } + GB_log(gb, "%s\n", gb->io_registers[GB_IO_NR50] & 0x80 ? " VIN": ""); + } + + + for (uint8_t channel = GB_SQUARE_1; channel <= GB_SQUARE_2; channel++) { + if (stripped[0] != 0 && stripped[0] != ('1') + channel) continue; + + GB_log(gb, "\nCH%u:\n", channel + 1); + GB_log(gb, " Current volume: %u, current sample length: %u APU ticks (next in %u ticks)\n", + gb->apu.square_channels[channel].current_volume, + (gb->apu.square_channels[channel].sample_length ^ 0x7FF) * 2 + 1, + gb->apu.square_channels[channel].sample_countdown); + + uint8_t nrx2 = gb->io_registers[channel == GB_SQUARE_1? GB_IO_NR12 : GB_IO_NR22]; + GB_log(gb, " %u 256 Hz ticks till next volume %screase (out of %u)\n", + gb->apu.square_channels[channel].volume_countdown, + nrx2 & 8 ? "in" : "de", + nrx2 & 7); + + uint8_t duty = gb->io_registers[channel == GB_SQUARE_1? GB_IO_NR11 :GB_IO_NR21] >> 6; + GB_log(gb, " Duty cycle %s%% (%s), current index %u/8%s\n", + duty > 3? "" : (const char *const[]){"12.5", " 25", " 50", " 75"}[duty], + duty > 3? "" : (const char *const[]){"_______-", "-______-", "-____---", "_------_"}[duty], + gb->apu.square_channels[channel].current_sample_index, + gb->apu.square_channels[channel].sample_surpressed ? " (suppressed)" : ""); + + if (channel == GB_SQUARE_1) { + GB_log(gb, " Frequency sweep %s and %s\n", + ((gb->io_registers[GB_IO_NR10] & 0x7) && (gb->io_registers[GB_IO_NR10] & 0x70))? "active" : "inactive", + (gb->io_registers[GB_IO_NR10] & 0x8) ? "decreasing" : "increasing"); + if (gb->apu.square_sweep_calculate_countdown) { + GB_log(gb, " On going frequency calculation will be ready in %u APU ticks\n", + gb->apu.square_sweep_calculate_countdown); + } + else { + GB_log(gb, " Shadow frequency register: 0x%03x\n", gb->apu.shadow_sweep_sample_length); + GB_log(gb, " Sweep addend register: 0x%03x\n", gb->apu.sweep_length_addend); + } + } + + if (gb->apu.square_channels[channel].length_enabled) { + GB_log(gb, " Channel will end in %u 256 Hz ticks\n", + gb->apu.square_channels[channel].pulse_length); + } + } + + if (stripped[0] == 0 || stripped[0] == '3') { + GB_log(gb, "\nCH3:\n"); + GB_log(gb, " Wave:"); + for (uint8_t i = 0; i < 16; i++) { + GB_log(gb, "%s%X", i % 2? "" : " ", gb->io_registers[GB_IO_WAV_START + i] >> 4); + GB_log(gb, "%X", gb->io_registers[GB_IO_WAV_START + i] & 0xF); + } + GB_log(gb, "\n"); + GB_log(gb, " Current position: %u\n", gb->apu.wave_channel.current_sample_index); + + GB_log(gb, " Volume %s (right-shifted %u times)\n", + gb->apu.wave_channel.shift > 4? "" : (const char *const[]){"100%", "50%", "25%", "", "muted"}[gb->apu.wave_channel.shift], + gb->apu.wave_channel.shift); + + GB_log(gb, " Current sample length: %u APU ticks (next in %u ticks)\n", + gb->apu.wave_channel.sample_length ^ 0x7FF, + gb->apu.wave_channel.sample_countdown); + + if (gb->apu.wave_channel.length_enabled) { + GB_log(gb, " Channel will end in %u 256 Hz ticks\n", + gb->apu.wave_channel.pulse_length); + } + } + + + if (stripped[0] == 0 || stripped[0] == '4') { + GB_log(gb, "\nCH4:\n"); + GB_log(gb, " Current volume: %u, current internal counter: 0x%04x (next increase in %u ticks)\n", + gb->apu.noise_channel.current_volume, + gb->apu.noise_channel.counter, + gb->apu.noise_channel.counter_countdown); + + GB_log(gb, " %u 256 Hz ticks till next volume %screase (out of %u)\n", + gb->apu.noise_channel.volume_countdown, + gb->io_registers[GB_IO_NR42] & 8 ? "in" : "de", + gb->io_registers[GB_IO_NR42] & 7); + + GB_log(gb, " LFSR in %u-step mode, current value ", + gb->apu.noise_channel.narrow? 7 : 15); + for (uint16_t lfsr = gb->apu.noise_channel.lfsr, i = 15; i--; lfsr <<= 1) { + GB_log(gb, "%u%s", (lfsr >> 14) & 1, i%4 ? "" : " "); + } + + if (gb->apu.noise_channel.length_enabled) { + GB_log(gb, " Channel will end in %u 256 Hz ticks\n", + gb->apu.noise_channel.pulse_length); + } + } + + + GB_log(gb, "\n\nReminder: APU ticks are @ 2 MiHz\n"); + + return true; +} + +static char *wave_completer(GB_gameboy_t *gb, const char *string, uintptr_t *context) +{ + size_t length = strlen(string); + const char *suggestions[] = {"c", "f", "l"}; + while (*context < sizeof(suggestions) / sizeof(suggestions[0])) { + if (memcmp(string, suggestions[*context], length) == 0) { + return strdup(suggestions[(*context)++] + length); + } + (*context)++; + } + return NULL; +} + +static bool wave(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + if (strlen(lstrip(arguments)) || (modifiers && !strchr("fcl", modifiers[0]))) { + print_usage(gb, command); + return true; + } + + uint8_t shift_amount = 1, mask; + if (modifiers) { + switch (modifiers[0]) { + case 'c': + shift_amount = 2; + break; + case 'l': + shift_amount = 8; + break; + } + } + mask = (0xF << (shift_amount - 1)) & 0xF; + + for (int8_t cur_val = 0xF & mask; cur_val >= 0; cur_val -= shift_amount) { + for (uint8_t i = 0; i < 32; i++) { + uint8_t sample = i & 1? + (gb->io_registers[GB_IO_WAV_START + i / 2] & 0xF) : + (gb->io_registers[GB_IO_WAV_START + i / 2] >> 4); + if ((sample & mask) == cur_val) { + GB_log(gb, "%X", sample); + } + else { + GB_log(gb, "%c", i % 4 == 2 ? '-' : ' '); + } + } + GB_log(gb, "\n"); + } + + return true; +} + +static bool undo(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + STOPPED_ONLY + + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + if (!gb->undo_label) { + GB_log(gb, "No undo state available\n"); + return true; + } + uint16_t pc = gb->pc; + GB_load_state_from_buffer(gb, gb->undo_state, GB_get_save_state_size_no_bess(gb)); + GB_log(gb, "Reverted a \"%s\" command.\n", gb->undo_label); + if (pc != gb->pc) { + GB_cpu_disassemble(gb, gb->pc, 5); + } + gb->undo_label = NULL; + + return true; +} + +static bool help(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command); + +#define HELP_NEWLINE "\n " + +/* Commands without implementations are aliases of the previous non-alias commands */ +static const debugger_command_t commands[] = { + {"continue", 1, cont, "Continue running until next stop"}, + {"next", 1, next, "Run the next instruction, skipping over function calls"}, + {"step", 1, step, "Run the next instruction, stepping into function calls"}, + {"finish", 1, finish, "Run until the current function returns"}, + {"undo", 1, undo, "Revert the last command"}, + {"registers", 1, registers, "Print values of processor registers and other important registers"}, + {"backtrace", 2, backtrace, "Display the current call stack"}, + {"bt", 2, }, /* Alias */ + {"print", 1, print, "Evaluate and print an expression" HELP_NEWLINE + "Use modifier to format as an address (a, default) or as a number in" HELP_NEWLINE + "decimal (d), hexadecimal (x), octal (o) or binary (b).", + "", "format", .argument_completer = symbol_completer, .modifiers_completer = format_completer}, + {"eval", 2, }, /* Alias */ + {"examine", 2, examine, "Examine values at address", "", "count", .argument_completer = symbol_completer}, + {"x", 1, }, /* Alias */ + {"disassemble", 1, disassemble, "Disassemble instructions at address", "", "count", .argument_completer = symbol_completer}, + {"breakpoint", 1, breakpoint, "Add a new breakpoint at the specified address/expression" HELP_NEWLINE + "Can also modify the condition of existing breakpoints." HELP_NEWLINE + "If the j modifier is used, the breakpoint will occur just before" HELP_NEWLINE + "jumping to the target.", + "[ if ]", "j", + .argument_completer = symbol_completer, .modifiers_completer = j_completer}, + {"delete", 2, delete, "Delete a breakpoint by its address, or all breakpoints", "[]", .argument_completer = symbol_completer}, + {"watch", 1, watch, "Add a new watchpoint at the specified address/expression." HELP_NEWLINE + "Can also modify the condition and type of existing watchpoints." HELP_NEWLINE + "Default watchpoint type is write-only.", + "[ if ]", "(r|w|rw)", + .argument_completer = symbol_completer, .modifiers_completer = rw_completer + }, + {"unwatch", 3, unwatch, "Delete a watchpoint by its address, or all watchpoints", "[]", .argument_completer = symbol_completer}, + {"softbreak", 2, softbreak, "Enable or disable software breakpoints ('ld b, b' opcodes)", "(on|off)", .argument_completer = on_off_completer}, + {"list", 1, list, "List all set breakpoints and watchpoints"}, + {"ticks", 2, ticks, "Display the number of CPU ticks since the last time 'ticks' was" HELP_NEWLINE + "used"}, + {"cartridge", 2, mbc, "Display information about the MBC and cartridge"}, + {"mbc", 3, }, /* Alias */ + {"apu", 3, apu, "Display information about the current state of the audio processing unit", "[channel (1-4, 5 for NR5x)]"}, + {"wave", 3, wave, "Print a visual representation of the wave RAM." HELP_NEWLINE + "Modifiers can be used for a (f)ull print (the default)," HELP_NEWLINE + "a more (c)ompact one, or a one-(l)iner", "", "(f|c|l)", .modifiers_completer = wave_completer}, + {"lcd", 3, lcd, "Display information about the current state of the LCD controller"}, + {"palettes", 3, palettes, "Display the current CGB palettes"}, + {"dma", 3, dma, "Display the current OAM DMA status"}, + + {"help", 1, help, "List available commands or show help for the specified command", "[]"}, + {NULL,}, /* Null terminator */ +}; + +static const debugger_command_t *find_command(const char *string) +{ + size_t length = strlen(string); + for (const debugger_command_t *command = commands; command->command; command++) { + if (command->min_length > length) continue; + if (memcmp(command->command, string, length) == 0) { /* Is a substring? */ + /* Aliases */ + while (!command->implementation) { + command--; + } + return command; + } + } + + return NULL; +} + +static void print_command_shortcut(GB_gameboy_t *gb, const debugger_command_t *command) +{ + GB_attributed_log(gb, GB_LOG_BOLD | GB_LOG_UNDERLINE, "%.*s", command->min_length, command->command); + GB_attributed_log(gb, GB_LOG_BOLD, "%s", command->command + command->min_length); +} + +static void print_command_description(GB_gameboy_t *gb, const debugger_command_t *command) +{ + print_command_shortcut(gb, command); + GB_log(gb, ": "); + GB_log(gb, (const char *)&" %s\n" + strlen(command->command), command->help_string); +} + +static bool help(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *ignored) +{ + const debugger_command_t *command = find_command(arguments); + if (command) { + print_command_description(gb, command); + GB_log(gb, "\n"); + print_usage(gb, command); + + command++; + if (command->command && !command->implementation) { /* Command has aliases*/ + GB_log(gb, "\nAliases: "); + do { + print_command_shortcut(gb, command); + GB_log(gb, " "); + command++; + } while (command->command && !command->implementation); + GB_log(gb, "\n"); + } + return true; + } + for (command = commands; command->command; command++) { + if (command->help_string) { + print_command_description(gb, command); + } + } + return true; +} + +void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr) +{ + /* Called just after the CPU calls a function/enters an interrupt/etc... */ + + if (gb->backtrace_size < sizeof(gb->backtrace_sps) / sizeof(gb->backtrace_sps[0])) { + while (gb->backtrace_size) { + if (gb->backtrace_sps[gb->backtrace_size - 1] < gb->sp) { + gb->backtrace_size--; + } + else { + break; + } + } + + gb->backtrace_sps[gb->backtrace_size] = gb->sp; + gb->backtrace_returns[gb->backtrace_size].bank = bank_for_addr(gb, call_addr); + gb->backtrace_returns[gb->backtrace_size].addr = call_addr; + gb->backtrace_size++; + } + + gb->debug_call_depth++; +} + +void GB_debugger_ret_hook(GB_gameboy_t *gb) +{ + /* Called just before the CPU runs ret/reti */ + + gb->debug_call_depth--; + + while (gb->backtrace_size) { + if (gb->backtrace_sps[gb->backtrace_size - 1] <= gb->sp) { + gb->backtrace_size--; + } + else { + break; + } + } +} + +static bool _GB_debugger_test_write_watchpoint(GB_gameboy_t *gb, value_t addr, uint8_t value) +{ + uint16_t index = find_watchpoint(gb, addr); + uint32_t key = WP_KEY(addr); + + if (index < gb->n_watchpoints && gb->watchpoints[index].key == key) { + if (!(gb->watchpoints[index].flags & GB_WATCHPOINT_W)) { + return false; + } + if (!gb->watchpoints[index].condition) { + gb->debug_stopped = true; + GB_log(gb, "Watchpoint: [%s] = $%02x\n", debugger_value_to_string(gb, addr, true), value); + return true; + } + bool error; + bool condition = debugger_evaluate(gb, gb->watchpoints[index].condition, + (unsigned)strlen(gb->watchpoints[index].condition), &error, &addr.value, &value).value; + if (error) { + /* Should never happen */ + GB_log(gb, "An internal error has occured\n"); + return false; + } + if (condition) { + gb->debug_stopped = true; + GB_log(gb, "Watchpoint: [%s] = $%02x\n", debugger_value_to_string(gb, addr, true), value); + return true; + } + } + return false; +} + +void GB_debugger_test_write_watchpoint(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + if (gb->debug_stopped) return; + + /* Try any-bank breakpoint */ + value_t full_addr = (VALUE_16(addr)); + if (_GB_debugger_test_write_watchpoint(gb, full_addr, value)) return; + + /* Try bank-specific breakpoint */ + full_addr.has_bank = true; + full_addr.bank = bank_for_addr(gb, addr); + _GB_debugger_test_write_watchpoint(gb, full_addr, value); +} + +static bool _GB_debugger_test_read_watchpoint(GB_gameboy_t *gb, value_t addr) +{ + uint16_t index = find_watchpoint(gb, addr); + uint32_t key = WP_KEY(addr); + + if (index < gb->n_watchpoints && gb->watchpoints[index].key == key) { + if (!(gb->watchpoints[index].flags & GB_WATCHPOINT_R)) { + return false; + } + if (!gb->watchpoints[index].condition) { + gb->debug_stopped = true; + GB_log(gb, "Watchpoint: [%s]\n", debugger_value_to_string(gb, addr, true)); + return true; + } + bool error; + bool condition = debugger_evaluate(gb, gb->watchpoints[index].condition, + (unsigned)strlen(gb->watchpoints[index].condition), &error, &addr.value, NULL).value; + if (error) { + /* Should never happen */ + GB_log(gb, "An internal error has occured\n"); + return false; + } + if (condition) { + gb->debug_stopped = true; + GB_log(gb, "Watchpoint: [%s]\n", debugger_value_to_string(gb, addr, true)); + return true; + } + } + return false; +} + +void GB_debugger_test_read_watchpoint(GB_gameboy_t *gb, uint16_t addr) +{ + if (gb->debug_stopped) return; + + /* Try any-bank breakpoint */ + value_t full_addr = (VALUE_16(addr)); + if (_GB_debugger_test_read_watchpoint(gb, full_addr)) return; + + /* Try bank-specific breakpoint */ + full_addr.has_bank = true; + full_addr.bank = bank_for_addr(gb, addr); + _GB_debugger_test_read_watchpoint(gb, full_addr); +} + +/* Returns true if debugger waits for more commands */ +bool GB_debugger_execute_command(GB_gameboy_t *gb, char *input) +{ + if (!input[0]) { + return true; + } + + GB_display_sync(gb); + GB_apu_run(gb, true); + + char *command_string = input; + char *arguments = strchr(input, ' '); + if (arguments) { + /* Actually "split" the string. */ + arguments[0] = 0; + arguments++; + } + else { + arguments = ""; + } + + char *modifiers = strchr(command_string, '/'); + if (modifiers) { + /* Actually "split" the string. */ + modifiers[0] = 0; + modifiers++; + } + + const debugger_command_t *command = find_command(command_string); + if (command) { + uint8_t *old_state = malloc(GB_get_save_state_size_no_bess(gb)); + GB_save_state_to_buffer_no_bess(gb, old_state); + bool ret = command->implementation(gb, arguments, modifiers, command); + if (!ret) { // Command continues, save state in any case + free(gb->undo_state); + gb->undo_state = old_state; + gb->undo_label = command->command; + } + else { + uint8_t *new_state = malloc(GB_get_save_state_size_no_bess(gb)); + GB_save_state_to_buffer_no_bess(gb, new_state); + if (memcmp(new_state, old_state, GB_get_save_state_size_no_bess(gb)) != 0) { + // State changed, save the old state as the new undo state + free(gb->undo_state); + gb->undo_state = old_state; + gb->undo_label = command->command; + } + else { + // Nothing changed, just free the old state + free(old_state); + } + free(new_state); + } + return ret; + } + else { + GB_log(gb, "%s: no such command.\n", command_string); + return true; + } +} + +char *GB_debugger_complete_substring(GB_gameboy_t *gb, char *input, uintptr_t *context) +{ + char *command_string = input; + char *arguments = strchr(input, ' '); + if (arguments) { + /* Actually "split" the string. */ + arguments[0] = 0; + arguments++; + } + + char *modifiers = strchr(command_string, '/'); + if (modifiers) { + /* Actually "split" the string. */ + modifiers[0] = 0; + modifiers++; + } + + const debugger_command_t *command = find_command(command_string); + if (command && command->implementation == help && arguments) { + command_string = arguments; + arguments = NULL; + } + + /* No commands and no modifiers, complete the command */ + if (!arguments && !modifiers) { + size_t length = strlen(command_string); + if (*context >= sizeof(commands) / sizeof(commands[0])) { + return NULL; + } + for (const debugger_command_t *command = &commands[*context]; command->command; command++) { + (*context)++; + if (memcmp(command->command, command_string, length) == 0) { /* Is a substring? */ + return strdup(command->command + length); + } + } + return NULL; + } + + if (command) { + if (arguments) { + if (command->argument_completer) { + return command->argument_completer(gb, arguments, context); + } + return NULL; + } + + if (modifiers) { + if (command->modifiers_completer) { + return command->modifiers_completer(gb, modifiers, context); + } + return NULL; + } + } + return NULL; +} + +typedef enum { + JUMP_TO_NONE, + JUMP_TO_BREAK, + JUMP_TO_NONTRIVIAL, +} jump_to_return_t; + +static jump_to_return_t test_jump_to_breakpoints(GB_gameboy_t *gb, uint16_t *address); + +void GB_debugger_run(GB_gameboy_t *gb) +{ + if (gb->debug_disable) return; + + if (!gb->undo_state) { + gb->undo_state = malloc(GB_get_save_state_size_no_bess(gb)); + GB_save_state_to_buffer_no_bess(gb, gb->undo_state); + } + + char *input = NULL; + if (gb->debug_next_command && gb->debug_call_depth <= 0 && !gb->halted) { + gb->debug_stopped = true; + } + if (gb->debug_fin_command && gb->debug_call_depth == -1) { + gb->debug_stopped = true; + } + if (gb->debug_stopped) { + GB_cpu_disassemble(gb, gb->pc, 5); + } +next_command: + if (input) { + free(input); + } + if (gb->breakpoints && !gb->debug_stopped && should_break(gb, gb->pc, false)) { + gb->debug_stopped = true; + GB_log(gb, "Breakpoint: PC = %s\n", value_to_string(gb, gb->pc, true)); + GB_cpu_disassemble(gb, gb->pc, 5); + } + + if (gb->breakpoints && !gb->debug_stopped) { + uint16_t address = 0; + jump_to_return_t jump_to_result = test_jump_to_breakpoints(gb, &address); + + bool should_delete_state = true; + if (gb->nontrivial_jump_state && should_break(gb, gb->pc, true)) { + if (gb->non_trivial_jump_breakpoint_occured) { + gb->non_trivial_jump_breakpoint_occured = false; + } + else { + gb->non_trivial_jump_breakpoint_occured = true; + GB_log(gb, "Jumping to breakpoint: PC = %s\n", value_to_string(gb, gb->pc, true)); + GB_cpu_disassemble(gb, gb->pc, 5); + GB_load_state_from_buffer(gb, gb->nontrivial_jump_state, -1); + gb->debug_stopped = true; + } + } + else if (jump_to_result == JUMP_TO_BREAK) { + gb->debug_stopped = true; + GB_log(gb, "Jumping to breakpoint: PC = %s\n", value_to_string(gb, address, true)); + GB_cpu_disassemble(gb, gb->pc, 5); + gb->non_trivial_jump_breakpoint_occured = false; + } + else if (jump_to_result == JUMP_TO_NONTRIVIAL) { + if (!gb->nontrivial_jump_state) { + gb->nontrivial_jump_state = malloc(GB_get_save_state_size_no_bess(gb)); + } + GB_save_state_to_buffer_no_bess(gb, gb->nontrivial_jump_state); + gb->non_trivial_jump_breakpoint_occured = false; + should_delete_state = false; + } + else { + gb->non_trivial_jump_breakpoint_occured = false; + } + + if (should_delete_state) { + if (gb->nontrivial_jump_state) { + free(gb->nontrivial_jump_state); + gb->nontrivial_jump_state = NULL; + } + } + } + + if (gb->debug_stopped && !gb->debug_disable) { + gb->debug_next_command = false; + gb->debug_fin_command = false; + input = gb->input_callback(gb); + + if (input == NULL) { + /* Debugging is no currently available, continue running */ + gb->debug_stopped = false; + return; + } + + if (GB_debugger_execute_command(gb, input)) { + goto next_command; + } + + free(input); + } +} + +void GB_debugger_handle_async_commands(GB_gameboy_t *gb) +{ + char *input = NULL; + + while (gb->async_input_callback && (input = gb->async_input_callback(gb))) { + GB_debugger_execute_command(gb, input); + free(input); + } +} + +void GB_debugger_add_symbol(GB_gameboy_t *gb, uint16_t bank, uint16_t address, const char *symbol) +{ + if (bank >= gb->n_symbol_maps) { + gb->bank_symbols = realloc(gb->bank_symbols, (bank + 1) * sizeof(*gb->bank_symbols)); + while (bank >= gb->n_symbol_maps) { + gb->bank_symbols[gb->n_symbol_maps++] = NULL; + } + } + + if (!gb->bank_symbols[bank]) { + gb->bank_symbols[bank] = GB_map_alloc(); + } + GB_bank_symbol_t *allocated_symbol = GB_map_add_symbol(gb->bank_symbols[bank], address, symbol); + if (allocated_symbol) { + GB_reversed_map_add_symbol(&gb->reversed_symbol_map, bank, allocated_symbol); + } +} + +void GB_debugger_load_symbol_file(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "r"); + if (!f) return; + + char *line = NULL; + size_t size = 0; + size_t length = 0; + while ((length = getline(&line, &size, f)) != -1) { + for (unsigned i = 0; i < length; i++) { + if (line[i] == ';' || line[i] == '\n' || line[i] == '\r') { + line[i] = 0; + length = i; + break; + } + } + if (length == 0) continue; + + unsigned bank, address; + char symbol[length]; + + if (sscanf(line, "%x:%x %s", &bank, &address, symbol) == 3) { + GB_debugger_add_symbol(gb, bank, address, symbol); + } + } + free(line); + fclose(f); +} + +void GB_debugger_clear_symbols(GB_gameboy_t *gb) +{ + for (unsigned i = gb->n_symbol_maps; i--;) { + if (gb->bank_symbols[i]) { + GB_map_free(gb->bank_symbols[i]); + gb->bank_symbols[i] = 0; + } + } + for (unsigned i = sizeof(gb->reversed_symbol_map.buckets) / sizeof(gb->reversed_symbol_map.buckets[0]); i--;) { + while (gb->reversed_symbol_map.buckets[i]) { + GB_symbol_t *next = gb->reversed_symbol_map.buckets[i]->next; + free(gb->reversed_symbol_map.buckets[i]); + gb->reversed_symbol_map.buckets[i] = next; + } + } + gb->n_symbol_maps = 0; + if (gb->bank_symbols) { + free(gb->bank_symbols); + gb->bank_symbols = NULL; + } +} + +const GB_bank_symbol_t *GB_debugger_find_symbol(GB_gameboy_t *gb, uint16_t addr) +{ + uint16_t bank = bank_for_addr(gb, addr); + + const GB_bank_symbol_t *symbol = GB_map_find_symbol(get_symbol_map(gb, bank), addr); + if (symbol) return symbol; + if (bank != 0) return GB_map_find_symbol(get_symbol_map(gb, 0), addr); /* Maybe the symbol incorrectly uses bank 0? */ + + return NULL; +} + +const char *GB_debugger_name_for_address(GB_gameboy_t *gb, uint16_t addr) +{ + const GB_bank_symbol_t *symbol = GB_debugger_find_symbol(gb, addr); + if (symbol && symbol->addr == addr) return symbol->name; + return NULL; +} + +/* The public version of debugger_evaluate */ +bool GB_debugger_evaluate(GB_gameboy_t *gb, const char *string, uint16_t *result, uint16_t *result_bank) +{ + bool error = false; + value_t value = debugger_evaluate(gb, string, strlen(string), &error, NULL, NULL); + if (result) { + *result = value.value; + } + if (result_bank) { + *result_bank = value.has_bank? value.value : -1; + } + return error; +} + +void GB_debugger_break(GB_gameboy_t *gb) +{ + gb->debug_stopped = true; +} + +bool GB_debugger_is_stopped(GB_gameboy_t *gb) +{ + return gb->debug_stopped; +} + +void GB_debugger_set_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->debug_disable = disabled; +} + +/* Jump-to breakpoints */ + +static bool is_in_trivial_memory(uint16_t addr) +{ + /* ROM */ + if (addr < 0x8000) { + return true; + } + + /* HRAM */ + if (addr >= 0xFF80 && addr < 0xFFFF) { + return true; + } + + /* RAM */ + if (addr >= 0xC000 && addr < 0xE000) { + return true; + } + + return false; +} + +typedef uint16_t opcode_address_getter_t(GB_gameboy_t *gb, uint8_t opcode); + +uint16_t trivial_1(GB_gameboy_t *gb, uint8_t opcode) +{ + return gb->pc + 1; +} + +uint16_t trivial_2(GB_gameboy_t *gb, uint8_t opcode) +{ + return gb->pc + 2; +} + +uint16_t trivial_3(GB_gameboy_t *gb, uint8_t opcode) +{ + return gb->pc + 3; +} + +static uint16_t jr_r8(GB_gameboy_t *gb, uint8_t opcode) +{ + return gb->pc + 2 + (int8_t)GB_read_memory(gb, gb->pc + 1); +} + +static bool condition_code(GB_gameboy_t *gb, uint8_t opcode) +{ + switch ((opcode >> 3) & 0x3) { + case 0: + return !(gb->af & GB_ZERO_FLAG); + case 1: + return (gb->af & GB_ZERO_FLAG); + case 2: + return !(gb->af & GB_CARRY_FLAG); + case 3: + return (gb->af & GB_CARRY_FLAG); + } + + return false; +} + +static uint16_t jr_cc_r8(GB_gameboy_t *gb, uint8_t opcode) +{ + if (!condition_code(gb, opcode)) { + return gb->pc + 2; + } + + return gb->pc + 2 + (int8_t)GB_read_memory(gb, gb->pc + 1); +} + +static uint16_t ret(GB_gameboy_t *gb, uint8_t opcode) +{ + return GB_read_memory(gb, gb->sp) | + (GB_read_memory(gb, gb->sp + 1) << 8); +} + + +static uint16_t ret_cc(GB_gameboy_t *gb, uint8_t opcode) +{ + if (condition_code(gb, opcode)) { + return ret(gb, opcode); + } + else { + return gb->pc + 1; + } +} + +static uint16_t jp_a16(GB_gameboy_t *gb, uint8_t opcode) +{ + return GB_read_memory(gb, gb->pc + 1) | + (GB_read_memory(gb, gb->pc + 2) << 8); +} + +static uint16_t jp_cc_a16(GB_gameboy_t *gb, uint8_t opcode) +{ + if (condition_code(gb, opcode)) { + return jp_a16(gb, opcode); + } + else { + return gb->pc + 3; + } +} + +static uint16_t rst(GB_gameboy_t *gb, uint8_t opcode) +{ + return opcode ^ 0xC7; +} + +static uint16_t jp_hl(GB_gameboy_t *gb, uint8_t opcode) +{ + return gb->hl; +} + +static opcode_address_getter_t *opcodes[256] = { + /* X0 X1 X2 X3 X4 X5 X6 X7 */ + /* X8 X9 Xa Xb Xc Xd Xe Xf */ + trivial_1, trivial_3, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, /* 0X */ + trivial_3, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, + trivial_2, trivial_3, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, /* 1X */ + jr_r8, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, + jr_cc_r8, trivial_3, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, /* 2X */ + jr_cc_r8, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, + jr_cc_r8, trivial_3, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, /* 3X */ + jr_cc_r8, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, /* 4X */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, /* 5X */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, /* 6X */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, NULL, trivial_1, /* 7X */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, /* 8X */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, /* 9X */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, /* aX */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, /* bX */ + trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, trivial_1, + ret_cc, trivial_1, jp_cc_a16, jp_a16, jp_cc_a16, trivial_1, trivial_2, rst, /* cX */ + ret_cc, ret, jp_cc_a16, trivial_2, jp_cc_a16, jp_a16, trivial_2, rst, + ret_cc, trivial_1, jp_cc_a16, NULL, jp_cc_a16, trivial_1, trivial_2, rst, /* dX */ + ret_cc, ret, jp_cc_a16, NULL, jp_cc_a16, NULL, trivial_2, rst, + trivial_2, trivial_1, trivial_1, NULL, NULL, trivial_1, trivial_2, rst, /* eX */ + trivial_2, jp_hl, trivial_3, NULL, NULL, NULL, trivial_2, rst, + trivial_2, trivial_1, trivial_1, trivial_1, NULL, trivial_1, trivial_2, rst, /* fX */ + trivial_2, trivial_1, trivial_3, trivial_1, NULL, NULL, trivial_2, rst, +}; + +static jump_to_return_t test_jump_to_breakpoints(GB_gameboy_t *gb, uint16_t *address) +{ + if (!gb->has_jump_to_breakpoints) return JUMP_TO_NONE; + + if (!is_in_trivial_memory(gb->pc) || !is_in_trivial_memory(gb->pc + 2) || + !is_in_trivial_memory(gb->sp) || !is_in_trivial_memory(gb->sp + 1)) { + return JUMP_TO_NONTRIVIAL; + } + + /* Interrupts */ + if (gb->ime) { + for (unsigned i = 0; i < 5; i++) { + if ((gb->interrupt_enable & (1 << i)) && (gb->io_registers[GB_IO_IF] & (1 << i))) { + if (should_break(gb, 0x40 + i * 8, true)) { + if (address) { + *address = 0x40 + i * 8; + } + return JUMP_TO_BREAK; + } + } + } + } + + uint16_t n_watchpoints = gb->n_watchpoints; + gb->n_watchpoints = 0; + + uint8_t opcode = GB_read_memory(gb, gb->pc); + + if (opcode == 0x76) { + gb->n_watchpoints = n_watchpoints; + if (gb->ime) { /* Already handled in above */ + return JUMP_TO_NONE; + } + + if (gb->interrupt_enable & gb->io_registers[GB_IO_IF] & 0x1F) { + return JUMP_TO_NONTRIVIAL; /* HALT bug could occur */ + } + + return JUMP_TO_NONE; + } + + opcode_address_getter_t *getter = opcodes[opcode]; + if (!getter) { + gb->n_watchpoints = n_watchpoints; + return JUMP_TO_NONE; + } + + uint16_t new_pc = getter(gb, opcode); + + gb->n_watchpoints = n_watchpoints; + + if (address) { + *address = new_pc; + } + + return should_break(gb, new_pc, true) ? JUMP_TO_BREAK : JUMP_TO_NONE; +} diff --git a/thirdparty/SameBoy-old/Core/debugger.h b/thirdparty/SameBoy-old/Core/debugger.h new file mode 100644 index 000000000..3d77b7a8c --- /dev/null +++ b/thirdparty/SameBoy-old/Core/debugger.h @@ -0,0 +1,46 @@ +#ifndef debugger_h +#define debugger_h +#include +#include +#include "defs.h" +#include "symbol_hash.h" + + +#ifdef GB_INTERNAL +#ifdef GB_DISABLE_DEBUGGER +#define GB_debugger_run(gb) (void)0 +#define GB_debugger_handle_async_commands(gb) (void)0 +#define GB_debugger_ret_hook(gb) (void)0 +#define GB_debugger_call_hook(gb, addr) (void)addr +#define GB_debugger_test_write_watchpoint(gb, addr, value) ((void)addr, (void)value) +#define GB_debugger_test_read_watchpoint(gb, addr) (void)addr +#define GB_debugger_add_symbol(gb, bank, address, symbol) ((void)bank, (void)address, (void)symbol) + +#else +internal void GB_debugger_run(GB_gameboy_t *gb); +internal void GB_debugger_handle_async_commands(GB_gameboy_t *gb); +internal void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr); +internal void GB_debugger_ret_hook(GB_gameboy_t *gb); +internal void GB_debugger_test_write_watchpoint(GB_gameboy_t *gb, uint16_t addr, uint8_t value); +internal void GB_debugger_test_read_watchpoint(GB_gameboy_t *gb, uint16_t addr); +internal const GB_bank_symbol_t *GB_debugger_find_symbol(GB_gameboy_t *gb, uint16_t addr); +internal void GB_debugger_add_symbol(GB_gameboy_t *gb, uint16_t bank, uint16_t address, const char *symbol); +#endif /* GB_DISABLE_DEBUGGER */ +#endif + +#ifdef GB_INTERNAL +bool /* Returns true if debugger waits for more commands. Not relevant for non-GB_INTERNAL */ +#else +void +#endif +GB_debugger_execute_command(GB_gameboy_t *gb, char *input); /* Destroys input. */ +char *GB_debugger_complete_substring(GB_gameboy_t *gb, char *input, uintptr_t *context); /* Destroys input, result requires free */ + +void GB_debugger_load_symbol_file(GB_gameboy_t *gb, const char *path); +const char *GB_debugger_name_for_address(GB_gameboy_t *gb, uint16_t addr); +bool GB_debugger_evaluate(GB_gameboy_t *gb, const char *string, uint16_t *result, uint16_t *result_bank); /* result_bank is -1 if unused. */ +void GB_debugger_break(GB_gameboy_t *gb); +bool GB_debugger_is_stopped(GB_gameboy_t *gb); +void GB_debugger_set_disabled(GB_gameboy_t *gb, bool disabled); +void GB_debugger_clear_symbols(GB_gameboy_t *gb); +#endif /* debugger_h */ diff --git a/thirdparty/SameBoy-old/Core/defs.h b/thirdparty/SameBoy-old/Core/defs.h new file mode 100644 index 000000000..81b3f8f99 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/defs.h @@ -0,0 +1,50 @@ +#ifndef defs_h +#define defs_h + +#define GB_likely(x) __builtin_expect((bool)(x), 1) +#define GB_unlikely(x) __builtin_expect((bool)(x), 0) + +#ifdef GB_INTERNAL + +// "Keyword" definitions +#define likely(x) GB_likely(x) +#define unlikely(x) GB_unlikely(x) + +//#define internal __attribute__((visibility("internal"))) +#define internal + +#if __clang__ +#define unrolled _Pragma("unroll") +#elif __GNUC__ >= 8 +#define unrolled _Pragma("GCC unroll 8") +#else +#define unrolled +#endif + +#define unreachable() __builtin_unreachable(); +#define nodefault default: unreachable() + +#ifdef GB_BIG_ENDIAN +#define LE16(x) __builtin_bswap16(x) +#define LE32(x) __builtin_bswap32(x) +#define LE64(x) __builtin_bswap64(x) +#define BE16(x) (x) +#define BE32(x) (x) +#define BE64(x) (x) +#else +#define LE16(x) (x) +#define LE32(x) (x) +#define LE64(x) (x) +#define BE16(x) __builtin_bswap16(x) +#define BE32(x) __builtin_bswap32(x) +#define BE64(x) __builtin_bswap64(x) +#endif +#endif + +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) +#define __builtin_bswap16(x) ({ typeof(x) _x = (x); _x >> 8 | _x << 8; }) +#endif + +struct GB_gameboy_s; +typedef struct GB_gameboy_s GB_gameboy_t; +#endif diff --git a/thirdparty/SameBoy-old/Core/display.c b/thirdparty/SameBoy-old/Core/display.c new file mode 100644 index 000000000..f0ae1486c --- /dev/null +++ b/thirdparty/SameBoy-old/Core/display.c @@ -0,0 +1,2276 @@ +#include +#include +#include +#include +#include +#include "gb.h" + +/* FIFO functions */ + +static inline unsigned fifo_size(GB_fifo_t *fifo) +{ + return fifo->size; +} + +static void fifo_clear(GB_fifo_t *fifo) +{ + fifo->read_end = fifo->size = 0; +} + +static GB_fifo_item_t *fifo_pop(GB_fifo_t *fifo) +{ + assert(fifo->size); + GB_fifo_item_t *ret = &fifo->fifo[fifo->read_end]; + fifo->read_end++; + fifo->read_end &= (GB_FIFO_LENGTH - 1); + fifo->size--; + return ret; +} + +static void fifo_push_bg_row(GB_fifo_t *fifo, uint8_t lower, uint8_t upper, uint8_t palette, bool bg_priority, bool flip_x) +{ + assert(fifo->size == 0); + fifo->size = 8; + if (!flip_x) { + unrolled for (unsigned i = 0; i < 8; i++) { + fifo->fifo[i] = (GB_fifo_item_t) { + (lower >> 7) | ((upper >> 7) << 1), + palette, + 0, + bg_priority, + }; + lower <<= 1; + upper <<= 1; + } + } + else { + unrolled for (unsigned i = 0; i < 8; i++) { + fifo->fifo[i] = (GB_fifo_item_t) { + (lower & 1) | ((upper & 1) << 1), + palette, + 0, + bg_priority, + }; + lower >>= 1; + upper >>= 1; + } + } +} + +static void fifo_overlay_object_row(GB_fifo_t *fifo, uint8_t lower, uint8_t upper, uint8_t palette, bool bg_priority, uint8_t priority, bool flip_x) +{ + while (fifo->size < GB_FIFO_LENGTH) { + fifo->fifo[(fifo->read_end + fifo->size) & (GB_FIFO_LENGTH - 1)] = (GB_fifo_item_t) {0,}; + fifo->size++; + } + + uint8_t flip_xor = flip_x? 0: 0x7; + + unrolled for (unsigned i = 8; i--;) { + uint8_t pixel = (lower >> 7) | ((upper >> 7) << 1); + GB_fifo_item_t *target = &fifo->fifo[(fifo->read_end + (i ^ flip_xor)) & (GB_FIFO_LENGTH - 1)]; + if (pixel != 0 && (target->pixel == 0 || target->priority > priority)) { + target->pixel = pixel; + target->palette = palette; + target->bg_priority = bg_priority; + target->priority = priority; + } + lower <<= 1; + upper <<= 1; + } +} + + +/* + Each line is 456 cycles. Without scrolling, objects or a window: + Mode 2 - 80 cycles / OAM Transfer + Mode 3 - 172 cycles / Rendering + Mode 0 - 204 cycles / HBlank + + Mode 1 is VBlank + */ + +#define MODE2_LENGTH (80) +#define LINE_LENGTH (456) +#define LINES (144) +#define WIDTH (160) +#define BORDERED_WIDTH 256 +#define BORDERED_HEIGHT 224 +#define FRAME_LENGTH (LCDC_PERIOD) +#define VIRTUAL_LINES (FRAME_LENGTH / LINE_LENGTH) // = 154 + +typedef struct __attribute__((packed)) { + uint8_t y; + uint8_t x; + uint8_t tile; + uint8_t flags; +} object_t; + +void GB_display_vblank(GB_gameboy_t *gb, GB_vblank_type_t type) +{ + gb->vblank_just_occured = true; + gb->cycles_since_vblank_callback = 0; + gb->lcd_disabled_outside_of_vblank = false; + + /* TODO: Slow in turbo mode! */ + if (GB_is_hle_sgb(gb)) { + GB_sgb_render(gb); + } + + if (gb->turbo) { + if (GB_timing_sync_turbo(gb)) { + return; + } + } + + if (GB_is_cgb(gb) && type == GB_VBLANK_TYPE_NORMAL_FRAME && gb->frame_repeat_countdown > 0 && gb->frame_skip_state == GB_FRAMESKIP_LCD_TURNED_ON) { + GB_handle_rumble(gb); + + if (gb->vblank_callback) { + gb->vblank_callback(gb, GB_VBLANK_TYPE_REPEAT); + } + GB_timing_sync(gb); + return; + } + + bool is_ppu_stopped = !GB_is_cgb(gb) && gb->stopped && gb->io_registers[GB_IO_LCDC] & 0x80; + + if (!gb->disable_rendering && ((!(gb->io_registers[GB_IO_LCDC] & 0x80) || is_ppu_stopped) || gb->frame_skip_state == GB_FRAMESKIP_LCD_TURNED_ON)) { + /* LCD is off, set screen to white or black (if LCD is on in stop mode) */ + if (!GB_is_sgb(gb)) { + uint32_t color = 0; + if (GB_is_cgb(gb)) { + color = GB_convert_rgb15(gb, 0x7FFF, false); + } + else { + color = is_ppu_stopped ? + gb->background_palettes_rgb[0] : + gb->background_palettes_rgb[4]; + } + if (gb->border_mode == GB_BORDER_ALWAYS) { + for (unsigned y = 0; y < LINES; y++) { + for (unsigned x = 0; x < WIDTH; x++) { + gb ->screen[x + y * BORDERED_WIDTH + (BORDERED_WIDTH - WIDTH) / 2 + (BORDERED_HEIGHT - LINES) / 2 * BORDERED_WIDTH] = color; + } + } + } + else { + for (unsigned i = 0; i < WIDTH * LINES; i++) { + gb ->screen[i] = color; + } + } + } + } + + if (!gb->disable_rendering && gb->border_mode == GB_BORDER_ALWAYS && !GB_is_sgb(gb)) { + GB_borrow_sgb_border(gb); + uint32_t border_colors[16 * 4]; + + if (!gb->has_sgb_border && GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_E) { + uint16_t colors[] = { + 0x2095, 0x5129, 0x1EAF, 0x1EBA, 0x4648, + 0x30DA, 0x69AD, 0x2B57, 0x2B5D, 0x632C, + 0x1050, 0x3C84, 0x0E07, 0x0E18, 0x2964, + }; + unsigned index = gb->rom? gb->rom[0x14E] % 5 : 0; + if (gb->model == GB_MODEL_CGB_0) { + index = 1; // CGB 0 was only available in indigo! + } + else if (gb->model == GB_MODEL_CGB_A) { + index = 0; // CGB A was only available in red! + } + gb->borrowed_border.palette[0] = LE16(colors[index]); + gb->borrowed_border.palette[10] = LE16(colors[5 + index]); + gb->borrowed_border.palette[14] = LE16(colors[10 + index]); + + } + + for (unsigned i = 0; i < 16 * 4; i++) { + border_colors[i] = GB_convert_rgb15(gb, LE16(gb->borrowed_border.palette[i]), true); + } + + for (unsigned tile_y = 0; tile_y < 28; tile_y++) { + for (unsigned tile_x = 0; tile_x < 32; tile_x++) { + if (tile_x >= 6 && tile_x < 26 && tile_y >= 5 && tile_y < 23) { + continue; + } + uint16_t tile = LE16(gb->borrowed_border.map[tile_x + tile_y * 32]); + uint8_t flip_x = (tile & 0x4000)? 0:7; + uint8_t flip_y = (tile & 0x8000)? 7:0; + uint8_t palette = (tile >> 10) & 3; + for (unsigned y = 0; y < 8; y++) { + unsigned base = (tile & 0xFF) * 32 + (y ^ flip_y) * 2; + for (unsigned x = 0; x < 8; x++) { + uint8_t bit = 1 << (x ^ flip_x); + uint8_t color = ((gb->borrowed_border.tiles[base] & bit) ? 1 : 0) | + ((gb->borrowed_border.tiles[base + 1] & bit) ? 2 : 0) | + ((gb->borrowed_border.tiles[base + 16] & bit) ? 4 : 0) | + ((gb->borrowed_border.tiles[base + 17] & bit) ? 8 : 0); + uint32_t *output = gb->screen + tile_x * 8 + x + (tile_y * 8 + y) * 256; + if (color == 0) { + *output = border_colors[0]; + } + else { + *output = border_colors[color + palette * 16]; + } + } + } + } + } + } + GB_handle_rumble(gb); + + if (gb->vblank_callback) { + gb->vblank_callback(gb, type); + } + GB_timing_sync(gb); +} + +static inline void temperature_tint(double temperature, double *r, double *g, double *b) +{ + if (temperature >= 0) { + *r = 1; + *g = pow(1 - temperature, 0.375); + if (temperature >= 0.75) { + *b = 0; + } + else { + *b = sqrt(0.75 - temperature); + } + } + else { + *b = 1; + double squared = pow(temperature, 2); + *g = 0.125 * squared + 0.3 * temperature + 1.0; + *r = 0.21875 * squared + 0.5 * temperature + 1.0; + } +} + +static inline uint8_t scale_channel(uint8_t x) +{ + return (x << 3) | (x >> 2); +} + +static inline uint8_t scale_channel_with_curve(uint8_t x) +{ + return (const uint8_t[]){0,6,12,20,28,36,45,56,66,76,88,100,113,125,137,149,161,172,182,192,202,210,218,225,232,238,243,247,250,252,254,255}[x]; +} + +static inline uint8_t scale_channel_with_curve_agb(uint8_t x) +{ + return (const uint8_t[]){0,3,8,14,20,26,33,40,47,54,62,70,78,86,94,103,112,120,129,138,147,157,166,176,185,195,205,215,225,235,245,255}[x]; +} + +static inline uint8_t scale_channel_with_curve_sgb(uint8_t x) +{ + return (const uint8_t[]){0,2,5,9,15,20,27,34,42,50,58,67,76,85,94,104,114,123,133,143,153,163,173,182,192,202,211,220,229,238,247,255}[x]; +} + + +uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border) +{ + uint8_t r = (color) & 0x1F; + uint8_t g = (color >> 5) & 0x1F; + uint8_t b = (color >> 10) & 0x1F; + + if (gb->color_correction_mode == GB_COLOR_CORRECTION_DISABLED || (for_border && !gb->has_sgb_border)) { + r = scale_channel(r); + g = scale_channel(g); + b = scale_channel(b); + } + else if (GB_is_sgb(gb) || for_border) { + r = scale_channel_with_curve_sgb(r); + g = scale_channel_with_curve_sgb(g); + b = scale_channel_with_curve_sgb(b); + } + else { + bool agb = gb->model > GB_MODEL_CGB_E; + r = agb? scale_channel_with_curve_agb(r) : scale_channel_with_curve(r); + g = agb? scale_channel_with_curve_agb(g) : scale_channel_with_curve(g); + b = agb? scale_channel_with_curve_agb(b) : scale_channel_with_curve(b); + + if (gb->color_correction_mode != GB_COLOR_CORRECTION_CORRECT_CURVES) { + uint8_t new_r, new_g, new_b; + if (g != b) { // Minor optimization + double gamma = 2.2; + if (gb->color_correction_mode < GB_COLOR_CORRECTION_REDUCE_CONTRAST) { + /* Don't use absolutely gamma-correct mixing for the high-contrast + modes, to prevent the blue hues from being too washed out */ + gamma = 1.6; + } + + // TODO: Optimze pow out using a LUT + if (agb) { + new_g = round(pow((pow(g / 255.0, gamma) * 5 + pow(b / 255.0, gamma)) / 6, 1 / gamma) * 255); + } + else { + new_g = round(pow((pow(g / 255.0, gamma) * 3 + pow(b / 255.0, gamma)) / 4, 1 / gamma) * 255); + } + } + else { + new_g = g; + } + + new_r = r; + new_b = b; + if (gb->color_correction_mode == GB_COLOR_CORRECTION_REDUCE_CONTRAST) { + r = new_r; + g = new_g; + b = new_b; + + new_r = new_r * 15 / 16 + ( g + b) / 32; + new_g = new_g * 15 / 16 + (r + b) / 32; + new_b = new_b * 15 / 16 + (r + g ) / 32; + + if (agb) { + new_r = new_r * (224 - 20) / 255 + 20; + new_g = new_g * (220 - 18) / 255 + 18; + new_b = new_b * (216 - 16) / 255 + 16; + } + else { + new_r = new_r * (220 - 40) / 255 + 40; + new_g = new_g * (224 - 36) / 255 + 36; + new_b = new_b * (216 - 32) / 255 + 32; + } + } + else if (gb->color_correction_mode == GB_COLOR_CORRECTION_LOW_CONTRAST) { + r = new_r; + g = new_g; + b = new_b; + + new_r = new_r * 15 / 16 + ( g + b) / 32; + new_g = new_g * 15 / 16 + (r + b) / 32; + new_b = new_b * 15 / 16 + (r + g ) / 32; + + if (agb) { + new_r = new_r * (167 - 27) / 255 + 27; + new_g = new_g * (165 - 24) / 255 + 24; + new_b = new_b * (157 - 22) / 255 + 22; + } + else { + new_r = new_r * (162 - 45) / 255 + 45; + new_g = new_g * (167 - 41) / 255 + 41; + new_b = new_b * (157 - 38) / 255 + 38; + } + } + else if (gb->color_correction_mode == GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST) { + uint8_t old_max = MAX(r, MAX(g, b)); + uint8_t new_max = MAX(new_r, MAX(new_g, new_b)); + + if (new_max != 0) { + new_r = new_r * old_max / new_max; + new_g = new_g * old_max / new_max; + new_b = new_b * old_max / new_max; + } + + uint8_t old_min = MIN(r, MIN(g, b)); + uint8_t new_min = MIN(new_r, MIN(new_g, new_b)); + + if (new_min != 0xFF) { + new_r = 0xFF - (0xFF - new_r) * (0xFF - old_min) / (0xFF - new_min); + new_g = 0xFF - (0xFF - new_g) * (0xFF - old_min) / (0xFF - new_min); + new_b = 0xFF - (0xFF - new_b) * (0xFF - old_min) / (0xFF - new_min); + } + } + r = new_r; + g = new_g; + b = new_b; + } + } + + if (gb->light_temperature) { + double light_r, light_g, light_b; + temperature_tint(gb->light_temperature, &light_r, &light_g, &light_b); + r = round(light_r * r); + g = round(light_g * g); + b = round(light_b * b); + } + + return gb->rgb_encode_callback(gb, r, g, b); +} + +void GB_palette_changed(GB_gameboy_t *gb, bool background_palette, uint8_t index) +{ + if (!gb->rgb_encode_callback || !GB_is_cgb(gb)) return; + uint8_t *palette_data = background_palette? gb->background_palettes_data : gb->object_palettes_data; + uint16_t color = palette_data[index & ~1] | (palette_data[index | 1] << 8); + + (background_palette? gb->background_palettes_rgb : gb->object_palettes_rgb)[index / 2] = GB_convert_rgb15(gb, color, false); +} + +void GB_set_color_correction_mode(GB_gameboy_t *gb, GB_color_correction_mode_t mode) +{ + gb->color_correction_mode = mode; + if (GB_is_cgb(gb)) { + for (unsigned i = 0; i < 32; i++) { + GB_palette_changed(gb, false, i * 2); + GB_palette_changed(gb, true, i * 2); + } + } +} + +void GB_set_light_temperature(GB_gameboy_t *gb, double temperature) +{ + gb->light_temperature = temperature; + if (GB_is_cgb(gb)) { + for (unsigned i = 0; i < 32; i++) { + GB_palette_changed(gb, false, i * 2); + GB_palette_changed(gb, true, i * 2); + } + } +} + +/* + STAT interrupt is implemented based on this finding: + http://board.byuu.org/phpbb3/viewtopic.php?p=25527#p25531 + + General timing is based on GiiBiiAdvance's documents: + https://github.com/AntonioND/giibiiadvance + + */ + +void GB_STAT_update(GB_gameboy_t *gb) +{ + if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) return; + if (GB_is_dma_active(gb) && (gb->io_registers[GB_IO_STAT] & 3) == 2) { + gb->io_registers[GB_IO_STAT] &= ~3; + } + + bool previous_interrupt_line = gb->stat_interrupt_line; + /* Set LY=LYC bit */ + /* TODO: This behavior might not be correct for CGB revisions other than C and E */ + if (gb->ly_for_comparison != (uint16_t)-1 || gb->model <= GB_MODEL_CGB_C) { + if (gb->ly_for_comparison == gb->io_registers[GB_IO_LYC]) { + gb->lyc_interrupt_line = true; + gb->io_registers[GB_IO_STAT] |= 4; + } + else { + if (gb->ly_for_comparison != (uint16_t)-1) { + gb->lyc_interrupt_line = false; + } + gb->io_registers[GB_IO_STAT] &= ~4; + } + } + + switch (gb->mode_for_interrupt) { + case 0: gb->stat_interrupt_line = gb->io_registers[GB_IO_STAT] & 8; break; + case 1: gb->stat_interrupt_line = gb->io_registers[GB_IO_STAT] & 0x10; break; + case 2: gb->stat_interrupt_line = gb->io_registers[GB_IO_STAT] & 0x20; break; + default: gb->stat_interrupt_line = false; + } + + /* User requested a LY=LYC interrupt and the LY=LYC bit is on */ + if ((gb->io_registers[GB_IO_STAT] & 0x40) && gb->lyc_interrupt_line) { + gb->stat_interrupt_line = true; + } + + if (gb->stat_interrupt_line && !previous_interrupt_line) { + gb->io_registers[GB_IO_IF] |= 2; + } +} + +void GB_lcd_off(GB_gameboy_t *gb) +{ + gb->cycles_for_line = 0; + gb->display_state = 0; + gb->display_cycles = 0; + /* When the LCD is disabled, state is constant */ + + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3)) { + gb->hdma_on = true; + } + + /* When the LCD is off, LY is 0 and STAT mode is 0. */ + gb->io_registers[GB_IO_LY] = 0; + gb->io_registers[GB_IO_STAT] &= ~3; + + + gb->oam_read_blocked = false; + gb->vram_read_blocked = false; + gb->oam_write_blocked = false; + gb->vram_write_blocked = false; + gb->cgb_palettes_blocked = false; + + gb->current_line = 0; + gb->ly_for_comparison = 0; + + gb->accessed_oam_row = -1; + gb->wy_triggered = false; + + if (unlikely(gb->lcd_line_callback)) { + gb->lcd_line_callback(gb, 0); + } +} + +static inline uint8_t oam_read(GB_gameboy_t *gb, uint8_t addr) +{ + if (unlikely(gb->oam_ppu_blocked)) { + return 0xFF; + } + if (unlikely(gb->dma_current_dest <= 0xA0 && gb->dma_current_dest > 0)) { // TODO: what happens in the last and first M cycles? + if (gb->hdma_in_progress) { + return GB_read_oam(gb, (gb->hdma_current_src & ~1) | (addr & 1)); + } + if (gb->dma_current_dest != 0xA0) { + return gb->oam[(gb->dma_current_dest & ~1) | (addr & 1)]; + } + } + return gb->oam[addr]; +} + +static void add_object_from_index(GB_gameboy_t *gb, unsigned index) +{ + if (likely(!GB_is_dma_active(gb) || gb->halted || gb->stopped)) { + gb->mode2_y_bus = oam_read(gb, index * 4); + gb->mode2_x_bus = oam_read(gb, index * 4 + 1); + } + + if (gb->n_visible_objs == 10) return; + + /* TODO: It appears that DMA blocks PPU access to OAM, but it needs verification. */ + if (unlikely(GB_is_dma_active(gb) && (gb->halted || gb->stopped))) { + if (gb->model < GB_MODEL_CGB_E) { + return; + } + /* CGB-0 to CGB-D: Halted DMA blocks Mode 2; + Pre-CGB: Unit specific behavior, some units read FFs, some units read using + several different corruption pattterns. For simplicity, we emulate + FFs. */ + } + + if (unlikely(gb->oam_ppu_blocked)) { + return; + } + + bool height_16 = (gb->io_registers[GB_IO_LCDC] & 4) != 0; + signed y = gb->mode2_y_bus - 16; + /* This reverse sorts the visible objects by location and priority */ + if (y <= gb->current_line && y + (height_16? 16 : 8) > gb->current_line) { + unsigned j = 0; + for (; j < gb->n_visible_objs; j++) { + if (gb->objects_x[j] <= gb->mode2_x_bus) break; + } + memmove(gb->visible_objs + j + 1, gb->visible_objs + j, gb->n_visible_objs - j); + memmove(gb->objects_x + j + 1, gb->objects_x + j, gb->n_visible_objs - j); + memmove(gb->objects_y + j + 1, gb->objects_y + j, gb->n_visible_objs - j); + gb->visible_objs[j] = index; + gb->objects_x[j] = gb->mode2_x_bus; + gb->objects_y[j] = gb->mode2_y_bus; + gb->n_visible_objs++; + } +} + +static uint8_t data_for_tile_sel_glitch(GB_gameboy_t *gb, bool *should_use, bool *cgb_d_glitch) +{ + /* + Based on Matt Currie's research here: + https://github.com/mattcurrie/mealybug-tearoom-tests/blob/master/the-comprehensive-game-boy-ppu-documentation.md#tile_sel-bit-4 + */ + *should_use = true; + *cgb_d_glitch = false; + + if (gb->io_registers[GB_IO_LCDC] & 0x10) { + if (gb->model != GB_MODEL_CGB_D) { + *should_use = !(gb->current_tile & 0x80); + return gb->current_tile; + } + *cgb_d_glitch = true; + *should_use = false; + gb->io_registers[GB_IO_LCDC] &= ~0x10; + if (gb->fetcher_state == 3) { + *should_use = false; + *cgb_d_glitch = true; + return 0; + } + return 0; + } + return gb->data_for_sel_glitch; +} + + +static void render_pixel_if_possible(GB_gameboy_t *gb) +{ + const GB_fifo_item_t *fifo_item = NULL; + const GB_fifo_item_t *oam_fifo_item = NULL; + bool draw_oam = false; + bool bg_enabled = true, bg_priority = false; + + // Rendering (including scrolling adjustment) does not occur as long as an object at x=0 is pending + if (gb->n_visible_objs != 0 && + (gb->io_registers[GB_IO_LCDC] & 2 || GB_is_cgb(gb)) && + gb->objects_x[gb->n_visible_objs - 1] == 0) { + return; + } + + if (unlikely(gb->wx_triggered && !fifo_size(&gb->bg_fifo))) return; + + fifo_item = fifo_pop(&gb->bg_fifo); + bg_priority = fifo_item->bg_priority; + + if (fifo_size(&gb->oam_fifo)) { + oam_fifo_item = fifo_pop(&gb->oam_fifo); + if (oam_fifo_item->pixel && (gb->io_registers[GB_IO_LCDC] & 2) && unlikely(!gb->objects_disabled)) { + draw_oam = true; + bg_priority |= oam_fifo_item->bg_priority; + } + } + + // (gb->position_in_line + 16 < 8) is (gb->position_in_line < -8) in unsigned logic + if (((uint8_t)(gb->position_in_line + 16) < 8)) { + if ((gb->position_in_line & 7) == (gb->io_registers[GB_IO_SCX] & 7)) { + gb->position_in_line = -8; + } + else if (gb->position_in_line == (uint8_t) -9) { + gb->position_in_line = -16; + return; + } + } + + /* Drop pixels for scrollings */ + if (gb->position_in_line >= 160 || (gb->disable_rendering && !gb->sgb)) { + gb->position_in_line++; + return; + } + + /* Mixing */ + + if ((gb->io_registers[GB_IO_LCDC] & 0x1) == 0) { + if (gb->cgb_mode) { + bg_priority = false; + } + else { + bg_enabled = false; + } + } + + if (unlikely(gb->background_disabled)) { + bg_enabled = false; + static const GB_fifo_item_t empty_item = {0,}; + fifo_item = &empty_item; + } + + uint8_t icd_pixel = 0; + uint32_t *dest = NULL; + if (!gb->sgb) { + if (gb->border_mode != GB_BORDER_ALWAYS) { + dest = gb->screen + gb->lcd_x + gb->current_line * WIDTH; + } + else { + dest = gb->screen + gb->lcd_x + gb->current_line * BORDERED_WIDTH + (BORDERED_WIDTH - WIDTH) / 2 + (BORDERED_HEIGHT - LINES) / 2 * BORDERED_WIDTH; + } + } + + { + uint8_t pixel = bg_enabled? fifo_item->pixel : 0; + if (pixel && bg_priority) { + draw_oam = false; + } + if (!gb->cgb_mode) { + pixel = ((gb->io_registers[GB_IO_BGP] >> (pixel << 1)) & 3); + } + if (gb->sgb) { + if (gb->current_lcd_line < LINES) { + gb->sgb->screen_buffer[gb->lcd_x + gb->current_lcd_line * WIDTH] = gb->stopped? 0 : pixel; + } + } + else if (gb->model & GB_MODEL_NO_SFC_BIT) { + if (gb->icd_pixel_callback) { + icd_pixel = pixel; + } + } + else if (gb->cgb_palettes_ppu_blocked) { + *dest = gb->rgb_encode_callback(gb, 0, 0, 0); + } + else { + *dest = gb->background_palettes_rgb[fifo_item->palette * 4 + pixel]; + } + } + + if (draw_oam) { + uint8_t pixel = oam_fifo_item->pixel; + if (!gb->cgb_mode) { + /* Todo: Verify access timings */ + pixel = ((gb->io_registers[oam_fifo_item->palette? GB_IO_OBP1 : GB_IO_OBP0] >> (pixel << 1)) & 3); + } + if (gb->sgb) { + if (gb->current_lcd_line < LINES) { + gb->sgb->screen_buffer[gb->lcd_x + gb->current_lcd_line * WIDTH] = gb->stopped? 0 : pixel; + } + } + else if (gb->model & GB_MODEL_NO_SFC_BIT) { + if (gb->icd_pixel_callback) { + icd_pixel = pixel; + } + } + else if (gb->cgb_palettes_ppu_blocked) { + *dest = gb->rgb_encode_callback(gb, 0, 0, 0); + } + else { + *dest = gb->object_palettes_rgb[oam_fifo_item->palette * 4 + pixel]; + } + } + + if (gb->model & GB_MODEL_NO_SFC_BIT) { + if (gb->icd_pixel_callback) { + gb->icd_pixel_callback(gb, icd_pixel); + } + } + + gb->position_in_line++; + gb->lcd_x++; + gb->window_is_being_fetched = false; +} + +static inline void dma_sync(GB_gameboy_t *gb, unsigned *cycles) +{ + if (unlikely(GB_is_dma_active(gb))) { + unsigned offset = *cycles - gb->display_cycles; // Time passed in 8MHz ticks + if (offset) { + *cycles = gb->display_cycles; + if (!gb->cgb_double_speed) { + offset >>= 1; // Convert to T-cycles + } + unsigned old = gb->dma_cycles; + gb->dma_cycles = offset; + GB_dma_run(gb); + gb->dma_cycles = old - offset; + } + } +} + +/* All verified CGB timings are based on CGB CPU E. CGB CPUs >= D are known to have + slightly different timings than CPUs <= C. + + Todo: Add support to CPU C and older */ + +static inline uint8_t fetcher_y(GB_gameboy_t *gb) +{ + return gb->wx_triggered? gb->window_y : gb->current_line + gb->io_registers[GB_IO_SCY]; +} + +static inline uint8_t vram_read(GB_gameboy_t *gb, uint16_t addr) +{ + if (unlikely(gb->vram_ppu_blocked)) { + return 0xFF; + } + if (unlikely(gb->hdma_in_progress)) { + gb->addr_for_hdma_conflict = addr; + return 0; + } + // TODO: what if both? + else if (unlikely(gb->dma_current_dest <= 0xA0 && gb->dma_current_dest > 0 && (gb->dma_current_src & 0xE000) == 0x8000)) { // TODO: what happens in the last and first M cycles? + // DMAing from VRAM! + /* TODO: AGS has its own, very different pattern, but AGS is not currently a supported model */ + /* TODO: Research this when researching odd modes */ + /* TODO: probably not 100% on the first few reads during halt/stop modes*/ + unsigned offset = 1 - (gb->halted || gb->stopped); + if (GB_is_cgb(gb)) { + if (gb->dma_ppu_vram_conflict) { + addr = (gb->dma_ppu_vram_conflict_addr & 0x1FFF) | (addr & 0x2000); + } + else if (gb->dma_cycles_modulo && !gb->halted && !gb->stopped) { + addr &= 0x2000; + addr |= ((gb->dma_current_src - offset) & 0x1FFF); + } + else { + addr &= 0x2000 | ((gb->dma_current_src - offset) & 0x1FFF); + gb->dma_ppu_vram_conflict_addr = addr; + gb->dma_ppu_vram_conflict = !gb->halted && !gb->stopped; + } + } + else { + addr |= ((gb->dma_current_src - offset) & 0x1FFF); + } + gb->oam[gb->dma_current_dest - offset] = gb->vram[(addr & 0x1FFF) | (gb->cgb_vram_bank? 0x2000 : 0)]; + } + return gb->vram[addr]; +} + +static void advance_fetcher_state_machine(GB_gameboy_t *gb, unsigned *cycles) +{ + typedef enum { + GB_FETCHER_GET_TILE, + GB_FETCHER_GET_TILE_DATA_LOWER, + GB_FETCHER_GET_TILE_DATA_HIGH, + GB_FETCHER_PUSH, + GB_FETCHER_SLEEP, + } fetcher_step_t; + + static const fetcher_step_t fetcher_state_machine [8] = { + GB_FETCHER_SLEEP, + GB_FETCHER_GET_TILE, + GB_FETCHER_SLEEP, + GB_FETCHER_GET_TILE_DATA_LOWER, + GB_FETCHER_SLEEP, + GB_FETCHER_GET_TILE_DATA_HIGH, + GB_FETCHER_PUSH, + GB_FETCHER_PUSH, + }; + switch (fetcher_state_machine[gb->fetcher_state & 7]) { + case GB_FETCHER_GET_TILE: { + dma_sync(gb, cycles); + uint16_t map = 0x1800; + + if (!(gb->io_registers[GB_IO_LCDC] & 0x20)) { + gb->wx_triggered = false; + gb->wx166_glitch = false; + } + + /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ + if (gb->io_registers[GB_IO_LCDC] & 0x08 && !gb->wx_triggered) { + map = 0x1C00; + } + else if (gb->io_registers[GB_IO_LCDC] & 0x40 && gb->wx_triggered) { + map = 0x1C00; + } + + /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ + uint8_t y = fetcher_y(gb); + uint8_t x = 0; + if (gb->wx_triggered) { + x = gb->window_tile_x; + } + else if ((uint8_t)(gb->position_in_line + 16) < 8) { + x = gb->io_registers[GB_IO_SCX] >> 3; + } + else { + /* TODO: There is some CGB timing error around here. + Adjusting SCX by 7 or less shouldn't have an effect on a CGB, + but SameBoy is affected by a change of both 7 and 6 (but not less). */ + x = ((gb->io_registers[GB_IO_SCX] + gb->position_in_line + 8) / 8) & 0x1F; + } + if (gb->model > GB_MODEL_CGB_C) { + /* This value is cached on the CGB-D and newer, so it cannot be used to mix tiles together */ + gb->fetcher_y = y; + } + gb->last_tile_index_address = map + x + y / 8 * 32; + gb->current_tile = vram_read(gb, gb->last_tile_index_address); + if (GB_is_cgb(gb)) { + /* The CGB actually accesses both the tile index AND the attributes in the same T-cycle. + This probably means the CGB has a 16-bit data bus for the VRAM. */ + gb->current_tile_attributes = vram_read(gb, gb->last_tile_index_address + 0x2000); + } + } + gb->fetcher_state++; + break; + + case GB_FETCHER_GET_TILE_DATA_LOWER: { + dma_sync(gb, cycles); + bool use_glitched = false; + bool cgb_d_glitch = false; + if (gb->tile_sel_glitch) { + gb->current_tile_data[0] = data_for_tile_sel_glitch(gb, &use_glitched, &cgb_d_glitch); + } + uint8_t y_flip = 0; + uint16_t tile_address = 0; + uint8_t y = gb->model > GB_MODEL_CGB_C ? gb->fetcher_y : fetcher_y(gb); + + /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ + if (gb->io_registers[GB_IO_LCDC] & 0x10) { + tile_address = gb->current_tile * 0x10; + } + else { + tile_address = (int8_t)gb->current_tile * 0x10 + 0x1000; + } + if (gb->current_tile_attributes & 8) { + tile_address += 0x2000; + } + if (gb->current_tile_attributes & 0x40) { + y_flip = 0x7; + } + if (!use_glitched) { + gb->current_tile_data[0] = + vram_read(gb, tile_address + ((y & 7) ^ y_flip) * 2); + + } + if ((gb->io_registers[GB_IO_LCDC] & 0x10) && gb->tile_sel_glitch) { + gb->data_for_sel_glitch = + vram_read(gb, tile_address + ((y & 7) ^ y_flip) * 2); + } + else if (cgb_d_glitch) { + gb->data_for_sel_glitch = vram_read(gb, gb->current_tile * 0x10 + ((y & 7) ^ y_flip) * 2); + } + } + gb->fetcher_state++; + break; + + case GB_FETCHER_GET_TILE_DATA_HIGH: { + dma_sync(gb, cycles); + /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ + + bool use_glitched = false; + bool cgb_d_glitch = false; + if (gb->tile_sel_glitch) { + gb->current_tile_data[1] = data_for_tile_sel_glitch(gb, &use_glitched, &cgb_d_glitch); + } + + uint16_t tile_address = 0; + uint8_t y = gb->model > GB_MODEL_CGB_C ? gb->fetcher_y : fetcher_y(gb); + + if (gb->io_registers[GB_IO_LCDC] & 0x10) { + tile_address = gb->current_tile * 0x10; + } + else { + tile_address = (int8_t)gb->current_tile * 0x10 + 0x1000; + } + if (gb->current_tile_attributes & 8) { + tile_address += 0x2000; + } + uint8_t y_flip = 0; + if (gb->current_tile_attributes & 0x40) { + y_flip = 0x7; + } + gb->last_tile_data_address = tile_address + ((y & 7) ^ y_flip) * 2 + 1 - cgb_d_glitch; + if (!use_glitched) { + gb->current_tile_data[1] = + vram_read(gb, gb->last_tile_data_address); + } + if ((gb->io_registers[GB_IO_LCDC] & 0x10) && gb->tile_sel_glitch) { + gb->data_for_sel_glitch = vram_read(gb, gb->last_tile_data_address); + + } + else if (cgb_d_glitch) { + gb->data_for_sel_glitch = vram_read(gb, gb->current_tile * 0x10 + ((y & 7) ^ y_flip) * 2 + 1); + + } + } + if (gb->wx_triggered) { + gb->window_tile_x++; + gb->window_tile_x &= 0x1F; + } + + // fallthrough + case GB_FETCHER_PUSH: { + if (gb->fetcher_state < 7) { + gb->fetcher_state++; + } + if (fifo_size(&gb->bg_fifo) > 0) break; + + if (unlikely(gb->wy_triggered && !(gb->io_registers[GB_IO_LCDC] & 0x20) && !GB_is_cgb(gb))) { + /* See https://github.com/LIJI32/SameBoy/issues/278 for documentation */ + uint8_t logical_position = gb->position_in_line + 7; + if (logical_position > 167) { + logical_position = 0; + } + if (gb->io_registers[GB_IO_WX] == logical_position) { + gb->bg_fifo.read_end--; + gb->bg_fifo.read_end &= GB_FIFO_LENGTH - 1; + gb->bg_fifo.fifo[gb->bg_fifo.read_end] = (GB_fifo_item_t){0,}; + gb->bg_fifo.size = 1; + break; + } + } + + fifo_push_bg_row(&gb->bg_fifo, gb->current_tile_data[0], gb->current_tile_data[1], + gb->current_tile_attributes & 7, gb->current_tile_attributes & 0x80, gb->current_tile_attributes & 0x20); + gb->fetcher_state = 0; + } + break; + + case GB_FETCHER_SLEEP: + { + gb->fetcher_state++; + } + break; + + nodefault; + } +} + +static uint16_t get_object_line_address(GB_gameboy_t *gb, uint8_t y, uint8_t tile, uint8_t flags) +{ + bool height_16 = (gb->io_registers[GB_IO_LCDC] & 4) != 0; /* Todo: Which T-cycle actually reads this? */ + uint8_t tile_y = (gb->current_line - y) & (height_16? 0xF : 7); + + if (flags & 0x40) { /* Flip Y */ + tile_y ^= height_16? 0xF : 7; + } + + /* Todo: I'm not 100% sure an access to OAM can't trigger the OAM bug while we're accessing this */ + uint16_t line_address = (height_16? tile & 0xFE : tile) * 0x10 + tile_y * 2; + + if (gb->cgb_mode && (flags & 0x8)) { /* Use VRAM bank 2 */ + line_address += 0x2000; + } + return line_address; +} + +static inline uint8_t flip(uint8_t x) +{ + x = (x & 0xF0) >> 4 | (x & 0x0F) << 4; + x = (x & 0xCC) >> 2 | (x & 0x33) << 2; + x = (x & 0xAA) >> 1 | (x & 0x55) << 1; + return x; +} + +static inline void get_tile_data(const GB_gameboy_t *gb, uint8_t tile_x, uint8_t y, uint16_t map, uint8_t *attributes, uint8_t *data0, uint8_t *data1) +{ + uint8_t current_tile = gb->vram[map + (tile_x & 0x1F) + y / 8 * 32]; + *attributes = GB_is_cgb(gb)? gb->vram[0x2000 + map + (tile_x & 0x1F) + y / 8 * 32] : 0; + + uint16_t tile_address = 0; + + /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ + if (gb->io_registers[GB_IO_LCDC] & 0x10) { + tile_address = current_tile * 0x10; + } + else { + tile_address = (int8_t)current_tile * 0x10 + 0x1000; + } + if (*attributes & 8) { + tile_address += 0x2000; + } + uint8_t y_flip = 0; + if (*attributes & 0x40) { + y_flip = 0x7; + } + + *data0 = gb->vram[tile_address + ((y & 7) ^ y_flip) * 2]; + *data1 = gb->vram[tile_address + ((y & 7) ^ y_flip) * 2 + 1]; + + if (*attributes & 0x20) { + *data0 = flip(*data0); + *data1 = flip(*data1); + } + +} + +static void render_line(GB_gameboy_t *gb) +{ + if (gb->disable_rendering) return; + if (!gb->screen) return; + if (gb->current_line > 144) return; // Corrupt save state + + struct { + unsigned pixel:2; // Color, 0-3 + unsigned priority:6; // Object priority – 0 in DMG, OAM index in CGB + unsigned palette:3; // Palette, 0 - 7 (CGB); 0-1 in DMG (or just 0 for BG) + bool bg_priority:1; // BG priority bit + } _object_buffer[160 + 16]; // allocate extra to avoid per pixel checks + static const uint8_t empty_object_buffer[sizeof(_object_buffer)]; + const typeof(_object_buffer[0]) *object_buffer; + + if (gb->n_visible_objs && !gb->objects_disabled && (gb->io_registers[GB_IO_LCDC] & 2)) { + object_buffer = &_object_buffer[0]; + object_t *objects = (object_t *) &gb->oam; + memset(_object_buffer, 0, sizeof(_object_buffer)); + + while (gb->n_visible_objs) { + unsigned object_index = gb->visible_objs[gb->n_visible_objs - 1]; + unsigned priority = gb->object_priority == GB_OBJECT_PRIORITY_X? 0 : object_index; + const object_t *object = &objects[object_index]; + gb->n_visible_objs--; + + uint16_t line_address = get_object_line_address(gb, object->y, object->tile, object->flags); + uint8_t data0 = gb->vram[line_address]; + uint8_t data1 = gb->vram[line_address + 1]; + if (gb->n_visible_objs == 0) { + gb->data_for_sel_glitch = data1; + } + if (object->flags & 0x20) { + data0 = flip(data0); + data1 = flip(data1); + } + + typeof(_object_buffer[0]) *p = _object_buffer + object->x; + if (object->x >= 168) { + continue; + } + unrolled for (unsigned x = 0; x < 8; x++) { + unsigned pixel = (data0 >> 7) | ((data1 >> 7) << 1); + data0 <<= 1; + data1 <<= 1; + if (pixel && (!p->pixel || priority < p->priority)) { + p->pixel = pixel; + p->priority = priority; + + if (gb->cgb_mode) { + p->palette = object->flags & 0x7; + } + else { + p->palette = (object->flags & 0x10) >> 4; + } + p->bg_priority = object->flags & 0x80; + } + p++; + } + } + } + else { + object_buffer = (const void *)empty_object_buffer; + } + + + uint32_t *restrict p = gb->screen; + typeof(object_buffer[0]) *object_buffer_pointer = object_buffer + 8; + if (gb->border_mode == GB_BORDER_ALWAYS) { + p += (BORDERED_WIDTH - (WIDTH)) / 2 + BORDERED_WIDTH * (BORDERED_HEIGHT - LINES) / 2; + p += BORDERED_WIDTH * gb->current_line; + } + else { + p += WIDTH * gb->current_line; + } + + if (unlikely(gb->background_disabled) || (!gb->cgb_mode && !(gb->io_registers[GB_IO_LCDC] & 1))) { + uint32_t bg = gb->background_palettes_rgb[gb->cgb_mode? 0 : (gb->io_registers[GB_IO_BGP] & 3)]; + for (unsigned i = 160; i--;) { + if (unlikely(object_buffer_pointer->pixel)) { + uint8_t pixel = object_buffer_pointer->pixel; + if (!gb->cgb_mode) { + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3); + } + *(p++) = gb->object_palettes_rgb[pixel + (object_buffer_pointer->palette & 7) * 4]; + } + else { + *(p++) = bg; + } + object_buffer_pointer++; + } + return; + } + + unsigned pixels = 0; + uint8_t tile_x = gb->io_registers[GB_IO_SCX] / 8; + unsigned fractional_scroll = gb->io_registers[GB_IO_SCX] & 7; + uint16_t map = 0x1800; + if (gb->io_registers[GB_IO_LCDC] & 0x08) { + map = 0x1C00; + } + uint8_t y = gb->current_line + gb->io_registers[GB_IO_SCY]; + uint8_t attributes; + uint8_t data0, data1; + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + +#define DO_PIXEL() \ +uint8_t pixel = (data0 >> 7) | ((data1 >> 7) << 1);\ +data0 <<= 1;\ +data1 <<= 1;\ +\ +if (unlikely(object_buffer_pointer->pixel) && (pixel == 0 || !(object_buffer_pointer->bg_priority || (attributes & 0x80)) || !(gb->io_registers[GB_IO_LCDC] & 1))) {\ + pixel = object_buffer_pointer->pixel;\ + if (!gb->cgb_mode) {\ + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3);\ + }\ + *(p++) = gb->object_palettes_rgb[pixel + (object_buffer_pointer->palette & 7) * 4];\ +}\ +else {\ + if (!gb->cgb_mode) {\ + pixel = ((gb->io_registers[GB_IO_BGP] >> (pixel << 1)) & 3);\ + }\ + *(p++) = gb->background_palettes_rgb[pixel + (attributes & 7) * 4];\ +}\ +pixels++;\ +object_buffer_pointer++\ + + // First 1-8 pixels + data0 <<= fractional_scroll; + data1 <<= fractional_scroll; + bool check_window = gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20); + for (unsigned i = fractional_scroll; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { +activate_window: + check_window = false; + map = gb->io_registers[GB_IO_LCDC] & 0x40? 0x1C00 : 0x1800; + tile_x = -1; + y = ++gb->window_y; + break; + } + DO_PIXEL(); + } + tile_x++; + + while (pixels < 160 - 8) { + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + for (unsigned i = 0; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } + tile_x++; + } + + gb->fetcher_state = (160 - pixels) & 7; + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + while (pixels < 160) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } + tile_x++; + + get_tile_data(gb, tile_x, y, map, &attributes, gb->current_tile_data, gb->current_tile_data + 1); +#undef DO_PIXEL +} + +static void render_line_sgb(GB_gameboy_t *gb) +{ + if (gb->current_line > 144) return; // Corrupt save state + + struct { + unsigned pixel:2; // Color, 0-3 + unsigned palette:1; // Palette, 0 - 7 (CGB); 0-1 in DMG (or just 0 for BG) + bool bg_priority:1; // BG priority bit + } _object_buffer[160 + 16]; // allocate extra to avoid per pixel checks + static const uint8_t empty_object_buffer[sizeof(_object_buffer)]; + const typeof(_object_buffer[0]) *object_buffer; + + if (gb->n_visible_objs && !gb->objects_disabled && (gb->io_registers[GB_IO_LCDC] & 2)) { + object_buffer = &_object_buffer[0]; + object_t *objects = (object_t *) &gb->oam; + memset(_object_buffer, 0, sizeof(_object_buffer)); + + while (gb->n_visible_objs) { + const object_t *object = &objects[gb->visible_objs[gb->n_visible_objs - 1]]; + gb->n_visible_objs--; + + uint16_t line_address = get_object_line_address(gb, object->y, object->tile, object->flags); + uint8_t data0 = gb->vram[line_address]; + uint8_t data1 = gb->vram[line_address + 1]; + if (object->flags & 0x20) { + data0 = flip(data0); + data1 = flip(data1); + } + + typeof(_object_buffer[0]) *p = _object_buffer + object->x; + if (object->x >= 168) { + continue; + } + unrolled for (unsigned x = 0; x < 8; x++) { + unsigned pixel = (data0 >> 7) | ((data1 >> 7) << 1); + data0 <<= 1; + data1 <<= 1; + if (!p->pixel) { + p->pixel = pixel; + p->palette = (object->flags & 0x10) >> 4; + p->bg_priority = object->flags & 0x80; + } + p++; + } + } + } + else { + object_buffer = (const void *)empty_object_buffer; + } + + + uint8_t *restrict p = gb->sgb->screen_buffer; + typeof(object_buffer[0]) *object_buffer_pointer = object_buffer + 8; + p += WIDTH * gb->current_line; + + if (unlikely(gb->background_disabled) || (!gb->cgb_mode && !(gb->io_registers[GB_IO_LCDC] & 1))) { + for (unsigned i = 160; i--;) { + if (unlikely(object_buffer_pointer->pixel)) { + uint8_t pixel = object_buffer_pointer->pixel; + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3); + *(p++) = pixel; + } + else { + *(p++) = gb->io_registers[GB_IO_BGP] & 3; + } + object_buffer_pointer++; + } + return; + } + + unsigned pixels = 0; + uint8_t tile_x = gb->io_registers[GB_IO_SCX] / 8; + unsigned fractional_scroll = gb->io_registers[GB_IO_SCX] & 7; + uint16_t map = 0x1800; + if (gb->io_registers[GB_IO_LCDC] & 0x08) { + map = 0x1C00; + } + uint8_t y = gb->current_line + gb->io_registers[GB_IO_SCY]; + uint8_t attributes; + uint8_t data0, data1; + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + +#define DO_PIXEL() \ +uint8_t pixel = (data0 >> 7) | ((data1 >> 7) << 1);\ +data0 <<= 1;\ +data1 <<= 1;\ +\ +if (unlikely(object_buffer_pointer->pixel) && (pixel == 0 || !object_buffer_pointer->bg_priority || !(gb->io_registers[GB_IO_LCDC] & 1))) {\ + pixel = object_buffer_pointer->pixel;\ + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3);\ + *(p++) = pixel;\ +}\ +else {\ + pixel = ((gb->io_registers[GB_IO_BGP] >> (pixel << 1)) & 3);\ + *(p++) = pixel;\ +}\ +pixels++;\ +object_buffer_pointer++\ + + // First 1-8 pixels + data0 <<= fractional_scroll; + data1 <<= fractional_scroll; + bool check_window = gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20); + for (unsigned i = fractional_scroll; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + activate_window: + check_window = false; + map = gb->io_registers[GB_IO_LCDC] & 0x40? 0x1C00 : 0x1800; + tile_x = -1; + y = ++gb->window_y; + break; + } + DO_PIXEL(); + } + tile_x++; + + while (pixels < 160 - 8) { + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + for (unsigned i = 0; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } + tile_x++; + } + + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + while (pixels < 160) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } +} + +static inline uint16_t mode3_batching_length(GB_gameboy_t *gb) +{ + if (gb->position_in_line != (uint8_t)-16) return 0; + if (gb->model & GB_MODEL_NO_SFC_BIT) return 0; + if (gb->hdma_on) return 0; + if (gb->stopped) return 0; + if (GB_is_dma_active(gb)) return 0; + if (gb->wy_triggered) { + if (gb->io_registers[GB_IO_LCDC] & 0x20) { + if ((gb->io_registers[GB_IO_WX] < 8 || gb->io_registers[GB_IO_WX] == 166)) { + return 0; + } + } + else { + if (gb->io_registers[GB_IO_WX] < 167 && !GB_is_cgb(gb)) { + return 0; + } + } + } + + // No objects or window, timing is trivial + if (gb->n_visible_objs == 0 && !(gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20))) return 167 + (gb->io_registers[GB_IO_SCX] & 7); + + if (gb->hdma_on_hblank) return 0; + + // 300 is a bit more than the maximum Mode 3 length + + // No HBlank interrupt + if (!(gb->io_registers[GB_IO_STAT] & 0x8)) return 300; + // No STAT interrupt requested + if (!(gb->interrupt_enable & 2)) return 300; + + + return 0; +} + +static inline uint8_t x_for_object_match(GB_gameboy_t *gb) +{ + uint8_t ret = gb->position_in_line + 8; + if (ret > (uint8_t)-16) return 0; + return ret; +} + +/* + TODO: It seems that the STAT register's mode bits are always "late" by 4 T-cycles. + The PPU logic can be greatly simplified if that delay is simply emulated. + */ +void GB_display_run(GB_gameboy_t *gb, unsigned cycles, bool force) +{ + if (unlikely((gb->io_registers[GB_IO_LCDC] & 0x80) && (signed)(gb->cycles_for_line * 2 + cycles + gb->display_cycles) > LINE_LENGTH * 2)) { + unsigned first_batch = (LINE_LENGTH * 2 - gb->cycles_for_line * 2 + gb->display_cycles); + GB_display_run(gb, first_batch, force); + cycles -= first_batch; + if (gb->display_state == 22) { + gb->io_registers[GB_IO_STAT] &= ~3; + gb->mode_for_interrupt = 0; + GB_STAT_update(gb); + } + gb->display_state = 9; + gb->display_cycles = 0; + } + if (unlikely(gb->delayed_glitch_hblank_interrupt && cycles && gb->current_line < LINES)) { + gb->delayed_glitch_hblank_interrupt = false; + gb->mode_for_interrupt = 0; + GB_STAT_update(gb); + gb->mode_for_interrupt = 3; + } + gb->cycles_since_vblank_callback += cycles / 2; + + if (cycles < gb->frame_repeat_countdown) { + gb->frame_repeat_countdown -= cycles; + } + else { + gb->frame_repeat_countdown = 0; + } + + /* The PPU does not advance while in STOP mode on the DMG */ + if (gb->stopped && !GB_is_cgb(gb)) { + if (gb->cycles_since_vblank_callback >= LCDC_PERIOD) { + GB_display_vblank(gb, GB_VBLANK_TYPE_ARTIFICIAL); + } + return; + } + + GB_BATCHABLE_STATE_MACHINE(gb, display, cycles, 2, !force) { + GB_STATE(gb, display, 1); + GB_STATE(gb, display, 2); + GB_STATE(gb, display, 3); + GB_STATE(gb, display, 4); + GB_STATE(gb, display, 5); + GB_STATE(gb, display, 6); + GB_STATE(gb, display, 7); + GB_STATE(gb, display, 8); + GB_STATE(gb, display, 9); + GB_STATE(gb, display, 10); + GB_STATE(gb, display, 11); + GB_STATE(gb, display, 12); + GB_STATE(gb, display, 13); + GB_STATE(gb, display, 14); + GB_STATE(gb, display, 15); + GB_STATE(gb, display, 16); + GB_STATE(gb, display, 17); + GB_STATE(gb, display, 19); + GB_STATE(gb, display, 20); + GB_STATE(gb, display, 21); + GB_STATE(gb, display, 22); + GB_STATE(gb, display, 23); + GB_STATE(gb, display, 24); + GB_STATE(gb, display, 26); + GB_STATE(gb, display, 27); + GB_STATE(gb, display, 28); + GB_STATE(gb, display, 29); + GB_STATE(gb, display, 30); + GB_STATE(gb, display, 31); + GB_STATE(gb, display, 32); + GB_STATE(gb, display, 33); + GB_STATE(gb, display, 34); + GB_STATE(gb, display, 35); + GB_STATE(gb, display, 36); + GB_STATE(gb, display, 37); + GB_STATE(gb, display, 38); + GB_STATE(gb, display, 39); + GB_STATE(gb, display, 40); + GB_STATE(gb, display, 41); + GB_STATE(gb, display, 42); + GB_STATE(gb, display, 43); + } + + if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) { + while (true) { + if (gb->cycles_since_vblank_callback < LCDC_PERIOD) { + GB_SLEEP(gb, display, 1, LCDC_PERIOD - gb->cycles_since_vblank_callback); + } + GB_display_vblank(gb, GB_VBLANK_TYPE_LCD_OFF); + } + return; + } + + gb->is_odd_frame = false; + + if (!GB_is_cgb(gb)) { + GB_SLEEP(gb, display, 23, 1); + } + + /* Handle mode 2 on the very first line 0 */ + gb->current_line = 0; + gb->window_y = -1; + gb->wy_triggered = false; + gb->position_in_line = -16; + + gb->ly_for_comparison = 0; + gb->io_registers[GB_IO_STAT] &= ~3; + gb->mode_for_interrupt = -1; + gb->oam_read_blocked = false; + gb->vram_read_blocked = false; + gb->oam_write_blocked = false; + gb->vram_write_blocked = false; + gb->cgb_palettes_blocked = false; + gb->cycles_for_line = MODE2_LENGTH - 4; + GB_STAT_update(gb); + GB_SLEEP(gb, display, 2, MODE2_LENGTH - 4); + + gb->oam_write_blocked = true; + gb->cycles_for_line += 2; + GB_STAT_update(gb); + GB_SLEEP(gb, display, 34, 2); + + gb->n_visible_objs = 0; + gb->orig_n_visible_objs = 0; + gb->cycles_for_line += 8; // Mode 0 is shorter on the first line 0, so we augment cycles_for_line by 8 extra cycles. + + gb->io_registers[GB_IO_STAT] &= ~3; + gb->io_registers[GB_IO_STAT] |= 3; + gb->mode_for_interrupt = 3; + + gb->oam_write_blocked = true; + gb->oam_read_blocked = true; + gb->vram_read_blocked = gb->cgb_double_speed; + gb->vram_write_blocked = gb->cgb_double_speed; + if (!GB_is_cgb(gb)) { + gb->vram_read_blocked = true; + gb->vram_write_blocked = true; + } + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 37, 2); + + gb->cgb_palettes_blocked = true; + gb->cycles_for_line += (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_C)? 2 : 3; + GB_SLEEP(gb, display, 38, (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_C)? 2 : 3); + + gb->vram_read_blocked = true; + gb->vram_write_blocked = true; + gb->wx_triggered = false; + gb->wx166_glitch = false; + goto mode_3_start; + + // Mode 3 abort, state 9 + display9: { + // TODO: Timing of things in this scenario is almost completely untested + if (gb->current_line < LINES && !GB_is_sgb(gb) && !gb->disable_rendering) { + GB_log(gb, "The ROM is preventing line %d from fully rendering, this could damage a real device's LCD display.\n", gb->current_line); + uint32_t *dest = NULL; + if (gb->border_mode != GB_BORDER_ALWAYS) { + dest = gb->screen + gb->lcd_x + gb->current_line * WIDTH; + } + else { + dest = gb->screen + gb->lcd_x + gb->current_line * BORDERED_WIDTH + (BORDERED_WIDTH - WIDTH) / 2 + (BORDERED_HEIGHT - LINES) / 2 * BORDERED_WIDTH; + } + uint32_t color = GB_is_cgb(gb)? GB_convert_rgb15(gb, 0x7FFF, false) : gb->background_palettes_rgb[4]; + while (gb->lcd_x < 160) { + *(dest++) = color; + gb->lcd_x++; + } + } + gb->n_visible_objs = gb->orig_n_visible_objs; + gb->current_line++; + gb->cycles_for_line = 0; + if (gb->current_line != LINES) { + gb->cycles_for_line = 2; + GB_SLEEP(gb, display, 28, 2); + gb->io_registers[GB_IO_LY] = gb->current_line; + if (gb->position_in_line >= 156 && gb->position_in_line < (uint8_t)-16) { + gb->delayed_glitch_hblank_interrupt = true; + } + GB_STAT_update(gb); + gb->position_in_line = -15; + goto mode_3_start; + } + else { + if (gb->position_in_line >= 156 && gb->position_in_line < (uint8_t)-16) { + gb->delayed_glitch_hblank_interrupt = true; + } + gb->position_in_line = -16; + } + } + + while (true) { + /* Lines 0 - 143 */ + gb->window_y = -1; + for (; gb->current_line < LINES; gb->current_line++) { + if (unlikely(gb->lcd_line_callback)) { + gb->lcd_line_callback(gb, gb->current_line); + } + + gb->oam_write_blocked = GB_is_cgb(gb) && !gb->cgb_double_speed; + gb->accessed_oam_row = 0; + + GB_SLEEP(gb, display, 35, 2); + gb->oam_write_blocked = GB_is_cgb(gb); + + GB_SLEEP(gb, display, 6, 1); + gb->io_registers[GB_IO_LY] = gb->current_line; + gb->oam_read_blocked = true; + gb->ly_for_comparison = gb->current_line? -1 : 0; + + /* The OAM STAT interrupt occurs 1 T-cycle before STAT actually changes, except on line 0. + PPU glitch? */ + if (gb->current_line != 0) { + gb->mode_for_interrupt = 2; + gb->io_registers[GB_IO_STAT] &= ~3; + } + else if (!GB_is_cgb(gb)) { + gb->io_registers[GB_IO_STAT] &= ~3; + } + GB_STAT_update(gb); + + GB_SLEEP(gb, display, 7, 1); + + gb->io_registers[GB_IO_STAT] &= ~3; + gb->io_registers[GB_IO_STAT] |= 2; + gb->mode_for_interrupt = 2; + gb->oam_write_blocked = true; + gb->ly_for_comparison = gb->current_line; + GB_STAT_update(gb); + gb->mode_for_interrupt = -1; + GB_STAT_update(gb); + gb->n_visible_objs = 0; + gb->orig_n_visible_objs = 0; + + if (!GB_is_dma_active(gb) && !gb->oam_ppu_blocked) { + GB_BATCHPOINT(gb, display, 5, 80); + } + for (gb->oam_search_index = 0; gb->oam_search_index < 40; gb->oam_search_index++) { + if (GB_is_cgb(gb)) { + add_object_from_index(gb, gb->oam_search_index); + /* The CGB does not care about the accessed OAM row as there's no OAM bug */ + } + GB_SLEEP(gb, display, 8, 2); + if (!GB_is_cgb(gb)) { + add_object_from_index(gb, gb->oam_search_index); + gb->accessed_oam_row = (gb->oam_search_index & ~1) * 4 + 8; + } + if (gb->oam_search_index == 37) { + gb->vram_read_blocked = !GB_is_cgb(gb); + gb->vram_write_blocked = false; + gb->cgb_palettes_blocked = false; + gb->oam_write_blocked = GB_is_cgb(gb); + } + } + gb->cycles_for_line = MODE2_LENGTH + 4; + gb->orig_n_visible_objs = gb->n_visible_objs; + gb->accessed_oam_row = -1; + gb->io_registers[GB_IO_STAT] &= ~3; + gb->io_registers[GB_IO_STAT] |= 3; + gb->mode_for_interrupt = 3; + gb->vram_read_blocked = true; + gb->vram_write_blocked = true; + gb->cgb_palettes_blocked = false; + gb->oam_write_blocked = true; + gb->oam_read_blocked = true; + + GB_STAT_update(gb); + + + uint8_t idle_cycles = 3; + if (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_C) { + idle_cycles = 2; + } + gb->cycles_for_line += idle_cycles; + GB_SLEEP(gb, display, 10, idle_cycles); + + gb->cgb_palettes_blocked = true; + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 32, 2); + mode_3_start: + /* TODO: Timing seems incorrect, might need an access conflict handling. */ + if ((gb->io_registers[GB_IO_LCDC] & 0x20) && + gb->io_registers[GB_IO_WY] == gb->current_line) { + gb->wy_triggered = true; + } + + fifo_clear(&gb->bg_fifo); + fifo_clear(&gb->oam_fifo); + /* Fill the FIFO with 8 pixels of "junk", it's going to be dropped anyway. */ + fifo_push_bg_row(&gb->bg_fifo, 0, 0, 0, false, false); + gb->lcd_x = 0; + + /* The actual rendering cycle */ + gb->fetcher_state = 0; + if ((gb->mode3_batching_length = mode3_batching_length(gb))) { + GB_BATCHPOINT(gb, display, 3, gb->mode3_batching_length); + if (GB_BATCHED_CYCLES(gb, display) >= gb->mode3_batching_length) { + // Successfully batched! + gb->lcd_x = gb->position_in_line = 160; + gb->cycles_for_line += gb->mode3_batching_length; + if (gb->sgb) { + render_line_sgb(gb); + } + else { + render_line(gb); + } + GB_SLEEP(gb, display, 4, gb->mode3_batching_length); + goto skip_slow_mode_3; + } + } + while (true) { + /* Handle window */ + /* TODO: It appears that WX checks if the window begins *next* pixel, not *this* pixel. For this reason, + WX=167 has no effect at all (It checks if the PPU X position is 161, which never happens) and WX=166 + has weird artifacts (It appears to activate the window during HBlank, as PPU X is temporarily 160 at + that point. The code should be updated to represent this, and this will fix the time travel hack in + WX's access conflict code. */ + + if (!gb->wx_triggered && gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20)) { + bool should_activate_window = false; + if (gb->io_registers[GB_IO_WX] == 0) { + static const uint8_t scx_to_wx0_comparisons[] = {-7, -1, -2, -3, -4, -5, -6, -6}; + if (gb->position_in_line == scx_to_wx0_comparisons[gb->io_registers[GB_IO_SCX] & 7]) { + should_activate_window = true; + } + } + else if (gb->wx166_glitch) { + static const uint8_t scx_to_wx166_comparisons[] = {-16, -1, -2, -3, -4, -5, -6, -7}; + if (gb->position_in_line == scx_to_wx166_comparisons[gb->io_registers[GB_IO_SCX] & 7]) { + should_activate_window = true; + } + } + else if (gb->io_registers[GB_IO_WX] < 166 + GB_is_cgb(gb)) { + if (gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 7)) { + should_activate_window = true; + } + else if (gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 6) && !gb->wx_just_changed) { + should_activate_window = true; + /* LCD-PPU horizontal desync! It only appears to happen on DMGs, but not all of them. + This doesn't seem to be CPU revision dependent, but most revisions */ + if ((gb->model & GB_MODEL_FAMILY_MASK) == GB_MODEL_DMG_FAMILY && !GB_is_sgb(gb)) { + if (gb->lcd_x > 0) { + gb->lcd_x--; + } + } + } + } + + if (should_activate_window) { + gb->window_y++; + /* TODO: Verify fetcher access timings in this case */ + if (gb->io_registers[GB_IO_WX] == 0 && (gb->io_registers[GB_IO_SCX] & 7)) { + gb->cycles_for_line++; + GB_SLEEP(gb, display, 42, 1); + } + gb->wx_triggered = true; + gb->window_tile_x = 0; + fifo_clear(&gb->bg_fifo); + gb->fetcher_state = 0; + gb->window_is_being_fetched = true; + } + else if (!GB_is_cgb(gb) && gb->io_registers[GB_IO_WX] == 166 && gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 7)) { + gb->window_y++; + } + } + + /* TODO: What happens when WX=0? When the fifo is full? */ + if (!GB_is_cgb(gb) && gb->wx_triggered && !gb->window_is_being_fetched && + gb->fetcher_state == 0 && gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 7) && gb->bg_fifo.size == 8) { + // Insert a pixel right at the FIFO's end + gb->bg_fifo.read_end--; + gb->bg_fifo.read_end &= GB_FIFO_LENGTH - 1; + gb->bg_fifo.fifo[gb->bg_fifo.read_end] = (GB_fifo_item_t){0,}; + gb->bg_fifo.size++; + gb->window_is_being_fetched = false; + } + + /* Handle objects */ + /* When the object enabled bit is off, this proccess is skipped entirely on the DMG, but not on the CGB. + On the CGB, this bit is checked only when the pixel is actually popped from the FIFO. */ + + while (gb->n_visible_objs != 0 && + gb->objects_x[gb->n_visible_objs - 1] < x_for_object_match(gb)) { + gb->n_visible_objs--; + } + + gb->during_object_fetch = true; + while (gb->n_visible_objs != 0 && + (gb->io_registers[GB_IO_LCDC] & 2 || GB_is_cgb(gb)) && + gb->objects_x[gb->n_visible_objs - 1] == x_for_object_match(gb)) { + + while (gb->fetcher_state < 5 || fifo_size(&gb->bg_fifo) == 0) { + advance_fetcher_state_machine(gb, &cycles); + gb->cycles_for_line++; + GB_SLEEP(gb, display, 27, 1); + if (gb->object_fetch_aborted) { + goto abort_fetching_object; + } + } + + /* TODO: Can this be deleted? { */ + advance_fetcher_state_machine(gb, &cycles); + gb->cycles_for_line++; + GB_SLEEP(gb, display, 41, 1); + if (gb->object_fetch_aborted) { + goto abort_fetching_object; + } + /* } */ + + advance_fetcher_state_machine(gb, &cycles); + dma_sync(gb, &cycles); + gb->mode2_y_bus = oam_read(gb, gb->visible_objs[gb->n_visible_objs - 1] * 4 + 2); + gb->object_flags = oam_read(gb, gb->visible_objs[gb->n_visible_objs - 1] * 4 + 3); + + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 20, 2); + if (gb->object_fetch_aborted) { + goto abort_fetching_object; + } + + /* TODO: timing not verified */ + dma_sync(gb, &cycles); + gb->object_low_line_address = get_object_line_address(gb, + gb->objects_y[gb->n_visible_objs - 1], + gb->mode2_y_bus, + gb->object_flags); + gb->object_tile_data[0] = vram_read(gb, gb->object_low_line_address); + + + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 39, 2); + if (gb->object_fetch_aborted) { + goto abort_fetching_object; + } + + gb->during_object_fetch = false; + gb->cycles_for_line++; + GB_SLEEP(gb, display, 40, 1); + + /* TODO: timing not verified */ + dma_sync(gb, &cycles); + gb->object_tile_data[1] = vram_read(gb, get_object_line_address(gb, + gb->objects_y[gb->n_visible_objs - 1], + gb->mode2_y_bus, + gb->object_flags) + 1); + + + uint8_t palette = (gb->object_flags & 0x10) ? 1 : 0; + if (gb->cgb_mode) { + palette = gb->object_flags & 0x7; + } + fifo_overlay_object_row(&gb->oam_fifo, + gb->object_tile_data[0], + gb->object_tile_data[1], + palette, + gb->object_flags & 0x80, + gb->object_priority == GB_OBJECT_PRIORITY_INDEX? gb->visible_objs[gb->n_visible_objs - 1] : 0, + gb->object_flags & 0x20); + + gb->data_for_sel_glitch = gb->vram_ppu_blocked? 0xFF : gb->vram[gb->object_low_line_address + 1]; + gb->n_visible_objs--; + } + +abort_fetching_object: + gb->object_fetch_aborted = false; + gb->during_object_fetch = false; + + render_pixel_if_possible(gb); + advance_fetcher_state_machine(gb, &cycles); + + if (gb->position_in_line == 160) break; + gb->cycles_for_line++; + GB_SLEEP(gb, display, 21, 1); + } +skip_slow_mode_3: + gb->position_in_line = -16; + + /* TODO: This seems incorrect (glitches Tesserae), verify further */ + /* + if (gb->fetcher_state == 4 || gb->fetcher_state == 5) { + gb->data_for_sel_glitch = gb->current_tile_data[0]; + } + else { + gb->data_for_sel_glitch = gb->current_tile_data[1]; + } + */ + while (gb->lcd_x != 160 && !gb->disable_rendering && gb->screen && !gb->sgb) { + /* Oh no! The PPU and LCD desynced! Fill the rest of the line whith white. */ + uint32_t *dest = NULL; + if (gb->border_mode != GB_BORDER_ALWAYS) { + dest = gb->screen + gb->lcd_x + gb->current_line * WIDTH; + } + else { + dest = gb->screen + gb->lcd_x + gb->current_line * BORDERED_WIDTH + (BORDERED_WIDTH - WIDTH) / 2 + (BORDERED_HEIGHT - LINES) / 2 * BORDERED_WIDTH; + } + *dest = gb->background_palettes_rgb[0]; + gb->lcd_x++; + + } + + /* TODO: Verify timing */ + if (!GB_is_cgb(gb) && gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20) && gb->io_registers[GB_IO_WX] == 166) { + gb->wx166_glitch = true; + } + else { + gb->wx166_glitch = false; + } + gb->wx_triggered = false; + + if (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_C) { + gb->cycles_for_line++; + GB_SLEEP(gb, display, 30, 1); + } + + if (!gb->cgb_double_speed) { + gb->io_registers[GB_IO_STAT] &= ~3; + gb->mode_for_interrupt = 0; + gb->oam_read_blocked = false; + gb->vram_read_blocked = false; + gb->oam_write_blocked = false; + gb->vram_write_blocked = false; + } + + gb->cycles_for_line++; + GB_SLEEP(gb, display, 22, 1); + + gb->io_registers[GB_IO_STAT] &= ~3; + gb->mode_for_interrupt = 0; + gb->oam_read_blocked = false; + gb->vram_read_blocked = false; + gb->oam_write_blocked = false; + gb->vram_write_blocked = false; + GB_STAT_update(gb); + + /* Todo: Measure this value */ + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 33, 2); + gb->cgb_palettes_blocked = !gb->cgb_double_speed; + + if (gb->hdma_on_hblank && !gb->halted && !gb->stopped) { + gb->hdma_on = true; + } + + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 36, 2); + gb->cgb_palettes_blocked = false; + + if (gb->cycles_for_line > LINE_LENGTH - 2) { + gb->cycles_for_line = 0; + GB_SLEEP(gb, display, 43, LINE_LENGTH - gb->cycles_for_line); + goto display9; + } + + { + uint16_t cycles_for_line = gb->cycles_for_line; + gb->cycles_for_line = 0; + GB_SLEEP(gb, display, 11, LINE_LENGTH - cycles_for_line - 2); + } + /* + TODO: Verify double speed timing + TODO: Timing differs on a DMG + */ + if ((gb->io_registers[GB_IO_LCDC] & 0x20) && + (gb->io_registers[GB_IO_WY] == gb->current_line)) { + gb->wy_triggered = true; + } + gb->cycles_for_line = 0; + GB_SLEEP(gb, display, 31, 2); + if (gb->current_line != LINES - 1) { + gb->mode_for_interrupt = 2; + } + + // Todo: unverified timing + gb->current_lcd_line++; + if (gb->current_lcd_line == LINES && GB_is_sgb(gb)) { + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); + } + + if (gb->icd_hreset_callback) { + gb->icd_hreset_callback(gb); + } + } + gb->wx166_glitch = false; + /* Lines 144 - 152 */ + for (; gb->current_line < VIRTUAL_LINES - 1; gb->current_line++) { + gb->ly_for_comparison = -1; + if (unlikely(gb->lcd_line_callback)) { + gb->lcd_line_callback(gb, gb->current_line); + } + GB_STAT_update(gb); + GB_SLEEP(gb, display, 26, 2); + gb->io_registers[GB_IO_LY] = gb->current_line; + if (gb->current_line == LINES && !gb->stat_interrupt_line && (gb->io_registers[GB_IO_STAT] & 0x20)) { + gb->io_registers[GB_IO_IF] |= 2; + } + GB_SLEEP(gb, display, 12, 2); + if (gb->delayed_glitch_hblank_interrupt) { + gb->delayed_glitch_hblank_interrupt = false; + gb->mode_for_interrupt = 0; + } + gb->ly_for_comparison = gb->current_line; + GB_STAT_update(gb); + GB_SLEEP(gb, display, 24, 1); + + if (gb->current_line == LINES) { + /* Entering VBlank state triggers the OAM interrupt */ + gb->io_registers[GB_IO_STAT] &= ~3; + gb->io_registers[GB_IO_STAT] |= 1; + gb->io_registers[GB_IO_IF] |= 1; + if (!gb->stat_interrupt_line && (gb->io_registers[GB_IO_STAT] & 0x20)) { + gb->io_registers[GB_IO_IF] |= 2; + } + gb->mode_for_interrupt = 1; + GB_STAT_update(gb); + + if (gb->frame_skip_state == GB_FRAMESKIP_LCD_TURNED_ON) { + if (GB_is_cgb(gb)) { + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); + gb->frame_skip_state = GB_FRAMESKIP_FIRST_FRAME_RENDERED; + } + else { + if (!GB_is_sgb(gb) || gb->current_lcd_line < LINES) { + gb->is_odd_frame ^= true; + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); + } + gb->frame_skip_state = GB_FRAMESKIP_FIRST_FRAME_RENDERED; + } + } + else { + if (!GB_is_sgb(gb) || gb->current_lcd_line < LINES) { + gb->is_odd_frame ^= true; + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); + } + } + } + + /* 3640 is just a few cycles less than 4 lines, no clue where the + AGB constant comes from (These are measured and confirmed) */ + gb->frame_repeat_countdown = LINES * LINE_LENGTH * 2 + (gb->model > GB_MODEL_CGB_E? 5982 : 3640); // 8MHz units + if (gb->display_cycles < gb->frame_repeat_countdown) { + gb->frame_repeat_countdown -= gb->display_cycles; + } + else { + gb->frame_repeat_countdown = 0; + } + + GB_SLEEP(gb, display, 13, LINE_LENGTH - 5); + } + + /* TODO: Verified on SGB2 and CGB-E. Actual interrupt timings not tested. */ + /* Lines 153 */ + gb->ly_for_comparison = -1; + GB_STAT_update(gb); + GB_SLEEP(gb, display, 19, 2); + gb->io_registers[GB_IO_LY] = 153; + GB_SLEEP(gb, display, 14, (gb->model > GB_MODEL_CGB_C)? 2: 4); + + if (gb->model <= GB_MODEL_CGB_C && !gb->cgb_double_speed) { + gb->io_registers[GB_IO_LY] = 0; + } + gb->ly_for_comparison = 153; + GB_STAT_update(gb); + GB_SLEEP(gb, display, 15, (gb->model > GB_MODEL_CGB_C)? 4: 2); + + gb->io_registers[GB_IO_LY] = 0; + gb->ly_for_comparison = (gb->model > GB_MODEL_CGB_C)? 153 : -1; + GB_STAT_update(gb); + GB_SLEEP(gb, display, 16, 4); + + gb->ly_for_comparison = 0; + GB_STAT_update(gb); + GB_SLEEP(gb, display, 29, 12); /* Writing to LYC during this period on a CGB has side effects */ + GB_SLEEP(gb, display, 17, LINE_LENGTH - 24); + + + gb->current_line = 0; + gb->wy_triggered = false; + + // TODO: not the correct timing + gb->current_lcd_line = 0; + if (gb->icd_vreset_callback) { + gb->icd_vreset_callback(gb); + } + } +} + +void GB_draw_tileset(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette_type, uint8_t palette_index) +{ + uint32_t none_palette[4]; + uint32_t *palette = NULL; + + switch (GB_is_cgb(gb)? palette_type : GB_PALETTE_NONE) { + default: + case GB_PALETTE_NONE: + none_palette[0] = gb->rgb_encode_callback(gb, 0xFF, 0xFF, 0xFF); + none_palette[1] = gb->rgb_encode_callback(gb, 0xAA, 0xAA, 0xAA); + none_palette[2] = gb->rgb_encode_callback(gb, 0x55, 0x55, 0x55); + none_palette[3] = gb->rgb_encode_callback(gb, 0, 0, 0 ); + palette = none_palette; + break; + case GB_PALETTE_BACKGROUND: + palette = gb->background_palettes_rgb + (4 * (palette_index & 7)); + break; + case GB_PALETTE_OAM: + palette = gb->object_palettes_rgb + (4 * (palette_index & 7)); + break; + } + + for (unsigned y = 0; y < 192; y++) { + for (unsigned x = 0; x < 256; x++) { + if (x >= 128 && !GB_is_cgb(gb)) { + *(dest++) = gb->background_palettes_rgb[0]; + continue; + } + uint16_t tile = (x % 128) / 8 + y / 8 * 16; + uint16_t tile_address = tile * 0x10 + (x >= 128? 0x2000 : 0); + uint8_t pixel = (((gb->vram[tile_address + (y & 7) * 2 ] >> ((~x)&7)) & 1 ) | + ((gb->vram[tile_address + (y & 7) * 2 + 1] >> ((~x)&7)) & 1) << 1); + + if (!gb->cgb_mode) { + if (palette_type == GB_PALETTE_BACKGROUND) { + pixel = ((gb->io_registers[GB_IO_BGP] >> (pixel << 1)) & 3); + } + else if (!gb->cgb_mode) { + if (palette_type == GB_PALETTE_OAM) { + pixel = ((gb->io_registers[palette_index == 0? GB_IO_OBP0 : GB_IO_OBP1] >> (pixel << 1)) & 3); + } + } + } + + + *(dest++) = palette[pixel]; + } + } +} + +void GB_draw_tilemap(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette_type, uint8_t palette_index, GB_map_type_t map_type, GB_tileset_type_t tileset_type) +{ + uint32_t none_palette[4]; + uint32_t *palette = NULL; + uint16_t map = 0x1800; + + switch (GB_is_cgb(gb)? palette_type : GB_PALETTE_NONE) { + case GB_PALETTE_NONE: + none_palette[0] = gb->rgb_encode_callback(gb, 0xFF, 0xFF, 0xFF); + none_palette[1] = gb->rgb_encode_callback(gb, 0xAA, 0xAA, 0xAA); + none_palette[2] = gb->rgb_encode_callback(gb, 0x55, 0x55, 0x55); + none_palette[3] = gb->rgb_encode_callback(gb, 0, 0, 0 ); + palette = none_palette; + break; + case GB_PALETTE_BACKGROUND: + palette = gb->background_palettes_rgb + (4 * (palette_index & 7)); + break; + case GB_PALETTE_OAM: + palette = gb->object_palettes_rgb + (4 * (palette_index & 7)); + break; + case GB_PALETTE_AUTO: + break; + } + + if (map_type == GB_MAP_9C00 || (map_type == GB_MAP_AUTO && gb->io_registers[GB_IO_LCDC] & 0x08)) { + map = 0x1C00; + } + + if (tileset_type == GB_TILESET_AUTO) { + tileset_type = (gb->io_registers[GB_IO_LCDC] & 0x10)? GB_TILESET_8800 : GB_TILESET_8000; + } + + for (unsigned y = 0; y < 256; y++) { + for (unsigned x = 0; x < 256; x++) { + uint8_t tile = gb->vram[map + x/8 + y/8 * 32]; + uint16_t tile_address; + uint8_t attributes = 0; + + if (tileset_type == GB_TILESET_8800) { + tile_address = tile * 0x10; + } + else { + tile_address = (int8_t) tile * 0x10 + 0x1000; + } + + if (gb->cgb_mode) { + attributes = gb->vram[map + x/8 + y/8 * 32 + 0x2000]; + } + + if (attributes & 0x8) { + tile_address += 0x2000; + } + + uint8_t pixel = (((gb->vram[tile_address + (((attributes & 0x40)? ~y : y) & 7) * 2 ] >> (((attributes & 0x20)? x : ~x)&7)) & 1 ) | + ((gb->vram[tile_address + (((attributes & 0x40)? ~y : y) & 7) * 2 + 1] >> (((attributes & 0x20)? x : ~x)&7)) & 1) << 1); + + if (!gb->cgb_mode && (palette_type == GB_PALETTE_BACKGROUND || palette_type == GB_PALETTE_AUTO)) { + pixel = ((gb->io_registers[GB_IO_BGP] >> (pixel << 1)) & 3); + } + + if (palette) { + *(dest++) = palette[pixel]; + } + else { + *(dest++) = gb->background_palettes_rgb[(attributes & 7) * 4 + pixel]; + } + } + } +} + +uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *object_height) +{ + uint8_t count = 0; + *object_height = (gb->io_registers[GB_IO_LCDC] & 4) ? 16:8; + uint8_t oam_to_dest_index[40] = {0,}; + for (signed y = 0; y < LINES; y++) { + object_t *object = (object_t *) &gb->oam; + uint8_t objects_in_line = 0; + bool obscured = false; + for (uint8_t i = 0; i < 40; i++, object++) { + signed object_y = object->y - 16; + // Is object not in this line? + if (object_y > y || object_y + *object_height <= y) continue; + if (++objects_in_line == 11) obscured = true; + + GB_oam_info_t *info = NULL; + if (!oam_to_dest_index[i]) { + info = dest + count; + oam_to_dest_index[i] = ++count; + info->x = object->x; + info->y = object->y; + info->tile = *object_height == 16? object->tile & 0xFE : object->tile; + info->flags = object->flags; + info->obscured_by_line_limit = false; + info->oam_addr = 0xFE00 + i * sizeof(*object); + } + else { + info = dest + oam_to_dest_index[i] - 1; + } + info->obscured_by_line_limit |= obscured; + } + } + + for (unsigned i = 0; i < count; i++) { + uint16_t vram_address = dest[i].tile * 0x10; + uint8_t flags = dest[i].flags; + uint8_t palette = gb->cgb_mode? (flags & 7) : ((flags & 0x10)? 1 : 0); + if (GB_is_cgb(gb) && (flags & 0x8)) { + vram_address += 0x2000; + } + + for (unsigned y = 0; y < *object_height; y++) { + unrolled for (unsigned x = 0; x < 8; x++) { + uint8_t color = (((gb->vram[vram_address ] >> ((~x)&7)) & 1 ) | + ((gb->vram[vram_address + 1] >> ((~x)&7)) & 1) << 1 ); + + if (!gb->cgb_mode) { + color = (gb->io_registers[palette? GB_IO_OBP1:GB_IO_OBP0] >> (color << 1)) & 3; + } + dest[i].image[((flags & 0x20)?7-x:x) + ((flags & 0x40)?*object_height - 1 -y:y) * 8] = gb->object_palettes_rgb[palette * 4 + color]; + } + vram_address += 2; + } + } + return count; +} + + +bool GB_is_odd_frame(GB_gameboy_t *gb) +{ + return gb->is_odd_frame; +} + +void GB_set_object_rendering_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->objects_disabled = disabled; +} + +void GB_set_background_rendering_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->background_disabled = disabled; +} + +bool GB_is_object_rendering_disabled(GB_gameboy_t *gb) +{ + return gb->objects_disabled; +} + +bool GB_is_background_rendering_disabled(GB_gameboy_t *gb) +{ + return gb->background_disabled; +} + diff --git a/thirdparty/SameBoy-old/Core/display.h b/thirdparty/SameBoy-old/Core/display.h new file mode 100644 index 000000000..38105bb3c --- /dev/null +++ b/thirdparty/SameBoy-old/Core/display.h @@ -0,0 +1,83 @@ +#ifndef display_h +#define display_h + +#include "gb.h" +#include +#include + +typedef enum { + GB_VBLANK_TYPE_NORMAL_FRAME, // An actual Vblank-triggered frame + GB_VBLANK_TYPE_LCD_OFF, // An artificial frame pushed while the LCD was off + GB_VBLANK_TYPE_ARTIFICIAL, // An artificial frame pushed for some other reason + GB_VBLANK_TYPE_REPEAT, // A frame that would not render on actual hardware, but the screen should retain the previous frame +} GB_vblank_type_t; + +#ifdef GB_INTERNAL +internal void GB_display_run(GB_gameboy_t *gb, unsigned cycles, bool force); +internal void GB_palette_changed(GB_gameboy_t *gb, bool background_palette, uint8_t index); +internal void GB_STAT_update(GB_gameboy_t *gb); +internal void GB_lcd_off(GB_gameboy_t *gb); +internal void GB_display_vblank(GB_gameboy_t *gb, GB_vblank_type_t type); +#define GB_display_sync(gb) GB_display_run(gb, 0, true) + +enum { + GB_OBJECT_PRIORITY_X, + GB_OBJECT_PRIORITY_INDEX, +}; + +#endif + +typedef enum { + GB_PALETTE_NONE, + GB_PALETTE_BACKGROUND, + GB_PALETTE_OAM, + GB_PALETTE_AUTO, +} GB_palette_type_t; + +typedef enum { + GB_MAP_AUTO, + GB_MAP_9800, + GB_MAP_9C00, +} GB_map_type_t; + +typedef enum { + GB_TILESET_AUTO, + GB_TILESET_8800, + GB_TILESET_8000, +} GB_tileset_type_t; + +typedef struct { + uint32_t image[128]; + uint8_t x, y, tile, flags; + uint16_t oam_addr; + bool obscured_by_line_limit; +} GB_oam_info_t; + +typedef enum { + GB_COLOR_CORRECTION_DISABLED, + GB_COLOR_CORRECTION_CORRECT_CURVES, + GB_COLOR_CORRECTION_MODERN_BALANCED, + GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST, + GB_COLOR_CORRECTION_REDUCE_CONTRAST, + GB_COLOR_CORRECTION_LOW_CONTRAST, + GB_COLOR_CORRECTION_MODERN_ACCURATE, +} GB_color_correction_mode_t; + +static const GB_color_correction_mode_t __attribute__((deprecated("Use GB_COLOR_CORRECTION_MODERN_BALANCED instead"))) GB_COLOR_CORRECTION_EMULATE_HARDWARE = GB_COLOR_CORRECTION_MODERN_BALANCED; +static const GB_color_correction_mode_t __attribute__((deprecated("Use GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST instead"))) GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS = GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST; + +void GB_draw_tileset(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette_type, uint8_t palette_index); +void GB_draw_tilemap(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette_type, uint8_t palette_index, GB_map_type_t map_type, GB_tileset_type_t tileset_type); +uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *object_height); +uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border); +void GB_set_color_correction_mode(GB_gameboy_t *gb, GB_color_correction_mode_t mode); +void GB_set_light_temperature(GB_gameboy_t *gb, double temperature); +bool GB_is_odd_frame(GB_gameboy_t *gb); + +void GB_set_object_rendering_disabled(GB_gameboy_t *gb, bool disabled); +void GB_set_background_rendering_disabled(GB_gameboy_t *gb, bool disabled); +bool GB_is_object_rendering_disabled(GB_gameboy_t *gb); +bool GB_is_background_rendering_disabled(GB_gameboy_t *gb); + + +#endif /* display_h */ diff --git a/thirdparty/SameBoy-old/Core/gb.c b/thirdparty/SameBoy-old/Core/gb.c new file mode 100644 index 000000000..923a97f8d --- /dev/null +++ b/thirdparty/SameBoy-old/Core/gb.c @@ -0,0 +1,1992 @@ +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#endif +#include "random.h" +#include "gb.h" + + +#ifdef GB_DISABLE_REWIND +#define GB_rewind_free(...) +#define GB_rewind_push(...) +#endif + + +void GB_attributed_logv(GB_gameboy_t *gb, GB_log_attributes attributes, const char *fmt, va_list args) +{ + char *string = NULL; + vasprintf(&string, fmt, args); + if (string) { + if (gb->log_callback) { + gb->log_callback(gb, string, attributes); + } + else { + /* Todo: Add ANSI escape sequences for attributed text */ + printf("%s", string); + } + } + free(string); +} + +void GB_attributed_log(GB_gameboy_t *gb, GB_log_attributes attributes, const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + GB_attributed_logv(gb, attributes, fmt, args); + va_end(args); +} + +void GB_log(GB_gameboy_t *gb, const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + GB_attributed_logv(gb, 0, fmt, args); + va_end(args); +} + +#ifndef GB_DISABLE_DEBUGGER +static char *default_input_callback(GB_gameboy_t *gb) +{ + char *expression = NULL; + size_t size = 0; + if (gb->debug_stopped) { + printf(">"); + } + + if (getline(&expression, &size, stdin) == -1) { + /* The user doesn't have STDIN or used ^D. We make sure the program keeps running. */ + GB_set_async_input_callback(gb, NULL); /* Disable async input */ + return strdup("c"); + } + + if (!expression) { + return strdup(""); + } + + size_t length = strlen(expression); + if (expression[length - 1] == '\n') { + expression[length - 1] = 0; + } + + if (expression[0] == '\x03') { + gb->debug_stopped = true; + free(expression); + return strdup(""); + } + return expression; +} + +static char *default_async_input_callback(GB_gameboy_t *gb) +{ +#ifndef _WIN32 + fd_set set; + FD_ZERO(&set); + FD_SET(STDIN_FILENO, &set); + struct timeval time = {0,}; + if (select(1, &set, NULL, NULL, &time) == 1) { + if (feof(stdin)) { + GB_set_async_input_callback(gb, NULL); /* Disable async input */ + return NULL; + } + return default_input_callback(gb); + } +#endif + return NULL; +} +#endif + +static void load_default_border(GB_gameboy_t *gb) +{ + if (gb->has_sgb_border) return; + + #define LOAD_BORDER() do { \ + memcpy(gb->borrowed_border.map, tilemap, sizeof(tilemap));\ + memcpy(gb->borrowed_border.palette, palette, sizeof(palette));\ + memcpy(gb->borrowed_border.tiles, tiles, sizeof(tiles));\ + } while (false); + +#ifdef GB_BIG_ENDIAN + for (unsigned i = 0; i < sizeof(gb->borrowed_border.map) / 2; i++) { + gb->borrowed_border.map[i] = LE16(gb->borrowed_border.map[i]); + } + for (unsigned i = 0; i < sizeof(gb->borrowed_border.palette) / 2; i++) { + gb->borrowed_border.palette[i] = LE16(gb->borrowed_border.palette[i]); + } +#endif + + if (gb->model > GB_MODEL_CGB_E) { + #include "graphics/agb_border.inc" + LOAD_BORDER(); + } + else if (gb->model == GB_MODEL_MGB) { + #include "graphics/mgb_border.inc" + LOAD_BORDER(); + if (gb->dmg_palette && + gb->dmg_palette->colors[4].b > gb->dmg_palette->colors[4].r) { + for (unsigned i = 0; i < 7; i++) { + gb->borrowed_border.map[13 + 24 * 32 + i] = i + 1; + gb->borrowed_border.map[13 + 25 * 32 + i] = i + 8; + } + } + } + else if (GB_is_cgb(gb)) { + #include "graphics/cgb_border.inc" + LOAD_BORDER(); + } + else { + #include "graphics/dmg_border.inc" + LOAD_BORDER(); + } +} + +void GB_init(GB_gameboy_t *gb, GB_model_t model) +{ + memset(gb, 0, sizeof(*gb)); + gb->model = model; + if (GB_is_cgb(gb)) { + gb->ram = malloc(gb->ram_size = 0x1000 * 8); + gb->vram = malloc(gb->vram_size = 0x2000 * 2); + } + else { + gb->ram = malloc(gb->ram_size = 0x2000); + gb->vram = malloc(gb->vram_size = 0x2000); + } + +#ifndef GB_DISABLE_DEBUGGER + gb->input_callback = default_input_callback; + gb->async_input_callback = default_async_input_callback; +#endif + gb->cartridge_type = &GB_cart_defs[0]; // Default cartridge type + gb->clock_multiplier = 1.0; + + if (model & GB_MODEL_NO_SFC_BIT) { + /* Disable time syncing. Timing should be done by the SFC emulator. */ + gb->turbo = true; + } + + GB_reset(gb); + load_default_border(gb); +} + +GB_model_t GB_get_model(GB_gameboy_t *gb) +{ + return gb->model; +} + +void GB_free(GB_gameboy_t *gb) +{ + gb->magic = 0; + if (gb->ram) { + free(gb->ram); + } + if (gb->vram) { + free(gb->vram); + } + if (gb->mbc_ram) { + free(gb->mbc_ram); + } + if (gb->rom) { + free(gb->rom); + } + if (gb->breakpoints) { + free(gb->breakpoints); + } + if (gb->sgb) { + free(gb->sgb); + } + if (gb->nontrivial_jump_state) { + free(gb->nontrivial_jump_state); + } + if (gb->undo_state) { + free(gb->undo_state); + } +#ifndef GB_DISABLE_DEBUGGER + GB_debugger_clear_symbols(gb); +#endif + GB_rewind_free(gb); +#ifndef GB_DISABLE_CHEATS + while (gb->cheats) { + GB_remove_cheat(gb, gb->cheats[0]); + } +#endif + GB_stop_audio_recording(gb); + memset(gb, 0, sizeof(*gb)); +} + +int GB_load_boot_rom(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + GB_log(gb, "Could not open boot ROM: %s.\n", strerror(errno)); + return errno; + } + fread(gb->boot_rom, sizeof(gb->boot_rom), 1, f); + fclose(f); + return 0; +} + +void GB_load_boot_rom_from_buffer(GB_gameboy_t *gb, const unsigned char *buffer, size_t size) +{ + if (size > sizeof(gb->boot_rom)) { + size = sizeof(gb->boot_rom); + } + memset(gb->boot_rom, 0xFF, sizeof(gb->boot_rom)); + memcpy(gb->boot_rom, buffer, size); +} + +void GB_borrow_sgb_border(GB_gameboy_t *gb) +{ + if (GB_is_sgb(gb)) return; + if (gb->border_mode != GB_BORDER_ALWAYS) return; + if (gb->tried_loading_sgb_border) return; + gb->tried_loading_sgb_border = true; + if (gb->rom && gb->rom[0x146] != 3) return; // Not an SGB game, nothing to borrow + if (!gb->boot_rom_load_callback) return; // Can't borrow a border without this callback + GB_gameboy_t sgb; + GB_init(&sgb, GB_MODEL_SGB); + sgb.cartridge_type = gb->cartridge_type; + sgb.rom = gb->rom; + sgb.rom_size = gb->rom_size; + sgb.turbo = true; + sgb.turbo_dont_skip = true; + // sgb.disable_rendering = true; + + /* Load the boot ROM using the existing gb object */ + typeof(gb->boot_rom) boot_rom_backup; + memcpy(boot_rom_backup, gb->boot_rom, sizeof(gb->boot_rom)); + gb->boot_rom_load_callback(gb, GB_BOOT_ROM_SGB); + memcpy(sgb.boot_rom, gb->boot_rom, sizeof(gb->boot_rom)); + memcpy(gb->boot_rom, boot_rom_backup, sizeof(gb->boot_rom)); + sgb.sgb->intro_animation = -1; + + for (unsigned i = 600; i--;) { + GB_run_frame(&sgb); + if (sgb.sgb->border_animation) { + gb->has_sgb_border = true; + memcpy(&gb->borrowed_border, &sgb.sgb->pending_border, sizeof(gb->borrowed_border)); + gb->borrowed_border.palette[0] = sgb.sgb->effective_palettes[0]; + break; + } + } + + sgb.rom = NULL; + sgb.rom_size = 0; + GB_free(&sgb); +} + +int GB_load_rom(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + GB_log(gb, "Could not open ROM: %s.\n", strerror(errno)); + return errno; + } + fseek(f, 0, SEEK_END); + gb->rom_size = (ftell(f) + 0x3FFF) & ~0x3FFF; /* Round to bank */ + /* And then round to a power of two */ + while (gb->rom_size & (gb->rom_size - 1)) { + /* I promise this works. */ + gb->rom_size |= gb->rom_size >> 1; + gb->rom_size++; + } + if (gb->rom_size < 0x8000) { + gb->rom_size = 0x8000; + } + fseek(f, 0, SEEK_SET); + if (gb->rom) { + free(gb->rom); + } + gb->rom = malloc(gb->rom_size); + memset(gb->rom, 0xFF, gb->rom_size); /* Pad with 0xFFs */ + fread(gb->rom, 1, gb->rom_size, f); + fclose(f); + GB_configure_cart(gb); + gb->tried_loading_sgb_border = false; + gb->has_sgb_border = false; + load_default_border(gb); + return 0; +} + +#define GBS_ENTRY 0x61 +#define GBS_ENTRY_SIZE 13 + +static void generate_gbs_entry(GB_gameboy_t *gb, uint8_t *data) +{ + memcpy(data, (uint8_t[]) { + 0xCD, // Call $XXXX + LE16(gb->gbs_header.init_address), + LE16(gb->gbs_header.init_address) >> 8, + 0x76, // HALT + 0x00, // NOP + 0xAF, // XOR a + 0xE0, // LDH [$FFXX], a + GB_IO_IF, + 0xCD, // Call $XXXX + LE16(gb->gbs_header.play_address), + LE16(gb->gbs_header.play_address) >> 8, + 0x18, // JR pc ± $XX + -10 // To HALT + }, GBS_ENTRY_SIZE); +} + +void GB_gbs_switch_track(GB_gameboy_t *gb, uint8_t track) +{ + GB_reset(gb); + GB_write_memory(gb, 0xFF00 + GB_IO_LCDC, 0x80); + GB_write_memory(gb, 0xFF00 + GB_IO_TAC, gb->gbs_header.TAC); + GB_write_memory(gb, 0xFF00 + GB_IO_TMA, gb->gbs_header.TMA); + GB_write_memory(gb, 0xFF00 + GB_IO_NR52, 0x80); + GB_write_memory(gb, 0xFF00 + GB_IO_NR51, 0xFF); + GB_write_memory(gb, 0xFF00 + GB_IO_NR50, 0x77); + memset(gb->ram, 0, gb->ram_size); + memset(gb->hram, 0, sizeof(gb->hram)); + memset(gb->oam, 0, sizeof(gb->oam)); + if (gb->gbs_header.TAC || gb->gbs_header.TMA) { + GB_write_memory(gb, 0xFFFF, 0x04); + } + else { + GB_write_memory(gb, 0xFFFF, 0x01); + } + if (gb->gbs_header.TAC & 0x80) { + gb->cgb_double_speed = true; // Might mean double speed mode on a DMG + } + if (gb->gbs_header.load_address) { + gb->sp = LE16(gb->gbs_header.sp); + gb->pc = GBS_ENTRY; + } + else { + gb->pc = gb->sp = LE16(gb->gbs_header.sp - GBS_ENTRY_SIZE); + uint8_t entry[GBS_ENTRY_SIZE]; + generate_gbs_entry(gb, entry); + for (unsigned i = 0; i < sizeof(entry); i++) { + GB_write_memory(gb, gb->pc + i, entry[i]); + } + } + + gb->boot_rom_finished = true; + gb->a = track; + if (gb->sgb) { + gb->sgb->intro_animation = GB_SGB_INTRO_ANIMATION_LENGTH; + gb->sgb->disable_commands = true; + } + if (gb->gbs_header.TAC & 0x40) { + gb->interrupt_enable = true; + } +} + +int GB_load_gbs_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size, GB_gbs_info_t *info) +{ + if (size < sizeof(gb->gbs_header)) { + GB_log(gb, "Not a valid GBS file.\n"); + return -1; + } + + memcpy(&gb->gbs_header, buffer, sizeof(gb->gbs_header)); + + if (gb->gbs_header.magic != BE32('GBS\x01') || + ((LE16(gb->gbs_header.load_address) < GBS_ENTRY + GBS_ENTRY_SIZE || + LE16(gb->gbs_header.load_address) >= 0x8000) && + LE16(gb->gbs_header.load_address) != 0)) { + GB_log(gb, "Not a valid GBS file.\n"); + return -1; + } + + size_t data_size = size - sizeof(gb->gbs_header); + + gb->rom_size = (data_size + LE16(gb->gbs_header.load_address) + 0x3FFF) & ~0x3FFF; /* Round to bank */ + /* And then round to a power of two */ + while (gb->rom_size & (gb->rom_size - 1)) { + /* I promise this works. */ + gb->rom_size |= gb->rom_size >> 1; + gb->rom_size++; + } + + if (gb->rom_size < 0x8000) { + gb->rom_size = 0x8000; + } + + if (gb->rom) { + free(gb->rom); + } + + gb->rom = malloc(gb->rom_size); + memset(gb->rom, 0xFF, gb->rom_size); /* Pad with 0xFFs */ + memcpy(gb->rom + LE16(gb->gbs_header.load_address), buffer + sizeof(gb->gbs_header), data_size); + + gb->cartridge_type = &GB_cart_defs[0x11]; + if (gb->mbc_ram) { + free(gb->mbc_ram); + gb->mbc_ram = NULL; + gb->mbc_ram_size = 0; + } + + if (gb->cartridge_type->has_ram) { + gb->mbc_ram_size = 0x2000; + gb->mbc_ram = malloc(gb->mbc_ram_size); + memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); + } + + bool has_interrupts = gb->gbs_header.TAC & 0x40; + + if (gb->gbs_header.load_address) { + // Generate interrupt handlers + for (unsigned i = 0; i <= (has_interrupts? 0x50 : 0x38); i += 8) { + gb->rom[i] = 0xC3; // jp $XXXX + gb->rom[i + 1] = (LE16(gb->gbs_header.load_address) + i); + gb->rom[i + 2] = (LE16(gb->gbs_header.load_address) + i) >> 8; + } + for (unsigned i = has_interrupts? 0x58 : 0x40; i <= 0x60; i += 8) { + gb->rom[i] = 0xC9; // ret + } + + // Generate entry + generate_gbs_entry(gb, gb->rom + GBS_ENTRY); + } + + + GB_gbs_switch_track(gb, gb->gbs_header.first_track - 1); + if (info) { + memset(info, 0, sizeof(*info)); + info->first_track = gb->gbs_header.first_track - 1; + info->track_count = gb->gbs_header.track_count; + memcpy(info->title, gb->gbs_header.title, sizeof(gb->gbs_header.title)); + memcpy(info->author, gb->gbs_header.author, sizeof(gb->gbs_header.author)); + memcpy(info->copyright, gb->gbs_header.copyright, sizeof(gb->gbs_header.copyright)); + } + + gb->tried_loading_sgb_border = true; // Don't even attempt on GBS files + gb->has_sgb_border = false; + load_default_border(gb); + return 0; +} + +int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + GB_log(gb, "Could not open GBS: %s.\n", strerror(errno)); + return errno; + } + fseek(f, 0, SEEK_END); + size_t file_size = MIN(ftell(f), sizeof(GB_gbs_header_t) + 0x4000 * 0x100); // Cap with the maximum MBC3 ROM size + GBS header + fseek(f, 0, SEEK_SET); + uint8_t *file_data = malloc(file_size); + fread(file_data, 1, file_size, f); + fclose(f); + + int r = GB_load_gbs_from_buffer(gb, file_data, file_size, info); + free(file_data); + return r; +} + +int GB_load_isx(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + GB_log(gb, "Could not open ISX file: %s.\n", strerror(errno)); + return errno; + } + char magic[4]; +#define READ(x) if (fread(&x, sizeof(x), 1, f) != 1) goto error + fread(magic, 1, sizeof(magic), f); + + + bool extended = *(uint32_t *)&magic == BE32('ISX '); + + fseek(f, extended? 0x20 : 0, SEEK_SET); + + + uint8_t *old_rom = gb->rom; + uint32_t old_size = gb->rom_size; + gb->rom = NULL; + gb->rom_size = 0; + + while (true) { + uint8_t record_type = 0; + if (fread(&record_type, sizeof(record_type), 1, f) != 1) break; + switch (record_type) { + case 0x01: { // Binary + uint16_t bank; + uint16_t address; + uint16_t length; + uint8_t byte; + READ(byte); + bank = byte; + if (byte >= 0x80) { + READ(byte); + bank |= byte << 8; + } + + READ(address); + address = LE16(address); + address &= 0x3FFF; + + READ(length); + length = LE16(length); + + size_t needed_size = bank * 0x4000 + address + length; + if (needed_size > 1024 * 1024 * 32) goto error; + + if (gb->rom_size < needed_size) { + gb->rom = realloc(gb->rom, needed_size); + memset(gb->rom + gb->rom_size, 0, needed_size - gb->rom_size); + gb->rom_size = needed_size; + } + + if (fread(gb->rom + (bank * 0x4000 + address), length, 1, f) != 1) goto error; + + break; + } + + case 0x11: { // Extended Binary + uint32_t address; + uint32_t length; + + READ(address); + address = LE32(address); + + READ(length); + length = LE32(length); + size_t needed_size = address + length; + if (needed_size > 1024 * 1024 * 32) goto error; + + if (gb->rom_size < needed_size) { + gb->rom = realloc(gb->rom, needed_size); + memset(gb->rom + gb->rom_size, 0, needed_size - gb->rom_size); + gb->rom_size = needed_size; + } + + if (fread(gb->rom + address, length, 1, f) != 1) goto error; + + break; + } + + case 0x04: { // Symbol + uint16_t count; + uint8_t length; + char name[257]; + uint8_t flag; + uint16_t bank; + uint16_t address; + uint8_t byte; + READ(count); + count = LE16(count); + while (count--) { + READ(length); + if (fread(name, length, 1, f) != 1) goto error; + name[length] = 0; + READ(flag); // unused + + READ(byte); + bank = byte; + if (byte >= 0x80) { + READ(byte); + bank |= byte << 8; + } + + READ(address); + address = LE16(address); + GB_debugger_add_symbol(gb, bank, address, name); + } + break; + } + + case 0x14: { // Extended Binary + uint16_t count; + uint8_t length; + char name[257]; + uint8_t flag; + uint32_t address; + READ(count); + count = LE16(count); + while (count--) { + READ(length); + if (fread(name, length + 1, 1, f) != 1) goto error; + name[length] = 0; + READ(flag); // unused + + READ(address); + address = LE32(address); + // TODO: How to convert 32-bit addresses to Bank:Address? Needs to tell RAM and ROM apart + } + break; + } + + default: + goto done; + } + } +done:; +#undef READ + if (gb->rom_size == 0) goto error; + + size_t needed_size = (gb->rom_size + 0x3FFF) & ~0x3FFF; /* Round to bank */ + + /* And then round to a power of two */ + while (needed_size & (needed_size - 1)) { + /* I promise this works. */ + needed_size |= needed_size >> 1; + needed_size++; + } + + if (needed_size < 0x8000) { + needed_size = 0x8000; + } + + if (gb->rom_size < needed_size) { + gb->rom = realloc(gb->rom, needed_size); + memset(gb->rom + gb->rom_size, 0, needed_size - gb->rom_size); + gb->rom_size = needed_size; + } + + GB_configure_cart(gb); + + // Fix a common wrong MBC error + if (gb->rom[0x147] == 3) { // MBC1 + RAM + Battery + bool needs_fix = false; + if (gb->rom_size >= 0x21 * 0x4000) { + for (unsigned i = 0x20 * 0x4000; i < 0x21 * 0x4000; i++) { + if (gb->rom[i]) { + needs_fix = true; + break; + } + } + } + if (!needs_fix && gb->rom_size >= 0x41 * 0x4000) { + for (unsigned i = 0x40 * 0x4000; i < 0x41 * 0x4000; i++) { + if (gb->rom[i]) { + needs_fix = true; + break; + } + } + } + if (!needs_fix && gb->rom_size >= 0x61 * 0x4000) { + for (unsigned i = 0x60 * 0x4000; i < 0x61 * 0x4000; i++) { + if (gb->rom[i]) { + needs_fix = true; + break; + } + } + } + if (needs_fix) { + gb->rom[0x147] = 0x10; // MBC3 + RTC + RAM + Battery + GB_configure_cart(gb); + gb->rom[0x147] = 0x3; + GB_log(gb, "ROM claims to use MBC1 but appears to require MBC3 or 5, assuming MBC3.\n"); + } + } + + if (old_rom) { + free(old_rom); + } + + return 0; +error: + GB_log(gb, "Invalid or unsupported ISX file.\n"); + if (gb->rom) { + free(gb->rom); + gb->rom = old_rom; + gb->rom_size = old_size; + } + fclose(f); + gb->tried_loading_sgb_border = false; + gb->has_sgb_border = false; + load_default_border(gb); + return -1; +} + +void GB_load_rom_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size) +{ + gb->rom_size = (size + 0x3FFF) & ~0x3FFF; + while (gb->rom_size & (gb->rom_size - 1)) { + gb->rom_size |= gb->rom_size >> 1; + gb->rom_size++; + } + if (gb->rom_size == 0) { + gb->rom_size = 0x8000; + } + if (gb->rom) { + free(gb->rom); + } + gb->rom = malloc(gb->rom_size); + memset(gb->rom, 0xFF, gb->rom_size); + memcpy(gb->rom, buffer, size); + GB_configure_cart(gb); + gb->tried_loading_sgb_border = false; + gb->has_sgb_border = false; + load_default_border(gb); +} + +typedef struct { + uint8_t seconds; + uint8_t padding1[3]; + uint8_t minutes; + uint8_t padding2[3]; + uint8_t hours; + uint8_t padding3[3]; + uint8_t days; + uint8_t padding4[3]; + uint8_t high; + uint8_t padding5[3]; +} vba_rtc_time_t; + +typedef struct __attribute__((packed)) { + uint32_t magic; + uint16_t version; + uint8_t mr4; + uint8_t reserved; + uint64_t last_rtc_second; + uint8_t rtc_data[4]; +} tpp1_rtc_save_t; + +typedef union { + struct __attribute__((packed)) { + GB_rtc_time_t rtc_real; + time_t last_rtc_second; /* Platform specific endianess and size */ + } sameboy_legacy; + struct { + /* Used by VBA versions with 32-bit timestamp*/ + vba_rtc_time_t rtc_real, rtc_latched; + uint32_t last_rtc_second; /* Always little endian */ + } vba32; + struct { + /* Used by BGB and VBA versions with 64-bit timestamp*/ + vba_rtc_time_t rtc_real, rtc_latched; + uint64_t last_rtc_second; /* Always little endian */ + } vba64; +} rtc_save_t; + +static void fill_tpp1_save_data(GB_gameboy_t *gb, tpp1_rtc_save_t *data) +{ + data->magic = BE32('TPP1'); + data->version = BE16(0x100); + data->mr4 = gb->tpp1_mr4; + data->reserved = 0; + data->last_rtc_second = LE64(time(NULL)); + unrolled for (unsigned i = 4; i--;) { + data->rtc_data[i] = gb->rtc_real.data[i ^ 3]; + } +} + +int GB_save_battery_size(GB_gameboy_t *gb) +{ + if (!gb->cartridge_type->has_battery) return 0; // Nothing to save. + if (gb->cartridge_type->mbc_type == GB_TPP1 && !(gb->rom[0x153] & 8)) return 0; // Nothing to save. + + if (gb->mbc_ram_size == 0 && !gb->cartridge_type->has_rtc) return 0; /* Claims to have battery, but has no RAM or RTC */ + + if (gb->cartridge_type->mbc_type == GB_HUC3) { + return gb->mbc_ram_size + sizeof(GB_huc3_rtc_time_t); + } + + if (gb->cartridge_type->mbc_type == GB_TPP1) { + return gb->mbc_ram_size + sizeof(tpp1_rtc_save_t); + } + + rtc_save_t rtc_save_size; + return gb->mbc_ram_size + (gb->cartridge_type->has_rtc ? sizeof(rtc_save_size.vba64) : 0); +} + +int GB_save_battery_to_buffer(GB_gameboy_t *gb, uint8_t *buffer, size_t size) +{ + if (!gb->cartridge_type->has_battery) return 0; // Nothing to save. + if (gb->cartridge_type->mbc_type == GB_TPP1 && !(gb->rom[0x153] & 8)) return 0; // Nothing to save. + if (gb->mbc_ram_size == 0 && !gb->cartridge_type->has_rtc) return 0; /* Claims to have battery, but has no RAM or RTC */ + + if (size < GB_save_battery_size(gb)) return EIO; + + memcpy(buffer, gb->mbc_ram, gb->mbc_ram_size); + + if (gb->cartridge_type->mbc_type == GB_TPP1) { + buffer += gb->mbc_ram_size; + tpp1_rtc_save_t rtc_save; + fill_tpp1_save_data(gb, &rtc_save); + memcpy(buffer, &rtc_save, sizeof(rtc_save)); + } + else if (gb->cartridge_type->mbc_type == GB_HUC3) { + buffer += gb->mbc_ram_size; + + GB_huc3_rtc_time_t rtc_save = { + LE64(gb->last_rtc_second), + LE16(gb->huc3.minutes), + LE16(gb->huc3.days), + LE16(gb->huc3.alarm_minutes), + LE16(gb->huc3.alarm_days), + gb->huc3.alarm_enabled, + }; + memcpy(buffer, &rtc_save, sizeof(rtc_save)); + } + else if (gb->cartridge_type->has_rtc) { + rtc_save_t rtc_save = {{{{0,}},},}; + rtc_save.vba64.rtc_real.seconds = gb->rtc_real.seconds; + rtc_save.vba64.rtc_real.minutes = gb->rtc_real.minutes; + rtc_save.vba64.rtc_real.hours = gb->rtc_real.hours; + rtc_save.vba64.rtc_real.days = gb->rtc_real.days; + rtc_save.vba64.rtc_real.high = gb->rtc_real.high; + rtc_save.vba64.rtc_latched.seconds = gb->rtc_latched.seconds; + rtc_save.vba64.rtc_latched.minutes = gb->rtc_latched.minutes; + rtc_save.vba64.rtc_latched.hours = gb->rtc_latched.hours; + rtc_save.vba64.rtc_latched.days = gb->rtc_latched.days; + rtc_save.vba64.rtc_latched.high = gb->rtc_latched.high; + rtc_save.vba64.last_rtc_second = LE64(time(NULL)); + memcpy(buffer + gb->mbc_ram_size, &rtc_save.vba64, sizeof(rtc_save.vba64)); + } + + errno = 0; + return errno; +} + +int GB_save_battery(GB_gameboy_t *gb, const char *path) +{ + if (!gb->cartridge_type->has_battery) return 0; // Nothing to save. + if (gb->cartridge_type->mbc_type == GB_TPP1 && !(gb->rom[0x153] & 8)) return 0; // Nothing to save. + if (gb->mbc_ram_size == 0 && !gb->cartridge_type->has_rtc) return 0; /* Claims to have battery, but has no RAM or RTC */ + FILE *f = fopen(path, "wb"); + if (!f) { + GB_log(gb, "Could not open battery save: %s.\n", strerror(errno)); + return errno; + } + + if (fwrite(gb->mbc_ram, 1, gb->mbc_ram_size, f) != gb->mbc_ram_size) { + fclose(f); + return EIO; + } + if (gb->cartridge_type->mbc_type == GB_TPP1) { + tpp1_rtc_save_t rtc_save; + fill_tpp1_save_data(gb, &rtc_save); + + if (fwrite(&rtc_save, sizeof(rtc_save), 1, f) != 1) { + fclose(f); + return EIO; + } + } + else if (gb->cartridge_type->mbc_type == GB_HUC3) { + GB_huc3_rtc_time_t rtc_save = { + LE64(gb->last_rtc_second), + LE16(gb->huc3.minutes), + LE16(gb->huc3.days), + LE16(gb->huc3.alarm_minutes), + LE16(gb->huc3.alarm_days), + gb->huc3.alarm_enabled, + }; + + if (fwrite(&rtc_save, sizeof(rtc_save), 1, f) != 1) { + fclose(f); + return EIO; + } + } + else if (gb->cartridge_type->has_rtc) { + rtc_save_t rtc_save = {{{{0,}},},}; + rtc_save.vba64.rtc_real.seconds = gb->rtc_real.seconds; + rtc_save.vba64.rtc_real.minutes = gb->rtc_real.minutes; + rtc_save.vba64.rtc_real.hours = gb->rtc_real.hours; + rtc_save.vba64.rtc_real.days = gb->rtc_real.days; + rtc_save.vba64.rtc_real.high = gb->rtc_real.high; + rtc_save.vba64.rtc_latched.seconds = gb->rtc_latched.seconds; + rtc_save.vba64.rtc_latched.minutes = gb->rtc_latched.minutes; + rtc_save.vba64.rtc_latched.hours = gb->rtc_latched.hours; + rtc_save.vba64.rtc_latched.days = gb->rtc_latched.days; + rtc_save.vba64.rtc_latched.high = gb->rtc_latched.high; + rtc_save.vba64.last_rtc_second = LE64(time(NULL)); + if (fwrite(&rtc_save.vba64, 1, sizeof(rtc_save.vba64), f) != sizeof(rtc_save.vba64)) { + fclose(f); + return EIO; + } + + } + + errno = 0; + fclose(f); + return errno; +} + +static void load_tpp1_save_data(GB_gameboy_t *gb, const tpp1_rtc_save_t *data) +{ + gb->last_rtc_second = LE64(data->last_rtc_second); + unrolled for (unsigned i = 4; i--;) { + gb->rtc_real.data[i ^ 3] = data->rtc_data[i]; + } +} + +void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size) +{ + memcpy(gb->mbc_ram, buffer, MIN(gb->mbc_ram_size, size)); + if (size <= gb->mbc_ram_size) { + goto reset_rtc; + } + + if (gb->cartridge_type->mbc_type == GB_TPP1) { + tpp1_rtc_save_t rtc_save; + if (size - gb->mbc_ram_size < sizeof(rtc_save)) { + goto reset_rtc; + } + memcpy(&rtc_save, buffer + gb->mbc_ram_size, sizeof(rtc_save)); + + load_tpp1_save_data(gb, &rtc_save); + + if (gb->last_rtc_second > time(NULL)) { + /* We must reset RTC here, or it will not advance. */ + goto reset_rtc; + } + return; + } + + if (gb->cartridge_type->mbc_type == GB_HUC3) { + GB_huc3_rtc_time_t rtc_save; + if (size - gb->mbc_ram_size < sizeof(rtc_save)) { + goto reset_rtc; + } + memcpy(&rtc_save, buffer + gb->mbc_ram_size, sizeof(rtc_save)); + gb->last_rtc_second = LE64(rtc_save.last_rtc_second); + gb->huc3.minutes = LE16(rtc_save.minutes); + gb->huc3.days = LE16(rtc_save.days); + gb->huc3.alarm_minutes = LE16(rtc_save.alarm_minutes); + gb->huc3.alarm_days = LE16(rtc_save.alarm_days); + gb->huc3.alarm_enabled = rtc_save.alarm_enabled; + if (gb->last_rtc_second > time(NULL)) { + /* We must reset RTC here, or it will not advance. */ + goto reset_rtc; + } + return; + } + + rtc_save_t rtc_save; + memcpy(&rtc_save, buffer + gb->mbc_ram_size, MIN(sizeof(rtc_save), size)); + switch (size - gb->mbc_ram_size) { + case sizeof(rtc_save.sameboy_legacy): + memcpy(&gb->rtc_real, &rtc_save.sameboy_legacy.rtc_real, sizeof(gb->rtc_real)); + memcpy(&gb->rtc_latched, &rtc_save.sameboy_legacy.rtc_real, sizeof(gb->rtc_real)); + gb->last_rtc_second = rtc_save.sameboy_legacy.last_rtc_second; + break; + + case sizeof(rtc_save.vba32): + gb->rtc_real.seconds = rtc_save.vba32.rtc_real.seconds; + gb->rtc_real.minutes = rtc_save.vba32.rtc_real.minutes; + gb->rtc_real.hours = rtc_save.vba32.rtc_real.hours; + gb->rtc_real.days = rtc_save.vba32.rtc_real.days; + gb->rtc_real.high = rtc_save.vba32.rtc_real.high; + gb->rtc_latched.seconds = rtc_save.vba32.rtc_latched.seconds; + gb->rtc_latched.minutes = rtc_save.vba32.rtc_latched.minutes; + gb->rtc_latched.hours = rtc_save.vba32.rtc_latched.hours; + gb->rtc_latched.days = rtc_save.vba32.rtc_latched.days; + gb->rtc_latched.high = rtc_save.vba32.rtc_latched.high; + gb->last_rtc_second = LE32(rtc_save.vba32.last_rtc_second); + break; + + case sizeof(rtc_save.vba64): + gb->rtc_real.seconds = rtc_save.vba64.rtc_real.seconds; + gb->rtc_real.minutes = rtc_save.vba64.rtc_real.minutes; + gb->rtc_real.hours = rtc_save.vba64.rtc_real.hours; + gb->rtc_real.days = rtc_save.vba64.rtc_real.days; + gb->rtc_real.high = rtc_save.vba64.rtc_real.high; + gb->rtc_latched.seconds = rtc_save.vba64.rtc_latched.seconds; + gb->rtc_latched.minutes = rtc_save.vba64.rtc_latched.minutes; + gb->rtc_latched.hours = rtc_save.vba64.rtc_latched.hours; + gb->rtc_latched.days = rtc_save.vba64.rtc_latched.days; + gb->rtc_latched.high = rtc_save.vba64.rtc_latched.high; + gb->last_rtc_second = LE64(rtc_save.vba64.last_rtc_second); + break; + + default: + goto reset_rtc; + } + if (gb->last_rtc_second > time(NULL)) { + /* We must reset RTC here, or it will not advance. */ + goto reset_rtc; + } + + if (gb->last_rtc_second < 852076800) { /* 1/1/97. There weren't any RTC games that time, + so if the value we read is lower it means it wasn't + really RTC data. */ + goto reset_rtc; + } + goto exit; +reset_rtc: + gb->last_rtc_second = time(NULL); + gb->rtc_real.high |= 0x80; /* This gives the game a hint that the clock should be reset. */ + if (gb->cartridge_type->mbc_type == GB_HUC3) { + gb->huc3.days = 0xFFFF; + gb->huc3.minutes = 0xFFF; + gb->huc3.alarm_enabled = false; + } +exit: + return; +} + +/* Loading will silently stop if the format is incomplete */ +void GB_load_battery(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + return; + } + + if (fread(gb->mbc_ram, 1, gb->mbc_ram_size, f) != gb->mbc_ram_size) { + goto reset_rtc; + } + + if (gb->cartridge_type->mbc_type == GB_TPP1) { + tpp1_rtc_save_t rtc_save; + if (fread(&rtc_save, sizeof(rtc_save), 1, f) != 1) { + goto reset_rtc; + } + + load_tpp1_save_data(gb, &rtc_save); + + if (gb->last_rtc_second > time(NULL)) { + /* We must reset RTC here, or it will not advance. */ + goto reset_rtc; + } + return; + } + + if (gb->cartridge_type->mbc_type == GB_HUC3) { + GB_huc3_rtc_time_t rtc_save; + if (fread(&rtc_save, sizeof(rtc_save), 1, f) != 1) { + goto reset_rtc; + } + gb->last_rtc_second = LE64(rtc_save.last_rtc_second); + gb->huc3.minutes = LE16(rtc_save.minutes); + gb->huc3.days = LE16(rtc_save.days); + gb->huc3.alarm_minutes = LE16(rtc_save.alarm_minutes); + gb->huc3.alarm_days = LE16(rtc_save.alarm_days); + gb->huc3.alarm_enabled = rtc_save.alarm_enabled; + + if (gb->last_rtc_second > time(NULL)) { + /* We must reset RTC here, or it will not advance. */ + goto reset_rtc; + } + return; + } + + rtc_save_t rtc_save; + switch (fread(&rtc_save, 1, sizeof(rtc_save), f)) { + case sizeof(rtc_save.sameboy_legacy): + memcpy(&gb->rtc_real, &rtc_save.sameboy_legacy.rtc_real, sizeof(gb->rtc_real)); + memcpy(&gb->rtc_latched, &rtc_save.sameboy_legacy.rtc_real, sizeof(gb->rtc_real)); + gb->last_rtc_second = rtc_save.sameboy_legacy.last_rtc_second; + break; + + case sizeof(rtc_save.vba32): + gb->rtc_real.seconds = rtc_save.vba32.rtc_real.seconds; + gb->rtc_real.minutes = rtc_save.vba32.rtc_real.minutes; + gb->rtc_real.hours = rtc_save.vba32.rtc_real.hours; + gb->rtc_real.days = rtc_save.vba32.rtc_real.days; + gb->rtc_real.high = rtc_save.vba32.rtc_real.high; + gb->rtc_latched.seconds = rtc_save.vba32.rtc_latched.seconds; + gb->rtc_latched.minutes = rtc_save.vba32.rtc_latched.minutes; + gb->rtc_latched.hours = rtc_save.vba32.rtc_latched.hours; + gb->rtc_latched.days = rtc_save.vba32.rtc_latched.days; + gb->rtc_latched.high = rtc_save.vba32.rtc_latched.high; + gb->last_rtc_second = LE32(rtc_save.vba32.last_rtc_second); + break; + + case sizeof(rtc_save.vba64): + gb->rtc_real.seconds = rtc_save.vba64.rtc_real.seconds; + gb->rtc_real.minutes = rtc_save.vba64.rtc_real.minutes; + gb->rtc_real.hours = rtc_save.vba64.rtc_real.hours; + gb->rtc_real.days = rtc_save.vba64.rtc_real.days; + gb->rtc_real.high = rtc_save.vba64.rtc_real.high; + gb->rtc_latched.seconds = rtc_save.vba64.rtc_latched.seconds; + gb->rtc_latched.minutes = rtc_save.vba64.rtc_latched.minutes; + gb->rtc_latched.hours = rtc_save.vba64.rtc_latched.hours; + gb->rtc_latched.days = rtc_save.vba64.rtc_latched.days; + gb->rtc_latched.high = rtc_save.vba64.rtc_latched.high; + gb->last_rtc_second = LE64(rtc_save.vba64.last_rtc_second); + break; + + default: + goto reset_rtc; + } + if (gb->last_rtc_second > time(NULL)) { + /* We must reset RTC here, or it will not advance. */ + goto reset_rtc; + } + + if (gb->last_rtc_second < 852076800) { /* 1/1/97. There weren't any RTC games that time, + so if the value we read is lower it means it wasn't + really RTC data. */ + goto reset_rtc; + } + goto exit; +reset_rtc: + gb->last_rtc_second = time(NULL); + gb->rtc_real.high |= 0x80; /* This gives the game a hint that the clock should be reset. */ + if (gb->cartridge_type->mbc_type == GB_HUC3) { + gb->huc3.days = 0xFFFF; + gb->huc3.minutes = 0xFFF; + gb->huc3.alarm_enabled = false; + } +exit: + fclose(f); + return; +} + +unsigned GB_run(GB_gameboy_t *gb) +{ + gb->vblank_just_occured = false; + + if (gb->sgb && gb->sgb->intro_animation < 96) { + /* On the SGB, the GB is halted after finishing the boot ROM. + Then, after the boot animation is almost done, it's reset. + Since the SGB HLE does not perform any header validity checks, + we just halt the CPU (with hacky code) until the correct time. + This ensures the Nintendo logo doesn't flash on screen, and + the game does "run in background" while the animation is playing. */ + GB_display_run(gb, 228, true); + gb->cycles_since_last_sync += 228; + return 228; + } + + GB_debugger_run(gb); + gb->cycles_since_run = 0; + GB_cpu_run(gb); + if (gb->vblank_just_occured) { + GB_debugger_handle_async_commands(gb); + GB_rewind_push(gb); + } + if (!(gb->io_registers[GB_IO_IF] & 0x10) && (gb->io_registers[GB_IO_JOYP] & 0x30) != 0x30) { + gb->joyp_accessed = true; + } + return gb->cycles_since_run; +} + +uint64_t GB_run_frame(GB_gameboy_t *gb) +{ + /* Configure turbo temporarily, the user wants to handle FPS capping manually. */ + bool old_turbo = gb->turbo; + bool old_dont_skip = gb->turbo_dont_skip; + gb->turbo = true; + gb->turbo_dont_skip = true; + + gb->cycles_since_last_sync = 0; + while (true) { + GB_run(gb); + if (gb->vblank_just_occured) { + break; + } + } + gb->turbo = old_turbo; + gb->turbo_dont_skip = old_dont_skip; + return gb->cycles_since_last_sync * 1000000000LL / 2 / GB_get_clock_rate(gb); /* / 2 because we use 8MHz units */ +} + +void GB_set_pixels_output(GB_gameboy_t *gb, uint32_t *output) +{ + gb->screen = output; +} + +uint32_t *GB_get_pixels_output(GB_gameboy_t *gb) +{ + return gb->screen; +} + +void GB_set_vblank_callback(GB_gameboy_t *gb, GB_vblank_callback_t callback) +{ + gb->vblank_callback = callback; +} + +void GB_set_log_callback(GB_gameboy_t *gb, GB_log_callback_t callback) +{ + gb->log_callback = callback; +} + +void GB_set_input_callback(GB_gameboy_t *gb, GB_input_callback_t callback) +{ +#ifndef GB_DISABLE_DEBUGGER + if (gb->input_callback == default_input_callback) { + gb->async_input_callback = NULL; + } + gb->input_callback = callback; +#endif +} + +void GB_set_async_input_callback(GB_gameboy_t *gb, GB_input_callback_t callback) +{ +#ifndef GB_DISABLE_DEBUGGER + gb->async_input_callback = callback; +#endif +} + +void GB_set_execution_callback(GB_gameboy_t *gb, GB_execution_callback_t callback) +{ + gb->execution_callback = callback; +} + +void GB_set_lcd_line_callback(GB_gameboy_t *gb, GB_lcd_line_callback_t callback) +{ + gb->lcd_line_callback = callback; +} + +void GB_set_lcd_status_callback(GB_gameboy_t *gb, GB_lcd_status_callback_t callback) +{ + gb->lcd_status_callback = callback; +} + +const GB_palette_t GB_PALETTE_GREY = {{{0x00, 0x00, 0x00}, {0x55, 0x55, 0x55}, {0xAA, 0xAA, 0xAA}, {0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF}}}; +const GB_palette_t GB_PALETTE_DMG = {{{0x08, 0x18, 0x10}, {0x39, 0x61, 0x39}, {0x84, 0xA5, 0x63}, {0xC6, 0xDE, 0x8C}, {0xD2, 0xE6, 0xA6}}}; +const GB_palette_t GB_PALETTE_MGB = {{{0x07, 0x10, 0x0E}, {0x3A, 0x4C, 0x3A}, {0x81, 0x8D, 0x66}, {0xC2, 0xCE, 0x93}, {0xCF, 0xDA, 0xAC}}}; +const GB_palette_t GB_PALETTE_GBL = {{{0x0A, 0x1C, 0x15}, {0x35, 0x78, 0x62}, {0x56, 0xB4, 0x95}, {0x7F, 0xE2, 0xC3}, {0x91, 0xEA, 0xD0}}}; + +static void update_dmg_palette(GB_gameboy_t *gb) +{ + const GB_palette_t *palette = gb->dmg_palette ?: &GB_PALETTE_GREY; + if (gb->rgb_encode_callback && !GB_is_cgb(gb)) { + gb->object_palettes_rgb[4] = gb->object_palettes_rgb[0] = gb->background_palettes_rgb[0] = + gb->rgb_encode_callback(gb, palette->colors[3].r, palette->colors[3].g, palette->colors[3].b); + gb->object_palettes_rgb[5] = gb->object_palettes_rgb[1] = gb->background_palettes_rgb[1] = + gb->rgb_encode_callback(gb, palette->colors[2].r, palette->colors[2].g, palette->colors[2].b); + gb->object_palettes_rgb[6] = gb->object_palettes_rgb[2] = gb->background_palettes_rgb[2] = + gb->rgb_encode_callback(gb, palette->colors[1].r, palette->colors[1].g, palette->colors[1].b); + gb->object_palettes_rgb[7] = gb->object_palettes_rgb[3] = gb->background_palettes_rgb[3] = + gb->rgb_encode_callback(gb, palette->colors[0].r, palette->colors[0].g, palette->colors[0].b); + + // LCD off color + gb->background_palettes_rgb[4] = + gb->rgb_encode_callback(gb, palette->colors[4].r, palette->colors[4].g, palette->colors[4].b); + } +} + +void GB_set_palette(GB_gameboy_t *gb, const GB_palette_t *palette) +{ + gb->dmg_palette = palette; + update_dmg_palette(gb); +} + +const GB_palette_t *GB_get_palette(GB_gameboy_t *gb) +{ + return gb->dmg_palette; +} + +void GB_set_rgb_encode_callback(GB_gameboy_t *gb, GB_rgb_encode_callback_t callback) +{ + + gb->rgb_encode_callback = callback; + update_dmg_palette(gb); + + for (unsigned i = 0; i < 32; i++) { + GB_palette_changed(gb, true, i * 2); + GB_palette_changed(gb, false, i * 2); + } +} + +void GB_set_infrared_callback(GB_gameboy_t *gb, GB_infrared_callback_t callback) +{ + gb->infrared_callback = callback; +} + +void GB_set_infrared_input(GB_gameboy_t *gb, bool state) +{ + gb->infrared_input = state; +} + +void GB_set_rumble_callback(GB_gameboy_t *gb, GB_rumble_callback_t callback) +{ + gb->rumble_callback = callback; +} + +void GB_set_serial_transfer_bit_start_callback(GB_gameboy_t *gb, GB_serial_transfer_bit_start_callback_t callback) +{ + gb->serial_transfer_bit_start_callback = callback; +} + +void GB_set_serial_transfer_bit_end_callback(GB_gameboy_t *gb, GB_serial_transfer_bit_end_callback_t callback) +{ + gb->serial_transfer_bit_end_callback = callback; +} + +bool GB_serial_get_data_bit(GB_gameboy_t *gb) +{ + if (!(gb->io_registers[GB_IO_SC] & 0x80)) { + /* Disabled serial returns 0 bits */ + return false; + } + + if (gb->io_registers[GB_IO_SC] & 1) { + /* Internal Clock */ + GB_log(gb, "Serial read request while using internal clock. \n"); + return true; + } + return gb->io_registers[GB_IO_SB] & 0x80; +} + +void GB_serial_set_data_bit(GB_gameboy_t *gb, bool data) +{ + if (!(gb->io_registers[GB_IO_SC] & 0x80)) { + /* Serial disabled */ + return; + } + + if (gb->io_registers[GB_IO_SC] & 1) { + /* Internal Clock */ + GB_log(gb, "Serial write request while using internal clock. \n"); + return; + } + + gb->io_registers[GB_IO_SB] <<= 1; + gb->io_registers[GB_IO_SB] |= data; + gb->serial_count++; + if (gb->serial_count == 8) { + gb->io_registers[GB_IO_IF] |= 8; + gb->io_registers[GB_IO_SC] &= ~0x80; + gb->serial_count = 0; + } +} + +void GB_disconnect_serial(GB_gameboy_t *gb) +{ + gb->serial_transfer_bit_start_callback = NULL; + gb->serial_transfer_bit_end_callback = NULL; + + /* Reset any internally-emulated device. */ + memset(&gb->printer, 0, sizeof(gb->printer)); + memset(&gb->workboy, 0, sizeof(gb->workboy)); +} + +bool GB_is_inited(GB_gameboy_t *gb) +{ + return gb->magic == state_magic(); +} + +bool GB_is_cgb(const GB_gameboy_t *gb) +{ + return gb->model >= GB_MODEL_CGB_0; +} + +bool GB_is_cgb_in_cgb_mode(GB_gameboy_t *gb) +{ + return gb->cgb_mode; +} + +bool GB_is_sgb(GB_gameboy_t *gb) +{ + return (gb->model & ~GB_MODEL_PAL_BIT & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB || (gb->model & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB2; +} + +bool GB_is_hle_sgb(GB_gameboy_t *gb) +{ + return (gb->model & ~GB_MODEL_PAL_BIT) == GB_MODEL_SGB || gb->model == GB_MODEL_SGB2; +} + +void GB_set_turbo_mode(GB_gameboy_t *gb, bool on, bool no_frame_skip) +{ + gb->turbo = on; + gb->turbo_dont_skip = no_frame_skip; +} + +void GB_set_rendering_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->disable_rendering = disabled; +} + +void *GB_get_user_data(GB_gameboy_t *gb) +{ + return gb->user_data; +} + +void GB_set_user_data(GB_gameboy_t *gb, void *data) +{ + gb->user_data = data; +} + +static void reset_ram(GB_gameboy_t *gb) +{ + switch (gb->model) { + case GB_MODEL_MGB: + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: /* Unverified */ + case GB_MODEL_GBP_A: + for (unsigned i = 0; i < gb->ram_size; i++) { + gb->ram[i] = GB_random(); + } + break; + + case GB_MODEL_DMG_B: + case GB_MODEL_SGB_NTSC: /* Unverified*/ + case GB_MODEL_SGB_PAL: /* Unverified */ + case GB_MODEL_SGB_NTSC_NO_SFC: /* Unverified */ + case GB_MODEL_SGB_PAL_NO_SFC: /* Unverified */ + for (unsigned i = 0; i < gb->ram_size; i++) { + gb->ram[i] = GB_random(); + if (i & 0x100) { + gb->ram[i] &= GB_random(); + } + else { + gb->ram[i] |= GB_random(); + } + } + break; + + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + for (unsigned i = 0; i < gb->ram_size; i++) { + gb->ram[i] = 0x55; + gb->ram[i] ^= GB_random() & GB_random() & GB_random(); + } + break; + + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_C: + for (unsigned i = 0; i < gb->ram_size; i++) { + if ((i & 0x808) == 0x800 || (i & 0x808) == 0x008) { + gb->ram[i] = 0; + } + else { + gb->ram[i] = GB_random() | GB_random() | GB_random() | GB_random() | GB_random(); + } + } + break; + case GB_MODEL_CGB_D: + for (unsigned i = 0; i < gb->ram_size; i++) { + gb->ram[i] = GB_random(); + if (i & 0x800) { + gb->ram[i] &= GB_random(); + } + else { + gb->ram[i] |= GB_random(); + } + } + break; + } + + /* HRAM */ + switch (gb->model) { + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_D: + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + for (unsigned i = 0; i < sizeof(gb->hram); i++) { + gb->hram[i] = GB_random(); + } + break; + + case GB_MODEL_DMG_B: + case GB_MODEL_MGB: + case GB_MODEL_SGB_NTSC: /* Unverified*/ + case GB_MODEL_SGB_PAL: /* Unverified */ + case GB_MODEL_SGB_NTSC_NO_SFC: /* Unverified */ + case GB_MODEL_SGB_PAL_NO_SFC: /* Unverified */ + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + for (unsigned i = 0; i < sizeof(gb->hram); i++) { + if (i & 1) { + gb->hram[i] = GB_random() | GB_random() | GB_random(); + } + else { + gb->hram[i] = GB_random() & GB_random() & GB_random(); + } + } + break; + } + + /* OAM */ + switch (gb->model) { + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_D: + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + /* Zero'd out by boot ROM anyway */ + break; + + case GB_MODEL_DMG_B: + case GB_MODEL_MGB: + case GB_MODEL_SGB_NTSC: /* Unverified */ + case GB_MODEL_SGB_PAL: /* Unverified */ + case GB_MODEL_SGB_NTSC_NO_SFC: /* Unverified */ + case GB_MODEL_SGB_PAL_NO_SFC: /* Unverified */ + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + for (unsigned i = 0; i < 8; i++) { + if (i & 2) { + gb->oam[i] = GB_random() & GB_random() & GB_random(); + } + else { + gb->oam[i] = GB_random() | GB_random() | GB_random(); + } + } + for (unsigned i = 8; i < sizeof(gb->oam); i++) { + gb->oam[i] = gb->oam[i - 8]; + } + break; + } + + /* Wave RAM */ + switch (gb->model) { + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_D: + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + /* Initialized by CGB-A and newer, 0s in CGB-0 */ + break; + case GB_MODEL_MGB: { + for (unsigned i = 0; i < GB_IO_WAV_END - GB_IO_WAV_START; i++) { + if (i & 1) { + gb->io_registers[GB_IO_WAV_START + i] = GB_random() & GB_random(); + } + else { + gb->io_registers[GB_IO_WAV_START + i] = GB_random() | GB_random(); + } + } + break; + } + case GB_MODEL_DMG_B: + case GB_MODEL_SGB_NTSC: /* Unverified*/ + case GB_MODEL_SGB_PAL: /* Unverified */ + case GB_MODEL_SGB_NTSC_NO_SFC: /* Unverified */ + case GB_MODEL_SGB_PAL_NO_SFC: /* Unverified */ + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: { + for (unsigned i = 0; i < GB_IO_WAV_END - GB_IO_WAV_START; i++) { + if (i & 1) { + gb->io_registers[GB_IO_WAV_START + i] = GB_random() & GB_random() & GB_random(); + } + else { + gb->io_registers[GB_IO_WAV_START + i] = GB_random() | GB_random() | GB_random(); + } + } + break; + } + } + + for (unsigned i = 0; i < sizeof(gb->extra_oam); i++) { + gb->extra_oam[i] = GB_random(); + } + + if (GB_is_cgb(gb)) { + for (unsigned i = 0; i < 64; i++) { + gb->background_palettes_data[i] = GB_random(); /* Doesn't really matter as the boot ROM overrides it anyway*/ + gb->object_palettes_data[i] = GB_random(); + } + for (unsigned i = 0; i < 32; i++) { + GB_palette_changed(gb, true, i * 2); + GB_palette_changed(gb, false, i * 2); + } + } +} + +static void request_boot_rom(GB_gameboy_t *gb) +{ + if (gb->boot_rom_load_callback) { + GB_boot_rom_t type = 0; + switch (gb->model) { + case GB_MODEL_DMG_B: + type = GB_BOOT_ROM_DMG; + break; + case GB_MODEL_MGB: + type = GB_BOOT_ROM_MGB; + break; + case GB_MODEL_SGB_NTSC: + case GB_MODEL_SGB_PAL: + case GB_MODEL_SGB_NTSC_NO_SFC: + case GB_MODEL_SGB_PAL_NO_SFC: + type = GB_BOOT_ROM_SGB; + break; + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + type = GB_BOOT_ROM_SGB2; + break; + case GB_MODEL_CGB_0: + type = GB_BOOT_ROM_CGB_0; + break; + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_D: + case GB_MODEL_CGB_E: + type = GB_BOOT_ROM_CGB; + break; + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + type = GB_BOOT_ROM_AGB; + break; + } + gb->boot_rom_load_callback(gb, type); + } +} + +void GB_reset(GB_gameboy_t *gb) +{ + uint32_t mbc_ram_size = gb->mbc_ram_size; + GB_model_t model = gb->model; + GB_update_clock_rate(gb); + uint8_t rtc_section[GB_SECTION_SIZE(rtc)]; + memcpy(rtc_section, GB_GET_SECTION(gb, rtc), sizeof(rtc_section)); + memset(gb, 0, (size_t)GB_GET_SECTION((GB_gameboy_t *) 0, unsaved)); + memcpy(GB_GET_SECTION(gb, rtc), rtc_section, sizeof(rtc_section)); + gb->model = model; + gb->version = GB_STRUCT_VERSION; + + GB_reset_mbc(gb); + + gb->last_rtc_second = time(NULL); + gb->cgb_ram_bank = 1; + gb->io_registers[GB_IO_JOYP] = 0xCF; + gb->mbc_ram_size = mbc_ram_size; + if (GB_is_cgb(gb)) { + gb->ram_size = 0x1000 * 8; + gb->vram_size = 0x2000 * 2; + memset(gb->vram, 0, gb->vram_size); + gb->cgb_mode = true; + gb->object_priority = GB_OBJECT_PRIORITY_INDEX; + } + else { + gb->ram_size = 0x2000; + gb->vram_size = 0x2000; + memset(gb->vram, 0, gb->vram_size); + gb->object_priority = GB_OBJECT_PRIORITY_X; + + update_dmg_palette(gb); + } + reset_ram(gb); + + gb->serial_mask = 0x80; + gb->io_registers[GB_IO_SC] = 0x7E; + + /* These are not deterministic, but 00 (CGB) and FF (DMG) are the most common initial values by far */ + gb->io_registers[GB_IO_DMA] = gb->io_registers[GB_IO_OBP0] = gb->io_registers[GB_IO_OBP1] = GB_is_cgb(gb)? 0x00 : 0xFF; + + gb->accessed_oam_row = -1; + gb->dma_current_dest = 0xA1; + + if (GB_is_hle_sgb(gb)) { + if (!gb->sgb) { + gb->sgb = malloc(sizeof(*gb->sgb)); + } + memset(gb->sgb, 0, sizeof(*gb->sgb)); + memset(gb->sgb_intro_jingle_phases, 0, sizeof(gb->sgb_intro_jingle_phases)); + gb->sgb_intro_sweep_phase = 0; + gb->sgb_intro_sweep_previous_sample = 0; + gb->sgb->intro_animation = -10; + + gb->sgb->player_count = 1; + GB_sgb_load_default_data(gb); + + } + else { + if (gb->sgb) { + free(gb->sgb); + gb->sgb = NULL; + } + } + + GB_set_internal_div_counter(gb, 8); + + if (gb->nontrivial_jump_state) { + free(gb->nontrivial_jump_state); + gb->nontrivial_jump_state = NULL; + } + + gb->magic = state_magic(); + request_boot_rom(gb); +} + +void GB_switch_model_and_reset(GB_gameboy_t *gb, GB_model_t model) +{ + gb->model = model; + if (GB_is_cgb(gb)) { + gb->ram = realloc(gb->ram, gb->ram_size = 0x1000 * 8); + gb->vram = realloc(gb->vram, gb->vram_size = 0x2000 * 2); + } + else { + gb->ram = realloc(gb->ram, gb->ram_size = 0x2000); + gb->vram = realloc(gb->vram, gb->vram_size = 0x2000); + } + if (gb->undo_state) { + free(gb->undo_state); + gb->undo_state = NULL; + } + GB_rewind_free(gb); + GB_reset(gb); + load_default_border(gb); +} + +void *GB_get_direct_access(GB_gameboy_t *gb, GB_direct_access_t access, size_t *size, uint16_t *bank) +{ + /* Set size and bank to dummy pointers if not set */ + size_t dummy_size; + uint16_t dummy_bank; + if (!size) { + size = &dummy_size; + } + + if (!bank) { + bank = &dummy_bank; + } + + + switch (access) { + case GB_DIRECT_ACCESS_ROM: + *size = gb->rom_size; + *bank = gb->mbc_rom_bank & (gb->rom_size / 0x4000 - 1); + return gb->rom; + case GB_DIRECT_ACCESS_ROM0: + *size = gb->rom_size; + *bank = gb->mbc_rom0_bank & (gb->rom_size / 0x4000 - 1); + return gb->rom; + case GB_DIRECT_ACCESS_RAM: + *size = gb->ram_size; + *bank = gb->cgb_ram_bank; + return gb->ram; + case GB_DIRECT_ACCESS_CART_RAM: + *size = gb->mbc_ram_size; + *bank = gb->mbc_ram_bank & (gb->mbc_ram_size / 0x2000 - 1); + return gb->mbc_ram; + case GB_DIRECT_ACCESS_VRAM: + *size = gb->vram_size; + *bank = gb->cgb_vram_bank; + return gb->vram; + case GB_DIRECT_ACCESS_HRAM: + *size = sizeof(gb->hram); + *bank = 0; + return &gb->hram; + case GB_DIRECT_ACCESS_IO: + *size = sizeof(gb->io_registers); + *bank = 0; + return &gb->io_registers; + case GB_DIRECT_ACCESS_BOOTROM: + *size = GB_is_cgb(gb)? sizeof(gb->boot_rom) : 0x100; + *bank = 0; + return &gb->boot_rom; + case GB_DIRECT_ACCESS_OAM: + *size = sizeof(gb->oam); + *bank = 0; + return &gb->oam; + case GB_DIRECT_ACCESS_BGP: + *size = sizeof(gb->background_palettes_data); + *bank = 0; + return &gb->background_palettes_data; + case GB_DIRECT_ACCESS_OBP: + *size = sizeof(gb->object_palettes_data); + *bank = 0; + return &gb->object_palettes_data; + case GB_DIRECT_ACCESS_IE: + *size = sizeof(gb->interrupt_enable); + *bank = 0; + return &gb->interrupt_enable; + default: + *size = 0; + *bank = 0; + return NULL; + } +} + +GB_registers_t *GB_get_registers(GB_gameboy_t *gb) +{ + return (GB_registers_t *)&gb->registers; +} + +void GB_set_clock_multiplier(GB_gameboy_t *gb, double multiplier) +{ + gb->clock_multiplier = multiplier; + GB_update_clock_rate(gb); +} + +uint32_t GB_get_clock_rate(GB_gameboy_t *gb) +{ + return gb->clock_rate; +} + +uint32_t GB_get_unmultiplied_clock_rate(GB_gameboy_t *gb) +{ + return gb->unmultiplied_clock_rate; +} + +void GB_update_clock_rate(GB_gameboy_t *gb) +{ + if (gb->model & GB_MODEL_PAL_BIT) { + gb->unmultiplied_clock_rate = SGB_PAL_FREQUENCY; + } + else if ((gb->model & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB) { + gb->unmultiplied_clock_rate = SGB_NTSC_FREQUENCY; + } + else { + gb->unmultiplied_clock_rate = CPU_FREQUENCY; + } + + gb->clock_rate = gb->unmultiplied_clock_rate * gb->clock_multiplier; +} + +void GB_set_border_mode(GB_gameboy_t *gb, GB_border_mode_t border_mode) +{ + if (gb->border_mode > GB_BORDER_ALWAYS) return; + gb->border_mode = border_mode; +} + +unsigned GB_get_screen_width(GB_gameboy_t *gb) +{ + switch (gb->border_mode) { + default: + case GB_BORDER_SGB: + return GB_is_hle_sgb(gb)? 256 : 160; + case GB_BORDER_NEVER: + return 160; + case GB_BORDER_ALWAYS: + return 256; + } +} + +unsigned GB_get_screen_height(GB_gameboy_t *gb) +{ + switch (gb->border_mode) { + default: + case GB_BORDER_SGB: + return GB_is_hle_sgb(gb)? 224 : 144; + case GB_BORDER_NEVER: + return 144; + case GB_BORDER_ALWAYS: + return 224; + } +} + +unsigned GB_get_player_count(GB_gameboy_t *gb) +{ + return GB_is_hle_sgb(gb)? gb->sgb->player_count : 1; +} + +void GB_set_update_input_hint_callback(GB_gameboy_t *gb, GB_update_input_hint_callback_t callback) +{ + gb->update_input_hint_callback = callback; +} + +double GB_get_usual_frame_rate(GB_gameboy_t *gb) +{ + return GB_get_clock_rate(gb) / (double)LCDC_PERIOD; +} + +void GB_set_joyp_write_callback(GB_gameboy_t *gb, GB_joyp_write_callback_t callback) +{ + gb->joyp_write_callback = callback; +} + +void GB_set_icd_pixel_callback(GB_gameboy_t *gb, GB_icd_pixel_callback_t callback) +{ + gb->icd_pixel_callback = callback; +} + +void GB_set_icd_hreset_callback(GB_gameboy_t *gb, GB_icd_hreset_callback_t callback) +{ + gb->icd_hreset_callback = callback; +} + + +void GB_set_icd_vreset_callback(GB_gameboy_t *gb, GB_icd_vreset_callback_t callback) +{ + gb->icd_vreset_callback = callback; +} + +void GB_set_boot_rom_load_callback(GB_gameboy_t *gb, GB_boot_rom_load_callback_t callback) +{ + gb->boot_rom_load_callback = callback; + request_boot_rom(gb); +} + +unsigned GB_time_to_alarm(GB_gameboy_t *gb) +{ + if (gb->cartridge_type->mbc_type != GB_HUC3) return 0; + if (!gb->huc3.alarm_enabled) return 0; + if (!(gb->huc3.alarm_days & 0x2000)) return 0; + unsigned current_time = (gb->huc3.days & 0x1FFF) * 24 * 60 * 60 + gb->huc3.minutes * 60 + (time(NULL) % 60); + unsigned alarm_time = (gb->huc3.alarm_days & 0x1FFF) * 24 * 60 * 60 + gb->huc3.alarm_minutes * 60; + if (current_time > alarm_time) return 0; + return alarm_time - current_time; +} + +bool GB_has_accelerometer(GB_gameboy_t *gb) +{ + return gb->cartridge_type->mbc_type == GB_MBC7; +} + +void GB_set_accelerometer_values(GB_gameboy_t *gb, double x, double y) +{ + gb->accelerometer_x = x; + gb->accelerometer_y = y; +} + +void GB_get_rom_title(GB_gameboy_t *gb, char *title) +{ + memset(title, 0, 17); + if (gb->rom_size >= 0x4000) { + for (unsigned i = 0; i < 0x10; i++) { + if (gb->rom[0x134 + i] < 0x20 || gb->rom[0x134 + i] >= 0x80) break; + title[i] = gb->rom[0x134 + i]; + } + } +} + +uint32_t GB_get_rom_crc32(GB_gameboy_t *gb) +{ + static const uint32_t table[] = { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, + 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, + 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, + 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, + 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, + 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, + 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, + 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, + 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, + 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, + 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, + 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, + 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, + 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, + 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, + 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, + 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, + 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, + 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, + 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + const uint8_t *byte = gb->rom; + uint32_t size = gb->rom_size; + uint32_t ret = 0xFFFFFFFF; + while (size--) { + ret = table[(ret ^ *byte++) & 0xFF] ^ (ret >> 8); + } + return ~ret; +} diff --git a/thirdparty/SameBoy-old/Core/gb.h b/thirdparty/SameBoy-old/Core/gb.h new file mode 100644 index 000000000..f3086133f --- /dev/null +++ b/thirdparty/SameBoy-old/Core/gb.h @@ -0,0 +1,966 @@ +#ifndef GB_h +#define GB_h +#define typeof __typeof__ +#include +#include +#include +#include + +#include "defs.h" +#include "save_state.h" + +#include "apu.h" +#include "camera.h" +#include "debugger.h" +#include "display.h" +#include "joypad.h" +#include "mbc.h" +#include "memory.h" +#include "printer.h" +#include "timing.h" +#include "rewind.h" +#include "sm83_cpu.h" +#include "symbol_hash.h" +#include "sgb.h" +#include "cheats.h" +#include "rumble.h" +#include "workboy.h" +#include "random.h" + +#define GB_STRUCT_VERSION 14 + +#define GB_MODEL_FAMILY_MASK 0xF00 +#define GB_MODEL_DMG_FAMILY 0x000 +#define GB_MODEL_MGB_FAMILY 0x100 +#define GB_MODEL_CGB_FAMILY 0x200 +#define GB_MODEL_GBP_BIT 0x20 +#define GB_MODEL_PAL_BIT 0x40 +#define GB_MODEL_NO_SFC_BIT 0x80 + +#define GB_REWIND_FRAMES_PER_KEY 255 + +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#define GB_BIG_ENDIAN +#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define GB_LITTLE_ENDIAN +#else +#error Unable to detect endianess +#endif + +#ifdef GB_BIG_ENDIAN +#define GB_REGISTER_ORDER a, f, \ + b, c, \ + d, e, \ + h, l +#else +#define GB_REGISTER_ORDER f, a, \ + c, b, \ + e, d, \ + l, h +#endif + +typedef struct { + struct GB_color_s { + uint8_t r, g, b; + } colors[5]; +} GB_palette_t; + +extern const GB_palette_t GB_PALETTE_GREY; +extern const GB_palette_t GB_PALETTE_DMG; +extern const GB_palette_t GB_PALETTE_MGB; +extern const GB_palette_t GB_PALETTE_GBL; + +typedef union { + struct { + uint8_t seconds; + uint8_t minutes; + uint8_t hours; + uint8_t days; + uint8_t high; + }; + struct { + uint8_t seconds; + uint8_t minutes; + uint8_t hours:5; + uint8_t weekday:3; + uint8_t weeks; + } tpp1; + uint8_t data[5]; +} GB_rtc_time_t; + +typedef struct __attribute__((packed)) { + uint64_t last_rtc_second; + uint16_t minutes; + uint16_t days; + uint16_t alarm_minutes, alarm_days; + uint8_t alarm_enabled; +} GB_huc3_rtc_time_t; + +typedef enum { + // GB_MODEL_DMG_0 = 0x000, + // GB_MODEL_DMG_A = 0x001, + GB_MODEL_DMG_B = 0x002, + // GB_MODEL_DMG_C = 0x003, + GB_MODEL_SGB = 0x004, + GB_MODEL_SGB_NTSC = GB_MODEL_SGB, + GB_MODEL_SGB_PAL = GB_MODEL_SGB | GB_MODEL_PAL_BIT, + GB_MODEL_SGB_NTSC_NO_SFC = GB_MODEL_SGB | GB_MODEL_NO_SFC_BIT, + GB_MODEL_SGB_NO_SFC = GB_MODEL_SGB_NTSC_NO_SFC, + GB_MODEL_SGB_PAL_NO_SFC = GB_MODEL_SGB | GB_MODEL_NO_SFC_BIT | GB_MODEL_PAL_BIT, + GB_MODEL_MGB = 0x100, + GB_MODEL_SGB2 = 0x101, + GB_MODEL_SGB2_NO_SFC = GB_MODEL_SGB2 | GB_MODEL_NO_SFC_BIT, + GB_MODEL_CGB_0 = 0x200, + GB_MODEL_CGB_A = 0x201, + GB_MODEL_CGB_B = 0x202, + GB_MODEL_CGB_C = 0x203, + GB_MODEL_CGB_D = 0x204, + GB_MODEL_CGB_E = 0x205, + // GB_MODEL_AGB_0 = 0x206, + GB_MODEL_AGB_A = 0x207, + GB_MODEL_GBP_A = GB_MODEL_AGB_A | GB_MODEL_GBP_BIT, // AGB-A inside a Game Boy Player + GB_MODEL_AGB = GB_MODEL_AGB_A, + GB_MODEL_GBP = GB_MODEL_GBP_A, + //GB_MODEL_AGB_B = 0x208 + //GB_MODEL_AGB_E = 0x209 + //GB_MODEL_GBP_E = GB_MODEL_AGB_E | GB_MODEL_GBP_BIT, // AGB-E inside a Game Boy Player +} GB_model_t; + +enum { + GB_REGISTER_AF, + GB_REGISTER_BC, + GB_REGISTER_DE, + GB_REGISTER_HL, + GB_REGISTER_SP, + GB_REGISTER_PC, + GB_REGISTERS_16_BIT /* Count */ +}; + +/* Todo: Actually use these! */ +enum { + GB_CARRY_FLAG = 16, + GB_HALF_CARRY_FLAG = 32, + GB_SUBTRACT_FLAG = 64, + GB_ZERO_FLAG = 128, +}; + +typedef enum { + GB_BORDER_SGB, + GB_BORDER_NEVER, + GB_BORDER_ALWAYS, +} GB_border_mode_t; + +enum { + /* Joypad and Serial */ + GB_IO_JOYP = 0x00, // Joypad (R/W) + GB_IO_SB = 0x01, // Serial transfer data (R/W) + GB_IO_SC = 0x02, // Serial Transfer Control (R/W) + + /* Missing */ + + /* Timers */ + GB_IO_DIV = 0x04, // Divider Register (R/W) + GB_IO_TIMA = 0x05, // Timer counter (R/W) + GB_IO_TMA = 0x06, // Timer Modulo (R/W) + GB_IO_TAC = 0x07, // Timer Control (R/W) + + /* Missing */ + + GB_IO_IF = 0x0F, // Interrupt Flag (R/W) + + /* Sound */ + GB_IO_NR10 = 0x10, // Channel 1 Sweep register (R/W) + GB_IO_NR11 = 0x11, // Channel 1 Sound length/Wave pattern duty (R/W) + GB_IO_NR12 = 0x12, // Channel 1 Volume Envelope (R/W) + GB_IO_NR13 = 0x13, // Channel 1 Frequency lo (Write Only) + GB_IO_NR14 = 0x14, // Channel 1 Frequency hi (R/W) + /* NR20 does not exist */ + GB_IO_NR21 = 0x16, // Channel 2 Sound Length/Wave Pattern Duty (R/W) + GB_IO_NR22 = 0x17, // Channel 2 Volume Envelope (R/W) + GB_IO_NR23 = 0x18, // Channel 2 Frequency lo data (W) + GB_IO_NR24 = 0x19, // Channel 2 Frequency hi data (R/W) + GB_IO_NR30 = 0x1A, // Channel 3 Sound on/off (R/W) + GB_IO_NR31 = 0x1B, // Channel 3 Sound Length + GB_IO_NR32 = 0x1C, // Channel 3 Select output level (R/W) + GB_IO_NR33 = 0x1D, // Channel 3 Frequency's lower data (W) + GB_IO_NR34 = 0x1E, // Channel 3 Frequency's higher data (R/W) + /* NR40 does not exist */ + GB_IO_NR41 = 0x20, // Channel 4 Sound Length (R/W) + GB_IO_NR42 = 0x21, // Channel 4 Volume Envelope (R/W) + GB_IO_NR43 = 0x22, // Channel 4 Polynomial Counter (R/W) + GB_IO_NR44 = 0x23, // Channel 4 Counter/consecutive, Inital (R/W) + GB_IO_NR50 = 0x24, // Channel control / ON-OFF / Volume (R/W) + GB_IO_NR51 = 0x25, // Selection of Sound output terminal (R/W) + GB_IO_NR52 = 0x26, // Sound on/off + + /* Missing */ + + GB_IO_WAV_START = 0x30, // Wave pattern start + GB_IO_WAV_END = 0x3F, // Wave pattern end + + /* Graphics */ + GB_IO_LCDC = 0x40, // LCD Control (R/W) + GB_IO_STAT = 0x41, // LCDC Status (R/W) + GB_IO_SCY = 0x42, // Scroll Y (R/W) + GB_IO_SCX = 0x43, // Scroll X (R/W) + GB_IO_LY = 0x44, // LCDC Y-Coordinate (R) + GB_IO_LYC = 0x45, // LY Compare (R/W) + GB_IO_DMA = 0x46, // DMA Transfer and Start Address (W) + GB_IO_BGP = 0x47, // BG Palette Data (R/W) - Non CGB Mode Only + GB_IO_OBP0 = 0x48, // Object Palette 0 Data (R/W) - Non CGB Mode Only + GB_IO_OBP1 = 0x49, // Object Palette 1 Data (R/W) - Non CGB Mode Only + GB_IO_WY = 0x4A, // Window Y Position (R/W) + GB_IO_WX = 0x4B, // Window X Position minus 7 (R/W) + // Controls DMG mode and PGB mode + GB_IO_KEY0 = 0x4C, + + /* General CGB features */ + GB_IO_KEY1 = 0x4D, // CGB Mode Only - Prepare Speed Switch + + /* Missing */ + + GB_IO_VBK = 0x4F, // CGB Mode Only - VRAM Bank + GB_IO_BANK = 0x50, // Write to disable the BIOS mapping + + /* CGB DMA */ + GB_IO_HDMA1 = 0x51, // CGB Mode Only - New DMA Source, High + GB_IO_HDMA2 = 0x52, // CGB Mode Only - New DMA Source, Low + GB_IO_HDMA3 = 0x53, // CGB Mode Only - New DMA Destination, High + GB_IO_HDMA4 = 0x54, // CGB Mode Only - New DMA Destination, Low + GB_IO_HDMA5 = 0x55, // CGB Mode Only - New DMA Length/Mode/Start + + /* IR */ + GB_IO_RP = 0x56, // CGB Mode Only - Infrared Communications Port + + /* Missing */ + + /* CGB Palettes */ + GB_IO_BGPI = 0x68, // CGB Mode Only - Background Palette Index + GB_IO_BGPD = 0x69, // CGB Mode Only - Background Palette Data + GB_IO_OBPI = 0x6A, // CGB Mode Only - Object Palette Index + GB_IO_OBPD = 0x6B, // CGB Mode Only - Object Palette Data + GB_IO_OPRI = 0x6C, // Affects object priority (X based or index based) + + /* Missing */ + + GB_IO_SVBK = 0x70, // CGB Mode Only - WRAM Bank + GB_IO_PSM = 0x71, // Palette Selection Mode, controls the PSW and key combo + GB_IO_PSWX = 0x72, // X position of the palette switching window + GB_IO_PSWY = 0x73, // Y position of the palette switching window + GB_IO_PSW = 0x74, // Key combo to trigger the palette switching window + GB_IO_UNKNOWN5 = 0x75, // (8Fh) - Bit 4-6 (Read/Write) + GB_IO_PCM12 = 0x76, // Channels 1 and 2 amplitudes + GB_IO_PCM34 = 0x77, // Channels 3 and 4 amplitudes +}; + +typedef enum { + GB_LOG_BOLD = 1, + GB_LOG_DASHED_UNDERLINE = 2, + GB_LOG_UNDERLINE = 4, + GB_LOG_UNDERLINE_MASK = GB_LOG_DASHED_UNDERLINE | GB_LOG_UNDERLINE +} GB_log_attributes; + +typedef enum { + GB_BOOT_ROM_DMG_0, + GB_BOOT_ROM_DMG, + GB_BOOT_ROM_MGB, + GB_BOOT_ROM_SGB, + GB_BOOT_ROM_SGB2, + GB_BOOT_ROM_CGB_0, + GB_BOOT_ROM_CGB, + GB_BOOT_ROM_AGB, +} GB_boot_rom_t; + +#ifdef GB_INTERNAL +#define LCDC_PERIOD 70224 +#define CPU_FREQUENCY 0x400000 +#define SGB_NTSC_FREQUENCY (21477272 / 5) +#define SGB_PAL_FREQUENCY (21281370 / 5) +#define DIV_CYCLES (0x100) + +#if !defined(MIN) +#define MIN(A, B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; }) +#endif + +#if !defined(MAX) +#define MAX(A, B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; }) +#endif +#endif + +typedef void (*GB_vblank_callback_t)(GB_gameboy_t *gb, GB_vblank_type_t type); +typedef void (*GB_log_callback_t)(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes); +typedef char *(*GB_input_callback_t)(GB_gameboy_t *gb); +typedef uint32_t (*GB_rgb_encode_callback_t)(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b); +typedef void (*GB_infrared_callback_t)(GB_gameboy_t *gb, bool on); +typedef void (*GB_rumble_callback_t)(GB_gameboy_t *gb, double rumble_amplitude); +typedef void (*GB_serial_transfer_bit_start_callback_t)(GB_gameboy_t *gb, bool bit_to_send); +typedef bool (*GB_serial_transfer_bit_end_callback_t)(GB_gameboy_t *gb); +typedef void (*GB_update_input_hint_callback_t)(GB_gameboy_t *gb); +typedef void (*GB_joyp_write_callback_t)(GB_gameboy_t *gb, uint8_t value); +typedef void (*GB_icd_pixel_callback_t)(GB_gameboy_t *gb, uint8_t row); +typedef void (*GB_icd_hreset_callback_t)(GB_gameboy_t *gb); +typedef void (*GB_icd_vreset_callback_t)(GB_gameboy_t *gb); +typedef void (*GB_boot_rom_load_callback_t)(GB_gameboy_t *gb, GB_boot_rom_t type); + +typedef void (*GB_execution_callback_t)(GB_gameboy_t *gb, uint16_t address, uint8_t opcode); +typedef void (*GB_lcd_line_callback_t)(GB_gameboy_t *gb, uint8_t line); +typedef void (*GB_lcd_status_callback_t)(GB_gameboy_t *gb, bool on); + +struct GB_breakpoint_s; +struct GB_watchpoint_s; + +typedef struct { + uint8_t pixel; // Color, 0-3 + uint8_t palette; // Palette, 0 - 7 (CGB); 0-1 in DMG (or just 0 for BG) + uint8_t priority; // Object priority – 0 in DMG, OAM index in CGB + bool bg_priority; // For object FIFO – the BG priority bit. For the BG FIFO – the CGB attributes priority bit +} GB_fifo_item_t; + +#define GB_FIFO_LENGTH 8 +typedef struct { + GB_fifo_item_t fifo[GB_FIFO_LENGTH]; + uint8_t read_end; + uint8_t size; +} GB_fifo_t; + +typedef struct { + uint32_t magic; + uint8_t track_count; + uint8_t first_track; + uint16_t load_address; + uint16_t init_address; + uint16_t play_address; + uint16_t sp; + uint8_t TMA; + uint8_t TAC; + char title[32]; + char author[32]; + char copyright[32]; +} GB_gbs_header_t; + +typedef struct { + uint8_t track_count; + uint8_t first_track; + char title[33]; + char author[33]; + char copyright[33]; +} GB_gbs_info_t; + +/* Duplicated so it can remain anonymous in GB_gameboy_t */ +typedef union { + uint16_t registers[GB_REGISTERS_16_BIT]; + struct { + uint16_t af, + bc, + de, + hl, + sp, + pc; + }; + struct { + uint8_t GB_REGISTER_ORDER; + }; +} GB_registers_t; + +/* When state saving, each section is dumped independently of other sections. + This allows adding data to the end of the section without worrying about future compatibility. + Some other changes might be "safe" as well. + This struct is not packed, but dumped sections exclusively use types that have the same alignment in both 32 and 64 + bit platforms. */ + +#ifdef GB_INTERNAL +struct GB_gameboy_s { +#else +struct GB_gameboy_internal_s { +#endif + GB_SECTION(header, + /* The magic makes sure a state file is: + - Indeed a SameBoy state file. + - Has the same endianess has the current platform. */ + volatile uint32_t magic; + /* The version field makes sure we don't load save state files with a completely different structure. + This happens when struct fields are removed/resized in an backward incompatible manner. */ + uint32_t version; + ) + + GB_SECTION(core_state, + /* Registers */ + union { + uint16_t registers[GB_REGISTERS_16_BIT]; + struct { + uint16_t af, + bc, + de, + hl, + sp, + pc; + }; + struct { + uint8_t GB_REGISTER_ORDER; + }; + }; + uint8_t ime; + uint8_t interrupt_enable; + uint8_t cgb_ram_bank; + + /* CPU and General Hardware Flags*/ + GB_model_t model; + bool cgb_mode; + bool cgb_double_speed; + bool halted; + bool stopped; + bool boot_rom_finished; + bool ime_toggle; /* ei has delayed a effect.*/ + bool halt_bug; + bool just_halted; + + /* Misc state */ + bool infrared_input; + GB_printer_t printer; + uint8_t extra_oam[0xFF00 - 0xFEA0]; + uint32_t ram_size; // Different between CGB and DMG + GB_workboy_t workboy; + + int32_t ir_sensor; + bool effective_ir_input; + uint16_t address_bus; + ) + + /* DMA and HDMA */ + GB_SECTION(dma, + bool hdma_on; + bool hdma_on_hblank; + uint8_t hdma_steps_left; + uint16_t hdma_current_src, hdma_current_dest; + + uint8_t dma_current_dest; + uint8_t last_dma_read; + uint16_t dma_current_src; + uint16_t dma_cycles; + int8_t dma_cycles_modulo; + bool dma_ppu_vram_conflict; + uint16_t dma_ppu_vram_conflict_addr; + uint8_t hdma_open_bus; /* Required to emulate HDMA reads from Exxx */ + bool allow_hdma_on_wake; + ) + + /* MBC */ + GB_SECTION(mbc, + uint16_t mbc_rom_bank; + uint16_t mbc_rom0_bank; /* For multicart mappings . */ + uint8_t mbc_ram_bank; + uint32_t mbc_ram_size; + bool mbc_ram_enable; + union { + struct { + uint8_t bank_low:5; + uint8_t bank_high:2; + uint8_t mode:1; + } mbc1; + + struct { + uint8_t rom_bank:4; + } mbc2; + + struct { + uint8_t rom_bank:8; + uint8_t ram_bank:3; + bool rtc_mapped:1; + } mbc3; + + struct { + uint8_t rom_bank_low; + uint8_t rom_bank_high:1; + uint8_t ram_bank:4; + } mbc5; // Also used for GB_CAMERA + + struct { + uint8_t rom_bank; + uint16_t x_latch; + uint16_t y_latch; + bool latch_ready:1; + bool eeprom_do:1; + bool eeprom_di:1; + bool eeprom_clk:1; + bool eeprom_cs:1; + uint16_t eeprom_command:11; + uint16_t read_bits; + uint8_t argument_bits_left:5; + bool secondary_ram_enable:1; + bool eeprom_write_enabled:1; + } mbc7; + + struct { + uint8_t rom_bank_low:5; + uint8_t rom_bank_mid:2; + bool mbc1_mode:1; + + uint8_t rom_bank_mask:4; + uint8_t rom_bank_high:2; + uint8_t ram_bank_low:2; + + uint8_t ram_bank_high:2; + uint8_t ram_bank_mask:2; + + bool locked:1; + bool mbc1_mode_disable:1; + bool multiplex_mode:1; + } mmm01; + + struct { + uint8_t bank_low:6; + uint8_t bank_high:3; + bool ir_mode; + } huc1; + + struct { + uint8_t rom_bank:7; + uint8_t padding:1; + uint8_t ram_bank:4; + uint8_t mode; + uint8_t access_index; + uint16_t minutes, days; + uint16_t alarm_minutes, alarm_days; + bool alarm_enabled; + uint8_t read; + uint8_t access_flags; + } huc3; + + struct { + uint16_t rom_bank; + uint8_t ram_bank; + uint8_t mode; + } tpp1; + }; + bool camera_registers_mapped; + uint8_t camera_registers[0x36]; + uint8_t rumble_strength; + bool cart_ir; + uint8_t camera_alignment; + int32_t camera_countdown; + ) + + /* HRAM and HW Registers */ + GB_SECTION(hram, + uint8_t hram[0xFFFF - 0xFF80]; + uint8_t io_registers[0x80]; + ) + + /* Timing */ + GB_SECTION(timing, + GB_UNIT(display); + GB_UNIT(div); + uint16_t div_counter; + uint8_t tima_reload_state; /* After TIMA overflows, it becomes 0 for 4 cycles before actually reloading. */ + bool serial_master_clock; + uint8_t serial_mask; + uint8_t double_speed_alignment; + uint8_t serial_count; + int32_t speed_switch_halt_countdown; + uint8_t speed_switch_countdown; // To compensate for the lack of pipeline emulation + uint8_t speed_switch_freeze; // Solely for realigning the PPU, should be removed when the odd modes are implemented + /* For timing of the vblank callback */ + uint32_t cycles_since_vblank_callback; + bool lcd_disabled_outside_of_vblank; + int32_t allowed_pending_cycles; + uint16_t mode3_batching_length; + uint8_t joyp_switching_delay; + uint8_t joyp_switch_value; + uint16_t key_bounce_timing[GB_KEY_MAX]; + ) + + /* APU */ + GB_SECTION(apu, + GB_apu_t apu; + ) + + /* RTC */ + GB_SECTION(rtc, + GB_rtc_time_t rtc_real, rtc_latched; + uint64_t last_rtc_second; + uint32_t rtc_cycles; + uint8_t tpp1_mr4; + ) + + /* Video Display */ + GB_SECTION(video, + uint32_t vram_size; // Different between CGB and DMG + bool cgb_vram_bank; + uint8_t oam[0xA0]; + uint8_t background_palettes_data[0x40]; + uint8_t object_palettes_data[0x40]; + uint8_t position_in_line; + bool stat_interrupt_line; + uint8_t window_y; + /* The LCDC will skip the first frame it renders after turning it on. + On the CGB, a frame is not skipped if the previous frame was skipped as well. + See https://www.reddit.com/r/EmuDev/comments/6exyxu/ */ + + /* TODO: Drop this and properly emulate the dropped vreset signal*/ + enum { + GB_FRAMESKIP_LCD_TURNED_ON, // On a DMG, the LCD renders a blank screen during this state, + // on a CGB, the previous frame is repeated (which might be + // blank if the LCD was off for more than a few cycles) + GB_FRAMESKIP_FIRST_FRAME_SKIPPED__DEPRECATED, + GB_FRAMESKIP_FIRST_FRAME_RENDERED, + } frame_skip_state; + bool oam_read_blocked; + bool vram_read_blocked; + bool oam_write_blocked; + bool vram_write_blocked; + uint8_t current_line; + uint16_t ly_for_comparison; + GB_fifo_t bg_fifo, oam_fifo; + uint8_t fetcher_y; + uint16_t cycles_for_line; + uint8_t current_tile; + uint8_t current_tile_attributes; + uint8_t current_tile_data[2]; + uint8_t fetcher_state; + bool window_is_being_fetched; + bool wx166_glitch; + bool wx_triggered; + uint8_t visible_objs[10]; + uint8_t objects_x[10]; + uint8_t objects_y[10]; + uint8_t object_tile_data[2]; + uint8_t mode2_y_bus; + // They're the same bus + union { + uint8_t mode2_x_bus; + uint8_t object_flags; + }; + uint8_t n_visible_objs; + uint8_t orig_n_visible_objs; + uint8_t oam_search_index; + uint8_t accessed_oam_row; + uint8_t mode_for_interrupt; + bool lyc_interrupt_line; + bool cgb_palettes_blocked; + uint8_t current_lcd_line; // The LCD can go out of sync since the vsync signal is skipped in some cases. + uint8_t object_priority; + bool oam_ppu_blocked; + bool vram_ppu_blocked; + bool cgb_palettes_ppu_blocked; + bool object_fetch_aborted; + bool during_object_fetch; + uint16_t object_low_line_address; + bool wy_triggered; + uint8_t window_tile_x; + uint8_t lcd_x; // The LCD can go out of sync since the push signal is skipped in some cases. + bool is_odd_frame; + uint16_t last_tile_data_address; + uint16_t last_tile_index_address; + GB_PADDING(bool, cgb_repeated_a_frame); + uint8_t data_for_sel_glitch; + bool delayed_glitch_hblank_interrupt; + uint32_t frame_repeat_countdown; + ) + + /* Unsaved data. This includes all pointers, as well as everything that shouldn't be on a save state */ + /* This data is reserved on reset and must come last in the struct */ + GB_SECTION(unsaved, + /* ROM */ + uint8_t *rom; + uint32_t rom_size; + const GB_cartridge_t *cartridge_type; + enum { + GB_STANDARD_MBC1_WIRING, + GB_MBC1M_WIRING, + } mbc1_wiring; + bool is_mbc30; + + unsigned pending_cycles; + + /* Various RAMs */ + uint8_t *ram; + uint8_t *vram; + uint8_t *mbc_ram; + + /* I/O */ + uint32_t *screen; + uint32_t background_palettes_rgb[0x20]; + uint32_t object_palettes_rgb[0x20]; + const GB_palette_t *dmg_palette; + GB_color_correction_mode_t color_correction_mode; + double light_temperature; + bool keys[4][GB_KEY_MAX]; + double accelerometer_x, accelerometer_y; + GB_border_mode_t border_mode; + GB_sgb_border_t borrowed_border; + bool tried_loading_sgb_border; + bool has_sgb_border; + bool objects_disabled; + bool background_disabled; + bool joyp_accessed; + bool illegal_inputs_allowed; + bool no_bouncing_emulation; + bool joypad_is_stable; + + /* Timing */ + uint64_t last_sync; + uint64_t cycles_since_last_sync; // In 8MHz units + GB_rtc_mode_t rtc_mode; + uint32_t rtc_second_length; + uint32_t clock_rate; + uint32_t unmultiplied_clock_rate; + + /* Audio */ + GB_apu_output_t apu_output; + + /* Callbacks */ + void *user_data; + GB_log_callback_t log_callback; + GB_input_callback_t input_callback; + GB_input_callback_t async_input_callback; + GB_rgb_encode_callback_t rgb_encode_callback; + GB_vblank_callback_t vblank_callback; + GB_infrared_callback_t infrared_callback; + GB_camera_get_pixel_callback_t camera_get_pixel_callback; + GB_camera_update_request_callback_t camera_update_request_callback; + GB_rumble_callback_t rumble_callback; + GB_serial_transfer_bit_start_callback_t serial_transfer_bit_start_callback; + GB_serial_transfer_bit_end_callback_t serial_transfer_bit_end_callback; + GB_update_input_hint_callback_t update_input_hint_callback; + GB_joyp_write_callback_t joyp_write_callback; + GB_icd_pixel_callback_t icd_pixel_callback; + GB_icd_vreset_callback_t icd_hreset_callback; + GB_icd_vreset_callback_t icd_vreset_callback; + GB_read_memory_callback_t read_memory_callback; + GB_write_memory_callback_t write_memory_callback; + GB_boot_rom_load_callback_t boot_rom_load_callback; + GB_print_image_callback_t printer_callback; + GB_workboy_set_time_callback workboy_set_time_callback; + GB_workboy_get_time_callback workboy_get_time_callback; + GB_execution_callback_t execution_callback; + GB_lcd_line_callback_t lcd_line_callback; + GB_lcd_status_callback_t lcd_status_callback; + /*** Debugger ***/ + volatile bool debug_stopped, debug_disable; + bool debug_fin_command, debug_next_command; + + /* Breakpoints */ + uint16_t n_breakpoints; + struct GB_breakpoint_s *breakpoints; + bool has_jump_to_breakpoints, has_software_breakpoints; + void *nontrivial_jump_state; + bool non_trivial_jump_breakpoint_occured; + + signed debug_call_depth; + uint16_t sp_for_call_depth[0x200]; /* Should be much more than enough */ + uint16_t addr_for_call_depth[0x200]; + + /* Backtrace */ + unsigned backtrace_size; + uint16_t backtrace_sps[0x200]; + struct { + uint16_t bank; + uint16_t addr; + } backtrace_returns[0x200]; + + /* Watchpoints */ + uint16_t n_watchpoints; + struct GB_watchpoint_s *watchpoints; + + /* Symbol tables */ + GB_symbol_map_t **bank_symbols; + size_t n_symbol_maps; + GB_reversed_symbol_map_t reversed_symbol_map; + + /* Ticks command */ + uint64_t debugger_ticks; + uint64_t absolute_debugger_ticks; + + /* Undo */ + uint8_t *undo_state; + const char *undo_label; + + /* Rewind */ + size_t rewind_buffer_length; + struct { + uint8_t *key_state; + uint8_t *compressed_states[GB_REWIND_FRAMES_PER_KEY]; + unsigned pos; + } *rewind_sequences; // lasts about 4 seconds + size_t rewind_pos; + + /* SGB - saved and allocated optionally */ + GB_sgb_t *sgb; + + double sgb_intro_jingle_phases[7]; + double sgb_intro_sweep_phase; + double sgb_intro_sweep_previous_sample; + + /* Cheats */ + bool cheat_enabled; + size_t cheat_count; + GB_cheat_t **cheats; + GB_cheat_hash_t *cheat_hash[256]; + + /* Misc */ + bool turbo; + bool turbo_dont_skip; + bool disable_rendering; + uint8_t boot_rom[0x900]; + bool vblank_just_occured; // For slow operations involving syscalls; these should only run once per vblank + unsigned cycles_since_run; // How many cycles have passed since the last call to GB_run(), in 8MHz units + double clock_multiplier; + GB_rumble_mode_t rumble_mode; + uint32_t rumble_on_cycles; + uint32_t rumble_off_cycles; + + /* Temporary state */ + bool wx_just_changed; + bool tile_sel_glitch; + bool disable_oam_corruption; // For safe memory reads + bool in_dma_read; + bool hdma_in_progress; + uint16_t addr_for_hdma_conflict; + + GB_gbs_header_t gbs_header; + ) +}; + +#ifndef GB_INTERNAL +struct GB_gameboy_s { + alignas(struct GB_gameboy_internal_s) uint8_t __internal[sizeof(struct GB_gameboy_internal_s)]; +}; +#endif + + +#ifndef __printflike +/* Missing from Linux headers. */ +#define __printflike(fmtarg, firstvararg) \ +__attribute__((__format__ (__printf__, fmtarg, firstvararg))) +#endif + +void GB_init(GB_gameboy_t *gb, GB_model_t model); +bool GB_is_inited(GB_gameboy_t *gb); +bool GB_is_cgb(const GB_gameboy_t *gb); +bool GB_is_cgb_in_cgb_mode(GB_gameboy_t *gb); +bool GB_is_sgb(GB_gameboy_t *gb); // Returns true if the model is SGB or SGB2 +bool GB_is_hle_sgb(GB_gameboy_t *gb); // Returns true if the model is SGB or SGB2 and the SFC/SNES side is HLE'd +GB_model_t GB_get_model(GB_gameboy_t *gb); +void GB_free(GB_gameboy_t *gb); +void GB_reset(GB_gameboy_t *gb); +void GB_switch_model_and_reset(GB_gameboy_t *gb, GB_model_t model); + +/* Returns the time passed, in 8MHz ticks. */ +unsigned GB_run(GB_gameboy_t *gb); +/* Returns the time passed since the last frame, in nanoseconds */ +uint64_t GB_run_frame(GB_gameboy_t *gb); + +typedef enum { + GB_DIRECT_ACCESS_ROM, + GB_DIRECT_ACCESS_RAM, + GB_DIRECT_ACCESS_CART_RAM, + GB_DIRECT_ACCESS_VRAM, + GB_DIRECT_ACCESS_HRAM, + GB_DIRECT_ACCESS_IO, /* Warning: Some registers can only be read/written correctly via GB_memory_read/write. */ + GB_DIRECT_ACCESS_BOOTROM, + GB_DIRECT_ACCESS_OAM, + GB_DIRECT_ACCESS_BGP, + GB_DIRECT_ACCESS_OBP, + GB_DIRECT_ACCESS_IE, + GB_DIRECT_ACCESS_ROM0, // Identical to ROM, but returns the correct rom0 bank in the bank output argument +} GB_direct_access_t; + +/* Returns a mutable pointer to various hardware memories. If that memory is banked, the current bank + is returned at *bank, even if only a portion of the memory is banked. */ +void *GB_get_direct_access(GB_gameboy_t *gb, GB_direct_access_t access, size_t *size, uint16_t *bank); +GB_registers_t *GB_get_registers(GB_gameboy_t *gb); + +void *GB_get_user_data(GB_gameboy_t *gb); +void GB_set_user_data(GB_gameboy_t *gb, void *data); + +int GB_load_boot_rom(GB_gameboy_t *gb, const char *path); +void GB_load_boot_rom_from_buffer(GB_gameboy_t *gb, const unsigned char *buffer, size_t size); +int GB_load_rom(GB_gameboy_t *gb, const char *path); +void GB_load_rom_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size); +int GB_load_isx(GB_gameboy_t *gb, const char *path); +int GB_load_gbs_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size, GB_gbs_info_t *info); +int GB_load_gbs(GB_gameboy_t *gb, const char *path, GB_gbs_info_t *info); +void GB_gbs_switch_track(GB_gameboy_t *gb, uint8_t track); + +int GB_save_battery_size(GB_gameboy_t *gb); +int GB_save_battery_to_buffer(GB_gameboy_t *gb, uint8_t *buffer, size_t size); +int GB_save_battery(GB_gameboy_t *gb, const char *path); + +void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size); +void GB_load_battery(GB_gameboy_t *gb, const char *path); + +void GB_set_turbo_mode(GB_gameboy_t *gb, bool on, bool no_frame_skip); +void GB_set_rendering_disabled(GB_gameboy_t *gb, bool disabled); + +void GB_log(GB_gameboy_t *gb, const char *fmt, ...) __printflike(2, 3); +void GB_attributed_log(GB_gameboy_t *gb, GB_log_attributes attributes, const char *fmt, ...) __printflike(3, 4); + +void GB_set_pixels_output(GB_gameboy_t *gb, uint32_t *output); +uint32_t *GB_get_pixels_output(GB_gameboy_t *gb); +void GB_set_border_mode(GB_gameboy_t *gb, GB_border_mode_t border_mode); + +void GB_set_infrared_input(GB_gameboy_t *gb, bool state); + +void GB_set_vblank_callback(GB_gameboy_t *gb, GB_vblank_callback_t callback); +void GB_set_log_callback(GB_gameboy_t *gb, GB_log_callback_t callback); +void GB_set_input_callback(GB_gameboy_t *gb, GB_input_callback_t callback); +void GB_set_async_input_callback(GB_gameboy_t *gb, GB_input_callback_t callback); +void GB_set_rgb_encode_callback(GB_gameboy_t *gb, GB_rgb_encode_callback_t callback); +void GB_set_infrared_callback(GB_gameboy_t *gb, GB_infrared_callback_t callback); +void GB_set_rumble_callback(GB_gameboy_t *gb, GB_rumble_callback_t callback); +void GB_set_update_input_hint_callback(GB_gameboy_t *gb, GB_update_input_hint_callback_t callback); +/* Called when a new boot ROM is needed. The callback should call GB_load_boot_rom or GB_load_boot_rom_from_buffer */ +void GB_set_boot_rom_load_callback(GB_gameboy_t *gb, GB_boot_rom_load_callback_t callback); + +void GB_set_execution_callback(GB_gameboy_t *gb, GB_execution_callback_t callback); +void GB_set_lcd_line_callback(GB_gameboy_t *gb, GB_lcd_line_callback_t callback); +void GB_set_lcd_status_callback(GB_gameboy_t *gb, GB_lcd_status_callback_t callback); + +void GB_set_palette(GB_gameboy_t *gb, const GB_palette_t *palette); +const GB_palette_t *GB_get_palette(GB_gameboy_t *gb); + +/* These APIs are used when using internal clock */ +void GB_set_serial_transfer_bit_start_callback(GB_gameboy_t *gb, GB_serial_transfer_bit_start_callback_t callback); +void GB_set_serial_transfer_bit_end_callback(GB_gameboy_t *gb, GB_serial_transfer_bit_end_callback_t callback); + +/* These APIs are used when using external clock */ +bool GB_serial_get_data_bit(GB_gameboy_t *gb); +void GB_serial_set_data_bit(GB_gameboy_t *gb, bool data); + +void GB_disconnect_serial(GB_gameboy_t *gb); + +/* For cartridges with an alarm clock */ +unsigned GB_time_to_alarm(GB_gameboy_t *gb); // 0 if no alarm + +/* For cartridges motion controls */ +bool GB_has_accelerometer(GB_gameboy_t *gb); +// In units of g (gravity's acceleration). +// Values within ±4 recommended +void GB_set_accelerometer_values(GB_gameboy_t *gb, double x, double y); + +/* For integration with SFC/SNES emulators */ +void GB_set_joyp_write_callback(GB_gameboy_t *gb, GB_joyp_write_callback_t callback); +void GB_set_icd_pixel_callback(GB_gameboy_t *gb, GB_icd_pixel_callback_t callback); +void GB_set_icd_hreset_callback(GB_gameboy_t *gb, GB_icd_hreset_callback_t callback); +void GB_set_icd_vreset_callback(GB_gameboy_t *gb, GB_icd_vreset_callback_t callback); + +uint32_t GB_get_clock_rate(GB_gameboy_t *gb); +uint32_t GB_get_unmultiplied_clock_rate(GB_gameboy_t *gb); +void GB_set_clock_multiplier(GB_gameboy_t *gb, double multiplier); + +unsigned GB_get_screen_width(GB_gameboy_t *gb); +unsigned GB_get_screen_height(GB_gameboy_t *gb); +double GB_get_usual_frame_rate(GB_gameboy_t *gb); +unsigned GB_get_player_count(GB_gameboy_t *gb); + +/* Handy ROM info APIs */ +// `title` must be at least 17 bytes in size +void GB_get_rom_title(GB_gameboy_t *gb, char *title); +uint32_t GB_get_rom_crc32(GB_gameboy_t *gb); + +#ifdef GB_INTERNAL +internal void GB_borrow_sgb_border(GB_gameboy_t *gb); +internal void GB_update_clock_rate(GB_gameboy_t *gb); +#endif + +#endif /* GB_h */ diff --git a/thirdparty/SameBoy-old/Core/graphics/agb_border.inc b/thirdparty/SameBoy-old/Core/graphics/agb_border.inc new file mode 100644 index 000000000..dd4ebbe88 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/graphics/agb_border.inc @@ -0,0 +1,522 @@ +static const uint16_t palette[] = { + 0x410A, 0x0421, 0x35AD, 0x4A52, 0x7FFF, 0x2D49, 0x0C42, 0x1484, + 0x18A5, 0x20C6, 0x6718, 0x5D6E, 0x0000, 0x0000, 0x0000, 0x0000, +}; + +static const uint16_t tilemap[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x0002, 0x0003, 0x0003, 0x0003, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0003, 0x0003, 0x0003, 0x4002, 0x4001, 0x0000, + 0x0000, 0x0006, 0x0007, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x4007, 0x4006, 0x0000, + 0x0000, 0x0009, 0x0008, 0x0008, 0x0008, 0x000A, 0x000B, 0x000B, + 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, + 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, 0x000B, + 0x000B, 0x000B, 0x400A, 0x0008, 0x0008, 0x0008, 0xC009, 0x0000, + 0x0000, 0x000C, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x400C, 0x0000, + 0x0000, 0x000E, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC00E, 0x0000, + 0x0000, 0x000F, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x400F, 0x0000, + 0x0000, 0x0010, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC010, 0x0000, + 0x0000, 0x0010, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC010, 0x0000, + 0x0000, 0x0011, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC011, 0x0000, + 0x0000, 0x0011, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC011, 0x0000, + 0x0000, 0x0012, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x4012, 0x0000, + 0x0000, 0x0013, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC013, 0x0000, + 0x0014, 0x0015, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x4015, 0x4014, + 0x0016, 0x0017, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC017, 0xC016, + 0x0016, 0x0017, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC017, 0xC016, + 0x0018, 0x0019, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x4019, 0x4018, + 0x001A, 0x001B, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0xC01B, 0xC01A, + 0x001C, 0x001D, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x401D, 0x401C, + 0x001E, 0x0008, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x0008, 0xC01E, + 0x001E, 0x0008, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x0008, 0xC01E, + 0x001E, 0x0008, 0x0008, 0x0008, 0x0008, 0x000D, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC00D, 0x0008, 0x0008, 0x0008, 0x0008, 0xC01E, + 0x001F, 0x801D, 0x0008, 0x0008, 0x0008, 0x0020, 0x0021, 0x0022, + 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, + 0x002B, 0x002C, 0x002D, 0x002D, 0x002D, 0x002D, 0x002D, 0x002D, + 0x002E, 0x0021, 0x4020, 0x0008, 0x0008, 0x0008, 0xC01D, 0x401F, + 0x002F, 0x0030, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0031, + 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, + 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, + 0x0042, 0x0043, 0x0008, 0x0008, 0x0008, 0x0008, 0x4030, 0x402F, + 0x0044, 0x0045, 0x0046, 0x0047, 0x0008, 0x0008, 0x0048, 0x0049, + 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, + 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, + 0x005A, 0x005B, 0x0008, 0x0008, 0x4047, 0x4046, 0x4045, 0x4044, + 0x0000, 0x0000, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, + 0x0061, 0x0062, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x4062, 0x0061, + 0x0061, 0x4060, 0x405F, 0x405E, 0x405D, 0x405C, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +}; + +const uint8_t tiles[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1F, 0x01, + 0x7F, 0x1F, 0xFF, 0x7E, 0xFF, 0xE1, 0xFF, 0x9F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x1E, + 0x1F, 0x60, 0x7F, 0x80, 0xFF, 0x00, 0xBF, 0x40, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x03, 0x01, 0x07, 0x03, 0x07, 0x03, 0x07, 0x06, + 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, + 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x06, 0x01, + 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, + 0xFF, 0xBF, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x40, 0x7F, 0x80, 0x7F, 0x80, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x0F, 0x0E, 0x0F, 0x0E, 0x0F, 0x0E, 0x0F, 0x0E, + 0x0F, 0x0E, 0x0F, 0x0E, 0x0F, 0x0E, 0x0F, 0x0E, + 0x0E, 0x01, 0x0E, 0x01, 0x0E, 0x01, 0x0E, 0x01, + 0x0E, 0x01, 0x0E, 0x01, 0x0E, 0x01, 0x0E, 0x01, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFE, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x0F, 0x0E, 0x0F, 0x0E, 0x1F, 0x1B, 0x1F, 0x1B, + 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, + 0x0E, 0x01, 0x0E, 0x01, 0x1B, 0x04, 0x1B, 0x04, + 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, + 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, + 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, + 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, + 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, + 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, + 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, 0x1F, 0x1B, + 0x1F, 0x1B, 0x3F, 0x37, 0x3F, 0x37, 0x3F, 0x37, + 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, 0x1B, 0x04, + 0x1B, 0x04, 0x37, 0x08, 0x37, 0x08, 0x37, 0x08, + 0x3F, 0x37, 0x3F, 0x37, 0x3F, 0x37, 0x3F, 0x37, + 0x3F, 0x37, 0x3F, 0x37, 0x3F, 0x37, 0x3F, 0x37, + 0x37, 0x08, 0x37, 0x08, 0x37, 0x08, 0x37, 0x08, + 0x37, 0x08, 0x37, 0x08, 0x37, 0x08, 0x37, 0x08, + 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, + 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, + 0x6F, 0x10, 0x6F, 0x10, 0x6F, 0x10, 0x6F, 0x10, + 0x6F, 0x10, 0x6F, 0x10, 0x6F, 0x10, 0x6F, 0x10, + 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0xFF, 0xDF, + 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, + 0x6F, 0x10, 0x6F, 0x10, 0x6F, 0x10, 0xDF, 0x20, + 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, + 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, + 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, + 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, + 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, + 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0xBF, + 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, 0xDF, 0x20, + 0xDF, 0x20, 0xDF, 0x20, 0xBF, 0x40, 0xBF, 0x40, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, + 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xBF, + 0xBF, 0x40, 0xBF, 0x40, 0xBF, 0x40, 0xBF, 0x40, + 0xBF, 0x40, 0xBF, 0x40, 0xBF, 0x40, 0xBF, 0x40, + 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xFF, 0xBF, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xBF, 0x40, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, + 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, + 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, + 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, + 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, 0x06, 0x01, + 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0xFF, 0xE7, 0xF8, 0xDF, 0xE3, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xF8, 0x00, 0xE4, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFF, 0xCE, 0x3F, 0xF5, 0x8E, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0x4E, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0xFF, 0xEE, 0x1F, 0xB5, 0x4E, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x1F, 0x00, 0x0E, 0xA0, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0xFF, 0xFB, 0x07, 0x04, 0x73, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x07, 0x00, 0x03, 0x88, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x80, 0xFF, 0x7F, 0x80, 0x82, 0x39, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x80, 0x00, 0x01, 0x44, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0xFE, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x83, 0x7C, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x42, 0x01, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFE, 0xFF, 0xBB, 0x7C, 0x4F, 0xB0, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x7C, 0x00, 0xB1, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0xFF, 0xF9, 0x06, 0xE7, 0xF8, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0E, 0xFF, 0xF5, 0x0E, 0x9B, 0x74, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x0E, 0x00, 0x94, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0xFF, 0xF7, 0x0F, 0xBF, 0x47, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x0F, 0x00, 0xA7, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, + 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, + 0x03, 0x04, 0x01, 0x02, 0x01, 0x02, 0x00, 0x01, + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xBF, 0xFF, 0xDF, + 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0x7F, 0x80, 0xBF, 0x40, 0xBF, 0x40, 0xDF, 0x20, + 0xB0, 0xD8, 0xA0, 0xD3, 0x67, 0x84, 0x47, 0xA4, + 0x61, 0x81, 0xA0, 0xD0, 0xB4, 0xCA, 0x7E, 0x81, + 0xD7, 0x08, 0xCC, 0x13, 0x98, 0x20, 0x98, 0x00, + 0x9E, 0x20, 0xCF, 0x00, 0xCD, 0x02, 0x80, 0x01, + 0x32, 0x2D, 0x13, 0x6D, 0x34, 0x48, 0xFC, 0x02, + 0x7C, 0x00, 0x78, 0x05, 0x30, 0x49, 0x20, 0x50, + 0xCD, 0x00, 0xAC, 0x40, 0x49, 0x82, 0x01, 0x02, + 0x07, 0x80, 0xC2, 0x05, 0x86, 0x41, 0x9F, 0x40, + 0x15, 0x2E, 0x09, 0x06, 0x09, 0x16, 0x0B, 0xD4, + 0xC6, 0x49, 0x8E, 0x40, 0xCF, 0xC8, 0x06, 0x01, + 0xCE, 0x20, 0xE6, 0x10, 0xE6, 0x00, 0x24, 0xD0, + 0x39, 0x80, 0x38, 0x01, 0x31, 0x00, 0xF8, 0x00, + 0x0C, 0x8B, 0x85, 0x8A, 0x03, 0x84, 0x27, 0x20, + 0x22, 0x35, 0x12, 0x34, 0x20, 0x12, 0x10, 0x20, + 0x73, 0x00, 0x72, 0x08, 0x7C, 0x80, 0xDC, 0x01, + 0xC8, 0x11, 0xC9, 0x06, 0xCD, 0x22, 0xEF, 0x10, + 0x83, 0x44, 0x86, 0x01, 0x03, 0x85, 0x26, 0x21, + 0x46, 0x69, 0x46, 0x68, 0x8E, 0xCA, 0x86, 0x88, + 0x39, 0x40, 0x78, 0x84, 0x7C, 0x80, 0xD8, 0x01, + 0x90, 0x29, 0xD1, 0x28, 0x73, 0x00, 0xB3, 0x40, + 0x00, 0x01, 0x01, 0x00, 0x3F, 0x00, 0x3F, 0x40, + 0x03, 0x02, 0x01, 0x02, 0x41, 0x7C, 0x7F, 0x00, + 0xFE, 0x00, 0xFF, 0x00, 0xC0, 0x00, 0x80, 0x40, + 0xFC, 0x00, 0xFC, 0x00, 0x80, 0x02, 0xC0, 0x00, + 0xC0, 0x00, 0x80, 0x4C, 0xCC, 0x43, 0x8E, 0x52, + 0x80, 0x4C, 0x80, 0x00, 0x12, 0x1E, 0x9E, 0x00, + 0x7F, 0x00, 0x33, 0x0C, 0x32, 0x01, 0x23, 0x50, + 0x33, 0x4C, 0x7F, 0x00, 0x61, 0x80, 0xF1, 0x00, + 0x7C, 0x02, 0x30, 0x48, 0x31, 0x40, 0x61, 0x50, + 0x87, 0xE4, 0xE3, 0x84, 0x23, 0x44, 0x43, 0x44, + 0x85, 0x42, 0x87, 0x40, 0x8F, 0x50, 0x8C, 0x12, + 0x78, 0x00, 0x18, 0x20, 0xB8, 0x00, 0x98, 0x24, + 0x03, 0x04, 0x03, 0xE0, 0xF1, 0x12, 0xF0, 0x09, + 0xF9, 0x09, 0xF9, 0x08, 0xE1, 0x12, 0xF1, 0x12, + 0xF8, 0x00, 0x1E, 0xE0, 0x0C, 0x02, 0x07, 0x08, + 0x07, 0x00, 0x06, 0x00, 0x1C, 0x02, 0x0C, 0x00, + 0x9F, 0x91, 0x86, 0x88, 0xC4, 0x4C, 0x80, 0x4C, + 0xE1, 0x20, 0xC1, 0x22, 0x23, 0xD4, 0x22, 0xD5, + 0x60, 0x00, 0xFB, 0x00, 0x37, 0x00, 0x73, 0x0C, + 0x1F, 0x00, 0x3C, 0x00, 0xC8, 0x14, 0xC9, 0x14, + 0x16, 0x2F, 0x76, 0x4F, 0x2D, 0xDE, 0xDD, 0xBE, + 0xBA, 0x7D, 0x7A, 0xFD, 0x7A, 0xFD, 0xF4, 0xF8, + 0xCF, 0x00, 0x8F, 0x00, 0x5E, 0x80, 0xBE, 0x00, + 0x7D, 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xF9, 0x02, + 0xFF, 0x00, 0xBF, 0x78, 0x86, 0x09, 0x86, 0x89, + 0x06, 0x25, 0x02, 0x25, 0x42, 0x45, 0x60, 0x11, + 0x00, 0x00, 0x09, 0x00, 0x70, 0x81, 0x70, 0x09, + 0xDC, 0x21, 0xD8, 0x01, 0x98, 0x25, 0xCC, 0x13, + 0xFF, 0x00, 0xF3, 0xF8, 0x02, 0x03, 0x01, 0x30, + 0x39, 0x09, 0x30, 0x09, 0x31, 0x09, 0x20, 0x19, + 0x00, 0x00, 0x01, 0x04, 0xFC, 0x00, 0xCF, 0x30, + 0xE6, 0x00, 0xE6, 0x01, 0xE6, 0x00, 0xF6, 0x08, + 0xFF, 0x00, 0xFA, 0xC7, 0x18, 0x21, 0x09, 0x10, + 0x88, 0x99, 0x93, 0x1A, 0x83, 0x11, 0xC2, 0x41, + 0x00, 0x00, 0x00, 0x20, 0xC6, 0x21, 0xFF, 0x00, + 0x67, 0x00, 0xE4, 0x08, 0x6F, 0x10, 0x3C, 0x00, + 0xFD, 0x02, 0xB5, 0x3A, 0xC7, 0x44, 0x03, 0x84, + 0x83, 0x24, 0x21, 0xB0, 0x21, 0x12, 0x21, 0x02, + 0x02, 0x00, 0x02, 0x40, 0x3C, 0x00, 0xF8, 0x00, + 0xD8, 0x24, 0x4C, 0x92, 0xEC, 0x00, 0xCC, 0x12, + 0xFF, 0x00, 0xFF, 0xF3, 0x1C, 0x14, 0x0C, 0x04, + 0x00, 0x0C, 0x04, 0x24, 0x00, 0x24, 0x10, 0x30, + 0x00, 0x00, 0x10, 0x04, 0xE3, 0x00, 0xFB, 0x00, + 0xF3, 0x08, 0xDB, 0x20, 0xDB, 0x04, 0xCF, 0x00, + 0xFF, 0x00, 0xEC, 0x3E, 0xC1, 0x01, 0x01, 0x8E, + 0x8F, 0x10, 0x0F, 0x90, 0x0F, 0x90, 0x0D, 0x09, + 0x00, 0x00, 0x20, 0x01, 0x7E, 0x00, 0xF1, 0x0E, + 0xE0, 0x10, 0x60, 0x10, 0x60, 0x10, 0x79, 0x82, + 0xFF, 0x00, 0x7F, 0xFC, 0x03, 0x82, 0x01, 0x9E, + 0x13, 0x80, 0x03, 0x80, 0x03, 0x9C, 0x0F, 0x90, + 0x00, 0x00, 0x02, 0x00, 0x7C, 0x80, 0x60, 0x9C, + 0x60, 0x9C, 0x7C, 0x80, 0x60, 0x9C, 0x70, 0x80, + 0xFF, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xEF, 0xFF, 0xF7, 0x7F, 0x7B, 0x3F, 0x3C, + 0x1F, 0x1F, 0x0F, 0x0F, 0x03, 0x03, 0x00, 0x00, + 0xEF, 0x10, 0x77, 0x88, 0x3B, 0x44, 0x1C, 0x23, + 0x0F, 0x10, 0x03, 0x0C, 0x00, 0x03, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x3F, 0xC0, 0xC3, 0x3C, 0xFC, 0x03, 0x3F, 0xC0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xC1, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0xC0, 0xC1, 0x3E, + 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xEA, 0x14, 0xC0, 0x00, 0x80, 0x21, 0x7F, 0x92, + 0x9F, 0xE0, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x27, 0x18, 0x7F, 0x00, 0x1E, 0x61, 0x9A, 0x04, + 0xE0, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x73, 0x53, 0x47, 0x44, 0x46, 0x25, 0xFD, 0x03, + 0xF9, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x8C, 0x00, 0xD8, 0x20, 0x1D, 0xA0, 0x03, 0x00, + 0x07, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xC7, 0xE1, 0xE6, 0x05, 0x42, 0xA5, 0xBF, 0xC0, + 0x9F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x18, 0x24, 0x38, 0x01, 0xB8, 0x05, 0xC0, 0x00, + 0xE0, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x21, 0x11, 0x31, 0x49, 0x33, 0x4A, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xDE, 0x00, 0x87, 0x48, 0x84, 0x48, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xCC, 0x02, 0x8E, 0x4A, 0xCC, 0x42, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x71, 0x08, 0x39, 0x00, 0x31, 0x02, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x3D, 0x40, 0x03, 0x02, 0x03, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBC, 0x02, 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x12, 0x82, 0x80, 0x80, 0x01, 0x83, 0xFF, 0x00, + 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x61, 0x1C, 0x7F, 0x00, 0x7C, 0x82, 0x00, 0x00, + 0x01, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x22, 0x52, 0x30, 0xC0, 0x58, 0xA4, 0x8F, 0x72, + 0x73, 0xFC, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x8C, 0x11, 0x4F, 0x90, 0xA3, 0x0C, 0x73, 0x00, + 0xFC, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x23, 0xA4, 0x06, 0x0D, 0x05, 0x1B, 0xBB, 0x07, + 0xE7, 0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x98, 0x44, 0xF5, 0x08, 0xEB, 0x00, 0x87, 0x40, + 0x1F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x66, 0x85, 0xE2, 0xA5, 0x66, 0x81, 0xBF, 0xC1, + 0x99, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x99, 0x00, 0xB9, 0x00, 0x9D, 0x20, 0xC1, 0x00, + 0xE7, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xF6, 0xFA, 0xFC, 0xF2, 0xF7, 0xF8, 0xFB, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF9, 0x00, 0xF1, 0x02, 0xF8, 0x00, 0xFC, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x52, 0x53, 0x30, 0x23, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x8C, 0x21, 0xCC, 0x13, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x03, 0x03, 0x06, 0xFE, 0x01, 0xF9, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0x02, 0xFA, 0x04, 0x01, 0x00, 0x07, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x86, 0x05, 0x46, 0xA0, 0x5F, 0xB8, 0xBF, 0xC0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x38, 0x41, 0x99, 0x26, 0xB8, 0x00, 0xC0, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x30, 0x28, 0x09, 0x09, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC6, 0x09, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x20, 0x38, 0x38, 0x20, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD7, 0x08, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x80, 0x41, 0xA1, 0x61, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3E, 0x40, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x01, 0x82, 0x01, 0x82, 0xFF, 0x00, 0xFC, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7C, 0x82, 0x7C, 0x82, 0x00, 0x00, 0x03, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x3F, 0x3F, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x3C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0x3F, 0x3F, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x01, 0x3F, 0xC0, 0x01, 0x3E, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0xC0, 0xC0, 0x3F, 0xFF, 0x00, 0x3F, 0xC0, + 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x3F, 0xC0, 0xC0, 0x3F, 0xFF, 0x00, + 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0xFC, 0x03, + 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x03, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x03, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x03, 0xFC, + 0xFC, 0x03, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, +}; diff --git a/thirdparty/SameBoy-old/Core/graphics/cgb_border.inc b/thirdparty/SameBoy-old/Core/graphics/cgb_border.inc new file mode 100644 index 000000000..755312a43 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/graphics/cgb_border.inc @@ -0,0 +1,446 @@ +static const uint16_t palette[] = { + 0x7C1A, 0x0000, 0x0011, 0x3DEF, 0x6318, 0x7FFF, 0x1EBA, 0x19AF, + 0x1EAF, 0x4648, 0x7FC0, 0x2507, 0x1484, 0x5129, 0x5010, 0x2095, +}; + +static const uint16_t tilemap[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x4002, 0x4001, 0x0000, + 0x0000, 0x0004, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x4004, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0007, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x4007, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x000A, 0x000B, 0x400A, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x800A, 0x000C, 0xC00A, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x0006, 0x0005, 0x0005, 0x0005, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC009, 0x0005, 0x0005, 0x0005, 0xC006, 0x0000, + 0x0000, 0x000D, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x000E, + 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, + 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, + 0x001F, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x400D, 0x0000, + 0x0000, 0x0020, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0021, + 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, + 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, + 0x0032, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x4020, 0x0000, + 0x0000, 0x0033, 0x0034, 0x0035, 0x0036, 0x0005, 0x0005, 0x0037, + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x0040, 0x0005, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, + 0x0047, 0x0005, 0x0005, 0x4036, 0x4035, 0x4034, 0x4033, 0x0000, + 0x0000, 0x0000, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, + 0x004E, 0x004E, 0x004F, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x404F, 0x004E, 0x004E, + 0x404D, 0x004C, 0x404B, 0x404A, 0x4049, 0x4048, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +const uint8_t tiles[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, + 0x01, 0x11, 0x06, 0x26, 0x04, 0x24, 0x08, 0x48, + 0x00, 0x00, 0x01, 0x01, 0x07, 0x07, 0x0F, 0x0F, + 0x1E, 0x1F, 0x39, 0x3F, 0x3B, 0x3F, 0x77, 0x7F, + 0x00, 0x7F, 0x00, 0x80, 0x00, 0x00, 0x7F, 0x7F, + 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x08, 0x48, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x77, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, + 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, + 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, + 0xBD, 0xBD, 0x7E, 0x66, 0x7E, 0xFF, 0x7E, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, + 0x7E, 0xFF, 0xFF, 0xE7, 0x7E, 0x7E, 0x7E, 0x7E, + 0x7E, 0xFF, 0x3C, 0xFF, 0x81, 0xFF, 0xC3, 0xFF, + 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7E, 0x7E, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x81, + 0x81, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x08, 0x48, 0x08, 0x48, 0x08, 0x48, 0x08, 0x48, + 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, 0x6F, 0x7F, + 0x37, 0x7F, 0x37, 0x7F, 0x37, 0x7F, 0x37, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xDF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xC7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xE3, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x9F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0xE1, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x27, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x9F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xC2, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x84, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x08, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, + 0x08, 0x48, 0x08, 0x48, 0x08, 0x48, 0x08, 0x48, + 0x08, 0x48, 0x04, 0x24, 0x04, 0x24, 0x02, 0x12, + 0x37, 0x7F, 0x37, 0x7F, 0x37, 0x7F, 0x37, 0x7F, + 0x37, 0x7F, 0x1B, 0x3F, 0x1B, 0x3F, 0x0D, 0x1F, + 0x0F, 0x08, 0x0E, 0x00, 0x1E, 0x12, 0x1E, 0x12, + 0x1F, 0x10, 0x0F, 0x08, 0x02, 0x02, 0x00, 0x00, + 0xF7, 0xF8, 0xFF, 0xF0, 0xED, 0xE3, 0xED, 0xE1, + 0xEF, 0xE0, 0xF7, 0xF0, 0xFD, 0xFC, 0xFF, 0xFF, + 0xF0, 0x10, 0x40, 0x00, 0x41, 0x41, 0x00, 0x00, + 0x83, 0x82, 0xE3, 0x20, 0xC7, 0x04, 0xC7, 0x00, + 0xEF, 0x1F, 0xFF, 0x1F, 0xBE, 0xFF, 0xFF, 0xFE, + 0x7D, 0x7E, 0xDF, 0x3C, 0xFB, 0x18, 0xFF, 0x18, + 0x60, 0x00, 0x70, 0x00, 0xF8, 0x08, 0xB0, 0x00, + 0xD8, 0x40, 0x3C, 0x24, 0x5C, 0x44, 0xFC, 0x00, + 0xFF, 0x8F, 0xFF, 0x0F, 0xF7, 0x07, 0xFF, 0x07, + 0xBF, 0x47, 0xDB, 0x47, 0xBB, 0x03, 0xFF, 0x03, + 0x3C, 0x04, 0x78, 0x00, 0x78, 0x00, 0xEC, 0x80, + 0xFE, 0x92, 0xE7, 0x83, 0xE5, 0x80, 0x4F, 0x08, + 0xFB, 0x83, 0xFF, 0x83, 0xFF, 0x83, 0x7F, 0x83, + 0x6D, 0x93, 0x7C, 0x10, 0x7F, 0x10, 0xF7, 0x10, + 0x3C, 0x00, 0x7C, 0x40, 0x78, 0x00, 0xC8, 0x80, + 0xFC, 0x24, 0xBC, 0x24, 0xFD, 0x65, 0x3D, 0x25, + 0xFF, 0xC3, 0xBF, 0x83, 0xFF, 0x83, 0x7F, 0x03, + 0xDB, 0x23, 0xDB, 0x23, 0x9A, 0x67, 0xDA, 0x47, + 0xFF, 0x80, 0xFF, 0x80, 0xE0, 0x80, 0x40, 0x00, + 0xFF, 0x01, 0xFF, 0x01, 0xDF, 0x1F, 0xE0, 0x20, + 0x7F, 0x80, 0x7F, 0x00, 0x7F, 0x1F, 0xFF, 0x1F, + 0xFE, 0x00, 0xFE, 0x00, 0xE0, 0x01, 0xDF, 0x3F, + 0xBF, 0xA0, 0xB9, 0xA0, 0x10, 0x00, 0x11, 0x01, + 0x3B, 0x00, 0x3F, 0x00, 0x7E, 0x4E, 0x78, 0x48, + 0x5F, 0x40, 0x5F, 0xC0, 0xFF, 0xC7, 0xFE, 0xC7, + 0xFF, 0xC0, 0xFF, 0xC0, 0xB1, 0xC4, 0xB7, 0x8F, + 0xE3, 0x22, 0xC7, 0x04, 0xCE, 0x08, 0xE6, 0x20, + 0xCE, 0x42, 0xDE, 0x52, 0xFE, 0x32, 0xFC, 0x30, + 0xDD, 0x3E, 0xFB, 0x18, 0xF7, 0x18, 0xDF, 0x31, + 0xBD, 0x31, 0xAD, 0x23, 0xCD, 0x31, 0xCF, 0x11, + 0xFE, 0x02, 0x9E, 0x00, 0x86, 0x80, 0x06, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x07, 0x01, 0x07, 0x01, + 0xFD, 0x03, 0xFF, 0x01, 0x7F, 0xF0, 0xFF, 0xF8, + 0xFF, 0xF8, 0xFF, 0xF8, 0xFE, 0xF8, 0xFE, 0xF1, + 0x38, 0x08, 0x71, 0x41, 0x1F, 0x06, 0x39, 0x20, + 0x0F, 0x00, 0x0F, 0x01, 0x04, 0x00, 0x0C, 0x00, + 0xF7, 0x87, 0xBE, 0xC6, 0xF9, 0xC6, 0xDF, 0xE0, + 0xFF, 0xE0, 0xFE, 0xF1, 0xFF, 0xF1, 0xFF, 0xF1, + 0x70, 0x10, 0xE0, 0x20, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEF, 0x1F, 0xDF, 0x1F, 0xFF, 0x3F, 0xFF, 0x7F, + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0x7F, 0x7F, 0x78, 0x78, 0xF0, 0xF0, + 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, + 0xDF, 0xFF, 0xBD, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, + 0xE7, 0xE0, 0xFF, 0xF0, 0xFE, 0xF0, 0x1C, 0x00, + 0x3C, 0x20, 0x3C, 0x24, 0x3C, 0x24, 0x3C, 0x20, + 0xFF, 0xFF, 0xEF, 0xFF, 0x6F, 0xFF, 0xFF, 0xFF, + 0xDF, 0xFF, 0xDB, 0xFF, 0xDB, 0xFF, 0xDF, 0xFF, + 0xF8, 0x00, 0xFC, 0xC0, 0x1F, 0x03, 0x1F, 0x13, + 0x1F, 0x13, 0x1E, 0x02, 0x1E, 0x02, 0x3E, 0x02, + 0xFF, 0xFF, 0x3F, 0xFF, 0xFC, 0xFF, 0xEC, 0xFF, + 0xED, 0xFE, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, + 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, + 0x20, 0x21, 0x00, 0x01, 0x00, 0x01, 0x40, 0x41, + 0x8F, 0x7F, 0x1F, 0xFF, 0x1F, 0xFF, 0x3F, 0xDE, + 0x1F, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x7F, 0xBE, + 0x40, 0x7F, 0x84, 0xFF, 0x11, 0xF1, 0x20, 0xE0, + 0x20, 0xE0, 0x01, 0xC1, 0x01, 0xC1, 0x22, 0xE3, + 0xFF, 0x80, 0xFF, 0x00, 0xFF, 0x0E, 0xFF, 0x1F, + 0xDF, 0x3F, 0xFE, 0x3F, 0xFF, 0x3E, 0xFD, 0x1E, + 0x47, 0xC0, 0x27, 0xE0, 0x2F, 0xE8, 0x0F, 0xE9, + 0x0F, 0xE1, 0x0F, 0xE0, 0x3F, 0xF0, 0x3F, 0xF1, + 0xF8, 0x3F, 0xF8, 0x1F, 0xF0, 0x1F, 0xF0, 0x1F, + 0xF0, 0x1F, 0xF0, 0x1F, 0xE0, 0x1F, 0xC0, 0x3F, + 0xFC, 0x00, 0xFE, 0xE2, 0x1E, 0x12, 0x1E, 0x12, + 0x3E, 0x22, 0xFC, 0x00, 0xF8, 0x08, 0xF0, 0x10, + 0x03, 0xFF, 0x01, 0xFF, 0xE1, 0xFF, 0xE1, 0xFF, + 0xC1, 0xFF, 0x03, 0xFF, 0x07, 0xFF, 0x0F, 0xFF, + 0x01, 0x11, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x1F, 0x07, 0x0F, 0x03, 0x07, 0x01, 0x03, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x30, 0x30, + 0x0C, 0x0C, 0x03, 0xC3, 0x00, 0x30, 0x00, 0x0C, + 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xCF, 0xFF, + 0xF3, 0xFF, 0x3C, 0xFF, 0x0F, 0x3F, 0x03, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0xC0, 0x3C, 0x3C, 0x03, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, + 0x15, 0x15, 0x3F, 0x20, 0x2F, 0x20, 0x06, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEA, 0xE6, 0xDF, 0xC0, 0xDF, 0xE0, 0xF9, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xE6, 0x20, 0x9E, 0x12, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xDF, 0x30, 0xED, 0x31, 0xFF, 0x63, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0E, 0x02, 0x1E, 0x12, 0x0D, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0x03, 0xED, 0xE1, 0xFE, 0xF1, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x4F, 0x08, 0xE6, 0x20, 0xE7, 0x21, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF7, 0x18, 0xDF, 0x18, 0xDE, 0x18, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xB9, 0xA1, 0x11, 0x01, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5E, 0x46, 0xFE, 0xC6, 0xFF, 0xC6, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3F, 0xFF, 0x01, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7E, 0x4E, 0x3F, 0x00, 0x3E, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB1, 0x8E, 0xFF, 0x80, 0xFF, 0x80, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xEE, 0x20, 0x8F, 0x08, 0x85, 0x84, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xDF, 0x30, 0xF7, 0x38, 0x7B, 0x7C, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xAE, 0xA2, 0xF8, 0x00, 0xE8, 0x08, 0xC0, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5D, 0xE1, 0xFF, 0x03, 0xF7, 0x0F, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0E, 0x02, 0x1E, 0x12, 0x1E, 0x12, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFD, 0xF1, 0xED, 0xF1, 0xED, 0xE3, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFB, 0xFB, 0x7F, 0x7F, 0x3F, 0x3F, 0x0C, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x75, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xDF, 0xC1, 0xDF, 0xD0, 0x8F, 0x88, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xEF, 0xFF, 0x77, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFA, 0x82, 0xF8, 0x08, 0xE0, 0x00, 0x81, 0x81, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7E, 0xFD, 0xF4, 0xFF, 0xFC, 0xFF, 0x7E, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7D, 0x7D, 0x02, 0x02, 0x02, 0x02, 0xFC, 0xFC, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xFE, 0x01, 0xFF, 0x01, 0xFF, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1C, 0xFF, 0x00, 0xFF, 0x41, 0x7F, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF7, 0x08, 0xFF, 0x00, 0xFF, 0x80, 0xE7, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x5E, 0xC2, 0x9C, 0x80, 0x1C, 0x04, 0x08, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE1, 0x3F, 0xE3, 0x7F, 0xE3, 0xFF, 0xF7, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0x80, 0x78, 0x08, 0x78, 0x48, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0xFF, 0x87, 0xFF, 0x87, 0xFF, 0xEF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0xFF, 0x03, 0x3F, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x1C, 0x03, 0x03, 0x00, 0xE0, 0x00, 0x1C, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0xFF, 0xFC, 0xFF, 0x1F, 0xFF, 0x03, 0x1F, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0xFC, 0x03, 0x03, 0x00, 0x00, + 0x00, 0xFC, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, + 0x03, 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x3F, 0x3F, + 0x00, 0x00, 0x00, 0xC0, 0x00, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFF, 0x00, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, + 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF +}; diff --git a/thirdparty/SameBoy-old/Core/graphics/dmg_border.inc b/thirdparty/SameBoy-old/Core/graphics/dmg_border.inc new file mode 100644 index 000000000..7db0673a4 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/graphics/dmg_border.inc @@ -0,0 +1,558 @@ +static const uint16_t palette[] = { + 0x0000, 0x0011, 0x18C6, 0x001A, 0x318C, 0x39CE, 0x5294, 0x5AD6, + 0x739C, 0x45A8, 0x4520, 0x18A5, 0x4A32, 0x2033, 0x20EC, 0x0000, +}; + +static const uint16_t tilemap[] = { + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0001, 0x0003, 0x0004, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x4004, 0x4003, 0x0001, + 0x0001, 0x0006, 0x0007, 0x0007, 0x0007, 0x0008, 0x0009, 0x000A, + 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, + 0x0013, 0x0014, 0x0015, 0x000E, 0x0016, 0x0017, 0x0018, 0x0019, + 0x001A, 0x001B, 0x001C, 0x0007, 0x0007, 0x0007, 0x4006, 0x0001, + 0x0001, 0x001D, 0x001E, 0x001E, 0x001E, 0x001F, 0x0020, 0x0021, + 0x0022, 0x0023, 0x0024, 0x0025, 0x4024, 0x0026, 0x0025, 0x0025, + 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, + 0x002F, 0x0030, 0x0031, 0x001E, 0x001E, 0x001E, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0034, 0x0035, 0x4034, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x8034, 0x0036, 0xC034, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0xC01D, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0x0037, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0032, 0x0038, 0x0001, + 0x0001, 0x001D, 0x0032, 0x0032, 0x0032, 0x0033, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC033, 0x0032, 0x0032, 0x0039, 0x003A, 0x0001, + 0x0001, 0x003B, 0x003C, 0x0032, 0x0032, 0xC03C, 0x003D, 0x003D, + 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, + 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, 0x003D, + 0x003D, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0001, 0x0001, + 0x0001, 0x0042, 0x0043, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0045, 0x0046, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, + 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, + 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x0001, 0x006C, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, +}; + +const uint8_t tiles[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x01, 0xFE, 0x06, 0xF9, 0x08, 0xF7, + 0x11, 0xEF, 0x22, 0xDB, 0x20, 0xDB, 0x40, 0xB7, + 0xFF, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xF8, 0x00, + 0xF1, 0x00, 0xE6, 0x04, 0xE4, 0x00, 0xC8, 0x00, + 0x7F, 0x80, 0x80, 0x7F, 0x00, 0xFF, 0x7F, 0xFF, + 0x80, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x80, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xB7, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0xC8, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x03, 0xFF, 0x02, 0xFF, + 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0xC1, 0xDD, 0x00, 0xC9, + 0x14, 0xFF, 0x14, 0xFF, 0x14, 0xFF, 0x00, 0xC9, + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x36, 0x22, + 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x36, 0x22, + 0x00, 0xFF, 0x00, 0xFF, 0xC7, 0xDF, 0x01, 0xCF, + 0x11, 0xFF, 0x11, 0xFF, 0x11, 0xFF, 0x01, 0xCF, + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x31, 0x20, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x31, 0x20, + 0x00, 0xFF, 0x00, 0xFF, 0xC2, 0xFF, 0x03, 0xFF, + 0x02, 0xFE, 0x02, 0xFE, 0x02, 0xFF, 0x02, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x03, 0x00, + 0x03, 0x01, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x08, 0xFF, 0x18, 0xFF, + 0x08, 0x4E, 0x08, 0x4E, 0x09, 0x1F, 0x08, 0x1C, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, + 0xB9, 0x10, 0xB9, 0xA1, 0xE9, 0xA0, 0xEB, 0x41, + 0x00, 0xFF, 0x00, 0xFF, 0x4F, 0xFF, 0x02, 0x1F, + 0x02, 0x4F, 0x02, 0x4F, 0xF2, 0xFF, 0x02, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0xE2, 0xA0, + 0xB2, 0xA0, 0xB2, 0x10, 0xF2, 0x00, 0x1A, 0x10, + 0x00, 0xFF, 0x00, 0xFF, 0xBC, 0xFD, 0x22, 0xFB, + 0x22, 0xFB, 0x3C, 0xFD, 0x24, 0xFF, 0x26, 0xF9, + 0x00, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x26, 0x00, + 0x26, 0x00, 0x3E, 0x00, 0x24, 0x00, 0x26, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x50, 0xFF, 0x49, 0xEF, + 0x49, 0xF0, 0x46, 0xFF, 0x49, 0xF0, 0x49, 0xEF, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x59, 0x00, + 0x4F, 0x06, 0x46, 0x00, 0x4F, 0x06, 0x59, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x88, 0xFF, 0x00, 0x72, + 0x00, 0xF2, 0x05, 0xFF, 0x00, 0xF8, 0x00, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x8D, 0x08, + 0x0D, 0x05, 0x05, 0x00, 0x07, 0x05, 0x87, 0x02, + 0x00, 0xFF, 0x00, 0xFF, 0x8A, 0xFF, 0x02, 0x27, + 0x02, 0x27, 0x52, 0xFF, 0x02, 0x8F, 0x02, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0xDA, 0x88, + 0xDA, 0x50, 0x52, 0x00, 0x72, 0x50, 0x72, 0x20, + 0x00, 0xFF, 0x00, 0xFF, 0xFA, 0xFF, 0x22, 0xFF, + 0x22, 0xFF, 0x23, 0xFF, 0x22, 0xFF, 0x22, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x22, 0x00, + 0x22, 0x00, 0x23, 0x00, 0x22, 0x00, 0x22, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x20, 0xFF, 0x20, 0xFF, + 0x20, 0xFF, 0xE0, 0xFF, 0x20, 0xFF, 0x20, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x20, 0x00, 0xE0, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x33, 0x37, 0x00, 0x77, + 0x80, 0xFF, 0x20, 0x27, 0x08, 0xFF, 0x00, 0x77, + 0x00, 0x00, 0x00, 0x00, 0xFB, 0x40, 0x88, 0x88, + 0x80, 0x00, 0xF8, 0x50, 0x08, 0x00, 0x88, 0x88, + 0x00, 0xFF, 0x00, 0xFF, 0xEF, 0xFF, 0x88, 0xFF, + 0x88, 0xFF, 0x8F, 0xFF, 0x88, 0xFF, 0x88, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x88, 0x00, + 0x88, 0x00, 0x8F, 0x00, 0x88, 0x00, 0x88, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0xF9, 0xFD, 0x80, 0xF9, + 0x84, 0xFF, 0xF4, 0xFF, 0x84, 0xFF, 0x80, 0xF9, + 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x86, 0x02, + 0x84, 0x00, 0xF4, 0x00, 0x84, 0x00, 0x86, 0x02, + 0x00, 0xFF, 0x00, 0xFF, 0xC0, 0xDF, 0x00, 0xCF, + 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x00, 0xCF, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x30, 0x20, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x20, + 0x00, 0xFF, 0x00, 0xFF, 0x30, 0x36, 0x00, 0x74, + 0x82, 0xFF, 0x22, 0x27, 0x0A, 0xFF, 0x00, 0x74, + 0x00, 0x00, 0x00, 0x00, 0xF9, 0x40, 0x8B, 0x89, + 0x82, 0x00, 0xFA, 0x50, 0x0A, 0x00, 0x8B, 0x89, + 0x00, 0xFF, 0x00, 0xFF, 0xE2, 0xEF, 0x02, 0xE7, + 0x0A, 0xFF, 0x0A, 0xFF, 0x0A, 0xFF, 0x00, 0xE4, + 0x00, 0x00, 0x00, 0x00, 0xF2, 0x00, 0x1A, 0x10, + 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x1B, 0x12, + 0x00, 0xFF, 0x00, 0xFF, 0x14, 0xFF, 0x16, 0xFF, + 0x14, 0xFC, 0x15, 0xFE, 0x14, 0xFF, 0x04, 0xCF, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x16, 0x00, + 0x17, 0x01, 0x15, 0x00, 0x14, 0x00, 0x34, 0x10, + 0x00, 0xFF, 0x00, 0xFF, 0x2F, 0xFF, 0x28, 0xFF, + 0x28, 0xFF, 0xA8, 0x7F, 0x28, 0x3F, 0x68, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x28, 0x00, + 0x28, 0x00, 0xA8, 0x00, 0xE8, 0x80, 0x68, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x3F, + 0x40, 0xFF, 0x40, 0xFF, 0x40, 0xFF, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x80, + 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xC0, 0x80, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFF, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xC1, 0xDD, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xC1, 0xDF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x02, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x4A, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x0A, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x22, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x82, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x20, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x60, 0x67, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x8F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xA2, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xF9, 0xFD, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xC0, 0xDF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x60, 0x66, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xE0, 0xEE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xC4, 0xDF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x2F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xFF, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, + 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x3C, 0xFF, + 0x7E, 0xFF, 0xE7, 0xE7, 0xFF, 0x7E, 0xFF, 0x7E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x7E, + 0x81, 0xC3, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x7E, 0xFF, 0x3C, 0xFF, 0x00, 0x7E, 0x81, + 0x3C, 0xC3, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0xC3, 0x81, + 0x7E, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF7, 0x00, 0xF7, 0x00, 0xF7, 0x00, 0xF7, + 0x00, 0xF7, 0x00, 0xED, 0x00, 0xED, 0x00, 0xED, + 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x09, 0x00, 0x11, 0x02, 0x11, 0x02, 0x11, 0x02, + 0x00, 0xED, 0x00, 0xDB, 0x00, 0xDB, 0x00, 0xDB, + 0x00, 0xB7, 0x00, 0xB7, 0x00, 0x6F, 0x00, 0x6F, + 0x11, 0x02, 0x23, 0x04, 0x23, 0x04, 0x23, 0x04, + 0x47, 0x08, 0x47, 0x08, 0x8F, 0x10, 0x8F, 0x10, + 0x00, 0xFE, 0x00, 0xFD, 0x00, 0xFB, 0x00, 0xF7, + 0x00, 0xEE, 0x00, 0xDD, 0x00, 0xBB, 0x00, 0x77, + 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, + 0x10, 0x01, 0x21, 0x02, 0x43, 0x04, 0x87, 0x08, + 0x00, 0xDF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x1F, 0x20, 0x3F, 0x40, 0x3F, 0x40, 0x7F, 0x80, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xB7, + 0x00, 0xB7, 0x00, 0xDB, 0x00, 0xDD, 0x00, 0xEE, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x88, 0x40, + 0x88, 0x40, 0xC4, 0x20, 0xC2, 0x20, 0xE1, 0x10, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFC, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFC, 0x00, 0xE3, 0x00, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x1C, 0x00, 0xE0, 0x00, + 0x00, 0xFE, 0x00, 0xFD, 0x00, 0xF3, 0x00, 0xEF, + 0x00, 0x1C, 0x00, 0xF3, 0x00, 0xEF, 0x00, 0x1F, + 0x01, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x10, 0x00, + 0xE0, 0x03, 0x03, 0x0C, 0x0F, 0x10, 0x1F, 0xE0, + 0x00, 0xEF, 0x00, 0xDF, 0x00, 0xBF, 0x00, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x0F, 0x10, 0x1F, 0x20, 0x3F, 0x40, 0x7F, 0x80, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xF7, 0x00, 0xF9, 0x00, 0xFE, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xF0, 0x08, 0xF8, 0x06, 0xFE, 0x01, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x80, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x80, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x7F, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x03, 0x00, 0xFF, 0x00, 0xFC, 0x00, 0x03, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0xFC, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFC, 0x00, 0xE3, 0x00, 0x1F, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x03, 0x03, 0x1C, 0x1F, 0xE0, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, + 0x00, 0xFF, 0x00, 0xFF, 0x21, 0xDE, 0x00, 0x7F, + 0x0C, 0xF3, 0x19, 0xE0, 0x10, 0xEE, 0x08, 0xF7, + 0xFF, 0x00, 0xFF, 0x00, 0xC0, 0x3F, 0x80, 0xFF, + 0x00, 0xFF, 0x0E, 0xF7, 0x1F, 0xE1, 0x07, 0xF8, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0xBF, + 0x40, 0xBE, 0x80, 0x3F, 0x02, 0xFD, 0x00, 0xFB, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, + 0x7F, 0x81, 0xFE, 0x41, 0xFC, 0x03, 0xFC, 0x07, + 0x00, 0xFF, 0x00, 0xFF, 0x08, 0xF7, 0x00, 0xFF, + 0x00, 0xFB, 0x04, 0xFB, 0x24, 0xDB, 0x64, 0x9B, + 0xFF, 0x00, 0xFF, 0x00, 0x87, 0x78, 0x07, 0xF8, + 0x07, 0xFC, 0x07, 0xF8, 0x03, 0xFC, 0x43, 0xBC, + 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xDE, 0x20, 0xDF, + 0x20, 0xDF, 0x00, 0xFF, 0x04, 0xFB, 0x04, 0xFB, + 0xFF, 0x00, 0xFF, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, + 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFB, 0x00, 0xFF, + 0x00, 0x77, 0x00, 0x7F, 0x80, 0x6F, 0x82, 0x7D, + 0xFF, 0x00, 0xFF, 0x00, 0xFC, 0x07, 0xF8, 0x07, + 0xF8, 0x8F, 0xF0, 0x8F, 0x70, 0x9F, 0x60, 0x9F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFB, 0x24, 0xCB, + 0x24, 0xDB, 0x20, 0xDF, 0x20, 0xDF, 0x00, 0xDF, + 0xFF, 0x00, 0xFF, 0x00, 0x1C, 0xE7, 0x18, 0xF7, + 0x18, 0xE7, 0x18, 0xE7, 0x38, 0xC7, 0x38, 0xE7, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x02, 0xFC, + 0x7E, 0x81, 0x80, 0x01, 0x80, 0x7F, 0xF8, 0x03, + 0xFF, 0x00, 0xFF, 0x00, 0x01, 0xFE, 0x01, 0xFF, + 0x01, 0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x07, 0xFC, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xBF, 0x40, 0xBF, + 0x47, 0xB8, 0x08, 0xF0, 0x08, 0xF7, 0x0E, 0xF1, + 0xFF, 0x00, 0xFF, 0x00, 0xC0, 0x7F, 0x80, 0x7F, + 0x80, 0x7F, 0x87, 0x7F, 0x87, 0x78, 0x80, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x40, 0x9F, 0x00, 0xFF, + 0x10, 0xEF, 0x90, 0x6F, 0x10, 0xEB, 0x14, 0xEB, + 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0xE0, 0x1F, 0xE0, + 0x0E, 0xF1, 0x0C, 0xF3, 0x0C, 0xF7, 0x18, 0xE7, + 0x00, 0xFF, 0x00, 0xFF, 0x20, 0x9F, 0x00, 0xFF, + 0x0C, 0xF3, 0x31, 0xC0, 0x60, 0x9F, 0x40, 0xBF, + 0xFF, 0x00, 0xFF, 0x00, 0xC0, 0x7F, 0x00, 0xFF, + 0x00, 0xFF, 0x1E, 0xEF, 0x3F, 0xC0, 0x7F, 0x80, + 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x77, 0x04, 0xDB, + 0x00, 0xFB, 0x10, 0xEF, 0x00, 0xFD, 0x80, 0x77, + 0xFF, 0x00, 0xFF, 0x00, 0x78, 0x8F, 0x38, 0xE7, + 0x1C, 0xE7, 0x0C, 0xF3, 0x0E, 0xF3, 0x0E, 0xF9, + 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0x00, 0xFF, + 0x40, 0xB7, 0x00, 0xEF, 0x01, 0xDE, 0x02, 0xFC, + 0xFF, 0x00, 0xFF, 0x00, 0x7C, 0x83, 0x78, 0x87, + 0x38, 0xCF, 0x30, 0xDF, 0x21, 0xFE, 0x03, 0xFD, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xDF, 0x60, 0x9F, + 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0xE0, 0x3F, 0xC0, + 0x7F, 0x80, 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFB, 0x01, 0xFC, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFE, 0x01, 0xFC, 0x03, 0xFC, 0x07, 0xFE, 0x03, + 0x00, 0xFF, 0x40, 0x3F, 0x30, 0x8F, 0x00, 0xF7, + 0x80, 0x7F, 0x30, 0xCF, 0x01, 0xFE, 0x87, 0x78, + 0x01, 0xFE, 0x80, 0xFF, 0xE0, 0x5F, 0xF8, 0x0F, + 0x78, 0x87, 0x00, 0xFF, 0x00, 0xFF, 0x03, 0xFC, + 0x00, 0xFF, 0x08, 0xF7, 0x80, 0x6F, 0x80, 0x7F, + 0x80, 0x5F, 0x87, 0x78, 0x04, 0x7B, 0x08, 0x73, + 0xF8, 0x07, 0xF0, 0x0F, 0x70, 0x9F, 0x60, 0x9F, + 0x60, 0xBF, 0xC3, 0x3C, 0x87, 0xF8, 0x87, 0xFC, + 0xA0, 0x1F, 0x80, 0x7D, 0xE2, 0x1D, 0x02, 0xFD, + 0x02, 0xFD, 0xF0, 0x0F, 0x10, 0xEE, 0x11, 0xEE, + 0x43, 0xFC, 0xE3, 0x1E, 0x03, 0xFC, 0x01, 0xFE, + 0x01, 0xFE, 0xE1, 0x1E, 0xE1, 0x1F, 0xE1, 0x1E, + 0x44, 0xBB, 0x48, 0xB3, 0x48, 0xB7, 0x08, 0xF7, + 0x0A, 0xF5, 0x02, 0xF5, 0x80, 0x77, 0x90, 0x67, + 0x84, 0x7B, 0x84, 0x7F, 0x84, 0x7B, 0x84, 0x7B, + 0x8C, 0x73, 0x8C, 0x7B, 0x0E, 0xF9, 0x0E, 0xF9, + 0x86, 0x59, 0x06, 0xF9, 0x48, 0xB3, 0x08, 0xF7, + 0x10, 0xE7, 0x14, 0xEB, 0x24, 0xCB, 0x20, 0xDF, + 0x60, 0xBF, 0x44, 0xBB, 0x04, 0xFF, 0x0C, 0xF3, + 0x0C, 0xFB, 0x18, 0xE7, 0x18, 0xF7, 0x38, 0xC7, + 0x08, 0xD7, 0x48, 0x97, 0x48, 0xB7, 0x41, 0xBE, + 0x41, 0xBE, 0x01, 0xBE, 0x10, 0xAF, 0x90, 0x2F, + 0x30, 0xEF, 0x30, 0xEF, 0x30, 0xCF, 0x30, 0xCF, + 0x70, 0x8F, 0x70, 0xCF, 0x60, 0xDF, 0x60, 0xDF, + 0x04, 0xFB, 0x04, 0xFB, 0xFC, 0x03, 0x00, 0xFF, + 0x00, 0xFF, 0xF8, 0x02, 0x05, 0xFA, 0x05, 0xFA, + 0x03, 0xFC, 0x03, 0xFC, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x07, 0xFD, 0x02, 0xFD, 0x06, 0xF9, + 0x80, 0x7F, 0x80, 0x7F, 0x0F, 0xF0, 0x10, 0xE7, + 0x10, 0xEE, 0x1E, 0xE1, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x0E, 0xF1, 0x0F, 0xF8, + 0x0F, 0xF1, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x60, 0x8F, 0x00, 0xDF, 0x00, 0xFF, 0x00, 0xEF, + 0x04, 0xEB, 0x20, 0xCF, 0x22, 0xDD, 0xC1, 0x1E, + 0x38, 0xD7, 0x38, 0xE7, 0x18, 0xE7, 0x18, 0xF7, + 0x18, 0xF7, 0x1C, 0xF3, 0x3E, 0xC1, 0x7F, 0xA0, + 0x80, 0x3F, 0x80, 0x7F, 0x80, 0x7F, 0x01, 0xFE, + 0x00, 0xBD, 0x18, 0xE7, 0x00, 0xFF, 0x83, 0x7C, + 0x7F, 0xC0, 0x7F, 0x80, 0x7F, 0x80, 0x7E, 0x81, + 0x7E, 0xC3, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x81, 0x76, 0x80, 0x77, 0x10, 0xE7, 0x10, 0xEF, + 0x10, 0xEF, 0x21, 0xCE, 0x41, 0x9E, 0x81, 0x3E, + 0x0E, 0xF9, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF0, + 0x1F, 0xE0, 0x3E, 0xD1, 0x7E, 0xA1, 0xFE, 0x41, + 0x04, 0xF9, 0x08, 0xF3, 0x18, 0xE7, 0x10, 0xEF, + 0x10, 0xEF, 0x10, 0xEF, 0x00, 0xEF, 0x20, 0xCF, + 0x07, 0xFA, 0x07, 0xFC, 0x0F, 0xF0, 0x0F, 0xF0, + 0x0F, 0xF0, 0x1F, 0xE0, 0x1F, 0xF0, 0x1F, 0xF0, + 0x7C, 0x01, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x82, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x78, 0x87, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x70, 0x8E, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x01, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xC3, 0x18, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x24, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x8F, 0x70, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xF8, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x04, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x80, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x3E, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xC1, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xE0, 0x1F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, +}; diff --git a/thirdparty/SameBoy-old/Core/graphics/mgb_border.inc b/thirdparty/SameBoy-old/Core/graphics/mgb_border.inc new file mode 100644 index 000000000..f19ed8a1b --- /dev/null +++ b/thirdparty/SameBoy-old/Core/graphics/mgb_border.inc @@ -0,0 +1,477 @@ +static const uint16_t palette[] = { + 0x0000, 0x0000, 0x0011, 0x001A, 0x39CE, 0x6B5A, 0x739C, 0x5265, + 0x3DC5, 0x2924, 0x18A4, 0x20E6, 0x2D49, 0x1484, 0x5694, 0x20EC, +}; + + +static const uint16_t tilemap[] = { + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x0010, 0x0011, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x4011, 0x4010, 0x000F, + 0x000F, 0x0013, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x4013, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0016, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x4016, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0019, 0x001A, 0x4019, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x8019, 0x001B, 0xC019, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x001C, 0x001D, 0x001D, + 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, + 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, + 0x001D, 0x001D, 0x401C, 0x0014, 0x0014, 0x0014, 0x001E, 0x000F, + 0x000F, 0x0015, 0x0014, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, + 0x002C, 0x002D, 0x002E, 0x002F, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0030, 0x0031, 0x000F, + 0x000F, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, + 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, + 0x0041, 0x0042, 0x0043, 0x0044, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0045, 0x0046, 0x000F, 0x000F, + 0x000F, 0x0047, 0x0048, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x0049, 0x0049, 0x004A, 0x004B, 0x004C, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, +}; + + + +const uint8_t tiles[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x3D, + 0x42, 0x7F, 0x81, 0xFF, 0x01, 0xFD, 0x01, + 0xFD, 0x01, 0xFF, 0x03, 0xFF, 0x03, 0xFF, + 0xFF, 0xBC, 0x7F, 0xFD, 0xFE, 0xFD, 0xFE, + 0xFD, 0xFE, 0xFD, 0xFE, 0xFF, 0xFC, 0xFF, + 0xFC, 0xFF, 0x00, 0xBF, 0x41, 0xFE, 0xC0, + 0xBF, 0xC1, 0xFF, 0x81, 0x7D, 0x03, 0x7F, + 0x01, 0x7F, 0x01, 0xFF, 0xFF, 0x3E, 0xFF, + 0xBE, 0x7F, 0xBF, 0x7E, 0xFF, 0x7E, 0x7D, + 0xFE, 0x7D, 0xFE, 0x7D, 0xFE, 0xFF, 0x00, + 0xFF, 0x00, 0xBF, 0x83, 0xBF, 0x87, 0xFC, + 0x8D, 0xED, 0x8E, 0xDB, 0xF8, 0xBF, 0xD8, + 0xFF, 0xFF, 0x3E, 0xFF, 0xBB, 0x7C, 0xB7, + 0x78, 0xAC, 0x73, 0xAD, 0x73, 0x9B, 0x67, + 0x9B, 0x67, 0xFF, 0x00, 0xB7, 0x08, 0xFF, + 0xF8, 0x3F, 0x38, 0xFF, 0x08, 0xFE, 0x01, + 0x87, 0x00, 0xFB, 0x78, 0xFF, 0xFF, 0x07, + 0xFF, 0xFB, 0x07, 0x3B, 0xC7, 0xE7, 0xFF, + 0xFE, 0xFF, 0x82, 0xFF, 0xFA, 0x87, 0xFF, + 0x00, 0xFE, 0x81, 0x5F, 0x40, 0xDE, 0xC0, + 0xFE, 0xC0, 0xE0, 0xDE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x1E, 0xFF, 0x5E, 0xBF, + 0xDE, 0x3F, 0xDE, 0x3F, 0xC0, 0x3F, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xCF, 0x30, + 0xDF, 0xEF, 0xFF, 0xCF, 0xFF, 0xC1, 0xBD, + 0x81, 0xBD, 0x81, 0xFF, 0x83, 0xFF, 0xFF, + 0x00, 0xFF, 0xCF, 0x30, 0xEF, 0x30, 0xFD, + 0x3E, 0xBD, 0x7E, 0xBD, 0x7E, 0xBF, 0x7C, + 0xFF, 0x00, 0xFF, 0x08, 0xF7, 0xF0, 0xFF, + 0xF0, 0xBF, 0xC0, 0xFF, 0x80, 0x7F, 0x00, + 0x7F, 0x00, 0xFF, 0xFF, 0x07, 0xFF, 0xF7, + 0x0F, 0xF7, 0x0F, 0xBF, 0x7F, 0xFF, 0x7F, + 0x7F, 0xFF, 0x7F, 0xFF, 0xFB, 0x07, 0xFF, + 0x03, 0xFF, 0x03, 0xFB, 0x03, 0xFB, 0x03, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFB, + 0xFC, 0xFB, 0xFC, 0xFB, 0xFC, 0xFB, 0xFC, + 0xFB, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFD, 0x01, 0xFD, 0x81, 0xFF, 0x0B, + 0xF7, 0xF3, 0xFB, 0xF7, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0x7D, 0xFE, 0x7D, 0xFE, + 0x07, 0xFC, 0xF7, 0x0C, 0xF3, 0x0C, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x98, + 0x7B, 0x38, 0x7C, 0x1D, 0xFF, 0x0F, 0xFB, + 0x0B, 0xFD, 0x03, 0xFF, 0x00, 0xFF, 0x00, + 0xDB, 0x67, 0x5B, 0xE7, 0x7C, 0xE3, 0x6F, + 0xF0, 0x73, 0xFC, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x9E, 0x18, 0xFE, 0x3C, 0x5A, + 0xDC, 0xFF, 0xF9, 0xED, 0xE3, 0xBF, 0xC0, + 0xFF, 0x00, 0xFF, 0x00, 0x9A, 0xE7, 0xDA, + 0xE7, 0x1A, 0xE7, 0xFF, 0x06, 0xE5, 0x1E, + 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, + 0xFD, 0xBF, 0x81, 0xBF, 0x81, 0xBD, 0x81, + 0xFD, 0x81, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xC1, 0x3E, 0xBD, 0x7E, 0xBD, 0x7E, + 0xBD, 0x7E, 0xBD, 0x7E, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x83, 0xBB, 0xC7, + 0xFF, 0x83, 0xFF, 0x83, 0x7B, 0x03, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xBF, 0x7C, + 0xBB, 0x7C, 0xFB, 0x7C, 0xFB, 0x7C, 0x7B, + 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x7F, + 0x80, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xF9, 0x00, + 0xF7, 0x00, 0xEE, 0x00, 0xDD, 0x04, 0xDF, + 0x04, 0xBF, 0x08, 0xFF, 0x00, 0xFF, 0x01, + 0xFF, 0x07, 0xFF, 0x0F, 0xFF, 0x1F, 0xFB, + 0x3F, 0xFB, 0x3F, 0xF7, 0x7F, 0x80, 0x00, + 0x7F, 0x00, 0xFF, 0x00, 0x80, 0x00, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0x08, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, + 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, + 0x10, 0xF7, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, + 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, + 0x7F, 0xEF, 0x7F, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, + 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, + 0xFF, 0x10, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, + 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, + 0xEF, 0x7F, 0xEF, 0x7F, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFE, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, + 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xC3, 0x7E, + 0xBD, 0xFF, 0x66, 0xFF, 0x7E, 0xFF, 0x7E, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0x81, 0xC3, 0x18, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x7E, 0xFF, 0x3C, 0xFF, + 0x00, 0x7E, 0x81, 0xBD, 0xC3, 0x42, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x81, 0x00, 0xC3, 0x81, 0xFF, + 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x08, 0xFD, 0x12, 0xFD, 0x12, + 0xFD, 0x12, 0xFD, 0x12, 0xFB, 0x24, 0xFB, + 0x24, 0xFB, 0x24, 0xF7, 0xFE, 0xEF, 0xFC, + 0xEF, 0xFC, 0xEF, 0xFC, 0xEF, 0xFC, 0xDF, + 0xF8, 0xDF, 0xF8, 0xDF, 0xF8, 0xFF, 0x00, + 0xF0, 0x1E, 0xC0, 0x3F, 0x8D, 0x72, 0x0E, + 0xF3, 0x8F, 0xF0, 0x01, 0xFC, 0xA0, 0x1E, + 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xE0, 0xFF, + 0xC0, 0x7C, 0x9F, 0x7F, 0x9F, 0x7F, 0x87, + 0xFF, 0xC0, 0xFF, 0x00, 0xFC, 0x00, 0x78, + 0x87, 0x78, 0x87, 0xF0, 0x07, 0xF8, 0x07, + 0xE2, 0x0F, 0xE2, 0x1C, 0xFF, 0xFF, 0xFF, + 0xFE, 0xFB, 0xFC, 0x7F, 0xFC, 0xFF, 0xF8, + 0xFF, 0xF2, 0xFD, 0xF3, 0xFF, 0xE6, 0xFF, + 0x00, 0x7C, 0x02, 0xFC, 0x01, 0x3C, 0xC3, + 0x3C, 0x83, 0x3E, 0xC1, 0x3C, 0xC3, 0x18, + 0xC7, 0xFF, 0xFF, 0xFD, 0xFE, 0xFF, 0x7C, + 0xBF, 0x7E, 0xFF, 0x3E, 0xFF, 0x7C, 0xFF, + 0x3C, 0xFB, 0x3C, 0xFF, 0x00, 0x1E, 0x01, + 0x1E, 0xE1, 0x1E, 0xE3, 0x1C, 0xF3, 0x0C, + 0xE7, 0x08, 0xF7, 0x19, 0x6F, 0xFF, 0xFF, + 0xFE, 0x3F, 0xFF, 0x3F, 0xFD, 0x1E, 0xEF, + 0x1E, 0xFB, 0x8C, 0xFF, 0xDD, 0xF6, 0x49, + 0xFF, 0x00, 0x18, 0x14, 0x08, 0xE3, 0x08, + 0xE3, 0x18, 0xF7, 0x1D, 0xE2, 0x18, 0xE7, + 0xB8, 0x47, 0xFF, 0xFF, 0xEB, 0x1C, 0xFF, + 0x0C, 0xFF, 0x18, 0xEF, 0x1C, 0xFF, 0x98, + 0xFF, 0x98, 0xFF, 0x18, 0xFF, 0x00, 0x06, + 0x05, 0x02, 0xF8, 0x02, 0xF9, 0xFE, 0x01, + 0xFF, 0x00, 0x06, 0xF9, 0x04, 0xF3, 0xFF, + 0xFF, 0xFA, 0x07, 0xFF, 0x02, 0xFF, 0x07, + 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x0E, 0xFD, + 0x06, 0xFF, 0x00, 0x03, 0x00, 0x01, 0xFF, + 0x30, 0xCF, 0x70, 0x8F, 0x30, 0xC6, 0x21, + 0xDC, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFE, 0x01, 0xFF, 0x01, 0xF7, 0x39, 0xFF, + 0x79, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x00, + 0xF8, 0x01, 0xF0, 0x1F, 0xE1, 0x3E, 0x83, + 0x78, 0x87, 0x30, 0xCF, 0x30, 0x8F, 0x70, + 0xFF, 0xFF, 0xFF, 0xFD, 0xEF, 0xF8, 0xDF, + 0xE0, 0xBF, 0xC3, 0xFF, 0x87, 0xFF, 0x8F, + 0xFF, 0x9F, 0xFF, 0x00, 0x3C, 0xA0, 0x0C, + 0xE1, 0x07, 0xF0, 0x86, 0x38, 0xC7, 0x3C, + 0xC3, 0x18, 0xC7, 0x3C, 0xFF, 0xFF, 0xDF, + 0xBE, 0xFF, 0x0C, 0xFF, 0x06, 0xFF, 0x87, + 0xFB, 0xE7, 0xFF, 0xC7, 0xFB, 0xE7, 0xFF, + 0x00, 0x7C, 0x40, 0x78, 0x83, 0x39, 0xEE, + 0x19, 0xE7, 0x81, 0x7C, 0x03, 0x78, 0xC7, + 0x38, 0xFF, 0xFF, 0xBF, 0x7E, 0xFF, 0x38, + 0xD7, 0x38, 0xFE, 0x31, 0xFF, 0x13, 0xFF, + 0x83, 0xFF, 0x8F, 0xFF, 0x00, 0x3C, 0x43, + 0x7C, 0x83, 0xFC, 0x03, 0xFC, 0x03, 0xFC, + 0x03, 0xFD, 0x02, 0xFC, 0x03, 0xFF, 0xFF, + 0xBF, 0x7C, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, + 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFD, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x04, + 0xA3, 0xFD, 0xB6, 0x8C, 0x3A, 0x8B, 0x7C, + 0x99, 0x62, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0xF8, 0x4B, 0xFC, 0xF7, 0xCC, + 0xF3, 0xCD, 0xFF, 0xCB, 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x90, 0x3F, 0xD8, 0x46, + 0x09, 0xF6, 0x0D, 0xF1, 0x12, 0xF4, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xCF, 0x78, + 0xBF, 0xD9, 0x7F, 0x9F, 0xFE, 0x9B, 0xEF, + 0x9B, 0xFF, 0x00, 0x00, 0xFC, 0x02, 0xFC, + 0x46, 0x59, 0x13, 0xAC, 0x82, 0x68, 0x07, + 0xFC, 0x14, 0xE8, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0x02, 0xBF, 0x73, 0x5F, 0xB6, 0xFF, + 0x23, 0xFB, 0x07, 0xFF, 0x26, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x03, 0x9F, 0x21, + 0x55, 0x48, 0xB7, 0x8F, 0x60, 0x80, 0x6F, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFC, + 0x27, 0xBA, 0xCD, 0x7F, 0x9D, 0xFF, 0x8F, + 0xF7, 0xD8, 0xFF, 0x00, 0x00, 0xFF, 0x0C, + 0xF3, 0x18, 0xF3, 0xD8, 0x2F, 0x90, 0x67, + 0xB0, 0x4F, 0x10, 0xEF, 0xFF, 0xFF, 0xFF, + 0x08, 0xFF, 0x18, 0xEF, 0xBC, 0xF7, 0xBC, + 0xFF, 0xD0, 0xFF, 0xD8, 0xFF, 0x30, 0xFF, + 0x00, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, + 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFF, + 0x02, 0xFF, 0x04, 0xFF, 0x08, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, + 0xF7, 0x48, 0xF7, 0x48, 0xEF, 0x90, 0xEF, + 0x90, 0xDF, 0x20, 0xBF, 0x40, 0xBF, 0x40, + 0x7F, 0x80, 0xBF, 0xF0, 0xBF, 0xF0, 0x7F, + 0xE0, 0x7F, 0xE0, 0xFF, 0xC0, 0xFF, 0x80, + 0xFF, 0x80, 0xFF, 0x00, 0xFF, 0x10, 0xFF, + 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, + 0xFF, 0x10, 0xFF, 0x10, 0xBF, 0x48, 0xEF, + 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, + 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xF7, + 0x3F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFE, 0x00, 0xFE, 0x01, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, + 0xF8, 0x07, 0x00, 0x57, 0x01, 0xFF, 0x05, + 0xF8, 0x87, 0x48, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xF8, 0xFF, 0xFC, 0xEF, 0x99, 0xFE, + 0x01, 0xFF, 0x83, 0xB7, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC0, 0x3F, 0x80, 0x7F, 0x80, + 0x7F, 0x0F, 0x70, 0x8F, 0x70, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xE7, 0xBF, + 0xC0, 0xFF, 0xCF, 0xFF, 0x9F, 0xEF, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, + 0xE3, 0x18, 0xE3, 0x98, 0x77, 0x08, 0x67, + 0x1D, 0xE2, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x3C, 0xFF, 0x18, 0xEF, 0x1C, + 0xFF, 0x0C, 0x7F, 0x88, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x01, 0x3E, 0xC2, 0xFF, + 0xC2, 0x3C, 0xE2, 0x18, 0xC6, 0x39, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x8B, + 0x3C, 0xC3, 0xFF, 0xC7, 0xFF, 0xC6, 0xFF, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x18, 0xEF, 0x10, 0xE6, 0x10, 0xC6, 0x30, + 0xEF, 0x30, 0xCF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xF7, 0x39, 0xFF, 0x39, 0xFF, + 0x10, 0xDF, 0x38, 0xFF, 0x38, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0x09, 0xFC, + 0x01, 0x0C, 0x0B, 0x04, 0xFB, 0x06, 0xF1, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xF7, + 0x0E, 0xFF, 0xFC, 0xF7, 0x0E, 0xFF, 0x0E, + 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xCE, 0x70, 0xCF, 0x70, 0xFE, + 0x01, 0xFE, 0x0B, 0xF0, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x69, 0xB7, 0x79, + 0x8F, 0x79, 0xFF, 0x03, 0xFF, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x70, + 0x87, 0x78, 0x88, 0x72, 0x80, 0x7F, 0xC0, + 0x3F, 0xFC, 0x05, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x9F, 0xF7, 0x8F, 0xFD, 0xC7, 0xBF, + 0xC0, 0xDF, 0xF0, 0xFA, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE7, 0x18, 0x87, 0x38, 0x17, + 0xE8, 0x1F, 0xF0, 0x3F, 0xC0, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xC7, 0xFF, + 0x8F, 0xF7, 0x8F, 0xEF, 0x1F, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, + 0x78, 0x8F, 0x70, 0xDF, 0x20, 0x8F, 0x70, + 0x8F, 0x70, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xF7, 0xCF, 0xFF, 0xCF, 0xFF, 0x8F, + 0xFF, 0x9F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0x02, 0xFD, 0x03, + 0xFD, 0x02, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFC, + 0xFE, 0xFD, 0xFF, 0xFD, 0xFF, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x9F, 0x30, 0xA0, 0x9E, 0x00, 0x7F, 0x00, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xEF, 0xF9, 0x6F, 0xF8, 0xFF, + 0x00, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x90, 0xCF, 0xE1, + 0x1E, 0x40, 0xBF, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7C, + 0xDB, 0xFF, 0xF3, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x82, 0x86, 0x79, 0x80, 0x7F, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0xA6, 0xBF, 0xEC, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, 0x27, + 0xD6, 0xA0, 0x00, 0xFF, 0x00, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFE, 0xDF, 0x7F, 0xCE, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x18, 0x47, 0x10, 0xC7, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0xFF, + 0x18, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFF, + 0x02, 0xFF, 0x0C, 0xFF, 0x10, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFD, 0xFF, 0xF3, 0xFF, 0xEF, 0xFF, + 0xFE, 0x11, 0xFD, 0x22, 0xFB, 0x44, 0xF7, + 0x88, 0xEF, 0x10, 0xDF, 0x20, 0xBF, 0x40, + 0x7F, 0x80, 0xEF, 0xFE, 0xDF, 0xFC, 0xBF, + 0xF8, 0x7F, 0xF0, 0xFF, 0xE0, 0xFF, 0xC0, + 0xFF, 0x80, 0xFF, 0x00, 0xBF, 0x48, 0xDF, + 0x24, 0xDF, 0x22, 0xEF, 0x11, 0xF7, 0x08, + 0xF9, 0x06, 0xFE, 0x01, 0xFF, 0x00, 0xF7, + 0x3F, 0xFB, 0x1F, 0xFD, 0x1F, 0xFE, 0x0F, + 0xFF, 0x07, 0xFF, 0x01, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x80, 0xFF, 0x7F, 0xFF, 0x00, 0x7F, + 0x80, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x03, 0xFF, 0xFC, 0xFF, 0x00, + 0xFC, 0x03, 0x03, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x03, 0xFF, 0x1C, 0xFF, 0xE0, + 0xFC, 0x03, 0xE3, 0x1C, 0x1F, 0xE0, 0xFF, + 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xE3, 0xFF, + 0x1F, 0xFF, 0xFF, 0xFC, 0xFF, 0xE0, 0xFF, + 0x00, 0xFF, 0x00, 0xFC, 0xE3, 0xF3, 0x0C, + 0xEF, 0x10, 0x1F, 0xE0, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1F, 0xFC, + 0xFF, 0xF0, 0xFF, 0xE0, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, +}; diff --git a/thirdparty/SameBoy-old/Core/graphics/sgb_animation_logo.inc b/thirdparty/SameBoy-old/Core/graphics/sgb_animation_logo.inc new file mode 100644 index 000000000..75075f492 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/graphics/sgb_animation_logo.inc @@ -0,0 +1,563 @@ +static uint8_t animation_logo[] = { + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3, 0x3, 0x3, 0x3, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, 0x3, 0x3, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x3, 0x3, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x0, 0x0, 0x0, 0x3, 0x3, 0x3, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3, 0x3, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, + 0x4, 0x4, 0x4, 0x3, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x3, 0x3, 0x3, 0x3, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xE, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xE, 0xE, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0x4, + 0x4, 0x4, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x3, 0x3, 0x3, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE, 0xE, 0xE, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, + 0x4, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3, 0x3, 0x1, 0x1, 0x0, 0x1, + 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0x0, 0x0, 0x1, 0x9, 0x9, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xC, 0xC, 0xC, 0xC, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE, 0xE, 0xE, 0xE, 0x1, + 0x0, 0x0, 0xE, 0xE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, + 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x3, 0x3, 0x1, 0x1, 0x0, 0x0, 0x5, + 0x5, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0x7, 0x7, 0x9, 0x9, 0x9, 0x9, 0x9, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xC, 0xC, 0xC, 0xC, 0xC, 0xC, 0xC, 0x0, 0x0, 0x0, 0x0, 0xE, 0xE, 0xE, 0xE, 0x1, + 0x1, 0xE, 0xE, 0xE, 0xE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x0, 0x0, 0x5, 0x5, + 0x5, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6, 0x6, 0x6, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x7, 0x7, 0x7, 0x9, 0x1, 0x1, 0x1, 0x9, 0x9, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC, + 0xC, 0xC, 0xC, 0xC, 0x1, 0x1, 0xC, 0xC, 0x0, 0x0, 0x0, 0xE, 0xE, 0xE, 0xE, 0xE, + 0xE, 0xE, 0xE, 0xE, 0xE, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x1, 0x1, 0x0, 0x1, 0x5, 0x5, + 0x5, 0x1, 0x0, 0x0, 0x0, 0x0, 0x6, 0x6, 0x6, 0x6, 0x1, 0x0, 0x0, 0x0, 0x0, 0x7, + 0x7, 0x7, 0x9, 0x1, 0x1, 0x0, 0x0, 0x9, 0x9, 0x1, 0x0, 0x0, 0x0, 0x0, 0xC, 0xC, + 0xC, 0xC, 0x1, 0x1, 0x0, 0xC, 0xC, 0xC, 0x1, 0x0, 0x0, 0xE, 0xE, 0xE, 0xE, 0xE, + 0xE, 0xE, 0xE, 0xE, 0xE, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x5, 0x5, 0x5, + 0x5, 0x1, 0x0, 0x0, 0x0, 0x1, 0x6, 0x6, 0x6, 0x1, 0x1, 0x0, 0x0, 0x0, 0x7, 0x7, + 0x7, 0x7, 0x1, 0x1, 0x0, 0x0, 0x1, 0x9, 0x9, 0x9, 0x0, 0x0, 0x0, 0x1, 0xC, 0xC, + 0xC, 0x1, 0x1, 0x0, 0x0, 0xC, 0xC, 0xC, 0x1, 0x0, 0x0, 0x1, 0xD, 0x1, 0x1, 0x1, + 0x1, 0xE, 0xE, 0xE, 0xE, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, + 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x5, 0x5, 0x5, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x6, 0x6, 0x6, 0x6, 0x1, 0x0, 0x0, 0x0, 0x0, 0x7, 0x7, + 0x7, 0x1, 0x1, 0x0, 0x0, 0x0, 0x9, 0x9, 0x9, 0x1, 0x0, 0x0, 0x0, 0xC, 0xC, 0xC, + 0xC, 0x1, 0x0, 0x0, 0xC, 0xC, 0xC, 0xC, 0x1, 0x0, 0x0, 0xD, 0xD, 0x1, 0x0, 0x0, + 0xE, 0xE, 0xF, 0xF, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, + 0x4, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x5, 0x5, 0x5, + 0x1, 0x0, 0x0, 0x0, 0x1, 0x6, 0x6, 0x6, 0x1, 0x1, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, + 0x7, 0x1, 0x0, 0x0, 0x0, 0x0, 0x9, 0x9, 0x9, 0x1, 0x0, 0x0, 0xC, 0xC, 0xC, 0xC, + 0x1, 0x1, 0x0, 0x1, 0xC, 0xC, 0xC, 0x1, 0x1, 0x0, 0x1, 0xD, 0x1, 0x1, 0x0, 0xF, + 0xF, 0xF, 0xF, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x5, 0x5, 0x5, 0x1, + 0x1, 0x0, 0x0, 0x0, 0x6, 0x6, 0x6, 0x6, 0x1, 0x0, 0x0, 0x0, 0x1, 0x7, 0x7, 0x7, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x9, 0x9, 0x9, 0x1, 0x0, 0x0, 0xC, 0xC, 0xC, 0xC, + 0x1, 0x0, 0x1, 0xC, 0xC, 0xC, 0xC, 0x1, 0x0, 0x0, 0xD, 0xD, 0x1, 0x0, 0x1, 0xF, + 0xF, 0xF, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x6, 0x6, 0x1, 0x1, + 0x0, 0x0, 0x0, 0x6, 0x6, 0x6, 0x6, 0x1, 0x0, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, 0x7, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x9, 0x9, 0x9, 0x9, 0x1, 0x0, 0x1, 0xC, 0xC, 0xB, 0xB, + 0xC, 0xC, 0xC, 0xC, 0xC, 0xC, 0x1, 0x0, 0x0, 0xD, 0xD, 0x1, 0x1, 0x0, 0xF, 0xF, + 0xF, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x1, 0x6, 0x6, 0x6, 0x1, 0x0, + 0x0, 0x0, 0x1, 0x6, 0x6, 0x7, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x7, 0x7, 0x7, 0x1, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x9, 0x9, 0x9, 0x1, 0x1, 0x0, 0xC, 0xC, 0xB, 0xB, 0x1, + 0xC, 0xC, 0xC, 0xC, 0x1, 0x1, 0x1, 0x0, 0x1, 0xD, 0x1, 0x1, 0x0, 0x1, 0xF, 0xF, + 0xF, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x6, 0x6, 0x6, 0x1, 0x1, 0x0, + 0x0, 0x0, 0x6, 0x6, 0x7, 0x7, 0x1, 0x0, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, 0x8, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x9, 0x9, 0x9, 0x9, 0x1, 0x0, 0x0, 0xC, 0xB, 0xB, 0xB, 0x1, + 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0xD, 0xD, 0x1, 0x0, 0x0, 0xF, 0xF, 0xF, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0xF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5, 0x5, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0x4, 0x4, 0x1, 0x0, 0x6, 0x6, 0x6, 0x1, 0x0, 0x0, + 0x0, 0x6, 0x6, 0x7, 0x7, 0x1, 0x1, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, 0x8, 0x8, 0x1, + 0x0, 0x0, 0x0, 0x1, 0x9, 0x9, 0xA, 0x1, 0x1, 0x0, 0xC, 0xB, 0xB, 0xB, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xD, 0xD, 0x1, 0x1, 0x0, 0x0, 0xF, 0xF, 0xF, + 0x1, 0x0, 0x0, 0x0, 0x0, 0xF, 0xF, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5, 0x5, 0x5, 0x5, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0x4, 0x1, 0x1, 0x6, 0x6, 0x6, 0x1, 0x0, 0x0, + 0x1, 0x6, 0x7, 0x7, 0x7, 0x1, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, 0x8, 0x8, 0xA, 0x1, + 0x0, 0x0, 0x0, 0x9, 0x9, 0xA, 0xA, 0x1, 0x0, 0x1, 0xB, 0xB, 0xB, 0xD, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xD, 0xD, 0x1, 0x1, 0x0, 0x0, 0x0, 0xF, 0xF, 0xF, + 0x1, 0x0, 0x0, 0x0, 0xF, 0xF, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5, 0x5, 0x5, 0x5, 0x5, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0x4, 0x1, 0x1, 0x6, 0x6, 0x1, 0x1, 0x0, 0x1, + 0x6, 0x1, 0x7, 0x7, 0x7, 0x1, 0x0, 0x0, 0x1, 0x7, 0x7, 0x8, 0x8, 0xA, 0xA, 0x1, + 0x0, 0x0, 0xA, 0xA, 0xA, 0xA, 0x1, 0x1, 0x0, 0xB, 0xB, 0x1, 0xD, 0xD, 0xD, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xD, 0xD, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0xF, 0xF, 0xF, + 0x1, 0x0, 0x0, 0x0, 0xF, 0xF, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5, 0x5, 0x5, 0x5, 0x5, + 0x5, 0x1, 0x0, 0x0, 0x1, 0x4, 0x4, 0x1, 0x1, 0x0, 0x6, 0x6, 0x1, 0x0, 0x1, 0x6, + 0x1, 0x1, 0x7, 0x7, 0x7, 0x1, 0x0, 0x1, 0x7, 0x7, 0x8, 0x8, 0x1, 0x1, 0xA, 0xA, + 0x1, 0xA, 0xA, 0xA, 0xA, 0x1, 0x1, 0xB, 0xB, 0xB, 0x1, 0x1, 0x1, 0xD, 0xD, 0x1, + 0x0, 0x0, 0x0, 0x1, 0xD, 0xD, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xF, 0xF, 0xF, + 0x1, 0x0, 0x1, 0xF, 0xF, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x5, 0x5, 0x5, + 0x5, 0x5, 0x5, 0x4, 0x4, 0x4, 0x1, 0x1, 0x0, 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x1, + 0x1, 0x0, 0x1, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x8, 0x8, 0x8, 0x1, 0x0, 0x1, 0xA, + 0xA, 0xA, 0xA, 0xB, 0xB, 0xB, 0xB, 0xB, 0xB, 0x1, 0x1, 0x0, 0x0, 0xD, 0xD, 0xD, + 0xD, 0xD, 0xD, 0xD, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xF, 0xF, + 0xF, 0xF, 0xF, 0xF, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x5, + 0x5, 0x5, 0x5, 0x5, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6, 0x1, 0x1, 0x1, + 0x0, 0x0, 0x0, 0x1, 0x7, 0x7, 0x7, 0x1, 0x8, 0x8, 0x8, 0x1, 0x1, 0x0, 0x0, 0x0, + 0xB, 0xB, 0xB, 0xB, 0xB, 0xB, 0xB, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0xD, + 0xD, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xF, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x8, 0x8, 0x8, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x8, 0x8, 0x8, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x8, 0x8, 0x1, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x8, 0x8, 0x1, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, + 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x8, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, + 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x1, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, + 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, + 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x1, 0x0, 0x1, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, + 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, + 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, + 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, + 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x1, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, + 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, + 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, + 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, + 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, + 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, + 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, + 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x0, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, + 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +}; +static const unsigned animation_logo_height = sizeof(animation_logo) / 160; diff --git a/thirdparty/SameBoy-old/Core/graphics/sgb_border.inc b/thirdparty/SameBoy-old/Core/graphics/sgb_border.inc new file mode 100644 index 000000000..d7d0a5c98 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/graphics/sgb_border.inc @@ -0,0 +1,658 @@ +static const uint16_t palette[] = { + 0x0000, 0x0011, 0x18C6, 0x001A, 0x318C, 0x39CE, 0x5294, 0x5AD6, + 0x739C, 0x45A8, 0x4520, 0x18A5, 0x4631, 0x2033, 0x20EC, 0x18B7 +}; + +static const uint16_t tilemap[] = { + 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, + 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, + 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, + 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, + 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, + 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, + 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, + 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, + 0x1001, 0x1003, 0x1004, 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, + 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, + 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, + 0x1005, 0x1005, 0x1005, 0x1005, 0x1005, 0x5004, 0x5003, 0x1001, + 0x1001, 0x1006, 0x1007, 0x1007, 0x1007, 0x1008, 0x1009, 0x100A, + 0x100B, 0x100C, 0x100D, 0x100E, 0x100F, 0x1010, 0x1011, 0x1012, + 0x1013, 0x1014, 0x1015, 0x100E, 0x1016, 0x1017, 0x1018, 0x1019, + 0x101A, 0x101B, 0x101C, 0x1007, 0x1007, 0x1007, 0x5006, 0x1001, + 0x1001, 0x101D, 0x101E, 0x101E, 0x101E, 0x101F, 0x1020, 0x1021, + 0x1022, 0x1023, 0x1024, 0x1025, 0x5024, 0x1026, 0x1025, 0x1025, + 0x1027, 0x1028, 0x1029, 0x102A, 0x102B, 0x102C, 0x102D, 0x102E, + 0x102F, 0x1030, 0x1031, 0x101E, 0x101E, 0x101E, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1034, 0x1035, 0x5034, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x8034, 0x1036, 0xC034, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0xC01D, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0x1037, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1032, 0x1038, 0x1001, + 0x1001, 0x101D, 0x1032, 0x1032, 0x1032, 0x1033, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0xC033, 0x1032, 0x1032, 0x1039, 0x103A, 0x1001, + 0x1001, 0x103B, 0x103C, 0x1032, 0x1032, 0xC03C, 0x103D, 0x103D, + 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, + 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, 0x103D, + 0x103D, 0x103D, 0x103E, 0x103F, 0x1040, 0x1041, 0x1001, 0x1001, + 0x1001, 0x1042, 0x1043, 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, + 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, + 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, 0x1044, + 0x1044, 0x1044, 0x1045, 0x1046, 0x1001, 0x1001, 0x1001, 0x1001, + 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1047, 0x1048, 0x1049, + 0x104A, 0x104B, 0x104C, 0x104D, 0x104E, 0x104F, 0x1050, 0x1051, + 0x1052, 0x1053, 0x1054, 0x1055, 0x1056, 0x1057, 0x1058, 0x1059, + 0x105A, 0x105B, 0x105C, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, + 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x105D, 0x105E, 0x105F, + 0x1060, 0x1061, 0x1062, 0x1063, 0x1064, 0x1065, 0x1066, 0x1067, + 0x1068, 0x1069, 0x106A, 0x106B, 0x106C, 0x106D, 0x106E, 0x106F, + 0x1070, 0x1071, 0x1072, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, + 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, 0x1073, 0x1074, 0x1075, + 0x1076, 0x1077, 0x1078, 0x1079, 0x107A, 0x107B, 0x107C, 0x107D, + 0x107E, 0x107F, 0x1080, 0x1081, 0x1082, 0x1083, 0x507A, 0x1084, + 0x1001, 0x1085, 0x507A, 0x1001, 0x1001, 0x1001, 0x1001, 0x1001, +}; + +const uint8_t tiles[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x01, 0xFE, 0x06, 0xF9, 0x08, 0xF7, + 0x11, 0xEF, 0x22, 0xDB, 0x20, 0xDB, 0x40, 0xB7, + 0xFF, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xF8, 0x00, + 0xF1, 0x00, 0xE6, 0x04, 0xE4, 0x00, 0xC8, 0x00, + 0x7F, 0x80, 0x80, 0x7F, 0x00, 0xFF, 0x7F, 0xFF, + 0x80, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x80, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xB7, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0xC8, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x03, 0xFF, 0x02, 0xFF, + 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0xC1, 0xDD, 0x00, 0xC9, + 0x14, 0xFF, 0x14, 0xFF, 0x14, 0xFF, 0x00, 0xC9, + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x36, 0x22, + 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x36, 0x22, + 0x00, 0xFF, 0x00, 0xFF, 0xC7, 0xDF, 0x01, 0xCF, + 0x11, 0xFF, 0x11, 0xFF, 0x11, 0xFF, 0x01, 0xCF, + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x31, 0x20, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x31, 0x20, + 0x00, 0xFF, 0x00, 0xFF, 0xC2, 0xFF, 0x03, 0xFF, + 0x02, 0xFE, 0x02, 0xFE, 0x02, 0xFF, 0x02, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x03, 0x00, + 0x03, 0x01, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x08, 0xFF, 0x18, 0xFF, + 0x08, 0x4E, 0x08, 0x4E, 0x09, 0x1F, 0x08, 0x1C, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, + 0xB9, 0x10, 0xB9, 0xA1, 0xE9, 0xA0, 0xEB, 0x41, + 0x00, 0xFF, 0x00, 0xFF, 0x4F, 0xFF, 0x02, 0x1F, + 0x02, 0x4F, 0x02, 0x4F, 0xF2, 0xFF, 0x02, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0xE2, 0xA0, + 0xB2, 0xA0, 0xB2, 0x10, 0xF2, 0x00, 0x1A, 0x10, + 0x00, 0xFF, 0x00, 0xFF, 0xBC, 0xFD, 0x22, 0xFB, + 0x22, 0xFB, 0x3C, 0xFD, 0x24, 0xFF, 0x26, 0xF9, + 0x00, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x26, 0x00, + 0x26, 0x00, 0x3E, 0x00, 0x24, 0x00, 0x26, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x50, 0xFF, 0x49, 0xEF, + 0x49, 0xF0, 0x46, 0xFF, 0x49, 0xF0, 0x49, 0xEF, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x59, 0x00, + 0x4F, 0x06, 0x46, 0x00, 0x4F, 0x06, 0x59, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x88, 0xFF, 0x00, 0x72, + 0x00, 0xF2, 0x05, 0xFF, 0x00, 0xF8, 0x00, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x8D, 0x08, + 0x0D, 0x05, 0x05, 0x00, 0x07, 0x05, 0x87, 0x02, + 0x00, 0xFF, 0x00, 0xFF, 0x8A, 0xFF, 0x02, 0x27, + 0x02, 0x27, 0x52, 0xFF, 0x02, 0x8F, 0x02, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0xDA, 0x88, + 0xDA, 0x50, 0x52, 0x00, 0x72, 0x50, 0x72, 0x20, + 0x00, 0xFF, 0x00, 0xFF, 0xFA, 0xFF, 0x22, 0xFF, + 0x22, 0xFF, 0x23, 0xFF, 0x22, 0xFF, 0x22, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x22, 0x00, + 0x22, 0x00, 0x23, 0x00, 0x22, 0x00, 0x22, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x20, 0xFF, 0x20, 0xFF, + 0x20, 0xFF, 0xE0, 0xFF, 0x20, 0xFF, 0x20, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x20, 0x00, 0xE0, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x33, 0x37, 0x00, 0x77, + 0x80, 0xFF, 0x20, 0x27, 0x08, 0xFF, 0x00, 0x77, + 0x00, 0x00, 0x00, 0x00, 0xFB, 0x40, 0x88, 0x88, + 0x80, 0x00, 0xF8, 0x50, 0x08, 0x00, 0x88, 0x88, + 0x00, 0xFF, 0x00, 0xFF, 0xEF, 0xFF, 0x88, 0xFF, + 0x88, 0xFF, 0x8F, 0xFF, 0x88, 0xFF, 0x88, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x88, 0x00, + 0x88, 0x00, 0x8F, 0x00, 0x88, 0x00, 0x88, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0xF9, 0xFD, 0x80, 0xF9, + 0x84, 0xFF, 0xF4, 0xFF, 0x84, 0xFF, 0x80, 0xF9, + 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x86, 0x02, + 0x84, 0x00, 0xF4, 0x00, 0x84, 0x00, 0x86, 0x02, + 0x00, 0xFF, 0x00, 0xFF, 0xC0, 0xDF, 0x00, 0xCF, + 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x00, 0xCF, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x30, 0x20, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x20, + 0x00, 0xFF, 0x00, 0xFF, 0x30, 0x36, 0x00, 0x74, + 0x82, 0xFF, 0x22, 0x27, 0x0A, 0xFF, 0x00, 0x74, + 0x00, 0x00, 0x00, 0x00, 0xF9, 0x40, 0x8B, 0x89, + 0x82, 0x00, 0xFA, 0x50, 0x0A, 0x00, 0x8B, 0x89, + 0x00, 0xFF, 0x00, 0xFF, 0xE2, 0xEF, 0x02, 0xE7, + 0x0A, 0xFF, 0x0A, 0xFF, 0x0A, 0xFF, 0x00, 0xE4, + 0x00, 0x00, 0x00, 0x00, 0xF2, 0x00, 0x1A, 0x10, + 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x1B, 0x12, + 0x00, 0xFF, 0x00, 0xFF, 0x14, 0xFF, 0x16, 0xFF, + 0x14, 0xFC, 0x15, 0xFE, 0x14, 0xFF, 0x04, 0xCF, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x16, 0x00, + 0x17, 0x01, 0x15, 0x00, 0x14, 0x00, 0x34, 0x10, + 0x00, 0xFF, 0x00, 0xFF, 0x2F, 0xFF, 0x28, 0xFF, + 0x28, 0xFF, 0xA8, 0x7F, 0x28, 0x3F, 0x68, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x28, 0x00, + 0x28, 0x00, 0xA8, 0x00, 0xE8, 0x80, 0x68, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x3F, + 0x40, 0xFF, 0x40, 0xFF, 0x40, 0xFF, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x80, + 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xC0, 0x80, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFF, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xC1, 0xDD, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xC1, 0xDF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x02, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x4A, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x0A, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x22, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x82, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x20, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x60, 0x67, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x8F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xA2, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xF9, 0xFD, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xC0, 0xDF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x60, 0x66, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xE0, 0xEE, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xC4, 0xDF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xE4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x2F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xFF, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, + 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x3C, 0xFF, + 0x7E, 0xFF, 0xE7, 0xE7, 0xFF, 0x7E, 0xFF, 0x7E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x7E, + 0x81, 0xC3, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x7E, 0xFF, 0x3C, 0xFF, 0x00, 0x7E, 0x81, + 0x3C, 0xC3, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0xC3, 0x81, + 0x7E, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF7, 0x00, 0xF7, 0x00, 0xF7, 0x00, 0xF7, + 0x00, 0xF7, 0x00, 0xED, 0x00, 0xED, 0x00, 0xED, + 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x09, 0x00, 0x11, 0x02, 0x11, 0x02, 0x11, 0x02, + 0x00, 0xED, 0x00, 0xDB, 0x00, 0xDB, 0x00, 0xDB, + 0x00, 0xB7, 0x00, 0xB7, 0x00, 0x6F, 0x00, 0x6F, + 0x11, 0x02, 0x23, 0x04, 0x23, 0x04, 0x23, 0x04, + 0x47, 0x08, 0x47, 0x08, 0x8F, 0x10, 0x8F, 0x10, + 0x00, 0xFE, 0x00, 0xFD, 0x00, 0xFB, 0x00, 0xF7, + 0x00, 0xEE, 0x00, 0xDD, 0x00, 0xBB, 0x00, 0x77, + 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, + 0x10, 0x01, 0x21, 0x02, 0x43, 0x04, 0x87, 0x08, + 0x00, 0xDF, 0x00, 0xBF, 0x00, 0xBF, 0x00, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x1F, 0x20, 0x3F, 0x40, 0x3F, 0x40, 0x7F, 0x80, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xEF, 0x00, 0xB7, + 0x00, 0xB7, 0x00, 0xDB, 0x00, 0xDD, 0x00, 0xEE, + 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x88, 0x40, + 0x88, 0x40, 0xC4, 0x20, 0xC2, 0x20, 0xE1, 0x10, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFC, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFC, 0x00, 0xE3, 0x00, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x1C, 0x00, 0xE0, 0x00, + 0x00, 0xFE, 0x00, 0xFD, 0x00, 0xF3, 0x00, 0xEF, + 0x00, 0x1C, 0x00, 0xF3, 0x00, 0xEF, 0x00, 0x1F, + 0x01, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x10, 0x00, + 0xE0, 0x03, 0x03, 0x0C, 0x0F, 0x10, 0x1F, 0xE0, + 0x00, 0xEF, 0x00, 0xDF, 0x00, 0xBF, 0x00, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x0F, 0x10, 0x1F, 0x20, 0x3F, 0x40, 0x7F, 0x80, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xF7, 0x00, 0xF9, 0x00, 0xFE, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xF0, 0x08, 0xF8, 0x06, 0xFE, 0x01, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x80, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x80, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x7F, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x03, 0x00, 0xFF, 0x00, 0xFC, 0x00, 0x03, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0xFC, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFC, 0x00, 0xE3, 0x00, 0x1F, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x03, 0x03, 0x1C, 0x1F, 0xE0, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x01, 0xFF, 0x01, 0xFD, 0x03, 0xFF, 0x03, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x01, 0xFE, 0x02, 0xFE, 0x02, 0xFC, 0x00, + 0x0E, 0xEE, 0x3F, 0xFF, 0x75, 0x71, 0xFB, 0xE7, + 0xE3, 0xCB, 0xC7, 0x9F, 0x07, 0x3E, 0x84, 0x7C, + 0xFB, 0x1B, 0xE6, 0x26, 0x8E, 0x82, 0x3E, 0x22, + 0x7C, 0x54, 0x7D, 0x25, 0xF9, 0x40, 0xFB, 0x01, + 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0xFF, + 0x00, 0x7F, 0x80, 0x4F, 0x31, 0x7F, 0x71, 0xFD, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0x80, + 0xFF, 0x00, 0xFF, 0x30, 0xFF, 0xB1, 0xDE, 0x52, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0x7B, 0x87, 0xFF, 0x8E, 0xFE, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x84, 0xFA, 0x82, 0xF9, 0x88, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0xC1, 0xFD, 0xE3, 0x7B, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xC3, 0xBC, 0x24, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x01, 0xFF, 0x03, 0xFF, 0xE3, 0xFB, 0xF7, 0xBF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x01, 0xFE, 0x02, 0x7C, 0x64, 0xFC, 0xB4, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x7F, 0x80, 0xFF, 0xA0, 0x2F, 0xF0, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x80, 0xFF, 0x80, 0xFF, 0x70, 0x8F, 0x80, + 0x00, 0xFF, 0x00, 0xFF, 0x02, 0xFD, 0x00, 0xF7, + 0x00, 0xFF, 0x11, 0xEE, 0x11, 0xEE, 0x10, 0xEF, + 0xFF, 0x00, 0xFF, 0x00, 0xFC, 0x03, 0xF8, 0x0F, + 0xF0, 0x0F, 0xE0, 0x1F, 0xE1, 0x1E, 0xE0, 0x1F, + 0x00, 0xFF, 0x00, 0xFF, 0x10, 0xE7, 0x00, 0xFB, + 0xC4, 0x3B, 0x98, 0x03, 0x00, 0xEF, 0x80, 0x7F, + 0xFF, 0x00, 0xFF, 0x00, 0x0F, 0xF8, 0x07, 0xFC, + 0x07, 0xF8, 0xEF, 0x74, 0xFF, 0x10, 0x7F, 0x80, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xEF, 0x00, 0xFF, 0x22, 0xDD, 0x06, 0xB9, + 0xFF, 0x00, 0xFF, 0x00, 0xF8, 0x07, 0xF0, 0x0F, + 0xF0, 0x1F, 0xE0, 0x1F, 0xC0, 0x3F, 0xC4, 0x7B, + 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x7D, 0x02, 0xFD, + 0x02, 0xBD, 0x40, 0xBF, 0x40, 0xBF, 0x40, 0xBF, + 0xFF, 0x00, 0xFF, 0x00, 0x7E, 0x83, 0x7C, 0x83, + 0x7C, 0xC3, 0x7C, 0x83, 0x3C, 0xC3, 0x3C, 0xC3, + 0x00, 0xFF, 0x00, 0xFF, 0x10, 0xEF, 0x00, 0xFF, + 0x00, 0xF7, 0x00, 0xF7, 0x48, 0xB6, 0x48, 0xB7, + 0xFF, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x0F, 0xF0, + 0x0F, 0xF8, 0x0F, 0xF8, 0x07, 0xF9, 0x06, 0xF9, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xBF, 0x02, 0xFC, + 0x02, 0x7D, 0x02, 0xFD, 0x02, 0xFD, 0x20, 0xDD, + 0xFF, 0x00, 0xFF, 0x00, 0xC1, 0x7E, 0x81, 0x7F, + 0x81, 0xFE, 0x01, 0xFE, 0x03, 0xFC, 0x03, 0xFE, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xBF, 0x40, 0xBF, + 0x47, 0xB8, 0x08, 0xF0, 0x08, 0xF7, 0x0F, 0xF0, + 0xFF, 0x00, 0xFF, 0x00, 0xC0, 0x7F, 0x80, 0x7F, + 0x80, 0x7F, 0x87, 0x7F, 0x87, 0x78, 0x80, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFB, 0x24, 0xCB, + 0xE4, 0x1B, 0x00, 0x1F, 0x00, 0xFF, 0x80, 0x3F, + 0xFF, 0x00, 0xFF, 0x00, 0x1C, 0xE7, 0x18, 0xF7, + 0x18, 0xE7, 0xF8, 0xE7, 0xF8, 0x07, 0x78, 0xC7, + 0x00, 0xFF, 0x00, 0xFF, 0x04, 0xF9, 0x00, 0xFF, + 0x71, 0x8E, 0x89, 0x06, 0x81, 0x7E, 0xE1, 0x1E, + 0xFF, 0x00, 0xFF, 0x00, 0x03, 0xFE, 0x01, 0xFE, + 0x00, 0xFF, 0x70, 0xFF, 0x70, 0x8F, 0x01, 0xFE, + 0x00, 0xFF, 0x00, 0xFF, 0x02, 0xF9, 0x00, 0xFF, + 0x00, 0xFF, 0x03, 0xFC, 0x06, 0xB9, 0x44, 0xBB, + 0xFF, 0x00, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, + 0xE0, 0x1F, 0xC1, 0x3E, 0xC3, 0x7C, 0x87, 0x78, + 0x00, 0xFF, 0x00, 0xFF, 0x08, 0xF7, 0x00, 0xFD, + 0xC0, 0x3F, 0x11, 0x0E, 0x00, 0xFF, 0x08, 0xF7, + 0xFF, 0x00, 0xFF, 0x00, 0x07, 0xF8, 0x03, 0xFE, + 0x01, 0xFE, 0xE0, 0xFF, 0xF0, 0x0F, 0xF0, 0x0F, + 0x00, 0xFF, 0x00, 0xFF, 0x08, 0x77, 0x40, 0xBF, + 0x04, 0xBB, 0x00, 0xFE, 0x00, 0xDD, 0x00, 0x7F, + 0xFF, 0x00, 0xFF, 0x00, 0x87, 0xF8, 0x87, 0x78, + 0xC3, 0x7C, 0xC3, 0x3D, 0xE2, 0x3F, 0xE0, 0x9F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFD, 0x06, 0xF9, + 0x0C, 0x73, 0x08, 0xF7, 0x10, 0xE7, 0x20, 0xCF, + 0xFF, 0x00, 0xFF, 0x00, 0xC3, 0x3E, 0x83, 0x7C, + 0x87, 0xF8, 0x0F, 0xF0, 0x1F, 0xE8, 0x3F, 0xD0, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xF7, 0x00, 0xFF, + 0x01, 0xDE, 0x06, 0xF8, 0x1C, 0xC3, 0x00, 0xF3, + 0xFF, 0x00, 0xFF, 0x00, 0xF8, 0x0F, 0xE0, 0x1F, + 0xE0, 0x3F, 0xC3, 0x3D, 0xE7, 0x38, 0xFF, 0x0C, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xDF, 0x00, 0xFF, + 0x00, 0xF7, 0x08, 0x77, 0x08, 0xF7, 0x08, 0xF7, + 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0xE0, 0x0F, 0xF0, + 0x0F, 0xF8, 0x87, 0xF8, 0x87, 0x78, 0x07, 0xF8, + 0x03, 0xFF, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, + 0x18, 0xDF, 0x1C, 0xFD, 0x0F, 0xEF, 0x07, 0xF7, + 0xFC, 0x00, 0xFE, 0x02, 0xFF, 0x01, 0xFF, 0x01, + 0xFF, 0x38, 0xF3, 0x12, 0xF9, 0x19, 0xFC, 0x0C, + 0x02, 0x79, 0x80, 0xFD, 0xC0, 0xDF, 0xF0, 0xFE, + 0x79, 0x3F, 0x19, 0xDB, 0x19, 0xFB, 0xF9, 0xF7, + 0xFF, 0x84, 0xFF, 0x82, 0x7F, 0x60, 0x9F, 0x91, + 0xEF, 0xA9, 0xF6, 0x34, 0xFE, 0x1C, 0x1F, 0x11, + 0x63, 0xEF, 0xF3, 0xEB, 0xC6, 0xCE, 0xEF, 0xDE, + 0x8C, 0x9C, 0xDE, 0xBD, 0x9C, 0x9D, 0xFF, 0xEF, + 0x9E, 0x02, 0xBC, 0xA4, 0x3D, 0x14, 0x7B, 0x4A, + 0x73, 0x21, 0xF7, 0x94, 0xF7, 0xF6, 0xFE, 0xEE, + 0x8D, 0xEC, 0x9E, 0x7D, 0x1C, 0x5B, 0x38, 0xFA, + 0x79, 0xF7, 0x71, 0x75, 0xF3, 0xF3, 0xEF, 0xCF, + 0xF3, 0x90, 0xF7, 0x14, 0xEF, 0xA8, 0xEF, 0x2D, + 0xCF, 0x41, 0x8E, 0x8A, 0x3C, 0x3C, 0x39, 0x19, + 0x67, 0xFF, 0xEF, 0xFE, 0xEC, 0xDC, 0xCF, 0xCF, + 0xDD, 0xDC, 0xDC, 0x9F, 0x2C, 0x2F, 0xD7, 0xC7, + 0xB9, 0x21, 0xBB, 0xAA, 0xB3, 0x81, 0x76, 0x76, + 0x77, 0x76, 0xE7, 0xA4, 0xD7, 0x44, 0xFB, 0xCB, + 0xB3, 0x37, 0x73, 0x72, 0xF4, 0xEC, 0xEF, 0xCD, + 0xCD, 0x09, 0x11, 0xF3, 0x29, 0xA7, 0xF1, 0xCF, + 0xCD, 0x49, 0xDF, 0xDE, 0xBF, 0xA5, 0x7F, 0x5D, + 0xF6, 0x32, 0xFE, 0x14, 0xFE, 0x70, 0xFF, 0xC1, + 0xF0, 0x77, 0xF0, 0x67, 0xE0, 0xCF, 0x80, 0x97, + 0xC8, 0xBB, 0x98, 0xBB, 0x90, 0xD3, 0xE8, 0xE7, + 0xDF, 0x58, 0xBF, 0x28, 0x7F, 0x50, 0x7F, 0x28, + 0xF7, 0x84, 0xFF, 0xDC, 0xEF, 0xA4, 0xDF, 0xC0, + 0x00, 0xFF, 0x04, 0xF3, 0x03, 0xF8, 0x00, 0xFF, + 0x08, 0xF7, 0x03, 0xFC, 0x00, 0xBF, 0x18, 0xC7, + 0xF0, 0x0F, 0xF8, 0x0F, 0xFE, 0x05, 0xFF, 0x00, + 0xE7, 0x18, 0xC0, 0x3F, 0xC0, 0x7F, 0xE0, 0x3F, + 0x00, 0xFF, 0x00, 0xFF, 0x08, 0xF6, 0x08, 0x77, + 0x08, 0xF5, 0x08, 0xF7, 0x10, 0xE7, 0x70, 0x87, + 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF9, 0x86, 0xF9, + 0x86, 0x7B, 0x0C, 0xF3, 0x08, 0xFF, 0x38, 0xCF, + 0x0A, 0xF1, 0x88, 0x77, 0x0E, 0xF1, 0x00, 0xFF, + 0x00, 0xFF, 0x7F, 0x80, 0x41, 0xBE, 0x81, 0x3E, + 0x84, 0x7F, 0x0E, 0xF1, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x3E, 0xC1, 0x7E, 0x81, 0x7E, 0xC1, + 0x04, 0xFB, 0x04, 0xDB, 0x24, 0xDB, 0x20, 0xDF, + 0x20, 0xDF, 0x00, 0xFF, 0x08, 0xE7, 0x19, 0xE6, + 0x38, 0xC7, 0x38, 0xE7, 0x38, 0xC7, 0x18, 0xE7, + 0x18, 0xE7, 0x18, 0xE7, 0x10, 0xFF, 0x10, 0xEF, + 0x48, 0xB5, 0x80, 0x3F, 0x84, 0x7B, 0x80, 0x7F, + 0xA1, 0x5E, 0x21, 0x5E, 0x02, 0x7C, 0x02, 0x7D, + 0x46, 0xBB, 0x44, 0xFB, 0x40, 0xBF, 0x40, 0xBF, + 0xC0, 0x3F, 0xC1, 0xBE, 0xE1, 0x9F, 0xE3, 0x9C, + 0x60, 0x9D, 0x64, 0x99, 0x84, 0x3B, 0x84, 0x7B, + 0x04, 0x7B, 0x40, 0xBB, 0x41, 0xBA, 0x09, 0xF2, + 0x03, 0xFE, 0x43, 0xBE, 0x43, 0xFC, 0xC3, 0x3C, + 0xC7, 0xB8, 0x87, 0x7C, 0x86, 0x7D, 0x86, 0x7D, + 0x80, 0x7F, 0x80, 0x7F, 0x8F, 0x70, 0x10, 0xEF, + 0x10, 0xEF, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, 0xF0, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x48, 0xB7, 0x48, 0xB7, 0xC0, 0x3F, 0x01, 0xFE, + 0x01, 0xFE, 0x81, 0x2E, 0x50, 0xAF, 0x50, 0xAF, + 0x30, 0xCF, 0x30, 0xCF, 0xF0, 0x0F, 0xF0, 0x0F, + 0xF0, 0x0F, 0x70, 0xDF, 0x20, 0xDF, 0x60, 0x9F, + 0x06, 0xF8, 0x00, 0xFD, 0xF0, 0x0F, 0x00, 0x7E, + 0x00, 0xEE, 0xE2, 0x1C, 0x02, 0xFD, 0x0C, 0xF1, + 0x03, 0xFD, 0x03, 0xFE, 0xE1, 0x1E, 0xF1, 0x8F, + 0xF1, 0x1F, 0x01, 0xFF, 0x03, 0xFC, 0x07, 0xFA, + 0x08, 0xF3, 0x08, 0xF7, 0x08, 0xF7, 0x00, 0xFF, + 0x40, 0xBB, 0x01, 0xFE, 0x20, 0xDF, 0x18, 0xE7, + 0x87, 0x7C, 0x87, 0x78, 0x87, 0x78, 0x87, 0x78, + 0x87, 0x7C, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, + 0x08, 0xF7, 0x08, 0xF7, 0x01, 0xFE, 0x11, 0xEE, + 0x01, 0xDE, 0x82, 0x7C, 0x04, 0xF9, 0x38, 0xC3, + 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xE0, 0x1F, + 0xE1, 0x3E, 0x03, 0xFD, 0x07, 0xFA, 0x0F, 0xF4, + 0x10, 0x6F, 0x00, 0x7F, 0x01, 0x7E, 0x01, 0xFE, + 0x01, 0xFE, 0x11, 0xEE, 0x10, 0xEE, 0x12, 0xEC, + 0xE0, 0x9F, 0xF0, 0x8F, 0xF0, 0x8F, 0xF0, 0x0F, + 0xF0, 0x0F, 0xE1, 0x1E, 0xE1, 0x1F, 0xE1, 0x1F, + 0x40, 0x9F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x7F, 0xA0, 0x7F, 0xC0, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFB, 0x08, 0xF7, 0x00, 0xFF, + 0x01, 0xBE, 0x03, 0xFC, 0x00, 0x7F, 0x80, 0x7F, + 0xFE, 0x01, 0xFC, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, + 0xC1, 0x7E, 0x80, 0x7F, 0x80, 0xFF, 0x00, 0xFF, + 0x08, 0xF7, 0x10, 0xE7, 0x60, 0x8F, 0xC0, 0x3F, + 0x80, 0x7F, 0xE0, 0x0F, 0x00, 0xEF, 0x00, 0xEF, + 0x0F, 0xF0, 0x1F, 0xE8, 0x3F, 0xD0, 0x7F, 0x80, + 0xFF, 0x00, 0x1F, 0xF0, 0x1F, 0xF0, 0x1F, 0xF0, + 0x02, 0xF8, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x04, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xD0, 0xC6, 0x00, 0x1F, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xC9, 0xFF, 0xE0, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xE7, 0x86, 0x01, 0x39, 0x01, 0xFF, 0x03, 0xFF, + 0x03, 0xFF, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0xFF, + 0xFF, 0x9E, 0xFF, 0xC7, 0xFE, 0x00, 0xFE, 0x02, + 0xFF, 0x03, 0xFF, 0x02, 0xFF, 0x01, 0xFF, 0x00, + 0xC3, 0xD3, 0xC0, 0xBC, 0x80, 0xBF, 0x00, 0x7F, + 0x80, 0x7F, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, + 0x7F, 0x6B, 0x7F, 0x03, 0xFF, 0xC0, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0x00, 0xFF, 0x00, + 0xC7, 0x1B, 0x00, 0x7C, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x23, 0xFF, 0x83, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xC0, 0x1F, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x20, 0xFF, 0x80, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x50, 0x4F, 0x00, 0x9F, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x40, 0xFF, 0x60, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x07, 0xF0, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x08, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xC7, 0x18, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x20, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x80, 0x7F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xF7, 0x08, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x0C, 0xE1, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x12, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x38, 0x87, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x40, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x8F, 0x30, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x40, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xF0, 0x07, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x08, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x03, 0xF0, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x0C, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x0E, 0xF1, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x7F, 0x80, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00 +}; diff --git a/thirdparty/SameBoy-old/Core/joypad.c b/thirdparty/SameBoy-old/Core/joypad.c new file mode 100644 index 000000000..0d001ee78 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/joypad.c @@ -0,0 +1,224 @@ +#include "gb.h" +#include + +static inline bool should_bounce(GB_gameboy_t *gb) +{ + // Bouncing is super rare on an AGS, so don't emulate it on GB_MODEL_AGB_B (when addeed) + return !GB_is_sgb(gb) && !gb-> no_bouncing_emulation && !(gb->model & GB_MODEL_GBP_BIT) /*&& gb->model != GB_MODEL_AGB_B*/; +} + +static inline uint16_t bounce_for_key(GB_gameboy_t *gb, GB_key_t key) +{ + if (gb->model > GB_MODEL_CGB_E) { + // AGB are less bouncy + return 0xBFF; + } + if (key == GB_KEY_START || key == GB_KEY_SELECT) { + return 0x1FFF; + } + return 0xFFF; +} + +static inline bool get_input(GB_gameboy_t *gb, uint8_t player, GB_key_t key) +{ + if (player != 0) { + return gb->keys[player][key]; + } + bool ret = gb->keys[player][key]; + + if (likely(gb->key_bounce_timing[key] == 0)) return ret; + if (likely((gb->key_bounce_timing[key] & 0x3FF) > 0x300)) return ret; + uint16_t semi_random = ((((key << 5) + gb->div_counter) * 17) ^ ((gb->apu.apu_cycles + gb->display_cycles) * 13)); + semi_random >>= 3; + if (semi_random < gb->key_bounce_timing[key]) { + ret ^= true; + } + return ret; +} + +void GB_update_joyp(GB_gameboy_t *gb) +{ + if (gb->model & GB_MODEL_NO_SFC_BIT) return; + + uint8_t key_selection = 0; + uint8_t previous_state = 0; + + /* Todo: add delay to key selection */ + previous_state = gb->io_registers[GB_IO_JOYP] & 0xF; + key_selection = (gb->io_registers[GB_IO_JOYP] >> 4) & 3; + gb->io_registers[GB_IO_JOYP] &= 0xF0; + uint8_t current_player = gb->sgb? gb->sgb->current_player : 0; + switch (key_selection) { + case 3: + if (gb->sgb && gb->sgb->player_count > 1) { + gb->io_registers[GB_IO_JOYP] |= 0xF - current_player; + } + else { + /* Nothing is wired, all up */ + gb->io_registers[GB_IO_JOYP] |= 0x0F; + } + break; + + case 2: + /* Direction keys */ + for (uint8_t i = 0; i < 4; i++) { + gb->io_registers[GB_IO_JOYP] |= (!get_input(gb, current_player, i)) << i; + } + /* Forbid pressing two opposing keys, this breaks a lot of games; even if it's somewhat possible. */ + if (likely(!gb->illegal_inputs_allowed)) { + if (!(gb->io_registers[GB_IO_JOYP] & 1)) { + gb->io_registers[GB_IO_JOYP] |= 2; + } + if (!(gb->io_registers[GB_IO_JOYP] & 4)) { + gb->io_registers[GB_IO_JOYP] |= 8; + } + } + break; + + case 1: + /* Other keys */ + for (uint8_t i = 0; i < 4; i++) { + gb->io_registers[GB_IO_JOYP] |= (!get_input(gb, current_player, i + 4)) << i; + } + break; + + case 0: + for (uint8_t i = 0; i < 4; i++) { + gb->io_registers[GB_IO_JOYP] |= (!(get_input(gb, current_player, i) || get_input(gb, current_player, i + 4))) << i; + } + break; + + nodefault; + } + + // TODO: Implement the lame anti-debouncing mechanism as seen on the DMG schematics + if (previous_state & ~(gb->io_registers[GB_IO_JOYP] & 0xF)) { + if (!(gb->io_registers[GB_IO_IF] & 0x10)) { + gb->joyp_accessed = true; + gb->io_registers[GB_IO_IF] |= 0x10; + } + } + + gb->io_registers[GB_IO_JOYP] |= 0xC0; +} + +void GB_icd_set_joyp(GB_gameboy_t *gb, uint8_t value) +{ + uint8_t previous_state = gb->io_registers[GB_IO_JOYP] & 0xF; + gb->io_registers[GB_IO_JOYP] &= 0xF0; + gb->io_registers[GB_IO_JOYP] |= value & 0xF; + + if (previous_state & ~(gb->io_registers[GB_IO_JOYP] & 0xF)) { + if (!(gb->io_registers[GB_IO_IF] & 0x10)) { + gb->joyp_accessed = true; + gb->io_registers[GB_IO_IF] |= 0x10; + } + } + gb->io_registers[GB_IO_JOYP] |= 0xC0; +} + +void GB_set_key_state(GB_gameboy_t *gb, GB_key_t index, bool pressed) +{ + assert(index >= 0 && index < GB_KEY_MAX); + if (should_bounce(gb) && pressed != gb->keys[0][index]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[index] = bounce_for_key(gb, index); + } + gb->keys[0][index] = pressed; + GB_update_joyp(gb); +} + +void GB_set_key_state_for_player(GB_gameboy_t *gb, GB_key_t index, unsigned player, bool pressed) +{ + assert(index >= 0 && index < GB_KEY_MAX); + assert(player < 4); + if (should_bounce(gb) && pressed != gb->keys[player][index]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[index] = bounce_for_key(gb, index); + } + gb->keys[player][index] = pressed; + GB_update_joyp(gb); +} + +void GB_set_key_mask(GB_gameboy_t *gb, GB_key_mask_t mask) +{ + for (unsigned i = 0; i < GB_KEY_MAX; i++) { + bool pressed = mask & (1 << i); + if (should_bounce(gb) && pressed != gb->keys[0][i]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[i] = bounce_for_key(gb, i); + } + gb->keys[0][i] = pressed; + } + + GB_update_joyp(gb); +} + +void GB_set_key_mask_for_player(GB_gameboy_t *gb, GB_key_mask_t mask, unsigned player) +{ + for (unsigned i = 0; i < GB_KEY_MAX; i++) { + bool pressed = mask & (1 << i); + if (should_bounce(gb) && pressed != gb->keys[player][i]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[i] = bounce_for_key(gb, i); + } + gb->keys[player][i] = pressed; + } + + GB_update_joyp(gb); +} + +void GB_joypad_run(GB_gameboy_t *gb, unsigned cycles) +{ + if (gb->joypad_is_stable) return; + bool should_update_joyp = false; + gb->joypad_is_stable = true; + if (gb->joyp_switching_delay) { + gb->joypad_is_stable = false; + if (gb->joyp_switching_delay > cycles) { + gb->joyp_switching_delay -= cycles; + } + else { + gb->joyp_switching_delay = 0; + gb->io_registers[GB_IO_JOYP] = (gb->joyp_switch_value & 0xF0) | (gb->io_registers[GB_IO_JOYP] & 0x0F); + should_update_joyp = true; + } + } + + for (unsigned i = 0; i < GB_KEY_MAX; i++) { + if (gb->key_bounce_timing[i]) { + gb->joypad_is_stable = false; + should_update_joyp = true; + if (gb->key_bounce_timing[i] > cycles) { + gb->key_bounce_timing[i] -= cycles; + } + else { + gb->key_bounce_timing[i] = 0; + } + } + } + + if (should_update_joyp) { + GB_update_joyp(gb); + } +} + +bool GB_get_joyp_accessed(GB_gameboy_t *gb) +{ + return gb->joyp_accessed; +} + +void GB_clear_joyp_accessed(GB_gameboy_t *gb) +{ + gb->joyp_accessed = false; +} + +void GB_set_allow_illegal_inputs(GB_gameboy_t *gb, bool allow) +{ + gb->illegal_inputs_allowed = allow; +} + +void GB_set_emulate_joypad_bouncing(GB_gameboy_t *gb, bool emulate) +{ + gb->no_bouncing_emulation = !emulate; +} diff --git a/thirdparty/SameBoy-old/Core/joypad.h b/thirdparty/SameBoy-old/Core/joypad.h new file mode 100644 index 000000000..d39eff38d --- /dev/null +++ b/thirdparty/SameBoy-old/Core/joypad.h @@ -0,0 +1,46 @@ +#ifndef joypad_h +#define joypad_h +#include "defs.h" +#include + +typedef enum { + GB_KEY_RIGHT, + GB_KEY_LEFT, + GB_KEY_UP, + GB_KEY_DOWN, + GB_KEY_A, + GB_KEY_B, + GB_KEY_SELECT, + GB_KEY_START, + GB_KEY_MAX +} GB_key_t; + +typedef enum { + GB_KEY_RIGHT_MASK = 1 << GB_KEY_RIGHT, + GB_KEY_LEFT_MASK = 1 << GB_KEY_LEFT, + GB_KEY_UP_MASK = 1 << GB_KEY_UP, + GB_KEY_DOWN_MASK = 1 << GB_KEY_DOWN, + GB_KEY_A_MASK = 1 << GB_KEY_A, + GB_KEY_B_MASK = 1 << GB_KEY_B, + GB_KEY_SELECT_MASK = 1 << GB_KEY_SELECT, + GB_KEY_START_MASK = 1 << GB_KEY_START, +} GB_key_mask_t; + +// For example, for player 2's (0-based; logical player 3) A button, use GB_MASK_FOR_PLAYER(GB_KEY_A_MASK, 2) +#define GB_MASK_FOR_PLAYER(mask, player) ((x) << (player * 8)) + +void GB_set_key_state(GB_gameboy_t *gb, GB_key_t index, bool pressed); +void GB_set_key_state_for_player(GB_gameboy_t *gb, GB_key_t index, unsigned player, bool pressed); +void GB_set_key_mask(GB_gameboy_t *gb, GB_key_mask_t mask); +void GB_set_key_mask_for_player(GB_gameboy_t *gb, GB_key_mask_t mask, unsigned player); +void GB_icd_set_joyp(GB_gameboy_t *gb, uint8_t value); +bool GB_get_joyp_accessed(GB_gameboy_t *gb); +void GB_clear_joyp_accessed(GB_gameboy_t *gb); +void GB_set_allow_illegal_inputs(GB_gameboy_t *gb, bool allow); +void GB_set_emulate_joypad_bouncing(GB_gameboy_t *gb, bool emulate); + +#ifdef GB_INTERNAL +internal void GB_update_joyp(GB_gameboy_t *gb); +internal void GB_joypad_run(GB_gameboy_t *gb, unsigned cycles); +#endif +#endif /* joypad_h */ diff --git a/thirdparty/SameBoy-old/Core/mbc.c b/thirdparty/SameBoy-old/Core/mbc.c new file mode 100644 index 000000000..5d50db571 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/mbc.c @@ -0,0 +1,275 @@ +#include +#include +#include +#include "gb.h" + +const GB_cartridge_t GB_cart_defs[256] = { + // From http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header#0147_-_Cartridge_Type + /* MBC RAM BAT. RTC RUMB. */ + { GB_NO_MBC, false, false, false, false}, // 00h ROM ONLY + { GB_MBC1 , false, false, false, false}, // 01h MBC1 + { GB_MBC1 , true , false, false, false}, // 02h MBC1+RAM + { GB_MBC1 , true , true , false, false}, // 03h MBC1+RAM+BATTERY + [5] = + { GB_MBC2 , true , false, false, false}, // 05h MBC2 + { GB_MBC2 , true , true , false, false}, // 06h MBC2+BATTERY + [8] = + { GB_NO_MBC, true , false, false, false}, // 08h ROM+RAM + { GB_NO_MBC, true , true , false, false}, // 09h ROM+RAM+BATTERY + [0xB] = + { GB_MMM01 , false, false, false, false}, // 0Bh MMM01 + { GB_MMM01 , true , false, false, false}, // 0Ch MMM01+RAM + { GB_MMM01 , true , true , false, false}, // 0Dh MMM01+RAM+BATTERY + [0xF] = + { GB_MBC3 , false, true, true , false}, // 0Fh MBC3+TIMER+BATTERY + { GB_MBC3 , true , true, true , false}, // 10h MBC3+TIMER+RAM+BATTERY + { GB_MBC3 , false, false, false, false}, // 11h MBC3 + { GB_MBC3 , true , false, false, false}, // 12h MBC3+RAM + { GB_MBC3 , true , true , false, false}, // 13h MBC3+RAM+BATTERY + [0x19] = + { GB_MBC5 , false, false, false, false}, // 19h MBC5 + { GB_MBC5 , true , false, false, false}, // 1Ah MBC5+RAM + { GB_MBC5 , true , true , false, false}, // 1Bh MBC5+RAM+BATTERY + { GB_MBC5 , false, false, false, true }, // 1Ch MBC5+RUMBLE + { GB_MBC5 , true , false, false, true }, // 1Dh MBC5+RUMBLE+RAM + { GB_MBC5 , true , true , false, true }, // 1Eh MBC5+RUMBLE+RAM+BATTERY + [0x22] = + { GB_MBC7 , true, true, false, false}, // 22h MBC7+ACCEL+EEPROM + [0xFC] = + { GB_CAMERA, true , true , false, false}, // FCh POCKET CAMERA + { GB_NO_MBC, false, false, false, false}, // FDh BANDAI TAMA5 (Todo: Not supported) + { GB_HUC3 , true , true , true, false}, // FEh HuC3 + { GB_HUC1 , true , true , false, false}, // FFh HuC1+RAM+BATTERY +}; + +void GB_update_mbc_mappings(GB_gameboy_t *gb) +{ + switch (gb->cartridge_type->mbc_type) { + case GB_NO_MBC: return; + case GB_MBC1: + switch (gb->mbc1_wiring) { + case GB_STANDARD_MBC1_WIRING: + gb->mbc_rom_bank = gb->mbc1.bank_low | (gb->mbc1.bank_high << 5); + if (gb->mbc1.mode == 0) { + gb->mbc_ram_bank = 0; + gb->mbc_rom0_bank = 0; + } + else { + gb->mbc_ram_bank = gb->mbc1.bank_high; + gb->mbc_rom0_bank = gb->mbc1.bank_high << 5; + } + if ((gb->mbc_rom_bank & 0x1F) == 0) { + gb->mbc_rom_bank++; + } + break; + case GB_MBC1M_WIRING: + gb->mbc_rom_bank = (gb->mbc1.bank_low & 0xF) | (gb->mbc1.bank_high << 4); + if (gb->mbc1.mode == 0) { + gb->mbc_ram_bank = 0; + gb->mbc_rom0_bank = 0; + } + else { + gb->mbc_rom0_bank = gb->mbc1.bank_high << 4; + gb->mbc_ram_bank = 0; + } + if ((gb->mbc1.bank_low & 0x1F) == 0) { + gb->mbc_rom_bank++; + } + break; + nodefault; + } + break; + case GB_MBC2: + gb->mbc_rom_bank = gb->mbc2.rom_bank; + if ((gb->mbc_rom_bank & 0xF) == 0) { + gb->mbc_rom_bank = 1; + } + break; + case GB_MBC3: + gb->mbc_rom_bank = gb->mbc3.rom_bank; + gb->mbc_ram_bank = gb->mbc3.ram_bank; + if (!gb->is_mbc30) { + gb->mbc_rom_bank &= 0x7F; + } + if (gb->mbc_rom_bank == 0) { + gb->mbc_rom_bank = 1; + } + break; + case GB_MBC5: + case GB_CAMERA: + gb->mbc_rom_bank = gb->mbc5.rom_bank_low | (gb->mbc5.rom_bank_high << 8); + gb->mbc_ram_bank = gb->mbc5.ram_bank; + break; + case GB_MBC7: + gb->mbc_rom_bank = gb->mbc7.rom_bank; + break; + case GB_MMM01: + if (gb->mmm01.locked) { + if (gb->mmm01.multiplex_mode) { + gb->mbc_rom0_bank = (gb->mmm01.rom_bank_low & (gb->mmm01.rom_bank_mask << 1)) | + ((gb->mmm01.mbc1_mode? 0 : gb->mmm01.ram_bank_low) << 5) | + (gb->mmm01.rom_bank_high << 7); + gb->mbc_rom_bank = gb->mmm01.rom_bank_low | + (gb->mmm01.ram_bank_low << 5) | + (gb->mmm01.rom_bank_high << 7); + gb->mbc_ram_bank = gb->mmm01.rom_bank_mid | (gb->mmm01.ram_bank_high << 2); + } + else { + gb->mbc_rom0_bank = (gb->mmm01.rom_bank_low & (gb->mmm01.rom_bank_mask << 1)) | + (gb->mmm01.rom_bank_mid << 5) | + (gb->mmm01.rom_bank_high << 7); + gb->mbc_rom_bank = gb->mmm01.rom_bank_low | + (gb->mmm01.rom_bank_mid << 5) | + (gb->mmm01.rom_bank_high << 7); + if (gb->mmm01.mbc1_mode) { + gb->mbc_ram_bank = gb->mmm01.ram_bank_low | (gb->mmm01.ram_bank_high << 2); + } + else { + gb->mbc_ram_bank = gb->mmm01.ram_bank_low | (gb->mmm01.ram_bank_high << 2); + } + } + if (gb->mbc_rom_bank == gb->mbc_rom0_bank) { + gb->mbc_rom_bank++; + } + } + else { + gb->mbc_rom_bank = -1; + gb->mbc_rom0_bank = -2; + } + break; + case GB_HUC1: + gb->mbc_rom_bank = gb->huc1.bank_low; + gb->mbc_ram_bank = gb->huc1.bank_high; + break; + case GB_HUC3: + gb->mbc_rom_bank = gb->huc3.rom_bank; + gb->mbc_ram_bank = gb->huc3.ram_bank; + break; + case GB_TPP1: + gb->mbc_rom_bank = gb->tpp1.rom_bank; + gb->mbc_ram_bank = gb->tpp1.ram_bank; + gb->mbc_ram_enable = (gb->tpp1.mode == 2) || (gb->tpp1.mode == 3); + break; + nodefault; + } +} + +void GB_configure_cart(GB_gameboy_t *gb) +{ + gb->cartridge_type = &GB_cart_defs[gb->rom[0x147]]; + if (gb->cartridge_type->mbc_type == GB_MMM01) { + uint8_t *temp = malloc(0x8000); + memcpy(temp, gb->rom, 0x8000); + memmove(gb->rom, gb->rom + 0x8000, gb->rom_size - 0x8000); + memcpy(gb->rom + gb->rom_size - 0x8000, temp, 0x8000); + free(temp); + } + else { + const GB_cartridge_t *maybe_mmm01_type = &GB_cart_defs[gb->rom[gb->rom_size - 0x8000 + 0x147]]; + if (memcmp(gb->rom + 0x104, gb->rom + gb->rom_size - 0x8000 + 0x104, 0x30) == 0) { + if (maybe_mmm01_type->mbc_type == GB_MMM01) { + gb->cartridge_type = maybe_mmm01_type; + } + else if(gb->rom[gb->rom_size - 0x8000 + 0x147] == 0x11) { + GB_log(gb, "ROM header reports MBC3, but it appears to be an MMM01 ROM. Assuming cartridge uses MMM01."); + gb->cartridge_type = &GB_cart_defs[0xB]; + } + } + } + + if (gb->rom[0x147] == 0xBC && + gb->rom[0x149] == 0xC1 && + gb->rom[0x14A] == 0x65) { + static const GB_cartridge_t tpp1 = {GB_TPP1, true, true, true, true}; + gb->cartridge_type = &tpp1; + gb->tpp1.rom_bank = 1; + } + + if (gb->cartridge_type->mbc_type != GB_MMM01) { + if (gb->rom[0x147] == 0 && gb->rom_size > 0x8000) { + GB_log(gb, "ROM header reports no MBC, but file size is over 32Kb. Assuming cartridge uses MBC3.\n"); + gb->cartridge_type = &GB_cart_defs[0x11]; + } + else if (gb->rom[0x147] != 0 && memcmp(gb->cartridge_type, &GB_cart_defs[0], sizeof(GB_cart_defs[0])) == 0) { + GB_log(gb, "Cartridge type %02x is not yet supported.\n", gb->rom[0x147]); + } + } + + if (gb->mbc_ram) { + free(gb->mbc_ram); + gb->mbc_ram = NULL; + gb->mbc_ram_size = 0; + } + + if (gb->cartridge_type->has_ram) { + if (gb->cartridge_type->mbc_type == GB_MBC2) { + gb->mbc_ram_size = 0x200; + } + else if (gb->cartridge_type->mbc_type == GB_MBC7) { + gb->mbc_ram_size = 0x100; + } + else if (gb->cartridge_type->mbc_type == GB_TPP1) { + if (gb->rom[0x152] >= 1 && gb->rom[0x152] <= 9) { + gb->mbc_ram_size = 0x2000 << (gb->rom[0x152] - 1); + } + } + else { + static const unsigned ram_sizes[256] = {0, 0x800, 0x2000, 0x8000, 0x20000, 0x10000}; + if (gb->cartridge_type->mbc_type == GB_MMM01) { + gb->mbc_ram_size = ram_sizes[gb->rom[gb->rom_size - 0x8000 + 0x149]]; + } + else { + gb->mbc_ram_size = ram_sizes[gb->rom[0x149]]; + } + } + + if (gb->mbc_ram_size) { + gb->mbc_ram = malloc(gb->mbc_ram_size); + } + + /* Todo: Some games assume unintialized MBC RAM is 0xFF. It this true for all cartridge types? */ + memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); + } + + /* MBC1 has at least 3 types of wiring (We currently support two (Standard and 4bit-MBC1M) of these). + See http://forums.nesdev.com/viewtopic.php?f=20&t=14099 */ + + /* Attempt to "guess" wiring */ + if (gb->cartridge_type->mbc_type == GB_MBC1) { + if (gb->rom_size >= 0x44000 && memcmp(gb->rom + 0x104, gb->rom + 0x40104, 0x30) == 0) { + gb->mbc1_wiring = GB_MBC1M_WIRING; + } + } + + /* Detect MBC30 */ + if (gb->cartridge_type->mbc_type == GB_MBC3) { + if (gb->rom_size > 0x200000 || gb->mbc_ram_size > 0x8000) { + gb->is_mbc30 = true; + } + } + + GB_reset_mbc(gb); +} + +void GB_reset_mbc(GB_gameboy_t *gb) +{ + if (gb->cartridge_type->mbc_type == GB_MMM01) { + gb->mbc_rom_bank = -1; + gb->mbc_rom0_bank = -2; + gb->mmm01.ram_bank_mask = -1; + } + else if (gb->cartridge_type->mbc_type == GB_MBC5 || + gb->cartridge_type->mbc_type == GB_CAMERA) { + gb->mbc5.rom_bank_low = 1; + gb->mbc_rom_bank = 1; + } + else if (gb->cartridge_type->mbc_type == GB_MBC7) { + gb->mbc7.x_latch = gb->mbc7.y_latch = 0x8000; + gb->mbc7.latch_ready = true; + gb->mbc7.read_bits = -1; + gb->mbc7.eeprom_do = true; + } + else { + gb->mbc_rom_bank = 1; + } +} diff --git a/thirdparty/SameBoy-old/Core/mbc.h b/thirdparty/SameBoy-old/Core/mbc.h new file mode 100644 index 000000000..8bdb07991 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/mbc.h @@ -0,0 +1,33 @@ +#ifndef MBC_h +#define MBC_h +#include "defs.h" +#include + +typedef struct { + enum { + GB_NO_MBC, + GB_MBC1, + GB_MBC2, + GB_MBC3, + GB_MBC5, + GB_MBC7, + GB_MMM01, + GB_HUC1, + GB_HUC3, + GB_TPP1, + GB_CAMERA, + } mbc_type; + bool has_ram; + bool has_battery; + bool has_rtc; + bool has_rumble; +} GB_cartridge_t; + +#ifdef GB_INTERNAL +internal extern const GB_cartridge_t GB_cart_defs[256]; +internal void GB_update_mbc_mappings(GB_gameboy_t *gb); +internal void GB_configure_cart(GB_gameboy_t *gb); +internal void GB_reset_mbc(GB_gameboy_t *gb); +#endif + +#endif /* MBC_h */ diff --git a/thirdparty/SameBoy-old/Core/memory.c b/thirdparty/SameBoy-old/Core/memory.c new file mode 100644 index 000000000..bac55e078 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/memory.c @@ -0,0 +1,1871 @@ +#include +#include +#include "gb.h" + +typedef uint8_t read_function_t(GB_gameboy_t *gb, uint16_t addr); +typedef void write_function_t(GB_gameboy_t *gb, uint16_t addr, uint8_t value); + +typedef enum { + GB_BUS_MAIN, /* In DMG: Cart and RAM. In CGB: Cart only */ + GB_BUS_RAM, /* In CGB only. */ + GB_BUS_VRAM, +} bus_t; + +static bus_t bus_for_addr(GB_gameboy_t *gb, uint16_t addr) +{ + if (addr < 0x8000) { + return GB_BUS_MAIN; + } + if (addr < 0xA000) { + return GB_BUS_VRAM; + } + if (addr < 0xC000) { + return GB_BUS_MAIN; + } + return GB_is_cgb(gb)? GB_BUS_RAM : GB_BUS_MAIN; +} + +static uint16_t bitwise_glitch(uint16_t a, uint16_t b, uint16_t c) +{ + return ((a ^ c) & (b ^ c)) ^ c; +} + +static uint16_t bitwise_glitch_read(uint16_t a, uint16_t b, uint16_t c) +{ + return b | (a & c); +} + +static uint16_t bitwise_glitch_read_secondary(uint16_t a, uint16_t b, uint16_t c, uint16_t d) +{ + return (b & (a | c | d)) | (a & c & d); +} + +/* + Used on the MGB in some scenarios +static uint16_t bitwise_glitch_mgb(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e, bool variant) +{ + return (c & (e | d | b | (variant? 0 : a))) | (b & d & (a | e)); +} +*/ + +static uint16_t bitwise_glitch_tertiary_read_1(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e) +{ + return c | (a & b & d & e); +} + +static uint16_t bitwise_glitch_tertiary_read_2(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e) +{ + return (c & (a | b | d | e)) | (a & b & d & e); +} + +static uint16_t bitwise_glitch_tertiary_read_3(uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e) +{ + return (c & (a | b | d | e)) | (b & d & e); +} + +static uint16_t bitwise_glitch_quaternary_read_dmg(uint16_t a, uint16_t b, uint16_t c, uint16_t d, + uint16_t e, uint16_t f, uint16_t g, uint16_t h) +{ + /* On my DMG, some cases are non-deterministic, while on some other DMGs they yield constant zeros. + The non deterministic cases are affected by (on the row 40 case) 34, 36, 3e and 28, and potentially + others. For my own sanity I'm going to emulate the DMGs that output zeros. */ + (void)a; + return (e & (h | g | (~d & f) | c | b)) | (c & g & h); +} + +/* + +// Oh my. +static uint16_t bitwise_glitch_quaternary_read_mgb(uint16_t a, uint16_t b, uint16_t c, uint16_t d, + uint16_t e, uint16_t f, uint16_t g, uint16_t h) +{ + return (e & (h | g | c | (a & b))) | ((c & h) & (g & (~f | b | a | ~d) | (a & b & f))); +} +*/ + +static uint16_t bitwise_glitch_quaternary_read_sgb2(uint16_t a, uint16_t b, uint16_t c, uint16_t d, + uint16_t e, uint16_t f, uint16_t g, uint16_t h) +{ + return (e & (h | g | c | (a & b))) | ((c & g & h) & (b | a | ~f)); +} + +void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address) +{ + if (GB_is_cgb(gb)) return; + + if (address >= 0xFE00 && address < 0xFF00) { + GB_display_sync(gb); + if (gb->accessed_oam_row != 0xFF && gb->accessed_oam_row >= 8) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + base[0] = bitwise_glitch(base[0], + base[-4], + base[-2]); + for (unsigned i = 2; i < 8; i++) { + gb->oam[gb->accessed_oam_row + i] = gb->oam[gb->accessed_oam_row - 8 + i]; + } + } + } +} + +static void oam_bug_secondary_read_corruption(GB_gameboy_t *gb) +{ + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + base[-4] = bitwise_glitch_read_secondary(base[-8], + base[-4], + base[0], + base[-2]); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + } + } +} + +/* +static void oam_bug_tertiary_read_corruption_mgb(GB_gameboy_t *gb) +{ + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + uint16_t temp = bitwise_glitch_mgb( + base[0], + base[-2], + base[-4], + base[-8], + base[-16], + true); + + base[-4] = bitwise_glitch_mgb( + base[0], + base[-2], + base[-4], + base[-8], + base[-16], + false); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x20 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + } + + base[-8] = temp; + base[-16] = temp; + } +} +*/ + +static void oam_bug_quaternary_read_corruption(GB_gameboy_t *gb, typeof(bitwise_glitch_quaternary_read_dmg) *bitwise_op) +{ + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + + base[-4] = bitwise_op(*(uint16_t *)gb->oam, + base[0], + base[-2], + base[-3], + base[-4], + base[-7], + base[-8], + base[-16]); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x20 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + } + } +} + +static void oam_bug_tertiary_read_corruption(GB_gameboy_t *gb, typeof(bitwise_glitch_tertiary_read_1) *bitwise_op) +{ + if (gb->accessed_oam_row < 0x98) { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + + /* On some instances, the corruption row is copied to the first row for some accessed row. On my DMG it happens + for row 80, and on my MGB it happens on row 60. Some instances only copy odd or even bytes. Additionally, + for some instances on accessed rows that do not affect the first row, the last two bytes of the preceeding + row are also corrupted in a non-deterministic probability. */ + + base[-4] = bitwise_op( + base[0], + base[-2], + base[-4], + base[-8], + base[-16]); + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row - 0x10 + i] = gb->oam[gb->accessed_oam_row - 0x20 + i] = gb->oam[gb->accessed_oam_row - 0x08 + i]; + } + } +} + +void GB_trigger_oam_bug_read(GB_gameboy_t *gb, uint16_t address) +{ + if (GB_is_cgb(gb)) return; + + if (address >= 0xFE00 && address < 0xFF00) { + if (gb->accessed_oam_row != 0xFF && gb->accessed_oam_row >= 8) { + if ((gb->accessed_oam_row & 0x18) == 0x10) { + oam_bug_secondary_read_corruption(gb); + } + else if ((gb->accessed_oam_row & 0x18) == 0x00) { + /* Everything in this specific case is *extremely* revision and instance specific. */ + if (gb->model == GB_MODEL_MGB) { + /* TODO: This is rather simplified, research further */ + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_3); + } + else if (gb->accessed_oam_row == 0x40) { + oam_bug_quaternary_read_corruption(gb, + ((gb->model & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB2)? + bitwise_glitch_quaternary_read_sgb2: + bitwise_glitch_quaternary_read_dmg); + } + else if ((gb->model & ~GB_MODEL_NO_SFC_BIT) != GB_MODEL_SGB2) { + if (gb->accessed_oam_row == 0x20) { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_2); + } + else if (gb->accessed_oam_row == 0x60) { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_3); + } + else { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_1); + } + } + else { + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_2); + } + } + else { + uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); + base[-4] = + base[0] = bitwise_glitch_read(base[0], + base[-4], + base[-2]); + } + for (unsigned i = 0; i < 8; i++) { + gb->oam[gb->accessed_oam_row + i] = gb->oam[gb->accessed_oam_row - 8 + i]; + } + if (gb->accessed_oam_row == 0x80) { + memcpy(gb->oam, gb->oam + gb->accessed_oam_row, 8); + } + else if (gb->model == GB_MODEL_MGB && gb->accessed_oam_row == 0x40) { + memcpy(gb->oam, gb->oam + gb->accessed_oam_row, 8); + } + } + } +} + + +static bool is_addr_in_dma_use(GB_gameboy_t *gb, uint16_t addr) +{ + if (!GB_is_dma_active(gb) || addr >= 0xFE00 || gb->hdma_in_progress) return false; + if (gb->dma_current_dest == 0xFF || gb->dma_current_dest == 0x0) return false; // Warm up + if (addr >= 0xFE00) return false; + if (gb->dma_current_src == addr) return false; // Shortcut for DMA access flow + if (gb->dma_current_src >= 0xE000 && (gb->dma_current_src & ~0x2000) == addr) return false; + if (GB_is_cgb(gb)) { + if (addr >= 0xC000) { + return bus_for_addr(gb, gb->dma_current_src) != GB_BUS_VRAM; + } + if (gb->dma_current_src >= 0xE000) { + return bus_for_addr(gb, addr) != GB_BUS_VRAM; + } + } + return bus_for_addr(gb, addr) == bus_for_addr(gb, gb->dma_current_src); +} + +static uint8_t read_rom(GB_gameboy_t *gb, uint16_t addr) +{ + if (addr < 0x100 && !gb->boot_rom_finished) { + return gb->boot_rom[addr]; + } + + if (addr >= 0x200 && addr < 0x900 && GB_is_cgb(gb) && !gb->boot_rom_finished) { + return gb->boot_rom[addr]; + } + + if (!gb->rom_size) { + return 0xFF; + } + unsigned effective_address = (addr & 0x3FFF) + gb->mbc_rom0_bank * 0x4000; + return gb->rom[effective_address & (gb->rom_size - 1)]; +} + +static uint8_t read_mbc_rom(GB_gameboy_t *gb, uint16_t addr) +{ + unsigned effective_address = (addr & 0x3FFF) + gb->mbc_rom_bank * 0x4000; + return gb->rom[effective_address & (gb->rom_size - 1)]; +} + +static uint8_t read_vram(GB_gameboy_t *gb, uint16_t addr) +{ + if (likely(!GB_is_dma_active(gb))) { + /* Prevent syncing from a DMA read. Batching doesn't happen during DMA anyway. */ + GB_display_sync(gb); + } + else { + if ((gb->dma_current_dest & 0xE000) == 0x8000) { + // TODO: verify conflict behavior + return gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)]; + } + } + + if (unlikely(gb->vram_read_blocked && !gb->in_dma_read)) { + return 0xFF; + } + if (unlikely(gb->display_state == 22 && GB_is_cgb(gb) && !gb->cgb_double_speed)) { + if (addr & 0x1000) { + addr = gb->last_tile_index_address; + } + else if (gb->last_tile_data_address & 0x1000) { + /* TODO: This is case is more complicated then the rest and differ between revisions + It's probably affected by how VRAM is layed out, might be easier after a decap is done*/ + } + else { + addr = gb->last_tile_data_address; + } + } + return gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)]; +} + +static uint8_t read_mbc7_ram(GB_gameboy_t *gb, uint16_t addr) +{ + if (!gb->mbc_ram_enable || !gb->mbc7.secondary_ram_enable) return 0xFF; + if (addr >= 0xB000) return 0xFF; + switch ((addr >> 4) & 0xF) { + case 2: return gb->mbc7.x_latch; + case 3: return gb->mbc7.x_latch >> 8; + case 4: return gb->mbc7.y_latch; + case 5: return gb->mbc7.y_latch >> 8; + case 6: return 0; + case 8: return gb->mbc7.eeprom_do | (gb->mbc7.eeprom_di << 1) | + (gb->mbc7.eeprom_clk << 6) | (gb->mbc7.eeprom_cs << 7); + } + return 0xFF; +} + +static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) +{ + if (gb->cartridge_type->mbc_type == GB_MBC7) { + return read_mbc7_ram(gb, addr); + } + + if (gb->cartridge_type->mbc_type == GB_HUC3) { + switch (gb->huc3.mode) { + case 0xC: // RTC read + if (gb->huc3.access_flags == 0x2) { + return 1; + } + return gb->huc3.read; + case 0xD: // RTC status + return 1; + case 0xE: // IR mode + return gb->effective_ir_input; // TODO: What are the other bits? + default: + GB_log(gb, "Unsupported HuC-3 mode %x read: %04x\n", gb->huc3.mode, addr); + return 1; // TODO: What happens in this case? + case 0: // TODO: R/O RAM? (or is it disabled?) + case 0xA: // RAM + break; + } + } + + if (gb->cartridge_type->mbc_type == GB_TPP1) { + switch (gb->tpp1.mode) { + case 0: + switch (addr & 3) { + case 0: return gb->tpp1.rom_bank; + case 1: return gb->tpp1.rom_bank >> 8; + case 2: return gb->tpp1.ram_bank; + case 3: return gb->rumble_strength | gb->tpp1_mr4; + nodefault; + } + case 2: + case 3: + break; // Read RAM + case 5: + return gb->rtc_latched.data[(addr & 3) ^ 3]; + default: + return 0xFF; + } + } + else if ((!gb->mbc_ram_enable) && + gb->cartridge_type->mbc_type != GB_CAMERA && + gb->cartridge_type->mbc_type != GB_HUC1 && + gb->cartridge_type->mbc_type != GB_HUC3) { + return 0xFF; + } + + if (gb->cartridge_type->mbc_type == GB_HUC1 && gb->huc1.ir_mode) { + return 0xC0 | gb->effective_ir_input; + } + + if (gb->cartridge_type->has_rtc && gb->cartridge_type->mbc_type != GB_HUC3 && + gb->mbc3.rtc_mapped) { + /* RTC read */ + if (gb->mbc_ram_bank <= 4) { + gb->rtc_latched.seconds &= 0x3F; + gb->rtc_latched.minutes &= 0x3F; + gb->rtc_latched.hours &= 0x1F; + gb->rtc_latched.high &= 0xC1; + return gb->rtc_latched.data[gb->mbc_ram_bank]; + } + return 0xFF; + } + + if (gb->camera_registers_mapped) { + return GB_camera_read_register(gb, addr); + } + + if (!gb->mbc_ram || !gb->mbc_ram_size) { + return 0xFF; + } + + if (gb->cartridge_type->mbc_type == GB_CAMERA) { + /* Forbid reading RAM while the camera is busy. */ + if (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1) { + return 0; + } + + if (gb->mbc_ram_bank == 0 && addr >= 0xA100 && addr < 0xAF00) { + return GB_camera_read_image(gb, addr - 0xA100); + } + } + + uint8_t effective_bank = gb->mbc_ram_bank; + if (gb->cartridge_type->mbc_type == GB_MBC3 && !gb->is_mbc30) { + if (gb->cartridge_type->has_rtc) { + if (effective_bank > 3) return 0xFF; + } + effective_bank &= 0x3; + } + uint8_t ret = gb->mbc_ram[((addr & 0x1FFF) + effective_bank * 0x2000) & (gb->mbc_ram_size - 1)]; + if (gb->cartridge_type->mbc_type == GB_MBC2) { + ret |= 0xF0; + } + return ret; +} + +static uint8_t read_ram(GB_gameboy_t *gb, uint16_t addr) +{ + return gb->ram[addr & 0x0FFF]; +} + +static uint8_t read_banked_ram(GB_gameboy_t *gb, uint16_t addr) +{ + return gb->ram[(addr & 0x0FFF) + gb->cgb_ram_bank * 0x1000]; +} + +static inline void sync_ppu_if_needed(GB_gameboy_t *gb, uint8_t register_accessed) +{ + switch (register_accessed) { + case GB_IO_IF: + case GB_IO_LCDC: + case GB_IO_STAT: + case GB_IO_SCY: + case GB_IO_SCX: + case GB_IO_LY: + case GB_IO_LYC: + case GB_IO_DMA: + case GB_IO_BGP: + case GB_IO_OBP0: + case GB_IO_OBP1: + case GB_IO_WY: + case GB_IO_WX: + case GB_IO_HDMA1: + case GB_IO_HDMA2: + case GB_IO_HDMA3: + case GB_IO_HDMA4: + case GB_IO_HDMA5: + case GB_IO_BGPI: + case GB_IO_BGPD: + case GB_IO_OBPI: + case GB_IO_OBPD: + case GB_IO_OPRI: + GB_display_sync(gb); + break; + } +} + +internal uint8_t GB_read_oam(GB_gameboy_t *gb, uint8_t addr) +{ + if (addr < 0xA0) { + return gb->oam[addr]; + } + + switch (gb->model) { + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + return (addr & 0xF0) | (addr >> 4); + + case GB_MODEL_CGB_D: + if (addr >= 0xC0) { + addr |= 0xF0; + } + return gb->extra_oam[addr - 0xA0]; + + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_0: + addr &= ~0x18; + return gb->extra_oam[addr - 0xA0]; + + case GB_MODEL_DMG_B: + case GB_MODEL_MGB: + case GB_MODEL_SGB_NTSC: + case GB_MODEL_SGB_PAL: + case GB_MODEL_SGB_NTSC_NO_SFC: + case GB_MODEL_SGB_PAL_NO_SFC: + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + return 0; + } + unreachable(); +} + +static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) +{ + if (addr < 0xFE00) { + return read_banked_ram(gb, addr); + } + + if (addr < 0xFF00) { + GB_display_sync(gb); + if (gb->oam_write_blocked && !GB_is_cgb(gb)) { + if (!gb->disable_oam_corruption) { + GB_trigger_oam_bug_read(gb, addr); + } + return 0xFF; + } + + if (GB_is_dma_active(gb)) { + /* Todo: Does reading from OAM during DMA causes the OAM bug? */ + return 0xFF; + } + + if (gb->oam_read_blocked) { + if (!GB_is_cgb(gb) && !gb->disable_oam_corruption) { + if (addr < 0xFEA0) { + uint16_t *oam = (uint16_t *)gb->oam; + if (gb->accessed_oam_row == 0) { + oam[(addr & 0xF8) >> 1] = + oam[0] = bitwise_glitch_read(oam[0], + oam[(addr & 0xF8) >> 1], + oam[(addr & 0xFF) >> 1]); + + for (unsigned i = 2; i < 8; i++) { + gb->oam[i] = gb->oam[(addr & 0xF8) + i]; + } + } + else if (gb->accessed_oam_row == 0xA0) { + uint8_t target = (addr & 7) | 0x98; + uint16_t a = oam[0x9C >> 1], + b = oam[target >> 1], + c = oam[(addr & 0xF8) >> 1]; + switch (addr & 7) { + case 0: + case 1: + /* Probably instance specific */ + if ((gb->model & GB_MODEL_FAMILY_MASK) == GB_MODEL_DMG_FAMILY) { + oam[target >> 1] = (a & b) | (a & c) | (b & c); + } + else { + oam[target >> 1] = bitwise_glitch_read(a, b, c); + } + break; + case 2: + case 3: { + /* Probably instance specific */ + c = oam[(addr & 0xFE) >> 1]; + + // MGB only: oam[target >> 1] = bitwise_glitch_read(a, b, c); + oam[target >> 1] = (a & b) | (a & c) | (b & c); + break; + } + case 4: + case 5: + break; // No additional corruption + case 6: + case 7: + oam[target >> 1] = bitwise_glitch_read(a, b, c); + break; + + nodefault; + } + + for (unsigned i = 0; i < 8; i++) { + gb->oam[(addr & 0xF8) + i] = gb->oam[0x98 + i]; + } + } + } + } + return 0xFF; + } + + return GB_read_oam(gb, addr); + } + + if (addr < 0xFF80) { + sync_ppu_if_needed(gb, addr); + switch (addr & 0xFF) { + case GB_IO_IF: + return gb->io_registers[GB_IO_IF] | 0xE0; + case GB_IO_TAC: + return gb->io_registers[GB_IO_TAC] | 0xF8; + case GB_IO_STAT: + return gb->io_registers[GB_IO_STAT] | 0x80; + case GB_IO_OPRI: + if (!GB_is_cgb(gb)) { + return 0xFF; + } + return gb->io_registers[GB_IO_OPRI] | 0xFE; + + case GB_IO_PCM12: + if (!GB_is_cgb(gb)) return 0xFF; + GB_apu_run(gb, true); + return ((gb->apu.is_active[GB_SQUARE_2] ? (gb->apu.samples[GB_SQUARE_2] << 4) : 0) | + (gb->apu.is_active[GB_SQUARE_1] ? (gb->apu.samples[GB_SQUARE_1]) : 0)) & (gb->model <= GB_MODEL_CGB_C? gb->apu.pcm_mask[0] : 0xFF); + case GB_IO_PCM34: + if (!GB_is_cgb(gb)) return 0xFF; + GB_apu_run(gb, true); + return ((gb->apu.is_active[GB_NOISE] ? (gb->apu.samples[GB_NOISE] << 4) : 0) | + (gb->apu.is_active[GB_WAVE] ? (gb->apu.samples[GB_WAVE]) : 0)) & (gb->model <= GB_MODEL_CGB_C? gb->apu.pcm_mask[1] : 0xFF); + case GB_IO_JOYP: + gb->joyp_accessed = true; + GB_timing_sync(gb); + if (unlikely(gb->joyp_switching_delay)) { + return (gb->io_registers[addr & 0xFF] & ~0x30) | (gb->joyp_switch_value & 0x30); + } + return gb->io_registers[addr & 0xFF]; + case GB_IO_TMA: + case GB_IO_LCDC: + case GB_IO_SCY: + case GB_IO_SCX: + case GB_IO_LY: + case GB_IO_LYC: + case GB_IO_BGP: + case GB_IO_OBP0: + case GB_IO_OBP1: + case GB_IO_WY: + case GB_IO_WX: + case GB_IO_SC: + case GB_IO_SB: + case GB_IO_DMA: + return gb->io_registers[addr & 0xFF]; + case GB_IO_TIMA: + if (gb->tima_reload_state == GB_TIMA_RELOADING) { + return 0; + } + return gb->io_registers[GB_IO_TIMA]; + case GB_IO_DIV: + return gb->div_counter >> 8; + case GB_IO_HDMA5: + if (!gb->cgb_mode) return 0xFF; + return ((gb->hdma_on || gb->hdma_on_hblank)? 0 : 0x80) | ((gb->hdma_steps_left - 1) & 0x7F); + case GB_IO_SVBK: + if (!gb->cgb_mode) { + return 0xFF; + } + return gb->cgb_ram_bank | ~0x7; + case GB_IO_VBK: + if (!GB_is_cgb(gb)) { + return 0xFF; + } + return gb->cgb_vram_bank | ~0x1; + + /* Todo: It seems that a CGB in DMG mode can access BGPI and OBPI, but not BGPD and OBPD? */ + case GB_IO_BGPI: + case GB_IO_OBPI: + if (!GB_is_cgb(gb)) { + return 0xFF; + } + return gb->io_registers[addr & 0xFF] | 0x40; + + case GB_IO_BGPD: + case GB_IO_OBPD: + { + if (!gb->cgb_mode && gb->boot_rom_finished) { + return 0xFF; + } + if (gb->cgb_palettes_blocked) { + return 0xFF; + } + uint8_t index_reg = (addr & 0xFF) - 1; + return ((addr & 0xFF) == GB_IO_BGPD? + gb->background_palettes_data : + gb->object_palettes_data)[gb->io_registers[index_reg] & 0x3F]; + } + + case GB_IO_KEY1: + if (!gb->cgb_mode) { + return 0xFF; + } + return (gb->io_registers[GB_IO_KEY1] & 0x7F) | (gb->cgb_double_speed? 0xFE : 0x7E); + + case GB_IO_RP: { + if (!gb->cgb_mode) return 0xFF; + /* You will read your own IR LED if it's on. */ + uint8_t ret = (gb->io_registers[GB_IO_RP] & 0xC1) | 0x2E; + if (gb->model != GB_MODEL_CGB_E) { + ret |= 0x10; + } + if (((gb->io_registers[GB_IO_RP] & 0xC0) == 0xC0 && gb->effective_ir_input) && gb->model <= GB_MODEL_CGB_E) { + ret &= ~2; + } + return ret; + } + case GB_IO_PSWX: + case GB_IO_PSWY: + return GB_is_cgb(gb)? gb->io_registers[addr & 0xFF] : 0xFF; + case GB_IO_PSW: + return gb->cgb_mode? gb->io_registers[addr & 0xFF] : 0xFF; + case GB_IO_UNKNOWN5: + return GB_is_cgb(gb)? gb->io_registers[addr & 0xFF] | 0x8F : 0xFF; + default: + if ((addr & 0xFF) >= GB_IO_NR10 && (addr & 0xFF) <= GB_IO_WAV_END) { + return GB_apu_read(gb, addr & 0xFF); + } + return 0xFF; + } + unreachable(); + } + + if (addr == 0xFFFF) { + /* Interrupt Mask */ + return gb->interrupt_enable; + } + + /* HRAM */ + return gb->hram[addr - 0xFF80]; +} + +static read_function_t *const read_map[] = +{ + read_rom, read_rom, read_rom, read_rom, /* 0XXX, 1XXX, 2XXX, 3XXX */ + read_mbc_rom, read_mbc_rom, read_mbc_rom, read_mbc_rom, /* 4XXX, 5XXX, 6XXX, 7XXX */ + read_vram, read_vram, /* 8XXX, 9XXX */ + read_mbc_ram, read_mbc_ram, /* AXXX, BXXX */ + read_ram, read_banked_ram, /* CXXX, DXXX */ + read_ram, read_high_memory, /* EXXX FXXX */ +}; + +void GB_set_read_memory_callback(GB_gameboy_t *gb, GB_read_memory_callback_t callback) +{ + gb->read_memory_callback = callback; +} + +uint8_t GB_read_memory(GB_gameboy_t *gb, uint16_t addr) +{ + if (unlikely(gb->n_watchpoints)) { + GB_debugger_test_read_watchpoint(gb, addr); + } + if (unlikely(is_addr_in_dma_use(gb, addr))) { + if (GB_is_cgb(gb) && bus_for_addr(gb, addr) == GB_BUS_MAIN && gb->dma_current_src >= 0xE000) { + /* This is cart specific! Everdrive 7X on a CGB-A or 0 behaves differently. */ + return 0xFF; + } + + if (GB_is_cgb(gb) && bus_for_addr(gb, gb->dma_current_src) != GB_BUS_RAM && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + } + else if (GB_is_cgb(gb) && gb->dma_current_src >= 0xE000 && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + } + else { + addr = (gb->dma_current_src - 1); + } + } + uint8_t data = read_map[addr >> 12](gb, addr); + GB_apply_cheat(gb, addr, &data); + if (unlikely(gb->read_memory_callback)) { + data = gb->read_memory_callback(gb, addr, data); + } + return data; +} + +uint8_t GB_safe_read_memory(GB_gameboy_t *gb, uint16_t addr) +{ + if (unlikely(addr == 0xFF00 + GB_IO_JOYP)) { + return gb->io_registers[GB_IO_JOYP]; + } + gb->disable_oam_corruption = true; + uint8_t data = read_map[addr >> 12](gb, addr); + gb->disable_oam_corruption = false; + GB_apply_cheat(gb, addr, &data); + if (unlikely(gb->read_memory_callback)) { + data = gb->read_memory_callback(gb, addr, data); + } + return data; +} + +static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + switch (gb->cartridge_type->mbc_type) { + case GB_NO_MBC: return; + case GB_MBC1: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->mbc_ram_enable = (value & 0xF) == 0xA; break; + case 0x2000: case 0x3000: gb->mbc1.bank_low = value; break; + case 0x4000: case 0x5000: gb->mbc1.bank_high = value; break; + case 0x6000: case 0x7000: gb->mbc1.mode = value; break; + } + break; + case GB_MBC2: + switch (addr & 0x4100) { + case 0x0000: gb->mbc_ram_enable = (value & 0xF) == 0xA; break; + case 0x0100: gb->mbc2.rom_bank = value; break; + } + break; + case GB_MBC3: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->mbc_ram_enable = (value & 0xF) == 0xA; break; + case 0x2000: case 0x3000: gb->mbc3.rom_bank = value; break; + case 0x4000: case 0x5000: + gb->mbc3.ram_bank = value; + gb->mbc3.rtc_mapped = value & 8; + break; + case 0x6000: case 0x7000: + memcpy(&gb->rtc_latched, &gb->rtc_real, sizeof(gb->rtc_real)); + break; + } + break; + case GB_MBC5: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->mbc_ram_enable = value == 0x0A; break; + case 0x2000: gb->mbc5.rom_bank_low = value; break; + case 0x3000: gb->mbc5.rom_bank_high = value; break; + case 0x4000: case 0x5000: + if (gb->cartridge_type->has_rumble) { + if (!!(value & 8) != !!gb->rumble_strength) { + gb->rumble_strength = gb->rumble_strength? 0 : 3; + } + value &= 7; + } + gb->mbc5.ram_bank = value; + break; + } + break; + case GB_CAMERA: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->mbc_ram_enable = (value & 0xF) == 0xA; break; + case 0x2000: case 0x3000: gb->mbc5.rom_bank_low = value; break; + case 0x4000: case 0x5000: + gb->mbc5.ram_bank = value; + gb->camera_registers_mapped = (value & 0x10); + break; + } + break; + case GB_MBC7: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->mbc_ram_enable = value == 0x0A; break; + case 0x2000: case 0x3000: gb->mbc7.rom_bank = value; break; + case 0x4000: case 0x5000: gb->mbc7.secondary_ram_enable = value == 0x40; break; + } + break; + case GB_MMM01: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: + gb->mbc_ram_enable = (value & 0xF) == 0xA; + if (!gb->mmm01.locked) { + gb->mmm01.ram_bank_mask = value >> 4; + gb->mmm01.locked = value & 0x40; + } + break; + case 0x2000: case 0x3000: + if (!gb->mmm01.locked) { + gb->mmm01.rom_bank_mid = value >> 5; + } + gb->mmm01.rom_bank_low &= (gb->mmm01.rom_bank_mask << 1); + gb->mmm01.rom_bank_low |= ~(gb->mmm01.rom_bank_mask << 1) & value; + break; + case 0x4000: case 0x5000: + gb->mmm01.ram_bank_low = value | ~gb->mmm01.ram_bank_mask; + if (!gb->mmm01.locked) { + gb->mmm01.ram_bank_high = value >> 2; + gb->mmm01.rom_bank_high = value >> 4; + gb->mmm01.mbc1_mode_disable = value & 0x40; + } + break; + case 0x6000: case 0x7000: + if (!gb->mmm01.mbc1_mode_disable) { + gb->mmm01.mbc1_mode = (value & 1); + } + if (!gb->mmm01.locked) { + gb->mmm01.rom_bank_mask = value >> 2; + gb->mmm01.multiplex_mode = value & 0x40; + } + break; + } + break; + case GB_HUC1: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->huc1.ir_mode = (value & 0xF) == 0xE; break; + case 0x2000: case 0x3000: gb->huc1.bank_low = value; break; + case 0x4000: case 0x5000: gb->huc1.bank_high = value; break; + } + break; + case GB_HUC3: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: + gb->huc3.mode = value & 0xF; + gb->mbc_ram_enable = gb->huc3.mode == 0xA; + break; + case 0x2000: case 0x3000: gb->huc3.rom_bank = value; break; + case 0x4000: case 0x5000: gb->huc3.ram_bank = value; break; + } + break; + case GB_TPP1: + switch (addr & 3) { + case 0: + gb->tpp1.rom_bank &= 0xFF00; + gb->tpp1.rom_bank |= value; + break; + case 1: + gb->tpp1.rom_bank &= 0xFF; + gb->tpp1.rom_bank |= value << 8; + break; + case 2: + gb->tpp1.ram_bank = value; + break; + case 3: + switch (value) { + case 0: + case 2: + case 3: + case 5: + gb->tpp1.mode = value; + break; + case 0x10: + memcpy(&gb->rtc_latched, &gb->rtc_real, sizeof(gb->rtc_real)); + break; + case 0x11: { + memcpy(&gb->rtc_real, &gb->rtc_latched, sizeof(gb->rtc_real)); + break; + } + case 0x14: + gb->tpp1_mr4 &= ~0x8; + break; + case 0x18: + gb->tpp1_mr4 &= ~0x4; + break; + case 0x19: + gb->tpp1_mr4 |= 0x4; + break; + + case 0x20: + case 0x21: + case 0x22: + case 0x23: + gb->rumble_strength = value & 3; + break; + } + } + break; + nodefault; + } + GB_update_mbc_mappings(gb); +} + +static void write_vram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + GB_display_sync(gb); + if (unlikely(gb->vram_write_blocked)) { + //GB_log(gb, "Wrote %02x to %04x (VRAM) during mode 3\n", value, addr); + return; + } + gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)] = value; +} + +static bool huc3_write(GB_gameboy_t *gb, uint8_t value) +{ + switch (gb->huc3.mode) { + case 0xB: // RTC Write + switch (value >> 4) { + case 1: + if (gb->huc3.access_index < 3) { + gb->huc3.read = (gb->huc3.minutes >> (gb->huc3.access_index * 4)) & 0xF; + } + else if (gb->huc3.access_index < 7) { + gb->huc3.read = (gb->huc3.days >> ((gb->huc3.access_index - 3) * 4)) & 0xF; + } + else { + // GB_log(gb, "Attempting to read from unsupported HuC-3 register: %03x\n", gb->huc3.access_index); + } + gb->huc3.access_index++; + break; + case 2: + case 3: + if (gb->huc3.access_index < 3) { + gb->huc3.minutes &= ~(0xF << (gb->huc3.access_index * 4)); + gb->huc3.minutes |= ((value & 0xF) << (gb->huc3.access_index * 4)); + } + else if (gb->huc3.access_index < 7) { + gb->huc3.days &= ~(0xF << ((gb->huc3.access_index - 3) * 4)); + gb->huc3.days |= ((value & 0xF) << ((gb->huc3.access_index - 3) * 4)); + } + else if (gb->huc3.access_index >= 0x58 && gb->huc3.access_index <= 0x5A) { + gb->huc3.alarm_minutes &= ~(0xF << ((gb->huc3.access_index - 0x58) * 4)); + gb->huc3.alarm_minutes |= ((value & 0xF) << ((gb->huc3.access_index - 0x58) * 4)); + } + else if (gb->huc3.access_index >= 0x5B && gb->huc3.access_index <= 0x5E) { + gb->huc3.alarm_days &= ~(0xF << ((gb->huc3.access_index - 0x5B) * 4)); + gb->huc3.alarm_days |= ((value & 0xF) << ((gb->huc3.access_index - 0x5B) * 4)); + } + else if (gb->huc3.access_index == 0x5F) { + gb->huc3.alarm_enabled = value & 1; + } + else { + // GB_log(gb, "Attempting to write %x to unsupported HuC-3 register: %03x\n", value & 0xF, gb->huc3.access_index); + } + if ((value >> 4) == 3) { + gb->huc3.access_index++; + } + break; + case 4: + gb->huc3.access_index &= 0xF0; + gb->huc3.access_index |= value & 0xF; + break; + case 5: + gb->huc3.access_index &= 0x0F; + gb->huc3.access_index |= (value & 0xF) << 4; + break; + case 6: + gb->huc3.access_flags = (value & 0xF); + break; + + default: + break; + } + + return true; + case 0xD: // RTC status + // Not sure what writes here mean, they're always 0xFE + return true; + case 0xE: { // IR mode + if (gb->cart_ir != (value & 1)) { + gb->cart_ir = value & 1; + if (gb->infrared_callback) { + gb->infrared_callback(gb, value & 1); + } + } + return true; + } + case 0xC: + return true; + default: + return false; + case 0: // Disabled + case 0xA: // RAM + return false; + } +} + +static void write_mbc7_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + if (!gb->mbc_ram_enable || !gb->mbc7.secondary_ram_enable) return; + if (addr >= 0xB000) return; + switch ((addr >> 4) & 0xF) { + case 0: { + if (value == 0x55) { + gb->mbc7.latch_ready = true; + gb->mbc7.x_latch = gb->mbc7.y_latch = 0x8000; + } + } + case 1: { + if (value == 0xAA) { + gb->mbc7.latch_ready = false; + gb->mbc7.x_latch = 0x81D0 + 0x70 * gb->accelerometer_x; + gb->mbc7.y_latch = 0x81D0 + 0x70 * gb->accelerometer_y; + } + } + case 8: { + gb->mbc7.eeprom_cs = value & 0x80; + gb->mbc7.eeprom_di = value & 2; + if (gb->mbc7.eeprom_cs) { + if (!gb->mbc7.eeprom_clk && (value & 0x40)) { // Clocked + gb->mbc7.eeprom_do = gb->mbc7.read_bits >> 15; + gb->mbc7.read_bits <<= 1; + gb->mbc7.read_bits |= 1; + if (gb->mbc7.argument_bits_left == 0) { + /* Not transferring extra bits for a command*/ + gb->mbc7.eeprom_command <<= 1; + gb->mbc7.eeprom_command |= gb->mbc7.eeprom_di; + if (gb->mbc7.eeprom_command & 0x400) { + // Got full command + switch ((gb->mbc7.eeprom_command >> 6) & 0xF) { + case 0x8: + case 0x9: + case 0xA: + case 0xB: + // READ + gb->mbc7.read_bits = LE16(((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F]); + gb->mbc7.eeprom_command = 0; + break; + case 0x3: // EWEN (Eeprom Write ENable) + gb->mbc7.eeprom_write_enabled = true; + gb->mbc7.eeprom_command = 0; + break; + case 0x0: // EWDS (Eeprom Write DiSable) + gb->mbc7.eeprom_write_enabled = false; + gb->mbc7.eeprom_command = 0; + break; + case 0x4: + case 0x5: + case 0x6: + case 0x7: + // WRITE + if (gb->mbc7.eeprom_write_enabled) { + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] = 0; + } + gb->mbc7.argument_bits_left = 16; + // We still need to process this command, don't erase eeprom_command + break; + case 0xC: + case 0xD: + case 0xE: + case 0xF: + // ERASE + if (gb->mbc7.eeprom_write_enabled) { + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] = 0xFFFF; + gb->mbc7.read_bits = 0x3FFF; // Emulate some time to settle + } + gb->mbc7.eeprom_command = 0; + break; + case 0x2: + // ERAL (ERase ALl) + if (gb->mbc7.eeprom_write_enabled) { + memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] = 0xFFFF; + gb->mbc7.read_bits = 0xFF; // Emulate some time to settle + } + gb->mbc7.eeprom_command = 0; + break; + case 0x1: + // WRAL (WRite ALl) + if (gb->mbc7.eeprom_write_enabled) { + memset(gb->mbc_ram, 0, gb->mbc_ram_size); + } + gb->mbc7.argument_bits_left = 16; + // We still need to process this command, don't erase eeprom_command + break; + } + } + } + else { + // We're shifting in extra bits for a WRITE/WRAL command + gb->mbc7.argument_bits_left--; + gb->mbc7.eeprom_do = true; + if (gb->mbc7.eeprom_di) { + uint16_t bit = LE16(1 << gb->mbc7.argument_bits_left); + if (gb->mbc7.eeprom_command & 0x100) { + // WRITE + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] |= bit; + } + else { + // WRAL + for (unsigned i = 0; i < 0x7F; i++) { + ((uint16_t *)gb->mbc_ram)[i] |= bit; + } + } + } + if (gb->mbc7.argument_bits_left == 0) { // We're done + gb->mbc7.eeprom_command = 0; + gb->mbc7.read_bits = (gb->mbc7.eeprom_command & 0x100)? 0xFF : 0x3FFF; // Emulate some time to settle + } + } + } + } + gb->mbc7.eeprom_clk = value & 0x40; + } + } +} + +static void write_mbc_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + if (gb->cartridge_type->mbc_type == GB_MBC7) { + write_mbc7_ram(gb, addr, value); + return; + } + + if (gb->cartridge_type->mbc_type == GB_HUC3) { + if (huc3_write(gb, value)) return; + } + + if (gb->camera_registers_mapped) { + GB_camera_write_register(gb, addr, value); + return; + } + + if (gb->cartridge_type->mbc_type == GB_TPP1) { + switch (gb->tpp1.mode) { + case 3: + break; + case 5: + gb->rtc_latched.data[(addr & 3) ^ 3] = value; + return; + default: + return; + } + } + + if ((!gb->mbc_ram_enable) + && gb->cartridge_type->mbc_type != GB_HUC1) return; + + if (gb->cartridge_type->mbc_type == GB_HUC1 && gb->huc1.ir_mode) { + if (gb->cart_ir != (value & 1)) { + gb->cart_ir = value & 1; + if (gb->infrared_callback) { + gb->infrared_callback(gb, value & 1); + } + } + return; + } + + if (gb->cartridge_type->has_rtc && gb->mbc3.rtc_mapped) { + if (gb->mbc_ram_bank <= 4) { + if (gb->mbc_ram_bank == 0) { + gb->rtc_cycles = 0; + } + gb->rtc_real.data[gb->mbc_ram_bank] = value; + } + return; + } + + if (!gb->mbc_ram || !gb->mbc_ram_size) { + return; + } + + if (gb->cartridge_type->mbc_type == GB_CAMERA && (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1)) { + /* Forbid writing to RAM while the camera is busy. */ + return; + } + + uint8_t effective_bank = gb->mbc_ram_bank; + if (gb->cartridge_type->mbc_type == GB_MBC3 && !gb->is_mbc30) { + if (gb->cartridge_type->has_rtc) { + if (effective_bank > 3) return; + } + effective_bank &= 0x3; + } + + gb->mbc_ram[((addr & 0x1FFF) + effective_bank * 0x2000) & (gb->mbc_ram_size - 1)] = value; +} + +static void write_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + gb->ram[addr & 0x0FFF] = value; +} + +static void write_banked_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + gb->ram[(addr & 0x0FFF) + gb->cgb_ram_bank * 0x1000] = value; +} + +static void write_oam(GB_gameboy_t *gb, uint8_t addr, uint8_t value) +{ + if (addr < 0xA0) { + gb->oam[addr] = value; + return; + } + switch (gb->model) { + case GB_MODEL_CGB_D: + if (addr >= 0xC0) { + addr |= 0xF0; + } + gb->extra_oam[addr - 0xA0] = value; + break; + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_0: + addr &= ~0x18; + gb->extra_oam[addr - 0xA0] = value; + break; + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + case GB_MODEL_DMG_B: + case GB_MODEL_MGB: + case GB_MODEL_SGB_NTSC: + case GB_MODEL_SGB_PAL: + case GB_MODEL_SGB_NTSC_NO_SFC: + case GB_MODEL_SGB_PAL_NO_SFC: + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + break; + } +} + +static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + if (addr < 0xFE00) { + GB_log(gb, "Wrote %02x to %04x (RAM Mirror)\n", value, addr); + write_banked_ram(gb, addr, value); + return; + } + + if (addr < 0xFF00) { + GB_display_sync(gb); + if (gb->oam_write_blocked) { + GB_trigger_oam_bug(gb, addr); + return; + } + + if (GB_is_dma_active(gb)) { + /* Todo: Does writing to OAM during DMA causes the OAM bug? */ + return; + } + + if (GB_is_cgb(gb)) { + write_oam(gb, addr, value); + return; + } + + if (addr < 0xFEA0) { + if (gb->accessed_oam_row == 0xA0) { + for (unsigned i = 0; i < 8; i++) { + if ((i & 6) != (addr & 6)) { + gb->oam[(addr & 0xF8) + i] = gb->oam[0x98 + i]; + } + else { + gb->oam[(addr & 0xF8) + i] = bitwise_glitch(gb->oam[(addr & 0xF8) + i], gb->oam[0x9C], gb->oam[0x98 + i]); + } + } + } + + gb->oam[addr & 0xFF] = value; + + if (gb->accessed_oam_row == 0) { + gb->oam[0] = bitwise_glitch(gb->oam[0], + gb->oam[(addr & 0xF8)], + gb->oam[(addr & 0xFE)]); + gb->oam[1] = bitwise_glitch(gb->oam[1], + gb->oam[(addr & 0xF8) + 1], + gb->oam[(addr & 0xFE) | 1]); + for (unsigned i = 2; i < 8; i++) { + gb->oam[i] = gb->oam[(addr & 0xF8) + i]; + } + } + } + else if (gb->accessed_oam_row == 0) { + gb->oam[addr & 0x7] = value; + } + return; + } + + /* Todo: Clean this code up: use a function table and move relevant code to display.c and timing.c + (APU read and writes are already at apu.c) */ + if (addr < 0xFF80) { + sync_ppu_if_needed(gb, addr); + + /* Hardware registers */ + switch (addr & 0xFF) { + case GB_IO_WY: + if (value == gb->current_line) { + gb->wy_triggered = true; + } + case GB_IO_WX: + case GB_IO_IF: + case GB_IO_SCX: + case GB_IO_SCY: + case GB_IO_BGP: + case GB_IO_OBP0: + case GB_IO_OBP1: + case GB_IO_SB: + case GB_IO_PSWX: + case GB_IO_PSWY: + case GB_IO_PSW: + case GB_IO_UNKNOWN5: + gb->io_registers[addr & 0xFF] = value; + return; + case GB_IO_OPRI: + if ((!gb->boot_rom_finished || (gb->io_registers[GB_IO_KEY0] & 8)) && GB_is_cgb(gb)) { + gb->io_registers[addr & 0xFF] = value; + gb->object_priority = (value & 1) ? GB_OBJECT_PRIORITY_X : GB_OBJECT_PRIORITY_INDEX; + } + else if (gb->cgb_mode) { + gb->io_registers[addr & 0xFF] = value; + + } + return; + case GB_IO_LYC: + + /* TODO: Probably completely wrong in double speed mode */ + + /* TODO: This hack is disgusting */ + if (gb->display_state == 29 && GB_is_cgb(gb)) { + gb->ly_for_comparison = 153; + GB_STAT_update(gb); + gb->ly_for_comparison = 0; + } + + gb->io_registers[addr & 0xFF] = value; + + /* These are the states when LY changes, let the display routine call GB_STAT_update for use + so it correctly handles T-cycle accurate LYC writes */ + if (!GB_is_cgb(gb) || ( + gb->display_state != 35 && + gb->display_state != 26 && + gb->display_state != 15 && + gb->display_state != 16)) { + + /* More hacks to make LYC write conflicts work */ + if (gb->display_state == 14 && GB_is_cgb(gb)) { + gb->ly_for_comparison = 153; + GB_STAT_update(gb); + gb->ly_for_comparison = -1; + } + else { + GB_STAT_update(gb); + } + } + return; + + case GB_IO_TIMA: + if (gb->tima_reload_state != GB_TIMA_RELOADED) { + gb->io_registers[GB_IO_TIMA] = value; + } + return; + + case GB_IO_TMA: + gb->io_registers[GB_IO_TMA] = value; + if (gb->tima_reload_state != GB_TIMA_RUNNING) { + gb->io_registers[GB_IO_TIMA] = value; + } + return; + + case GB_IO_TAC: + GB_emulate_timer_glitch(gb, gb->io_registers[GB_IO_TAC], value); + gb->io_registers[GB_IO_TAC] = value; + return; + + + case GB_IO_LCDC: + if ((value & 0x80) && !(gb->io_registers[GB_IO_LCDC] & 0x80)) { + // LCD turned on + if (gb->lcd_status_callback) { + gb->lcd_status_callback(gb, true); + } + if (!gb->lcd_disabled_outside_of_vblank && + (gb->cycles_since_vblank_callback > 10 * 456 || GB_is_sgb(gb))) { + // Trigger a vblank here so we don't exceed LCDC_PERIOD + GB_display_vblank(gb, GB_VBLANK_TYPE_ARTIFICIAL); + } + + gb->display_cycles = 0; + gb->display_state = 0; + gb->double_speed_alignment = 0; + gb->cycles_for_line = 0; + if (GB_is_sgb(gb)) { + gb->frame_skip_state = GB_FRAMESKIP_FIRST_FRAME_RENDERED; + } + else { + gb->frame_skip_state = GB_FRAMESKIP_LCD_TURNED_ON; + } + GB_timing_sync(gb); + } + else if (!(value & 0x80) && (gb->io_registers[GB_IO_LCDC] & 0x80)) { + /* Sync after turning off LCD */ + if (gb->lcd_status_callback) { + gb->lcd_status_callback(gb, false); + } + gb->double_speed_alignment = 0; + GB_timing_sync(gb); + GB_lcd_off(gb); + } + /* Handle disabling objects while already fetching an object */ + if ((gb->io_registers[GB_IO_LCDC] & 2) && !(value & 2)) { + if (gb->during_object_fetch) { + gb->cycles_for_line += gb->display_cycles; + gb->display_cycles = 0; + gb->object_fetch_aborted = true; + } + } + gb->io_registers[GB_IO_LCDC] = value; + if (!(value & 0x20)) { + gb->wx_triggered = false; + gb->wx166_glitch = false; + } + return; + + case GB_IO_STAT: + /* Delete previous R/W bits */ + gb->io_registers[GB_IO_STAT] &= 7; + /* Set them by value */ + gb->io_registers[GB_IO_STAT] |= value & ~7; + /* Set unused bit to 1 */ + gb->io_registers[GB_IO_STAT] |= 0x80; + + GB_STAT_update(gb); + return; + + case GB_IO_DIV: + GB_set_internal_div_counter(gb, 0); + /* Reset the div state machine */ + gb->div_state = 0; + gb->div_cycles = 0; + return; + + case GB_IO_JOYP: + if (gb->joyp_write_callback) { + gb->joyp_write_callback(gb, value); + GB_update_joyp(gb); + } + else if ((gb->io_registers[GB_IO_JOYP] & 0x30) != (value & 0x30)) { + if (gb->model < GB_MODEL_SGB) { // DMG only + if (gb->joyp_switching_delay) { + gb->io_registers[GB_IO_JOYP] = (gb->joyp_switch_value & 0xF0) | (gb->io_registers[GB_IO_JOYP] & 0x0F); + } + gb->joyp_switch_value = value; + gb->joyp_switching_delay = 24; + value &= gb->io_registers[GB_IO_JOYP]; + gb->joypad_is_stable = false; + } + GB_sgb_write(gb, value); + gb->io_registers[GB_IO_JOYP] = (value & 0xF0) | (gb->io_registers[GB_IO_JOYP] & 0x0F); + GB_update_joyp(gb); + } + return; + + case GB_IO_BANK: + gb->boot_rom_finished = true; + return; + + case GB_IO_KEY0: + if (GB_is_cgb(gb) && !gb->boot_rom_finished) { + gb->cgb_mode = !(value & 0xC); /* The real "contents" of this register aren't quite known yet. */ + gb->io_registers[GB_IO_KEY0] = value; + } + return; + + case GB_IO_DMA: + gb->dma_cycles = 0; + gb->dma_cycles_modulo = 2; + gb->dma_current_dest = 0xFF; + gb->dma_current_src = value << 8; + gb->io_registers[GB_IO_DMA] = value; + GB_STAT_update(gb); + return; + case GB_IO_SVBK: + if (gb->cgb_mode || (GB_is_cgb(gb) && !gb->boot_rom_finished)) { + gb->cgb_ram_bank = value & 0x7; + if (!gb->cgb_ram_bank) { + gb->cgb_ram_bank++; + } + } + return; + case GB_IO_VBK: + if (!gb->cgb_mode) { + return; + } + gb->cgb_vram_bank = value & 0x1; + return; + + case GB_IO_BGPI: + case GB_IO_OBPI: + if (!GB_is_cgb(gb)) { + return; + } + gb->io_registers[addr & 0xFF] = value; + return; + case GB_IO_BGPD: + case GB_IO_OBPD: + if (!gb->cgb_mode && gb->boot_rom_finished) { + /* Todo: Due to the behavior of a broken Game & Watch Gallery 2 ROM on a real CGB. A proper test ROM + is required. */ + return; + } + + uint8_t index_reg = (addr & 0xFF) - 1; + if (gb->cgb_palettes_blocked) { + if (gb->io_registers[index_reg] & 0x80) { + gb->io_registers[index_reg]++; + gb->io_registers[index_reg] |= 0x80; + } + return; + } + ((addr & 0xFF) == GB_IO_BGPD? + gb->background_palettes_data : + gb->object_palettes_data)[gb->io_registers[index_reg] & 0x3F] = value; + GB_palette_changed(gb, (addr & 0xFF) == GB_IO_BGPD, gb->io_registers[index_reg] & 0x3F); + if (gb->io_registers[index_reg] & 0x80) { + gb->io_registers[index_reg]++; + gb->io_registers[index_reg] |= 0x80; + } + return; + case GB_IO_KEY1: + if (!gb->cgb_mode) { + return; + } + gb->io_registers[GB_IO_KEY1] = value; + return; + case GB_IO_HDMA1: + if (gb->cgb_mode) { + gb->hdma_current_src &= 0xF0; + gb->hdma_current_src |= value << 8; + } + /* Range 0xE*** like 0xF*** and can't overflow (with 0x800 bytes) to anything meaningful */ + if (gb->hdma_current_src >= 0xE000) { + gb->hdma_current_src |= 0xF000; + } + return; + case GB_IO_HDMA2: + if (gb->cgb_mode) { + gb->hdma_current_src &= 0xFF00; + gb->hdma_current_src |= value & 0xF0; + } + return; + case GB_IO_HDMA3: + if (gb->cgb_mode) { + gb->hdma_current_dest &= 0xF0; + gb->hdma_current_dest |= value << 8; + } + return; + case GB_IO_HDMA4: + if (gb->cgb_mode) { + gb->hdma_current_dest &= 0xFF00; + gb->hdma_current_dest |= value & 0xF0; + } + return; + case GB_IO_HDMA5: + if (!gb->cgb_mode) return; + if ((value & 0x80) == 0 && gb->hdma_on_hblank) { + gb->hdma_on_hblank = false; + return; + } + gb->hdma_on = (value & 0x80) == 0; + gb->hdma_on_hblank = (value & 0x80) != 0; + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->display_state != 7) { + gb->hdma_on = true; + } + gb->io_registers[GB_IO_HDMA5] = value; + gb->hdma_steps_left = (gb->io_registers[GB_IO_HDMA5] & 0x7F) + 1; + return; + + /* TODO: What happens when starting a transfer during external clock? + TODO: When a cable is connected, the clock of the other side affects "zombie" serial clocking */ + case GB_IO_SC: + gb->serial_count = 0; + if (!gb->cgb_mode) { + value |= 2; + } + if (gb->serial_master_clock) { + GB_serial_master_edge(gb); + } + gb->io_registers[GB_IO_SC] = value | (~0x83); + gb->serial_mask = gb->cgb_mode && (value & 2)? 4 : 0x80; + if ((value & 0x80) && (value & 0x1) ) { + if (gb->serial_transfer_bit_start_callback) { + gb->serial_transfer_bit_start_callback(gb, gb->io_registers[GB_IO_SB] & 0x80); + } + } + + return; + + case GB_IO_RP: { + if (!GB_is_cgb(gb)) { + return; + } + if ((gb->io_registers[GB_IO_RP] ^ value) & 1) { + if (gb->infrared_callback) { + gb->infrared_callback(gb, value & 1); + } + } + gb->io_registers[GB_IO_RP] = value; + + return; + } + + default: + if ((addr & 0xFF) >= GB_IO_NR10 && (addr & 0xFF) <= GB_IO_WAV_END) { + GB_apu_write(gb, addr & 0xFF, value); + return; + } + GB_log(gb, "Wrote %02x to %04x (HW Register)\n", value, addr); + return; + } + } + + if (addr == 0xFFFF) { + GB_display_sync(gb); + /* Interrupt mask */ + gb->interrupt_enable = value; + return; + } + + /* HRAM */ + gb->hram[addr - 0xFF80] = value; +} + + + +static write_function_t *const write_map[] = +{ + write_mbc, write_mbc, write_mbc, write_mbc, /* 0XXX, 1XXX, 2XXX, 3XXX */ + write_mbc, write_mbc, write_mbc, write_mbc, /* 4XXX, 5XXX, 6XXX, 7XXX */ + write_vram, write_vram, /* 8XXX, 9XXX */ + write_mbc_ram, write_mbc_ram, /* AXXX, BXXX */ + write_ram, write_banked_ram, /* CXXX, DXXX */ + write_ram, write_high_memory, /* EXXX FXXX */ +}; + +void GB_set_write_memory_callback(GB_gameboy_t *gb, GB_write_memory_callback_t callback) +{ + gb->write_memory_callback = callback; +} + +void GB_write_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + if (unlikely(gb->n_watchpoints)) { + GB_debugger_test_write_watchpoint(gb, addr, value); + } + + if (unlikely(gb->write_memory_callback)) { + if (!gb->write_memory_callback(gb, addr, value)) return; + } + + if (unlikely(is_addr_in_dma_use(gb, addr))) { + bool oam_write = addr >= 0xFE00; + if (GB_is_cgb(gb) && bus_for_addr(gb, addr) == GB_BUS_MAIN && gb->dma_current_src >= 0xE000) { + /* This is cart specific! Everdrive 7X on a CGB-A or 0 behaves differently. */ + return; + } + + if (GB_is_cgb(gb) && (gb->dma_current_src < 0xC000 || gb->dma_current_src >= 0xE000) && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + goto write; + } + else if (GB_is_cgb(gb) && gb->dma_current_src >= 0xE000 && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + } + else { + addr = (gb->dma_current_src - 1); + } + if (GB_is_cgb(gb) || addr >= 0xA000) { + if (addr < 0xA000) { + gb->oam[gb->dma_current_dest - 1] = 0; + } + else if ((gb->model < GB_MODEL_CGB_0 || gb->model == GB_MODEL_CGB_B)) { + gb->oam[gb->dma_current_dest - 1] &= value; + } + else if ((gb->model < GB_MODEL_CGB_C || gb->model > GB_MODEL_CGB_E) && !oam_write) { + gb->oam[gb->dma_current_dest - 1] = value; + } + if (gb->model < GB_MODEL_CGB_E || addr >= 0xA000) return; + } + } +write: + write_map[addr >> 12](gb, addr, value); +} + +bool GB_is_dma_active(GB_gameboy_t *gb) +{ + return gb->dma_current_dest != 0xA1; +} + +void GB_dma_run(GB_gameboy_t *gb) +{ + if (gb->dma_current_dest == 0xA1) return; + if (unlikely(gb->halted || gb->stopped)) return; + signed cycles = gb->dma_cycles + gb->dma_cycles_modulo; + gb->in_dma_read = true; + while (unlikely(cycles >= 4)) { + cycles -= 4; + if (gb->dma_current_dest >= 0xA0) { + gb->dma_current_dest++; + if (gb->display_state == 8) { + gb->io_registers[GB_IO_STAT] |= 2; + GB_STAT_update(gb); + } + break; + } + if (unlikely(gb->hdma_in_progress && (gb->hdma_steps_left > 1 || (gb->hdma_current_dest & 0xF) != 0xF))) { + gb->dma_current_dest++; + } + else if (gb->dma_current_src < 0xE000) { + gb->oam[gb->dma_current_dest++] = GB_read_memory(gb, gb->dma_current_src); + } + else { + if (GB_is_cgb(gb)) { + gb->oam[gb->dma_current_dest++] = 0xFF; + } + else { + gb->oam[gb->dma_current_dest++] = GB_read_memory(gb, gb->dma_current_src & ~0x2000); + } + } + + /* dma_current_src must be the correct value during GB_read_memory */ + gb->dma_current_src++; + gb->dma_ppu_vram_conflict = false; + } + gb->in_dma_read = false; + gb->dma_cycles_modulo = cycles; + gb->dma_cycles = 0; +} + +void GB_hdma_run(GB_gameboy_t *gb) +{ + unsigned cycles = gb->cgb_double_speed? 4 : 2; + /* This is a bit cart, revision and unit specific. TODO: what if PC is in cart RAM? */ + if (gb->model < GB_MODEL_CGB_D || gb->pc > 0x8000) { + gb->hdma_open_bus = 0xFF; + } + gb->addr_for_hdma_conflict = 0xFFFF; + uint16_t vram_base = gb->cgb_vram_bank? 0x2000 : 0; + gb->hdma_in_progress = true; + GB_advance_cycles(gb, cycles); + while (gb->hdma_on) { + uint8_t byte = gb->hdma_open_bus; + gb->addr_for_hdma_conflict = 0xFFFF; + + if (gb->hdma_current_src < 0x8000 || + (gb->hdma_current_src & 0xE000) == 0xC000 || + (gb->hdma_current_src & 0xE000) == 0xA000) { + byte = GB_read_memory(gb, gb->hdma_current_src); + } + if (unlikely(GB_is_dma_active(gb)) && (gb->dma_cycles_modulo == 2 || gb->cgb_double_speed)) { + write_oam(gb, gb->hdma_current_src, byte); + } + gb->hdma_current_src++; + GB_advance_cycles(gb, cycles); + if (gb->addr_for_hdma_conflict == 0xFFFF /* || ((gb->model & ~GB_MODEL_GBP_BIT) >= GB_MODEL_AGB_B && gb->cgb_double_speed) */) { + uint16_t addr = (gb->hdma_current_dest++ & 0x1FFF); + gb->vram[vram_base + addr] = byte; + // TODO: vram_write_blocked might not be the correct timing + if (gb->vram_write_blocked /* && (gb->model & ~GB_MODEL_GBP_BIT) < GB_MODEL_AGB_B */) { + gb->vram[(vram_base ^ 0x2000) + addr] = byte; + } + } + else { + if (gb->model == GB_MODEL_CGB_E || gb->cgb_double_speed) { + /* + These corruptions revision (unit?) specific in single speed. They happen only on my CGB-E. + */ + gb->addr_for_hdma_conflict &= 0x1FFF; + // TODO: there are *some* scenarions in single speed mode where this write doesn't happen. What's the logic? + uint16_t addr = (gb->hdma_current_dest & gb->addr_for_hdma_conflict & 0x1FFF); + gb->vram[vram_base + addr] = byte; + // TODO: vram_write_blocked might not be the correct timing + if (gb->vram_write_blocked /* && (gb->model & ~GB_MODEL_GBP_BIT) < GB_MODEL_AGB_B */) { + gb->vram[(vram_base ^ 0x2000) + addr] = byte; + } + } + gb->hdma_current_dest++; + } + gb->hdma_open_bus = 0xFF; + + if ((gb->hdma_current_dest & 0xF) == 0) { + if (--gb->hdma_steps_left == 0 || gb->hdma_current_dest == 0) { + gb->hdma_on = false; + gb->hdma_on_hblank = false; + gb->io_registers[GB_IO_HDMA5] &= 0x7F; + } + else if (gb->hdma_on_hblank) { + gb->hdma_on = false; + } + } + } + gb->hdma_in_progress = false; // TODO: timing? (affects VRAM reads) + if (!gb->cgb_double_speed) { + GB_advance_cycles(gb, 2); + } +} diff --git a/thirdparty/SameBoy-old/Core/memory.h b/thirdparty/SameBoy-old/Core/memory.h new file mode 100644 index 000000000..9a5824d9b --- /dev/null +++ b/thirdparty/SameBoy-old/Core/memory.h @@ -0,0 +1,22 @@ +#ifndef memory_h +#define memory_h +#include "defs.h" +#include + +typedef uint8_t (*GB_read_memory_callback_t)(GB_gameboy_t *gb, uint16_t addr, uint8_t data); +typedef bool (*GB_write_memory_callback_t)(GB_gameboy_t *gb, uint16_t addr, uint8_t data); // Return false to prevent the write +void GB_set_read_memory_callback(GB_gameboy_t *gb, GB_read_memory_callback_t callback); +void GB_set_write_memory_callback(GB_gameboy_t *gb, GB_write_memory_callback_t callback); + +uint8_t GB_read_memory(GB_gameboy_t *gb, uint16_t addr); +uint8_t GB_safe_read_memory(GB_gameboy_t *gb, uint16_t addr); // Without side effects +void GB_write_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value); +#ifdef GB_INTERNAL +internal void GB_dma_run(GB_gameboy_t *gb); +internal bool GB_is_dma_active(GB_gameboy_t *gb); +internal void GB_hdma_run(GB_gameboy_t *gb); +internal void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address); +internal uint8_t GB_read_oam(GB_gameboy_t *gb, uint8_t addr); +#endif + +#endif /* memory_h */ diff --git a/thirdparty/SameBoy-old/Core/printer.c b/thirdparty/SameBoy-old/Core/printer.c new file mode 100644 index 000000000..1394a6a7e --- /dev/null +++ b/thirdparty/SameBoy-old/Core/printer.c @@ -0,0 +1,220 @@ +#include "gb.h" + +/* TODO: Emulation is VERY basic and assumes the ROM correctly uses the printer's interface. + Incorrect usage is not correctly emulated, as it's not well documented, nor do I + have my own GB Printer to figure it out myself. + + It also does not currently emulate communication timeout, which means that a bug + might prevent the printer operation until the GameBoy is restarted. + + Also, field mask values are assumed. */ + +static void handle_command(GB_gameboy_t *gb) +{ + switch (gb->printer.command_id) { + case GB_PRINTER_INIT_COMMAND: + gb->printer.status = 0; + gb->printer.image_offset = 0; + break; + + case GB_PRINTER_START_COMMAND: + if (gb->printer.command_length == 4) { + gb->printer.status = 6; /* Printing */ + uint32_t image[gb->printer.image_offset]; + uint8_t palette = gb->printer.command_data[2]; + uint32_t colors[4] = {gb->rgb_encode_callback(gb, 0xFF, 0xFF, 0xFF), + gb->rgb_encode_callback(gb, 0xAA, 0xAA, 0xAA), + gb->rgb_encode_callback(gb, 0x55, 0x55, 0x55), + gb->rgb_encode_callback(gb, 0x00, 0x00, 0x00)}; + for (unsigned i = 0; i < gb->printer.image_offset; i++) { + image[i] = colors[(palette >> (gb->printer.image[i] * 2)) & 3]; + } + + if (gb->printer_callback) { + gb->printer_callback(gb, image, gb->printer.image_offset / 160, + gb->printer.command_data[1] >> 4, gb->printer.command_data[1] & 7, + gb->printer.command_data[3] & 0x7F); + } + + gb->printer.image_offset = 0; + } + break; + + case GB_PRINTER_DATA_COMMAND: + if (gb->printer.command_length == GB_PRINTER_DATA_SIZE) { + gb->printer.image_offset %= sizeof(gb->printer.image); + gb->printer.status = 8; /* Received 0x280 bytes */ + + uint8_t *byte = gb->printer.command_data; + + for (unsigned row = 2; row--; ) { + for (unsigned tile_x = 0; tile_x < 160 / 8; tile_x++) { + for (unsigned y = 0; y < 8; y++, byte += 2) { + for (unsigned x_pixel = 0; x_pixel < 8; x_pixel++) { + gb->printer.image[gb->printer.image_offset + tile_x * 8 + x_pixel + y * 160] = + ((*byte) >> 7) | (((*(byte + 1)) >> 7) << 1); + (*byte) <<= 1; + (*(byte + 1)) <<= 1; + } + } + } + + gb->printer.image_offset += 8 * 160; + } + } + + case GB_PRINTER_NOP_COMMAND: + default: + break; + } +} + + +static void byte_recieve_completed(GB_gameboy_t *gb, uint8_t byte_received) +{ + gb->printer.byte_to_send = 0; + switch (gb->printer.command_state) { + case GB_PRINTER_COMMAND_MAGIC1: + if (byte_received != 0x88) { + return; + } + gb->printer.status &= ~1; + gb->printer.command_length = 0; + gb->printer.checksum = 0; + break; + + case GB_PRINTER_COMMAND_MAGIC2: + if (byte_received != 0x33) { + if (byte_received != 0x88) { + gb->printer.command_state = GB_PRINTER_COMMAND_MAGIC1; + } + return; + } + break; + + case GB_PRINTER_COMMAND_ID: + gb->printer.command_id = byte_received & 0xF; + break; + + case GB_PRINTER_COMMAND_COMPRESSION: + gb->printer.compression = byte_received & 1; + break; + + case GB_PRINTER_COMMAND_LENGTH_LOW: + gb->printer.length_left = byte_received; + break; + + case GB_PRINTER_COMMAND_LENGTH_HIGH: + gb->printer.length_left |= (byte_received & 3) << 8; + break; + + case GB_PRINTER_COMMAND_DATA: + if (gb->printer.command_length != GB_PRINTER_MAX_COMMAND_LENGTH) { + if (gb->printer.compression) { + if (!gb->printer.compression_run_lenth) { + gb->printer.compression_run_is_compressed = byte_received & 0x80; + gb->printer.compression_run_lenth = (byte_received & 0x7F) + 1 + gb->printer.compression_run_is_compressed; + } + else if (gb->printer.compression_run_is_compressed) { + while (gb->printer.compression_run_lenth) { + gb->printer.command_data[gb->printer.command_length++] = byte_received; + gb->printer.compression_run_lenth--; + if (gb->printer.command_length == GB_PRINTER_MAX_COMMAND_LENGTH) { + gb->printer.compression_run_lenth = 0; + } + } + } + else { + gb->printer.command_data[gb->printer.command_length++] = byte_received; + gb->printer.compression_run_lenth--; + } + } + else { + gb->printer.command_data[gb->printer.command_length++] = byte_received; + } + } + gb->printer.length_left--; + break; + + case GB_PRINTER_COMMAND_CHECKSUM_LOW: + gb->printer.checksum ^= byte_received; + break; + + case GB_PRINTER_COMMAND_CHECKSUM_HIGH: + gb->printer.checksum ^= byte_received << 8; + if (gb->printer.checksum) { + gb->printer.status |= 1; /* Checksum error*/ + gb->printer.command_state = GB_PRINTER_COMMAND_MAGIC1; + return; + } + gb->printer.byte_to_send = 0x81; + + break; + case GB_PRINTER_COMMAND_ACTIVE: + if ((gb->printer.command_id & 0xF) == GB_PRINTER_INIT_COMMAND) { + /* Games expect INIT commands to return 0? */ + gb->printer.byte_to_send = 0; + } + else { + gb->printer.byte_to_send = gb->printer.status; + } + break; + case GB_PRINTER_COMMAND_STATUS: + + /* Printing is done instantly, but let the game recieve a 6 (Printing) status at least once, for compatibility */ + if (gb->printer.status == 6) { + gb->printer.status = 4; /* Done */ + } + + gb->printer.command_state = GB_PRINTER_COMMAND_MAGIC1; + handle_command(gb); + return; + } + + if (gb->printer.command_state >= GB_PRINTER_COMMAND_ID && gb->printer.command_state < GB_PRINTER_COMMAND_CHECKSUM_LOW) { + gb->printer.checksum += byte_received; + } + + if (gb->printer.command_state != GB_PRINTER_COMMAND_DATA) { + gb->printer.command_state++; + } + + if (gb->printer.command_state == GB_PRINTER_COMMAND_DATA) { + if (gb->printer.length_left == 0) { + gb->printer.command_state++; + } + } +} + +static void serial_start(GB_gameboy_t *gb, bool bit_received) +{ + if (gb->printer.idle_time > GB_get_unmultiplied_clock_rate(gb)) { + gb->printer.command_state = GB_PRINTER_COMMAND_MAGIC1; + gb->printer.bits_received = 0; + } + gb->printer.idle_time = 0; + gb->printer.byte_being_received <<= 1; + gb->printer.byte_being_received |= bit_received; + gb->printer.bits_received++; + if (gb->printer.bits_received == 8) { + byte_recieve_completed(gb, gb->printer.byte_being_received); + gb->printer.bits_received = 0; + gb->printer.byte_being_received = 0; + } +} + +static bool serial_end(GB_gameboy_t *gb) +{ + bool ret = gb->printer.bit_to_send; + gb->printer.bit_to_send = gb->printer.byte_to_send & 0x80; + gb->printer.byte_to_send <<= 1; + return ret; +} + +void GB_connect_printer(GB_gameboy_t *gb, GB_print_image_callback_t callback) +{ + memset(&gb->printer, 0, sizeof(gb->printer)); + GB_set_serial_transfer_bit_start_callback(gb, serial_start); + GB_set_serial_transfer_bit_end_callback(gb, serial_end); + gb->printer_callback = callback; +} diff --git a/thirdparty/SameBoy-old/Core/printer.h b/thirdparty/SameBoy-old/Core/printer.h new file mode 100644 index 000000000..f4ccfe47f --- /dev/null +++ b/thirdparty/SameBoy-old/Core/printer.h @@ -0,0 +1,63 @@ +#ifndef printer_h +#define printer_h +#include +#include +#include "defs.h" +#define GB_PRINTER_MAX_COMMAND_LENGTH 0x280 +#define GB_PRINTER_DATA_SIZE 0x280 + +typedef void (*GB_print_image_callback_t)(GB_gameboy_t *gb, + uint32_t *image, + uint8_t height, + uint8_t top_margin, + uint8_t bottom_margin, + uint8_t exposure); + + +typedef struct +{ + /* Communication state machine */ + + enum { + GB_PRINTER_COMMAND_MAGIC1, + GB_PRINTER_COMMAND_MAGIC2, + GB_PRINTER_COMMAND_ID, + GB_PRINTER_COMMAND_COMPRESSION, + GB_PRINTER_COMMAND_LENGTH_LOW, + GB_PRINTER_COMMAND_LENGTH_HIGH, + GB_PRINTER_COMMAND_DATA, + GB_PRINTER_COMMAND_CHECKSUM_LOW, + GB_PRINTER_COMMAND_CHECKSUM_HIGH, + GB_PRINTER_COMMAND_ACTIVE, + GB_PRINTER_COMMAND_STATUS, + } command_state : 8; + enum { + GB_PRINTER_INIT_COMMAND = 1, + GB_PRINTER_START_COMMAND = 2, + GB_PRINTER_DATA_COMMAND = 4, + GB_PRINTER_NOP_COMMAND = 0xF, + } command_id : 8; + bool compression; + uint16_t length_left; + uint8_t command_data[GB_PRINTER_MAX_COMMAND_LENGTH]; + uint16_t command_length; + uint16_t checksum; + uint8_t status; + uint8_t byte_to_send; + + uint8_t image[160 * 200]; + uint16_t image_offset; + + uint64_t idle_time; + + uint8_t compression_run_lenth; + bool compression_run_is_compressed; + + uint8_t bits_received; + uint8_t byte_being_received; + bool bit_to_send; +} GB_printer_t; + + +void GB_connect_printer(GB_gameboy_t *gb, GB_print_image_callback_t callback); +#endif diff --git a/thirdparty/SameBoy-old/Core/random.c b/thirdparty/SameBoy-old/Core/random.c new file mode 100644 index 000000000..cc4d4d3a6 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/random.c @@ -0,0 +1,38 @@ +#include "random.h" +#include + +static uint64_t seed; +static bool enabled = true; + +uint8_t GB_random(void) +{ + if (!enabled) return 0; + + seed *= 0x27BB2EE687B0B0FDL; + seed += 0xB504F32D; + return seed >> 56; +} + +uint32_t GB_random32(void) +{ + GB_random(); + return seed >> 32; +} + +void GB_random_seed(uint64_t new_seed) +{ + seed = new_seed; +} + +void GB_random_set_enabled(bool enable) +{ + enabled = enable; +} + +static void __attribute__((constructor)) init_seed(void) +{ + seed = time(NULL); + for (unsigned i = 64; i--;) { + GB_random(); + } +} diff --git a/thirdparty/SameBoy-old/Core/random.h b/thirdparty/SameBoy-old/Core/random.h new file mode 100644 index 000000000..8ab0e502c --- /dev/null +++ b/thirdparty/SameBoy-old/Core/random.h @@ -0,0 +1,12 @@ +#ifndef random_h +#define random_h + +#include +#include + +uint8_t GB_random(void); +uint32_t GB_random32(void); +void GB_random_seed(uint64_t seed); +void GB_random_set_enabled(bool enable); + +#endif /* random_h */ diff --git a/thirdparty/SameBoy-old/Core/rewind.c b/thirdparty/SameBoy-old/Core/rewind.c new file mode 100644 index 000000000..2be73a6b7 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/rewind.c @@ -0,0 +1,208 @@ +#include "gb.h" +#include +#include +#include +#include + +static uint8_t *state_compress(const uint8_t *prev, const uint8_t *data, size_t uncompressed_size) +{ + size_t malloc_size = 0x1000; + uint8_t *compressed = malloc(malloc_size); + size_t counter_pos = 0; + size_t data_pos = sizeof(uint16_t); + bool prev_mode = true; + *(uint16_t *)compressed = 0; +#define COUNTER (*(uint16_t *)&compressed[counter_pos]) +#define DATA (compressed[data_pos]) + + while (uncompressed_size) { + if (prev_mode) { + if (*data == *prev && COUNTER != 0xFFFF) { + COUNTER++; + data++; + prev++; + uncompressed_size--; + } + else { + prev_mode = false; + counter_pos += sizeof(uint16_t); + data_pos = counter_pos + sizeof(uint16_t); + if (data_pos >= malloc_size) { + malloc_size *= 2; + compressed = realloc(compressed, malloc_size); + } + COUNTER = 0; + } + } + else { + if (*data != *prev && COUNTER != 0xFFFF) { + COUNTER++; + DATA = *data; + data_pos++; + data++; + prev++; + uncompressed_size--; + if (data_pos >= malloc_size) { + malloc_size *= 2; + compressed = realloc(compressed, malloc_size); + } + } + else { + prev_mode = true; + counter_pos = data_pos; + data_pos = counter_pos + sizeof(uint16_t); + if (counter_pos >= malloc_size - 1) { + malloc_size *= 2; + compressed = realloc(compressed, malloc_size); + } + COUNTER = 0; + } + } + } + + return realloc(compressed, data_pos); +#undef DATA +#undef COUNTER +} + + +static void state_decompress(const uint8_t *prev, uint8_t *data, uint8_t *dest, size_t uncompressed_size) +{ + size_t counter_pos = 0; + size_t data_pos = sizeof(uint16_t); + bool prev_mode = true; +#define COUNTER (*(uint16_t *)&data[counter_pos]) +#define DATA (data[data_pos]) + + while (uncompressed_size) { + if (prev_mode) { + if (COUNTER) { + COUNTER--; + *(dest++) = *(prev++); + uncompressed_size--; + } + else { + prev_mode = false; + counter_pos += sizeof(uint16_t); + data_pos = counter_pos + sizeof(uint16_t); + } + } + else { + if (COUNTER) { + COUNTER--; + *(dest++) = DATA; + data_pos++; + prev++; + uncompressed_size--; + } + else { + prev_mode = true; + counter_pos = data_pos; + data_pos += sizeof(uint16_t); + } + } + } +#undef DATA +#undef COUNTER +} + +void GB_rewind_push(GB_gameboy_t *gb) +{ + const size_t save_size = GB_get_save_state_size_no_bess(gb); + if (!gb->rewind_sequences) { + if (gb->rewind_buffer_length) { + gb->rewind_sequences = malloc(sizeof(*gb->rewind_sequences) * gb->rewind_buffer_length); + memset(gb->rewind_sequences, 0, sizeof(*gb->rewind_sequences) * gb->rewind_buffer_length); + gb->rewind_pos = 0; + } + else { + return; + } + } + + if (gb->rewind_sequences[gb->rewind_pos].pos == GB_REWIND_FRAMES_PER_KEY) { + gb->rewind_pos++; + if (gb->rewind_pos == gb->rewind_buffer_length) { + gb->rewind_pos = 0; + } + if (gb->rewind_sequences[gb->rewind_pos].key_state) { + free(gb->rewind_sequences[gb->rewind_pos].key_state); + gb->rewind_sequences[gb->rewind_pos].key_state = NULL; + } + for (unsigned i = 0; i < GB_REWIND_FRAMES_PER_KEY; i++) { + if (gb->rewind_sequences[gb->rewind_pos].compressed_states[i]) { + free(gb->rewind_sequences[gb->rewind_pos].compressed_states[i]); + gb->rewind_sequences[gb->rewind_pos].compressed_states[i] = 0; + } + } + gb->rewind_sequences[gb->rewind_pos].pos = 0; + } + + if (!gb->rewind_sequences[gb->rewind_pos].key_state) { + gb->rewind_sequences[gb->rewind_pos].key_state = malloc(save_size); + GB_save_state_to_buffer_no_bess(gb, gb->rewind_sequences[gb->rewind_pos].key_state); + } + else { + uint8_t *save_state = malloc(save_size); + GB_save_state_to_buffer_no_bess(gb, save_state); + gb->rewind_sequences[gb->rewind_pos].compressed_states[gb->rewind_sequences[gb->rewind_pos].pos++] = + state_compress(gb->rewind_sequences[gb->rewind_pos].key_state, save_state, save_size); + free(save_state); + } + +} + +bool GB_rewind_pop(GB_gameboy_t *gb) +{ + if (!gb->rewind_sequences || !gb->rewind_sequences[gb->rewind_pos].key_state) { + return false; + } + + const size_t save_size = GB_get_save_state_size_no_bess(gb); + if (gb->rewind_sequences[gb->rewind_pos].pos == 0) { + GB_load_state_from_buffer(gb, gb->rewind_sequences[gb->rewind_pos].key_state, save_size); + free(gb->rewind_sequences[gb->rewind_pos].key_state); + gb->rewind_sequences[gb->rewind_pos].key_state = NULL; + gb->rewind_pos = gb->rewind_pos == 0? gb->rewind_buffer_length - 1 : gb->rewind_pos - 1; + return true; + } + + uint8_t *save_state = malloc(save_size); + state_decompress(gb->rewind_sequences[gb->rewind_pos].key_state, + gb->rewind_sequences[gb->rewind_pos].compressed_states[--gb->rewind_sequences[gb->rewind_pos].pos], + save_state, + save_size); + free(gb->rewind_sequences[gb->rewind_pos].compressed_states[gb->rewind_sequences[gb->rewind_pos].pos]); + gb->rewind_sequences[gb->rewind_pos].compressed_states[gb->rewind_sequences[gb->rewind_pos].pos] = NULL; + GB_load_state_from_buffer(gb, save_state, save_size); + free(save_state); + return true; +} + +void GB_rewind_free(GB_gameboy_t *gb) +{ + if (!gb->rewind_sequences) return; + for (unsigned i = 0; i < gb->rewind_buffer_length; i++) { + if (gb->rewind_sequences[i].key_state) { + free(gb->rewind_sequences[i].key_state); + } + for (unsigned j = 0; j < GB_REWIND_FRAMES_PER_KEY; j++) { + if (gb->rewind_sequences[i].compressed_states[j]) { + free(gb->rewind_sequences[i].compressed_states[j]); + } + } + } + free(gb->rewind_sequences); + gb->rewind_sequences = NULL; +} + +void GB_set_rewind_length(GB_gameboy_t *gb, double seconds) +{ + GB_rewind_free(gb); + if (seconds == 0) { + gb->rewind_buffer_length = 0; + } + else { + gb->rewind_buffer_length = (size_t) ceil(seconds * CPU_FREQUENCY / LCDC_PERIOD / GB_REWIND_FRAMES_PER_KEY); + } +} diff --git a/thirdparty/SameBoy-old/Core/rewind.h b/thirdparty/SameBoy-old/Core/rewind.h new file mode 100644 index 000000000..3cc23ed90 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/rewind.h @@ -0,0 +1,14 @@ +#ifndef rewind_h +#define rewind_h + +#include +#include "defs.h" + +#ifdef GB_INTERNAL +internal void GB_rewind_push(GB_gameboy_t *gb); +internal void GB_rewind_free(GB_gameboy_t *gb); +#endif +bool GB_rewind_pop(GB_gameboy_t *gb); +void GB_set_rewind_length(GB_gameboy_t *gb, double seconds); + +#endif diff --git a/thirdparty/SameBoy-old/Core/rumble.c b/thirdparty/SameBoy-old/Core/rumble.c new file mode 100644 index 000000000..5f83c479f --- /dev/null +++ b/thirdparty/SameBoy-old/Core/rumble.c @@ -0,0 +1,57 @@ +#include "rumble.h" +#include "gb.h" + +void GB_set_rumble_mode(GB_gameboy_t *gb, GB_rumble_mode_t mode) +{ + gb->rumble_mode = mode; + if (gb->rumble_callback) { + gb->rumble_callback(gb, 0); + } +} + +void GB_handle_rumble(GB_gameboy_t *gb) +{ + if (gb->rumble_callback) { + if (gb->rumble_mode == GB_RUMBLE_DISABLED) { + return; + } + if (gb->cartridge_type->has_rumble && + (gb->cartridge_type->mbc_type != GB_TPP1 || (gb->rom[0x153] & 1))) { + if (gb->rumble_on_cycles + gb->rumble_off_cycles) { + gb->rumble_callback(gb, gb->rumble_on_cycles / (double)(gb->rumble_on_cycles + gb->rumble_off_cycles)); + gb->rumble_on_cycles = gb->rumble_off_cycles = 0; + } + } + else if (gb->rumble_mode == GB_RUMBLE_ALL_GAMES) { + unsigned volume = (gb->io_registers[GB_IO_NR50] & 7) + 1 + ((gb->io_registers[GB_IO_NR50] >> 4) & 7) + 1; + unsigned ch4_volume = volume * (!!(gb->io_registers[GB_IO_NR51] & 8) + !!(gb->io_registers[GB_IO_NR51] & 0x80)); + unsigned ch1_volume = volume * (!!(gb->io_registers[GB_IO_NR51] & 1) + !!(gb->io_registers[GB_IO_NR51] & 0x10)); + unsigned ch4_divisor = (gb->io_registers[GB_IO_NR43] & 0x07) << 1; + if (!ch4_divisor) ch4_divisor = 1; + unsigned ch4_sample_length = (ch4_divisor << (gb->io_registers[GB_IO_NR43] >> 4)) - 1; + + double ch4_rumble = (MIN(ch4_sample_length * (gb->apu.noise_channel.narrow? 8 : 1) , 4096) * ((signed) gb->apu.noise_channel.current_volume * gb->apu.noise_channel.current_volume * ch4_volume / 32.0 - 50) - 2048) / 2048.0; + + ch4_rumble = MIN(ch4_rumble, 1.0); + ch4_rumble = MAX(ch4_rumble, 0.0); + + double ch1_rumble = 0; + if ((gb->io_registers[GB_IO_NR10] & 0x7) && (gb->io_registers[GB_IO_NR10] & 0x70)) { + double sweep_speed = (gb->io_registers[GB_IO_NR10] & 7) / (double)((gb->io_registers[GB_IO_NR10] >> 4) & 7); + ch1_rumble = gb->apu.square_channels[GB_SQUARE_1].current_volume * ch1_volume / 32.0 * sweep_speed / 8.0 - 0.5; + ch1_rumble = MIN(ch1_rumble, 1.0); + ch1_rumble = MAX(ch1_rumble, 0.0); + } + + if (!gb->apu.is_active[GB_NOISE]) { + ch4_rumble = 0; + } + + if (!gb->apu.is_active[GB_SQUARE_1]) { + ch1_rumble = 0; + } + + gb->rumble_callback(gb, MIN(MAX(ch1_rumble / 2 + ch4_rumble, 0.0), 1.0)); + } + } +} diff --git a/thirdparty/SameBoy-old/Core/rumble.h b/thirdparty/SameBoy-old/Core/rumble.h new file mode 100644 index 000000000..ca3473781 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/rumble.h @@ -0,0 +1,17 @@ +#ifndef rumble_h +#define rumble_h + +#include "defs.h" + +typedef enum { + GB_RUMBLE_DISABLED, + GB_RUMBLE_CARTRIDGE_ONLY, + GB_RUMBLE_ALL_GAMES +} GB_rumble_mode_t; + +#ifdef GB_INTERNAL +internal void GB_handle_rumble(GB_gameboy_t *gb); +#endif +void GB_set_rumble_mode(GB_gameboy_t *gb, GB_rumble_mode_t mode); + +#endif /* rumble_h */ diff --git a/thirdparty/SameBoy-old/Core/save_state.c b/thirdparty/SameBoy-old/Core/save_state.c new file mode 100644 index 000000000..8a071b189 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/save_state.c @@ -0,0 +1,1408 @@ +#include "gb.h" +#include +#include +#include + +#ifdef GB_BIG_ENDIAN +//#define BESS_NAME "SameBoy v" GB_VERSION " (Big Endian)" +#define BESS_NAME "SameBoy v0.15.5 (Big Endian)" +#else +//#define BESS_NAME "SameBoy v" GB_VERSION +#define BESS_NAME "SameBoy v0.15.5" +#endif + +_Static_assert((GB_SECTION_OFFSET(core_state) & 7) == 0, "Section core_state is not aligned"); +_Static_assert((GB_SECTION_OFFSET(dma) & 7) == 0, "Section dma is not aligned"); +_Static_assert((GB_SECTION_OFFSET(mbc) & 7) == 0, "Section mbc is not aligned"); +_Static_assert((GB_SECTION_OFFSET(hram) & 7) == 0, "Section hram is not aligned"); +_Static_assert((GB_SECTION_OFFSET(timing) & 7) == 0, "Section timing is not aligned"); +_Static_assert((GB_SECTION_OFFSET(apu) & 7) == 0, "Section apu is not aligned"); +_Static_assert((GB_SECTION_OFFSET(rtc) & 7) == 0, "Section rtc is not aligned"); +_Static_assert((GB_SECTION_OFFSET(video) & 7) == 0, "Section video is not aligned"); + +typedef struct __attribute__((packed)) { + uint32_t magic; + uint32_t size; +} BESS_block_t; + +typedef struct __attribute__((packed)) { + uint32_t size; + uint32_t offset; +} BESS_buffer_t; + +typedef struct __attribute__((packed)) { + uint32_t start_offset; + uint32_t magic; +} BESS_footer_t; + +typedef struct __attribute__((packed)) { + BESS_block_t header; + uint16_t major; + uint16_t minor; + union { + struct { + char family; + char model; + char revision; + char padding; + }; + uint32_t full_model; + }; + + uint16_t pc; + uint16_t af; + uint16_t bc; + uint16_t de; + uint16_t hl; + uint16_t sp; + + uint8_t ime; + uint8_t ie; + uint8_t execution_mode; // 0 = running; 1 = halted; 2 = stopped + uint8_t _padding; + + uint8_t io_registers[0x80]; + + BESS_buffer_t ram; + BESS_buffer_t vram; + BESS_buffer_t mbc_ram; + BESS_buffer_t oam; + BESS_buffer_t hram; + BESS_buffer_t background_palettes; + BESS_buffer_t object_palettes; +} BESS_CORE_t; + +typedef struct __attribute__((packed)) { + BESS_block_t header; + uint8_t extra_oam[96]; +} BESS_XOAM_t; + +typedef struct __attribute__((packed)) { + BESS_block_t header; + BESS_buffer_t border_tiles; + BESS_buffer_t border_tilemap; + BESS_buffer_t border_palettes; + + BESS_buffer_t active_palettes; + BESS_buffer_t ram_palettes; + BESS_buffer_t attribute_map; + BESS_buffer_t attribute_files; + + uint8_t multiplayer_state; +} BESS_SGB_t; + +typedef struct __attribute__((packed)){ + BESS_block_t header; + char title[0x10]; + uint8_t checksum[2]; +} BESS_INFO_t; + +/* Same RTC format as used by VBA, BGB and SameBoy in battery saves*/ +typedef struct __attribute__((packed)){ + BESS_block_t header; + struct { + uint8_t seconds; + uint8_t padding1[3]; + uint8_t minutes; + uint8_t padding2[3]; + uint8_t hours; + uint8_t padding3[3]; + uint8_t days; + uint8_t padding4[3]; + uint8_t high; + uint8_t padding5[3]; + } real, latched; + uint64_t last_rtc_second; +} BESS_RTC_t; + +/* Same HuC3 RTC format as used by SameBoy and BGB in battery saves */ +typedef struct __attribute__((packed)){ + BESS_block_t header; + GB_huc3_rtc_time_t data; +} BESS_HUC3_t; + +typedef struct __attribute__((packed)) { + BESS_block_t header; + + // Flags + bool latch_ready:1; + bool eeprom_do:1; + bool eeprom_di:1; + bool eeprom_clk:1; + bool eeprom_cs:1; + bool eeprom_write_enabled:1; + uint8_t padding:2; + + uint8_t argument_bits_left; + + uint16_t eeprom_command; + uint16_t read_bits; + + uint16_t x_latch; + uint16_t y_latch; + +} BESS_MBC7_t; + +typedef struct __attribute__((packed)){ + BESS_block_t header; + uint64_t last_rtc_second; + uint8_t real_rtc_data[4]; + uint8_t latched_rtc_data[4]; + uint8_t mr4; +} BESS_TPP1_t; + +typedef struct __attribute__((packed)) { + uint16_t address; + uint8_t value; +} BESS_MBC_pair_t; + +typedef struct virtual_file_s virtual_file_t; +struct virtual_file_s +{ + size_t (*read)(virtual_file_t *file, void *dest, size_t length); + size_t (*write)(virtual_file_t *file, const void *dest, size_t length); + void (*seek)(virtual_file_t *file, ssize_t ammount, int origin); + size_t (*tell)(virtual_file_t *file); + union { + FILE *file; + struct { + uint8_t *buffer; + size_t position; + size_t size; + }; + }; +}; + +static size_t file_read(virtual_file_t *file, void *dest, size_t length) +{ + return fread(dest, 1, length, file->file); +} + +static void file_seek(virtual_file_t *file, ssize_t ammount, int origin) +{ + fseek(file->file, ammount, origin); +} + +static size_t file_write(virtual_file_t *file, const void *src, size_t length) +{ + return fwrite(src, 1, length, file->file); +} + +static size_t file_tell(virtual_file_t *file) +{ + return ftell(file->file); +} + +static size_t buffer_read(virtual_file_t *file, void *dest, size_t length) +{ + if (length & 0x80000000) { + return 0; + } + errno = 0; + if (length > file->size - file->position) { + errno = EIO; + length = file->size - file->position; + } + + memcpy(dest, file->buffer + file->position, length); + file->position += length; + + return length; +} + +static void buffer_seek(virtual_file_t *file, ssize_t ammount, int origin) +{ + switch (origin) { + case SEEK_SET: + file->position = ammount; + break; + case SEEK_CUR: + file->position += ammount; + break; + case SEEK_END: + file->position = file->size + ammount; + break; + default: + break; + } + + if (file->position > file->size) { + file->position = file->size; + } +} + +static size_t buffer_write(virtual_file_t *file, const void *src, size_t size) +{ + memcpy(file->buffer + file->position, src, size); + file->position += size; + return size; +} + +static size_t buffer_tell(virtual_file_t *file) +{ + return file->position; +} + +static size_t bess_size_for_cartridge(const GB_cartridge_t *cart) +{ + switch (cart->mbc_type) { + default: + case GB_NO_MBC: return 0; + case GB_MBC1: + return sizeof(BESS_block_t) + 4 * sizeof(BESS_MBC_pair_t); + case GB_MBC2: + return sizeof(BESS_block_t) + 2 * sizeof(BESS_MBC_pair_t); + case GB_MBC3: + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t) + (cart->has_rtc? sizeof(BESS_RTC_t) : 0); + case GB_MBC5: + return sizeof(BESS_block_t) + 4 * sizeof(BESS_MBC_pair_t); + case GB_CAMERA: + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t); + case GB_MBC7: + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t) + sizeof(BESS_MBC7_t); + case GB_MMM01: + return sizeof(BESS_block_t) + 8 * sizeof(BESS_MBC_pair_t); + case GB_HUC1: + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t); + case GB_HUC3: + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t) + sizeof(BESS_HUC3_t); + case GB_TPP1: + return sizeof(BESS_block_t) + 4 * sizeof(BESS_MBC_pair_t) + sizeof(BESS_TPP1_t); + } +} + +size_t GB_get_save_state_size_no_bess(GB_gameboy_t *gb) +{ + return GB_SECTION_SIZE(header) + + GB_SECTION_SIZE(core_state) + sizeof(uint32_t) + + GB_SECTION_SIZE(dma ) + sizeof(uint32_t) + + GB_SECTION_SIZE(mbc ) + sizeof(uint32_t) + + GB_SECTION_SIZE(hram ) + sizeof(uint32_t) + + GB_SECTION_SIZE(timing ) + sizeof(uint32_t) + + GB_SECTION_SIZE(apu ) + sizeof(uint32_t) + + GB_SECTION_SIZE(rtc ) + sizeof(uint32_t) + + GB_SECTION_SIZE(video ) + sizeof(uint32_t) + + (GB_is_hle_sgb(gb)? sizeof(*gb->sgb) + sizeof(uint32_t) : 0) + + gb->mbc_ram_size + + gb->ram_size + + gb->vram_size; +} + +size_t GB_get_save_state_size(GB_gameboy_t *gb) +{ + return GB_get_save_state_size_no_bess(gb) + + // BESS + + sizeof(BESS_block_t) // NAME + + sizeof(BESS_NAME) - 1 + + sizeof(BESS_INFO_t) // INFO + + sizeof(BESS_CORE_t) + + sizeof(BESS_XOAM_t) + + (gb->sgb? sizeof(BESS_SGB_t) : 0) + + bess_size_for_cartridge(gb->cartridge_type) // MBC & RTC/HUC3/TPP1/MBC7 block + + sizeof(BESS_block_t) // END block + + sizeof(BESS_footer_t); +} + +static bool verify_and_update_state_compatibility(GB_gameboy_t *gb, GB_gameboy_t *save, bool *attempt_bess) +{ + *attempt_bess = false; + + if (gb->version != save->version) { + GB_log(gb, "The save state is for a different version of SameBoy.\n"); + *attempt_bess = true; + return false; + } + + if (GB_is_cgb(gb) != GB_is_cgb(save) || GB_is_hle_sgb(gb) != GB_is_hle_sgb(save)) { + GB_log(gb, "The save state is for a different Game Boy model. Try changing the emulated model.\n"); + return false; + } + + if (gb->mbc_ram_size < save->mbc_ram_size) { + GB_log(gb, "The save state has non-matching MBC RAM size.\n"); + return false; + } + + if (gb->vram_size != save->vram_size) { + GB_log(gb, "The save state has non-matching VRAM size. Try changing the emulated model.\n"); + return false; + } + + if (GB_is_hle_sgb(gb) != GB_is_hle_sgb(save)) { + GB_log(gb, "The save state is %sfor a Super Game Boy. Try changing the emulated model.\n", GB_is_hle_sgb(save)? "" : "not "); + return false; + } + + if (gb->ram_size != save->ram_size) { + GB_log(gb, "The save state has non-matching RAM size. Try changing the emulated model.\n"); + return false; + } + + switch (save->model) { + case GB_MODEL_DMG_B: return true; + case GB_MODEL_SGB_NTSC: return true; + case GB_MODEL_SGB_PAL: return true; + case GB_MODEL_SGB_NTSC_NO_SFC: return true; + case GB_MODEL_SGB_PAL_NO_SFC: return true; + case GB_MODEL_MGB: return true; + case GB_MODEL_SGB2: return true; + case GB_MODEL_SGB2_NO_SFC: return true; + case GB_MODEL_CGB_0: return true; + case GB_MODEL_CGB_A: return true; + case GB_MODEL_CGB_B: return true; + case GB_MODEL_CGB_C: return true; + case GB_MODEL_CGB_D: return true; + case GB_MODEL_CGB_E: return true; + case GB_MODEL_AGB_A: return true; + case GB_MODEL_GBP_A: return true; + } + if ((gb->model & GB_MODEL_FAMILY_MASK) == (save->model & GB_MODEL_FAMILY_MASK)) { + save->model = gb->model; + return true; + } + GB_log(gb, "This save state is for an unknown Game Boy model\n"); + return false; +} + +static void sanitize_state(GB_gameboy_t *gb) +{ + for (unsigned i = 0; i < 32; i++) { + GB_palette_changed(gb, false, i * 2); + GB_palette_changed(gb, true, i * 2); + } + + gb->bg_fifo.read_end &= GB_FIFO_LENGTH - 1; + gb->oam_fifo.read_end &= GB_FIFO_LENGTH - 1; + gb->last_tile_index_address &= 0x1FFF; + gb->window_tile_x &= 0x1F; + + /* These are kind of DOS-ish if too large */ + if (abs(gb->display_cycles) > 0x80000) { + gb->display_cycles = 0; + } + + if (abs(gb->div_cycles) > 0x8000) { + gb->div_cycles = 0; + } + + if (!GB_is_cgb(gb)) { + gb->cgb_mode = false; + } + + if (gb->ram_size == 0x8000) { + gb->cgb_ram_bank &= 0x7; + } + else { + gb->cgb_ram_bank = 1; + } + if (gb->vram_size != 0x4000) { + gb->cgb_vram_bank = 0; + } + if (!GB_is_cgb(gb)) { + gb->current_tile_attributes = 0; + } + + gb->object_low_line_address &= gb->vram_size & ~1; + if (gb->lcd_x > gb->position_in_line) { + gb->lcd_x = gb->position_in_line; + } + + if (gb->sgb) { + if (gb->sgb->player_count != 1 && gb->sgb->player_count != 2 && gb->sgb->player_count != 4) { + gb->sgb->player_count = 1; + } + gb->sgb->current_player &= gb->sgb->player_count - 1; + } + GB_update_clock_rate(gb); +} + +static bool dump_section(virtual_file_t *file, const void *src, uint32_t size) +{ + if (file->write(file, &size, sizeof(size)) != sizeof(size)) { + return false; + } + + if (file->write(file, src, size) != size) { + return false; + } + + return true; +} + +#define DUMP_SECTION(gb, f, section) dump_section(f, GB_GET_SECTION(gb, section), GB_SECTION_SIZE(section)) + +static int save_bess_mbc_block(GB_gameboy_t *gb, virtual_file_t *file) +{ + + BESS_block_t mbc_block = {BE32('MBC '), 0}; + BESS_MBC_pair_t pairs[8]; + switch (gb->cartridge_type->mbc_type) { + default: + case GB_NO_MBC: return 0; + case GB_MBC1: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc1.bank_low}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc1.bank_high}; + pairs[3] = (BESS_MBC_pair_t){LE16(0x6000), gb->mbc1.mode}; + mbc_block.size = 4 * sizeof(pairs[0]); + break; + case GB_MBC2: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x0100), gb->mbc2.rom_bank}; + mbc_block.size = 2 * sizeof(pairs[0]); + break; + case GB_MBC3: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc3.rom_bank}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc3.ram_bank | (gb->mbc3.rtc_mapped? 8 : 0)}; + mbc_block.size = 3 * sizeof(pairs[0]); + break; + case GB_MBC5: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc5.rom_bank_low}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x3000), gb->mbc5.rom_bank_high}; + pairs[3] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc5.ram_bank}; + mbc_block.size = 4 * sizeof(pairs[0]); + break; + case GB_CAMERA: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc5.rom_bank_low}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc5.ram_bank}; + mbc_block.size = 3 * sizeof(pairs[0]); + break; + case GB_MBC7: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc7.rom_bank}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc7.secondary_ram_enable? 0x40 : 0}; + mbc_block.size = 3 * sizeof(pairs[0]); + break; + case GB_MMM01: + pairs[0] = (BESS_MBC_pair_t){LE16(0x2000), (gb->mmm01.rom_bank_low & (gb->mmm01.rom_bank_mask << 1)) | (gb->mmm01.rom_bank_mid << 5)}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x6000), gb->mmm01.mbc1_mode | (gb->mmm01.rom_bank_mask << 2) | (gb->mmm01.multiplex_mode << 6)}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mmm01.ram_bank_low | (gb->mmm01.ram_bank_high << 2) | (gb->mmm01.rom_bank_high << 4) | (gb->mmm01.mbc1_mode_disable << 6)}; + pairs[3] = (BESS_MBC_pair_t){LE16(0x0000), (gb->mbc_ram_enable? 0xA : 0x0) | (gb->mmm01.ram_bank_mask << 4) | (gb->mmm01.locked << 6)}; + /* For compatibility with emulators that inaccurately emulate MMM01, and also require two writes per register */ + pairs[4] = (BESS_MBC_pair_t){LE16(0x2000), (gb->mmm01.rom_bank_low & ~(gb->mmm01.rom_bank_mask << 1))}; + pairs[5] = pairs[1]; + pairs[6] = pairs[2]; + pairs[7] = pairs[3]; + mbc_block.size = 8 * sizeof(pairs[0]); + break; + case GB_HUC1: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->huc1.ir_mode? 0xE : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->huc1.bank_low}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->huc1.bank_high}; + mbc_block.size = 3 * sizeof(pairs[0]); + case GB_HUC3: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->huc3.mode}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->huc3.rom_bank}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->huc3.ram_bank}; + mbc_block.size = 3 * sizeof(pairs[0]); + break; + case GB_TPP1: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->tpp1.rom_bank}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x0001), gb->tpp1.rom_bank >> 8}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x0002), gb->tpp1.rom_bank}; + pairs[3] = (BESS_MBC_pair_t){LE16(0x0003), gb->tpp1.mode}; + mbc_block.size = 4 * sizeof(pairs[0]); + break; + } + + mbc_block.size = LE32(mbc_block.size); + + if (file->write(file, &mbc_block, sizeof(mbc_block)) != sizeof(mbc_block)) { + return errno; + } + + if (file->write(file, &pairs, LE32(mbc_block.size)) != LE32(mbc_block.size)) { + return errno; + } + + return 0; +} + +static const uint8_t *get_header_bank(GB_gameboy_t *gb) +{ + if (gb->cartridge_type->mbc_type == GB_MMM01) { + return gb->rom + gb->rom_size - 0x8000; + } + return gb->rom; +} + +static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool append_bess) +{ + if (file->write(file, GB_GET_SECTION(gb, header), GB_SECTION_SIZE(header)) != GB_SECTION_SIZE(header)) goto error; + if (!DUMP_SECTION(gb, file, core_state)) goto error; + if (!DUMP_SECTION(gb, file, dma )) goto error; + if (!DUMP_SECTION(gb, file, mbc )) goto error; + uint32_t hram_offset = file->tell(file) + 4; + if (!DUMP_SECTION(gb, file, hram )) goto error; + if (!DUMP_SECTION(gb, file, timing )) goto error; + if (!DUMP_SECTION(gb, file, apu )) goto error; + if (!DUMP_SECTION(gb, file, rtc )) goto error; + uint32_t video_offset = file->tell(file) + 4; + if (!DUMP_SECTION(gb, file, video )) goto error; + + uint32_t sgb_offset = 0; + + if (GB_is_hle_sgb(gb)) { + sgb_offset = file->tell(file) + 4; + if (!dump_section(file, gb->sgb, sizeof(*gb->sgb))) goto error; + } + + + BESS_CORE_t bess_core = {0,}; + + bess_core.mbc_ram.offset = LE32(file->tell(file)); + bess_core.mbc_ram.size = LE32(gb->mbc_ram_size); + if (file->write(file, gb->mbc_ram, gb->mbc_ram_size) != gb->mbc_ram_size) { + goto error; + } + + bess_core.ram.offset = LE32(file->tell(file)); + bess_core.ram.size = LE32(gb->ram_size); + if (file->write(file, gb->ram, gb->ram_size) != gb->ram_size) { + goto error; + } + + bess_core.vram.offset = LE32(file->tell(file)); + bess_core.vram.size = LE32(gb->vram_size); + if (file->write(file, gb->vram, gb->vram_size) != gb->vram_size) { + goto error; + } + + if (!append_bess) return 0; + + BESS_footer_t bess_footer = { + .start_offset = LE32(file->tell(file)), + .magic = BE32('BESS'), + }; + + /* BESS NAME */ + + static const BESS_block_t bess_name = {BE32('NAME'), LE32(sizeof(BESS_NAME) - 1)}; + + if (file->write(file, &bess_name, sizeof(bess_name)) != sizeof(bess_name)) { + goto error; + } + + if (file->write(file, BESS_NAME, sizeof(BESS_NAME) - 1) != sizeof(BESS_NAME) - 1) { + goto error; + } + + /* BESS INFO */ + + static const BESS_block_t bess_info = {BE32('INFO'), LE32(sizeof(BESS_INFO_t) - sizeof(BESS_block_t))}; + + if (file->write(file, &bess_info, sizeof(bess_info)) != sizeof(bess_info)) { + goto error; + } + + const uint8_t *bank = get_header_bank(gb); + + if (file->write(file, bank + 0x134, 0x10) != 0x10) { + goto error; + } + + if (file->write(file, bank + 0x14E, 2) != 2) { + goto error; + } + + /* BESS CORE */ + + bess_core.header = (BESS_block_t){BE32('CORE'), LE32(sizeof(bess_core) - sizeof(bess_core.header))}; + bess_core.major = LE16(1); + bess_core.minor = LE16(1); + switch (gb->model) { + + case GB_MODEL_DMG_B: bess_core.full_model = BE32('GDB '); break; + case GB_MODEL_MGB: bess_core.full_model = BE32('GM '); break; + + case GB_MODEL_SGB_NTSC: + case GB_MODEL_SGB_NTSC_NO_SFC: + bess_core.full_model = BE32('SN '); break; + + case GB_MODEL_SGB_PAL_NO_SFC: + case GB_MODEL_SGB_PAL: + bess_core.full_model = BE32('SP '); break; + + case GB_MODEL_SGB2_NO_SFC: + case GB_MODEL_SGB2: + bess_core.full_model = BE32('S2 '); break; + + case GB_MODEL_CGB_0: bess_core.full_model = BE32('CC0 '); break; + case GB_MODEL_CGB_A: bess_core.full_model = BE32('CCA '); break; + case GB_MODEL_CGB_B: bess_core.full_model = BE32('CCB '); break; + case GB_MODEL_CGB_C: bess_core.full_model = BE32('CCC '); break; + case GB_MODEL_CGB_D: bess_core.full_model = BE32('CCD '); break; + case GB_MODEL_CGB_E: bess_core.full_model = BE32('CCE '); break; + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + bess_core.full_model = BE32('CAA '); break; + } + + bess_core.pc = LE16(gb->pc); + bess_core.af = LE16(gb->af); + bess_core.bc = LE16(gb->bc); + bess_core.de = LE16(gb->de); + bess_core.hl = LE16(gb->hl); + bess_core.sp = LE16(gb->sp); + + bess_core.ime = gb->ime; + bess_core.ie = gb->interrupt_enable; + bess_core.execution_mode = 0; + if (gb->halted) { + bess_core.execution_mode = 1; + } + else if (gb->stopped) { + bess_core.execution_mode = 2; + } + + memcpy(bess_core.io_registers, gb->io_registers, sizeof(gb->io_registers)); + bess_core.io_registers[GB_IO_DIV] = gb->div_counter >> 8; + bess_core.io_registers[GB_IO_BANK] = gb->boot_rom_finished; + bess_core.io_registers[GB_IO_KEY1] |= gb->cgb_double_speed? 0x80 : 0; + bess_core.hram.size = LE32(sizeof(gb->hram)); + bess_core.hram.offset = LE32(hram_offset + offsetof(GB_gameboy_t, hram) - GB_SECTION_OFFSET(hram)); + bess_core.oam.size = LE32(sizeof(gb->oam)); + bess_core.oam.offset = LE32(video_offset + offsetof(GB_gameboy_t, oam) - GB_SECTION_OFFSET(video)); + if (GB_is_cgb(gb)) { + bess_core.background_palettes.size = LE32(sizeof(gb->background_palettes_data)); + bess_core.background_palettes.offset = LE32(video_offset + offsetof(GB_gameboy_t, background_palettes_data) - GB_SECTION_OFFSET(video)); + bess_core.object_palettes.size = LE32(sizeof(gb->object_palettes_data)); + bess_core.object_palettes.offset = LE32(video_offset + offsetof(GB_gameboy_t, object_palettes_data) - GB_SECTION_OFFSET(video)); + } + + if (file->write(file, &bess_core, sizeof(bess_core)) != sizeof(bess_core)) { + goto error; + } + + /* BESS XOAM */ + + BESS_XOAM_t bess_xoam = {0,}; + bess_xoam.header = (BESS_block_t){BE32('XOAM'), LE32(sizeof(bess_xoam) - sizeof(bess_xoam.header))}; + if (GB_is_cgb(gb)) { + memcpy(bess_xoam.extra_oam, gb->extra_oam, sizeof(bess_xoam.extra_oam)); + } + + if (file->write(file, &bess_xoam, sizeof(bess_xoam)) != sizeof(bess_xoam)) { + goto error; + } + + save_bess_mbc_block(gb, file); + if (gb->cartridge_type->has_rtc) { + if (gb->cartridge_type ->mbc_type == GB_TPP1) { + BESS_TPP1_t bess_tpp1 = {0,}; + bess_tpp1.header = (BESS_block_t){BE32('TPP1'), LE32(sizeof(bess_tpp1) - sizeof(bess_tpp1.header))}; + + bess_tpp1.last_rtc_second = LE64(gb->last_rtc_second); + unrolled for (unsigned i = 4; i--;) { + bess_tpp1.real_rtc_data[i] = gb->rtc_real.data[i ^ 3]; + bess_tpp1.latched_rtc_data[i] = gb->rtc_latched.data[i ^ 3]; + } + bess_tpp1.mr4 = gb->tpp1_mr4; + + if (file->write(file, &bess_tpp1, sizeof(bess_tpp1)) != sizeof(bess_tpp1)) { + goto error; + } + } + else if (gb->cartridge_type ->mbc_type != GB_HUC3) { + BESS_RTC_t bess_rtc = {0,}; + bess_rtc.header = (BESS_block_t){BE32('RTC '), LE32(sizeof(bess_rtc) - sizeof(bess_rtc.header))}; + bess_rtc.real.seconds = gb->rtc_real.seconds; + bess_rtc.real.minutes = gb->rtc_real.minutes; + bess_rtc.real.hours = gb->rtc_real.hours; + bess_rtc.real.days = gb->rtc_real.days; + bess_rtc.real.high = gb->rtc_real.high; + bess_rtc.latched.seconds = gb->rtc_latched.seconds; + bess_rtc.latched.minutes = gb->rtc_latched.minutes; + bess_rtc.latched.hours = gb->rtc_latched.hours; + bess_rtc.latched.days = gb->rtc_latched.days; + bess_rtc.latched.high = gb->rtc_latched.high; + bess_rtc.last_rtc_second = LE64(gb->last_rtc_second); + if (file->write(file, &bess_rtc, sizeof(bess_rtc)) != sizeof(bess_rtc)) { + goto error; + } + } + else { + BESS_HUC3_t bess_huc3 = {0,}; + bess_huc3.header = (BESS_block_t){BE32('HUC3'), LE32(sizeof(bess_huc3) - sizeof(bess_huc3.header))}; + + bess_huc3.data = (GB_huc3_rtc_time_t) { + LE64(gb->last_rtc_second), + LE16(gb->huc3.minutes), + LE16(gb->huc3.days), + LE16(gb->huc3.alarm_minutes), + LE16(gb->huc3.alarm_days), + gb->huc3.alarm_enabled, + }; + if (file->write(file, &bess_huc3, sizeof(bess_huc3)) != sizeof(bess_huc3)) { + goto error; + } + } + } + + if (gb->cartridge_type ->mbc_type == GB_MBC7) { + BESS_MBC7_t bess_mbc7 = { + .latch_ready = gb->mbc7.latch_ready, + .eeprom_do = gb->mbc7.eeprom_do, + .eeprom_di = gb->mbc7.eeprom_di, + .eeprom_clk = gb->mbc7.eeprom_clk, + .eeprom_cs = gb->mbc7.eeprom_cs, + .eeprom_write_enabled = gb->mbc7.eeprom_write_enabled, + + .argument_bits_left = gb->mbc7.argument_bits_left, + + .eeprom_command = LE16(gb->mbc7.eeprom_command), + .read_bits = LE16(gb->mbc7.read_bits), + + .x_latch = LE16(gb->mbc7.x_latch), + .y_latch = LE16(gb->mbc7.y_latch), + }; + bess_mbc7.header = (BESS_block_t){BE32('MBC7'), LE32(sizeof(bess_mbc7) - sizeof(bess_mbc7.header))}; + + if (file->write(file, &bess_mbc7, sizeof(bess_mbc7)) != sizeof(bess_mbc7)) { + goto error; + } + } + + bool needs_sgb_padding = false; + if (gb->sgb) { + /* BESS SGB */ + if (gb->sgb->disable_commands) { + needs_sgb_padding = true; + } + else { + BESS_SGB_t bess_sgb = {{BE32('SGB '), LE32(sizeof(bess_sgb) - sizeof(bess_sgb.header))}, }; + + bess_sgb.border_tiles = (BESS_buffer_t){LE32(sizeof(gb->sgb->pending_border.tiles)), + LE32(sgb_offset + offsetof(GB_sgb_t, pending_border.tiles))}; + bess_sgb.border_tilemap = (BESS_buffer_t){LE32(sizeof(gb->sgb->pending_border.map)), + LE32(sgb_offset + offsetof(GB_sgb_t, pending_border.map))}; + bess_sgb.border_palettes = (BESS_buffer_t){LE32(sizeof(gb->sgb->pending_border.palette)), + LE32(sgb_offset + offsetof(GB_sgb_t, pending_border.palette))}; + + bess_sgb.active_palettes = (BESS_buffer_t){LE32(sizeof(gb->sgb->effective_palettes)), + LE32(sgb_offset + offsetof(GB_sgb_t, effective_palettes))}; + bess_sgb.ram_palettes = (BESS_buffer_t){LE32(sizeof(gb->sgb->ram_palettes)), + LE32(sgb_offset + offsetof(GB_sgb_t, ram_palettes))}; + bess_sgb.attribute_map = (BESS_buffer_t){LE32(sizeof(gb->sgb->attribute_map)), + LE32(sgb_offset + offsetof(GB_sgb_t, attribute_map))}; + bess_sgb.attribute_files = (BESS_buffer_t){LE32(sizeof(gb->sgb->attribute_files)), + LE32(sgb_offset + offsetof(GB_sgb_t, attribute_files))}; + + bess_sgb.multiplayer_state = (gb->sgb->player_count << 4) | gb->sgb->current_player; + if (file->write(file, &bess_sgb, sizeof(bess_sgb)) != sizeof(bess_sgb)) { + goto error; + } + } + } + + /* BESS END */ + + static const BESS_block_t bess_end = {BE32('END '), 0}; + + if (file->write(file, &bess_end, sizeof(bess_end)) != sizeof(bess_end)) { + goto error; + } + + if (needs_sgb_padding) { + static const uint8_t sgb_padding[sizeof(BESS_SGB_t)] = {0,}; + file->write(file, sgb_padding, sizeof(sgb_padding)); + } + + /* BESS Footer */ + + if (file->write(file, &bess_footer, sizeof(bess_footer)) != sizeof(bess_footer)) { + goto error; + } + + errno = 0; +error: + return errno; +} + +int GB_save_state(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "wb"); + if (!f) { + GB_log(gb, "Could not open save state: %s.\n", strerror(errno)); + return errno; + } + virtual_file_t file = { + .write = file_write, + .seek = file_seek, + .tell = file_tell, + .file = f, + }; + int ret = save_state_internal(gb, &file, true); + fclose(f); + return ret; +} + +void GB_save_state_to_buffer(GB_gameboy_t *gb, uint8_t *buffer) +{ + virtual_file_t file = { + .write = buffer_write, + .seek = buffer_seek, + .tell = buffer_tell, + .buffer = (uint8_t *)buffer, + .position = 0, + }; + + save_state_internal(gb, &file, true); + assert(file.position == GB_get_save_state_size(gb)); +} + +void GB_save_state_to_buffer_no_bess(GB_gameboy_t *gb, uint8_t *buffer) +{ + virtual_file_t file = { + .write = buffer_write, + .seek = buffer_seek, + .tell = buffer_tell, + .buffer = (uint8_t *)buffer, + .position = 0, + }; + + save_state_internal(gb, &file, false); + assert(file.position == GB_get_save_state_size_no_bess(gb)); +} + +static bool read_section(virtual_file_t *file, void *dest, uint32_t size, bool fix_broken_windows_saves) +{ + uint32_t saved_size = 0; + if (file->read(file, &saved_size, sizeof(size)) != sizeof(size)) { + return false; + } + + if (fix_broken_windows_saves) { + if (saved_size < 4) { + return false; + } + saved_size -= 4; + file->seek(file, 4, SEEK_CUR); + } + + if (saved_size <= size) { + if (file->read(file, dest, saved_size) != saved_size) { + return false; + } + } + else { + if (file->read(file, dest, size) != size) { + return false; + } + file->seek(file, saved_size - size, SEEK_CUR); + } + + return true; +} + +static void read_bess_buffer(const BESS_buffer_t *buffer, virtual_file_t *file, uint8_t *dest, size_t max_size) +{ + size_t pos = file->tell(file); + file->seek(file, LE32(buffer->offset), SEEK_SET); + file->read(file, dest, MIN(LE32(buffer->size), max_size)); + file->seek(file, pos, SEEK_SET); + + if (LE32(buffer->size) < max_size) { + memset(dest + LE32(buffer->size), 0, max_size - LE32(buffer->size)); + } +} + +static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_sameboy) +{ + char emulator_name[65] = {0,}; + file->seek(file, -sizeof(BESS_footer_t), SEEK_END); + BESS_footer_t footer = {0, }; + file->read(file, &footer, sizeof(footer)); + if (footer.magic != BE32('BESS')) { + // Not a BESS file + if (!is_sameboy) { + GB_log(gb, "The file is not a save state, or is from an incompatible operating system.\n"); + } + return -1; + } + + GB_gameboy_t save; + GB_init(&save, gb->model); + save.cartridge_type = gb->cartridge_type; + + file->seek(file, LE32(footer.start_offset), SEEK_SET); + bool found_core = false; + BESS_CORE_t core = {0,}; + bool found_sgb = false; + BESS_SGB_t sgb = {0,}; + while (true) { + BESS_block_t block; + if (file->read(file, &block, sizeof(block)) != sizeof(block)) goto error; + switch (block.magic) { + case BE32('CORE'): + if (found_core) goto parse_error; + found_core = true; + if (LE32(block.size) > sizeof(core) - sizeof(block)) { + if (file->read(file, &core.header + 1, sizeof(core) - sizeof(block)) != sizeof(core) - sizeof(block)) goto error; + file->seek(file, LE32(block.size) - (sizeof(core) - sizeof(block)), SEEK_CUR); + } + else { + if (file->read(file, &core.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + } + + if (core.major != LE16(1)) { + GB_log(gb, "This save state uses an incompatible version of the BESS specification"); + GB_free(&save); + return -1; + } + + switch (core.family) { + case 'C': + if (!GB_is_cgb(&save)) goto wrong_model; + break; + case 'S': + if (!GB_is_sgb(&save)) goto wrong_model; + break; + case 'G': + if (GB_is_cgb(&save) || GB_is_sgb(&save)) goto wrong_model; + break; + default: + wrong_model: + GB_log(gb, "The save state is for a different model. Try changing the emulated model.\n"); + GB_free(&save); + return -1; + } + + + save.pc = LE16(core.pc); + save.af = LE16(core.af); + save.bc = LE16(core.bc); + save.de = LE16(core.de); + save.hl = LE16(core.hl); + save.sp = LE16(core.sp); + + save.ime = core.ime; + save.interrupt_enable = core.ie; + + save.halted = core.execution_mode == 1; + save.stopped = core.execution_mode == 2; + + // Done early for compatibility with 0.14.x + GB_write_memory(&save, 0xFF00 + GB_IO_SVBK, core.io_registers[GB_IO_SVBK]); + // CPU related + + // Determines DMG mode + GB_write_memory(&save, 0xFF00 + GB_IO_KEY0, core.io_registers[GB_IO_KEY0]); + save.boot_rom_finished = core.io_registers[GB_IO_BANK]; + GB_write_memory(&save, 0xFF00 + GB_IO_KEY1, core.io_registers[GB_IO_KEY1]); + if (save.cgb_mode) { + save.cgb_double_speed = core.io_registers[GB_IO_KEY1] & 0x80; + save.object_priority = GB_OBJECT_PRIORITY_INDEX; + } + else { + save.object_priority = GB_OBJECT_PRIORITY_X; + } + + // Timers, Joypad and Serial + GB_write_memory(&save, 0xFF00 + GB_IO_JOYP, core.io_registers[GB_IO_JOYP]); + GB_write_memory(&save, 0xFF00 + GB_IO_SB, core.io_registers[GB_IO_SB]); + save.io_registers[GB_IO_SC] = core.io_registers[GB_IO_SC]; + save.div_counter = core.io_registers[GB_IO_DIV] << 8; + GB_write_memory(&save, 0xFF00 + GB_IO_TIMA, core.io_registers[GB_IO_TIMA]); + GB_write_memory(&save, 0xFF00 + GB_IO_TMA, core.io_registers[GB_IO_TMA]); + GB_write_memory(&save, 0xFF00 + GB_IO_TAC, core.io_registers[GB_IO_TAC]); + + // APU + GB_write_memory(&save, 0xFF00 + GB_IO_NR52, core.io_registers[GB_IO_NR52]); + for (unsigned i = GB_IO_NR10; i < GB_IO_NR52; i++) { + uint8_t value = core.io_registers[i]; + if (i == GB_IO_NR14 || i == GB_IO_NR24 || i == GB_IO_NR34 || i == GB_IO_NR44) { + value &= ~0x80; + } + GB_write_memory(&save, 0xFF00 + i, value); + } + + for (unsigned i = GB_IO_WAV_START; i <= GB_IO_WAV_END; i++) { + GB_write_memory(&save, 0xFF00 + i, core.io_registers[i]); + } + + // PPU + GB_write_memory(&save, 0xFF00 + GB_IO_LCDC, core.io_registers[GB_IO_LCDC]); + GB_write_memory(&save, 0xFF00 + GB_IO_STAT, core.io_registers[GB_IO_STAT]); + GB_write_memory(&save, 0xFF00 + GB_IO_SCY, core.io_registers[GB_IO_SCY]); + GB_write_memory(&save, 0xFF00 + GB_IO_SCX, core.io_registers[GB_IO_SCX]); + GB_write_memory(&save, 0xFF00 + GB_IO_LYC, core.io_registers[GB_IO_LYC]); + save.io_registers[GB_IO_DMA] = core.io_registers[GB_IO_DMA]; + GB_write_memory(&save, 0xFF00 + GB_IO_BGP, core.io_registers[GB_IO_BGP]); + GB_write_memory(&save, 0xFF00 + GB_IO_OBP0, core.io_registers[GB_IO_OBP0]); + GB_write_memory(&save, 0xFF00 + GB_IO_OBP1, core.io_registers[GB_IO_OBP1]); + GB_write_memory(&save, 0xFF00 + GB_IO_WX, core.io_registers[GB_IO_WX]); + GB_write_memory(&save, 0xFF00 + GB_IO_WY, core.io_registers[GB_IO_WY]); + + // Other registers + GB_write_memory(&save, 0xFF00 + GB_IO_VBK, core.io_registers[GB_IO_VBK]); + GB_write_memory(&save, 0xFF00 + GB_IO_HDMA1, core.io_registers[GB_IO_HDMA1]); + GB_write_memory(&save, 0xFF00 + GB_IO_HDMA2, core.io_registers[GB_IO_HDMA2]); + GB_write_memory(&save, 0xFF00 + GB_IO_HDMA3, core.io_registers[GB_IO_HDMA3]); + GB_write_memory(&save, 0xFF00 + GB_IO_HDMA4, core.io_registers[GB_IO_HDMA4]); + GB_write_memory(&save, 0xFF00 + GB_IO_RP, core.io_registers[GB_IO_RP]); + GB_write_memory(&save, 0xFF00 + GB_IO_BGPI, core.io_registers[GB_IO_BGPI]); + GB_write_memory(&save, 0xFF00 + GB_IO_OBPI, core.io_registers[GB_IO_OBPI]); + GB_write_memory(&save, 0xFF00 + GB_IO_OPRI, core.io_registers[GB_IO_OPRI]); + + // Interrupts + GB_write_memory(&save, 0xFF00 + GB_IO_IF, core.io_registers[GB_IO_IF]); + + /* Required to be compatible with both SameBoy 0.14.x AND BGB */ + if (GB_is_cgb(&save) && !save.cgb_mode && save.cgb_ram_bank == 7) { + save.cgb_ram_bank = 1; + } + + break; + case BE32('NAME'): + if (LE32(block.size) > sizeof(emulator_name) - 1) { + file->seek(file, LE32(block.size), SEEK_CUR); + } + else { + file->read(file, emulator_name, LE32(block.size)); + } + break; + case BE32('INFO'): { + BESS_INFO_t bess_info = {0,}; + if (LE32(block.size) != sizeof(bess_info) - sizeof(block)) goto parse_error; + if (file->read(file, &bess_info.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + const uint8_t *bank = get_header_bank(gb); + if (memcmp(bess_info.title, bank + 0x134, sizeof(bess_info.title))) { + char ascii_title[0x11] = {0,}; + for (unsigned i = 0; i < 0x10; i++) { + if (bess_info.title[i] < 0x20 || bess_info.title[i] > 0x7E) break; + ascii_title[i] = bess_info.title[i]; + } + GB_log(gb, "Save state was made on another ROM: '%s'\n", ascii_title); + } + else if (memcmp(bess_info.checksum, bank + 0x14E, 2)) { + GB_log(gb, "Save state was potentially made on another revision of the same ROM.\n"); + } + break; + } + case BE32('XOAM'): + if (!found_core) goto parse_error; + if (LE32(block.size) != 96) goto parse_error; + file->read(file, save.extra_oam, sizeof(save.extra_oam)); + break; + case BE32('MBC '): + if (!found_core) goto parse_error; + if (LE32(block.size) % 3 != 0) goto parse_error; + if (LE32(block.size) > 0x1000) goto parse_error; + /* Inject some default writes, as some emulators omit them */ + if (gb->cartridge_type->mbc_type == GB_MMM01) { + GB_write_memory(&save, 0x6000, 0x30); + GB_write_memory(&save, 0x4000, 0x70); + } + for (unsigned i = LE32(block.size); i > 0; i -= 3) { + BESS_MBC_pair_t pair; + file->read(file, &pair, sizeof(pair)); + if (LE16(pair.address) >= 0x8000 && LE16(pair.address) < 0xA000) goto parse_error; + if (LE16(pair.address) >= 0xC000) goto parse_error; + GB_write_memory(&save, LE16(pair.address), pair.value); + } + break; + case BE32('RTC '): + if (!found_core) goto parse_error; + BESS_RTC_t bess_rtc; + if (LE32(block.size) != sizeof(bess_rtc) - sizeof(block)) goto parse_error; + if (file->read(file, &bess_rtc.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + if (!gb->cartridge_type->has_rtc || gb->cartridge_type->mbc_type != GB_MBC3) break; + save.rtc_real.seconds = bess_rtc.real.seconds; + save.rtc_real.minutes = bess_rtc.real.minutes; + save.rtc_real.hours = bess_rtc.real.hours; + save.rtc_real.days = bess_rtc.real.days; + save.rtc_real.high = bess_rtc.real.high; + save.rtc_latched.seconds = bess_rtc.latched.seconds; + save.rtc_latched.minutes = bess_rtc.latched.minutes; + save.rtc_latched.hours = bess_rtc.latched.hours; + save.rtc_latched.days = bess_rtc.latched.days; + save.rtc_latched.high = bess_rtc.latched.high; + if (gb->rtc_mode == GB_RTC_MODE_SYNC_TO_HOST) { + save.last_rtc_second = MIN(LE64(bess_rtc.last_rtc_second), time(NULL)); + } + + break; + case BE32('HUC3'): + if (!found_core) goto parse_error; + BESS_HUC3_t bess_huc3; + if (LE32(block.size) != sizeof(bess_huc3) - sizeof(block)) goto parse_error; + if (file->read(file, &bess_huc3.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + if (gb->cartridge_type->mbc_type != GB_HUC3) break; + if (gb->rtc_mode == GB_RTC_MODE_SYNC_TO_HOST) { + save.last_rtc_second = MIN(LE64(bess_huc3.data.last_rtc_second), time(NULL)); + } + save.huc3.minutes = LE16(bess_huc3.data.minutes); + save.huc3.days = LE16(bess_huc3.data.days); + save.huc3.alarm_minutes = LE16(bess_huc3.data.alarm_minutes); + save.huc3.alarm_days = LE16(bess_huc3.data.alarm_days); + save.huc3.alarm_enabled = bess_huc3.data.alarm_enabled; + break; + case BE32('TPP1'): + if (!found_core) goto parse_error; + BESS_TPP1_t bess_tpp1; + if (LE32(block.size) != sizeof(bess_tpp1) - sizeof(block)) goto parse_error; + if (file->read(file, &bess_tpp1.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + if (gb->cartridge_type->mbc_type != GB_TPP1) break; + if (gb->rtc_mode == GB_RTC_MODE_SYNC_TO_HOST) { + save.last_rtc_second = MIN(LE64(bess_tpp1.last_rtc_second), time(NULL)); + } + unrolled for (unsigned i = 4; i--;) { + save.rtc_real.data[i ^ 3] = bess_tpp1.real_rtc_data[i]; + save.rtc_latched.data[i ^ 3] = bess_tpp1.latched_rtc_data[i]; + } + save.tpp1_mr4 = bess_tpp1.mr4; + break; + case BE32('MBC7'): + if (!found_core) goto parse_error; + BESS_MBC7_t bess_mbc7; + if (LE32(block.size) != sizeof(bess_mbc7) - sizeof(block)) goto parse_error; + if (file->read(file, &bess_mbc7.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + if (gb->cartridge_type->mbc_type != GB_MBC7) break; + + save.mbc7.latch_ready = bess_mbc7.latch_ready; + save.mbc7.eeprom_do = bess_mbc7.eeprom_do; + save.mbc7.eeprom_di = bess_mbc7.eeprom_di; + save.mbc7.eeprom_clk = bess_mbc7.eeprom_clk; + save.mbc7.eeprom_cs = bess_mbc7.eeprom_cs; + save.mbc7.eeprom_write_enabled = bess_mbc7.eeprom_write_enabled; + + save.mbc7.argument_bits_left = bess_mbc7.argument_bits_left; + + save.mbc7.eeprom_command = LE16(bess_mbc7.eeprom_command); + save.mbc7.read_bits = LE16(bess_mbc7.read_bits); + + save.mbc7.x_latch = LE16(bess_mbc7.x_latch); + save.mbc7.y_latch = LE16(bess_mbc7.y_latch); + + break; + case BE32('SGB '): + if (!found_core) goto parse_error; + if (!gb->sgb) goto parse_error; + if (LE32(block.size) > sizeof(sgb) - sizeof(block)) { + if (file->read(file, &sgb.header + 1, sizeof(sgb) - sizeof(block)) != sizeof(sgb) - sizeof(block)) goto error; + file->seek(file, LE32(block.size) - (sizeof(sgb) - sizeof(block)), SEEK_CUR); + } + else { + if (file->read(file, &sgb.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + } + found_sgb = true; + break; + case BE32('END '): + if (!found_core) goto parse_error; + if (LE32(block.size) != 0) goto parse_error; + goto done; + default: + file->seek(file, LE32(block.size), SEEK_CUR); + break; + } + } +done: + save.mbc_ram_size = gb->mbc_ram_size; + memcpy(gb, &save, GB_SECTION_OFFSET(unsaved)); + assert(GB_get_save_state_size(gb) == GB_get_save_state_size(&save)); + GB_free(&save); + read_bess_buffer(&core.ram, file, gb->ram, gb->ram_size); + read_bess_buffer(&core.vram, file, gb->vram, gb->vram_size); + read_bess_buffer(&core.mbc_ram, file, gb->mbc_ram, gb->mbc_ram_size); + read_bess_buffer(&core.oam, file, gb->oam, sizeof(gb->oam)); + read_bess_buffer(&core.hram, file, gb->hram, sizeof(gb->hram)); + read_bess_buffer(&core.background_palettes, file, gb->background_palettes_data, sizeof(gb->background_palettes_data)); + read_bess_buffer(&core.object_palettes, file, gb->object_palettes_data, sizeof(gb->object_palettes_data)); + if (gb->sgb) { + memset(gb->sgb, 0, sizeof(*gb->sgb)); + GB_sgb_load_default_data(gb); + if (gb->boot_rom_finished) { + gb->sgb->intro_animation = GB_SGB_INTRO_ANIMATION_LENGTH; + if (!found_sgb) { + gb->sgb->disable_commands = true; + } + else { + read_bess_buffer(&sgb.border_tiles, file, gb->sgb->border.tiles, sizeof(gb->sgb->border.tiles)); + read_bess_buffer(&sgb.border_tilemap, file, (void *)gb->sgb->border.map, sizeof(gb->sgb->border.map)); + read_bess_buffer(&sgb.border_palettes, file, (void *)gb->sgb->border.palette, sizeof(gb->sgb->border.palette)); + + read_bess_buffer(&sgb.active_palettes, file, (void *)gb->sgb->effective_palettes, sizeof(gb->sgb->effective_palettes)); + read_bess_buffer(&sgb.ram_palettes, file, (void *)gb->sgb->ram_palettes, sizeof(gb->sgb->ram_palettes)); + read_bess_buffer(&sgb.attribute_map, file, (void *)gb->sgb->attribute_map, sizeof(gb->sgb->attribute_map)); + read_bess_buffer(&sgb.attribute_files, file, (void *)gb->sgb->attribute_files, sizeof(gb->sgb->attribute_files)); + + gb->sgb->effective_palettes[12] = gb->sgb->effective_palettes[8] = + gb->sgb->effective_palettes[4] = gb->sgb->effective_palettes[0]; + + gb->sgb->player_count = sgb.multiplayer_state >> 4; + gb->sgb->current_player = sgb.multiplayer_state & 0xF; + if (gb->sgb->player_count > 4 || gb->sgb->player_count == 3 || gb->sgb->player_count == 0) { + gb->sgb->player_count = 1; + gb->sgb->current_player = 0; + } + } + } + else { + // Effectively reset if didn't finish the boot ROM + gb->pc = 0; + } + } + if (emulator_name[0]) { + GB_log(gb, "Save state imported from %s.\n", emulator_name); + } + else { + GB_log(gb, "Save state imported from another emulator.\n"); // SameBoy always contains a NAME block + } + for (unsigned i = 0; i < 32; i++) { + GB_palette_changed(gb, false, i * 2); + GB_palette_changed(gb, true, i * 2); + } + return 0; +parse_error: + errno = -1; +error: + if (emulator_name[0]) { + GB_log(gb, "Attempted to import a save state from %s, but the save state is invalid.\n", emulator_name); + } + else { + GB_log(gb, "Attempted to import a save state from a different emulator or incompatible version, but the save state is invalid.\n"); + } + GB_free(&save); + sanitize_state(gb); + return errno; +} + +static int load_state_internal(GB_gameboy_t *gb, virtual_file_t *file) +{ + GB_gameboy_t save; + + /* Every unread value should be kept the same. */ + memcpy(&save, gb, sizeof(save)); + /* ...Except ram size, we use it to detect old saves with incorrect ram sizes */ + save.ram_size = 0; + + bool fix_broken_windows_saves = false; + + if (file->read(file, GB_GET_SECTION(&save, header), GB_SECTION_SIZE(header)) != GB_SECTION_SIZE(header)) return errno; + if (save.magic == 0) { + /* Potentially legacy, broken Windows save state*/ + + file->seek(file, 4, SEEK_SET); + if (file->read(file, GB_GET_SECTION(&save, header), GB_SECTION_SIZE(header)) != GB_SECTION_SIZE(header)) return errno; + fix_broken_windows_saves = true; + } + if (gb->magic != save.magic) { + return load_bess_save(gb, file, false); + } +#define READ_SECTION(gb, file, section) read_section(file, GB_GET_SECTION(gb, section), GB_SECTION_SIZE(section), fix_broken_windows_saves) + if (!READ_SECTION(&save, file, core_state)) return errno ?: EIO; + if (!READ_SECTION(&save, file, dma )) return errno ?: EIO; + if (!READ_SECTION(&save, file, mbc )) return errno ?: EIO; + if (!READ_SECTION(&save, file, hram )) return errno ?: EIO; + if (!READ_SECTION(&save, file, timing )) return errno ?: EIO; + if (!READ_SECTION(&save, file, apu )) return errno ?: EIO; + if (!READ_SECTION(&save, file, rtc )) return errno ?: EIO; + if (!READ_SECTION(&save, file, video )) return errno ?: EIO; +#undef READ_SECTION + + + bool attempt_bess = false; + if (!verify_and_update_state_compatibility(gb, &save, &attempt_bess)) { + if (attempt_bess) { + return load_bess_save(gb, file, true); + } + return errno; + } + + if (GB_is_hle_sgb(gb)) { + if (!read_section(file, gb->sgb, sizeof(*gb->sgb), false)) return errno ?: EIO; + } + + memset(gb->mbc_ram + save.mbc_ram_size, 0xFF, gb->mbc_ram_size - save.mbc_ram_size); + if (file->read(file, gb->mbc_ram, save.mbc_ram_size) != save.mbc_ram_size) { + return errno ?: EIO; + } + + if (file->read(file, gb->ram, gb->ram_size) != gb->ram_size) { + return errno ?: EIO; + } + + /* Fix for 0.11 save states that allocate twice the amount of RAM in CGB instances */ + file->seek(file, save.ram_size - gb->ram_size, SEEK_CUR); + + if (file->read(file, gb->vram, gb->vram_size) != gb->vram_size) { + return errno ?: EIO; + } + + size_t orig_ram_size = gb->ram_size; + memcpy(gb, &save, sizeof(save)); + gb->ram_size = orig_ram_size; + + sanitize_state(gb); + + return 0; +} + +int GB_load_state(GB_gameboy_t *gb, const char *path) +{ + FILE *f = fopen(path, "rb"); + if (!f) { + GB_log(gb, "Could not open save state: %s.\n", strerror(errno)); + return errno; + } + virtual_file_t file = { + .read = file_read, + .seek = file_seek, + .tell = file_tell, + .file = f, + }; + int ret = load_state_internal(gb, &file); + fclose(f); + return ret; +} + +int GB_load_state_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t length) +{ + virtual_file_t file = { + .read = buffer_read, + .seek = buffer_seek, + .tell = buffer_tell, + .buffer = (uint8_t *)buffer, + .position = 0, + .size = length, + }; + + return load_state_internal(gb, &file); +} + + +bool GB_is_save_state(const char *path) +{ + bool ret = false; + FILE *f = fopen(path, "rb"); + if (!f) return false; + uint32_t magic = 0; + fread(&magic, sizeof(magic), 1, f); + if (magic == state_magic()) { + ret = true; + goto exit; + } + + // Legacy corrupted Windows save state + if (magic == 0) { + fread(&magic, sizeof(magic), 1, f); + if (magic == state_magic()) { + ret = true; + goto exit; + } + } + + fseek(f, -sizeof(magic), SEEK_END); + fread(&magic, sizeof(magic), 1, f); + if (magic == BE32('BESS')) { + ret = true; + } + +exit: + fclose(f); + return ret; +} diff --git a/thirdparty/SameBoy-old/Core/save_state.h b/thirdparty/SameBoy-old/Core/save_state.h new file mode 100644 index 000000000..acb6b89bd --- /dev/null +++ b/thirdparty/SameBoy-old/Core/save_state.h @@ -0,0 +1,48 @@ +/* Macros to make the GB_gameboy_t struct more future compatible when state saving */ +#ifndef save_state_h +#define save_state_h +#include + +#define GB_PADDING(type, old_usage) type old_usage##__do_not_use + +#ifdef __cplusplus +/* For bsnes integration. C++ code does not need section information, and throws a fit over certain types such + as anonymous enums inside unions */ +#if __clang__ +#define GB_SECTION(name, ...) __attribute__ ((aligned (8))) __VA_ARGS__ +#else +// GCC's handling of attributes is so awfully bad, that it is alone a good enough reason to never use that compiler +#define GB_SECTION(name, ...) _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wpedantic\"") alignas(8) char _align_##name[0]; __VA_ARGS__ _Pragma("GCC diagnostic pop") +#endif +#else +#define GB_SECTION(name, ...) union __attribute__ ((aligned (8))) {uint8_t name##_section_start; struct {__VA_ARGS__};}; uint8_t name##_section_end[0]; +#define GB_SECTION_OFFSET(name) (offsetof(GB_gameboy_t, name##_section_start)) +#define GB_SECTION_SIZE(name) (offsetof(GB_gameboy_t, name##_section_end) - offsetof(GB_gameboy_t, name##_section_start)) +#define GB_GET_SECTION(gb, name) ((void*)&((gb)->name##_section_start)) +#endif + +#define GB_aligned_double __attribute__ ((aligned (8))) double + + +/* Public calls related to save states */ +int GB_save_state(GB_gameboy_t *gb, const char *path); +size_t GB_get_save_state_size(GB_gameboy_t *gb); +/* Assumes buffer is big enough to contain the save state. Use with GB_get_save_state_size(). */ +void GB_save_state_to_buffer(GB_gameboy_t *gb, uint8_t *buffer); + +int GB_load_state(GB_gameboy_t *gb, const char *path); +int GB_load_state_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t length); +bool GB_is_save_state(const char *path); +#ifdef GB_INTERNAL +static inline uint32_t state_magic(void) +{ + if (sizeof(bool) == 1) return 'SAME'; + return 'S4ME'; +} + +/* For internal in-memory save states (rewind, debugger) that do not need BESS */ +internal size_t GB_get_save_state_size_no_bess(GB_gameboy_t *gb); +internal void GB_save_state_to_buffer_no_bess(GB_gameboy_t *gb, uint8_t *buffer); +#endif + +#endif /* save_state_h */ diff --git a/thirdparty/SameBoy-old/Core/sgb.c b/thirdparty/SameBoy-old/Core/sgb.c new file mode 100644 index 000000000..891a27dd9 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/sgb.c @@ -0,0 +1,910 @@ +#include "gb.h" +#include "random.h" +#include +#include + +#ifndef M_PI + #define M_PI 3.14159265358979323846 +#endif + +enum { + PAL01 = 0x00, + PAL23 = 0x01, + PAL03 = 0x02, + PAL12 = 0x03, + ATTR_BLK = 0x04, + ATTR_LIN = 0x05, + ATTR_DIV = 0x06, + ATTR_CHR = 0x07, + PAL_SET = 0x0A, + PAL_TRN = 0x0B, + DATA_SND = 0x0F, + MLT_REQ = 0x11, + CHR_TRN = 0x13, + PCT_TRN = 0x14, + ATTR_TRN = 0x15, + ATTR_SET = 0x16, + MASK_EN = 0x17, +}; + +typedef enum { + MASK_DISABLED, + MASK_FREEZE, + MASK_BLACK, + MASK_COLOR_0, +} mask_mode_t; + +typedef enum { + TRANSFER_LOW_TILES, + TRANSFER_HIGH_TILES, + TRANSFER_BORDER_DATA, + TRANSFER_PALETTES, + TRANSFER_ATTRIBUTES, +} transfer_dest_t; + +#define SGB_PACKET_SIZE 16 +static inline void pal_command(GB_gameboy_t *gb, unsigned first, unsigned second) +{ + gb->sgb->effective_palettes[0] = gb->sgb->effective_palettes[4] = + gb->sgb->effective_palettes[8] = gb->sgb->effective_palettes[12] = + *(uint16_t *)&gb->sgb->command[1]; + + for (unsigned i = 0; i < 3; i++) { + gb->sgb->effective_palettes[first * 4 + i + 1] = *(uint16_t *)&gb->sgb->command[3 + i * 2]; + } + + for (unsigned i = 0; i < 3; i++) { + gb->sgb->effective_palettes[second * 4 + i + 1] = *(uint16_t *)&gb->sgb->command[9 + i * 2]; + } +} + +static inline void load_attribute_file(GB_gameboy_t *gb, unsigned file_index) +{ + if (file_index > 0x2C) return; + uint8_t *output = gb->sgb->attribute_map; + for (unsigned i = 0; i < 90; i++) { + uint8_t byte = gb->sgb->attribute_files[file_index * 90 + i]; + for (unsigned j = 4; j--;) { + *(output++) = byte >> 6; + byte <<= 2; + } + } +} + +static const uint16_t built_in_palettes[] = +{ + 0x67BF, 0x265B, 0x10B5, 0x2866, + 0x637B, 0x3AD9, 0x0956, 0x0000, + 0x7F1F, 0x2A7D, 0x30F3, 0x4CE7, + 0x57FF, 0x2618, 0x001F, 0x006A, + 0x5B7F, 0x3F0F, 0x222D, 0x10EB, + 0x7FBB, 0x2A3C, 0x0015, 0x0900, + 0x2800, 0x7680, 0x01EF, 0x2FFF, + 0x73BF, 0x46FF, 0x0110, 0x0066, + 0x533E, 0x2638, 0x01E5, 0x0000, + 0x7FFF, 0x2BBF, 0x00DF, 0x2C0A, + 0x7F1F, 0x463D, 0x74CF, 0x4CA5, + 0x53FF, 0x03E0, 0x00DF, 0x2800, + 0x433F, 0x72D2, 0x3045, 0x0822, + 0x7FFA, 0x2A5F, 0x0014, 0x0003, + 0x1EED, 0x215C, 0x42FC, 0x0060, + 0x7FFF, 0x5EF7, 0x39CE, 0x0000, + 0x4F5F, 0x630E, 0x159F, 0x3126, + 0x637B, 0x121C, 0x0140, 0x0840, + 0x66BC, 0x3FFF, 0x7EE0, 0x2C84, + 0x5FFE, 0x3EBC, 0x0321, 0x0000, + 0x63FF, 0x36DC, 0x11F6, 0x392A, + 0x65EF, 0x7DBF, 0x035F, 0x2108, + 0x2B6C, 0x7FFF, 0x1CD9, 0x0007, + 0x53FC, 0x1F2F, 0x0E29, 0x0061, + 0x36BE, 0x7EAF, 0x681A, 0x3C00, + 0x7BBE, 0x329D, 0x1DE8, 0x0423, + 0x739F, 0x6A9B, 0x7293, 0x0001, + 0x5FFF, 0x6732, 0x3DA9, 0x2481, + 0x577F, 0x3EBC, 0x456F, 0x1880, + 0x6B57, 0x6E1B, 0x5010, 0x0007, + 0x0F96, 0x2C97, 0x0045, 0x3200, + 0x67FF, 0x2F17, 0x2230, 0x1548, +}; + +static const struct { + char name[16]; + unsigned palette_index; +} palette_assignments[] = +{ + {"ZELDA", 5}, + {"SUPER MARIOLAND", 6}, + {"MARIOLAND2", 0x14}, + {"SUPERMARIOLAND3", 2}, + {"KIRBY DREAM LAND", 0xB}, + {"HOSHINOKA-BI", 0xB}, + {"KIRBY'S PINBALL", 3}, + {"YOSSY NO TAMAGO", 0xC}, + {"MARIO & YOSHI", 0xC}, + {"YOSSY NO COOKIE", 4}, + {"YOSHI'S COOKIE", 4}, + {"DR.MARIO", 0x12}, + {"TETRIS", 0x11}, + {"YAKUMAN", 0x13}, + {"METROID2", 0x1F}, + {"KAERUNOTAMENI", 9}, + {"GOLF", 0x18}, + {"ALLEY WAY", 0x16}, + {"BASEBALL", 0xF}, + {"TENNIS", 0x17}, + {"F1RACE", 0x1E}, + {"KID ICARUS", 0xE}, + {"QIX", 0x19}, + {"SOLARSTRIKER", 7}, + {"X", 0x1C}, + {"GBWARS", 0x15}, +}; + +static void command_ready(GB_gameboy_t *gb) +{ + /* SGB header commands are used to send the contents of the header to the SNES CPU. + A header command looks like this: + Command ID: 0b1111xxx1, where xxx is the packet index. (e.g. F1 for [0x104, 0x112), F3 for [0x112, 0x120)) + Checksum: Simple one byte sum for the following content bytes + 0xE content bytes. The last command, FB, is padded with zeros, so information past the header is not sent. */ + + if ((gb->sgb->command[0] & 0xF1) == 0xF1) { + if (gb->boot_rom_finished) return; + + uint8_t checksum = 0; + for (unsigned i = 2; i < 0x10; i++) { + checksum += gb->sgb->command[i]; + } + if (checksum != gb->sgb->command[1]) { + GB_log(gb, "Failed checksum for SGB header command, disabling SGB features\n"); + gb->sgb->disable_commands = true; + return; + } + unsigned index = (gb->sgb->command[0] >> 1) & 7; + if (index > 5) { + return; + } + memcpy(&gb->sgb->received_header[index * 14], &gb->sgb->command[2], 14); + if (gb->sgb->command[0] == 0xFB) { + if (gb->sgb->received_header[0x42] != 3 || gb->sgb->received_header[0x47] != 0x33) { + gb->sgb->disable_commands = true; + for (unsigned i = 0; i < sizeof(palette_assignments) / sizeof(palette_assignments[0]); i++) { + if (memcmp(palette_assignments[i].name, &gb->sgb->received_header[0x30], sizeof(palette_assignments[i].name)) == 0) { + gb->sgb->effective_palettes[0] = LE16(built_in_palettes[palette_assignments[i].palette_index * 4 - 4]); + gb->sgb->effective_palettes[1] = LE16(built_in_palettes[palette_assignments[i].palette_index * 4 + 1 - 4]); + gb->sgb->effective_palettes[2] = LE16(built_in_palettes[palette_assignments[i].palette_index * 4 + 2 - 4]); + gb->sgb->effective_palettes[3] = LE16(built_in_palettes[palette_assignments[i].palette_index * 4 + 3 - 4]); + break; + } + } + } + } + return; + } + + /* Ignore malformed commands (0 length)*/ + if ((gb->sgb->command[0] & 7) == 0) return; + + switch (gb->sgb->command[0] >> 3) { + case PAL01: + pal_command(gb, 0, 1); + break; + case PAL23: + pal_command(gb, 2, 3); + break; + case PAL03: + pal_command(gb, 0, 3); + break; + case PAL12: + pal_command(gb, 1, 2); + break; + case ATTR_BLK: { + struct { + uint8_t count; + struct { + uint8_t control; + uint8_t palettes; + uint8_t left, top, right, bottom; + } data[]; + } *command = (void *)(gb->sgb->command + 1); + if (command->count > 0x12) return; + + for (unsigned i = 0; i < command->count; i++) { + bool inside = command->data[i].control & 1; + bool middle = command->data[i].control & 2; + bool outside = command->data[i].control & 4; + uint8_t inside_palette = command->data[i].palettes & 0x3; + uint8_t middle_palette = (command->data[i].palettes >> 2) & 0x3; + uint8_t outside_palette = (command->data[i].palettes >> 4) & 0x3; + + if (inside && !middle && !outside) { + middle = true; + middle_palette = inside_palette; + } + else if (outside && !middle && !inside) { + middle = true; + middle_palette = outside_palette; + } + + command->data[i].left &= 0x1F; + command->data[i].top &= 0x1F; + command->data[i].right &= 0x1F; + command->data[i].bottom &= 0x1F; + + for (unsigned y = 0; y < 18; y++) { + for (unsigned x = 0; x < 20; x++) { + if (x < command->data[i].left || x > command->data[i].right || + y < command->data[i].top || y > command->data[i].bottom) { + if (outside) { + gb->sgb->attribute_map[x + 20 * y] = outside_palette; + } + } + else if (x > command->data[i].left && x < command->data[i].right && + y > command->data[i].top && y < command->data[i].bottom) { + if (inside) { + gb->sgb->attribute_map[x + 20 * y] = inside_palette; + } + } + else if (middle) { + gb->sgb->attribute_map[x + 20 * y] = middle_palette; + } + } + } + } + break; + } + case ATTR_CHR: { + struct __attribute__((packed)) { + uint8_t x, y; + uint16_t length; + uint8_t direction; + uint8_t data[]; + } *command = (void *)(gb->sgb->command + 1); + + uint16_t count = command->length; + count = LE16(count); + uint8_t x = command->x; + uint8_t y = command->y; + if (x >= 20 || y >= 18) { + /* TODO: Verify with the SFC BIOS */ + break; + } + + for (unsigned i = 0; i < count; i++) { + uint8_t palette = (command->data[i / 4] >> (((~i) & 3) << 1)) & 3; + gb->sgb->attribute_map[x + 20 * y] = palette; + if (command->direction) { + y++; + if (y == 18) { + x++; + y = 0; + if (x == 20) { + break; + } + } + } + else { + x++; + if (x == 20) { + y++; + x = 0; + if (y == 18) { + break; + } + } + } + } + + break; + } + case ATTR_LIN: { + struct { + uint8_t count; + uint8_t data[]; + } *command = (void *)(gb->sgb->command + 1); + if (command->count > sizeof(gb->sgb->command) - 2) return; + + for (unsigned i = 0; i < command->count; i++) { + bool horizontal = command->data[i] & 0x80; + uint8_t palette = (command->data[i] >> 5) & 0x3; + uint8_t line = (command->data[i]) & 0x1F; + + if (horizontal) { + if (line > 18) continue; + for (unsigned x = 0; x < 20; x++) { + gb->sgb->attribute_map[x + 20 * line] = palette; + } + } + else { + if (line > 20) continue; + for (unsigned y = 0; y < 18; y++) { + gb->sgb->attribute_map[line + 20 * y] = palette; + } + } + } + break; + } + case ATTR_DIV: { + uint8_t high_palette = gb->sgb->command[1] & 3; + uint8_t low_palette = (gb->sgb->command[1] >> 2) & 3; + uint8_t middle_palette = (gb->sgb->command[1] >> 4) & 3; + bool horizontal = gb->sgb->command[1] & 0x40; + uint8_t line = gb->sgb->command[2] & 0x1F; + + for (unsigned y = 0; y < 18; y++) { + for (unsigned x = 0; x < 20; x++) { + if ((horizontal? y : x) < line) { + gb->sgb->attribute_map[x + 20 * y] = low_palette; + } + else if ((horizontal? y : x) == line) { + gb->sgb->attribute_map[x + 20 * y] = middle_palette; + } + else { + gb->sgb->attribute_map[x + 20 * y] = high_palette; + } + } + } + + break; + } + case PAL_SET: + memcpy(&gb->sgb->effective_palettes[0], + &gb->sgb->ram_palettes[4 * (gb->sgb->command[1] + (gb->sgb->command[2] & 1) * 0x100)], + 8); + memcpy(&gb->sgb->effective_palettes[4], + &gb->sgb->ram_palettes[4 * (gb->sgb->command[3] + (gb->sgb->command[4] & 1) * 0x100)], + 8); + memcpy(&gb->sgb->effective_palettes[8], + &gb->sgb->ram_palettes[4 * (gb->sgb->command[5] + (gb->sgb->command[6] & 1) * 0x100)], + 8); + memcpy(&gb->sgb->effective_palettes[12], + &gb->sgb->ram_palettes[4 * (gb->sgb->command[7] + (gb->sgb->command[8] & 1) * 0x100)], + 8); + + gb->sgb->effective_palettes[12] = gb->sgb->effective_palettes[8] = + gb->sgb->effective_palettes[4] = gb->sgb->effective_palettes[0]; + + if (gb->sgb->command[9] & 0x80) { + load_attribute_file(gb, gb->sgb->command[9] & 0x3F); + } + + if (gb->sgb->command[9] & 0x40) { + gb->sgb->mask_mode = MASK_DISABLED; + } + break; + case PAL_TRN: + gb->sgb->vram_transfer_countdown = 3; + gb->sgb->transfer_dest = TRANSFER_PALETTES; + break; + case DATA_SND: + // Not supported, but used by almost all SGB games for hot patching, so let's mute the warning for this + break; + case MLT_REQ: + gb->sgb->player_count = (gb->sgb->command[1] & 3) + 1; /* Todo: When breaking save state comaptibility, + fix this to be 0 based. */ + if (gb->sgb->player_count == 3) { + gb->sgb->player_count++; + } + gb->sgb->current_player &= (gb->sgb->player_count - 1); + break; + case CHR_TRN: + gb->sgb->vram_transfer_countdown = 3; + gb->sgb->transfer_dest = (gb->sgb->command[1] & 1)? TRANSFER_HIGH_TILES : TRANSFER_LOW_TILES; + break; + case PCT_TRN: + gb->sgb->vram_transfer_countdown = 3; + gb->sgb->transfer_dest = TRANSFER_BORDER_DATA; + break; + case ATTR_TRN: + gb->sgb->vram_transfer_countdown = 3; + gb->sgb->transfer_dest = TRANSFER_ATTRIBUTES; + break; + case ATTR_SET: + load_attribute_file(gb, gb->sgb->command[1] & 0x3F); + + if (gb->sgb->command[1] & 0x40) { + gb->sgb->mask_mode = MASK_DISABLED; + } + break; + case MASK_EN: + gb->sgb->mask_mode = gb->sgb->command[1] & 3; + break; + default: + if ((gb->sgb->command[0] >> 3) == 8 && + (gb->sgb->command[1] & ~0x80) == 0 && + (gb->sgb->command[2] & ~0x80) == 0) { + /* Mute/dummy sound commands, ignore this command as it's used by many games at startup */ + break; + } + GB_log(gb, "Unimplemented SGB command %x: ", gb->sgb->command[0] >> 3); + for (unsigned i = 0; i < gb->sgb->command_write_index / 8; i++) { + GB_log(gb, "%02x ", gb->sgb->command[i]); + } + GB_log(gb, "\n"); + } +} + +void GB_sgb_write(GB_gameboy_t *gb, uint8_t value) +{ + if (!GB_is_sgb(gb)) return; + if (!GB_is_hle_sgb(gb)) { + /* Notify via callback */ + return; + } + if (gb->sgb->disable_commands) return; + + uint16_t command_size = (gb->sgb->command[0] & 7 ?: 1) * SGB_PACKET_SIZE * 8; + if ((gb->sgb->command[0] & 0xF1) == 0xF1) { + command_size = SGB_PACKET_SIZE * 8; + } + + if ((value & 0x20) != 0 && (gb->io_registers[GB_IO_JOYP] & 0x20) == 0) { + if ((gb->sgb->player_count & 1) == 0) { + gb->sgb->current_player++; + gb->sgb->current_player &= (gb->sgb->player_count - 1); + } + } + + switch ((value >> 4) & 3) { + case 3: + gb->sgb->ready_for_pulse = true; + break; + + case 2: // Zero + if (!gb->sgb->ready_for_pulse || !gb->sgb->ready_for_write) return; + if (gb->sgb->ready_for_stop) { + if (gb->sgb->command_write_index == command_size) { + command_ready(gb); + gb->sgb->command_write_index = 0; + memset(gb->sgb->command, 0, sizeof(gb->sgb->command)); + } + gb->sgb->ready_for_pulse = false; + gb->sgb->ready_for_write = false; + gb->sgb->ready_for_stop = false; + } + else { + if (gb->sgb->command_write_index < sizeof(gb->sgb->command) * 8) { + gb->sgb->command_write_index++; + gb->sgb->ready_for_pulse = false; + if (((gb->sgb->command_write_index) & (SGB_PACKET_SIZE * 8 - 1)) == 0) { + gb->sgb->ready_for_stop = true; + } + } + } + break; + case 1: // One + if (!gb->sgb->ready_for_pulse || !gb->sgb->ready_for_write) return; + if (gb->sgb->ready_for_stop) { + GB_log(gb, "Corrupt SGB command.\n"); + gb->sgb->ready_for_pulse = false; + gb->sgb->ready_for_write = false; + gb->sgb->command_write_index = 0; + memset(gb->sgb->command, 0, sizeof(gb->sgb->command)); + } + else { + if (gb->sgb->command_write_index < sizeof(gb->sgb->command) * 8) { + gb->sgb->command[gb->sgb->command_write_index / 8] |= 1 << (gb->sgb->command_write_index & 7); + gb->sgb->command_write_index++; + gb->sgb->ready_for_pulse = false; + if (((gb->sgb->command_write_index) & (SGB_PACKET_SIZE * 8 - 1)) == 0) { + gb->sgb->ready_for_stop = true; + } + } + } + break; + + case 0: + if (!gb->sgb->ready_for_pulse) return; + gb->sgb->ready_for_write = true; + gb->sgb->ready_for_pulse = false; + if (((gb->sgb->command_write_index) & (SGB_PACKET_SIZE * 8 - 1)) != 0 || + gb->sgb->command_write_index == 0 || + gb->sgb->ready_for_stop) { + gb->sgb->command_write_index = 0; + memset(gb->sgb->command, 0, sizeof(gb->sgb->command)); + gb->sgb->ready_for_stop = false; + } + break; + + default: + break; + } +} + +static uint32_t convert_rgb15(GB_gameboy_t *gb, uint16_t color) +{ + return GB_convert_rgb15(gb, color, false); +} + +static uint32_t convert_rgb15_with_fade(GB_gameboy_t *gb, uint16_t color, uint8_t fade) +{ + uint8_t r = ((color) & 0x1F) - fade; + uint8_t g = ((color >> 5) & 0x1F) - fade; + uint8_t b = ((color >> 10) & 0x1F) - fade; + + if (r >= 0x20) r = 0; + if (g >= 0x20) g = 0; + if (b >= 0x20) b = 0; + + color = r | (g << 5) | (b << 10); + + return GB_convert_rgb15(gb, color, false); +} + +static void render_boot_animation (GB_gameboy_t *gb) +{ +#include "graphics/sgb_animation_logo.inc" + uint32_t *output = gb->screen; + if (gb->border_mode != GB_BORDER_NEVER) { + output += 48 + 40 * 256; + } + uint8_t *input = animation_logo; + unsigned fade_blue = 0; + unsigned fade_red = 0; + if (gb->sgb->intro_animation < 80 - 32) { + fade_blue = 32; + } + else if (gb->sgb->intro_animation < 80) { + fade_blue = 80 - gb->sgb->intro_animation; + } + else if (gb->sgb->intro_animation > GB_SGB_INTRO_ANIMATION_LENGTH - 32) { + fade_red = fade_blue = gb->sgb->intro_animation - GB_SGB_INTRO_ANIMATION_LENGTH + 32; + } + uint32_t colors[] = { + convert_rgb15(gb, 0), + convert_rgb15_with_fade(gb, 0x14A5, fade_blue), + convert_rgb15_with_fade(gb, 0x54E0, fade_blue), + convert_rgb15_with_fade(gb, 0x0019, fade_red), + convert_rgb15(gb, 0x0011), + convert_rgb15(gb, 0x0009), + }; + unsigned y_min = (144 - animation_logo_height) / 2; + unsigned y_max = y_min + animation_logo_height; + for (unsigned y = 0; y < 144; y++) { + for (unsigned x = 0; x < 160; x++) { + if (y < y_min || y >= y_max) { + *(output++) = colors[0]; + } + else { + uint8_t color = *input; + if (color >= 3) { + if (color == gb->sgb->intro_animation / 2 - 3) { + color = 5; + } + else if (color == gb->sgb->intro_animation / 2 - 4) { + color = 4; + } + else if (color < gb->sgb->intro_animation / 2 - 4) { + color = 3; + } + else { + color = 0; + } + } + *(output++) = colors[color]; + input++; + } + } + if (gb->border_mode != GB_BORDER_NEVER) { + output += 256 - 160; + } + } +} + +static void render_jingle(GB_gameboy_t *gb, size_t count); +void GB_sgb_render(GB_gameboy_t *gb) +{ + if (gb->apu_output.sample_rate) { + render_jingle(gb, gb->apu_output.sample_rate / GB_get_usual_frame_rate(gb)); + } + + if (gb->sgb->intro_animation < GB_SGB_INTRO_ANIMATION_LENGTH) gb->sgb->intro_animation++; + + if (gb->sgb->vram_transfer_countdown) { + if (--gb->sgb->vram_transfer_countdown == 0) { + unsigned size = 0; + uint16_t *data = NULL; + + switch (gb->sgb->transfer_dest) { + case TRANSFER_LOW_TILES: + size = 0x100; + data = (uint16_t *)gb->sgb->pending_border.tiles; + break; + case TRANSFER_HIGH_TILES: + size = 0x100; + data = (uint16_t *)gb->sgb->pending_border.tiles + 0x800; + break; + case TRANSFER_PALETTES: + size = 0x100; + data = gb->sgb->ram_palettes; + break; + case TRANSFER_BORDER_DATA: + size = 0x88; + data = gb->sgb->pending_border.raw_data; + break; + case TRANSFER_ATTRIBUTES: + size = 0xFE; + data = (uint16_t *)gb->sgb->attribute_files; + break; + default: + return; // Corrupt state? + } + + for (unsigned tile = 0; tile < size; tile++) { + unsigned tile_x = (tile % 20) * 8; + unsigned tile_y = (tile / 20) * 8; + for (unsigned y = 0; y < 0x8; y++) { + static const uint16_t pixel_to_bits[4] = {0x0000, 0x0080, 0x8000, 0x8080}; + *data = 0; + for (unsigned x = 0; x < 8; x++) { + *data |= pixel_to_bits[gb->sgb->screen_buffer[(tile_x + x) + (tile_y + y) * 160] & 3] >> x; + } + *data = LE16(*data); + data++; + } + } + if (gb->sgb->transfer_dest == TRANSFER_BORDER_DATA) { + gb->sgb->border_animation = 105; // Measured on an SGB2, but might be off by ±2 + } + } + } + + if (!gb->screen || !gb->rgb_encode_callback || gb->disable_rendering) { + if (gb->sgb->border_animation > 32) { + gb->sgb->border_animation--; + } + else if (gb->sgb->border_animation != 0) { + gb->sgb->border_animation--; + } + if (gb->sgb->border_animation == 32) { + memcpy(&gb->sgb->border, &gb->sgb->pending_border, sizeof(gb->sgb->border)); + } + return; + } + + uint32_t colors[4 * 4]; + for (unsigned i = 0; i < 4 * 4; i++) { + colors[i] = convert_rgb15(gb, LE16(gb->sgb->effective_palettes[i])); + } + + if (gb->sgb->mask_mode != MASK_FREEZE) { + memcpy(gb->sgb->effective_screen_buffer, + gb->sgb->screen_buffer, + sizeof(gb->sgb->effective_screen_buffer)); + } + + if (gb->sgb->intro_animation < GB_SGB_INTRO_ANIMATION_LENGTH) { + render_boot_animation(gb); + } + else { + uint32_t *output = gb->screen; + if (gb->border_mode != GB_BORDER_NEVER) { + output += 48 + 40 * 256; + } + uint8_t *input = gb->sgb->effective_screen_buffer; + switch ((mask_mode_t) gb->sgb->mask_mode) { + case MASK_DISABLED: + case MASK_FREEZE: { + for (unsigned y = 0; y < 144; y++) { + for (unsigned x = 0; x < 160; x++) { + uint8_t palette = gb->sgb->attribute_map[x / 8 + y / 8 * 20] & 3; + *(output++) = colors[(*(input++) & 3) + palette * 4]; + } + if (gb->border_mode != GB_BORDER_NEVER) { + output += 256 - 160; + } + } + break; + } + case MASK_BLACK: + { + uint32_t black = convert_rgb15(gb, 0); + for (unsigned y = 0; y < 144; y++) { + for (unsigned x = 0; x < 160; x++) { + *(output++) = black; + } + if (gb->border_mode != GB_BORDER_NEVER) { + output += 256 - 160; + } + } + break; + } + case MASK_COLOR_0: + { + for (unsigned y = 0; y < 144; y++) { + for (unsigned x = 0; x < 160; x++) { + *(output++) = colors[0]; + } + if (gb->border_mode != GB_BORDER_NEVER) { + output += 256 - 160; + } + } + break; + } + } + } + + uint32_t border_colors[16 * 4]; + if (gb->sgb->border_animation == 0 || gb->sgb->border_animation > 64 || gb->sgb->intro_animation < GB_SGB_INTRO_ANIMATION_LENGTH) { + if (gb->sgb->border_animation != 0) { + gb->sgb->border_animation--; + } + for (unsigned i = 0; i < 16 * 4; i++) { + border_colors[i] = convert_rgb15(gb, LE16(gb->sgb->border.palette[i])); + } + } + else if (gb->sgb->border_animation > 32) { + gb->sgb->border_animation--; + for (unsigned i = 0; i < 16 * 4; i++) { + border_colors[i] = convert_rgb15_with_fade(gb, LE16(gb->sgb->border.palette[i]), 64 - gb->sgb->border_animation); + } + } + else { + gb->sgb->border_animation--; + for (unsigned i = 0; i < 16 * 4; i++) { + border_colors[i] = convert_rgb15_with_fade(gb, LE16(gb->sgb->border.palette[i]), gb->sgb->border_animation); + } + } + + + if (gb->sgb->border_animation == 32) { + memcpy(&gb->sgb->border, &gb->sgb->pending_border, sizeof(gb->sgb->border)); + } + + for (unsigned tile_y = 0; tile_y < 28; tile_y++) { + for (unsigned tile_x = 0; tile_x < 32; tile_x++) { + bool gb_area = false; + if (tile_x >= 6 && tile_x < 26 && tile_y >= 5 && tile_y < 23) { + gb_area = true; + } + else if (gb->border_mode == GB_BORDER_NEVER) { + continue; + } + uint16_t tile = LE16(gb->sgb->border.map[tile_x + tile_y * 32]); + if (tile & 0x300) continue; // Unused tile + uint8_t flip_x = (tile & 0x4000)? 0:7; + uint8_t flip_y = (tile & 0x8000)? 7:0; + uint8_t palette = (tile >> 10) & 3; + for (unsigned y = 0; y < 8; y++) { + unsigned base = (tile & 0xFF) * 32 + (y ^ flip_y) * 2; + for (unsigned x = 0; x < 8; x++) { + uint8_t bit = 1 << (x ^ flip_x); + uint8_t color = ((gb->sgb->border.tiles[base] & bit) ? 1: 0) | + ((gb->sgb->border.tiles[base + 1] & bit) ? 2: 0) | + ((gb->sgb->border.tiles[base + 16] & bit) ? 4: 0) | + ((gb->sgb->border.tiles[base + 17] & bit) ? 8: 0); + + uint32_t *output = gb->screen; + if (gb->border_mode == GB_BORDER_NEVER) { + output += (tile_x - 6) * 8 + x + ((tile_y - 5) * 8 + y) * 160; + } + else { + output += tile_x * 8 + x + (tile_y * 8 + y) * 256; + } + if (color == 0) { + if (gb_area) continue; + *output = colors[0]; + } + else { + *output = border_colors[color + palette * 16]; + } + } + } + } + } +} + +void GB_sgb_load_default_data(GB_gameboy_t *gb) +{ + +#include "graphics/sgb_border.inc" + +#ifdef GB_BIG_ENDIAN + for (unsigned i = 0; i < sizeof(tilemap) / 2; i++) { + gb->sgb->border.map[i] = LE16(tilemap[i]); + } + for (unsigned i = 0; i < sizeof(palette) / 2; i++) { + gb->sgb->border.palette[i] = LE16(palette[i]); + } +#else + memcpy(gb->sgb->border.map, tilemap, sizeof(tilemap)); + memcpy(gb->sgb->border.palette, palette, sizeof(palette)); +#endif + memcpy(gb->sgb->border.tiles, tiles, sizeof(tiles)); + + if (gb->model != GB_MODEL_SGB2) { + /* Delete the "2" */ + gb->sgb->border.map[25 * 32 + 25] = gb->sgb->border.map[25 * 32 + 26] = + gb->sgb->border.map[26 * 32 + 25] = gb->sgb->border.map[26 * 32 + 26] = + gb->sgb->border.map[27 * 32 + 25] = gb->sgb->border.map[27 * 32 + 26] = + gb->sgb->border.map[0]; + + /* Re-center */ + memmove(&gb->sgb->border.map[25 * 32 + 1], &gb->sgb->border.map[25 * 32], (32 * 3 - 1) * sizeof(gb->sgb->border.map[0])); + } + gb->sgb->effective_palettes[0] = LE16(built_in_palettes[0]); + gb->sgb->effective_palettes[1] = LE16(built_in_palettes[1]); + gb->sgb->effective_palettes[2] = LE16(built_in_palettes[2]); + gb->sgb->effective_palettes[3] = LE16(built_in_palettes[3]); +} + +static double fm_synth(double phase) +{ + return (sin(phase * M_PI * 2) + + sin(phase * M_PI * 2 + sin(phase * M_PI * 2)) + + sin(phase * M_PI * 2 + sin(phase * M_PI * 3)) + + sin(phase * M_PI * 2 + sin(phase * M_PI * 4))) / 4; +} + +static double fm_sweep(double phase) +{ + double ret = 0; + for (unsigned i = 0; i < 8; i++) { + ret += sin((phase * M_PI * 2 + sin(phase * M_PI * 8) / 4) * pow(1.25, i)) * (8 - i) / 36; + } + return ret; +} +static double random_double(void) +{ + return ((signed)(GB_random32() % 0x10001) - 0x8000) / (double) 0x8000; +} + +static void render_jingle(GB_gameboy_t *gb, size_t count) +{ + const double frequencies[7] = { + 466.16, // Bb4 + 587.33, // D5 + 698.46, // F5 + 830.61, // Ab5 + 1046.50, // C6 + 1244.51, // Eb6 + 1567.98, // G6 + }; + + assert(gb->apu_output.sample_callback); + + if (gb->sgb->intro_animation < 0) { + GB_sample_t sample = {0, 0}; + for (unsigned i = 0; i < count; i++) { + gb->apu_output.sample_callback(gb, &sample); + } + return; + } + + if (gb->sgb->intro_animation >= GB_SGB_INTRO_ANIMATION_LENGTH) return; + + signed jingle_stage = (gb->sgb->intro_animation - 64) / 3; + double sweep_cutoff_ratio = 2000.0 * pow(2, gb->sgb->intro_animation / 20.0) / gb->apu_output.sample_rate; + double sweep_phase_shift = 1000.0 * pow(2, gb->sgb->intro_animation / 40.0) / gb->apu_output.sample_rate; + if (sweep_cutoff_ratio > 1) { + sweep_cutoff_ratio = 1; + } + + GB_sample_t stereo; + for (unsigned i = 0; i < count; i++) { + double sample = 0; + for (signed f = 0; f < 7 && f < jingle_stage; f++) { + sample += fm_synth(gb->sgb_intro_jingle_phases[f]) * + (0.75 * pow(0.5, jingle_stage - f) + 0.25) / 5.0; + gb->sgb_intro_jingle_phases[f] += frequencies[f] / gb->apu_output.sample_rate; + } + if (gb->sgb->intro_animation > 100) { + sample *= pow((GB_SGB_INTRO_ANIMATION_LENGTH - gb->sgb->intro_animation) / (GB_SGB_INTRO_ANIMATION_LENGTH - 100.0), 3); + } + + if (gb->sgb->intro_animation < 120) { + double next = fm_sweep(gb->sgb_intro_sweep_phase) * 0.3 + random_double() * 0.7; + gb->sgb_intro_sweep_phase += sweep_phase_shift; + + gb->sgb_intro_sweep_previous_sample = next * (sweep_cutoff_ratio) + + gb->sgb_intro_sweep_previous_sample * (1 - sweep_cutoff_ratio); + sample += gb->sgb_intro_sweep_previous_sample * pow((120 - gb->sgb->intro_animation) / 120.0, 2) * 0.8; + } + + stereo.left = stereo.right = sample * 0x7000; + gb->apu_output.sample_callback(gb, &stereo); + } + + return; +} + diff --git a/thirdparty/SameBoy-old/Core/sgb.h b/thirdparty/SameBoy-old/Core/sgb.h new file mode 100644 index 000000000..3069c368e --- /dev/null +++ b/thirdparty/SameBoy-old/Core/sgb.h @@ -0,0 +1,71 @@ +#ifndef sgb_h +#define sgb_h +#include "defs.h" +#include +#include + +typedef struct GB_sgb_s GB_sgb_t; +typedef struct { + uint8_t tiles[0x100 * 8 * 4]; +#ifdef GB_INTERNAL + union { + struct { + uint16_t map[32 * 32]; + uint16_t palette[16 * 4]; + }; + uint16_t raw_data[0x440]; + }; +#else + uint16_t raw_data[0x440]; +#endif +} GB_sgb_border_t; + +#ifdef GB_INTERNAL +#define GB_SGB_INTRO_ANIMATION_LENGTH 200 + +struct GB_sgb_s { + uint8_t command[16 * 7]; + uint16_t command_write_index; + bool ready_for_pulse; + bool ready_for_write; + bool ready_for_stop; + bool disable_commands; + + /* Screen buffer */ + uint8_t screen_buffer[160 * 144]; // Live image from the Game Boy + uint8_t effective_screen_buffer[160 * 144]; // Image actually rendered to the screen + + /* Multiplayer Input */ + uint8_t player_count, current_player; + + /* Mask */ + uint8_t mask_mode; + + /* Data Transfer */ + uint8_t vram_transfer_countdown, transfer_dest; + + /* Border */ + GB_sgb_border_t border, pending_border; + uint8_t border_animation; + + /* Colorization */ + uint16_t effective_palettes[4 * 4]; + uint16_t ram_palettes[4 * 512]; + uint8_t attribute_map[20 * 18]; + uint8_t attribute_files[0xFD2]; + uint8_t attribute_files_padding[0xFE0 - 0xFD2]; + + /* Intro */ + int16_t intro_animation; + + /* GB Header */ + uint8_t received_header[0x54]; +}; + +internal void GB_sgb_write(GB_gameboy_t *gb, uint8_t value); +internal void GB_sgb_render(GB_gameboy_t *gb); +internal void GB_sgb_load_default_data(GB_gameboy_t *gb); + +#endif + +#endif diff --git a/thirdparty/SameBoy-old/Core/sm83_cpu.c b/thirdparty/SameBoy-old/Core/sm83_cpu.c new file mode 100644 index 000000000..a56fbdeda --- /dev/null +++ b/thirdparty/SameBoy-old/Core/sm83_cpu.c @@ -0,0 +1,1717 @@ +#include +#include +#include +#include "gb.h" + + +typedef void opcode_t(GB_gameboy_t *gb, uint8_t opcode); + +typedef enum { + /* Default behavior. If the CPU writes while another component reads, it reads the old value */ + GB_CONFLICT_READ_OLD, + /* If the CPU writes while another component reads, it reads the new value */ + GB_CONFLICT_READ_NEW, + /* If the CPU and another component write at the same time, the CPU's value "wins" */ + GB_CONFLICT_WRITE_CPU, + /* Register specific values */ + GB_CONFLICT_STAT_CGB, + GB_CONFLICT_STAT_DMG, + GB_CONFLICT_PALETTE_DMG, + GB_CONFLICT_PALETTE_CGB, + GB_CONFLICT_DMG_LCDC, + GB_CONFLICT_SGB_LCDC, + GB_CONFLICT_WX, + GB_CONFLICT_CGB_LCDC, + GB_CONFLICT_NR10, + GB_CONFLICT_CGB_SCX, +} conflict_t; + +/* Todo: How does double speed mode affect these? */ +static const conflict_t cgb_conflict_map[0x80] = { + [GB_IO_LCDC] = GB_CONFLICT_CGB_LCDC, + [GB_IO_IF] = GB_CONFLICT_WRITE_CPU, + [GB_IO_LYC] = GB_CONFLICT_WRITE_CPU, + [GB_IO_STAT] = GB_CONFLICT_STAT_CGB, + [GB_IO_BGP] = GB_CONFLICT_PALETTE_CGB, + [GB_IO_OBP0] = GB_CONFLICT_PALETTE_CGB, + [GB_IO_OBP1] = GB_CONFLICT_PALETTE_CGB, + [GB_IO_NR10] = GB_CONFLICT_NR10, + [GB_IO_SCX] = GB_CONFLICT_CGB_SCX, +}; + +/* Todo: verify on an MGB */ +static const conflict_t dmg_conflict_map[0x80] = { + [GB_IO_IF] = GB_CONFLICT_WRITE_CPU, + [GB_IO_LYC] = GB_CONFLICT_READ_OLD, + [GB_IO_LCDC] = GB_CONFLICT_DMG_LCDC, + [GB_IO_SCY] = GB_CONFLICT_READ_NEW, + [GB_IO_STAT] = GB_CONFLICT_STAT_DMG, + + [GB_IO_BGP] = GB_CONFLICT_PALETTE_DMG, + [GB_IO_OBP0] = GB_CONFLICT_PALETTE_DMG, + [GB_IO_OBP1] = GB_CONFLICT_PALETTE_DMG, + [GB_IO_WY] = GB_CONFLICT_READ_OLD, + [GB_IO_WX] = GB_CONFLICT_WX, + [GB_IO_NR10] = GB_CONFLICT_NR10, + + /* Todo: these were not verified at all */ + [GB_IO_SCX] = GB_CONFLICT_READ_NEW, +}; + +/* Todo: Verify on an SGB1 */ +static const conflict_t sgb_conflict_map[0x80] = { + [GB_IO_IF] = GB_CONFLICT_WRITE_CPU, + [GB_IO_LYC] = GB_CONFLICT_READ_OLD, + [GB_IO_LCDC] = GB_CONFLICT_SGB_LCDC, + [GB_IO_SCY] = GB_CONFLICT_READ_NEW, + [GB_IO_STAT] = GB_CONFLICT_STAT_DMG, + + [GB_IO_BGP] = GB_CONFLICT_READ_NEW, + [GB_IO_OBP0] = GB_CONFLICT_READ_NEW, + [GB_IO_OBP1] = GB_CONFLICT_READ_NEW, + [GB_IO_WY] = GB_CONFLICT_READ_OLD, + [GB_IO_WX] = GB_CONFLICT_WX, + [GB_IO_NR10] = GB_CONFLICT_NR10, + + /* Todo: these were not verified at all */ + [GB_IO_SCX] = GB_CONFLICT_READ_NEW, +}; + +static uint8_t cycle_read(GB_gameboy_t *gb, uint16_t addr) +{ + if (gb->pending_cycles) { + GB_advance_cycles(gb, gb->pending_cycles); + } + gb->address_bus = addr; + uint8_t ret = GB_read_memory(gb, addr); + gb->pending_cycles = 4; + return ret; +} + +/* A special case for IF during ISR, returns the old value of IF. */ +/* TODO: Verify the timing, it might be wrong in cases where, in the same M cycle, IF + is both read be the CPU, modified by the ISR, and modified by an actual interrupt. + If this timing proves incorrect, the ISR emulation must be updated so IF reads are + timed correctly. */ +/* TODO: Does this affect the address bus? Verify. */ +static uint8_t cycle_write_if(GB_gameboy_t *gb, uint8_t value) +{ + assert(gb->pending_cycles); + GB_advance_cycles(gb, gb->pending_cycles); + gb->address_bus = 0xFF00 + GB_IO_IF; + uint8_t old = (gb->io_registers[GB_IO_IF]) & 0x1F; + GB_write_memory(gb, 0xFF00 + GB_IO_IF, value); + gb->pending_cycles = 4; + return old; +} + +static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + assert(gb->pending_cycles); + conflict_t conflict = GB_CONFLICT_READ_OLD; + if ((addr & 0xFF80) == 0xFF00) { + const conflict_t *map = NULL; + if (GB_is_cgb(gb)) { + map = cgb_conflict_map; + } + else if (GB_is_sgb(gb)) { + map = sgb_conflict_map; + } + else { + map = dmg_conflict_map; + } + conflict = map[addr & 0x7F]; + } + switch (conflict) { + case GB_CONFLICT_READ_OLD: + GB_advance_cycles(gb, gb->pending_cycles); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 4; + break; + + case GB_CONFLICT_READ_NEW: + GB_advance_cycles(gb, gb->pending_cycles - 1); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 5; + break; + + case GB_CONFLICT_WRITE_CPU: + GB_advance_cycles(gb, gb->pending_cycles + 1); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 3; + break; + + /* The DMG STAT-write bug is basically the STAT register being read as FF for a single T-cycle */ + case GB_CONFLICT_STAT_DMG: + GB_advance_cycles(gb, gb->pending_cycles); + GB_display_sync(gb); + /* State 7 is the edge between HBlank and OAM mode, and it behaves a bit weird. + The OAM interrupt seems to be blocked by HBlank interrupts in that case, despite + the timing not making much sense for that. + This is a hack to simulate this effect */ + if (gb->display_state == 7 && (gb->io_registers[GB_IO_STAT] & 0x28) == 0x08) { + GB_write_memory(gb, addr, ~0x20); + } + else { + GB_write_memory(gb, addr, 0xFF); + } + GB_advance_cycles(gb, 1); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 3; + break; + + case GB_CONFLICT_STAT_CGB: { + /* Todo: Verify this with SCX adjustments */ + /* The LYC bit behaves differently */ + uint8_t old_value = GB_read_memory(gb, addr); + GB_advance_cycles(gb, gb->pending_cycles); + GB_write_memory(gb, addr, (old_value & 0x40) | (value & ~0x40)); + GB_advance_cycles(gb, 1); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 3; + break; + } + + /* There is some "time travel" going on with these two values, as it appears + that there's some off-by-1-T-cycle timing issue in the PPU implementation. + + This is should be accurate for every measureable scenario, though. */ + + case GB_CONFLICT_PALETTE_DMG: { + GB_advance_cycles(gb, gb->pending_cycles - 2); + uint8_t old_value = GB_read_memory(gb, addr); + GB_write_memory(gb, addr, value | old_value); + GB_advance_cycles(gb, 1); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 5; + break; + } + + case GB_CONFLICT_PALETTE_CGB: { + GB_advance_cycles(gb, gb->pending_cycles - 2); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 6; + break; + } + + case GB_CONFLICT_DMG_LCDC: { + /* Similar to the palette registers, these interact directly with the LCD, so they appear to be affected by it. Both my DMG (B, blob) and Game Boy Light behave this way though. + + Additionally, LCDC.1 is very nasty because on the it is read both by the FIFO when popping pixels, + and the object-fetching state machine, and both behave differently when it comes to access conflicts. + Hacks ahead. + */ + + + + uint8_t old_value = GB_read_memory(gb, addr); + GB_advance_cycles(gb, gb->pending_cycles - 2); + GB_display_sync(gb); + if (gb->model != GB_MODEL_MGB && gb->position_in_line == 0 && (old_value & 2) && !(value & 2)) { + old_value &= ~2; + } + + GB_write_memory(gb, addr, old_value | (value & 1)); + GB_advance_cycles(gb, 1); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 5; + break; + } + + case GB_CONFLICT_SGB_LCDC: { + /* Simplified version of the above */ + + uint8_t old_value = GB_read_memory(gb, addr); + GB_advance_cycles(gb, gb->pending_cycles - 2); + /* Hack to force aborting object fetch */ + GB_write_memory(gb, addr, value); + GB_write_memory(gb, addr, old_value); + GB_advance_cycles(gb, 1); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 5; + break; + } + + case GB_CONFLICT_WX: + GB_advance_cycles(gb, gb->pending_cycles); + GB_write_memory(gb, addr, value); + gb->wx_just_changed = true; + GB_advance_cycles(gb, 1); + gb->wx_just_changed = false; + gb->pending_cycles = 3; + break; + + case GB_CONFLICT_CGB_LCDC: + if ((~value & gb->io_registers[GB_IO_LCDC]) & 0x10) { + // Todo: This is difference is because my timing is off in one of the models + if (gb->model > GB_MODEL_CGB_C) { + GB_advance_cycles(gb, gb->pending_cycles); + GB_write_memory(gb, addr, value ^ 0x10); // Write with the old TILE_SET first + gb->tile_sel_glitch = true; + GB_advance_cycles(gb, 1); + gb->tile_sel_glitch = false; + GB_write_memory(gb, addr, value); + gb->pending_cycles = 3; + } + else { + GB_advance_cycles(gb, gb->pending_cycles - 1); + GB_write_memory(gb, addr, value ^ 0x10); // Write with the old TILE_SET first + gb->tile_sel_glitch = true; + GB_advance_cycles(gb, 1); + gb->tile_sel_glitch = false; + GB_write_memory(gb, addr, value); + gb->pending_cycles = 4; + } + } + else { + GB_advance_cycles(gb, gb->pending_cycles); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 4; + } + break; + + case GB_CONFLICT_NR10: + /* Hack: Due to the coupling between DIV and the APU, GB_apu_run only runs at M-cycle + resolutions, but this quirk requires 2MHz even in single speed mode. To work + around this, we specifically just step the calculate countdown if needed. */ + GB_advance_cycles(gb, gb->pending_cycles); + if (gb->model <= GB_MODEL_CGB_C) { + // TODO: Double speed mode? This logic is also a bit weird, it needs more tests + GB_apu_run(gb, true); + if (gb->apu.square_sweep_calculate_countdown > 3 && gb->apu.enable_zombie_calculate_stepping) { + gb->apu.square_sweep_calculate_countdown -= 2; + } + gb->apu.enable_zombie_calculate_stepping = true; + /* TODO: this causes audio regressions in the Donkey Kong Land series. + The exact behavior of this quirk should be further investigated, as it seems + more complicated than a single FF pseudo-write. */ + // GB_write_memory(gb, addr, 0xFF); + } + GB_write_memory(gb, addr, value); + gb->pending_cycles = 4; + break; + + case GB_CONFLICT_CGB_SCX: + if (gb->cgb_double_speed) { + GB_advance_cycles(gb, gb->pending_cycles - 2); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 6; + } + else { + GB_advance_cycles(gb, gb->pending_cycles); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 4; + } + break; + } + gb->address_bus = addr; +} + +static void cycle_no_access(GB_gameboy_t *gb) +{ + gb->pending_cycles += 4; +} + +static void cycle_oam_bug(GB_gameboy_t *gb, uint8_t register_id) +{ + if (gb->pending_cycles) { + GB_advance_cycles(gb, gb->pending_cycles); + } + gb->address_bus = gb->registers[register_id]; + GB_trigger_oam_bug(gb, gb->registers[register_id]); /* Todo: test T-cycle timing */ + gb->pending_cycles = 4; +} + +static void cycle_oam_bug_pc(GB_gameboy_t *gb) +{ + if (gb->pending_cycles) { + GB_advance_cycles(gb, gb->pending_cycles); + } + gb->address_bus = gb->pc; + GB_trigger_oam_bug(gb, gb->pc); /* Todo: test T-cycle timing */ + gb->pending_cycles = 4; +} + +static void flush_pending_cycles(GB_gameboy_t *gb) +{ + if (gb->pending_cycles) { + GB_advance_cycles(gb, gb->pending_cycles); + } + gb->pending_cycles = 0; +} + +/* Todo: test if multi-byte opcodes trigger the OAM bug correctly */ + +static void ill(GB_gameboy_t *gb, uint8_t opcode) +{ + GB_log(gb, "Illegal Opcode. Halting.\n"); + gb->interrupt_enable = 0; + gb->halted = true; +} + +static void nop(GB_gameboy_t *gb, uint8_t opcode) +{ +} + +static void enter_stop_mode(GB_gameboy_t *gb) +{ + GB_write_memory(gb, 0xFF00 + GB_IO_DIV, 0); + if (!gb->ime) { // TODO: I don't trust this if, + gb->div_cycles = -4; // Emulate the CPU-side DIV-reset signal being held + } + gb->stopped = true; + gb->allow_hdma_on_wake = (gb->io_registers[GB_IO_STAT] & 3); + gb->oam_ppu_blocked = !gb->oam_read_blocked; + gb->vram_ppu_blocked = !gb->vram_read_blocked; + gb->cgb_palettes_ppu_blocked = !gb->cgb_palettes_blocked; +} + +static void leave_stop_mode(GB_gameboy_t *gb) +{ + gb->stopped = false; + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->allow_hdma_on_wake) { + gb->hdma_on = true; + } + // TODO: verify this + gb->dma_cycles = 4; + GB_dma_run(gb); + gb->oam_ppu_blocked = false; + gb->vram_ppu_blocked = false; + gb->cgb_palettes_ppu_blocked = false; +} + +/* TODO: Speed switch timing needs far more tests. Double to single is wrong to avoid odd mode. */ +static void stop(GB_gameboy_t *gb, uint8_t opcode) +{ + flush_pending_cycles(gb); + if ((gb->io_registers[GB_IO_JOYP] & 0x30) != 0x30) { + gb->joyp_accessed = true; + } + bool exit_by_joyp = ((gb->io_registers[GB_IO_JOYP] & 0xF) != 0xF); + bool speed_switch = (gb->io_registers[GB_IO_KEY1] & 0x1) && !exit_by_joyp; + bool immediate_exit = speed_switch || exit_by_joyp; + bool interrupt_pending = (gb->interrupt_enable & gb->io_registers[GB_IO_IF] & 0x1F); + // When entering with IF&IE, the 2nd byte of STOP is actually executed + if (!exit_by_joyp) { + if (!immediate_exit) { + GB_dma_run(gb); + } + enter_stop_mode(gb); + } + + if (!interrupt_pending) { + cycle_read(gb, gb->pc++); + } + + /* Todo: speed switching takes 2 extra T-cycles (so 2 PPU ticks in single->double and 1 PPU tick in double->single) */ + if (speed_switch) { + flush_pending_cycles(gb); + + if (gb->io_registers[GB_IO_LCDC] & 0x80 && gb->cgb_double_speed) { + GB_log(gb, "ROM triggered a PPU odd mode, which is currently not supported. Reverting to even-mode.\n"); + if (gb->double_speed_alignment & 7) { + gb->speed_switch_freeze = 2; + } + } + if (gb->apu.global_enable && gb->cgb_double_speed) { + GB_log(gb, "ROM triggered an APU odd mode, which is currently not tested.\n"); + } + if (gb->cartridge_type->mbc_type == GB_CAMERA && (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1) && !gb->cgb_double_speed) { + GB_log(gb, "ROM entered double speed mode with a camera cartridge, this could damage a real cartridge's camera.\n"); + } + + if (gb->cgb_double_speed) { + gb->cgb_double_speed = false; + } + else { + gb->speed_switch_countdown = 6; + gb->speed_switch_freeze = 1; + } + + if (interrupt_pending) { + } + else { + gb->speed_switch_halt_countdown = 0x20008; + gb->speed_switch_freeze = 5; + } + + gb->io_registers[GB_IO_KEY1] = 0; + } + + if (immediate_exit) { + leave_stop_mode(gb); + if (!interrupt_pending) { + GB_dma_run(gb); + gb->halted = true; + gb->just_halted = true; + gb->allow_hdma_on_wake = (gb->io_registers[GB_IO_STAT] & 3); + } + else { + gb->speed_switch_halt_countdown = 0; + } + } +} + +/* Operand naming conventions for functions: + r = 8-bit register + lr = low 8-bit register + hr = high 8-bit register + rr = 16-bit register + d8 = 8-bit imm + d16 = 16-bit imm + d.. = [..] + cc = condition code (z, nz, c, nc) + */ + +static void ld_rr_d16(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + uint16_t value; + register_id = (opcode >> 4) + 1; + value = cycle_read(gb, gb->pc++); + value |= cycle_read(gb, gb->pc++) << 8; + gb->registers[register_id] = value; +} + +static void ld_drr_a(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + register_id = (opcode >> 4) + 1; + cycle_write(gb, gb->registers[register_id], gb->af >> 8); +} + +static void inc_rr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id = (opcode >> 4) + 1; + cycle_oam_bug(gb, register_id); + gb->registers[register_id]++; +} + +static void inc_hr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + register_id = ((opcode >> 4) + 1) & 0x03; + gb->registers[register_id] += 0x100; + gb->af &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + + if ((gb->registers[register_id] & 0x0F00) == 0) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((gb->registers[register_id] & 0xFF00) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} +static void dec_hr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + register_id = ((opcode >> 4) + 1) & 0x03; + gb->registers[register_id] -= 0x100; + gb->af &= ~(GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af |= GB_SUBTRACT_FLAG; + + if ((gb->registers[register_id] & 0x0F00) == 0xF00) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((gb->registers[register_id] & 0xFF00) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void ld_hr_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + register_id = ((opcode >> 4) + 1) & 0x03; + gb->registers[register_id] &= 0xFF; + gb->registers[register_id] |= cycle_read(gb, gb->pc++) << 8; +} + +static void rlca(GB_gameboy_t *gb, uint8_t opcode) +{ + bool carry = (gb->af & 0x8000) != 0; + + gb->af = (gb->af & 0xFF00) << 1; + if (carry) { + gb->af |= GB_CARRY_FLAG | 0x0100; + } +} + +static void rla(GB_gameboy_t *gb, uint8_t opcode) +{ + bool bit7 = (gb->af & 0x8000) != 0; + bool carry = (gb->af & GB_CARRY_FLAG) != 0; + + gb->af = (gb->af & 0xFF00) << 1; + if (carry) { + gb->af |= 0x0100; + } + if (bit7) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void ld_da16_sp(GB_gameboy_t *gb, uint8_t opcode) +{ + /* Todo: Verify order is correct */ + uint16_t addr; + addr = cycle_read(gb, gb->pc++); + addr |= cycle_read(gb, gb->pc++) << 8; + cycle_write(gb, addr, gb->sp & 0xFF); + cycle_write(gb, addr + 1, gb->sp >> 8); +} + +static void add_hl_rr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t hl = gb->hl; + uint16_t rr; + uint8_t register_id; + cycle_no_access(gb); + register_id = (opcode >> 4) + 1; + rr = gb->registers[register_id]; + gb->hl = hl + rr; + gb->af &= ~(GB_SUBTRACT_FLAG | GB_CARRY_FLAG | GB_HALF_CARRY_FLAG); + + /* The meaning of the Half Carry flag is really hard to track -_- */ + if (((hl & 0xFFF) + (rr & 0xFFF)) & 0x1000) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ( ((unsigned) hl + (unsigned) rr) & 0x10000) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void ld_a_drr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + register_id = (opcode >> 4) + 1; + gb->af &= 0xFF; + gb->af |= cycle_read(gb, gb->registers[register_id]) << 8; +} + +static void dec_rr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id = (opcode >> 4) + 1; + cycle_oam_bug(gb, register_id); + gb->registers[register_id]--; +} + +static void inc_lr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + uint8_t value; + register_id = (opcode >> 4) + 1; + + value = (gb->registers[register_id] & 0xFF) + 1; + gb->registers[register_id] = (gb->registers[register_id] & 0xFF00) | value; + + gb->af &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + + if ((gb->registers[register_id] & 0x0F) == 0) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((gb->registers[register_id] & 0xFF) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} +static void dec_lr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + uint8_t value; + register_id = (opcode >> 4) + 1; + + value = (gb->registers[register_id] & 0xFF) - 1; + gb->registers[register_id] = (gb->registers[register_id] & 0xFF00) | value; + + gb->af &= ~(GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af |= GB_SUBTRACT_FLAG; + + if ((gb->registers[register_id] & 0x0F) == 0xF) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((gb->registers[register_id] & 0xFF) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void ld_lr_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + register_id = (opcode >> 4) + 1; + gb->registers[register_id] &= 0xFF00; + gb->registers[register_id] |= cycle_read(gb, gb->pc++); +} + +static void rrca(GB_gameboy_t *gb, uint8_t opcode) +{ + bool carry = (gb->af & 0x100) != 0; + + gb->af = (gb->af >> 1) & 0xFF00; + if (carry) { + gb->af |= GB_CARRY_FLAG | 0x8000; + } +} + +static void rra(GB_gameboy_t *gb, uint8_t opcode) +{ + bool bit1 = (gb->af & 0x0100) != 0; + bool carry = (gb->af & GB_CARRY_FLAG) != 0; + + gb->af = (gb->af >> 1) & 0xFF00; + if (carry) { + gb->af |= 0x8000; + } + if (bit1) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void jr_r8(GB_gameboy_t *gb, uint8_t opcode) +{ + /* Todo: Verify timing */ + gb->pc += (int8_t)cycle_read(gb, gb->pc) + 1; + cycle_no_access(gb); +} + +static bool condition_code(GB_gameboy_t *gb, uint8_t opcode) +{ + switch ((opcode >> 3) & 0x3) { + case 0: + return !(gb->af & GB_ZERO_FLAG); + case 1: + return (gb->af & GB_ZERO_FLAG); + case 2: + return !(gb->af & GB_CARRY_FLAG); + case 3: + return (gb->af & GB_CARRY_FLAG); + nodefault; + } + + return false; +} + +static void jr_cc_r8(GB_gameboy_t *gb, uint8_t opcode) +{ + int8_t offset = cycle_read(gb, gb->pc++); + if (condition_code(gb, opcode)) { + gb->pc += offset; + cycle_no_access(gb); + } +} + +static void daa(GB_gameboy_t *gb, uint8_t opcode) +{ + int16_t result = gb->af >> 8; + + gb->af &= ~(0xFF00 | GB_ZERO_FLAG); + + if (gb->af & GB_SUBTRACT_FLAG) { + if (gb->af & GB_HALF_CARRY_FLAG) { + result = (result - 0x06) & 0xFF; + } + + if (gb->af & GB_CARRY_FLAG) { + result -= 0x60; + } + } + else { + if ((gb->af & GB_HALF_CARRY_FLAG) || (result & 0x0F) > 0x09) { + result += 0x06; + } + + if ((gb->af & GB_CARRY_FLAG) || result > 0x9F) { + result += 0x60; + } + } + + if ((result & 0xFF) == 0) { + gb->af |= GB_ZERO_FLAG; + } + + if ((result & 0x100) == 0x100) { + gb->af |= GB_CARRY_FLAG; + } + + gb->af &= ~GB_HALF_CARRY_FLAG; + gb->af |= result << 8; +} + +static void cpl(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->af ^= 0xFF00; + gb->af |= GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG; +} + +static void scf(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->af |= GB_CARRY_FLAG; + gb->af &= ~(GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG); +} + +static void ccf(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->af ^= GB_CARRY_FLAG; + gb->af &= ~(GB_HALF_CARRY_FLAG | GB_SUBTRACT_FLAG); +} + +static void ld_dhli_a(GB_gameboy_t *gb, uint8_t opcode) +{ + cycle_write(gb, gb->hl++, gb->af >> 8); +} + +static void ld_dhld_a(GB_gameboy_t *gb, uint8_t opcode) +{ + cycle_write(gb, gb->hl--, gb->af >> 8); +} + +static void ld_a_dhli(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->af &= 0xFF; + gb->af |= cycle_read(gb, gb->hl++) << 8; +} + +static void ld_a_dhld(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->af &= 0xFF; + gb->af |= cycle_read(gb, gb->hl--) << 8; +} + +static void inc_dhl(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value; + value = cycle_read(gb, gb->hl) + 1; + cycle_write(gb, gb->hl, value); + + gb->af &= ~(GB_SUBTRACT_FLAG | GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + if ((value & 0x0F) == 0) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((value & 0xFF) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void dec_dhl(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value; + value = cycle_read(gb, gb->hl) - 1; + cycle_write(gb, gb->hl, value); + + gb->af &= ~( GB_ZERO_FLAG | GB_HALF_CARRY_FLAG); + gb->af |= GB_SUBTRACT_FLAG; + if ((value & 0x0F) == 0x0F) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((value & 0xFF) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void ld_dhl_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t data = cycle_read(gb, gb->pc++); + cycle_write(gb, gb->hl, data); +} + +static uint8_t get_src_value(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t src_register_id; + uint8_t src_low; + src_register_id = ((opcode >> 1) + 1) & 3; + src_low = opcode & 1; + if (src_register_id == GB_REGISTER_AF) { + if (src_low) { + return gb->af >> 8; + } + return cycle_read(gb, gb->hl); + } + if (src_low) { + return gb->registers[src_register_id] & 0xFF; + } + return gb->registers[src_register_id] >> 8; +} + +static void set_src_value(GB_gameboy_t *gb, uint8_t opcode, uint8_t value) +{ + uint8_t src_register_id; + uint8_t src_low; + src_register_id = ((opcode >> 1) + 1) & 3; + src_low = opcode & 1; + + if (src_register_id == GB_REGISTER_AF) { + if (src_low) { + gb->af &= 0xFF; + gb->af |= value << 8; + } + else { + cycle_write(gb, gb->hl, value); + } + } + else { + if (src_low) { + gb->registers[src_register_id] &= 0xFF00; + gb->registers[src_register_id] |= value; + } + else { + gb->registers[src_register_id] &= 0xFF; + gb->registers[src_register_id] |= value << 8; + } + } +} + +/* The LD r,r instruction is extremely common and extremely simple. Decoding this opcode at runtime is a significent + performance hit, so we generate functions for every ld x,y couple (including [hl]) at compile time using macros. */ + +/* Todo: It's probably wise to do the same to all opcodes. */ + +#define LD_X_Y(x, y) \ +static void ld_##x##_##y(GB_gameboy_t *gb, uint8_t opcode) \ +{ \ + gb->x = gb->y;\ +} + +#define LD_X_DHL(x) \ +static void ld_##x##_##dhl(GB_gameboy_t *gb, uint8_t opcode) \ +{ \ +gb->x = cycle_read(gb, gb->hl); \ +} + +#define LD_DHL_Y(y) \ +static void ld_##dhl##_##y(GB_gameboy_t *gb, uint8_t opcode) \ +{ \ +cycle_write(gb, gb->hl, gb->y); \ +} + + LD_X_Y(b,c) LD_X_Y(b,d) LD_X_Y(b,e) LD_X_Y(b,h) LD_X_Y(b,l) LD_X_DHL(b) LD_X_Y(b,a) +LD_X_Y(c,b) LD_X_Y(c,d) LD_X_Y(c,e) LD_X_Y(c,h) LD_X_Y(c,l) LD_X_DHL(c) LD_X_Y(c,a) +LD_X_Y(d,b) LD_X_Y(d,c) LD_X_Y(d,e) LD_X_Y(d,h) LD_X_Y(d,l) LD_X_DHL(d) LD_X_Y(d,a) +LD_X_Y(e,b) LD_X_Y(e,c) LD_X_Y(e,d) LD_X_Y(e,h) LD_X_Y(e,l) LD_X_DHL(e) LD_X_Y(e,a) +LD_X_Y(h,b) LD_X_Y(h,c) LD_X_Y(h,d) LD_X_Y(h,e) LD_X_Y(h,l) LD_X_DHL(h) LD_X_Y(h,a) +LD_X_Y(l,b) LD_X_Y(l,c) LD_X_Y(l,d) LD_X_Y(l,e) LD_X_Y(l,h) LD_X_DHL(l) LD_X_Y(l,a) +LD_DHL_Y(b) LD_DHL_Y(c) LD_DHL_Y(d) LD_DHL_Y(e) LD_DHL_Y(h) LD_DHL_Y(l) LD_DHL_Y(a) +LD_X_Y(a,b) LD_X_Y(a,c) LD_X_Y(a,d) LD_X_Y(a,e) LD_X_Y(a,h) LD_X_Y(a,l) LD_X_DHL(a) + +// fire the debugger if software breakpoints are enabled +static void ld_b_b(GB_gameboy_t *gb, uint8_t opcode) +{ + if (gb->has_software_breakpoints) { + gb->debug_stopped = true; + } +} + +static void add_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + gb->af = (a + value) << 8; + if ((uint8_t)(a + value) == 0) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) + (value & 0xF) > 0x0F) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (((unsigned) a) + ((unsigned) value) > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void adc_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a, carry; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = (a + value + carry) << 8; + + if ((uint8_t)(a + value + carry) == 0) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) + (value & 0xF) + carry > 0x0F) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (((unsigned) a) + ((unsigned) value) + carry > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void sub_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + gb->af = ((a - value) << 8) | GB_SUBTRACT_FLAG; + if (a == value) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) < (value & 0xF)) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (a < value) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void sbc_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a, carry; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = ((a - value - carry) << 8) | GB_SUBTRACT_FLAG; + + if ((uint8_t) (a - value - carry) == 0) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) < (value & 0xF) + carry) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (((unsigned) a) - ((unsigned) value) - carry > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void and_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + gb->af = ((a & value) << 8) | GB_HALF_CARRY_FLAG; + if ((a & value) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void xor_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + gb->af = (a ^ value) << 8; + if ((a ^ value) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void or_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + gb->af = (a | value) << 8; + if ((a | value) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void cp_a_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = get_src_value(gb, opcode); + a = gb->af >> 8; + gb->af &= 0xFF00; + gb->af |= GB_SUBTRACT_FLAG; + if (a == value) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) < (value & 0xF)) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (a < value) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void halt(GB_gameboy_t *gb, uint8_t opcode) +{ + assert(gb->pending_cycles == 4); + gb->pending_cycles = 0; + GB_advance_cycles(gb, 4); + + /* Despite what some online documentations say, the HALT bug also happens on a CGB, in both CGB and DMG modes. */ + if (((gb->interrupt_enable & gb->io_registers[GB_IO_IF] & 0x1F) != 0)) { + if (gb->ime) { + gb->halted = false; + gb->pc--; + } + else { + gb->halted = false; + gb->halt_bug = true; + } + } + else { + gb->halted = true; + gb->allow_hdma_on_wake = (gb->io_registers[GB_IO_STAT] & 3); + } + gb->just_halted = true; +} + +static void pop_rr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + register_id = ((opcode >> 4) + 1) & 3; + gb->registers[register_id] = cycle_read(gb, gb->sp++); + gb->registers[register_id] |= cycle_read(gb, gb->sp++) << 8; + gb->af &= 0xFFF0; // Make sure we don't set impossible flags on F! See Blargg's PUSH AF test. +} + +static void jp_cc_a16(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t addr = cycle_read(gb, gb->pc++); + addr |= (cycle_read(gb, gb->pc++) << 8); + if (condition_code(gb, opcode)) { + cycle_no_access(gb); + gb->pc = addr; + } +} + +static void jp_a16(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t addr = cycle_read(gb, gb->pc); + addr |= (cycle_read(gb, gb->pc + 1) << 8); + cycle_no_access(gb); + gb->pc = addr; + +} + +static void call_cc_a16(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t call_addr = gb->pc - 1; + uint16_t addr = cycle_read(gb, gb->pc++); + addr |= (cycle_read(gb, gb->pc++) << 8); + if (condition_code(gb, opcode)) { + cycle_oam_bug(gb, GB_REGISTER_SP); + cycle_write(gb, --gb->sp, (gb->pc) >> 8); + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); + gb->pc = addr; + + GB_debugger_call_hook(gb, call_addr); + } +} + +static void push_rr(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t register_id; + cycle_oam_bug(gb, GB_REGISTER_SP); + register_id = ((opcode >> 4) + 1) & 3; + cycle_write(gb, --gb->sp, (gb->registers[register_id]) >> 8); + cycle_write(gb, --gb->sp, (gb->registers[register_id]) & 0xFF); +} + +static void add_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = (a + value) << 8; + if ((uint8_t) (a + value) == 0) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) + (value & 0xF) > 0x0F) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (((unsigned) a) + ((unsigned) value) > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void adc_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a, carry; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = (a + value + carry) << 8; + + if (gb->af == 0) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) + (value & 0xF) + carry > 0x0F) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (((unsigned) a) + ((unsigned) value) + carry > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void sub_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = ((a - value) << 8) | GB_SUBTRACT_FLAG; + if (a == value) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) < (value & 0xF)) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (a < value) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void sbc_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a, carry; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + carry = (gb->af & GB_CARRY_FLAG) != 0; + gb->af = ((a - value - carry) << 8) | GB_SUBTRACT_FLAG; + + if ((uint8_t) (a - value - carry) == 0) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) < (value & 0xF) + carry) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (((unsigned) a) - ((unsigned) value) - carry > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void and_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = ((a & value) << 8) | GB_HALF_CARRY_FLAG; + if ((a & value) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void xor_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = (a ^ value) << 8; + if ((a ^ value) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void or_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af = (a | value) << 8; + if ((a | value) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void cp_a_d8(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value, a; + value = cycle_read(gb, gb->pc++); + a = gb->af >> 8; + gb->af &= 0xFF00; + gb->af |= GB_SUBTRACT_FLAG; + if (a == value) { + gb->af |= GB_ZERO_FLAG; + } + if ((a & 0xF) < (value & 0xF)) { + gb->af |= GB_HALF_CARRY_FLAG; + } + if (a < value) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void rst(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t call_addr = gb->pc - 1; + cycle_oam_bug(gb, GB_REGISTER_SP); + cycle_write(gb, --gb->sp, (gb->pc) >> 8); + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); + gb->pc = opcode ^ 0xC7; + GB_debugger_call_hook(gb, call_addr); +} + +static void ret(GB_gameboy_t *gb, uint8_t opcode) +{ + GB_debugger_ret_hook(gb); + gb->pc = cycle_read(gb, gb->sp++); + gb->pc |= cycle_read(gb, gb->sp++) << 8; + cycle_no_access(gb); +} + +static void reti(GB_gameboy_t *gb, uint8_t opcode) +{ + ret(gb, opcode); + gb->ime = true; +} + +static void ret_cc(GB_gameboy_t *gb, uint8_t opcode) +{ + if (condition_code(gb, opcode)) { + cycle_no_access(gb); + ret(gb, opcode); + } + else { + cycle_no_access(gb); + } +} + +static void call_a16(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t call_addr = gb->pc - 1; + uint16_t addr = cycle_read(gb, gb->pc++); + addr |= (cycle_read(gb, gb->pc++) << 8); + cycle_oam_bug(gb, GB_REGISTER_SP); + cycle_write(gb, --gb->sp, (gb->pc) >> 8); + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); + gb->pc = addr; + GB_debugger_call_hook(gb, call_addr); +} + +static void ld_da8_a(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t temp = cycle_read(gb, gb->pc++); + cycle_write(gb, 0xFF00 + temp, gb->af >> 8); +} + +static void ld_a_da8(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->af &= 0xFF; + uint8_t temp = cycle_read(gb, gb->pc++); + gb->af |= cycle_read(gb, 0xFF00 + temp) << 8; +} + +static void ld_dc_a(GB_gameboy_t *gb, uint8_t opcode) +{ + cycle_write(gb, 0xFF00 + (gb->bc & 0xFF), gb->af >> 8); +} + +static void ld_a_dc(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->af &= 0xFF; + gb->af |= cycle_read(gb, 0xFF00 + (gb->bc & 0xFF)) << 8; +} + +static void add_sp_r8(GB_gameboy_t *gb, uint8_t opcode) +{ + int16_t offset; + uint16_t sp = gb->sp; + offset = (int8_t) cycle_read(gb, gb->pc++); + cycle_no_access(gb); + cycle_no_access(gb); + gb->sp += offset; + + gb->af &= 0xFF00; + + /* A new instruction, a new meaning for Half Carry! */ + if ((sp & 0xF) + (offset & 0xF) > 0xF) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((sp & 0xFF) + (offset & 0xFF) > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void jp_hl(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->pc = gb->hl; +} + +static void ld_da16_a(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t addr; + addr = cycle_read(gb, gb->pc++); + addr |= cycle_read(gb, gb->pc++) << 8; + cycle_write(gb, addr, gb->af >> 8); +} + +static void ld_a_da16(GB_gameboy_t *gb, uint8_t opcode) +{ + uint16_t addr; + gb->af &= 0xFF; + addr = cycle_read(gb, gb->pc++); + addr |= cycle_read(gb, gb->pc++) << 8; + gb->af |= cycle_read(gb, addr) << 8; +} + +static void di(GB_gameboy_t *gb, uint8_t opcode) +{ + /* DI is NOT delayed, not even on a CGB. Mooneye's di_timing-GS test fails on a CGB + for different reasons. */ + gb->ime = false; +} + +static void ei(GB_gameboy_t *gb, uint8_t opcode) +{ + /* ei is actually "disable interrupts for one instruction, then enable them". */ + if (!gb->ime && !gb->ime_toggle) { + gb->ime_toggle = true; + } +} + +static void ld_hl_sp_r8(GB_gameboy_t *gb, uint8_t opcode) +{ + int16_t offset; + gb->af &= 0xFF00; + offset = (int8_t) cycle_read(gb, gb->pc++); + cycle_no_access(gb); + gb->hl = gb->sp + offset; + + if ((gb->sp & 0xF) + (offset & 0xF) > 0xF) { + gb->af |= GB_HALF_CARRY_FLAG; + } + + if ((gb->sp & 0xFF) + (offset & 0xFF) > 0xFF) { + gb->af |= GB_CARRY_FLAG; + } +} + +static void ld_sp_hl(GB_gameboy_t *gb, uint8_t opcode) +{ + gb->sp = gb->hl; + cycle_oam_bug(gb, GB_REGISTER_HL); +} + +static void rlc_r(GB_gameboy_t *gb, uint8_t opcode) +{ + bool carry; + uint8_t value; + value = get_src_value(gb, opcode); + carry = (value & 0x80) != 0; + gb->af &= 0xFF00; + set_src_value(gb, opcode, (value << 1) | carry); + if (carry) { + gb->af |= GB_CARRY_FLAG; + } + if (value == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void rrc_r(GB_gameboy_t *gb, uint8_t opcode) +{ + bool carry; + uint8_t value; + value = get_src_value(gb, opcode); + carry = (value & 0x01) != 0; + gb->af &= 0xFF00; + value = (value >> 1) | (carry << 7); + set_src_value(gb, opcode, value); + if (carry) { + gb->af |= GB_CARRY_FLAG; + } + if (value == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void rl_r(GB_gameboy_t *gb, uint8_t opcode) +{ + bool carry; + uint8_t value; + bool bit7; + value = get_src_value(gb, opcode); + carry = (gb->af & GB_CARRY_FLAG) != 0; + bit7 = (value & 0x80) != 0; + + gb->af &= 0xFF00; + value = (value << 1) | carry; + set_src_value(gb, opcode, value); + if (bit7) { + gb->af |= GB_CARRY_FLAG; + } + if (value == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void rr_r(GB_gameboy_t *gb, uint8_t opcode) +{ + bool carry; + uint8_t value; + bool bit1; + + value = get_src_value(gb, opcode); + carry = (gb->af & GB_CARRY_FLAG) != 0; + bit1 = (value & 0x1) != 0; + + gb->af &= 0xFF00; + value = (value >> 1) | (carry << 7); + set_src_value(gb, opcode, value); + if (bit1) { + gb->af |= GB_CARRY_FLAG; + } + if (value == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void sla_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value; + bool carry; + value = get_src_value(gb, opcode); + carry = (value & 0x80) != 0; + gb->af &= 0xFF00; + set_src_value(gb, opcode, (value << 1)); + if (carry) { + gb->af |= GB_CARRY_FLAG; + } + if ((value & 0x7F) == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void sra_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t bit7; + uint8_t value; + value = get_src_value(gb, opcode); + bit7 = value & 0x80; + gb->af &= 0xFF00; + if (value & 1) { + gb->af |= GB_CARRY_FLAG; + } + value = (value >> 1) | bit7; + set_src_value(gb, opcode, value); + if (value == 0) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void srl_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value; + value = get_src_value(gb, opcode); + gb->af &= 0xFF00; + set_src_value(gb, opcode, (value >> 1)); + if (value & 1) { + gb->af |= GB_CARRY_FLAG; + } + if (!(value >> 1)) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void swap_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value; + value = get_src_value(gb, opcode); + gb->af &= 0xFF00; + set_src_value(gb, opcode, (value >> 4) | (value << 4)); + if (!value) { + gb->af |= GB_ZERO_FLAG; + } +} + +static void bit_r(GB_gameboy_t *gb, uint8_t opcode) +{ + uint8_t value; + uint8_t bit; + value = get_src_value(gb, opcode); + bit = 1 << ((opcode >> 3) & 7); + if ((opcode & 0xC0) == 0x40) { /* Bit */ + gb->af &= 0xFF00 | GB_CARRY_FLAG; + gb->af |= GB_HALF_CARRY_FLAG; + if (!(bit & value)) { + gb->af |= GB_ZERO_FLAG; + } + } + else if ((opcode & 0xC0) == 0x80) { /* res */ + set_src_value(gb, opcode, value & ~bit); + } + else if ((opcode & 0xC0) == 0xC0) { /* set */ + set_src_value(gb, opcode, value | bit); + } +} + +static void cb_prefix(GB_gameboy_t *gb, uint8_t opcode) +{ + opcode = cycle_read(gb, gb->pc++); + switch (opcode >> 3) { + case 0: + rlc_r(gb, opcode); + break; + case 1: + rrc_r(gb, opcode); + break; + case 2: + rl_r(gb, opcode); + break; + case 3: + rr_r(gb, opcode); + break; + case 4: + sla_r(gb, opcode); + break; + case 5: + sra_r(gb, opcode); + break; + case 6: + swap_r(gb, opcode); + break; + case 7: + srl_r(gb, opcode); + break; + default: + bit_r(gb, opcode); + break; + } +} + +static opcode_t *opcodes[256] = { +/* X0 X1 X2 X3 X4 X5 X6 X7 */ +/* X8 X9 Xa Xb Xc Xd Xe Xf */ + nop, ld_rr_d16, ld_drr_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, rlca, /* 0X */ + ld_da16_sp, add_hl_rr, ld_a_drr, dec_rr, inc_lr, dec_lr, ld_lr_d8, rrca, + stop, ld_rr_d16, ld_drr_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, rla, /* 1X */ + jr_r8, add_hl_rr, ld_a_drr, dec_rr, inc_lr, dec_lr, ld_lr_d8, rra, + jr_cc_r8, ld_rr_d16, ld_dhli_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, daa, /* 2X */ + jr_cc_r8, add_hl_rr, ld_a_dhli, dec_rr, inc_lr, dec_lr, ld_lr_d8, cpl, + jr_cc_r8, ld_rr_d16, ld_dhld_a, inc_rr, inc_dhl, dec_dhl, ld_dhl_d8, scf, /* 3X */ + jr_cc_r8, add_hl_rr, ld_a_dhld, dec_rr, inc_hr, dec_hr, ld_hr_d8, ccf, + ld_b_b, ld_b_c, ld_b_d, ld_b_e, ld_b_h, ld_b_l, ld_b_dhl, ld_b_a, /* 4X */ + ld_c_b, nop, ld_c_d, ld_c_e, ld_c_h, ld_c_l, ld_c_dhl, ld_c_a, + ld_d_b, ld_d_c, nop, ld_d_e, ld_d_h, ld_d_l, ld_d_dhl, ld_d_a, /* 5X */ + ld_e_b, ld_e_c, ld_e_d, nop, ld_e_h, ld_e_l, ld_e_dhl, ld_e_a, + ld_h_b, ld_h_c, ld_h_d, ld_h_e, nop, ld_h_l, ld_h_dhl, ld_h_a, /* 6X */ + ld_l_b, ld_l_c, ld_l_d, ld_l_e, ld_l_h, nop, ld_l_dhl, ld_l_a, + ld_dhl_b, ld_dhl_c, ld_dhl_d, ld_dhl_e, ld_dhl_h, ld_dhl_l, halt, ld_dhl_a, /* 7X */ + ld_a_b, ld_a_c, ld_a_d, ld_a_e, ld_a_h, ld_a_l, ld_a_dhl, nop, + add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, /* 8X */ + adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, + sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, /* 9X */ + sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, + and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, /* aX */ + xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, + or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, /* bX */ + cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, + ret_cc, pop_rr, jp_cc_a16, jp_a16, call_cc_a16,push_rr, add_a_d8, rst, /* cX */ + ret_cc, ret, jp_cc_a16, cb_prefix, call_cc_a16,call_a16, adc_a_d8, rst, + ret_cc, pop_rr, jp_cc_a16, ill, call_cc_a16,push_rr, sub_a_d8, rst, /* dX */ + ret_cc, reti, jp_cc_a16, ill, call_cc_a16,ill, sbc_a_d8, rst, + ld_da8_a, pop_rr, ld_dc_a, ill, ill, push_rr, and_a_d8, rst, /* eX */ + add_sp_r8, jp_hl, ld_da16_a, ill, ill, ill, xor_a_d8, rst, + ld_a_da8, pop_rr, ld_a_dc, di, ill, push_rr, or_a_d8, rst, /* fX */ + ld_hl_sp_r8,ld_sp_hl, ld_a_da16, ei, ill, ill, cp_a_d8, rst, +}; +void GB_cpu_run(GB_gameboy_t *gb) +{ + if (gb->stopped) { + GB_timing_sync(gb); + GB_advance_cycles(gb, 4); + if ((gb->io_registers[GB_IO_JOYP] & 0x30) != 0x30) { + gb->joyp_accessed = true; + } + if ((gb->io_registers[GB_IO_JOYP] & 0xF) != 0xF) { + leave_stop_mode(gb); + GB_advance_cycles(gb, 8); + } + return; + } + + if ((gb->interrupt_enable & 0x10) && (gb->ime || gb->halted)) { + GB_timing_sync(gb); + } + + if (gb->halted && !GB_is_cgb(gb) && !gb->just_halted) { + GB_advance_cycles(gb, 2); + } + + uint8_t interrupt_queue = gb->interrupt_enable & gb->io_registers[GB_IO_IF] & 0x1F; + + if (gb->halted) { + GB_advance_cycles(gb, (GB_is_cgb(gb) || gb->just_halted) ? 4 : 2); + } + gb->just_halted = false; + + bool effective_ime = gb->ime; + if (gb->ime_toggle) { + gb->ime = !gb->ime; + gb->ime_toggle = false; + } + + /* Wake up from HALT mode without calling interrupt code. */ + if (gb->halted && !effective_ime && interrupt_queue) { + gb->halted = false; + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->allow_hdma_on_wake) { + gb->hdma_on = true; + } + gb->dma_cycles = 4; + GB_dma_run(gb); + gb->speed_switch_halt_countdown = 0; + } + + /* Call interrupt */ + else if (effective_ime && interrupt_queue) { + gb->halted = false; + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->allow_hdma_on_wake) { + gb->hdma_on = true; + } + // TODO: verify the timing! + gb->dma_cycles = 4; + GB_dma_run(gb); + gb->speed_switch_halt_countdown = 0; + uint16_t call_addr = gb->pc; + + cycle_read(gb, gb->pc++); + cycle_oam_bug_pc(gb); + gb->pc--; + GB_trigger_oam_bug(gb, gb->sp); /* Todo: test T-cycle timing */ + cycle_no_access(gb); + + cycle_write(gb, --gb->sp, (gb->pc) >> 8); + interrupt_queue = gb->interrupt_enable; + + if (gb->sp == GB_IO_IF + 0xFF00 + 1) { + gb->sp--; + interrupt_queue &= cycle_write_if(gb, (gb->pc) & 0xFF); + } + else { + cycle_write(gb, --gb->sp, (gb->pc) & 0xFF); + interrupt_queue &= (gb->io_registers[GB_IO_IF]) & 0x1F; + } + + if (interrupt_queue) { + uint8_t interrupt_bit = 0; + while (!(interrupt_queue & 1)) { + interrupt_queue >>= 1; + interrupt_bit++; + } + assert(gb->pending_cycles > 2); + gb->pending_cycles -= 2; + flush_pending_cycles(gb); + gb->pending_cycles = 2; + gb->io_registers[GB_IO_IF] &= ~(1 << interrupt_bit); + gb->pc = interrupt_bit * 8 + 0x40; + } + else { + gb->pc = 0; + } + gb->ime = false; + GB_debugger_call_hook(gb, call_addr); + } + /* Run mode */ + else if (!gb->halted) { + uint8_t opcode = gb->hdma_open_bus = cycle_read(gb, gb->pc++); + if (unlikely(gb->hdma_on)) { + GB_hdma_run(gb); + } + if (unlikely(gb->execution_callback)) { + gb->execution_callback(gb, gb->pc - 1, opcode); + } + if (unlikely(gb->halt_bug)) { + gb->pc--; + gb->halt_bug = false; + } + opcodes[opcode](gb, opcode); + } + + flush_pending_cycles(gb); +} diff --git a/thirdparty/SameBoy-old/Core/sm83_cpu.h b/thirdparty/SameBoy-old/Core/sm83_cpu.h new file mode 100644 index 000000000..1221fd763 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/sm83_cpu.h @@ -0,0 +1,11 @@ +#ifndef sm83_cpu_h +#define sm83_cpu_h +#include "defs.h" +#include + +void GB_cpu_disassemble(GB_gameboy_t *gb, uint16_t pc, uint16_t count); +#ifdef GB_INTERNAL +internal void GB_cpu_run(GB_gameboy_t *gb); +#endif + +#endif /* sm83_cpu_h */ diff --git a/thirdparty/SameBoy-old/Core/sm83_disassembler.c b/thirdparty/SameBoy-old/Core/sm83_disassembler.c new file mode 100644 index 000000000..b3d583630 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/sm83_disassembler.c @@ -0,0 +1,790 @@ +#include +#include +#include "gb.h" + +#define GB_read_memory GB_safe_read_memory + +typedef void opcode_t(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc); + +static void ill(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, ".BYTE $%02x\n", opcode); + (*pc)++; +} + +static void nop(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "NOP\n"); + (*pc)++; +} + +static void stop(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint8_t next = GB_read_memory(gb, (*pc)++); + if (next) { + GB_log(gb, "CORRUPTED STOP (%02x)\n", next); + } + else { + GB_log(gb, "STOP\n"); + } +} + +static char *register_names[] = {"af", "bc", "de", "hl", "sp"}; + +static void ld_rr_d16(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + uint16_t value; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + value = GB_read_memory(gb, (*pc)++); + value |= GB_read_memory(gb, (*pc)++) << 8; + const char *symbol = GB_debugger_name_for_address(gb, value); + if (symbol) { + GB_log(gb, "LD %s, %s ; =$%04x\n", register_names[register_id], symbol, value); + } + else { + GB_log(gb, "LD %s, $%04x\n", register_names[register_id], value); + } +} + +static void ld_drr_a(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + GB_log(gb, "LD [%s], a\n", register_names[register_id]); +} + +static void inc_rr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + GB_log(gb, "INC %s\n", register_names[register_id]); +} + +static void inc_hr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + (*pc)++; + register_id = ((opcode >> 4) + 1) & 0x03; + GB_log(gb, "INC %c\n", register_names[register_id][0]); + +} +static void dec_hr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + (*pc)++; + register_id = ((opcode >> 4) + 1) & 0x03; + GB_log(gb, "DEC %c\n", register_names[register_id][0]); +} + +static void ld_hr_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + (*pc)++; + register_id = ((opcode >> 4) + 1) & 0x03; + GB_log(gb, "LD %c, $%02x\n", register_names[register_id][0], GB_read_memory(gb, (*pc)++)); +} + +static void rlca(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "RLCA\n"); +} + +static void rla(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "RLA\n"); +} + +static void ld_da16_sp(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint16_t addr; + (*pc)++; + addr = GB_read_memory(gb, (*pc)++); + addr |= GB_read_memory(gb, (*pc)++) << 8; + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_log(gb, "LD [%s], sp ; =$%04x\n", symbol, addr); + } + else { + GB_log(gb, "LD [$%04x], sp\n", addr); + } +} + +static void add_hl_rr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + (*pc)++; + register_id = (opcode >> 4) + 1; + GB_log(gb, "ADD hl, %s\n", register_names[register_id]); +} + +static void ld_a_drr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + GB_log(gb, "LD a, [%s]\n", register_names[register_id]); +} + +static void dec_rr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + GB_log(gb, "DEC %s\n", register_names[register_id]); +} + +static void inc_lr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + + GB_log(gb, "INC %c\n", register_names[register_id][1]); +} +static void dec_lr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + + GB_log(gb, "DEC %c\n", register_names[register_id][1]); +} + +static void ld_lr_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = (GB_read_memory(gb, (*pc)++) >> 4) + 1; + + GB_log(gb, "LD %c, $%02x\n", register_names[register_id][1], GB_read_memory(gb, (*pc)++)); +} + +static void rrca(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "RRCA\n"); + (*pc)++; +} + +static void rra(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "RRA\n"); + (*pc)++; +} + +static void jr_r8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = *pc + (int8_t) GB_read_memory(gb, (*pc)) + 1; + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_attributed_log(gb, GB_LOG_UNDERLINE, "JR %s ; =$%04x\n", symbol, addr); + } + else { + GB_attributed_log(gb, GB_LOG_UNDERLINE, "JR $%04x\n", addr); + } + (*pc)++; +} + +static const char *condition_code(uint8_t opcode) +{ + switch ((opcode >> 3) & 0x3) { + case 0: + return "nz"; + case 1: + return "z"; + case 2: + return "nc"; + case 3: + return "c"; + } + + return NULL; +} + +static void jr_cc_r8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = *pc + (int8_t) GB_read_memory(gb, (*pc)) + 1; + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_attributed_log(gb, GB_LOG_DASHED_UNDERLINE, "JR %s, %s ; =$%04x\n", condition_code(opcode), symbol, addr); + } + else { + GB_attributed_log(gb, GB_LOG_DASHED_UNDERLINE, "JR %s, $%04x\n", condition_code(opcode), addr); + } + (*pc)++; +} + +static void daa(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "DAA\n"); + (*pc)++; +} + +static void cpl(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "CPL\n"); + (*pc)++; +} + +static void scf(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "SCF\n"); + (*pc)++; +} + +static void ccf(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "CCF\n"); + (*pc)++; +} + +static void ld_dhli_a(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "LD [hli], a\n"); + (*pc)++; +} + +static void ld_dhld_a(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "LD [hld], a\n"); + (*pc)++; +} + +static void ld_a_dhli(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "LD a, [hli]\n"); + (*pc)++; +} + +static void ld_a_dhld(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "LD a, [hld]\n"); + (*pc)++; +} + +static void inc_dhl(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "INC [hl]\n"); + (*pc)++; +} + +static void dec_dhl(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + GB_log(gb, "DEC [hl]\n"); + (*pc)++; +} + +static void ld_dhl_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "LD [hl], $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static const char *get_src_name(uint8_t opcode) +{ + uint8_t src_register_id; + uint8_t src_low; + src_register_id = ((opcode >> 1) + 1) & 3; + src_low = (opcode & 1); + if (src_register_id == GB_REGISTER_AF) { + return src_low? "a": "[hl]"; + } + if (src_low) { + return register_names[src_register_id] + 1; + } + static const char *high_register_names[] = {"a", "b", "d", "h"}; + return high_register_names[src_register_id]; +} + +static const char *get_dst_name(uint8_t opcode) +{ + uint8_t dst_register_id; + uint8_t dst_low; + dst_register_id = ((opcode >> 4) + 1) & 3; + dst_low = opcode & 8; + if (dst_register_id == GB_REGISTER_AF) { + return dst_low? "a": "[hl]"; + } + if (dst_low) { + return register_names[dst_register_id] + 1; + } + static const char *high_register_names[] = {"a", "b", "d", "h"}; + return high_register_names[dst_register_id]; +} + +static void ld_r_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "LD %s, %s\n", get_dst_name(opcode), get_src_name(opcode)); +} + +static void add_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "ADD %s\n", get_src_name(opcode)); +} + +static void adc_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "ADC %s\n", get_src_name(opcode)); +} + +static void sub_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SUB %s\n", get_src_name(opcode)); +} + +static void sbc_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SBC %s\n", get_src_name(opcode)); +} + +static void and_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "AND %s\n", get_src_name(opcode)); +} + +static void xor_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "XOR %s\n", get_src_name(opcode)); +} + +static void or_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "OR %s\n", get_src_name(opcode)); +} + +static void cp_a_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "CP %s\n", get_src_name(opcode)); +} + +static void halt(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "HALT\n"); +} + +static void ret_cc(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_attributed_log(gb, GB_LOG_DASHED_UNDERLINE, "RET %s\n", condition_code(opcode)); +} + +static void pop_rr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = ((GB_read_memory(gb, (*pc)++) >> 4) + 1) & 3; + GB_log(gb, "POP %s\n", register_names[register_id]); +} + +static void jp_cc_a16(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = GB_read_memory(gb, *pc) | (GB_read_memory(gb, *pc + 1) << 8); + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_attributed_log(gb, GB_LOG_DASHED_UNDERLINE, "JP %s, %s ; =$%04x\n", condition_code(opcode), symbol, addr); + } + else { + GB_attributed_log(gb, GB_LOG_DASHED_UNDERLINE, "JP %s, $%04x\n", condition_code(opcode), addr); + } + (*pc) += 2; +} + +static void jp_a16(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = GB_read_memory(gb, *pc) | (GB_read_memory(gb, *pc + 1) << 8); + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_log(gb, "JP %s ; =$%04x\n", symbol, addr); + } + else { + GB_log(gb, "JP $%04x\n", addr); + } + (*pc) += 2; +} + +static void call_cc_a16(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = GB_read_memory(gb, *pc) | (GB_read_memory(gb, *pc + 1) << 8); + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_log(gb, "CALL %s, %s ; =$%04x\n", condition_code(opcode), symbol, addr); + } + else { + GB_log(gb, "CALL %s, $%04x\n", condition_code(opcode), addr); + } + (*pc) += 2; +} + +static void push_rr(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t register_id; + register_id = ((GB_read_memory(gb, (*pc)++) >> 4) + 1) & 3; + GB_log(gb, "PUSH %s\n", register_names[register_id]); +} + +static void add_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "ADD $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void adc_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "ADC $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void sub_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SUB $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void sbc_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SBC $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void and_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "AND $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void xor_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "XOR $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void or_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "OR $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void cp_a_d8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "CP $%02x\n", GB_read_memory(gb, (*pc)++)); +} + +static void rst(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "RST $%02x\n", opcode ^ 0xC7); + +} + +static void ret(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_attributed_log(gb, GB_LOG_UNDERLINE, "RET\n"); +} + +static void reti(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_attributed_log(gb, GB_LOG_UNDERLINE, "RETI\n"); +} + +static void call_a16(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = GB_read_memory(gb, *pc) | (GB_read_memory(gb, *pc + 1) << 8); + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_log(gb, "CALL %s ; =$%04x\n", symbol, addr); + } + else { + GB_log(gb, "CALL $%04x\n", addr); + } + (*pc) += 2; +} + +static void ld_da8_a(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint8_t addr = GB_read_memory(gb, (*pc)++); + const char *symbol = GB_debugger_name_for_address(gb, 0xFF00 + addr); + if (symbol) { + GB_log(gb, "LDH [%s & $FF], a ; =$%02x\n", symbol, addr); + } + else { + GB_log(gb, "LDH [$%02x], a\n", addr); + } +} + +static void ld_a_da8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint8_t addr = GB_read_memory(gb, (*pc)++); + const char *symbol = GB_debugger_name_for_address(gb, 0xFF00 + addr); + if (symbol) { + GB_log(gb, "LDH a, [%s & $FF] ; =$%02x\n", symbol, addr); + } + else { + GB_log(gb, "LDH a, [$%02x]\n", addr); + } +} + +static void ld_dc_a(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "LDH [c], a\n"); +} + +static void ld_a_dc(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "LDH a, [c]\n"); +} + +static void add_sp_r8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + int8_t temp = GB_read_memory(gb, (*pc)++); + GB_log(gb, "ADD SP, %s$%02x\n", temp < 0? "-" : "", temp < 0? -temp : temp); +} + +static void jp_hl(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "JP hl\n"); +} + +static void ld_da16_a(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = GB_read_memory(gb, *pc) | (GB_read_memory(gb, *pc + 1) << 8); + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_log(gb, "LD [%s], a ; =$%04x\n", symbol, addr); + } + else { + GB_log(gb, "LD [$%04x], a\n", addr); + } + (*pc) += 2; +} + +static void ld_a_da16(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + uint16_t addr = GB_read_memory(gb, *pc) | (GB_read_memory(gb, *pc + 1) << 8); + const char *symbol = GB_debugger_name_for_address(gb, addr); + if (symbol) { + GB_log(gb, "LD a, [%s] ; =$%04x\n", symbol, addr); + } + else { + GB_log(gb, "LD a, [$%04x]\n", addr); + } + (*pc) += 2; +} + +static void di(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "DI\n"); +} + +static void ei(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "EI\n"); +} + +static void ld_hl_sp_r8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + int8_t temp = GB_read_memory(gb, (*pc)++); + GB_log(gb, "LD hl, sp, %s$%02x\n", temp < 0? "-" : "", temp < 0? -temp : temp); +} + +static void ld_sp_hl(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "LD sp, hl\n"); +} + +static void rlc_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "RLC %s\n", get_src_name(opcode)); +} + +static void rrc_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "RRC %s\n", get_src_name(opcode)); +} + +static void rl_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "RL %s\n", get_src_name(opcode)); +} + +static void rr_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "RR %s\n", get_src_name(opcode)); +} + +static void sla_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SLA %s\n", get_src_name(opcode)); +} + +static void sra_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SRA %s\n", get_src_name(opcode)); +} + +static void srl_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SRL %s\n", get_src_name(opcode)); +} + +static void swap_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + (*pc)++; + GB_log(gb, "SWAP %s\n", get_src_name(opcode)); +} + +static void bit_r(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + uint8_t bit; + (*pc)++; + bit = ((opcode >> 3) & 7); + if ((opcode & 0xC0) == 0x40) { /* Bit */ + GB_log(gb, "BIT %s, %d\n", get_src_name(opcode), bit); + } + else if ((opcode & 0xC0) == 0x80) { /* res */ + GB_log(gb, "RES %s, %d\n", get_src_name(opcode), bit); + } + else if ((opcode & 0xC0) == 0xC0) { /* set */ + GB_log(gb, "SET %s, %d\n", get_src_name(opcode), bit); + } +} + +static void cb_prefix(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) +{ + opcode = GB_read_memory(gb, ++*pc); + switch (opcode >> 3) { + case 0: + rlc_r(gb, opcode, pc); + break; + case 1: + rrc_r(gb, opcode, pc); + break; + case 2: + rl_r(gb, opcode, pc); + break; + case 3: + rr_r(gb, opcode, pc); + break; + case 4: + sla_r(gb, opcode, pc); + break; + case 5: + sra_r(gb, opcode, pc); + break; + case 6: + swap_r(gb, opcode, pc); + break; + case 7: + srl_r(gb, opcode, pc); + break; + default: + bit_r(gb, opcode, pc); + break; + } +} + +static opcode_t *opcodes[256] = { + /* X0 X1 X2 X3 X4 X5 X6 X7 */ + /* X8 X9 Xa Xb Xc Xd Xe Xf */ + nop, ld_rr_d16, ld_drr_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, rlca, /* 0X */ + ld_da16_sp, add_hl_rr, ld_a_drr, dec_rr, inc_lr, dec_lr, ld_lr_d8, rrca, + stop, ld_rr_d16, ld_drr_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, rla, /* 1X */ + jr_r8, add_hl_rr, ld_a_drr, dec_rr, inc_lr, dec_lr, ld_lr_d8, rra, + jr_cc_r8, ld_rr_d16, ld_dhli_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, daa, /* 2X */ + jr_cc_r8, add_hl_rr, ld_a_dhli, dec_rr, inc_lr, dec_lr, ld_lr_d8, cpl, + jr_cc_r8, ld_rr_d16, ld_dhld_a, inc_rr, inc_dhl, dec_dhl, ld_dhl_d8, scf, /* 3X */ + jr_cc_r8, add_hl_rr, ld_a_dhld, dec_rr, inc_hr, dec_hr, ld_hr_d8, ccf, + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, /* 4X */ + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, /* 5X */ + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, /* 6X */ + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, halt, ld_r_r, /* 7X */ + ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, ld_r_r, + add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, add_a_r, /* 8X */ + adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, adc_a_r, + sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, sub_a_r, /* 9X */ + sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, sbc_a_r, + and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, and_a_r, /* aX */ + xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, xor_a_r, + or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, or_a_r, /* bX */ + cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, cp_a_r, + ret_cc, pop_rr, jp_cc_a16, jp_a16, call_cc_a16,push_rr, add_a_d8, rst, /* cX */ + ret_cc, ret, jp_cc_a16, cb_prefix, call_cc_a16,call_a16, adc_a_d8, rst, + ret_cc, pop_rr, jp_cc_a16, ill, call_cc_a16,push_rr, sub_a_d8, rst, /* dX */ + ret_cc, reti, jp_cc_a16, ill, call_cc_a16,ill, sbc_a_d8, rst, + ld_da8_a, pop_rr, ld_dc_a, ill, ill, push_rr, and_a_d8, rst, /* eX */ + add_sp_r8, jp_hl, ld_da16_a, ill, ill, ill, xor_a_d8, rst, + ld_a_da8, pop_rr, ld_a_dc, di, ill, push_rr, or_a_d8, rst, /* fX */ + ld_hl_sp_r8,ld_sp_hl, ld_a_da16, ei, ill, ill, cp_a_d8, rst, +}; + + + +void GB_cpu_disassemble(GB_gameboy_t *gb, uint16_t pc, uint16_t count) +{ + const GB_bank_symbol_t *function_symbol = GB_debugger_find_symbol(gb, pc); + + if (function_symbol && pc - function_symbol->addr > 0x1000) { + function_symbol = NULL; + } + + if (function_symbol && pc != function_symbol->addr) { + GB_log(gb, "%s:\n", function_symbol->name); + } + + uint16_t current_function = function_symbol? function_symbol->addr : 0; + + while (count--) { + function_symbol = GB_debugger_find_symbol(gb, pc); + if (function_symbol && function_symbol->addr == pc) { + if (current_function != function_symbol->addr) { + GB_log(gb, "\n"); + } + GB_log(gb, "%s:\n", function_symbol->name); + } + if (function_symbol) { + GB_log(gb, "%s%04x <+%03x>: ", pc == gb->pc? " ->": " ", pc, pc - function_symbol->addr); + } + else { + GB_log(gb, "%s%04x: ", pc == gb->pc? " ->": " ", pc); + } + uint8_t opcode = GB_read_memory(gb, pc); + opcodes[opcode](gb, opcode, &pc); + } +} diff --git a/thirdparty/SameBoy-old/Core/symbol_hash.c b/thirdparty/SameBoy-old/Core/symbol_hash.c new file mode 100644 index 000000000..62ec52a6d --- /dev/null +++ b/thirdparty/SameBoy-old/Core/symbol_hash.c @@ -0,0 +1,111 @@ +#include "gb.h" +#include +#include +#include +#include + +static size_t map_find_symbol_index(GB_symbol_map_t *map, uint16_t addr) +{ + if (!map->symbols) { + return 0; + } + ssize_t min = 0; + ssize_t max = map->n_symbols; + while (min < max) { + size_t pivot = (min + max) / 2; + if (map->symbols[pivot].addr == addr) return pivot; + if (map->symbols[pivot].addr > addr) { + max = pivot; + } + else { + min = pivot + 1; + } + } + return (size_t) min; +} + +GB_bank_symbol_t *GB_map_add_symbol(GB_symbol_map_t *map, uint16_t addr, const char *name) +{ + size_t index = map_find_symbol_index(map, addr); + + map->symbols = realloc(map->symbols, (map->n_symbols + 1) * sizeof(map->symbols[0])); + memmove(&map->symbols[index + 1], &map->symbols[index], (map->n_symbols - index) * sizeof(map->symbols[0])); + map->symbols[index].addr = addr; + map->symbols[index].name = strdup(name); + map->n_symbols++; + return &map->symbols[index]; +} + +const GB_bank_symbol_t *GB_map_find_symbol(GB_symbol_map_t *map, uint16_t addr) +{ + if (!map) return NULL; + size_t index = map_find_symbol_index(map, addr); + if (index >= map->n_symbols || map->symbols[index].addr != addr) { + index--; + } + if (index < map->n_symbols) { + while (index && map->symbols[index].addr == map->symbols[index - 1].addr) { + index--; + } + return &map->symbols[index]; + } + return NULL; +} + +GB_symbol_map_t *GB_map_alloc(void) +{ + GB_symbol_map_t *map = malloc(sizeof(*map)); + memset(map, 0, sizeof(*map)); + return map; +} + +void GB_map_free(GB_symbol_map_t *map) +{ + for (unsigned i = 0; i < map->n_symbols; i++) { + free(map->symbols[i].name); + } + + if (map->symbols) { + free(map->symbols); + } + + free(map); +} + +static unsigned hash_name(const char *name) +{ + unsigned r = 0; + while (*name) { + r <<= 1; + if (r & 0x400) { + r ^= 0x401; + } + r += (unsigned char)*(name++); + } + + return r & 0x3FF; +} + +void GB_reversed_map_add_symbol(GB_reversed_symbol_map_t *map, uint16_t bank, GB_bank_symbol_t *bank_symbol) +{ + unsigned hash = hash_name(bank_symbol->name); + GB_symbol_t *symbol = malloc(sizeof(*symbol)); + symbol->name = bank_symbol->name; + symbol->addr = bank_symbol->addr; + symbol->bank = bank; + symbol->next = map->buckets[hash]; + map->buckets[hash] = symbol; +} + +const GB_symbol_t *GB_reversed_map_find_symbol(GB_reversed_symbol_map_t *map, const char *name) +{ + unsigned hash = hash_name(name); + GB_symbol_t *symbol = map->buckets[hash]; + + while (symbol) { + if (strcmp(symbol->name, name) == 0) return symbol; + symbol = symbol->next; + } + + return NULL; +} diff --git a/thirdparty/SameBoy-old/Core/symbol_hash.h b/thirdparty/SameBoy-old/Core/symbol_hash.h new file mode 100644 index 000000000..d0633128d --- /dev/null +++ b/thirdparty/SameBoy-old/Core/symbol_hash.h @@ -0,0 +1,38 @@ +#ifndef symbol_hash_h +#define symbol_hash_h + +#include +#include +#include + +typedef struct { + char *name; + uint16_t addr; +} GB_bank_symbol_t; + +typedef struct GB_symbol_s { + struct GB_symbol_s *next; + const char *name; + uint16_t bank; + uint16_t addr; +} GB_symbol_t; + +typedef struct { + GB_bank_symbol_t *symbols; + size_t n_symbols; +} GB_symbol_map_t; + +typedef struct { + GB_symbol_t *buckets[0x400]; +} GB_reversed_symbol_map_t; + +#ifdef GB_INTERNAL +internal void GB_reversed_map_add_symbol(GB_reversed_symbol_map_t *map, uint16_t bank, GB_bank_symbol_t *symbol); +internal const GB_symbol_t *GB_reversed_map_find_symbol(GB_reversed_symbol_map_t *map, const char *name); +internal GB_bank_symbol_t *GB_map_add_symbol(GB_symbol_map_t *map, uint16_t addr, const char *name); +internal const GB_bank_symbol_t *GB_map_find_symbol(GB_symbol_map_t *map, uint16_t addr); +internal GB_symbol_map_t *GB_map_alloc(void); +internal void GB_map_free(GB_symbol_map_t *map); +#endif + +#endif /* symbol_hash_h */ diff --git a/thirdparty/SameBoy-old/Core/timing.c b/thirdparty/SameBoy-old/Core/timing.c new file mode 100644 index 000000000..67cd996fe --- /dev/null +++ b/thirdparty/SameBoy-old/Core/timing.c @@ -0,0 +1,483 @@ +#include "gb.h" +#ifdef _WIN32 +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0500 +#endif +#include +#else +#include +#endif + +static const unsigned TAC_TRIGGER_BITS[] = {512, 8, 32, 128}; + +#ifndef GB_DISABLE_TIMEKEEPING +static int64_t get_nanoseconds(void) +{ +#ifndef _WIN32 + struct timeval now; + gettimeofday(&now, NULL); + return (now.tv_usec) * 1000 + now.tv_sec * 1000000000L; +#else + FILETIME time; + GetSystemTimeAsFileTime(&time); + return (((int64_t)time.dwHighDateTime << 32) | time.dwLowDateTime) * 100L; +#endif +} + +static void nsleep(uint64_t nanoseconds) +{ +#ifndef _WIN32 + struct timespec sleep = {0, nanoseconds}; + nanosleep(&sleep, NULL); +#else + HANDLE timer; + LARGE_INTEGER time; + timer = CreateWaitableTimer(NULL, true, NULL); + time.QuadPart = -(nanoseconds / 100L); + SetWaitableTimer(timer, &time, 0, NULL, NULL, false); + WaitForSingleObject(timer, INFINITE); + CloseHandle(timer); +#endif +} + +bool GB_timing_sync_turbo(GB_gameboy_t *gb) +{ + if (!gb->turbo_dont_skip) { + int64_t nanoseconds = get_nanoseconds(); + if (nanoseconds <= gb->last_sync + (1000000000LL * LCDC_PERIOD / GB_get_clock_rate(gb))) { + return true; + } + gb->last_sync = nanoseconds; + } + return false; +} + +void GB_timing_sync(GB_gameboy_t *gb) +{ + /* Prevent syncing if not enough time has passed.*/ + if (gb->cycles_since_last_sync < LCDC_PERIOD / 3) return; + + if (gb->turbo) { + gb->cycles_since_last_sync = 0; + if (gb->update_input_hint_callback) { + gb->update_input_hint_callback(gb); + } + return; + } + + uint64_t target_nanoseconds = gb->cycles_since_last_sync * 1000000000LL / 2 / GB_get_clock_rate(gb); /* / 2 because we use 8MHz units */ + int64_t nanoseconds = get_nanoseconds(); + int64_t time_to_sleep = target_nanoseconds + gb->last_sync - nanoseconds; + if (time_to_sleep > 0 && time_to_sleep < LCDC_PERIOD * 1200000000LL / GB_get_clock_rate(gb)) { // +20% to be more forgiving + nsleep(time_to_sleep); + gb->last_sync += target_nanoseconds; + } + else { + if (time_to_sleep < 0 && -time_to_sleep < LCDC_PERIOD * 1200000000LL / GB_get_clock_rate(gb)) { + // We're running a bit too slow, but the difference is small enough, + // just skip this sync and let it even out + return; + } + gb->last_sync = nanoseconds; + } + + gb->cycles_since_last_sync = 0; + if (gb->update_input_hint_callback) { + gb->update_input_hint_callback(gb); + } +} +#else + +bool GB_timing_sync_turbo(GB_gameboy_t *gb) +{ + return false; +} + +void GB_timing_sync(GB_gameboy_t *gb) +{ + if (gb->cycles_since_last_sync < LCDC_PERIOD / 3) return; + gb->cycles_since_last_sync = 0; + + gb->cycles_since_last_sync = 0; + if (gb->update_input_hint_callback) { + gb->update_input_hint_callback(gb); + } + return; +} + +#endif + +#define IR_DECAY 31500 +#define IR_WARMUP 19900 +#define IR_THRESHOLD 240 +#define IR_MAX IR_THRESHOLD * 2 + IR_DECAY + 268 + +static void ir_run(GB_gameboy_t *gb, uint32_t cycles) +{ + /* TODO: the way this thing works makes the CGB IR port behave inaccurately when used together with HUC1/3 IR ports*/ + if ((gb->model > GB_MODEL_CGB_E || !gb->cgb_mode) && gb->cartridge_type->mbc_type != GB_HUC1 && gb->cartridge_type->mbc_type != GB_HUC3) return; + bool is_sensing = (gb->io_registers[GB_IO_RP] & 0xC0) == 0xC0 || + (gb->cartridge_type->mbc_type == GB_HUC1 && gb->huc1.ir_mode) || + (gb->cartridge_type->mbc_type == GB_HUC3 && gb->huc3.mode == 0xE); + if (is_sensing && (gb->infrared_input || gb->cart_ir || (gb->io_registers[GB_IO_RP] & 1))) { + gb->ir_sensor += cycles; + if (gb->ir_sensor > IR_MAX) { + gb->ir_sensor = IR_MAX; + } + + gb->effective_ir_input = gb->ir_sensor >= IR_WARMUP + IR_THRESHOLD && gb->ir_sensor <= IR_WARMUP + IR_THRESHOLD + IR_DECAY; + } + else { + unsigned target = is_sensing? IR_WARMUP : 0; + if (gb->ir_sensor < target) { + gb->ir_sensor += cycles; + } + else if (gb->ir_sensor <= target + cycles) { + gb->ir_sensor = target; + } + else { + gb->ir_sensor -= cycles; + } + gb->effective_ir_input = false; + } + +} + +static void advance_tima_state_machine(GB_gameboy_t *gb) +{ + if (gb->tima_reload_state == GB_TIMA_RELOADED) { + gb->tima_reload_state = GB_TIMA_RUNNING; + } + else if (gb->tima_reload_state == GB_TIMA_RELOADING) { + gb->io_registers[GB_IO_IF] |= 4; + gb->tima_reload_state = GB_TIMA_RELOADED; + } +} + +static void increase_tima(GB_gameboy_t *gb) +{ + gb->io_registers[GB_IO_TIMA]++; + if (gb->io_registers[GB_IO_TIMA] == 0) { + gb->io_registers[GB_IO_TIMA] = gb->io_registers[GB_IO_TMA]; + gb->tima_reload_state = GB_TIMA_RELOADING; + } +} + +void GB_serial_master_edge(GB_gameboy_t *gb) +{ + if (unlikely(gb->printer_callback && (gb->printer.command_state || gb->printer.bits_received))) { + gb->printer.idle_time += 1 << gb->serial_mask; + } + + gb->serial_master_clock ^= true; + + if (!gb->serial_master_clock && (gb->io_registers[GB_IO_SC] & 0x81) == 0x81) { + gb->serial_count++; + if (gb->serial_count == 8) { + gb->serial_count = 0; + gb->io_registers[GB_IO_SC] &= ~0x80; + gb->io_registers[GB_IO_IF] |= 8; + } + + gb->io_registers[GB_IO_SB] <<= 1; + + if (gb->serial_transfer_bit_end_callback) { + gb->io_registers[GB_IO_SB] |= gb->serial_transfer_bit_end_callback(gb); + } + else { + gb->io_registers[GB_IO_SB] |= 1; + } + + if (gb->serial_count) { + /* Still more bits to send */ + if (gb->serial_transfer_bit_start_callback) { + gb->serial_transfer_bit_start_callback(gb, gb->io_registers[GB_IO_SB] & 0x80); + } + } + + } +} + + +void GB_set_internal_div_counter(GB_gameboy_t *gb, uint16_t value) +{ + /* TIMA increases when a specific high-bit becomes a low-bit. */ + uint16_t triggers = gb->div_counter & ~value; + if ((gb->io_registers[GB_IO_TAC] & 4) && (triggers & TAC_TRIGGER_BITS[gb->io_registers[GB_IO_TAC] & 3])) { + increase_tima(gb); + } + + if (triggers & gb->serial_mask) { + GB_serial_master_edge(gb); + } + + /* TODO: Can switching to double speed mode trigger an event? */ + uint16_t apu_bit = gb->cgb_double_speed? 0x2000 : 0x1000; + if (triggers & apu_bit) { + GB_apu_div_event(gb); + } + else { + uint16_t secondary_triggers = ~gb->div_counter & value; + if (secondary_triggers & apu_bit) { + GB_apu_div_secondary_event(gb); + } + } + gb->div_counter = value; +} + +static void timers_run(GB_gameboy_t *gb, uint8_t cycles) +{ + if (gb->stopped) { + if (GB_is_cgb(gb)) { + gb->apu.apu_cycles += 4 << !gb->cgb_double_speed; + } + return; + } + + GB_STATE_MACHINE(gb, div, cycles, 1) { + GB_STATE(gb, div, 1); + GB_STATE(gb, div, 2); + } + + GB_SLEEP(gb, div, 1, 3); + while (true) { + advance_tima_state_machine(gb); + GB_set_internal_div_counter(gb, gb->div_counter + 4); + gb->apu.apu_cycles += 4 << !gb->cgb_double_speed; + GB_SLEEP(gb, div, 2, 4); + } +} + +void GB_set_rtc_mode(GB_gameboy_t *gb, GB_rtc_mode_t mode) +{ + if (gb->rtc_mode != mode) { + gb->rtc_mode = mode; + gb->rtc_cycles = 0; + gb->last_rtc_second = time(NULL); + } +} + + +void GB_set_rtc_multiplier(GB_gameboy_t *gb, double multiplier) +{ + if (multiplier == 1) { + gb->rtc_second_length = 0; + return; + } + + gb->rtc_second_length = GB_get_unmultiplied_clock_rate(gb) * 2 * multiplier; +} + +static void rtc_run(GB_gameboy_t *gb, uint8_t cycles) +{ + if (likely(gb->cartridge_type->mbc_type != GB_HUC3 && !gb->cartridge_type->has_rtc)) return; + gb->rtc_cycles += cycles; + time_t current_time = 0; + uint32_t rtc_second_length = unlikely(gb->rtc_second_length)? gb->rtc_second_length : GB_get_unmultiplied_clock_rate(gb) * 2; + + switch (gb->rtc_mode) { + case GB_RTC_MODE_SYNC_TO_HOST: + // Sync in a 1/32s resolution + if (gb->rtc_cycles < GB_get_unmultiplied_clock_rate(gb) / 16) return; + gb->rtc_cycles -= GB_get_unmultiplied_clock_rate(gb) / 16; + current_time = time(NULL); + break; + case GB_RTC_MODE_ACCURATE: + if (gb->cartridge_type->mbc_type != GB_HUC3 && (gb->rtc_real.high & 0x40)) { + gb->rtc_cycles -= cycles; + return; + } + if (gb->rtc_cycles < rtc_second_length) return; + gb->rtc_cycles -= rtc_second_length; + current_time = gb->last_rtc_second + 1; + break; + } + + if (gb->cartridge_type->mbc_type == GB_HUC3) { + while (gb->last_rtc_second / 60 < current_time / 60) { + gb->last_rtc_second += 60; + gb->huc3.minutes++; + if (gb->huc3.minutes == 60 * 24) { + gb->huc3.days++; + gb->huc3.minutes = 0; + } + } + return; + } + bool running = false; + if (gb->cartridge_type->mbc_type == GB_TPP1) { + running = gb->tpp1_mr4 & 0x4; + } + else { + running = (gb->rtc_real.high & 0x40) == 0; + } + + if (running) { /* is timer running? */ + while (gb->last_rtc_second + 60 * 60 * 24 < current_time) { + gb->last_rtc_second += 60 * 60 * 24; + if (gb->cartridge_type->mbc_type == GB_TPP1) { + if (++gb->rtc_real.tpp1.weekday == 7) { + gb->rtc_real.tpp1.weekday = 0; + if (++gb->rtc_real.tpp1.weeks == 0) { + gb->tpp1_mr4 |= 8; /* Overflow bit */ + } + } + } + else if (++gb->rtc_real.days == 0) { + if (gb->rtc_real.high & 1) { /* Bit 8 of days*/ + gb->rtc_real.high |= 0x80; /* Overflow bit */ + } + + gb->rtc_real.high ^= 1; + } + } + + while (gb->last_rtc_second < current_time) { + gb->last_rtc_second++; + if (++gb->rtc_real.seconds != 60) continue; + gb->rtc_real.seconds = 0; + + if (++gb->rtc_real.minutes != 60) continue; + gb->rtc_real.minutes = 0; + + if (gb->cartridge_type->mbc_type == GB_TPP1) { + if (++gb->rtc_real.tpp1.hours != 24) continue; + gb->rtc_real.tpp1.hours = 0; + if (++gb->rtc_real.tpp1.weekday != 7) continue; + gb->rtc_real.tpp1.weekday = 0; + if (++gb->rtc_real.tpp1.weeks == 0) { + gb->tpp1_mr4 |= 8; /* Overflow bit */ + } + } + else { + if (++gb->rtc_real.hours != 24) continue; + gb->rtc_real.hours = 0; + + if (++gb->rtc_real.days != 0) continue; + + if (gb->rtc_real.high & 1) { /* Bit 8 of days*/ + gb->rtc_real.high |= 0x80; /* Overflow bit */ + } + + gb->rtc_real.high ^= 1; + } + } + } +} + +static void camera_run(GB_gameboy_t *gb, uint8_t cycles) +{ + /* Do we have a camera? */ + if (likely(gb->cartridge_type->mbc_type != GB_CAMERA)) return; + + /* The camera mapper uses the PHI pin to clock itself */ + + /* PHI does not run in halt nor stop mode */ + if (unlikely(gb->halted || gb->stopped)) return; + + /* Only every other PHI is used (as the camera wants a 512KiHz clock) */ + gb->camera_alignment += cycles; + + /* Is the camera processing an image? */ + if (likely(gb->camera_countdown == 0)) return; + + gb->camera_countdown -= cycles; + if (gb->camera_countdown <= 0) { + gb->camera_countdown = 0; + GB_camera_updated(gb); + } +} + + +void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles) +{ + if (unlikely(gb->speed_switch_countdown)) { + if (gb->speed_switch_countdown == cycles) { + gb->cgb_double_speed ^= true; + gb->speed_switch_countdown = 0; + } + else if (gb->speed_switch_countdown > cycles) { + gb->speed_switch_countdown -= cycles; + } + else { + uint8_t old_cycles = gb->speed_switch_countdown; + cycles -= old_cycles; + gb->speed_switch_countdown = 0; + GB_advance_cycles(gb, old_cycles); + gb->cgb_double_speed ^= true; + } + } + gb->apu.pcm_mask[0] = gb->apu.pcm_mask[1] = 0xFF; // Sort of hacky, but too many cross-component interactions to do it right + // Affected by speed boost + gb->dma_cycles = cycles; + + timers_run(gb, cycles); + camera_run(gb, cycles); + + if (unlikely(gb->speed_switch_halt_countdown)) { + gb->speed_switch_halt_countdown -= cycles; + if (gb->speed_switch_halt_countdown <= 0) { + gb->speed_switch_halt_countdown = 0; + gb->halted = false; + } + } + + gb->debugger_ticks += cycles; + + if (gb->speed_switch_freeze) { + if (gb->speed_switch_freeze >= cycles) { + gb->speed_switch_freeze -= cycles; + return; + } + cycles -= gb->speed_switch_freeze; + gb->speed_switch_freeze = 0; + } + + if (unlikely(!gb->cgb_double_speed)) { + cycles <<= 1; + } + + gb->absolute_debugger_ticks += cycles; + + // Not affected by speed boost + if (likely(gb->io_registers[GB_IO_LCDC] & 0x80)) { + gb->double_speed_alignment += cycles; + } + gb->apu_output.sample_cycles += cycles * gb->apu_output.sample_rate; + gb->cycles_since_last_sync += cycles; + gb->cycles_since_run += cycles; + + gb->rumble_on_cycles += gb->rumble_strength & 3; + gb->rumble_off_cycles += (gb->rumble_strength & 3) ^ 3; + + GB_joypad_run(gb, cycles); + GB_apu_run(gb, false); + GB_display_run(gb, cycles, false); + if (unlikely(!gb->stopped)) { // TODO: Verify what happens in STOP mode + GB_dma_run(gb); + } + ir_run(gb, cycles); + rtc_run(gb, cycles); +} + +/* + This glitch is based on the expected results of mooneye-gb rapid_toggle test. + This glitch happens because how TIMA is increased, see GB_set_internal_div_counter. + According to GiiBiiAdvance, GBC's behavior is different, but this was not tested or implemented. +*/ +void GB_emulate_timer_glitch(GB_gameboy_t *gb, uint8_t old_tac, uint8_t new_tac) +{ + /* Glitch only happens when old_tac is enabled. */ + if (!(old_tac & 4)) return; + + unsigned old_clocks = TAC_TRIGGER_BITS[old_tac & 3]; + unsigned new_clocks = TAC_TRIGGER_BITS[new_tac & 3]; + + /* The bit used for overflow testing must have been 1 */ + if (gb->div_counter & old_clocks) { + /* And now either the timer must be disabled, or the new bit used for overflow testing be 0. */ + if (!(new_tac & 4) || !(gb->div_counter & new_clocks)) { + increase_tima(gb); + } + } +} diff --git a/thirdparty/SameBoy-old/Core/timing.h b/thirdparty/SameBoy-old/Core/timing.h new file mode 100644 index 000000000..8cc82e322 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/timing.h @@ -0,0 +1,66 @@ +#ifndef timing_h +#define timing_h +#include "defs.h" + +typedef enum { + GB_RTC_MODE_SYNC_TO_HOST, + GB_RTC_MODE_ACCURATE, +} GB_rtc_mode_t; + +/* RTC emulation mode */ +void GB_set_rtc_mode(GB_gameboy_t *gb, GB_rtc_mode_t mode); + +/* Speed multiplier for the RTC, mostly for TAS syncing */ +void GB_set_rtc_multiplier(GB_gameboy_t *gb, double multiplier); + +#ifdef GB_INTERNAL +internal void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles); +internal void GB_emulate_timer_glitch(GB_gameboy_t *gb, uint8_t old_tac, uint8_t new_tac); +internal bool GB_timing_sync_turbo(GB_gameboy_t *gb); /* Returns true if should skip frame */ +internal void GB_timing_sync(GB_gameboy_t *gb); +internal void GB_set_internal_div_counter(GB_gameboy_t *gb, uint16_t value); +internal void GB_serial_master_edge(GB_gameboy_t *gb); +enum { + GB_TIMA_RUNNING = 0, + GB_TIMA_RELOADING = 1, + GB_TIMA_RELOADED = 2 +}; + + +#define GB_SLEEP(gb, unit, state, cycles) do {\ + (gb)->unit##_cycles -= (cycles) * __state_machine_divisor; \ + if (unlikely((gb)->unit##_cycles <= 0)) {\ + (gb)->unit##_state = state;\ + return;\ + unit##state:; \ + }\ +} while (0) + +#define GB_BATCHPOINT(gb, unit, state, cycles) do {\ +unit##state:; \ +if (likely(__state_machine_allow_batching && (gb)->unit##_cycles < (cycles * 2))) {\ + (gb)->unit##_state = state;\ + return;\ +}\ +} while (0) + +#define GB_BATCHED_CYCLES(gb, unit) ((gb)->unit##_cycles / __state_machine_divisor) + +#define GB_STATE_MACHINE(gb, unit, cycles, divisor) \ +static const int __state_machine_divisor = divisor;\ +(gb)->unit##_cycles += cycles; \ +if ((gb)->unit##_cycles <= 0) {\ + return;\ +}\ +switch ((gb)->unit##_state) +#endif + +#define GB_BATCHABLE_STATE_MACHINE(gb, unit, cycles, divisor, allow_batching) \ +const bool __state_machine_allow_batching = (allow_batching); \ +GB_STATE_MACHINE(gb, unit, cycles, divisor) + +#define GB_STATE(gb, unit, state) case state: goto unit##state + +#define GB_UNIT(unit) int32_t unit##_cycles, unit##_state + +#endif /* timing_h */ diff --git a/thirdparty/SameBoy-old/Core/workboy.c b/thirdparty/SameBoy-old/Core/workboy.c new file mode 100644 index 000000000..3b103796f --- /dev/null +++ b/thirdparty/SameBoy-old/Core/workboy.c @@ -0,0 +1,169 @@ +#include "gb.h" +#include + +static inline uint8_t int_to_bcd(uint8_t i) +{ + return (i % 10) + ((i / 10) << 4); +} + +static inline uint8_t bcd_to_int(uint8_t i) +{ + return (i & 0xF) + (i >> 4) * 10; +} + +/* + Note: This peripheral was never released. This is a hacky software reimplementation of it that allows + reaccessing all of the features present in Workboy's ROM. Some of the implementation details are + obviously wrong, but without access to the actual hardware, this is the best I can do. +*/ + +static void serial_start(GB_gameboy_t *gb, bool bit_received) +{ + gb->workboy.byte_being_received <<= 1; + gb->workboy.byte_being_received |= bit_received; + gb->workboy.bits_received++; + if (gb->workboy.bits_received == 8) { + gb->workboy.byte_to_send = 0; + if (gb->workboy.mode != 'W' && gb->workboy.byte_being_received == 'R') { + gb->workboy.byte_to_send = 'D'; + gb->workboy.key = GB_WORKBOY_NONE; + gb->workboy.mode = gb->workboy.byte_being_received; + gb->workboy.buffer_index = 1; + + time_t time = gb->workboy_get_time_callback(gb); + struct tm tm; + tm = *localtime(&time); + memset(gb->workboy.buffer, 0, sizeof(gb->workboy.buffer)); + + gb->workboy.buffer[0] = 4; // Unknown, unused, but appears to be expected to be 4 + gb->workboy.buffer[2] = int_to_bcd(tm.tm_sec); // Seconds, BCD + gb->workboy.buffer[3] = int_to_bcd(tm.tm_min); // Minutes, BCD + gb->workboy.buffer[4] = int_to_bcd(tm.tm_hour); // Hours, BCD + gb->workboy.buffer[5] = int_to_bcd(tm.tm_mday); // Days, BCD. Upper most 2 bits are added to Year for some reason + gb->workboy.buffer[6] = int_to_bcd(tm.tm_mon + 1); // Months, BCD + gb->workboy.buffer[0xF] = tm.tm_year; // Years, plain number, since 1900 + + } + else if (gb->workboy.mode != 'W' && gb->workboy.byte_being_received == 'W') { + gb->workboy.byte_to_send = 'D'; // It is actually unknown what this value should be + gb->workboy.key = GB_WORKBOY_NONE; + gb->workboy.mode = gb->workboy.byte_being_received; + gb->workboy.buffer_index = 0; + } + else if (gb->workboy.mode != 'W' && (gb->workboy.byte_being_received == 'O' || gb->workboy.mode == 'O')) { + gb->workboy.mode = 'O'; + gb->workboy.byte_to_send = gb->workboy.key; + if (gb->workboy.key != GB_WORKBOY_NONE) { + if (gb->workboy.key & GB_WORKBOY_REQUIRE_SHIFT) { + gb->workboy.key &= ~GB_WORKBOY_REQUIRE_SHIFT; + if (gb->workboy.shift_down) { + gb->workboy.byte_to_send = gb->workboy.key; + gb->workboy.key = GB_WORKBOY_NONE; + } + else { + gb->workboy.byte_to_send = GB_WORKBOY_SHIFT_DOWN; + gb->workboy.shift_down = true; + } + } + else if (gb->workboy.key & GB_WORKBOY_FORBID_SHIFT) { + gb->workboy.key &= ~GB_WORKBOY_FORBID_SHIFT; + if (!gb->workboy.shift_down) { + gb->workboy.byte_to_send = gb->workboy.key; + gb->workboy.key = GB_WORKBOY_NONE; + } + else { + gb->workboy.byte_to_send = GB_WORKBOY_SHIFT_UP; + gb->workboy.shift_down = false; + } + } + else { + if (gb->workboy.key == GB_WORKBOY_SHIFT_DOWN) { + gb->workboy.shift_down = true; + gb->workboy.user_shift_down = true; + } + else if (gb->workboy.key == GB_WORKBOY_SHIFT_UP) { + gb->workboy.shift_down = false; + gb->workboy.user_shift_down = false; + } + gb->workboy.byte_to_send = gb->workboy.key; + gb->workboy.key = GB_WORKBOY_NONE; + } + } + } + else if (gb->workboy.mode == 'R') { + if (gb->workboy.buffer_index / 2 >= sizeof(gb->workboy.buffer)) { + gb->workboy.byte_to_send = 0; + } + else { + if (gb->workboy.buffer_index & 1) { + gb->workboy.byte_to_send = "0123456789ABCDEF"[gb->workboy.buffer[gb->workboy.buffer_index / 2] & 0xF]; + } + else { + gb->workboy.byte_to_send = "0123456789ABCDEF"[gb->workboy.buffer[gb->workboy.buffer_index / 2] >> 4]; + } + gb->workboy.buffer_index++; + } + } + else if (gb->workboy.mode == 'W') { + gb->workboy.byte_to_send = 'D'; + if (gb->workboy.buffer_index < 2) { + gb->workboy.buffer_index++; + } + else if ((gb->workboy.buffer_index - 2) < sizeof(gb->workboy.buffer)) { + gb->workboy.buffer[gb->workboy.buffer_index - 2] = gb->workboy.byte_being_received; + gb->workboy.buffer_index++; + if (gb->workboy.buffer_index - 2 == sizeof(gb->workboy.buffer)) { + struct tm tm = {0,}; + tm.tm_sec = bcd_to_int(gb->workboy.buffer[7]); + tm.tm_min = bcd_to_int(gb->workboy.buffer[8]); + tm.tm_hour = bcd_to_int(gb->workboy.buffer[9]); + tm.tm_mday = bcd_to_int(gb->workboy.buffer[0xA]); + tm.tm_mon = bcd_to_int(gb->workboy.buffer[0xB] & 0x3F) - 1; + tm.tm_year = (uint8_t)(gb->workboy.buffer[0x14] + (gb->workboy.buffer[0xA] >> 6)); // What were they thinking? + gb->workboy_set_time_callback(gb, mktime(&tm)); + gb->workboy.mode = 'O'; + } + } + } + gb->workboy.bits_received = 0; + gb->workboy.byte_being_received = 0; + } +} + +static bool serial_end(GB_gameboy_t *gb) +{ + bool ret = gb->workboy.bit_to_send; + gb->workboy.bit_to_send = gb->workboy.byte_to_send & 0x80; + gb->workboy.byte_to_send <<= 1; + return ret; +} + +void GB_connect_workboy(GB_gameboy_t *gb, + GB_workboy_set_time_callback set_time_callback, + GB_workboy_get_time_callback get_time_callback) +{ + memset(&gb->workboy, 0, sizeof(gb->workboy)); + GB_set_serial_transfer_bit_start_callback(gb, serial_start); + GB_set_serial_transfer_bit_end_callback(gb, serial_end); + gb->workboy_set_time_callback = set_time_callback; + gb->workboy_get_time_callback = get_time_callback; +} + +bool GB_workboy_is_enabled(GB_gameboy_t *gb) +{ + return gb->workboy.mode; +} + +void GB_workboy_set_key(GB_gameboy_t *gb, uint8_t key) +{ + if (gb->workboy.user_shift_down != gb->workboy.shift_down && + (key & (GB_WORKBOY_REQUIRE_SHIFT | GB_WORKBOY_FORBID_SHIFT)) == 0) { + if (gb->workboy.user_shift_down) { + key |= GB_WORKBOY_REQUIRE_SHIFT; + } + else { + key |= GB_WORKBOY_FORBID_SHIFT; + } + } + gb->workboy.key = key; +} diff --git a/thirdparty/SameBoy-old/Core/workboy.h b/thirdparty/SameBoy-old/Core/workboy.h new file mode 100644 index 000000000..c99c27242 --- /dev/null +++ b/thirdparty/SameBoy-old/Core/workboy.h @@ -0,0 +1,118 @@ +#ifndef workboy_h +#define workboy_h +#include +#include +#include +#include "defs.h" + + +typedef struct { + uint8_t byte_to_send; + bool bit_to_send; + uint8_t byte_being_received; + uint8_t bits_received; + uint8_t mode; + uint8_t key; + bool shift_down; + bool user_shift_down; + uint8_t buffer[0x15]; + uint8_t buffer_index; // In nibbles during read, in bytes during write +} GB_workboy_t; + +typedef void (*GB_workboy_set_time_callback)(GB_gameboy_t *gb, time_t time); +typedef time_t (*GB_workboy_get_time_callback)(GB_gameboy_t *gb); + +enum { + GB_WORKBOY_NONE = 0xFF, + GB_WORKBOY_REQUIRE_SHIFT = 0x40, + GB_WORKBOY_FORBID_SHIFT = 0x80, + + GB_WORKBOY_CLOCK = 1, + GB_WORKBOY_TEMPERATURE = 2, + GB_WORKBOY_MONEY = 3, + GB_WORKBOY_CALCULATOR = 4, + GB_WORKBOY_DATE = 5, + GB_WORKBOY_CONVERSION = 6, + GB_WORKBOY_RECORD = 7, + GB_WORKBOY_WORLD = 8, + GB_WORKBOY_PHONE = 9, + GB_WORKBOY_ESCAPE = 10, + GB_WORKBOY_BACKSPACE = 11, + GB_WORKBOY_UNKNOWN = 12, + GB_WORKBOY_LEFT = 13, + GB_WORKBOY_Q = 17, + GB_WORKBOY_1 = 17 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_W = 18, + GB_WORKBOY_2 = 18 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_E = 19, + GB_WORKBOY_3 = 19 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_R = 20, + GB_WORKBOY_T = 21, + GB_WORKBOY_Y = 22 , + GB_WORKBOY_U = 23 , + GB_WORKBOY_I = 24, + GB_WORKBOY_EXCLAMATION_MARK = 24 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_O = 25, + GB_WORKBOY_TILDE = 25 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_P = 26, + GB_WORKBOY_ASTERISK = 26 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_DOLLAR = 27 | GB_WORKBOY_FORBID_SHIFT, + GB_WORKBOY_HASH = 27 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_A = 28, + GB_WORKBOY_4 = 28 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_S = 29, + GB_WORKBOY_5 = 29 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_D = 30, + GB_WORKBOY_6 = 30 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_F = 31, + GB_WORKBOY_PLUS = 31 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_G = 32, + GB_WORKBOY_MINUS = 32 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_H = 33, + GB_WORKBOY_J = 34, + GB_WORKBOY_K = 35, + GB_WORKBOY_LEFT_PARENTHESIS = 35 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_L = 36, + GB_WORKBOY_RIGHT_PARENTHESIS = 36 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_SEMICOLON = 37 | GB_WORKBOY_FORBID_SHIFT, + GB_WORKBOY_COLON = 37, + GB_WORKBOY_ENTER = 38, + GB_WORKBOY_SHIFT_DOWN = 39, + GB_WORKBOY_Z = 40, + GB_WORKBOY_7 = 40 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_X = 41, + GB_WORKBOY_8 = 41 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_C = 42, + GB_WORKBOY_9 = 42 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_V = 43, + GB_WORKBOY_DECIMAL_POINT = 43 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_B = 44, + GB_WORKBOY_PERCENT = 44 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_N = 45, + GB_WORKBOY_EQUAL = 45 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_M = 46, + GB_WORKBOY_COMMA = 47 | GB_WORKBOY_FORBID_SHIFT, + GB_WORKBOY_LT = 47 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_DOT = 48 | GB_WORKBOY_FORBID_SHIFT, + GB_WORKBOY_GT = 48 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_SLASH = 49 | GB_WORKBOY_FORBID_SHIFT, + GB_WORKBOY_QUESTION_MARK = 49 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_SHIFT_UP = 50, + GB_WORKBOY_0 = 51 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_UMLAUT = 51, + GB_WORKBOY_SPACE = 52, + GB_WORKBOY_QUOTE = 53 | GB_WORKBOY_FORBID_SHIFT, + GB_WORKBOY_AT = 53 | GB_WORKBOY_REQUIRE_SHIFT, + GB_WORKBOY_UP = 54, + GB_WORKBOY_DOWN = 55, + GB_WORKBOY_RIGHT = 56, +}; + + +void GB_connect_workboy(GB_gameboy_t *gb, + GB_workboy_set_time_callback set_time_callback, + GB_workboy_get_time_callback get_time_callback); +bool GB_workboy_is_enabled(GB_gameboy_t *gb); +void GB_workboy_set_key(GB_gameboy_t *gb, uint8_t key); + +#endif diff --git a/thirdparty/SameBoy-old/FreeDesktop/AppIcon/128x128.png b/thirdparty/SameBoy-old/FreeDesktop/AppIcon/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..b3259ed2adce1a540d8cd41d1338cdc8b0a3fd25 GIT binary patch literal 9515 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/AppIcon/16x16.png b/thirdparty/SameBoy-old/FreeDesktop/AppIcon/16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..335107ec7f9fd74b8eecdd20ddde8545dd1d18a3 GIT binary patch literal 411 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�B8`nOL2MyHmaY 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 M$MAO9Ep){H0jb9J;{X5v literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/AppIcon/32x32.png b/thirdparty/SameBoy-old/FreeDesktop/AppIcon/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..ea65e5a6f415774851c125e97fd688e7dab9807e GIT binary patch literal 1035 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/Cartridge/16x16.png b/thirdparty/SameBoy-old/FreeDesktop/Cartridge/16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e3780396fbf12a63523d384c97c175589f08ed55 GIT binary patch literal 424 zcmV;Z0ayNsP)|aKszTE=G#U+vq6k@*Pmm-Df*`QC z>$>Q4I<#_mA}|;X(ChWEUat{FQGwNJg?77*@puf%F9?iABTOa}*tT5>#VM~;fOb!k z1pECS$Kw%cnle9*V{Erugkgx?ZUv&hZQNbt&6tW3bqE68`hyt;;VcMqQD8RS2{#Ow%v3gi|90poBueEYeT{RRI& zO{}cIFpOFPrfHTpkuJ$%v0zuV3W{5nRTNMZ1+7-AHk415=K|fD&-fhn8b1MFzkyW6 S(nrw%00006B*cQiC)x-k;@W^idAV5YI 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

+>gYU_!p)HUAB;#{bm$_GtO5o1&P5;d;aa z;!&(HG0lfZoy=ffxyc9rbcKM3rT+!k(HX*y|K<}ADtt=i6a5DcFZRgYpk?a*S12%$ z^f-3xd5PKJmg$m&ifbZ|UfyIXR`nF>|C}>?`_SgUOf_9={rvw#2Gno;8-s_7@Jmo0 z=`19n=?L|B1{Ki&r23wRNeCx{!WbclkRkx;E(6^_uJ`ZR!ot)92*86;6Bx%Br5H+z zKWBZi(eX0B%ceVmJ6>%H+2GtzIanv?JRBq~4oWSa`^B*6tg8ajy7zI`WY@DVAMIC) zSxpoFq}Syi&Vy=+gR8M(^)Q^9S^-R?j}GkZ!Wr zB`g)@y%Mw)?!7D-e!;mtg3a7%Nf*v>Ksz4>q9X+mtjOw#30Mi`3491 z5$*~~G$T5u%>ADpUj7`W8kRmaJ^VJ^i}Ne_4IP~Dp*{1BwGZO8zAq>aGAN9$tPaxyP{wV&X9B=^Iw&hHWhDYQEuako*v1 zo|~f`E8oQaH``pZEY~iao}F*?F`zb6=2F&nC@U;{Kk}7nkd*qc)bWJAf?CBX@r(J=NXPwoI|pIF7uK=(Xb7_%X}Lw|BXHc>DvGtpXM9Q=pzf) zPK+DOD}`ZcoV>elJvAn20e;eRU$^&h;3*YB zAb)v&J6?)3RQt!du4+ks4Srg50eCdgjXGNS=0~_-je|Iqe)B^Vq^LsL#W~$%3v7Gv%zZFNof8NR`vr%k$Z|vn#a(aA!r(e;s*B~N zIk?AhN3vJH#(N6mWoZ4@eR>|tn)_8LLQb%|L21$ zl%wwN??Uv$Ib1|Zkr{~jsiDCeTMcX+M7;JaFvUy^{fJx>g`@#b#Bg{_n-Bpip8-YG zGT8`>KW_)0$xf7o;O!+i^=SNCkfihzxls$BrHEy44G@G#E0W6N2K3o-cie=s`#un} zm~3RuX&!j|m6_h7=fg8omw$UcNM~@e@ZWvssxkSAuY*3QPXa|>2`;=4oW;6NcLgC0 zS#ZSp;bq}LKrfDJY)5iOHXNlDhXKiY_TApnh&JU#-AgHRH3xh1hAb+Z=Wu3t34}rv zb)-OERk4mScklTKt0(T9gES<|eUQ^Kl~$y@X|H9QFe}f&J|5t)0*t?u)>AOU`{hb` zA7xPeMV^mv-cX&c%P-g?rMIR_qInCaWujA&eYEQSaM%1D;*b-9y!UQ%4GJSP|EE1j z)v)IVxQpG+{&JfS)a@UTIx*PP8gJqJr3$=J!2Z+kXZ}9&J_c`7B=@t*2b5{~VfBmjH@aZ2=(rm`O@O$!oG^kyT2we4jk*FmxU{(8z*b^iBp7+SD z&GA<%jLl38j)D;Shb0)SIF||$jmA9PpNu+wfBmEIexz1}41KHk(wj3i#od}y^bt== zK89J#D%qR__+x;BZ`!JhIvNzc+>|jkcH)<0+4ApYW*&lCZJrfY@Mj4&p=*C2lL%7z V^lsG#@aGf2eI+f$DtTn+{{tt=S1|wp literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/Cartridge/32x32.png b/thirdparty/SameBoy-old/FreeDesktop/Cartridge/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..270de894cfd13e0da0a3868a69ee5db4ea8a2fd6 GIT binary patch literal 977 zcmV;?11|iDP)003?$ z0048Z008~)004ql003`T008b7001!b000lB8%<;B00009a7bBm000XU000XU0RWnu z7ytkRS4l)cR9M61S4&GH$`cKS_(llzKy|0;v>GJ@vVsp z6*b^S2pB~O38^AgRFptUTy#~CcJ0^uon%aW#CYQs7ajOGGv}U}^UayZJ!1l3N|&!1 zwl#!a2v!a6vizB(o~79C>+8E-UtfpO*x1-Wd3kv5JQai4(dFg!er*49>(mX@NbstPqV zHK?tv)dj27ii(N~l$DiXXlMwltE<@A*+EA~2hvMY^dJEmlYqryfy3b-bBvCT3Ne18 zWOP(r*{imy(}sQP>goj4vEA0zmYV=O&CJY*vCU?a0o`sl{C+Xfvn!$2S)_TAmxB00I<-rn2Cev2Zt0TABrYy4WCENq9g|Ej7?h~xByjf>FzgKJ^z?K=U|&WhdrbPsOMrWzzP|nj zjg5_RtQr~`q|N1NZf=&klC)9Cwq>0sN*4jHBlm+*rL(hBKLPH3qe@p-mwp11lasGY z;MF6*BWP6V>FLo=fENdgHwcty!T1&ioPmtA`BU`|j*R>sPw9!z-jp5jtR;B!5ir|; z_g_+=BkD{g8Bj+_XCzB|)@eslPN%al0>A&JoO1ANNpNtbQ-tW0Iz^zw{fs@ptC)o| zAV`KX{wr0dWIOmHW25Z(U7_GTKzX;Ut*xQ5vJ#hkBY~R=@?V4?3*qh3?ZPFX>)T^&OQk}mw-G@wHM4a zpHxo;XRn@NPX&FXU*Y#&$1nXnSJ+Pb65sy-Y{*^9;5JI~00000NkvXXu0mjfV~D^^ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/Cartridge/512x512.png b/thirdparty/SameBoy-old/FreeDesktop/Cartridge/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..e8257c19e1b009b1be893eb80975e88d12b9d99e GIT binary patch literal 37757 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�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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/Cartridge/64x64.png b/thirdparty/SameBoy-old/FreeDesktop/Cartridge/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..34d006d7a0dfae7da708d1c975cc6e2d5010b968 GIT binary patch literal 2196 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/16x16.png b/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..899886ef13a89fb48d9d1babe254fb3a0a1ae80b GIT binary patch literal 501 zcmV003?$ z0048Z008~)004ql003`T008b7001!b000lB8%<;B00009a7bBm000XU000XU0RWnu z7ytkPdr3q=R5;6}lg&%QU>wIs|AhB0ieAJW6mjB95K|exuwm<9dI*G|JPG|1ox4eN z>EOMa*AAT`B*A4b(+bj@1QCSa_IpZ;+(hYt55H&6@7ZTxwmlrjaeF3>B{(tJ0KgG6 z8lg~VEJ+fQ$s|Nkw1xWdc>K-ba9o=ARi*;J-;ZE02&dBtkH-VI+s*1V6qK&okCV37cDG)M~Z)f==%P zPwjV%A1-j!X`$I{!Y~Y0>-9QxT}L*X{ohNpO`s^sLV`>tV=bT`C6P$XJqy&QeKP`| r&j+v9yD+r>x1h4*ah^~S1cCbmSK;n(Phk)P00000NkvXXu0mjfg*DB| literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/256x256.png b/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..10e6558374a00bdf5790cce7004625e23dc88785 GIT binary patch literal 11778 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/32x32.png b/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..83f7f4b19d572ad2ca761409a4d4f3eeea852076 GIT binary patch literal 1014 zcmV003?$ z0048Z008~)004ql003`T008b7001!b000lB8%<;B00009a7bBm000XU000XU0RWnu z7ytkRd`Uz>R9M61SIJA;Q4kjYgI; zhxqvTfS?6q)`*IVg27-wSy>qx8XAzAnhN)kg!?7H;Mv*Ph>ngH608Ep%!G54ilnkB zaLizwCpadVgoFf{r;RaAB|xXVygUiWh3XheOH0LGQc@!4sie|5Pgz`CjDms!8IuUt z609KiH4 z$T}D>0ZMf@6d2>b1k?p0>xzmBR904^s;WwK+L&2&b@j1M$$9$u`cmf+1Vn(WySuv) zs!wBMW8egOdU~#wz~JEEHLpN#Z*Ry5w6?YePN1)^PZp0Z0doHK$??(~kB{=_yh6}-z+$n;;`>jX zcw%$n_wFI~yGDThExi5l4pUQ87#<$R=H})xY&IL#*Vjev?Cgl`!ruae`8(zMsK#a29w(d|Px#07*qoM6N<$f>`0s$N&HU literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/512x512.png b/thirdparty/SameBoy-old/FreeDesktop/ColorCartridge/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..417b2e53bc73c0f587daf71b49aaf7b4e4cbe4b8 GIT binary patch literal 33721 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 mwnXOu;+p;s4yy003?$ z0048Z008~)004ql003`T008b7001!b000lB8%<;B00009a7bBm000XU000XU0RWnu z7ytkV{7FPXRCwCun^|a8R}_Xr9;(=v_CYjKNy+3CF&d{h4{?mMMlAvDg9?t2g2d^e z6ofoT3qEO)R!HfCBDGYs5`^LqHK~e;bBr;QL@^)&gyJ)C`_L?lYda?uujVo{PsDLs^uE&9x&{!sy(U0x%z1Au-*hYtN>%9JT> z)2C0DS+i#KD4IEQrc9eQO;S=)iY!@TY;uJRz<|Mn2WL;1FhSO=StF}ft?E&}7*$bIEb!x~umD^{4P0RSUL zj3~3@i|q=4kD{Za(-IRC>n2W|C`#A_DuG6h9BBk6>=o4q5C#np7B5~bsi~=A??3U_ z*w{R#L6-mw88T!`FbzQ65IztO)a`Lb!ag@4Cy%r_bLPnG*|Yt5u;%u>@R-+HhIpVl z0RgSl>0l?c#nOP%kO1gR0|3T3@-(c%D-VDD`t?RQ;>=4_QGv?N&Nd^pYu7GWv}lpc zojcbENZPVx%M2mt&Ye5WY6Nfh?%hVMH*VZ$EInnI0`|TTA2Vi*nfpwQuxbFv21A#T z(2;@Y97_@cF`@vlVZ#O^SXNe+tX;d-lp&6pp-EM2JN1fOZI)kwyoj58>So!csqi#l%{7R%D zkn){-05phvVb=gU$h<-*)Y@*~)DF05;X}!Xwg3Ryg9f;=3aG(TRrkv758*MEjI`Yr zeXs^t8=Vds0AX}6P)r4k*SdAU*df&_5<7W(O+c zRCD_pP9tal4R77LRkm;69&y^XZJTV`w8_7cAbcdZ_w?ygQ|9^e=Tcf)D%Y=HmnTo2nEG$sx@Gv(_3YU*Q|{{3tEL^= zICA8O>7#1^U>pkz3#Fx{MZD+$KhQ=fYygmc?%X+f_wJo10eJA>f$5{G09?9s$+H^3 z)NvhvYuB!cSKW&jFWd*<;>C;7+S=+#05F8E1Ax`_s$+F<9RQXkuR50Jhyd{R?c2Vq z0eA1-?b{lF5%lUlfSsi40GvI0R^GgM<4FM6DtF5isBdy#xKP?CD=Tv!01i5;0cEu! zsX0E%{I92(kV|FgoH<&bn^aL)*gpW6!?fR`6&mV zFo!4C0pKvC?r6TR!}-PS!qQ=cql1K1C>02x=niQ7QVKl z+QBy6bpXzvKQFIezxE4^08yDfFmMQm0CbKt9YNxZ7Cv!!I{Ksmj;3iIyTDEW6nx4> zbP90fw2!uez-ZDbz)(V9(%=y$O@*K=aRks2q#mXPad?_XH3?wIqW}=MJMITu2Y?fo zIz|a$Am?;I5bZEw?XXigCDjzd)T4r`hCy0h(>0H};^N}StOEAKkX;4cTmeE^1tOvW z!H&bf{Lv!c{oG`Hb${ia445}RKVOa?KW==x6zozt5+s(D2~3l4gmLmf!x>M z`wU}iRWDA3+HpJb2I_#)sgO zu6zZ`?zl&E9e@iLE(8SN$KRTb2K@Sab4LKGj`{&OUHO~IYZojhC&wRVFAq=o_OKlQ z!f1xmRaRC;1_1jq7zwA-psT6C?Xl|saO>h#7m>pd_xOR-ug_eG0f1LsM5ch3FGOzK zxZyqke1`I>tEs7R9{_e+efmm_i$|}zM~@!44*=ia+S=OsE&yDLdeuc_8RYA*R~>g1 zt^;u9%o$H!i#InnyZd>Z*I}d|J9f-$Ik|x33W^gLuRB;B>gwuD8XFQ0Civv#y1JpE z!R#P;*}+MU%L|s&rluxiSlM4NhhM&YDUFSdhN!cmqQVfTP})RL%21a2>g(%Goci+e z@=PC{FWkZcfWFn;ym_-Z!R^_z$N2mA@9*F%9XN16_U+r}kK6fs_wM!kq-$N|S03f< z^=Tf`?d2(>?a(*+=zPQ(769})YIi(|d*A1CuDlWp2kEo;V86k@3-&;>+n>pWgLqu2 zFUfgXu1{GBYg(YUzP$zjh?kwrQT`OsG~WD@9_+bmuL3|p;K4J$zCb+1cT4yW0ziLG za2o_(daqo$(pBN#7k~j40NMPh5sCi+byacu|3d7H^@J7x;=2N%-@t(bv#d9_ZQb=Z ss9R+HFHjiDpQF9u_xVnLsdobK5Ao + + + Game Boy ROM + + + + + + + Game Boy Color ROM + + + + + + + Game Boy ISX binary + + + + + diff --git a/thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.h b/thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.h new file mode 100644 index 000000000..32122a189 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.h @@ -0,0 +1,57 @@ +// +// HFAnnotatedTree.h +// HexFiend_2 +// +// Copyright 2010 ridiculous_fish. All rights reserved. +// + +#import + +typedef unsigned long long (*HFAnnotatedTreeAnnotaterFunction_t)(id left, id right); + + +@interface HFAnnotatedTreeNode : NSObject { + HFAnnotatedTreeNode *left; + HFAnnotatedTreeNode *right; + HFAnnotatedTreeNode *parent; + uint32_t level; +@public + unsigned long long annotation; +} + +/* Pure virtual method, which must be overridden. */ +- (NSComparisonResult)compare:(HFAnnotatedTreeNode *)node; + +/* Returns the next in-order node. */ +- (id)nextNode; + +- (id)leftNode; +- (id)rightNode; +- (id)parentNode; + +#if ! NDEBUG +- (void)verifyIntegrity; +- (void)verifyAnnotation:(HFAnnotatedTreeAnnotaterFunction_t)annotater; +#endif + + +@end + + +@interface HFAnnotatedTree : NSObject { + HFAnnotatedTreeAnnotaterFunction_t annotater; + HFAnnotatedTreeNode *root; +} + +- (instancetype)initWithAnnotater:(HFAnnotatedTreeAnnotaterFunction_t)annotater; +- (void)insertNode:(HFAnnotatedTreeNode *)node; +- (void)removeNode:(HFAnnotatedTreeNode *)node; +- (id)rootNode; +- (id)firstNode; +- (BOOL)isEmpty; + +#if ! NDEBUG +- (void)verifyIntegrity; +#endif + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.m b/thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.m new file mode 100644 index 000000000..9e64b9ae1 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFAnnotatedTree.m @@ -0,0 +1,432 @@ +// +// HFAnnotatedTree.m +// HexFiend_2 +// +// Copyright 2010 ridiculous_fish. All rights reserved. +// + +#import "HFAnnotatedTree.h" + +#if NDEBUG +#define VERIFY_INTEGRITY() do { } while (0) +#else +#define VERIFY_INTEGRITY() [self verifyIntegrity] +#endif + +/* HFAnnotatedTree is an AA tree. */ + +static unsigned long long null_annotater(id left, id right) { USE(left); USE(right); return 0; } +static void skew(HFAnnotatedTreeNode *node, HFAnnotatedTree *tree); +static BOOL split(HFAnnotatedTreeNode *oldparent, HFAnnotatedTree *tree); +static void rebalanceAfterLeafAdd(HFAnnotatedTreeNode *n, HFAnnotatedTree *tree); +static void delete(HFAnnotatedTreeNode *n, HFAnnotatedTree *tree); +static void verify_integrity(HFAnnotatedTreeNode *n); + +static HFAnnotatedTreeNode *next_node(HFAnnotatedTreeNode *node); + +static void insert(HFAnnotatedTreeNode *root, HFAnnotatedTreeNode *node, HFAnnotatedTree *tree); + +static inline HFAnnotatedTreeNode *get_parent(HFAnnotatedTreeNode *node); +static inline HFAnnotatedTreeNode *get_root(HFAnnotatedTree *tree); +static inline HFAnnotatedTreeNode *create_root(void); +static inline HFAnnotatedTreeAnnotaterFunction_t get_annotater(HFAnnotatedTree *tree); + +static void reannotate(HFAnnotatedTreeNode *node, HFAnnotatedTree *tree); + +static HFAnnotatedTreeNode *first_node(HFAnnotatedTreeNode *node); + +static HFAnnotatedTreeNode *left_child(HFAnnotatedTreeNode *node); +static HFAnnotatedTreeNode *right_child(HFAnnotatedTreeNode *node); + +@implementation HFAnnotatedTree + +- (instancetype)initWithAnnotater:(HFAnnotatedTreeAnnotaterFunction_t)annot { + self = [super init]; + annotater = annot ? annot : null_annotater; + /* root is always an HFAnnotatedTreeNode with a left child but no right child */ + root = create_root(); + return self; +} + +- (void)dealloc { + [root release]; + [super dealloc]; +} + +- (id)rootNode { + return root; +} + +- (id)firstNode { + return first_node(root); +} + +- (id)mutableCopyWithZone:(NSZone *)zone { + HFAnnotatedTree *copied = [[[self class] alloc] init]; + copied->annotater = annotater; + [copied->root release]; + copied->root = [root mutableCopyWithZone:zone]; + return copied; +} + +- (BOOL)isEmpty { + /* We're empty if our root has no children. */ + return left_child(root) == nil && right_child(root) == nil; +} + +- (void)insertNode:(HFAnnotatedTreeNode *)node { + HFASSERT(node != nil); + HFASSERT(get_parent(node) == nil); + /* Insert into the root */ + insert(root, [node retain], self); + VERIFY_INTEGRITY(); +} + +- (void)removeNode:(HFAnnotatedTreeNode *)node { + HFASSERT(node != nil); + HFASSERT(get_parent(node) != nil); + delete(node, self); + [node release]; + VERIFY_INTEGRITY(); +} + +#if ! NDEBUG +- (void)verifyIntegrity { + [root verifyIntegrity]; + [root verifyAnnotation:annotater]; +} +#endif + +static HFAnnotatedTreeNode *get_root(HFAnnotatedTree *tree) { + return tree->root; +} + +static HFAnnotatedTreeAnnotaterFunction_t get_annotater(HFAnnotatedTree *tree) { + return tree->annotater; +} + +@end + +@implementation HFAnnotatedTreeNode + +- (void)dealloc { + [left release]; + [right release]; + [super dealloc]; +} + +- (NSComparisonResult)compare:(HFAnnotatedTreeNode *)node { + USE(node); + UNIMPLEMENTED(); +} + +- (id)nextNode { + return next_node(self); +} + +- (id)leftNode { return left; } +- (id)rightNode { return right; } +- (id)parentNode { return parent; } + +- (id)mutableCopyWithZone:(NSZone *)zone { + HFAnnotatedTreeNode *copied = [[[self class] alloc] init]; + if (left) { + copied->left = [left mutableCopyWithZone:zone]; + copied->left->parent = copied; + } + if (right) { + copied->right = [right mutableCopyWithZone:zone]; + copied->right->parent = copied; + } + copied->level = level; + copied->annotation = annotation; + return copied; +} + +static HFAnnotatedTreeNode *left_child(HFAnnotatedTreeNode *node) { + return node->left; +} + +static HFAnnotatedTreeNode *right_child(HFAnnotatedTreeNode *node) { + return node->right; +} + + +static HFAnnotatedTreeNode *create_root(void) { + HFAnnotatedTreeNode *result = [[HFAnnotatedTreeNode alloc] init]; + result->level = UINT_MAX; //the root has a huge level + return result; +} + +static void reannotate(HFAnnotatedTreeNode *node, HFAnnotatedTree *tree) { + HFASSERT(node != nil); + HFASSERT(tree != nil); + const HFAnnotatedTreeAnnotaterFunction_t annotater = get_annotater(tree); + node->annotation = annotater(node->left, node->right); +} + +static void insert(HFAnnotatedTreeNode *root, HFAnnotatedTreeNode *node, HFAnnotatedTree *tree) { + /* Insert node at the proper place in the tree. root is the root node, and we always insert to the left of root */ + BOOL left = YES; + HFAnnotatedTreeNode *parentNode = root, *currentChild; + /* Descend the tree until we find where to insert */ + while ((currentChild = (left ? parentNode->left : parentNode->right)) != nil) { + parentNode = currentChild; + left = ([parentNode compare:node] >= 0); //if parentNode is larger than the child, then the child goes to the left of node + } + + /* Now insert, potentially unbalancing the tree */ + if (left) { + parentNode->left = node; + } + else { + parentNode->right = node; + } + + /* Tell our node about its new parent */ + node->parent = parentNode; + + /* Rebalance and update annotations */ + rebalanceAfterLeafAdd(node, tree); +} + +static void skew(HFAnnotatedTreeNode *oldparent, HFAnnotatedTree *tree) { + HFAnnotatedTreeNode *newp = oldparent->left; + + if (oldparent->parent->left == oldparent) { + /* oldparent is the left child of its parent. Substitute in our left child. */ + oldparent->parent->left = newp; + } + else { + /* oldparent is the right child of its parent. Substitute in our left child. */ + oldparent->parent->right = newp; + } + + /* Tell the child about its new parent */ + newp->parent = oldparent->parent; + + /* Adopt its right child as our left child, and tell it about its new parent */ + oldparent->left = newp->right; + if (oldparent->left) oldparent->left->parent = oldparent; + + /* We are now the right child of the new parent */ + newp->right = oldparent; + oldparent->parent = newp; + + /* If we're now a leaf, our level is 1. Otherwise, it's one more than the level of our child. */ + oldparent->level = oldparent->left ? oldparent->left->level + 1 : 1; + + /* oldparent and newp both had their children changed, so need to be reannotated */ + reannotate(oldparent, tree); + reannotate(newp, tree); +} + +static BOOL split(HFAnnotatedTreeNode *oldparent, HFAnnotatedTree *tree) { + HFAnnotatedTreeNode *newp = oldparent->right; + if (newp && newp->right && newp->right->level == oldparent->level) { + if (oldparent->parent->left == oldparent) oldparent->parent->left = newp; + else oldparent->parent->right = newp; + newp->parent = oldparent->parent; + oldparent->parent = newp; + + oldparent->right = newp->left; + if (oldparent->right) oldparent->right->parent = oldparent; + newp->left = oldparent; + newp->level = oldparent->level + 1; + + /* oldparent and newp both had their children changed, so need to be reannotated */ + reannotate(oldparent, tree); + reannotate(newp, tree); + + return YES; + } + return NO; +} + +static void rebalanceAfterLeafAdd(HFAnnotatedTreeNode *node, HFAnnotatedTree *tree) { // n is a node that has just been inserted and is now a leaf node. + node->level = 1; + node->left = nil; + node->right = nil; + reannotate(node, tree); + HFAnnotatedTreeNode * const root = get_root(tree); + HFAnnotatedTreeNode *probe; + for (probe = node->parent; probe != root; probe = probe->parent) { + reannotate(probe, tree); + // At this point probe->parent->level == probe->level + if (probe->level != (probe->left ? probe->left->level + 1 : 1)) { + // At this point the tree is correct, except (AA2) for n->parent + skew(probe, tree); + // We handle it (a left add) by changing it into a right add using Skew + // If the original add was to the left side of a node that is on the + // right side of a horisontal link, probe now points to the rights side + // of the second horisontal link, which is correct. + + // However if the original add was to the left of node with a horizontal + // link, we must get to the right side of the second link. + if (!probe->right || probe->level != probe->right->level) probe = probe->parent; + } + if (! split(probe->parent, tree)) break; + } + while (probe) { + reannotate(probe, tree); + probe = probe->parent; + } +} + +static void delete(HFAnnotatedTreeNode *n, HFAnnotatedTree *tree) { // If n is not a leaf, we first swap it out with the leaf node that just + // precedes it. + HFAnnotatedTreeNode *leaf = n, *tmp; + + if (n->left) { + /* Descend the right subtree of our left child, to get the closest predecessor */ + for (leaf = n->left; leaf->right; leaf = leaf->right) {} + // When we stop, leaf has no 'right' child so it cannot have a left one + } + else if (n->right) { + /* We have no children that precede us, but we have a child after us, so use our closest successor */ + leaf = n->right; + } + + /* tmp is either the parent who loses the child, or tmp is our right subtree. Either way, we will have to reduce its level. */ + tmp = leaf->parent == n ? leaf : leaf->parent; + + /* Tell leaf's parent to forget about leaf */ + if (leaf->parent->left == leaf) { + leaf->parent->left = NULL; + } + else { + leaf->parent->right = NULL; + } + reannotate(leaf->parent, tree); + + if (n != leaf) { + /* Replace ourself as our parent's child with leaf */ + if (n->parent->left == n) n->parent->left = leaf; + else n->parent->right = leaf; + + /* Leaf's parent is our parent */ + leaf->parent = n->parent; + + /* Our left and right children are now leaf's left and right children */ + if (n->left) n->left->parent = leaf; + leaf->left = n->left; + if (n->right) n->right->parent = leaf; + leaf->right = n->right; + + /* Leaf's level is our level */ + leaf->level = n->level; + } + /* Since we adopted n's children, transferring the retain, tell n to forget about them so it doesn't release them */ + n->left = nil; + n->right = nil; + + // free (n); + + HFAnnotatedTreeNode * const root = get_root(tree); + while (tmp != root) { + reannotate(tmp, tree); + // One of tmp's childern had its level reduced + if (tmp->level > (tmp->left ? tmp->left->level + 1 : 1)) { // AA2 failed + tmp->level--; + if (split(tmp, tree)) { + if (split(tmp, tree)) skew(tmp->parent->parent, tree); + break; + } + tmp = tmp->parent; + } + else if (tmp->level <= (tmp->right ? tmp->right->level + 1 : 1)){ + break; + } + else { // AA3 failed + skew(tmp, tree); + //if (tmp->right) tmp->right->level = tmp->right->left ? tmp->right->left->level + 1 : 1; + if (tmp->level > tmp->parent->level) { + skew(tmp, tree); + split(tmp->parent->parent, tree); + break; + } + tmp = tmp->parent->parent; + } + } + while (tmp) { + reannotate(tmp, tree); + tmp = tmp->parent; + } +} + +static HFAnnotatedTreeNode *next_node(HFAnnotatedTreeNode *node) { + /* Return the next in-order node */ + HFAnnotatedTreeNode *result; + if (node->right) { + /* We have a right child, which is after us. Descend its left subtree. */ + result = node->right; + while (result->left) { + result = result->left; + } + } + else { + /* We have no right child. If we are our parent's left child, then our parent is after us. Otherwise, we're our parent's right child and it was before us, so ascend while we're the parent's right child. */ + result = node; + while (result->parent && result->parent->right == result) { + result = result->parent; + } + /* Now result is the left child of the parent (or has NULL parents), so its parent is the next node */ + result = result->parent; + } + /* Don't return the root */ + if (result != nil && result->parent == nil) { + result = next_node(result); + } + return result; +} + +static HFAnnotatedTreeNode *first_node(HFAnnotatedTreeNode *node) { + /* Return the first node */ + HFAnnotatedTreeNode *result = nil, *cursor = node->left; + while (cursor) { + /* Descend the left subtree */ + result = cursor; + cursor = cursor->left; + } + return result; +} + +static HFAnnotatedTreeNode *get_parent(HFAnnotatedTreeNode *node) { + HFASSERT(node != nil); + return node->parent; +} + +static void __attribute__((unused))verify_integrity(HFAnnotatedTreeNode *n) { + HFASSERT(!n->left || n->left->parent == n); + HFASSERT(!n->right || n->right->parent == n); + HFASSERT(!next_node(n) || [n compare:next_node(n)] <= 0); + HFASSERT(!n->parent || n->parent->level >= n->level); + if (n->parent == nil) { + /* root node */ + HFASSERT(n->level == UINT_MAX); + } + else { + /* non-root node */ + HFASSERT(n->level == (n->left == NULL ? 1 : n->left->level + 1)); + HFASSERT((n->level <= 1) || (n->right && n->level - n->right->level <= 1)); + } + HFASSERT(!n->parent || !n->parent->parent || + n->parent->parent->level > n->level); +} + +#if ! NDEBUG +- (void)verifyIntegrity { + [left verifyIntegrity]; + [right verifyIntegrity]; + verify_integrity(self); +} + +- (void)verifyAnnotation:(HFAnnotatedTreeAnnotaterFunction_t)annotater { + [left verifyAnnotation:annotater]; + [right verifyAnnotation:annotater]; + unsigned long long expectedAnnotation = annotater(left, right); + HFASSERT(annotation == expectedAnnotation); +} +#endif + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFBTree.h b/thirdparty/SameBoy-old/HexFiend/HFBTree.h new file mode 100644 index 000000000..3bb8bd902 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFBTree.h @@ -0,0 +1,40 @@ +// +// HFBTree.h +// HexFiend +// +// + +#import + +typedef unsigned long long HFBTreeIndex; + +@class HFBTreeNode; + +@protocol HFBTreeEntry +- (unsigned long long)length; +@end + +@interface HFBTree : NSObject { + unsigned int depth; + HFBTreeNode *root; +} + +- (void)insertEntry:(id)entry atOffset:(HFBTreeIndex)offset; +- (id)entryContainingOffset:(HFBTreeIndex)offset beginningOffset:(HFBTreeIndex *)outBeginningOffset; +- (void)removeEntryAtOffset:(HFBTreeIndex)offset; +- (void)removeAllEntries; + +#if HFUNIT_TESTS +- (void)checkIntegrityOfCachedLengths; +- (void)checkIntegrityOfBTreeStructure; +#endif + +- (NSEnumerator *)entryEnumerator; +- (NSArray *)allEntries; + +- (HFBTreeIndex)length; + +/* Applies the given function to the entry at the given offset, continuing with subsequent entries until the function returns NO. Do not modify the tree from within this function. */ +- (void)applyFunction:(BOOL (*)(id entry, HFBTreeIndex offset, void *userInfo))func toEntriesStartingAtOffset:(HFBTreeIndex)offset withUserInfo:(void *)userInfo; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFBTree.m b/thirdparty/SameBoy-old/HexFiend/HFBTree.m new file mode 100644 index 000000000..5bb7806a9 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFBTree.m @@ -0,0 +1,1099 @@ +// +// HFBTree.m +// BTree +// +// Created by peter on 2/6/09. +// Copyright 2009 ridiculous_fish. All rights reserved. +// + +#import "HFBTree.h" +#include + +#define FIXUP_LENGTHS 0 + +#define BTREE_BRANCH_ORDER 10 +#define BTREE_LEAF_ORDER 10 + +#define BTREE_ORDER 10 +#define BTREE_NODE_MINIMUM_VALUE_COUNT (BTREE_ORDER / 2) + +#define BTREE_LEAF_MINIMUM_VALUE_COUNT (BTREE_LEAF_ORDER / 2) + +#define BAD_INDEX ((ChildIndex_t)(-1)) +typedef unsigned int ChildIndex_t; + +/* How deep can our tree get? 128 is huge. */ +#define MAX_DEPTH 128 +#define BAD_DEPTH ((TreeDepth_t)(-1)) +typedef unsigned int TreeDepth_t; + +#define TreeEntry NSObject +#define HFBTreeLength(x) [(TreeEntry *)(x) length] + + +@class HFBTreeNode, HFBTreeBranch, HFBTreeLeaf; + +static TreeEntry *btree_search(HFBTree *tree, HFBTreeIndex offset, HFBTreeIndex *outBeginningOffset); +static id btree_insert_returning_retained_value_for_parent(HFBTree *tree, TreeEntry *entry, HFBTreeIndex offset); +static BOOL btree_remove(HFBTree *tree, HFBTreeIndex offset); +static void __attribute__((unused)) btree_recursive_check_integrity(HFBTree *tree, HFBTreeNode *branchOrLeaf, TreeDepth_t depth, HFBTreeNode **linkHelper); +#if FIXUP_LENGTHS +static HFBTreeIndex btree_recursive_fixup_cached_lengths(HFBTree *tree, HFBTreeNode *branchOrLeaf); +#endif +static HFBTreeIndex __attribute__((unused)) btree_recursive_check_integrity_of_cached_lengths(HFBTreeNode *branchOrLeaf); +static BOOL btree_are_cached_lengths_correct(HFBTreeNode *branchOrLeaf, HFBTreeIndex *outLength); +#if FIXUP_LENGTHS +static NSUInteger btree_entry_count(HFBTreeNode *branchOrLeaf); +#endif +static ChildIndex_t count_node_values(HFBTreeNode *node); +static HFBTreeIndex sum_child_lengths(const id *children, const BOOL isLeaf); +static HFBTreeNode *mutable_copy_node(HFBTreeNode *node, TreeDepth_t depth, HFBTreeNode **linkingHelper); + +#if NDEBUG +#define VERIFY_LENGTH(a) +#else +#define VERIFY_LENGTH(a) btree_recursive_check_integrity_of_cached_lengths((a)) +#endif + +#define IS_BRANCH(a) [(a) isKindOfClass:[HFBTreeBranch class]] +#define IS_LEAF(a) [(a) isKindOfClass:[HFBTreeLeaf class]] + +#define ASSERT_IS_BRANCH(a) HFASSERT(IS_BRANCH(a)) +#define ASSERT_IS_LEAF(a) HFASSERT(IS_LEAF(a)) + +#define GET_LENGTH(node, parentIsLeaf) ((parentIsLeaf) ? HFBTreeLength(node) : CHECK_CAST((node), HFBTreeNode)->subtreeLength) + +#define CHECK_CAST(a, b) ({HFASSERT([(a) isKindOfClass:[b class]]); (b *)(a);}) +#define CHECK_CAST_OR_NULL(a, b) ({HFASSERT((a == nil) || [(a) isKindOfClass:[b class]]); (b *)(a);}) + +#define DEFEAT_INLINE 1 + +#if DEFEAT_INLINE +#define FORCE_STATIC_INLINE static +#else +#define FORCE_STATIC_INLINE static __inline__ __attribute__((always_inline)) +#endif + +@interface HFBTreeEnumerator : NSEnumerator { + HFBTreeLeaf *currentLeaf; + ChildIndex_t childIndex; +} + +- (instancetype)initWithLeaf:(HFBTreeLeaf *)leaf; + +@end + +@interface HFBTreeNode : NSObject { + @public + NSUInteger rc; + HFBTreeIndex subtreeLength; + HFBTreeNode *left, *right; + id children[BTREE_ORDER]; +} + +@end + +@implementation HFBTreeNode + +- (id)retain { + HFAtomicIncrement(&rc, NO); + return self; +} + +- (oneway void)release { + NSUInteger result = HFAtomicDecrement(&rc, NO); + if (result == (NSUInteger)(-1)) { + [self dealloc]; + } +} + +- (NSUInteger)retainCount { + return 1 + rc; +} + +- (void)dealloc { + for (ChildIndex_t i=0; i < BTREE_BRANCH_ORDER; i++) { + if (! children[i]) break; + [children[i] release]; + } + [super dealloc]; +} + +- (NSString *)shortDescription { + return [NSString stringWithFormat:@"<%@: %p (%llu)>", [self class], self, subtreeLength]; +} + +@end + +@interface HFBTreeBranch : HFBTreeNode +@end + +@implementation HFBTreeBranch + +- (NSString *)description { + const char *lengthsMatchString = (subtreeLength == sum_child_lengths(children, NO) ? "" : " INCONSISTENT "); + NSMutableString *s = [NSMutableString stringWithFormat:@"<%@: %p (length: %llu%s) (children: %u) (", [self class], self, subtreeLength, lengthsMatchString, count_node_values(self)]; + NSUInteger i; + for (i=0; i < BTREE_ORDER; i++) { + if (children[i] == nil) break; + [s appendFormat:@"%s%@", (i == 0 ? "" : ", "), [children[i] shortDescription]]; + } + [s appendString:@")>"]; + return s; +} + +@end + +@interface HFBTreeLeaf : HFBTreeNode +@end + +@implementation HFBTreeLeaf + +- (NSString *)description { + NSMutableString *s = [NSMutableString stringWithFormat:@"<%@: %p (%u) (", [self class], self, count_node_values(self)]; + NSUInteger i; + for (i=0; i < BTREE_ORDER; i++) { + if (children[i] == nil) break; + [s appendFormat:@"%s%@", (i == 0 ? "" : ", "), children[i]]; + } + [s appendString:@")>"]; + return s; +} + +@end + +@implementation HFBTree + +- (instancetype)init { + self = [super init]; + depth = BAD_DEPTH; + root = nil; + return self; +} + +- (void)dealloc { + [root release]; + [super dealloc]; +} + +#if HFUNIT_TESTS +- (void)checkIntegrityOfCachedLengths { + if (root == nil) { + /* nothing */ + } + else { + btree_recursive_check_integrity_of_cached_lengths(root); + } +} + +- (void)checkIntegrityOfBTreeStructure { + if (depth == BAD_DEPTH) { + HFASSERT(root == nil); + } + else { + HFBTreeNode *linkHelper[MAX_DEPTH + 1] = {}; + btree_recursive_check_integrity(self, root, depth, linkHelper); + } +} +#endif + +- (HFBTreeIndex)length { + if (root == nil) return 0; + return ((HFBTreeNode *)root)->subtreeLength; +} + +- (void)insertEntry:(id)entryObj atOffset:(HFBTreeIndex)offset { + TreeEntry *entry = (TreeEntry *)entryObj; //avoid a conflicting types warning + HFASSERT(entry); + HFASSERT(offset <= [self length]); + if (! root) { + HFASSERT([self length] == 0); + HFASSERT(depth == BAD_DEPTH); + HFBTreeLeaf *leaf = [[HFBTreeLeaf alloc] init]; + leaf->children[0] = [entry retain]; + leaf->subtreeLength = HFBTreeLength(entry); + root = leaf; + depth = 0; + } + else { + HFBTreeNode *newParentValue = btree_insert_returning_retained_value_for_parent(self, entry, offset); + if (newParentValue) { + HFBTreeBranch *newRoot = [[HFBTreeBranch alloc] init]; + newRoot->children[0] = root; //transfer our retain + newRoot->children[1] = newParentValue; //transfer the retain we got from the function + newRoot->subtreeLength = HFSum(root->subtreeLength, newParentValue->subtreeLength); + root = newRoot; + depth++; + HFASSERT(depth <= MAX_DEPTH); + } +#if FIXUP_LENGTHS + HFBTreeIndex outLength = -1; + if (! btree_are_cached_lengths_correct(root, &outLength)) { + puts("Fixed up length after insertion"); + btree_recursive_fixup_cached_lengths(self, root); + } +#endif + } +} + +- (TreeEntry *)entryContainingOffset:(HFBTreeIndex)offset beginningOffset:(HFBTreeIndex *)outBeginningOffset { + HFASSERT(root != nil); + return btree_search(self, offset, outBeginningOffset); +} + +- (void)removeAllEntries { + [root release]; + root = nil; + depth = BAD_DEPTH; +} + +- (void)removeEntryAtOffset:(HFBTreeIndex)offset { + HFASSERT(root != nil); +#if FIXUP_LENGTHS + const NSUInteger beforeCount = btree_entry_count(root); +#endif + BOOL deleteRoot = btree_remove(self, offset); + if (deleteRoot) { + HFASSERT(count_node_values(root) <= 1); + id newRoot = [root->children[0] retain]; //may be nil! + [root release]; + root = newRoot; + depth--; + } +#if FIXUP_LENGTHS + const NSUInteger afterCount = btree_entry_count(root); + if (beforeCount != afterCount + 1) { + NSLog(@"Bad counts: before %lu, after %lu", beforeCount, afterCount); + } + HFBTreeIndex outLength = -1; + static NSUInteger fixupCount; + if (! btree_are_cached_lengths_correct(root, &outLength)) { + fixupCount++; + printf("Fixed up length after deletion (%lu)\n", (unsigned long)fixupCount); + btree_recursive_fixup_cached_lengths(self, root); + } + else { + //printf("Length post-deletion was OK! (%lu)\n", fixupCount); + } +#endif +} + +- (id)mutableCopyWithZone:(NSZone *)zone { + USE(zone); + HFBTree *result = [[[self class] alloc] init]; + result->depth = depth; + HFBTreeNode *linkingHelper[MAX_DEPTH + 1]; + bzero(linkingHelper, (1 + depth) * sizeof *linkingHelper); + result->root = mutable_copy_node(root, depth, linkingHelper); + return result; +} + +FORCE_STATIC_INLINE ChildIndex_t count_node_values(HFBTreeNode *node) { + ChildIndex_t count; + for (count=0; count < BTREE_LEAF_ORDER; count++) { + if (node->children[count] == nil) break; + } + return count; +} + +FORCE_STATIC_INLINE HFBTreeIndex sum_child_lengths(const id *children, const BOOL isLeaf) { + HFBTreeIndex result = 0; + for (ChildIndex_t childIndex = 0; childIndex < BTREE_ORDER; childIndex++) { + id child = children[childIndex]; + if (! child) break; + HFBTreeIndex childLength = GET_LENGTH(child, isLeaf); + result = HFSum(result, childLength); + } + return result; +} + +FORCE_STATIC_INLINE HFBTreeIndex sum_N_child_lengths(const id *children, ChildIndex_t numChildren, const BOOL isLeaf) { + HFBTreeIndex result = 0; + for (ChildIndex_t childIndex = 0; childIndex < numChildren; childIndex++) { + id child = children[childIndex]; + HFASSERT(child != NULL); + HFBTreeIndex childLength = GET_LENGTH(child, isLeaf); + result = HFSum(result, childLength); + } + return result; +} + +FORCE_STATIC_INLINE ChildIndex_t index_containing_offset(HFBTreeNode *node, HFBTreeIndex offset, HFBTreeIndex * restrict outOffset, const BOOL isLeaf) { + ChildIndex_t childIndex; + HFBTreeIndex previousSum = 0; + const id *children = node->children; + for (childIndex = 0; childIndex < BTREE_ORDER; childIndex++) { + HFASSERT(children[childIndex] != nil); + HFBTreeIndex childLength = GET_LENGTH(children[childIndex], isLeaf); + HFBTreeIndex newSum = HFSum(childLength, previousSum); + if (newSum > offset) { + break; + } + previousSum = newSum; + } + *outOffset = previousSum; + return childIndex; +} + +FORCE_STATIC_INLINE id child_containing_offset(HFBTreeNode *node, HFBTreeIndex offset, HFBTreeIndex * restrict outOffset, const BOOL isLeaf) { + return node->children[index_containing_offset(node, offset, outOffset, isLeaf)]; +} + +FORCE_STATIC_INLINE ChildIndex_t index_for_child_at_offset(HFBTreeNode *node, HFBTreeIndex offset, const BOOL isLeaf) { + ChildIndex_t childIndex; + HFBTreeIndex previousSum = 0; + id *const children = node->children; + for (childIndex = 0; childIndex < BTREE_ORDER; childIndex++) { + if (previousSum == offset) break; + HFASSERT(children[childIndex] != nil); + HFBTreeIndex childLength = GET_LENGTH(children[childIndex], isLeaf); + previousSum = HFSum(childLength, previousSum); + HFASSERT(previousSum <= offset); + } + HFASSERT(childIndex <= BTREE_ORDER); //note we allow the child index to be one past the end (in which case we are sure to split the node) + HFASSERT(previousSum == offset); //but we still require the offset to be the sum of all the lengths of this node + return childIndex; +} + +FORCE_STATIC_INLINE ChildIndex_t child_index_for_insertion_at_offset(HFBTreeBranch *branch, HFBTreeIndex insertionOffset, HFBTreeIndex *outPriorCombinedOffset) { + ChildIndex_t indexForInsertion; + HFBTreeIndex priorCombinedOffset = 0; + id *const children = branch->children; + for (indexForInsertion = 0; indexForInsertion < BTREE_BRANCH_ORDER; indexForInsertion++) { + if (! children[indexForInsertion]) break; + HFBTreeNode *childNode = CHECK_CAST(children[indexForInsertion], HFBTreeNode); + HFBTreeIndex subtreeLength = childNode->subtreeLength; + HFASSERT(subtreeLength > 0); + HFBTreeIndex newOffset = HFSum(priorCombinedOffset, subtreeLength); + if (newOffset >= insertionOffset) { + break; + } + priorCombinedOffset = newOffset; + } + *outPriorCombinedOffset = priorCombinedOffset; + return indexForInsertion; +} + +FORCE_STATIC_INLINE ChildIndex_t child_index_for_deletion_at_offset(HFBTreeBranch *branch, HFBTreeIndex deletionOffset, HFBTreeIndex *outPriorCombinedOffset) { + ChildIndex_t indexForDeletion; + HFBTreeIndex priorCombinedOffset = 0; + for (indexForDeletion = 0; indexForDeletion < BTREE_BRANCH_ORDER; indexForDeletion++) { + HFASSERT(branch->children[indexForDeletion] != nil); + HFBTreeNode *childNode = CHECK_CAST(branch->children[indexForDeletion], HFBTreeNode); + HFBTreeIndex subtreeLength = childNode->subtreeLength; + HFASSERT(subtreeLength > 0); + HFBTreeIndex newOffset = HFSum(priorCombinedOffset, subtreeLength); + if (newOffset > deletionOffset) { + /* Key difference between insertion and deletion: insertion uses >=, while deletion uses > */ + break; + } + priorCombinedOffset = newOffset; + } + *outPriorCombinedOffset = priorCombinedOffset; + return indexForDeletion; +} + +FORCE_STATIC_INLINE void insert_value_into_array(id value, NSUInteger insertionIndex, id *array, NSUInteger arrayCount) { + HFASSERT(insertionIndex <= arrayCount); + HFASSERT(arrayCount > 0); + NSUInteger pushingIndex = arrayCount - 1; + while (pushingIndex > insertionIndex) { + array[pushingIndex] = array[pushingIndex - 1]; + pushingIndex--; + } + array[insertionIndex] = [value retain]; +} + + +FORCE_STATIC_INLINE void remove_value_from_array(NSUInteger removalIndex, id *array, NSUInteger arrayCount) { + HFASSERT(removalIndex < arrayCount); + HFASSERT(arrayCount > 0); + HFASSERT(array[removalIndex] != nil); + [array[removalIndex] release]; + for (NSUInteger pullingIndex = removalIndex + 1; pullingIndex < arrayCount; pullingIndex++) { + array[pullingIndex - 1] = array[pullingIndex]; + } + array[arrayCount - 1] = nil; +} + +static void split_array(const restrict id *values, ChildIndex_t valueCount, restrict id *left, restrict id *right, ChildIndex_t leftArraySizeForClearing) { + const ChildIndex_t midPoint = valueCount/2; + ChildIndex_t inputIndex = 0, outputIndex = 0; + while (inputIndex < midPoint) { + left[outputIndex++] = values[inputIndex++]; + } + + /* Clear the remainder of our left array. Right array does not have to be cleared. */ + HFASSERT(outputIndex <= leftArraySizeForClearing); + while (outputIndex < leftArraySizeForClearing) { + left[outputIndex++] = nil; + } + + /* Move the second half of our values into the right array */ + outputIndex = 0; + while (inputIndex < valueCount) { + right[outputIndex++] = values[inputIndex++]; + } +} + +FORCE_STATIC_INLINE HFBTreeNode *add_child_to_node_possibly_creating_split(HFBTreeNode *node, id value, ChildIndex_t insertionLocation, BOOL isLeaf) { + ChildIndex_t childCount = count_node_values(node); + HFASSERT(insertionLocation <= childCount); + if (childCount < BTREE_ORDER) { + /* No need to make a split */ + insert_value_into_array(value, insertionLocation, node->children, childCount + 1); + node->subtreeLength = HFSum(node->subtreeLength, GET_LENGTH(value, isLeaf)); + return nil; + } + + HFASSERT(node->children[BTREE_ORDER - 1] != nil); /* we require that it be full */ + id allEntries[BTREE_ORDER + 1]; + memcpy(allEntries, node->children, BTREE_ORDER * sizeof *node->children); + allEntries[BTREE_ORDER] = nil; + + /* insert_value_into_array applies a retain, so allEntries owns a retain on its values */ + insert_value_into_array(value, insertionLocation, allEntries, BTREE_ORDER + 1); + HFBTreeNode *newNode = [[[node class] alloc] init]; + + /* figure out our total length */ + HFBTreeIndex totalLength = HFSum(node->subtreeLength, GET_LENGTH(value, isLeaf)); + + /* Distribute half our values to the new leaf */ + split_array(allEntries, sizeof allEntries / sizeof *allEntries, node->children, newNode->children, BTREE_ORDER); + + /* figure out how much is in the new array */ + HFBTreeIndex newNodeLength = sum_child_lengths(newNode->children, isLeaf); + + /* update our lengths */ + HFASSERT(newNodeLength < totalLength); + newNode->subtreeLength = newNodeLength; + node->subtreeLength = totalLength - newNodeLength; + + /* Link it in */ + HFBTreeNode *rightNode = node->right; + newNode->right = rightNode; + if (rightNode) rightNode->left = newNode; + newNode->left = node; + node->right = newNode; + return newNode; +} + +FORCE_STATIC_INLINE void add_values_to_array(const id * restrict srcValues, NSUInteger amountToCopy, id * restrict targetValues, NSUInteger amountToPush) { + // a pushed value at index X goes to index X + amountToCopy + NSUInteger pushIndex = amountToPush; + while (pushIndex--) { + targetValues[amountToCopy + pushIndex] = targetValues[pushIndex]; + } + for (NSUInteger i = 0; i < amountToCopy; i++) { + targetValues[i] = [srcValues[i] retain]; + } +} + +FORCE_STATIC_INLINE void remove_values_from_array(id * restrict array, NSUInteger amountToRemove, NSUInteger totalArrayLength) { + HFASSERT(totalArrayLength >= amountToRemove); + /* Release existing values */ + NSUInteger i; + for (i=0; i < amountToRemove; i++) { + [array[i] release]; + } + /* Move remaining values */ + for (i=amountToRemove; i < totalArrayLength; i++) { + array[i - amountToRemove] = array[i]; + } + /* Clear the end */ + for (i=totalArrayLength - amountToRemove; i < totalArrayLength; i++) { + array[i] = nil; + } +} + +FORCE_STATIC_INLINE BOOL rebalance_node_by_distributing_to_neighbors(HFBTreeNode *node, ChildIndex_t childCount, BOOL isLeaf, BOOL * restrict modifiedLeftNeighbor, BOOL *restrict modifiedRightNeighbor) { + HFASSERT(childCount < BTREE_NODE_MINIMUM_VALUE_COUNT); + BOOL result = NO; + HFBTreeNode *leftNeighbor = node->left, *rightNeighbor = node->right; + const ChildIndex_t leftSpaceAvailable = (leftNeighbor ? BTREE_ORDER - count_node_values(leftNeighbor) : 0); + const ChildIndex_t rightSpaceAvailable = (rightNeighbor ? BTREE_ORDER - count_node_values(rightNeighbor) : 0); + if (leftSpaceAvailable + rightSpaceAvailable >= childCount) { + /* We have enough space to redistribute. Try to do it in such a way that both neighbors end up with the same number of items. */ + ChildIndex_t itemCountForLeft = 0, itemCountForRight = 0, itemCountRemaining = childCount; + if (leftSpaceAvailable > rightSpaceAvailable) { + ChildIndex_t amountForLeft = MIN(leftSpaceAvailable - rightSpaceAvailable, itemCountRemaining); + itemCountForLeft += amountForLeft; + itemCountRemaining -= amountForLeft; + } + else if (rightSpaceAvailable > leftSpaceAvailable) { + ChildIndex_t amountForRight = MIN(rightSpaceAvailable - leftSpaceAvailable, itemCountRemaining); + itemCountForRight += amountForRight; + itemCountRemaining -= amountForRight; + } + /* Now distribute the remainder (if any) evenly, preferring the remainder to go left, because it is slightly cheaper to append to the left than prepend to the right */ + itemCountForRight += itemCountRemaining / 2; + itemCountForLeft += itemCountRemaining - (itemCountRemaining / 2); + HFASSERT(itemCountForLeft <= leftSpaceAvailable); + HFASSERT(itemCountForRight <= rightSpaceAvailable); + HFASSERT(itemCountForLeft + itemCountForRight == childCount); + + if (itemCountForLeft > 0) { + /* append to the end */ + HFBTreeIndex additionalLengthForLeft = sum_N_child_lengths(node->children, itemCountForLeft, isLeaf); + leftNeighbor->subtreeLength = HFSum(leftNeighbor->subtreeLength, additionalLengthForLeft); + add_values_to_array(node->children, itemCountForLeft, leftNeighbor->children + BTREE_ORDER - leftSpaceAvailable, 0); + HFASSERT(leftNeighbor->subtreeLength == sum_child_lengths(leftNeighbor->children, isLeaf)); + *modifiedLeftNeighbor = YES; + } + if (itemCountForRight > 0) { + /* append to the beginning */ + HFBTreeIndex additionalLengthForRight = sum_N_child_lengths(node->children + itemCountForLeft, itemCountForRight, isLeaf); + rightNeighbor->subtreeLength = HFSum(rightNeighbor->subtreeLength, additionalLengthForRight); + add_values_to_array(node->children + itemCountForLeft, itemCountForRight, rightNeighbor->children, BTREE_ORDER - rightSpaceAvailable); + HFASSERT(rightNeighbor->subtreeLength == sum_child_lengths(rightNeighbor->children, isLeaf)); + *modifiedRightNeighbor = YES; + } + /* Remove ourself from the linked list */ + if (leftNeighbor) { + leftNeighbor->right = rightNeighbor; + } + if (rightNeighbor) { + rightNeighbor->left = leftNeighbor; + } + /* Even though we've essentially orphaned ourself, we need to force ourselves consistent (by making ourselves empty) because our parent still references us, and we don't want to make our parent inconsistent. */ + for (ChildIndex_t childIndex = 0; node->children[childIndex] != nil; childIndex++) { + [node->children[childIndex] release]; + node->children[childIndex] = nil; + } + node->subtreeLength = 0; + + result = YES; + } + return result; +} + + +FORCE_STATIC_INLINE BOOL share_children(HFBTreeNode *node, ChildIndex_t childCount, HFBTreeNode *neighbor, BOOL isRightNeighbor, BOOL isLeaf) { + ChildIndex_t neighborCount = count_node_values(neighbor); + ChildIndex_t totalChildren = (childCount + neighborCount); + BOOL result = NO; + if (totalChildren <= 2 * BTREE_LEAF_ORDER && totalChildren >= 2 * BTREE_LEAF_MINIMUM_VALUE_COUNT) { + ChildIndex_t finalMyCount = totalChildren / 2; + ChildIndex_t finalNeighborCount = totalChildren - finalMyCount; + HFASSERT(finalNeighborCount < neighborCount); + HFASSERT(finalMyCount > childCount); + ChildIndex_t amountToTransfer = finalMyCount - childCount; + HFBTreeIndex lengthChange; + if (isRightNeighbor) { + /* Transfer from left end of right neighbor to this right end of this leaf. This retains the values. */ + add_values_to_array(neighbor->children, amountToTransfer, node->children + childCount, 0); + /* Remove from beginning of right neighbor. This releases them. */ + remove_values_from_array(neighbor->children, amountToTransfer, neighborCount); + lengthChange = sum_N_child_lengths(node->children + childCount, amountToTransfer, isLeaf); + } + else { + /* Transfer from right end of left neighbor to left end of this leaf */ + add_values_to_array(neighbor->children + neighborCount - amountToTransfer, amountToTransfer, node->children, childCount); + /* Remove from end of left neighbor */ + remove_values_from_array(neighbor->children + neighborCount - amountToTransfer, amountToTransfer, amountToTransfer); + lengthChange = sum_N_child_lengths(node->children, amountToTransfer, isLeaf); + } + HFASSERT(lengthChange <= neighbor->subtreeLength); + neighbor->subtreeLength -= lengthChange; + node->subtreeLength = HFSum(node->subtreeLength, lengthChange); + HFASSERT(count_node_values(node) == finalMyCount); + HFASSERT(count_node_values(neighbor) == finalNeighborCount); + result = YES; + } + return result; +} + +static BOOL rebalance_node_by_sharing_with_neighbors(HFBTreeNode *node, ChildIndex_t childCount, BOOL isLeaf, BOOL * restrict modifiedLeftNeighbor, BOOL *restrict modifiedRightNeighbor) { + HFASSERT(childCount < BTREE_LEAF_MINIMUM_VALUE_COUNT); + BOOL result = NO; + HFBTreeNode *leftNeighbor = node->left, *rightNeighbor = node->right; + if (leftNeighbor) { + result = share_children(node, childCount, leftNeighbor, NO, isLeaf); + if (result) *modifiedLeftNeighbor = YES; + } + if (! result && rightNeighbor) { + result = share_children(node, childCount, rightNeighbor, YES, isLeaf); + if (result) *modifiedRightNeighbor = YES; + } + return result; +} + +/* Return YES if this leaf should be removed after rebalancing. Other nodes are never removed. */ +FORCE_STATIC_INLINE BOOL rebalance_node_after_deletion(HFBTreeNode *node, ChildIndex_t childCount, BOOL isLeaf, BOOL * restrict modifiedLeftNeighbor, BOOL *restrict modifiedRightNeighbor) { + HFASSERT(childCount < BTREE_LEAF_MINIMUM_VALUE_COUNT); + /* We may only delete this leaf, and not adjacent leaves. Thus our rebalancing strategy is: + If the items to the left or right have sufficient space to hold us, then push our values left or right, and delete this node. + Otherwise, steal items from the left until we have the same number of items. */ + BOOL deleteNode = NO; + if (rebalance_node_by_distributing_to_neighbors(node, childCount, isLeaf, modifiedLeftNeighbor, modifiedRightNeighbor)) { + deleteNode = YES; + //puts("rebalance_node_by_distributing_to_neighbors"); + } + else if (rebalance_node_by_sharing_with_neighbors(node, childCount, isLeaf, modifiedLeftNeighbor, modifiedRightNeighbor)) { + deleteNode = NO; + //puts("rebalance_node_by_sharing_with_neighbors"); + } + else { + [NSException raise:NSInternalInconsistencyException format:@"Unable to rebalance after deleting node %@", node]; + } + return deleteNode; +} + + +FORCE_STATIC_INLINE BOOL remove_value_from_node_with_possible_rebalance(HFBTreeNode *node, ChildIndex_t childIndex, BOOL isRootNode, BOOL isLeaf, BOOL * restrict modifiedLeftNeighbor, BOOL *restrict modifiedRightNeighbor) { + HFASSERT(childIndex < BTREE_ORDER); + HFASSERT(node != nil); + HFASSERT(node->children[childIndex] != nil); + HFBTreeIndex entryLength = GET_LENGTH(node->children[childIndex], isLeaf); + HFASSERT(entryLength <= node->subtreeLength); + node->subtreeLength -= entryLength; + BOOL deleteInputNode = NO; + +#if ! NDEBUG + const id savedChild = node->children[childIndex]; + NSUInteger childMultiplicity = 0; + NSUInteger v; + for (v = 0; v < BTREE_ORDER; v++) { + if (node->children[v] == savedChild) childMultiplicity++; + if (node->children[v] == nil) break; + } + +#endif + + /* Figure out how many children we have; start at one more than childIndex since we know that childIndex is a valid index */ + ChildIndex_t childCount; + for (childCount = childIndex + 1; childCount < BTREE_ORDER; childCount++) { + if (! node->children[childCount]) break; + } + + /* Remove our value at childIndex; this sends it a release message */ + remove_value_from_array(childIndex, node->children, childCount); + HFASSERT(childCount > 0); + childCount--; + +#if ! NDEBUG + for (v = 0; v < childCount; v++) { + if (node->children[v] == savedChild) childMultiplicity--; + } + HFASSERT(childMultiplicity == 1); +#endif + + if (childCount < BTREE_LEAF_MINIMUM_VALUE_COUNT && ! isRootNode) { + /* We have too few items; try to rebalance (this will always be possible except from the root node) */ + deleteInputNode = rebalance_node_after_deletion(node, childCount, isLeaf, modifiedLeftNeighbor, modifiedRightNeighbor); + } + else { + //NSLog(@"Deletion from %@ with %u remaining, %s root node, so no need to rebalance\n", node, childCount, isRootNode ? "is" : "is not"); + } + + return deleteInputNode; +} + +FORCE_STATIC_INLINE void update_node_having_changed_size_of_child(HFBTreeNode *node, BOOL isLeaf) { + HFBTreeIndex newLength = sum_child_lengths(node->children, isLeaf); + /* This should only be called if the length actually changes - so assert as such */ + /* I no longer think the above line is true. It's possible that we can delete a node, and then after a rebalance, we can become the same size we were before. */ + //HFASSERT(node->subtreeLength != newLength); + node->subtreeLength = newLength; +} + +struct SubtreeInfo_t { + HFBTreeBranch *branch; + ChildIndex_t childIndex; //childIndex is the index of the child of branch, not branch's index in its parent +}; + +static HFBTreeLeaf *btree_descend(HFBTree *tree, struct SubtreeInfo_t *outDescentInfo, HFBTreeIndex *insertionOffset, BOOL isForDelete) { + TreeDepth_t maxDepth = tree->depth; + HFASSERT(maxDepth != BAD_DEPTH && maxDepth <= MAX_DEPTH); + id currentBranchOrLeaf = tree->root; + HFBTreeIndex offsetForSubtree = *insertionOffset; + for (TreeDepth_t currentDepth = 0; currentDepth < maxDepth; currentDepth++) { + ASSERT_IS_BRANCH(currentBranchOrLeaf); + HFBTreeBranch *currentBranch = currentBranchOrLeaf; + HFBTreeIndex priorCombinedOffset = (HFBTreeIndex)-1; + ChildIndex_t nextChildIndex = (isForDelete ? child_index_for_deletion_at_offset : child_index_for_insertion_at_offset)(currentBranch, offsetForSubtree, &priorCombinedOffset); + outDescentInfo[currentDepth].branch = currentBranch; + outDescentInfo[currentDepth].childIndex = nextChildIndex; + offsetForSubtree -= priorCombinedOffset; + currentBranchOrLeaf = currentBranch->children[nextChildIndex]; + if (isForDelete) { + HFBTreeNode *node = currentBranchOrLeaf; + HFASSERT(node->subtreeLength > offsetForSubtree); + } + } + ASSERT_IS_LEAF(currentBranchOrLeaf); + *insertionOffset = offsetForSubtree; + return currentBranchOrLeaf; +} + +struct LeafInfo_t { + HFBTreeLeaf *leaf; + ChildIndex_t entryIndex; + HFBTreeIndex offsetOfEntryInTree; +}; + +static struct LeafInfo_t btree_find_leaf(HFBTree *tree, HFBTreeIndex offset) { + TreeDepth_t depth = tree->depth; + HFBTreeNode *currentNode = tree->root; + HFBTreeIndex remainingOffset = offset; + while (depth--) { + HFBTreeIndex beginningOffsetOfNode; + currentNode = child_containing_offset(currentNode, remainingOffset, &beginningOffsetOfNode, NO); + HFASSERT(beginningOffsetOfNode <= remainingOffset); + remainingOffset = remainingOffset - beginningOffsetOfNode; + } + ASSERT_IS_LEAF(currentNode); + HFBTreeIndex startOffsetOfEntry; + ChildIndex_t entryIndex = index_containing_offset(currentNode, remainingOffset, &startOffsetOfEntry, YES); + /* The offset of this entry is the requested offset minus the difference between its starting offset within the leaf and the requested offset within the leaf */ + HFASSERT(remainingOffset >= startOffsetOfEntry); + HFBTreeIndex offsetIntoEntry = remainingOffset - startOffsetOfEntry; + HFASSERT(offset >= offsetIntoEntry); + HFBTreeIndex beginningOffset = offset - offsetIntoEntry; + return (struct LeafInfo_t){.leaf = CHECK_CAST(currentNode, HFBTreeLeaf), .entryIndex = entryIndex, .offsetOfEntryInTree = beginningOffset}; +} + +static TreeEntry *btree_search(HFBTree *tree, HFBTreeIndex offset, HFBTreeIndex *outBeginningOffset) { + struct LeafInfo_t leafInfo = btree_find_leaf(tree, offset); + *outBeginningOffset = leafInfo.offsetOfEntryInTree; + return leafInfo.leaf->children[leafInfo.entryIndex]; +} + +static id btree_insert_returning_retained_value_for_parent(HFBTree *tree, TreeEntry *entry, HFBTreeIndex insertionOffset) { + struct SubtreeInfo_t descentInfo[MAX_DEPTH]; +#if ! NDEBUG + memset(descentInfo, -1, sizeof descentInfo); +#endif + HFBTreeIndex subtreeOffset = insertionOffset; + HFBTreeLeaf *leaf = btree_descend(tree, descentInfo, &subtreeOffset, NO); + ASSERT_IS_LEAF(leaf); + + ChildIndex_t insertionLocation = index_for_child_at_offset(leaf, subtreeOffset, YES); + HFBTreeNode *retainedValueToInsertIntoParentBranch = add_child_to_node_possibly_creating_split(leaf, entry, insertionLocation, YES); + + /* Walk up */ + TreeDepth_t depth = tree->depth; + HFASSERT(depth != BAD_DEPTH); + HFBTreeIndex entryLength = HFBTreeLength(entry); + while (depth--) { + HFBTreeBranch *branch = descentInfo[depth].branch; + branch->subtreeLength = HFSum(branch->subtreeLength, entryLength); + ChildIndex_t childIndex = descentInfo[depth].childIndex; + if (retainedValueToInsertIntoParentBranch) { + HFASSERT(branch->subtreeLength > retainedValueToInsertIntoParentBranch->subtreeLength); + /* Since we copied some stuff out from under ourselves, subtract its length */ + branch->subtreeLength -= retainedValueToInsertIntoParentBranch->subtreeLength; + HFBTreeNode *newRetainedValueToInsertIntoParentBranch = add_child_to_node_possibly_creating_split(branch, retainedValueToInsertIntoParentBranch, childIndex + 1, NO); + [retainedValueToInsertIntoParentBranch release]; + retainedValueToInsertIntoParentBranch = newRetainedValueToInsertIntoParentBranch; + } + } + return retainedValueToInsertIntoParentBranch; +} + +static BOOL btree_remove(HFBTree *tree, HFBTreeIndex deletionOffset) { + struct SubtreeInfo_t descentInfo[MAX_DEPTH]; +#if ! NDEBUG + memset(descentInfo, -1, sizeof descentInfo); +#endif + HFBTreeIndex subtreeOffset = deletionOffset; + HFBTreeLeaf *leaf = btree_descend(tree, descentInfo, &subtreeOffset, YES); + ASSERT_IS_LEAF(leaf); + + HFBTreeIndex previousOffsetSum = 0; + ChildIndex_t childIndex; + for (childIndex = 0; childIndex < BTREE_LEAF_ORDER; childIndex++) { + if (previousOffsetSum == subtreeOffset) break; + TreeEntry *entry = leaf->children[childIndex]; + HFASSERT(entry != nil); //if it were nil, then the offset is too large + HFBTreeIndex childLength = HFBTreeLength(entry); + previousOffsetSum = HFSum(childLength, previousOffsetSum); + } + HFASSERT(childIndex < BTREE_LEAF_ORDER); + HFASSERT(previousOffsetSum == subtreeOffset); + + TreeDepth_t depth = tree->depth; + HFASSERT(depth != BAD_DEPTH); + BOOL modifiedLeft = NO, modifiedRight = NO; + BOOL deleteNode = remove_value_from_node_with_possible_rebalance(leaf, childIndex, depth==0/*isRootNode*/, YES, &modifiedLeft, &modifiedRight); + HFASSERT(btree_are_cached_lengths_correct(leaf, NULL)); + while (depth--) { + HFBTreeBranch *branch = descentInfo[depth].branch; + ChildIndex_t branchChildIndex = descentInfo[depth].childIndex; + BOOL leftNeighborNeedsUpdating = modifiedLeft && branchChildIndex == 0; //if our child tweaked its left neighbor, and its left neighbor is not also a child of us, we need to inform its parent (which is our left neighbor) + BOOL rightNeighborNeedsUpdating = modifiedRight && (branchChildIndex + 1 == BTREE_BRANCH_ORDER || branch->children[branchChildIndex + 1] == NULL); //same goes for right + if (leftNeighborNeedsUpdating) { + HFASSERT(branch->left != NULL); +// NSLog(@"Updating lefty %p", branch->left); + update_node_having_changed_size_of_child(branch->left, NO); + } +#if ! NDEBUG + if (branch->left) HFASSERT(btree_are_cached_lengths_correct(branch->left, NULL)); +#endif + if (rightNeighborNeedsUpdating) { + HFASSERT(branch->right != NULL); +// NSLog(@"Updating righty %p", branch->right); + update_node_having_changed_size_of_child(branch->right, NO); + } +#if ! NDEBUG + if (branch->right) HFASSERT(btree_are_cached_lengths_correct(branch->right, NULL)); +#endif + update_node_having_changed_size_of_child(branch, NO); + modifiedLeft = NO; + modifiedRight = NO; + if (deleteNode) { + deleteNode = remove_value_from_node_with_possible_rebalance(branch, branchChildIndex, depth==0/*isRootNode*/, NO, &modifiedLeft, &modifiedRight); + } + else { + // update_node_having_changed_size_of_child(branch, NO); + // no need to delete parent nodes, so leave deleteNode as NO + } + /* Our parent may have to modify its left or right neighbor if we had to modify our left or right neighbor or if one of our children modified a neighbor that is not also a child of us. */ + modifiedLeft = modifiedLeft || leftNeighborNeedsUpdating; + modifiedRight = modifiedRight || rightNeighborNeedsUpdating; + } + + if (! deleteNode) { + /* Delete the root if it has one node and a depth of at least 1, or zero nodes and a depth of 0 */ + deleteNode = (tree->depth >= 1 && tree->root->children[1] == nil) || (tree->depth == 0 && tree->root->children[0] == nil); + } + return deleteNode; +} + +/* linkingHelper stores the last seen node for each depth. */ +static HFBTreeNode *mutable_copy_node(HFBTreeNode *node, TreeDepth_t depth, HFBTreeNode **linkingHelper) { + if (node == nil) return nil; + HFASSERT(depth != BAD_DEPTH); + Class class = (depth == 0 ? [HFBTreeLeaf class] : [HFBTreeBranch class]); + HFBTreeNode *result = [[class alloc] init]; + result->subtreeLength = node->subtreeLength; + + /* Link us in */ + HFBTreeNode *leftNeighbor = linkingHelper[0]; + if (leftNeighbor != nil) { + leftNeighbor->right = result; + result->left = leftNeighbor; + } + + /* Leave us for our future right neighbor to find */ + linkingHelper[0] = (void *)result; + + HFBTreeIndex index; + for (index = 0; index < BTREE_ORDER; index++) { + id child = node->children[index]; + if (! node->children[index]) break; + if (depth > 0) { + result->children[index] = mutable_copy_node(child, depth - 1, linkingHelper + 1); + } + else { + result->children[index] = [(TreeEntry *)child retain]; + } + } + return result; +} + +__attribute__((unused)) +static BOOL non_nulls_are_grouped_at_start(const id *ptr, NSUInteger count) { + BOOL hasSeenNull = NO; + for (NSUInteger i=0; i < count; i++) { + BOOL ptrIsNull = (ptr[i] == nil); + hasSeenNull = hasSeenNull || ptrIsNull; + if (hasSeenNull && ! ptrIsNull) { + return NO; + } + } + return YES; +} + + +static void btree_recursive_check_integrity(HFBTree *tree, HFBTreeNode *branchOrLeaf, TreeDepth_t depth, HFBTreeNode **linkHelper) { + HFASSERT(linkHelper[0] == branchOrLeaf->left); + if (linkHelper[0]) HFASSERT(linkHelper[0]->right == branchOrLeaf); + linkHelper[0] = branchOrLeaf; + + if (depth == 0) { + HFBTreeLeaf *leaf = CHECK_CAST(branchOrLeaf, HFBTreeLeaf); + HFASSERT(non_nulls_are_grouped_at_start(leaf->children, BTREE_LEAF_ORDER)); + } + else { + HFBTreeBranch *branch = CHECK_CAST(branchOrLeaf, HFBTreeBranch); + HFASSERT(non_nulls_are_grouped_at_start(branch->children, BTREE_BRANCH_ORDER)); + for (ChildIndex_t i = 0; i < BTREE_BRANCH_ORDER; i++) { + if (! branch->children[i]) break; + btree_recursive_check_integrity(tree, branch->children[i], depth - 1, linkHelper + 1); + } + } + ChildIndex_t childCount = count_node_values(branchOrLeaf); + if (depth < tree->depth) { // only the root may have fewer than BTREE_NODE_MINIMUM_VALUE_COUNT + HFASSERT(childCount >= BTREE_NODE_MINIMUM_VALUE_COUNT); + } + HFASSERT(childCount <= BTREE_ORDER); +} + +static HFBTreeIndex btree_recursive_check_integrity_of_cached_lengths(HFBTreeNode *branchOrLeaf) { + HFBTreeIndex result = 0; + if (IS_LEAF(branchOrLeaf)) { + HFBTreeLeaf *leaf = CHECK_CAST(branchOrLeaf, HFBTreeLeaf); + for (ChildIndex_t i = 0; i < BTREE_LEAF_ORDER; i++) { + if (! leaf->children[i]) break; + result = HFSum(result, HFBTreeLength(leaf->children[i])); + } + } + else { + HFBTreeBranch *branch = CHECK_CAST(branchOrLeaf, HFBTreeBranch); + for (ChildIndex_t i = 0; i < BTREE_BRANCH_ORDER; i++) { + if (branch->children[i]) { + HFBTreeIndex subtreeLength = btree_recursive_check_integrity_of_cached_lengths(branch->children[i]); + result = HFSum(result, subtreeLength); + } + } + } + HFASSERT(result == branchOrLeaf->subtreeLength); + return result; +} + +static BOOL btree_are_cached_lengths_correct(HFBTreeNode *branchOrLeaf, HFBTreeIndex *outLength) { + if (! branchOrLeaf) { + if (outLength) *outLength = 0; + return YES; + } + HFBTreeIndex length = 0; + if (IS_LEAF(branchOrLeaf)) { + HFBTreeLeaf *leaf = CHECK_CAST(branchOrLeaf, HFBTreeLeaf); + for (ChildIndex_t i=0; i < BTREE_LEAF_ORDER; i++) { + if (! leaf->children[i]) break; + length = HFSum(length, HFBTreeLength(leaf->children[i])); + } + } + else { + HFBTreeBranch *branch = CHECK_CAST(branchOrLeaf, HFBTreeBranch); + for (ChildIndex_t i=0; i < BTREE_BRANCH_ORDER; i++) { + if (! branch->children[i]) break; + HFBTreeIndex subLength = (HFBTreeIndex)-1; + if (! btree_are_cached_lengths_correct(branch->children[i], &subLength)) { + return NO; + } + length = HFSum(length, subLength); + } + } + if (outLength) *outLength = length; + return length == branchOrLeaf->subtreeLength; +} + +#if FIXUP_LENGTHS +static NSUInteger btree_entry_count(HFBTreeNode *branchOrLeaf) { + NSUInteger result = 0; + if (branchOrLeaf == nil) { + // do nothing + } + else if (IS_LEAF(branchOrLeaf)) { + HFBTreeLeaf *leaf = CHECK_CAST(branchOrLeaf, HFBTreeLeaf); + for (ChildIndex_t i=0; i < BTREE_LEAF_ORDER; i++) { + if (! leaf->children[i]) break; + result++; + } + } + else { + HFBTreeBranch *branch = CHECK_CAST(branchOrLeaf, HFBTreeBranch); + for (ChildIndex_t i=0; i < BTREE_LEAF_ORDER; i++) { + if (! branch->children[i]) break; + result += btree_entry_count(branch->children[i]); + } + } + return result; +} + +static HFBTreeIndex btree_recursive_fixup_cached_lengths(HFBTree *tree, HFBTreeNode *branchOrLeaf) { + HFBTreeIndex result = 0; + if (IS_LEAF(branchOrLeaf)) { + HFBTreeLeaf *leaf = CHECK_CAST(branchOrLeaf, HFBTreeLeaf); + for (ChildIndex_t i = 0; i < BTREE_LEAF_ORDER; i++) { + if (! leaf->children[i]) break; + result = HFSum(result, HFBTreeLength(leaf->children[i])); + } + } + else { + HFBTreeBranch *branch = CHECK_CAST(branchOrLeaf, HFBTreeBranch); + for (ChildIndex_t i = 0; i < BTREE_BRANCH_ORDER; i++) { + if (! branch->children[i]) break; + btree_recursive_fixup_cached_lengths(tree, branch->children[i]); + result = HFSum(result, CHECK_CAST(branch->children[i], HFBTreeNode)->subtreeLength); + } + } + branchOrLeaf->subtreeLength = result; + return result; +} +#endif + +FORCE_STATIC_INLINE void btree_apply_function_to_entries(HFBTree *tree, HFBTreeIndex offset, BOOL (*func)(id, HFBTreeIndex, void *), void *userInfo) { + struct LeafInfo_t leafInfo = btree_find_leaf(tree, offset); + HFBTreeLeaf *leaf = leafInfo.leaf; + ChildIndex_t entryIndex = leafInfo.entryIndex; + HFBTreeIndex leafOffset = leafInfo.offsetOfEntryInTree; + BOOL continueApplying = YES; + while (leaf != NULL) { + for (; entryIndex < BTREE_LEAF_ORDER; entryIndex++) { + TreeEntry *entry = leaf->children[entryIndex]; + if (! entry) break; + continueApplying = func(entry, leafOffset, userInfo); + if (! continueApplying) break; + leafOffset = HFSum(leafOffset, HFBTreeLength(entry)); + } + if (! continueApplying) break; + leaf = CHECK_CAST_OR_NULL(leaf->right, HFBTreeLeaf); + entryIndex = 0; + } +} + +- (NSEnumerator *)entryEnumerator { + if (! root) return [@[] objectEnumerator]; + HFBTreeLeaf *leaf = btree_find_leaf(self, 0).leaf; + return [[[HFBTreeEnumerator alloc] initWithLeaf:leaf] autorelease]; +} + + +static BOOL add_to_array(id entry, HFBTreeIndex offset __attribute__((unused)), void *array) { + [(id)array addObject:entry]; + return YES; +} + +- (NSArray *)allEntries { + if (! root) return @[]; + NSUInteger treeCapacity = 1; + unsigned int depthIndex = depth; + while (depthIndex--) treeCapacity *= BTREE_ORDER; + NSMutableArray *result = [NSMutableArray arrayWithCapacity: treeCapacity/2]; //assume we're half full + btree_apply_function_to_entries(self, 0, add_to_array, result); + return result; +} + +- (void)applyFunction:(BOOL (*)(id entry, HFBTreeIndex offset, void *userInfo))func toEntriesStartingAtOffset:(HFBTreeIndex)offset withUserInfo:(void *)userInfo { + NSParameterAssert(func != NULL); + if (! root) return; + btree_apply_function_to_entries(self, offset, func, userInfo); +} + +@end + + +@implementation HFBTreeEnumerator + +- (instancetype)initWithLeaf:(HFBTreeLeaf *)leaf { + NSParameterAssert(leaf != nil); + ASSERT_IS_LEAF(leaf); + currentLeaf = leaf; + return self; +} + +- (id)nextObject { + if (! currentLeaf) return nil; + if (childIndex >= BTREE_LEAF_ORDER || currentLeaf->children[childIndex] == nil) { + childIndex = 0; + currentLeaf = CHECK_CAST_OR_NULL(currentLeaf->right, HFBTreeLeaf); + } + if (currentLeaf == nil) return nil; + HFASSERT(currentLeaf->children[childIndex] != nil); + return currentLeaf->children[childIndex++]; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.h b/thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.h new file mode 100644 index 000000000..3c1aac075 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.h @@ -0,0 +1,30 @@ +// +// HFBTreeByteArray.h +// HexFiend_2 +// +// Created by peter on 4/28/09. +// Copyright 2009 ridiculous_fish. All rights reserved. +// + +#import + +@class HFBTree; + +/*! @class HFBTreeByteArray +@brief The principal efficient implementation of HFByteArray. + +HFBTreeByteArray is an efficient subclass of HFByteArray that stores @link HFByteSlice HFByteSlices@endlink, using a 10-way B+ tree. This allows for insertion, deletion, and searching in approximately log-base-10 time. + +Create an HFBTreeByteArray via \c -init. It has no methods other than those on HFByteArray. +*/ + +@interface HFBTreeByteArray : HFByteArray { +@private + HFBTree *btree; +} + +/*! Designated initializer for HFBTreeByteArray. +*/ +- (instancetype)init; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.m b/thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.m new file mode 100644 index 000000000..33ba96739 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFBTreeByteArray.m @@ -0,0 +1,279 @@ +// +// HFBTreeByteArray.m +// HexFiend_2 +// +// Created by peter on 4/28/09. +// Copyright 2009 ridiculous_fish. All rights reserved. +// + +#import +#import +#import +#import + +@implementation HFBTreeByteArray + +- (instancetype)init { + if ((self = [super init])) { + btree = [[HFBTree alloc] init]; + } + return self; +} + +- (void)dealloc { + [btree release]; + [super dealloc]; +} + +- (unsigned long long)length { + return [btree length]; +} + +- (NSArray *)byteSlices { + return [btree allEntries]; +} + +- (NSEnumerator *)byteSliceEnumerator { + return [btree entryEnumerator]; +} + +- (NSString*)description { + NSMutableArray* result = [NSMutableArray array]; + NSEnumerator *enumer = [self byteSliceEnumerator]; + HFByteSlice *slice; + unsigned long long offset = 0; + while ((slice = [enumer nextObject])) { + unsigned long long length = [slice length]; + [result addObject:[NSString stringWithFormat:@"{%llu - %llu}", offset, length]]; + offset = HFSum(offset, length); + } + if (! [result count]) return @"(empty tree)"; + return [NSString stringWithFormat:@"<%@: %p>: %@", [self class], self, [result componentsJoinedByString:@" "]]; + +} + +struct HFBTreeByteArrayCopyInfo_t { + unsigned char *dst; + unsigned long long startingOffset; + NSUInteger remainingLength; +}; + +static BOOL copy_bytes(id entry, HFBTreeIndex offset, void *userInfo) { + struct HFBTreeByteArrayCopyInfo_t *info = userInfo; + HFByteSlice *slice = entry; + HFASSERT(slice != nil); + HFASSERT(info != NULL); + HFASSERT(offset <= info->startingOffset); + + unsigned long long sliceLength = [slice length]; + HFASSERT(sliceLength > 0); + unsigned long long offsetIntoSlice = info->startingOffset - offset; + HFASSERT(offsetIntoSlice < sliceLength); + NSUInteger amountToCopy = ll2l(MIN(info->remainingLength, sliceLength - offsetIntoSlice)); + HFRange srcRange = HFRangeMake(info->startingOffset - offset, amountToCopy); + [slice copyBytes:info->dst range:srcRange]; + info->dst += amountToCopy; + info->startingOffset = HFSum(info->startingOffset, amountToCopy); + info->remainingLength -= amountToCopy; + return info->remainingLength > 0; +} + +- (void)copyBytes:(unsigned char *)dst range:(HFRange)range { + HFASSERT(range.length <= NSUIntegerMax); + HFASSERT(HFMaxRange(range) <= [self length]); + if (range.length > 0) { + struct HFBTreeByteArrayCopyInfo_t copyInfo = {.dst = dst, .remainingLength = ll2l(range.length), .startingOffset = range.location}; + [btree applyFunction:copy_bytes toEntriesStartingAtOffset:range.location withUserInfo:©Info]; + } +} + +- (HFByteSlice *)sliceContainingByteAtIndex:(unsigned long long)offset beginningOffset:(unsigned long long *)actualOffset { + return [btree entryContainingOffset:offset beginningOffset:actualOffset]; +} + +/* Given a HFByteArray and a range contained within it, return the first byte slice containing that range, and the range within that slice. Modifies the given range to reflect what you get when the returned slice is removed. */ +static inline HFByteSlice *findInitialSlice(HFBTree *btree, HFRange *inoutArrayRange, HFRange *outRangeWithinSlice) { + const HFRange arrayRange = *inoutArrayRange; + const unsigned long long arrayRangeEnd = HFMaxRange(arrayRange); + + unsigned long long offsetIntoSlice, lengthFromOffsetIntoSlice; + + unsigned long long beginningOffset; + HFByteSlice *slice = [btree entryContainingOffset:arrayRange.location beginningOffset:&beginningOffset]; + const unsigned long long sliceLength = [slice length]; + HFASSERT(beginningOffset <= arrayRange.location); + offsetIntoSlice = arrayRange.location - beginningOffset; + HFASSERT(offsetIntoSlice < sliceLength); + + unsigned long long sliceEndInArray = HFSum(sliceLength, beginningOffset); + if (sliceEndInArray <= arrayRangeEnd) { + /* Our slice ends before or at the requested range end */ + lengthFromOffsetIntoSlice = sliceLength - offsetIntoSlice; + } + else { + /* Our slice ends after the requested range end */ + unsigned long long overflow = sliceEndInArray - arrayRangeEnd; + HFASSERT(HFSum(overflow, offsetIntoSlice) < sliceLength); + lengthFromOffsetIntoSlice = sliceLength - HFSum(overflow, offsetIntoSlice); + } + + /* Set the out range to the input range minus the range consumed by the slice */ + inoutArrayRange->location = MIN(sliceEndInArray, arrayRangeEnd); + inoutArrayRange->length = arrayRangeEnd - inoutArrayRange->location; + + /* Set the out range within the slice to what we computed */ + *outRangeWithinSlice = HFRangeMake(offsetIntoSlice, lengthFromOffsetIntoSlice); + + return slice; +} + +- (BOOL)fastPathInsertByteSlice:(HFByteSlice *)slice atOffset:(unsigned long long)offset { + HFASSERT(offset > 0); + unsigned long long priorSliceOffset; + HFByteSlice *priorSlice = [btree entryContainingOffset:offset - 1 beginningOffset:&priorSliceOffset]; + HFByteSlice *appendedSlice = [priorSlice byteSliceByAppendingSlice:slice]; + if (appendedSlice) { + [btree removeEntryAtOffset:priorSliceOffset]; + [btree insertEntry:appendedSlice atOffset:priorSliceOffset]; + return YES; + } + else { + return NO; + } +} + +- (void)insertByteSlice:(HFByteSlice *)slice atOffset:(unsigned long long)offset { + [self incrementGenerationOrRaiseIfLockedForSelector:_cmd]; + + if (offset == 0) { + [btree insertEntry:slice atOffset:0]; + } + else if (offset == [btree length]) { + if (! [self fastPathInsertByteSlice:slice atOffset:offset]) { + [btree insertEntry:slice atOffset:offset]; + } + } + else { + unsigned long long beginningOffset; + HFByteSlice *overlappingSlice = [btree entryContainingOffset:offset beginningOffset:&beginningOffset]; + if (beginningOffset == offset) { + if (! [self fastPathInsertByteSlice:slice atOffset:offset]) { + [btree insertEntry:slice atOffset:offset]; + } + } + else { + HFASSERT(offset > beginningOffset); + unsigned long long offsetIntoSlice = offset - beginningOffset; + unsigned long long sliceLength = [overlappingSlice length]; + HFASSERT(sliceLength > offsetIntoSlice); + HFByteSlice *left = [overlappingSlice subsliceWithRange:HFRangeMake(0, offsetIntoSlice)]; + HFByteSlice *right = [overlappingSlice subsliceWithRange:HFRangeMake(offsetIntoSlice, sliceLength - offsetIntoSlice)]; + [btree removeEntryAtOffset:beginningOffset]; + + [btree insertEntry:right atOffset:beginningOffset]; + + /* Try the fast appending path */ + HFByteSlice *joinedSlice = [left byteSliceByAppendingSlice:slice]; + if (joinedSlice) { + [btree insertEntry:joinedSlice atOffset:beginningOffset]; + } + else { + [btree insertEntry:slice atOffset:beginningOffset]; + [btree insertEntry:left atOffset:beginningOffset]; + } + } + } +} + +- (void)deleteBytesInRange:(HFRange)range { + [self incrementGenerationOrRaiseIfLockedForSelector:_cmd]; + HFRange remainingRange = range; + + HFASSERT(HFMaxRange(range) <= [self length]); + if (range.length == 0) return; //nothing to delete + + //fast path for deleting everything + if (range.location == 0 && range.length == [self length]) { + [btree removeAllEntries]; + return; + } + + unsigned long long beforeLength = [self length]; + + unsigned long long rangeStartLocation = range.location; + HFByteSlice *beforeSlice = nil, *afterSlice = nil; + while (remainingRange.length > 0) { + HFRange rangeWithinSlice; + HFByteSlice *slice = findInitialSlice(btree, &remainingRange, &rangeWithinSlice); + const unsigned long long sliceLength = [slice length]; + const unsigned long long rangeWithinSliceEnd = HFMaxRange(rangeWithinSlice); + HFRange lefty = HFRangeMake(0, rangeWithinSlice.location); + HFRange righty = HFRangeMake(rangeWithinSliceEnd, sliceLength - rangeWithinSliceEnd); + HFASSERT(lefty.length == 0 || beforeSlice == nil); + HFASSERT(righty.length == 0 || afterSlice == nil); + + unsigned long long beginningOffset = remainingRange.location - HFMaxRange(rangeWithinSlice); + + if (lefty.length > 0){ + beforeSlice = [slice subsliceWithRange:lefty]; + rangeStartLocation = beginningOffset; + } + if (righty.length > 0) afterSlice = [slice subsliceWithRange:righty]; + + [btree removeEntryAtOffset:beginningOffset]; + remainingRange.location = beginningOffset; + } + if (afterSlice) { + [self insertByteSlice:afterSlice atOffset:rangeStartLocation]; + } + if (beforeSlice) { + [self insertByteSlice:beforeSlice atOffset:rangeStartLocation]; + } + + unsigned long long afterLength = [self length]; + HFASSERT(beforeLength - afterLength == range.length); +} + +- (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)lrange { + [self incrementGenerationOrRaiseIfLockedForSelector:_cmd]; + + if (lrange.length > 0) { + [self deleteBytesInRange:lrange]; + } + if ([slice length] > 0) { + [self insertByteSlice:slice atOffset:lrange.location]; + } +} + +- (id)mutableCopyWithZone:(NSZone *)zone { + USE(zone); + HFBTreeByteArray *result = [[[self class] alloc] init]; + [result->btree release]; + result->btree = [btree mutableCopy]; + return result; +} + +- (id)subarrayWithRange:(HFRange)range { + if (range.location == 0 && range.length == [self length]) { + return [[self mutableCopy] autorelease]; + } + HFBTreeByteArray *result = [[[[self class] alloc] init] autorelease]; + HFRange remainingRange = range; + unsigned long long offsetInResult = 0; + while (remainingRange.length > 0) { + HFRange rangeWithinSlice; + HFByteSlice *slice = findInitialSlice(btree, &remainingRange, &rangeWithinSlice); + HFByteSlice *subslice; + if (rangeWithinSlice.location == 0 && rangeWithinSlice.length == [slice length]) { + subslice = slice; + } + else { + subslice = [slice subsliceWithRange:rangeWithinSlice]; + } + [result insertByteSlice:subslice atOffset:offsetInResult]; + offsetInResult = HFSum(offsetInResult, rangeWithinSlice.length); + } + return result; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFByteArray.h b/thirdparty/SameBoy-old/HexFiend/HFByteArray.h new file mode 100644 index 000000000..dd452d5b1 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFByteArray.h @@ -0,0 +1,180 @@ +// +// HFByteArray.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +@class HFByteSlice, HFFileReference, HFByteRangeAttributeArray; + +typedef NS_ENUM(NSUInteger, HFByteArrayDataStringType) { + HFHexDataStringType, + HFASCIIDataStringType +}; + + +/*! @class HFByteArray +@brief The principal Model class for HexFiend's MVC architecture. + +HFByteArray implements the Model portion of HexFiend.framework. It is logically a mutable, resizable array of bytes, with a 64 bit length. It is somewhat analagous to a 64 bit version of NSMutableData, except that it is designed to enable efficient (faster than O(n)) implementations of insertion and deletion. + +HFByteArray, being an abstract class, will raise an exception if you attempt to instantiate it directly. For most uses, instantiate HFBTreeByteArray instead, with the usual [[class alloc] init]. + +HFByteArray also exposes itself as an array of @link HFByteSlice HFByteSlices@endlink, which are logically immutable arrays of bytes. which is useful for operations such as file saving that need to access the underlying byte slices. + +HFByteArray contains a generation count, which is incremented whenever the HFByteArray changes (to allow caches to be implemented on top of it). It also includes the notion of locking: a locked HFByteArray will raise an exception if written to, but it may still be read. + +ByteArrays have the usual threading restrictions for non-concurrent data structures. It is safe to read an HFByteArray concurrently from multiple threads. It is not safe to read an HFByteArray while it is being modified from another thread, nor is it safe to modify one simultaneously from two threads. + +HFByteArray is an abstract class. It will raise an exception if you attempt to instantiate it directly. The principal concrete subclass is HFBTreeByteArray. +*/ + +@class HFByteRangeAttributeArray; + +@interface HFByteArray : NSObject { +@private + NSUInteger changeLockCounter; + NSUInteger changeGenerationCount; +} + +/*! @name Initialization + */ +//@{ +/*! Initialize to a byte array containing only the given slice. */ +- (instancetype)initWithByteSlice:(HFByteSlice *)slice; + +/*! Initialize to a byte array containing the slices of the given array. */ +- (instancetype)initWithByteArray:(HFByteArray *)array; +//@} + + +/*! @name Accessing raw data +*/ +//@{ + +/*! Returns the length of the HFByteArray as a 64 bit unsigned long long. This is an abstract method that concrete subclasses must override. */ +- (unsigned long long)length; + +/*! Copies a range of bytes into a buffer. This is an abstract method that concrete subclasses must override. */ +- (void)copyBytes:(unsigned char *)dst range:(HFRange)range; +//@} + +/*! @name Accessing byte slices + Methods to access the byte slices underlying the HFByteArray. +*/ +//@{ +/*! Returns the contents of the receiver as an array of byte slices. This is an abstract method that concrete subclasses must override. */ +- (NSArray *)byteSlices; + +/*! Returns an NSEnumerator representing the byte slices of the receiver. This is implemented as enumerating over the result of -byteSlices, but subclasses can override this to be more efficient. */ +- (NSEnumerator *)byteSliceEnumerator; + +/*! Returns the byte slice containing the byte at the given index, and the actual offset of this slice. */ +- (HFByteSlice *)sliceContainingByteAtIndex:(unsigned long long)offset beginningOffset:(unsigned long long *)actualOffset; +//@} + +/*! @name Modifying the byte array + Methods to modify the given byte array. +*/ +//@{ +/*! Insert an HFByteSlice in the given range. The maximum value of the range must not exceed the length of the subarray. The length of the given slice is not required to be equal to length of the range - in other words, this method may change the length of the receiver. This is an abstract method that concrete subclasses must override. */ +- (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)lrange; + +/*! Insert an HFByteArray in the given range. This is implemented via calling insertByteSlice:inRange: with the byte slices from the given byte array. */ +- (void)insertByteArray:(HFByteArray *)array inRange:(HFRange)lrange; + +/*! Delete bytes in the given range. This is implemented on the base class by creating an empty byte array and inserting it in the range to be deleted, via insertByteSlice:inRange:. */ +- (void)deleteBytesInRange:(HFRange)range; + +/*! Returns a new HFByteArray containing the given range. This is an abstract method that concrete subclasses must override. */ +- (HFByteArray *)subarrayWithRange:(HFRange)range; +//@} + +/*! @name Write locking and generation count + Methods to lock and query the lock that prevents writes. +*/ +//@{ + +/*! Increment the change lock. Until the change lock reaches 0, all modifications to the receiver will raise an exception. */ +- (void)incrementChangeLockCounter; + +/*! Decrement the change lock. If the change lock reaches 0, modifications will be allowed again. */ +- (void)decrementChangeLockCounter; + +/*! Query if the changes are locked. This method is KVO compliant. */ +- (BOOL)changesAreLocked; +//@} + +/* @name Generation count + Manipulate the generation count */ +// @{ +/*! Increments the generation count, unless the receiver is locked, in which case it raises an exception. All subclasses of HFByteArray should call this method at the beginning of any overridden method that may modify the receiver. + @param sel The selector that would modify the receiver (e.g. deleteBytesInRange:). This is usually _cmd. */ +- (void)incrementGenerationOrRaiseIfLockedForSelector:(SEL)sel; + +/*! Return the change generation count. Every change to the ByteArray increments this by one or more. This can be used for caching layers on top of HFByteArray, to known when to expire their cache. */ +- (NSUInteger)changeGenerationCount; + +//@} + + + +/*! @name Searching +*/ +//@{ +/*! Searches the receiver for a byte array matching findBytes within the given range, and returns the index that it was found. This is a concrete method on HFByteArray. + @param findBytes The HFByteArray containing the data to be found (the needle to the receiver's haystack). + @param range The range of the receiver in which to search. The end of the range must not exceed the receiver's length. + @param forwards If this is YES, then the first match within the range is returned. Otherwise the last is returned. + @param progressTracker An HFProgressTracker to allow progress reporting and cancelleation for the search operation. + @return The index in the receiver of bytes equal to findBytes, or ULLONG_MAX if the byte array was not found (or the operation was cancelled) +*/ +- (unsigned long long)indexOfBytesEqualToBytes:(HFByteArray *)findBytes inRange:(HFRange)range searchingForwards:(BOOL)forwards trackingProgress:(id)progressTracker; +//@} + +@end + + +/*! @category HFByteArray(HFFileWriting) + @brief HFByteArray methods for writing to files, and preparing other HFByteArrays for potentially destructive file writes. +*/ +@interface HFByteArray (HFFileWriting) +/*! Attempts to write the receiver to a file. This is a concrete method on HFByteArray. + @param targetURL A URL to the file to be written to. It is OK for the receiver to contain one or more instances of HFByteSlice that are sourced from the file. + @param progressTracker An HFProgressTracker to allow progress reporting and cancelleation for the write operation. + @param error An out NSError parameter. + @return YES if the write succeeded, NO if it failed. +*/ +- (BOOL)writeToFile:(NSURL *)targetURL trackingProgress:(id)progressTracker error:(NSError **)error; + +/*! Returns the ranges of the file that would be modified, if the receiver were written to it. This is useful (for example) in determining if the clipboard can be preserved after a save operation. This is a concrete method on HFByteArray. + @param reference An HFFileReference to the file to be modified + @return An array of @link HFRangeWrapper HFRangeWrappers@endlink, representing the ranges of the file that would be affected. If no range would be affected, the result is an empty array. +*/ +- (NSArray *)rangesOfFileModifiedIfSavedToFile:(HFFileReference *)reference; + +/*! Attempts to modify the receiver so that it no longer depends on any of the HFRanges in the array within the given file. It is not necessary to perform this operation on the byte array that is being written to the file. + @param ranges An array of HFRangeWrappers, representing ranges in the given file that the receiver should no longer depend on. + @param reference The HFFileReference that the receiver should no longer depend on. + @param hint A dictionary that can be used to improve the efficiency of the operation, by allowing multiple byte arrays to share the same state. If you plan to call this method on multiple byte arrays, pass the first one an empty NSMutableDictionary, and pass the same dictionary to subsequent calls. + @return A YES return indicates the operation was successful, and the receiver no longer contains byte slices that source data from any of the ranges of the given file (or never did). A NO return indicates that breaking the dependencies would require too much memory, and so the receiver still depends on some of those ranges. +*/ +- (BOOL)clearDependenciesOnRanges:(NSArray *)ranges inFile:(HFFileReference *)reference hint:(NSMutableDictionary *)hint; + +@end + + +/*! @category HFByteArray(HFAttributes) + @brief HFByteArray methods for attributes of byte arrays. +*/ +@interface HFByteArray (HFAttributes) + +/*! Returns a byte range attribute array for the bytes in the given range. */ +- (HFByteRangeAttributeArray *)attributesForBytesInRange:(HFRange)range; + +/*! Returns the HFByteArray level byte range attribute array. Default is to return nil. */ +- (HFByteRangeAttributeArray *)byteRangeAttributeArray; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFByteArray.m b/thirdparty/SameBoy-old/HexFiend/HFByteArray.m new file mode 100644 index 000000000..55f25cc81 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFByteArray.m @@ -0,0 +1,218 @@ +// +// HFByteArray.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + + +@implementation HFByteArray + +- (instancetype)init { + if ([self class] == [HFByteArray class]) { + [NSException raise:NSInvalidArgumentException format:@"init sent to HFByteArray, but HFByteArray is an abstract class. Instantiate one of its subclasses instead, like HFBTreeByteArray."]; + } + return [super init]; +} + +- (instancetype)initWithByteSlice:(HFByteSlice *)slice { + if(!(self = [self init])) return nil; + self = [self init]; + [self insertByteSlice:slice inRange:HFRangeMake(0, 0)]; + return self; +} + +- (instancetype)initWithByteArray:(HFByteArray *)array { + if(!(self = [self init])) return nil; + NSEnumerator *e = [array byteSliceEnumerator]; + HFByteSlice *slice; + while((slice = [e nextObject])) { + [self insertByteSlice:slice inRange:HFRangeMake([self length], 0)]; + } + return self; +} + +- (NSArray *)byteSlices { UNIMPLEMENTED(); } +- (unsigned long long)length { UNIMPLEMENTED(); } +- (void)copyBytes:(unsigned char *)dst range:(HFRange)range { USE(dst); USE(range); UNIMPLEMENTED_VOID(); } +- (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)lrange { USE(slice); USE(lrange); UNIMPLEMENTED_VOID(); } + +- (NSEnumerator *)byteSliceEnumerator { + return [[self byteSlices] objectEnumerator]; +} + +- (HFByteSlice *)sliceContainingByteAtIndex:(unsigned long long)offset beginningOffset:(unsigned long long *)actualOffset { + HFByteSlice *slice; + unsigned long long current = 0; + NSEnumerator *enumer = [self byteSliceEnumerator]; + while ((slice = [enumer nextObject])) { + unsigned long long sum = HFSum([slice length], current); + if (sum > offset) break; + current = sum; + } + if (actualOffset) *actualOffset = current; + return slice; +} + +- (void)insertByteArray:(HFByteArray*)array inRange:(HFRange)lrange { + REQUIRE_NOT_NULL(array); + HFASSERT(HFRangeIsSubrangeOfRange(lrange, HFRangeMake(0, [self length]))); +#ifndef NDEBUG + unsigned long long expectedLength = [self length] - lrange.length + [array length]; +#endif + [self incrementGenerationOrRaiseIfLockedForSelector:_cmd]; + NSEnumerator *sliceEnumerator; + HFByteSlice *byteSlice; + if (array == self) { + /* Guard against self insertion */ + sliceEnumerator = [[array byteSlices] objectEnumerator]; + } + else { + sliceEnumerator = [array byteSliceEnumerator]; + } + while ((byteSlice = [sliceEnumerator nextObject])) { + [self insertByteSlice:byteSlice inRange:lrange]; + lrange.location += [byteSlice length]; + lrange.length = 0; + } + /* If there were no slices, delete the lrange */ + if (lrange.length > 0) { + [self deleteBytesInRange:lrange]; + } +#ifndef NDEBUG + HFASSERT(expectedLength == [self length]); +#endif +} + +- (HFByteArray *)subarrayWithRange:(HFRange)range { USE(range); UNIMPLEMENTED(); } + +- (id)mutableCopyWithZone:(NSZone *)zone { + USE(zone); + return [[self subarrayWithRange:HFRangeMake(0, [self length])] retain]; +} + +- (id)copyWithZone:(NSZone *)zone { + USE(zone); + return [[self subarrayWithRange:HFRangeMake(0, [self length])] retain]; +} + +- (void)deleteBytesInRange:(HFRange)lrange { + [self incrementGenerationOrRaiseIfLockedForSelector:_cmd]; + HFByteSlice* slice = [[HFFullMemoryByteSlice alloc] initWithData:[NSData data]]; + [self insertByteSlice:slice inRange:lrange]; + [slice release]; +} + +- (BOOL)isEqual:v { + REQUIRE_NOT_NULL(v); + if (self == v) return YES; + else if (! [v isKindOfClass:[HFByteArray class]]) return NO; + else { + HFByteArray* obj = v; + unsigned long long length = [self length]; + if (length != [obj length]) return NO; + unsigned long long offset; + unsigned char buffer1[1024]; + unsigned char buffer2[sizeof buffer1 / sizeof *buffer1]; + for (offset = 0; offset < length; offset += sizeof buffer1) { + size_t amountToGrab = sizeof buffer1; + if (amountToGrab > length - offset) amountToGrab = ll2l(length - offset); + [self copyBytes:buffer1 range:HFRangeMake(offset, amountToGrab)]; + [obj copyBytes:buffer2 range:HFRangeMake(offset, amountToGrab)]; + if (memcmp(buffer1, buffer2, amountToGrab)) return NO; + } + } + return YES; +} + +- (unsigned long long)indexOfBytesEqualToBytes:(HFByteArray *)findBytes inRange:(HFRange)range searchingForwards:(BOOL)forwards trackingProgress:(id)progressTracker { + UNIMPLEMENTED(); +} + +- (BOOL)_debugIsEqual:(HFByteArray *)v { + REQUIRE_NOT_NULL(v); + if (! [v isKindOfClass:[HFByteArray class]]) return NO; + HFByteArray* obj = v; + unsigned long long length = [self length]; + if (length != [obj length]) { + printf("Lengths differ: %llu versus %llu\n", length, [obj length]); + abort(); + return NO; + } + + unsigned long long offset; + unsigned char buffer1[1024]; + unsigned char buffer2[sizeof buffer1 / sizeof *buffer1]; + for (offset = 0; offset < length; offset += sizeof buffer1) { + memset(buffer1, 0, sizeof buffer1); + memset(buffer2, 0, sizeof buffer2); + size_t amountToGrab = sizeof buffer1; + if (amountToGrab > length - offset) amountToGrab = ll2l(length - offset); + [self copyBytes:buffer1 range:HFRangeMake(offset, amountToGrab)]; + [obj copyBytes:buffer2 range:HFRangeMake(offset, amountToGrab)]; + size_t i; + for (i=0; i < amountToGrab; i++) { + if (buffer1[i] != buffer2[i]) { + printf("Inconsistency found at %llu (%02x versus %02x)\n", i + offset, buffer1[i], buffer2[i]); + abort(); + return NO; + } + } + } + return YES; +} + +- (NSData *)_debugData { + NSMutableData *data = [NSMutableData dataWithLength:(NSUInteger)[self length]]; + [self copyBytes:[data mutableBytes] range:HFRangeMake(0, [self length])]; + return data; +} + +- (BOOL)_debugIsEqualToData:(NSData *)val { + REQUIRE_NOT_NULL(val); + HFByteArray *byteArray = [[NSClassFromString(@"HFFullMemoryByteArray") alloc] init]; + HFByteSlice *byteSlice = [[HFFullMemoryByteSlice alloc] initWithData:val]; + [byteArray insertByteSlice:byteSlice inRange:HFRangeMake(0, 0)]; + [byteSlice release]; + BOOL result = [self _debugIsEqual:byteArray]; + [byteArray release]; + return result; +} + +- (void)incrementChangeLockCounter { + [self willChangeValueForKey:@"changesAreLocked"]; + if (HFAtomicIncrement(&changeLockCounter, NO) == 0) { + [NSException raise:NSInvalidArgumentException format:@"change lock counter overflow for %@", self]; + } + [self didChangeValueForKey:@"changesAreLocked"]; +} + +- (void)decrementChangeLockCounter { + [self willChangeValueForKey:@"changesAreLocked"]; + if (HFAtomicDecrement(&changeLockCounter, NO) == NSUIntegerMax) { + [NSException raise:NSInvalidArgumentException format:@"change lock counter underflow for %@", self]; + } + [self didChangeValueForKey:@"changesAreLocked"]; +} + +- (BOOL)changesAreLocked { + return !! changeLockCounter; +} + +- (NSUInteger)changeGenerationCount { + return changeGenerationCount; +} + +- (void)incrementGenerationOrRaiseIfLockedForSelector:(SEL)sel { + if (changeLockCounter) { + [NSException raise:NSInvalidArgumentException format:@"Selector %@ sent to a locked byte array %@", NSStringFromSelector(sel), self]; + } + else { + HFAtomicIncrement(&changeGenerationCount, YES); + } +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFByteArray_Internal.h b/thirdparty/SameBoy-old/HexFiend/HFByteArray_Internal.h new file mode 100644 index 000000000..648dd92c9 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFByteArray_Internal.h @@ -0,0 +1,8 @@ +#import + +@interface HFByteArray (HFInternal) + +- (BOOL)_debugIsEqual:(HFByteArray *)val; +- (BOOL)_debugIsEqualToData:(NSData *)val; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFByteSlice.h b/thirdparty/SameBoy-old/HexFiend/HFByteSlice.h new file mode 100644 index 000000000..b17da08d0 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFByteSlice.h @@ -0,0 +1,53 @@ +// +// HFByteSlice.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +@class HFFileReference, HFByteRangeAttributeArray; + +/*! @class HFByteSlice +@brief A class representing a source of data for an HFByteArray. + +HFByteSlice is an abstract class encapsulating primitive data sources (files, memory buffers, etc.). Each source must support random access reads, and have a well defined length. All HFByteSlices are \b immutable. + +The two principal subclasses of HFByteSlice are HFSharedMemoryByteSlice and HFFileByteSlice, which respectively encapsulate data from memory and from a file. +*/ +@interface HFByteSlice : NSObject { + NSUInteger retainCount; +} + +/*! Return the length of the byte slice as a 64 bit value. This is an abstract method that concrete subclasses must override. */ +- (unsigned long long)length; + +/*! Copies a range of data from the byte slice into an in-memory buffer. This is an abstract method that concrete subclasses must override. */ +- (void)copyBytes:(unsigned char *)dst range:(HFRange)range; + +/*! Returns a new slice containing a subrange of the given slice. This is an abstract method that concrete subclasses must override. */ +- (HFByteSlice *)subsliceWithRange:(HFRange)range; + +/*! Attempts to create a new byte slice by appending one byte slice to another. This does not modify the receiver or the slice argument (after all, both are immutable). This is provided as an optimization, and is allowed to return nil if the appending cannot be done efficiently. The default implementation returns nil. +*/ +- (HFByteSlice *)byteSliceByAppendingSlice:(HFByteSlice *)slice; + +/*! Returns YES if the receiver is sourced from a file. The default implementation returns NO. This is used to estimate cost when writing to a file. +*/ +- (BOOL)isSourcedFromFile; + +/*! For a given file reference, returns the range within the file that the receiver is sourced from. If the receiver is not sourced from this file, returns {ULLONG_MAX, ULLONG_MAX}. The default implementation returns {ULLONG_MAX, ULLONG_MAX}. This is used during file saving to to determine how to properly overwrite a given file. +*/ +- (HFRange)sourceRangeForFile:(HFFileReference *)reference; + +@end + +/*! @category HFByteSlice(HFAttributes) + @brief Methods for querying attributes of individual byte slices. */ +@interface HFByteSlice (HFAttributes) + +/*! Returns the attributes for the bytes in the given range. */ +- (HFByteRangeAttributeArray *)attributesForBytesInRange:(HFRange)range; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFByteSlice.m b/thirdparty/SameBoy-old/HexFiend/HFByteSlice.m new file mode 100644 index 000000000..fadb442a8 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFByteSlice.m @@ -0,0 +1,85 @@ +// +// HFByteSlice.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + + +@implementation HFByteSlice + +- (instancetype)init { + if ([self class] == [HFByteSlice class]) { + [NSException raise:NSInvalidArgumentException format:@"init sent to HFByteArray, but HFByteArray is an abstract class. Instantiate one of its subclasses instead."]; + } + return [super init]; +} + +- (unsigned long long)length { UNIMPLEMENTED(); } + +- (void)copyBytes:(unsigned char*)dst range:(HFRange)range { USE(dst); USE(range); UNIMPLEMENTED_VOID(); } + +- (HFByteSlice *)subsliceWithRange:(HFRange)range { USE(range); UNIMPLEMENTED(); } + +- (void)constructNewByteSlicesAboutRange:(HFRange)range first:(HFByteSlice **)first second:(HFByteSlice **)second { + const unsigned long long length = [self length]; + + //clip the range to our extent + range.location = llmin(range.location, length); + range.length = llmin(range.length, length - range.location); + + HFRange firstRange = {0, range.location}; + HFRange secondRange = {range.location + range.length, [self length] - (range.location + range.length)}; + + if (first) { + if (firstRange.length > 0) + *first = [self subsliceWithRange:firstRange]; + else + *first = nil; + } + + if (second) { + if (secondRange.length > 0) + *second = [self subsliceWithRange:secondRange]; + else + *second = nil; + } +} + +- (HFByteSlice *)byteSliceByAppendingSlice:(HFByteSlice *)slice { + USE(slice); + return nil; +} + +- (HFByteRangeAttributeArray *)attributesForBytesInRange:(HFRange)range { + USE(range); + return nil; +} + +- (BOOL)isSourcedFromFile { + return NO; +} + +- (HFRange)sourceRangeForFile:(HFFileReference *)reference { + USE(reference); + return HFRangeMake(ULLONG_MAX, ULLONG_MAX); +} + +- (id)retain { + HFAtomicIncrement(&retainCount, NO); + return self; +} + +- (oneway void)release { + if (HFAtomicDecrement(&retainCount, NO) == (NSUInteger)(-1)) { + [self dealloc]; + } +} + +- (NSUInteger)retainCount { + return 1 + retainCount; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFByteSlice_Private.h b/thirdparty/SameBoy-old/HexFiend/HFByteSlice_Private.h new file mode 100644 index 000000000..2827bfd33 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFByteSlice_Private.h @@ -0,0 +1,7 @@ +#import + +@interface HFByteSlice (HFByteSlice_Private) + +- (void)constructNewByteSlicesAboutRange:(HFRange)range first:(HFByteSlice **)first second:(HFByteSlice **)second; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFController.h b/thirdparty/SameBoy-old/HexFiend/HFController.h new file mode 100644 index 000000000..4a59a4d6a --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFController.h @@ -0,0 +1,395 @@ +// +// HFController.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +#import + +/*! @header HFController + @abstract The HFController.h header contains the HFController class, which is a central class in Hex Fiend. +*/ + +@class HFRepresenter, HFByteArray, HFFileReference, HFControllerCoalescedUndo, HFByteRangeAttributeArray; + +/*! @enum HFControllerPropertyBits + The HFControllerPropertyBits bitmask is used to inform the HFRepresenters of a change in the current state that they may need to react to. A bitmask of the changed properties is passed to representerChangedProperties:. It is common for multiple properties to be included in such a bitmask. +*/ +typedef NS_OPTIONS(NSUInteger, HFControllerPropertyBits) { + HFControllerContentValue = 1 << 0, /*!< Indicates that the contents of the ByteArray has changed within the document. There is no indication as to what the change is. If redisplaying everything is expensive, Representers should cache their displayed data and compute any changes manually. */ + HFControllerContentLength = 1 << 1, /*!< Indicates that the length of the ByteArray has changed. */ + HFControllerDisplayedLineRange = 1 << 2, /*!< Indicates that the displayedLineRange property of the document has changed (e.g. the user scrolled). */ + HFControllerSelectedRanges = 1 << 3, /*!< Indicates that the selectedContentsRanges property of the document has changed (e.g. the user selected some other range). */ + HFControllerSelectionPulseAmount = 1 << 4, /*!< Indicates that the amount of "pulse" to show in the Find pulse indicator has changed. */ + HFControllerBytesPerLine = 1 << 5, /*!< Indicates that the number of bytes to show per line has changed. */ + HFControllerBytesPerColumn = 1 << 6, /*!< Indicates that the number of bytes per column (byte grouping) has changed. */ + HFControllerEditable = 1 << 7, /*!< Indicates that the document has become (or is no longer) editable. */ + HFControllerFont = 1 << 8, /*!< Indicates that the font property has changed. */ + HFControllerAntialias = 1 << 9, /*!< Indicates that the shouldAntialias property has changed. */ + HFControllerLineHeight = 1 << 10, /*!< Indicates that the lineHeight property has changed. */ + HFControllerViewSizeRatios = 1 << 11, /*!< Indicates that the optimum size for each view may have changed; used by HFLayoutController after font changes. */ + HFControllerByteRangeAttributes = 1 << 12, /*!< Indicates that some attributes of the ByteArray has changed within the document. There is no indication as to what the change is. */ + HFControllerByteGranularity = 1 << 13, /*!< Indicates that the byte granularity has changed. For example, when moving from ASCII to UTF-16, the byte granularity increases from 1 to 2. */ + HFControllerBookmarks = 1 << 14, /*!< Indicates that a bookmark has been added or removed. */ + HFControllerColorBytes = 1 << 15, /*!< Indicates that the shouldColorBytes property has changed. */ + HFControllerShowCallouts = 1 << 16, /*!< Indicates that the shouldShowCallouts property has changed. */ + HFControllerHideNullBytes = 1 << 17, /*!< Indicates that the shouldHideNullBytes property has changed. */ +}; + +/*! @enum HFControllerMovementDirection + +The HFControllerMovementDirection enum is used to specify a direction (either left or right) in various text editing APIs. HexFiend does not support left-to-right languages. +*/ +typedef NS_ENUM(NSInteger, HFControllerMovementDirection) { + HFControllerDirectionLeft, + HFControllerDirectionRight +}; + +/*! @enum HFControllerSelectionTransformation + +The HFControllerSelectionTransformation enum is used to specify what happens to the selection in various APIs. This is mainly interesting for text-editing style Representers. +*/ +typedef NS_ENUM(NSInteger, HFControllerSelectionTransformation) { + HFControllerDiscardSelection, /*!< The selection should be discarded. */ + HFControllerShiftSelection, /*!< The selection should be moved, without changing its length. */ + HFControllerExtendSelection /*!< The selection should be extended, changing its length. */ +}; + +/*! @enum HFControllerMovementGranularity + +The HFControllerMovementGranularity enum is used to specify the granularity of text movement in various APIs. This is mainly interesting for text-editing style Representers. +*/ +typedef NS_ENUM(NSInteger, HFControllerMovementGranularity) { + HFControllerMovementByte, /*!< Move by individual bytes */ + HFControllerMovementColumn, /*!< Move by a column */ + HFControllerMovementLine, /*!< Move by lines */ + HFControllerMovementPage, /*!< Move by pages */ + HFControllerMovementDocument /*!< Move by the whole document */ +}; + +/*! @enum HFEditMode + +HFEditMode enumerates the different edit modes that a document might be in. + */ +typedef NS_ENUM(NSInteger, HFEditMode) { + HFInsertMode, + HFOverwriteMode, + HFReadOnlyMode, +} ; + +/*! @class HFController +@brief A central class that acts as the controller layer for HexFiend.framework + +HFController acts as the controller layer in the MVC architecture of HexFiend. The HFController plays several significant central roles, including: + - Mediating between the data itself (in the HFByteArray) and the views of the data (the @link HFRepresenter HFRepresenters@endlink). + - Propagating changes to the views. + - Storing properties common to all Representers, such as the currently diplayed range, the currently selected range(s), the font, etc. + - Handling text editing actions, such as selection changes or insertions/deletions. + +An HFController is the top point of ownership for a HexFiend object graph. It retains both its ByteArray (model) and its array of Representers (views). + +You create an HFController via [[HFController alloc] init]. After that, give it an HFByteArray via setByteArray:, and some Representers via addRepresenter:. Then insert the Representers' views in a window, and you're done. + +*/ +@interface HFController : NSObject { +@private + NSMutableArray *representers; + HFByteArray *byteArray; + NSMutableArray *selectedContentsRanges; + HFRange displayedContentsRange; + HFFPRange displayedLineRange; + NSUInteger bytesPerLine; + NSUInteger bytesPerColumn; + CGFloat lineHeight; + + NSUInteger currentPropertyChangeToken; + NSMutableArray *additionalPendingTransactions; + HFControllerPropertyBits propertiesToUpdateInCurrentTransaction; + + NSUndoManager *undoManager; + NSMutableSet *undoOperations; + HFControllerCoalescedUndo *undoCoalescer; + + unsigned long long selectionAnchor; + HFRange selectionAnchorRange; + + CFAbsoluteTime pulseSelectionStartTime, pulseSelectionCurrentTime; + NSTimer *pulseSelectionTimer; + + /* Basic cache support */ + HFRange cachedRange; + NSData *cachedData; + NSUInteger cachedGenerationIndex; + + struct { + unsigned antialias:1; + unsigned colorbytes:1; + unsigned showcallouts:1; + unsigned hideNullBytes:1; + HFEditMode editMode:2; + unsigned editable:1; + unsigned selectable:1; + unsigned selectionInProgress:1; + unsigned shiftExtendSelection:1; + unsigned commandExtendSelection:1; + unsigned livereload:1; + } _hfflags; +} + +/*! @name Representer handling. + Methods for modifying the list of HFRepresenters attached to a controller. Attached representers receive the controllerDidChange: message when various properties of the controller change. A representer may only be attached to one controller at a time. Representers are retained by the controller. +*/ +//@{ +/// Gets the current array of representers attached to this controller. +@property (readonly, copy) NSArray *representers; + +/// Adds a new representer to this controller. +- (void)addRepresenter:(HFRepresenter *)representer; + +/// Removes an existing representer from this controller. The representer must be present in the array of representers. +- (void)removeRepresenter:(HFRepresenter *)representer; + +//@} + +/*! @name Property transactions + Methods for temporarily delaying notifying representers of property changes. There is a property transaction stack, and all property changes are collected until the last token is popped off the stack, at which point all representers are notified of all collected changes via representerChangedProperties:. To use this, call beginPropertyChangeTransaction, and record the token that is returned. Pass it to endPropertyChangeTransaction: to notify representers of all changed properties in bulk. + + Tokens cannot be popped out of order - they are used only as a correctness check. +*/ +//@{ +/*! Begins delaying property change transactions. Returns a token that should be passed to endPropertyChangeTransactions:. */ +- (NSUInteger)beginPropertyChangeTransaction; + +/*! Pass a token returned from beginPropertyChangeTransaction to this method to pop the transaction off the stack and, if the stack is empty, to notify Representers of all collected changes. Tokens cannot be popped out of order - they are used strictly as a correctness check. */ +- (void)endPropertyChangeTransaction:(NSUInteger)token; +//@} + +/*! @name Byte array + Set and get the byte array. */ +//@{ + +/*! The byte array must be non-nil. In general, HFRepresenters should not use this to determine what bytes to display. Instead they should use copyBytes:range: or dataForRange: below. */ +@property (nonatomic, strong) HFByteArray *byteArray; + +/*! Replaces the entire byte array with a new one, preserving as much of the selection as possible. Unlike setByteArray:, this method is undoable, and intended to be used from representers that make a global change (such as Replace All). */ +- (void)replaceByteArray:(HFByteArray *)newArray; +//@} + +/*! @name Properties shared between all representers + The following properties are considered global among all HFRepresenters attached to the receiver. +*/ +//@{ +/*! Returns the number of lines on which the cursor may be placed. This is always at least 1, and is equivalent to (unsigned long long)(HFRoundUpToNextMultiple(contentsLength, bytesPerLine) / bytesPerLine) */ +- (unsigned long long)totalLineCount; + +/*! Indicates the number of bytes per line, which is a global property among all the line-oriented representers. */ +- (NSUInteger)bytesPerLine; + +/*! Returns the height of a line, in points. This is generally determined by the font. Representers that wish to align things to lines should use this. */ +- (CGFloat)lineHeight; + +//@} + +/*! @name Selection pulsing + Used to show the current selection after a change, similar to Find in Safari +*/ +//{@ + +/*! Begins selection pulsing (e.g. following a successful Find operation). Representers will receive callbacks indicating that HFControllerSelectionPulseAmount has changed. */ +- (void)pulseSelection; + +/*! Return the amount that the "Find pulse indicator" should show. 0 means no pulse, 1 means maximum pulse. This is useful for Representers that support find and replace. */ +- (double)selectionPulseAmount; +//@} + +/*! @name Selection handling + Methods for manipulating the current selected ranges. Hex Fiend supports discontiguous selection. +*/ +//{@ + +/*! An array of HFRangeWrappers, representing the selected ranges. It satisfies the following: + The array is non-nil. + There always is at least one selected range. + If any range has length 0, that range is the only range. + No range extends beyond the contentsLength, with the exception of a single zero-length range at the end. + + When setting, the setter MUST obey the above criteria. A zero length range when setting or getting represents the cursor position. */ +@property (nonatomic, copy) NSArray *selectedContentsRanges; + +/*! Selects the entire contents. */ +- (IBAction)selectAll:(id)sender; + +/*! Returns the smallest value in the selected contents ranges, or the insertion location if the selection is empty. */ +- (unsigned long long)minimumSelectionLocation; + +/*! Returns the largest HFMaxRange of the selected contents ranges, or the insertion location if the selection is empty. */ +- (unsigned long long)maximumSelectionLocation; + +/*! Convenience method for creating a byte array containing all of the selected bytes. If the selection has length 0, this returns an empty byte array. */ +- (HFByteArray *)byteArrayForSelectedContentsRanges; +//@} + +/* Number of bytes used in each column for a text-style representer. */ +@property (nonatomic) NSUInteger bytesPerColumn; + +/*! @name Edit Mode + Determines what mode we're in, read-only, overwrite or insert. */ +@property (nonatomic) HFEditMode editMode; + +/*! @name Displayed line range + Methods for setting and getting the current range of displayed lines. +*/ +//{@ +/*! Get the current displayed line range. The displayed line range is an HFFPRange (range of long doubles) containing the lines that are currently displayed. + + The values may be fractional. That is, if only the bottom half of line 4 through the top two thirds of line 8 is shown, then the displayedLineRange.location will be 4.5 and the displayedLineRange.length will be 3.17 ( = 7.67 - 4.5). Representers are expected to be able to handle such fractional values. + + When setting the displayed line range, the given range must be nonnegative, and the maximum of the range must be no larger than the total line count. + +*/ +@property (nonatomic) HFFPRange displayedLineRange; + +/*! Modify the displayedLineRange so that as much of the given range as can fit is visible. If possible, moves by as little as possible so that the visible ranges before and afterward intersect with each other. */ +- (void)maximizeVisibilityOfContentsRange:(HFRange)range; + +/*! Modify the displayedLineRange as to center the given contents range. If the range is near the bottom or top, this will center as close as possible. If contents range is too large to fit, it centers the top of the range. contentsRange may be empty. */ +- (void)centerContentsRange:(HFRange)range; + +//@} + +/*! The current font. */ +@property (nonatomic, copy) NSFont *font; + +/*! The undo manager. If no undo manager is set, then undo is not supported. By default the undo manager is nil. +*/ +@property (nonatomic, strong) NSUndoManager *undoManager; + +/*! Whether the user can edit the document. */ +@property (nonatomic) BOOL editable; + +/*! Whether the text should be antialiased. Note that Mac OS X settings may prevent antialiasing text below a certain point size. */ +@property (nonatomic) BOOL shouldAntialias; + +/*! When enabled, characters have a background color that correlates to their byte values. */ +@property (nonatomic) BOOL shouldColorBytes; + +/*! When enabled, byte bookmarks display callout-style labels attached to them. */ +@property (nonatomic) BOOL shouldShowCallouts; + +/*! When enabled, null bytes are hidden in the hex view. */ +@property (nonatomic) BOOL shouldHideNullBytes; + +/*! When enabled, unmodified documents are auto refreshed to their latest on disk state. */ +@property (nonatomic) BOOL shouldLiveReload; + +/*! Representer initiated property changes + Called from a representer to indicate when some internal property of the representer has changed which requires that some properties be recalculated. +*/ +//@{ +/*! Callback for a representer-initiated change to some property. For example, if some property of a view changes that would cause the number of bytes per line to change, then the representer should call this method which will trigger the HFController to recompute the relevant properties. */ + +- (void)representer:(HFRepresenter *)rep changedProperties:(HFControllerPropertyBits)properties; +//@} + +/*! @name Mouse selection + Methods to handle mouse selection. Representers that allow text selection should call beginSelectionWithEvent:forByteIndex: upon receiving a mouseDown event, and then continueSelectionWithEvent:forByteIndex: for mouseDragged events, terminating with endSelectionWithEvent:forByteIndex: upon receiving the mouse up. HFController will compute the correct selected ranges and propagate any changes via the HFControllerPropertyBits mechanism. */ +//@{ +/*! Begin a selection session, with a mouse down at the given byte index. */ +- (void)beginSelectionWithEvent:(NSEvent *)event forByteIndex:(unsigned long long)byteIndex; + +/*! Continue a selection session, whe the user drags over the given byte index. */ +- (void)continueSelectionWithEvent:(NSEvent *)event forByteIndex:(unsigned long long)byteIndex; + +/*! End a selection session, with a mouse up at the given byte index. */ +- (void)endSelectionWithEvent:(NSEvent *)event forByteIndex:(unsigned long long)byteIndex; + +/*! @name Scrollling + Support for the mouse wheel and scroll bars. */ +//@{ +/*! Trigger scrolling appropriate for the given scroll event. */ +- (void)scrollWithScrollEvent:(NSEvent *)scrollEvent; + +/*! Trigger scrolling by the given number of lines. If lines is positive, then the document is scrolled down; otherwise it is scrolled up. */ +- (void)scrollByLines:(long double)lines; + +//@} + +/*! @name Keyboard navigation + Support for chaging the selection via the keyboard +*/ + +/*! General purpose navigation function. Modify the selection in the given direction by the given number of bytes. The selection is modifed according to the given transformation. If useAnchor is set, then anchored selection is used; otherwise any anchor is discarded. + + This has a few limitations: + - Only HFControllerDirectionLeft and HFControllerDirectionRight movement directions are supported. + - Anchored selection is not supported for HFControllerShiftSelection (useAnchor must be NO) +*/ +- (void)moveInDirection:(HFControllerMovementDirection)direction byByteCount:(unsigned long long)amountToMove withSelectionTransformation:(HFControllerSelectionTransformation)transformation usingAnchor:(BOOL)useAnchor; + +/*! Navigation designed for key events. */ +- (void)moveInDirection:(HFControllerMovementDirection)direction withGranularity:(HFControllerMovementGranularity)granularity andModifySelection:(BOOL)extendSelection; +- (void)moveToLineBoundaryInDirection:(HFControllerMovementDirection)direction andModifySelection:(BOOL)extendSelection; + +/*! @name Text editing + Methods to support common text editing operations */ +//@{ + +/*! Replaces the selection with the given data. For something like a hex view representer, it takes two keypresses to create a whole byte; the way this is implemented, the first keypress goes into the data as a complete byte, and the second one (if any) replaces it. If previousByteCount > 0, then that many prior bytes are replaced, without breaking undo coalescing. For previousByteCount to be > 0, the following must be true: There is only one selected range, and it is of length 0, and its location >= previousByteCount + + These functions return YES if they succeed, and NO if they fail. Currently they may fail only in overwrite mode, if you attempt to insert data that would require lengthening the byte array. + + These methods are undoable. + */ +- (BOOL)insertByteArray:(HFByteArray *)byteArray replacingPreviousBytes:(unsigned long long)previousByteCount allowUndoCoalescing:(BOOL)allowUndoCoalescing; +- (BOOL)insertData:(NSData *)data replacingPreviousBytes:(unsigned long long)previousByteCount allowUndoCoalescing:(BOOL)allowUndoCoalescing; + +/*! Deletes the selection. This operation is undoable. */ +- (void)deleteSelection; + +/*! If the selection is empty, deletes one byte in a given direction, which must be HFControllerDirectionLeft or HFControllerDirectionRight; if the selection is not empty, deletes the selection. Undoable. */ +- (void)deleteDirection:(HFControllerMovementDirection)direction; + +//@} + +/*! @name Reading data + Methods for reading data */ + +/*! Returns an NSData representing the given HFRange. The length of the HFRange must be of a size that can reasonably be fit in memory. This method may cache the result. */ +- (NSData *)dataForRange:(HFRange)range; + +/*! Copies data within the given HFRange into an in-memory buffer. This is equivalent to [[controller byteArray] copyBytes:bytes range:range]. */ +- (void)copyBytes:(unsigned char *)bytes range:(HFRange)range; + +/*! Returns total number of bytes. This is equivalent to [[controller byteArray] length]. */ +- (unsigned long long)contentsLength; + +- (void) reloadData; +- (void)_ensureVisibilityOfLocation:(unsigned long long)location; +@end + +/*! A notification posted whenever any of the HFController's properties change. The object is the HFController. The userInfo contains one key, HFControllerChangedPropertiesKey, which contains an NSNumber with the changed properties as a HFControllerPropertyBits bitmask. This is useful for external objects to be notified of changes. HFRepresenters added to the HFController are notified via the controllerDidChange: message. +*/ +extern NSString * const HFControllerDidChangePropertiesNotification; + +/*! @name HFControllerDidChangePropertiesNotification keys +*/ +//@{ +extern NSString * const HFControllerChangedPropertiesKey; //!< A key in the HFControllerDidChangeProperties containing a bitmask of the changed properties, as a HFControllerPropertyBits +//@} + +/*! A notification posted from prepareForChangeInFile:fromWritingByteArray: because we are about to write a ByteArray to a file. The object is the FileReference. + Currently, HFControllers do not listen for this notification. This is because under GC there is no way of knowing whether the controller is live or not. However, pasteboard owners do listen for it, because as long as we own a pasteboard we are guaranteed to be live. +*/ +extern NSString * const HFPrepareForChangeInFileNotification; + +/*! @name HFPrepareForChangeInFileNotification keys +*/ +//@{ +extern NSString * const HFChangeInFileByteArrayKey; //!< A key in the HFPrepareForChangeInFileNotification specifying the byte array that will be written +extern NSString * const HFChangeInFileModifiedRangesKey; //!< A key in the HFPrepareForChangeInFileNotification specifying the array of HFRangeWrappers indicating which parts of the file will be modified +extern NSString * const HFChangeInFileShouldCancelKey; //!< A key in the HFPrepareForChangeInFileNotification specifying an NSValue containing a pointer to a BOOL. If set to YES, then someone was unable to prepare and the file should not be saved. It's a good idea to check if this value points to YES; if so your notification handler does not have to do anything. +extern NSString * const HFChangeInFileHintKey; //!< The hint parameter that you may pass to clearDependenciesOnRanges:inFile:hint: +//@} diff --git a/thirdparty/SameBoy-old/HexFiend/HFController.m b/thirdparty/SameBoy-old/HexFiend/HFController.m new file mode 100644 index 000000000..9d4b1aec0 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFController.m @@ -0,0 +1,1905 @@ +// +// HFController.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +/* Used for the anchor range and location */ +#define NO_SELECTION ULLONG_MAX + +#define VALIDATE_SELECTION() [self _ensureSelectionIsValid] + +#define BENCHMARK_BYTEARRAYS 0 + +#define BEGIN_TRANSACTION() NSUInteger token = [self beginPropertyChangeTransaction] +#define END_TRANSACTION() [self endPropertyChangeTransaction:token] + +static const CGFloat kScrollMultiplier = (CGFloat)1.5; + +static const CFTimeInterval kPulseDuration = .2; + +static void *KVOContextChangesAreLocked = &KVOContextChangesAreLocked; + +NSString * const HFPrepareForChangeInFileNotification = @"HFPrepareForChangeInFileNotification"; +NSString * const HFChangeInFileByteArrayKey = @"HFChangeInFileByteArrayKey"; +NSString * const HFChangeInFileModifiedRangesKey = @"HFChangeInFileModifiedRangesKey"; +NSString * const HFChangeInFileShouldCancelKey = @"HFChangeInFileShouldCancelKey"; +NSString * const HFChangeInFileHintKey = @"HFChangeInFileHintKey"; + +NSString * const HFControllerDidChangePropertiesNotification = @"HFControllerDidChangePropertiesNotification"; +NSString * const HFControllerChangedPropertiesKey = @"HFControllerChangedPropertiesKey"; + + +typedef NS_ENUM(NSInteger, HFControllerSelectAction) { + eSelectResult, + eSelectAfterResult, + ePreserveSelection, + NUM_SELECTION_ACTIONS +}; + +@interface HFController (ForwardDeclarations) +- (void)_commandInsertByteArrays:(NSArray *)byteArrays inRanges:(NSArray *)ranges withSelectionAction:(HFControllerSelectAction)selectionAction; +- (void)_removeUndoManagerNotifications; +- (void)_removeAllUndoOperations; +- (void)_registerUndoOperationForInsertingByteArrays:(NSArray *)byteArrays inRanges:(NSArray *)ranges withSelectionAction:(HFControllerSelectAction)selectionAction; + +- (void)_updateBytesPerLine; +- (void)_updateDisplayedRange; +@end + +@interface NSEvent (HFLionStuff) +- (CGFloat)scrollingDeltaY; +- (BOOL)hasPreciseScrollingDeltas; +- (CGFloat)deviceDeltaY; +@end + +static inline Class preferredByteArrayClass(void) { + return [HFBTreeByteArray class]; +} + +@implementation HFController + +- (void)_sharedInit { + selectedContentsRanges = [[NSMutableArray alloc] initWithObjects:[HFRangeWrapper withRange:HFRangeMake(0, 0)], nil]; + byteArray = [[preferredByteArrayClass() alloc] init]; + [byteArray addObserver:self forKeyPath:@"changesAreLocked" options:0 context:KVOContextChangesAreLocked]; + selectionAnchor = NO_SELECTION; + undoOperations = [[NSMutableSet alloc] init]; +} + +- (instancetype)init { + self = [super init]; + [self _sharedInit]; + bytesPerLine = 16; + bytesPerColumn = 1; + _hfflags.editable = YES; + _hfflags.antialias = YES; + _hfflags.showcallouts = YES; + _hfflags.hideNullBytes = NO; + _hfflags.selectable = YES; + representers = [[NSMutableArray alloc] init]; + [self setFont:[NSFont fontWithName:HFDEFAULT_FONT size:HFDEFAULT_FONTSIZE]]; + return self; +} + +- (void)dealloc { + [representers makeObjectsPerformSelector:@selector(_setController:) withObject:nil]; + [representers release]; + [selectedContentsRanges release]; + [self _removeUndoManagerNotifications]; + [self _removeAllUndoOperations]; + [undoOperations release]; + [undoManager release]; + [undoCoalescer release]; + [_font release]; + [byteArray removeObserver:self forKeyPath:@"changesAreLocked"]; + [byteArray release]; + [cachedData release]; + [additionalPendingTransactions release]; + [super dealloc]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [coder encodeObject:representers forKey:@"HFRepresenters"]; + [coder encodeInt64:bytesPerLine forKey:@"HFBytesPerLine"]; + [coder encodeInt64:bytesPerColumn forKey:@"HFBytesPerColumn"]; + [coder encodeObject:_font forKey:@"HFFont"]; + [coder encodeDouble:lineHeight forKey:@"HFLineHeight"]; + [coder encodeBool:_hfflags.antialias forKey:@"HFAntialias"]; + [coder encodeBool:_hfflags.colorbytes forKey:@"HFColorBytes"]; + [coder encodeBool:_hfflags.showcallouts forKey:@"HFShowCallouts"]; + [coder encodeBool:_hfflags.hideNullBytes forKey:@"HFHidesNullBytes"]; + [coder encodeBool:_hfflags.livereload forKey:@"HFLiveReload"]; + [coder encodeInt:_hfflags.editMode forKey:@"HFEditMode"]; + [coder encodeBool:_hfflags.editable forKey:@"HFEditable"]; + [coder encodeBool:_hfflags.selectable forKey:@"HFSelectable"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super init]; + [self _sharedInit]; + bytesPerLine = (NSUInteger)[coder decodeInt64ForKey:@"HFBytesPerLine"]; + bytesPerColumn = (NSUInteger)[coder decodeInt64ForKey:@"HFBytesPerColumn"]; + _font = [[coder decodeObjectForKey:@"HFFont"] retain]; + lineHeight = (CGFloat)[coder decodeDoubleForKey:@"HFLineHeight"]; + _hfflags.antialias = [coder decodeBoolForKey:@"HFAntialias"]; + _hfflags.colorbytes = [coder decodeBoolForKey:@"HFColorBytes"]; + _hfflags.livereload = [coder decodeBoolForKey:@"HFLiveReload"]; + + if ([coder containsValueForKey:@"HFEditMode"]) + _hfflags.editMode = [coder decodeIntForKey:@"HFEditMode"]; + else { + _hfflags.editMode = ([coder decodeBoolForKey:@"HFOverwriteMode"] + ? HFOverwriteMode : HFInsertMode); + } + + _hfflags.editable = [coder decodeBoolForKey:@"HFEditable"]; + _hfflags.selectable = [coder decodeBoolForKey:@"HFSelectable"]; + _hfflags.hideNullBytes = [coder decodeBoolForKey:@"HFHidesNullBytes"]; + representers = [[coder decodeObjectForKey:@"HFRepresenters"] retain]; + return self; +} + +- (NSArray *)representers { + return [[representers copy] autorelease]; +} + +- (void)notifyRepresentersOfChanges:(HFControllerPropertyBits)bits { + FOREACH(HFRepresenter*, rep, representers) { + [rep controllerDidChange:bits]; + } + + /* Post the HFControllerDidChangePropertiesNotification */ + NSNumber *number = [[NSNumber alloc] initWithUnsignedInteger:bits]; + NSDictionary *userInfo = [[NSDictionary alloc] initWithObjects:&number forKeys:(id *)&HFControllerChangedPropertiesKey count:1]; + [number release]; + [[NSNotificationCenter defaultCenter] postNotificationName:HFControllerDidChangePropertiesNotification object:self userInfo:userInfo]; + [userInfo release]; +} + +- (void)_firePropertyChanges { + NSMutableArray *pendingTransactions = additionalPendingTransactions; + NSUInteger pendingTransactionCount = [pendingTransactions count]; + additionalPendingTransactions = nil; + HFControllerPropertyBits propertiesToUpdate = propertiesToUpdateInCurrentTransaction; + propertiesToUpdateInCurrentTransaction = 0; + if (pendingTransactionCount > 0 || propertiesToUpdate != 0) { + BEGIN_TRANSACTION(); + while (pendingTransactionCount--) { + HFControllerPropertyBits propertiesInThisTransaction = [pendingTransactions[0] unsignedIntegerValue]; + [pendingTransactions removeObjectAtIndex:0]; + HFASSERT(propertiesInThisTransaction != 0); + [self notifyRepresentersOfChanges:propertiesInThisTransaction]; + } + [pendingTransactions release]; + if (propertiesToUpdate) { + [self notifyRepresentersOfChanges:propertiesToUpdate]; + } + END_TRANSACTION(); + } +} + +/* Inserts a "fence" so that all prior property change bits will be complete before any new ones */ +- (void)_insertPropertyChangeFence { + if (currentPropertyChangeToken == 0) { + HFASSERT(additionalPendingTransactions == nil); + /* There can be no prior property changes */ + HFASSERT(propertiesToUpdateInCurrentTransaction == 0); + return; + } + if (propertiesToUpdateInCurrentTransaction == 0) { + /* Nothing to fence */ + return; + } + if (additionalPendingTransactions == nil) additionalPendingTransactions = [[NSMutableArray alloc] init]; + [additionalPendingTransactions addObject:@(propertiesToUpdateInCurrentTransaction)]; + propertiesToUpdateInCurrentTransaction = 0; +} + +- (void)_addPropertyChangeBits:(HFControllerPropertyBits)bits { + propertiesToUpdateInCurrentTransaction |= bits; + if (currentPropertyChangeToken == 0) { + [self _firePropertyChanges]; + } +} + +- (NSUInteger)beginPropertyChangeTransaction { + HFASSERT(currentPropertyChangeToken < NSUIntegerMax); + return ++currentPropertyChangeToken; +} + +- (void)endPropertyChangeTransaction:(NSUInteger)token { + if (currentPropertyChangeToken != token) { + [NSException raise:NSInvalidArgumentException format:@"endPropertyChangeTransaction passed token %lu, but expected token %lu", (unsigned long)token, (unsigned long)currentPropertyChangeToken]; + } + HFASSERT(currentPropertyChangeToken > 0); + if (--currentPropertyChangeToken == 0) [self _firePropertyChanges]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (context == KVOContextChangesAreLocked) { + HFASSERT([keyPath isEqual:@"changesAreLocked"]); + [self _addPropertyChangeBits:HFControllerEditable]; + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +- (void)addRepresenter:(HFRepresenter *)representer { + REQUIRE_NOT_NULL(representer); + HFASSERT([representers indexOfObjectIdenticalTo:representer] == NSNotFound); + HFASSERT([representer controller] == nil); + [representer _setController:self]; + [representers addObject:representer]; + [representer controllerDidChange: -1]; +} + +- (void)removeRepresenter:(HFRepresenter *)representer { + REQUIRE_NOT_NULL(representer); + HFASSERT([representers indexOfObjectIdenticalTo:representer] != NSNotFound); + [representers removeObjectIdenticalTo:representer]; + [representer _setController:nil]; +} + +- (HFRange)_maximumDisplayedRangeSet { + unsigned long long contentsLength = [self contentsLength]; + HFRange maximumDisplayedRangeSet = HFRangeMake(0, HFRoundUpToNextMultipleSaturate(contentsLength, bytesPerLine)); + return maximumDisplayedRangeSet; +} + +- (unsigned long long)totalLineCount { + return HFDivideULLRoundingUp(HFRoundUpToNextMultipleSaturate([self contentsLength] - 1, bytesPerLine), bytesPerLine); +} + +- (HFFPRange)displayedLineRange { +#if ! NDEBUG + HFASSERT(displayedLineRange.location >= 0); + HFASSERT(displayedLineRange.length >= 0); + HFASSERT(displayedLineRange.location + displayedLineRange.length <= HFULToFP([self totalLineCount])); +#endif + return displayedLineRange; +} + +- (void)setDisplayedLineRange:(HFFPRange)range { +#if ! NDEBUG + HFASSERT(range.location >= 0); + HFASSERT(range.length >= 0); +#endif + if (range.location + range.length > HFULToFP([self totalLineCount])) { + range.location = [self totalLineCount] - range.length; + if (range.location < 0) { + return; + } + } + if (! HFFPRangeEqualsRange(range, displayedLineRange)) { + displayedLineRange = range; + [self _addPropertyChangeBits:HFControllerDisplayedLineRange]; + } +} + +- (CGFloat)lineHeight { + return lineHeight; +} + +- (void)setFont:(NSFont *)val { + if (val != _font) { + CGFloat priorLineHeight = [self lineHeight]; + + [_font release]; + _font = [val copy]; + + NSLayoutManager *manager = [[NSLayoutManager alloc] init]; + lineHeight = [manager defaultLineHeightForFont:_font]; + [manager release]; + + HFControllerPropertyBits bits = HFControllerFont; + if (lineHeight != priorLineHeight) bits |= HFControllerLineHeight; + [self _addPropertyChangeBits:bits]; + [self _insertPropertyChangeFence]; + [self _addPropertyChangeBits:HFControllerViewSizeRatios]; + [self _updateDisplayedRange]; + } +} + +- (BOOL)shouldAntialias { + return _hfflags.antialias; +} + +- (void)setShouldAntialias:(BOOL)antialias { + antialias = !! antialias; + if (antialias != _hfflags.antialias) { + _hfflags.antialias = antialias; + [self _addPropertyChangeBits:HFControllerAntialias]; + } +} + +- (BOOL)shouldColorBytes { + return _hfflags.colorbytes; +} + +- (void)setShouldColorBytes:(BOOL)colorbytes { + colorbytes = !! colorbytes; + if (colorbytes != _hfflags.colorbytes) { + _hfflags.colorbytes = colorbytes; + [self _addPropertyChangeBits:HFControllerColorBytes]; + } +} + +- (BOOL)shouldShowCallouts { + return _hfflags.showcallouts; +} + +- (void)setShouldShowCallouts:(BOOL)showcallouts { + showcallouts = !! showcallouts; + if (showcallouts != _hfflags.showcallouts) { + _hfflags.showcallouts = showcallouts; + [self _addPropertyChangeBits:HFControllerShowCallouts]; + } +} + +- (BOOL)shouldHideNullBytes { + return _hfflags.hideNullBytes; +} + +- (void)setShouldHideNullBytes:(BOOL)hideNullBytes +{ + hideNullBytes = !! hideNullBytes; + if (hideNullBytes != _hfflags.hideNullBytes) { + _hfflags.hideNullBytes = hideNullBytes; + [self _addPropertyChangeBits:HFControllerHideNullBytes]; + } +} + +- (BOOL)shouldLiveReload { + return _hfflags.livereload; +} + +- (void)setShouldLiveReload:(BOOL)livereload { + _hfflags.livereload = !!livereload; + +} + +- (void)setBytesPerColumn:(NSUInteger)val { + if (val != bytesPerColumn) { + bytesPerColumn = val; + [self _addPropertyChangeBits:HFControllerBytesPerColumn]; + } +} + +- (NSUInteger)bytesPerColumn { + return bytesPerColumn; +} + +- (BOOL)_shouldInvertSelectedRangesByAnchorRange { + return _hfflags.selectionInProgress && _hfflags.commandExtendSelection; +} + +- (NSArray *)_invertedSelectedContentsRanges { + HFASSERT([selectedContentsRanges count] > 0); + HFASSERT(selectionAnchorRange.location != NO_SELECTION); + if (selectionAnchorRange.length == 0) return [NSArray arrayWithArray:selectedContentsRanges]; + + NSArray *cleanedRanges = [HFRangeWrapper organizeAndMergeRanges:selectedContentsRanges]; + NSMutableArray *result = [NSMutableArray array]; + + /* Our algorithm works as follows - add any ranges outside of the selectionAnchorRange, clipped by the selectionAnchorRange. Then extract every "index" in our cleaned selected arrays that are within the selectionAnchorArray. An index is the location where a range starts or stops. Then use those indexes to create the inverted arrays. A range parity of 1 means that we are adding the range. */ + + /* Add all the ranges that are outside of selectionAnchorRange, clipping them if necessary */ + HFASSERT(HFSumDoesNotOverflow(selectionAnchorRange.location, selectionAnchorRange.length)); + FOREACH(HFRangeWrapper*, outsideWrapper, cleanedRanges) { + HFRange range = [outsideWrapper HFRange]; + if (range.location < selectionAnchorRange.location) { + HFRange clippedRange; + clippedRange.location = range.location; + HFASSERT(MIN(HFMaxRange(range), selectionAnchorRange.location) >= clippedRange.location); + clippedRange.length = MIN(HFMaxRange(range), selectionAnchorRange.location) - clippedRange.location; + [result addObject:[HFRangeWrapper withRange:clippedRange]]; + } + if (HFMaxRange(range) > HFMaxRange(selectionAnchorRange)) { + HFRange clippedRange; + clippedRange.location = MAX(range.location, HFMaxRange(selectionAnchorRange)); + HFASSERT(HFMaxRange(range) >= clippedRange.location); + clippedRange.length = HFMaxRange(range) - clippedRange.location; + [result addObject:[HFRangeWrapper withRange:clippedRange]]; + } + } + + HFASSERT(HFSumDoesNotOverflow(selectionAnchorRange.location, selectionAnchorRange.length)); + + NEW_ARRAY(unsigned long long, partitions, 2*[cleanedRanges count] + 2); + NSUInteger partitionCount, partitionIndex = 0; + + partitions[partitionIndex++] = selectionAnchorRange.location; + FOREACH(HFRangeWrapper*, wrapper, cleanedRanges) { + HFRange range = [wrapper HFRange]; + if (! HFIntersectsRange(range, selectionAnchorRange)) continue; + + partitions[partitionIndex++] = MAX(selectionAnchorRange.location, range.location); + partitions[partitionIndex++] = MIN(HFMaxRange(selectionAnchorRange), HFMaxRange(range)); + } + + // For some reason, using HFMaxRange confuses the static analyzer + partitions[partitionIndex++] = HFSum(selectionAnchorRange.location, selectionAnchorRange.length); + + partitionCount = partitionIndex; + HFASSERT((partitionCount % 2) == 0); + + partitionIndex = 0; + while (partitionIndex < partitionCount) { + HFASSERT(partitionIndex + 1 < partitionCount); + HFASSERT(partitions[partitionIndex] <= partitions[partitionIndex + 1]); + if (partitions[partitionIndex] < partitions[partitionIndex + 1]) { + HFRange range = HFRangeMake(partitions[partitionIndex], partitions[partitionIndex + 1] - partitions[partitionIndex]); + [result addObject:[HFRangeWrapper withRange:range]]; + } + partitionIndex += 2; + } + + FREE_ARRAY(partitions); + + if ([result count] == 0) [result addObject:[HFRangeWrapper withRange:HFRangeMake(selectionAnchor, 0)]]; + + return [HFRangeWrapper organizeAndMergeRanges:result]; +} + +- (void)_ensureSelectionIsValid { + HFASSERT(selectedContentsRanges != nil); + HFASSERT([selectedContentsRanges count] > 0); + BOOL onlyOneWrapper = ([selectedContentsRanges count] == 1); + FOREACH(HFRangeWrapper*, wrapper, selectedContentsRanges) { + EXPECT_CLASS(wrapper, HFRangeWrapper); + HFRange range = [wrapper HFRange]; + if (!HFRangeIsSubrangeOfRange(range, HFRangeMake(0, [self contentsLength]))){ + [self setSelectedContentsRanges:@[[HFRangeWrapper withRange:HFRangeMake(0, 0)]]]; + return; + } + if (onlyOneWrapper == NO) HFASSERT(range.length > 0); /* If we have more than one wrapper, then none of them should be zero length */ + } +} + +- (void)_setSingleSelectedContentsRange:(HFRange)newSelection { + HFASSERT(HFRangeIsSubrangeOfRange(newSelection, HFRangeMake(0, [self contentsLength]))); + BOOL selectionChanged; + if ([selectedContentsRanges count] == 1) { + selectionChanged = ! HFRangeEqualsRange([selectedContentsRanges[0] HFRange], newSelection); + } + else { + selectionChanged = YES; + } + + if (selectionChanged) { + [selectedContentsRanges removeAllObjects]; + [selectedContentsRanges addObject:[HFRangeWrapper withRange:newSelection]]; + [self _addPropertyChangeBits:HFControllerSelectedRanges]; + } + VALIDATE_SELECTION(); +} + +- (NSArray *)selectedContentsRanges { + VALIDATE_SELECTION(); + if ([self _shouldInvertSelectedRangesByAnchorRange]) return [self _invertedSelectedContentsRanges]; + else return [NSArray arrayWithArray:selectedContentsRanges]; +} + +- (unsigned long long)contentsLength { + if (! byteArray) return 0; + else return [byteArray length]; +} + +- (NSData *)dataForRange:(HFRange)range { + HFASSERT(range.length <= NSUIntegerMax); // it doesn't make sense to ask for a buffer larger than can be stored in memory + HFASSERT(HFRangeIsSubrangeOfRange(range, HFRangeMake(0, [self contentsLength]))); + + if(range.length == 0) { + // Don't throw out cache for an empty request! Also makes the analyzer happier. + return [NSData data]; + } + + NSUInteger newGenerationIndex = [byteArray changeGenerationCount]; + if (cachedData == nil || newGenerationIndex != cachedGenerationIndex || ! HFRangeIsSubrangeOfRange(range, cachedRange)) { + [cachedData release]; + cachedGenerationIndex = newGenerationIndex; + cachedRange = range; + NSUInteger length = ll2l(range.length); + unsigned char *data = check_malloc(length); + [byteArray copyBytes:data range:range]; + cachedData = [[NSData alloc] initWithBytesNoCopy:data length:length freeWhenDone:YES]; + } + + if (HFRangeEqualsRange(range, cachedRange)) { + return cachedData; + } + else { + HFASSERT(cachedRange.location <= range.location); + NSRange cachedDataSubrange; + cachedDataSubrange.location = ll2l(range.location - cachedRange.location); + cachedDataSubrange.length = ll2l(range.length); + return [cachedData subdataWithRange:cachedDataSubrange]; + } +} + +- (void)copyBytes:(unsigned char *)bytes range:(HFRange)range { + HFASSERT(range.length <= NSUIntegerMax); // it doesn't make sense to ask for a buffer larger than can be stored in memory + HFASSERT(HFRangeIsSubrangeOfRange(range, HFRangeMake(0, [self contentsLength]))); + [byteArray copyBytes:bytes range:range]; +} + +- (void)_updateDisplayedRange { + HFRange proposedNewDisplayRange; + HFFPRange proposedNewLineRange; + HFRange maxRangeSet = [self _maximumDisplayedRangeSet]; + NSUInteger maxBytesForViewSize = NSUIntegerMax; + double maxLines = DBL_MAX; + FOREACH(HFRepresenter*, rep, representers) { + NSView *view = [rep view]; + double repMaxLines = [rep maximumAvailableLinesForViewHeight:NSHeight([view frame])]; + if (repMaxLines != DBL_MAX) { + /* bytesPerLine may be ULONG_MAX. We want to compute the smaller of maxBytesForViewSize and ceil(repMaxLines) * bytesPerLine. If the latter expression overflows, the smaller is the former. */ + NSUInteger repMaxLinesUInt = (NSUInteger)ceil(repMaxLines); + NSUInteger maxLinesTimesBytesPerLine = repMaxLinesUInt * bytesPerLine; + /* Check if we overflowed */ + BOOL overflowed = (repMaxLinesUInt != 0 && (maxLinesTimesBytesPerLine / repMaxLinesUInt != bytesPerLine)); + if (! overflowed) { + maxBytesForViewSize = MIN(maxLinesTimesBytesPerLine, maxBytesForViewSize); + } + } + maxLines = MIN(repMaxLines, maxLines); + } + if (maxLines == DBL_MAX) { + proposedNewDisplayRange = HFRangeMake(0, 0); + proposedNewLineRange = (HFFPRange){0, 0}; + } + else { + unsigned long long maximumDisplayedBytes = MIN(maxRangeSet.length, maxBytesForViewSize); + HFASSERT(HFMaxRange(maxRangeSet) >= maximumDisplayedBytes); + + proposedNewDisplayRange.location = MIN(HFMaxRange(maxRangeSet) - maximumDisplayedBytes, displayedContentsRange.location); + proposedNewDisplayRange.location -= proposedNewDisplayRange.location % bytesPerLine; + proposedNewDisplayRange.length = MIN(HFMaxRange(maxRangeSet) - proposedNewDisplayRange.location, maxBytesForViewSize); + if (maxBytesForViewSize % bytesPerLine != 0) { + NSLog(@"Bad max bytes: %lu (%lu)", (unsigned long)maxBytesForViewSize, (unsigned long)bytesPerLine); + } + if (HFMaxRange(maxRangeSet) != ULLONG_MAX && (HFMaxRange(maxRangeSet) - proposedNewDisplayRange.location) % bytesPerLine != 0) { + NSLog(@"Bad max range minus: %llu (%lu)", HFMaxRange(maxRangeSet) - proposedNewDisplayRange.location, (unsigned long)bytesPerLine); + } + + long double lastLine = HFULToFP([self totalLineCount]); + proposedNewLineRange.length = MIN(maxLines, lastLine); + proposedNewLineRange.location = MIN(displayedLineRange.location, lastLine - proposedNewLineRange.length); + } + HFASSERT(HFRangeIsSubrangeOfRange(proposedNewDisplayRange, maxRangeSet)); + HFASSERT(proposedNewDisplayRange.location % bytesPerLine == 0); + if (! HFRangeEqualsRange(proposedNewDisplayRange, displayedContentsRange) || ! HFFPRangeEqualsRange(proposedNewLineRange, displayedLineRange)) { + displayedContentsRange = proposedNewDisplayRange; + displayedLineRange = proposedNewLineRange; + [self _addPropertyChangeBits:HFControllerDisplayedLineRange]; + } +} + +- (void)_ensureVisibilityOfLocation:(unsigned long long)location { + HFASSERT(location <= [self contentsLength]); + unsigned long long lineInt = location / bytesPerLine; + long double line = HFULToFP(lineInt); + HFASSERT(line >= 0); + line = MIN(line, HFULToFP([self totalLineCount]) - 1); + HFFPRange lineRange = [self displayedLineRange]; + HFFPRange newLineRange = lineRange; + if (line < lineRange.location) { + newLineRange.location = line; + } + else if (line >= lineRange.location + lineRange.length) { + HFASSERT(lineRange.location + lineRange.length >= 1); + newLineRange.location = lineRange.location + (line - (lineRange.location + lineRange.length - 1)); + } + [self setDisplayedLineRange:newLineRange]; +} + +- (void)maximizeVisibilityOfContentsRange:(HFRange)range { + HFASSERT(HFRangeIsSubrangeOfRange(range, HFRangeMake(0, [self contentsLength]))); + + // Find the minimum move necessary to make range visible + HFFPRange displayRange = [self displayedLineRange]; + HFFPRange newDisplayRange = displayRange; + unsigned long long startLine = range.location / bytesPerLine; + unsigned long long endLine = HFDivideULLRoundingUp(HFRoundUpToNextMultipleSaturate(HFMaxRange(range), bytesPerLine), bytesPerLine); + HFASSERT(endLine > startLine || endLine == ULLONG_MAX); + long double linesInRange = HFULToFP(endLine - startLine); + long double linesToDisplay = MIN(displayRange.length, linesInRange); + HFASSERT(linesToDisplay <= linesInRange); + long double linesToMoveDownToMakeLastLineVisible = HFULToFP(endLine) - (displayRange.location + displayRange.length); + long double linesToMoveUpToMakeFirstLineVisible = displayRange.location - HFULToFP(startLine); + //HFASSERT(linesToMoveUpToMakeFirstLineVisible <= 0 || linesToMoveDownToMakeLastLineVisible <= 0); + // in general, we expect either linesToMoveUpToMakeFirstLineVisible to be <= zero, or linesToMoveDownToMakeLastLineVisible to be <= zero. However, if the available space is smaller than one line, then that won't be true. + if (linesToMoveDownToMakeLastLineVisible > 0) { + newDisplayRange.location += linesToMoveDownToMakeLastLineVisible; + } + else if (linesToMoveUpToMakeFirstLineVisible > 0 && linesToDisplay >= 1) { + // the >= 1 check prevents some wacky behavior when we have less than one line's worth of space, that caused bouncing between the top and bottom of the line + newDisplayRange.location -= linesToMoveUpToMakeFirstLineVisible; + } + + // Use the minimum movement if it would be visually helpful; otherwise just center. + if (HFFPIntersectsRange(displayRange, newDisplayRange)) { + [self setDisplayedLineRange:newDisplayRange]; + } else { + [self centerContentsRange:range]; + } +} + +- (void)centerContentsRange:(HFRange)range { + HFASSERT(HFRangeIsSubrangeOfRange(range, HFRangeMake(0, [self contentsLength]))); + HFFPRange displayRange = [self displayedLineRange]; + const long double numDisplayedLines = displayRange.length; + HFFPRange newDisplayRange; + unsigned long long startLine = range.location / bytesPerLine; + unsigned long long endLine = HFDivideULLRoundingUp(HFRoundUpToNextMultipleSaturate(HFMaxRange(range), bytesPerLine), bytesPerLine); + HFASSERT(endLine > startLine || endLine == ULLONG_MAX); + long double linesInRange = HFULToFP(endLine - startLine); + + /* Handle the case of a line range bigger than we can display by choosing the top lines. */ + if (numDisplayedLines <= linesInRange) { + newDisplayRange = (HFFPRange){startLine, numDisplayedLines}; + } + else { + /* Construct a newDisplayRange that centers {startLine, endLine} */ + long double center = startLine + (endLine - startLine) / 2.; + newDisplayRange = (HFFPRange){center - numDisplayedLines / 2., numDisplayedLines}; + } + + /* Move the newDisplayRange up or down as necessary */ + newDisplayRange.location = fmaxl(newDisplayRange.location, (long double)0.); + newDisplayRange.location = fminl(newDisplayRange.location, HFULToFP([self totalLineCount]) - numDisplayedLines); + [self setDisplayedLineRange:newDisplayRange]; +} + +/* Clips the selection to a given length. If this would clip the entire selection, returns a zero length selection at the end. Indicates HFControllerSelectedRanges if the selection changes. */ +- (void)_clipSelectedContentsRangesToLength:(unsigned long long)newLength { + NSMutableArray *newTempSelection = [selectedContentsRanges mutableCopy]; + NSUInteger i, max = [newTempSelection count]; + for (i=0; i < max; i++) { + HFRange range = [newTempSelection[i] HFRange]; + if (HFMaxRange(range) > newLength) { + if (range.location > newLength) { + /* The range starts past our new max. Just remove this range entirely */ + [newTempSelection removeObjectAtIndex:i]; + i--; + max--; + } + else { + /* Need to clip this range */ + range.length = newLength - range.location; + newTempSelection[i] = [HFRangeWrapper withRange:range]; + } + } + } + [newTempSelection setArray:[HFRangeWrapper organizeAndMergeRanges:newTempSelection]]; + + /* If there are multiple empty ranges, remove all but the first */ + BOOL foundEmptyRange = NO; + max = [newTempSelection count]; + for (i=0; i < max; i++) { + HFRange range = [newTempSelection[i] HFRange]; + HFASSERT(HFMaxRange(range) <= newLength); + if (range.length == 0) { + if (foundEmptyRange) { + [newTempSelection removeObjectAtIndex:i]; + i--; + max--; + } + foundEmptyRange = YES; + } + } + if (max == 0) { + /* Removed all ranges - insert one at the end */ + [newTempSelection addObject:[HFRangeWrapper withRange:HFRangeMake(newLength, 0)]]; + } + + /* If something changed, set the new selection and post the change bit */ + if (! [selectedContentsRanges isEqualToArray:newTempSelection]) { + [selectedContentsRanges setArray:newTempSelection]; + [self _addPropertyChangeBits:HFControllerSelectedRanges]; + } + + [newTempSelection release]; +} + +- (void)setByteArray:(HFByteArray *)val { + REQUIRE_NOT_NULL(val); + BEGIN_TRANSACTION(); + [byteArray removeObserver:self forKeyPath:@"changesAreLocked"]; + [val retain]; + [byteArray release]; + byteArray = val; + [cachedData release]; + cachedData = nil; + [byteArray addObserver:self forKeyPath:@"changesAreLocked" options:0 context:KVOContextChangesAreLocked]; + [self _updateDisplayedRange]; + [self _addPropertyChangeBits: HFControllerContentValue | HFControllerContentLength]; + [self _clipSelectedContentsRangesToLength:[byteArray length]]; + END_TRANSACTION(); +} + +- (HFByteArray *)byteArray { + return byteArray; +} + +- (void)_undoNotification:note { + USE(note); +} + +- (void)_removeUndoManagerNotifications { + if (undoManager) { + NSNotificationCenter *noter = [NSNotificationCenter defaultCenter]; + [noter removeObserver:self name:NSUndoManagerWillUndoChangeNotification object:undoManager]; + } +} + +- (void)_addUndoManagerNotifications { + if (undoManager) { + NSNotificationCenter *noter = [NSNotificationCenter defaultCenter]; + [noter addObserver:self selector:@selector(_undoNotification:) name:NSUndoManagerWillUndoChangeNotification object:undoManager]; + } +} + +- (void)_removeAllUndoOperations { + /* Remove all the undo operations, because some undo operation is unsupported. Note that if we were smarter we would keep a stack of undo operations and only remove ones "up to" a certain point. */ + [undoManager removeAllActionsWithTarget:self]; + [undoOperations makeObjectsPerformSelector:@selector(invalidate)]; + [undoOperations removeAllObjects]; +} + +- (void)setUndoManager:(NSUndoManager *)manager { + [self _removeUndoManagerNotifications]; + [self _removeAllUndoOperations]; + [manager retain]; + [undoManager release]; + undoManager = manager; + [self _addUndoManagerNotifications]; +} + +- (NSUndoManager *)undoManager { + return undoManager; +} + +- (NSUInteger)bytesPerLine { + return bytesPerLine; +} + +- (BOOL)editable { + return _hfflags.editable && ! [byteArray changesAreLocked] && _hfflags.editMode != HFReadOnlyMode; +} + +- (void)setEditable:(BOOL)flag { + if (flag != _hfflags.editable) { + _hfflags.editable = flag; + [self _addPropertyChangeBits:HFControllerEditable]; + } +} + +- (void)_updateBytesPerLine { + NSUInteger newBytesPerLine = NSUIntegerMax; + FOREACH(HFRepresenter*, rep, representers) { + NSView *view = [rep view]; + CGFloat width = [view frame].size.width; + NSUInteger repMaxBytesPerLine = [rep maximumBytesPerLineForViewWidth:width]; + HFASSERT(repMaxBytesPerLine > 0); + newBytesPerLine = MIN(repMaxBytesPerLine, newBytesPerLine); + } + if (newBytesPerLine != bytesPerLine) { + HFASSERT(newBytesPerLine > 0); + bytesPerLine = newBytesPerLine; + BEGIN_TRANSACTION(); + [self _addPropertyChangeBits:HFControllerBytesPerLine]; + END_TRANSACTION(); + } +} + +- (void)representer:(HFRepresenter *)rep changedProperties:(HFControllerPropertyBits)properties { + USE(rep); + HFControllerPropertyBits remainingProperties = properties; + BEGIN_TRANSACTION(); + if (remainingProperties & HFControllerBytesPerLine) { + [self _updateBytesPerLine]; + remainingProperties &= ~HFControllerBytesPerLine; + } + if (remainingProperties & HFControllerDisplayedLineRange) { + [self _updateDisplayedRange]; + remainingProperties &= ~HFControllerDisplayedLineRange; + } + if (remainingProperties & HFControllerByteRangeAttributes) { + [self _addPropertyChangeBits:HFControllerByteRangeAttributes]; + remainingProperties &= ~HFControllerByteRangeAttributes; + } + if (remainingProperties & HFControllerViewSizeRatios) { + [self _addPropertyChangeBits:HFControllerViewSizeRatios]; + remainingProperties &= ~HFControllerViewSizeRatios; + } + if (remainingProperties) { + NSLog(@"Unknown properties: %lx", (long)remainingProperties); + } + END_TRANSACTION(); +} + +- (HFByteArray *)byteArrayForSelectedContentsRanges { + HFByteArray *result = nil; + HFByteArray *bytes = [self byteArray]; + VALIDATE_SELECTION(); + FOREACH(HFRangeWrapper*, wrapper, selectedContentsRanges) { + HFRange range = [wrapper HFRange]; + HFByteArray *additionalBytes = [bytes subarrayWithRange:range]; + if (! result) { + result = additionalBytes; + } + else { + [result insertByteArray:additionalBytes inRange:HFRangeMake([result length], 0)]; + } + } + return result; +} + +/* Flattens the selected range to a single range (the selected range becomes any character within or between the selected ranges). Modifies the selectedContentsRanges and returns the new single HFRange. Does not call notifyRepresentersOfChanges: */ +- (HFRange)_flattenSelectionRange { + HFASSERT([selectedContentsRanges count] >= 1); + + HFRange resultRange = [selectedContentsRanges[0] HFRange]; + if ([selectedContentsRanges count] == 1) return resultRange; //already flat + + FOREACH(HFRangeWrapper*, wrapper, selectedContentsRanges) { + HFRange selectedRange = [wrapper HFRange]; + if (selectedRange.location < resultRange.location) { + /* Extend our result range backwards */ + resultRange.length += resultRange.location - selectedRange.location; + resultRange.location = selectedRange.location; + } + if (HFRangeExtendsPastRange(selectedRange, resultRange)) { + HFASSERT(selectedRange.location >= resultRange.location); //must be true by if statement above + resultRange.length = HFSum(selectedRange.location - resultRange.location, selectedRange.length); + } + } + [self _setSingleSelectedContentsRange:resultRange]; + return resultRange; +} + +- (unsigned long long)_minimumSelectionLocation { + HFASSERT([selectedContentsRanges count] >= 1); + unsigned long long minSelection = ULLONG_MAX; + FOREACH(HFRangeWrapper*, wrapper, selectedContentsRanges) { + HFRange range = [wrapper HFRange]; + minSelection = MIN(minSelection, range.location); + } + return minSelection; +} + +- (unsigned long long)_maximumSelectionLocation { + HFASSERT([selectedContentsRanges count] >= 1); + unsigned long long maxSelection = 0; + FOREACH(HFRangeWrapper*, wrapper, selectedContentsRanges) { + HFRange range = [wrapper HFRange]; + maxSelection = MAX(maxSelection, HFMaxRange(range)); + } + return maxSelection; +} + +- (unsigned long long)minimumSelectionLocation { + return [self _minimumSelectionLocation]; +} + +- (unsigned long long)maximumSelectionLocation { + return [self _maximumSelectionLocation]; +} + +/* Put the selection at the left or right end of the current selection, with zero length. Modifies the selectedContentsRanges and returns the new single HFRange. Does not call notifyRepresentersOfChanges: */ +- (HFRange)_telescopeSelectionRangeInDirection:(HFControllerMovementDirection)direction { + HFRange resultRange; + HFASSERT(direction == HFControllerDirectionLeft || direction == HFControllerDirectionRight); + resultRange.location = (direction == HFControllerDirectionLeft ? [self _minimumSelectionLocation] : [self _maximumSelectionLocation]); + resultRange.length = 0; + [self _setSingleSelectedContentsRange:resultRange]; + return resultRange; +} + +- (void)beginSelectionWithEvent:(NSEvent *)event forByteIndex:(unsigned long long)characterIndex { + USE(event); + HFASSERT(characterIndex <= [self contentsLength]); + + /* Determine how to perform the selection - normally, with command key, or with shift key. Command + shift is the same as command. The shift key closes the selection - the selected range becomes the single range containing the first and last selected character. */ + _hfflags.shiftExtendSelection = NO; + _hfflags.commandExtendSelection = NO; + NSUInteger flags = [event modifierFlags]; + if (flags & NSCommandKeyMask) _hfflags.commandExtendSelection = YES; + else if (flags & NSShiftKeyMask) _hfflags.shiftExtendSelection = YES; + + selectionAnchor = NO_SELECTION; + selectionAnchorRange = HFRangeMake(NO_SELECTION, 0); + + _hfflags.selectionInProgress = YES; + if (_hfflags.commandExtendSelection) { + /* The selection anchor is used to track the "invert" range. All characters within this range have their selection inverted. This is tracked by the _shouldInvertSelectedRangesByAnchorRange method. */ + selectionAnchor = characterIndex; + selectionAnchorRange = HFRangeMake(characterIndex, 0); + } + else if (_hfflags.shiftExtendSelection) { + /* The selection anchor is used to track the single (flattened) selected range. */ + HFRange selectedRange = [self _flattenSelectionRange]; + unsigned long long distanceFromRangeStart = HFAbsoluteDifference(selectedRange.location, characterIndex); + unsigned long long distanceFromRangeEnd = HFAbsoluteDifference(HFMaxRange(selectedRange), characterIndex); + if (selectedRange.length == 0) { + HFASSERT(distanceFromRangeStart == distanceFromRangeEnd); + selectionAnchor = selectedRange.location; + selectedRange.location = MIN(characterIndex, selectedRange.location); + selectedRange.length = distanceFromRangeStart; + } + else if (distanceFromRangeStart >= distanceFromRangeEnd) { + /* Push the "end forwards" */ + selectedRange.length = distanceFromRangeStart; + selectionAnchor = selectedRange.location; + } + else { + /* Push the "start back" */ + selectedRange.location = selectedRange.location + selectedRange.length - distanceFromRangeEnd; + selectedRange.length = distanceFromRangeEnd; + selectionAnchor = HFSum(selectedRange.length, selectedRange.location); + } + HFASSERT(HFRangeIsSubrangeOfRange(selectedRange, HFRangeMake(0, [self contentsLength]))); + selectionAnchorRange = selectedRange; + [self _setSingleSelectedContentsRange:selectedRange]; + } + else { + /* No modifier key selection. The selection anchor is not used. */ + [self _setSingleSelectedContentsRange:HFRangeMake(characterIndex, 0)]; + selectionAnchor = characterIndex; + } +} + +- (void)continueSelectionWithEvent:(NSEvent *)event forByteIndex:(unsigned long long)byteIndex { + USE(event); + HFASSERT(_hfflags.selectionInProgress); + HFASSERT(byteIndex <= [self contentsLength]); + BEGIN_TRANSACTION(); + if (_hfflags.commandExtendSelection) { + /* Clear any zero-length ranges, unless there's only one */ + NSUInteger rangeCount = [selectedContentsRanges count]; + NSUInteger rangeIndex = rangeCount; + while (rangeIndex-- > 0) { + if (rangeCount > 1 && [selectedContentsRanges[rangeIndex] HFRange].length == 0) { + [selectedContentsRanges removeObjectAtIndex:rangeIndex]; + rangeCount--; + } + } + selectionAnchorRange.location = MIN(byteIndex, selectionAnchor); + selectionAnchorRange.length = MAX(byteIndex, selectionAnchor) - selectionAnchorRange.location; + [self _addPropertyChangeBits:HFControllerSelectedRanges]; + } + else if (_hfflags.shiftExtendSelection) { + HFASSERT(selectionAnchorRange.location != NO_SELECTION); + HFASSERT(selectionAnchor != NO_SELECTION); + HFRange range; + if (! HFLocationInRange(byteIndex, selectionAnchorRange)) { + /* The character index is outside of the selection anchor range. The new range is just the selected anchor range combined with the character index. */ + range.location = MIN(byteIndex, selectionAnchorRange.location); + unsigned long long rangeEnd = MAX(byteIndex, HFSum(selectionAnchorRange.location, selectionAnchorRange.length)); + HFASSERT(rangeEnd >= range.location); + range.length = rangeEnd - range.location; + } + else { + /* The character is within the selection anchor range. We use the selection anchor index to determine which "side" of the range is selected. */ + range.location = MIN(selectionAnchor, byteIndex); + range.length = HFAbsoluteDifference(selectionAnchor, byteIndex); + } + [self _setSingleSelectedContentsRange:range]; + } + else { + /* No modifier key selection */ + HFRange range; + range.location = MIN(byteIndex, selectionAnchor); + range.length = MAX(byteIndex, selectionAnchor) - range.location; + [self _setSingleSelectedContentsRange:range]; + } + END_TRANSACTION(); + VALIDATE_SELECTION(); +} + +- (void)endSelectionWithEvent:(NSEvent *)event forByteIndex:(unsigned long long)characterIndex { + USE(event); + HFASSERT(_hfflags.selectionInProgress); + HFASSERT(characterIndex <= [self contentsLength]); + if (_hfflags.commandExtendSelection) { + selectionAnchorRange.location = MIN(characterIndex, selectionAnchor); + selectionAnchorRange.length = MAX(characterIndex, selectionAnchor) - selectionAnchorRange.location; + + /* "Commit" our selectionAnchorRange */ + NSArray *newSelection = [self _invertedSelectedContentsRanges]; + [selectedContentsRanges setArray:newSelection]; + } + else if (_hfflags.shiftExtendSelection) { + HFASSERT(selectionAnchorRange.location != NO_SELECTION); + HFASSERT(selectionAnchor != NO_SELECTION); + HFRange range; + if (! HFLocationInRange(characterIndex, selectionAnchorRange)) { + /* The character index is outside of the selection anchor range. The new range is just the selected anchor range combined with the character index. */ + range.location = MIN(characterIndex, selectionAnchorRange.location); + unsigned long long rangeEnd = MAX(characterIndex, HFSum(selectionAnchorRange.location, selectionAnchorRange.length)); + HFASSERT(rangeEnd >= range.location); + range.length = rangeEnd - range.location; + } + else { + /* The character is within the selection anchor range. We use the selection anchor index to determine which "side" of the range is selected. */ + range.location = MIN(selectionAnchor, characterIndex); + range.length = HFAbsoluteDifference(selectionAnchor, characterIndex); + } + [self _setSingleSelectedContentsRange:range]; + } + else { + /* No modifier key selection */ + HFRange range; + range.location = MIN(characterIndex, selectionAnchor); + range.length = MAX(characterIndex, selectionAnchor) - range.location; + [self _setSingleSelectedContentsRange:range]; + } + + _hfflags.selectionInProgress = NO; + _hfflags.shiftExtendSelection = NO; + _hfflags.commandExtendSelection = NO; + selectionAnchor = NO_SELECTION; +} + +- (double)selectionPulseAmount { + double result = 0; + if (pulseSelectionStartTime > 0) { + CFTimeInterval diff = pulseSelectionCurrentTime - pulseSelectionStartTime; + if (diff > 0 && diff < kPulseDuration) { + result = 1. - fabs(diff * 2 - kPulseDuration) / kPulseDuration; + } + } + return result; +} + +- (void)firePulseTimer:(NSTimer *)timer { + USE(timer); + HFASSERT(pulseSelectionStartTime != 0); + pulseSelectionCurrentTime = CFAbsoluteTimeGetCurrent(); + [self _addPropertyChangeBits:HFControllerSelectionPulseAmount]; + if (pulseSelectionCurrentTime - pulseSelectionStartTime > kPulseDuration) { + [pulseSelectionTimer invalidate]; + [pulseSelectionTimer release]; + pulseSelectionTimer = nil; + } +} + +- (void)pulseSelection { + pulseSelectionStartTime = CFAbsoluteTimeGetCurrent(); + if (pulseSelectionTimer == nil) { + pulseSelectionTimer = [[NSTimer scheduledTimerWithTimeInterval:(1. / 30.) target:self selector:@selector(firePulseTimer:) userInfo:nil repeats:YES] retain]; + } +} + +- (void)scrollByLines:(long double)lines { + HFFPRange lineRange = [self displayedLineRange]; + HFASSERT(HFULToFP([self totalLineCount]) >= lineRange.length); + long double maxScroll = HFULToFP([self totalLineCount]) - lineRange.length; + if (lines < 0) { + lineRange.location -= MIN(lineRange.location, -lines); + } + else { + lineRange.location = MIN(maxScroll, lineRange.location + lines); + } + [self setDisplayedLineRange:lineRange]; +} + +- (void)scrollWithScrollEvent:(NSEvent *)scrollEvent { + HFASSERT(scrollEvent != NULL); + HFASSERT([scrollEvent type] == NSScrollWheel); + CGFloat preciseScroll = 0; + BOOL hasPreciseScroll; + + /* Prefer precise deltas */ + if ([scrollEvent respondsToSelector:@selector(hasPreciseScrollingDeltas)]) { + hasPreciseScroll = [scrollEvent hasPreciseScrollingDeltas]; + if (hasPreciseScroll) { + /* In this case, we're going to scroll by a certain number of points */ + preciseScroll = [scrollEvent scrollingDeltaY]; + } + } else if ([scrollEvent respondsToSelector:@selector(deviceDeltaY)]) { + /* Legacy (SnowLeopard) support */ + hasPreciseScroll = ([scrollEvent subtype] == 1); + if (hasPreciseScroll) { + preciseScroll = [scrollEvent deviceDeltaY]; + } + } else { + hasPreciseScroll = NO; + } + + long double scrollY = 0; + if (! hasPreciseScroll) { + scrollY = -kScrollMultiplier * [scrollEvent deltaY]; + } else { + scrollY = -preciseScroll / [self lineHeight]; + } + [self scrollByLines:scrollY]; +} + +- (void)setSelectedContentsRanges:(NSArray *)selectedRanges { + REQUIRE_NOT_NULL(selectedRanges); + [selectedContentsRanges setArray:selectedRanges]; + VALIDATE_SELECTION(); + selectionAnchor = NO_SELECTION; + [self _addPropertyChangeBits:HFControllerSelectedRanges]; +} + +- (IBAction)selectAll:sender { + USE(sender); + if (_hfflags.selectable) { + [self _setSingleSelectedContentsRange:HFRangeMake(0, [self contentsLength])]; + } +} + +- (void)_addRangeToSelection:(HFRange)range { + [selectedContentsRanges addObject:[HFRangeWrapper withRange:range]]; + [selectedContentsRanges setArray:[HFRangeWrapper organizeAndMergeRanges:selectedContentsRanges]]; + VALIDATE_SELECTION(); +} + +- (void)_removeRangeFromSelection:(HFRange)inputRange withCursorLocationIfAllSelectionRemoved:(unsigned long long)cursorLocation { + NSUInteger selectionCount = [selectedContentsRanges count]; + HFASSERT(selectionCount > 0 && selectionCount <= NSUIntegerMax / 2); + NSUInteger rangeIndex = 0; + NSArray *wrappers; + NEW_ARRAY(HFRange, tempRanges, selectionCount * 2); + FOREACH(HFRangeWrapper*, wrapper, selectedContentsRanges) { + HFRange range = [wrapper HFRange]; + if (! HFIntersectsRange(range, inputRange)) { + tempRanges[rangeIndex++] = range; + } + else { + if (range.location < inputRange.location) { + tempRanges[rangeIndex++] = HFRangeMake(range.location, inputRange.location - range.location); + } + if (HFMaxRange(range) > HFMaxRange(inputRange)) { + tempRanges[rangeIndex++] = HFRangeMake(HFMaxRange(inputRange), HFMaxRange(range) - HFMaxRange(inputRange)); + } + } + } + if (rangeIndex == 0 || (rangeIndex == 1 && tempRanges[0].length == 0)) { + /* We removed all of our ranges. Telescope us. */ + HFASSERT(cursorLocation <= [self contentsLength]); + [self _setSingleSelectedContentsRange:HFRangeMake(cursorLocation, 0)]; + } + else { + wrappers = [HFRangeWrapper withRanges:tempRanges count:rangeIndex]; + [selectedContentsRanges setArray:[HFRangeWrapper organizeAndMergeRanges:wrappers]]; + } + FREE_ARRAY(tempRanges); + VALIDATE_SELECTION(); +} + +- (void)_moveDirectionDiscardingSelection:(HFControllerMovementDirection)direction byAmount:(unsigned long long)amountToMove { + HFASSERT(direction == HFControllerDirectionLeft || direction == HFControllerDirectionRight); + BEGIN_TRANSACTION(); + BOOL selectionWasEmpty = ([selectedContentsRanges count] == 1 && [selectedContentsRanges[0] HFRange].length == 0); + BOOL directionIsForward = (direction == HFControllerDirectionRight); + HFRange selectedRange = [self _telescopeSelectionRangeInDirection: (directionIsForward ? HFControllerDirectionRight : HFControllerDirectionLeft)]; + HFASSERT(selectedRange.length == 0); + HFASSERT([self contentsLength] >= selectedRange.location); + /* A movement of just 1 with a selection only clears the selection; it does not move the cursor */ + if (selectionWasEmpty || amountToMove > 1) { + if (direction == HFControllerDirectionLeft) { + selectedRange.location -= MIN(amountToMove, selectedRange.location); + } + else { + selectedRange.location += MIN(amountToMove, [self contentsLength] - selectedRange.location); + } + } + selectionAnchor = NO_SELECTION; + [self _setSingleSelectedContentsRange:selectedRange]; + [self _ensureVisibilityOfLocation:selectedRange.location]; + END_TRANSACTION(); +} + +/* In _extendSelectionInDirection:byAmount:, we only allow left/right movement. up/down is not allowed. */ +- (void)_extendSelectionInDirection:(HFControllerMovementDirection)direction byAmount:(unsigned long long)amountToMove { + HFASSERT(direction == HFControllerDirectionLeft || direction == HFControllerDirectionRight); + unsigned long long minSelection = [self _minimumSelectionLocation]; + unsigned long long maxSelection = [self _maximumSelectionLocation]; + BOOL selectionChanged = NO; + unsigned long long locationToMakeVisible = NO_SELECTION; + unsigned long long contentsLength = [self contentsLength]; + if (selectionAnchor == NO_SELECTION) { + /* Pick the anchor opposite the choice of direction */ + if (direction == HFControllerDirectionLeft) selectionAnchor = maxSelection; + else selectionAnchor = minSelection; + } + if (direction == HFControllerDirectionLeft) { + if (minSelection >= selectionAnchor && maxSelection > minSelection) { + unsigned long long amountToRemove = llmin(maxSelection - selectionAnchor, amountToMove); + unsigned long long amountToAdd = llmin(amountToMove - amountToRemove, selectionAnchor); + if (amountToRemove > 0) [self _removeRangeFromSelection:HFRangeMake(maxSelection - amountToRemove, amountToRemove) withCursorLocationIfAllSelectionRemoved:minSelection]; + if (amountToAdd > 0) [self _addRangeToSelection:HFRangeMake(selectionAnchor - amountToAdd, amountToAdd)]; + selectionChanged = YES; + locationToMakeVisible = (amountToAdd > 0 ? selectionAnchor - amountToAdd : maxSelection - amountToRemove); + } + else { + if (minSelection > 0) { + NSUInteger amountToAdd = ll2l(llmin(minSelection, amountToMove)); + if (amountToAdd > 0) [self _addRangeToSelection:HFRangeMake(minSelection - amountToAdd, amountToAdd)]; + selectionChanged = YES; + locationToMakeVisible = minSelection - amountToAdd; + } + } + } + else if (direction == HFControllerDirectionRight) { + if (maxSelection <= selectionAnchor && maxSelection > minSelection) { + HFASSERT(contentsLength >= maxSelection); + unsigned long long amountToRemove = ll2l(llmin(maxSelection - minSelection, amountToMove)); + unsigned long long amountToAdd = amountToMove - amountToRemove; + if (amountToRemove > 0) [self _removeRangeFromSelection:HFRangeMake(minSelection, amountToRemove) withCursorLocationIfAllSelectionRemoved:maxSelection]; + if (amountToAdd > 0) [self _addRangeToSelection:HFRangeMake(maxSelection, amountToAdd)]; + selectionChanged = YES; + locationToMakeVisible = llmin(contentsLength, (amountToAdd > 0 ? maxSelection + amountToAdd : minSelection + amountToRemove)); + } + else { + if (maxSelection < contentsLength) { + NSUInteger amountToAdd = ll2l(llmin(contentsLength - maxSelection, amountToMove)); + [self _addRangeToSelection:HFRangeMake(maxSelection, amountToAdd)]; + selectionChanged = YES; + locationToMakeVisible = maxSelection + amountToAdd; + } + } + } + if (selectionChanged) { + BEGIN_TRANSACTION(); + [self _addPropertyChangeBits:HFControllerSelectedRanges]; + if (locationToMakeVisible != NO_SELECTION) [self _ensureVisibilityOfLocation:locationToMakeVisible]; + END_TRANSACTION(); + } +} + +/* Returns the distance to the next "word" (at least 1, unless we are empty). Here a word is identified as a column. If there are no columns, a word is a line. This is used for word movement (e.g. option + right arrow) */ +- (unsigned long long)_distanceToWordBoundaryForDirection:(HFControllerMovementDirection)direction { + unsigned long long result = 0, locationToConsider; + + /* Figure out how big a word is. By default, it's the column width, unless we have no columns, in which case it's the bytes per line. */ + NSUInteger wordGranularity = [self bytesPerColumn]; + if (wordGranularity == 0) wordGranularity = MAX(1u, [self bytesPerLine]); + if (selectionAnchor == NO_SELECTION) { + /* Pick the anchor inline with the choice of direction */ + if (direction == HFControllerDirectionLeft) locationToConsider = [self _minimumSelectionLocation]; + else locationToConsider = [self _maximumSelectionLocation]; + } else { + /* Just use the anchor */ + locationToConsider = selectionAnchor; + } + if (direction == HFControllerDirectionRight) { + result = HFRoundUpToNextMultipleSaturate(locationToConsider, wordGranularity) - locationToConsider; + } else { + result = locationToConsider % wordGranularity; + if (result == 0) result = wordGranularity; + } + return result; + +} + +/* Anchored selection is not allowed; neither is up/down movement */ +- (void)_shiftSelectionInDirection:(HFControllerMovementDirection)direction byAmount:(unsigned long long)amountToMove { + HFASSERT(direction == HFControllerDirectionLeft || direction == HFControllerDirectionRight); + HFASSERT(selectionAnchor == NO_SELECTION); + NSUInteger i, max = [selectedContentsRanges count]; + const unsigned long long maxLength = [self contentsLength]; + NSMutableArray *newRanges = [NSMutableArray arrayWithCapacity:max]; + BOOL hasAddedNonemptyRange = NO; + for (i=0; i < max; i++) { + HFRange range = [selectedContentsRanges[i] HFRange]; + HFASSERT(range.location <= maxLength && HFMaxRange(range) <= maxLength); + if (direction == HFControllerDirectionRight) { + unsigned long long offset = MIN(maxLength - range.location, amountToMove); + unsigned long long lengthToSubtract = MIN(range.length, amountToMove - offset); + range.location += offset; + range.length -= lengthToSubtract; + } + else { /* direction == HFControllerDirectionLeft */ + unsigned long long negOffset = MIN(amountToMove, range.location); + unsigned long long lengthToSubtract = MIN(range.length, amountToMove - negOffset); + range.location -= negOffset; + range.length -= lengthToSubtract; + } + [newRanges addObject:[HFRangeWrapper withRange:range]]; + hasAddedNonemptyRange = hasAddedNonemptyRange || (range.length > 0); + } + + newRanges = [[[HFRangeWrapper organizeAndMergeRanges:newRanges] mutableCopy] autorelease]; + + BOOL hasFoundEmptyRange = NO; + max = [newRanges count]; + for (i=0; i < max; i++) { + HFRange range = [newRanges[i] HFRange]; + if (range.length == 0) { + if (hasFoundEmptyRange || hasAddedNonemptyRange) { + [newRanges removeObjectAtIndex:i]; + i--; + max--; + } + hasFoundEmptyRange = YES; + } + } + [selectedContentsRanges setArray:newRanges]; + VALIDATE_SELECTION(); + [self _addPropertyChangeBits:HFControllerSelectedRanges]; +} + +__attribute__((unused)) +static BOOL rangesAreInAscendingOrder(NSEnumerator *rangeEnumerator) { + unsigned long long index = 0; + HFRangeWrapper *rangeWrapper; + while ((rangeWrapper = [rangeEnumerator nextObject])) { + HFRange range = [rangeWrapper HFRange]; + if (range.location < index) return NO; + index = HFSum(range.location, range.length); + } + return YES; +} + +- (BOOL)_registerCondemnedRangesForUndo:(NSArray *)ranges selectingRangesAfterUndo:(BOOL)selectAfterUndo { + HFASSERT(ranges != NULL); + HFASSERT(ranges != selectedContentsRanges); //selectedContentsRanges is mutable - we really don't want to stash it away with undo + BOOL result = NO; + NSUndoManager *manager = [self undoManager]; + NSUInteger rangeCount = [ranges count]; + if (! manager || ! rangeCount) return NO; + + HFASSERT(rangesAreInAscendingOrder([ranges objectEnumerator])); + + NSMutableArray *rangesToRestore = [NSMutableArray arrayWithCapacity:rangeCount]; + NSMutableArray *correspondingByteArrays = [NSMutableArray arrayWithCapacity:rangeCount]; + HFByteArray *bytes = [self byteArray]; + + /* Enumerate the ranges in forward order so when we insert them, we insert later ranges before earlier ones, so we don't have to worry about shifting indexes */ + FOREACH(HFRangeWrapper *, rangeWrapper, ranges) { + HFRange range = [rangeWrapper HFRange]; + if (range.length > 0) { + [rangesToRestore addObject:[HFRangeWrapper withRange:HFRangeMake(range.location, 0)]]; + [correspondingByteArrays addObject:[bytes subarrayWithRange:range]]; + result = YES; + } + } + + if (result) [self _registerUndoOperationForInsertingByteArrays:correspondingByteArrays inRanges:rangesToRestore withSelectionAction:(selectAfterUndo ? eSelectResult : eSelectAfterResult)]; + return result; +} + +- (void)_commandDeleteRanges:(NSArray *)rangesToDelete { + HFASSERT(rangesToDelete != selectedContentsRanges); //selectedContentsRanges is mutable - we really don't want to stash it away with undo + HFASSERT(rangesAreInAscendingOrder([rangesToDelete objectEnumerator])); + + /* Delete all the selection - in reverse order */ + unsigned long long minSelection = ULLONG_MAX; + BOOL somethingWasDeleted = NO; + [self _registerCondemnedRangesForUndo:rangesToDelete selectingRangesAfterUndo:YES]; + NSUInteger rangeIndex = [rangesToDelete count]; + HFASSERT(rangeIndex > 0); + while (rangeIndex--) { + HFRange range = [rangesToDelete[rangeIndex] HFRange]; + minSelection = llmin(range.location, minSelection); + if (range.length > 0) { + [byteArray deleteBytesInRange:range]; + somethingWasDeleted = YES; + } + } + + HFASSERT(minSelection != ULLONG_MAX); + if (somethingWasDeleted) { + BEGIN_TRANSACTION(); + [self _addPropertyChangeBits:HFControllerContentValue | HFControllerContentLength]; + [self _setSingleSelectedContentsRange:HFRangeMake(minSelection, 0)]; + [self _updateDisplayedRange]; + END_TRANSACTION(); + } + else { + NSBeep(); + } +} + +- (void)_commandInsertByteArrays:(NSArray *)byteArrays inRanges:(NSArray *)ranges withSelectionAction:(HFControllerSelectAction)selectionAction { + HFASSERT(selectionAction < NUM_SELECTION_ACTIONS); + REQUIRE_NOT_NULL(byteArrays); + REQUIRE_NOT_NULL(ranges); + HFASSERT([ranges count] == [byteArrays count]); + NSUInteger index, max = [ranges count]; + HFByteArray *bytes = [self byteArray]; + HFASSERT(rangesAreInAscendingOrder([ranges objectEnumerator])); + + NSMutableArray *byteArraysToInsertOnUndo = [NSMutableArray arrayWithCapacity:max]; + NSMutableArray *rangesToInsertOnUndo = [NSMutableArray arrayWithCapacity:max]; + + BEGIN_TRANSACTION(); + if (selectionAction == eSelectResult || selectionAction == eSelectAfterResult) { + [selectedContentsRanges removeAllObjects]; + } + unsigned long long endOfInsertedRanges = ULLONG_MAX; + for (index = 0; index < max; index++) { + HFRange range = [ranges[index] HFRange]; + HFByteArray *oldBytes = [bytes subarrayWithRange:range]; + [byteArraysToInsertOnUndo addObject:oldBytes]; + HFByteArray *newBytes = byteArrays[index]; + EXPECT_CLASS(newBytes, [HFByteArray class]); + [bytes insertByteArray:newBytes inRange:range]; + HFRange insertedRange = HFRangeMake(range.location, [newBytes length]); + HFRangeWrapper *insertedRangeWrapper = [HFRangeWrapper withRange:insertedRange]; + [rangesToInsertOnUndo addObject:insertedRangeWrapper]; + if (selectionAction == eSelectResult) { + [selectedContentsRanges addObject:insertedRangeWrapper]; + } + else { + endOfInsertedRanges = HFMaxRange(insertedRange); + } + } + if (selectionAction == eSelectAfterResult) { + HFASSERT([ranges count] > 0); + [selectedContentsRanges addObject:[HFRangeWrapper withRange:HFRangeMake(endOfInsertedRanges, 0)]]; + } + + if (selectionAction == ePreserveSelection) { + HFASSERT([selectedContentsRanges count] > 0); + [self _clipSelectedContentsRangesToLength:[self contentsLength]]; + } + + VALIDATE_SELECTION(); + HFASSERT([byteArraysToInsertOnUndo count] == [rangesToInsertOnUndo count]); + [self _registerUndoOperationForInsertingByteArrays:byteArraysToInsertOnUndo inRanges:rangesToInsertOnUndo withSelectionAction:(selectionAction == ePreserveSelection ? ePreserveSelection : eSelectAfterResult)]; + [self _updateDisplayedRange]; + [self maximizeVisibilityOfContentsRange:[selectedContentsRanges[0] HFRange]]; + [self _addPropertyChangeBits:HFControllerContentValue | HFControllerContentLength | HFControllerSelectedRanges]; + END_TRANSACTION(); +} + +/* The user has hit undo after typing a string. */ +- (void)_commandReplaceBytesAfterBytesFromBeginning:(unsigned long long)leftOffset upToBytesFromEnd:(unsigned long long)rightOffset withByteArray:(HFByteArray *)bytesToReinsert { + HFASSERT(bytesToReinsert != NULL); + + BEGIN_TRANSACTION(); + HFByteArray *bytes = [self byteArray]; + unsigned long long contentsLength = [self contentsLength]; + HFASSERT(leftOffset <= contentsLength); + HFASSERT(rightOffset <= contentsLength); + HFASSERT(contentsLength - rightOffset >= leftOffset); + HFRange rangeToReplace = HFRangeMake(leftOffset, contentsLength - rightOffset - leftOffset); + [self _registerCondemnedRangesForUndo:[HFRangeWrapper withRanges:&rangeToReplace count:1] selectingRangesAfterUndo:NO]; + [bytes insertByteArray:bytesToReinsert inRange:rangeToReplace]; + [self _updateDisplayedRange]; + [self _setSingleSelectedContentsRange:HFRangeMake(rangeToReplace.location, [bytesToReinsert length])]; + [self _addPropertyChangeBits:HFControllerContentValue | HFControllerContentLength | HFControllerSelectedRanges]; + END_TRANSACTION(); +} + +/* We use NSNumbers instead of long longs here because Tiger/PPC NSInvocation had trouble with long longs */ +- (void)_commandValueObjectsReplaceBytesAfterBytesFromBeginning:(NSNumber *)leftOffset upToBytesFromEnd:(NSNumber *)rightOffset withByteArray:(HFByteArray *)bytesToReinsert { + HFASSERT(leftOffset != NULL); + HFASSERT(rightOffset != NULL); + EXPECT_CLASS(leftOffset, NSNumber); + EXPECT_CLASS(rightOffset, NSNumber); + [self _commandReplaceBytesAfterBytesFromBeginning:[leftOffset unsignedLongLongValue] upToBytesFromEnd:[rightOffset unsignedLongLongValue] withByteArray:bytesToReinsert]; +} + +- (void)moveInDirection:(HFControllerMovementDirection)direction byByteCount:(unsigned long long)amountToMove withSelectionTransformation:(HFControllerSelectionTransformation)transformation usingAnchor:(BOOL)useAnchor { + if (! useAnchor) selectionAnchor = NO_SELECTION; + switch (transformation) { + case HFControllerDiscardSelection: + [self _moveDirectionDiscardingSelection:direction byAmount:amountToMove]; + break; + + case HFControllerShiftSelection: + [self _shiftSelectionInDirection:direction byAmount:amountToMove]; + break; + + case HFControllerExtendSelection: + [self _extendSelectionInDirection:direction byAmount:amountToMove]; + break; + + default: + [NSException raise:NSInvalidArgumentException format:@"Invalid transformation %ld", (long)transformation]; + break; + } + if (! useAnchor) selectionAnchor = NO_SELECTION; +} + +- (void)moveInDirection:(HFControllerMovementDirection)direction withGranularity:(HFControllerMovementGranularity)granularity andModifySelection:(BOOL)extendSelection { + HFASSERT(granularity == HFControllerMovementByte || granularity == HFControllerMovementColumn || granularity == HFControllerMovementLine || granularity == HFControllerMovementPage || granularity == HFControllerMovementDocument); + HFASSERT(direction == HFControllerDirectionLeft || direction == HFControllerDirectionRight); + unsigned long long bytesToMove = 0; + switch (granularity) { + case HFControllerMovementByte: + bytesToMove = 1; + break; + case HFControllerMovementColumn: + /* This is a tricky case because the amount we have to move depends on our position in the column. */ + bytesToMove = [self _distanceToWordBoundaryForDirection:direction]; + break; + case HFControllerMovementLine: + bytesToMove = [self bytesPerLine]; + break; + case HFControllerMovementPage: + bytesToMove = HFProductULL([self bytesPerLine], HFFPToUL(MIN(floorl([self displayedLineRange].length), 1.))); + break; + case HFControllerMovementDocument: + bytesToMove = [self contentsLength]; + break; + } + HFControllerSelectionTransformation transformation = (extendSelection ? HFControllerExtendSelection : HFControllerDiscardSelection); + [self moveInDirection:direction byByteCount:bytesToMove withSelectionTransformation:transformation usingAnchor:YES]; +} + +- (void)moveToLineBoundaryInDirection:(HFControllerMovementDirection)direction andModifySelection:(BOOL)modifySelection { + HFASSERT(direction == HFControllerDirectionLeft || direction == HFControllerDirectionRight); + BEGIN_TRANSACTION(); + unsigned long long locationToMakeVisible; + HFRange additionalSelection; + + if (direction == HFControllerDirectionLeft) { + /* If we are at the beginning of a line, this should be a no-op */ + unsigned long long minLocation = [self _minimumSelectionLocation]; + unsigned long long newMinLocation = (minLocation / bytesPerLine) * bytesPerLine; + locationToMakeVisible = newMinLocation; + additionalSelection = HFRangeMake(newMinLocation, minLocation - newMinLocation); + } + else { + /* This always advances to the next line */ + unsigned long long maxLocation = [self _maximumSelectionLocation]; + unsigned long long proposedNewMaxLocation = HFRoundUpToNextMultipleSaturate(maxLocation, bytesPerLine); + unsigned long long newMaxLocation = MIN([self contentsLength], proposedNewMaxLocation); + HFASSERT(newMaxLocation >= maxLocation); + locationToMakeVisible = newMaxLocation; + additionalSelection = HFRangeMake(maxLocation, newMaxLocation - maxLocation); + } + + if (modifySelection) { + if (additionalSelection.length > 0) { + [self _addRangeToSelection:additionalSelection]; + [self _addPropertyChangeBits:HFControllerSelectedRanges]; + } + } + else { + [self _setSingleSelectedContentsRange:HFRangeMake(locationToMakeVisible, 0)]; + } + [self _ensureVisibilityOfLocation:locationToMakeVisible]; + END_TRANSACTION(); +} + +- (void)deleteSelection { + if ([self editMode] == HFOverwriteMode || ! [self editable]) { + NSBeep(); + } + else { + [self _commandDeleteRanges:[HFRangeWrapper organizeAndMergeRanges:selectedContentsRanges]]; + } +} + +// Called after Replace All is finished. +- (void)replaceByteArray:(HFByteArray *)newArray { + REQUIRE_NOT_NULL(newArray); + EXPECT_CLASS(newArray, HFByteArray); + HFRange entireRange = HFRangeMake(0, [self contentsLength]); + if ([self editMode] == HFOverwriteMode && [newArray length] != entireRange.length) { + NSBeep(); + } + else { + [self _commandInsertByteArrays:@[newArray] inRanges:[HFRangeWrapper withRanges:&entireRange count:1] withSelectionAction:ePreserveSelection]; + } +} + +- (BOOL)insertData:(NSData *)data replacingPreviousBytes:(unsigned long long)previousBytes allowUndoCoalescing:(BOOL)allowUndoCoalescing { + REQUIRE_NOT_NULL(data); + BOOL result; +#if ! NDEBUG + const unsigned long long startLength = [byteArray length]; + unsigned long long expectedNewLength; + if ([self editMode] == HFOverwriteMode) { + expectedNewLength = startLength; + } + else { + expectedNewLength = startLength + [data length] - previousBytes; + FOREACH(HFRangeWrapper*, wrapper, [self selectedContentsRanges]) expectedNewLength -= [wrapper HFRange].length; + } +#endif + HFByteSlice *slice = [[HFSharedMemoryByteSlice alloc] initWithUnsharedData:data]; + HFASSERT([slice length] == [data length]); + HFByteArray *array = [[preferredByteArrayClass() alloc] init]; + [array insertByteSlice:slice inRange:HFRangeMake(0, 0)]; + HFASSERT([array length] == [data length]); + result = [self insertByteArray:array replacingPreviousBytes:previousBytes allowUndoCoalescing:allowUndoCoalescing]; + [slice release]; + [array release]; +#if ! NDEBUG + HFASSERT((result && [byteArray length] == expectedNewLength) || (! result && [byteArray length] == startLength)); +#endif + return result; +} + +- (BOOL)_insertionModeCoreInsertByteArray:(HFByteArray *)bytesToInsert replacingPreviousBytes:(unsigned long long)previousBytes allowUndoCoalescing:(BOOL)allowUndoCoalescing outNewSingleSelectedRange:(HFRange *)outSelectedRange { + HFASSERT([self editMode] == HFInsertMode); + REQUIRE_NOT_NULL(bytesToInsert); + + /* Guard against overflow. If [bytesToInsert length] + [self contentsLength] - previousBytes overflows, then we can't do it */ + HFASSERT([self contentsLength] >= previousBytes); + if (! HFSumDoesNotOverflow([bytesToInsert length], [self contentsLength] - previousBytes)) { + return NO; //don't do anything + } + + + unsigned long long amountDeleted = 0, amountAdded = [bytesToInsert length]; + HFByteArray *bytes = [self byteArray]; + + /* Delete all the selection - in reverse order - except the last (really first) one, which we will overwrite. */ + NSArray *allRangesToRemove = [HFRangeWrapper organizeAndMergeRanges:[self selectedContentsRanges]]; + HFRange rangeToReplace = [allRangesToRemove[0] HFRange]; + HFASSERT(rangeToReplace.location == [self _minimumSelectionLocation]); + NSUInteger rangeIndex, rangeCount = [allRangesToRemove count]; + HFASSERT(rangeCount > 0); + NSMutableArray *rangesToDelete = [NSMutableArray arrayWithCapacity:rangeCount - 1]; + for (rangeIndex = rangeCount - 1; rangeIndex > 0; rangeIndex--) { + HFRangeWrapper *rangeWrapper = allRangesToRemove[rangeIndex]; + HFRange range = [rangeWrapper HFRange]; + if (range.length > 0) { + amountDeleted = HFSum(amountDeleted, range.length); + [rangesToDelete insertObject:rangeWrapper atIndex:0]; + } + } + + if ([rangesToDelete count] > 0) { + HFASSERT(rangesAreInAscendingOrder([rangesToDelete objectEnumerator])); + /* TODO: This is problematic because it overwrites the selection that gets set by _activateTypingUndoCoalescingForReplacingRange:, so we lose the first selection in a multiple selection scenario. */ + [self _registerCondemnedRangesForUndo:rangesToDelete selectingRangesAfterUndo:YES]; + NSEnumerator *enumer = [rangesToDelete reverseObjectEnumerator]; + HFRangeWrapper *rangeWrapper; + while ((rangeWrapper = [enumer nextObject])) { + [bytes deleteBytesInRange:[rangeWrapper HFRange]]; + } + } + + rangeToReplace.length = HFSum(rangeToReplace.length, previousBytes); + + /* Insert data */ +#if ! NDEBUG + unsigned long long expectedLength = [byteArray length] + [bytesToInsert length] - rangeToReplace.length; +#endif + [byteArray insertByteArray:bytesToInsert inRange:rangeToReplace]; +#if ! NDEBUG + HFASSERT(expectedLength == [byteArray length]); +#endif + + /* return the new selected range */ + *outSelectedRange = HFRangeMake(HFSum(rangeToReplace.location, amountAdded), 0); + return YES; +} + + +- (BOOL)_overwriteModeCoreInsertByteArray:(HFByteArray *)bytesToInsert replacingPreviousBytes:(unsigned long long)previousBytes allowUndoCoalescing:(BOOL)allowUndoCoalescing outRangeToRemoveFromSelection:(HFRange *)outRangeToRemove { + REQUIRE_NOT_NULL(bytesToInsert); + const unsigned long long byteArrayLength = [byteArray length]; + const unsigned long long bytesToInsertLength = [bytesToInsert length]; + HFRange firstSelectedRange = [selectedContentsRanges[0] HFRange]; + HFRange proposedRangeToOverwrite = HFRangeMake(firstSelectedRange.location, bytesToInsertLength); + HFASSERT(proposedRangeToOverwrite.location >= previousBytes); + proposedRangeToOverwrite.location -= previousBytes; + if (! HFRangeIsSubrangeOfRange(proposedRangeToOverwrite, HFRangeMake(0, byteArrayLength))) { + /* The user tried to overwrite past the end */ + NSBeep(); + return NO; + } + + [byteArray insertByteArray:bytesToInsert inRange:proposedRangeToOverwrite]; + + *outRangeToRemove = proposedRangeToOverwrite; + return YES; +} + +- (BOOL)insertByteArray:(HFByteArray *)bytesToInsert replacingPreviousBytes:(unsigned long long)previousBytes allowUndoCoalescing:(BOOL)allowUndoCoalescing { +#if ! NDEBUG + if (previousBytes > 0) { + NSArray *selectedRanges = [self selectedContentsRanges]; + HFASSERT([selectedRanges count] == 1); + HFRange selectedRange = [selectedRanges[0] HFRange]; + HFASSERT(selectedRange.location >= previousBytes); //don't try to delete more trailing bytes than we actually have! + } +#endif + REQUIRE_NOT_NULL(bytesToInsert); + + + BEGIN_TRANSACTION(); + unsigned long long beforeLength = [byteArray length]; + BOOL inOverwriteMode = [self editMode] == HFOverwriteMode; + HFRange modificationRange; //either range to remove from selection if in overwrite mode, or range to select if not + BOOL success; + if (inOverwriteMode) { + success = [self _overwriteModeCoreInsertByteArray:bytesToInsert replacingPreviousBytes:previousBytes allowUndoCoalescing:allowUndoCoalescing outRangeToRemoveFromSelection:&modificationRange]; + } + else { + success = [self _insertionModeCoreInsertByteArray:bytesToInsert replacingPreviousBytes:previousBytes allowUndoCoalescing:allowUndoCoalescing outNewSingleSelectedRange:&modificationRange]; + } + + if (success) { + /* Update our selection */ + [self _addPropertyChangeBits:HFControllerContentValue]; + [self _updateDisplayedRange]; + [self _addPropertyChangeBits:HFControllerContentValue]; + if (inOverwriteMode) { + [self _removeRangeFromSelection:modificationRange withCursorLocationIfAllSelectionRemoved:HFMaxRange(modificationRange)]; + [self maximizeVisibilityOfContentsRange:[selectedContentsRanges[0] HFRange]]; + } + else { + [self _setSingleSelectedContentsRange:modificationRange]; + [self maximizeVisibilityOfContentsRange:modificationRange]; + } + if (beforeLength != [byteArray length]) [self _addPropertyChangeBits:HFControllerContentLength]; + } + END_TRANSACTION(); + return success; +} + +- (void)deleteDirection:(HFControllerMovementDirection)direction { + HFASSERT(direction == HFControllerDirectionLeft || direction == HFControllerDirectionRight); + if ([self editMode] != HFInsertMode || ! [self editable]) { + NSBeep(); + return; + } + unsigned long long minSelection = [self _minimumSelectionLocation]; + unsigned long long maxSelection = [self _maximumSelectionLocation]; + if (maxSelection != minSelection) { + [self deleteSelection]; + } + else { + HFRange rangeToDelete = HFRangeMake(minSelection, 1); + BOOL rangeIsValid; + if (direction == HFControllerDirectionLeft) { + rangeIsValid = (rangeToDelete.location > 0); + rangeToDelete.location--; + } + else { + rangeIsValid = (rangeToDelete.location < [self contentsLength]); + } + if (rangeIsValid) { + BEGIN_TRANSACTION(); + [byteArray deleteBytesInRange:rangeToDelete]; + [self _setSingleSelectedContentsRange:HFRangeMake(rangeToDelete.location, 0)]; + [self _updateDisplayedRange]; + [self _addPropertyChangeBits:HFControllerSelectedRanges | HFControllerContentValue | HFControllerContentLength]; + END_TRANSACTION(); + } + } +} + +- (HFEditMode)editMode { + return _hfflags.editMode; +} + +- (void)setEditMode:(HFEditMode)val +{ + if (val != _hfflags.editMode) { + _hfflags.editMode = val; + // don't allow undo coalescing when switching modes + [self _addPropertyChangeBits:HFControllerEditable]; + } +} + +- (void)reloadData { + BEGIN_TRANSACTION(); + [cachedData release]; + cachedData = nil; + [self _updateDisplayedRange]; + [self _addPropertyChangeBits: HFControllerContentValue | HFControllerContentLength]; + END_TRANSACTION(); +} + +#if BENCHMARK_BYTEARRAYS + ++ (void)_testByteArray { + HFByteArray* first = [[[HFFullMemoryByteArray alloc] init] autorelease]; + HFBTreeByteArray* second = [[[HFBTreeByteArray alloc] init] autorelease]; + first = nil; + // second = nil; + + //srandom(time(NULL)); + + unsigned opCount = 4096 * 512; + unsigned long long expectedLength = 0; + unsigned i; + for (i=1; i <= opCount; i++) { + @autoreleasepool { + NSUInteger op; + const unsigned long long length = [first length]; + unsigned long long offset; + unsigned long long number; + switch ((op = (random()%2))) { + case 0: { //insert + offset = random() % (1 + length); + HFByteSlice* slice = [[HFRandomDataByteSlice alloc] initWithRandomDataLength: 1 + random() % 1000]; + [first insertByteSlice:slice inRange:HFRangeMake(offset, 0)]; + [second insertByteSlice:slice inRange:HFRangeMake(offset, 0)]; + expectedLength += [slice length]; + [slice release]; + break; + } + case 1: { //delete + if (length > 0) { + offset = random() % length; + number = 1 + random() % (length - offset); + [first deleteBytesInRange:HFRangeMake(offset, number)]; + [second deleteBytesInRange:HFRangeMake(offset, number)]; + expectedLength -= number; + } + break; + } + } + } // @autoreleasepool + } +} + ++ (void)_testAttributeArrays { + HFByteRangeAttributeArray *naiveTree = [[HFNaiveByteRangeAttributeArray alloc] init]; + HFAnnotatedTreeByteRangeAttributeArray *smartTree = [[HFAnnotatedTreeByteRangeAttributeArray alloc] init]; + naiveTree = nil; + // smartTree = nil; + + NSString * const attributes[3] = {@"Alpha", @"Beta", @"Gamma"}; + + const NSUInteger supportedIndexEnd = NSNotFound; + NSUInteger round; + for (round = 0; round < 4096 * 256; round++) { + NSString *attribute = attributes[random() % (sizeof attributes / sizeof *attributes)]; + BOOL insert = ([smartTree isEmpty] || [naiveTree isEmpty] || (random() % 2)); + + unsigned long long end = random(); + unsigned long long start = random(); + if (end < start) { + unsigned long long temp = end; + end = start; + start = temp; + } + HFRange range = HFRangeMake(start, end - start); + + if (insert) { + [naiveTree addAttribute:attribute range:range]; + [smartTree addAttribute:attribute range:range]; + } + else { + [naiveTree removeAttribute:attribute range:range]; + [smartTree removeAttribute:attribute range:range]; + } + } + + [naiveTree release]; + [smartTree release]; +} + + ++ (void)initialize { + CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); + srandom(0); + [self _testByteArray]; + CFAbsoluteTime end = CFAbsoluteTimeGetCurrent(); + printf("Byte array time: %f\n", end - start); + + srandom(0); + start = CFAbsoluteTimeGetCurrent(); + [self _testAttributeArrays]; + end = CFAbsoluteTimeGetCurrent(); + printf("Attribute array time: %f\n", end - start); + + exit(0); +} + +#endif + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.h b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.h new file mode 100644 index 000000000..9debeb2ec --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.h @@ -0,0 +1,21 @@ +// +// HFFullMemoryByteArray.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! + @class HFFullMemoryByteArray + @brief A naive subclass of HFByteArray suitable mainly for testing. Use HFBTreeByteArray instead. + + HFFullMemoryByteArray is a simple subclass of HFByteArray that does not store any byte slices. Because it stores all data in an NSMutableData, it is not efficient. It is mainly useful as a naive implementation for testing. Use HFBTreeByteArray instead. +*/ +@interface HFFullMemoryByteArray : HFByteArray { + NSMutableData *data; +} + + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.m b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.m new file mode 100644 index 000000000..f5a582b96 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteArray.m @@ -0,0 +1,70 @@ +// +// HFFullMemoryByteArray.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import +#import + +@implementation HFFullMemoryByteArray + +- (instancetype)init { + self = [super init]; + data = [[NSMutableData alloc] init]; + return self; +} + +- (void)dealloc { + [data release]; + [super dealloc]; +} + +- (unsigned long long)length { + return [data length]; +} + +- (void)copyBytes:(unsigned char *)dst range:(HFRange)range { + HFASSERT(range.length == 0 || dst != NULL); + HFASSERT(HFSumDoesNotOverflow(range.location, range.length)); + HFASSERT(range.location + range.length <= [self length]); + unsigned char* bytes = [data mutableBytes]; + memmove(dst, bytes + ll2l(range.location), ll2l(range.length)); +} + +- (HFByteArray *)subarrayWithRange:(HFRange)lrange { + HFRange entireRange = HFRangeMake(0, [self length]); + HFASSERT(HFRangeIsSubrangeOfRange(lrange, entireRange)); + NSRange range; + range.location = ll2l(lrange.location); + range.length = ll2l(lrange.length); + HFFullMemoryByteArray* result = [[[self class] alloc] init]; + [result->data setData:[data subdataWithRange:range]]; + return [result autorelease]; +} + +- (NSArray *)byteSlices { + return @[[[[HFFullMemoryByteSlice alloc] initWithData:data] autorelease]]; +} + +- (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)lrange { + [self incrementGenerationOrRaiseIfLockedForSelector:_cmd]; + HFASSERT([slice length] <= NSUIntegerMax); + NSUInteger length = ll2l([slice length]); + NSRange range; + HFASSERT(lrange.location <= NSUIntegerMax); + HFASSERT(lrange.length <= NSUIntegerMax); + HFASSERT(HFSumDoesNotOverflow(lrange.location, lrange.length)); + range.location = ll2l(lrange.location); + range.length = ll2l(lrange.length); + + void* buff = check_malloc(length); + [slice copyBytes:buff range:HFRangeMake(0, length)]; + [data replaceBytesInRange:range withBytes:buff length:length]; + free(buff); +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.h b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.h new file mode 100644 index 000000000..ec195cadd --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.h @@ -0,0 +1,21 @@ +// +// HFFullMemoryByteSlice.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! @class HFFullMemoryByteSlice + + @brief A simple subclass of HFByteSlice that wraps an NSData. For most uses, prefer HFSharedMemoryByteSlice. +*/ +@interface HFFullMemoryByteSlice : HFByteSlice { + NSData *data; +} + +/*! Init with a given NSData, which is copied via the \c -copy message. */ +- (instancetype)initWithData:(NSData *)val; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.m b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.m new file mode 100644 index 000000000..2a38ccdf7 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFFullMemoryByteSlice.m @@ -0,0 +1,46 @@ +// +// HFFullMemoryByteSlice.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import "HFFullMemoryByteSlice.h" + + +@implementation HFFullMemoryByteSlice + +- (instancetype)initWithData:(NSData *)val { + REQUIRE_NOT_NULL(val); + self = [super init]; + data = [val copy]; + return self; +} + +- (void)dealloc { + [data release]; + [super dealloc]; +} + +- (unsigned long long)length { return [data length]; } + +- (void)copyBytes:(unsigned char *)dst range:(HFRange)lrange { + NSRange range; + HFASSERT(lrange.location <= NSUIntegerMax); + HFASSERT(lrange.length <= NSUIntegerMax); + HFASSERT(lrange.location + lrange.length >= lrange.location); + range.location = ll2l(lrange.location); + range.length = ll2l(lrange.length); + [data getBytes:dst range:range]; +} + +- (HFByteSlice *)subsliceWithRange:(HFRange)range { + HFASSERT(range.length > 0); + HFASSERT(range.location < [self length]); + HFASSERT([self length] - range.location >= range.length); + HFASSERT(range.location <= NSUIntegerMax); + HFASSERT(range.length <= NSUIntegerMax); + return [[[[self class] alloc] initWithData:[data subdataWithRange:NSMakeRange(ll2l(range.location), ll2l(range.length))]] autorelease]; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFFunctions.h b/thirdparty/SameBoy-old/HexFiend/HFFunctions.h new file mode 100644 index 000000000..aaab1076d --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFFunctions.h @@ -0,0 +1,533 @@ +/* Functions and convenience methods for working with HFTypes */ + +#import +#import + +#define HFDEFAULT_FONT (@"Monaco") +#define HFDEFAULT_FONTSIZE ((CGFloat)11.) + +#define HFZeroRange (HFRange){0, 0} + +/*! + Makes an HFRange. An HFRange is like an NSRange except it uses unsigned long longs. +*/ +static inline HFRange HFRangeMake(unsigned long long loc, unsigned long long len) { + return (HFRange){loc, len}; +} + +/*! + Returns true if a given location is within a given HFRange. If the location is at the end of the range (range.location + range.length) this returns NO. +*/ +static inline BOOL HFLocationInRange(unsigned long long location, HFRange range) { + return location >= range.location && location - range.location < range.length; +} + +/*! + Like NSRangeToString but for HFRanges +*/ +static inline NSString* HFRangeToString(HFRange range) { + return [NSString stringWithFormat:@"{%llu, %llu}", range.location, range.length]; +} + +/*! + Converts a given HFFPRange to a string. +*/ +static inline NSString* HFFPRangeToString(HFFPRange range) { + return [NSString stringWithFormat:@"{%Lf, %Lf}", range.location, range.length]; +} + +/*! + Returns true if two HFRanges are equal. +*/ +static inline BOOL HFRangeEqualsRange(HFRange a, HFRange b) { + return a.location == b.location && a.length == b.length; +} + +/*! + Returns true if a + b does not overflow an unsigned long long. +*/ +static inline BOOL HFSumDoesNotOverflow(unsigned long long a, unsigned long long b) { + return a + b >= a; +} + +/*! + Returns true if a * b does not overflow an unsigned long long. +*/ +static inline BOOL HFProductDoesNotOverflow(unsigned long long a, unsigned long long b) { + if (b == 0) return YES; + unsigned long long result = a * b; + return result / b == a; +} + +/*! + Returns a * b as an NSUInteger. This asserts on overflow, unless NDEBUG is defined. +*/ +static inline NSUInteger HFProductInt(NSUInteger a, NSUInteger b) { + NSUInteger result = a * b; + assert(a == 0 || result / a == b); //detect overflow + return result; +} + +/*! + Returns a + b as an NSUInteger. This asserts on overflow unless NDEBUG is defined. +*/ +static inline NSUInteger HFSumInt(NSUInteger a, NSUInteger b) { + assert(a + b >= a); + return a + b; +} + +/*! + Returns a + b as an NSUInteger, saturating at NSUIntegerMax + */ +static inline NSUInteger HFSumIntSaturate(NSUInteger a, NSUInteger b) { + NSUInteger result = a + b; + return (result < a) ? NSUIntegerMax : result; +} + +/*! + Returns a + b as an unsigned long long, saturating at ULLONG_MAX + */ +static inline unsigned long long HFSumULLSaturate(unsigned long long a, unsigned long long b) { + unsigned long long result = a + b; + return (result < a) ? ULLONG_MAX : result; +} + +/*! + Returns a * b as an unsigned long long. This asserts on overflow, unless NDEBUG is defined. +*/ +static inline unsigned long long HFProductULL(unsigned long long a, unsigned long long b) { + unsigned long long result = a * b; + assert(HFProductDoesNotOverflow(a, b)); //detect overflow + return result; +} + +/*! + Returns a + b as an unsigned long long. This asserts on overflow, unless NDEBUG is defined. +*/ +static inline unsigned long long HFSum(unsigned long long a, unsigned long long b) { + assert(HFSumDoesNotOverflow(a, b)); + return a + b; +} + +/*! + Returns a + b as an unsigned long long. This asserts on overflow, unless NDEBUG is defined. + */ +static inline unsigned long long HFMaxULL(unsigned long long a, unsigned long long b) { + return a < b ? b : a; +} + +/*! + Returns a - b as an unsigned long long. This asserts on underflow (if b > a), unless NDEBUG is defined. +*/ +static inline unsigned long long HFSubtract(unsigned long long a, unsigned long long b) { + assert(a >= b); + return a - b; +} + +/*! + Returns the smallest multiple of B that is equal to or larger than A, and asserts on overflow. +*/ +static inline unsigned long long HFRoundUpToMultiple(unsigned long long a, unsigned long long b) { + // The usual approach of ((a + (b - 1)) / b) * b doesn't handle overflow correctly + unsigned long long remainder = a % b; + if (remainder == 0) return a; + else return HFSum(a, b - remainder); +} + +/*! + Returns the smallest multiple of B that is equal to or larger than A, and asserts on overflow. + */ +static inline NSUInteger HFRoundUpToMultipleInt(NSUInteger a, NSUInteger b) { + // The usual approach of ((a + (b - 1)) / b) * b doesn't handle overflow correctly + NSUInteger remainder = a % b; + if (remainder == 0) return a; + else return (NSUInteger)HFSum(a, b - remainder); +} + +/*! + Returns the least common multiple of A and B, and asserts on overflow or if A or B is zero. + */ +static inline NSUInteger HFLeastCommonMultiple(NSUInteger a, NSUInteger b) { + assert(a > 0); + assert(b > 0); + + /* Compute GCD. It ends up in U. */ + NSUInteger t, u = a, v = b; + while (v > 0) { + t = v; + v = u % v; + u = t; + } + + /* Return the product divided by the GCD, in an overflow safe manner */ + return HFProductInt(a/u, b); +} + + +/*! + Returns the smallest multiple of B strictly larger than A, or ULLONG_MAX if it would overflow +*/ +static inline unsigned long long HFRoundUpToNextMultipleSaturate(unsigned long long a, unsigned long long b) { + assert(b > 0); + unsigned long long result = a + (b - a % b); + if (result < a) result = ULLONG_MAX; //the saturation...on overflow go to the max + return result; +} + +/*! Like NSMaxRange, but for an HFRange. */ +static inline unsigned long long HFMaxRange(HFRange a) { + assert(HFSumDoesNotOverflow(a.location, a.length)); + return a.location + a.length; +} + +/*! Returns YES if needle is fully contained within haystack. Equal ranges are always considered to be subranges of each other (even if they are empty). Furthermore, a zero length needle at the end of haystack is considered a subrange - for example, {6, 0} is a subrange of {3, 3}. */ +static inline BOOL HFRangeIsSubrangeOfRange(HFRange needle, HFRange haystack) { + // If needle starts before haystack, or if needle is longer than haystack, it is not a subrange of haystack + if (needle.location < haystack.location || needle.length > haystack.length) return NO; + + // Their difference in lengths determines the maximum difference in their start locations. We know that these expressions cannot overflow because of the above checks. + return haystack.length - needle.length >= needle.location - haystack.location; +} + +/*! Splits a range about a subrange, returning by reference the prefix and suffix (which may have length zero). */ +static inline void HFRangeSplitAboutSubrange(HFRange range, HFRange subrange, HFRange *outPrefix, HFRange *outSuffix) { + // Requires it to be a subrange + assert(HFRangeIsSubrangeOfRange(subrange, range)); + outPrefix->location = range.location; + outPrefix->length = HFSubtract(subrange.location, range.location); + outSuffix->location = HFMaxRange(subrange); + outSuffix->length = HFMaxRange(range) - outSuffix->location; +} + +/*! Returns YES if the given ranges intersect. Two ranges are considered to intersect if they share at least one index in common. Thus, zero-length ranges do not intersect anything. */ +static inline BOOL HFIntersectsRange(HFRange a, HFRange b) { + // Ranges are said to intersect if they share at least one value. Therefore, zero length ranges never intersect anything. + if (a.length == 0 || b.length == 0) return NO; + + // rearrange (a.location < b.location + b.length && b.location < a.location + a.length) to not overflow + // = ! (a.location >= b.location + b.length || b.location >= a.location + a.length) + BOOL clause1 = (a.location >= b.location && a.location - b.location >= b.length); + BOOL clause2 = (b.location >= a.location && b.location - a.location >= a.length); + return ! (clause1 || clause2); +} + +/*! Returns YES if the given ranges intersect. Two ranges are considered to intersect if any fraction overlaps; zero-length ranges do not intersect anything. */ +static inline BOOL HFFPIntersectsRange(HFFPRange a, HFFPRange b) { + // Ranges are said to intersect if they share at least one value. Therefore, zero length ranges never intersect anything. + if (a.length == 0 || b.length == 0) return NO; + + if (a.location <= b.location && a.location + a.length >= b.location) return YES; + if (b.location <= a.location && b.location + b.length >= a.location) return YES; + return NO; +} + +/*! Returns a range containing the union of the given ranges. These ranges must either intersect or be adjacent: there cannot be any "holes" between them. */ +static inline HFRange HFUnionRange(HFRange a, HFRange b) { + assert(HFIntersectsRange(a, b) || HFMaxRange(a) == b.location || HFMaxRange(b) == a.location); + HFRange result; + result.location = MIN(a.location, b.location); + assert(HFSumDoesNotOverflow(a.location, a.length)); + assert(HFSumDoesNotOverflow(b.location, b.length)); + result.length = MAX(a.location + a.length, b.location + b.length) - result.location; + return result; +} + + +/*! Returns whether a+b > c+d, as if there were no overflow (so ULLONG_MAX + 1 > 10 + 20) */ +static inline BOOL HFSumIsLargerThanSum(unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d) { +#if 1 + // Theory: compare a/2 + b/2 to c/2 + d/2, and if they're equal, compare a%2 + b%2 to c%2 + d%2. We may get into trouble if a and b are both even and c and d are both odd: e.g. a = 2, b = 2, c = 1, d = 3. We would compare 1 + 1 vs 0 + 1, and therefore that 2 + 2 > 1 + 3. To address this, if both remainders are 1, we add this to the sum. We know this cannot overflow because ULLONG_MAX is odd, so (ULLONG_MAX/2) + (ULLONG_MAX/2) + 1 does not overflow. + unsigned int rem1 = (unsigned)(a%2 + b%2); + unsigned int rem2 = (unsigned)(c%2 + d%2); + unsigned long long sum1 = a/2 + b/2 + rem1/2; + unsigned long long sum2 = c/2 + d/2 + rem2/2; + if (sum1 > sum2) return YES; + else if (sum1 < sum2) return NO; + else { + // sum1 == sum2, so compare the remainders. But we have already added in the remainder / 2, so compare the remainders mod 2. + if (rem1%2 > rem2%2) return YES; + else return NO; + } +#else + /* Faster version, but not thoroughly tested yet. */ + unsigned long long xor1 = a^b; + unsigned long long xor2 = c^d; + unsigned long long avg1 = (a&b)+(xor1/2); + unsigned long long avg2 = (c&d)+(xor2/2); + unsigned s1l = avg1 > avg2; + unsigned eq = (avg1 == avg2); + return s1l | ((xor1 & ~xor2) & eq); +#endif +} + +/*! Returns the absolute value of a - b. */ +static inline unsigned long long HFAbsoluteDifference(unsigned long long a, unsigned long long b) { + if (a > b) return a - b; + else return b - a; +} + +/*! Returns true if the end of A is larger than the end of B. */ +static inline BOOL HFRangeExtendsPastRange(HFRange a, HFRange b) { + return HFSumIsLargerThanSum(a.location, a.length, b.location, b.length); +} + +/*! Returns a range containing all indexes in common betwen the two ranges. If there are no indexes in common, returns {0, 0}. */ +static inline HFRange HFIntersectionRange(HFRange range1, HFRange range2) { + unsigned long long minend = HFRangeExtendsPastRange(range2, range1) ? range1.location + range1.length : range2.location + range2.length; + if (range2.location <= range1.location && range1.location - range2.location < range2.length) { + return HFRangeMake(range1.location, minend - range1.location); + } + else if (range1.location <= range2.location && range2.location - range1.location < range1.length) { + return HFRangeMake(range2.location, minend - range2.location); + } + return HFRangeMake(0, 0); +} + +/*! ceil() for a CGFloat, for compatibility with OSes that do not have the CG versions. */ +static inline CGFloat HFCeil(CGFloat a) { + if (sizeof(a) == sizeof(float)) return (CGFloat)ceilf((float)a); + else return (CGFloat)ceil((double)a); +} + +/*! floor() for a CGFloat, for compatibility with OSes that do not have the CG versions. */ +static inline CGFloat HFFloor(CGFloat a) { + if (sizeof(a) == sizeof(float)) return (CGFloat)floorf((float)a); + else return (CGFloat)floor((double)a); +} + +/*! round() for a CGFloat, for compatibility with OSes that do not have the CG versions. */ +static inline CGFloat HFRound(CGFloat a) { + if (sizeof(a) == sizeof(float)) return (CGFloat)roundf((float)a); + else return (CGFloat)round((double)a); +} + +/*! fmin() for a CGFloat, for compatibility with OSes that do not have the CG versions. */ +static inline CGFloat HFMin(CGFloat a, CGFloat b) { + if (sizeof(a) == sizeof(float)) return (CGFloat)fminf((float)a, (float)b); + else return (CGFloat)fmin((double)a, (double)b); +} + +/*! fmax() for a CGFloat, for compatibility with OSes that do not have the CG versions. */ +static inline CGFloat HFMax(CGFloat a, CGFloat b) { + if (sizeof(a) == sizeof(float)) return (CGFloat)fmaxf((float)a, (float)b); + else return (CGFloat)fmax((double)a, (double)b); +} + +/*! Returns true if the given HFFPRanges are equal. */ +static inline BOOL HFFPRangeEqualsRange(HFFPRange a, HFFPRange b) { + return a.location == b.location && a.length == b.length; +} + +/*! copysign() for a CGFloat */ +static inline CGFloat HFCopysign(CGFloat a, CGFloat b) { +#if CGFLOAT_IS_DOUBLE + return copysign(a, b); +#else + return copysignf(a, b); +#endif +} + +/*! Atomically increments an NSUInteger, returning the new value. Optionally invokes a memory barrier. */ +static inline NSUInteger HFAtomicIncrement(volatile NSUInteger *ptr, BOOL barrier) { + return _Generic(ptr, + volatile unsigned *: (barrier ? OSAtomicIncrement32Barrier : OSAtomicIncrement32)((volatile int32_t *)ptr), +#if ULONG_MAX == UINT32_MAX + volatile unsigned long *: (barrier ? OSAtomicIncrement32Barrier : OSAtomicIncrement32)((volatile int32_t *)ptr), +#else + volatile unsigned long *: (barrier ? OSAtomicIncrement64Barrier : OSAtomicIncrement64)((volatile int64_t *)ptr), +#endif + volatile unsigned long long *: (barrier ? OSAtomicIncrement64Barrier : OSAtomicIncrement64)((volatile int64_t *)ptr)); +} + +/*! Atomically decrements an NSUInteger, returning the new value. Optionally invokes a memory barrier. */ +static inline NSUInteger HFAtomicDecrement(volatile NSUInteger *ptr, BOOL barrier) { + return _Generic(ptr, + volatile unsigned *: (barrier ? OSAtomicDecrement32Barrier : OSAtomicDecrement32)((volatile int32_t *)ptr), +#if ULONG_MAX == UINT32_MAX + volatile unsigned long *: (barrier ? OSAtomicDecrement32Barrier : OSAtomicDecrement32)((volatile int32_t *)ptr), +#else + volatile unsigned long *: (barrier ? OSAtomicDecrement64Barrier : OSAtomicDecrement64)((volatile int64_t *)ptr), +#endif + volatile unsigned long long *: (barrier ? OSAtomicDecrement64Barrier : OSAtomicDecrement64)((volatile int64_t *)ptr)); +} + +/*! Converts a long double to unsigned long long. Assumes that val is already an integer - use floorl or ceill */ +static inline unsigned long long HFFPToUL(long double val) { + assert(val >= 0); + assert(val <= ULLONG_MAX); + unsigned long long result = (unsigned long long)val; + assert((long double)result == val); + return result; +} + +/*! Converts an unsigned long long to a long double. */ +static inline long double HFULToFP(unsigned long long val) { + long double result = (long double)val; + assert(HFFPToUL(result) == val); + return result; +} + +/*! Convenience to return information about a CGAffineTransform for logging. */ +static inline NSString *HFDescribeAffineTransform(CGAffineTransform t) { + return [NSString stringWithFormat:@"%f %f 0\n%f %f 0\n%f %f 1", t.a, t.b, t.c, t.d, t.tx, t.ty]; +} + +/*! Returns 1 + floor(log base 10 of val). If val is 0, returns 1. */ +static inline NSUInteger HFCountDigitsBase10(unsigned long long val) { + const unsigned long long kValues[] = {0ULL, 9ULL, 99ULL, 999ULL, 9999ULL, 99999ULL, 999999ULL, 9999999ULL, 99999999ULL, 999999999ULL, 9999999999ULL, 99999999999ULL, 999999999999ULL, 9999999999999ULL, 99999999999999ULL, 999999999999999ULL, 9999999999999999ULL, 99999999999999999ULL, 999999999999999999ULL, 9999999999999999999ULL}; + NSUInteger low = 0, high = sizeof kValues / sizeof *kValues; + while (high > low) { + NSUInteger mid = (low + high)/2; //low + high cannot overflow + if (val > kValues[mid]) { + low = mid + 1; + } + else { + high = mid; + } + } + return MAX(1u, low); +} + +/*! Returns 1 + floor(log base 16 of val). If val is 0, returns 1. This works by computing the log base 2 based on the number of leading zeros, and then dividing by 4. */ +static inline NSUInteger HFCountDigitsBase16(unsigned long long val) { + /* __builtin_clzll doesn't like being passed 0 */ + if (val == 0) return 1; + + /* Compute the log base 2 */ + NSUInteger leadingZeros = (NSUInteger)__builtin_clzll(val); + NSUInteger logBase2 = (CHAR_BIT * sizeof val) - leadingZeros - 1; + return 1 + logBase2/4; +} + +/*! Returns YES if the given string encoding is a superset of ASCII. */ +BOOL HFStringEncodingIsSupersetOfASCII(NSStringEncoding encoding); + +/*! Returns the "granularity" of an encoding, in bytes. ASCII is 1, UTF-16 is 2, etc. Variable width encodings return the smallest (e.g. Shift-JIS returns 1). */ +uint8_t HFStringEncodingCharacterLength(NSStringEncoding encoding); + +/*! Converts an unsigned long long to NSUInteger. The unsigned long long should be no more than ULONG_MAX. */ +static inline NSUInteger ll2l(unsigned long long val) { assert(val <= ULONG_MAX); return (unsigned long)val; } + +/*! Converts an unsigned long long to uintptr_t. The unsigned long long should be no more than UINTPTR_MAX. */ +static inline uintptr_t ll2p(unsigned long long val) { assert(val <= UINTPTR_MAX); return (uintptr_t)val; } + +/*! Returns an unsigned long long, which must be no more than ULLONG_MAX, as an unsigned long. */ +static inline CGFloat ld2f(long double val) { +#if ! NDEBUG + if (isfinite(val)) { + assert(val <= CGFLOAT_MAX); + assert(val >= -CGFLOAT_MAX); + if ((val > 0 && val < CGFLOAT_MIN) || (val < 0 && val > -CGFLOAT_MIN)) { + NSLog(@"Warning - conversion of long double %Lf to CGFloat will result in the non-normal CGFloat %f", val, (CGFloat)val); + } + } +#endif + return (CGFloat)val; +} + +/*! Returns the quotient of a divided by b, rounding up, for unsigned long longs. Will not overflow. */ +static inline unsigned long long HFDivideULLRoundingUp(unsigned long long a, unsigned long long b) { + if (a == 0) return 0; + else return ((a - 1) / b) + 1; +} + +/*! Returns the quotient of a divided by b, rounding up, for NSUIntegers. Will not overflow. */ +static inline NSUInteger HFDivideULRoundingUp(NSUInteger a, NSUInteger b) { + if (a == 0) return 0; + else return ((a - 1) / b) + 1; +} + +/*! Draws a shadow. */ +void HFDrawShadow(CGContextRef context, NSRect rect, CGFloat size, NSRectEdge rectEdge, BOOL active, NSRect clip); + +/*! Registers a view to have the given notificationSEL invoked (taking the NSNotification object) when the window becomes or loses key. If appToo is YES, this also registers with NSApplication for Activate and Deactivate methods. */ +void HFRegisterViewForWindowAppearanceChanges(NSView *view, SEL notificationSEL, BOOL appToo); + +/*! Unregisters a view to have the given notificationSEL invoked when the window becomes or loses key. If appToo is YES, this also unregisters with NSApplication. */ +void HFUnregisterViewForWindowAppearanceChanges(NSView *view, BOOL appToo); + +/*! Returns a description of the given byte count (e.g. "24 kilobytes") */ +NSString *HFDescribeByteCount(unsigned long long count); + +/*! @brief An object wrapper for the HFRange type. + + A simple class responsible for holding an immutable HFRange as an object. Methods that logically work on multiple HFRanges usually take or return arrays of HFRangeWrappers. */ +@interface HFRangeWrapper : NSObject { + @public + HFRange range; +} + +/*! Returns the HFRange for this HFRangeWrapper. */ +- (HFRange)HFRange; + +/*! Creates an autoreleased HFRangeWrapper for this HFRange. */ ++ (HFRangeWrapper *)withRange:(HFRange)range; + +/*! Creates an NSArray of HFRangeWrappers for this HFRange. */ ++ (NSArray *)withRanges:(const HFRange *)ranges count:(NSUInteger)count; + +/*! Given an NSArray of HFRangeWrappers, get all of the HFRanges into a C array. */ ++ (void)getRanges:(HFRange *)ranges fromArray:(NSArray *)array; + +/*! Given an array of HFRangeWrappers, returns a "cleaned up" array of equivalent ranges. This new array represents the same indexes, but overlapping ranges will have been merged, and the ranges will be sorted in ascending order. */ ++ (NSArray *)organizeAndMergeRanges:(NSArray *)inputRanges; + +@end + +/*! @brief A set of HFRanges. HFRangeSet takes the interpetation that all zero-length ranges are identical. + + Essentially, a mutable array of ranges that is maintained to be sorted and minimized (i.e. merged with overlapping neighbors). + + TODO: The HexFiend codebase currently uses arrays of HFRangeWrappers that have been run through organizeAndMergeRanges:, and not HFRangeSet. The advantage of HFRangeSet is that the sorting & merging is implied by the type, instead of just tacitly assumed. This should lead to less confusion and fewer extra applications of organizeAndMergeRanges. + + TODO: HFRangeSet needs to be tested! I guarantee it has bugs! (Which doesn't matter right now because it's all dead code...) + */ +@interface HFRangeSet : NSObject { + @private + CFMutableArrayRef array; +} + +/*! Create a range set with just one range. */ ++ (HFRangeSet *)withRange:(HFRange)range; + +/*! Create a range set with a C array of ranges. No prior sorting is necessary. */ ++ (HFRangeSet *)withRanges:(const HFRange *)ranges count:(NSUInteger)count; + +/*! Create a range set with an array of HFRangeWrappers. No prior sorting is necessary. */ ++ (HFRangeSet *)withRangeWrappers:(NSArray *)ranges; + +/*! Create a range set as a copy of another. */ ++ (HFRangeSet *)withRangeSet:(HFRangeSet *)rangeSet; + +/*! Equivalent to HFRangeSet *x = [HFRangeSet withRange:range]; [x removeRange:rangeSet]; */ ++ (HFRangeSet *)complementOfRangeSet:(HFRangeSet *)rangeSet inRange:(HFRange)range; + +- (void)addRange:(HFRange)range; /*!< Union with range */ +- (void)removeRange:(HFRange)range; /*!< Subtract range */ +- (void)clipToRange:(HFRange)range; /*!< Intersect with range */ +- (void)toggleRange:(HFRange)range; /*!< Symmetric difference with range */ + +- (void)addRangeSet:(HFRangeSet *)rangeSet; /*!< Union with range set */ +- (void)removeRangeSet:(HFRangeSet *)rangeSet; /*!< Subtract range set */ +- (void)clipToRangeSet:(HFRangeSet *)rangeSet; /*!< Intersect with range set */ +- (void)toggleRangeSet:(HFRangeSet *)rangeSet; /*!< Symmetric difference with range set */ + + +- (BOOL)isEqualToRangeSet:(HFRangeSet *)rangeSet; /*!< Test if two range sets are equivalent. */ +- (BOOL)isEmpty; /*!< Test if range set is empty. */ + +- (BOOL)containsAllRange:(HFRange)range; /*!< Check if the range set covers all of a range. Always true if 'range' is zero length. */ +- (BOOL)overlapsAnyRange:(HFRange)range; /*!< Check if the range set covers any of a range. Never true if 'range' is zero length. */ +- (BOOL)containsAllRangeSet:(HFRangeSet *)rangeSet; /*!< Check if this range is a superset of another. */ +- (BOOL)overlapsAnyRangeSet:(HFRangeSet *)rangeSet; /*!< Check if this range has a nonempty intersection with another. */ + +- (HFRange)spanningRange; /*!< Return a single range that covers the entire range set */ + +- (void)assertIntegrity; + +@end + +#ifndef NDEBUG +void HFStartTiming(const char *name); +void HFStopTiming(void); +#endif diff --git a/thirdparty/SameBoy-old/HexFiend/HFFunctions.m b/thirdparty/SameBoy-old/HexFiend/HFFunctions.m new file mode 100644 index 000000000..b41a12ff9 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFFunctions.m @@ -0,0 +1,1172 @@ +#import +#import + +#import "HFFunctions_Private.h" + +#ifndef NDEBUG +//#define USE_CHUD 1 +#endif + +#ifndef USE_CHUD +#define USE_CHUD 0 +#endif + +#if USE_CHUD +#import +#endif + +NSImage *HFImageNamed(NSString *name) { + HFASSERT(name != NULL); + NSImage *image = [NSImage imageNamed:name]; + if (image == NULL) { + NSString *imagePath = [[NSBundle bundleForClass:[HFController class]] pathForResource:name ofType:@"tiff"]; + if (! imagePath) { + NSLog(@"Unable to find image named %@.tiff", name); + } + else { + image = [[NSImage alloc] initByReferencingFile:imagePath]; + if (image == nil || ! [image isValid]) { + NSLog(@"Couldn't load image at path %@", imagePath); + [image release]; + image = nil; + } + else { + [image setName:name]; + } + } + } + return image; +} + +@implementation HFRangeWrapper + +- (HFRange)HFRange { return range; } + ++ (HFRangeWrapper *)withRange:(HFRange)range { + HFRangeWrapper *result = [[self alloc] init]; + result->range = range; + return [result autorelease]; +} + ++ (NSArray *)withRanges:(const HFRange *)ranges count:(NSUInteger)count { + HFASSERT(count == 0 || ranges != NULL); + NSUInteger i; + NSArray *result; + NEW_ARRAY(HFRangeWrapper *, wrappers, count); + for (i=0; i < count; i++) wrappers[i] = [self withRange:ranges[i]]; + result = [NSArray arrayWithObjects:wrappers count:count]; + FREE_ARRAY(wrappers); + return result; +} + +- (BOOL)isEqual:(id)obj { + if (! [obj isKindOfClass:[HFRangeWrapper class]]) return NO; + else return HFRangeEqualsRange(range, [obj HFRange]); +} + +- (NSUInteger)hash { + return (NSUInteger)(range.location + (range.length << 16)); +} + +- (id)copyWithZone:(NSZone *)zone { + USE(zone); + return [self retain]; +} + +- (NSString *)description { + return HFRangeToString(range); +} + +static int hfrange_compare(const void *ap, const void *bp) { + const HFRange *a = ap; + const HFRange *b = bp; + if (a->location < b->location) return -1; + else if (a->location > b->location) return 1; + else if (a->length < b->length) return -1; + else if (a->length > b->length) return 1; + else return 0; +} + ++ (NSArray *)organizeAndMergeRanges:(NSArray *)inputRanges { + HFASSERT(inputRanges != NULL); + NSUInteger leading = 0, trailing = 0, length = [inputRanges count]; + if (length == 0) return @[]; + else if (length == 1) return [NSArray arrayWithArray:inputRanges]; + + NEW_ARRAY(HFRange, ranges, length); + [self getRanges:ranges fromArray:inputRanges]; + qsort(ranges, length, sizeof ranges[0], hfrange_compare); + leading = 0; + while (leading < length) { + leading++; + if (leading < length) { + HFRange leadRange = ranges[leading], trailRange = ranges[trailing]; + if (HFIntersectsRange(leadRange, trailRange) || HFMaxRange(leadRange) == trailRange.location || HFMaxRange(trailRange) == leadRange.location) { + ranges[trailing] = HFUnionRange(leadRange, trailRange); + } + else { + trailing++; + ranges[trailing] = ranges[leading]; + } + } + } + NSArray *result = [HFRangeWrapper withRanges:ranges count:trailing + 1]; + FREE_ARRAY(ranges); + return result; +} + ++ (void)getRanges:(HFRange *)ranges fromArray:(NSArray *)array { + HFASSERT(ranges != NULL || [array count] == 0); + if (ranges) { + FOREACH(HFRangeWrapper*, wrapper, array) *ranges++ = [wrapper HFRange]; + } +} + +@end + +@implementation HFRangeSet +// HFRangeSet is implemented as a CFMutableArray of uintptr_t "fenceposts". The array +// is even in length, sorted, duplicate free, and considered to include the ranges +// [array[0], array[1]), [array[2], array[3]), ..., [array[2n], array[2n+1]) + +CFComparisonResult uintptrComparator(const void *val1, const void *val2, void *context) { + (void)context; + uintptr_t a = (uintptr_t)val1; + uintptr_t b = (uintptr_t)val2; + if(a < b) return kCFCompareLessThan; + if(a > b) return kCFCompareGreaterThan; + return kCFCompareEqualTo; +} + +static void HFRangeSetAddRange(CFMutableArrayRef array, uintptr_t a, uintptr_t b) { + CFIndex count = CFArrayGetCount(array); + assert(a < b); assert(count % 2 == 0); + CFIndex idxa = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)a, uintptrComparator, NULL); + CFIndex idxb = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)b, uintptrComparator, NULL); + + const void *x[2] = { (void*)a, (void*)b }; + if(idxa >= count) { + CFArrayReplaceValues(array, CFRangeMake(count, 0), x, 2); + return; + } + if(idxb == 0) { + CFArrayReplaceValues(array, CFRangeMake(0, 0), x, 2); + return; + } + + // Clear fenceposts strictly between 'a' and 'b', and then possibly + // add 'a' or 'b' as fenceposts. + CFIndex cutloc = (uintptr_t)CFArrayGetValueAtIndex(array, idxa) == a ? idxa+1 : idxa; + CFIndex cutlen = idxb - cutloc; + + bool inca = cutloc % 2 == 0; // Include 'a' if it would begin an included range + bool incb = (count - cutlen + inca) % 2 == 1; // The set must be even, which tells us about 'b'. + + CFArrayReplaceValues(array, CFRangeMake(cutloc, cutlen), x+inca, inca+incb); + assert(CFArrayGetCount(array) % 2 == 0); +} + +static void HFRangeSetRemoveRange(CFMutableArrayRef array, uintptr_t a, uintptr_t b) { + CFIndex count = CFArrayGetCount(array); + assert(a < b); assert(count % 2 == 0); + CFIndex idxa = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)a, uintptrComparator, NULL); + CFIndex idxb = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)b, uintptrComparator, NULL); + if(idxa >= count || idxb == 0) return; + + // Remove fenceposts strictly between 'a' and 'b', and then possibly + // add 'a' or 'b' as fenceposts. + CFIndex cutloc = (uintptr_t)CFArrayGetValueAtIndex(array, idxa) == a ? idxa+1 : idxa; + CFIndex cutlen = idxb - cutloc; + + bool inca = cutloc % 2 == 1; // Include 'a' if it would end an included range + bool incb = (count - cutlen + inca) % 2 == 1; // The set must be even, which tells us about 'b'. + + const void *x[2] = { (void*)a, (void*)b }; + CFArrayReplaceValues(array, CFRangeMake(cutloc, cutlen), x+inca, inca+incb); + assert(CFArrayGetCount(array) % 2 == 0); +} + +static void HFRangeSetToggleRange(CFMutableArrayRef array, uintptr_t a, uintptr_t b) { + CFIndex count = CFArrayGetCount(array); + assert(a < b); assert(count % 2 == 0); + + // In the fencepost representation, simply toggling the existence of + // fenceposts 'a' and 'b' achieves symmetric difference. + + CFIndex idxa = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)a, uintptrComparator, NULL); + if((uintptr_t)CFArrayGetValueAtIndex(array, idxa) == a) { + CFArrayRemoveValueAtIndex(array, idxa); + } else { + CFArrayInsertValueAtIndex(array, idxa, (void*)a); + } + + CFIndex idxb = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)b, uintptrComparator, NULL); + if((uintptr_t)CFArrayGetValueAtIndex(array, idxb) == b) { + CFArrayRemoveValueAtIndex(array, idxb); + } else { + CFArrayInsertValueAtIndex(array, idxb, (void*)b); + } + + assert(CFArrayGetCount(array) % 2 == 0); +} + +static BOOL HFRangeSetContainsAllRange(CFMutableArrayRef array, uintptr_t a, uintptr_t b) { + CFIndex count = CFArrayGetCount(array); + assert(a < b); assert(count % 2 == 0); + CFIndex idxa = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)a, uintptrComparator, NULL); + CFIndex idxb = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)b, uintptrComparator, NULL); + if(idxa >= count || idxb == 0) return NO; + + // Optimization: if the indexes are far enough apart, then obviouly there's a gap. + if(idxb - idxa >= 2) return NO; + + // The first fencepost >= 'b' must end an include range, a must be in the same range. + return idxb%2 == 1 && idxa == ((uintptr_t)CFArrayGetValueAtIndex(array, idxa) == a ? idxb-1 : idxb); +} + +static BOOL HFRangeSetOverlapsAnyRange(CFMutableArrayRef array, uintptr_t a, uintptr_t b) { + CFIndex count = CFArrayGetCount(array); + assert(a < b); assert(count % 2 == 0); + CFIndex idxa = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)a, uintptrComparator, NULL); + CFIndex idxb = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)b, uintptrComparator, NULL); + if(idxa >= count || idxb == 0) return NO; + + // Optimization: if the indexes are far enough apart, then obviouly there's overlap. + if(idxb - idxa >= 2) return YES; + + if((uintptr_t)CFArrayGetValueAtIndex(array, idxa) == a) { + // 'a' is an included fencepost, or instead 'b' makes it past an included fencepost. + return idxa % 2 == 0 || b > (uintptr_t)CFArrayGetValueAtIndex(array, idxa+1); + } else { + // 'a' lies in an included range, or instead 'b' makes it past an included fencepost. + return idxa % 2 == 1 || b > (uintptr_t)CFArrayGetValueAtIndex(array, idxa); + } +} + +- (instancetype)init { + if(!(self = [super init])) return nil; + array = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL); + return self; +} + +- (void)dealloc { + CFRelease(array); + [super dealloc]; +} + ++ (HFRangeSet *)withRange:(HFRange)range { + HFRangeSet *newSet = [[[HFRangeSet alloc] init] autorelease]; + if(range.length > 0) { + CFArrayAppendValue(newSet->array, (void*)ll2p(range.location)); + CFArrayAppendValue(newSet->array, (void*)ll2p(HFMaxRange(range))); + } + return newSet; +} + ++ (HFRangeSet *)withRanges:(const HFRange *)ranges count:(NSUInteger)count { + // FIXME: Stub. Don't rely on the thing we're replacing! + return [HFRangeSet withRangeWrappers:[HFRangeWrapper withRanges:ranges count:count]]; +} + ++ (HFRangeSet *)withRangeWrappers:(NSArray *)ranges { + HFRangeSet *newSet = [[[HFRangeSet alloc] init] autorelease]; + FOREACH(HFRangeWrapper *, wrapper, [HFRangeWrapper organizeAndMergeRanges:ranges]) { + if(wrapper->range.length > 0) { + CFArrayAppendValue(newSet->array, (void*)ll2p(wrapper->range.location)); + CFArrayAppendValue(newSet->array, (void*)ll2p(HFMaxRange(wrapper->range))); + } + } + return newSet; +} + ++ (HFRangeSet *)withRangeSet:(HFRangeSet *)rangeSet { + return [[rangeSet copy] autorelease]; +} + ++ (HFRangeSet *)complementOfRangeSet:(HFRangeSet *)rangeSet inRange:(HFRange)range { + if(range.length <= 0) { + // Complement in empty is... empty! + return [HFRangeSet withRange:HFZeroRange]; + } + uintptr_t a = ll2p(range.location); + uintptr_t b = ll2p(HFMaxRange(range)); + CFIndex count = CFArrayGetCount(rangeSet->array); + CFIndex idxa = CFArrayBSearchValues(rangeSet->array, CFRangeMake(0, count), (void*)a, uintptrComparator, NULL); + CFIndex idxb = CFArrayBSearchValues(rangeSet->array, CFRangeMake(0, count), (void*)b, uintptrComparator, NULL); + if(idxa >= count || idxb == 0) + return [HFRangeSet withRange:range]; + + // Alright, the trivial responses are past. We'll need to build a new set. + // Given the fencepost representation of sets, we can efficiently produce an + // inverted set by just copying the fenceposts between 'a' and 'b', and then + // maybe including 'a' and 'b'. + + HFRangeSet *newSet = [[[HFRangeSet alloc] init] autorelease]; + + // newSet must contain all the fenceposts strictly between 'a' and 'b' + CFIndex copyloc = (uintptr_t)CFArrayGetValueAtIndex(rangeSet->array, idxa) == a ? idxa+1 : idxa; + CFIndex copylen = idxb - copyloc; + + // Include 'a' if it's needed to invert the parity of the copy. + if(copyloc % 2 == 0) CFArrayAppendValue(newSet->array, &a); + + CFArrayAppendArray(newSet->array, rangeSet->array, CFRangeMake(copyloc, copylen)); + + // Include 'b' if it's needed to close off the set. + if(CFArrayGetCount(newSet->array) % 2 == 1) + CFArrayAppendValue(newSet->array, &b); + + assert(CFArrayGetCount(newSet->array) % 2 == 0); + return newSet; +} + + +- (void)addRange:(HFRange)range { + if(range.length == 0) return; + HFRangeSetAddRange(array, ll2p(range.location), ll2p(HFMaxRange(range))); +} +- (void)removeRange:(HFRange)range { + if(range.length == 0) return; + HFRangeSetRemoveRange(array, ll2p(range.location), ll2p(HFMaxRange(range))); +} +- (void)toggleRange:(HFRange)range { + if(range.length == 0) return; + HFRangeSetToggleRange(array, ll2p(range.location), ll2p(HFMaxRange(range))); +} + +- (void)clipToRange:(HFRange)range { + if(range.length <= 0) { + CFArrayRemoveAllValues(array); + return; + } + uintptr_t a = ll2p(range.location); + uintptr_t b = ll2p(HFMaxRange(range)); + CFIndex count = CFArrayGetCount(array); + CFIndex idxa = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)a, uintptrComparator, NULL); + CFIndex idxb = CFArrayBSearchValues(array, CFRangeMake(0, count), (void*)b, uintptrComparator, NULL); + if(idxa >= count || idxb == 0) { + CFArrayRemoveAllValues(array); + return; + } + + // Keep only fenceposts strictly between 'a' and 'b', and then possibly + // add 'a' or 'b' as fenceposts. + CFIndex keeploc = (uintptr_t)CFArrayGetValueAtIndex(array, idxa) == a ? idxa+1 : idxa; + CFIndex keeplen = idxb - keeploc; + + // Include 'a' if it's needed to keep the parity straight. + if(keeploc % 2 == 1) { + keeploc--; keeplen++; + CFArraySetValueAtIndex(array, keeploc, (void*)a); + } + + if(keeploc > 0) + CFArrayReplaceValues(array, CFRangeMake(0, keeploc), NULL, 0); + if(keeploc+keeplen < count) + CFArrayReplaceValues(array, CFRangeMake(0, keeplen), NULL, 0); + + // Include 'b' if it's needed to keep the length even. + if(keeplen % 2 == 1) { + CFArrayAppendValue(array, (void*)b); + } + + assert(CFArrayGetCount(array) % 2 == 0); +} + + +- (void)addRangeSet:(HFRangeSet *)rangeSet { + CFArrayRef a = rangeSet->array; + CFIndex c = CFArrayGetCount(a); + for(CFIndex i2 = 0; i2 < c; i2 += 2) { + HFRangeSetAddRange(array, (uintptr_t)CFArrayGetValueAtIndex(a, i2), (uintptr_t)CFArrayGetValueAtIndex(a, i2+1)); + } +} +- (void)removeRangeSet:(HFRangeSet *)rangeSet { + CFArrayRef a = rangeSet->array; + CFIndex c = CFArrayGetCount(a); + for(CFIndex i2 = 0; i2 < c; i2 += 2) { + HFRangeSetRemoveRange(array, (uintptr_t)CFArrayGetValueAtIndex(a, i2), (uintptr_t)CFArrayGetValueAtIndex(a, i2+1)); + } +} +- (void)toggleRangeSet:(HFRangeSet *)rangeSet { + CFArrayRef a = rangeSet->array; + CFIndex c = CFArrayGetCount(a); + for(CFIndex i2 = 0; i2 < c; i2 += 2) { + HFRangeSetToggleRange(array, (uintptr_t)CFArrayGetValueAtIndex(a, i2), (uintptr_t)CFArrayGetValueAtIndex(a, i2+1)); + } +} + +- (void)clipToRangeSet:(HFRangeSet *)rangeSet { + HFRange span = [rangeSet spanningRange]; + [self clipToRange:span]; + [self removeRangeSet:[HFRangeSet complementOfRangeSet:rangeSet inRange:span]]; +} + +- (BOOL)isEqualToRangeSet:(HFRangeSet *)rangeSet { + // Because our arrays are fully normalized, this just checks for array equality. + CFArrayRef a = rangeSet->array; + CFIndex c = CFArrayGetCount(a); + if(c != CFArrayGetCount(array)) + return NO; + + // Optimization: For long arrays, check the last few first, + // since appending to ranges is probably a common usage pattern. + const CFIndex opt_end = 10; + if(c > 2*opt_end) { + for(CFIndex i = c - 2*opt_end; i < c; i++) { + if(CFArrayGetValueAtIndex(a, i) != CFArrayGetValueAtIndex(array, i)) + return NO; + } + c -= 2*opt_end; + } + + for(CFIndex i = 0; i < c; i++) { + if(CFArrayGetValueAtIndex(a, i) != CFArrayGetValueAtIndex(array, i)) + return NO; + } + + return YES; +} + +- (BOOL)isEmpty { + return CFArrayGetCount(array) == 0; +} + +- (BOOL)containsAllRange:(HFRange)range { + if(range.length == 0) return YES; + return HFRangeSetContainsAllRange(array, ll2p(range.location), ll2p(HFMaxRange(range))); +} + +- (BOOL)overlapsAnyRange:(HFRange)range { + if(range.length == 0) return NO; + return HFRangeSetOverlapsAnyRange(array, ll2p(range.location), ll2p(HFMaxRange(range))); +} + +- (BOOL)containsAllRangeSet:(HFRangeSet *)rangeSet { + CFArrayRef a = rangeSet->array; + CFIndex c = CFArrayGetCount(a); + + // Optimization: check if containment is possible. + if(!HFRangeIsSubrangeOfRange([rangeSet spanningRange], [self spanningRange])) { + return NO; + } + + for(CFIndex i2 = 0; i2 < c; i2 += 2) { + uintptr_t x = (uintptr_t)CFArrayGetValueAtIndex(a, i2); + uintptr_t y = (uintptr_t)CFArrayGetValueAtIndex(a, i2+1); + if(!HFRangeSetContainsAllRange(array, x, y)) return NO; + } + return YES; +} + +- (BOOL)overlapsAnyRangeSet:(HFRangeSet *)rangeSet { + CFArrayRef a = rangeSet->array; + CFIndex c = CFArrayGetCount(a); + + // Optimization: check if overlap is possible. + if(!HFIntersectsRange([rangeSet spanningRange], [self spanningRange])) { + return NO; + } + + for(CFIndex i2 = 0; i2 < c; i2 += 2) { + uintptr_t x = (uintptr_t)CFArrayGetValueAtIndex(a, i2); + uintptr_t y = (uintptr_t)CFArrayGetValueAtIndex(a, i2+1); + if(!HFRangeSetOverlapsAnyRange(array, x, y)) return YES; + } + return NO; +} + + +- (HFRange)spanningRange { + CFIndex count = CFArrayGetCount(array); + if(count == 0) return HFZeroRange; + + uintptr_t a = (uintptr_t)CFArrayGetValueAtIndex(array, 0); + uintptr_t b = (uintptr_t)CFArrayGetValueAtIndex(array, count-2) + (uintptr_t)CFArrayGetValueAtIndex(array, count-1); + + return HFRangeMake(a, b-a); +} + +- (void)assertIntegrity { + CFIndex count = CFArrayGetCount(array); + HFASSERT(count % 2 == 0); + if(count == 0) return; + + uintptr_t prev = (uintptr_t)CFArrayGetValueAtIndex(array, 0); + for(CFIndex i = 1; i < count; i++) { + uintptr_t val = (uintptr_t)CFArrayGetValueAtIndex(array, i); + HFASSERT(val > prev); + prev = val; + } +} + +- (BOOL)isEqual:(id)object { + if(![object isKindOfClass:[HFRangeSet class]]) + return false; + return [self isEqualToRangeSet:object]; +} + +- (NSUInteger)hash { + CFIndex count = CFArrayGetCount(array); + NSUInteger x = 0; + for(CFIndex i2 = 0; i2 < count; i2 += 2) { + uintptr_t a = (uintptr_t)CFArrayGetValueAtIndex(array, i2); + uintptr_t b = (uintptr_t)CFArrayGetValueAtIndex(array, i2+1); +#if 6364136223846793005 < NSUIntegerMax + x = (6364136223846793005 * (uint64_t)x + a); +#else + x = (NSUInteger)(1103515245 * (uint64_t)x + a); +#endif + x ^= (NSUInteger)b; + } + return x; +} + +- (id)copyWithZone:(NSZone *)zone { + HFRangeSet *newSet = [[HFRangeSet allocWithZone:zone] init]; + CFRelease(newSet->array); + newSet->array = (CFMutableArrayRef)[[NSMutableArray allocWithZone:zone] initWithArray:(NSArray*)array copyItems:NO]; + return newSet; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder { + NSUInteger count = CFArrayGetCount(array); + NEW_ARRAY(uint64_t, values, count); + + // Fill array with 64-bit, little endian bytes. + if(sizeof(const void *) == sizeof(uint64_t)) { + // Hooray, we can just use CFArrayGetValues + CFArrayGetValues(array, CFRangeMake(0, count), (const void **)&values); +#if __LITTLE_ENDIAN__ +#else + // Boo, we have to swap everything. + for(NSUInteger i = 0; i < count; i++) { + values[i] = CFSwapInt64HostToLittle(values[i]); + } +#endif + } else { + // Boo, we have to iterate through the array. + NSUInteger i = 0; + FOREACH(id, val, (NSArray*)array) { + values[i++] = CFSwapInt64HostToLittle((uint64_t)(const void *)val); + } + } + [aCoder encodeBytes:values length:count * sizeof(*values)]; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + if(!(self = [super init])) return nil; + + NSUInteger count; + uint64_t *values = [aDecoder decodeBytesWithReturnedLength:&count]; + array = CFArrayCreateMutable(kCFAllocatorDefault, count+1, NULL); + + for(NSUInteger i = 0; i < count; i++) { + uint64_t x = CFSwapInt64LittleToHost(values[i]); + if(x > UINTPTR_MAX) + goto fail; + CFArrayAppendValue(array, (const void *)(uintptr_t)x); + } + if(CFArrayGetCount(array)%2 != 0) + goto fail; + return self; + +fail: + CFRelease(array); + [super release]; + return nil; +} + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len { + NSUInteger base = state->state; + NSUInteger length = CFArrayGetCount(array)/2; + NSUInteger i = 0; + + while(i < len && base + i < length) { + uintptr_t a = (uintptr_t)CFArrayGetValueAtIndex(array, 2*i); + uintptr_t b = (uintptr_t)CFArrayGetValueAtIndex(array, 2*i+1); + stackbuf[i] = [HFRangeWrapper withRange:HFRangeMake(a, b-a)]; + } + + state->state = base + i; + state->itemsPtr = stackbuf; + state->mutationsPtr = &state->extra[0]; // Use simple mutation checking. + state->extra[0] = length; + + return i; +} + +@end + + +BOOL HFStringEncodingIsSupersetOfASCII(NSStringEncoding encoding) { + switch (CFStringConvertNSStringEncodingToEncoding(encoding)) { + case kCFStringEncodingMacRoman: return YES; + case kCFStringEncodingWindowsLatin1: return YES; + case kCFStringEncodingISOLatin1: return YES; + case kCFStringEncodingNextStepLatin: return YES; + case kCFStringEncodingASCII: return YES; + case kCFStringEncodingUnicode: return NO; + case kCFStringEncodingUTF8: return YES; + case kCFStringEncodingNonLossyASCII: return NO; +// case kCFStringEncodingUTF16: return NO; + case kCFStringEncodingUTF16BE: return NO; + case kCFStringEncodingUTF16LE: return NO; + case kCFStringEncodingUTF32: return NO; + case kCFStringEncodingUTF32BE: return NO; + case kCFStringEncodingUTF32LE: return NO; + case kCFStringEncodingMacJapanese: return NO; + case kCFStringEncodingMacChineseTrad: return YES; + case kCFStringEncodingMacKorean: return YES; + case kCFStringEncodingMacArabic: return NO; + case kCFStringEncodingMacHebrew: return NO; + case kCFStringEncodingMacGreek: return YES; + case kCFStringEncodingMacCyrillic: return YES; + case kCFStringEncodingMacDevanagari: return YES; + case kCFStringEncodingMacGurmukhi: return YES; + case kCFStringEncodingMacGujarati: return YES; + case kCFStringEncodingMacOriya: return YES; + case kCFStringEncodingMacBengali: return YES; + case kCFStringEncodingMacTamil: return YES; + case kCFStringEncodingMacTelugu: return YES; + case kCFStringEncodingMacKannada: return YES; + case kCFStringEncodingMacMalayalam: return YES; + case kCFStringEncodingMacSinhalese: return YES; + case kCFStringEncodingMacBurmese: return YES; + case kCFStringEncodingMacKhmer: return YES; + case kCFStringEncodingMacThai: return YES; + case kCFStringEncodingMacLaotian: return YES; + case kCFStringEncodingMacGeorgian: return YES; + case kCFStringEncodingMacArmenian: return YES; + case kCFStringEncodingMacChineseSimp: return YES; + case kCFStringEncodingMacTibetan: return YES; + case kCFStringEncodingMacMongolian: return YES; + case kCFStringEncodingMacEthiopic: return YES; + case kCFStringEncodingMacCentralEurRoman: return YES; + case kCFStringEncodingMacVietnamese: return YES; + case kCFStringEncodingMacExtArabic: return YES; + case kCFStringEncodingMacSymbol: return NO; + case kCFStringEncodingMacDingbats: return NO; + case kCFStringEncodingMacTurkish: return YES; + case kCFStringEncodingMacCroatian: return YES; + case kCFStringEncodingMacIcelandic: return YES; + case kCFStringEncodingMacRomanian: return YES; + case kCFStringEncodingMacCeltic: return YES; + case kCFStringEncodingMacGaelic: return YES; + case kCFStringEncodingMacFarsi: return YES; + case kCFStringEncodingMacUkrainian: return NO; + case kCFStringEncodingMacInuit: return YES; + case kCFStringEncodingMacVT100: return YES; + case kCFStringEncodingMacHFS: return YES; + case kCFStringEncodingISOLatin2: return YES; + case kCFStringEncodingISOLatin3: return YES; + case kCFStringEncodingISOLatin4: return YES; + case kCFStringEncodingISOLatinCyrillic: return YES; + case kCFStringEncodingISOLatinArabic: return NO; + case kCFStringEncodingISOLatinGreek: return YES; + case kCFStringEncodingISOLatinHebrew: return YES; + case kCFStringEncodingISOLatin5: return YES; + case kCFStringEncodingISOLatin6: return YES; + case kCFStringEncodingISOLatinThai: return YES; + case kCFStringEncodingISOLatin7: return YES; + case kCFStringEncodingISOLatin8: return YES; + case kCFStringEncodingISOLatin9: return YES; + case kCFStringEncodingISOLatin10: return YES; + case kCFStringEncodingDOSLatinUS: return YES; + case kCFStringEncodingDOSGreek: return YES; + case kCFStringEncodingDOSBalticRim: return YES; + case kCFStringEncodingDOSLatin1: return YES; + case kCFStringEncodingDOSGreek1: return YES; + case kCFStringEncodingDOSLatin2: return YES; + case kCFStringEncodingDOSCyrillic: return YES; + case kCFStringEncodingDOSTurkish: return YES; + case kCFStringEncodingDOSPortuguese: return YES; + case kCFStringEncodingDOSIcelandic: return YES; + case kCFStringEncodingDOSHebrew: return YES; + case kCFStringEncodingDOSCanadianFrench: return YES; + case kCFStringEncodingDOSArabic: return YES; + case kCFStringEncodingDOSNordic: return YES; + case kCFStringEncodingDOSRussian: return YES; + case kCFStringEncodingDOSGreek2: return YES; + case kCFStringEncodingDOSThai: return YES; + case kCFStringEncodingDOSJapanese: return YES; + case kCFStringEncodingDOSChineseSimplif: return YES; + case kCFStringEncodingDOSKorean: return YES; + case kCFStringEncodingDOSChineseTrad: return YES; + case kCFStringEncodingWindowsLatin2: return YES; + case kCFStringEncodingWindowsCyrillic: return YES; + case kCFStringEncodingWindowsGreek: return YES; + case kCFStringEncodingWindowsLatin5: return YES; + case kCFStringEncodingWindowsHebrew: return YES; + case kCFStringEncodingWindowsArabic: return YES; + case kCFStringEncodingWindowsBalticRim: return YES; + case kCFStringEncodingWindowsVietnamese: return YES; + case kCFStringEncodingWindowsKoreanJohab: return YES; + case kCFStringEncodingANSEL: return NO; + case kCFStringEncodingJIS_X0201_76: return NO; + case kCFStringEncodingJIS_X0208_83: return NO; + case kCFStringEncodingJIS_X0208_90: return NO; + case kCFStringEncodingJIS_X0212_90: return NO; + case kCFStringEncodingJIS_C6226_78: return NO; + case 0x0628/*kCFStringEncodingShiftJIS_X0213*/: return NO; + case kCFStringEncodingShiftJIS_X0213_MenKuTen: return NO; + case kCFStringEncodingGB_2312_80: return NO; + case kCFStringEncodingGBK_95: return NO; + case kCFStringEncodingGB_18030_2000: return NO; + case kCFStringEncodingKSC_5601_87: return NO; + case kCFStringEncodingKSC_5601_92_Johab: return NO; + case kCFStringEncodingCNS_11643_92_P1: return NO; + case kCFStringEncodingCNS_11643_92_P2: return NO; + case kCFStringEncodingCNS_11643_92_P3: return NO; + case kCFStringEncodingISO_2022_JP: return NO; + case kCFStringEncodingISO_2022_JP_2: return NO; + case kCFStringEncodingISO_2022_JP_1: return NO; + case kCFStringEncodingISO_2022_JP_3: return NO; + case kCFStringEncodingISO_2022_CN: return NO; + case kCFStringEncodingISO_2022_CN_EXT: return NO; + case kCFStringEncodingISO_2022_KR: return NO; + case kCFStringEncodingEUC_JP: return YES; + case kCFStringEncodingEUC_CN: return YES; + case kCFStringEncodingEUC_TW: return YES; + case kCFStringEncodingEUC_KR: return YES; + case kCFStringEncodingShiftJIS: return NO; + case kCFStringEncodingKOI8_R: return YES; + case kCFStringEncodingBig5: return YES; + case kCFStringEncodingMacRomanLatin1: return YES; + case kCFStringEncodingHZ_GB_2312: return NO; + case kCFStringEncodingBig5_HKSCS_1999: return YES; + case kCFStringEncodingVISCII: return YES; // though not quite + case kCFStringEncodingKOI8_U: return YES; + case kCFStringEncodingBig5_E: return YES; + case kCFStringEncodingNextStepJapanese: return YES; + case kCFStringEncodingEBCDIC_US: return NO; + case kCFStringEncodingEBCDIC_CP037: return NO; + default: + NSLog(@"Unknown string encoding %lu in %s", (unsigned long)encoding, __FUNCTION__); + return NO; + } +} + +uint8_t HFStringEncodingCharacterLength(NSStringEncoding encoding) { + switch (CFStringConvertNSStringEncodingToEncoding(encoding)) { + case kCFStringEncodingMacRoman: return 1; + case kCFStringEncodingWindowsLatin1: return 1; + case kCFStringEncodingISOLatin1: return 1; + case kCFStringEncodingNextStepLatin: return 1; + case kCFStringEncodingASCII: return 1; + case kCFStringEncodingUnicode: return 2; + case kCFStringEncodingUTF8: return 1; + case kCFStringEncodingNonLossyASCII: return 1; + // case kCFStringEncodingUTF16: return 2; + case kCFStringEncodingUTF16BE: return 2; + case kCFStringEncodingUTF16LE: return 2; + case kCFStringEncodingUTF32: return 4; + case kCFStringEncodingUTF32BE: return 4; + case kCFStringEncodingUTF32LE: return 4; + case kCFStringEncodingMacJapanese: return 1; + case kCFStringEncodingMacChineseTrad: return 1; // ?? + case kCFStringEncodingMacKorean: return 1; + case kCFStringEncodingMacArabic: return 1; + case kCFStringEncodingMacHebrew: return 1; + case kCFStringEncodingMacGreek: return 1; + case kCFStringEncodingMacCyrillic: return 1; + case kCFStringEncodingMacDevanagari: return 1; + case kCFStringEncodingMacGurmukhi: return 1; + case kCFStringEncodingMacGujarati: return 1; + case kCFStringEncodingMacOriya: return 1; + case kCFStringEncodingMacBengali: return 1; + case kCFStringEncodingMacTamil: return 1; + case kCFStringEncodingMacTelugu: return 1; + case kCFStringEncodingMacKannada: return 1; + case kCFStringEncodingMacMalayalam: return 1; + case kCFStringEncodingMacSinhalese: return 1; + case kCFStringEncodingMacBurmese: return 1; + case kCFStringEncodingMacKhmer: return 1; + case kCFStringEncodingMacThai: return 1; + case kCFStringEncodingMacLaotian: return 1; + case kCFStringEncodingMacGeorgian: return 1; + case kCFStringEncodingMacArmenian: return 1; + case kCFStringEncodingMacChineseSimp: return 1; + case kCFStringEncodingMacTibetan: return 1; + case kCFStringEncodingMacMongolian: return 1; + case kCFStringEncodingMacEthiopic: return 1; + case kCFStringEncodingMacCentralEurRoman: return 1; + case kCFStringEncodingMacVietnamese: return 1; + case kCFStringEncodingMacExtArabic: return 1; + case kCFStringEncodingMacSymbol: return 1; + case kCFStringEncodingMacDingbats: return 1; + case kCFStringEncodingMacTurkish: return 1; + case kCFStringEncodingMacCroatian: return 1; + case kCFStringEncodingMacIcelandic: return 1; + case kCFStringEncodingMacRomanian: return 1; + case kCFStringEncodingMacCeltic: return 1; + case kCFStringEncodingMacGaelic: return 1; + case kCFStringEncodingMacFarsi: return 1; + case kCFStringEncodingMacUkrainian: return 1; + case kCFStringEncodingMacInuit: return 1; + case kCFStringEncodingMacVT100: return 1; + case kCFStringEncodingMacHFS: return 1; + case kCFStringEncodingISOLatin2: return 1; + case kCFStringEncodingISOLatin3: return 1; + case kCFStringEncodingISOLatin4: return 1; + case kCFStringEncodingISOLatinCyrillic: return 1; + case kCFStringEncodingISOLatinArabic: return 1; + case kCFStringEncodingISOLatinGreek: return 1; + case kCFStringEncodingISOLatinHebrew: return 1; + case kCFStringEncodingISOLatin5: return 1; + case kCFStringEncodingISOLatin6: return 1; + case kCFStringEncodingISOLatinThai: return 1; + case kCFStringEncodingISOLatin7: return 1; + case kCFStringEncodingISOLatin8: return 1; + case kCFStringEncodingISOLatin9: return 1; + case kCFStringEncodingISOLatin10: return 1; + case kCFStringEncodingDOSLatinUS: return 1; + case kCFStringEncodingDOSGreek: return 1; + case kCFStringEncodingDOSBalticRim: return 1; + case kCFStringEncodingDOSLatin1: return 1; + case kCFStringEncodingDOSGreek1: return 1; + case kCFStringEncodingDOSLatin2: return 1; + case kCFStringEncodingDOSCyrillic: return 1; + case kCFStringEncodingDOSTurkish: return 1; + case kCFStringEncodingDOSPortuguese: return 1; + case kCFStringEncodingDOSIcelandic: return 1; + case kCFStringEncodingDOSHebrew: return 1; + case kCFStringEncodingDOSCanadianFrench: return 1; + case kCFStringEncodingDOSArabic: return 1; + case kCFStringEncodingDOSNordic: return 1; + case kCFStringEncodingDOSRussian: return 1; + case kCFStringEncodingDOSGreek2: return 1; + case kCFStringEncodingDOSThai: return 1; + case kCFStringEncodingDOSJapanese: return 1; + case kCFStringEncodingDOSChineseSimplif: return 1; + case kCFStringEncodingDOSKorean: return 1; + case kCFStringEncodingDOSChineseTrad: return 1; + case kCFStringEncodingWindowsLatin2: return 1; + case kCFStringEncodingWindowsCyrillic: return 1; + case kCFStringEncodingWindowsGreek: return 1; + case kCFStringEncodingWindowsLatin5: return 1; + case kCFStringEncodingWindowsHebrew: return 1; + case kCFStringEncodingWindowsArabic: return 1; + case kCFStringEncodingWindowsBalticRim: return 1; + case kCFStringEncodingWindowsVietnamese: return 1; + case kCFStringEncodingWindowsKoreanJohab: return 1; + case kCFStringEncodingANSEL: return 1; + case kCFStringEncodingJIS_X0201_76: return 1; + case kCFStringEncodingJIS_X0208_83: return 1; + case kCFStringEncodingJIS_X0208_90: return 1; + case kCFStringEncodingJIS_X0212_90: return 1; + case kCFStringEncodingJIS_C6226_78: return 1; + case 0x0628/*kCFStringEncodingShiftJIS_X0213*/: return 1; + case kCFStringEncodingShiftJIS_X0213_MenKuTen: return 1; + case kCFStringEncodingGB_2312_80: return 1; + case kCFStringEncodingGBK_95: return 1; + case kCFStringEncodingGB_18030_2000: return 1; + case kCFStringEncodingKSC_5601_87: return 1; + case kCFStringEncodingKSC_5601_92_Johab: return 1; + case kCFStringEncodingCNS_11643_92_P1: return 1; + case kCFStringEncodingCNS_11643_92_P2: return 1; + case kCFStringEncodingCNS_11643_92_P3: return 1; + case kCFStringEncodingISO_2022_JP: return 1; + case kCFStringEncodingISO_2022_JP_2: return 1; + case kCFStringEncodingISO_2022_JP_1: return 1; + case kCFStringEncodingISO_2022_JP_3: return 1; + case kCFStringEncodingISO_2022_CN: return 1; + case kCFStringEncodingISO_2022_CN_EXT: return 1; + case kCFStringEncodingISO_2022_KR: return 1; + case kCFStringEncodingEUC_JP: return 1; + case kCFStringEncodingEUC_CN: return 1; + case kCFStringEncodingEUC_TW: return 1; + case kCFStringEncodingEUC_KR: return 1; + case kCFStringEncodingShiftJIS: return 1; + case kCFStringEncodingKOI8_R: return 1; + case kCFStringEncodingBig5: return 2; //yay, a 2 + case kCFStringEncodingMacRomanLatin1: return 1; + case kCFStringEncodingHZ_GB_2312: return 2; + case kCFStringEncodingBig5_HKSCS_1999: return 1; + case kCFStringEncodingVISCII: return 1; + case kCFStringEncodingKOI8_U: return 1; + case kCFStringEncodingBig5_E: return 2; + case kCFStringEncodingNextStepJapanese: return YES; // ?? + case kCFStringEncodingEBCDIC_US: return 1; //lol + case kCFStringEncodingEBCDIC_CP037: return 1; + case kCFStringEncodingUTF7: return 1; + case kCFStringEncodingUTF7_IMAP : return 1; + default: + NSLog(@"Unknown string encoding %lx in %s", (long)encoding, __FUNCTION__); + return 1; + } +} + +/* Converts a hexadecimal digit into a corresponding 4 bit unsigned int; returns -1 on failure. The ... is a gcc extension. */ +static NSInteger char2hex(unichar c) { + switch (c) { + case '0' ... '9': return c - '0'; + case 'a' ... 'f': return c - 'a' + 10; + case 'A' ... 'F': return c - 'A' + 10; + default: return -1; + } +} + +static unsigned char hex2char(NSUInteger c) { + HFASSERT(c < 16); + return "0123456789ABCDEF"[c]; +} + +NSData *HFDataFromHexString(NSString *string, BOOL* isMissingLastNybble) { + REQUIRE_NOT_NULL(string); + NSUInteger stringIndex=0, resultIndex=0, max=[string length]; + NSMutableData* result = [NSMutableData dataWithLength:(max + 1)/2]; + unsigned char* bytes = [result mutableBytes]; + + NSUInteger numNybbles = 0; + unsigned char byteValue = 0; + + for (stringIndex = 0; stringIndex < max; stringIndex++) { + NSInteger val = char2hex([string characterAtIndex:stringIndex]); + if (val < 0) continue; + numNybbles++; + byteValue = byteValue * 16 + (unsigned char)val; + if (! (numNybbles % 2)) { + bytes[resultIndex++] = byteValue; + byteValue = 0; + } + } + + if (isMissingLastNybble) *isMissingLastNybble = (numNybbles % 2); + + //final nibble + if (numNybbles % 2) { + bytes[resultIndex++] = byteValue; + } + + [result setLength:resultIndex]; + return result; +} + +NSString *HFHexStringFromData(NSData *data) { + REQUIRE_NOT_NULL(data); + NSUInteger dataLength = [data length]; + NSUInteger stringLength = HFProductInt(dataLength, 2); + const unsigned char *bytes = [data bytes]; + unsigned char *charBuffer = check_malloc(stringLength); + NSUInteger charIndex = 0, byteIndex; + for (byteIndex = 0; byteIndex < dataLength; byteIndex++) { + unsigned char byte = bytes[byteIndex]; + charBuffer[charIndex++] = hex2char(byte >> 4); + charBuffer[charIndex++] = hex2char(byte & 0xF); + } + return [[[NSString alloc] initWithBytesNoCopy:charBuffer length:stringLength encoding:NSASCIIStringEncoding freeWhenDone:YES] autorelease]; +} + +void HFSetFDShouldCache(int fd, BOOL shouldCache) { + int result = fcntl(fd, F_NOCACHE, !shouldCache); + if (result == -1) { + int err = errno; + NSLog(@"fcntl(%d, F_NOCACHE, %d) returned error %d: %s", fd, !shouldCache, err, strerror(err)); + } +} + +NSString *HFDescribeByteCount(unsigned long long count) { + return HFDescribeByteCountWithPrefixAndSuffix(NULL, count, NULL); +} + +/* A big_num represents a number in some base. Here it is value = big * base + little. */ +typedef struct big_num { + unsigned int big; + unsigned long long little; +} big_num; + +static inline big_num divide_bignum_by_2(big_num a, unsigned long long base) { + //value = a.big * base + a.little; + big_num result; + result.big = a.big / 2; + unsigned int shiftedRemainder = (unsigned int)(a.little & 1); + result.little = a.little / 2; + if (a.big & 1) { + //need to add base/2 to result.little. We know that won't overflow because result.little is already a.little / 2 + result.little += base / 2; + + // If we shift off a bit for base/2, and we also shifted off a bit for a.little/2, then we have a carry bit we need to add + if ((base & 1) && shiftedRemainder) { + /* Is there a chance that adding 1 will overflow? We know base is odd (base & 1), so consider an example of base = 9. Then the largest that result.little could be is (9 - 1)/2 + base/2 = 8. We could add 1 and get back to base, but we can never exceed base, so we cannot overflow an unsigned long long. */ + result.little += 1; + HFASSERT(result.little <= base); + if (result.little == base) { + result.big++; + result.little = 0; + } + } + } + HFASSERT(result.little < base); + return result; +} + +static inline big_num add_big_nums(big_num a, big_num b, unsigned long long base) { + /* Perform the addition result += left. The addition is: + result.big = a.big + b.big + (a.little + b.little) / base + result.little = (a.little + b.little) % base + + a.little + b.little may overflow, so we have to take some care in how we calculate them. + Since both a.little and b.little are less than base, we know that if we overflow, we can subtract base from it to underflow and still get the same remainder. + */ + unsigned long long remainder = a.little + b.little; + unsigned int dividend = 0; + // remainder < a.little detects overflow, and remainder >= base detects the case where we did not overflow but are larger than base + if (remainder < a.little || remainder >= base) { + remainder -= base; + dividend++; + } + HFASSERT(remainder < base); + + big_num result = {a.big + b.big + dividend, remainder}; + return result; +} + + +/* Returns the first digit after the decimal point for a / b, rounded off, without overflow. This may return 10, indicating that the digit is 0 and we should carry. */ +static unsigned int computeRemainderPrincipalDigit(unsigned long long a, unsigned long long base) { + struct big_num result = {0, 0}, left = {(unsigned)(a / base), a % base}, right = {(unsigned)(100 / base), 100 % base}; + while (right.big > 0 || right.little > 0) { + /* Determine the least significant bit of right, which is right.big * base + right.little */ + unsigned int bigTermParity = (base & 1) && (right.big & 1); + unsigned int littleTermParity = (unsigned)(right.little & 1); + if (bigTermParity != littleTermParity) result = add_big_nums(result, left, base); + + right = divide_bignum_by_2(right, base); + left = add_big_nums(left, left, base); + } + + //result.big now contains 100 * a / base + unsigned int principalTwoDigits = (unsigned int)(result.big % 100); + unsigned int principalDigit = (principalTwoDigits / 10) + ((principalTwoDigits % 10) >= 5); + return principalDigit; +} + +NSString *HFDescribeByteCountWithPrefixAndSuffix(const char *stringPrefix, unsigned long long count, const char *stringSuffix) { + if (! stringPrefix) stringPrefix = ""; + if (! stringSuffix) stringSuffix = ""; + + if (count == 0) return [NSString stringWithFormat:@"%s0 bytes%s", stringPrefix, stringSuffix]; + + const struct { + unsigned long long size; + const char *suffix; + } suffixes[] = { + {1ULL<<0, "byte"}, + {1ULL<<10, "byte"}, + {1ULL<<20, "kilobyte"}, + {1ULL<<30, "megabyte"}, + {1ULL<<40, "gigabyte"}, + {1ULL<<50, "terabyte"}, + {1ULL<<60, "petabyte"}, + {ULLONG_MAX, "exabyte"} + }; + const unsigned numSuffixes = sizeof suffixes / sizeof *suffixes; + //HFASSERT((sizeof sizes / sizeof *sizes) == (sizeof suffixes / sizeof *suffixes)); + unsigned i; + unsigned long long base; + for (i=0; i < numSuffixes; i++) { + if (count < suffixes[i].size || suffixes[i].size == ULLONG_MAX) break; + } + + if (i >= numSuffixes) return [NSString stringWithFormat:@"%san unbelievable number of bytes%s", stringPrefix, stringSuffix]; + base = suffixes[i-1].size; + + unsigned long long dividend = count / base; + unsigned int remainderPrincipalDigit = computeRemainderPrincipalDigit(count % base, base); + HFASSERT(remainderPrincipalDigit <= 10); + if (remainderPrincipalDigit == 10) { + /* Carry */ + dividend++; + remainderPrincipalDigit = 0; + } + + BOOL needsPlural = (dividend != 1 || remainderPrincipalDigit > 0); + + char remainderBuff[64]; + if (remainderPrincipalDigit > 0) snprintf(remainderBuff, sizeof remainderBuff, ".%u", remainderPrincipalDigit); + else remainderBuff[0] = 0; + + char* resultPointer = NULL; + int numChars = asprintf(&resultPointer, "%s%llu%s %s%s%s", stringPrefix, dividend, remainderBuff, suffixes[i].suffix, needsPlural ? "s" : "", stringSuffix); + if (numChars < 0) return NULL; + return [[[NSString alloc] initWithBytesNoCopy:resultPointer length:numChars encoding:NSASCIIStringEncoding freeWhenDone:YES] autorelease]; +} + +static CGFloat interpolateShadow(CGFloat val) { + //A value of 1 means we are at the rightmost, and should return our max value. By adjusting the scale, we control how quickly the shadow drops off. + CGFloat scale = 1.4; + return (CGFloat)(expm1(val * scale) / expm1(scale)); +} + +void HFDrawShadow(CGContextRef ctx, NSRect rect, CGFloat shadowSize, NSRectEdge rectEdge, BOOL drawActive, NSRect clip) { + NSRect remainingRect, unused; + NSDivideRect(rect, &remainingRect, &unused, shadowSize, rectEdge); + + CGFloat maxAlpha = (drawActive ? .25 : .10); + + for (CGFloat i=0; i < shadowSize; i++) { + NSRect shadowLine; + NSDivideRect(remainingRect, &shadowLine, &remainingRect, 1, rectEdge); + + NSRect clippedLine = NSIntersectionRect(shadowLine, clip); + if (! NSIsEmptyRect(clippedLine)) { + CGFloat gray = 0.; + CGFloat alpha = maxAlpha * interpolateShadow((shadowSize - i) / shadowSize); + CGContextSetGrayFillColor(ctx, gray, alpha); + CGContextFillRect(ctx, NSRectToCGRect(clippedLine)); + } + } + +} + +void HFRegisterViewForWindowAppearanceChanges(NSView *self, SEL notificationSEL, BOOL appToo) { + NSWindow *window = [self window]; + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + if (window) { + [center addObserver:self selector:notificationSEL name:NSWindowDidBecomeKeyNotification object:window]; + [center addObserver:self selector:notificationSEL name:NSWindowDidResignKeyNotification object:window]; + } + if (appToo) { + [center addObserver:self selector:notificationSEL name:NSApplicationDidBecomeActiveNotification object:nil]; + [center addObserver:self selector:notificationSEL name:NSApplicationDidResignActiveNotification object:nil]; + } +} + +void HFUnregisterViewForWindowAppearanceChanges(NSView *self, BOOL appToo) { + NSWindow *window = [self window]; + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + if (window) { + [center removeObserver:self name:NSWindowDidBecomeKeyNotification object:window]; + [center removeObserver:self name:NSWindowDidResignKeyNotification object:window]; + } + if (appToo) { + [center removeObserver:self name:NSApplicationDidBecomeActiveNotification object:nil]; + [center removeObserver:self name:NSApplicationDidResignActiveNotification object:nil]; + } +} + +#if USE_CHUD +void HFStartTiming(const char *name) { + static BOOL inited; + if (! inited) { + inited = YES; + chudInitialize(); + chudSetErrorLogFile(stderr); + chudAcquireRemoteAccess(); + } + chudStartRemotePerfMonitor(name); + +} + +void HFStopTiming(void) { + chudStopRemotePerfMonitor(); +} +#else +void HFStartTiming(const char *name) { USE(name); } +void HFStopTiming(void) { } +#endif diff --git a/thirdparty/SameBoy-old/HexFiend/HFFunctions_Private.h b/thirdparty/SameBoy-old/HexFiend/HFFunctions_Private.h new file mode 100644 index 000000000..3595d3da5 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFFunctions_Private.h @@ -0,0 +1,52 @@ +#import + +@class HFController; + +static inline BOOL HFIsRunningOnMountainLionOrLater(void) { + return NSAppKitVersionNumber >= NSAppKitVersionNumber10_8; +} + +/* Returns the first index where the strings differ. If the strings do not differ in any characters but are of different lengths, returns the smaller length; if they are the same length and do not differ, returns NSUIntegerMax */ +static inline NSUInteger HFIndexOfFirstByteThatDiffers(const unsigned char *a, NSUInteger len1, const unsigned char *b, NSUInteger len2) { + NSUInteger endIndex = MIN(len1, len2); + for (NSUInteger i = 0; i < endIndex; i++) { + if (a[i] != b[i]) return i; + } + if (len1 != len2) return endIndex; + return NSUIntegerMax; +} + +/* Returns the last index where the strings differ. If the strings do not differ in any characters but are of different lengths, returns the larger length; if they are the same length and do not differ, returns NSUIntegerMax */ +static inline NSUInteger HFIndexOfLastByteThatDiffers(const unsigned char *a, NSUInteger len1, const unsigned char *b, NSUInteger len2) { + if (len1 != len2) return MAX(len1, len2); + NSUInteger i = len1; + while (i--) { + if (a[i] != b[i]) return i; + } + return NSUIntegerMax; +} + +static inline unsigned long long llmin(unsigned long long a, unsigned long long b) { + return a < b ? a : b; +} + +__private_extern__ NSImage *HFImageNamed(NSString *name); + +/* Returns an NSData from an NSString containing hexadecimal characters. Characters that are not hexadecimal digits are silently skipped. Returns by reference whether the last byte contains only one nybble, in which case it will be returned in the low 4 bits of the last byte. */ +__private_extern__ NSData *HFDataFromHexString(NSString *string, BOOL* isMissingLastNybble); + +__private_extern__ NSString *HFHexStringFromData(NSData *data); + +/* Modifies F_NOCACHE for a given file descriptor */ +__private_extern__ void HFSetFDShouldCache(int fd, BOOL shouldCache); + +__private_extern__ NSString *HFDescribeByteCountWithPrefixAndSuffix(const char *stringPrefix, unsigned long long count, const char *stringSuffix); + +/* Function for OSAtomicAdd64 that just does a non-atomic add on PowerPC. This should not be used where atomicity is critical; an example where this is used is updating a progress bar. */ +static inline int64_t HFAtomicAdd64(int64_t a, volatile int64_t *b) { +#if __ppc__ + return *b += a; +#else + return OSAtomicAdd64(a, b); +#endif +} diff --git a/thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.h b/thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.h new file mode 100644 index 000000000..36d4b08c7 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.h @@ -0,0 +1,49 @@ +/* HFGlyphTrie is used to represent a trie of glyphs that allows multiple concurrent readers, along with one writer. */ + +#import + +/* BranchFactor is in bits */ +#define kHFGlyphTrieBranchFactor 4 +#define kHFGlyphTrieBranchCount (1 << kHFGlyphTrieBranchFactor) + +typedef uint16_t HFGlyphFontIndex; +#define kHFGlyphFontIndexInvalid ((HFGlyphFontIndex)(-1)) + +#define kHFGlyphInvalid kCGFontIndexInvalid + +struct HFGlyph_t { + HFGlyphFontIndex fontIndex; + CGGlyph glyph; +}; + +static inline BOOL HFGlyphEqualsGlyph(struct HFGlyph_t a, struct HFGlyph_t b) __attribute__((unused)); +static inline BOOL HFGlyphEqualsGlyph(struct HFGlyph_t a, struct HFGlyph_t b) { + return a.glyph == b.glyph && a.fontIndex == b.fontIndex; +} + +struct HFGlyphTrieBranch_t { + __strong void *children[kHFGlyphTrieBranchCount]; +}; + +struct HFGlyphTrieLeaf_t { + struct HFGlyph_t glyphs[kHFGlyphTrieBranchCount]; +}; + +struct HFGlyphTrie_t { + uint8_t branchingDepth; + struct HFGlyphTrieBranch_t root; +}; + +/* Initializes a trie witha given key size */ +__private_extern__ void HFGlyphTrieInitialize(struct HFGlyphTrie_t *trie, uint8_t keySize); + +/* Inserts a glyph into the trie */ +__private_extern__ void HFGlyphTrieInsert(struct HFGlyphTrie_t *trie, NSUInteger key, struct HFGlyph_t value); + +/* Attempts to fetch a glyph. If the glyph is not present, returns an HFGlyph_t set to all bits 0. */ +__private_extern__ struct HFGlyph_t HFGlyphTrieGet(const struct HFGlyphTrie_t *trie, NSUInteger key); + +/* Frees all storage associated with a glyph tree. This is not necessary to call under GC. */ +__private_extern__ void HFGlyphTreeFree(struct HFGlyphTrie_t * trie); + + diff --git a/thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.m b/thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.m new file mode 100644 index 000000000..db94782ac --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFGlyphTrie.m @@ -0,0 +1,93 @@ +#import "HFGlyphTrie.h" +#import + +/* If branchingDepth is 1, then this is a leaf and there's nothing to free (a parent frees its children). If branchingDepth is 2, then this is a branch whose children are leaves, so we have to free the leaves but we do not recurse. If branchingDepth is greater than 2, we do have to recurse. */ +static void freeTrie(struct HFGlyphTrieBranch_t *branch, uint8_t branchingDepth) { + HFASSERT(branchingDepth >= 1); + NSUInteger i; + if (branchingDepth > 2) { + /* Recurse */ + for (i=0; i < kHFGlyphTrieBranchCount; i++) { + if (branch->children[i]) { + freeTrie(branch->children[i], branchingDepth - 1); + } + } + } + if (branchingDepth > 1) { + /* Free our children */ + for (i=0; i < kHFGlyphTrieBranchCount; i++) { + free(branch->children[i]); + } + } +} + +static void insertTrie(void *node, uint8_t branchingDepth, NSUInteger key, struct HFGlyph_t value) { + HFASSERT(node != NULL); + HFASSERT(branchingDepth >= 1); + if (branchingDepth == 1) { + /* Leaf */ + HFASSERT(key < kHFGlyphTrieBranchCount); + ((struct HFGlyphTrieLeaf_t *)node)->glyphs[key] = value; + } else { + /* Branch */ + struct HFGlyphTrieBranch_t *branch = node; + NSUInteger keySlice = key & ((1 << kHFGlyphTrieBranchFactor) - 1), keyRemainder = key >> kHFGlyphTrieBranchFactor; + __strong void *child = branch->children[keySlice]; + if (child == NULL) { + if (branchingDepth == 2) { + child = calloc(1, sizeof(struct HFGlyphTrieLeaf_t)); + } else { + child = calloc(1, sizeof(struct HFGlyphTrieBranch_t)); + } + /* We just zeroed out a block of memory and we are about to write its address somewhere where another thread could read it, so we need a memory barrier. */ + OSMemoryBarrier(); + branch->children[keySlice] = child; + } + insertTrie(child, branchingDepth - 1, keyRemainder, value); + } +} + +static struct HFGlyph_t getTrie(const void *node, uint8_t branchingDepth, NSUInteger key) { + HFASSERT(node != NULL); + HFASSERT(branchingDepth >= 1); + if (branchingDepth == 1) { + /* Leaf */ + HFASSERT(key < kHFGlyphTrieBranchCount); + return ((const struct HFGlyphTrieLeaf_t *)node)->glyphs[key]; + } else { + /* Branch */ + const struct HFGlyphTrieBranch_t *branch = node; + NSUInteger keySlice = key & ((1 << kHFGlyphTrieBranchFactor) - 1), keyRemainder = key >> kHFGlyphTrieBranchFactor; + if (branch->children[keySlice] == NULL) { + /* Not found */ + return (struct HFGlyph_t){0, 0}; + } else { + /* This dereference requires a data dependency barrier */ + return getTrie(branch->children[keySlice], branchingDepth - 1, keyRemainder); + } + } +} + +void HFGlyphTrieInsert(struct HFGlyphTrie_t *trie, NSUInteger key, struct HFGlyph_t value) { + insertTrie(&trie->root, trie->branchingDepth, key, value); +} + +struct HFGlyph_t HFGlyphTrieGet(const struct HFGlyphTrie_t *trie, NSUInteger key) { + struct HFGlyph_t result = getTrie(&trie->root, trie->branchingDepth, key); + return result; +} + +void HFGlyphTrieInitialize(struct HFGlyphTrie_t *trie, uint8_t keySize) { + /* If the branch factor is 4 (bits) and the key size is 2 bytes = 16 bits, initialize branching depth to 16/4 = 4 */ + uint8_t keyBits = keySize * CHAR_BIT; + HFASSERT(keyBits % kHFGlyphTrieBranchFactor == 0); + trie->branchingDepth = keyBits / kHFGlyphTrieBranchFactor; + memset(&trie->root, 0, sizeof(trie->root)); +} + +void HFGlyphTreeFree(struct HFGlyphTrie_t * trie) { + /* Don't try to free under GC. And don't free if it's never been initialized. */ + if (trie->branchingDepth > 0) { + freeTrie(&trie->root, trie->branchingDepth); + } +} diff --git a/thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.h new file mode 100644 index 000000000..ecbb1a0b0 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.h @@ -0,0 +1,21 @@ +// +// HFHexTextRepresenter.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! @class HFHexTextRepresenter + + @brief HFHexTextRepresenter is an HFRepresenter responsible for showing data in hexadecimal form. + + HFHexTextRepresenter is an HFRepresenter responsible for showing data in hexadecimal form. It has no methods except those inherited from HFTextRepresenter. +*/ +@interface HFHexTextRepresenter : HFTextRepresenter { + unsigned long long omittedNybbleLocation; + unsigned char unpartneredLastNybble; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.m new file mode 100644 index 000000000..4ff9f2028 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFHexTextRepresenter.m @@ -0,0 +1,203 @@ +// +// HFHexTextRepresenter.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import + +@interface HFHexPasteboardOwner : HFPasteboardOwner { + NSUInteger _bytesPerColumn; +} +@property (nonatomic) NSUInteger bytesPerColumn; +@end + +static inline unsigned char hex2char(NSUInteger c) { + HFASSERT(c < 16); + return "0123456789ABCDEF"[c]; +} + +@implementation HFHexPasteboardOwner + +@synthesize bytesPerColumn = _bytesPerColumn; + +- (unsigned long long)stringLengthForDataLength:(unsigned long long)dataLength { + if(!dataLength) return 0; + // -1 because no trailing space for an exact multiple. + unsigned long long spaces = _bytesPerColumn ? (dataLength-1)/_bytesPerColumn : 0; + if ((ULLONG_MAX - spaces)/2 <= dataLength) return ULLONG_MAX; + else return dataLength*2 + spaces; +} + +- (void)writeDataInBackgroundToPasteboard:(NSPasteboard *)pboard ofLength:(unsigned long long)length forType:(NSString *)type trackingProgress:(id)tracker { + HFASSERT([type isEqual:NSStringPboardType]); + if(length == 0) { + [pboard setString:@"" forType:type]; + return; + } + HFByteArray *byteArray = [self byteArray]; + HFASSERT(length <= NSUIntegerMax); + NSUInteger dataLength = ll2l(length); + NSUInteger stringLength = ll2l([self stringLengthForDataLength:length]); + HFASSERT(stringLength < ULLONG_MAX); + NSUInteger offset = 0, stringOffset = 0, remaining = dataLength; + unsigned char * restrict const stringBuffer = check_malloc(stringLength); + while (remaining > 0) { + unsigned char dataBuffer[64 * 1024]; + NSUInteger amountToCopy = MIN(sizeof dataBuffer, remaining); + NSUInteger bound = offset + amountToCopy - 1; + [byteArray copyBytes:dataBuffer range:HFRangeMake(offset, amountToCopy)]; + + if(_bytesPerColumn > 0 && offset > 0) { // ensure offset > 0 to skip adding a leading space + NSUInteger left = _bytesPerColumn - (offset % _bytesPerColumn); + if(left != _bytesPerColumn) { + while(left-- > 0 && offset <= bound) { + unsigned char c = dataBuffer[offset++]; + stringBuffer[stringOffset] = hex2char(c >> 4); + stringBuffer[stringOffset + 1] = hex2char(c & 0xF); + stringOffset += 2; + } + } + if(offset <= bound) + stringBuffer[stringOffset++] = ' '; + } + + if(_bytesPerColumn > 0) while(offset+_bytesPerColumn <= bound) { + for(NSUInteger j = 0; j < _bytesPerColumn; j++) { + unsigned char c = dataBuffer[offset++]; + stringBuffer[stringOffset] = hex2char(c >> 4); + stringBuffer[stringOffset + 1] = hex2char(c & 0xF); + stringOffset += 2; + } + stringBuffer[stringOffset++] = ' '; + } + + while (offset <= bound) { + unsigned char c = dataBuffer[offset++]; + stringBuffer[stringOffset] = hex2char(c >> 4); + stringBuffer[stringOffset + 1] = hex2char(c & 0xF); + stringOffset += 2; + } + + remaining -= amountToCopy; + } + + NSString *string = [[NSString alloc] initWithBytesNoCopy:stringBuffer length:stringLength encoding:NSASCIIStringEncoding freeWhenDone:YES]; + [pboard setString:string forType:type]; + [string release]; +} + +@end + +@implementation HFHexTextRepresenter + +/* No extra NSCoder support needed */ + +- (Class)_textViewClass { + return [HFRepresenterHexTextView class]; +} + +- (void)initializeView { + [super initializeView]; + [[self view] setBytesBetweenVerticalGuides:4]; + unpartneredLastNybble = UCHAR_MAX; + omittedNybbleLocation = ULLONG_MAX; +} + ++ (NSPoint)defaultLayoutPosition { + return NSMakePoint(0, 0); +} + +- (void)_clearOmittedNybble { + unpartneredLastNybble = UCHAR_MAX; + omittedNybbleLocation = ULLONG_MAX; +} + +- (BOOL)_insertionShouldDeleteLastNybble { + /* Either both the omittedNybbleLocation and unpartneredLastNybble are invalid (set to their respective maxima), or neither are */ + HFASSERT((omittedNybbleLocation == ULLONG_MAX) == (unpartneredLastNybble == UCHAR_MAX)); + /* We should delete the last nybble if our omittedNybbleLocation is the point where we would insert */ + BOOL result = NO; + if (omittedNybbleLocation != ULLONG_MAX) { + HFController *controller = [self controller]; + NSArray *selectedRanges = [controller selectedContentsRanges]; + if ([selectedRanges count] == 1) { + HFRange selectedRange = [selectedRanges[0] HFRange]; + result = (selectedRange.length == 0 && selectedRange.location > 0 && selectedRange.location - 1 == omittedNybbleLocation); + } + } + return result; +} + +- (BOOL)_canInsertText:(NSString *)text { + REQUIRE_NOT_NULL(text); + NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEFabcdef"]; + return [text rangeOfCharacterFromSet:characterSet].location != NSNotFound; +} + +- (void)insertText:(NSString *)text { + REQUIRE_NOT_NULL(text); + if (! [self _canInsertText:text]) { + /* The user typed invalid data, and we can ignore it */ + return; + } + + BOOL shouldReplacePriorByte = [self _insertionShouldDeleteLastNybble]; + if (shouldReplacePriorByte) { + HFASSERT(unpartneredLastNybble < 16); + /* Prepend unpartneredLastNybble as a nybble */ + text = [NSString stringWithFormat:@"%1X%@", unpartneredLastNybble, text]; + } + BOOL isMissingLastNybble; + NSData *data = HFDataFromHexString(text, &isMissingLastNybble); + HFASSERT([data length] > 0); + HFASSERT(shouldReplacePriorByte != isMissingLastNybble); + HFController *controller = [self controller]; + BOOL success = [controller insertData:data replacingPreviousBytes: (shouldReplacePriorByte ? 1 : 0) allowUndoCoalescing:YES]; + if (isMissingLastNybble && success) { + HFASSERT([data length] > 0); + HFASSERT(unpartneredLastNybble == UCHAR_MAX); + [data getBytes:&unpartneredLastNybble range:NSMakeRange([data length] - 1, 1)]; + NSArray *selectedRanges = [controller selectedContentsRanges]; + HFASSERT([selectedRanges count] >= 1); + HFRange selectedRange = [selectedRanges[0] HFRange]; + HFASSERT(selectedRange.location > 0); + omittedNybbleLocation = HFSubtract(selectedRange.location, 1); + } + else { + [self _clearOmittedNybble]; + } +} + +- (NSData *)dataFromPasteboardString:(NSString *)string { + REQUIRE_NOT_NULL(string); + return HFDataFromHexString(string, NULL); +} + +- (void)controllerDidChange:(HFControllerPropertyBits)bits { + if (bits & HFControllerHideNullBytes) { + [[self view] setHidesNullBytes:[[self controller] shouldHideNullBytes]]; + } + [super controllerDidChange:bits]; + if (bits & (HFControllerSelectedRanges)) { + [self _clearOmittedNybble]; + } +} + +- (void)copySelectedBytesToPasteboard:(NSPasteboard *)pb { + REQUIRE_NOT_NULL(pb); + HFByteArray *selection = [[self controller] byteArrayForSelectedContentsRanges]; + HFASSERT(selection != NULL); + if ([selection length] == 0) { + NSBeep(); + } else { + HFHexPasteboardOwner *owner = [HFHexPasteboardOwner ownPasteboard:pb forByteArray:selection withTypes:@[HFPrivateByteArrayPboardType, NSStringPboardType]]; + [owner setBytesPerLine:[self bytesPerLine]]; + owner.bytesPerColumn = self.bytesPerColumn; + } +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFHexTextView.h b/thirdparty/SameBoy-old/HexFiend/HFHexTextView.h new file mode 100644 index 000000000..3222b65e7 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFHexTextView.h @@ -0,0 +1,15 @@ +// +// HFHexTextView.h +// HexFiend_2 +// +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + + +@interface HFHexTextView : NSTextView { + +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFHexTextView.m b/thirdparty/SameBoy-old/HexFiend/HFHexTextView.m new file mode 100644 index 000000000..9e6ae47b3 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFHexTextView.m @@ -0,0 +1,13 @@ +// +// HFHexTextView.m +// HexFiend_2 +// +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "HFHexTextView.h" + + +@implementation HFHexTextView + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.h new file mode 100644 index 000000000..a493304b5 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.h @@ -0,0 +1,80 @@ +// +// HFLayoutRepresenter.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! @class HFLayoutRepresenter + @brief An HFRepresenter responsible for arranging the views of other HFRepresenters attached to the same HFController. + + HFLayoutRepresenter is an HFRepresenter that manages the views of other HFRepresenters. It arranges their views in its own view, mediating between them to determine their position and size, as well as global properties such as bytes per line. + + HFLayoutRepresenter has an array of representers attached to it. When you add an HFRepresenter to this array, HFLayoutRepresenter will add the view of the representer as a subview of its own view. + + \b Layout + + HFLayoutRepresenter is capable of arranging the views of other HFRepresenters to fit within the bounds of its view. The layout process depends on three things: + + -# The \c frame and \c autoresizingMask of the representers' views. + -# The \c minimumViewWidthForBytesPerLine: method, which determines the largest number of bytes per line that the representer can display for a given view width. + -# The representer's \c layoutPosition. This is an NSPoint, but it is not used geometrically. Instead, the relative values of the X and Y coordinates of the \c layoutPosition determine the relative positioning of the views, as described below. + + Thus, to have your subclass of HFRepresenter participate in the HFLayoutRepresenter system, override \c defaultLayoutPosition: to control its positioning, and possibly \\c minimumViewWidthForBytesPerLine: if your representer requires a certain width to display some bytes per line. Then ensure your view has its autoresizing mask set properly, and if its frame is fixed size, ensure that its frame is correct as well. + + The layout process, in detail, is: + + -# The views are sorted vertically by the Y component of their representers' \c layoutPosition into "slices." Smaller values appear towards the bottom of the layout view. There is no space between slices. + -# Views with equal Y components are sorted horizontally by the X component of their representers' \c layoutPosition, with smaller values appearing on the left. + -# The height of each slice is determined by the tallest view within it, excluding views that have \c NSViewHeightSizable set. If there is any leftover vertical space, it is distributed equally among all slices with at least one view with \c NSViewHeightSizable set. + -# If the layout representer is not set to maximize the bytes per line (BPL), then the BPL from the HFController is used. Otherwise: + -# Each representer is queried for its \c minimumViewWidthForBytesPerLine: + -# The largest BPL allowing each row to fit within the layout width is determined via a binary search. + -# The BPL is rounded down to a multiple of the bytes per column (if non-zero). + -# The BPL is then set on the controller. + -# For each row, each view is assigned its minimum view width for the BPL. + -# If there is any horizontal space left over, it is divided evenly between all views in that slice that have \c NSViewWidthSizable set in their autoresizing mask. + +*/ +@interface HFLayoutRepresenter : HFRepresenter { + NSMutableArray *representers; + BOOL maximizesBytesPerLine; +} + +/*! @name Managed representers + Managing the list of representers laid out by the receiver +*/ +//@{ +/// Return the array of representers managed by the receiver. */ +@property (readonly, copy) NSArray *representers; + +/*! Adds a new representer to the receiver, triggering relayout. */ +- (void)addRepresenter:(HFRepresenter *)representer; + +/*! Removes a representer to the receiver (which must be present in the receiver's array of representers), triggering relayout. */ +- (void)removeRepresenter:(HFRepresenter *)representer; +//@} + +/*! When enabled, the receiver will attempt to maximize the bytes per line so as to consume as much as possible of the bounds rect. If this is YES, then upon relayout, the receiver will recalculate the maximum number of bytes per line that can fit in its boundsRectForLayout. If this is NO, then the receiver will not change the bytes per line. */ +@property (nonatomic) BOOL maximizesBytesPerLine; + +/*! @name Layout + Methods to get information about layout, and to explicitly trigger it. +*/ +//@{ +/*! Returns the smallest width that produces the same layout (and, if maximizes bytesPerLine, the same bytes per line) as the proposed width. */ +- (CGFloat)minimumViewWidthForLayoutInProposedWidth:(CGFloat)proposedWidth; + +/*! Returns the maximum bytes per line that can fit in the proposed width (ignoring maximizesBytesPerLine). This is always a multiple of the bytesPerColumn, and always at least bytesPerColumn. */ +- (NSUInteger)maximumBytesPerLineForLayoutInProposedWidth:(CGFloat)proposedWidth; + +/*! Returns the smallest width that can support the given bytes per line. */ +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine; + +/*! Relayouts are triggered when representers are added and removed, or when the view is resized. You may call this explicitly to trigger a relayout. */ +- (void)performLayout; +//@} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.m new file mode 100644 index 000000000..c36c0ea1b --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFLayoutRepresenter.m @@ -0,0 +1,361 @@ +// +// HFRepresenterLayoutView.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +@interface HFRepresenterLayoutViewInfo : NSObject { +@public + HFRepresenter *rep; + NSView *view; + NSPoint layoutPosition; + NSRect frame; + NSUInteger autoresizingMask; +} + +@end + +@implementation HFRepresenterLayoutViewInfo + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@ : %@>", view, NSStringFromRect(frame)]; +} + +@end + +@implementation HFLayoutRepresenter + +static NSInteger sortByLayoutPosition(id a, id b, void *self) { + USE(self); + NSPoint pointA = [a layoutPosition]; + NSPoint pointB = [b layoutPosition]; + if (pointA.y < pointB.y) return -1; + else if (pointA.y > pointB.y) return 1; + else if (pointA.x < pointB.x) return -1; + else if (pointA.x > pointB.x) return 1; + else return 0; +} + +- (NSArray *)arraysOfLayoutInfos { + if (! representers) return nil; + + NSMutableArray *result = [NSMutableArray array]; + NSArray *reps = [representers sortedArrayUsingFunction:sortByLayoutPosition context:self]; + NSMutableArray *currentReps = [NSMutableArray array]; + CGFloat currentRepY = - CGFLOAT_MAX; + FOREACH(HFRepresenter*, rep, reps) { + HFRepresenterLayoutViewInfo *info = [[HFRepresenterLayoutViewInfo alloc] init]; + info->rep = rep; + info->view = [rep view]; + info->frame = [info->view frame]; + info->layoutPosition = [rep layoutPosition]; + info->autoresizingMask = [info->view autoresizingMask]; + if (info->layoutPosition.y != currentRepY && [currentReps count] > 0) { + [result addObject:[[currentReps copy] autorelease]]; + [currentReps removeAllObjects]; + } + currentRepY = info->layoutPosition.y; + [currentReps addObject:info]; + [info release]; + } + if ([currentReps count]) [result addObject:[[currentReps copy] autorelease]]; + return result; +} + +- (NSRect)boundsRectForLayout { + NSRect result = [[self view] bounds]; + /* Sometimes when we are not yet in a window, we get wonky bounds, so be paranoid. */ + if (result.size.width < 0 || result.size.height < 0) result = NSZeroRect; + return result; +} + +- (CGFloat)_computeMinHeightForLayoutInfos:(NSArray *)infos { + CGFloat result = 0; + HFASSERT(infos != NULL); + HFASSERT([infos count] > 0); + FOREACH(HFRepresenterLayoutViewInfo *, info, infos) { + if (! (info->autoresizingMask & NSViewHeightSizable)) result = MAX(result, NSHeight([info->view frame])); + } + return result; +} + +- (void)_applyYLocation:(CGFloat)yLocation andMinHeight:(CGFloat)height toInfos:(NSArray *)layoutInfos { + FOREACH(HFRepresenterLayoutViewInfo *, info, layoutInfos) { + info->frame.origin.y = yLocation; + if (info->autoresizingMask & NSViewHeightSizable) info->frame.size.height = height; + } +} + +- (void)_layoutInfosHorizontally:(NSArray *)infos inRect:(NSRect)layoutRect withBytesPerLine:(NSUInteger)bytesPerLine { + CGFloat nextX = NSMinX(layoutRect); + NSUInteger numHorizontallyResizable = 0; + FOREACH(HFRepresenterLayoutViewInfo *, info, infos) { + CGFloat minWidth = [info->rep minimumViewWidthForBytesPerLine:bytesPerLine]; + info->frame.origin.x = nextX; + info->frame.size.width = minWidth; + nextX += minWidth; + numHorizontallyResizable += !! (info->autoresizingMask & NSViewWidthSizable); + } + + CGFloat remainingWidth = NSMaxX(layoutRect) - nextX; + if (numHorizontallyResizable > 0 && remainingWidth > 0) { + NSView *view = [self view]; + CGFloat remainingPixels = [view convertSize:NSMakeSize(remainingWidth, 0) toView:nil].width; + HFASSERT(remainingPixels > 0); + CGFloat pixelsPerView = HFFloor(HFFloor(remainingPixels) / (CGFloat)numHorizontallyResizable); + if (pixelsPerView > 0) { + CGFloat pointsPerView = [view convertSize:NSMakeSize(pixelsPerView, 0) fromView:nil].width; + CGFloat pointsAdded = 0; + FOREACH(HFRepresenterLayoutViewInfo *, info, infos) { + info->frame.origin.x += pointsAdded; + if (info->autoresizingMask & NSViewWidthSizable) { + info->frame.size.width += pointsPerView; + pointsAdded += pointsPerView; + } + } + } + } +} + +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine { + CGFloat result = 0; + NSArray *arraysOfLayoutInfos = [self arraysOfLayoutInfos]; + + FOREACH(NSArray *, layoutInfos, arraysOfLayoutInfos) { + CGFloat minWidthForRow = 0; + FOREACH(HFRepresenterLayoutViewInfo *, info, layoutInfos) { + minWidthForRow += [info->rep minimumViewWidthForBytesPerLine:bytesPerLine]; + } + result = MAX(result, minWidthForRow); + } + return result; +} + +- (NSUInteger)_computeBytesPerLineForArraysOfLayoutInfos:(NSArray *)arraysOfLayoutInfos forLayoutInRect:(NSRect)layoutRect { + /* The granularity is our own granularity (probably 1), LCMed with the granularities of all other representers */ + NSUInteger granularity = [self byteGranularity]; + FOREACH(HFRepresenter *, representer, representers) { + granularity = HFLeastCommonMultiple(granularity, [representer byteGranularity]); + } + HFASSERT(granularity >= 1); + + NSUInteger newNumGranules = (NSUIntegerMax - 1) / granularity; + FOREACH(NSArray *, layoutInfos, arraysOfLayoutInfos) { + NSUInteger maxKnownGood = 0, minKnownBad = newNumGranules + 1; + while (maxKnownGood + 1 < minKnownBad) { + CGFloat requiredSpace = 0; + NSUInteger proposedNumGranules = maxKnownGood + (minKnownBad - maxKnownGood)/2; + NSUInteger proposedBytesPerLine = proposedNumGranules * granularity; + FOREACH(HFRepresenterLayoutViewInfo *, info, layoutInfos) { + requiredSpace += [info->rep minimumViewWidthForBytesPerLine:proposedBytesPerLine]; + if (requiredSpace > NSWidth(layoutRect)) break; + } + if (requiredSpace > NSWidth(layoutRect)) minKnownBad = proposedNumGranules; + else maxKnownGood = proposedNumGranules; + } + newNumGranules = maxKnownGood; + } + return MAX(1u, newNumGranules) * granularity; +} + +- (BOOL)_anyLayoutInfoIsVerticallyResizable:(NSArray *)vals { + HFASSERT(vals != NULL); + FOREACH(HFRepresenterLayoutViewInfo *, info, vals) { + if (info->autoresizingMask & NSViewHeightSizable) return YES; + } + return NO; +} + +- (BOOL)_addVerticalHeight:(CGFloat)heightPoints andOffset:(CGFloat)offsetPoints toLayoutInfos:(NSArray *)layoutInfos { + BOOL isVerticallyResizable = [self _anyLayoutInfoIsVerticallyResizable:layoutInfos]; + CGFloat totalHeight = [self _computeMinHeightForLayoutInfos:layoutInfos] + heightPoints; + FOREACH(HFRepresenterLayoutViewInfo *, info, layoutInfos) { + info->frame.origin.y += offsetPoints; + if (isVerticallyResizable) { + if (info->autoresizingMask & NSViewHeightSizable) { + info->frame.size.height = totalHeight; + } + else { + CGFloat diff = totalHeight - info->frame.size.height; + HFASSERT(diff >= 0); + info->frame.origin.y += HFFloor(diff); + } + } + } + return isVerticallyResizable; +} + +- (void)_distributeVerticalSpace:(CGFloat)space toArraysOfLayoutInfos:(NSArray *)arraysOfLayoutInfos { + HFASSERT(space >= 0); + HFASSERT(arraysOfLayoutInfos != NULL); + + NSUInteger consumers = 0; + FOREACH(NSArray *, layoutInfos, arraysOfLayoutInfos) { + if ([self _anyLayoutInfoIsVerticallyResizable:layoutInfos]) consumers++; + } + if (consumers > 0) { + NSView *view = [self view]; + CGFloat availablePixels = [view convertSize:NSMakeSize(0, space) toView:nil].height; + HFASSERT(availablePixels > 0); + CGFloat pixelsPerView = HFFloor(HFFloor(availablePixels) / (CGFloat)consumers); + CGFloat pointsPerView = [view convertSize:NSMakeSize(0, pixelsPerView) fromView:nil].height; + CGFloat yOffset = 0; + if (pointsPerView > 0) { + FOREACH(NSArray *, layoutInfos, arraysOfLayoutInfos) { + if ([self _addVerticalHeight:pointsPerView andOffset:yOffset toLayoutInfos:layoutInfos]) { + yOffset += pointsPerView; + } + } + } + } +} + +- (void)performLayout { + HFController *controller = [self controller]; + if (! controller) return; + if (! representers) return; + + NSArray *arraysOfLayoutInfos = [self arraysOfLayoutInfos]; + if (! [arraysOfLayoutInfos count]) return; + + NSUInteger transaction = [controller beginPropertyChangeTransaction]; + + NSRect layoutRect = [self boundsRectForLayout]; + + NSUInteger bytesPerLine; + if (maximizesBytesPerLine) bytesPerLine = [self _computeBytesPerLineForArraysOfLayoutInfos:arraysOfLayoutInfos forLayoutInRect:layoutRect]; + else bytesPerLine = [controller bytesPerLine]; + + CGFloat yPosition = NSMinY(layoutRect); + FOREACH(NSArray *, layoutInfos, arraysOfLayoutInfos) { + HFASSERT([layoutInfos count] > 0); + CGFloat minHeight = [self _computeMinHeightForLayoutInfos:layoutInfos]; + [self _applyYLocation:yPosition andMinHeight:minHeight toInfos:layoutInfos]; + yPosition += minHeight; + [self _layoutInfosHorizontally:layoutInfos inRect:layoutRect withBytesPerLine:bytesPerLine]; + } + + CGFloat remainingVerticalSpace = NSMaxY(layoutRect) - yPosition; + if (remainingVerticalSpace > 0) { + [self _distributeVerticalSpace:remainingVerticalSpace toArraysOfLayoutInfos:arraysOfLayoutInfos]; + } + + FOREACH(NSArray *, layoutInfoArray, arraysOfLayoutInfos) { + FOREACH(HFRepresenterLayoutViewInfo *, info, layoutInfoArray) { + [info->view setFrame:info->frame]; + } + } + + [controller endPropertyChangeTransaction:transaction]; +} + +- (NSArray *)representers { + return representers ? [[representers copy] autorelease] : @[]; +} + +- (instancetype)init { + self = [super init]; + maximizesBytesPerLine = YES; + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self name:NSViewFrameDidChangeNotification object:[self view]]; + [representers release]; + [super dealloc]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeObject:representers forKey:@"HFRepresenters"]; + [coder encodeBool:maximizesBytesPerLine forKey:@"HFMaximizesBytesPerLine"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + representers = [[coder decodeObjectForKey:@"HFRepresenters"] retain]; + maximizesBytesPerLine = [coder decodeBoolForKey:@"HFMaximizesBytesPerLine"]; + NSView *view = [self view]; + [view setPostsFrameChangedNotifications:YES]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frameChanged:) name:NSViewFrameDidChangeNotification object:view]; + return self; +} + +- (void)addRepresenter:(HFRepresenter *)representer { + REQUIRE_NOT_NULL(representer); + if (! representers) representers = [[NSMutableArray alloc] init]; + HFASSERT([representers indexOfObjectIdenticalTo:representer] == NSNotFound); + [representers addObject:representer]; + HFASSERT([[representer view] superview] != [self view]); + [[self view] addSubview:[representer view]]; + [self performLayout]; +} + +- (void)removeRepresenter:(HFRepresenter *)representer { + REQUIRE_NOT_NULL(representer); + HFASSERT([representers indexOfObjectIdenticalTo:representer] != NSNotFound); + NSView *view = [representer view]; + HFASSERT([view superview] == [self view]); + [view removeFromSuperview]; + [representers removeObjectIdenticalTo:representer]; + [self performLayout]; +} + +- (void)frameChanged:(NSNotification *)note { + USE(note); + [self performLayout]; +} + +- (void)initializeView { + NSView *view = [self view]; + [view setPostsFrameChangedNotifications:YES]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frameChanged:) name:NSViewFrameDidChangeNotification object:view]; +} + +- (NSView *)createView { + return [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)]; +} + +- (void)setMaximizesBytesPerLine:(BOOL)val { + maximizesBytesPerLine = val; +} + +- (BOOL)maximizesBytesPerLine { + return maximizesBytesPerLine; +} + +- (NSUInteger)maximumBytesPerLineForLayoutInProposedWidth:(CGFloat)proposedWidth { + NSArray *arraysOfLayoutInfos = [self arraysOfLayoutInfos]; + if (! [arraysOfLayoutInfos count]) return 0; + + NSRect layoutRect = [self boundsRectForLayout]; + layoutRect.size.width = proposedWidth; + + NSUInteger bytesPerLine = [self _computeBytesPerLineForArraysOfLayoutInfos:arraysOfLayoutInfos forLayoutInRect:layoutRect]; + return bytesPerLine; +} + +- (CGFloat)minimumViewWidthForLayoutInProposedWidth:(CGFloat)proposedWidth { + NSUInteger bytesPerLine; + if ([self maximizesBytesPerLine]) { + bytesPerLine = [self maximumBytesPerLineForLayoutInProposedWidth:proposedWidth]; + } else { + bytesPerLine = [[self controller] bytesPerLine]; + } + CGFloat newWidth = [self minimumViewWidthForBytesPerLine:bytesPerLine]; + return newWidth; +} + +- (void)controllerDidChange:(HFControllerPropertyBits)bits { + [super controllerDidChange:bits]; + if (bits & (HFControllerViewSizeRatios | HFControllerBytesPerColumn | HFControllerByteGranularity)) { + [self performLayout]; + } +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.h new file mode 100644 index 000000000..b711e4eec --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.h @@ -0,0 +1,67 @@ +// +// HFLineCountingRepresenter.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! @enum HFLineNumberFormat + HFLineNumberFormat is a simple enum used to determine whether line numbers are in decimal or hexadecimal format. +*/ +typedef NS_ENUM(NSUInteger, HFLineNumberFormat) { + HFLineNumberFormatDecimal, //!< Decimal line numbers + HFLineNumberFormatHexadecimal, //!< Hexadecimal line numbers + HFLineNumberFormatMAXIMUM //!< One more than the maximum valid line number format, so that line number formats can be cycled through easily +}; + +/*! @class HFLineCountingRepresenter + @brief The HFRepresenter used to show the "line number gutter." + + HFLineCountingRepresenter is the HFRepresenter used to show the "line number gutter." HFLineCountingRepresenter makes space for a certain number of digits. +*/ +@interface HFLineCountingRepresenter : HFRepresenter { + CGFloat lineHeight; + NSUInteger digitsToRepresentContentsLength; + NSUInteger minimumDigitCount; + HFLineNumberFormat lineNumberFormat; + NSInteger interiorShadowEdge; + CGFloat preferredWidth; + CGFloat digitAdvance; +} + +/// The minimum digit count. The receiver will always ensure it is big enough to display at least the minimum digit count. The default is 2. +@property (nonatomic) NSUInteger minimumDigitCount; + +/// The number of digits we are making space for. +@property (readonly) NSUInteger digitCount; + +/// The current width that the HFRepresenter prefers to be laid out with. +@property (readonly) CGFloat preferredWidth; + +/// The line number format. +@property (nonatomic) HFLineNumberFormat lineNumberFormat; + +/// Switches to the next line number format. This is called from the view. +- (void)cycleLineNumberFormat; + +/// The edge (as an NSRectEdge) on which the view draws an interior shadow. -1 means no edge. +@property (nonatomic) NSInteger interiorShadowEdge; + +/// The border color used at the edges specified by -borderedEdges. +@property (nonatomic, copy) NSColor *borderColor; + +/*! The edges on which borders are drawn. The edge returned by interiorShadowEdge always has a border drawn. The edges are specified by a bitwise or of 1 left shifted by the NSRectEdge values. For example, to draw a border on the min x and max y edges use: (1 << NSMinXEdge) | (1 << NSMaxYEdge). 0 (or -1) specfies no edges. */ +@property (nonatomic) NSInteger borderedEdges; + +/// The background color +@property (nonatomic, copy) NSColor *backgroundColor; + +@property NSUInteger valueOffset; + +@end + +/*! Notification posted when the HFLineCountingRepresenter's width has changed because the number of digits it wants to show has increased or decreased. The object is the HFLineCountingRepresenter; there is no user info. +*/ +extern NSString *const HFLineCountingRepresenterMinimumViewWidthChanged; diff --git a/thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.m new file mode 100644 index 000000000..4a81fc83d --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFLineCountingRepresenter.m @@ -0,0 +1,250 @@ +// +// HFLineCountingRepresenter.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + +NSString *const HFLineCountingRepresenterMinimumViewWidthChanged = @"HFLineCountingRepresenterMinimumViewWidthChanged"; + +/* Returns the maximum advance in points for a hexadecimal digit for the given font (interpreted as a screen font) */ +static CGFloat maximumDigitAdvanceForFont(NSFont *font) { + REQUIRE_NOT_NULL(font); + font = [font screenFont]; + CGFloat maxDigitAdvance = 0; + NSDictionary *attributesDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:font, NSFontAttributeName, nil]; + NSTextStorage *storage = [[NSTextStorage alloc] init]; + NSLayoutManager *manager = [[NSLayoutManager alloc] init]; + [storage setFont:font]; + [storage addLayoutManager:manager]; + + NSSize advancements[16] = {}; + NSGlyph glyphs[16]; + + /* Generate a glyph for every hex digit */ + for (NSUInteger i=0; i < 16; i++) { + char c = "0123456789ABCDEF"[i]; + NSString *string = [[NSString alloc] initWithBytes:&c length:1 encoding:NSASCIIStringEncoding]; + [storage replaceCharactersInRange:NSMakeRange(0, (i ? 1 : 0)) withString:string]; + [string release]; + glyphs[i] = [manager glyphAtIndex:0 isValidIndex:NULL]; + HFASSERT(glyphs[i] != NSNullGlyph); + } + + /* Get the advancements of each of those glyphs */ + [font getAdvancements:advancements forGlyphs:glyphs count:sizeof glyphs / sizeof *glyphs]; + + [manager release]; + [attributesDictionary release]; + [storage release]; + + /* Find the widest digit */ + for (NSUInteger i=0; i < sizeof glyphs / sizeof *glyphs; i++) { + maxDigitAdvance = HFMax(maxDigitAdvance, advancements[i].width); + } + return maxDigitAdvance; +} + +@implementation HFLineCountingRepresenter + +- (instancetype)init { + if ((self = [super init])) { + minimumDigitCount = 2; + digitsToRepresentContentsLength = minimumDigitCount; + interiorShadowEdge = NSMaxXEdge; + + _borderedEdges = (1 << NSMaxXEdge); + _borderColor = [[NSColor controlShadowColor] retain]; + _backgroundColor = [[NSColor windowBackgroundColor] retain]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeDouble:lineHeight forKey:@"HFLineHeight"]; + [coder encodeInt64:minimumDigitCount forKey:@"HFMinimumDigitCount"]; + [coder encodeInt64:lineNumberFormat forKey:@"HFLineNumberFormat"]; + [coder encodeObject:self.backgroundColor forKey:@"HFBackgroundColor"]; + [coder encodeObject:self.borderColor forKey:@"HFBorderColor"]; + [coder encodeInt64:self.borderedEdges forKey:@"HFBorderedEdges"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + lineHeight = (CGFloat)[coder decodeDoubleForKey:@"HFLineHeight"]; + minimumDigitCount = (NSUInteger)[coder decodeInt64ForKey:@"HFMinimumDigitCount"]; + lineNumberFormat = (HFLineNumberFormat)[coder decodeInt64ForKey:@"HFLineNumberFormat"]; + + _borderedEdges = [coder decodeObjectForKey:@"HFBorderedEdges"] ? (NSInteger)[coder decodeInt64ForKey:@"HFBorderedEdges"] : 0; + _borderColor = [[NSColor controlShadowColor] retain]; + _backgroundColor = [[NSColor windowBackgroundColor] retain]; + + return self; +} + +- (void)dealloc { + [_borderColor release]; + [_backgroundColor release]; + [super dealloc]; +} + +- (NSView *)createView { + HFLineCountingView *result = [[HFLineCountingView alloc] initWithFrame:NSMakeRect(0, 0, 60, 10)]; + [result setRepresenter:self]; + [result setAutoresizingMask:NSViewHeightSizable]; + return result; +} + +- (void)postMinimumViewWidthChangedNotification { + [[NSNotificationCenter defaultCenter] postNotificationName:HFLineCountingRepresenterMinimumViewWidthChanged object:self]; +} + +- (void)updateDigitAdvanceWithFont:(NSFont *)font { + CGFloat newDigitAdvance = maximumDigitAdvanceForFont(font); + if (digitAdvance != newDigitAdvance) { + digitAdvance = newDigitAdvance; + [self postMinimumViewWidthChangedNotification]; + } +} + +- (void)updateFontAndLineHeight { + HFLineCountingView *view = [self view]; + HFController *controller = [self controller]; + NSFont *font = controller ? [controller font] : [NSFont fontWithName:HFDEFAULT_FONT size:HFDEFAULT_FONTSIZE]; + [view setFont:font]; + [view setLineHeight: controller ? [controller lineHeight] : HFDEFAULT_FONTSIZE]; + [self updateDigitAdvanceWithFont:font]; +} + +- (void)updateLineNumberFormat { + [[self view] setLineNumberFormat:lineNumberFormat]; +} + +- (void)updateBytesPerLine { + [[self view] setBytesPerLine:[[self controller] bytesPerLine]]; +} + +- (void)updateLineRangeToDraw { + HFFPRange lineRange = {0, 0}; + HFController *controller = [self controller]; + if (controller) { + lineRange = [controller displayedLineRange]; + } + [[self view] setLineRangeToDraw:lineRange]; +} + +- (CGFloat)preferredWidth { + if (digitAdvance == 0) { + /* This may happen if we were loaded from a nib. We are lazy about fetching the controller's font to avoid ordering issues with nib unarchival. */ + [self updateFontAndLineHeight]; + } + return (CGFloat)10. + digitsToRepresentContentsLength * digitAdvance; +} + +- (void)updateMinimumViewWidth { + HFController *controller = [self controller]; + if (controller) { + unsigned long long contentsLength = [controller contentsLength]; + NSUInteger bytesPerLine = [controller bytesPerLine]; + /* We want to know how many lines are displayed. That's equal to the contentsLength divided by bytesPerLine rounded down, except in the case that we're at the end of a line, in which case we need to show one more. Hence adding 1 and dividing gets us the right result. */ + unsigned long long lineCount = contentsLength / bytesPerLine; + unsigned long long contentsLengthRoundedToLine = HFProductULL(lineCount, bytesPerLine) - 1; + NSUInteger digitCount = [HFLineCountingView digitsRequiredToDisplayLineNumber:contentsLengthRoundedToLine inFormat:lineNumberFormat]; + NSUInteger digitWidth = MAX(minimumDigitCount, digitCount); + if (digitWidth != digitsToRepresentContentsLength) { + digitsToRepresentContentsLength = digitWidth; + [self postMinimumViewWidthChangedNotification]; + } + } +} + +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine { + USE(bytesPerLine); + return [self preferredWidth]; +} + +- (HFLineNumberFormat)lineNumberFormat { + return lineNumberFormat; +} + +- (void)setLineNumberFormat:(HFLineNumberFormat)format { + HFASSERT(format < HFLineNumberFormatMAXIMUM); + lineNumberFormat = format; + [self updateLineNumberFormat]; + [self updateMinimumViewWidth]; +} + + +- (void)cycleLineNumberFormat { + lineNumberFormat = (lineNumberFormat + 1) % HFLineNumberFormatMAXIMUM; + [self updateLineNumberFormat]; + [self updateMinimumViewWidth]; +} + +- (void)initializeView { + [self updateFontAndLineHeight]; + [self updateLineNumberFormat]; + [self updateBytesPerLine]; + [self updateLineRangeToDraw]; + [self updateMinimumViewWidth]; +} + +- (void)controllerDidChange:(HFControllerPropertyBits)bits { + if (bits & HFControllerDisplayedLineRange) [self updateLineRangeToDraw]; + if (bits & HFControllerBytesPerLine) [self updateBytesPerLine]; + if (bits & (HFControllerFont | HFControllerLineHeight)) [self updateFontAndLineHeight]; + if (bits & (HFControllerContentLength)) [self updateMinimumViewWidth]; +} + +- (void)setMinimumDigitCount:(NSUInteger)width { + minimumDigitCount = width; + [self updateMinimumViewWidth]; +} + +- (NSUInteger)minimumDigitCount { + return minimumDigitCount; +} + +- (NSUInteger)digitCount { + return digitsToRepresentContentsLength; +} + ++ (NSPoint)defaultLayoutPosition { + return NSMakePoint(-1, 0); +} + +- (void)setInteriorShadowEdge:(NSInteger)edge { + self->interiorShadowEdge = edge; + if ([self isViewLoaded]) { + [[self view] setNeedsDisplay:YES]; + } +} + +- (NSInteger)interiorShadowEdge { + return interiorShadowEdge; +} + + +- (void)setBorderColor:(NSColor *)color { + [_borderColor autorelease]; + _borderColor = [color copy]; + if ([self isViewLoaded]) { + [[self view] setNeedsDisplay:YES]; + } +} + +- (void)setBackgroundColor:(NSColor *)color { + [_backgroundColor autorelease]; + _backgroundColor = [color copy]; + if ([self isViewLoaded]) { + [[self view] setNeedsDisplay:YES]; + } +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFLineCountingView.h b/thirdparty/SameBoy-old/HexFiend/HFLineCountingView.h new file mode 100644 index 000000000..2eb90af98 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFLineCountingView.h @@ -0,0 +1,32 @@ +// +// HFLineCountingView.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + +@interface HFLineCountingView : NSView { + NSLayoutManager *layoutManager; + NSTextStorage *textStorage; + NSTextContainer *textContainer; + NSDictionary *textAttributes; + + unsigned long long storedLineIndex; + NSUInteger storedLineCount; + BOOL useStringDrawingPath; + BOOL registeredForAppNotifications; +} + +@property (nonatomic, copy) NSFont *font; +@property (nonatomic) CGFloat lineHeight; +@property (nonatomic) HFFPRange lineRangeToDraw; +@property (nonatomic) NSUInteger bytesPerLine; +@property (nonatomic) HFLineNumberFormat lineNumberFormat; +@property (nonatomic, assign) HFLineCountingRepresenter *representer; + ++ (NSUInteger)digitsRequiredToDisplayLineNumber:(unsigned long long)lineNumber inFormat:(HFLineNumberFormat)format; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFLineCountingView.m b/thirdparty/SameBoy-old/HexFiend/HFLineCountingView.m new file mode 100644 index 000000000..080599b00 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFLineCountingView.m @@ -0,0 +1,675 @@ +// +// HFLineCountingView.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import + +#define TIME_LINE_NUMBERS 0 + +#define HEX_LINE_NUMBERS_HAVE_0X_PREFIX 0 + +#define INVALID_LINE_COUNT NSUIntegerMax + +#if TIME_LINE_NUMBERS +@interface HFTimingTextView : NSTextView +@end +@implementation HFTimingTextView +- (void)drawRect:(NSRect)rect { + CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); + [super drawRect:rect]; + CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent(); + NSLog(@"TextView line number time: %f", endTime - startTime); +} +@end +#endif + +@implementation HFLineCountingView + +- (void)_sharedInitLineCountingView { + layoutManager = [[NSLayoutManager alloc] init]; + textStorage = [[NSTextStorage alloc] init]; + [textStorage addLayoutManager:layoutManager]; + textContainer = [[NSTextContainer alloc] init]; + [textContainer setLineFragmentPadding:(CGFloat)5]; + [textContainer setContainerSize:NSMakeSize(self.bounds.size.width, [textContainer containerSize].height)]; + [layoutManager addTextContainer:textContainer]; +} + +- (instancetype)initWithFrame:(NSRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self _sharedInitLineCountingView]; + } + return self; +} + +- (void)dealloc { + HFUnregisterViewForWindowAppearanceChanges(self, registeredForAppNotifications); + [_font release]; + [layoutManager release]; + [textContainer release]; + [textStorage release]; + [textAttributes release]; + [super dealloc]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeObject:_font forKey:@"HFFont"]; + [coder encodeDouble:_lineHeight forKey:@"HFLineHeight"]; + [coder encodeObject:_representer forKey:@"HFRepresenter"]; + [coder encodeInt64:_bytesPerLine forKey:@"HFBytesPerLine"]; + [coder encodeInt64:_lineNumberFormat forKey:@"HFLineNumberFormat"]; + [coder encodeBool:useStringDrawingPath forKey:@"HFUseStringDrawingPath"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + [self _sharedInitLineCountingView]; + _font = [[coder decodeObjectForKey:@"HFFont"] retain]; + _lineHeight = (CGFloat)[coder decodeDoubleForKey:@"HFLineHeight"]; + _representer = [coder decodeObjectForKey:@"HFRepresenter"]; + _bytesPerLine = (NSUInteger)[coder decodeInt64ForKey:@"HFBytesPerLine"]; + _lineNumberFormat = (NSUInteger)[coder decodeInt64ForKey:@"HFLineNumberFormat"]; + useStringDrawingPath = [coder decodeBoolForKey:@"HFUseStringDrawingPath"]; + return self; +} + +- (BOOL)isFlipped { return YES; } + +- (void)getLineNumberFormatString:(char *)outString length:(NSUInteger)length { + HFLineNumberFormat format = self.lineNumberFormat; + if (format == HFLineNumberFormatDecimal) { + strlcpy(outString, "%llu", length); + } + else if (format == HFLineNumberFormatHexadecimal) { +#if HEX_LINE_NUMBERS_HAVE_0X_PREFIX + // we want a format string like 0x%08llX + snprintf(outString, length, "0x%%0%lullX", (unsigned long)self.representer.digitCount - 2); +#else + // we want a format string like %08llX + snprintf(outString, length, "%%0%lullX", (unsigned long)self.representer.digitCount); +#endif + } + else { + strlcpy(outString, "", length); + } +} + +- (void)windowDidChangeKeyStatus:(NSNotification *)note { + USE(note); + [self setNeedsDisplay:YES]; +} + +- (void)viewDidMoveToWindow { + HFRegisterViewForWindowAppearanceChanges(self, @selector(windowDidChangeKeyStatus:), !registeredForAppNotifications); + registeredForAppNotifications = YES; + [super viewDidMoveToWindow]; +} + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow { + HFUnregisterViewForWindowAppearanceChanges(self, NO); + [super viewWillMoveToWindow:newWindow]; +} + +- (void)drawDividerWithClip:(NSRect)clipRect { + USE(clipRect); + + +#if 1 + NSInteger edges = _representer.borderedEdges; + NSRect bounds = self.bounds; + + + // -1 means to draw no edges + if (edges == -1) { + edges = 0; + } + + [_representer.borderColor set]; + + if ((edges & (1 << NSMinXEdge)) > 0) { + NSRect lineRect = bounds; + lineRect.size.width = 1; + lineRect.origin.x = 0; + if (NSIntersectsRect(lineRect, clipRect)) { + NSRectFill(lineRect); + } + } + + if ((edges & (1 << NSMaxXEdge)) > 0) { + NSRect lineRect = bounds; + lineRect.size.width = 1; + lineRect.origin.x = NSMaxX(bounds) - lineRect.size.width; + if (NSIntersectsRect(lineRect, clipRect)) { + NSRectFill(lineRect); + } + } + + if ((edges & (1 << NSMinYEdge)) > 0) { + NSRect lineRect = bounds; + lineRect.size.height = 1; + lineRect.origin.y = 0; + if (NSIntersectsRect(lineRect, clipRect)) { + NSRectFill(lineRect); + } + } + + if ((edges & (1 << NSMaxYEdge)) > 0) { + NSRect lineRect = bounds; + lineRect.size.height = 1; + lineRect.origin.y = NSMaxY(bounds) - lineRect.size.height; + if (NSIntersectsRect(lineRect, clipRect)) { + NSRectFill(lineRect); + } + } + + + // Backwards compatibility to always draw a border on the edge with the interior shadow + + NSRect lineRect = bounds; + lineRect.size.width = 1; + NSInteger shadowEdge = _representer.interiorShadowEdge; + if (shadowEdge == NSMaxXEdge) { + lineRect.origin.x = NSMaxX(bounds) - lineRect.size.width; + } else if (shadowEdge == NSMinXEdge) { + lineRect.origin.x = NSMinX(bounds); + } else { + lineRect = NSZeroRect; + } + + if (NSIntersectsRect(lineRect, clipRect)) { + NSRectFill(lineRect); + } + +#else + + + if (NSIntersectsRect(lineRect, clipRect)) { + // this looks better when we have no shadow + [[NSColor lightGrayColor] set]; + NSRect bounds = self.bounds; + NSRect lineRect = bounds; + lineRect.origin.x += lineRect.size.width - 2; + lineRect.size.width = 1; + NSRectFill(NSIntersectionRect(lineRect, clipRect)); + [[NSColor whiteColor] set]; + lineRect.origin.x += 1; + NSRectFill(NSIntersectionRect(lineRect, clipRect)); + } +#endif +} + +static inline int common_prefix_length(const char *a, const char *b) { + int i; + for (i=0; ; i++) { + char ac = a[i]; + char bc = b[i]; + if (ac != bc || ac == 0 || bc == 0) break; + } + return i; +} + +/* Drawing with NSLayoutManager is necessary because the 10_2 typesetting behavior used by the old string drawing does the wrong thing for fonts like Bitstream Vera Sans Mono. Also it's an optimization for drawing the shadow. */ +- (void)drawLineNumbersWithClipLayoutManagerPerLine:(NSRect)clipRect { +#if TIME_LINE_NUMBERS + CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); +#endif + NSUInteger previousTextStorageCharacterCount = [textStorage length]; + + CGFloat verticalOffset = ld2f(_lineRangeToDraw.location - floorl(_lineRangeToDraw.location)); + NSRect textRect = self.bounds; + textRect.size.height = _lineHeight; + textRect.origin.y -= verticalOffset * _lineHeight; + unsigned long long lineIndex = HFFPToUL(floorl(_lineRangeToDraw.location)); + unsigned long long lineValue = lineIndex * _bytesPerLine; + NSUInteger linesRemaining = ll2l(HFFPToUL(ceill(_lineRangeToDraw.length + _lineRangeToDraw.location) - floorl(_lineRangeToDraw.location))); + char previousBuff[256]; + int previousStringLength = (int)previousTextStorageCharacterCount; + BOOL conversionResult = [[textStorage string] getCString:previousBuff maxLength:sizeof previousBuff encoding:NSASCIIStringEncoding]; + HFASSERT(conversionResult); + while (linesRemaining--) { + char formatString[64]; + [self getLineNumberFormatString:formatString length:sizeof formatString]; + + if (NSIntersectsRect(textRect, clipRect)) { + NSString *replacementCharacters = nil; + NSRange replacementRange; + char buff[256]; + int newStringLength = snprintf(buff, sizeof buff, formatString, lineValue); + HFASSERT(newStringLength > 0); + int prefixLength = common_prefix_length(previousBuff, buff); + HFASSERT(prefixLength <= newStringLength); + HFASSERT(prefixLength <= previousStringLength); + replacementRange = NSMakeRange(prefixLength, previousStringLength - prefixLength); + replacementCharacters = [[NSString alloc] initWithBytesNoCopy:buff + prefixLength length:newStringLength - prefixLength encoding:NSASCIIStringEncoding freeWhenDone:NO]; + NSUInteger glyphCount; + [textStorage replaceCharactersInRange:replacementRange withString:replacementCharacters]; + if (previousTextStorageCharacterCount == 0) { + NSDictionary *atts = [[NSDictionary alloc] initWithObjectsAndKeys:_font, NSFontAttributeName, [NSColor controlTextColor], NSForegroundColorAttributeName, nil]; + [textStorage setAttributes:atts range:NSMakeRange(0, newStringLength)]; + [atts release]; + } + glyphCount = [layoutManager numberOfGlyphs]; + if (glyphCount > 0) { + CGFloat maxX = NSMaxX([layoutManager lineFragmentUsedRectForGlyphAtIndex:glyphCount - 1 effectiveRange:NULL]); + [layoutManager drawGlyphsForGlyphRange:NSMakeRange(0, glyphCount) atPoint:NSMakePoint(textRect.origin.x + textRect.size.width - maxX, textRect.origin.y)]; + } + previousTextStorageCharacterCount = newStringLength; + [replacementCharacters release]; + memcpy(previousBuff, buff, newStringLength + 1); + previousStringLength = newStringLength; + } + textRect.origin.y += _lineHeight; + lineIndex++; + lineValue = HFSum(lineValue, _bytesPerLine); + } +#if TIME_LINE_NUMBERS + CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent(); + NSLog(@"Line number time: %f", endTime - startTime); +#endif +} + +- (void)drawLineNumbersWithClipStringDrawing:(NSRect)clipRect { + CGFloat verticalOffset = ld2f(_lineRangeToDraw.location - floorl(_lineRangeToDraw.location)); + NSRect textRect = self.bounds; + textRect.size.height = _lineHeight; + textRect.size.width -= 5; + textRect.origin.y -= verticalOffset * _lineHeight + 1; + unsigned long long lineIndex = HFFPToUL(floorl(_lineRangeToDraw.location)); + unsigned long long lineValue = lineIndex * _bytesPerLine; + NSUInteger linesRemaining = ll2l(HFFPToUL(ceill(_lineRangeToDraw.length + _lineRangeToDraw.location) - floorl(_lineRangeToDraw.location))); + if (! textAttributes) { + NSMutableParagraphStyle *mutableStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + [mutableStyle setAlignment:NSRightTextAlignment]; + NSParagraphStyle *paragraphStyle = [mutableStyle copy]; + [mutableStyle release]; + textAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:_font, NSFontAttributeName, [NSColor controlTextColor], NSForegroundColorAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil]; + [paragraphStyle release]; + } + + char formatString[64]; + [self getLineNumberFormatString:formatString length:sizeof formatString]; + + while (linesRemaining--) { + if (NSIntersectsRect(textRect, clipRect)) { + char buff[256]; + int newStringLength = snprintf(buff, sizeof buff, formatString, lineValue); + HFASSERT(newStringLength > 0); + NSString *string = [[NSString alloc] initWithBytesNoCopy:buff length:newStringLength encoding:NSASCIIStringEncoding freeWhenDone:NO]; + [string drawInRect:textRect withAttributes:textAttributes]; + [string release]; + } + textRect.origin.y += _lineHeight; + lineIndex++; + if (linesRemaining > 0) lineValue = HFSum(lineValue, _bytesPerLine); //we could do this unconditionally, but then we risk overflow + } +} + +- (NSUInteger)characterCountForLineRange:(HFRange)range { + HFASSERT(range.length <= NSUIntegerMax); + NSUInteger characterCount; + + NSUInteger lineCount = ll2l(range.length); + const NSUInteger stride = _bytesPerLine; + HFLineCountingRepresenter *rep = self.representer; + HFLineNumberFormat format = self.lineNumberFormat; + if (format == HFLineNumberFormatDecimal) { + unsigned long long lineValue = HFProductULL(range.location, _bytesPerLine); + characterCount = lineCount /* newlines */; + while (lineCount--) { + characterCount += HFCountDigitsBase10(lineValue); + lineValue += stride; + } + } + else if (format == HFLineNumberFormatHexadecimal) { + characterCount = ([rep digitCount] + 1) * lineCount; // +1 for newlines + } + else { + characterCount = -1; + } + return characterCount; +} + +- (NSString *)newLineStringForRange:(HFRange)range { + HFASSERT(range.length <= NSUIntegerMax); + if(range.length == 0) + return [[NSString alloc] init]; // Placate the analyzer. + + NSUInteger lineCount = ll2l(range.length); + const NSUInteger stride = _bytesPerLine; + unsigned long long lineValue = HFProductULL(range.location, _bytesPerLine); + NSUInteger characterCount = [self characterCountForLineRange:range]; + char *buffer = check_malloc(characterCount); + NSUInteger bufferIndex = 0; + + char formatString[64]; + [self getLineNumberFormatString:formatString length:sizeof formatString]; + + while (lineCount--) { + int charCount = sprintf(buffer + bufferIndex, formatString, lineValue + self.representer.valueOffset); + HFASSERT(charCount > 0); + bufferIndex += charCount; + buffer[bufferIndex++] = '\n'; + lineValue += stride; + } + HFASSERT(bufferIndex == characterCount); + + NSString *string = [[NSString alloc] initWithBytesNoCopy:(void *)buffer length:bufferIndex encoding:NSASCIIStringEncoding freeWhenDone:YES]; + return string; +} + +- (void)updateLayoutManagerWithLineIndex:(unsigned long long)startingLineIndex lineCount:(NSUInteger)linesRemaining { + const BOOL debug = NO; + [textStorage beginEditing]; + + if (storedLineCount == INVALID_LINE_COUNT) { + /* This usually indicates that our bytes per line or line number format changed, and we need to just recalculate everything */ + NSString *string = [self newLineStringForRange:HFRangeMake(startingLineIndex, linesRemaining)]; + [textStorage replaceCharactersInRange:NSMakeRange(0, [textStorage length]) withString:string]; + [string release]; + + } + else { + HFRange leftRangeToReplace, rightRangeToReplace; + HFRange leftRangeToStore, rightRangeToStore; + + HFRange oldRange = HFRangeMake(storedLineIndex, storedLineCount); + HFRange newRange = HFRangeMake(startingLineIndex, linesRemaining); + HFRange rangeToPreserve = HFIntersectionRange(oldRange, newRange); + + if (rangeToPreserve.length == 0) { + leftRangeToReplace = oldRange; + leftRangeToStore = newRange; + rightRangeToReplace = HFZeroRange; + rightRangeToStore = HFZeroRange; + } + else { + if (debug) NSLog(@"Preserving %llu", rangeToPreserve.length); + HFASSERT(HFRangeIsSubrangeOfRange(rangeToPreserve, newRange)); + HFASSERT(HFRangeIsSubrangeOfRange(rangeToPreserve, oldRange)); + const unsigned long long maxPreserve = HFMaxRange(rangeToPreserve); + leftRangeToReplace = HFRangeMake(oldRange.location, rangeToPreserve.location - oldRange.location); + leftRangeToStore = HFRangeMake(newRange.location, rangeToPreserve.location - newRange.location); + rightRangeToReplace = HFRangeMake(maxPreserve, HFMaxRange(oldRange) - maxPreserve); + rightRangeToStore = HFRangeMake(maxPreserve, HFMaxRange(newRange) - maxPreserve); + } + + if (debug) NSLog(@"Changing %@ -> %@", HFRangeToString(oldRange), HFRangeToString(newRange)); + if (debug) NSLog(@"LEFT: %@ -> %@", HFRangeToString(leftRangeToReplace), HFRangeToString(leftRangeToStore)); + if (debug) NSLog(@"RIGHT: %@ -> %@", HFRangeToString(rightRangeToReplace), HFRangeToString(rightRangeToStore)); + + HFASSERT(leftRangeToReplace.length == 0 || HFRangeIsSubrangeOfRange(leftRangeToReplace, oldRange)); + HFASSERT(rightRangeToReplace.length == 0 || HFRangeIsSubrangeOfRange(rightRangeToReplace, oldRange)); + + if (leftRangeToReplace.length > 0 || leftRangeToStore.length > 0) { + NSUInteger charactersToDelete = [self characterCountForLineRange:leftRangeToReplace]; + NSRange rangeToDelete = NSMakeRange(0, charactersToDelete); + if (leftRangeToStore.length == 0) { + [textStorage deleteCharactersInRange:rangeToDelete]; + if (debug) NSLog(@"Left deleting text range %@", NSStringFromRange(rangeToDelete)); + } + else { + NSString *leftRangeString = [self newLineStringForRange:leftRangeToStore]; + [textStorage replaceCharactersInRange:rangeToDelete withString:leftRangeString]; + if (debug) NSLog(@"Replacing text range %@ with %@", NSStringFromRange(rangeToDelete), leftRangeString); + [leftRangeString release]; + } + } + + if (rightRangeToReplace.length > 0 || rightRangeToStore.length > 0) { + NSUInteger charactersToDelete = [self characterCountForLineRange:rightRangeToReplace]; + NSUInteger stringLength = [textStorage length]; + HFASSERT(charactersToDelete <= stringLength); + NSRange rangeToDelete = NSMakeRange(stringLength - charactersToDelete, charactersToDelete); + if (rightRangeToStore.length == 0) { + [textStorage deleteCharactersInRange:rangeToDelete]; + if (debug) NSLog(@"Right deleting text range %@", NSStringFromRange(rangeToDelete)); + } + else { + NSString *rightRangeString = [self newLineStringForRange:rightRangeToStore]; + [textStorage replaceCharactersInRange:rangeToDelete withString:rightRangeString]; + if (debug) NSLog(@"Replacing text range %@ with %@ (for range %@)", NSStringFromRange(rangeToDelete), rightRangeString, HFRangeToString(rightRangeToStore)); + [rightRangeString release]; + } + } + } + + if (!textAttributes) { + NSMutableParagraphStyle *mutableStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + [mutableStyle setAlignment:NSRightTextAlignment]; + NSParagraphStyle *paragraphStyle = [mutableStyle copy]; + [mutableStyle release]; + textAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:_font, NSFontAttributeName, [NSColor controlTextColor], NSForegroundColorAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil]; + [paragraphStyle release]; + [textStorage setAttributes:textAttributes range:NSMakeRange(0, [textStorage length])]; + } + + [textStorage endEditing]; + +#if ! NDEBUG + NSString *comparisonString = [self newLineStringForRange:HFRangeMake(startingLineIndex, linesRemaining)]; + if (! [comparisonString isEqualToString:[textStorage string]]) { + NSLog(@"Not equal!"); + NSLog(@"Expected:\n%@", comparisonString); + NSLog(@"Actual:\n%@", [textStorage string]); + } + HFASSERT([comparisonString isEqualToString:[textStorage string]]); + [comparisonString release]; +#endif + + storedLineIndex = startingLineIndex; + storedLineCount = linesRemaining; +} + +- (void)drawLineNumbersWithClipSingleStringDrawing:(NSRect)clipRect { + USE(clipRect); + unsigned long long lineIndex = HFFPToUL(floorl(_lineRangeToDraw.location)); + NSUInteger linesRemaining = ll2l(HFFPToUL(ceill(_lineRangeToDraw.length + _lineRangeToDraw.location) - floorl(_lineRangeToDraw.location))); + + CGFloat linesToVerticallyOffset = ld2f(_lineRangeToDraw.location - floorl(_lineRangeToDraw.location)); + CGFloat verticalOffset = linesToVerticallyOffset * _lineHeight + 1.5; + NSRect textRect = self.bounds; + textRect.size.width -= 5; + textRect.origin.y -= verticalOffset; + textRect.size.height += verticalOffset + _lineHeight; + + NSMutableParagraphStyle *mutableStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + [mutableStyle setAlignment:NSRightTextAlignment]; + [mutableStyle setMinimumLineHeight:_lineHeight]; + [mutableStyle setMaximumLineHeight:_lineHeight]; + NSParagraphStyle *paragraphStyle = [mutableStyle copy]; + [mutableStyle release]; + NSColor *color = [[NSColor textColor] colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + color = [NSColor colorWithRed:color.redComponent green:color.greenComponent blue:color.blueComponent alpha:0.75]; + NSDictionary *_textAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:[NSFont fontWithName:_font.fontName size:9], NSFontAttributeName, color, NSForegroundColorAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil]; + [paragraphStyle release]; + + + NSString *string = [self newLineStringForRange:HFRangeMake(lineIndex, linesRemaining)]; + [string drawInRect:textRect withAttributes:_textAttributes]; + [string release]; + [_textAttributes release]; +} + +- (void)drawLineNumbersWithClipSingleStringCellDrawing:(NSRect)clipRect { + USE(clipRect); + const CGFloat cellTextContainerPadding = 2.f; + unsigned long long lineIndex = HFFPToUL(floorl(_lineRangeToDraw.location)); + NSUInteger linesRemaining = ll2l(HFFPToUL(ceill(_lineRangeToDraw.length + _lineRangeToDraw.location) - floorl(_lineRangeToDraw.location))); + + CGFloat linesToVerticallyOffset = ld2f(_lineRangeToDraw.location - floorl(_lineRangeToDraw.location)); + CGFloat verticalOffset = linesToVerticallyOffset * _lineHeight + 1; + NSRect textRect = self.bounds; + textRect.size.width -= 5; + textRect.origin.y -= verticalOffset; + textRect.origin.x += cellTextContainerPadding; + textRect.size.height += verticalOffset; + + if (! textAttributes) { + NSMutableParagraphStyle *mutableStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + [mutableStyle setAlignment:NSRightTextAlignment]; + [mutableStyle setMinimumLineHeight:_lineHeight]; + [mutableStyle setMaximumLineHeight:_lineHeight]; + NSParagraphStyle *paragraphStyle = [mutableStyle copy]; + [mutableStyle release]; + textAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:_font, NSFontAttributeName, [NSColor controlTextColor], NSForegroundColorAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil]; + [paragraphStyle release]; + } + + NSString *string = [self newLineStringForRange:HFRangeMake(lineIndex, linesRemaining)]; + NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:string attributes:textAttributes]; + [string release]; + NSCell *cell = [[NSCell alloc] initTextCell:@""]; + [cell setAttributedStringValue:attributedString]; + [cell drawWithFrame:textRect inView:self]; + [[NSColor purpleColor] set]; + NSFrameRect(textRect); + [cell release]; + [attributedString release]; +} + +- (void)drawLineNumbersWithClipFullLayoutManager:(NSRect)clipRect { + USE(clipRect); + unsigned long long lineIndex = HFFPToUL(floorl(_lineRangeToDraw.location)); + NSUInteger linesRemaining = ll2l(HFFPToUL(ceill(_lineRangeToDraw.length + _lineRangeToDraw.location) - floorl(_lineRangeToDraw.location))); + if (lineIndex != storedLineIndex || linesRemaining != storedLineCount) { + [self updateLayoutManagerWithLineIndex:lineIndex lineCount:linesRemaining]; + } + + CGFloat verticalOffset = ld2f(_lineRangeToDraw.location - floorl(_lineRangeToDraw.location)); + + NSPoint textPoint = self.bounds.origin; + textPoint.y -= verticalOffset * _lineHeight; + [layoutManager drawGlyphsForGlyphRange:NSMakeRange(0, [layoutManager numberOfGlyphs]) atPoint:textPoint]; +} + +- (void)drawLineNumbersWithClip:(NSRect)clipRect { +#if TIME_LINE_NUMBERS + CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); +#endif + NSInteger drawingMode = 3; // (useStringDrawingPath ? 1 : 3); + switch (drawingMode) { + // Drawing can't be done right if fonts are wider than expected, but all + // of these have rather nasty behavior in that case. I've commented what + // that behavior is; the comment is hypothetical 'could' if it shouldn't + // actually be a problem in practice. + // TODO: Make a drawing mode that is "Fonts could get clipped if too wide" + // because that seems like better behavior than any of these. + case 0: + // Most fonts are too wide and every character gets piled on right (unreadable). + [self drawLineNumbersWithClipLayoutManagerPerLine:clipRect]; + break; + case 1: + // Last characters could get omitted (*not* clipped) if too wide. + // Also, most fonts have bottoms clipped (very unsigntly). + [self drawLineNumbersWithClipStringDrawing:clipRect]; + break; + case 2: + // Most fonts are too wide and wrap (breaks numbering). + [self drawLineNumbersWithClipFullLayoutManager:clipRect]; + break; + case 3: + // Fonts could wrap if too wide (breaks numbering). + // *Note that that this is the only mode that generally works.* + [self drawLineNumbersWithClipSingleStringDrawing:clipRect]; + break; + case 4: + // Most fonts are too wide and wrap (breaks numbering). + [self drawLineNumbersWithClipSingleStringCellDrawing:clipRect]; + break; + } +#if TIME_LINE_NUMBERS + CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent(); + NSLog(@"Line number time: %f", endTime - startTime); +#endif +} + +- (void)drawRect:(NSRect)clipRect { + [self drawDividerWithClip:clipRect]; + [self drawLineNumbersWithClip:clipRect]; +} + +- (void)setLineRangeToDraw:(HFFPRange)range { + if (! HFFPRangeEqualsRange(range, _lineRangeToDraw)) { + _lineRangeToDraw = range; + [self setNeedsDisplay:YES]; + } +} + +- (void)setBytesPerLine:(NSUInteger)val { + if (_bytesPerLine != val) { + _bytesPerLine = val; + storedLineCount = INVALID_LINE_COUNT; + [self setNeedsDisplay:YES]; + } +} + +- (void)setLineNumberFormat:(HFLineNumberFormat)format { + if (format != _lineNumberFormat) { + _lineNumberFormat = format; + storedLineCount = INVALID_LINE_COUNT; + [self setNeedsDisplay:YES]; + } +} + +- (BOOL)canUseStringDrawingPathForFont:(NSFont *)testFont { + NSString *name = [testFont fontName]; + // No, Menlo does not work here. + return [name isEqualToString:@"Monaco"] || [name isEqualToString:@"Courier"] || [name isEqualToString:@"Consolas"]; +} + +- (void)setFont:(NSFont *)val { + if (val != _font) { + [_font release]; + _font = [val copy]; + [textStorage deleteCharactersInRange:NSMakeRange(0, [textStorage length])]; //delete the characters so we know to set the font next time we render + [textAttributes release]; + textAttributes = nil; + storedLineCount = INVALID_LINE_COUNT; + useStringDrawingPath = [self canUseStringDrawingPathForFont:_font]; + [self setNeedsDisplay:YES]; + } +} + +- (void)setLineHeight:(CGFloat)height { + if (_lineHeight != height) { + _lineHeight = height; + [self setNeedsDisplay:YES]; + } +} + +- (void)setFrameSize:(NSSize)size { + [super setFrameSize:size]; + [textContainer setContainerSize:NSMakeSize(self.bounds.size.width, [textContainer containerSize].height)]; +} + +- (void)mouseDown:(NSEvent *)event { + USE(event); + // [_representer cycleLineNumberFormat]; +} + +- (void)scrollWheel:(NSEvent *)scrollEvent { + [_representer.controller scrollWithScrollEvent:scrollEvent]; +} + ++ (NSUInteger)digitsRequiredToDisplayLineNumber:(unsigned long long)lineNumber inFormat:(HFLineNumberFormat)format { + switch (format) { + case HFLineNumberFormatDecimal: return HFCountDigitsBase10(lineNumber); +#if HEX_LINE_NUMBERS_HAVE_0X_PREFIX + case HFLineNumberFormatHexadecimal: return 2 + HFCountDigitsBase16(lineNumber); +#else + case HFLineNumberFormatHexadecimal: return HFCountDigitsBase16(lineNumber); +#endif + default: return 0; + } +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.h b/thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.h new file mode 100644 index 000000000..d09c57944 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.h @@ -0,0 +1,51 @@ +// +// HFPasteboardOwner.h +// HexFiend_2 +// +// Copyright 2008 ridiculous_fish. All rights reserved. +// + +#import + +@class HFByteArray; + +extern NSString *const HFPrivateByteArrayPboardType; + +@interface HFPasteboardOwner : NSObject { + @private + HFByteArray *byteArray; + NSPasteboard *pasteboard; //not retained + unsigned long long dataAmountToCopy; + NSUInteger bytesPerLine; + BOOL retainedSelfOnBehalfOfPboard; + BOOL backgroundCopyOperationFinished; + BOOL didStartModalSessionForBackgroundCopyOperation; +} + +/* Creates an HFPasteboardOwner to own the given pasteboard with the given types. Note that the NSPasteboard retains its owner. */ ++ (id)ownPasteboard:(NSPasteboard *)pboard forByteArray:(HFByteArray *)array withTypes:(NSArray *)types; +- (HFByteArray *)byteArray; + +/* Performs a copy to pasteboard with progress reporting. This must be overridden if you support types other than the private pboard type. */ +- (void)writeDataInBackgroundToPasteboard:(NSPasteboard *)pboard ofLength:(unsigned long long)length forType:(NSString *)type trackingProgress:(id)tracker; + +/* NSPasteboard delegate methods, declared here to indicate that subclasses should call super */ +- (void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type; +- (void)pasteboardChangedOwner:(NSPasteboard *)pboard; + +/* Useful property that several pasteboard types want to know */ +@property (nonatomic) NSUInteger bytesPerLine; + +/* For efficiency, Hex Fiend writes pointers to HFByteArrays into pasteboards. In the case that the user quits and relaunches Hex Fiend, we don't want to read a pointer from the old process, so each process we generate a UUID. This is constant for the lifetime of the process. */ ++ (NSString *)uuid; + +/* Unpacks a byte array from a pasteboard, preferring HFPrivateByteArrayPboardType */ ++ (HFByteArray *)unpackByteArrayFromPasteboard:(NSPasteboard *)pasteboard; + +/* Used to handle the case where copying data will require a lot of memory and give the user a chance to confirm. */ +- (unsigned long long)amountToCopyForDataLength:(unsigned long long)numBytes stringLength:(unsigned long long)stringLength; + +/* Must be overridden to return the length of a string containing this number of bytes. */ +- (unsigned long long)stringLengthForDataLength:(unsigned long long)dataLength; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.m b/thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.m new file mode 100644 index 000000000..0ca341d63 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFPasteboardOwner.m @@ -0,0 +1,287 @@ +// +// HFPasteboardOwner.m +// HexFiend_2 +// +// Copyright 2008 ridiculous_fish. All rights reserved. +// + +#import +#import +#import +#import + +NSString *const HFPrivateByteArrayPboardType = @"HFPrivateByteArrayPboardType"; + +@implementation HFPasteboardOwner + ++ (void)initialize { + if (self == [HFPasteboardOwner class]) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(prepareCommonPasteboardsForChangeInFileNotification:) name:HFPrepareForChangeInFileNotification object:nil]; + } +} + +- (instancetype)initWithPasteboard:(NSPasteboard *)pboard forByteArray:(HFByteArray *)array withTypes:(NSArray *)types { + REQUIRE_NOT_NULL(pboard); + REQUIRE_NOT_NULL(array); + REQUIRE_NOT_NULL(types); + self = [super init]; + byteArray = [array retain]; + pasteboard = pboard; + [pasteboard declareTypes:types owner:self]; + + // get notified when we're about to write a file, so that if they're overwriting a file backing part of our byte array, we can properly clear or preserve our pasteboard + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeInFileNotification:) name:HFPrepareForChangeInFileNotification object:nil]; + + return self; +} ++ (id)ownPasteboard:(NSPasteboard *)pboard forByteArray:(HFByteArray *)array withTypes:(NSArray *)types { + return [[[self alloc] initWithPasteboard:pboard forByteArray:array withTypes:types] autorelease]; +} + +- (void)tearDownPasteboardReferenceIfExists { + if (pasteboard) { + pasteboard = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self name:HFPrepareForChangeInFileNotification object:nil]; + } + if (retainedSelfOnBehalfOfPboard) { + CFRelease(self); + retainedSelfOnBehalfOfPboard = NO; + } +} + + ++ (HFByteArray *)_unpackByteArrayFromDictionary:(NSDictionary *)byteArrayDictionary { + HFByteArray *result = nil; + if (byteArrayDictionary) { + NSString *uuid = byteArrayDictionary[@"HFUUID"]; + if ([uuid isEqual:[self uuid]]) { + result = (HFByteArray *)[byteArrayDictionary[@"HFByteArray"] unsignedLongValue]; + } + } + return result; +} + ++ (HFByteArray *)unpackByteArrayFromPasteboard:(NSPasteboard *)pasteboard { + REQUIRE_NOT_NULL(pasteboard); + HFByteArray *result = [self _unpackByteArrayFromDictionary:[pasteboard propertyListForType:HFPrivateByteArrayPboardType]]; + return result; +} + +/* Try to fix up commonly named pasteboards when a file is about to be saved */ ++ (void)prepareCommonPasteboardsForChangeInFileNotification:(NSNotification *)notification { + const BOOL *cancellationPointer = [[notification userInfo][HFChangeInFileShouldCancelKey] pointerValue]; + if (*cancellationPointer) return; //don't do anything if someone requested cancellation + + NSDictionary *userInfo = [notification userInfo]; + NSArray *changedRanges = userInfo[HFChangeInFileModifiedRangesKey]; + HFFileReference *fileReference = [notification object]; + NSMutableDictionary *hint = userInfo[HFChangeInFileHintKey]; + + NSString * const names[] = {NSGeneralPboard, NSFindPboard, NSDragPboard}; + NSUInteger i; + for (i=0; i < sizeof names / sizeof *names; i++) { + NSPasteboard *pboard = [NSPasteboard pasteboardWithName:names[i]]; + HFByteArray *byteArray = [self unpackByteArrayFromPasteboard:pboard]; + if (byteArray && ! [byteArray clearDependenciesOnRanges:changedRanges inFile:fileReference hint:hint]) { + /* This pasteboard no longer works */ + [pboard declareTypes:@[] owner:nil]; + } + } +} + +- (void)changeInFileNotification:(NSNotification *)notification { + HFASSERT(pasteboard != nil); + HFASSERT(byteArray != nil); + NSDictionary *userInfo = [notification userInfo]; + const BOOL *cancellationPointer = [userInfo[HFChangeInFileShouldCancelKey] pointerValue]; + if (*cancellationPointer) return; //don't do anything if someone requested cancellation + NSMutableDictionary *hint = userInfo[HFChangeInFileHintKey]; + + NSArray *changedRanges = [notification userInfo][HFChangeInFileModifiedRangesKey]; + HFFileReference *fileReference = [notification object]; + if (! [byteArray clearDependenciesOnRanges:changedRanges inFile:fileReference hint:hint]) { + /* We can't do it */ + [self tearDownPasteboardReferenceIfExists]; + } +} + +- (void)dealloc { + [self tearDownPasteboardReferenceIfExists]; + [byteArray release]; + [super dealloc]; +} + +- (void)writeDataInBackgroundToPasteboard:(NSPasteboard *)pboard ofLength:(unsigned long long)length forType:(NSString *)type trackingProgress:(id)tracker { + USE(length); + USE(pboard); + USE(type); + USE(tracker); + UNIMPLEMENTED_VOID(); +} + +- (void)backgroundMoveDataToPasteboard:(NSString *)type { + @autoreleasepool { + [self writeDataInBackgroundToPasteboard:pasteboard ofLength:dataAmountToCopy forType:type trackingProgress:nil]; + [self performSelectorOnMainThread:@selector(backgroundMoveDataFinished:) withObject:nil waitUntilDone:NO]; + } +} + +- (void)backgroundMoveDataFinished:unused { + USE(unused); + HFASSERT(backgroundCopyOperationFinished == NO); + backgroundCopyOperationFinished = YES; + if (! didStartModalSessionForBackgroundCopyOperation) { + /* We haven't started the modal session, so make sure it never happens */ + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(beginModalSessionForBackgroundCopyOperation:) object:nil]; + CFRunLoopWakeUp(CFRunLoopGetCurrent()); + } + else { + /* We have started the modal session, so end it. */ + [NSApp stopModalWithCode:0]; + //stopModal: won't trigger unless we post a do-nothing event + NSEvent *event = [NSEvent otherEventWithType:NSApplicationDefined location:NSZeroPoint modifierFlags:0 timestamp:0 windowNumber:0 context:NULL subtype:0 data1:0 data2:0]; + [NSApp postEvent:event atStart:NO]; + } +} + +- (void)beginModalSessionForBackgroundCopyOperation:(id)unused { + USE(unused); + HFASSERT(backgroundCopyOperationFinished == NO); + HFASSERT(didStartModalSessionForBackgroundCopyOperation == NO); + didStartModalSessionForBackgroundCopyOperation = YES; +} + +- (BOOL)moveDataWithProgressReportingToPasteboard:(NSPasteboard *)pboard forType:(NSString *)type { + // The -[NSRunLoop runMode:beforeDate:] call in the middle of this function can cause it to be + // called reentrantly, which was previously causing leaks and use-after-free crashes. For + // some reason this happens basically always when copying lots of data into VMware Fusion. + // I'm not even sure what the ideal behavior would be here, but am fairly certain that this + // is the best that can be done without rewriting a portion of the background copying code. + // TODO: Figure out what the ideal behavior should be here. + + HFASSERT(pboard == pasteboard); + [self retain]; //resolving the pasteboard may release us, which deallocates us, which deallocates our tracker...make sure we survive through this function + /* Give the user a chance to request a smaller amount if it's really big */ + unsigned long long availableAmount = [byteArray length]; + unsigned long long amountToCopy = [self amountToCopyForDataLength:availableAmount stringLength:[self stringLengthForDataLength:availableAmount]]; + if (amountToCopy > 0) { + + backgroundCopyOperationFinished = NO; + didStartModalSessionForBackgroundCopyOperation = NO; + dataAmountToCopy = amountToCopy; + [NSThread detachNewThreadSelector:@selector(backgroundMoveDataToPasteboard:) toTarget:self withObject:type]; + [self performSelector:@selector(beginModalSessionForBackgroundCopyOperation:) withObject:nil afterDelay:1.0 inModes:@[NSModalPanelRunLoopMode]]; + while (! backgroundCopyOperationFinished) { + [[NSRunLoop currentRunLoop] runMode:NSModalPanelRunLoopMode beforeDate:[NSDate distantFuture]]; + } + } + [self release]; + return YES; +} + +- (void)pasteboardChangedOwner:(NSPasteboard *)pboard { + HFASSERT(pasteboard == pboard); + [self tearDownPasteboardReferenceIfExists]; +} + +- (HFByteArray *)byteArray { + return byteArray; +} + +- (void)pasteboard:(NSPasteboard *)pboard provideDataForType:(NSString *)type { + if (! pasteboard) { + /* Don't do anything, because we've torn down our pasteboard */ + return; + } + if ([type isEqualToString:HFPrivateByteArrayPboardType]) { + if (! retainedSelfOnBehalfOfPboard) { + retainedSelfOnBehalfOfPboard = YES; + CFRetain(self); + } + NSDictionary *dict = @{@"HFByteArray": @((unsigned long)byteArray), + @"HFUUID": [[self class] uuid]}; + [pboard setPropertyList:dict forType:type]; + } + else { + if (! [self moveDataWithProgressReportingToPasteboard:pboard forType:type]) { + [pboard setData:[NSData data] forType:type]; + } + } +} + +- (void)setBytesPerLine:(NSUInteger)val { bytesPerLine = val; } +- (NSUInteger)bytesPerLine { return bytesPerLine; } + ++ (NSString *)uuid { + static NSString *uuid; + if (! uuid) { + CFUUIDRef uuidRef = CFUUIDCreate(NULL); + uuid = (NSString *)CFUUIDCreateString(NULL, uuidRef); + CFRelease(uuidRef); + } + return uuid; +} + +- (unsigned long long)stringLengthForDataLength:(unsigned long long)dataLength { USE(dataLength); UNIMPLEMENTED(); } + +- (unsigned long long)amountToCopyForDataLength:(unsigned long long)numBytes stringLength:(unsigned long long)stringLength { + unsigned long long dataLengthResult, stringLengthResult; + NSInteger alertReturn = NSIntegerMax; + const unsigned long long copyOption1 = MAXIMUM_PASTEBOARD_SIZE_TO_EXPORT; + const unsigned long long copyOption2 = MINIMUM_PASTEBOARD_SIZE_TO_WARN_ABOUT; + NSString *option1String = HFDescribeByteCount(copyOption1); + NSString *option2String = HFDescribeByteCount(copyOption2); + NSString* dataSizeDescription = HFDescribeByteCount(stringLength); + if (stringLength >= MAXIMUM_PASTEBOARD_SIZE_TO_EXPORT) { + NSString *option1 = [@"Copy " stringByAppendingString:option1String]; + NSString *option2 = [@"Copy " stringByAppendingString:option2String]; + alertReturn = NSRunAlertPanel(@"Large Clipboard", @"The copied data would occupy %@ if written to the clipboard. This is larger than the system clipboard supports. Do you want to copy only part of the data?", @"Cancel", option1, option2, dataSizeDescription); + switch (alertReturn) { + case NSAlertDefaultReturn: + default: + stringLengthResult = 0; + break; + case NSAlertAlternateReturn: + stringLengthResult = copyOption1; + break; + case NSAlertOtherReturn: + stringLengthResult = copyOption2; + break; + } + + } + else if (stringLength >= MINIMUM_PASTEBOARD_SIZE_TO_WARN_ABOUT) { + NSString *option1 = [@"Copy " stringByAppendingString:HFDescribeByteCount(stringLength)]; + NSString *option2 = [@"Copy " stringByAppendingString:HFDescribeByteCount(copyOption2)]; + alertReturn = NSRunAlertPanel(@"Large Clipboard", @"The copied data would occupy %@ if written to the clipboard. Performing this copy may take a long time. Do you want to copy only part of the data?", @"Cancel", option1, option2, dataSizeDescription); + switch (alertReturn) { + case NSAlertDefaultReturn: + default: + stringLengthResult = 0; + break; + case NSAlertAlternateReturn: + stringLengthResult = stringLength; + break; + case NSAlertOtherReturn: + stringLengthResult = copyOption2; + break; + } + } + else { + /* Small enough to copy it all */ + stringLengthResult = stringLength; + } + + /* Convert from string length to data length */ + if (stringLengthResult == stringLength) { + dataLengthResult = numBytes; + } + else { + unsigned long long divisor = stringLength / numBytes; + dataLengthResult = stringLengthResult / divisor; + } + + return dataLengthResult; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFPrivilegedHelperConnection.h b/thirdparty/SameBoy-old/HexFiend/HFPrivilegedHelperConnection.h new file mode 100644 index 000000000..bbee7a9a6 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFPrivilegedHelperConnection.h @@ -0,0 +1,3 @@ +#ifndef HF_NO_PRIVILEGED_FILE_OPERATIONS +#define HF_NO_PRIVILEGED_FILE_OPERATIONS +#endif \ No newline at end of file diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFRepresenter.h new file mode 100644 index 000000000..1a15f3e73 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenter.h @@ -0,0 +1,121 @@ +// +// HFRepresenter.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + +/*! @class HFRepresenter + @brief The principal view class of Hex Fiend's MVC architecture. + + HFRepresenter is a class that visually represents some property of the HFController, such as the data (in various formats), the scroll position, the line number, etc. An HFRepresenter is added to an HFController and then gets notified of changes to various properties, through the controllerDidChange: methods. + + HFRepresenters also have a view, accessible through the -view method. The HFRepresenter is expected to update its view to reflect the relevant properties of its HFController. If the user can interact with the view, then the HFRepresenter should pass any changes down to the HFController, which will subsequently notify all HFRepresenters of the change. + + HFRepresenter is an abstract class, with a different subclass for each possible view type. Because HFController interacts with HFRepresenters, rather than views directly, an HFRepresenter can use standard Cocoa views and controls. + + To add a new view type: + + -# Create a subclass of HFRepresenter + -# Override \c -createView to return a view (note that this method should transfer ownership) + -# Override \c -controllerDidChange:, checking the bitmask to see what properties have changed and updating your view as appropriate + -# If you plan on using this view together with other views, override \c +defaultLayoutPosition to control how your view gets positioned in an HFLayoutRepresenter + -# If your view's width depends on the properties of the controller, override some of the measurement methods, such as \c +maximumBytesPerLineForViewWidth:, so that your view gets sized correctly + +*/ +@interface HFRepresenter : NSObject { + @private + id view; + HFController *controller; + NSPoint layoutPosition; +} + +/*! @name View management + Methods related to accessing and initializing the representer's view. +*/ +//@{ +/*! Returns the view for the receiver, creating it if necessary. The view for the HFRepresenter is initially nil. When the \c -view method is called, if the view is nil, \c -createView is called and then the result is stored. This method should not be overridden; however you may want to call it to access the view. +*/ +- (id)view; + +/*! Returns YES if the view has been created, NO if it has not. To create the view, call the view method. + */ +- (BOOL)isViewLoaded; + +/*! Override point for creating the view displaying this representation. This is called on your behalf the first time the \c -view method is called, so you would not want to call this explicitly; however this method must be overridden. This follows the "create" rule, and so it should return a retained view. +*/ +- (NSView *)createView NS_RETURNS_RETAINED; + +/*! Override point for initialization of view, after the HFRepresenter has the view set as its -view property. The default implementation does nothing. +*/ +- (void)initializeView; + +//@} + +/*! @name Accessing the HFController +*/ +//@{ +/*! Returns the HFController for the receiver. This is set by the controller from the call to \c addRepresenter:. A representer can only be in one controller at a time. */ +- (HFController *)controller; +//@} + +/*! @name Property change notifications +*/ +//@{ +/*! Indicates that the properties indicated by the given bits did change, and the view should be updated as to reflect the appropriate properties. This is the main mechanism by which representers are notified of changes to the controller. +*/ +- (void)controllerDidChange:(HFControllerPropertyBits)bits; +//@} + +/*! @name HFController convenience methods + Convenience covers for certain HFController methods +*/ +//@{ +/*! Equivalent to [[self controller] bytesPerLine] */ +- (NSUInteger)bytesPerLine; + +/*! Equivalent to [[self controller] bytesPerColumn] */ +- (NSUInteger)bytesPerColumn; + +/*! Equivalent to [[self controller] representer:self changedProperties:properties] . You may call this when some internal aspect of the receiver's view (such as its frame) has changed in a way that may globally change some property of the controller, and the controller should recalculate those properties. For example, the text representers call this with HFControllerDisplayedLineRange when the view grows vertically, because more data may be displayed. +*/ +- (void)representerChangedProperties:(HFControllerPropertyBits)properties; +//@} + +/*! @name Measurement + Methods related to measuring the HFRepresenter, so that it can be laid out properly by an HFLayoutController. All of these methods are candidates for overriding. +*/ +//@{ +/*! Returns the maximum number of bytes per line for the given view size. The default value is NSUIntegerMax, which means that the representer can display any number of lines for the given view size. */ +- (NSUInteger)maximumBytesPerLineForViewWidth:(CGFloat)viewWidth; + +/*! Returns the minimum view frame size for the given bytes per line. Default is to return 0, which means that the representer can display the given bytes per line in any view size. Fixed width views should return their fixed width. */ +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine; + +/*! Returns the maximum number of lines that could be displayed at once for a given view height. Default is to return DBL_MAX. */ +- (double)maximumAvailableLinesForViewHeight:(CGFloat)viewHeight; +//@} + +/*! Returns the required byte granularity. HFLayoutRepresenter will constrain the bytes per line to a multiple of the granularity, e.g. so that UTF-16 characters are not split across lines. If different representers have different granularities, then it will constrain it to a multiple of all granularities, which may be very large. The default implementation returns 1. */ +- (NSUInteger)byteGranularity; + +/*! @name Auto-layout methods + Methods for simple auto-layout by HFLayoutRepresenter. See the HFLayoutRepresenter class for discussion of how it lays out representer views. +*/ +//@{ + + +/// The layout position for the receiver. +@property (nonatomic) NSPoint layoutPosition; + +/*! Returns the default layout position for representers of this class. Within the -init method, the view's layout position is set to the default for this class. You may override this to control the default layout position. See HFLayoutRepresenter for a discussion of the significance of the layout postition. +*/ ++ (NSPoint)defaultLayoutPosition; + +//@} + + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFRepresenter.m new file mode 100644 index 000000000..510e3a0ce --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenter.m @@ -0,0 +1,120 @@ +// +// HFRepresenter.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import "HFRepresenter.h" + +@implementation HFRepresenter + +- (id)view { + if (! view) { + view = [self createView]; + [self initializeView]; + } + return view; +} + +- (BOOL)isViewLoaded { + return !! view; +} + +- (void)initializeView { + +} + +- (instancetype)init { + self = [super init]; + [self setLayoutPosition:[[self class] defaultLayoutPosition]]; + return self; +} + +- (void)dealloc { + [view release]; + [super dealloc]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [coder encodeObject:controller forKey:@"HFController"]; + [coder encodePoint:layoutPosition forKey:@"HFLayoutPosition"]; + [coder encodeObject:view forKey:@"HFRepresenterView"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super init]; + layoutPosition = [coder decodePointForKey:@"HFLayoutPosition"]; + controller = [coder decodeObjectForKey:@"HFController"]; // not retained + view = [[coder decodeObjectForKey:@"HFRepresenterView"] retain]; + return self; +} + +- (NSView *)createView { + UNIMPLEMENTED(); +} + +- (HFController *)controller { + return controller; +} + +- (void)_setController:(HFController *)val { + controller = val; +} + +- (void)controllerDidChange:(HFControllerPropertyBits)bits { + USE(bits); +} + +- (NSUInteger)bytesPerLine { + HFASSERT([self controller] != nil); + return [[self controller] bytesPerLine]; +} + +- (NSUInteger)bytesPerColumn { + HFASSERT([self controller] != nil); + return [[self controller] bytesPerColumn]; +} + +- (NSUInteger)maximumBytesPerLineForViewWidth:(CGFloat)viewWidth { + USE(viewWidth); + return NSUIntegerMax; +} + +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine { + USE(bytesPerLine); + return 0; +} + +- (NSUInteger)byteGranularity { + return 1; +} + +- (double)maximumAvailableLinesForViewHeight:(CGFloat)viewHeight { + USE(viewHeight); + return DBL_MAX; +} + +- (void)selectAll:sender { + [[self controller] selectAll:sender]; +} + +- (void)representerChangedProperties:(HFControllerPropertyBits)properties { + [[self controller] representer:self changedProperties:properties]; +} + +- (void)setLayoutPosition:(NSPoint)position { + layoutPosition = position; +} + +- (NSPoint)layoutPosition { + return layoutPosition; +} + ++ (NSPoint)defaultLayoutPosition { + return NSMakePoint(0, 0); +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.h b/thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.h new file mode 100644 index 000000000..8098846ed --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.h @@ -0,0 +1,21 @@ +// +// HFRepresenterHexTextView.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + + +@interface HFRepresenterHexTextView : HFRepresenterTextView { + CGGlyph glyphTable[17]; + CGFloat glyphAdvancement; + CGFloat spaceAdvancement; + + BOOL hidesNullBytes; +} + +@property(nonatomic) BOOL hidesNullBytes; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.m b/thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.m new file mode 100644 index 000000000..6df41d80f --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterHexTextView.m @@ -0,0 +1,95 @@ +// +// HFRepresenterHexTextView.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import + +@implementation HFRepresenterHexTextView + +- (void)generateGlyphTable { + const UniChar hexchars[17] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',' '/* Plus a space char at the end for null bytes. */}; + _Static_assert(sizeof(CGGlyph[17]) == sizeof(glyphTable), "glyphTable is the wrong type"); + NSFont *font = [[self font] screenFont]; + + bool t = CTFontGetGlyphsForCharacters((CTFontRef)font, hexchars, glyphTable, 17); + HFASSERT(t); // We don't take kindly to strange fonts around here. + + CGFloat maxAdv = 0.0; + for(int i = 0; i < 17; i++) maxAdv = HFMax(maxAdv, [font advancementForGlyph:glyphTable[i]].width); + glyphAdvancement = maxAdv; + spaceAdvancement = maxAdv; +} + +- (void)setFont:(NSFont *)font { + [super setFont:font]; + [self generateGlyphTable]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + [self generateGlyphTable]; + return self; +} + +//no need for encodeWithCoder + +- (void)extractGlyphsForBytes:(const unsigned char *)bytes count:(NSUInteger)numBytes offsetIntoLine:(NSUInteger)offsetIntoLine intoArray:(struct HFGlyph_t *)glyphs advances:(CGSize *)advances resultingGlyphCount:(NSUInteger *)resultGlyphCount { + HFASSERT(bytes != NULL); + HFASSERT(glyphs != NULL); + HFASSERT(numBytes <= NSUIntegerMax); + HFASSERT(resultGlyphCount != NULL); + const NSUInteger bytesPerColumn = [self bytesPerColumn]; + NSUInteger glyphIndex = 0, byteIndex = 0; + NSUInteger remainingBytesInThisColumn = (bytesPerColumn ? bytesPerColumn - offsetIntoLine % bytesPerColumn : NSUIntegerMax); + CGFloat advanceBetweenColumns = [self advanceBetweenColumns]; + while (byteIndex < numBytes) { + unsigned char byte = bytes[byteIndex++]; + + CGFloat glyphAdvancementPlusAnySpace = glyphAdvancement; + if (--remainingBytesInThisColumn == 0) { + remainingBytesInThisColumn = bytesPerColumn; + glyphAdvancementPlusAnySpace += advanceBetweenColumns; + } + + BOOL useBlank = (hidesNullBytes && byte == 0); + advances[glyphIndex] = CGSizeMake(glyphAdvancement, 0); + glyphs[glyphIndex++] = (struct HFGlyph_t){.fontIndex = 0, .glyph = glyphTable[(useBlank? 16: byte >> 4)]}; + advances[glyphIndex] = CGSizeMake(glyphAdvancementPlusAnySpace, 0); + glyphs[glyphIndex++] = (struct HFGlyph_t){.fontIndex = 0, .glyph = glyphTable[(useBlank? 16: byte & 0xF)]}; + } + + *resultGlyphCount = glyphIndex; +} + +- (CGFloat)advancePerCharacter { + return 2 * glyphAdvancement; +} + +- (CGFloat)advanceBetweenColumns { + return glyphAdvancement; +} + +- (NSUInteger)maximumGlyphCountForByteCount:(NSUInteger)byteCount { + return 2 * byteCount; +} + +- (BOOL)hidesNullBytes { + return hidesNullBytes; +} + +- (void)setHidesNullBytes:(BOOL)flag +{ + flag = !! flag; + if (hidesNullBytes != flag) { + hidesNullBytes = flag; + [self setNeedsDisplay:YES]; + } +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.h b/thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.h new file mode 100644 index 000000000..2a87adaed --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.h @@ -0,0 +1,37 @@ +// +// HFRepresenterStringEncodingTextView.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + +@interface HFRepresenterStringEncodingTextView : HFRepresenterTextView { + /* Tier 0 data (always up to date) */ + NSStringEncoding encoding; + uint8_t bytesPerChar; + + /* Tier 1 data (computed synchronously on-demand) */ + BOOL tier1DataIsStale; + struct HFGlyph_t replacementGlyph; + CGFloat glyphAdvancement; + + /* Tier 2 data (computed asynchronously on-demand) */ + struct HFGlyphTrie_t glyphTable; + + NSArray *fontCache; + + /* Background thread */ + OSSpinLock glyphLoadLock; + BOOL requestedCancel; + NSMutableArray *fonts; + NSMutableIndexSet *requestedCharacters; + NSOperationQueue *glyphLoader; +} + +/// Set and get the NSStringEncoding that is used +@property (nonatomic) NSStringEncoding encoding; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.m b/thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.m new file mode 100644 index 000000000..fa8bcb1b5 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterStringEncodingTextView.m @@ -0,0 +1,540 @@ +// +// HFRepresenterStringEncodingTextView.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#include + +@implementation HFRepresenterStringEncodingTextView + +static NSString *copy1CharStringForByteValue(unsigned long long byteValue, NSUInteger bytesPerChar, NSStringEncoding encoding) { + NSString *result = nil; + unsigned char bytes[sizeof byteValue]; + /* If we are little endian, then the bytesPerChar doesn't matter, because it will all come out the same. If we are big endian, then it does matter. */ +#if ! __BIG_ENDIAN__ + *(unsigned long long *)bytes = byteValue; +#else + if (bytesPerChar == sizeof(uint8_t)) { + *(uint8_t *)bytes = (uint8_t)byteValue; + } else if (bytesPerChar == sizeof(uint16_t)) { + *(uint16_t *)bytes = (uint16_t)byteValue; + } else if (bytesPerChar == sizeof(uint32_t)) { + *(uint32_t *)bytes = (uint32_t)byteValue; + } else if (bytesPerChar == sizeof(uint64_t)) { + *(uint64_t *)bytes = (uint64_t)byteValue; + } else { + [NSException raise:NSInvalidArgumentException format:@"Unsupported bytesPerChar of %u", bytesPerChar]; + } +#endif + + /* ASCII is mishandled :( */ + BOOL encodingOK = YES; + if (encoding == NSASCIIStringEncoding && bytesPerChar == 1 && bytes[0] > 0x7F) { + encodingOK = NO; + } + + + + /* Now create a string from these bytes */ + if (encodingOK) { + result = [[NSString alloc] initWithBytes:bytes length:bytesPerChar encoding:encoding]; + + if ([result length] > 1) { + /* Try precomposing it */ + NSString *temp = [[result precomposedStringWithCompatibilityMapping] copy]; + [result release]; + result = temp; + } + + /* Ensure it has exactly one character */ + if ([result length] != 1) { + [result release]; + result = nil; + } + } + + /* All done */ + return result; +} + +static BOOL getGlyphs(CGGlyph *glyphs, NSString *string, NSFont *inputFont) { + NSUInteger length = [string length]; + HFASSERT(inputFont != nil); + NEW_ARRAY(UniChar, chars, length); + [string getCharacters:chars range:NSMakeRange(0, length)]; + bool result = CTFontGetGlyphsForCharacters((CTFontRef)inputFont, chars, glyphs, length); + /* A NO return means some or all characters were not mapped. This is OK. We'll use the replacement glyph. Unless we're calculating the replacement glyph! Hmm...maybe we should have a series of replacement glyphs that we try? */ + + //////////////////////// + // Workaround for a Mavericks bug. Still present as of 10.9.5 + // TODO: Hmm, still? Should look into this again, either it's not a bug or Apple needs a poke. + if(!result) for(NSUInteger i = 0; i < length; i+=15) { + CFIndex x = length-i; + if(x > 15) x = 15; + result = CTFontGetGlyphsForCharacters((CTFontRef)inputFont, chars+i, glyphs+i, x); + if(!result) break; + } + //////////////////////// + + FREE_ARRAY(chars); + return result; +} + +static void generateGlyphs(NSFont *baseFont, NSMutableArray *fonts, struct HFGlyph_t *outGlyphs, NSInteger bytesPerChar, NSStringEncoding encoding, const NSUInteger *charactersToLoad, NSUInteger charactersToLoadCount, CGFloat *outMaxAdvance) { + /* If the caller wants the advance, initialize it to 0 */ + if (outMaxAdvance) *outMaxAdvance = 0; + + /* Invalid glyph marker */ + const struct HFGlyph_t invalidGlyph = {.fontIndex = kHFGlyphFontIndexInvalid, .glyph = -1}; + + NSCharacterSet *coveredSet = [baseFont coveredCharacterSet]; + NSMutableString *coveredGlyphFetchingString = [[NSMutableString alloc] init]; + NSMutableIndexSet *coveredGlyphIndexes = [[NSMutableIndexSet alloc] init]; + NSMutableString *substitutionFontsGlyphFetchingString = [[NSMutableString alloc] init]; + NSMutableIndexSet *substitutionGlyphIndexes = [[NSMutableIndexSet alloc] init]; + + /* Loop over all the characters, appending them to our glyph fetching string */ + NSUInteger idx; + for (idx = 0; idx < charactersToLoadCount; idx++) { + NSString *string = copy1CharStringForByteValue(charactersToLoad[idx], bytesPerChar, encoding); + if (string == nil) { + /* This byte value is not represented in this char set (e.g. upper 128 in ASCII) */ + outGlyphs[idx] = invalidGlyph; + } else { + if ([coveredSet characterIsMember:[string characterAtIndex:0]]) { + /* It's covered by our base font */ + [coveredGlyphFetchingString appendString:string]; + [coveredGlyphIndexes addIndex:idx]; + } else { + /* Maybe there's a substitution font */ + [substitutionFontsGlyphFetchingString appendString:string]; + [substitutionGlyphIndexes addIndex:idx]; + } + } + [string release]; + } + + + /* Fetch the non-substitute glyphs */ + { + NEW_ARRAY(CGGlyph, cgglyphs, [coveredGlyphFetchingString length]); + BOOL success = getGlyphs(cgglyphs, coveredGlyphFetchingString, baseFont); + HFASSERT(success == YES); + NSUInteger numGlyphs = [coveredGlyphFetchingString length]; + + /* Fill in our glyphs array */ + NSUInteger coveredGlyphIdx = [coveredGlyphIndexes firstIndex]; + for (NSUInteger i=0; i < numGlyphs; i++) { + outGlyphs[coveredGlyphIdx] = (struct HFGlyph_t){.fontIndex = 0, .glyph = cgglyphs[i]}; + coveredGlyphIdx = [coveredGlyphIndexes indexGreaterThanIndex:coveredGlyphIdx]; + + /* Record the advancement. Note that this may be more efficient to do in bulk. */ + if (outMaxAdvance) *outMaxAdvance = HFMax(*outMaxAdvance, [baseFont advancementForGlyph:cgglyphs[i]].width); + + } + HFASSERT(coveredGlyphIdx == NSNotFound); //we must have exhausted the table + FREE_ARRAY(cgglyphs); + } + + /* Now do substitution glyphs. */ + { + NSUInteger substitutionGlyphIndex = [substitutionGlyphIndexes firstIndex], numSubstitutionChars = [substitutionFontsGlyphFetchingString length]; + for (NSUInteger i=0; i < numSubstitutionChars; i++) { + CTFontRef substitutionFont = CTFontCreateForString((CTFontRef)baseFont, (CFStringRef)substitutionFontsGlyphFetchingString, CFRangeMake(i, 1)); + if (substitutionFont) { + /* We have a font for this string */ + CGGlyph glyph; + unichar c = [substitutionFontsGlyphFetchingString characterAtIndex:i]; + NSString *substring = [[NSString alloc] initWithCharacters:&c length:1]; + BOOL success = getGlyphs(&glyph, substring, (NSFont *)substitutionFont); + [substring release]; + + if (! success) { + /* Turns out there wasn't a glyph like we thought there would be, so set an invalid glyph marker */ + outGlyphs[substitutionGlyphIndex] = invalidGlyph; + } else { + /* Find the index in fonts. If none, add to it. */ + HFASSERT(fonts != nil); + NSUInteger fontIndex = [fonts indexOfObject:(id)substitutionFont]; + if (fontIndex == NSNotFound) { + [fonts addObject:(id)substitutionFont]; + fontIndex = [fonts count] - 1; + } + + /* Now make the glyph */ + HFASSERT(fontIndex < UINT16_MAX); + outGlyphs[substitutionGlyphIndex] = (struct HFGlyph_t){.fontIndex = (uint16_t)fontIndex, .glyph = glyph}; + } + + /* We're done with this */ + CFRelease(substitutionFont); + + } + substitutionGlyphIndex = [substitutionGlyphIndexes indexGreaterThanIndex:substitutionGlyphIndex]; + } + } + + [coveredGlyphFetchingString release]; + [coveredGlyphIndexes release]; + [substitutionFontsGlyphFetchingString release]; + [substitutionGlyphIndexes release]; +} + +static int compareGlyphFontIndexes(const void *p1, const void *p2) { + const struct HFGlyph_t *g1 = p1, *g2 = p2; + if (g1->fontIndex != g2->fontIndex) { + /* Prefer to sort by font index */ + return (g1->fontIndex > g2->fontIndex) - (g2->fontIndex > g1->fontIndex); + } else { + /* If they have equal font indexes, sort by glyph value */ + return (g1->glyph > g2->glyph) - (g2->glyph > g1->glyph); + } +} + +- (void)threadedPrecacheGlyphs:(const struct HFGlyph_t *)glyphs withFonts:(NSArray *)localFonts count:(NSUInteger)count { + /* This method draws glyphs anywhere, so that they get cached by CG and drawing them a second time can be fast. */ + NSUInteger i, validGlyphCount; + + /* We can use 0 advances */ + NEW_ARRAY(CGSize, advances, count); + bzero(advances, count * sizeof *advances); + + /* Make a local copy of the glyphs, and sort them according to their font index so that we can draw them with the fewest runs. */ + NEW_ARRAY(struct HFGlyph_t, validGlyphs, count); + + validGlyphCount = 0; + for (i=0; i < count; i++) { + if (glyphs[i].glyph <= kCGGlyphMax && glyphs[i].fontIndex != kHFGlyphFontIndexInvalid) { + validGlyphs[validGlyphCount++] = glyphs[i]; + } + } + qsort(validGlyphs, validGlyphCount, sizeof *validGlyphs, compareGlyphFontIndexes); + + /* Remove duplicate glyphs */ + NSUInteger trailing = 0; + struct HFGlyph_t lastGlyph = {.glyph = kCGFontIndexInvalid, .fontIndex = kHFGlyphFontIndexInvalid}; + for (i=0; i < validGlyphCount; i++) { + if (! HFGlyphEqualsGlyph(lastGlyph, validGlyphs[i])) { + lastGlyph = validGlyphs[i]; + validGlyphs[trailing++] = lastGlyph; + } + } + validGlyphCount = trailing; + + /* Draw the glyphs in runs */ + NEW_ARRAY(CGGlyph, cgglyphs, count); + NSImage *glyphDrawingImage = [[NSImage alloc] initWithSize:NSMakeSize(100, 100)]; + [glyphDrawingImage lockFocus]; + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + HFGlyphFontIndex runFontIndex = -1; + NSUInteger runLength = 0; + for (i=0; i <= validGlyphCount; i++) { + if (i == validGlyphCount || validGlyphs[i].fontIndex != runFontIndex) { + /* End the current run */ + if (runLength > 0) { + NSLog(@"Drawing with %@", [localFonts[runFontIndex] screenFont]); + [[localFonts[runFontIndex] screenFont] set]; + CGContextSetTextPosition(ctx, 0, 50); + CGContextShowGlyphsWithAdvances(ctx, cgglyphs, advances, runLength); + } + NSLog(@"Drew a run of length %lu", (unsigned long)runLength); + runLength = 0; + if (i < validGlyphCount) runFontIndex = validGlyphs[i].fontIndex; + } + if (i < validGlyphCount) { + /* Append to the current run */ + cgglyphs[runLength++] = validGlyphs[i].glyph; + } + } + + /* All done */ + [glyphDrawingImage unlockFocus]; + [glyphDrawingImage release]; + FREE_ARRAY(advances); + FREE_ARRAY(validGlyphs); + FREE_ARRAY(cgglyphs); +} + +- (void)threadedLoadGlyphs:(id)unused { + /* Note that this is running on a background thread */ + USE(unused); + + /* Do some things under the lock. Someone else may wish to read fonts, and we're going to write to it, so make a local copy. Also figure out what characters to load. */ + NSMutableArray *localFonts; + NSIndexSet *charactersToLoad; + OSSpinLockLock(&glyphLoadLock); + localFonts = [fonts mutableCopy]; + charactersToLoad = requestedCharacters; + /* Set requestedCharacters to nil so that the caller knows we aren't going to check again, and will have to re-invoke us. */ + requestedCharacters = nil; + OSSpinLockUnlock(&glyphLoadLock); + + /* The base font is the first font */ + NSFont *font = localFonts[0]; + + NSUInteger charVal, glyphIdx, charCount = [charactersToLoad count]; + NEW_ARRAY(struct HFGlyph_t, glyphs, charCount); + + /* Now generate our glyphs */ + NEW_ARRAY(NSUInteger, characters, charCount); + [charactersToLoad getIndexes:characters maxCount:charCount inIndexRange:NULL]; + generateGlyphs(font, localFonts, glyphs, bytesPerChar, encoding, characters, charCount, NULL); + FREE_ARRAY(characters); + + /* The first time we draw glyphs, it's slow, so pre-cache them by drawing them now. */ + // This was disabled because it blows up the CG glyph cache + // [self threadedPrecacheGlyphs:glyphs withFonts:localFonts count:charCount]; + + /* Replace fonts. Do this before we insert into the glyph trie, because the glyph trie references fonts that we're just now putting in the fonts array. */ + id oldFonts; + OSSpinLockLock(&glyphLoadLock); + oldFonts = fonts; + fonts = localFonts; + OSSpinLockUnlock(&glyphLoadLock); + [oldFonts release]; + + /* Now insert all of the glyphs into the glyph trie */ + glyphIdx = 0; + for (charVal = [charactersToLoad firstIndex]; charVal != NSNotFound; charVal = [charactersToLoad indexGreaterThanIndex:charVal]) { + HFGlyphTrieInsert(&glyphTable, charVal, glyphs[glyphIdx++]); + } + FREE_ARRAY(glyphs); + + /* Trigger a redisplay */ + [self performSelectorOnMainThread:@selector(triggerRedisplay:) withObject:nil waitUntilDone:NO]; + + /* All done. We inherited the retain on requestedCharacters, so release it. */ + [charactersToLoad release]; +} + +- (void)triggerRedisplay:unused { + USE(unused); + [self setNeedsDisplay:YES]; +} + +- (void)beginLoadGlyphsForCharacters:(NSIndexSet *)charactersToLoad { + /* Create the operation (and maybe the operation queue itself) */ + if (! glyphLoader) { + glyphLoader = [[NSOperationQueue alloc] init]; + [glyphLoader setMaxConcurrentOperationCount:1]; + } + if (! fonts) { + NSFont *font = [self font]; + fonts = [[NSMutableArray alloc] initWithObjects:&font count:1]; + } + + BOOL needToStartOperation; + OSSpinLockLock(&glyphLoadLock); + if (requestedCharacters) { + /* There's a pending request, so just add to it */ + [requestedCharacters addIndexes:charactersToLoad]; + needToStartOperation = NO; + } else { + /* There's no pending request, so we will create one */ + requestedCharacters = [charactersToLoad mutableCopy]; + needToStartOperation = YES; + } + OSSpinLockUnlock(&glyphLoadLock); + + if (needToStartOperation) { + NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(threadedLoadGlyphs:) object:charactersToLoad]; + [glyphLoader addOperation:op]; + [op release]; + } +} + +- (void)dealloc { + HFGlyphTreeFree(&glyphTable); + [fonts release]; + [super dealloc]; +} + +- (void)staleTieredProperties { + tier1DataIsStale = YES; + /* We have to free the glyph table */ + requestedCancel = YES; + [glyphLoader waitUntilAllOperationsAreFinished]; + requestedCancel = NO; + HFGlyphTreeFree(&glyphTable); + HFGlyphTrieInitialize(&glyphTable, bytesPerChar); + [fonts release]; + fonts = nil; + [fontCache release]; + fontCache = nil; +} + +- (void)setFont:(NSFont *)font { + [self staleTieredProperties]; + /* fonts is preloaded with our one font */ + if (! fonts) fonts = [[NSMutableArray alloc] init]; + [fonts addObject:font]; + [super setFont:font]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + encoding = (NSStringEncoding)[coder decodeInt64ForKey:@"HFStringEncoding"]; + bytesPerChar = HFStringEncodingCharacterLength(encoding); + [self staleTieredProperties]; + return self; +} + +- (instancetype)initWithFrame:(NSRect)frameRect { + self = [super initWithFrame:frameRect]; + encoding = NSMacOSRomanStringEncoding; + bytesPerChar = HFStringEncodingCharacterLength(encoding); + [self staleTieredProperties]; + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeInt64:encoding forKey:@"HFStringEncoding"]; +} + +- (NSStringEncoding)encoding { + return encoding; +} + +- (void)setEncoding:(NSStringEncoding)val { + if (encoding != val) { + /* Our glyph table is now stale. Call this first to ensure our background operation is complete. */ + [self staleTieredProperties]; + + /* Store the new encoding. */ + encoding = val; + + /* Compute bytes per character */ + bytesPerChar = HFStringEncodingCharacterLength(encoding); + HFASSERT(bytesPerChar > 0); + + /* Ensure the tree knows about the new bytes per character */ + HFGlyphTrieInitialize(&glyphTable, bytesPerChar); + + /* Redraw ourselves with our new glyphs */ + [self setNeedsDisplay:YES]; + } +} + +- (void)loadTier1Data { + NSFont *font = [self font]; + + /* Use the max advance as the glyph advance */ + glyphAdvancement = HFCeil([font maximumAdvancement].width); + + /* Generate replacementGlyph */ + CGGlyph glyph[1]; + BOOL foundReplacement = NO; + if (! foundReplacement) foundReplacement = getGlyphs(glyph, @".", font); + if (! foundReplacement) foundReplacement = getGlyphs(glyph, @"*", font); + if (! foundReplacement) foundReplacement = getGlyphs(glyph, @"!", font); + if (! foundReplacement) { + /* Really we should just fall back to another font in this case */ + [NSException raise:NSInternalInconsistencyException format:@"Unable to find replacement glyph for font %@", font]; + } + replacementGlyph.fontIndex = 0; + replacementGlyph.glyph = glyph[0]; + + /* We're no longer stale */ + tier1DataIsStale = NO; +} + +/* Override of base class method for font substitution */ +- (NSFont *)fontAtSubstitutionIndex:(uint16_t)idx { + HFASSERT(idx != kHFGlyphFontIndexInvalid); + if (idx >= [fontCache count]) { + /* Our font cache is out of date. Take the lock and update the cache. */ + NSArray *newFonts = nil; + OSSpinLockLock(&glyphLoadLock); + HFASSERT(idx < [fonts count]); + newFonts = [fonts copy]; + OSSpinLockUnlock(&glyphLoadLock); + + /* Store the new cache */ + [fontCache release]; + fontCache = newFonts; + + /* Now our cache should be up to date */ + HFASSERT(idx < [fontCache count]); + } + return fontCache[idx]; +} + +/* Override of base class method in case we are 16 bit */ +- (NSUInteger)bytesPerCharacter { + return bytesPerChar; +} + +- (void)extractGlyphsForBytes:(const unsigned char *)bytes count:(NSUInteger)numBytes offsetIntoLine:(NSUInteger)offsetIntoLine intoArray:(struct HFGlyph_t *)glyphs advances:(CGSize *)advances resultingGlyphCount:(NSUInteger *)resultGlyphCount { + HFASSERT(bytes != NULL); + HFASSERT(glyphs != NULL); + HFASSERT(resultGlyphCount != NULL); + HFASSERT(advances != NULL); + USE(offsetIntoLine); + + /* Ensure we have advance, etc. before trying to use it */ + if (tier1DataIsStale) [self loadTier1Data]; + + CGSize advance = CGSizeMake(glyphAdvancement, 0); + NSMutableIndexSet *charactersToLoad = nil; //note: in UTF-32 this may have to move to an NSSet + + const uint8_t localBytesPerChar = bytesPerChar; + NSUInteger charIndex, numChars = numBytes / localBytesPerChar, byteIndex = 0; + for (charIndex = 0; charIndex < numChars; charIndex++) { + NSUInteger character = -1; + if (localBytesPerChar == 1) { + character = *(const uint8_t *)(bytes + byteIndex); + } else if (localBytesPerChar == 2) { + character = *(const uint16_t *)(bytes + byteIndex); + } else if (localBytesPerChar == 4) { + character = *(const uint32_t *)(bytes + byteIndex); + } + + struct HFGlyph_t glyph = HFGlyphTrieGet(&glyphTable, character); + if (glyph.glyph == 0 && glyph.fontIndex == 0) { + /* Unloaded glyph, so load it */ + if (! charactersToLoad) charactersToLoad = [[NSMutableIndexSet alloc] init]; + [charactersToLoad addIndex:character]; + glyph = replacementGlyph; + } else if (glyph.glyph == (uint16_t)-1 && glyph.fontIndex == kHFGlyphFontIndexInvalid) { + /* Missing glyph, so ignore it */ + glyph = replacementGlyph; + } else { + /* Valid glyph */ + } + + HFASSERT(glyph.fontIndex != kHFGlyphFontIndexInvalid); + + advances[charIndex] = advance; + glyphs[charIndex] = glyph; + byteIndex += localBytesPerChar; + } + *resultGlyphCount = numChars; + + if (charactersToLoad) { + [self beginLoadGlyphsForCharacters:charactersToLoad]; + [charactersToLoad release]; + } +} + +- (CGFloat)advancePerCharacter { + /* The glyph advancement is determined by our glyph table */ + if (tier1DataIsStale) [self loadTier1Data]; + return glyphAdvancement; +} + +- (CGFloat)advanceBetweenColumns { + return 0; //don't have any space between columns +} + +- (NSUInteger)maximumGlyphCountForByteCount:(NSUInteger)byteCount { + return byteCount / [self bytesPerCharacter]; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.h b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.h new file mode 100644 index 000000000..7e9edbb68 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.h @@ -0,0 +1,146 @@ +// +// HFRepresenterTextView.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + +/* Bytes per column philosophy + + _hftvflags.bytesPerColumn is the number of bytes that should be displayed consecutively, as one column. A space separates one column from the next. HexFiend 1.0 displayed 1 byte per column, and setting bytesPerColumn to 1 in this version reproduces that behavior. The vertical guidelines displayed by HexFiend 1.0 are only drawn when bytesPerColumn is set to 1. + + We use some number of bits to hold the number of bytes per column, so the highest value we can store is ((2 ^ numBits) - 1). We can't tell the user that the max is not a power of 2, so we pin the value to the highest representable power of 2, or (2 ^ (numBits - 1)). We allow integral values from 0 to the pinned maximum, inclusive; powers of 2 are not required. The setter method uses HFTV_BYTES_PER_COLUMN_MAX_VALUE to stay within the representable range. + + Since a value of zero is nonsensical, we can use it to specify no spaces at all. +*/ + +#define HFTV_BYTES_PER_COLUMN_MAX_VALUE (1 << (HFTV_BYTES_PER_COLUMN_BITFIELD_SIZE - 1)) + +@class HFTextRepresenter; + + +/* The base class for HFTextRepresenter views - such as the hex or ASCII text view */ +@interface HFRepresenterTextView : NSView { +@private; + HFTextRepresenter *representer; + NSArray *cachedSelectedRanges; + CGFloat verticalOffset; + CGFloat horizontalContainerInset; + CGFloat defaultLineHeight; + NSTimer *caretTimer; + NSWindow *pulseWindow; + NSRect pulseWindowBaseFrameInScreenCoordinates; + NSRect lastDrawnCaretRect; + NSRect caretRectToDraw; + NSUInteger bytesBetweenVerticalGuides; + NSUInteger startingLineBackgroundColorIndex; + NSArray *rowBackgroundColors; + NSMutableDictionary *callouts; + + void (^byteColoring)(uint8_t byte, uint8_t *r, uint8_t *g, uint8_t *b, uint8_t *a); + + struct { + unsigned antialias:1; + unsigned drawCallouts:1; + unsigned editable:1; + unsigned caretVisible:1; + unsigned registeredForAppNotifications:1; + unsigned withinMouseDown:1; + unsigned receivedMouseUp:1; + } _hftvflags; +} + +- (instancetype)initWithRepresenter:(HFTextRepresenter *)rep; +- (void)clearRepresenter; + +- (HFTextRepresenter *)representer; + +@property (nonatomic, copy) NSFont *font; + +/* Set and get data. setData: will invalidate the correct regions (perhaps none) */ +@property (nonatomic, copy) NSData *data; +@property (nonatomic) CGFloat verticalOffset; +@property (nonatomic) NSUInteger startingLineBackgroundColorIndex; +@property (nonatomic, getter=isEditable) BOOL editable; +@property (nonatomic, copy) NSArray *styles; +@property (nonatomic) BOOL shouldAntialias; + +- (BOOL)behavesAsTextField; +- (BOOL)showsFocusRing; +- (BOOL)isWithinMouseDown; + +- (NSRect)caretRect; + +@property (nonatomic) BOOL shouldDrawCallouts; + +- (void)setByteColoring:(void (^)(uint8_t byte, uint8_t *r, uint8_t *g, uint8_t *b, uint8_t *a))coloring; + +- (NSPoint)originForCharacterAtByteIndex:(NSInteger)index; +- (NSUInteger)indexOfCharacterAtPoint:(NSPoint)point; + +/* The amount of padding space to inset from the left and right side. */ +@property (nonatomic) CGFloat horizontalContainerInset; + +/* The number of bytes between vertical guides. 0 means no drawing of guides. */ +@property (nonatomic) NSUInteger bytesBetweenVerticalGuides; + +/* To be invoked from drawRect:. */ +- (void)drawCaretIfNecessaryWithClip:(NSRect)clipRect; +- (void)drawSelectionIfNecessaryWithClip:(NSRect)clipRect; + +/* For font substitution. An index of 0 means the default (base) font. */ +- (NSFont *)fontAtSubstitutionIndex:(uint16_t)idx; + +/* Uniformly "rounds" the byte range so that it contains an integer number of characters. The algorithm is to "floor:" any character intersecting the min of the range are included, and any character extending beyond the end of the range is excluded. If both the min and the max are within a single character, then an empty range is returned. */ +- (NSRange)roundPartialByteRange:(NSRange)byteRange; + +- (void)drawTextWithClip:(NSRect)clipRect restrictingToTextInRanges:(NSArray *)restrictingToRanges; + +/* Must be overridden */ +- (void)extractGlyphsForBytes:(const unsigned char *)bytes count:(NSUInteger)numBytes offsetIntoLine:(NSUInteger)offsetIntoLine intoArray:(struct HFGlyph_t *)glyphs advances:(CGSize *)advances resultingGlyphCount:(NSUInteger *)resultGlyphCount; + +- (void)extractGlyphsForBytes:(const unsigned char *)bytePtr range:(NSRange)byteRange intoArray:(struct HFGlyph_t *)glyphs advances:(CGSize *)advances withInclusionRanges:(NSArray *)restrictingToRanges initialTextOffset:(CGFloat *)initialTextOffset resultingGlyphCount:(NSUInteger *)resultingGlyphCount; + +/* Must be overridden - returns the max number of glyphs for a given number of bytes */ +- (NSUInteger)maximumGlyphCountForByteCount:(NSUInteger)byteCount; + +- (void)updateSelectedRanges; +- (void)terminateSelectionPulse; // Start fading the pulse. + +/* Given a rect edge, return an NSRect representing the maximum edge in that direction. The dimension in the direction of the edge is 0 (so if edge is NSMaxXEdge, the resulting width is 0). The returned rect is in the coordinate space of the receiver's view. If the byte range is not displayed, returns NSZeroRect. + */ +- (NSRect)furthestRectOnEdge:(NSRectEdge)edge forRange:(NSRange)range; + +/* The background color for the line at the given index. You may override this to return different colors. You may return nil to draw no color in this line (and then the empty space color will appear) */ +- (NSColor *)backgroundColorForLine:(NSUInteger)line; +- (NSColor *)backgroundColorForEmptySpace; + +/* Defaults to 1, may override */ +- (NSUInteger)bytesPerCharacter; + +/* Cover method for [[self representer] bytesPerLine] and [[self representer] bytesPerColumn] */ +- (NSUInteger)bytesPerLine; +- (NSUInteger)bytesPerColumn; + +- (CGFloat)lineHeight; + +/* Following two must be overridden */ +- (CGFloat)advanceBetweenColumns; +- (CGFloat)advancePerCharacter; + +- (CGFloat)advancePerColumn; +- (CGFloat)totalAdvanceForBytesInRange:(NSRange)range; + +/* Returns the number of lines that could be shown in this view at its given height (expressed in its local coordinate space) */ +- (double)maximumAvailableLinesForViewHeight:(CGFloat)viewHeight; + +- (NSUInteger)maximumBytesPerLineForViewWidth:(CGFloat)viewWidth; +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine; + +- (IBAction)selectAll:sender; + + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.m b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.m new file mode 100644 index 000000000..7fcbd0c77 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView.m @@ -0,0 +1,1766 @@ +// +// HFRepresenterTextView.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import +#import +#import +#import + +static const NSTimeInterval HFCaretBlinkFrequency = 0.56; + +@implementation HFRepresenterTextView + +- (NSUInteger)_getGlyphs:(CGGlyph *)glyphs forString:(NSString *)string font:(NSFont *)inputFont { + NSUInteger length = [string length]; + UniChar chars[256]; + HFASSERT(length <= sizeof chars / sizeof *chars); + HFASSERT(inputFont != nil); + [string getCharacters:chars range:NSMakeRange(0, length)]; + if (! CTFontGetGlyphsForCharacters((CTFontRef)inputFont, chars, glyphs, length)) { + /* Some or all characters were not mapped. This is OK. We'll use the replacement glyph. */ + } + return length; +} + +- (NSUInteger)_glyphsForString:(NSString *)string withGeneratingLayoutManager:(NSLayoutManager *)layoutManager glyphs:(CGGlyph *)glyphs { + HFASSERT(layoutManager != NULL); + HFASSERT(string != NULL); + NSGlyph nsglyphs[GLYPH_BUFFER_SIZE]; + [[[layoutManager textStorage] mutableString] setString:string]; + NSUInteger glyphIndex, glyphCount = [layoutManager getGlyphs:nsglyphs range:NSMakeRange(0, MIN(GLYPH_BUFFER_SIZE, [layoutManager numberOfGlyphs]))]; + if (glyphs != NULL) { + /* Convert from unsigned int NSGlyphs to unsigned short CGGlyphs */ + for (glyphIndex = 0; glyphIndex < glyphCount; glyphIndex++) { + /* Get rid of NSControlGlyph */ + NSGlyph modifiedGlyph = nsglyphs[glyphIndex] == NSControlGlyph ? NSNullGlyph : nsglyphs[glyphIndex]; + HFASSERT(modifiedGlyph <= USHRT_MAX); + glyphs[glyphIndex] = (CGGlyph)modifiedGlyph; + } + } + return glyphCount; +} + +/* Returns the number of glyphs for the given string, using the given text view, and generating the glyphs if the glyphs parameter is not NULL */ +- (NSUInteger)_glyphsForString:(NSString *)string withGeneratingTextView:(NSTextView *)textView glyphs:(CGGlyph *)glyphs { + HFASSERT(string != NULL); + HFASSERT(textView != NULL); + [textView setString:string]; + [textView setNeedsDisplay:YES]; //ligature generation doesn't seem to happen without this, for some reason. This seems very fragile! We should find a better way to get this ligature information!! + return [self _glyphsForString:string withGeneratingLayoutManager:[textView layoutManager] glyphs:glyphs]; +} + +- (NSArray *)displayedSelectedContentsRanges { + if (! cachedSelectedRanges) { + cachedSelectedRanges = [[[self representer] displayedSelectedContentsRanges] copy]; + } + return cachedSelectedRanges; +} + +- (BOOL)_shouldHaveCaretTimer { + NSWindow *window = [self window]; + if (window == NULL) return NO; + if (! [window isKeyWindow]) return NO; + if (self != [window firstResponder]) return NO; + if (! _hftvflags.editable) return NO; + NSArray *ranges = [self displayedSelectedContentsRanges]; + if ([ranges count] != 1) return NO; + NSRange range = [ranges[0] rangeValue]; + if (range.length != 0) return NO; + return YES; +} + +- (NSUInteger)_effectiveBytesPerColumn { + /* returns the bytesPerColumn, unless it's larger than the bytes per character, in which case it returns 0 */ + NSUInteger bytesPerColumn = [self bytesPerColumn], bytesPerCharacter = [self bytesPerCharacter]; + return bytesPerColumn >= bytesPerCharacter ? bytesPerColumn : 0; +} + +// note: index may be negative +- (NSPoint)originForCharacterAtByteIndex:(NSInteger)index { + NSPoint result; + NSInteger bytesPerLine = (NSInteger)[self bytesPerLine]; + + // We want a nonnegative remainder + NSInteger lineIndex = index / bytesPerLine; + NSInteger byteIndexIntoLine = index % bytesPerLine; + while (byteIndexIntoLine < 0) { + byteIndexIntoLine += bytesPerLine; + lineIndex--; + } + + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + NSUInteger numConsumedColumns = (bytesPerColumn ? byteIndexIntoLine / bytesPerColumn : 0); + NSUInteger characterIndexIntoLine = byteIndexIntoLine / [self bytesPerCharacter]; + + result.x = [self horizontalContainerInset] + characterIndexIntoLine * [self advancePerCharacter] + numConsumedColumns * [self advanceBetweenColumns]; + result.y = (lineIndex - [self verticalOffset]) * [self lineHeight]; + + return result; +} + +- (NSUInteger)indexOfCharacterAtPoint:(NSPoint)point { + NSUInteger bytesPerLine = [self bytesPerLine]; + NSUInteger bytesPerCharacter = [self bytesPerCharacter]; + HFASSERT(bytesPerLine % bytesPerCharacter == 0); + CGFloat advancePerCharacter = [self advancePerCharacter]; + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + CGFloat floatRow = (CGFloat)floor([self verticalOffset] + point.y / [self lineHeight]); + NSUInteger byteIndexWithinRow; + + // to compute the column, we need to solve for byteIndexIntoLine in something like this: point.x = [self advancePerCharacter] * charIndexIntoLine + [self spaceBetweenColumns] * floor(byteIndexIntoLine / [self bytesPerColumn]). Start by computing the column (or if bytesPerColumn is 0, we don't have columns) + CGFloat insetX = point.x - [self horizontalContainerInset]; + if (insetX < 0) { + //handle the case of dragging within the container inset + byteIndexWithinRow = 0; + } + else if (bytesPerColumn == 0) { + /* We don't have columns */ + byteIndexWithinRow = bytesPerCharacter * (NSUInteger)(insetX / advancePerCharacter); + } + else { + CGFloat advancePerColumn = [self advancePerColumn]; + HFASSERT(advancePerColumn > 0); + CGFloat floatColumn = insetX / advancePerColumn; + HFASSERT(floatColumn >= 0 && floatColumn <= NSUIntegerMax); + CGFloat startOfColumn = advancePerColumn * HFFloor(floatColumn); + HFASSERT(startOfColumn <= insetX); + CGFloat xOffsetWithinColumn = insetX - startOfColumn; + CGFloat charIndexWithinColumn = xOffsetWithinColumn / advancePerCharacter; //charIndexWithinColumn may be larger than bytesPerColumn if the user clicked on the space between columns + HFASSERT(charIndexWithinColumn >= 0 && charIndexWithinColumn <= NSUIntegerMax / bytesPerCharacter); + NSUInteger byteIndexWithinColumn = bytesPerCharacter * (NSUInteger)charIndexWithinColumn; + byteIndexWithinRow = bytesPerColumn * (NSUInteger)floatColumn + byteIndexWithinColumn; //this may trigger overflow to the next column, but that's OK + byteIndexWithinRow = MIN(byteIndexWithinRow, bytesPerLine); //don't let clicking to the right of the line overflow to the next line + } + HFASSERT(floatRow >= 0 && floatRow <= NSUIntegerMax); + NSUInteger row = (NSUInteger)floatRow; + return (row * bytesPerLine + byteIndexWithinRow) / bytesPerCharacter; +} + +- (NSRect)caretRect { + NSArray *ranges = [self displayedSelectedContentsRanges]; + HFASSERT([ranges count] == 1); + NSRange range = [ranges[0] rangeValue]; + HFASSERT(range.length == 0); + + NSPoint caretBaseline = [self originForCharacterAtByteIndex:range.location]; + return NSMakeRect(caretBaseline.x - 1, caretBaseline.y, 1, [self lineHeight]); +} + +- (void)_blinkCaret:(NSTimer *)timer { + HFASSERT(timer == caretTimer); + if (_hftvflags.caretVisible) { + _hftvflags.caretVisible = NO; + [self setNeedsDisplayInRect:lastDrawnCaretRect]; + caretRectToDraw = NSZeroRect; + } + else { + _hftvflags.caretVisible = YES; + caretRectToDraw = [self caretRect]; + [self setNeedsDisplayInRect:caretRectToDraw]; + } +} + +- (void)_updateCaretTimerWithFirstResponderStatus:(BOOL)treatAsHavingFirstResponder { + BOOL hasCaretTimer = !! caretTimer; + BOOL shouldHaveCaretTimer = treatAsHavingFirstResponder && [self _shouldHaveCaretTimer]; + if (shouldHaveCaretTimer == YES && hasCaretTimer == NO) { + caretTimer = [[NSTimer timerWithTimeInterval:HFCaretBlinkFrequency target:self selector:@selector(_blinkCaret:) userInfo:nil repeats:YES] retain]; + NSRunLoop *loop = [NSRunLoop currentRunLoop]; + [loop addTimer:caretTimer forMode:NSDefaultRunLoopMode]; + [loop addTimer:caretTimer forMode:NSModalPanelRunLoopMode]; + if ([self enclosingMenuItem] != NULL) { + [loop addTimer:caretTimer forMode:NSEventTrackingRunLoopMode]; + } + } + else if (shouldHaveCaretTimer == NO && hasCaretTimer == YES) { + [caretTimer invalidate]; + [caretTimer release]; + caretTimer = nil; + caretRectToDraw = NSZeroRect; + if (! NSIsEmptyRect(lastDrawnCaretRect)) { + [self setNeedsDisplayInRect:lastDrawnCaretRect]; + } + } + HFASSERT(shouldHaveCaretTimer == !! caretTimer); +} + +- (void)_updateCaretTimer { + [self _updateCaretTimerWithFirstResponderStatus: self == [[self window] firstResponder]]; +} + +/* When you click or type, the caret appears immediately - do that here */ +- (void)_forceCaretOnIfHasCaretTimer { + if (caretTimer) { + [caretTimer invalidate]; + [caretTimer release]; + caretTimer = nil; + [self _updateCaretTimer]; + + _hftvflags.caretVisible = YES; + caretRectToDraw = [self caretRect]; + [self setNeedsDisplayInRect:caretRectToDraw]; + } +} + +/* Returns the range of lines containing the selected contents ranges (as NSValues containing NSRanges), or {NSNotFound, 0} if ranges is nil or empty */ +- (NSRange)_lineRangeForContentsRanges:(NSArray *)ranges { + NSUInteger minLine = NSUIntegerMax; + NSUInteger maxLine = 0; + NSUInteger bytesPerLine = [self bytesPerLine]; + FOREACH(NSValue *, rangeValue, ranges) { + NSRange range = [rangeValue rangeValue]; + if (range.length > 0) { + NSUInteger lineForRangeStart = range.location / bytesPerLine; + NSUInteger lineForRangeEnd = NSMaxRange(range) / bytesPerLine; + HFASSERT(lineForRangeStart <= lineForRangeEnd); + minLine = MIN(minLine, lineForRangeStart); + maxLine = MAX(maxLine, lineForRangeEnd); + } + } + if (minLine > maxLine) return NSMakeRange(NSNotFound, 0); + else return NSMakeRange(minLine, maxLine - minLine + 1); +} + +- (NSRect)_rectForLineRange:(NSRange)lineRange { + HFASSERT(lineRange.location != NSNotFound); + NSUInteger bytesPerLine = [self bytesPerLine]; + NSRect bounds = [self bounds]; + NSRect result; + result.origin.x = NSMinX(bounds); + result.size.width = NSWidth(bounds); + result.origin.y = [self originForCharacterAtByteIndex:lineRange.location * bytesPerLine].y; + result.size.height = [self lineHeight] * lineRange.length; + return result; +} + +static int range_compare(const void *ap, const void *bp) { + const NSRange *a = ap; + const NSRange *b = bp; + if (a->location < b->location) return -1; + if (a->location > b->location) return 1; + if (a->length < b->length) return -1; + if (a->length > b->length) return 1; + return 0; +} + +enum LineCoverage_t { + eCoverageNone, + eCoveragePartial, + eCoverageFull +}; + +- (void)_linesWithParityChangesFromRanges:(const NSRange *)oldRanges count:(NSUInteger)oldRangeCount toRanges:(const NSRange *)newRanges count:(NSUInteger)newRangeCount intoIndexSet:(NSMutableIndexSet *)result { + NSUInteger bytesPerLine = [self bytesPerLine]; + NSUInteger oldParity=0, newParity=0; + NSUInteger oldRangeIndex = 0, newRangeIndex = 0; + NSUInteger currentCharacterIndex = MIN(oldRanges[oldRangeIndex].location, newRanges[newRangeIndex].location); + oldParity = (currentCharacterIndex >= oldRanges[oldRangeIndex].location); + newParity = (currentCharacterIndex >= newRanges[newRangeIndex].location); + // NSLog(@"Old %s, new %s at %u (%u, %u)", oldParity ? "on" : "off", newParity ? "on" : "off", currentCharacterIndex, oldRanges[oldRangeIndex].location, newRanges[newRangeIndex].location); + for (;;) { + NSUInteger oldDivision = NSUIntegerMax, newDivision = NSUIntegerMax; + /* Move up to the next parity change */ + if (oldRangeIndex < oldRangeCount) { + const NSRange oldRange = oldRanges[oldRangeIndex]; + oldDivision = oldRange.location + (oldParity ? oldRange.length : 0); + } + if (newRangeIndex < newRangeCount) { + const NSRange newRange = newRanges[newRangeIndex]; + newDivision = newRange.location + (newParity ? newRange.length : 0); + } + + NSUInteger division = MIN(oldDivision, newDivision); + HFASSERT(division > currentCharacterIndex); + + // NSLog(@"Division %u", division); + + if (division == NSUIntegerMax) break; + + if (oldParity != newParity) { + /* The parities did not match through this entire range, so add all intersected lines to the result index set */ + NSUInteger startLine = currentCharacterIndex / bytesPerLine; + NSUInteger endLine = HFDivideULRoundingUp(division, bytesPerLine); + HFASSERT(endLine >= startLine); + // NSLog(@"Adding lines %u -> %u", startLine, endLine); + [result addIndexesInRange:NSMakeRange(startLine, endLine - startLine)]; + } + if (division == oldDivision) { + oldRangeIndex += oldParity; + oldParity = ! oldParity; + // NSLog(@"Old range switching %s at %u", oldParity ? "on" : "off", division); + } + if (division == newDivision) { + newRangeIndex += newParity; + newParity = ! newParity; + // NSLog(@"New range switching %s at %u", newParity ? "on" : "off", division); + } + currentCharacterIndex = division; + } +} + +- (void)_addLinesFromRanges:(const NSRange *)ranges count:(NSUInteger)count toIndexSet:(NSMutableIndexSet *)set { + NSUInteger bytesPerLine = [self bytesPerLine]; + NSUInteger i; + for (i=0; i < count; i++) { + NSUInteger firstLine = ranges[i].location / bytesPerLine; + NSUInteger lastLine = HFDivideULRoundingUp(NSMaxRange(ranges[i]), bytesPerLine); + [set addIndexesInRange:NSMakeRange(firstLine, lastLine - firstLine)]; + } +} + +- (NSIndexSet *)_indexSetOfLinesNeedingRedrawWhenChangingSelectionFromRanges:(NSArray *)oldSelectedRangeArray toRanges:(NSArray *)newSelectedRangeArray { + NSUInteger oldRangeCount = 0, newRangeCount = 0; + + NEW_ARRAY(NSRange, oldRanges, [oldSelectedRangeArray count]); + NEW_ARRAY(NSRange, newRanges, [newSelectedRangeArray count]); + + NSMutableIndexSet *result = [NSMutableIndexSet indexSet]; + + /* Extract all the ranges into a local array */ + FOREACH(NSValue *, rangeValue1, oldSelectedRangeArray) { + NSRange range = [rangeValue1 rangeValue]; + if (range.length > 0) { + oldRanges[oldRangeCount++] = range; + } + } + FOREACH(NSValue *, rangeValue2, newSelectedRangeArray) { + NSRange range = [rangeValue2 rangeValue]; + if (range.length > 0) { + newRanges[newRangeCount++] = range; + } + } + +#if ! NDEBUG + /* Assert that ranges of arrays do not have any self-intersection; this is supposed to be enforced by our HFController. Also assert that they aren't "just touching"; if they are they should be merged into a single range. */ + for (NSUInteger i=0; i < oldRangeCount; i++) { + for (NSUInteger j=i+1; j < oldRangeCount; j++) { + HFASSERT(NSIntersectionRange(oldRanges[i], oldRanges[j]).length == 0); + HFASSERT(NSMaxRange(oldRanges[i]) != oldRanges[j].location && NSMaxRange(oldRanges[j]) != oldRanges[i].location); + } + } + for (NSUInteger i=0; i < newRangeCount; i++) { + for (NSUInteger j=i+1; j < newRangeCount; j++) { + HFASSERT(NSIntersectionRange(newRanges[i], newRanges[j]).length == 0); + HFASSERT(NSMaxRange(newRanges[i]) != newRanges[j].location && NSMaxRange(newRanges[j]) != newRanges[i].location); + } + } +#endif + + if (newRangeCount == 0) { + [self _addLinesFromRanges:oldRanges count:oldRangeCount toIndexSet:result]; + } + else if (oldRangeCount == 0) { + [self _addLinesFromRanges:newRanges count:newRangeCount toIndexSet:result]; + } + else { + /* Sort the arrays, since _linesWithParityChangesFromRanges needs it */ + qsort(oldRanges, oldRangeCount, sizeof *oldRanges, range_compare); + qsort(newRanges, newRangeCount, sizeof *newRanges, range_compare); + + [self _linesWithParityChangesFromRanges:oldRanges count:oldRangeCount toRanges:newRanges count:newRangeCount intoIndexSet:result]; + } + + FREE_ARRAY(oldRanges); + FREE_ARRAY(newRanges); + + return result; +} + +- (void)updateSelectedRanges { + NSArray *oldSelectedRanges = cachedSelectedRanges; + cachedSelectedRanges = [[[self representer] displayedSelectedContentsRanges] copy]; + NSIndexSet *indexSet = [self _indexSetOfLinesNeedingRedrawWhenChangingSelectionFromRanges:oldSelectedRanges toRanges:cachedSelectedRanges]; + BOOL lastCaretRectNeedsRedraw = ! NSIsEmptyRect(lastDrawnCaretRect); + NSRange lineRangeToInvalidate = NSMakeRange(NSUIntegerMax, 0); + for (NSUInteger lineIndex = [indexSet firstIndex]; ; lineIndex = [indexSet indexGreaterThanIndex:lineIndex]) { + if (lineIndex != NSNotFound && NSMaxRange(lineRangeToInvalidate) == lineIndex) { + lineRangeToInvalidate.length++; + } + else { + if (lineRangeToInvalidate.length > 0) { + NSRect rectToInvalidate = [self _rectForLineRange:lineRangeToInvalidate]; + [self setNeedsDisplayInRect:rectToInvalidate]; + lastCaretRectNeedsRedraw = lastCaretRectNeedsRedraw && ! NSContainsRect(rectToInvalidate, lastDrawnCaretRect); + } + lineRangeToInvalidate = NSMakeRange(lineIndex, 1); + } + if (lineIndex == NSNotFound) break; + } + + if (lastCaretRectNeedsRedraw) [self setNeedsDisplayInRect:lastDrawnCaretRect]; + [oldSelectedRanges release]; //balance the retain we borrowed from the ivar + [self _updateCaretTimer]; + [self _forceCaretOnIfHasCaretTimer]; + + // A new pulse window will be created at the new selected range if necessary. + [self terminateSelectionPulse]; +} + +- (void)drawPulseBackgroundInRect:(NSRect)pulseRect { + [[NSColor yellowColor] set]; + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + CGContextSaveGState(ctx); + [[NSBezierPath bezierPathWithRoundedRect:pulseRect xRadius:25 yRadius:25] addClip]; + NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor yellowColor] endingColor:[NSColor colorWithCalibratedRed:(CGFloat)1. green:(CGFloat).75 blue:0 alpha:1]]; + [gradient drawInRect:pulseRect angle:90]; + [gradient release]; + CGContextRestoreGState(ctx); +} + +- (void)fadePulseWindowTimer:(NSTimer *)timer { + // TODO: close & invalidate immediatley if view scrolls. + NSWindow *window = [timer userInfo]; + CGFloat alpha = [window alphaValue]; + alpha -= (CGFloat)(3. / 30.); + if (alpha < 0) { + [window close]; + [timer invalidate]; + } + else { + [window setAlphaValue:alpha]; + } +} + +- (void)terminateSelectionPulse { + if (pulseWindow) { + [[self window] removeChildWindow:pulseWindow]; + [pulseWindow setFrame:pulseWindowBaseFrameInScreenCoordinates display:YES animate:NO]; + [NSTimer scheduledTimerWithTimeInterval:1. / 30. target:self selector:@selector(fadePulseWindowTimer:) userInfo:pulseWindow repeats:YES]; + //release is not necessary, since it relases when closed by default + pulseWindow = nil; + pulseWindowBaseFrameInScreenCoordinates = NSZeroRect; + } +} + +- (void)drawCaretIfNecessaryWithClip:(NSRect)clipRect { + NSRect caretRect = NSIntersectionRect(caretRectToDraw, clipRect); + if (! NSIsEmptyRect(caretRect)) { + [[NSColor controlTextColor] set]; + NSRectFill(caretRect); + lastDrawnCaretRect = caretRect; + } + if (NSIsEmptyRect(caretRectToDraw)) lastDrawnCaretRect = NSZeroRect; +} + + +/* This is the color when we are the first responder in the key window */ +- (NSColor *)primaryTextSelectionColor { + return [NSColor selectedTextBackgroundColor]; +} + +/* This is the color when we are not in the key window */ +- (NSColor *)inactiveTextSelectionColor { + if (@available(macOS 10.14, *)) { + return [NSColor unemphasizedSelectedTextBackgroundColor]; + } + return [NSColor colorWithCalibratedWhite: (CGFloat)(212./255.) alpha:1]; +} + +/* This is the color when we are not the first responder, but we are in the key window */ +- (NSColor *)secondaryTextSelectionColor { + if (@available(macOS 10.14, *)) { + return [NSColor unemphasizedSelectedTextBackgroundColor]; + } + return [NSColor colorWithCalibratedWhite: (CGFloat)(212./255.) alpha:1]; +} + +- (NSColor *)textSelectionColor { + NSWindow *window = [self window]; + if (window == nil) return [self primaryTextSelectionColor]; + else if (! [window isKeyWindow]) return [self inactiveTextSelectionColor]; + else if (self != [window firstResponder]) return [self secondaryTextSelectionColor]; + else return [self primaryTextSelectionColor]; +} + +- (void)drawSelectionIfNecessaryWithClip:(NSRect)clipRect { + NSArray *ranges = [self displayedSelectedContentsRanges]; + NSUInteger bytesPerLine = [self bytesPerLine]; + [[self textSelectionColor] set]; + CGFloat lineHeight = [self lineHeight]; + FOREACH(NSValue *, rangeValue, ranges) { + NSRange range = [rangeValue rangeValue]; + if (range.length > 0) { + NSUInteger startByteIndex = range.location; + NSUInteger endByteIndexForThisRange = range.location + range.length - 1; + NSUInteger byteIndex = startByteIndex; + while (byteIndex <= endByteIndexForThisRange) { + NSUInteger endByteIndexForLine = ((byteIndex / bytesPerLine) + 1) * bytesPerLine - 1; + NSUInteger endByteForThisLineOfRange = MIN(endByteIndexForThisRange, endByteIndexForLine); + NSPoint startPoint = [self originForCharacterAtByteIndex:byteIndex]; + NSPoint endPoint = [self originForCharacterAtByteIndex:endByteForThisLineOfRange]; + NSRect selectionRect = NSMakeRect(startPoint.x, startPoint.y, endPoint.x + [self advancePerCharacter] - startPoint.x, lineHeight); + NSRect clippedSelectionRect = NSIntersectionRect(selectionRect, clipRect); + if (! NSIsEmptyRect(clippedSelectionRect)) { + NSRectFill(clippedSelectionRect); + } + byteIndex = endByteForThisLineOfRange + 1; + } + } + } +} + +- (BOOL)acceptsFirstResponder { + return YES; +} + +- (BOOL)hasVisibleDisplayedSelectedContentsRange { + FOREACH(NSValue *, rangeValue, [self displayedSelectedContentsRanges]) { + NSRange range = [rangeValue rangeValue]; + if (range.length > 0) { + return YES; + } + } + return NO; +} + +- (BOOL)becomeFirstResponder { + BOOL result = [super becomeFirstResponder]; + [self _updateCaretTimerWithFirstResponderStatus:YES]; + if ([self showsFocusRing] || [self hasVisibleDisplayedSelectedContentsRange]) { + [self setNeedsDisplay:YES]; + } + return result; +} + +- (BOOL)resignFirstResponder { + BOOL result = [super resignFirstResponder]; + [self _updateCaretTimerWithFirstResponderStatus:NO]; + BOOL needsRedisplay = NO; + if ([self showsFocusRing]) needsRedisplay = YES; + else if (! NSIsEmptyRect(lastDrawnCaretRect)) needsRedisplay = YES; + else if ([self hasVisibleDisplayedSelectedContentsRange]) needsRedisplay = YES; + if (needsRedisplay) [self setNeedsDisplay:YES]; + return result; +} + +- (instancetype)initWithRepresenter:(HFTextRepresenter *)rep { + self = [super initWithFrame:NSMakeRect(0, 0, 1, 1)]; + horizontalContainerInset = 4; + representer = rep; + _hftvflags.editable = YES; + + return self; +} + +- (void)clearRepresenter { + representer = nil; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeObject:representer forKey:@"HFRepresenter"]; + [coder encodeObject:_font forKey:@"HFFont"]; + [coder encodeObject:_data forKey:@"HFData"]; + [coder encodeDouble:verticalOffset forKey:@"HFVerticalOffset"]; + [coder encodeDouble:horizontalContainerInset forKey:@"HFHorizontalContainerOffset"]; + [coder encodeDouble:defaultLineHeight forKey:@"HFDefaultLineHeight"]; + [coder encodeInt64:bytesBetweenVerticalGuides forKey:@"HFBytesBetweenVerticalGuides"]; + [coder encodeInt64:startingLineBackgroundColorIndex forKey:@"HFStartingLineBackgroundColorIndex"]; + [coder encodeObject:rowBackgroundColors forKey:@"HFRowBackgroundColors"]; + [coder encodeBool:_hftvflags.antialias forKey:@"HFAntialias"]; + [coder encodeBool:_hftvflags.drawCallouts forKey:@"HFDrawCallouts"]; + [coder encodeBool:_hftvflags.editable forKey:@"HFEditable"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + representer = [coder decodeObjectForKey:@"HFRepresenter"]; + _font = [[coder decodeObjectForKey:@"HFFont"] retain]; + _data = [[coder decodeObjectForKey:@"HFData"] retain]; + verticalOffset = (CGFloat)[coder decodeDoubleForKey:@"HFVerticalOffset"]; + horizontalContainerInset = (CGFloat)[coder decodeDoubleForKey:@"HFHorizontalContainerOffset"]; + defaultLineHeight = (CGFloat)[coder decodeDoubleForKey:@"HFDefaultLineHeight"]; + bytesBetweenVerticalGuides = (NSUInteger)[coder decodeInt64ForKey:@"HFBytesBetweenVerticalGuides"]; + startingLineBackgroundColorIndex = (NSUInteger)[coder decodeInt64ForKey:@"HFStartingLineBackgroundColorIndex"]; + rowBackgroundColors = [[coder decodeObjectForKey:@"HFRowBackgroundColors"] retain]; + _hftvflags.antialias = [coder decodeBoolForKey:@"HFAntialias"]; + _hftvflags.drawCallouts = [coder decodeBoolForKey:@"HFDrawCallouts"]; + _hftvflags.editable = [coder decodeBoolForKey:@"HFEditable"]; + return self; +} + +- (CGFloat)horizontalContainerInset { + return horizontalContainerInset; +} + +- (void)setHorizontalContainerInset:(CGFloat)inset { + horizontalContainerInset = inset; +} + +- (void)setBytesBetweenVerticalGuides:(NSUInteger)val { + bytesBetweenVerticalGuides = val; +} + +- (NSUInteger)bytesBetweenVerticalGuides { + return bytesBetweenVerticalGuides; +} + + +- (void)setFont:(NSFont *)val { + if (val != _font) { + [_font release]; + _font = [val retain]; + NSLayoutManager *manager = [[NSLayoutManager alloc] init]; + defaultLineHeight = [manager defaultLineHeightForFont:_font]; + [manager release]; + [self setNeedsDisplay:YES]; + } +} + +- (CGFloat)lineHeight { + return defaultLineHeight; +} + +/* The base implementation does not support font substitution, so we require that it be the base font. */ +- (NSFont *)fontAtSubstitutionIndex:(uint16_t)idx { + HFASSERT(idx == 0); + USE(idx); + return _font; +} + +- (NSRange)roundPartialByteRange:(NSRange)byteRange { + NSUInteger bytesPerCharacter = [self bytesPerCharacter]; + /* Get the left and right edges of the range */ + NSUInteger left = byteRange.location, right = NSMaxRange(byteRange); + + /* Round both to the left. This may make the range bigger or smaller, or empty! */ + left -= left % bytesPerCharacter; + right -= right % bytesPerCharacter; + + /* Done */ + HFASSERT(right >= left); + return NSMakeRange(left, right - left); + +} + +- (void)setNeedsDisplayForLinesInRange:(NSRange)lineRange { + // redisplay the lines in the given range + if (lineRange.length == 0) return; + NSUInteger firstLine = lineRange.location, lastLine = NSMaxRange(lineRange); + CGFloat lineHeight = [self lineHeight]; + CGFloat vertOffset = [self verticalOffset]; + CGFloat yOrigin = (firstLine - vertOffset) * lineHeight; + CGFloat lastLineBottom = (lastLine - vertOffset) * lineHeight; + NSRect bounds = [self bounds]; + NSRect dirtyRect = NSMakeRect(bounds.origin.x, bounds.origin.y + yOrigin, NSWidth(bounds), lastLineBottom - yOrigin); + [self setNeedsDisplayInRect:dirtyRect]; +} + +- (void)setData:(NSData *)val { + if (val != _data) { + NSUInteger oldLength = [_data length]; + NSUInteger newLength = [val length]; + const unsigned char *oldBytes = (const unsigned char *)[_data bytes]; + const unsigned char *newBytes = (const unsigned char *)[val bytes]; + NSUInteger firstDifferingIndex = HFIndexOfFirstByteThatDiffers(oldBytes, oldLength, newBytes, newLength); + if (firstDifferingIndex == NSUIntegerMax) { + /* Nothing to do! Data is identical! */ + } + else { + NSUInteger lastDifferingIndex = HFIndexOfLastByteThatDiffers(oldBytes, oldLength, newBytes, newLength); + HFASSERT(lastDifferingIndex != NSUIntegerMax); //if we have a first different byte, we must have a last different byte + /* Expand to encompass characters that they touch */ + NSUInteger bytesPerCharacter = [self bytesPerCharacter]; + firstDifferingIndex -= firstDifferingIndex % bytesPerCharacter; + lastDifferingIndex = HFRoundUpToMultipleInt(lastDifferingIndex, bytesPerCharacter); + + /* Now figure out the line range they touch */ + const NSUInteger bytesPerLine = [self bytesPerLine]; + NSUInteger firstLine = firstDifferingIndex / bytesPerLine; + NSUInteger lastLine = HFDivideULRoundingUp(MAX(oldLength, newLength), bytesPerLine); + /* The +1 is for the following case - if we change the last character, then it may push the caret into the next line (even though there's no text there). This last line may have a background color, so we need to make it draw if it did not draw before (or vice versa - when deleting the last character which pulls the caret from the last line). */ + NSUInteger lastDifferingLine = (lastDifferingIndex == NSNotFound ? lastLine : HFDivideULRoundingUp(lastDifferingIndex + 1, bytesPerLine)); + if (lastDifferingLine > firstLine) { + [self setNeedsDisplayForLinesInRange:NSMakeRange(firstLine, lastDifferingLine - firstLine)]; + } + } + [_data release]; + _data = [val copy]; + [self _updateCaretTimer]; + } +} + +- (void)setStyles:(NSArray *)newStyles { + if (! [_styles isEqual:newStyles]) { + + /* Figure out which styles changed - that is, we want to compute those objects that are not in oldStyles or newStyles, but not both. */ + NSMutableSet *changedStyles = _styles ? [[NSMutableSet alloc] initWithArray:_styles] : [[NSMutableSet alloc] init]; + FOREACH(HFTextVisualStyleRun *, run, newStyles) { + if ([changedStyles containsObject:run]) { + [changedStyles removeObject:run]; + } + else { + [changedStyles addObject:run]; + } + } + + /* Now figure out the first and last indexes of changed ranges. */ + NSUInteger firstChangedIndex = NSUIntegerMax, lastChangedIndex = 0; + FOREACH(HFTextVisualStyleRun *, changedRun, changedStyles) { + NSRange range = [changedRun range]; + if (range.length > 0) { + firstChangedIndex = MIN(firstChangedIndex, range.location); + lastChangedIndex = MAX(lastChangedIndex, NSMaxRange(range) - 1); + } + } + + /* Don't need this any more */ + [changedStyles release]; + + /* Expand to cover all touched characters */ + NSUInteger bytesPerCharacter = [self bytesPerCharacter]; + firstChangedIndex -= firstChangedIndex % bytesPerCharacter; + lastChangedIndex = HFRoundUpToMultipleInt(lastChangedIndex, bytesPerCharacter); + + /* Figure out the changed lines, and trigger redisplay */ + if (firstChangedIndex <= lastChangedIndex) { + const NSUInteger bytesPerLine = [self bytesPerLine]; + NSUInteger firstLine = firstChangedIndex / bytesPerLine; + NSUInteger lastLine = HFDivideULRoundingUp(lastChangedIndex, bytesPerLine); + [self setNeedsDisplayForLinesInRange:NSMakeRange(firstLine, lastLine - firstLine + 1)]; + } + + /* Do the usual Cocoa thing */ + [_styles release]; + _styles = [newStyles copy]; + } +} + +- (void)setVerticalOffset:(CGFloat)val { + if (val != verticalOffset) { + verticalOffset = val; + [self setNeedsDisplay:YES]; + } +} + +- (CGFloat)verticalOffset { + return verticalOffset; +} + +- (NSUInteger)startingLineBackgroundColorIndex { + return startingLineBackgroundColorIndex; +} + +- (void)setStartingLineBackgroundColorIndex:(NSUInteger)val { + startingLineBackgroundColorIndex = val; +} + +- (BOOL)isFlipped { + return YES; +} + +- (HFTextRepresenter *)representer { + return representer; +} + +- (void)dealloc { + HFUnregisterViewForWindowAppearanceChanges(self, _hftvflags.registeredForAppNotifications /* appToo */); + [caretTimer invalidate]; + [caretTimer release]; + [_font release]; + [_data release]; + [_styles release]; + [cachedSelectedRanges release]; + [callouts release]; + if(byteColoring) Block_release(byteColoring); + [super dealloc]; +} + +- (NSColor *)backgroundColorForEmptySpace { + NSArray *colors = [[self representer] rowBackgroundColors]; + if (! [colors count]) return [NSColor clearColor]; + else return colors[0]; +} + +- (NSColor *)backgroundColorForLine:(NSUInteger)line { + NSArray *colors = [[self representer] rowBackgroundColors]; + NSUInteger colorCount = [colors count]; + if (colorCount == 0) return [NSColor clearColor]; + NSUInteger colorIndex = (line + startingLineBackgroundColorIndex) % colorCount; + if (colorIndex == 0) return nil; //will be drawn by empty space + else return colors[colorIndex]; +} + +- (NSUInteger)bytesPerLine { + HFASSERT([self representer] != nil); + return [[self representer] bytesPerLine]; +} + +- (NSUInteger)bytesPerColumn { + HFASSERT([self representer] != nil); + return [[self representer] bytesPerColumn]; +} + +- (void)_drawDefaultLineBackgrounds:(NSRect)clip withLineHeight:(CGFloat)lineHeight maxLines:(NSUInteger)maxLines { + NSRect bounds = [self bounds]; + NSUInteger lineIndex; + NSRect lineRect = NSMakeRect(NSMinX(bounds), NSMinY(bounds), NSWidth(bounds), lineHeight); + if ([self showsFocusRing]) lineRect = NSInsetRect(lineRect, 2, 0); + lineRect.origin.y -= [self verticalOffset] * [self lineHeight]; + NSUInteger drawableLineIndex = 0; + NEW_ARRAY(NSRect, lineRects, maxLines); + NEW_ARRAY(NSColor*, lineColors, maxLines); + for (lineIndex = 0; lineIndex < maxLines; lineIndex++) { + NSRect clippedLineRect = NSIntersectionRect(lineRect, clip); + if (! NSIsEmptyRect(clippedLineRect)) { + NSColor *lineColor = [self backgroundColorForLine:lineIndex]; + if (lineColor) { + lineColors[drawableLineIndex] = lineColor; + lineRects[drawableLineIndex] = clippedLineRect; + drawableLineIndex++; + } + } + lineRect.origin.y += lineHeight; + } + + if (drawableLineIndex > 0) { + NSRectFillListWithColorsUsingOperation(lineRects, lineColors, drawableLineIndex, NSCompositeSourceOver); + } + + FREE_ARRAY(lineRects); + FREE_ARRAY(lineColors); +} + +- (HFTextVisualStyleRun *)styleRunForByteAtIndex:(NSUInteger)byteIndex { + HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init]; + [run setRange:NSMakeRange(0, NSUIntegerMax)]; + [run setForegroundColor:[NSColor textColor]]; + return [run autorelease]; +} + +/* Given a list of rects and a parallel list of values, find cases of equal adjacent values, and union together their corresponding rects, deleting the second element from the list. Next, delete all nil values. Returns the new count of the list. */ +static size_t unionAndCleanLists(NSRect *rectList, id *valueList, size_t count) { + size_t trailing = 0, leading = 0; + while (leading < count) { + /* Copy our value left */ + valueList[trailing] = valueList[leading]; + rectList[trailing] = rectList[leading]; + + /* Skip one - no point unioning with ourselves */ + leading += 1; + + /* Sweep right, unioning until we reach a different value or the end */ + id targetValue = valueList[trailing]; + for (; leading < count; leading++) { + id testValue = valueList[leading]; + if (targetValue == testValue || (testValue && [targetValue isEqual:testValue])) { + /* Values match, so union the two rects */ + rectList[trailing] = NSUnionRect(rectList[trailing], rectList[leading]); + } + else { + /* Values don't match, we're done sweeping */ + break; + } + } + + /* We're done with this index */ + trailing += 1; + } + + /* trailing keeps track of how many values we have */ + count = trailing; + + /* Now do the same thing, except delete nil values */ + for (trailing = leading = 0; leading < count; leading++) { + if (valueList[leading] != nil) { + valueList[trailing] = valueList[leading]; + rectList[trailing] = rectList[leading]; + trailing += 1; + } + } + count = trailing; + + /* All done */ + return count; +} + +/* Draw vertical guidelines every four bytes */ +- (void)drawVerticalGuideLines:(NSRect)clip { + if (bytesBetweenVerticalGuides == 0) return; + + NSUInteger bytesPerLine = [self bytesPerLine]; + NSRect bounds = [self bounds]; + CGFloat advancePerCharacter = [self advancePerCharacter]; + CGFloat spaceAdvancement = advancePerCharacter / 2; + CGFloat advanceAmount = (advancePerCharacter + spaceAdvancement) * bytesBetweenVerticalGuides; + CGFloat lineOffset = (CGFloat)(NSMinX(bounds) + [self horizontalContainerInset] + advanceAmount - spaceAdvancement / 2.); + CGFloat endOffset = NSMaxX(bounds) - [self horizontalContainerInset]; + + NSUInteger numGuides = (bytesPerLine - 1) / bytesBetweenVerticalGuides; // -1 is a trick to avoid drawing the last line + NSUInteger guideIndex = 0, rectIndex = 0; + NEW_ARRAY(NSRect, lineRects, numGuides); + + while (lineOffset < endOffset && guideIndex < numGuides) { + NSRect lineRect = NSMakeRect(lineOffset - 1, NSMinY(bounds), 1, NSHeight(bounds)); + NSRect clippedLineRect = NSIntersectionRect(lineRect, clip); + if (! NSIsEmptyRect(clippedLineRect)) { + lineRects[rectIndex++] = clippedLineRect; + } + lineOffset += advanceAmount; + guideIndex++; + } + if (rectIndex > 0) { + [[NSColor gridColor] set]; + NSRectFillListUsingOperation(lineRects, rectIndex, NSCompositeSourceOver); + } + FREE_ARRAY(lineRects); +} + +- (NSUInteger)maximumGlyphCountForByteCount:(NSUInteger)byteCount { + USE(byteCount); + UNIMPLEMENTED(); +} + +- (void)setByteColoring:(void (^)(uint8_t, uint8_t*, uint8_t*, uint8_t*, uint8_t*))coloring { + Block_release(byteColoring); + byteColoring = coloring ? Block_copy(coloring) : NULL; + [self setNeedsDisplay:YES]; +} + +- (void)drawByteColoringBackground:(NSRange)range inRect:(NSRect)rect { + if(!byteColoring) return; + + size_t width = (size_t)rect.size.width; + + // A rgba, 8-bit, single row image. + // +1 in case messing around with floats makes us overshoot a bit. + uint32_t *buffer = calloc(width+1, 4); + + const uint8_t *bytes = [_data bytes]; + bytes += range.location; + + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + CGFloat advancePerCharacter = [self advancePerCharacter]; + CGFloat advanceBetweenColumns = [self advanceBetweenColumns]; + + // For each character, draw the corresponding part of the image + CGFloat offset = [self horizontalContainerInset]; + for(NSUInteger i = 0; i < range.length; i++) { + uint8_t r, g, b, a; + byteColoring(bytes[i], &r, &g, &b, &a); + uint32_t c = ((uint32_t)r<<0) | ((uint32_t)g<<8) | ((uint32_t)b<<16) | ((uint32_t)a<<24); + memset_pattern4(&buffer[(size_t)offset], &c, 4*(size_t)(advancePerCharacter+1)); + offset += advancePerCharacter; + if(bytesPerColumn && (i+1) % bytesPerColumn == 0) + offset += advanceBetweenColumns; + } + + // Do a CGImage dance to draw the buffer + CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, 4 * width, NULL); + CGColorSpaceRef cgcolorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); + CGImageRef image = CGImageCreate(width, 1, 8, 32, 4 * width, cgcolorspace, + (CGBitmapInfo)kCGImageAlphaLast, provider, NULL, false, kCGRenderingIntentDefault); + CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], NSRectToCGRect(rect), image); + CGColorSpaceRelease(cgcolorspace); + CGImageRelease(image); + CGDataProviderRelease(provider); + free(buffer); +} + +- (void)drawStyledBackgroundsForByteRange:(NSRange)range inRect:(NSRect)rect { + NSRect remainingRunRect = rect; + NSRange remainingRange = range; + + /* Our caller lies to us a little */ + remainingRunRect.origin.x += [self horizontalContainerInset]; + + const NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + + /* Here are the properties we care about */ + struct PropertyInfo_t { + SEL stylePropertyAccessor; // the selector we use to get the property + NSRect *rectList; // the list of rects corresponding to the property values + id *propertyValueList; // the list of the property values + size_t count; //list count, only gets set after cleaning up our lists + } propertyInfos[] = { + {.stylePropertyAccessor = @selector(backgroundColor)}, + {.stylePropertyAccessor = @selector(bookmarkStarts)}, + {.stylePropertyAccessor = @selector(bookmarkExtents)}, + {.stylePropertyAccessor = @selector(bookmarkEnds)} + }; + + /* Each list has the same capacity, and (initially) the same count */ + size_t listCount = 0, listCapacity = 0; + + /* The function pointer we use to get our property values */ + id (* const funcPtr)(id, SEL) = (id (*)(id, SEL))objc_msgSend; + + size_t propertyIndex; + const size_t propertyInfoCount = sizeof propertyInfos / sizeof *propertyInfos; + + while (remainingRange.length > 0) { + /* Get the next run for the remaining range. */ + HFTextVisualStyleRun *styleRun = [self styleRunForByteAtIndex:remainingRange.location]; + + /* The length of the run is the end of the style run or the end of the range we're given (whichever is smaller), minus the beginning of the range we care about. */ + NSUInteger runStart = remainingRange.location; + NSUInteger runLength = MIN(NSMaxRange(range), NSMaxRange([styleRun range])) - runStart; + + /* Get the width of this run and use it to compute the rect */ + CGFloat runRectWidth = [self totalAdvanceForBytesInRange:NSMakeRange(remainingRange.location, runLength)]; + NSRect runRect = remainingRunRect; + runRect.size.width = runRectWidth; + + /* Update runRect and remainingRunRect based on what we just learned */ + remainingRunRect.origin.x += runRectWidth; + remainingRunRect.size.width -= runRectWidth; + + /* Do a hack - if we end at a column boundary, subtract the advance between columns. If the next run has the same value for this property, then we'll end up unioning the rects together and the column gap will be filled. This is the primary purpose of this function. */ + if (bytesPerColumn > 0 && (runStart + runLength) % bytesPerColumn == 0) { + runRect.size.width -= MIN([self advanceBetweenColumns], runRect.size.width); + } + + /* Extend our lists if necessary */ + if (listCount == listCapacity) { + /* Our list is too small, extend it */ + listCapacity = listCapacity + 16; + + for (propertyIndex = 0; propertyIndex < propertyInfoCount; propertyIndex++) { + struct PropertyInfo_t *p = propertyInfos + propertyIndex; + p->rectList = check_realloc(p->rectList, listCapacity * sizeof *p->rectList); + p->propertyValueList = check_realloc(p->propertyValueList, listCapacity * sizeof *p->propertyValueList); + } + } + + /* Now append our values to our lists, even if it's nil */ + for (propertyIndex = 0; propertyIndex < propertyInfoCount; propertyIndex++) { + struct PropertyInfo_t *p = propertyInfos + propertyIndex; + id value = funcPtr(styleRun, p->stylePropertyAccessor); + p->rectList[listCount] = runRect; + p->propertyValueList[listCount] = value; + } + + listCount++; + + /* Update remainingRange */ + remainingRange.location += runLength; + remainingRange.length -= runLength; + + } + + /* Now clean up our lists, to delete the gaps we may have introduced */ + for (propertyIndex = 0; propertyIndex < propertyInfoCount; propertyIndex++) { + struct PropertyInfo_t *p = propertyInfos + propertyIndex; + p->count = unionAndCleanLists(p->rectList, p->propertyValueList, listCount); + } + + /* Finally we can draw them! First, draw byte backgrounds. */ + [self drawByteColoringBackground:range inRect:rect]; + + const struct PropertyInfo_t *p; + + /* Draw backgrounds */ + p = propertyInfos + 0; + if (p->count > 0) NSRectFillListWithColorsUsingOperation(p->rectList, p->propertyValueList, p->count, NSCompositeSourceOver); + + /* Clean up */ + for (propertyIndex = 0; propertyIndex < propertyInfoCount; propertyIndex++) { + p = propertyInfos + propertyIndex; + free(p->rectList); + free(p->propertyValueList); + } +} + +- (void)drawGlyphs:(const struct HFGlyph_t *)glyphs atPoint:(NSPoint)point withAdvances:(const CGSize *)advances withStyleRun:(HFTextVisualStyleRun *)styleRun count:(NSUInteger)glyphCount { + HFASSERT(glyphs != NULL); + HFASSERT(advances != NULL); + HFASSERT(glyphCount > 0); + if ([styleRun shouldDraw]) { + [styleRun set]; + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + + /* Get all the CGGlyphs together */ + NEW_ARRAY(CGGlyph, cgglyphs, glyphCount); + for (NSUInteger j=0; j < glyphCount; j++) { + cgglyphs[j] = glyphs[j].glyph; + } + + NSUInteger runStart = 0; + HFGlyphFontIndex runFontIndex = glyphs[0].fontIndex; + CGFloat runAdvance = 0; + for (NSUInteger i=1; i <= glyphCount; i++) { + /* Check if this run is finished, or if we are using a substitution font */ + if (i == glyphCount || glyphs[i].fontIndex != runFontIndex || runFontIndex > 0) { + /* Draw this run */ + NSFont *fontToUse = [self fontAtSubstitutionIndex:runFontIndex]; + [[fontToUse screenFont] set]; + CGContextSetTextPosition(ctx, point.x + runAdvance, point.y); + + if (runFontIndex > 0) { + /* A substitution font. Here we should only have one glyph */ + HFASSERT(i - runStart == 1); + /* Get the advance for this glyph. */ + NSSize nativeAdvance; + NSGlyph nativeGlyph = cgglyphs[runStart]; + [fontToUse getAdvancements:&nativeAdvance forGlyphs:&nativeGlyph count:1]; + if (nativeAdvance.width > advances[runStart].width) { + /* This glyph is too wide! We'll have to scale it. Here we only scale horizontally. */ + CGFloat horizontalScale = advances[runStart].width / nativeAdvance.width; + CGAffineTransform textCTM = CGContextGetTextMatrix(ctx); + textCTM.a *= horizontalScale; + CGContextSetTextMatrix(ctx, textCTM); + /* Note that we don't have to restore the text matrix, because the next call to set the font will overwrite it. */ + } + } + + /* Draw the glyphs */ + CGContextShowGlyphsWithAdvances(ctx, cgglyphs + runStart, advances + runStart, i - runStart); + + /* Record the new run */ + if (i < glyphCount) { + /* Sum the advances */ + for (NSUInteger j = runStart; j < i; j++) { + runAdvance += advances[j].width; + } + + /* Record the new run start and index */ + runStart = i; + runFontIndex = glyphs[i].fontIndex; + HFASSERT(runFontIndex != kHFGlyphFontIndexInvalid); + } + } + } + } +} + + +- (void)extractGlyphsForBytes:(const unsigned char *)bytes count:(NSUInteger)numBytes offsetIntoLine:(NSUInteger)offsetIntoLine intoArray:(struct HFGlyph_t *)glyphs advances:(CGSize *)advances resultingGlyphCount:(NSUInteger *)resultGlyphCount { + USE(bytes); + USE(numBytes); + USE(offsetIntoLine); + USE(glyphs); + USE(advances); + USE(resultGlyphCount); + UNIMPLEMENTED_VOID(); +} + +- (void)extractGlyphsForBytes:(const unsigned char *)bytePtr range:(NSRange)byteRange intoArray:(struct HFGlyph_t *)glyphs advances:(CGSize *)advances withInclusionRanges:(NSArray *)restrictingToRanges initialTextOffset:(CGFloat *)initialTextOffset resultingGlyphCount:(NSUInteger *)resultingGlyphCount { + NSParameterAssert(glyphs != NULL && advances != NULL && restrictingToRanges != nil && bytePtr != NULL); + NSRange priorIntersectionRange = {NSUIntegerMax, NSUIntegerMax}; + NSUInteger glyphBufferIndex = 0; + NSUInteger bytesPerLine = [self bytesPerLine]; + NSUInteger restrictionRangeCount = [restrictingToRanges count]; + for (NSUInteger rangeIndex = 0; rangeIndex < restrictionRangeCount; rangeIndex++) { + NSRange inclusionRange = [restrictingToRanges[rangeIndex] rangeValue]; + NSRange intersectionRange = NSIntersectionRange(inclusionRange, byteRange); + if (intersectionRange.length == 0) continue; + + NSUInteger offsetIntoLine = intersectionRange.location % bytesPerLine; + + NSRange byteRangeToSkip; + if (priorIntersectionRange.location == NSUIntegerMax) { + byteRangeToSkip = NSMakeRange(byteRange.location, intersectionRange.location - byteRange.location); + } + else { + HFASSERT(intersectionRange.location >= NSMaxRange(priorIntersectionRange)); + byteRangeToSkip.location = NSMaxRange(priorIntersectionRange); + byteRangeToSkip.length = intersectionRange.location - byteRangeToSkip.location; + } + + if (byteRangeToSkip.length > 0) { + CGFloat additionalAdvance = [self totalAdvanceForBytesInRange:byteRangeToSkip]; + if (glyphBufferIndex == 0) { + *initialTextOffset = *initialTextOffset + additionalAdvance; + } + else { + advances[glyphBufferIndex - 1].width += additionalAdvance; + } + } + + NSUInteger glyphCountForRange = NSUIntegerMax; + [self extractGlyphsForBytes:bytePtr + intersectionRange.location count:intersectionRange.length offsetIntoLine:offsetIntoLine intoArray:glyphs + glyphBufferIndex advances:advances + glyphBufferIndex resultingGlyphCount:&glyphCountForRange]; + HFASSERT(glyphCountForRange != NSUIntegerMax); + glyphBufferIndex += glyphCountForRange; + priorIntersectionRange = intersectionRange; + } + if (resultingGlyphCount) *resultingGlyphCount = glyphBufferIndex; +} + +- (void)drawTextWithClip:(NSRect)clip restrictingToTextInRanges:(NSArray *)restrictingToRanges { + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + NSRect bounds = [self bounds]; + CGFloat lineHeight = [self lineHeight]; + + CGAffineTransform textTransform = CGContextGetTextMatrix(ctx); + CGContextSetTextDrawingMode(ctx, kCGTextFill); + + NSUInteger lineStartIndex, bytesPerLine = [self bytesPerLine]; + NSData *dataObject = [self data]; + NSFont *fontObject = [[self font] screenFont]; + //const NSUInteger bytesPerChar = [self bytesPerCharacter]; + const NSUInteger byteCount = [dataObject length]; + + const unsigned char * const bytePtr = [dataObject bytes]; + + NSRect lineRectInBoundsSpace = NSMakeRect(NSMinX(bounds), NSMinY(bounds), NSWidth(bounds), lineHeight); + lineRectInBoundsSpace.origin.y -= [self verticalOffset] * lineHeight; + + /* Start us off with the horizontal inset and move the baseline down by the ascender so our glyphs just graze the top of our view */ + textTransform.tx += [self horizontalContainerInset]; + textTransform.ty += [fontObject ascender] - lineHeight * [self verticalOffset]; + NSUInteger lineIndex = 0; + const NSUInteger maxGlyphCount = [self maximumGlyphCountForByteCount:bytesPerLine]; + NEW_ARRAY(struct HFGlyph_t, glyphs, maxGlyphCount); + NEW_ARRAY(CGSize, advances, maxGlyphCount); + for (lineStartIndex = 0; lineStartIndex < byteCount; lineStartIndex += bytesPerLine) { + if (lineStartIndex > 0) { + textTransform.ty += lineHeight; + lineRectInBoundsSpace.origin.y += lineHeight; + } + if (NSIntersectsRect(lineRectInBoundsSpace, clip)) { + const NSUInteger bytesInThisLine = MIN(bytesPerLine, byteCount - lineStartIndex); + + /* Draw the backgrounds of any styles. */ + [self drawStyledBackgroundsForByteRange:NSMakeRange(lineStartIndex, bytesInThisLine) inRect:lineRectInBoundsSpace]; + + NSUInteger byteIndexInLine = 0; + CGFloat advanceIntoLine = 0; + while (byteIndexInLine < bytesInThisLine) { + const NSUInteger byteIndex = lineStartIndex + byteIndexInLine; + HFTextVisualStyleRun *styleRun = [self styleRunForByteAtIndex:byteIndex]; + HFASSERT(styleRun != nil); + HFASSERT(byteIndex >= [styleRun range].location); + const NSUInteger bytesInThisRun = MIN(NSMaxRange([styleRun range]) - byteIndex, bytesInThisLine - byteIndexInLine); + const NSRange characterRange = [self roundPartialByteRange:NSMakeRange(byteIndex, bytesInThisRun)]; + if (characterRange.length > 0) { + NSUInteger resultGlyphCount = 0; + CGFloat initialTextOffset = 0; + if (restrictingToRanges == nil) { + [self extractGlyphsForBytes:bytePtr + characterRange.location count:characterRange.length offsetIntoLine:byteIndexInLine intoArray:glyphs advances:advances resultingGlyphCount:&resultGlyphCount]; + } + else { + [self extractGlyphsForBytes:bytePtr range:NSMakeRange(byteIndex, bytesInThisRun) intoArray:glyphs advances:advances withInclusionRanges:restrictingToRanges initialTextOffset:&initialTextOffset resultingGlyphCount:&resultGlyphCount]; + } + HFASSERT(resultGlyphCount <= maxGlyphCount); + +#if ! NDEBUG + for (NSUInteger q=0; q < resultGlyphCount; q++) { + HFASSERT(glyphs[q].fontIndex != kHFGlyphFontIndexInvalid); + } +#endif + + if (resultGlyphCount > 0) { + textTransform.tx += initialTextOffset + advanceIntoLine; + CGContextSetTextMatrix(ctx, textTransform); + /* Draw them */ + [self drawGlyphs:glyphs atPoint:NSMakePoint(textTransform.tx, textTransform.ty) withAdvances:advances withStyleRun:styleRun count:resultGlyphCount]; + + /* Undo the work we did before so as not to screw up the next run */ + textTransform.tx -= initialTextOffset + advanceIntoLine; + + /* Record how far into our line this made us move */ + NSUInteger glyphIndex; + for (glyphIndex = 0; glyphIndex < resultGlyphCount; glyphIndex++) { + advanceIntoLine += advances[glyphIndex].width; + } + } + } + byteIndexInLine += bytesInThisRun; + } + } + else if (NSMinY(lineRectInBoundsSpace) > NSMaxY(clip)) { + break; + } + lineIndex++; + } + FREE_ARRAY(glyphs); + FREE_ARRAY(advances); +} + + +- (void)drawFocusRingWithClip:(NSRect)clip { + USE(clip); + [NSGraphicsContext saveGraphicsState]; + NSSetFocusRingStyle(NSFocusRingOnly); + [[NSColor clearColor] set]; + NSRectFill([self bounds]); + [NSGraphicsContext restoreGraphicsState]; +} + +- (BOOL)shouldDrawCallouts { + return _hftvflags.drawCallouts; +} + +- (void)setShouldDrawCallouts:(BOOL)val { + _hftvflags.drawCallouts = val; + [self setNeedsDisplay:YES]; +} + +- (void)drawBookmarksWithClip:(NSRect)clip { + if([self shouldDrawCallouts]) { + /* Figure out which callouts we're going to draw */ + NSRect allCalloutsRect = NSZeroRect; + NSMutableArray *localCallouts = [[NSMutableArray alloc] initWithCapacity:[callouts count]]; + FOREACH(HFRepresenterTextViewCallout *, callout, [callouts objectEnumerator]) { + NSRect calloutRect = [callout rect]; + if (NSIntersectsRect(clip, calloutRect)) { + [localCallouts addObject:callout]; + allCalloutsRect = NSUnionRect(allCalloutsRect, calloutRect); + } + } + allCalloutsRect = NSIntersectionRect(allCalloutsRect, clip); + + if ([localCallouts count]) { + /* Draw shadows first */ + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + CGContextBeginTransparencyLayerWithRect(ctx, NSRectToCGRect(allCalloutsRect), NULL); + FOREACH(HFRepresenterTextViewCallout *, callout, localCallouts) { + [callout drawShadowWithClip:clip]; + } + CGContextEndTransparencyLayer(ctx); + + FOREACH(HFRepresenterTextViewCallout *, newCallout, localCallouts) { + // NSRect rect = [callout rect]; + // [[NSColor greenColor] set]; + // NSFrameRect(rect); + [newCallout drawWithClip:clip]; + } + } + [localCallouts release]; + } +} + +- (void)drawRect:(NSRect)clip { + [[self backgroundColorForEmptySpace] set]; + NSRectFillUsingOperation(clip, NSCompositeSourceOver); + BOOL antialias = [self shouldAntialias]; + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + + [[self.font screenFont] set]; + + if ([self showsFocusRing]) { + NSWindow *window = [self window]; + if (self == [window firstResponder] && [window isKeyWindow]) { + [self drawFocusRingWithClip:clip]; + } + } + + NSUInteger bytesPerLine = [self bytesPerLine]; + if (bytesPerLine == 0) return; + NSUInteger byteCount = [_data length]; + + [self _drawDefaultLineBackgrounds:clip withLineHeight:[self lineHeight] maxLines:ll2l(HFRoundUpToNextMultipleSaturate(byteCount, bytesPerLine) / bytesPerLine)]; + [self drawSelectionIfNecessaryWithClip:clip]; + + NSColor *textColor = [NSColor textColor]; + [textColor set]; + + if (! antialias) { + CGContextSaveGState(ctx); + CGContextSetShouldAntialias(ctx, NO); + } + [self drawTextWithClip:clip restrictingToTextInRanges:nil]; + if (! antialias) { + CGContextRestoreGState(ctx); + } + + // Vertical dividers only make sense in single byte mode. + if ([self _effectiveBytesPerColumn] == 1) { + [self drawVerticalGuideLines:clip]; + } + + [self drawCaretIfNecessaryWithClip:clip]; + + [self drawBookmarksWithClip:clip]; +} + +- (NSRect)furthestRectOnEdge:(NSRectEdge)edge forRange:(NSRange)byteRange { + HFASSERT(edge == NSMinXEdge || edge == NSMaxXEdge || edge == NSMinYEdge || edge == NSMaxYEdge); + const NSUInteger bytesPerLine = [self bytesPerLine]; + CGFloat lineHeight = [self lineHeight]; + CGFloat vertOffset = [self verticalOffset]; + NSUInteger firstLine = byteRange.location / bytesPerLine, lastLine = (NSMaxRange(byteRange) - 1) / bytesPerLine; + NSRect result = NSZeroRect; + + if (edge == NSMinYEdge || edge == NSMaxYEdge) { + /* This is the top (MinY) or bottom (MaxY). We only have to look at one line. */ + NSUInteger lineIndex = (edge == NSMinYEdge ? firstLine : lastLine); + NSRange lineRange = NSMakeRange(lineIndex * bytesPerLine, bytesPerLine); + NSRange intersection = NSIntersectionRange(lineRange, byteRange); + HFASSERT(intersection.length > 0); + CGFloat yOrigin = (lineIndex - vertOffset) * lineHeight; + CGFloat xStart = [self originForCharacterAtByteIndex:intersection.location].x; + CGFloat xEnd = [self originForCharacterAtByteIndex:NSMaxRange(intersection) - 1].x + [self advancePerCharacter]; + result = NSMakeRect(xStart, yOrigin, xEnd - xStart, 0); + } + else { + if (firstLine == lastLine) { + /* We only need to consider this one line */ + NSRange lineRange = NSMakeRange(firstLine * bytesPerLine, bytesPerLine); + NSRange intersection = NSIntersectionRange(lineRange, byteRange); + HFASSERT(intersection.length > 0); + CGFloat yOrigin = (firstLine - vertOffset) * lineHeight; + CGFloat xCoord; + if (edge == NSMinXEdge) { + xCoord = [self originForCharacterAtByteIndex:intersection.location].x; + } + else { + xCoord = [self originForCharacterAtByteIndex:NSMaxRange(intersection) - 1].x + [self advancePerCharacter]; + } + result = NSMakeRect(xCoord, yOrigin, 0, lineHeight); + } + else { + /* We have more than one line. If we are asking for the left edge, sum up the left edge of every line but the first, and handle the first specially. Likewise for the right edge (except handle the last specially) */ + BOOL includeFirstLine, includeLastLine; + CGFloat xCoord; + if (edge == NSMinXEdge) { + /* Left edge, include the first line only if it starts at the beginning of the line or there's only one line */ + includeFirstLine = (byteRange.location % bytesPerLine == 0); + includeLastLine = YES; + xCoord = [self horizontalContainerInset]; + } + else { + /* Right edge, include the last line only if it starts at the beginning of the line or there's only one line */ + includeFirstLine = YES; + includeLastLine = (NSMaxRange(byteRange) % bytesPerLine == 0); + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + /* Don't add in space for the advance after the last column, hence subtract 1. */ + NSUInteger numColumns = (bytesPerColumn ? (bytesPerLine / bytesPerColumn - 1) : 0); + xCoord = [self horizontalContainerInset] + ([self advancePerCharacter] * bytesPerLine / [self bytesPerCharacter]) + [self advanceBetweenColumns] * numColumns; + } + NSUInteger firstLineToInclude = (includeFirstLine ? firstLine : firstLine + 1), lastLineToInclude = (includeLastLine ? lastLine : lastLine - 1); + result = NSMakeRect(xCoord, (firstLineToInclude - [self verticalOffset]) * lineHeight, 0, (lastLineToInclude - firstLineToInclude + 1) * lineHeight); + } + } + return result; +} + +- (NSUInteger)availableLineCount { + CGFloat result = (CGFloat)ceil(NSHeight([self bounds]) / [self lineHeight]); + HFASSERT(result >= 0.); + HFASSERT(result <= NSUIntegerMax); + return (NSUInteger)result; +} + +- (double)maximumAvailableLinesForViewHeight:(CGFloat)viewHeight { + return viewHeight / [self lineHeight]; +} + +- (void)setFrameSize:(NSSize)size { + NSUInteger currentBytesPerLine = [self bytesPerLine]; + double currentLineCount = [self maximumAvailableLinesForViewHeight:NSHeight([self bounds])]; + [super setFrameSize:size]; + NSUInteger newBytesPerLine = [self maximumBytesPerLineForViewWidth:size.width]; + double newLineCount = [self maximumAvailableLinesForViewHeight:NSHeight([self bounds])]; + HFControllerPropertyBits bits = 0; + if (newBytesPerLine != currentBytesPerLine) bits |= (HFControllerBytesPerLine | HFControllerDisplayedLineRange); + if (newLineCount != currentLineCount) bits |= HFControllerDisplayedLineRange; + if (bits) [[self representer] representerChangedProperties:bits]; +} + +- (CGFloat)advanceBetweenColumns { + UNIMPLEMENTED(); +} + +- (CGFloat)advancePerCharacter { + UNIMPLEMENTED(); +} + +- (CGFloat)advancePerColumn { + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + if (bytesPerColumn == 0) { + return 0; + } + else { + return [self advancePerCharacter] * (bytesPerColumn / [self bytesPerCharacter]) + [self advanceBetweenColumns]; + } +} + +- (CGFloat)totalAdvanceForBytesInRange:(NSRange)range { + if (range.length == 0) return 0; + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + HFASSERT(bytesPerColumn == 0 || [self bytesPerLine] % bytesPerColumn == 0); + CGFloat result = (range.length * [self advancePerCharacter] / [self bytesPerCharacter]) ; + if (bytesPerColumn > 0) { + NSUInteger numColumnSpaces = NSMaxRange(range) / bytesPerColumn - range.location / bytesPerColumn; //note that integer division does not distribute + result += numColumnSpaces * [self advanceBetweenColumns]; + } + return result; +} + +/* Returns the number of bytes in a character, e.g. if we are UTF-16 this would be 2. */ +- (NSUInteger)bytesPerCharacter { + return 1; +} + +- (NSUInteger)maximumBytesPerLineForViewWidth:(CGFloat)viewWidth { + CGFloat availableSpace = (CGFloat)(viewWidth - 2. * [self horizontalContainerInset]); + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn], bytesPerCharacter = [self bytesPerCharacter]; + if (bytesPerColumn == 0) { + /* No columns */ + NSUInteger numChars = (NSUInteger)(availableSpace / [self advancePerCharacter]); + /* Return it, except it's at least one character */ + return MAX(numChars, 1u) * bytesPerCharacter; + } + else { + /* We have some columns */ + CGFloat advancePerColumn = [self advancePerColumn]; + //spaceRequiredForNColumns = N * (advancePerColumn) - spaceBetweenColumns + CGFloat fractionalColumns = (availableSpace + [self advanceBetweenColumns]) / advancePerColumn; + NSUInteger columnCount = (NSUInteger)fmax(1., HFFloor(fractionalColumns)); + return columnCount * bytesPerColumn; + } +} + + +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine { + HFASSERT(bytesPerLine > 0); + NSUInteger bytesPerColumn = [self _effectiveBytesPerColumn]; + CGFloat result; + if (bytesPerColumn == 0) { + result = (CGFloat)((2. * [self horizontalContainerInset]) + [self advancePerCharacter] * (bytesPerLine / [self bytesPerCharacter])); + } + else { + HFASSERT(bytesPerLine % bytesPerColumn == 0); + result = (CGFloat)((2. * [self horizontalContainerInset]) + [self advancePerColumn] * (bytesPerLine / bytesPerColumn) - [self advanceBetweenColumns]); + } + return result; +} + +- (BOOL)isEditable { + return _hftvflags.editable; +} + +- (void)setEditable:(BOOL)val { + if (val != _hftvflags.editable) { + _hftvflags.editable = val; + [self _updateCaretTimer]; + } +} + +- (BOOL)shouldAntialias { + return _hftvflags.antialias; +} + +- (void)setShouldAntialias:(BOOL)val { + _hftvflags.antialias = !!val; + [self setNeedsDisplay:YES]; +} + +- (BOOL)behavesAsTextField { + return [[self representer] behavesAsTextField]; +} + +- (BOOL)showsFocusRing { + return [[self representer] behavesAsTextField]; +} + +- (BOOL)isWithinMouseDown { + return _hftvflags.withinMouseDown; +} + +- (void)_windowDidChangeKeyStatus:(NSNotification *)note { + USE(note); + [self _updateCaretTimer]; + if ([[note name] isEqualToString:NSWindowDidBecomeKeyNotification]) { + [self _forceCaretOnIfHasCaretTimer]; + } + if ([self showsFocusRing] && self == [[self window] firstResponder]) { + [[self superview] setNeedsDisplayInRect:NSInsetRect([self frame], -6, -6)]; + } + [self setNeedsDisplay:YES]; +} + +- (void)viewDidMoveToWindow { + [self _updateCaretTimer]; + HFRegisterViewForWindowAppearanceChanges(self, @selector(_windowDidChangeKeyStatus:), ! _hftvflags.registeredForAppNotifications); + _hftvflags.registeredForAppNotifications = YES; + [super viewDidMoveToWindow]; +} + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow { + HFUnregisterViewForWindowAppearanceChanges(self, NO /* appToo */); + [super viewWillMoveToWindow:newWindow]; +} + +/* Computes the character at the given index for selection, properly handling the case where the point is outside the bounds */ +- (NSUInteger)characterAtPointForSelection:(NSPoint)point { + NSPoint mungedPoint = point; + // shift us right by half an advance so that we trigger at the midpoint of each character, rather than at the x origin + mungedPoint.x += [self advancePerCharacter] / (CGFloat)2.; + // make sure we're inside the bounds + const NSRect bounds = [self bounds]; + mungedPoint.x = HFMax(NSMinX(bounds), mungedPoint.x); + mungedPoint.x = HFMin(NSMaxX(bounds), mungedPoint.x); + mungedPoint.y = HFMax(NSMinY(bounds), mungedPoint.y); + mungedPoint.y = HFMin(NSMaxY(bounds), mungedPoint.y); + return [self indexOfCharacterAtPoint:mungedPoint]; +} + +- (NSUInteger)maximumCharacterIndex { + //returns the maximum character index that the selection may lie on. It is one beyond the last byte index, to represent the cursor at the end of the document. + return [[self data] length] / [self bytesPerCharacter]; +} + +- (void)mouseDown:(NSEvent *)event { + HFASSERT(_hftvflags.withinMouseDown == 0); + _hftvflags.withinMouseDown = 1; + [self _forceCaretOnIfHasCaretTimer]; + NSPoint mouseDownLocation = [self convertPoint:[event locationInWindow] fromView:nil]; + NSUInteger characterIndex = [self characterAtPointForSelection:mouseDownLocation]; + + characterIndex = MIN(characterIndex, [self maximumCharacterIndex]); //characterIndex may be one beyond the last index, to represent the cursor at the end of the document + [[self representer] beginSelectionWithEvent:event forCharacterIndex:characterIndex]; + + /* Drive the event loop in event tracking mode until we're done */ + HFASSERT(_hftvflags.receivedMouseUp == NO); //paranoia - detect any weird recursive invocations + NSDate *endDate = [NSDate distantFuture]; + + /* Start periodic events for autoscroll */ + [NSEvent startPeriodicEventsAfterDelay:0.1 withPeriod:0.05]; + + NSPoint autoscrollLocation = mouseDownLocation; + while (! _hftvflags.receivedMouseUp) { + @autoreleasepool { + NSEvent *ev = [NSApp nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask | NSPeriodicMask untilDate:endDate inMode:NSEventTrackingRunLoopMode dequeue:YES]; + + if ([ev type] == NSPeriodic) { + // autoscroll if drag is out of view bounds + CGFloat amountToScroll = 0; + NSRect bounds = [self bounds]; + if (autoscrollLocation.y < NSMinY(bounds)) { + amountToScroll = (autoscrollLocation.y - NSMinY(bounds)) / [self lineHeight]; + } + else if (autoscrollLocation.y > NSMaxY(bounds)) { + amountToScroll = (autoscrollLocation.y - NSMaxY(bounds)) / [self lineHeight]; + } + if (amountToScroll != 0.) { + [[[self representer] controller] scrollByLines:amountToScroll]; + characterIndex = [self characterAtPointForSelection:autoscrollLocation]; + characterIndex = MIN(characterIndex, [self maximumCharacterIndex]); + [[self representer] continueSelectionWithEvent:ev forCharacterIndex:characterIndex]; + } + } + else if ([ev type] == NSLeftMouseDragged) { + autoscrollLocation = [self convertPoint:[ev locationInWindow] fromView:nil]; + } + + [NSApp sendEvent:ev]; + } // @autoreleasepool + } + + [NSEvent stopPeriodicEvents]; + + _hftvflags.receivedMouseUp = NO; + _hftvflags.withinMouseDown = 0; +} + +- (void)mouseDragged:(NSEvent *)event { + if (! _hftvflags.withinMouseDown) return; + NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil]; + NSUInteger characterIndex = [self characterAtPointForSelection:location]; + characterIndex = MIN(characterIndex, [self maximumCharacterIndex]); + [[self representer] continueSelectionWithEvent:event forCharacterIndex:characterIndex]; +} + +- (void)mouseUp:(NSEvent *)event { + if (! _hftvflags.withinMouseDown) return; + NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil]; + NSUInteger characterIndex = [self characterAtPointForSelection:location]; + characterIndex = MIN(characterIndex, [self maximumCharacterIndex]); + [[self representer] endSelectionWithEvent:event forCharacterIndex:characterIndex]; + _hftvflags.receivedMouseUp = YES; +} + +- (void)keyDown:(NSEvent *)event { + HFASSERT(event != NULL); + [self interpretKeyEvents:@[event]]; +} + +- (void)scrollWheel:(NSEvent *)event { + [[self representer] scrollWheel:event]; +} + +- (void)insertText:(id)string { + if (! [self isEditable]) { + NSBeep(); + } + else { + if ([string isKindOfClass:[NSAttributedString class]]) string = [string string]; + [NSCursor setHiddenUntilMouseMoves:YES]; + [[self representer] insertText:string]; + } +} + +- (BOOL)handleCommand:(SEL)sel { + if (sel == @selector(insertTabIgnoringFieldEditor:)) { + [self insertText:@"\t"]; + } + else if ([self respondsToSelector:sel]) { + [self performSelector:sel withObject:nil]; + } + else { + return NO; + } + return YES; +} + +- (void)doCommandBySelector:(SEL)sel { + HFRepresenter *rep = [self representer]; + // NSLog(@"%s%s", _cmd, sel); + if ([self handleCommand:sel]) { + /* Nothing to do */ + } + else if ([rep respondsToSelector:sel]) { + [rep performSelector:sel withObject:self]; + } + else { + [super doCommandBySelector:sel]; + } +} + +- (IBAction)selectAll:sender { + [[self representer] selectAll:sender]; +} + +/* Indicates whether at least one byte is selected */ +- (BOOL)_selectionIsNonEmpty { + NSArray *selection = [[[self representer] controller] selectedContentsRanges]; + FOREACH(HFRangeWrapper *, rangeWrapper, selection) { + if ([rangeWrapper HFRange].length > 0) return YES; + } + return NO; +} + +- (SEL)_pasteboardOwnerStringTypeWritingSelector { + UNIMPLEMENTED(); +} + +- (void)paste:sender { + if (! [self isEditable]) { + NSBeep(); + } + else { + USE(sender); + [[self representer] pasteBytesFromPasteboard:[NSPasteboard generalPasteboard]]; + } +} + +- (void)copy:sender { + USE(sender); + [[self representer] copySelectedBytesToPasteboard:[NSPasteboard generalPasteboard]]; +} + +- (void)cut:sender { + USE(sender); + [[self representer] cutSelectedBytesToPasteboard:[NSPasteboard generalPasteboard]]; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)item { + SEL action = [item action]; + if (action == @selector(selectAll:)) return YES; + else if (action == @selector(cut:)) return [[self representer] canCut]; + else if (action == @selector(copy:)) return [self _selectionIsNonEmpty]; + else if (action == @selector(paste:)) return [[self representer] canPasteFromPasteboard:[NSPasteboard generalPasteboard]]; + else return YES; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.h b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.h new file mode 100644 index 000000000..42ae7e3ae --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.h @@ -0,0 +1,31 @@ +// +// HFRepresenterTextViewCallout.h +// HexFiend_2 +// +// Copyright 2011 ridiculous_fish. All rights reserved. +// + +#import + +@class HFRepresenterTextView; + +#define kHFRepresenterTextViewCalloutMaxGlyphCount 2u + +@interface HFRepresenterTextViewCallout : NSObject { + CGFloat rotation; + NSPoint tipOrigin; + NSPoint pinStart, pinEnd; +} + +@property(nonatomic) NSInteger byteOffset; +@property(nonatomic, copy) NSColor *color; +@property(nonatomic, copy) NSString *label; +@property(nonatomic, retain) id representedObject; +@property(readonly) NSRect rect; + ++ (void)layoutCallouts:(NSArray *)callouts inView:(HFRepresenterTextView *)textView; + +- (void)drawShadowWithClip:(NSRect)clip; +- (void)drawWithClip:(NSRect)clip; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.m b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.m new file mode 100644 index 000000000..bb4b58e89 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextViewCallout.m @@ -0,0 +1,477 @@ +// +// HFRepresenterTextViewCallout.m +// HexFiend_2 +// +// Copyright 2011 ridiculous_fish. All rights reserved. +// + +#import "HFRepresenterTextViewCallout.h" +#import "HFRepresenterTextView.h" + +static const CGFloat HFTeardropRadius = 12; +static const CGFloat HFTeadropTipScale = 2.5; + +static const CGFloat HFShadowXOffset = -6; +static const CGFloat HFShadowYOffset = 0; +static const CGFloat HFShadowOffscreenHack = 3100; + +static NSPoint rotatePoint(NSPoint center, NSPoint point, CGFloat percent) { + CGFloat radians = percent * M_PI * 2; + CGFloat x = point.x - center.x; + CGFloat y = point.y - center.y; + CGFloat newX = x * cos(radians) + y * sin(radians); + CGFloat newY = x * -sin(radians) + y * cos(radians); + return NSMakePoint(center.x + newX, center.y + newY); +} + +static NSPoint scalePoint(NSPoint center, NSPoint point, CGFloat percent) { + CGFloat x = point.x - center.x; + CGFloat y = point.y - center.y; + CGFloat newX = x * percent; + CGFloat newY = y * percent; + return NSMakePoint(center.x + newX, center.y + newY); +} + +static NSBezierPath *copyTeardropPath(void) { + static NSBezierPath *sPath = nil; + if (! sPath) { + + CGFloat radius = HFTeardropRadius; + CGFloat rotation = 0; + CGFloat droppiness = .15; + CGFloat tipScale = HFTeadropTipScale; + CGFloat tipLengthFromCenter = radius * tipScale; + NSPoint bulbCenter = NSMakePoint(-tipLengthFromCenter, 0); + + NSPoint triangleCenter = rotatePoint(bulbCenter, NSMakePoint(bulbCenter.x + radius, bulbCenter.y), rotation); + NSPoint dropCorner1 = rotatePoint(bulbCenter, triangleCenter, droppiness / 2); + NSPoint dropCorner2 = rotatePoint(bulbCenter, triangleCenter, -droppiness / 2); + NSPoint dropTip = scalePoint(bulbCenter, triangleCenter, tipScale); + + NSBezierPath *path = [[NSBezierPath alloc] init]; + [path appendBezierPathWithArcWithCenter:bulbCenter radius:radius startAngle:-rotation * 360 + droppiness * 180. endAngle:-rotation * 360 - droppiness * 180. clockwise:NO]; + + [path moveToPoint:dropCorner1]; + [path lineToPoint:dropTip]; + [path lineToPoint:dropCorner2]; + [path closePath]; + + sPath = path; + } + return [sPath retain]; +} + + +@implementation HFRepresenterTextViewCallout + +/* A helpful struct for representing a wedge (portion of a circle). Wedges are counterclockwise. */ +typedef struct { + double offset; // 0 <= offset < 1 + double length; // 0 <= length <= 1 +} Wedge_t; + + +static inline double normalizeAngle(double x) { + /* Convert an angle to the range [0, 1). We typically only generate angles that are off by a full rotation, so a loop isn't too bad. */ + while (x >= 1.) x -= 1.; + while (x < 0.) x += 1.; + return x; +} + +static inline double distanceCCW(double a, double b) { return normalizeAngle(b-a); } + +static inline double wedgeMax(Wedge_t wedge) { + return normalizeAngle(wedge.offset + wedge.length); +} + +/* Computes the smallest wedge containing the two given wedges. Compute the wedge from the min of one to the furthest part of the other, and pick the smaller. */ +static Wedge_t wedgeUnion(Wedge_t wedge1, Wedge_t wedge2) { + // empty wedges don't participate + if (wedge1.length <= 0) return wedge2; + if (wedge2.length <= 0) return wedge1; + + Wedge_t union1 = wedge1; + union1.length = fmin(1., fmax(union1.length, distanceCCW(union1.offset, wedge2.offset) + wedge2.length)); + + Wedge_t union2 = wedge2; + union2.length = fmin(1., fmax(union2.length, distanceCCW(union2.offset, wedge1.offset) + wedge1.length)); + + Wedge_t result = (union1.length <= union2.length ? union1 : union2); + HFASSERT(result.length <= 1); + return result; +} + +- (instancetype)init { + self = [super init]; + if (self) { + // Initialization code here. + } + + return self; +} + +- (void)dealloc { + [_representedObject release]; + [_color release]; + [_label release]; + [super dealloc]; +} + +- (NSComparisonResult)compare:(HFRepresenterTextViewCallout *)callout { + return [_representedObject compare:callout.representedObject]; +} + +static Wedge_t computeForbiddenAngle(double distanceFromEdge, double angleToEdge) { + Wedge_t newForbiddenAngle; + + /* This is how far it is to the center of our teardrop */ + const double teardropLength = HFTeardropRadius * HFTeadropTipScale; + + if (distanceFromEdge <= 0) { + /* We're above or below. */ + if (-distanceFromEdge >= (teardropLength + HFTeardropRadius)) { + /* We're so far above or below we won't be visible at all. No hope. */ + newForbiddenAngle = (Wedge_t){.offset = 0, .length = 1}; + } else { + /* We're either above or below the bounds, but there's a hope we can be visible */ + + double invertedAngleToEdge = normalizeAngle(angleToEdge + .5); + double requiredAngle; + if (-distanceFromEdge >= teardropLength) { + // We're too far north or south that all we can do is point in the right direction + requiredAngle = 0; + } else { + // By confining ourselves to required angles, we can make ourselves visible + requiredAngle = acos(-distanceFromEdge / teardropLength) / (2 * M_PI); + } + // Require at least a small spread + requiredAngle = fmax(requiredAngle, .04); + + double requiredMin = invertedAngleToEdge - requiredAngle; + double requiredMax = invertedAngleToEdge + requiredAngle; + + newForbiddenAngle = (Wedge_t){.offset = requiredMax, .length = distanceCCW(requiredMax, requiredMin) }; + } + } else if (distanceFromEdge < teardropLength) { + // We're onscreen, but some angle will be forbidden + double forbiddenAngle = acos(distanceFromEdge / teardropLength) / (2 * M_PI); + + // This is a wedge out of the top (or bottom) + newForbiddenAngle = (Wedge_t){.offset = angleToEdge - forbiddenAngle, .length = 2 * forbiddenAngle}; + } else { + /* Nothing prohibited at all */ + newForbiddenAngle = (Wedge_t){0, 0}; + } + return newForbiddenAngle; +} + + +static double distanceMod1(double a, double b) { + /* Assuming 0 <= a, b < 1, returns the distance between a and b, mod 1 */ + if (a > b) { + return fmin(a-b, b-a+1); + } else { + return fmin(b-a, a-b+1); + } +} + ++ (void)layoutCallouts:(NSArray *)callouts inView:(HFRepresenterTextView *)textView { + + // Keep track of how many drops are at a given location + NSCountedSet *dropsPerByteLoc = [[NSCountedSet alloc] init]; + + const CGFloat lineHeight = [textView lineHeight]; + const NSRect bounds = [textView bounds]; + + NSMutableArray *remainingCallouts = [[callouts mutableCopy] autorelease]; + [remainingCallouts sortUsingSelector:@selector(compare:)]; + + while ([remainingCallouts count] > 0) { + /* Get the next callout to lay out */ + const NSInteger byteLoc = [remainingCallouts[0] byteOffset]; + + /* Get all the callouts that share that byteLoc */ + NSMutableArray *sharedCallouts = [NSMutableArray array]; + FOREACH(HFRepresenterTextViewCallout *, testCallout, remainingCallouts) { + if ([testCallout byteOffset] == byteLoc) { + [sharedCallouts addObject:testCallout]; + } + } + + /* We expect to get at least one */ + const NSUInteger calloutCount = [sharedCallouts count]; + HFASSERT(calloutCount > 0); + + /* Get the character origin */ + const NSPoint characterOrigin = [textView originForCharacterAtByteIndex:byteLoc]; + + Wedge_t forbiddenAngle = {0, 0}; + + // Compute how far we are from the top (or bottom) + BOOL isNearerTop = (characterOrigin.y < NSMidY(bounds)); + double verticalDistance = (isNearerTop ? characterOrigin.y - NSMinY(bounds) : NSMaxY(bounds) - characterOrigin.y); + forbiddenAngle = wedgeUnion(forbiddenAngle, computeForbiddenAngle(verticalDistance, (isNearerTop ? .25 : .75))); + + // Compute how far we are from the left (or right) + BOOL isNearerLeft = (characterOrigin.x < NSMidX(bounds)); + double horizontalDistance = (isNearerLeft ? characterOrigin.x - NSMinX(bounds) : NSMaxX(bounds) - characterOrigin.x); + forbiddenAngle = wedgeUnion(forbiddenAngle, computeForbiddenAngle(horizontalDistance, (isNearerLeft ? .5 : 0.))); + + + /* How much will each callout rotate? No more than 1/8th. */ + HFASSERT(forbiddenAngle.length <= 1); + double changeInRotationPerCallout = fmin(.125, (1. - forbiddenAngle.length) / calloutCount); + double totalConsumedAmount = changeInRotationPerCallout * calloutCount; + + /* We would like to center around .375. */ + const double goalCenter = .375; + + /* We're going to pretend to work on a line segment that extends from the max prohibited angle all the way back to min */ + double segmentLength = 1. - forbiddenAngle.length; + double goalSegmentCenter = normalizeAngle(goalCenter - wedgeMax(forbiddenAngle)); //may exceed segmentLength! + + /* Now center us on the goal, or as close as we can get. */ + double consumedSegmentCenter; + + /* We only need to worry about wrapping around if we have some prohibited angle */ + if (forbiddenAngle.length <= 0) { //never expect < 0, but be paranoid + consumedSegmentCenter = goalSegmentCenter; + } else { + + /* The consumed segment center is confined to the segment range [amount/2, length - amount/2] */ + double consumedSegmentCenterMin = totalConsumedAmount/2; + double consumedSegmentCenterMax = segmentLength - totalConsumedAmount/2; + if (goalSegmentCenter >= consumedSegmentCenterMin && goalSegmentCenter < consumedSegmentCenterMax) { + /* We can hit our goal */ + consumedSegmentCenter = goalSegmentCenter; + } else { + /* Pick either the min or max location, depending on which one gets us closer to the goal segment center mod 1. */ + if (distanceMod1(goalSegmentCenter, consumedSegmentCenterMin) <= distanceMod1(goalSegmentCenter, consumedSegmentCenterMax)) { + consumedSegmentCenter = consumedSegmentCenterMin; + } else { + consumedSegmentCenter = consumedSegmentCenterMax; + } + + } + } + + /* Now convert this back to an angle */ + double consumedAngleCenter = normalizeAngle(wedgeMax(forbiddenAngle) + consumedSegmentCenter); + + // move us slightly towards the character + NSPoint teardropTipOrigin = NSMakePoint(characterOrigin.x + 1, characterOrigin.y + floor(lineHeight / 8.)); + + // make the pin + NSPoint pinStart, pinEnd; + pinStart = NSMakePoint(characterOrigin.x + .25, characterOrigin.y); + pinEnd = NSMakePoint(pinStart.x, pinStart.y + lineHeight); + + // store it all, invalidating as necessary + NSInteger i = 0; + FOREACH(HFRepresenterTextViewCallout *, callout, sharedCallouts) { + + /* Compute the rotation */ + double seq = (i+1)/2; //0, 1, -1, 2, -2... + if ((i & 1) == 0) seq = -seq; + //if we've got an even number of callouts, we want -.5, .5, -1.5, 1.5... + if (! (calloutCount & 1)) seq -= .5; + // compute the angle of rotation + double angle = consumedAngleCenter + seq * changeInRotationPerCallout; + // our notion of rotation has 0 meaning pointing right and going counterclockwise, but callouts with 0 pointing left and going clockwise, so convert + angle = normalizeAngle(.5 - angle); + + + NSRect beforeRect = [callout rect]; + + callout->rotation = angle; + callout->tipOrigin = teardropTipOrigin; + callout->pinStart = pinStart; + callout->pinEnd = pinEnd; + + // Only the first gets a pin + pinStart = pinEnd = NSZeroPoint; + + NSRect afterRect = [callout rect]; + + if (! NSEqualRects(beforeRect, afterRect)) { + [textView setNeedsDisplayInRect:beforeRect]; + [textView setNeedsDisplayInRect:afterRect]; + } + + i++; + } + + + /* We're done laying out these callouts */ + [remainingCallouts removeObjectsInArray:sharedCallouts]; + } + + [dropsPerByteLoc release]; +} + +- (CGAffineTransform)teardropTransform { + CGAffineTransform trans = CGAffineTransformMakeTranslation(tipOrigin.x, tipOrigin.y); + trans = CGAffineTransformRotate(trans, rotation * M_PI * 2); + return trans; +} + +- (NSRect)teardropBaseRect { + NSSize teardropSize = NSMakeSize(HFTeardropRadius * (1 + HFTeadropTipScale), HFTeardropRadius*2); + NSRect result = NSMakeRect(-teardropSize.width, -teardropSize.height/2, teardropSize.width, teardropSize.height); + return result; +} + +- (CGAffineTransform)shadowTransform { + CGFloat shadowXOffset = HFShadowXOffset; + CGFloat shadowYOffset = HFShadowYOffset; + CGFloat offscreenOffset = HFShadowOffscreenHack; + + // Figure out how much movement the shadow offset produces + CGFloat shadowTranslationDistance = hypot(shadowXOffset, shadowYOffset); + + CGAffineTransform transform = CGAffineTransformIdentity; + transform = CGAffineTransformTranslate(transform, tipOrigin.x + offscreenOffset - shadowXOffset, tipOrigin.y - shadowYOffset); + transform = CGAffineTransformRotate(transform, rotation * M_PI * 2 - atan2(shadowTranslationDistance, 2*HFTeardropRadius /* bulbHeight */)); + return transform; +} + +- (void)drawShadowWithClip:(NSRect)clip { + USE(clip); + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + + // Set the shadow. Note that these shadows are pretty unphysical for high rotations. + NSShadow *shadow = [[NSShadow alloc] init]; + [shadow setShadowBlurRadius:5.]; + [shadow setShadowOffset:NSMakeSize(HFShadowXOffset - HFShadowOffscreenHack, HFShadowYOffset)]; + [shadow setShadowColor:[NSColor colorWithDeviceWhite:0. alpha:.5]]; + [shadow set]; + [shadow release]; + + // Draw the shadow first and separately + CGAffineTransform transform = [self shadowTransform]; + CGContextConcatCTM(ctx, transform); + + NSBezierPath *teardrop = copyTeardropPath(); + [teardrop fill]; + [teardrop release]; + + // Clear the shadow + CGContextSetShadowWithColor(ctx, CGSizeZero, 0, NULL); + + // Undo the transform + CGContextConcatCTM(ctx, CGAffineTransformInvert(transform)); +} + +- (void)drawWithClip:(NSRect)clip { + USE(clip); + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + // Here's the font we'll use + CTFontRef ctfont = CTFontCreateWithName(CFSTR("Helvetica-Bold"), 1., NULL); + if (ctfont) { + // Set the font + [(NSFont *)ctfont set]; + + // Get characters + NSUInteger labelLength = MIN([_label length], kHFRepresenterTextViewCalloutMaxGlyphCount); + UniChar calloutUniLabel[kHFRepresenterTextViewCalloutMaxGlyphCount]; + [_label getCharacters:calloutUniLabel range:NSMakeRange(0, labelLength)]; + + // Get our glyphs and advances + CGGlyph glyphs[kHFRepresenterTextViewCalloutMaxGlyphCount]; + CGSize advances[kHFRepresenterTextViewCalloutMaxGlyphCount]; + CTFontGetGlyphsForCharacters(ctfont, calloutUniLabel, glyphs, labelLength); + CTFontGetAdvancesForGlyphs(ctfont, kCTFontHorizontalOrientation, glyphs, advances, labelLength); + + // Count our glyphs. Note: this won't work with any label containing spaces, etc. + NSUInteger glyphCount; + for (glyphCount = 0; glyphCount < labelLength; glyphCount++) { + if (glyphs[glyphCount] == 0) break; + } + + // Set our color. + [_color set]; + + // Draw the pin first + if (! NSEqualPoints(pinStart, pinEnd)) { + [NSBezierPath setDefaultLineWidth:1.25]; + [NSBezierPath strokeLineFromPoint:pinStart toPoint:pinEnd]; + } + + CGContextSaveGState(ctx); + CGContextBeginTransparencyLayerWithRect(ctx, NSRectToCGRect([self rect]), NULL); + + // Rotate and translate in preparation for drawing the teardrop + CGContextConcatCTM(ctx, [self teardropTransform]); + + // Draw the teardrop + NSBezierPath *teardrop = copyTeardropPath(); + [teardrop fill]; + [teardrop release]; + + // Draw the text with white and alpha. Use blend mode copy so that we clip out the shadow, and when the transparency layer is ended we'll composite over the text. + CGFloat textScale = (glyphCount == 1 ? 24 : 20); + + // we are flipped by default, so invert the rotation's sign to get the text direction. Use a little slop so we don't get jitter. + const CGFloat textDirection = (rotation <= .27 || rotation >= .73) ? -1 : 1; + + CGPoint positions[kHFRepresenterTextViewCalloutMaxGlyphCount]; + CGFloat totalAdvance = 0; + for (NSUInteger i=0; i < glyphCount; i++) { + // make sure to provide negative advances if necessary + positions[i].x = copysign(totalAdvance, -textDirection); + positions[i].y = 0; + CGFloat advance = advances[i].width; + // Workaround 5834794 + advance *= textScale; + // Tighten up the advances a little + advance *= .85; + totalAdvance += advance; + } + + + // Compute the vertical offset + CGFloat textYOffset = (glyphCount == 1 ? 4 : 5); + // LOL + if ([_label isEqualToString:@"6"]) textYOffset -= 1; + + + // Apply this text matrix + NSRect bulbRect = [self teardropBaseRect]; + CGAffineTransform textMatrix = CGAffineTransformMakeScale(-copysign(textScale, textDirection), copysign(textScale, textDirection)); //roughly the font size we want + textMatrix.tx = NSMinX(bulbRect) + HFTeardropRadius + copysign(totalAdvance/2, textDirection); + + + if (textDirection < 0) { + textMatrix.ty = NSMaxY(bulbRect) - textYOffset; + } else { + textMatrix.ty = NSMinY(bulbRect) + textYOffset; + } + + // Draw + CGContextSetTextMatrix(ctx, textMatrix); + CGContextSetTextDrawingMode(ctx, kCGTextClip); + CGContextShowGlyphsAtPositions(ctx, glyphs, positions, glyphCount); + + CGContextSetBlendMode(ctx, kCGBlendModeCopy); + CGContextSetGrayFillColor(ctx, 1., .66); //faint white fill + CGContextFillRect(ctx, NSRectToCGRect(NSInsetRect(bulbRect, -20, -20))); + + // Done drawing, so composite + CGContextEndTransparencyLayer(ctx); + CGContextRestoreGState(ctx); // this also restores the clip, which is important + + // Done with the font + CFRelease(ctfont); + } +} + +- (NSRect)rect { + // get the transformed teardrop rect + NSRect result = NSRectFromCGRect(CGRectApplyAffineTransform(NSRectToCGRect([self teardropBaseRect]), [self teardropTransform])); + + // outset a bit for the shadow + result = NSInsetRect(result, -8, -8); + return result; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView_Internal.h b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView_Internal.h new file mode 100644 index 000000000..70eed2338 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenterTextView_Internal.h @@ -0,0 +1,11 @@ +#import + +#define GLYPH_BUFFER_SIZE 16u + +@interface HFRepresenterTextView (HFInternal) + +- (NSUInteger)_glyphsForString:(NSString *)string withGeneratingLayoutManager:(NSLayoutManager *)textView glyphs:(CGGlyph *)glyphs; +- (NSUInteger)_glyphsForString:(NSString *)string withGeneratingTextView:(NSTextView *)textView glyphs:(CGGlyph *)glyphs; +- (NSUInteger)_getGlyphs:(CGGlyph *)glyphs forString:(NSString *)string font:(NSFont *)font; //uses CoreText. Here glyphs must have space for [string length] glyphs. + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFRepresenter_Internal.h b/thirdparty/SameBoy-old/HexFiend/HFRepresenter_Internal.h new file mode 100644 index 000000000..9a0b704a7 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFRepresenter_Internal.h @@ -0,0 +1,7 @@ +#import + +@interface HFRepresenter (HFInternalStuff) + +- (void)_setController:(HFController *)controller; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.h b/thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.h new file mode 100644 index 000000000..204492dff --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.h @@ -0,0 +1,32 @@ +// +// HFSharedMemoryByteSlice.h +// HexFiend_2 +// +// Copyright 2008 ridiculous_fish. All rights reserved. +// + +#import + +/*! @class HFSharedMemoryByteSlice + @brief A subclass of HFByteSlice for working with data stored in memory. + + HFSharedMemoryByteSlice is a subclass of HFByteSlice that represents a portion of data from memory, e.g. typed or pasted in by the user. The term "shared" refers to the ability for mutiple HFSharedMemoryByteSlices to reference the same NSData; it does not mean that the data is in shared memory or shared between processes. + + Instances of HFSharedMemoryByteSlice are immutable (like all instances of HFByteSlice). However, to support efficient typing, the backing data is an instance of NSMutableData that may be grown. A referenced range of the NSMutableData will never have its contents changed, but it may be allowed to grow larger, so that the data does not have to be copied merely to append a single byte. This is implemented by overriding the -byteSliceByAppendingSlice: method of HFByteSlice. +*/ +@interface HFSharedMemoryByteSlice : HFByteSlice { + NSMutableData *data; + NSUInteger offset; + NSUInteger length; + unsigned char inlineTailLength; + unsigned char inlineTail[15]; //size chosen to exhaust padding of 32-byte allocator +} + +// copies the data +- (instancetype)initWithUnsharedData:(NSData *)data; + +// retains, does not copy +- (instancetype)initWithData:(NSMutableData *)data; +- (instancetype)initWithData:(NSMutableData *)data offset:(NSUInteger)offset length:(NSUInteger)length; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.m b/thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.m new file mode 100644 index 000000000..fe7f43cc6 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFSharedMemoryByteSlice.m @@ -0,0 +1,209 @@ +// +// HFSharedMemoryByteSlice.m +// HexFiend_2 +// +// Copyright 2008 ridiculous_fish. All rights reserved. +// + +#import +#import + +#define MAX_FAST_PATH_SIZE (1 << 13) + +#define MAX_TAIL_LENGTH (sizeof ((HFSharedMemoryByteSlice *)NULL)->inlineTail / sizeof *((HFSharedMemoryByteSlice *)NULL)->inlineTail) + +@implementation HFSharedMemoryByteSlice + +- (instancetype)initWithUnsharedData:(NSData *)unsharedData { + self = [super init]; + REQUIRE_NOT_NULL(unsharedData); + NSUInteger dataLength = [unsharedData length]; + NSUInteger inlineAmount = MIN(dataLength, MAX_TAIL_LENGTH); + NSUInteger sharedAmount = dataLength - inlineAmount; + HFASSERT(inlineAmount <= UCHAR_MAX); + inlineTailLength = (unsigned char)inlineAmount; + length = sharedAmount; + if (inlineAmount > 0) { + [unsharedData getBytes:inlineTail range:NSMakeRange(dataLength - inlineAmount, inlineAmount)]; + } + if (sharedAmount > 0) { + data = [[NSMutableData alloc] initWithBytes:[unsharedData bytes] length:sharedAmount]; + } + return self; +} + +// retains, does not copy +- (instancetype)initWithData:(NSMutableData *)dat { + REQUIRE_NOT_NULL(dat); + return [self initWithData:dat offset:0 length:[dat length]]; +} + +- (instancetype)initWithData:(NSMutableData *)dat offset:(NSUInteger)off length:(NSUInteger)len { + self = [super init]; + REQUIRE_NOT_NULL(dat); + HFASSERT(off + len >= off); //check for overflow + HFASSERT(off + len <= [dat length]); + offset = off; + length = len; + data = [dat retain]; + return self; +} + +- (instancetype)initWithSharedData:(NSMutableData *)dat offset:(NSUInteger)off length:(NSUInteger)len tail:(const void *)tail tailLength:(NSUInteger)tailLen { + self = [super init]; + if (off || len) REQUIRE_NOT_NULL(dat); + if (tailLen) REQUIRE_NOT_NULL(tail); + HFASSERT(tailLen <= MAX_TAIL_LENGTH); + HFASSERT(off + len >= off); + HFASSERT(off + len <= [dat length]); + offset = off; + length = len; + data = [dat retain]; + HFASSERT(tailLen <= UCHAR_MAX); + inlineTailLength = (unsigned char)tailLen; + memcpy(inlineTail, tail, tailLen); + HFASSERT([self length] == tailLen + len); + return self; +} + +- (void)dealloc { + [data release]; + [super dealloc]; +} + +- (unsigned long long)length { + return length + inlineTailLength; +} + +- (void)copyBytes:(unsigned char *)dst range:(HFRange)lrange { + HFASSERT(HFSum(length, inlineTailLength) >= HFMaxRange(lrange)); + NSRange requestedRange = NSMakeRange(ll2l(lrange.location), ll2l(lrange.length)); + NSRange dataRange = NSMakeRange(0, length); + NSRange tailRange = NSMakeRange(length, inlineTailLength); + NSRange dataRangeToCopy = NSIntersectionRange(requestedRange, dataRange); + NSRange tailRangeToCopy = NSIntersectionRange(requestedRange, tailRange); + HFASSERT(HFSum(dataRangeToCopy.length, tailRangeToCopy.length) == lrange.length); + + if (dataRangeToCopy.length > 0) { + HFASSERT(HFSum(NSMaxRange(dataRangeToCopy), offset) <= [data length]); + const void *bytes = [data bytes]; + memcpy(dst, bytes + dataRangeToCopy.location + offset, dataRangeToCopy.length); + } + if (tailRangeToCopy.length > 0) { + HFASSERT(tailRangeToCopy.location >= length); + HFASSERT(NSMaxRange(tailRangeToCopy) - length <= inlineTailLength); + memcpy(dst + dataRangeToCopy.length, inlineTail + tailRangeToCopy.location - length, tailRangeToCopy.length); + } +} + +- (HFByteSlice *)subsliceWithRange:(HFRange)lrange { + if (HFRangeEqualsRange(lrange, HFRangeMake(0, HFSum(length, inlineTailLength)))) return [[self retain] autorelease]; + + HFByteSlice *result; + HFASSERT(lrange.length > 0); + HFASSERT(HFSum(length, inlineTailLength) >= HFMaxRange(lrange)); + NSRange requestedRange = NSMakeRange(ll2l(lrange.location), ll2l(lrange.length)); + NSRange dataRange = NSMakeRange(0, length); + NSRange tailRange = NSMakeRange(length, inlineTailLength); + NSRange dataRangeToCopy = NSIntersectionRange(requestedRange, dataRange); + NSRange tailRangeToCopy = NSIntersectionRange(requestedRange, tailRange); + HFASSERT(HFSum(dataRangeToCopy.length, tailRangeToCopy.length) == lrange.length); + + NSMutableData *resultData = NULL; + NSUInteger resultOffset = 0; + NSUInteger resultLength = 0; + const unsigned char *tail = NULL; + NSUInteger tailLength = 0; + if (dataRangeToCopy.length > 0) { + resultData = data; + HFASSERT(resultData != NULL); + resultOffset = offset + dataRangeToCopy.location; + resultLength = dataRangeToCopy.length; + HFASSERT(HFSum(resultOffset, resultLength) <= [data length]); + } + if (tailRangeToCopy.length > 0) { + tail = inlineTail + tailRangeToCopy.location - length; + tailLength = tailRangeToCopy.length; + HFASSERT(tail >= inlineTail && tail + tailLength <= inlineTail + inlineTailLength); + } + HFASSERT(resultLength + tailLength == lrange.length); + result = [[[[self class] alloc] initWithSharedData:resultData offset:resultOffset length:resultLength tail:tail tailLength:tailLength] autorelease]; + HFASSERT([result length] == lrange.length); + return result; +} + +- (HFByteSlice *)byteSliceByAppendingSlice:(HFByteSlice *)slice { + REQUIRE_NOT_NULL(slice); + const unsigned long long sliceLength = [slice length]; + if (sliceLength == 0) return self; + + const unsigned long long thisLength = [self length]; + + HFASSERT(inlineTailLength <= MAX_TAIL_LENGTH); + NSUInteger spaceRemainingInTail = MAX_TAIL_LENGTH - inlineTailLength; + + if (sliceLength <= spaceRemainingInTail) { + /* We can do our work entirely within the tail */ + NSUInteger newTailLength = (NSUInteger)sliceLength + inlineTailLength; + unsigned char newTail[MAX_TAIL_LENGTH]; + memcpy(newTail, inlineTail, inlineTailLength); + [slice copyBytes:newTail + inlineTailLength range:HFRangeMake(0, sliceLength)]; + HFByteSlice *result = [[[[self class] alloc] initWithSharedData:data offset:offset length:length tail:newTail tailLength:newTailLength] autorelease]; + HFASSERT([result length] == HFSum(sliceLength, thisLength)); + return result; + } + else { + /* We can't do our work entirely in the tail; see if we can append some shared data. */ + HFASSERT(offset + length >= offset); + if (offset + length == [data length]) { + /* We can append some shared data. But impose some reasonable limit on how big our slice can get; this is 16 MB */ + if (HFSum(thisLength, sliceLength) < (1ULL << 24)) { + NSUInteger newDataOffset = offset; + NSUInteger newDataLength = length; + unsigned char newDataTail[MAX_TAIL_LENGTH]; + unsigned char newDataTailLength = MAX_TAIL_LENGTH; + NSMutableData *newData = (data ? data : [[[NSMutableData alloc] init] autorelease]); + + NSUInteger sliceLengthInt = ll2l(sliceLength); + NSUInteger newTotalTailLength = sliceLengthInt + inlineTailLength; + HFASSERT(newTotalTailLength >= MAX_TAIL_LENGTH); + NSUInteger amountToShiftIntoSharedData = newTotalTailLength - MAX_TAIL_LENGTH; + NSUInteger amountToShiftIntoSharedDataFromTail = MIN(amountToShiftIntoSharedData, inlineTailLength); + NSUInteger amountToShiftIntoSharedDataFromNewSlice = amountToShiftIntoSharedData - amountToShiftIntoSharedDataFromTail; + + if (amountToShiftIntoSharedDataFromTail > 0) { + HFASSERT(amountToShiftIntoSharedDataFromTail <= inlineTailLength); + [newData appendBytes:inlineTail length:amountToShiftIntoSharedDataFromTail]; + newDataLength += amountToShiftIntoSharedDataFromTail; + } + if (amountToShiftIntoSharedDataFromNewSlice > 0) { + HFASSERT(amountToShiftIntoSharedDataFromNewSlice <= [slice length]); + NSUInteger dataLength = offset + length + amountToShiftIntoSharedDataFromTail; + HFASSERT([newData length] == dataLength); + [newData setLength:dataLength + amountToShiftIntoSharedDataFromNewSlice]; + [slice copyBytes:[newData mutableBytes] + dataLength range:HFRangeMake(0, amountToShiftIntoSharedDataFromNewSlice)]; + newDataLength += amountToShiftIntoSharedDataFromNewSlice; + } + + /* We've updated our data; now figure out the tail */ + NSUInteger amountOfTailFromNewSlice = sliceLengthInt - amountToShiftIntoSharedDataFromNewSlice; + HFASSERT(amountOfTailFromNewSlice <= MAX_TAIL_LENGTH); + [slice copyBytes:newDataTail + MAX_TAIL_LENGTH - amountOfTailFromNewSlice range:HFRangeMake(sliceLengthInt - amountOfTailFromNewSlice, amountOfTailFromNewSlice)]; + + /* Copy the rest, if any, from the end of self */ + NSUInteger amountOfTailFromSelf = MAX_TAIL_LENGTH - amountOfTailFromNewSlice; + HFASSERT(amountOfTailFromSelf <= inlineTailLength); + if (amountOfTailFromSelf > 0) { + memcpy(newDataTail, inlineTail + inlineTailLength - amountOfTailFromSelf, amountOfTailFromSelf); + } + + HFByteSlice *result = [[[[self class] alloc] initWithSharedData:newData offset:newDataOffset length:newDataLength tail:newDataTail tailLength:newDataTailLength] autorelease]; + HFASSERT([result length] == HFSum([slice length], [self length])); + return result; + } + } + } + return nil; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.h new file mode 100644 index 000000000..e70b893f0 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.h @@ -0,0 +1,31 @@ +// +// HFStatusBarRepresenter.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! @enum HFStatusBarMode + The HFStatusBarMode enum is used to describe the format of the byte counts displayed by the status bar. +*/ +typedef NS_ENUM(NSUInteger, HFStatusBarMode) { + HFStatusModeDecimal, ///< The status bar should display byte counts in decimal + HFStatusModeHexadecimal, ///< The status bar should display byte counts in hexadecimal + HFStatusModeApproximate, ///< The text should display byte counts approximately (e.g. "56.3 KB") + HFSTATUSMODECOUNT ///< The number of modes, to allow easy cycling +}; + +/*! @class HFStatusBarRepresenter + @brief The HFRepresenter for the status bar. + + HFStatusBarRepresenter is a subclass of HFRepresenter responsible for showing the status bar, which displays information like the total length of the document, or the number of selected bytes. +*/ +@interface HFStatusBarRepresenter : HFRepresenter { + HFStatusBarMode statusMode; +} + +@property (nonatomic) HFStatusBarMode statusMode; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.m new file mode 100644 index 000000000..883677f9b --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFStatusBarRepresenter.m @@ -0,0 +1,240 @@ +// +// HFStatusBarRepresenter.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + +#define kHFStatusBarDefaultModeUserDefaultsKey @"HFStatusBarDefaultMode" + +@interface HFStatusBarView : NSView { + NSCell *cell; + NSSize cellSize; + HFStatusBarRepresenter *representer; + NSDictionary *cellAttributes; + BOOL registeredForAppNotifications; +} + +- (void)setRepresenter:(HFStatusBarRepresenter *)rep; +- (void)setString:(NSString *)string; + +@end + + +@implementation HFStatusBarView + +- (void)_sharedInitStatusBarView { + NSMutableParagraphStyle *style = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease]; + [style setAlignment:NSCenterTextAlignment]; + cellAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:[NSColor windowFrameTextColor], NSForegroundColorAttributeName, [NSFont labelFontOfSize:[NSFont smallSystemFontSize]], NSFontAttributeName, style, NSParagraphStyleAttributeName, nil]; + cell = [[NSCell alloc] initTextCell:@""]; + [cell setAlignment:NSCenterTextAlignment]; + [cell setBackgroundStyle:NSBackgroundStyleRaised]; +} + +- (instancetype)initWithFrame:(NSRect)frame { + self = [super initWithFrame:frame]; + [self _sharedInitStatusBarView]; + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + [self _sharedInitStatusBarView]; + return self; +} + +// nothing to do in encodeWithCoder + +- (BOOL)isFlipped { return YES; } + +- (void)setRepresenter:(HFStatusBarRepresenter *)rep { + representer = rep; +} + +- (void)setString:(NSString *)string { + [cell setAttributedStringValue:[[[NSAttributedString alloc] initWithString:string attributes:cellAttributes] autorelease]]; + cellSize = [cell cellSize]; + [self setNeedsDisplay:YES]; +} + +- (void)drawRect:(NSRect)clip { + USE(clip); + NSRect bounds = [self bounds]; + // [[NSColor colorWithCalibratedWhite:(CGFloat).91 alpha:1] set]; + // NSRectFill(clip); + + + NSRect cellRect = NSMakeRect(NSMinX(bounds), HFCeil(NSMidY(bounds) - cellSize.height / 2), NSWidth(bounds), cellSize.height); + [cell drawWithFrame:cellRect inView:self]; +} + +- (void)setFrame:(NSRect)frame +{ + [super setFrame:frame]; + [self.window setContentBorderThickness:frame.origin.y + frame.size.height forEdge:NSMinYEdge]; +} + + +- (void)mouseDown:(NSEvent *)event { + USE(event); + HFStatusBarMode newMode = ([representer statusMode] + 1) % HFSTATUSMODECOUNT; + [representer setStatusMode:newMode]; + [[NSUserDefaults standardUserDefaults] setInteger:newMode forKey:kHFStatusBarDefaultModeUserDefaultsKey]; +} + +- (void)windowDidChangeKeyStatus:(NSNotification *)note { + USE(note); + [self setNeedsDisplay:YES]; +} + +- (void)viewDidMoveToWindow { + HFRegisterViewForWindowAppearanceChanges(self, @selector(windowDidChangeKeyStatus:), !registeredForAppNotifications); + registeredForAppNotifications = YES; + [self.window setContentBorderThickness:self.frame.origin.y + self.frame.size.height forEdge:NSMinYEdge]; + [super viewDidMoveToWindow]; +} + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow { + HFUnregisterViewForWindowAppearanceChanges(self, NO); + [super viewWillMoveToWindow:newWindow]; +} + +- (void)dealloc { + HFUnregisterViewForWindowAppearanceChanges(self, registeredForAppNotifications); + [cell release]; + [cellAttributes release]; + [super dealloc]; +} + +@end + +@implementation HFStatusBarRepresenter + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeInt64:statusMode forKey:@"HFStatusMode"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + statusMode = (NSUInteger)[coder decodeInt64ForKey:@"HFStatusMode"]; + return self; +} + +- (instancetype)init { + self = [super init]; + statusMode = [[NSUserDefaults standardUserDefaults] integerForKey:kHFStatusBarDefaultModeUserDefaultsKey]; + return self; +} + +- (NSView *)createView { + HFStatusBarView *view = [[HFStatusBarView alloc] initWithFrame:NSMakeRect(0, 0, 100, 18)]; + [view setRepresenter:self]; + [view setAutoresizingMask:NSViewWidthSizable]; + return view; +} + +- (NSString *)describeLength:(unsigned long long)length { + switch (statusMode) { + case HFStatusModeDecimal: return [NSString stringWithFormat:@"%llu byte%s", length, length == 1 ? "" : "s"]; + case HFStatusModeHexadecimal: return [NSString stringWithFormat:@"0x%llX byte%s", length, length == 1 ? "" : "s"]; + case HFStatusModeApproximate: return [NSString stringWithFormat:@"%@", HFDescribeByteCount(length)]; + default: [NSException raise:NSInternalInconsistencyException format:@"Unknown status mode %lu", (unsigned long)statusMode]; return @""; + } +} + +- (NSString *)describeOffset:(unsigned long long)offset { + switch (statusMode) { + case HFStatusModeDecimal: return [NSString stringWithFormat:@"%llu", offset]; + case HFStatusModeHexadecimal: return [NSString stringWithFormat:@"0x%llX", offset]; + case HFStatusModeApproximate: return [NSString stringWithFormat:@"%@", HFDescribeByteCount(offset)]; + default: [NSException raise:NSInternalInconsistencyException format:@"Unknown status mode %lu", (unsigned long)statusMode]; return @""; + } +} + +/* same as describeOffset, except we treat Approximate like Hexadecimal */ +- (NSString *)describeOffsetExcludingApproximate:(unsigned long long)offset { + switch (statusMode) { + case HFStatusModeDecimal: return [NSString stringWithFormat:@"%llu", offset]; + case HFStatusModeHexadecimal: + case HFStatusModeApproximate: return [NSString stringWithFormat:@"0x%llX", offset]; + default: [NSException raise:NSInternalInconsistencyException format:@"Unknown status mode %lu", (unsigned long)statusMode]; return @""; + } +} + +- (NSString *)stringForEmptySelectionAtOffset:(unsigned long long)offset length:(unsigned long long)length { + return [NSString stringWithFormat:@"%@ out of %@", [self describeOffset:offset], [self describeLength:length]]; +} + +- (NSString *)stringForSingleByteSelectionAtOffset:(unsigned long long)offset length:(unsigned long long)length { + return [NSString stringWithFormat:@"Byte %@ selected out of %@", [self describeOffset:offset], [self describeLength:length]]; +} + +- (NSString *)stringForSingleRangeSelection:(HFRange)range length:(unsigned long long)length { + return [NSString stringWithFormat:@"%@ selected at offset %@ out of %@", [self describeLength:range.length], [self describeOffsetExcludingApproximate:range.location], [self describeLength:length]]; +} + +- (NSString *)stringForMultipleSelectionsWithLength:(unsigned long long)multipleSelectionLength length:(unsigned long long)length { + return [NSString stringWithFormat:@"%@ selected at multiple offsets out of %@", [self describeLength:multipleSelectionLength], [self describeLength:length]]; +} + + +- (void)updateString { + NSString *string = nil; + HFController *controller = [self controller]; + if (controller) { + unsigned long long length = [controller contentsLength]; + NSArray *ranges = [controller selectedContentsRanges]; + NSUInteger rangeCount = [ranges count]; + if (rangeCount == 1) { + HFRange range = [ranges[0] HFRange]; + if (range.length == 0) { + string = [self stringForEmptySelectionAtOffset:range.location length:length]; + } + else if (range.length == 1) { + string = [self stringForSingleByteSelectionAtOffset:range.location length:length]; + } + else { + string = [self stringForSingleRangeSelection:range length:length]; + } + } + else { + unsigned long long totalSelectionLength = 0; + FOREACH(HFRangeWrapper *, wrapper, ranges) { + HFRange range = [wrapper HFRange]; + totalSelectionLength = HFSum(totalSelectionLength, range.length); + } + string = [self stringForMultipleSelectionsWithLength:totalSelectionLength length:length]; + } + } + if (! string) string = @""; + [[self view] setString:string]; +} + +- (HFStatusBarMode)statusMode { + return statusMode; +} + +- (void)setStatusMode:(HFStatusBarMode)mode { + statusMode = mode; + [self updateString]; +} + +- (void)controllerDidChange:(HFControllerPropertyBits)bits { + if (bits & (HFControllerContentLength | HFControllerSelectedRanges)) { + [self updateString]; + } +} + ++ (NSPoint)defaultLayoutPosition { + return NSMakePoint(0, -1); +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.h new file mode 100644 index 000000000..2c5da7b57 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.h @@ -0,0 +1,26 @@ +// +// HFASCIITextRepresenter.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! @class HFStringEncodingTextRepresenter + + @brief An HFRepresenter responsible for showing data interpreted via an NSStringEncoding. + + HFHexTextRepresenter is an HFRepresenter responsible for showing and editing data interpreted via an NSStringEncoding. Currently only supersets of ASCII are supported. +*/ +@interface HFStringEncodingTextRepresenter : HFTextRepresenter { + NSStringEncoding stringEncoding; + +} + +/*! Get the string encoding for this representer. The default encoding is [NSString defaultCStringEncoding]. */ +@property (nonatomic) NSStringEncoding encoding; + +/*! Set the string encoding for this representer. */ + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.m new file mode 100644 index 000000000..27ea995cf --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFStringEncodingTextRepresenter.m @@ -0,0 +1,121 @@ +// +// HFASCIITextRepresenter.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import + +@interface HFStringEncodingPasteboardOwner : HFPasteboardOwner { + NSStringEncoding encoding; +} +@property (nonatomic) NSStringEncoding encoding; +@end + +@implementation HFStringEncodingPasteboardOwner +- (void)setEncoding:(NSStringEncoding)val { encoding = val; } +- (NSStringEncoding)encoding { return encoding; } + +- (void)writeDataInBackgroundToPasteboard:(NSPasteboard *)pboard ofLength:(unsigned long long)length forType:(NSString *)type trackingProgress:(id)tracker { + HFASSERT([type isEqual:NSStringPboardType]); + HFByteArray *byteArray = [self byteArray]; + HFASSERT(length <= NSUIntegerMax); + NSUInteger dataLength = ll2l(length); + NSUInteger stringLength = dataLength; + NSUInteger offset = 0, remaining = dataLength; + unsigned char * restrict const stringBuffer = check_malloc(stringLength); + while (remaining > 0) { + NSUInteger amountToCopy = MIN(32u * 1024u, remaining); + [byteArray copyBytes:stringBuffer + offset range:HFRangeMake(offset, amountToCopy)]; + offset += amountToCopy; + remaining -= amountToCopy; + } + NSString *string = [[NSString alloc] initWithBytesNoCopy:stringBuffer length:stringLength encoding:encoding freeWhenDone:YES]; + [pboard setString:string forType:type]; + [string release]; +} + +- (unsigned long long)stringLengthForDataLength:(unsigned long long)dataLength { + return dataLength; +} + +@end + +@implementation HFStringEncodingTextRepresenter + +- (instancetype)init { + self = [super init]; + stringEncoding = [NSString defaultCStringEncoding]; + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + stringEncoding = (NSStringEncoding)[coder decodeInt64ForKey:@"HFStringEncoding"]; + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeInt64:stringEncoding forKey:@"HFStringEncoding"]; +} + +- (Class)_textViewClass { + return [HFRepresenterStringEncodingTextView class]; +} + +- (NSStringEncoding)encoding { + return stringEncoding; +} + +- (void)setEncoding:(NSStringEncoding)encoding { + stringEncoding = encoding; + [[self view] setEncoding:encoding]; + [[self controller] representer:self changedProperties:HFControllerViewSizeRatios]; +} + +- (void)initializeView { + [[self view] setEncoding:stringEncoding]; + [super initializeView]; +} + +- (void)insertText:(NSString *)text { + REQUIRE_NOT_NULL(text); + NSData *data = [text dataUsingEncoding:[self encoding] allowLossyConversion:NO]; + if (! data) { + NSBeep(); + } + else if ([data length]) { // a 0 length text can come about via e.g. option-e + [[self controller] insertData:data replacingPreviousBytes:0 allowUndoCoalescing:YES]; + } +} + +- (NSData *)dataFromPasteboardString:(NSString *)string { + REQUIRE_NOT_NULL(string); + return [string dataUsingEncoding:[self encoding] allowLossyConversion:NO]; +} + ++ (NSPoint)defaultLayoutPosition { + return NSMakePoint(1, 0); +} + +- (void)copySelectedBytesToPasteboard:(NSPasteboard *)pb { + REQUIRE_NOT_NULL(pb); + HFByteArray *selection = [[self controller] byteArrayForSelectedContentsRanges]; + HFASSERT(selection != NULL); + if ([selection length] == 0) { + NSBeep(); + } + else { + HFStringEncodingPasteboardOwner *owner = [HFStringEncodingPasteboardOwner ownPasteboard:pb forByteArray:selection withTypes:@[HFPrivateByteArrayPboardType, NSStringPboardType]]; + [owner setEncoding:[self encoding]]; + [owner setBytesPerLine:[self bytesPerLine]]; + } +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.h new file mode 100644 index 000000000..306a197ff --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.h @@ -0,0 +1,39 @@ +// +// HFTextRepresenter.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import + +/*! @class HFTextRepresenter + @brief An HFRepresenter that draws text (e.g. the hex or ASCII view). + + HFTextRepresenter is an abstract subclass of HFRepresenter that is responsible for displaying text. There are two concrete subclass, HFHexTextRepresenter and HFStringEncodingTextRepresenter. + + Most of the functionality of HFTextRepresenter is private, and there is not yet enough exposed to allow creating new representers based on it. However, there is a small amount of configurability. +*/ +@interface HFTextRepresenter : HFRepresenter {} +/*! Given a rect edge, return an NSRect representing the maximum edge in that direction, in the coordinate system of the receiver's view. The dimension in the direction of the edge is 0 (so if edge is NSMaxXEdge, the resulting width is 0). The returned rect is in the coordinate space of the receiver's view. If the byte range is not displayed, returns NSZeroRect. + + If range is entirely above the visible region, returns an NSRect whose width and height are 0, and whose origin is -CGFLOAT_MAX (the most negative CGFloat). If range is entirely below the visible region, returns the same except with CGFLOAT_MAX (positive). + + This raises an exception if range is empty. +*/ +- (NSRect)furthestRectOnEdge:(NSRectEdge)edge forByteRange:(HFRange)range; + +/*! Returns the origin of the character at the given byte index. The returned point is in the coordinate space of the receiver's view. If the character is not displayed because it would be above the displayed range, returns {0, -CGFLOAT_MAX}. If it is not displayed because it is below the displayed range, returns {0, CGFLOAT_MAX}. As a special affordance, you may pass a byte index one greater than the contents length of the controller, and it will return the result as if the byte existed. + */ +- (NSPoint)locationOfCharacterAtByteIndex:(unsigned long long)byteIndex; + +/*! The per-row background colors. Each row is drawn with the next color in turn, cycling back to the beginning when the array is exhausted. Any empty space is filled with the first color in the array. If the array is empty, then the background is drawn with \c clearColor. + */ +@property (nonatomic, copy) NSArray *rowBackgroundColors; + +/*! Whether the text view behaves like a text field (YES) or a text view (NO). Currently this determines whether it draws a focus ring when it is the first responder. +*/ +@property (nonatomic) BOOL behavesAsTextField; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.m new file mode 100644 index 000000000..b8793b457 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter.m @@ -0,0 +1,377 @@ +// +// HFTextRepresenter.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import +#import +#import + +@implementation HFTextRepresenter + +- (Class)_textViewClass { + UNIMPLEMENTED(); +} + +- (instancetype)init { + self = [super init]; + + if (@available(macOS 10.14, *)) { + _rowBackgroundColors = [[NSColor alternatingContentBackgroundColors] retain]; + } else { + NSColor *color1 = [NSColor windowBackgroundColor]; + NSColor *color2 = [NSColor colorWithDeviceWhite:0.96 alpha:1]; + _rowBackgroundColors = [@[color1, color2] retain]; + } + + return self; +} + +- (void)dealloc { + if ([self isViewLoaded]) { + [[self view] clearRepresenter]; + } + [_rowBackgroundColors release]; + [super dealloc]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + [super encodeWithCoder:coder]; + [coder encodeBool:_behavesAsTextField forKey:@"HFBehavesAsTextField"]; + [coder encodeObject:_rowBackgroundColors forKey:@"HFRowBackgroundColors"]; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + HFASSERT([coder allowsKeyedCoding]); + self = [super initWithCoder:coder]; + _behavesAsTextField = [coder decodeBoolForKey:@"HFBehavesAsTextField"]; + _rowBackgroundColors = [[coder decodeObjectForKey:@"HFRowBackgroundColors"] retain]; + return self; +} + +- (NSView *)createView { + HFRepresenterTextView *view = [[[self _textViewClass] alloc] initWithRepresenter:self]; + [view setAutoresizingMask:NSViewHeightSizable]; + return view; +} + +- (HFByteArrayDataStringType)byteArrayDataStringType { + UNIMPLEMENTED(); +} + +- (HFRange)entireDisplayedRange { + HFController *controller = [self controller]; + unsigned long long contentsLength = [controller contentsLength]; + HFASSERT(controller != NULL); + HFFPRange displayedLineRange = [controller displayedLineRange]; + NSUInteger bytesPerLine = [controller bytesPerLine]; + unsigned long long lineStart = HFFPToUL(floorl(displayedLineRange.location)); + unsigned long long lineEnd = HFFPToUL(ceill(displayedLineRange.location + displayedLineRange.length)); + HFASSERT(lineEnd >= lineStart); + HFRange byteRange = HFRangeMake(HFProductULL(bytesPerLine, lineStart), HFProductULL(lineEnd - lineStart, bytesPerLine)); + if (byteRange.length == 0) { + /* This can happen if we are too small to even show one line */ + return HFRangeMake(0, 0); + } + else { + HFASSERT(byteRange.location <= contentsLength); + byteRange.length = MIN(byteRange.length, contentsLength - byteRange.location); + HFASSERT(HFRangeIsSubrangeOfRange(byteRange, HFRangeMake(0, [controller contentsLength]))); + return byteRange; + } +} + +- (NSRect)furthestRectOnEdge:(NSRectEdge)edge forByteRange:(HFRange)byteRange { + HFASSERT(byteRange.length > 0); + HFRange displayedRange = [self entireDisplayedRange]; + HFRange intersection = HFIntersectionRange(displayedRange, byteRange); + NSRect result = {{0,},}; + if (intersection.length > 0) { + NSRange intersectionNSRange = NSMakeRange(ll2l(intersection.location - displayedRange.location), ll2l(intersection.length)); + if (intersectionNSRange.length > 0) { + result = [[self view] furthestRectOnEdge:edge forRange:intersectionNSRange]; + } + } + else if (byteRange.location < displayedRange.location) { + /* We're below it. */ + return NSMakeRect(-CGFLOAT_MAX, -CGFLOAT_MAX, 0, 0); + } + else if (byteRange.location >= HFMaxRange(displayedRange)) { + /* We're above it */ + return NSMakeRect(CGFLOAT_MAX, CGFLOAT_MAX, 0, 0); + } + else { + /* Shouldn't be possible to get here */ + [NSException raise:NSInternalInconsistencyException format:@"furthestRectOnEdge: expected an intersection, or a range below or above the byte range, but nothin'"]; + } + return result; +} + +- (NSPoint)locationOfCharacterAtByteIndex:(unsigned long long)index { + NSPoint result; + HFRange displayedRange = [self entireDisplayedRange]; + if (HFLocationInRange(index, displayedRange) || index == HFMaxRange(displayedRange)) { + NSUInteger location = ll2l(index - displayedRange.location); + result = [[self view] originForCharacterAtByteIndex:location]; + } + else if (index < displayedRange.location) { + result = NSMakePoint(-CGFLOAT_MAX, -CGFLOAT_MAX); + } + else { + result = NSMakePoint(CGFLOAT_MAX, CGFLOAT_MAX); + } + return result; +} + +- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range { + HFTextVisualStyleRun *run = [[[HFTextVisualStyleRun alloc] init] autorelease]; + [run setRange:range]; + [run setForegroundColor:[NSColor blackColor]]; + + return run; +} + +- (NSArray *)stylesForRange:(HFRange)range { + return nil; +} + +- (void)updateText { + HFController *controller = [self controller]; + HFRepresenterTextView *view = [self view]; + HFRange entireDisplayedRange = [self entireDisplayedRange]; + [view setData:[controller dataForRange:entireDisplayedRange]]; + [view setStyles:[self stylesForRange:entireDisplayedRange]]; + HFFPRange lineRange = [controller displayedLineRange]; + long double offsetLongDouble = lineRange.location - floorl(lineRange.location); + CGFloat offset = ld2f(offsetLongDouble); + [view setVerticalOffset:offset]; + [view setStartingLineBackgroundColorIndex:ll2l(HFFPToUL(floorl(lineRange.location)) % NSUIntegerMax)]; +} + +- (void)initializeView { + [super initializeView]; + HFRepresenterTextView *view = [self view]; + HFController *controller = [self controller]; + if (controller) { + [view setFont:[controller font]]; + [view setEditable:[controller editable]]; + [self updateText]; + } + else { + [view setFont:[NSFont fontWithName:HFDEFAULT_FONT size:HFDEFAULT_FONTSIZE]]; + } +} + +- (void)scrollWheel:(NSEvent *)event { + [[self controller] scrollWithScrollEvent:event]; +} + +- (void)selectAll:(id)sender { + [[self controller] selectAll:sender]; +} + +- (double)selectionPulseAmount { + return [[self controller] selectionPulseAmount]; +} + +- (void)controllerDidChange:(HFControllerPropertyBits)bits { + if (bits & (HFControllerFont | HFControllerLineHeight)) { + [[self view] setFont:[[self controller] font]]; + } + if (bits & (HFControllerContentValue | HFControllerDisplayedLineRange | HFControllerByteRangeAttributes)) { + [self updateText]; + } + if (bits & (HFControllerSelectedRanges | HFControllerDisplayedLineRange)) { + [[self view] updateSelectedRanges]; + } + if (bits & (HFControllerEditable)) { + [[self view] setEditable:[[self controller] editable]]; + } + if (bits & (HFControllerAntialias)) { + [[self view] setShouldAntialias:[[self controller] shouldAntialias]]; + } + if (bits & (HFControllerShowCallouts)) { + [[self view] setShouldDrawCallouts:[[self controller] shouldShowCallouts]]; + } + if (bits & (HFControllerColorBytes)) { + if([[self controller] shouldColorBytes]) { + [[self view] setByteColoring: ^(uint8_t byte, uint8_t *r, uint8_t *g, uint8_t *b, uint8_t *a){ + *r = *g = *b = (uint8_t)(255 * ((255-byte)/255.0*0.6+0.4)); + *a = (uint8_t)(255 * 0.7); + }]; + } else { + [[self view] setByteColoring:NULL]; + } + } + [super controllerDidChange:bits]; +} + +- (double)maximumAvailableLinesForViewHeight:(CGFloat)viewHeight { + return [[self view] maximumAvailableLinesForViewHeight:viewHeight]; +} + +- (NSUInteger)maximumBytesPerLineForViewWidth:(CGFloat)viewWidth { + return [[self view] maximumBytesPerLineForViewWidth:viewWidth]; +} + +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine { + return [[self view] minimumViewWidthForBytesPerLine:bytesPerLine]; +} + +- (NSUInteger)byteGranularity { + HFRepresenterTextView *view = [self view]; + NSUInteger bytesPerColumn = MAX([view bytesPerColumn], 1u), bytesPerCharacter = [view bytesPerCharacter]; + return HFLeastCommonMultiple(bytesPerColumn, bytesPerCharacter); +} + +- (NSArray *)displayedSelectedContentsRanges { + HFController *controller = [self controller]; + NSArray *result; + NSArray *selectedRanges = [controller selectedContentsRanges]; + HFRange displayedRange = [self entireDisplayedRange]; + + HFASSERT(displayedRange.length <= NSUIntegerMax); + NEW_ARRAY(NSValue *, clippedSelectedRanges, [selectedRanges count]); + NSUInteger clippedRangeIndex = 0; + FOREACH(HFRangeWrapper *, wrapper, selectedRanges) { + HFRange selectedRange = [wrapper HFRange]; + BOOL clippedRangeIsVisible; + NSRange clippedSelectedRange = {0,}; + /* Necessary because zero length ranges do not intersect anything */ + if (selectedRange.length == 0) { + /* Remember that {6, 0} is considered a subrange of {3, 3} */ + clippedRangeIsVisible = HFRangeIsSubrangeOfRange(selectedRange, displayedRange); + if (clippedRangeIsVisible) { + HFASSERT(selectedRange.location >= displayedRange.location); + clippedSelectedRange.location = ll2l(selectedRange.location - displayedRange.location); + clippedSelectedRange.length = 0; + } + } + else { + // selectedRange.length > 0 + clippedRangeIsVisible = HFIntersectsRange(selectedRange, displayedRange); + if (clippedRangeIsVisible) { + HFRange intersectionRange = HFIntersectionRange(selectedRange, displayedRange); + HFASSERT(intersectionRange.location >= displayedRange.location); + clippedSelectedRange.location = ll2l(intersectionRange.location - displayedRange.location); + clippedSelectedRange.length = ll2l(intersectionRange.length); + } + } + if (clippedRangeIsVisible) clippedSelectedRanges[clippedRangeIndex++] = [NSValue valueWithRange:clippedSelectedRange]; + } + result = [NSArray arrayWithObjects:clippedSelectedRanges count:clippedRangeIndex]; + FREE_ARRAY(clippedSelectedRanges); + return result; +} + +//maps bookmark keys as NSNumber to byte locations as NSNumbers. Because bookmark callouts may extend beyond the lines containing them, allow a larger range by 10 lines. +- (NSDictionary *)displayedBookmarkLocations { + NSMutableDictionary *result = nil; + HFController *controller = [self controller]; + NSUInteger rangeExtension = 10 * [controller bytesPerLine]; + HFRange displayedRange = [self entireDisplayedRange]; + + HFRange includedRange = displayedRange; + + /* Extend the bottom */ + unsigned long long bottomExtension = MIN(includedRange.location, rangeExtension); + includedRange.location -= bottomExtension; + includedRange.length += bottomExtension; + + /* Extend the top */ + unsigned long long topExtension = MIN([controller contentsLength] - HFMaxRange(includedRange), rangeExtension); + includedRange.length = HFSum(includedRange.length, topExtension); + + return result; +} + +- (unsigned long long)byteIndexForCharacterIndex:(NSUInteger)characterIndex { + HFController *controller = [self controller]; + HFFPRange lineRange = [controller displayedLineRange]; + unsigned long long scrollAmount = HFFPToUL(floorl(lineRange.location)); + unsigned long long byteIndex = HFProductULL(scrollAmount, [controller bytesPerLine]) + characterIndex * [[self view] bytesPerCharacter]; + return byteIndex; +} + +- (void)beginSelectionWithEvent:(NSEvent *)event forCharacterIndex:(NSUInteger)characterIndex { + [[self controller] beginSelectionWithEvent:event forByteIndex:[self byteIndexForCharacterIndex:characterIndex]]; +} + +- (void)continueSelectionWithEvent:(NSEvent *)event forCharacterIndex:(NSUInteger)characterIndex { + [[self controller] continueSelectionWithEvent:event forByteIndex:[self byteIndexForCharacterIndex:characterIndex]]; +} + +- (void)endSelectionWithEvent:(NSEvent *)event forCharacterIndex:(NSUInteger)characterIndex { + [[self controller] endSelectionWithEvent:event forByteIndex:[self byteIndexForCharacterIndex:characterIndex]]; +} + +- (void)insertText:(NSString *)text { + USE(text); + UNIMPLEMENTED_VOID(); +} + +- (void)copySelectedBytesToPasteboard:(NSPasteboard *)pb { + USE(pb); + UNIMPLEMENTED_VOID(); +} + +- (void)cutSelectedBytesToPasteboard:(NSPasteboard *)pb { + [self copySelectedBytesToPasteboard:pb]; + [[self controller] deleteSelection]; +} + +- (NSData *)dataFromPasteboardString:(NSString *)string { + USE(string); + UNIMPLEMENTED(); +} + +- (BOOL)canPasteFromPasteboard:(NSPasteboard *)pb { + REQUIRE_NOT_NULL(pb); + if ([[self controller] editable]) { + // we can paste if the pboard contains text or contains an HFByteArray + return [HFPasteboardOwner unpackByteArrayFromPasteboard:pb] || [pb availableTypeFromArray:@[NSStringPboardType]]; + } + return NO; +} + +- (BOOL)canCut { + /* We can cut if we are editable, we have at least one byte selected, and we are not in overwrite mode */ + HFController *controller = [self controller]; + if ([controller editMode] != HFInsertMode) return NO; + if (! [controller editable]) return NO; + + FOREACH(HFRangeWrapper *, rangeWrapper, [controller selectedContentsRanges]) { + if ([rangeWrapper HFRange].length > 0) return YES; //we have something selected + } + return NO; // we did not find anything selected +} + +- (BOOL)pasteBytesFromPasteboard:(NSPasteboard *)pb { + REQUIRE_NOT_NULL(pb); + BOOL result = NO; + HFByteArray *byteArray = [HFPasteboardOwner unpackByteArrayFromPasteboard:pb]; + if (byteArray) { + [[self controller] insertByteArray:byteArray replacingPreviousBytes:0 allowUndoCoalescing:NO]; + result = YES; + } + else { + NSString *stringType = [pb availableTypeFromArray:@[NSStringPboardType]]; + if (stringType) { + NSString *stringValue = [pb stringForType:stringType]; + if (stringValue) { + NSData *data = [self dataFromPasteboardString:stringValue]; + if (data) { + [[self controller] insertData:data replacingPreviousBytes:0 allowUndoCoalescing:NO]; + } + } + } + } + return result; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_Internal.h b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_Internal.h new file mode 100644 index 000000000..c1e9f018b --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_Internal.h @@ -0,0 +1,33 @@ +#import + +@interface HFTextRepresenter (HFInternal) + +- (NSArray *)displayedSelectedContentsRanges; //returns an array of NSValues representing the selected ranges (as NSRanges) clipped to the displayed range. + +- (NSDictionary *)displayedBookmarkLocations; //returns an dictionary mapping bookmark names to bookmark locations. Bookmark locations may be negative. + +- (void)beginSelectionWithEvent:(NSEvent *)event forCharacterIndex:(NSUInteger)characterIndex; +- (void)continueSelectionWithEvent:(NSEvent *)event forCharacterIndex:(NSUInteger)characterIndex; +- (void)endSelectionWithEvent:(NSEvent *)event forCharacterIndex:(NSUInteger)characterIndex; + +// Copy/Paste methods +- (void)copySelectedBytesToPasteboard:(NSPasteboard *)pb; +- (void)cutSelectedBytesToPasteboard:(NSPasteboard *)pb; +- (BOOL)canPasteFromPasteboard:(NSPasteboard *)pb; +- (BOOL)canCut; +- (BOOL)pasteBytesFromPasteboard:(NSPasteboard *)pb; + +// Must be implemented by subclasses +- (void)insertText:(NSString *)text; + +// Must be implemented by subclasses. Return NSData representing the string value. +- (NSData *)dataFromPasteboardString:(NSString *)string; + +// Value between [0, 1] +- (double)selectionPulseAmount; + +- (void)scrollWheel:(NSEvent *)event; + +- (void)selectAll:(id)sender; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_KeyBinding.m b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_KeyBinding.m new file mode 100644 index 000000000..b6e16d69a --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFTextRepresenter_KeyBinding.m @@ -0,0 +1,128 @@ +// +// HFTextRepresenter_KeyBinding.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import +#import +#import + +#define FORWARD(x) - (void)x : sender { USE(sender); UNIMPLEMENTED_VOID(); } + +@implementation HFTextRepresenter (HFKeyBinding) + +- (void)moveRight:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementByte andModifySelection:NO]; } +- (void)moveLeft:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementByte andModifySelection:NO]; } +- (void)moveUp:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementLine andModifySelection:NO]; } +- (void)moveDown:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementLine andModifySelection:NO]; } +- (void)moveWordRight:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementColumn andModifySelection:NO]; } +- (void)moveWordLeft:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementColumn andModifySelection:NO]; } + +- (void)moveRightAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementByte andModifySelection:YES]; } +- (void)moveLeftAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementByte andModifySelection:YES]; } +- (void)moveUpAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementLine andModifySelection:YES]; } +- (void)moveDownAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementLine andModifySelection:YES]; } +- (void)moveWordRightAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementColumn andModifySelection:YES]; } +- (void)moveWordLeftAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementColumn andModifySelection:YES]; } + +- (void)moveForward:unused { USE(unused); [self moveRight:unused]; } +- (void)moveBackward:unused { USE(unused); [self moveLeft:unused]; } + +- (void)moveWordForward:unused { USE(unused); [self moveWordRight:unused]; } +- (void)moveWordBackward:unused { USE(unused); [self moveWordLeft:unused]; } +- (void)moveForwardAndModifySelection:unused { USE(unused); [self moveRightAndModifySelection:unused]; } +- (void)moveBackwardAndModifySelection:unused { USE(unused); [self moveLeftAndModifySelection:unused]; } +- (void)moveWordForwardAndModifySelection:unused { USE(unused); [self moveForwardAndModifySelection:unused]; } +- (void)moveWordBackwardAndModifySelection:unused { USE(unused); [self moveBackwardAndModifySelection:unused]; } + +- (void)deleteBackward:unused { USE(unused); [[self controller] deleteDirection:HFControllerDirectionLeft]; } +- (void)deleteForward:unused { USE(unused); [[self controller] deleteDirection:HFControllerDirectionRight]; } +- (void)deleteWordForward:unused { USE(unused); [self deleteForward:unused]; } +- (void)deleteWordBackward:unused { USE(unused); [self deleteBackward:unused]; } + +- (void)delete:unused { USE(unused); [self deleteForward:unused]; } + + //todo: implement these + +- (void)deleteToBeginningOfLine:(id)sender { USE(sender); } +- (void)deleteToEndOfLine:(id)sender { USE(sender); } +- (void)deleteToBeginningOfParagraph:(id)sender { USE(sender); } +- (void)deleteToEndOfParagraph:(id)sender { USE(sender); } + +- (void)moveToBeginningOfLine:unused { USE(unused); [[self controller] moveToLineBoundaryInDirection:HFControllerDirectionLeft andModifySelection:NO]; } +- (void)moveToEndOfLine:unused { USE(unused); [[self controller] moveToLineBoundaryInDirection:HFControllerDirectionRight andModifySelection:NO]; } +- (void)moveToBeginningOfDocument:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementDocument andModifySelection:NO]; } +- (void)moveToEndOfDocument:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementDocument andModifySelection:NO]; } + +- (void)moveToBeginningOfLineAndModifySelection:unused { USE(unused); [[self controller] moveToLineBoundaryInDirection:HFControllerDirectionLeft andModifySelection:YES]; } +- (void)moveToEndOfLineAndModifySelection:unused { USE(unused); [[self controller] moveToLineBoundaryInDirection:HFControllerDirectionRight andModifySelection:YES]; } +- (void)moveToBeginningOfDocumentAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionLeft withGranularity:HFControllerMovementDocument andModifySelection:YES]; } +- (void)moveToEndOfDocumentAndModifySelection:unused { USE(unused); [[self controller] moveInDirection:HFControllerDirectionRight withGranularity:HFControllerMovementDocument andModifySelection:YES]; } + +- (void)moveToBeginningOfParagraph:unused { USE(unused); [self moveToBeginningOfLine:unused]; } +- (void)moveToEndOfParagraph:unused { USE(unused); [self moveToEndOfLine:unused]; } +- (void)moveToBeginningOfParagraphAndModifySelection:unused { USE(unused); [self moveToBeginningOfLineAndModifySelection:unused]; } +- (void)moveToEndOfParagraphAndModifySelection:unused { USE(unused); [self moveToEndOfLineAndModifySelection:unused]; } + +- (void)scrollPageDown:unused { USE(unused); [[self controller] scrollByLines:[[self controller] displayedLineRange].length]; } +- (void)scrollPageUp:unused { USE(unused); [[self controller] scrollByLines: - [[self controller] displayedLineRange].length]; } +- (void)pageDown:unused { USE(unused); [self scrollPageDown:unused]; } +- (void)pageUp:unused { USE(unused); [self scrollPageUp:unused]; } + +- (void)centerSelectionInVisibleArea:unused { + USE(unused); + HFController *controller = [self controller]; + NSArray *selection = [controller selectedContentsRanges]; + unsigned long long min = ULLONG_MAX, max = 0; + HFASSERT([selection count] >= 1); + FOREACH(HFRangeWrapper *, wrapper, selection) { + HFRange range = [wrapper HFRange]; + min = MIN(min, range.location); + max = MAX(max, HFMaxRange(range)); + } + HFASSERT(max >= min); + [controller maximizeVisibilityOfContentsRange:HFRangeMake(min, max - min)]; +} + +- (void)insertTab:unused { + USE(unused); + [[[self view] window] selectNextKeyView:nil]; +} + +- (void)insertBacktab:unused { + USE(unused); + [[[self view] window] selectPreviousKeyView:nil]; +} + +FORWARD(scrollLineUp) +FORWARD(scrollLineDown) +FORWARD(transpose) +FORWARD(transposeWords) + +FORWARD(selectParagraph) +FORWARD(selectLine) +FORWARD(selectWord) +FORWARD(indent) +//FORWARD(insertNewline) +FORWARD(insertParagraphSeparator) +FORWARD(insertNewlineIgnoringFieldEditor) +FORWARD(insertTabIgnoringFieldEditor) +FORWARD(insertLineBreak) +FORWARD(insertContainerBreak) +FORWARD(changeCaseOfLetter) +FORWARD(uppercaseWord) +FORWARD(lowercaseWord) +FORWARD(capitalizeWord) +FORWARD(deleteBackwardByDecomposingPreviousCharacter) +FORWARD(yank) +FORWARD(complete) +FORWARD(setMark) +FORWARD(deleteToMark) +FORWARD(selectToMark) +FORWARD(swapWithMark) +//FORWARD(cancelOperation) + +@end + diff --git a/thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.h b/thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.h new file mode 100644 index 000000000..0fa2ea74f --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.h @@ -0,0 +1,23 @@ +// +// HFTextVisualStyle.h +// HexFiend_2 +// +// Copyright 2009 ridiculous_fish. All rights reserved. +// + +#import + +@interface HFTextVisualStyleRun : NSObject {} + +@property (nonatomic, copy) NSColor *foregroundColor; +@property (nonatomic, copy) NSColor *backgroundColor; +@property (nonatomic) NSRange range; +@property (nonatomic) BOOL shouldDraw; +@property (nonatomic) CGFloat scale; +@property (nonatomic, copy) NSIndexSet *bookmarkStarts; +@property (nonatomic, copy) NSIndexSet *bookmarkExtents; +@property (nonatomic, copy) NSIndexSet *bookmarkEnds; + +- (void)set; + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.m b/thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.m new file mode 100644 index 000000000..39442d53a --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFTextVisualStyleRun.m @@ -0,0 +1,80 @@ +// +// HFTextVisualStyleRun.m +// HexFiend_2 +// +// Copyright 2009 ridiculous_fish. All rights reserved. +// + +#import "HFTextVisualStyleRun.h" + + +@implementation HFTextVisualStyleRun + +- (instancetype)init { + self = [super init]; + _scale = 1.; + _shouldDraw = YES; + return self; +} + +- (void)dealloc { + [_foregroundColor release]; + [_backgroundColor release]; + [_bookmarkStarts release]; + [_bookmarkExtents release]; + [_bookmarkEnds release]; + [super dealloc]; +} + +- (void)set { + [_foregroundColor set]; + if (_scale != (CGFloat)1.0) { + CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; + CGAffineTransform tm = CGContextGetTextMatrix(ctx); + /* Huge hack - adjust downward a little bit if we are scaling */ + tm = CGAffineTransformTranslate(tm, 0, -.25 * (_scale - 1)); + tm = CGAffineTransformScale(tm, _scale, _scale); + CGContextSetTextMatrix(ctx, tm); + } +} + +static inline NSUInteger flip(NSUInteger x) { + return _Generic(x, unsigned: NSSwapInt, unsigned long: NSSwapLong, unsigned long long: NSSwapLongLong)(x); +} +static inline NSUInteger rol(NSUInteger x, unsigned char r) { + r %= sizeof(NSUInteger)*8; + return (x << r) | (x << (sizeof(NSUInteger)*8 - r)); +} +- (NSUInteger)hash { + NSUInteger A = 0; + // All these hashes tend to have only low bits, except the double which has only high bits. +#define Q(x, r) rol(x, sizeof(NSUInteger)*r/6) + A ^= flip([_foregroundColor hash] ^ Q([_backgroundColor hash], 2)); // skew high + A ^= Q(_range.length ^ flip(_range.location), 2); // skew low + A ^= flip([_bookmarkStarts hash]) ^ Q([_bookmarkEnds hash], 3) ^ Q([_bookmarkExtents hash], 4); // skew high + A ^= _shouldDraw ? 0 : (NSUInteger)-1; + A ^= *(NSUInteger*)&_scale; // skew high + return A; +#undef Q +} + +- (BOOL)isEqual:(HFTextVisualStyleRun *)run { + if(![run isKindOfClass:[self class]]) return NO; + /* Check each field for equality. */ + if(!NSEqualRanges(_range, run->_range)) return NO; + if(_scale != run->_scale) return NO; + if(_shouldDraw != run->_shouldDraw) return NO; + if(!!_foregroundColor != !!run->_foregroundColor) return NO; + if(!!_backgroundColor != !!run->_backgroundColor) return NO; + if(!!_bookmarkStarts != !!run->_bookmarkStarts) return NO; + if(!!_bookmarkExtents != !!run->_bookmarkExtents) return NO; + if(!!_bookmarkEnds != !!run->_bookmarkEnds) return NO; + if(![_foregroundColor isEqual: run->_foregroundColor]) return NO; + if(![_backgroundColor isEqual: run->_backgroundColor]) return NO; + if(![_bookmarkStarts isEqual: run->_bookmarkStarts]) return NO; + if(![_bookmarkExtents isEqual: run->_bookmarkExtents]) return NO; + if(![_bookmarkEnds isEqual: run->_bookmarkEnds]) return NO; + return YES; +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFTypes.h b/thirdparty/SameBoy-old/HexFiend/HFTypes.h new file mode 100644 index 000000000..b6ae6818f --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFTypes.h @@ -0,0 +1,13 @@ +/*! @brief HFRange is the 64 bit analog of NSRange, containing a 64 bit location and length. */ +typedef struct { + unsigned long long location; + unsigned long long length; +} HFRange; + +/*! @brief HFFPRange is a struct used for representing floating point ranges, similar to NSRange. It contains two long doubles. + + This is useful for (for example) showing the range of visible lines. A double-precision value has 53 significant bits in the mantissa - so we would start to have precision problems at the high end of the range we can represent. Long double has a 64 bit mantissa on Intel, which means that we would start to run into trouble at the very very end of our range - barely acceptable. */ +typedef struct { + long double location; + long double length; +} HFFPRange; diff --git a/thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.h b/thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.h new file mode 100644 index 000000000..a14881ea7 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.h @@ -0,0 +1,21 @@ +// +// HFRepresenterVerticalScroller.h +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +#import + +/*! @class HFVerticalScrollerRepresenter + @brief An HFRepresenter responsible for showing a vertical scroll bar. + + HFVerticalScrollerRepresenter is an HFRepresenter whose view is a vertical NSScroller, that represents the current position within an HFController "document." It has no methods beyond those of HFRepresenter. + + As HFVerticalScrollerRepresenter is an especially simple representer, it makes for good sample code. +*/ +@interface HFVerticalScrollerRepresenter : HFRepresenter { + +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.m b/thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.m new file mode 100644 index 000000000..371b5687e --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HFVerticalScrollerRepresenter.m @@ -0,0 +1,133 @@ +// +// HFRepresenterVerticalScroller.m +// HexFiend_2 +// +// Copyright 2007 ridiculous_fish. All rights reserved. +// + +/* Note that on Tiger, NSScroller did not support double in any meaningful way; [scroller doubleValue] always returns 0, and setDoubleValue: doesn't look like it works either. */ + +#import + + +@implementation HFVerticalScrollerRepresenter + +/* No special NSCoding support needed */ + +- (NSView *)createView { + NSScroller *scroller = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, [NSScroller scrollerWidthForControlSize:NSRegularControlSize scrollerStyle:NSScrollerStyleLegacy], 64)]; + [scroller setTarget:self]; + [scroller setContinuous:YES]; + [scroller setEnabled:YES]; + [scroller setTarget:self]; + [scroller setAction:@selector(scrollerDidChangeValue:)]; + [scroller setAutoresizingMask:NSViewHeightSizable]; + return scroller; +} + +- (NSUInteger)visibleLines { + HFController *controller = [self controller]; + HFASSERT(controller != NULL); + return ll2l(HFFPToUL(ceill([controller displayedLineRange].length))); +} + +- (void)scrollByKnobToValue:(double)newValue { + HFASSERT(newValue >= 0. && newValue <= 1.); + HFController *controller = [self controller]; + unsigned long long contentsLength = [controller contentsLength]; + NSUInteger bytesPerLine = [controller bytesPerLine]; + HFASSERT(bytesPerLine > 0); + unsigned long long totalLineCountTimesBytesPerLine = HFRoundUpToNextMultipleSaturate(contentsLength - 1, bytesPerLine); + HFASSERT(totalLineCountTimesBytesPerLine == ULLONG_MAX || totalLineCountTimesBytesPerLine % bytesPerLine == 0); + unsigned long long totalLineCount = HFDivideULLRoundingUp(totalLineCountTimesBytesPerLine, bytesPerLine); + HFFPRange currentLineRange = [controller displayedLineRange]; + HFASSERT(currentLineRange.length < HFULToFP(totalLineCount)); + long double maxScroll = totalLineCount - currentLineRange.length; + long double newScroll = maxScroll * (long double)newValue; + [controller setDisplayedLineRange:(HFFPRange){newScroll, currentLineRange.length}]; +} + +- (void)scrollByLines:(long long)linesInt { + if (linesInt == 0) return; + + //note - this properly computes the absolute value even for LLONG_MIN + long double lines = HFULToFP((unsigned long long)llabs(linesInt)); + + HFController *controller = [self controller]; + HFASSERT(controller != NULL); + HFFPRange displayedRange = [[self controller] displayedLineRange]; + if (linesInt < 0) { + displayedRange.location -= MIN(lines, displayedRange.location); + } + else { + long double availableLines = HFULToFP([controller totalLineCount]); + displayedRange.location = MIN(availableLines - displayedRange.length, displayedRange.location + lines); + } + [controller setDisplayedLineRange:displayedRange]; +} + +- (void)scrollerDidChangeValue:(NSScroller *)scroller { + assert(scroller == [self view]); + switch ([scroller hitPart]) { + case NSScrollerDecrementPage: [self scrollByLines: -(long long)[self visibleLines]]; break; + case NSScrollerIncrementPage: [self scrollByLines: (long long)[self visibleLines]]; break; + case NSScrollerDecrementLine: [self scrollByLines: -1LL]; break; + case NSScrollerIncrementLine: [self scrollByLines: 1LL]; break; + case NSScrollerKnob: [self scrollByKnobToValue:[scroller doubleValue]]; break; + default: break; + } +} + +- (void)updateScrollerValue { + HFController *controller = [self controller]; + CGFloat value, proportion; + NSScroller *scroller = [self view]; + BOOL enable = YES; + if (controller == nil) { + value = 0; + proportion = 0; + } + else { + unsigned long long length = [controller contentsLength]; + HFFPRange lineRange = [controller displayedLineRange]; + HFASSERT(lineRange.location >= 0 && lineRange.length >= 0); + if (length == 0) { + value = 0; + proportion = 1; + enable = NO; + } + else { + long double availableLines = HFULToFP([controller totalLineCount]); + long double consumedLines = MAX(1., lineRange.length); + proportion = ld2f(lineRange.length / availableLines); + + long double maxScroll = availableLines - consumedLines; + HFASSERT(maxScroll >= lineRange.location); + if (maxScroll == 0.) { + enable = NO; + value = 0; + } + else { + value = ld2f(lineRange.location / maxScroll); + } + } + } + [scroller setDoubleValue:value]; + [scroller setKnobProportion:proportion]; + [scroller setEnabled:enable]; +} + +- (CGFloat)minimumViewWidthForBytesPerLine:(NSUInteger)bytesPerLine { + USE(bytesPerLine); + return [NSScroller scrollerWidthForControlSize:[[self view] controlSize] scrollerStyle:NSScrollerStyleLegacy]; +} + +- (void)controllerDidChange:(HFControllerPropertyBits)bits { + if (bits & (HFControllerContentLength | HFControllerDisplayedLineRange)) [self updateScrollerValue]; +} + ++ (NSPoint)defaultLayoutPosition { + return NSMakePoint(2, 0); +} + +@end diff --git a/thirdparty/SameBoy-old/HexFiend/HexFiend.h b/thirdparty/SameBoy-old/HexFiend/HexFiend.h new file mode 100644 index 000000000..60d69a7e1 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HexFiend.h @@ -0,0 +1,78 @@ +/*! @mainpage HexFiend.framework + * + * @section intro Introduction + * HexFiend.framework (hereafter "Hex Fiend" when there is no risk of confusion with the app by the same name) is a framework designed to enable applications to support viewing and editing of binary data. The emphasis is on editing data in a natural way, following Mac OS X text editing conventions. + * + * Hex Fiend is designed to work efficiently with large amounts (64 bits worth) of data. As such, it can work with arbitrarily large files without reading the entire file into memory. This includes insertions, deletions, and in-place editing. Hex Fiend can also efficiently save such changes back to the file, without requiring any additional temporary disk space. + * + * Hex Fiend has a clean separation between the model, view, and controller layers. The model layer allows for efficient manipulation of raw data of mixed sources, making it useful for tools that need to work with large files. + * + * Both the framework and the app are open source under a BSD-style license. In summary, you may use Hex Fiend in any project as long as you include the copyright notice somewhere in the documentation. + * + * @section requirements Requirements + * Hex Fiend is only available on Mac OS X, and supported on Mountain Lion and later. + * + * @section getting_started Getting Started + * + * The Hex Fiend source code is available at http://ridiculousfish.com/hexfiend/ and on GitHub at https://github.com/ridiculousfish/HexFiend + * + * Hex Fiend comes with some sample code ("HexFiendling"), distributed as part of the project. And of course the Hex Fiend application itself is open source, acting as a more sophisticated sample code. +*/ + + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + + +/* The following is all for Doxygen */ + + +/*! @defgroup model Model + * Hex Fiend's model classes + */ +///@{ +///@class HFByteArray +///@class HFBTreeByteArray +///@class HFFullMemoryByteArray +///@class HFByteSlice +///@class HFFileByteSlice +///@class HFSharedMemoryByteSlice +///@class HFFullMemoryByteSlice + +///@} + + +/*! @defgroup view View + * Hex Fiend's view classes + */ +///@{ +///@class HFRepresenter +///@class HFHexTextRepresenter +///@class HFStringEncodingTextRepresenter +///@class HFLayoutRepresenter +///@class HFLineCountingRepresenter +///@class HFStatusBarRepresenter +///@class HFVerticalScrollerRepresenter +///@class HFLineCountingRepresenter + +///@} + +/*! @defgroup controller Controller + * Hex Fiend's controller classes + */ +///@{ +///@class HFController + +///@} diff --git a/thirdparty/SameBoy-old/HexFiend/HexFiend_2_Framework_Prefix.pch b/thirdparty/SameBoy-old/HexFiend/HexFiend_2_Framework_Prefix.pch new file mode 100644 index 000000000..96d0fb762 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/HexFiend_2_Framework_Prefix.pch @@ -0,0 +1,99 @@ +// +// Prefix header for all source files of the 'HexFiend_2' target in the 'HexFiend_2' project +// + +#ifdef __OBJC__ + #import + #import +#endif + +#define PRIVATE_EXTERN __private_extern__ + +#include + +#if ! NDEBUG +#define HFASSERT(a) assert(a) +#else +#define HFASSERT(a) if (0 && ! (a)) abort() +#endif + + +#define UNIMPLEMENTED_VOID() [NSException raise:NSGenericException \ + format:@"Message %@ sent to instance of class %@, "\ + @"which does not implement that method",\ + NSStringFromSelector(_cmd), [[self class] description]] + +#define UNIMPLEMENTED() UNIMPLEMENTED_VOID(); return 0 + +/* Macro to "use" a variable to prevent unused variable warnings. */ +#define USE(x) ((void)(x)) + +#define check_malloc(x) ({ size_t _count = (x); void *_result = malloc(_count); if(!_result) { fprintf(stderr, "Out of memory allocating %lu bytes\n", (unsigned long)_count); exit(EXIT_FAILURE); } _result; }) +#define check_calloc(x) ({ size_t _count = (x); void *_result = calloc(_count, 1); if(!_result) { fprintf(stderr, "Out of memory allocating %lu bytes\n", (unsigned long)_count); exit(EXIT_FAILURE); } _result; }) +#define check_realloc(p, x) ({ size_t _count = (x); void *_result = realloc((p), x); if(!_result) { fprintf(stderr, "Out of memory reallocating %lu bytes\n", (unsigned long)_count); exit(EXIT_FAILURE); } _result; }) + +#if ! NDEBUG +#define REQUIRE_NOT_NULL(a) do { \ + if ((a)==NULL) {\ + fprintf(stderr, "REQUIRE_NOT_NULL failed: NULL value for parameter " #a " on line %d in file %s\n", __LINE__, __FILE__);\ + abort();\ + }\ +} while (0) + +#define EXPECT_CLASS(e, c) do { \ + if (! [(e) isKindOfClass:[c class]]) {\ + fprintf(stderr, "EXPECT_CLASS failed: Expression " #e " is %s on line %d in file %s\n", (e) ? "(nil)" : [[e description] UTF8String], __LINE__, __FILE__);\ + abort();\ + }\ +} while (0) + +#else +#define REQUIRE_NOT_NULL(a) USE(a) +#define EXPECT_CLASS(e, c) USE(e) +#endif + +#define FOREACH(type, var, exp) for (type var in (exp)) + +#define NEW_ARRAY(type, name, number) \ + type name ## static_ [256];\ + type * name = ((number) <= 256 ? name ## static_ : check_malloc((number) * sizeof(type))) + +#define FREE_ARRAY(name) \ + if (name != name ## static_) free(name) + +#if !defined(MIN) + #define MIN(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; }) +#endif + +#if !defined(MAX) + #define MAX(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; }) +#endif + +//How many bytes should we read at a time when doing a find/replace? +#define SEARCH_CHUNK_SIZE 32768 + +//What's the smallest clipboard data size we should offer to avoid copying when quitting? This is 5 MB +#define MINIMUM_PASTEBOARD_SIZE_TO_WARN_ABOUT (5UL << 20) + +//What's the largest clipboard data size we should support exporting (at all?) This is 500 MB. Note that we can still copy more data than this internally, we just can't put it in, say, TextEdit. +#define MAXIMUM_PASTEBOARD_SIZE_TO_EXPORT (500UL << 20) + +// When we save a file, and other byte arrays need to break their dependencies on the file by copying some of its data into memory, what's the max amount we should copy (per byte array)? We currently don't show any progress for this, so this should be a smaller value +#define MAX_MEMORY_TO_USE_FOR_BREAKING_FILE_DEPENDENCIES_ON_SAVE (16 * 1024 * 1024) + +#ifdef __OBJC__ + #import + #import "HFFunctions_Private.h" +#endif + +#ifndef __has_feature // Optional. +#define __has_feature(x) 0 // Compatibility with non-clang compilers. +#endif + +#ifndef NS_RETURNS_RETAINED +#if __has_feature(attribute_ns_returns_retained) +#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +#else +#define NS_RETURNS_RETAINED +#endif +#endif diff --git a/thirdparty/SameBoy-old/HexFiend/License.txt b/thirdparty/SameBoy-old/HexFiend/License.txt new file mode 100644 index 000000000..7760edbd3 --- /dev/null +++ b/thirdparty/SameBoy-old/HexFiend/License.txt @@ -0,0 +1,21 @@ +Copyright (c) 2005-2009, Peter Ammon +* All rights reserved. +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/thirdparty/SameBoy-old/JoyKit/ControllerConfiguration.inc b/thirdparty/SameBoy-old/JoyKit/ControllerConfiguration.inc new file mode 100644 index 000000000..185c7bd86 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/ControllerConfiguration.inc @@ -0,0 +1,532 @@ +#define BUTTON(x) @(JOYButtonUsageGeneric0 + (x)) +#define AXIS(x) @(JOYAxisUsageGeneric0 + (x)) +#define AXES2D(x) @(JOYAxes2DUsageGeneric0 + (x)) + +hacksByManufacturer = @{ + @(0x045E): @{ // Microsoft + + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(2), + @(kHIDUsage_GD_Rx): @(1), + @(kHIDUsage_GD_Ry): @(1), + @(kHIDUsage_GD_Rz): @(2), + }, + + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageA), + BUTTON(2): @(JOYButtonUsageB), + BUTTON(3): @(JOYButtonUsageX), + BUTTON(4): @(JOYButtonUsageY), + BUTTON(5): @(JOYButtonUsageL1), + BUTTON(6): @(JOYButtonUsageR1), + BUTTON(7): @(JOYButtonUsageLStick), + BUTTON(8): @(JOYButtonUsageRStick), + BUTTON(9): @(JOYButtonUsageStart), + BUTTON(10): @(JOYButtonUsageSelect), + BUTTON(11): @(JOYButtonUsageHome), + }, + + JOYAxisUsageMapping: @{ + AXIS(3): @(JOYAxisUsageL1), + AXIS(6): @(JOYAxisUsageR1), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + AXES2D(3): @(JOYAxes2DUsageRightStick), + }, + + JOYEmulateAxisButtons: @YES, + }, + + @(0x054C): @{ // Sony + /* Generally untested, but should work */ + + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(1), + @(kHIDUsage_GD_Rx): @(2), + @(kHIDUsage_GD_Ry): @(3), + @(kHIDUsage_GD_Rz): @(1), + }, + + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageY), + BUTTON(2): @(JOYButtonUsageB), + BUTTON(3): @(JOYButtonUsageA), + BUTTON(4): @(JOYButtonUsageX), + BUTTON(5): @(JOYButtonUsageL1), + BUTTON(6): @(JOYButtonUsageR1), + BUTTON(7): @(JOYButtonUsageL2), + BUTTON(8): @(JOYButtonUsageR2), + BUTTON(9): @(JOYButtonUsageSelect), + BUTTON(10): @(JOYButtonUsageStart), + BUTTON(11): @(JOYButtonUsageLStick), + BUTTON(12): @(JOYButtonUsageRStick), + BUTTON(13): @(JOYButtonUsageHome), + BUTTON(14): @(JOYButtonUsageMisc), + }, + + JOYAxisUsageMapping: @{ + AXIS(4): @(JOYAxisUsageL2), + AXIS(5): @(JOYAxisUsageR2), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + AXES2D(4): @(JOYAxes2DUsageRightStick), + }, + + // When DualSense mode is activated on BT, The report ID is 0x31 and there's an extra byte + JOYCustomReports: @{ + @(0x31): @[ + /* 1D and 2D axes */ + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x08, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x10, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x18, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x20, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x28, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255}, + @{@"reportID": @(0x31), @"size":@8, @"offset":@0x30, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0, @"max": @255}, + + /* Hat Switch*/ + @{@"reportID": @(0x31), @"size":@4, @"offset":@0x40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Hatswitch), @"min": @0, @"max": @7}, + + /* Buttons */ + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x44, @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x45, @"usagePage":@(kHIDPage_Button), @"usage":@2}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x46, @"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x47, @"usagePage":@(kHIDPage_Button), @"usage":@4}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x48, @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x49, @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4A, @"usagePage":@(kHIDPage_Button), @"usage":@7}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4B, @"usagePage":@(kHIDPage_Button), @"usage":@8}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4C, @"usagePage":@(kHIDPage_Button), @"usage":@9}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4D, @"usagePage":@(kHIDPage_Button), @"usage":@10}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4E, @"usagePage":@(kHIDPage_Button), @"usage":@11}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4F, @"usagePage":@(kHIDPage_Button), @"usage":@12}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x50, @"usagePage":@(kHIDPage_Button), @"usage":@13}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x51, @"usagePage":@(kHIDPage_Button), @"usage":@14}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x52, @"usagePage":@(kHIDPage_Button), @"usage":@15}, + + @{@"reportID": @(0x31), @"size":@16, @"offset":@0x80, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0x90, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xA0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xB0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xC0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xD0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, + ], + + @(1): @[ + @{@"reportID": @(1), @"size":@16, @"offset":@0x78, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0x88, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0x98, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0xA8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0xB8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0xC8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, + ], + }, + + JOYIsSony: @YES, + } +}; + +hacksByName = @{ + @"WUP-028": @{ // Nintendo GameCube Controller Adapter + JOYReportIDFilters: @[@[@1], @[@2], @[@3], @[@4]], + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageA), + BUTTON(2): @(JOYButtonUsageB), + BUTTON(3): @(JOYButtonUsageX), + BUTTON(4): @(JOYButtonUsageY), + BUTTON(5): @(JOYButtonUsageStart), + BUTTON(6): @(JOYButtonUsageZ), + BUTTON(7): @(JOYButtonUsageR1), + BUTTON(8): @(JOYButtonUsageL1), + }, + + JOYAxisUsageMapping: @{ + AXIS(3): @(JOYAxisUsageL1), + AXIS(6): @(JOYAxisUsageR1), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + AXES2D(4): @(JOYAxes2DUsageRightStick), + }, + + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(2), + @(kHIDUsage_GD_Rx): @(1), + @(kHIDUsage_GD_Ry): @(1), + @(kHIDUsage_GD_Rz): @(3), + }, + + JOYRumbleUsage: @1, + JOYRumbleUsagePage: @0xFF00, + + JOYConnectedUsage: @2, + JOYConnectedUsagePage: @0xFF00, + + JOYActivationReport: [NSData dataWithBytes:(uint8_t[]){0x13} length:1], + + JOYCustomReports: @{ + + // Rumble + @(-17): @[ + @{@"reportID": @(1), @"size":@1, @"offset":@0, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1}, + @{@"reportID": @(2), @"size":@1, @"offset":@8, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1}, + @{@"reportID": @(3), @"size":@1, @"offset":@16, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1}, + @{@"reportID": @(4), @"size":@1, @"offset":@24, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1}, + ], + + @(33): @[ + + // Player 1 + + @{@"reportID": @(1), @"size":@1, @"offset":@4, @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1}, + + @{@"reportID": @(1), @"size":@1, @"offset":@8, @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(1), @"size":@1, @"offset":@9, @"usagePage":@(kHIDPage_Button), @"usage":@2}, + @{@"reportID": @(1), @"size":@1, @"offset":@10,@"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(1), @"size":@1, @"offset":@11,@"usagePage":@(kHIDPage_Button), @"usage":@4}, + + @{@"reportID": @(1), @"size":@1, @"offset":@12, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)}, + @{@"reportID": @(1), @"size":@1, @"offset":@13, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)}, + @{@"reportID": @(1), @"size":@1, @"offset":@14, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)}, + @{@"reportID": @(1), @"size":@1, @"offset":@15, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)}, + + + @{@"reportID": @(1), @"size":@1, @"offset":@16, @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(1), @"size":@1, @"offset":@17, @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(1), @"size":@1, @"offset":@18, @"usagePage":@(kHIDPage_Button), @"usage":@7}, + @{@"reportID": @(1), @"size":@1, @"offset":@19, @"usagePage":@(kHIDPage_Button), @"usage":@8}, + + @{@"reportID": @(1), @"size":@8, @"offset":@24, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@32, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0}, + + @{@"reportID": @(1), @"size":@8, @"offset":@40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@48, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0}, + + @{@"reportID": @(1), @"size":@8, @"offset":@56, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@64, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255}, + + // Player 2 + + @{@"reportID": @(2), @"size":@1, @"offset":@(4 + 72), @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1}, + + + @{@"reportID": @(2), @"size":@1, @"offset":@(8 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(2), @"size":@1, @"offset":@(9 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@2}, + @{@"reportID": @(2), @"size":@1, @"offset":@(10 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(2), @"size":@1, @"offset":@(11 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@4}, + + @{@"reportID": @(2), @"size":@1, @"offset":@(12 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)}, + @{@"reportID": @(2), @"size":@1, @"offset":@(13 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)}, + @{@"reportID": @(2), @"size":@1, @"offset":@(14 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)}, + @{@"reportID": @(2), @"size":@1, @"offset":@(15 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)}, + + + @{@"reportID": @(2), @"size":@1, @"offset":@(16 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(2), @"size":@1, @"offset":@(17 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(2), @"size":@1, @"offset":@(18 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@7}, + @{@"reportID": @(2), @"size":@1, @"offset":@(19 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@8}, + + @{@"reportID": @(2), @"size":@8, @"offset":@(24 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255}, + @{@"reportID": @(2), @"size":@8, @"offset":@(32 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0}, + + @{@"reportID": @(2), @"size":@8, @"offset":@(40 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255}, + @{@"reportID": @(2), @"size":@8, @"offset":@(48 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0}, + + @{@"reportID": @(2), @"size":@8, @"offset":@(56 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255}, + @{@"reportID": @(2), @"size":@8, @"offset":@(64 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255}, + + // Player 3 + + @{@"reportID": @(3), @"size":@1, @"offset":@(4 + 144), @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1}, + + @{@"reportID": @(3), @"size":@1, @"offset":@(8 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(3), @"size":@1, @"offset":@(9 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@2}, + @{@"reportID": @(3), @"size":@1, @"offset":@(10 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(3), @"size":@1, @"offset":@(11 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@4}, + + @{@"reportID": @(3), @"size":@1, @"offset":@(12 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)}, + @{@"reportID": @(3), @"size":@1, @"offset":@(13 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)}, + @{@"reportID": @(3), @"size":@1, @"offset":@(14 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)}, + @{@"reportID": @(3), @"size":@1, @"offset":@(15 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)}, + + + @{@"reportID": @(3), @"size":@1, @"offset":@(16 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(3), @"size":@1, @"offset":@(17 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(3), @"size":@1, @"offset":@(18 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@7}, + @{@"reportID": @(3), @"size":@1, @"offset":@(19 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@8}, + + @{@"reportID": @(3), @"size":@8, @"offset":@(24 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255}, + @{@"reportID": @(3), @"size":@8, @"offset":@(32 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0}, + + @{@"reportID": @(3), @"size":@8, @"offset":@(40 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255}, + @{@"reportID": @(3), @"size":@8, @"offset":@(48 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0}, + + @{@"reportID": @(3), @"size":@8, @"offset":@(56 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255}, + @{@"reportID": @(3), @"size":@8, @"offset":@(64 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255}, + + // Player 4 + + @{@"reportID": @(4), @"size":@1, @"offset":@(4 + 216), @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1}, + + @{@"reportID": @(4), @"size":@1, @"offset":@(8 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(4), @"size":@1, @"offset":@(9 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@2}, + @{@"reportID": @(4), @"size":@1, @"offset":@(10 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(4), @"size":@1, @"offset":@(11 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@4}, + + @{@"reportID": @(4), @"size":@1, @"offset":@(12 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)}, + @{@"reportID": @(4), @"size":@1, @"offset":@(13 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)}, + @{@"reportID": @(4), @"size":@1, @"offset":@(14 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)}, + @{@"reportID": @(4), @"size":@1, @"offset":@(15 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)}, + + + @{@"reportID": @(4), @"size":@1, @"offset":@(16 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(4), @"size":@1, @"offset":@(17 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(4), @"size":@1, @"offset":@(18 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@7}, + @{@"reportID": @(4), @"size":@1, @"offset":@(19 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@8}, + + @{@"reportID": @(4), @"size":@8, @"offset":@(24 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255}, + @{@"reportID": @(4), @"size":@8, @"offset":@(32 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0}, + + @{@"reportID": @(4), @"size":@8, @"offset":@(40 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255}, + @{@"reportID": @(4), @"size":@8, @"offset":@(48 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0}, + + @{@"reportID": @(4), @"size":@8, @"offset":@(56 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255}, + @{@"reportID": @(4), @"size":@8, @"offset":@(64 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255}, + + + ]}, + }, + + @"GameCube Controller Adapter": @{ // GameCube Controller PC Adapter + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(1), + @(kHIDUsage_GD_Rx): @(2), + @(kHIDUsage_GD_Ry): @(3), + @(kHIDUsage_GD_Rz): @(1), + }, + JOYReportIDFilters: @[@[@1], @[@2], @[@3], @[@4]], + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageX), + BUTTON(2): @(JOYButtonUsageA), + BUTTON(3): @(JOYButtonUsageB), + BUTTON(4): @(JOYButtonUsageY), + BUTTON(5): @(JOYButtonUsageL1), + BUTTON(6): @(JOYButtonUsageR1), + BUTTON(8): @(JOYButtonUsageZ), + BUTTON(10): @(JOYButtonUsageStart), + BUTTON(13): @(JOYButtonUsageDPadUp), + BUTTON(14): @(JOYButtonUsageDPadRight), + BUTTON(15): @(JOYButtonUsageDPadDown), + BUTTON(16): @(JOYButtonUsageDPadLeft), + }, + + JOYAxisUsageMapping: @{ + AXIS(4): @(JOYAxisUsageL1), + AXIS(5): @(JOYAxisUsageR1), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + AXES2D(3): @(JOYAxes2DUsageRightStick), + }, + + JOYRumbleUsage: @1, + JOYRumbleUsagePage: @0xFF00, + JOYRumbleMin: @0, + JOYRumbleMax: @255, + JOYSwapZRz: @YES, + }, + + @"Twin USB Joystick": @{ // DualShock PC Adapter + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(1), + @(kHIDUsage_GD_Rx): @(2), + @(kHIDUsage_GD_Ry): @(2), + @(kHIDUsage_GD_Rz): @(1), + }, + JOYReportIDFilters: @[@[@1], @[@2]], + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageX), + BUTTON(2): @(JOYButtonUsageA), + BUTTON(3): @(JOYButtonUsageB), + BUTTON(4): @(JOYButtonUsageY), + BUTTON(5): @(JOYButtonUsageL2), + BUTTON(6): @(JOYButtonUsageR2), + BUTTON(7): @(JOYButtonUsageL1), + BUTTON(8): @(JOYButtonUsageR1), + BUTTON(9): @(JOYButtonUsageSelect), + BUTTON(10): @(JOYButtonUsageStart), + BUTTON(11): @(JOYButtonUsageLStick), + BUTTON(12): @(JOYButtonUsageRStick), + BUTTON(13): @(JOYButtonUsageDPadUp), + BUTTON(14): @(JOYButtonUsageDPadRight), + BUTTON(15): @(JOYButtonUsageDPadDown), + BUTTON(16): @(JOYButtonUsageDPadLeft), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + AXES2D(6): @(JOYAxes2DUsageRightStick), + }, + + JOYSwapZRz: @YES, + }, + + @"Pro Controller": @{ // Switch Pro Controller + JOYIsSwitch: @YES, + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(0), + @(kHIDUsage_GD_Rx): @(1), + @(kHIDUsage_GD_Ry): @(1), + @(kHIDUsage_GD_Rz): @(1), + }, + + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageB), + BUTTON(2): @(JOYButtonUsageA), + BUTTON(3): @(JOYButtonUsageY), + BUTTON(4): @(JOYButtonUsageX), + BUTTON(5): @(JOYButtonUsageL1), + BUTTON(6): @(JOYButtonUsageR1), + BUTTON(7): @(JOYButtonUsageL2), + BUTTON(8): @(JOYButtonUsageR2), + BUTTON(9): @(JOYButtonUsageSelect), + BUTTON(10): @(JOYButtonUsageStart), + BUTTON(11): @(JOYButtonUsageLStick), + BUTTON(12): @(JOYButtonUsageRStick), + BUTTON(13): @(JOYButtonUsageHome), + BUTTON(14): @(JOYButtonUsageMisc), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + AXES2D(4): @(JOYAxes2DUsageRightStick), + }, + + JOYCustomReports: @{ + @(0x30): @[ + + @{@"reportID": @(1), @"size":@1, @"offset":@16, @"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(1), @"size":@1, @"offset":@17, @"usagePage":@(kHIDPage_Button), @"usage":@4}, + @{@"reportID": @(1), @"size":@1, @"offset":@18, @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(1), @"size":@1, @"offset":@19, @"usagePage":@(kHIDPage_Button), @"usage":@2}, + + // SR and SL not used on the Pro Controller + @{@"reportID": @(1), @"size":@1, @"offset":@22, @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(1), @"size":@1, @"offset":@23, @"usagePage":@(kHIDPage_Button), @"usage":@8}, + + @{@"reportID": @(1), @"size":@1, @"offset":@24, @"usagePage":@(kHIDPage_Button), @"usage":@9}, + @{@"reportID": @(1), @"size":@1, @"offset":@25, @"usagePage":@(kHIDPage_Button), @"usage":@10}, + @{@"reportID": @(1), @"size":@1, @"offset":@26, @"usagePage":@(kHIDPage_Button), @"usage":@12}, + @{@"reportID": @(1), @"size":@1, @"offset":@27, @"usagePage":@(kHIDPage_Button), @"usage":@11}, + + @{@"reportID": @(1), @"size":@1, @"offset":@28, @"usagePage":@(kHIDPage_Button), @"usage":@13}, + @{@"reportID": @(1), @"size":@1, @"offset":@29, @"usagePage":@(kHIDPage_Button), @"usage":@14}, + + @{@"reportID": @(1), @"size":@1, @"offset":@32, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)}, + @{@"reportID": @(1), @"size":@1, @"offset":@33, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)}, + @{@"reportID": @(1), @"size":@1, @"offset":@34, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)}, + @{@"reportID": @(1), @"size":@1, @"offset":@35, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)}, + + // SR and SL not used on the Pro Controller + @{@"reportID": @(1), @"size":@1, @"offset":@38, @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(1), @"size":@1, @"offset":@39, @"usagePage":@(kHIDPage_Button), @"usage":@7}, + + /* Sticks */ + @{@"reportID": @(1), @"size":@12, @"offset":@40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @0xFFF}, + @{@"reportID": @(1), @"size":@12, @"offset":@52, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @0xFFF, @"max": @0}, + + @{@"reportID": @(1), @"size":@12, @"offset":@64, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @0xFFF}, + @{@"reportID": @(1), @"size":@12, @"offset":@76, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0xFFF, @"max": @0}, + + @{@"reportID": @(1), @"size":@16, @"offset":@96, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, + @{@"reportID": @(1), @"size":@16, @"offset":@112, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(1), @"size":@16, @"offset":@128, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(1), @"size":@16, @"offset":@144, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@160, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@176, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, + ], + }, + + JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken + }, + @"PLAYSTATION(R)3 Controller": @{ // DualShock 3 + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(1), + @(kHIDUsage_GD_Rx): @(2), + @(kHIDUsage_GD_Ry): @(3), + @(kHIDUsage_GD_Rz): @(1), + }, + + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageSelect), + BUTTON(2): @(JOYButtonUsageL3), + BUTTON(3): @(JOYButtonUsageR3), + BUTTON(4): @(JOYButtonUsageStart), + BUTTON(5): @(JOYButtonUsageDPadUp), + BUTTON(6): @(JOYButtonUsageDPadRight), + BUTTON(7): @(JOYButtonUsageDPadDown), + BUTTON(8): @(JOYButtonUsageDPadLeft), + BUTTON(9): @(JOYButtonUsageL2), + BUTTON(10): @(JOYButtonUsageR2), + BUTTON(11): @(JOYButtonUsageL1), + BUTTON(12): @(JOYButtonUsageR1), + BUTTON(13): @(JOYButtonUsageX), + BUTTON(14): @(JOYButtonUsageA), + BUTTON(15): @(JOYButtonUsageB), + BUTTON(16): @(JOYButtonUsageY), + BUTTON(17): @(JOYButtonUsageHome), + }, + + JOYAxisUsageMapping: @{ + AXIS(4): @(JOYAxisUsageL1), + AXIS(5): @(JOYAxisUsageR1), + AXIS(8): @(JOYAxisUsageL2), + AXIS(9): @(JOYAxisUsageR2), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + AXES2D(3): @(JOYAxes2DUsageRightStick), + }, + + JOYCustomReports: @{ + @(0x01): @[ + /* Pressure sensitive inputs */ + @{@"reportID": @(1), @"size":@8, @"offset":@(13 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(14 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(15 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(16 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(17 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Dial), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(18 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Wheel), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(19 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(20 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(21 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(22 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(23 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + @{@"reportID": @(1), @"size":@8, @"offset":@(24 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255}, + ] + }, + + JOYIsDualShock3: @YES, + }, + +}; diff --git a/thirdparty/SameBoy-old/JoyKit/JOYAxes2D.h b/thirdparty/SameBoy-old/JoyKit/JOYAxes2D.h new file mode 100644 index 000000000..b6f6d152f --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYAxes2D.h @@ -0,0 +1,24 @@ +#import + +typedef enum { + JOYAxes2DUsageNone, + JOYAxes2DUsageLeftStick, + JOYAxes2DUsageRightStick, + JOYAxes2DUsageMiddleStick, + JOYAxes2DUsagePointer, + JOYAxes2DUsageNonGenericMax, + + JOYAxes2DUsageGeneric0 = 0x10000, +} JOYAxes2DUsage; + +@interface JOYAxes2D : NSObject +- (NSString *)usageString; ++ (NSString *)usageToString: (JOYAxes2DUsage) usage; +- (uint64_t)uniqueID; +- (double)distance; +- (double)angle; +- (NSPoint)value; +@property JOYAxes2DUsage usage; +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYAxes2D.m b/thirdparty/SameBoy-old/JoyKit/JOYAxes2D.m new file mode 100644 index 000000000..272d34f9c --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYAxes2D.m @@ -0,0 +1,181 @@ +#import "JOYAxes2D.h" +#import "JOYElement.h" + +@implementation JOYAxes2D +{ + JOYElement *_element1, *_element2; + double _state1, _state2; + int32_t initialX, initialY; + int32_t minX, minY; + int32_t maxX, maxY; + +} + ++ (NSString *)usageToString: (JOYAxes2DUsage) usage +{ + if (usage < JOYAxes2DUsageNonGenericMax) { + return (NSString *[]) { + @"None", + @"Left Stick", + @"Right Stick", + @"Middle Stick", + @"Pointer", + }[usage]; + } + if (usage >= JOYAxes2DUsageGeneric0) { + return [NSString stringWithFormat:@"Generic 2D Analog Control %d", usage - JOYAxes2DUsageGeneric0]; + } + + return [NSString stringWithFormat:@"Unknown Usage 2D Axes %d", usage]; +} + +- (NSString *)usageString +{ + return [self.class usageToString:_usage]; +} + +- (uint64_t)uniqueID +{ + return _element1.uniqueID; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p, %@ (%llu); State: %.2f%%, %.2f degrees>", self.className, self, self.usageString, self.uniqueID, self.distance * 100, self.angle]; +} + +- (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2 +{ + self = [super init]; + if (!self) return self; + + _element1 = element1; + _element2 = element2; + + + if (element1.usagePage == kHIDPage_GenericDesktop) { + uint16_t usage = element1.usage; + _usage = JOYAxes2DUsageGeneric0 + usage - kHIDUsage_GD_X + 1; + } + initialX = 0; + initialY = 0; + minX = element1.max; + minY = element2.max; + maxX = element1.min; + maxY = element2.min; + + return self; +} + +- (NSPoint)value +{ + return NSMakePoint(_state1, _state2); +} + +-(int32_t) effectiveMinX +{ + int32_t rawMin = _element1.min; + int32_t rawMax = _element1.max; + if (initialX == 0) return rawMin; + if (minX <= (rawMin * 2 + initialX) / 3 && maxX >= (rawMax * 2 + initialX) / 3 ) return minX; + if ((initialX - rawMin) < (rawMax - initialX)) return rawMin; + return initialX - (rawMax - initialX); +} + +-(int32_t) effectiveMinY +{ + int32_t rawMin = _element2.min; + int32_t rawMax = _element2.max; + if (initialY == 0) return rawMin; + if (minX <= (rawMin * 2 + initialY) / 3 && maxY >= (rawMax * 2 + initialY) / 3 ) return minY; + if ((initialY - rawMin) < (rawMax - initialY)) return rawMin; + return initialY - (rawMax - initialY); +} + +-(int32_t) effectiveMaxX +{ + int32_t rawMin = _element1.min; + int32_t rawMax = _element1.max; + if (initialX == 0) return rawMax; + if (minX <= (rawMin * 2 + initialX) / 3 && maxX >= (rawMax * 2 + initialX) / 3 ) return maxX; + if ((initialX - rawMin) > (rawMax - initialX)) return rawMax; + return initialX + (initialX - rawMin); +} + +-(int32_t) effectiveMaxY +{ + int32_t rawMin = _element2.min; + int32_t rawMax = _element2.max; + if (initialY == 0) return rawMax; + if (minX <= (rawMin * 2 + initialY) / 3 && maxY >= (rawMax * 2 + initialY) / 3 ) return maxY; + if ((initialY - rawMin) > (rawMax - initialY)) return rawMax; + return initialY + (initialY - rawMin); +} + +- (bool)updateState +{ + int32_t x = [_element1 value]; + int32_t y = [_element2 value]; + if (x == 0 && y == 0) return false; + + if (initialX == 0 && initialY == 0) { + initialX = x; + initialY = y; + } + + double old1 = _state1, old2 = _state2; + { + int32_t value = x; + + if (initialX != 0) { + minX = MIN(value, minX); + maxX = MAX(value, maxX); + } + + double min = [self effectiveMinX]; + double max = [self effectiveMaxX]; + if (min == max) return false; + + _state1 = (value - min) / (max - min) * 2 - 1; + } + + { + int32_t value = y; + + if (initialY != 0) { + minY = MIN(value, minY); + maxY = MAX(value, maxY); + } + + double min = [self effectiveMinY]; + double max = [self effectiveMaxY]; + if (min == max) return false; + + _state2 = (value - min) / (max - min) * 2 - 1; + } + + if (_state1 < -1 || _state1 > 1 || + _state2 < -1 || _state2 > 1) { + // Makes no sense, recalibrate + _state1 = _state2 = 0; + initialX = initialY = 0; + minX = _element1.max; + minY = _element2.max; + maxX = _element1.min; + maxY = _element2.min; + } + + return old1 != _state1 || old2 != _state2; +} + +- (double)distance +{ + return MIN(sqrt(_state1 * _state1 + _state2 * _state2), 1.0); +} + +- (double)angle { + double temp = atan2(_state2, _state1) * 180 / M_PI; + if (temp >= 0) return temp; + return temp + 360; +} +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYAxes3D.h b/thirdparty/SameBoy-old/JoyKit/JOYAxes3D.h new file mode 100644 index 000000000..5c838079d --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYAxes3D.h @@ -0,0 +1,27 @@ +#import + +typedef enum { + JOYAxes3DUsageNone, + JOYAxes3DUsageAcceleration, + JOYAxes3DUsageOrientation, + JOYAxes3DUsageGyroscope, + JOYAxes3DUsageNonGenericMax, + + JOYAxes3DUsageGeneric0 = 0x10000, +} JOYAxes3DUsage; + +typedef struct { + double x, y, z; +} JOYPoint3D; + +@interface JOYAxes3D : NSObject +- (NSString *)usageString; ++ (NSString *)usageToString: (JOYAxes3DUsage) usage; +- (uint64_t)uniqueID; +- (JOYPoint3D)rawValue; +- (JOYPoint3D)normalizedValue; // For orientation +- (JOYPoint3D)gUnitsValue; // For acceleration +@property JOYAxes3DUsage usage; +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYAxes3D.m b/thirdparty/SameBoy-old/JoyKit/JOYAxes3D.m new file mode 100644 index 000000000..6ec146a59 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYAxes3D.m @@ -0,0 +1,108 @@ +#import "JOYAxes3D.h" +#import "JOYElement.h" + +@implementation JOYAxes3D +{ + JOYElement *_element1, *_element2, *_element3; + double _state1, _state2, _state3; + int32_t _minX, _minY, _minZ; + int32_t _maxX, _maxY, _maxZ; + double _gApproximation; +} + ++ (NSString *)usageToString: (JOYAxes3DUsage) usage +{ + if (usage < JOYAxes3DUsageNonGenericMax) { + return (NSString *[]) { + @"None", + @"Acceleretion", + @"Orientation", + @"Gyroscope", + }[usage]; + } + if (usage >= JOYAxes3DUsageGeneric0) { + return [NSString stringWithFormat:@"Generic 3D Analog Control %d", usage - JOYAxes3DUsageGeneric0]; + } + + return [NSString stringWithFormat:@"Unknown Usage 3D Axes %d", usage]; +} + +- (NSString *)usageString +{ + return [self.class usageToString:_usage]; +} + +- (uint64_t)uniqueID +{ + return _element1.uniqueID; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p, %@ (%llu); State: (%.2f, %.2f, %.2f)>", self.className, self, self.usageString, self.uniqueID, _state1, _state2, _state3]; +} + +- (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2 thirdElement:(JOYElement *)element3 +{ + self = [super init]; + if (!self) return self; + + _element1 = element1; + _element2 = element2; + _element3 = element3; + + _maxX = element1? element1.max : 1; + _maxY = element2? element2.max : 1; + _maxZ = element3? element3.max : 1; + _minX = element1? element1.min : -1; + _minY = element2? element2.min : -1; + _minZ = element3? element3.min : -1; + + return self; +} + +- (JOYPoint3D)rawValue +{ + return (JOYPoint3D){_state1, _state2, _state3}; +} + +- (JOYPoint3D)normalizedValue +{ + double distance = sqrt(_state1 * _state1 + _state2 * _state2 + _state3 * _state3); + if (distance == 0) { + distance = 1; + } + return (JOYPoint3D){_state1 / distance, _state2 / distance, _state3 / distance}; +} + +- (JOYPoint3D)gUnitsValue +{ + double distance = _gApproximation ?: 1; + return (JOYPoint3D){_state1 / distance, _state2 / distance, _state3 / distance}; +} + +- (bool)updateState +{ + int32_t x = [_element1 value]; + int32_t y = [_element2 value]; + int32_t z = [_element3 value]; + + if (x == 0 && y == 0 && z == 0) return false; + + double old1 = _state1, old2 = _state2, old3 = _state3; + _state1 = (x - _minX) / (double)(_maxX - _minX) * 2 - 1; + _state2 = (y - _minY) / (double)(_maxY - _minY) * 2 - 1; + _state3 = (z - _minZ) / (double)(_maxZ - _minZ) * 2 - 1; + + double distance = sqrt(_state1 * _state1 + _state2 * _state2 + _state3 * _state3); + if (_gApproximation == 0) { + _gApproximation = distance; + } + else { + _gApproximation = _gApproximation * 0.9999 + distance * 0.0001; + } + + return old1 != _state1 || old2 != _state2 || old3 != _state3; +} + +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYAxis.h b/thirdparty/SameBoy-old/JoyKit/JOYAxis.h new file mode 100644 index 000000000..8d4b7abe3 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYAxis.h @@ -0,0 +1,36 @@ +#import +#import "JOYButton.h" + +typedef enum { + JOYAxisUsageNone, + JOYAxisUsageL1, + JOYAxisUsageL2, + JOYAxisUsageL3, + JOYAxisUsageR1, + JOYAxisUsageR2, + JOYAxisUsageR3, + + JOYAxisUsageSlider, + JOYAxisUsageDial, + JOYAxisUsageWheel, + + JOYAxisUsageRudder, + JOYAxisUsageThrottle, + JOYAxisUsageAccelerator, + JOYAxisUsageBrake, + + JOYAxisUsageNonGenericMax, + + JOYAxisUsageGeneric0 = 0x10000, +} JOYAxisUsage; + +@interface JOYAxis : NSObject +- (NSString *)usageString; ++ (NSString *)usageToString: (JOYAxisUsage) usage; +- (uint64_t)uniqueID; +- (double)value; +- (JOYButtonUsage)equivalentButtonUsage; +@property JOYAxisUsage usage; +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYAxis.m b/thirdparty/SameBoy-old/JoyKit/JOYAxis.m new file mode 100644 index 000000000..afe90d268 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYAxis.m @@ -0,0 +1,129 @@ +#import "JOYAxis.h" +#import "JOYElement.h" + +@implementation JOYAxis +{ + JOYElement *_element; + double _state; + double _min; +} + ++ (NSString *)usageToString: (JOYAxisUsage) usage +{ + if (usage < JOYAxisUsageNonGenericMax) { + return (NSString *[]) { + @"None", + @"Analog L1", + @"Analog L2", + @"Analog L3", + @"Analog R1", + @"Analog R2", + @"Analog R3", + @"Slider", + @"Dial", + @"Wheel", + @"Rudder", + @"Throttle", + @"Accelerator", + @"Brake", + }[usage]; + } + if (usage >= JOYAxisUsageGeneric0) { + return [NSString stringWithFormat:@"Generic Analog Control %d", usage - JOYAxisUsageGeneric0]; + } + + return [NSString stringWithFormat:@"Unknown Usage Axis %d", usage]; +} + +- (NSString *)usageString +{ + return [self.class usageToString:_usage]; +} + +- (uint64_t)uniqueID +{ + return _element.uniqueID; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p, %@ (%llu); State: %f%%>", self.className, self, self.usageString, self.uniqueID, _state * 100]; +} + +- (instancetype)initWithElement:(JOYElement *)element +{ + self = [super init]; + if (!self) return self; + + _element = element; + + + if (element.usagePage == kHIDPage_GenericDesktop) { + switch (element.usage) { + case kHIDUsage_GD_Slider: _usage = JOYAxisUsageSlider; break; + case kHIDUsage_GD_Dial: _usage = JOYAxisUsageDial; break; + case kHIDUsage_GD_Wheel: _usage = JOYAxisUsageWheel; break; + default: + _usage = JOYAxisUsageGeneric0 + element.usage - kHIDUsage_GD_X + 1; + break; + } + } + else if (element.usagePage == kHIDPage_Simulation) { + switch (element.usage) { + case kHIDUsage_Sim_Accelerator: _usage = JOYAxisUsageAccelerator; break; + case kHIDUsage_Sim_Brake: _usage = JOYAxisUsageBrake; break; + case kHIDUsage_Sim_Rudder: _usage = JOYAxisUsageRudder; break; + case kHIDUsage_Sim_Throttle: _usage = JOYAxisUsageThrottle; break; + } + } + _min = 1.0; + + return self; +} + +- (double) value +{ + return _state; +} + +- (bool)updateState +{ + double min = _element.min; + double max = _element.max; + if (min == max) return false; + double old = _state; + double unnormalized = ([_element value] - min) / (max - min); + if (unnormalized < _min) { + _min = unnormalized; + } + if (_min != 1) { + _state = (unnormalized - _min) / (1 - _min); + } + return old != _state; +} + +- (JOYButtonUsage)equivalentButtonUsage +{ + if (self.usage >= JOYAxisUsageGeneric0) { + return self.usage - JOYAxisUsageGeneric0 + JOYButtonUsageGeneric0; + } + switch (self.usage) { + case JOYAxisUsageL1: return JOYButtonUsageL1; + case JOYAxisUsageL2: return JOYButtonUsageL2; + case JOYAxisUsageL3: return JOYButtonUsageL3; + case JOYAxisUsageR1: return JOYButtonUsageR1; + case JOYAxisUsageR2: return JOYButtonUsageR2; + case JOYAxisUsageR3: return JOYButtonUsageR3; + case JOYAxisUsageSlider: return JOYButtonUsageSlider; + case JOYAxisUsageDial: return JOYButtonUsageDial; + case JOYAxisUsageWheel: return JOYButtonUsageWheel; + case JOYAxisUsageRudder: return JOYButtonUsageRudder; + case JOYAxisUsageThrottle: return JOYButtonUsageThrottle; + case JOYAxisUsageAccelerator: return JOYButtonUsageAccelerator; + case JOYAxisUsageBrake: return JOYButtonUsageBrake; + default: return JOYButtonUsageNone; + } +} + + +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYButton.h b/thirdparty/SameBoy-old/JoyKit/JOYButton.h new file mode 100644 index 000000000..08c3aced6 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYButton.h @@ -0,0 +1,58 @@ +#import + +typedef enum { + JOYButtonUsageNone, + JOYButtonUsageA, + JOYButtonUsageB, + JOYButtonUsageC, + JOYButtonUsageX, + JOYButtonUsageY, + JOYButtonUsageZ, + JOYButtonUsageStart, + JOYButtonUsageSelect, + JOYButtonUsageHome, + JOYButtonUsageMisc, + JOYButtonUsageLStick, + JOYButtonUsageRStick, + JOYButtonUsageL1, + JOYButtonUsageL2, + JOYButtonUsageL3, + JOYButtonUsageR1, + JOYButtonUsageR2, + JOYButtonUsageR3, + JOYButtonUsageDPadLeft, + JOYButtonUsageDPadRight, + JOYButtonUsageDPadUp, + JOYButtonUsageDPadDown, + + JOYButtonUsageSlider, + JOYButtonUsageDial, + JOYButtonUsageWheel, + + JOYButtonUsageRudder, + JOYButtonUsageThrottle, + JOYButtonUsageAccelerator, + JOYButtonUsageBrake, + + JOYButtonUsageNonGenericMax, + + JOYButtonUsageGeneric0 = 0x10000, +} JOYButtonUsage; + +typedef enum { + JOYButtonTypeNormal, + JOYButtonTypeAxisEmulated, + JOYButtonTypeAxes2DEmulated, + JOYButtonTypeHatEmulated, +} JOYButtonType; + +@interface JOYButton : NSObject +- (NSString *)usageString; ++ (NSString *)usageToString: (JOYButtonUsage) usage; +- (uint64_t)uniqueID; +- (bool) isPressed; +@property JOYButtonUsage usage; +@property (readonly) JOYButtonType type; +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYButton.m b/thirdparty/SameBoy-old/JoyKit/JOYButton.m new file mode 100644 index 000000000..568d3835e --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYButton.m @@ -0,0 +1,113 @@ +#import "JOYButton.h" +#import "JOYElement.h" +#import + +@implementation JOYButton +{ + JOYElement *_element; + bool _state; +} + ++ (NSString *)usageToString: (JOYButtonUsage) usage +{ + if (usage < JOYButtonUsageNonGenericMax) { + return (NSString *[]) { + @"None", + @"A", + @"B", + @"C", + @"X", + @"Y", + @"Z", + @"Start", + @"Select", + @"Home", + @"Misc", + @"Left Stick", + @"Right Stick", + @"L1", + @"L2", + @"L3", + @"R1", + @"R2", + @"R3", + @"D-Pad Left", + @"D-Pad Right", + @"D-Pad Up", + @"D-Pad Down", + }[usage]; + } + if (usage >= JOYButtonUsageGeneric0) { + return [NSString stringWithFormat:@"Generic Button %d", usage - JOYButtonUsageGeneric0]; + } + + return [NSString stringWithFormat:@"Unknown Usage Button %d", usage]; +} + +- (NSString *)usageString +{ + return [self.class usageToString:_usage]; +} + +- (uint64_t)uniqueID +{ + return _element.uniqueID; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p, %@ (%llu); State: %s>", self.className, self, self.usageString, self.uniqueID, _state? "Presssed" : "Released"]; +} + +- (instancetype)initWithElement:(JOYElement *)element +{ + self = [super init]; + if (!self) return self; + + _element = element; + + if (element.usagePage == kHIDPage_Button) { + uint16_t usage = element.usage; + _usage = JOYButtonUsageGeneric0 + usage; + } + else if (element.usagePage == kHIDPage_GenericDesktop) { + switch (element.usage) { + case kHIDUsage_GD_DPadUp: _usage = JOYButtonUsageDPadUp; break; + case kHIDUsage_GD_DPadDown: _usage = JOYButtonUsageDPadDown; break; + case kHIDUsage_GD_DPadRight: _usage = JOYButtonUsageDPadRight; break; + case kHIDUsage_GD_DPadLeft: _usage = JOYButtonUsageDPadLeft; break; + case kHIDUsage_GD_Start: _usage = JOYButtonUsageStart; break; + case kHIDUsage_GD_Select: _usage = JOYButtonUsageSelect; break; + case kHIDUsage_GD_SystemMainMenu: _usage = JOYButtonUsageHome; break; + } + } + else if (element.usagePage == kHIDPage_Consumer) { + switch (element.usage) { + case kHIDUsage_Csmr_ACHome: _usage = JOYButtonUsageHome; break; + case kHIDUsage_Csmr_ACBack: _usage = JOYButtonUsageSelect; break; + } + } + + return self; +} + +- (bool) isPressed +{ + return _state; +} + +- (bool)updateState +{ + bool state = [_element value]; + if (_state != state) { + _state = state; + return true; + } + return false; +} + +- (JOYButtonType)type +{ + return JOYButtonTypeNormal; +} +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYController.h b/thirdparty/SameBoy-old/JoyKit/JOYController.h new file mode 100644 index 000000000..a21175c20 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYController.h @@ -0,0 +1,44 @@ +#import +#import "JOYButton.h" +#import "JOYAxis.h" +#import "JOYAxes2D.h" +#import "JOYAxes3D.h" +#import "JOYHat.h" + +static NSString const *JOYAxes2DEmulateButtonsKey = @"JOYAxes2DEmulateButtons"; +static NSString const *JOYHatsEmulateButtonsKey = @"JOYHatsEmulateButtons"; + +@class JOYController; + +@protocol JOYListener + +@optional +-(void) controllerConnected:(JOYController *)controller; +-(void) controllerDisconnected:(JOYController *)controller; +-(void) controller:(JOYController *)controller buttonChangedState:(JOYButton *)button; +-(void) controller:(JOYController *)controller movedAxis:(JOYAxis *)axis; +-(void) controller:(JOYController *)controller movedAxes2D:(JOYAxes2D *)axes; +-(void) controller:(JOYController *)controller movedAxes3D:(JOYAxes3D *)axes; +-(void) controller:(JOYController *)controller movedHat:(JOYHat *)hat; + +@end + +@interface JOYController : NSObject ++ (void)startOnRunLoop:(NSRunLoop *)runloop withOptions: (NSDictionary *)options; ++ (NSArray *) allControllers; ++ (void) registerListener:(id)listener; ++ (void) unregisterListener:(id)listener; +- (NSString *)deviceName; +- (NSString *)uniqueID; +- (NSArray *) buttons; +- (NSArray *) axes; +- (NSArray *) axes2D; +- (NSArray *) axes3D; +- (NSArray *) hats; +- (void)setRumbleAmplitude:(double)amp; +- (void)setPlayerLEDs:(uint8_t)mask; +- (uint8_t)LEDMaskForPlayer:(unsigned)player; +@property (readonly, getter=isConnected) bool connected; +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYController.m b/thirdparty/SameBoy-old/JoyKit/JOYController.m new file mode 100644 index 000000000..b524df4be --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYController.m @@ -0,0 +1,1168 @@ +#import "JOYController.h" +#import "JOYMultiplayerController.h" +#import "JOYElement.h" +#import "JOYSubElement.h" +#import "JOYFullReportElement.h" +#import "JOYButton.h" +#import "JOYEmulatedButton.h" +#include + +#include +extern NSTextField *globalDebugField; + +#define PWM_RESOLUTION 16 + +static NSString const *JOYAxisGroups = @"JOYAxisGroups"; +static NSString const *JOYReportIDFilters = @"JOYReportIDFilters"; +static NSString const *JOYButtonUsageMapping = @"JOYButtonUsageMapping"; +static NSString const *JOYAxisUsageMapping = @"JOYAxisUsageMapping"; +static NSString const *JOYAxes2DUsageMapping = @"JOYAxes2DUsageMapping"; +static NSString const *JOYCustomReports = @"JOYCustomReports"; +static NSString const *JOYIsSwitch = @"JOYIsSwitch"; +static NSString const *JOYRumbleUsage = @"JOYRumbleUsage"; +static NSString const *JOYRumbleUsagePage = @"JOYRumbleUsagePage"; +static NSString const *JOYConnectedUsage = @"JOYConnectedUsage"; +static NSString const *JOYConnectedUsagePage = @"JOYConnectedUsagePage"; +static NSString const *JOYRumbleMin = @"JOYRumbleMin"; +static NSString const *JOYRumbleMax = @"JOYRumbleMax"; +static NSString const *JOYSwapZRz = @"JOYSwapZRz"; +static NSString const *JOYActivationReport = @"JOYActivationReport"; +static NSString const *JOYIgnoredReports = @"JOYIgnoredReports"; +static NSString const *JOYIsDualShock3 = @"JOYIsDualShock3"; +static NSString const *JOYIsSony = @"JOYIsSony"; +static NSString const *JOYEmulateAxisButtons = @"JOYEmulateAxisButtons"; + +static NSMutableDictionary *controllers; // Physical controllers +static NSMutableArray *exposedControllers; // Logical controllers + +static NSDictionary *hacksByName = nil; +static NSDictionary *hacksByManufacturer = nil; + +static NSMutableSet> *listeners = nil; + +static bool axes2DEmulateButtons = false; +static bool hatsEmulateButtons = false; + +@interface JOYController () ++ (void)controllerAdded:(IOHIDDeviceRef) device; ++ (void)controllerRemoved:(IOHIDDeviceRef) device; +- (void)elementChanged:(IOHIDElementRef) element; +- (void)gotReport:(NSData *)report; + +@end + +@interface JOYButton () +- (instancetype)initWithElement:(JOYElement *)element; +- (bool)updateState; +@end + +@interface JOYAxis () +- (instancetype)initWithElement:(JOYElement *)element; +- (bool)updateState; +@end + +@interface JOYHat () +- (instancetype)initWithElement:(JOYElement *)element; +- (bool)updateState; +@end + +@interface JOYAxes2D () +- (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2; +- (bool)updateState; +@end + +@interface JOYAxes3D () +{ + @public JOYElement *_element1, *_element2, *_element3; +} +- (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2 thirdElement:(JOYElement *)element2; +- (bool)updateState; +@end + +static NSDictionary *CreateHIDDeviceMatchDictionary(const UInt32 page, const UInt32 usage) +{ + return @{ + @kIOHIDDeviceUsagePageKey: @(page), + @kIOHIDDeviceUsageKey: @(usage), + }; +} + +static void HIDDeviceAdded(void *context, IOReturn result, void *sender, IOHIDDeviceRef device) +{ + [JOYController controllerAdded:device]; +} + +static void HIDDeviceRemoved(void *context, IOReturn result, void *sender, IOHIDDeviceRef device) +{ + [JOYController controllerRemoved:device]; +} + +static void HIDInput(void *context, IOReturn result, void *sender, IOHIDValueRef value) +{ + [(__bridge JOYController *)context elementChanged:IOHIDValueGetElement(value)]; +} + +static void HIDReport(void *context, IOReturn result, void *sender, IOHIDReportType type, + uint32_t reportID, uint8_t *report, CFIndex reportLength) +{ + if (reportLength) { + [(__bridge JOYController *)context gotReport:[[NSData alloc] initWithBytesNoCopy:report length:reportLength freeWhenDone:false]]; + } +} + +typedef struct __attribute__((packed)) { + uint8_t reportID; + uint8_t sequence; + uint8_t rumbleData[8]; + uint8_t command; + uint8_t commandData[26]; +} JOYSwitchPacket; + +typedef struct __attribute__((packed)) { + uint8_t reportID; + uint8_t padding; + uint8_t rumbleRightDuration; + uint8_t rumbleRightStrength; + uint8_t rumbleLeftDuration; + uint8_t rumbleLeftStrength; + uint32_t padding2; + uint8_t ledsEnabled; + struct { + uint8_t timeEnabled; + uint8_t dutyLength; + uint8_t enabled; + uint8_t dutyOff; + uint8_t dutyOn; + } __attribute__((packed)) led[5]; + uint8_t padding3[13]; +} JOYDualShock3Output; + +typedef struct __attribute__((packed)) { + uint8_t reportID; + uint8_t sequence; + union { + uint8_t tag; + uint8_t reportIDOnUSB; + }; + uint16_t flags; + uint8_t rumbleRightStrength; // Weak + uint8_t rumbleLeftStrength; // Strong + uint8_t reserved[4]; + uint8_t muteButtonLED; + uint8_t powerSaveControl; + uint8_t reserved2[28]; + uint8_t flags2; + uint8_t reserved3[2]; + uint8_t lightbarSetup; + uint8_t LEDBrightness; + uint8_t playerLEDs; + uint8_t lightbarRed; + uint8_t lightbarGreen; + uint8_t lightbarBlue; + uint8_t bluetoothSpecific[24]; + uint32_t crc32; +} JOYDualSenseOutput; + + +typedef union { + JOYSwitchPacket switchPacket; + JOYDualShock3Output ds3Output; + JOYDualSenseOutput dualsenseOutput; +} JOYVendorSpecificOutput; + +@implementation JOYController +{ + IOHIDDeviceRef _device; + NSMutableDictionary *_buttons; + NSMutableDictionary *_axes; + NSMutableDictionary *_axes2D; + NSMutableDictionary *_axes3D; + NSMutableDictionary *_hats; + NSMutableDictionary *_fullReportElements; + NSMutableDictionary *> *_multiElements; + JOYAxes3D *_lastAxes3D; + + // Button emulation + NSMutableDictionary *_axisEmulatedButtons; + NSMutableDictionary *> *_axes2DEmulatedButtons; + NSMutableDictionary *> *_hatEmulatedButtons; + + JOYElement *_rumbleElement; + JOYElement *_connectedElement; + NSMutableDictionary *_iokitToJOY; + NSString *_serialSuffix; + bool _isSwitch; // Does this controller use the Switch protocol? + bool _isDualShock3; // Does this controller use DS3 outputs? + bool _isSony; // Is this a DS4 or newer Sony controller? + bool _isDualSense; + bool _isUSBDualSense; + + JOYVendorSpecificOutput _lastVendorSpecificOutput; + volatile double _rumbleAmplitude; + bool _physicallyConnected; + bool _logicallyConnected; + + NSDictionary *_hacks; + NSMutableData *_lastReport; + + // Used when creating inputs + JOYElement *_previousAxisElement; + + uint8_t _playerLEDs; + double _sentRumbleAmp; + unsigned _rumbleCounter; + bool _deviceCantSendReports; + dispatch_queue_t _rumbleQueue; +} + +- (instancetype)initWithDevice:(IOHIDDeviceRef) device hacks:(NSDictionary *)hacks +{ + return [self initWithDevice:device reportIDFilter:nil serialSuffix:nil hacks:hacks]; +} + +-(void)createOutputForElement:(JOYElement *)element +{ + uint16_t rumbleUsagePage = (uint16_t)[_hacks[JOYRumbleUsagePage] unsignedIntValue]; + uint16_t rumbleUsage = (uint16_t)[_hacks[JOYRumbleUsage] unsignedIntValue]; + + if (!_rumbleElement && rumbleUsage && rumbleUsagePage && element.usage == rumbleUsage && element.usagePage == rumbleUsagePage) { + if (_hacks[JOYRumbleMin]) { + element.min = [_hacks[JOYRumbleMin] unsignedIntValue]; + } + if (_hacks[JOYRumbleMax]) { + element.max = [_hacks[JOYRumbleMax] unsignedIntValue]; + } + _rumbleElement = element; + } +} + +-(void)createInputForElement:(JOYElement *)element +{ + uint16_t connectedUsagePage = (uint16_t)[_hacks[JOYConnectedUsagePage] unsignedIntValue]; + uint16_t connectedUsage = (uint16_t)[_hacks[JOYConnectedUsage] unsignedIntValue]; + + if (!_connectedElement && connectedUsage && connectedUsagePage && element.usage == connectedUsage && element.usagePage == connectedUsagePage) { + _connectedElement = element; + _logicallyConnected = element.value != element.min; + return; + } + + NSDictionary *axisGroups = @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(1), + @(kHIDUsage_GD_Rx): @(2), + @(kHIDUsage_GD_Ry): @(2), + @(kHIDUsage_GD_Rz): @(1), + }; + + if (element.usagePage == kHIDPage_Sensor) { + JOYAxes3DUsage usage; + JOYElement *element1 = nil, *element2 = nil, *element3 = nil; + + switch (element.usage) { + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisX: + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisY: + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ: + usage = JOYAxes3DUsageAcceleration; + break; + case kHIDUsage_Snsr_Data_Motion_AngularPositionXAxis: + case kHIDUsage_Snsr_Data_Motion_AngularPositionYAxis: + case kHIDUsage_Snsr_Data_Motion_AngularPositionZAxis: + usage = JOYAxes3DUsageOrientation; + break; + case kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis: + usage = JOYAxes3DUsageGyroscope; + break; + default: + return; + } + + switch (element.usage) { + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisX: + case kHIDUsage_Snsr_Data_Motion_AngularPositionXAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis: + element1 = element; + if (_lastAxes3D && !_lastAxes3D->_element1 && _lastAxes3D.usage == usage) { + element2 = _lastAxes3D->_element2; + element3 = _lastAxes3D->_element3; + } + break; + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisY: + case kHIDUsage_Snsr_Data_Motion_AngularPositionYAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis: + element2 = element; + if (_lastAxes3D && !_lastAxes3D->_element2 && _lastAxes3D.usage == usage) { + element1 = _lastAxes3D->_element1; + element3 = _lastAxes3D->_element3; + } + break; + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ: + case kHIDUsage_Snsr_Data_Motion_AngularPositionZAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis: + element3 = element; + if (_lastAxes3D && !_lastAxes3D->_element3 && _lastAxes3D.usage == usage) { + element1 = _lastAxes3D->_element1; + element2 = _lastAxes3D->_element2; + } + break; + } + + _lastAxes3D = [[JOYAxes3D alloc] initWithFirstElement:element1 secondElement:element2 thirdElement:element3]; + _lastAxes3D.usage = usage; + if (element1) _axes3D[element1] = _lastAxes3D; + if (element2) _axes3D[element2] = _lastAxes3D; + if (element3) _axes3D[element3] = _lastAxes3D; + + return; + } + + axisGroups = _hacks[JOYAxisGroups] ?: axisGroups; + + if (element.usagePage == kHIDPage_Button || + (element.usagePage == kHIDPage_Consumer && (element.usage == kHIDUsage_Csmr_ACHome || + element.usage == kHIDUsage_Csmr_ACBack))) { + button: { + JOYButton *button = [[JOYButton alloc] initWithElement: element]; + [_buttons setObject:button forKey:element]; + NSNumber *replacementUsage = element.usagePage == kHIDPage_Button? _hacks[JOYButtonUsageMapping][@(button.usage)] : nil; + if (replacementUsage) { + button.usage = [replacementUsage unsignedIntValue]; + } + return; + } + } + else if (element.usagePage == kHIDPage_Simulation) { + switch (element.usage) { + case kHIDUsage_Sim_Accelerator: + case kHIDUsage_Sim_Brake: + case kHIDUsage_Sim_Rudder: + case kHIDUsage_Sim_Throttle: + goto single; + } + } + else if (element.usagePage == kHIDPage_GenericDesktop) { + switch (element.usage) { + case kHIDUsage_GD_X: + case kHIDUsage_GD_Y: + case kHIDUsage_GD_Z: + case kHIDUsage_GD_Rx: + case kHIDUsage_GD_Ry: + case kHIDUsage_GD_Rz: { + + JOYElement *other = _previousAxisElement; + _previousAxisElement = element; + if (!other) goto single; + if (other.usage >= element.usage) goto single; + if (other.reportID != element.reportID) goto single; + if (![axisGroups[@(other.usage)] isEqualTo: axisGroups[@(element.usage)]]) goto single; + if (other.parentID != element.parentID) goto single; + + JOYAxes2D *axes = nil; + if (other.usage == kHIDUsage_GD_Z && element.usage == kHIDUsage_GD_Rz && [_hacks[JOYSwapZRz] boolValue]) { + axes = [[JOYAxes2D alloc] initWithFirstElement:element secondElement:other]; + } + else { + axes = [[JOYAxes2D alloc] initWithFirstElement:other secondElement:element]; + } + NSNumber *replacementUsage = _hacks[JOYAxes2DUsageMapping][@(axes.usage)]; + if (replacementUsage) { + axes.usage = [replacementUsage unsignedIntValue]; + } + + [_axisEmulatedButtons removeObjectForKey:@(_axes[other].uniqueID)]; + [_axes removeObjectForKey:other]; + _previousAxisElement = nil; + _axes2D[other] = axes; + _axes2D[element] = axes; + + if (axes2DEmulateButtons) { + _axes2DEmulatedButtons[@(axes.uniqueID)] = @[ + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadLeft type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x100000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadRight type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x200000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadUp type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x300000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadDown type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x400000000L], + ]; + } + break; + } + case kHIDUsage_GD_Slider: + case kHIDUsage_GD_Dial: + case kHIDUsage_GD_Wheel: + { single: { + JOYAxis *axis = [[JOYAxis alloc] initWithElement: element]; + [_axes setObject:axis forKey:element]; + + NSNumber *replacementUsage = element.usagePage == kHIDPage_GenericDesktop? _hacks[JOYAxisUsageMapping][@(axis.usage)] : nil; + if (replacementUsage) { + axis.usage = [replacementUsage unsignedIntValue]; + } + + if ([_hacks[JOYEmulateAxisButtons] boolValue]) { + _axisEmulatedButtons[@(axis.uniqueID)] = + [[JOYEmulatedButton alloc] initWithUsage:axis.equivalentButtonUsage type:JOYButtonTypeAxisEmulated uniqueID:axis.uniqueID]; + } + + + break; + }} + case kHIDUsage_GD_DPadUp: + case kHIDUsage_GD_DPadDown: + case kHIDUsage_GD_DPadRight: + case kHIDUsage_GD_DPadLeft: + case kHIDUsage_GD_Start: + case kHIDUsage_GD_Select: + case kHIDUsage_GD_SystemMainMenu: + goto button; + + case kHIDUsage_GD_Hatswitch: { + JOYHat *hat = [[JOYHat alloc] initWithElement: element]; + [_hats setObject:hat forKey:element]; + if (hatsEmulateButtons) { + _hatEmulatedButtons[@(hat.uniqueID)] = @[ + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadLeft type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x100000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadRight type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x200000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadUp type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x300000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadDown type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x400000000L], + ]; + } + break; + } + } + } +} + +- (instancetype)initWithDevice:(IOHIDDeviceRef)device reportIDFilter:(NSArray *) filter serialSuffix:(NSString *)suffix hacks:(NSDictionary *)hacks +{ + self = [super init]; + if (!self) return self; + + _physicallyConnected = true; + _logicallyConnected = true; + _device = (IOHIDDeviceRef)CFRetain(device); + _serialSuffix = suffix; + _playerLEDs = -1; + + IOHIDDeviceRegisterInputValueCallback(device, HIDInput, (void *)self); + IOHIDDeviceScheduleWithRunLoop(device, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + + NSArray *array = CFBridgingRelease(IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone)); + _buttons = [NSMutableDictionary dictionary]; + _axes = [NSMutableDictionary dictionary]; + _axes2D = [NSMutableDictionary dictionary]; + _axes3D = [NSMutableDictionary dictionary]; + _hats = [NSMutableDictionary dictionary]; + _axisEmulatedButtons = [NSMutableDictionary dictionary]; + _axes2DEmulatedButtons = [NSMutableDictionary dictionary]; + _hatEmulatedButtons = [NSMutableDictionary dictionary]; + _iokitToJOY = [NSMutableDictionary dictionary]; + + + _hacks = hacks; + _isSwitch = [_hacks[JOYIsSwitch] boolValue]; + _isDualShock3 = [_hacks[JOYIsDualShock3] boolValue]; + _isSony = [_hacks[JOYIsSony] boolValue]; + + NSDictionary *customReports = hacks[JOYCustomReports]; + _lastReport = [NSMutableData dataWithLength:MAX( + MAX( + [(__bridge NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDMaxInputReportSizeKey)) unsignedIntValue], + [(__bridge NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDMaxOutputReportSizeKey)) unsignedIntValue] + ), + [(__bridge NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDMaxFeatureReportSizeKey)) unsignedIntValue] + )]; + IOHIDDeviceRegisterInputReportCallback(device, _lastReport.mutableBytes, _lastReport.length, HIDReport, (void *)self); + + if (hacks[JOYCustomReports]) { + _multiElements = [NSMutableDictionary dictionary]; + _fullReportElements = [NSMutableDictionary dictionary]; + + + for (NSNumber *_reportID in customReports) { + signed reportID = [_reportID intValue]; + bool isOutput = false; + if (reportID < 0) { + isOutput = true; + reportID = -reportID; + } + + JOYFullReportElement *element = [[JOYFullReportElement alloc] initWithDevice:device reportID:reportID]; + NSMutableArray *elements = [NSMutableArray array]; + for (NSDictionary *subElementDef in customReports[_reportID]) { + if (filter && subElementDef[@"reportID"] && ![filter containsObject:subElementDef[@"reportID"]]) continue; + JOYSubElement *subElement = [[JOYSubElement alloc] initWithRealElement:element + size:subElementDef[@"size"].unsignedLongValue + offset:subElementDef[@"offset"].unsignedLongValue + 8 // Compensate for the reportID + usagePage:subElementDef[@"usagePage"].unsignedLongValue + usage:subElementDef[@"usage"].unsignedLongValue + min:subElementDef[@"min"].unsignedIntValue + max:subElementDef[@"max"].unsignedIntValue]; + [elements addObject:subElement]; + if (isOutput) { + [self createOutputForElement:subElement]; + } + else { + [self createInputForElement:subElement]; + } + } + _multiElements[element] = elements; + if (!isOutput) { + _fullReportElements[@(reportID)] = element; + } + } + } + + id previous = nil; + NSSet *ignoredReports = nil; + if (hacks[JOYIgnoredReports]) { + ignoredReports = [NSSet setWithArray:hacks[JOYIgnoredReports]]; + } + + for (id _element in array) { + if (_element == previous) continue; // Some elements are reported twice for some reason + previous = _element; + JOYElement *element = [[JOYElement alloc] initWithElement:(__bridge IOHIDElementRef)_element]; + + bool isOutput = false; + if (filter && ![filter containsObject:@(element.reportID)]) continue; + + switch (IOHIDElementGetType((__bridge IOHIDElementRef)_element)) { + /* Handled */ + case kIOHIDElementTypeInput_Misc: + case kIOHIDElementTypeInput_Button: + case kIOHIDElementTypeInput_Axis: + break; + case kIOHIDElementTypeOutput: + isOutput = true; + break; + /* Ignored */ + default: + case kIOHIDElementTypeInput_ScanCodes: + case kIOHIDElementTypeInput_NULL: + case kIOHIDElementTypeFeature: + case kIOHIDElementTypeCollection: + continue; + } + if ((!isOutput && [ignoredReports containsObject:@(element.reportID)]) || + (isOutput && [ignoredReports containsObject:@(-element.reportID)])) continue; + + + if (IOHIDElementIsArray((__bridge IOHIDElementRef)_element)) continue; + + if (isOutput) { + [self createOutputForElement:element]; + } + else { + [self createInputForElement:element]; + } + + _iokitToJOY[@(IOHIDElementGetCookie((__bridge IOHIDElementRef)_element))] = element; + } + + [exposedControllers addObject:self]; + if (_logicallyConnected) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerConnected:)]) { + [listener controllerConnected:self]; + } + } + } + + if (_hacks[JOYActivationReport]) { + [self sendReport:hacks[JOYActivationReport]]; + } + + if (_isSwitch) { + [self sendReport:[NSData dataWithBytes:(uint8_t[]){0x80, 0x04} length:2]]; + [self sendReport:[NSData dataWithBytes:(uint8_t[]){0x80, 0x02} length:2]]; + + _lastVendorSpecificOutput.switchPacket.reportID = 0x1; // Rumble and LEDs + _lastVendorSpecificOutput.switchPacket.sequence++; + _lastVendorSpecificOutput.switchPacket.sequence &= 0xF; + _lastVendorSpecificOutput.switchPacket.command = 3; // Set input report mode + _lastVendorSpecificOutput.switchPacket.commandData[0] = 0x30; // Standard full mode + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.switchPacket length:sizeof(_lastVendorSpecificOutput.switchPacket)]]; + + _lastVendorSpecificOutput.switchPacket.sequence++; + _lastVendorSpecificOutput.switchPacket.sequence &= 0xF; + _lastVendorSpecificOutput.switchPacket.command = 0x40; // Enable/disableIMU + _lastVendorSpecificOutput.switchPacket.commandData[0] = 1; // Enabled + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.switchPacket length:sizeof(_lastVendorSpecificOutput.switchPacket)]]; + } + + if (_isDualShock3) { + _lastVendorSpecificOutput.ds3Output = (JOYDualShock3Output){ + .reportID = 1, + .led = { + {.timeEnabled = 0xFF, .dutyLength = 0x27, .enabled = 0x10, .dutyOff = 0, .dutyOn = 0x32}, + {.timeEnabled = 0xFF, .dutyLength = 0x27, .enabled = 0x10, .dutyOff = 0, .dutyOn = 0x32}, + {.timeEnabled = 0xFF, .dutyLength = 0x27, .enabled = 0x10, .dutyOff = 0, .dutyOn = 0x32}, + {.timeEnabled = 0xFF, .dutyLength = 0x27, .enabled = 0x10, .dutyOff = 0, .dutyOn = 0x32}, + {.timeEnabled = 0, .dutyLength = 0, .enabled = 0, .dutyOff = 0, .dutyOn = 0}, + } + }; + } + if (_isSony) { + _isDualSense = [(__bridge NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductIDKey)) unsignedIntValue] == 0xCE6; + } + + if (_isDualSense) { + _isUSBDualSense = [(__bridge NSString *)IOHIDDeviceGetProperty(_device, CFSTR(kIOHIDTransportKey)) isEqualToString:@"USB"]; + _lastVendorSpecificOutput.dualsenseOutput = (JOYDualSenseOutput){ + .reportID = 0x31, + .tag = 0x10, + .flags = 0x1403, // Rumble, lightbar and player LEDs + .flags2 = 2, + .lightbarSetup = 2, + .lightbarBlue = 255, + }; + if (_isUSBDualSense) { + _lastVendorSpecificOutput.dualsenseOutput.reportIDOnUSB = 1; + _lastVendorSpecificOutput.dualsenseOutput.lightbarBlue = 0; + _lastVendorSpecificOutput.dualsenseOutput.lightbarGreen = 96; + _lastVendorSpecificOutput.dualsenseOutput.lightbarRed = 255; + + } + // Send a report to switch the controller to a more capable mode + [self sendDualSenseOutput]; + _lastVendorSpecificOutput.dualsenseOutput.flags2 = 0; + _lastVendorSpecificOutput.dualsenseOutput.lightbarSetup = 0; + } + + _rumbleQueue = dispatch_queue_create([NSString stringWithFormat:@"Rumble Queue for %@", self.deviceName].UTF8String, + NULL); + + return self; +} + +- (NSString *)deviceName +{ + if (!_device) return nil; + return IOHIDDeviceGetProperty(_device, CFSTR(kIOHIDProductKey)); +} + +- (NSString *)uniqueID +{ + if (!_device) return nil; + NSString *serial = (__bridge NSString *)IOHIDDeviceGetProperty(_device, CFSTR(kIOHIDSerialNumberKey)); + if (!serial || [(__bridge NSString *)IOHIDDeviceGetProperty(_device, CFSTR(kIOHIDTransportKey)) isEqualToString:@"USB"]) { + serial = [NSString stringWithFormat:@"%04x%04x%08x", + [(__bridge NSNumber *)IOHIDDeviceGetProperty(_device, CFSTR(kIOHIDVendorIDKey)) unsignedIntValue], + [(__bridge NSNumber *)IOHIDDeviceGetProperty(_device, CFSTR(kIOHIDProductIDKey)) unsignedIntValue], + [(__bridge NSNumber *)IOHIDDeviceGetProperty(_device, CFSTR(kIOHIDLocationIDKey)) unsignedIntValue]]; + } + if (_serialSuffix) { + return [NSString stringWithFormat:@"%@-%@", serial, _serialSuffix]; + } + return serial; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p, %@, %@>", self.className, self, self.deviceName, self.uniqueID]; +} + +- (NSArray *)buttons +{ + NSMutableArray *ret = [[_buttons allValues] mutableCopy]; + [ret addObjectsFromArray:_axisEmulatedButtons.allValues]; + for (NSArray *array in _axes2DEmulatedButtons.allValues) { + [ret addObjectsFromArray:array]; + } + for (NSArray *array in _hatEmulatedButtons.allValues) { + [ret addObjectsFromArray:array]; + } + return ret; +} + +- (NSArray *)axes +{ + return [_axes allValues]; +} + +- (NSArray *)axes2D +{ + return [[NSSet setWithArray:[_axes2D allValues]] allObjects]; +} + +- (NSArray *)axes3D +{ + return [[NSSet setWithArray:[_axes3D allValues]] allObjects]; +} + +- (NSArray *)hats +{ + return [_hats allValues]; +} + +- (void)gotReport:(NSData *)report +{ + JOYFullReportElement *element = _fullReportElements[@(*(uint8_t *)report.bytes)]; + if (element) { + [element updateValue:report]; + + NSArray *subElements = _multiElements[element]; + if (subElements) { + for (JOYElement *subElement in subElements) { + [self _elementChanged:subElement]; + } + } + } + dispatch_async(_rumbleQueue, ^{ + [self updateRumble]; + }); +} + +- (void)elementChanged:(IOHIDElementRef)element +{ + JOYElement *_element = _iokitToJOY[@(IOHIDElementGetCookie(element))]; + if (_element) { + [self _elementChanged:_element]; + } + else { + //NSLog(@"Unhandled usage %x (Cookie: %x, Usage: %x)", IOHIDElementGetUsage(element), IOHIDElementGetCookie(element), IOHIDElementGetUsage(element)); + } +} + +- (void)_elementChanged:(JOYElement *)element +{ + if (element == _connectedElement) { + bool old = self.connected; + _logicallyConnected = _connectedElement.value != _connectedElement.min; + if (!old && self.connected) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerConnected:)]) { + [listener controllerConnected:self]; + } + } + } + else if (old && !self.connected) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerDisconnected:)]) { + [listener controllerDisconnected:self]; + } + } + } + } + + if (!self.connected) return; + { + JOYButton *button = _buttons[element]; + if (button) { + if ([button updateState]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { + [listener controller:self buttonChangedState:button]; + } + } + } + return; + } + } + + + { + JOYAxis *axis = _axes[element]; + if (axis) { + if ([axis updateState]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:movedAxis:)]) { + [listener controller:self movedAxis:axis]; + } + } + JOYEmulatedButton *button = _axisEmulatedButtons[@(axis.uniqueID)]; + if ([button updateStateFromAxis:axis]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { + [listener controller:self buttonChangedState:button]; + } + } + } + } + return; + } + } + + { + JOYAxes2D *axes = _axes2D[element]; + if (axes) { + if ([axes updateState]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:movedAxes2D:)]) { + [listener controller:self movedAxes2D:axes]; + } + } + NSArray *buttons = _axes2DEmulatedButtons[@(axes.uniqueID)]; + for (JOYEmulatedButton *button in buttons) { + if ([button updateStateFromAxes2D:axes]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { + [listener controller:self buttonChangedState:button]; + } + } + } + } + } + return; + } + } + + { + JOYAxes3D *axes = _axes3D[element]; + if (axes) { + if ([axes updateState]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:movedAxes3D:)]) { + [listener controller:self movedAxes3D:axes]; + } + } + } + return; + } + } + + { + JOYHat *hat = _hats[element]; + if (hat) { + if ([hat updateState]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:movedHat:)]) { + [listener controller:self movedHat:hat]; + } + } + + NSArray *buttons = _hatEmulatedButtons[@(hat.uniqueID)]; + for (JOYEmulatedButton *button in buttons) { + if ([button updateStateFromHat:hat]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { + [listener controller:self buttonChangedState:button]; + } + } + } + } + } + return; + } + } +} + +- (void)disconnected +{ + if (_logicallyConnected && [exposedControllers containsObject:self]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerDisconnected:)]) { + [listener controllerDisconnected:self]; + } + } + } + _physicallyConnected = false; + [exposedControllers removeObject:self]; + [self setRumbleAmplitude:0]; + dispatch_sync(_rumbleQueue, ^{ + [self updateRumble]; + }); + _device = nil; +} + +- (void)sendReport:(NSData *)report +{ + if (!report.length) return; + if (!_device) return; + if (_deviceCantSendReports) return; + /* Some Macs fail to send reports to some devices, specifically the DS3, returning the bogus(?) error code 1 after + freezing for 5 seconds. Stop sending reports if that's the case. */ + if (IOHIDDeviceSetReport(_device, kIOHIDReportTypeOutput, *(uint8_t *)report.bytes, report.bytes, report.length) == 1) { + _deviceCantSendReports = true; + NSLog(@"This Mac appears to be incapable of sending output reports to %@", self); + } +} + +- (void) sendDualSenseOutput +{ + if (_isUSBDualSense) { + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.dualsenseOutput.reportIDOnUSB length:_lastVendorSpecificOutput.dualsenseOutput.bluetoothSpecific - &_lastVendorSpecificOutput.dualsenseOutput.reportIDOnUSB]]; + return; + } + _lastVendorSpecificOutput.dualsenseOutput.sequence += 0x10; + static const uint32_t table[] = { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, + 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, + 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, + 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, + 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, + 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, + 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, + 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, + 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, + 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, + 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, + 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, + 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, + 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, + 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, + 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, + 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, + 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, + 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, + 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + const uint8_t *byte = (void *)&_lastVendorSpecificOutput.dualsenseOutput; + uint32_t size = sizeof(_lastVendorSpecificOutput.dualsenseOutput) - 4; + uint32_t ret = 0xFFFFFFFF; + ret = table[(ret ^ 0xA2) & 0xFF] ^ (ret >> 8); + + while (size--) { + ret = table[(ret ^ *byte++) & 0xFF] ^ (ret >> 8); + } + + _lastVendorSpecificOutput.dualsenseOutput.crc32 = ~ret; + + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.dualsenseOutput length:sizeof(_lastVendorSpecificOutput.dualsenseOutput)]]; +} + +- (uint8_t)LEDMaskForPlayer:(unsigned)player +{ + if (_isDualShock3) { + return 2 << player; + } + if (_isDualSense) { + switch (player) { + case 0: return 0x04; + case 1: return 0x0A; + case 2: return 0x15; + case 3: return 0x1B; + default: return 0; + } + } + return 1 << player; +} + +- (void)setPlayerLEDs:(uint8_t)mask +{ + if (mask == _playerLEDs) { + return; + } + _playerLEDs = mask; + if (_isSwitch) { + _lastVendorSpecificOutput.switchPacket.reportID = 0x1; // Rumble and LEDs + _lastVendorSpecificOutput.switchPacket.sequence++; + _lastVendorSpecificOutput.switchPacket.sequence &= 0xF; + _lastVendorSpecificOutput.switchPacket.command = 0x30; // LED + _lastVendorSpecificOutput.switchPacket.commandData[0] = mask & 0xF; + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.switchPacket length:sizeof(_lastVendorSpecificOutput.switchPacket)]]; + } + else if (_isDualShock3) { + _lastVendorSpecificOutput.ds3Output.reportID = 1; + _lastVendorSpecificOutput.ds3Output.ledsEnabled = (mask & 0x1F); + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.ds3Output length:sizeof(_lastVendorSpecificOutput.ds3Output)]]; + } + else if (_isDualSense) { + _lastVendorSpecificOutput.dualsenseOutput.playerLEDs = mask & 0x1F; + [self sendDualSenseOutput]; + } +} + +- (void)updateRumble +{ + if (!self.connected) { + return; + } + if (!_rumbleElement && !_isSwitch && !_isDualShock3 && !_isDualSense) { + return; + } + if (_rumbleElement.max == 1 && _rumbleElement.min == 0) { + double ampToSend = _rumbleCounter < round(_rumbleAmplitude * PWM_RESOLUTION); + if (ampToSend != _sentRumbleAmp) { + [_rumbleElement setValue:ampToSend]; + _sentRumbleAmp = ampToSend; + } + _rumbleCounter += round(_rumbleAmplitude * PWM_RESOLUTION); + if (_rumbleCounter >= PWM_RESOLUTION) { + _rumbleCounter -= PWM_RESOLUTION; + } + } + else { + if (_rumbleAmplitude == _sentRumbleAmp) { + return; + } + _sentRumbleAmp = _rumbleAmplitude; + if (_isSwitch) { + double frequency = 144; + double amp = _rumbleAmplitude; + + uint8_t highAmp = amp * 0x64; + uint8_t lowAmp = amp * 0x32 + 0x40; + if (frequency < 0) frequency = 0; + if (frequency > 1252) frequency = 1252; + uint8_t encodedFrequency = (uint8_t)round(log2(frequency / 10.0) * 32.0); + + uint16_t highFreq = (encodedFrequency - 0x60) * 4; + uint8_t lowFreq = encodedFrequency - 0x40; + + //if (frequency < 82 || frequency > 312) { + if (amp) { + highAmp = 0; + } + + if (frequency < 40 || frequency > 626) { + lowAmp = 0; + } + + _lastVendorSpecificOutput.switchPacket.rumbleData[0] = _lastVendorSpecificOutput.switchPacket.rumbleData[4] = highFreq & 0xFF; + _lastVendorSpecificOutput.switchPacket.rumbleData[1] = _lastVendorSpecificOutput.switchPacket.rumbleData[5] = (highAmp << 1) + ((highFreq >> 8) & 0x1); + _lastVendorSpecificOutput.switchPacket.rumbleData[2] = _lastVendorSpecificOutput.switchPacket.rumbleData[6] = lowFreq; + _lastVendorSpecificOutput.switchPacket.rumbleData[3] = _lastVendorSpecificOutput.switchPacket.rumbleData[7] = lowAmp; + + + _lastVendorSpecificOutput.switchPacket.reportID = 0x10; // Rumble only + _lastVendorSpecificOutput.switchPacket.sequence++; + _lastVendorSpecificOutput.switchPacket.sequence &= 0xF; + _lastVendorSpecificOutput.switchPacket.command = 0; // LED + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.switchPacket length:sizeof(_lastVendorSpecificOutput.switchPacket)]]; + } + else if (_isDualShock3) { + _lastVendorSpecificOutput.ds3Output.reportID = 1; + _lastVendorSpecificOutput.ds3Output.rumbleLeftDuration = _lastVendorSpecificOutput.ds3Output.rumbleRightDuration = _rumbleAmplitude? 0xFF : 0; + _lastVendorSpecificOutput.ds3Output.rumbleLeftStrength = _lastVendorSpecificOutput.ds3Output.rumbleRightStrength = round(_rumbleAmplitude * 0xFF); + [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.ds3Output length:sizeof(_lastVendorSpecificOutput.ds3Output)]]; + } + else if (_isDualSense) { + _lastVendorSpecificOutput.dualsenseOutput.rumbleLeftStrength = round(_rumbleAmplitude * _rumbleAmplitude * 0xFF); + _lastVendorSpecificOutput.dualsenseOutput.rumbleRightStrength = _rumbleAmplitude > 0.25 ? round(pow(_rumbleAmplitude - 0.25, 2) * 0xFF) : 0; + [self sendDualSenseOutput]; + } + else { + [_rumbleElement setValue:_rumbleAmplitude * (_rumbleElement.max - _rumbleElement.min) + _rumbleElement.min]; + } + } +} + +- (void)setRumbleAmplitude:(double)amp /* andFrequency: (double)frequency */ +{ + if (amp < 0) amp = 0; + if (amp > 1) amp = 1; + _rumbleAmplitude = amp; +} + +- (bool)isConnected +{ + return _logicallyConnected && _physicallyConnected; +} + ++ (void)controllerAdded:(IOHIDDeviceRef) device +{ + NSString *name = (__bridge NSString *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductKey)); + NSDictionary *hacks = hacksByName[name]; + if (!hacks) { + hacks = hacksByManufacturer[(__bridge NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDVendorIDKey))]; + } + NSArray *filters = hacks[JOYReportIDFilters]; + JOYController *controller = nil; + if (filters) { + controller = [[JOYMultiplayerController alloc] initWithDevice:device + reportIDFilters:filters + hacks:hacks]; + } + else { + controller = [[JOYController alloc] initWithDevice:device hacks:hacks]; + } + + [controllers setObject:controller forKey:[NSValue valueWithPointer:device]]; + + +} + ++ (void)controllerRemoved:(IOHIDDeviceRef) device +{ + [[controllers objectForKey:[NSValue valueWithPointer:device]] disconnected]; + [controllers removeObjectForKey:[NSValue valueWithPointer:device]]; +} + ++ (NSArray *)allControllers +{ + return exposedControllers; +} + ++ (void)load +{ +#include "ControllerConfiguration.inc" +} + ++(void)registerListener:(id)listener +{ + [listeners addObject:listener]; +} + ++(void)unregisterListener:(id)listener +{ + [listeners removeObject:listener]; +} + ++ (void)startOnRunLoop:(NSRunLoop *)runloop withOptions: (NSDictionary *)options +{ + axes2DEmulateButtons = [options[JOYAxes2DEmulateButtonsKey] boolValue]; + hatsEmulateButtons = [options[JOYHatsEmulateButtonsKey] boolValue]; + + controllers = [NSMutableDictionary dictionary]; + exposedControllers = [NSMutableArray array]; + NSArray *array = @[ + CreateHIDDeviceMatchDictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick), + CreateHIDDeviceMatchDictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad), + CreateHIDDeviceMatchDictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController), + @{@kIOHIDDeviceUsagePageKey: @(kHIDPage_Game)}, + ]; + + listeners = [NSMutableSet set]; + static IOHIDManagerRef manager = nil; + if (manager) { + CFRelease(manager); // Stop the previous session + } + manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); + + if (!manager) return; + if (IOHIDManagerOpen(manager, kIOHIDOptionsTypeNone)) { + CFRelease(manager); + return; + } + + IOHIDManagerSetDeviceMatchingMultiple(manager, (__bridge CFArrayRef)array); + IOHIDManagerRegisterDeviceMatchingCallback(manager, HIDDeviceAdded, NULL); + IOHIDManagerRegisterDeviceRemovalCallback(manager, HIDDeviceRemoved, NULL); + IOHIDManagerScheduleWithRunLoop(manager, [runloop getCFRunLoop], kCFRunLoopDefaultMode); +} + +- (void)dealloc +{ + if (_device) { + CFRelease(_device); + _device = NULL; + } +} +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYElement.h b/thirdparty/SameBoy-old/JoyKit/JOYElement.h new file mode 100644 index 000000000..0e917dd08 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYElement.h @@ -0,0 +1,20 @@ +#import +#include + +@interface JOYElement : NSObject +- (instancetype)initWithElement:(IOHIDElementRef)element; +- (int32_t)value; +- (NSData *)dataValue; +- (IOReturn)setValue:(uint32_t)value; +- (IOReturn)setDataValue:(NSData *)value; +@property (readonly) uint16_t usage; +@property (readonly) uint16_t usagePage; +@property (readonly) uint32_t uniqueID; +@property int32_t min; +@property int32_t max; +@property (readonly) int32_t reportID; +@property (readonly) int32_t parentID; + +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYElement.m b/thirdparty/SameBoy-old/JoyKit/JOYElement.m new file mode 100644 index 000000000..2432002a3 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYElement.m @@ -0,0 +1,133 @@ +#import "JOYElement.h" +#include +#include + +@implementation JOYElement +{ + id _element; + IOHIDDeviceRef _device; + int32_t _min, _max; +} + +- (int32_t)min +{ + return MIN(_min, _max); +} + +- (int32_t)max +{ + return MAX(_max, _min); +} + +-(void)setMin:(int32_t)min +{ + _min = min; +} + +- (void)setMax:(int32_t)max +{ + _max = max; +} + +/* Ugly hack because IOHIDDeviceCopyMatchingElements is slow */ ++ (NSArray *) cookiesToSkipForDevice:(IOHIDDeviceRef)device +{ + id _device = (__bridge id)device; + NSMutableArray *ret = objc_getAssociatedObject(_device, _cmd); + if (ret) return ret; + + ret = [NSMutableArray array]; + NSArray *nones = CFBridgingRelease(IOHIDDeviceCopyMatchingElements(device, + (__bridge CFDictionaryRef)@{@(kIOHIDElementTypeKey): @(kIOHIDElementTypeInput_NULL)}, + 0)); + for (id none in nones) { + [ret addObject:@(IOHIDElementGetCookie((__bridge IOHIDElementRef)none))]; + } + objc_setAssociatedObject(_device, _cmd, ret, OBJC_ASSOCIATION_RETAIN); + return ret; +} + +- (instancetype)initWithElement:(IOHIDElementRef)element +{ + if ((self = [super init])) { + _element = (__bridge id)element; + _usage = IOHIDElementGetUsage(element); + _usagePage = IOHIDElementGetUsagePage(element); + _uniqueID = (uint32_t)IOHIDElementGetCookie(element); + _min = (int32_t) IOHIDElementGetLogicalMin(element); + _max = (int32_t) IOHIDElementGetLogicalMax(element); + _reportID = IOHIDElementGetReportID(element); + IOHIDElementRef parent = IOHIDElementGetParent(element); + _parentID = parent? (uint32_t)IOHIDElementGetCookie(parent) : -1; + _device = IOHIDElementGetDevice(element); + + /* Catalina added a new input type in a way that breaks cookie consistency across macOS versions, + we shall adjust our cookies to to compensate */ + unsigned cookieShift = 0, parentCookieShift = 0; + + for (NSNumber *none in [JOYElement cookiesToSkipForDevice:_device]) { + if (none.unsignedIntValue < _uniqueID) { + cookieShift++; + } + if (none.unsignedIntValue < (int32_t)_parentID) { + parentCookieShift++; + } + } + + _uniqueID -= cookieShift; + _parentID -= parentCookieShift; + } + return self; +} + +- (int32_t)value +{ + IOHIDValueRef value = NULL; + IOHIDDeviceGetValue(_device, (__bridge IOHIDElementRef)_element, &value); + if (!value) return 0; + CFRelease(CFRetain(value)); // For some reason, this is required to prevent leaks. + return (int32_t)IOHIDValueGetIntegerValue(value); +} + +- (NSData *)dataValue +{ + IOHIDValueRef value = NULL; + IOHIDDeviceGetValue(_device, (__bridge IOHIDElementRef)_element, &value); + if (!value) return 0; + CFRelease(CFRetain(value)); // For some reason, this is required to prevent leaks. + return [NSData dataWithBytes:IOHIDValueGetBytePtr(value) length:IOHIDValueGetLength(value)]; +} + +- (IOReturn)setValue:(uint32_t)value +{ + IOHIDValueRef ivalue = IOHIDValueCreateWithIntegerValue(NULL, (__bridge IOHIDElementRef)_element, 0, value); + IOReturn ret = IOHIDDeviceSetValue(_device, (__bridge IOHIDElementRef)_element, ivalue); + CFRelease(ivalue); + return ret; +} + +- (IOReturn)setDataValue:(NSData *)value +{ + IOHIDValueRef ivalue = IOHIDValueCreateWithBytes(NULL, (__bridge IOHIDElementRef)_element, 0, value.bytes, value.length); + IOReturn ret = IOHIDDeviceSetValue(_device, (__bridge IOHIDElementRef)_element, ivalue); + CFRelease(ivalue); + return ret; +} + +/* For use as a dictionary key */ + +- (NSUInteger)hash +{ + return self.uniqueID; +} + +- (BOOL)isEqual:(id)object +{ + return self->_element == object; +} + +- (id)copyWithZone:(nullable NSZone *)zone; +{ + return self; +} +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.h b/thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.h new file mode 100644 index 000000000..05ccde829 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.h @@ -0,0 +1,11 @@ +#import "JOYButton.h" +#import "JOYAxis.h" +#import "JOYAxes2D.h" +#import "JOYHat.h" + +@interface JOYEmulatedButton : JOYButton +- (instancetype)initWithUsage:(JOYButtonUsage)usage type:(JOYButtonType)type uniqueID:(uint64_t)uniqueID; +- (bool)updateStateFromAxis:(JOYAxis *)axis; +- (bool)updateStateFromAxes2D:(JOYAxes2D *)axes; +- (bool)updateStateFromHat:(JOYHat *)hat; +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.m b/thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.m new file mode 100644 index 000000000..5e6d1b3cc --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYEmulatedButton.m @@ -0,0 +1,99 @@ +#import "JOYEmulatedButton.h" +#import + +@interface JOYButton () +{ + @public bool _state; +} +@end + +@implementation JOYEmulatedButton +{ + uint64_t _uniqueID; + JOYButtonType _type; +} + +- (instancetype)initWithUsage:(JOYButtonUsage)usage type:(JOYButtonType)type uniqueID:(uint64_t)uniqueID; +{ + self = [super init]; + self.usage = usage; + _uniqueID = uniqueID; + _type = type; + + return self; +} + +- (uint64_t)uniqueID +{ + return _uniqueID; +} + +- (bool)updateStateFromAxis:(JOYAxis *)axis +{ + bool old = _state; + _state = [axis value] > 0.8; + return _state != old; +} + +- (bool)updateStateFromAxes2D:(JOYAxes2D *)axes +{ + bool old = _state; + if (axes.distance < 0.5) { + _state = false; + } + else { + unsigned direction = ((unsigned)round(axes.angle / 360 * 8)) & 7; + switch (self.usage) { + case JOYButtonUsageDPadLeft: + _state = direction >= 3 && direction <= 5; + break; + case JOYButtonUsageDPadRight: + _state = direction <= 1 || direction == 7; + break; + case JOYButtonUsageDPadUp: + _state = direction >= 5; + break; + case JOYButtonUsageDPadDown: + _state = direction <= 3 && direction >= 1; + break; + default: + break; + } + } + return _state != old; +} + +- (bool)updateStateFromHat:(JOYHat *)hat +{ + bool old = _state; + if (!hat.pressed) { + _state = false; + } + else { + unsigned direction = ((unsigned)round(hat.angle / 360 * 8)) & 7; + switch (self.usage) { + case JOYButtonUsageDPadLeft: + _state = direction >= 3 && direction <= 5; + break; + case JOYButtonUsageDPadRight: + _state = direction <= 1 || direction == 7; + break; + case JOYButtonUsageDPadUp: + _state = direction >= 5; + break; + case JOYButtonUsageDPadDown: + _state = direction <= 3 && direction >= 1; + break; + default: + break; + } + } + return _state != old; +} + +- (JOYButtonType)type +{ + return _type; +} + +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.h b/thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.h new file mode 100644 index 000000000..808644e76 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.h @@ -0,0 +1,10 @@ +#import +#include +#include "JOYElement.h" + +@interface JOYFullReportElement : JOYElement +- (instancetype)initWithDevice:(IOHIDDeviceRef) device reportID:(unsigned)reportID; +- (void)updateValue:(NSData *)value; +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.m b/thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.m new file mode 100644 index 000000000..a19a53007 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYFullReportElement.m @@ -0,0 +1,74 @@ +#import "JOYFullReportElement.h" +#include + +@implementation JOYFullReportElement +{ + IOHIDDeviceRef _device; + NSData *_data; + unsigned _reportID; + size_t _capacity; +} + +- (uint32_t)uniqueID +{ + return _reportID ^ 0xFFFF; +} + +- (instancetype)initWithDevice:(IOHIDDeviceRef) device reportID:(unsigned)reportID +{ + if ((self = [super init])) { + _data = [[NSMutableData alloc] initWithLength:[(__bridge NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDMaxOutputReportSizeKey)) unsignedIntValue]]; + *(uint8_t *)(((NSMutableData *)_data).mutableBytes) = reportID; + _reportID = reportID; + _device = device; + } + return self; +} + +- (int32_t)value +{ + [self doesNotRecognizeSelector:_cmd]; + return 0; +} + +- (NSData *)dataValue +{ + return _data; +} + +- (IOReturn)setValue:(uint32_t)value +{ + [self doesNotRecognizeSelector:_cmd]; + return -1; +} + +- (IOReturn)setDataValue:(NSData *)value +{ + + [self updateValue:value]; + return IOHIDDeviceSetReport(_device, kIOHIDReportTypeOutput, _reportID, [_data bytes], [_data length]);; +} + +- (void)updateValue:(NSData *)value +{ + _data = [value copy]; +} + +/* For use as a dictionary key */ + +- (NSUInteger)hash +{ + return self.uniqueID; +} + +- (BOOL)isEqual:(JOYFullReportElement *)object +{ + if ([object isKindOfClass:self.class]) return false; + return self.uniqueID == object.uniqueID; +} + +- (id)copyWithZone:(nullable NSZone *)zone; +{ + return self; +} +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYHat.h b/thirdparty/SameBoy-old/JoyKit/JOYHat.h new file mode 100644 index 000000000..05a582927 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYHat.h @@ -0,0 +1,11 @@ +#import + +@interface JOYHat : NSObject +- (uint64_t)uniqueID; +- (double)angle; +- (unsigned)resolution; +@property (readonly, getter=isPressed) bool pressed; + +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYHat.m b/thirdparty/SameBoy-old/JoyKit/JOYHat.m new file mode 100644 index 000000000..b5a18f0b4 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYHat.m @@ -0,0 +1,62 @@ +#import "JOYHat.h" +#import "JOYElement.h" +#import + +@implementation JOYHat +{ + JOYElement *_element; + double _state; +} + +- (uint64_t)uniqueID +{ + return _element.uniqueID; +} + +- (NSString *)description +{ + if (self.isPressed) { + return [NSString stringWithFormat:@"<%@: %p (%llu); State: %f degrees>", self.className, self, self.uniqueID, self.angle]; + } + return [NSString stringWithFormat:@"<%@: %p (%llu); State: released>", self.className, self, self.uniqueID]; + +} + +- (instancetype)initWithElement:(JOYElement *)element +{ + self = [super init]; + if (!self) return self; + + _element = element; + _state = -1; + + return self; +} + +- (bool)isPressed +{ + return _state >= 0 && _state < 360; +} + +- (double)angle +{ + if (self.isPressed) return fmod((_state + 270), 360); + return -1; +} + +- (unsigned)resolution +{ + return _element.max - _element.min + 1; +} + +- (bool)updateState +{ + unsigned state = ([_element value] - _element.min) * 360.0 / self.resolution; + if (_state != state) { + _state = state; + return true; + } + return false; +} + +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.h b/thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.h new file mode 100644 index 000000000..44d742191 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.h @@ -0,0 +1,8 @@ +#import "JOYController.h" +#include + +@interface JOYMultiplayerController : JOYController +- (instancetype)initWithDevice:(IOHIDDeviceRef) device reportIDFilters:(NSArray *>*) reportIDFilters hacks:hacks; +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.m b/thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.m new file mode 100644 index 000000000..a31ae9212 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYMultiplayerController.m @@ -0,0 +1,50 @@ +#import "JOYMultiplayerController.h" + +@interface JOYController () +- (instancetype)initWithDevice:(IOHIDDeviceRef)device reportIDFilter:(NSArray *) filter serialSuffix:(NSString *)suffix hacks:(NSDictionary *)hacks; +- (void)elementChanged:(IOHIDElementRef) element toValue:(IOHIDValueRef) value; +- (void)disconnected; +- (void)sendReport:(NSData *)report; +@end + +@implementation JOYMultiplayerController +{ + NSMutableArray *_children; +} + +- (instancetype)initWithDevice:(IOHIDDeviceRef) device reportIDFilters:(NSArray *>*) reportIDFilters hacks:(NSDictionary *)hacks; +{ + self = [super init]; + if (!self) return self; + + _children = [NSMutableArray array]; + + unsigned index = 1; + for (NSArray *filter in reportIDFilters) { + JOYController *controller = [[JOYController alloc] initWithDevice:device reportIDFilter:filter serialSuffix:[NSString stringWithFormat:@"%d", index] hacks:hacks]; + [_children addObject:controller]; + index++; + } + return self; +} + +- (void)elementChanged:(IOHIDElementRef) element toValue:(IOHIDValueRef) value +{ + for (JOYController *child in _children) { + [child elementChanged:element toValue:value]; + } +} + +- (void)disconnected +{ + for (JOYController *child in _children) { + [child disconnected]; + } +} + +- (void)sendReport:(NSData *)report +{ + [[_children firstObject] sendReport:report]; +} + +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JOYSubElement.h b/thirdparty/SameBoy-old/JoyKit/JOYSubElement.h new file mode 100644 index 000000000..a13b5c768 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYSubElement.h @@ -0,0 +1,14 @@ +#import "JOYElement.h" + +@interface JOYSubElement : JOYElement +- (instancetype)initWithRealElement:(JOYElement *)element + size:(size_t) size // in bits + offset:(size_t) offset // in bits + usagePage:(uint16_t)usagePage + usage:(uint16_t)usage + min:(int32_t)min + max:(int32_t)max; + +@end + + diff --git a/thirdparty/SameBoy-old/JoyKit/JOYSubElement.m b/thirdparty/SameBoy-old/JoyKit/JOYSubElement.m new file mode 100644 index 000000000..186caf9ee --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JOYSubElement.m @@ -0,0 +1,106 @@ +#import "JOYSubElement.h" + +@interface JOYElement () +{ + @public uint16_t _usage; + @public uint16_t _usagePage; + @public uint32_t _uniqueID; + @public int32_t _min; + @public int32_t _max; + @public int32_t _reportID; + @public int32_t _parentID; +} +@end + +@implementation JOYSubElement +{ + JOYElement *_parent; + size_t _size; // in bits + size_t _offset; // in bits +} + +- (instancetype)initWithRealElement:(JOYElement *)element + size:(size_t) size // in bits + offset:(size_t) offset // in bits + usagePage:(uint16_t)usagePage + usage:(uint16_t)usage + min:(int32_t)min + max:(int32_t)max +{ + if ((self = [super init])) { + _parent = element; + _size = size; + _offset = offset; + _usage = usage; + _usagePage = usagePage; + _uniqueID = (uint32_t)((_parent.uniqueID << 16) | offset); + _min = min; + _max = max; + _reportID = _parent.reportID; + _parentID = _parent.parentID; + } + return self; +} + +- (int32_t)value +{ + NSData *parentValue = [_parent dataValue]; + if (!parentValue) return 0; + if (_size > 32) return 0; + if (_size + (_offset % 8) > 32) return 0; + size_t parentLength = parentValue.length; + if (_size > parentLength * 8) return 0; + if (_size + _offset >= parentLength * 8) return 0; + const uint8_t *bytes = parentValue.bytes; + + uint8_t temp[4] = {0,}; + memcpy(temp, bytes + _offset / 8, (_offset + _size - 1) / 8 - _offset / 8 + 1); + uint32_t ret = (*(uint32_t *)temp) >> (_offset % 8); + ret &= (1 << _size) - 1; + // + if (_min < 0 || _max < 0) { // Uses unsigned values + if (ret & (1 << (_size - 1)) ) { // Is negative + ret |= ~((1 << _size) - 1); // Fill with 1s + } + } + + if (_max < _min) { + return _max + _min - ret; + } + + return ret; +} + +- (IOReturn)setValue: (uint32_t) value +{ + NSMutableData *dataValue = [[_parent dataValue] mutableCopy]; + if (!dataValue) return -1; + if (_size > 32) return -1; + if (_size + (_offset % 8) > 32) return -1; + size_t parentLength = dataValue.length; + if (_size > parentLength * 8) return -1; + if (_size + _offset >= parentLength * 8) return -1; + uint8_t *bytes = dataValue.mutableBytes; + + uint8_t temp[4] = {0,}; + memcpy(temp, bytes + _offset / 8, (_offset + _size - 1) / 8 - _offset / 8 + 1); + (*(uint32_t *)temp) &= ~((1 << (_size - 1)) << (_offset % 8)); + (*(uint32_t *)temp) |= (value) << (_offset % 8); + memcpy(bytes + _offset / 8, temp, (_offset + _size - 1) / 8 - _offset / 8 + 1); + return [_parent setDataValue:dataValue]; +} + +- (NSData *)dataValue +{ + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +- (IOReturn)setDataValue:(NSData *)data +{ + [self doesNotRecognizeSelector:_cmd]; + return -1; +} + + +@end diff --git a/thirdparty/SameBoy-old/JoyKit/JoyKit.h b/thirdparty/SameBoy-old/JoyKit/JoyKit.h new file mode 100644 index 000000000..d56b50515 --- /dev/null +++ b/thirdparty/SameBoy-old/JoyKit/JoyKit.h @@ -0,0 +1,6 @@ +#ifndef JoyKit_h +#define JoyKit_h + +#include "JOYController.h" + +#endif diff --git a/thirdparty/SameBoy-old/LICENSE b/thirdparty/SameBoy-old/LICENSE new file mode 100644 index 000000000..94f34689c --- /dev/null +++ b/thirdparty/SameBoy-old/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2015-2022 Lior Halphon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/thirdparty/SameBoy-old/Makefile b/thirdparty/SameBoy-old/Makefile new file mode 100644 index 000000000..334e21d14 --- /dev/null +++ b/thirdparty/SameBoy-old/Makefile @@ -0,0 +1,540 @@ +# Make hacks +.INTERMEDIATE: + +# Set target, configuration, version and destination folders + +PLATFORM := $(shell uname -s) +ifneq ($(findstring MINGW,$(PLATFORM)),) +PLATFORM := windows32 +USE_WINDRES := true +endif + +ifneq ($(findstring MSYS,$(PLATFORM)),) +PLATFORM := windows32 +endif + +ifeq ($(PLATFORM),windows32) +_ := $(shell chcp 65001) +EXESUFFIX:=.exe +NATIVE_CC = clang -IWindows -Wno-deprecated-declarations --target=i386-pc-windows +SDL_AUDIO_DRIVERS ?= xaudio2 xaudio2_7 sdl +else +EXESUFFIX:= +NATIVE_CC := cc +SDL_AUDIO_DRIVERS ?= sdl +endif + +PB12_COMPRESS := build/pb12$(EXESUFFIX) + +ifeq ($(PLATFORM),Darwin) +DEFAULT := cocoa +ENABLE_OPENAL ?= 1 +else +DEFAULT := sdl +endif + +ifneq ($(shell which xdg-open)$(FREEDESKTOP),) +# Running on an FreeDesktop environment, configure for (optional) installation +DESTDIR ?= +PREFIX ?= /usr/local +DATA_DIR ?= $(PREFIX)/share/sameboy/ +FREEDESKTOP ?= true +endif + +default: $(DEFAULT) + +ifeq ($(MAKECMDGOALS),) +MAKECMDGOALS := $(DEFAULT) +endif + +include version.mk +export VERSION +CONF ?= debug + +BIN := build/bin +OBJ := build/obj +BOOTROMS_DIR ?= $(BIN)/BootROMs + +ifdef DATA_DIR +CFLAGS += -DDATA_DIR="\"$(DATA_DIR)\"" +endif + +# Set tools + +# Use clang if it's available. +ifeq ($(origin CC),default) +ifneq (, $(shell which clang)) +CC := clang +endif +endif + +# Find libraries with pkg-config if available. +ifneq (, $(shell which pkg-config)) +# But not on macOS, it's annoying +ifneq ($(PLATFORM),Darwin) +PKG_CONFIG := pkg-config +endif +endif + +ifeq ($(PLATFORM),windows32) +# To force use of the Unix version instead of the Windows version +MKDIR := $(shell which mkdir) +else +MKDIR := mkdir +endif + +ifeq ($(CONF),native_release) +override CONF := release +LDFLAGS += -march=native -mtune=native +CFLAGS += -march=native -mtune=native +endif + +ifeq ($(CONF),fat_release) +override CONF := release +FAT_FLAGS += -arch x86_64 -arch arm64 +endif + + + +# Set compilation and linkage flags based on target, platform and configuration + +OPEN_DIALOG = OpenDialog/gtk.c +NULL := /dev/null + +ifeq ($(PLATFORM),windows32) +OPEN_DIALOG = OpenDialog/windows.c +NULL := NUL +endif + +ifeq ($(PLATFORM),Darwin) +OPEN_DIALOG = OpenDialog/cocoa.m +endif + +# These must come before the -Wno- flags +WARNINGS += -Werror -Wall -Wno-unknown-warning -Wno-unknown-warning-option -Wno-missing-braces +WARNINGS += -Wno-nonnull -Wno-unused-result -Wno-strict-aliasing -Wno-multichar -Wno-int-in-bool-context -Wno-format-truncation + +# Only add this flag if the compiler supports it +ifeq ($(shell $(CC) -x c -c $(NULL) -o $(NULL) -Werror -Wpartial-availability 2> $(NULL); echo $$?),0) +WARNINGS += -Wpartial-availability +endif + +# GCC's implementation of this warning has false positives, so we skip it +ifneq ($(shell $(CC) --version 2>&1 | grep "gcc"), ) +WARNINGS += -Wno-maybe-uninitialized +endif + +CFLAGS += $(WARNINGS) + +CFLAGS += -std=gnu11 -D_GNU_SOURCE -DGB_VERSION='"$(VERSION)"' -I. -D_USE_MATH_DEFINES +ifneq (,$(UPDATE_SUPPORT)) +CFLAGS += -DUPDATE_SUPPORT +endif + +ifeq (,$(PKG_CONFIG)) +SDL_CFLAGS := $(shell sdl2-config --cflags) +SDL_LDFLAGS := $(shell sdl2-config --libs) -lpthread + +# We cannot detect the presence of OpenAL dev headers, +# so we must do this manually +ifeq ($(ENABLE_OPENAL),1) +SDL_CFLAGS += -DENABLE_OPENAL +ifeq ($(PLATFORM),Darwin) +SDL_LDFLAGS += -framework OpenAL +else +SDL_LDFLAGS += -lopenal +endif +SDL_AUDIO_DRIVERS += openal +endif +else +SDL_CFLAGS := $(shell $(PKG_CONFIG) --cflags sdl2) +SDL_LDFLAGS := $(shell $(PKG_CONFIG) --libs sdl2) -lpthread + +# Allow OpenAL to be disabled even if the development libraries are available +ifneq ($(ENABLE_OPENAL),0) +ifeq ($(shell $(PKG_CONFIG) --exists openal && echo 0),0) +SDL_CFLAGS += $(shell $(PKG_CONFIG) --cflags openal) -DENABLE_OPENAL +SDL_LDFLAGS += $(shell $(PKG_CONFIG) --libs openal) +SDL_AUDIO_DRIVERS += openal +endif +endif +endif + +ifeq (,$(PKG_CONFIG)) +GL_LDFLAGS := -lGL +else +GL_CFLAGS := $(shell $(PKG_CONFIG) --cflags gl) +GL_LDFLAGS := $(shell $(PKG_CONFIG) --libs gl || echo -lGL) +endif + +ifeq ($(PLATFORM),windows32) +CFLAGS += -IWindows -Drandom=rand --target=i386-pc-windows +LDFLAGS += -lmsvcrt -lcomdlg32 -luser32 -lshell32 -lole32 -lSDL2main -Wl,/MANIFESTFILE:NUL --target=i386-pc-windows +SDL_LDFLAGS := -lSDL2 +GL_LDFLAGS := -lopengl32 +else +LDFLAGS += -lc -lm -ldl +endif + +ifeq ($(PLATFORM),Darwin) +SYSROOT := $(shell xcodebuild -sdk macosx -version Path 2> $(NULL)) +ifeq ($(SYSROOT),) +SYSROOT := /Library/Developer/CommandLineTools/SDKs/$(shell ls /Library/Developer/CommandLineTools/SDKs/ | grep 10 | tail -n 1) +endif +ifeq ($(SYSROOT),/Library/Developer/CommandLineTools/SDKs/) +$(error Could not find a macOS SDK) +endif + +CFLAGS += -F/Library/Frameworks -mmacosx-version-min=10.9 -isysroot $(SYSROOT) +OCFLAGS += -x objective-c -fobjc-arc -Wno-deprecated-declarations -isysroot $(SYSROOT) +LDFLAGS += -framework AppKit -framework PreferencePanes -framework Carbon -framework QuartzCore -framework Security -framework WebKit -weak_framework Metal -weak_framework MetalKit -mmacosx-version-min=10.9 -isysroot $(SYSROOT) +GL_LDFLAGS := -framework OpenGL +endif +CFLAGS += -Wno-deprecated-declarations +ifeq ($(PLATFORM),windows32) +CFLAGS += -Wno-deprecated-declarations # Seems like Microsoft deprecated every single LIBC function +LDFLAGS += -Wl,/NODEFAULTLIB:libcmt.lib +endif + +ifeq ($(CONF),debug) +CFLAGS += -g +else ifeq ($(CONF), release) +CFLAGS += -O3 -DNDEBUG +STRIP := strip +CODESIGN := true +ifeq ($(PLATFORM),Darwin) +LDFLAGS += -Wl,-exported_symbols_list,$(NULL) +STRIP := strip -x +CODESIGN := codesign -fs - +endif +ifeq ($(PLATFORM),windows32) +LDFLAGS += -fuse-ld=lld +endif +LDFLAGS += -flto +CFLAGS += -flto +LDFLAGS += -Wno-lto-type-mismatch # For GCC's LTO + +else +$(error Invalid value for CONF: $(CONF). Use "debug", "release" or "native_release") +endif + +# Define our targets + +ifeq ($(PLATFORM),windows32) +SDL_TARGET := $(BIN)/SDL/sameboy.exe $(BIN)/SDL/sameboy_debugger.exe $(BIN)/SDL/SDL2.dll +TESTER_TARGET := $(BIN)/tester/sameboy_tester.exe +else +SDL_TARGET := $(BIN)/SDL/sameboy +TESTER_TARGET := $(BIN)/tester/sameboy_tester +endif + +cocoa: $(BIN)/SameBoy.app +quicklook: $(BIN)/SameBoy.qlgenerator +sdl: $(SDL_TARGET) $(BIN)/SDL/dmg_boot.bin $(BIN)/SDL/mgb_boot.bin $(BIN)/SDL/cgb0_boot.bin $(BIN)/SDL/cgb_boot.bin $(BIN)/SDL/agb_boot.bin $(BIN)/SDL/sgb_boot.bin $(BIN)/SDL/sgb2_boot.bin $(BIN)/SDL/LICENSE $(BIN)/SDL/registers.sym $(BIN)/SDL/background.bmp $(BIN)/SDL/Shaders $(BIN)/SDL/Palettes +bootroms: $(BIN)/BootROMs/agb_boot.bin $(BIN)/BootROMs/cgb_boot.bin $(BIN)/BootROMs/cgb0_boot.bin $(BIN)/BootROMs/dmg_boot.bin $(BIN)/BootROMs/mgb_boot.bin $(BIN)/BootROMs/sgb_boot.bin $(BIN)/BootROMs/sgb2_boot.bin +tester: $(TESTER_TARGET) $(BIN)/tester/dmg_boot.bin $(BIN)/tester/cgb_boot.bin $(BIN)/tester/agb_boot.bin $(BIN)/tester/sgb_boot.bin $(BIN)/tester/sgb2_boot.bin +all: cocoa sdl tester libretro + +# Get a list of our source files and their respective object file targets + +CORE_SOURCES := $(shell ls Core/*.c) +SDL_SOURCES := $(shell ls SDL/*.c) $(OPEN_DIALOG) $(patsubst %,SDL/audio/%.c,$(SDL_AUDIO_DRIVERS)) +TESTER_SOURCES := $(shell ls Tester/*.c) + +ifeq ($(PLATFORM),Darwin) +COCOA_SOURCES := $(shell ls Cocoa/*.m) $(shell ls HexFiend/*.m) $(shell ls JoyKit/*.m) +QUICKLOOK_SOURCES := $(shell ls QuickLook/*.m) $(shell ls QuickLook/*.c) +endif + +ifeq ($(PLATFORM),windows32) +CORE_SOURCES += $(shell ls Windows/*.c) +endif + +CORE_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(CORE_SOURCES)) +COCOA_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(COCOA_SOURCES)) +QUICKLOOK_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(QUICKLOOK_SOURCES)) +SDL_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(SDL_SOURCES)) +TESTER_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(TESTER_SOURCES)) + +# Automatic dependency generation + +ifneq ($(filter-out clean bootroms libretro %.bin, $(MAKECMDGOALS)),) +-include $(CORE_OBJECTS:.o=.dep) +ifneq ($(filter $(MAKECMDGOALS),sdl),) +-include $(SDL_OBJECTS:.o=.dep) +endif +ifneq ($(filter $(MAKECMDGOALS),tester),) +-include $(TESTER_OBJECTS:.o=.dep) +endif +ifneq ($(filter $(MAKECMDGOALS),cocoa),) +-include $(COCOA_OBJECTS:.o=.dep) +endif +endif + +$(OBJ)/SDL/%.dep: SDL/% + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -MT $(OBJ)/$^.o -M $^ -c -o $@ + +$(OBJ)/OpenDialog/%.dep: OpenDialog/% + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -MT $(OBJ)/$^.o -M $^ -c -o $@ + +$(OBJ)/%.dep: % + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) -MT $(OBJ)/$^.o -M $^ -c -o $@ + +# Compilation rules + +$(OBJ)/Core/%.c.o: Core/%.c + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(FAT_FLAGS) -DGB_INTERNAL -c $< -o $@ + +$(OBJ)/SDL/%.c.o: SDL/%.c + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@ + +$(OBJ)/OpenDialog/%.c.o: OpenDialog/%.c + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@ + + +$(OBJ)/%.c.o: %.c + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(FAT_FLAGS) -c $< -o $@ + +# HexFiend requires more flags +$(OBJ)/HexFiend/%.m.o: HexFiend/%.m + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@ -fno-objc-arc -include HexFiend/HexFiend_2_Framework_Prefix.pch + +$(OBJ)/%.m.o: %.m + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@ + +# Cocoa Port + +$(BIN)/SameBoy.app: $(BIN)/SameBoy.app/Contents/MacOS/SameBoy \ + $(shell ls Cocoa/*.icns Cocoa/*.png) \ + Cocoa/License.html \ + Cocoa/Info.plist \ + Misc/registers.sym \ + $(BIN)/SameBoy.app/Contents/Resources/dmg_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/mgb_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/cgb0_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/cgb_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/agb_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/sgb_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/sgb2_boot.bin \ + $(patsubst %.xib,%.nib,$(addprefix $(BIN)/SameBoy.app/Contents/Resources/Base.lproj/,$(shell cd Cocoa;ls *.xib))) \ + $(BIN)/SameBoy.qlgenerator \ + Shaders + $(MKDIR) -p $(BIN)/SameBoy.app/Contents/Resources + cp Cocoa/*.icns Cocoa/*.png Misc/registers.sym $(BIN)/SameBoy.app/Contents/Resources/ + sed s/@VERSION/$(VERSION)/ < Cocoa/Info.plist > $(BIN)/SameBoy.app/Contents/Info.plist + cp Cocoa/License.html $(BIN)/SameBoy.app/Contents/Resources/Credits.html + $(MKDIR) -p $(BIN)/SameBoy.app/Contents/Resources/Shaders + cp Shaders/*.fsh Shaders/*.metal $(BIN)/SameBoy.app/Contents/Resources/Shaders + $(MKDIR) -p $(BIN)/SameBoy.app/Contents/Library/QuickLook/ + cp -rf $(BIN)/SameBoy.qlgenerator $(BIN)/SameBoy.app/Contents/Library/QuickLook/ +ifeq ($(CONF), release) + $(CODESIGN) $@ +endif + +$(BIN)/SameBoy.app/Contents/MacOS/SameBoy: $(CORE_OBJECTS) $(COCOA_OBJECTS) + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) -framework OpenGL -framework AudioUnit -framework AVFoundation -framework CoreVideo -framework CoreMedia -framework IOKit +ifeq ($(CONF), release) + $(STRIP) $@ +endif + +$(BIN)/SameBoy.app/Contents/Resources/Base.lproj/%.nib: Cocoa/%.xib + ibtool --compile $@ $^ 2>&1 | cat - + +# Quick Look generator + +$(BIN)/SameBoy.qlgenerator: $(BIN)/SameBoy.qlgenerator/Contents/MacOS/SameBoyQL \ + $(shell ls QuickLook/*.png) \ + QuickLook/Info.plist \ + $(BIN)/SameBoy.qlgenerator/Contents/Resources/cgb_boot_fast.bin + $(MKDIR) -p $(BIN)/SameBoy.qlgenerator/Contents/Resources + cp QuickLook/*.png $(BIN)/SameBoy.qlgenerator/Contents/Resources/ + sed s/@VERSION/$(VERSION)/ < QuickLook/Info.plist > $(BIN)/SameBoy.qlgenerator/Contents/Info.plist +ifeq ($(CONF), release) + $(CODESIGN) $@ +endif + +# Currently, SameBoy.app includes two "copies" of each Core .o file once in the app itself and +# once in the QL Generator. It should probably become a dylib instead. +$(BIN)/SameBoy.qlgenerator/Contents/MacOS/SameBoyQL: $(CORE_OBJECTS) $(QUICKLOOK_OBJECTS) + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) -Wl,-exported_symbols_list,QuickLook/exports.sym -bundle -framework Cocoa -framework Quicklook +ifeq ($(CONF), release) + $(STRIP) $@ +endif + +# cgb_boot_fast.bin is not a standard boot ROM, we don't expect it to exist in the user-provided +# boot ROM directory. +$(BIN)/SameBoy.qlgenerator/Contents/Resources/cgb_boot_fast.bin: $(BIN)/BootROMs/cgb_boot_fast.bin + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +# SDL Port + +# Unix versions build only one binary +$(BIN)/SDL/sameboy: $(CORE_OBJECTS) $(SDL_OBJECTS) + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS) +ifeq ($(CONF), release) + $(STRIP) $@ + $(CODESIGN) $@ +endif + +# Windows version builds two, one with a conole and one without it +$(BIN)/SDL/sameboy.exe: $(CORE_OBJECTS) $(SDL_OBJECTS) $(OBJ)/Windows/resources.o + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS) -Wl,/subsystem:windows + +$(BIN)/SDL/sameboy_debugger.exe: $(CORE_OBJECTS) $(SDL_OBJECTS) $(OBJ)/Windows/resources.o + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS) -Wl,/subsystem:console + +ifneq ($(USE_WINDRES),) +$(OBJ)/%.o: %.rc + -@$(MKDIR) -p $(dir $@) + windres --preprocessor cpp -DVERSION=\"$(VERSION)\" $^ $@ +else +$(OBJ)/%.res: %.rc + -@$(MKDIR) -p $(dir $@) + rc /fo $@ /dVERSION=\"$(VERSION)\" $^ + +%.o: %.res + cvtres /OUT:"$@" $^ +endif + +# We must provide SDL2.dll with the Windows port. +$(BIN)/SDL/SDL2.dll: + @$(eval MATCH := $(shell where $$LIB:SDL2.dll)) + cp "$(MATCH)" $@ + +# Tester + +$(BIN)/tester/sameboy_tester: $(CORE_OBJECTS) $(TESTER_OBJECTS) + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) +ifeq ($(CONF), release) + $(STRIP) $@ + $(CODESIGN) $@ +endif + +$(BIN)/tester/sameboy_tester.exe: $(CORE_OBJECTS) $(SDL_OBJECTS) + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) -Wl,/subsystem:console + +$(BIN)/SDL/%.bin: $(BOOTROMS_DIR)/%.bin + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(BIN)/tester/%.bin: $(BOOTROMS_DIR)/%.bin + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(BIN)/SameBoy.app/Contents/Resources/%.bin: $(BOOTROMS_DIR)/%.bin + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(BIN)/SDL/LICENSE: LICENSE + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(BIN)/SDL/registers.sym: Misc/registers.sym + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(BIN)/SDL/background.bmp: SDL/background.bmp + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(BIN)/SDL/Shaders: Shaders + -@$(MKDIR) -p $@ + cp -rf Shaders/*.fsh $@ + +$(BIN)/SDL/Palettes: Misc/Palettes + -@$(MKDIR) -p $@ + cp -rf Misc/Palettes/*.sbp $@ + +# Boot ROMs + +$(OBJ)/%.2bpp: %.png + -@$(MKDIR) -p $(dir $@) + rgbgfx -h -u -o $@ $< + +$(OBJ)/BootROMs/SameBoyLogo.pb12: $(OBJ)/BootROMs/SameBoyLogo.2bpp $(PB12_COMPRESS) + $(realpath $(PB12_COMPRESS)) < $< > $@ + +$(PB12_COMPRESS): BootROMs/pb12.c + $(NATIVE_CC) -std=c99 -Wall -Werror $< -o $@ + +$(BIN)/BootROMs/cgb0_boot.bin: BootROMs/cgb_boot.asm +$(BIN)/BootROMs/agb_boot.bin: BootROMs/cgb_boot.asm +$(BIN)/BootROMs/cgb_boot_fast.bin: BootROMs/cgb_boot.asm +$(BIN)/BootROMs/sgb2_boot: BootROMs/sgb_boot.asm + +$(BIN)/BootROMs/%.bin: BootROMs/%.asm $(OBJ)/BootROMs/SameBoyLogo.pb12 + -@$(MKDIR) -p $(dir $@) + rgbasm -i $(OBJ)/BootROMs/ -i BootROMs/ -o $@.tmp $< + rgblink -o $@.tmp2 $@.tmp + dd if=$@.tmp2 of=$@ count=1 bs=$(if $(findstring dmg,$@)$(findstring sgb,$@),256,2304) 2> $(NULL) + @rm $@.tmp $@.tmp2 + +# Libretro Core (uses its own build system) +libretro: + CFLAGS="$(WARNINGS)" $(MAKE) -C libretro + +# install for Linux/FreeDesktop/etc. +# Does not install mimetype icons because FreeDesktop is cursed abomination with no right to exist. +# If you somehow find a reasonable way to make associate an icon with an extension in this dumpster +# fire of a desktop environment, open an issue or a pull request +ifneq ($(FREEDESKTOP),) +ICON_NAMES := apps/sameboy mimetypes/x-gameboy-rom mimetypes/x-gameboy-color-rom +ICON_SIZES := 16x16 32x32 64x64 128x128 256x256 512x512 +ICONS := $(foreach name,$(ICON_NAMES), $(foreach size,$(ICON_SIZES),$(DESTDIR)$(PREFIX)/share/icons/hicolor/$(size)/$(name).png)) +install: sdl $(DESTDIR)$(PREFIX)/share/mime/packages/sameboy.xml $(ICONS) FreeDesktop/sameboy.desktop + -@$(MKDIR) -p $(dir $(DESTDIR)$(PREFIX)) + mkdir -p $(DESTDIR)$(DATA_DIR)/ $(DESTDIR)$(PREFIX)/bin/ + cp -rf $(BIN)/SDL/* $(DESTDIR)$(DATA_DIR)/ + mv $(DESTDIR)$(DATA_DIR)/sameboy $(DESTDIR)$(PREFIX)/bin/sameboy +ifeq ($(DESTDIR),) + -update-mime-database -n $(PREFIX)/share/mime + -xdg-desktop-menu install --novendor --mode system FreeDesktop/sameboy.desktop + -xdg-icon-resource forceupdate --mode system + -xdg-desktop-menu forceupdate --mode system +ifneq ($(SUDO_USER),) + -su $(SUDO_USER) -c "xdg-desktop-menu forceupdate --mode system" +endif +else + -@$(MKDIR) -p $(DESTDIR)$(PREFIX)/share/applications/ + cp FreeDesktop/sameboy.desktop $(DESTDIR)$(PREFIX)/share/applications/sameboy.desktop +endif + +$(DESTDIR)$(PREFIX)/share/icons/hicolor/%/apps/sameboy.png: FreeDesktop/AppIcon/%.png + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(DESTDIR)$(PREFIX)/share/icons/hicolor/%/mimetypes/x-gameboy-rom.png: FreeDesktop/Cartridge/%.png + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(DESTDIR)$(PREFIX)/share/icons/hicolor/%/mimetypes/x-gameboy-color-rom.png: FreeDesktop/ColorCartridge/%.png + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + +$(DESTDIR)$(PREFIX)/share/mime/packages/sameboy.xml: FreeDesktop/sameboy.xml + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ +endif + +# Clean +clean: + rm -rf build + +.PHONY: libretro tester diff --git a/thirdparty/SameBoy-old/Misc/Palettes/Desert.sbp b/thirdparty/SameBoy-old/Misc/Palettes/Desert.sbp new file mode 100644 index 0000000000000000000000000000000000000000..28625ad3b807240dea55043679d261eb39163d71 GIT binary patch literal 32 ncmeYXa0+I!(>Ewd3tuw3`O<}rH?D7I0D|-VFL|O|zpw)U(FzS} literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Misc/Palettes/Evening.sbp b/thirdparty/SameBoy-old/Misc/Palettes/Evening.sbp new file mode 100644 index 000000000..e11998ab1 --- /dev/null +++ b/thirdparty/SameBoy-old/Misc/Palettes/Evening.sbp @@ -0,0 +1 @@ +LPBS&6UiS䦻}^LH+ \ No newline at end of file diff --git a/thirdparty/SameBoy-old/Misc/Palettes/Fog.sbp b/thirdparty/SameBoy-old/Misc/Palettes/Fog.sbp new file mode 100644 index 0000000000000000000000000000000000000000..a79fe00fd112d9b5276a96491a0cb9586f7ca97c GIT binary patch literal 32 mcmeYXa0+HJu`v%TDsEdmcmJis$8H>F0D>0Z7K literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Misc/Palettes/Radioactive Pea.sbp b/thirdparty/SameBoy-old/Misc/Palettes/Radioactive Pea.sbp new file mode 100644 index 0000000000000000000000000000000000000000..57f9d6a31fcddce8aa40f2772455113540d456cd GIT binary patch literal 32 ocmeYXa0+H(2vTG#mN%Ivw&NW0#VZWfORXLjKAvoF?$Bp#0IXmQ6#xJL literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Misc/Palettes/Seaweed.sbp b/thirdparty/SameBoy-old/Misc/Palettes/Seaweed.sbp new file mode 100644 index 0000000000000000000000000000000000000000..3718efd749165f5fa3060b17f23e0b03166c3e50 GIT binary patch literal 32 ocmeYXa0+G;Ww19&b*fk%asR>8ch496GTi%i*6V5|NmfQD0M&pE`2YX_ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Misc/Palettes/Twilight.sbp b/thirdparty/SameBoy-old/Misc/Palettes/Twilight.sbp new file mode 100644 index 0000000000000000000000000000000000000000..a5decc103acfc724e3e38a0d1dad71814e846d97 GIT binary patch literal 32 ncmeYXa0+G;Ww37(a@!k{^z!obch46rQBe5B00etf7uo{=!4(WZ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Misc/registers.sym b/thirdparty/SameBoy-old/Misc/registers.sym new file mode 100644 index 000000000..67c3266d3 --- /dev/null +++ b/thirdparty/SameBoy-old/Misc/registers.sym @@ -0,0 +1,134 @@ +00:FF00 IO_JOYP +00:FF00 rJOYP +00:FF01 IO_SB +00:FF01 rSB +00:FF02 IO_SC +00:FF02 rSC +00:FF04 IO_DIV +00:FF04 rDIV +00:FF05 IO_TIMA +00:FF05 rTIMA +00:FF06 IO_TMA +00:FF06 rTMA +00:FF07 IO_TAC +00:FF07 rTAC +00:FF0F IO_IF +00:FF0F rIF +00:FF10 IO_NR10 +00:FF10 rNR10 +00:FF11 IO_NR11 +00:FF11 rNR11 +00:FF12 IO_NR12 +00:FF12 rNR12 +00:FF13 IO_NR13 +00:FF13 rNR13 +00:FF14 IO_NR14 +00:FF14 rNR14 +00:FF16 IO_NR21 +00:FF16 rNR21 +00:FF17 IO_NR22 +00:FF17 rNR22 +00:FF18 IO_NR23 +00:FF18 rNR23 +00:FF19 IO_NR24 +00:FF19 rNR24 +00:FF1A IO_NR30 +00:FF1A rNR30 +00:FF1B IO_NR31 +00:FF1B rNR31 +00:FF1C IO_NR32 +00:FF1C rNR32 +00:FF1D IO_NR33 +00:FF1D rNR33 +00:FF1E IO_NR34 +00:FF1E rNR34 +00:FF20 IO_NR41 +00:FF20 rNR41 +00:FF21 IO_NR42 +00:FF21 rNR42 +00:FF22 IO_NR43 +00:FF22 rNR43 +00:FF23 IO_NR44 +00:FF23 rNR44 +00:FF24 IO_NR50 +00:FF24 rNR50 +00:FF25 IO_NR51 +00:FF25 rNR51 +00:FF26 IO_NR52 +00:FF26 rNR52 +00:FF30 IO_WAV_START +00:FF30 rWAV_START +00:FF3F IO_WAV_END +00:FF3F rWAV_END +00:FF40 IO_LCDC +00:FF40 rLCDC +00:FF41 IO_STAT +00:FF41 rSTAT +00:FF42 IO_SCY +00:FF42 rSCY +00:FF43 IO_SCX +00:FF43 rSCX +00:FF44 IO_LY +00:FF44 rLY +00:FF45 IO_LYC +00:FF45 rLYC +00:FF46 IO_DMA +00:FF46 rDMA +00:FF47 IO_BGP +00:FF47 rBGP +00:FF48 IO_OBP0 +00:FF48 rOBP0 +00:FF49 IO_OBP1 +00:FF49 rOBP1 +00:FF4A IO_WY +00:FF4A rWY +00:FF4B IO_WX +00:FF4B rWX +00:FF4C IO_KEY0 +00:FF4C rKEY0 +00:FF4D IO_KEY1 +00:FF4D rKEY1 +00:FF4F IO_VBK +00:FF4F rVBK +00:FF50 IO_BANK +00:FF50 rBANK +00:FF51 IO_HDMA1 +00:FF51 rHDMA1 +00:FF52 IO_HDMA2 +00:FF52 rHDMA2 +00:FF53 IO_HDMA3 +00:FF53 rHDMA3 +00:FF54 IO_HDMA4 +00:FF54 rHDMA4 +00:FF55 IO_HDMA5 +00:FF55 rHDMA5 +00:FF56 IO_RP +00:FF56 rRP +00:FF68 IO_BGPI +00:FF68 rBGPI +00:FF69 IO_BGPD +00:FF69 rBGPD +00:FF6A IO_OBPI +00:FF6A rOBPI +00:FF6B IO_OBPD +00:FF6B rOBPD +00:FF6C IO_OPRI +00:FF6C rOPRI +00:FF70 IO_SVBK +00:FF70 rSVBK +00:FF71 IO_PSM +00:FF71 rPSM +00:FF72 IO_PSWX +00:FF72 rPSWX +00:FF73 IO_PSWY +00:FF73 rPSWY +00:FF74 IO_PSW +00:FF74 rPSW +00:FF75 IO_UNKNOWN5 +00:FF75 rUNKNOWN5 +00:FF76 IO_PCM12 +00:FF76 rPCM12 +00:FF77 IO_PCM34 +00:FF77 rPCM34 +00:FFFF IO_IE +00:FFFF rIE diff --git a/thirdparty/SameBoy-old/OpenDialog/cocoa.m b/thirdparty/SameBoy-old/OpenDialog/cocoa.m new file mode 100644 index 000000000..fd9af3ca6 --- /dev/null +++ b/thirdparty/SameBoy-old/OpenDialog/cocoa.m @@ -0,0 +1,66 @@ +#import +#include "open_dialog.h" + + +char *do_open_rom_dialog(void) +{ + @autoreleasepool { + int stderr_fd = dup(STDERR_FILENO); + close(STDERR_FILENO); + NSWindow *key = [NSApp keyWindow]; + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + dialog.title = @"Open ROM"; + dialog.allowedFileTypes = @[@"gb", @"gbc", @"sgb", @"isx"]; + if ([dialog runModal] != NSModalResponseOK) return nil; + [key makeKeyAndOrderFront:nil]; + NSString *ret = [[[dialog URLs] firstObject] path]; + dup2(stderr_fd, STDERR_FILENO); + if (ret) { + return strdup(ret.UTF8String); + } + return NULL; + } +} + +char *do_open_folder_dialog(void) +{ + @autoreleasepool { + int stderr_fd = dup(STDERR_FILENO); + close(STDERR_FILENO); + NSWindow *key = [NSApp keyWindow]; + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + dialog.title = @"Select Boot ROMs Folder"; + dialog.canChooseDirectories = true; + dialog.canChooseFiles = false; + if ([dialog runModal] != NSModalResponseOK) return nil; + [key makeKeyAndOrderFront:nil]; + NSString *ret = [[[dialog URLs] firstObject] path]; + dup2(stderr_fd, STDERR_FILENO); + if (ret) { + return strdup(ret.UTF8String); + } + return NULL; + } +} + +/* The Cocoa variant of this function isn't as fully featured as the GTK and Windows ones, as Mac users would use + the fully featured Cocoa port of SameBoy anyway*/ +char *do_save_recording_dialog(unsigned frequency) +{ + @autoreleasepool { + int stderr_fd = dup(STDERR_FILENO); + close(STDERR_FILENO); + NSWindow *key = [NSApp keyWindow]; + NSSavePanel *dialog = [NSSavePanel savePanel]; + dialog.title = @"Audio recording save location"; + dialog.allowedFileTypes = @[@"aiff", @"aif", @"aifc", @"wav", @"raw", @"pcm"]; + if ([dialog runModal] != NSModalResponseOK) return nil; + [key makeKeyAndOrderFront:nil]; + NSString *ret = [[dialog URL] path]; + dup2(stderr_fd, STDERR_FILENO); + if (ret) { + return strdup(ret.UTF8String); + } + return NULL; + } +} diff --git a/thirdparty/SameBoy-old/OpenDialog/gtk.c b/thirdparty/SameBoy-old/OpenDialog/gtk.c new file mode 100644 index 000000000..d3c0faa81 --- /dev/null +++ b/thirdparty/SameBoy-old/OpenDialog/gtk.c @@ -0,0 +1,370 @@ +#include "open_dialog.h" +#include +#include +#include +#include +#include +#include + +#define GTK_FILE_CHOOSER_ACTION_OPEN 0 +#define GTK_FILE_CHOOSER_ACTION_SAVE 1 +#define GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER 2 +#define GTK_RESPONSE_ACCEPT -3 +#define GTK_RESPONSE_CANCEL -6 + + +void *_gtk_file_chooser_dialog_new (const char *title, + void *parent, + int action, + const char *first_button_text, + ...); +bool _gtk_init_check (int *argc, char ***argv); +int _gtk_dialog_run(void *); +void _g_free(void *); +void _gtk_widget_destroy(void *); +char *_gtk_file_chooser_get_filename(void *); +void _g_log_set_default_handler (void *function, void *data); +void *_gtk_file_filter_new(void); +void _gtk_file_filter_add_pattern(void *filter, const char *pattern); +void _gtk_file_filter_set_name(void *filter, const char *name); +void _gtk_file_chooser_add_filter(void *dialog, void *filter); +void _gtk_main_iteration(void); +bool _gtk_events_pending(void); +unsigned long _g_signal_connect_data(void *instance, + const char *detailed_signal, + void *c_handler, + void *data, + void *destroy_data, + unsigned connect_flags); +void _gtk_file_chooser_set_current_name(void *dialog, + const char *name); +void *_gtk_file_chooser_get_filter(void *dialog); +const char *_gtk_file_filter_get_name (void *dialog); +#define g_signal_connect(instance, detailed_signal, c_handler, data) \ +g_signal_connect_data((instance), (detailed_signal), (c_handler), (data), NULL, 0) + + + +#define LAZY(symbol) static typeof(_##symbol) *symbol = NULL;\ +if (symbol == NULL) symbol = dlsym(handle, #symbol);\ +if (symbol == NULL) goto lazy_error +#define TRY_DLOPEN(name) handle = handle? handle : dlopen(name, RTLD_NOW) + +void nop(){} + +static void wait_mouse_up(void) +{ + while (true) { + if (!(SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT))) break; + SDL_Event event; + SDL_PollEvent(&event); + } +} + +char *do_open_rom_dialog(void) +{ + wait_mouse_up(); + static void *handle = NULL; + + TRY_DLOPEN("libgtk-3.so"); + TRY_DLOPEN("libgtk-3.so.0"); + TRY_DLOPEN("libgtk-2.so"); + TRY_DLOPEN("libgtk-2.so.0"); + + if (!handle) { + goto lazy_error; + } + + + LAZY(gtk_init_check); + LAZY(gtk_file_chooser_dialog_new); + LAZY(gtk_dialog_run); + LAZY(g_free); + LAZY(gtk_widget_destroy); + LAZY(gtk_file_chooser_get_filename); + LAZY(g_log_set_default_handler); + LAZY(gtk_file_filter_new); + LAZY(gtk_file_filter_add_pattern); + LAZY(gtk_file_filter_set_name); + LAZY(gtk_file_chooser_add_filter); + LAZY(gtk_events_pending); + LAZY(gtk_main_iteration); + + /* Shut up GTK */ + g_log_set_default_handler(nop, NULL); + + gtk_init_check(0, 0); + + + void *dialog = gtk_file_chooser_dialog_new("Open ROM", + 0, + GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + + + void *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, "*.gb"); + gtk_file_filter_add_pattern(filter, "*.gbc"); + gtk_file_filter_add_pattern(filter, "*.sgb"); + gtk_file_filter_add_pattern(filter, "*.isx"); + gtk_file_filter_set_name(filter, "Game Boy ROMs"); + gtk_file_chooser_add_filter(dialog, filter); + + int res = gtk_dialog_run(dialog); + char *ret = NULL; + + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + filename = gtk_file_chooser_get_filename(dialog); + ret = strdup(filename); + g_free(filename); + } + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + + gtk_widget_destroy(dialog); + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + return ret; + +lazy_error: + fprintf(stderr, "Failed to display GTK dialog\n"); + return NULL; +} + +char *do_open_folder_dialog(void) +{ + wait_mouse_up(); + static void *handle = NULL; + + TRY_DLOPEN("libgtk-3.so"); + TRY_DLOPEN("libgtk-3.so.0"); + TRY_DLOPEN("libgtk-2.so"); + TRY_DLOPEN("libgtk-2.so.0"); + + if (!handle) { + goto lazy_error; + } + + + LAZY(gtk_init_check); + LAZY(gtk_file_chooser_dialog_new); + LAZY(gtk_dialog_run); + LAZY(g_free); + LAZY(gtk_widget_destroy); + LAZY(gtk_file_chooser_get_filename); + LAZY(g_log_set_default_handler); + LAZY(gtk_file_filter_new); + LAZY(gtk_file_filter_add_pattern); + LAZY(gtk_file_filter_set_name); + LAZY(gtk_file_chooser_add_filter); + LAZY(gtk_events_pending); + LAZY(gtk_main_iteration); + + /* Shut up GTK */ + g_log_set_default_handler(nop, NULL); + + gtk_init_check(0, 0); + + + void *dialog = gtk_file_chooser_dialog_new("Select Boot ROMs Folder", + 0, + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + + + int res = gtk_dialog_run(dialog); + char *ret = NULL; + + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + filename = gtk_file_chooser_get_filename(dialog); + ret = strdup(filename); + g_free(filename); + } + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + + gtk_widget_destroy(dialog); + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + return ret; + +lazy_error: + fprintf(stderr, "Failed to display GTK dialog\n"); + return NULL; +} + +static void filter_changed(void *dialog, + void *unused, + void *unused2) +{ + static void *handle = NULL; + + TRY_DLOPEN("libgtk-3.so"); + TRY_DLOPEN("libgtk-3.so.0"); + TRY_DLOPEN("libgtk-2.so"); + TRY_DLOPEN("libgtk-2.so.0"); + + if (!handle) { + goto lazy_error; + } + + LAZY(gtk_file_chooser_get_filename); + LAZY(gtk_file_chooser_set_current_name); + LAZY(g_free); + LAZY(gtk_file_chooser_get_filter); + LAZY(gtk_file_filter_get_name); + + char *filename = gtk_file_chooser_get_filename(dialog); + if (!filename) return; + char *temp = filename + strlen(filename); + char *basename = filename; + bool deleted_extension = false; + while (temp != filename) { + temp--; + if (*temp == '.' && !deleted_extension) { + *temp = 0; + deleted_extension = true; + } + else if (*temp == '/') { + basename = temp + 1; + break; + } + } + + char *new_filename = NULL; + + switch (gtk_file_filter_get_name(gtk_file_chooser_get_filter(dialog))[1]) { + case 'p': + default: + asprintf(&new_filename, "%s.aiff", basename); + break; + case 'I': + asprintf(&new_filename, "%s.wav", basename); + break; + case 'a': + asprintf(&new_filename, "%s.raw", basename); + break; + } + + + gtk_file_chooser_set_current_name(dialog, new_filename); + free(new_filename); + g_free(filename); + return; + +lazy_error: + fprintf(stderr, "Failed updating the file extension\n"); +} + + +char *do_save_recording_dialog(unsigned frequency) +{ + wait_mouse_up(); + static void *handle = NULL; + + TRY_DLOPEN("libgtk-3.so"); + TRY_DLOPEN("libgtk-3.so.0"); + TRY_DLOPEN("libgtk-2.so"); + TRY_DLOPEN("libgtk-2.so.0"); + + if (!handle) { + goto lazy_error; + } + + + LAZY(gtk_init_check); + LAZY(gtk_file_chooser_dialog_new); + LAZY(gtk_dialog_run); + LAZY(g_free); + LAZY(gtk_widget_destroy); + LAZY(gtk_file_chooser_get_filename); + LAZY(g_log_set_default_handler); + LAZY(gtk_file_filter_new); + LAZY(gtk_file_filter_add_pattern); + LAZY(gtk_file_filter_set_name); + LAZY(gtk_file_chooser_add_filter); + LAZY(gtk_events_pending); + LAZY(gtk_main_iteration); + LAZY(g_signal_connect_data); + LAZY(gtk_file_chooser_set_current_name); + + /* Shut up GTK */ + g_log_set_default_handler(nop, NULL); + + gtk_init_check(0, 0); + + + void *dialog = gtk_file_chooser_dialog_new("Audio recording save location", + 0, + GTK_FILE_CHOOSER_ACTION_SAVE, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Save", GTK_RESPONSE_ACCEPT, + NULL ); + + + void *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, "*.aiff"); + gtk_file_filter_add_pattern(filter, "*.aif"); + gtk_file_filter_add_pattern(filter, "*.aifc"); + gtk_file_filter_set_name(filter, "Apple AIFF"); + gtk_file_chooser_add_filter(dialog, filter); + + filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, "*.wav"); + gtk_file_filter_set_name(filter, "RIFF WAVE"); + gtk_file_chooser_add_filter(dialog, filter); + + filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, "*.raw"); + gtk_file_filter_add_pattern(filter, "*.pcm"); + static char raw_name[40]; +#ifdef GB_BIG_ENDIAN + sprintf(raw_name, "Raw PCM (Stereo %dHz, 16-bit BE)", frequency); +#else + sprintf(raw_name, "Raw PCM (Stereo %dHz, 16-bit LE)", frequency); +#endif + gtk_file_filter_set_name(filter, raw_name); + gtk_file_chooser_add_filter(dialog, filter); + + g_signal_connect(dialog, "notify::filter", filter_changed, NULL); + gtk_file_chooser_set_current_name(dialog, "Untitled.aiff"); + + int res = gtk_dialog_run(dialog); + char *ret = NULL; + + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + filename = gtk_file_chooser_get_filename(dialog); + ret = strdup(filename); + g_free(filename); + } + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + + gtk_widget_destroy(dialog); + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + return ret; + +lazy_error: + fprintf(stderr, "Failed to display GTK dialog\n"); + return NULL; +} diff --git a/thirdparty/SameBoy-old/OpenDialog/open_dialog.h b/thirdparty/SameBoy-old/OpenDialog/open_dialog.h new file mode 100644 index 000000000..35484108d --- /dev/null +++ b/thirdparty/SameBoy-old/OpenDialog/open_dialog.h @@ -0,0 +1,7 @@ +#ifndef open_rom_h +#define open_rom_h + +char *do_open_rom_dialog(void); +char *do_open_folder_dialog(void); +char *do_save_recording_dialog(unsigned frequency); +#endif /* open_rom_h */ diff --git a/thirdparty/SameBoy-old/OpenDialog/windows.c b/thirdparty/SameBoy-old/OpenDialog/windows.c new file mode 100644 index 000000000..5a0af0e32 --- /dev/null +++ b/thirdparty/SameBoy-old/OpenDialog/windows.c @@ -0,0 +1,104 @@ +#include +#include +#include +#include "open_dialog.h" + +static char *wc_to_utf8_alloc(const wchar_t *wide) +{ + unsigned int cb = WideCharToMultiByte(CP_UTF8, 0, wide, -1, NULL, 0, NULL, NULL); + if (cb) { + char *buffer = (char*) malloc(cb); + if (buffer) { + WideCharToMultiByte(CP_UTF8, 0, wide, -1, buffer, cb, NULL, NULL); + return buffer; + } + } + return NULL; +} + +char *do_open_rom_dialog(void) +{ + OPENFILENAMEW dialog; + wchar_t filename[MAX_PATH]; + + filename[0] = '\0'; + memset(&dialog, 0, sizeof(dialog)); + dialog.lStructSize = sizeof(dialog); + dialog.lpstrFile = filename; + dialog.nMaxFile = MAX_PATH; + dialog.lpstrFilter = L"Game Boy ROMs\0*.gb;*.gbc;*.sgb;*.isx\0All files\0*.*\0\0"; + dialog.nFilterIndex = 1; + dialog.lpstrFileTitle = NULL; + dialog.nMaxFileTitle = 0; + dialog.lpstrInitialDir = NULL; + dialog.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + + if (GetOpenFileNameW(&dialog)) { + return wc_to_utf8_alloc(filename); + } + + return NULL; +} + +char *do_open_folder_dialog(void) +{ + char *ret = NULL; + BROWSEINFOW dialog; + + memset(&dialog, 0, sizeof(dialog)); + dialog.ulFlags = BIF_USENEWUI | BIF_RETURNONLYFSDIRS; + dialog.lpszTitle = L"Select Boot ROMs Folder"; + + HRESULT hrOleInit = OleInitialize(NULL); + LPITEMIDLIST list = SHBrowseForFolderW(&dialog); + if (list) { + wchar_t filename[MAX_PATH]; + if (SHGetPathFromIDListW(list, filename)) { + ret = wc_to_utf8_alloc(filename); + } + CoTaskMemFree(list); + } + + if (SUCCEEDED(hrOleInit)) OleUninitialize(); + return ret; +} + +char *do_save_recording_dialog(unsigned frequency) +{ + OPENFILENAMEW dialog; + wchar_t filename[MAX_PATH + 5] = L"recording.wav"; + static wchar_t filter[] = L"RIFF WAVE\0*.wav\0Apple AIFF\0*.aiff;*.aif;*.aifc\0Raw PCM (Stereo _______Hz, 16-bit LE)\0*.raw;*.pcm;\0All files\0*.*\0\0"; + + memset(&dialog, 0, sizeof(dialog)); + dialog.lStructSize = sizeof(dialog); + dialog.lpstrFile = filename; + dialog.nMaxFile = MAX_PATH; + dialog.lpstrFilter = filter; + swprintf(filter + sizeof("RIFF WAVE\0*.wav\0Apple AIFF\0*.aiff;*.aif;*.aifc\0Raw PCM (Stereo ") - 1, + sizeof("_______Hz, 16-bit LE)"), + L"%dHz, 16-bit LE) ", + frequency); + + dialog.nFilterIndex = 1; + dialog.lpstrInitialDir = NULL; + dialog.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; + + if (GetSaveFileNameW(&dialog)) { + if (dialog.nFileExtension == 0) { + switch (dialog.nFilterIndex) { + case 1: + wcscat(filename, L".wav"); + break; + case 2: + wcscat(filename, L".aiff"); + break; + case 3: + wcscat(filename, L".raw"); + break; + } + } + return wc_to_utf8_alloc(filename); + } + + return NULL; +} diff --git a/thirdparty/SameBoy-old/QuickLook/CartridgeTemplate.png b/thirdparty/SameBoy-old/QuickLook/CartridgeTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6d600eef7822c0e958007d715a82d5b834e2e0 GIT binary patch literal 80261 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


f^Q%kcws)6*x6R;)7F@r&< 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

@;HaI5W+M~k(faW;9_IbAX5afEy%#e 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­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

PCGd6ou(SG_L>Ip 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 z zrTc#Z01Rd^tBS>ciNV;p)5PX91Ha?$&vsoDG6==W?)d8dF2@YTT-!1&;=FRi49Mr` zqah+Id>;^CePmF7e<;fYEr2qB_rF5PcDo{-TL6`BrSNd?KP zxt^fHhFC#D72r+87YcSKlN@bTqY)LPtiTn=s5KtXj~J(swsXl>h2>cWXKirSI_I4C z&V~{iNjL6$_WG~?^!ORl%k;05 z{VCGJ7vxJ|iVjd69kh)x7|jG90u&ceN`eQGsn;$oP9Bg#Ku8W}JkJ6u$JA|L=boz&UpN)BlI~&`532DK!KmFc3cZ=l;avDN&j| zC6{*N2~FKlVGAwsf&$Edywn93sqdt5z7*Qiz4zJUN2U#7G9D}4T9xTV66n2`mpdU$ob#zk~@CGq%9qT^KMH&zD31;M{V}oGQAHq z`6O6RAc2QR>YFVx+*jk4XxZB6?KOFdlKsTb)k;K)aL8tEQYz{cM>a&76Uo^=o1Cqv z$x4c>F(;RQO8r=v2HqIkGFc)7yVctll=fN@&|s{^pvPE<5~x<1HyUSP<60y6?8?7u zuy^aaJ#pV8-~s`g1c3yyuJ7q`?gzMCb4;Rb%b5D$@^#sxY_B`+#|VsQTNH>-$aMsx z6qwQsa5479`jhXKvcu0Ax(H$<2@A>2=sLVjqEdGJl_0}ME)={okq$00P?nAAidT}t zJh@IiVUWrNMKJX{^#ro);&@S?@VtG7T1eE4{uF`A6yVt2X3BJ!K={qBm6zJ8D0 zW8X6xd_r0yGY;zwf=50!A<6Jt37Ma_ z#8l-_s)lzig5?IV4xW?2Xb9vr=AFl>s)AAy0s?RzV?O}i1m$?BtH%GafB*Nte);@P z2gboDA}x@Iny^BM5Sy&ZX(L^5908m&&KU>uK8Qd5$NuPh3BY>>z_%0}n6pmPqc8+! zy=My(J?~Md<%{*0=iJ(PB>><(xRmJXI&Pq8b19jGQXDd7*3u0^rXfN|bnOw(j(2!= zIN{K?s8th-f4)#Ttrwt4PdH!CWKLuqLew7hJ#{p!Be&(rYN8)H`tvjyxZpMv-Srfs zho)QTp*#!GQNCafcn|9>5I3*Kw!`Uo!trp#U2{O!98lK{Dj~rjz?py&98$@=4Wo=D zk3mm3U$40I7mRw$Km!11=g^ORD(=%Er~);%@k+RYGA2Ix=YPt7^3VN=@Js*4pOwq* zjmKpe@bTjteD&jR;Hz&w!pDzqs3Wv4{)>&Eb|!bXzWVSn&cho_X2_;6=>fT)eeP~& zb%%gaPtlOZ=kDlebnbM%t>9nMmXmvWm?b8uNUUnSJl*5|@C=ny2yo=mA06fa4{OPE zF6F5!q2QgvWxC>{^D8`@ALh

@?Pu+|t__gAgi8Dwa9(La=O1*j63xk9S#)acr8o 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 z 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 z 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≺9xY1 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�=GU-$c^ZROn}2Y^80Wuo_4)sr?acp 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%0D)*HaQUcYc309?x5`#seKh6Bxxlz2uo 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

xRLSC`3#2}fpNlcWkONk=)3Z@J;5TQ7V>C7 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 E0koIte*gdg literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/QuickLook/Info.plist b/thirdparty/SameBoy-old/QuickLook/Info.plist new file mode 100644 index 000000000..dffbee8e5 --- /dev/null +++ b/thirdparty/SameBoy-old/QuickLook/Info.plist @@ -0,0 +1,63 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDocumentTypes + + + CFBundleTypeRole + QLGenerator + LSItemContentTypes + + com.github.liji32.sameboy.gb + com.github.liji32.sameboy.gbc + com.github.liji32.sameboy.isx + + + + CFBundleExecutable + SameBoyQL + CFBundleIdentifier + com.github.liji32.sameboy.previewer + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SameBoy + CFBundleShortVersionString + Version @VERSION + CFBundleSignature + ???? + CFPlugInDynamicRegisterFunction + + CFPlugInDynamicRegistration + NO + CFPlugInFactories + + 48BC750C-2BB9-49B1-AE80-786E22B3DEB4 + QuickLookGeneratorPluginFactory + + CFPlugInTypes + + 5E2D9680-5022-40FA-B806-43349622E5B9 + + 48BC750C-2BB9-49B1-AE80-786E22B3DEB4 + + + CFPlugInUnloadFunction + + NSHumanReadableCopyright + Copyright © 2015-2022 Lior Halphon + QLNeedsToBeRunInMainThread + + QLPreviewHeight + 144 + QLPreviewWidth + 160 + QLSupportsConcurrentRequests + + QLThumbnailMinimumSize + 64 + + diff --git a/thirdparty/SameBoy-old/QuickLook/UniversalCartridgeTemplate.png b/thirdparty/SameBoy-old/QuickLook/UniversalCartridgeTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..7f251f4a0374499c366fe1a0772e93790ed0027f GIT binary patch literal 73171 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 VWM5p>#a03G<8BW2ui`|U{{wi=)%^ef literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/QuickLook/exports.sym b/thirdparty/SameBoy-old/QuickLook/exports.sym new file mode 100644 index 000000000..2e7fddebf --- /dev/null +++ b/thirdparty/SameBoy-old/QuickLook/exports.sym @@ -0,0 +1 @@ +_QuickLookGeneratorPluginFactory diff --git a/thirdparty/SameBoy-old/QuickLook/generator.m b/thirdparty/SameBoy-old/QuickLook/generator.m new file mode 100644 index 000000000..f2651d289 --- /dev/null +++ b/thirdparty/SameBoy-old/QuickLook/generator.m @@ -0,0 +1,119 @@ +#include +#include +#include "get_image_for_rom.h" + +static OSStatus render(CGContextRef cgContext, CFURLRef url, bool showBorder) +{ + /* Load the template NSImages when generating the first thumbnail */ + static NSImage *template = nil; + static NSImage *templateUniversal = nil; + static NSImage *templateColor = nil; + static NSBundle *bundle = nil; + static dispatch_once_t onceToken; + if (showBorder) { + dispatch_once(&onceToken, ^{ + bundle = [NSBundle bundleWithIdentifier:@"com.github.liji32.sameboy.previewer"]; + template = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CartridgeTemplate" ofType:@"png"]]; + templateUniversal = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"UniversalCartridgeTemplate" ofType:@"png"]]; + templateColor = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"ColorCartridgeTemplate" ofType:@"png"]]; + }); + } + uint32_t bitmap[160*144]; + uint8_t cgbFlag = 0; + + /* The cgb_boot_fast boot ROM skips the boot animation */ + if (get_image_for_rom([[(__bridge NSURL *)url path] UTF8String], + [[bundle pathForResource:@"cgb_boot_fast" ofType:@"bin"] UTF8String], + bitmap, &cgbFlag)) { + return -1; + } + + /* Convert the screenshot to a CGImageRef */ + CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, bitmap, sizeof(bitmap), NULL); + CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); + CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; + CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; + + CGImageRef iref = CGImageCreate(160, + 144, + 8, + 32, + 4 * 160, + colorSpaceRef, + bitmapInfo, + provider, + NULL, + true, + renderingIntent); + CGContextSetInterpolationQuality(cgContext, kCGInterpolationNone); + NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithGraphicsPort:(void *)cgContext flipped:false]; + [NSGraphicsContext setCurrentContext:context]; + + + /* Convert the screenshot to a magnified NSImage */ + NSImage *screenshot = [[NSImage alloc] initWithCGImage:iref size:NSMakeSize(160, 144)]; + /* Draw the screenshot */ + if (showBorder) { + [screenshot drawInRect:NSMakeRect(192, 150, 640, 576)]; + } + else { + [screenshot drawInRect:NSMakeRect(0, 0, 640, 576)]; + } + + if (showBorder) { + /* Use the CGB flag to determine the cartridge "look": + - DMG cartridges are grey + - CGB cartridges are transparent + - CGB cartridges that support DMG systems are black + */ + NSImage *effectiveTemplate = nil; + switch (cgbFlag) { + case 0xC0: + effectiveTemplate = templateColor; + break; + case 0x80: + effectiveTemplate = templateUniversal; + break; + default: + effectiveTemplate = template; + } + + /* Mask it with the template (The middle part of the template image is transparent) */ + [effectiveTemplate drawInRect:(NSRect){{0, 0}, template.size}]; + } + + CGColorSpaceRelease(colorSpaceRef); + CGDataProviderRelease(provider); + CGImageRelease(iref); + + return noErr; +} + +OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options) +{ + @autoreleasepool { + CGContextRef cgContext = QLPreviewRequestCreateContext(preview, ((NSSize){640, 576}), true, nil); + if (render(cgContext, url, false) == noErr) { + QLPreviewRequestFlushContext(preview, cgContext); + CGContextRelease(cgContext); + return noErr; + } + CGContextRelease(cgContext); + return -1; + } +} + +OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize) +{ + extern NSString *kQLThumbnailPropertyIconFlavorKey; + @autoreleasepool { + CGContextRef cgContext = QLThumbnailRequestCreateContext(thumbnail, ((NSSize){1024, 1024}), true, (__bridge CFDictionaryRef)(@{kQLThumbnailPropertyIconFlavorKey : @(0)})); + if (render(cgContext, url, true) == noErr) { + QLThumbnailRequestFlushContext(thumbnail, cgContext); + CGContextRelease(cgContext); + return noErr; + } + CGContextRelease(cgContext); + return -1; + } +} diff --git a/thirdparty/SameBoy-old/QuickLook/get_image_for_rom.c b/thirdparty/SameBoy-old/QuickLook/get_image_for_rom.c new file mode 100644 index 000000000..6c9ac9198 --- /dev/null +++ b/thirdparty/SameBoy-old/QuickLook/get_image_for_rom.c @@ -0,0 +1,103 @@ +#include +#include +#include +#include +#include +#include + +#include "get_image_for_rom.h" + +#define LENGTH 60 * 10 + +struct local_data { + unsigned long frames; + bool running; +}; + +static char *async_input_callback(GB_gameboy_t *gb) +{ + return NULL; +} + +static void log_callback(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) +{ + +} + + +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) +{ + + struct local_data *local_data = (struct local_data *)GB_get_user_data(gb); + + if (local_data->frames == LENGTH) { + local_data->running = false; + } + else if (local_data->frames == LENGTH - 1) { + GB_set_rendering_disabled(gb, false); + } + + local_data->frames++; +} + +static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) +{ + return (b << 16) | (g << 8) | (r) | 0xFF000000; +} + +int get_image_for_rom(const char *filename, const char *boot_path, uint32_t *output, uint8_t *cgb_flag) +{ + GB_gameboy_t gb; + GB_init(&gb, GB_MODEL_CGB_E); + if (GB_load_boot_rom(&gb, boot_path)) { + GB_free(&gb); + return 1; + } + + GB_set_vblank_callback(&gb, (GB_vblank_callback_t) vblank); + GB_set_pixels_output(&gb, output); + GB_set_rgb_encode_callback(&gb, rgb_encode); + GB_set_async_input_callback(&gb, async_input_callback); + GB_set_log_callback(&gb, log_callback); + GB_set_color_correction_mode(&gb, GB_COLOR_CORRECTION_MODERN_BALANCED); + + size_t length = strlen(filename); + char extension[4] = {0,}; + if (length > 4) { + if (filename[length - 4] == '.') { + extension[0] = tolower(filename[length - 3]); + extension[1] = tolower(filename[length - 2]); + extension[2] = tolower(filename[length - 1]); + } + } + if (strcmp(extension, "isx") == 0) { + if (GB_load_isx(&gb, filename)) { + GB_free(&gb); + return 1; + } + } + else if (GB_load_rom(&gb, filename)) { + GB_free(&gb); + return 1; + } + + /* Run emulation */ + struct local_data local_data = {0,}; + GB_set_user_data(&gb, &local_data); + local_data.running = true; + local_data.frames = 0; + GB_set_rendering_disabled(&gb, true); + GB_set_turbo_mode(&gb, true, true); + + *cgb_flag = GB_read_memory(&gb, 0x143) & 0xC0; + + + while (local_data.running) { + GB_run(&gb); + } + + + GB_free(&gb); + return 0; +} + diff --git a/thirdparty/SameBoy-old/QuickLook/get_image_for_rom.h b/thirdparty/SameBoy-old/QuickLook/get_image_for_rom.h new file mode 100644 index 000000000..598486a5f --- /dev/null +++ b/thirdparty/SameBoy-old/QuickLook/get_image_for_rom.h @@ -0,0 +1,10 @@ +#ifndef get_image_for_rom_h +#define get_image_for_rom_h +#include + +typedef bool (*cancel_callback_t)(void*); + +int get_image_for_rom(const char *filename, const char *boot_path, uint32_t *output, uint8_t *cgb_flag); + + +#endif diff --git a/thirdparty/SameBoy-old/QuickLook/main.c b/thirdparty/SameBoy-old/QuickLook/main.c new file mode 100644 index 000000000..4e45313ba --- /dev/null +++ b/thirdparty/SameBoy-old/QuickLook/main.c @@ -0,0 +1,201 @@ +/* This is an Apple-provided "bootstrap" code for Quick Look generators, nothing intersting here. */ + +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// constants +// ----------------------------------------------------------------------------- + +// Don't modify this line +#define PLUGIN_ID "48BC750C-2BB9-49B1-AE80-786E22B3DEB4" + +// +// Below is the generic glue code for all plug-ins. +// +// You should not have to modify this code aside from changing +// names if you decide to change the names defined in the Info.plist +// + + +// ----------------------------------------------------------------------------- +// typedefs +// ----------------------------------------------------------------------------- + +OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize); +OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options); + +// The layout for an instance of QuickLookGeneratorPlugIn +typedef struct __QuickLookGeneratorPluginType +{ + void *conduitInterface; + CFUUIDRef factoryID; + UInt32 refCount; +} QuickLookGeneratorPluginType; + +// ----------------------------------------------------------------------------- +// prototypes +// ----------------------------------------------------------------------------- +// Forward declaration for the IUnknown implementation. +// + +static QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID); +static void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance); +static HRESULT QuickLookGeneratorQueryInterface(void *thisInstance, REFIID iid, LPVOID *ppv); +extern void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator, CFUUIDRef typeID); +static ULONG QuickLookGeneratorPluginAddRef(void *thisInstance); +static ULONG QuickLookGeneratorPluginRelease(void *thisInstance); + +// ----------------------------------------------------------------------------- +// myInterfaceFtbl definition +// ----------------------------------------------------------------------------- +// The QLGeneratorInterfaceStruct function table. +// +static QLGeneratorInterfaceStruct myInterfaceFtbl = { + NULL, + QuickLookGeneratorQueryInterface, + QuickLookGeneratorPluginAddRef, + QuickLookGeneratorPluginRelease, + NULL, + NULL, + NULL, + NULL +}; + + +// ----------------------------------------------------------------------------- +// AllocQuickLookGeneratorPluginType +// ----------------------------------------------------------------------------- +// Utility function that allocates a new instance. +// You can do some initial setup for the generator here if you wish +// like allocating globals etc... +// +QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID) +{ + QuickLookGeneratorPluginType *theNewInstance; + + theNewInstance = (QuickLookGeneratorPluginType *)malloc(sizeof(QuickLookGeneratorPluginType)); + memset(theNewInstance, 0, sizeof(QuickLookGeneratorPluginType)); + + /* Point to the function table Malloc enough to store the stuff and copy the filler from myInterfaceFtbl over */ + theNewInstance->conduitInterface = malloc(sizeof(QLGeneratorInterfaceStruct)); + memcpy(theNewInstance->conduitInterface,&myInterfaceFtbl, sizeof(QLGeneratorInterfaceStruct)); + + /* Retain and keep an open instance refcount for each factory. */ + theNewInstance->factoryID = CFRetain(inFactoryID); + CFPlugInAddInstanceForFactory(inFactoryID); + + /* This function returns the IUnknown interface so set the refCount to one. */ + theNewInstance->refCount = 1; + return theNewInstance; +} + +// ----------------------------------------------------------------------------- +// DeallocQuickLookGeneratorPluginType +// ----------------------------------------------------------------------------- +// Utility function that deallocates the instance when +// the refCount goes to zero. +// In the current implementation generator interfaces are never deallocated +// but implement this as this might change in the future +// +void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance) +{ + CFUUIDRef theFactoryID; + + theFactoryID = thisInstance->factoryID; + /* Free the conduitInterface table up */ + free(thisInstance->conduitInterface); + + /* Free the instance structure */ + free(thisInstance); + if (theFactoryID) { + CFPlugInRemoveInstanceForFactory(theFactoryID); + CFRelease(theFactoryID); + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorQueryInterface +// ----------------------------------------------------------------------------- +// Implementation of the IUnknown QueryInterface function. +// +HRESULT QuickLookGeneratorQueryInterface(void *thisInstance, REFIID iid, LPVOID *ppv) +{ + CFUUIDRef interfaceID; + + interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, iid); + + if (CFEqual(interfaceID, kQLGeneratorCallbacksInterfaceID)) { + /* If the Right interface was requested, bump the ref count, + * set the ppv parameter equal to the instance, and + * return good status. + */ + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GenerateThumbnailForURL = GenerateThumbnailForURL; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GeneratePreviewForURL = GeneratePreviewForURL; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType*)thisInstance)->conduitInterface)->AddRef(thisInstance); + *ppv = thisInstance; + CFRelease(interfaceID); + return S_OK; + } + else { + /* Requested interface unknown, bail with error. */ + *ppv = NULL; + CFRelease(interfaceID); + return E_NOINTERFACE; + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginAddRef +// ----------------------------------------------------------------------------- +// Implementation of reference counting for this type. Whenever an interface +// is requested, bump the refCount for the instance. NOTE: returning the +// refcount is a convention but is not required so don't rely on it. +// +ULONG QuickLookGeneratorPluginAddRef(void *thisInstance) +{ + ((QuickLookGeneratorPluginType *)thisInstance )->refCount += 1; + return ((QuickLookGeneratorPluginType*) thisInstance)->refCount; +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginRelease +// ----------------------------------------------------------------------------- +// When an interface is released, decrement the refCount. +// If the refCount goes to zero, deallocate the instance. +// +ULONG QuickLookGeneratorPluginRelease(void *thisInstance) +{ + ((QuickLookGeneratorPluginType*)thisInstance)->refCount -= 1; + if (((QuickLookGeneratorPluginType*)thisInstance)->refCount == 0) { + DeallocQuickLookGeneratorPluginType((QuickLookGeneratorPluginType*)thisInstance ); + return 0; + } + else { + return ((QuickLookGeneratorPluginType*) thisInstance )->refCount; + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginFactory +// ----------------------------------------------------------------------------- +void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator, CFUUIDRef typeID) +{ + QuickLookGeneratorPluginType *result; + CFUUIDRef uuid; + + /* If correct type is being requested, allocate an + * instance of kQLGeneratorTypeID and return the IUnknown interface. + */ + if (CFEqual(typeID, kQLGeneratorTypeID)) { + uuid = CFUUIDCreateFromString(kCFAllocatorDefault, CFSTR(PLUGIN_ID)); + result = AllocQuickLookGeneratorPluginType(uuid); + CFRelease(uuid); + return result; + } + /* If the requested type is incorrect, return NULL. */ + return NULL; +} + diff --git a/thirdparty/SameBoy-old/README.md b/thirdparty/SameBoy-old/README.md new file mode 100644 index 000000000..d06ef4d20 --- /dev/null +++ b/thirdparty/SameBoy-old/README.md @@ -0,0 +1,58 @@ +# SameBoy + +SameBoy is an open source Game Boy (DMG) and Game Boy Color (CGB) emulator, written in portable C. It has a native Cocoa frontend for macOS, an SDL frontend for other operating systems, and a libretro core. It also includes a text-based debugger with an expression evaluator. Visit [the website](https://sameboy.github.io/). + +## Features +Features common to both Cocoa and SDL versions: + * Supports Game Boy (DMG) and Game Boy Color (CGB) emulation + * Lets you choose the model you want to emulate regardless of ROM + * High quality 96KHz audio + * Battery save support + * Save states + * Includes open source DMG and CGB boot ROMs: + * Complete support for (and documentation of) *all* game-specific palettes in the CGB boot ROM, for accurate emulation of Game Boy games on a Game Boy Color + * Supports manual palette selection with key combinations, with 4 additional new palettes (A + B + direction) + * Supports palette selection in a CGB game, forcing it to run in 'paletted' DMG mode, if ROM allows doing so. + * Support for games with a non-Nintendo logo in the header + * No long animation in the DMG boot + * Advanced text-based debugger with an expression evaluator, disassembler, conditional breakpoints, conditional watchpoints, backtracing and other features + * Extremely high accuracy + * Emulates [PCM_12 and PCM_34 registers](https://github.com/LIJI32/GBVisualizer) + * T-cycle accurate emulation of LCD timing effects, supporting the Demotronic trick, Prehistorik Man, [GBVideoPlayer](https://github.com/LIJI32/GBVideoPlayer) and other tech demos + * Real time clock emulation + * Retina/High DPI display support, allowing a wider range of scaling factors without artifacts + * Optional frame blending (Requires OpenGL 3.2 or later) + * Several [scaling algorithms](https://sameboy.github.io/scaling/) (Including exclusive algorithms like OmniScale and Anti-aliased Scale2x; Requires OpenGL 3.2 or later or Metal) + +Features currently supported only with the Cocoa version: + * Native Cocoa interface, with support for all system-wide features, such as drag-and-drop and smart titlebars + * Game Boy Camera support + +[Read more](https://sameboy.github.io/features/). + +## Compatibility +SameBoy passes all of [blargg's test ROMs](http://gbdev.gg8.se/wiki/articles/Test_ROMs#Blargg.27s_tests), all of [mooneye-gb's](https://github.com/Gekkio/mooneye-gb) tests (Some tests require the original boot ROMs), and all of [Wilbert Pol's tests](https://github.com/wilbertpol/mooneye-gb/tree/master/tests/acceptance). SameBoy should work with most games and demos, please [report](https://github.com/LIJI32/SameBoy/issues/new) any broken ROM. The latest results for SameBoy's automatic tester are available [here](https://sameboy.github.io/automation/). + +## Contributing +SameBoy is an open-source project licensed under the MIT license, and you're welcome to contribute by creating issues, implementing new features, improving emulation accuracy and fixing existing open issues. You can read the [contribution guidelines](CONTRIBUTING.md) to make sure your contributions are as effective as possible. + +## Compilation +SameBoy requires the following tools and libraries to build: + * clang (Recommended; required for macOS) or GCC + * make + * macOS Cocoa port: macOS SDK and Xcode (For command line tools and ibtool) + * SDL port: libsdl2 + * [rgbds](https://github.com/gbdev/rgbds/releases/), for boot ROM compilation + +On Windows, SameBoy also requires: + * Visual Studio (For headers, etc.) + * [GnuWin](http://gnuwin32.sourceforge.net/) + * Running vcvars32 before running make. Make sure all required tools and libraries are in %PATH% and %lib%, respectively. (see [Build FAQ](https://github.com/LIJI32/SameBoy/blob/master/build-faq.md) for more details on Windows compilation) + +To compile, simply run `make`. The targets are `cocoa` (Default for macOS), `sdl` (Default for everything else), `libretro`, `bootroms` and `tester`. You may also specify `CONF=debug` (default), `CONF=release`, `CONF=native_release` or `CONF=fat_release` to control optimization, symbols and multi-architectures. `native_release` is faster than `release`, but is optimized to the host's CPU and therefore is not portable. `fat_release` is exclusive to macOS and builds x86-64 and ARM64 fat binaries; this requires using a recent enough `clang` and macOS SDK using `xcode-select`, or setting them explicitly with `CC=` and `SYSROOT=`, respectively. All other configurations will build to your host architecture. You may set `BOOTROMS_DIR=...` to a directory containing precompiled boot ROM files, otherwise the build system will compile and use SameBoy's own boot ROMs. + +The SDL port will look for resource files with a path relative to executable and inside the directory specified by the `DATA_DIR` variable. If you are packaging SameBoy, you may wish to override this by setting the `DATA_DIR` variable during compilation to the target path of the directory containing all files (apart from the executable, that's not necessary) from the `build/bin/SDL` directory in the source tree. Make sure the variable ends with a `/` character. On FreeDesktop environments, `DATA_DIR` will default to `/usr/local/share/sameboy/`. `PREFIX` and `DESTDIR` follow their standard usage and default to an empty string an `/usr/local`, respectively + +Linux, BSD, and other FreeDesktop users can run `sudo make install` to install SameBoy as both a GUI app and a command line tool. + +SameBoy is compiled and tested on macOS, Ubuntu and 64-bit Windows 10. diff --git a/thirdparty/SameBoy-old/SDL/audio.c b/thirdparty/SameBoy-old/SDL/audio.c new file mode 100644 index 000000000..29b3eb0f6 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/audio.c @@ -0,0 +1,111 @@ +#include +#include +#include +#include +#include "audio/audio.h" +#include "configuration.h" + +#define likely(x) GB_likely(x) +#define unlikely(x) GB_unlikely(x) + +static const GB_audio_driver_t *driver = NULL; + +bool GB_audio_init(void) +{ + const GB_audio_driver_t *drivers[] = { +#ifdef _WIN32 + GB_AUDIO_DRIVER_REF(XAudio2), + GB_AUDIO_DRIVER_REF(XAudio2_7), +#endif + GB_AUDIO_DRIVER_REF(SDL), +#ifdef ENABLE_OPENAL + GB_AUDIO_DRIVER_REF(OpenAL), +#endif + }; + + // First try the preferred driver + for (unsigned i = 0; i < sizeof(drivers) / sizeof(drivers[0]); i++) { + driver = drivers[i]; + if (strcmp(driver->name, configuration.audio_driver) != 0) { + continue; + } + if (driver->audio_init()) { + if (driver->audio_deinit) { + atexit(driver->audio_deinit); + } + return true; + } + } + + // Else go by priority + for (unsigned i = 0; i < sizeof(drivers) / sizeof(drivers[0]); i++) { + driver = drivers[i]; + if (driver->audio_init()) { + atexit(driver->audio_deinit); + return true; + } + } + + driver = NULL; + return false; +} + +bool GB_audio_is_playing(void) +{ + if (unlikely(!driver)) return false; + return driver->audio_is_playing(); +} + +void GB_audio_set_paused(bool paused) +{ + if (unlikely(!driver)) return; + return driver->audio_set_paused(paused); +} + +void GB_audio_clear_queue(void) +{ + if (unlikely(!driver)) return; + return driver->audio_clear_queue(); +} + +unsigned GB_audio_get_frequency(void) +{ + if (unlikely(!driver)) return 0; + return driver->audio_get_frequency(); +} + +size_t GB_audio_get_queue_length(void) +{ + if (unlikely(!driver)) return 0; + return driver->audio_get_queue_length(); +} + +void GB_audio_queue_sample(GB_sample_t *sample) +{ + if (unlikely(!driver)) return; + return driver->audio_queue_sample(sample); +} + +const char *GB_audio_driver_name(void) +{ + if (unlikely(!driver)) return "None"; + return driver->name; +} + +const char *GB_audio_driver_name_at_index(unsigned index) +{ + const GB_audio_driver_t *drivers[] = { +#ifdef _WIN32 + GB_AUDIO_DRIVER_REF(XAudio2), + GB_AUDIO_DRIVER_REF(XAudio2_7), +#endif + GB_AUDIO_DRIVER_REF(SDL), +#ifdef ENABLE_OPENAL + GB_AUDIO_DRIVER_REF(OpenAL), +#endif + }; + if (index >= sizeof(drivers) / sizeof(drivers[0])) { + return ""; + } + return drivers[index]->name; +} diff --git a/thirdparty/SameBoy-old/SDL/audio/audio.h b/thirdparty/SameBoy-old/SDL/audio/audio.h new file mode 100644 index 000000000..0de574679 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/audio/audio.h @@ -0,0 +1,45 @@ +#ifndef sdl_audio_h +#define sdl_audio_h + +#include +#include +#include + +bool GB_audio_is_playing(void); +void GB_audio_set_paused(bool paused); +void GB_audio_clear_queue(void); +unsigned GB_audio_get_frequency(void); +size_t GB_audio_get_queue_length(void); +void GB_audio_queue_sample(GB_sample_t *sample); +bool GB_audio_init(void); +void GB_audio_deinit(void); +const char *GB_audio_driver_name(void); +const char *GB_audio_driver_name_at_index(unsigned index); + +typedef struct { + typeof(GB_audio_is_playing) *audio_is_playing; + typeof(GB_audio_set_paused) *audio_set_paused; + typeof(GB_audio_clear_queue) *audio_clear_queue; + typeof(GB_audio_get_frequency) *audio_get_frequency; + typeof(GB_audio_get_queue_length) *audio_get_queue_length; + typeof(GB_audio_queue_sample) *audio_queue_sample; + typeof(GB_audio_init) *audio_init; + typeof(GB_audio_deinit) *audio_deinit; + const char *name; +} GB_audio_driver_t; + +#define GB_AUDIO_DRIVER(_name) const GB_audio_driver_t _name##driver = { \ + .audio_is_playing = _audio_is_playing, \ + .audio_set_paused = _audio_set_paused, \ + .audio_clear_queue = _audio_clear_queue, \ + .audio_get_frequency = _audio_get_frequency, \ + .audio_get_queue_length = _audio_get_queue_length, \ + .audio_queue_sample = _audio_queue_sample, \ + .audio_init = _audio_init, \ + .audio_deinit = _audio_deinit, \ + .name = #_name, \ +} + +#define GB_AUDIO_DRIVER_REF(name) ({extern const GB_audio_driver_t name##driver; &name##driver;}) + +#endif /* sdl_audio_h */ diff --git a/thirdparty/SameBoy-old/SDL/audio/openal.c b/thirdparty/SameBoy-old/SDL/audio/openal.c new file mode 100644 index 000000000..fdcaeadea --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/audio/openal.c @@ -0,0 +1,317 @@ +#include "audio.h" +#if defined(__APPLE__) +#include +#include + +#else +#include +#include +#endif +#include +#include +#include + +#define BUFFER_LEN_MS 5 + +static ALCdevice *al_device = NULL; +static ALCcontext *al_context = NULL; +static GB_sample_t *audio_buffer = NULL; +static ALuint al_source = 0; +static ALCint sample_rate = 0; +static unsigned buffer_size = 0; +static unsigned buffer_pos = 0; +static bool is_paused = false; + +#define AL_ERR_STRINGIFY(x) #x +#define AL_ERR_TOSTRING(x) AL_ERR_STRINGIFY(x) +#define AL_ERROR(msg) check_al_error(msg, AL_ERR_TOSTRING(__LINE__)) + +// Check if the previous OpenAL call returned an error. +// If an error occurred a message will be logged to stderr. +static bool check_al_error(const char *user_msg, const char *line) +{ + ALCenum error = alGetError(); + const char *description = ""; + + switch (error) { + case AL_NO_ERROR: + return false; + case AL_INVALID_NAME: + description = "A bad name (ID) was passed to an OpenAL function"; + break; + case AL_INVALID_ENUM: + description = "An invalid enum value was passed to an OpenAL function"; + break; + case AL_INVALID_VALUE: + description = "An invalid value was passed to an OpenAL function"; + break; + case AL_INVALID_OPERATION: + description = "The requested operation is not valid"; + break; + case AL_OUT_OF_MEMORY: + description = "The requested operation resulted in OpenAL running out of memory"; + break; + } + + if (user_msg != NULL) { + fprintf(stderr, "[OpenAL:%s] %s: %s\n", line, user_msg, description); + } + else { + fprintf(stderr, "[OpenAL:%s] %s\n", line, description); + } + + return true; +} + +static void _audio_deinit(void) +{ + // Stop the source (this should mark all queued buffers as processed) + alSourceStop(al_source); + + // Check if there are buffers that can be freed + ALint processed; + alGetSourcei(al_source, AL_BUFFERS_PROCESSED, &processed); + if (!AL_ERROR("Failed to query number of processed buffers")) { + // Try to free the buffers, we do not care about potential errors here + while (processed--) { + ALuint buffer; + alSourceUnqueueBuffers(al_source, 1, &buffer); + alDeleteBuffers(1, &buffer); + } + } + + alDeleteSources(1, &al_source); + if (al_context) { + alcDestroyContext(al_context); + al_context = NULL; + } + + if (al_device) { + alcCloseDevice(al_device); + al_device = NULL; + } + + if (audio_buffer) { + free(audio_buffer); + audio_buffer = NULL; + } +} + +static void free_processed_buffers(void) +{ + ALint processed; + alGetSourcei(al_source, AL_BUFFERS_PROCESSED, &processed); + if (AL_ERROR("Failed to query number of processed buffers")) { + return; + } + + while (processed--) { + ALuint buffer; + + alSourceUnqueueBuffers(al_source, 1, &buffer); + if (AL_ERROR("Failed to unqueue buffer")) { + return; + } + + alDeleteBuffers(1, &buffer); + /* Due to a limitation in Apple's OpenAL implementation, this function + can fail once in a few times. If it does, ignore the warning, and let + this buffer be freed in a later call to free_processed_buffers. */ +#if defined(__APPLE__) + if (alGetError()) return; +#else + if (AL_ERROR("Failed to delete buffer")) { + return; + } +#endif + } +} + +static bool _audio_is_playing(void) +{ + ALenum state; + alGetSourcei(al_source, AL_SOURCE_STATE, &state); + if (AL_ERROR("Failed to query source state")) { + return false; + } + + return state == AL_PLAYING; +} + +static void _audio_set_paused(bool paused) +{ + is_paused = paused; + if (paused) { + alSourcePause(al_source); + } + else { + alSourcePlay(al_source); + } +} + +static void _audio_clear_queue(void) +{ + bool is_playing = _audio_is_playing(); + + // Stopping a source clears its queue + alSourceStop(al_source); + if (AL_ERROR(NULL)) { + return; + } + + free_processed_buffers(); + buffer_pos = 0; + + if (is_playing) { + _audio_set_paused(false); + } +} + +static unsigned _audio_get_frequency(void) +{ + return sample_rate; +} + +static size_t _audio_get_queue_length(void) +{ + // Get the number of all attached buffers + ALint buffers; + alGetSourcei(al_source, AL_BUFFERS_QUEUED, &buffers); + if (AL_ERROR("Failed to query number of queued buffers")) { + buffers = 0; + } + + // Get the number of all processed buffers (ready to be detached) + ALint processed; + alGetSourcei(al_source, AL_BUFFERS_PROCESSED, &processed); + if (AL_ERROR("Failed to query number of processed buffers")) { + processed = 0; + } + + return (buffers - processed) * buffer_size + buffer_pos; +} + +static void _audio_queue_sample(GB_sample_t *sample) +{ + if (is_paused) return; + audio_buffer[buffer_pos++] = *sample; + + if (buffer_pos == buffer_size) { + buffer_pos = 0; + + ALuint al_buffer; + alGenBuffers(1, &al_buffer); + if (AL_ERROR("Failed to create audio buffer")) { + return; + } + + alBufferData(al_buffer, AL_FORMAT_STEREO16, audio_buffer, buffer_size * sizeof(GB_sample_t), sample_rate); + if (AL_ERROR("Failed to buffer data")) { + return; + } + + alSourceQueueBuffers(al_source, 1, &al_buffer); + if (AL_ERROR("Failed to queue buffer")) { + return; + } + + // In case of an audio underrun, the source might + // have finished playing all attached buffers + // which means its status will be "AL_STOPPED". + if (!_audio_is_playing()) { + alSourcePlay(al_source); + } + + free_processed_buffers(); + } +} + +static bool _audio_init(void) +{ + // Open the default device + al_device = alcOpenDevice(NULL); + if (!al_device) { + AL_ERROR("Failed to open device"); + return false; + } + + // Create a new audio context without special attributes + al_context = alcCreateContext(al_device, NULL); + if (al_context == NULL) { + AL_ERROR("Failed to create context"); + _audio_deinit(); + return false; + } + + // Enable our audio context + if (!alcMakeContextCurrent(al_context)) { + AL_ERROR("Failed to set context"); + _audio_deinit(); + return false; + } + + // Query the sample rate of the playback device + alcGetIntegerv(al_device, ALC_FREQUENCY, 1, &sample_rate); + if (AL_ERROR("Failed to query sample rate")) { + _audio_deinit(); + return false; + } + if (sample_rate == 0) { + sample_rate = 48000; + } + + // Allocate our working buffer + buffer_size = (sample_rate * BUFFER_LEN_MS) / 1000; + audio_buffer = malloc(buffer_size * sizeof(GB_sample_t)); + if (audio_buffer == NULL) { + fprintf(stderr, "Failed to allocate audio buffer\n"); + _audio_deinit(); + return false; + } + + // Create our playback source + alGenSources(1, &al_source); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Keep the pitch as is + alSourcef(al_source, AL_PITCH, 1); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Keep the volume as is + alSourcef(al_source, AL_GAIN, 1); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Position our source at the center of the 3D space + alSource3f(al_source, AL_POSITION, 0, 0, 0); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Our source is fixed in space + alSource3f(al_source, AL_VELOCITY, 0, 0, 0); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Our source does not loop + alSourcei(al_source, AL_LOOPING, AL_FALSE); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + return true; +} + +GB_AUDIO_DRIVER(OpenAL); diff --git a/thirdparty/SameBoy-old/SDL/audio/sdl.c b/thirdparty/SameBoy-old/SDL/audio/sdl.c new file mode 100644 index 000000000..9c0cd98bb --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/audio/sdl.c @@ -0,0 +1,111 @@ +#include "audio.h" +#include + +#ifndef _WIN32 +#define AUDIO_FREQUENCY 96000 +#include +#else +#include +/* Windows (well, at least my VM) can't handle 96KHz sound well :( */ + +/* felsqualle says: For SDL 2.0.6+ using the WASAPI driver, the highest freq. + we can get is 48000. 96000 also works, but always has some faint crackling in + the audio, no matter how high or low I set the buffer length... + Not quite satisfied with that solution, because acc. to SDL2 docs, + 96k + WASAPI *should* work. */ + +#define AUDIO_FREQUENCY 48000 +#endif + +/* Compatibility with older SDL versions */ +#ifndef SDL_AUDIO_ALLOW_SAMPLES_CHANGE +#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0 +#endif + +static SDL_AudioDeviceID device_id; +static SDL_AudioSpec want_aspec, have_aspec; + +#define AUDIO_BUFFER_SIZE 512 +static unsigned buffer_pos = 0; +static GB_sample_t audio_buffer[AUDIO_BUFFER_SIZE]; + +static bool _audio_is_playing(void) +{ + return SDL_GetAudioDeviceStatus(device_id) == SDL_AUDIO_PLAYING; +} + +static void _audio_clear_queue(void) +{ + SDL_ClearQueuedAudio(device_id); +} + +static void _audio_set_paused(bool paused) +{ + _audio_clear_queue(); + SDL_PauseAudioDevice(device_id, paused); +} + +static unsigned _audio_get_frequency(void) +{ + return have_aspec.freq; +} + +static size_t _audio_get_queue_length(void) +{ + return SDL_GetQueuedAudioSize(device_id) / sizeof(GB_sample_t); +} + +static void _audio_queue_sample(GB_sample_t *sample) +{ + audio_buffer[buffer_pos++] = *sample; + + if (buffer_pos == AUDIO_BUFFER_SIZE) { + buffer_pos = 0; + SDL_QueueAudio(device_id, (const void *)audio_buffer, sizeof(audio_buffer)); + } +} + +static bool _audio_init(void) +{ + if (SDL_Init(SDL_INIT_AUDIO) != 0) { + printf("Failed to initialize SDL audio: %s", SDL_GetError()); + return false; + } + + /* Configure Audio */ + memset(&want_aspec, 0, sizeof(want_aspec)); + want_aspec.freq = AUDIO_FREQUENCY; + want_aspec.format = AUDIO_S16SYS; + want_aspec.channels = 2; + want_aspec.samples = 512; + + SDL_version _sdl_version; + SDL_GetVersion(&_sdl_version); + unsigned sdl_version = _sdl_version.major * 1000 + _sdl_version.minor * 100 + _sdl_version.patch; + +#ifndef _WIN32 + /* SDL 2.0.5 on macOS and Linux introduced a bug where certain combinations of buffer lengths and frequencies + fail to produce audio correctly. */ + if (sdl_version >= 2005) { + want_aspec.samples = 2048; + } +#else + if (sdl_version < 2006) { + /* Since WASAPI audio was introduced in SDL 2.0.6, we have to lower the audio frequency + to 44100 because otherwise we would get garbled audio output.*/ + want_aspec.freq = 44100; + } +#endif + + device_id = SDL_OpenAudioDevice(0, 0, &want_aspec, &have_aspec, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE | SDL_AUDIO_ALLOW_SAMPLES_CHANGE); + + return true; +} + +static void _audio_deinit(void) +{ + _audio_set_paused(true); + SDL_CloseAudioDevice(device_id); +} + +GB_AUDIO_DRIVER(SDL); diff --git a/thirdparty/SameBoy-old/SDL/audio/xaudio2.c b/thirdparty/SameBoy-old/SDL/audio/xaudio2.c new file mode 100644 index 000000000..e2ca68b8f --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/audio/xaudio2.c @@ -0,0 +1,159 @@ +#define COBJMACROS +#include "audio.h" +#include +#include +#include + +static unsigned audio_frequency = 48000; +static IXAudio2 *xaudio2 = NULL; +static IXAudio2MasteringVoice *master_voice = NULL; +static IXAudio2SourceVoice *source_voice = NULL; +static bool playing = false; +static GB_sample_t sample_pool[0x2000]; +static unsigned pos = 0; + +#define BATCH_SIZE 256 + +static WAVEFORMATEX wave_format = { + .wFormatTag = WAVE_FORMAT_PCM, + .nChannels = 2, + .nBlockAlign = 4, + .wBitsPerSample = 16, + .cbSize = 0 +}; + +static bool _audio_is_playing(void) +{ + return playing; +} + +static void _audio_clear_queue(void) +{ + pos = 0; + IXAudio2SourceVoice_FlushSourceBuffers(source_voice); +} + +static void _audio_set_paused(bool paused) +{ + if (paused) { + playing = false; + IXAudio2SourceVoice_Stop(source_voice, 0, XAUDIO2_COMMIT_NOW); + _audio_clear_queue(); + } + else { + playing = true; + IXAudio2SourceVoice_Start(source_voice, 0, XAUDIO2_COMMIT_NOW); + } + +} + + +#define _DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) static const PROPERTYKEY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } +_DEFINE_PROPERTYKEY(_PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); + + +static void update_frequency(void) +{ + HRESULT hr; + IMMDevice *device = NULL; + IMMDeviceEnumerator *enumerator = NULL; + IPropertyStore *store = NULL; + PWAVEFORMATEX deviceFormatProperties; + PROPVARIANT prop; + + hr = CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &IID_IMMDeviceEnumerator, (LPVOID *)&enumerator); + if (FAILED(hr)) return; + + // get default audio endpoint + + hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(enumerator, eRender, eMultimedia, &device); + if (FAILED(hr)) return; + + hr = IMMDevice_OpenPropertyStore(device, STGM_READ, &store); + if (FAILED(hr)) return; + + hr = IPropertyStore_GetValue(store, &_PKEY_AudioEngine_DeviceFormat, &prop); + if (FAILED(hr)) return; + + deviceFormatProperties = (PWAVEFORMATEX)prop.blob.pBlobData; + audio_frequency = deviceFormatProperties->nSamplesPerSec; + if (audio_frequency < 8000 || audio_frequency > 192000) { + // Bogus value, revert to 48KHz + audio_frequency = 48000; + } +} + +static unsigned _audio_get_frequency(void) +{ + return audio_frequency; +} + +static size_t _audio_get_queue_length(void) +{ + static XAUDIO2_VOICE_STATE state; + IXAudio2SourceVoice_GetState(source_voice, &state, XAUDIO2_VOICE_NOSAMPLESPLAYED); + + return state.BuffersQueued * BATCH_SIZE + (pos & (BATCH_SIZE - 1)); +} + +static void _audio_queue_sample(GB_sample_t *sample) +{ + if (!playing) return; + + static XAUDIO2_BUFFER buffer = {.AudioBytes = sizeof(*sample) * BATCH_SIZE, }; + sample_pool[pos] = *sample; + buffer.pAudioData = (void *)&sample_pool[pos & ~(BATCH_SIZE - 1)]; + pos++; + pos &= 0x1fff; + if ((pos & (BATCH_SIZE - 1)) == 0) { + IXAudio2SourceVoice_SubmitSourceBuffer(source_voice, &buffer, NULL); + } +} + +static bool _audio_init(void) +{ + HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + if (FAILED(hr)) { + fprintf(stderr, "CoInitializeEx failed: %lx\n", hr); + return false; + } + + hr = XAudio2Create(&xaudio2, 0, XAUDIO2_DEFAULT_PROCESSOR); + if (FAILED(hr)) { + fprintf(stderr, "XAudio2Create failed: %lx\n", hr); + return false; + } + + update_frequency(); + + hr = IXAudio2_CreateMasteringVoice(xaudio2, &master_voice, + 2, // 2 channels + audio_frequency, + 0, // Flags + 0, // Device index + NULL, // Effect chain + AudioCategory_GameMedia // Category + ); + if (FAILED(hr)) { + fprintf(stderr, "CreateMasteringVoice failed: %lx\n", hr); + return false; + } + + wave_format.nSamplesPerSec = audio_frequency; + wave_format.nAvgBytesPerSec = audio_frequency * 4; + hr = IXAudio2_CreateSourceVoice(xaudio2, &source_voice, &wave_format, 0, XAUDIO2_DEFAULT_FREQ_RATIO, NULL, NULL, NULL); + + if (FAILED(hr)) { + fprintf(stderr, "CreateSourceVoice failed: %lx\n", hr); + return false; + } + + return true; +} + +static void _audio_deinit(void) +{ + _audio_set_paused(true); +} + +GB_AUDIO_DRIVER(XAudio2); diff --git a/thirdparty/SameBoy-old/SDL/audio/xaudio2_7.c b/thirdparty/SameBoy-old/SDL/audio/xaudio2_7.c new file mode 100644 index 000000000..b8ed544af --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/audio/xaudio2_7.c @@ -0,0 +1,179 @@ +#define COBJMACROS +#include "xaudio2_7.h" +#include "audio.h" +#include + + +static unsigned audio_frequency = 48000; +static IXAudio2 *xaudio2 = NULL; +static IXAudio2MasteringVoice *master_voice = NULL; +static IXAudio2SourceVoice *source_voice = NULL; +static bool playing = false; +static GB_sample_t sample_pool[0x2000]; +static unsigned pos = 0; + +#define BATCH_SIZE 256 + + +static WAVEFORMATEX wave_format = { + .wFormatTag = WAVE_FORMAT_PCM, + .nChannels = 2, + .nBlockAlign = 4, + .wBitsPerSample = 16, + .cbSize = 0 +}; + +static inline HRESULT XAudio2Create(IXAudio2 **out, + UINT32 Flags, + XAUDIO2_PROCESSOR XAudio2Processor) +{ + IXAudio2 *xaudio2; + LoadLibraryEx("xaudio2_7.dll", NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); + + HRESULT hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void **)&xaudio2); + if (SUCCEEDED(hr)) { + hr = xaudio2->lpVtbl->Initialize(xaudio2, Flags, XAudio2Processor); + } + + if (SUCCEEDED(hr)) { + *out = xaudio2; + } + else if (xaudio2) { + xaudio2->lpVtbl->Release(xaudio2); + } + return hr; +} + +static bool _audio_is_playing(void) +{ + return playing; +} + +static void _audio_clear_queue(void) +{ + pos = 0; + IXAudio2SourceVoice_FlushSourceBuffers(source_voice); +} + +static void _audio_set_paused(bool paused) +{ + if (paused) { + playing = false; + IXAudio2SourceVoice_Stop(source_voice, 0, XAUDIO2_COMMIT_NOW); + _audio_clear_queue(); + } + else { + playing = true; + IXAudio2SourceVoice_Start(source_voice, 0, XAUDIO2_COMMIT_NOW); + } + +} + +#define _DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) static const PROPERTYKEY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } +_DEFINE_PROPERTYKEY(_PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); + + +static void update_frequency(void) +{ + HRESULT hr; + IMMDevice *device = NULL; + IMMDeviceEnumerator *enumerator = NULL; + IPropertyStore *store = NULL; + PWAVEFORMATEX deviceFormatProperties; + PROPVARIANT prop; + + hr = CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &IID_IMMDeviceEnumerator, (LPVOID *)&enumerator); + if (FAILED(hr)) return; + + // get default audio endpoint + + hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(enumerator, eRender, eMultimedia, &device); + if (FAILED(hr)) return; + + hr = IMMDevice_OpenPropertyStore(device, STGM_READ, &store); + if (FAILED(hr)) return; + + hr = IPropertyStore_GetValue(store, &_PKEY_AudioEngine_DeviceFormat, &prop); + if (FAILED(hr)) return; + + deviceFormatProperties = (PWAVEFORMATEX)prop.blob.pBlobData; + audio_frequency = deviceFormatProperties->nSamplesPerSec; + if (audio_frequency < 8000 || audio_frequency > 192000) { + // Bogus value, revert to 48KHz + audio_frequency = 48000; + } +} + +static unsigned _audio_get_frequency(void) +{ + return audio_frequency; +} + +static size_t _audio_get_queue_length(void) +{ + static XAUDIO2_VOICE_STATE state; + IXAudio2SourceVoice_GetState(source_voice, &state); + + return state.BuffersQueued * BATCH_SIZE + (pos & (BATCH_SIZE - 1)); +} + +static void _audio_queue_sample(GB_sample_t *sample) +{ + if (!playing) return; + + static XAUDIO2_BUFFER buffer = {.AudioBytes = sizeof(*sample) * BATCH_SIZE, }; + sample_pool[pos] = *sample; + buffer.pAudioData = (void *)&sample_pool[pos & ~(BATCH_SIZE - 1)]; + pos++; + pos &= 0x1fff; + if ((pos & (BATCH_SIZE - 1)) == 0) { + IXAudio2SourceVoice_SubmitSourceBuffer(source_voice, &buffer, NULL); + } +} + +static bool _audio_init(void) +{ + HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + if (FAILED(hr)) { + fprintf(stderr, "CoInitializeEx failed: %lx\n", hr); + return false; + } + + hr = XAudio2Create(&xaudio2, 0, XAUDIO2_DEFAULT_PROCESSOR); + if (FAILED(hr)) { + fprintf(stderr, "XAudio2Create failed: %lx\n", hr); + return false; + } + + update_frequency(); + + hr = IXAudio2_CreateMasteringVoice(xaudio2, &master_voice, + 2, // 2 channels + audio_frequency, + 0, // Flags + 0, // Device index + NULL // Effect chain + ); + if (FAILED(hr)) { + fprintf(stderr, "CreateMasteringVoice failed: %lx\n", hr); + return false; + } + + wave_format.nSamplesPerSec = audio_frequency; + wave_format.nAvgBytesPerSec = audio_frequency * 4; + hr = IXAudio2_CreateSourceVoice(xaudio2, &source_voice, &wave_format, 0, XAUDIO2_DEFAULT_FREQ_RATIO, NULL, NULL, NULL); + + if (FAILED(hr)) { + fprintf(stderr, "CreateSourceVoice failed: %lx\n", hr); + return false; + } + + return true; +} + +static void _audio_deinit(void) +{ + _audio_set_paused(true); +} + +GB_AUDIO_DRIVER(XAudio2_7); diff --git a/thirdparty/SameBoy-old/SDL/audio/xaudio2_7.h b/thirdparty/SameBoy-old/SDL/audio/xaudio2_7.h new file mode 100644 index 000000000..298715650 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/audio/xaudio2_7.h @@ -0,0 +1,108 @@ +#define INITGUID +#include + +/* Minimal definitions for XAudio2.7 */ +typedef UINT32 XAUDIO2_PROCESSOR; + +typedef struct XAUDIO2_BUFFER { + UINT32 Flags; + UINT32 AudioBytes; + const BYTE *pAudioData; + UINT32 PlayBegin; + UINT32 PlayLength; + UINT32 LoopBegin; + UINT32 LoopLength; + UINT32 LoopCount; + void *pContext; +} XAUDIO2_BUFFER; + +typedef struct XAUDIO2_VOICE_STATE { + void *pCurrentBufferContext; + UINT32 BuffersQueued; + UINT64 SamplesPlayed; +} XAUDIO2_VOICE_STATE; + +typedef struct IXAudio2SourceVoice { + struct IXAudio2SourceVoiceVtbl *lpVtbl; +} IXAudio2SourceVoice; + +typedef struct IXAudio2SourceVoiceVtbl IXAudio2SourceVoiceVtbl; + +#undef INTERFACE +#define INTERFACE IXAudio2SourceVoice + +struct IXAudio2SourceVoiceVtbl { + void *voiceMethods[19]; // Unused inherited methods + STDMETHOD(Start) (THIS_ UINT32 Flags, UINT32 OperationSet) PURE; + STDMETHOD(Stop) (THIS_ UINT32 Flags, UINT32 OperationSet) PURE; + STDMETHOD(SubmitSourceBuffer) (THIS_ __in const XAUDIO2_BUFFER *pBuffer, __in_opt const void *pBufferWMA) PURE; + STDMETHOD(FlushSourceBuffers) (THIS) PURE; + STDMETHOD(Discontinuity) (THIS) PURE; + STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet) PURE; + STDMETHOD_(void, GetState) (THIS_ __out XAUDIO2_VOICE_STATE *pVoiceState) PURE; +}; + +typedef struct IXAudio2 { + struct IXAudio2Vtbl *lpVtbl; +} IXAudio2; + +typedef struct IXAudio2Vtbl IXAudio2Vtbl; +typedef void *IXAudio2MasteringVoice; + +#undef INTERFACE +#define INTERFACE IXAudio2 + +struct IXAudio2Vtbl { + void *QueryInterface; + STDMETHOD_(ULONG, AddRef) (THIS) PURE; + STDMETHOD_(ULONG, Release) (THIS) PURE; + void *GetDeviceCount; + void *GetDeviceDetails; + STDMETHOD(Initialize) (THIS_ UINT32 Flags, + XAUDIO2_PROCESSOR XAudio2Processor) PURE; + + void *RegisterForCallbacks; + void *UnregisterForCallbacks; + + STDMETHOD(CreateSourceVoice) (THIS_ __deref_out IXAudio2SourceVoice **ppSourceVoice, + __in const WAVEFORMATEX *pSourceFormat, + UINT32 Flags, + float MaxFrequencyRatio, + __in_opt void *pCallback, + __in_opt const void *pSendList, + __in_opt const void *pEffectChain) PURE; + + void *CreateSubmixVoice; + + STDMETHOD(CreateMasteringVoice) (THIS_ __deref_out IXAudio2MasteringVoice **ppMasteringVoice, + UINT32 InputChannels, + UINT32 InputSampleRate, + UINT32 Flags, UINT32 DeviceIndex, + __in_opt const void *pEffectChain) PURE; +}; + +#define DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ +DEFINE_GUID(CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) + +#define DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ +DEFINE_GUID(IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) + +DEFINE_CLSID(XAudio2, 5a508685, a254, 4fba, 9b, 82, 9a, 24, b0, 03, 06, af); +DEFINE_IID(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb); + + +#define IXAudio2SourceVoice_Start(This,Flags,OperationSet) ((This)->lpVtbl->Start(This,Flags,OperationSet)) +#define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) ((This)->lpVtbl->Stop(This,Flags,OperationSet)) +#define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) ((This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)) +#define IXAudio2SourceVoice_FlushSourceBuffers(This) ((This)->lpVtbl->FlushSourceBuffers(This)) +#define IXAudio2SourceVoice_GetState(This,pVoiceState) ((This)->lpVtbl->GetState(This,pVoiceState)) +#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) ((This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)) +#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) ((This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)) + +#define XAUDIO2_COMMIT_NOW 0 +#define XAUDIO2_DEFAULT_PROCESSOR 0xffffffff +#define XAUDIO2_DEFAULT_FREQ_RATIO 2.0f + +// WASAPI extras. This is a hack, but Windows itself is a hack so I don't care +DEFINE_CLSID(MMDeviceEnumerator, bcde0395, e52f, 467c, 8e, 3d, c4, 57, 92, 91, 69, 2e); +DEFINE_IID(IMMDeviceEnumerator, a95664d2, 9614, 4f35, a7, 46, de, 8d, b6, 36, 17, e6); diff --git a/thirdparty/SameBoy-old/SDL/background.bmp b/thirdparty/SameBoy-old/SDL/background.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d356d24e5d6e55d123cfdf55fa7cbc4e938b7208 GIT binary patch literal 11592 zcmeHL%Z{8d5Hu(sfH~wmSc;TOej?jm?7bq&!x#yK>KBgIO2V z)$Ip-|M}ya@%Do9D~{hde&HC*CzQsFxc}v|9@3(%#$2ygbGzNl{eJiV*Nd(|SKvb_ zV2d_Qq_cya3x;Qrc-EC|Aqmc9I5(37AHX?B5-jkW^jRFi0>44;aRkr#E#oo@;!H(E zIpoUAe9?zpn3Or^H#zyiC;@ZKv~6(mgDp+?iF_(y8-606O4x><$|q$#zc846rSeHx z&(A8LR#89-?{$2)fKfmSZ<~J?p@qVWo*iIf!!!Ctkj+VJ zeiYt@$Np3&hj#H@@hbG2OjvC99OatwSK~Vje&puRNIZp@rm(q)h$cOt1wWG}nVRu? z;D?Q*GG68u`Yo~v9>sYU4_&a|0YAJHB7Clp>^e-A=_O#SS-rTw`1bruneE4K&%Z*p$ouyquc}$A)Xz?siF1H&W&V?eqQH-y|Kxo? zhgYee$XDXm=f6Tm_xUenVr~A(I87+&Oxh>BD;4BF-1-mu1A6?5PRYx3_LlVXTyjO_ z`sQPqE6Dxs8s8kXXY|Wa^KF&+_Ye7z`RC+o@wq|Z!=NfOyo2utc*QLmI!rP-m3zC00>;4mjD0& literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/SDL/configuration.c b/thirdparty/SameBoy-old/SDL/configuration.c new file mode 100644 index 000000000..35ad29952 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/configuration.c @@ -0,0 +1,54 @@ +#include "configuration.h" + +configuration_t configuration = +{ + .keys = { + SDL_SCANCODE_RIGHT, + SDL_SCANCODE_LEFT, + SDL_SCANCODE_UP, + SDL_SCANCODE_DOWN, + SDL_SCANCODE_X, + SDL_SCANCODE_Z, + SDL_SCANCODE_BACKSPACE, + SDL_SCANCODE_RETURN, + SDL_SCANCODE_SPACE + }, + .keys_2 = { + SDL_SCANCODE_TAB, + SDL_SCANCODE_LSHIFT, + }, + .joypad_configuration = { + 13, + 14, + 11, + 12, + 0, + 1, + 9, + 8, + 10, + 4, + -1, + 5, + // The rest are unmapped by default + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + }, + .joypad_axises = { + 0, + 1, + }, + .color_correction_mode = GB_COLOR_CORRECTION_MODERN_BALANCED, + .highpass_mode = GB_HIGHPASS_ACCURATE, + .scaling_mode = GB_SDL_SCALING_INTEGER_FACTOR, + .blending_mode = GB_FRAME_BLENDING_MODE_ACCURATE, + .rewind_length = 60 * 2, + .model = MODEL_CGB, + .volume = 100, + .rumble_mode = GB_RUMBLE_ALL_GAMES, + .default_scale = 2, + .color_temperature = 10, + .cgb_revision = GB_MODEL_CGB_E - GB_MODEL_CGB_0, + .dmg_palette = 1, // Replacing the old default (0) as of 0.15.2 + .agb_revision = GB_MODEL_AGB_A, +}; diff --git a/thirdparty/SameBoy-old/SDL/configuration.h b/thirdparty/SameBoy-old/SDL/configuration.h new file mode 100644 index 000000000..c328e3c9c --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/configuration.h @@ -0,0 +1,140 @@ +#ifndef configuration_h +#define configuration_h + +#include +#include +#include "shader.h" + +enum scaling_mode { + GB_SDL_SCALING_ENTIRE_WINDOW, + GB_SDL_SCALING_KEEP_RATIO, + GB_SDL_SCALING_INTEGER_FACTOR, + GB_SDL_SCALING_MAX, +}; + +typedef enum { + JOYPAD_BUTTON_RIGHT, + JOYPAD_BUTTON_LEFT, + JOYPAD_BUTTON_UP, + JOYPAD_BUTTON_DOWN, + JOYPAD_BUTTON_A, + JOYPAD_BUTTON_B, + JOYPAD_BUTTON_SELECT, + JOYPAD_BUTTON_START, + JOYPAD_BUTTON_MENU, + JOYPAD_BUTTON_TURBO, + JOYPAD_BUTTON_REWIND, + JOYPAD_BUTTON_SLOW_MOTION, + JOYPAD_BUTTON_HOTKEY_1, + JOYPAD_BUTTON_HOTKEY_2, + JOYPAD_BUTTONS_MAX +} joypad_button_t; + +typedef enum { + JOYPAD_AXISES_X, + JOYPAD_AXISES_Y, + JOYPAD_AXISES_MAX +} joypad_axis_t; + +typedef enum { + HOTKEY_NONE, + HOTKEY_PAUSE, + HOTKEY_MUTE, + HOTKEY_RESET, + HOTKEY_QUIT, + HOTKEY_SAVE_STATE_1, + HOTKEY_LOAD_STATE_1, + HOTKEY_SAVE_STATE_2, + HOTKEY_LOAD_STATE_2, + HOTKEY_SAVE_STATE_3, + HOTKEY_LOAD_STATE_3, + HOTKEY_SAVE_STATE_4, + HOTKEY_LOAD_STATE_4, + HOTKEY_SAVE_STATE_5, + HOTKEY_LOAD_STATE_5, + HOTKEY_SAVE_STATE_6, + HOTKEY_LOAD_STATE_6, + HOTKEY_SAVE_STATE_7, + HOTKEY_LOAD_STATE_7, + HOTKEY_SAVE_STATE_8, + HOTKEY_LOAD_STATE_8, + HOTKEY_SAVE_STATE_9, + HOTKEY_LOAD_STATE_9, + HOTKEY_SAVE_STATE_10, + HOTKEY_LOAD_STATE_10, + HOTKEY_MAX = HOTKEY_LOAD_STATE_10, +} hotkey_action_t; + +typedef struct { + SDL_Scancode keys[9]; + GB_color_correction_mode_t color_correction_mode; + enum scaling_mode scaling_mode; + uint8_t blending_mode; + + GB_highpass_mode_t highpass_mode; + + bool _deprecated_div_joystick; + bool _deprecated_flip_joystick_bit_1; + bool _deprecated_swap_joysticks_bits_1_and_2; + + char filter[32]; + enum { + MODEL_DMG, + MODEL_CGB, + MODEL_AGB, + MODEL_SGB, + MODEL_MGB, + MODEL_MAX, + } model; + + /* v0.11 */ + uint32_t rewind_length; + SDL_Scancode keys_2[32]; /* Rewind and underclock, + padding for the future */ + uint8_t joypad_configuration[32]; /* 14 Keys + padding for the future*/; + uint8_t joypad_axises[JOYPAD_AXISES_MAX]; + + /* v0.12 */ + enum { + SGB_NTSC, + SGB_PAL, + SGB_2, + SGB_MAX + } sgb_revision; + + /* v0.13 */ + uint8_t dmg_palette; + GB_border_mode_t border_mode; + uint8_t volume; + GB_rumble_mode_t rumble_mode; + + uint8_t default_scale; + + /* v0.14 */ + unsigned padding; + uint8_t color_temperature; + char bootrom_path[4096]; + uint8_t interference_volume; + GB_rtc_mode_t rtc_mode; + + /* v0.14.4 */ + bool osd; + + struct __attribute__((packed, aligned(4))) { + + /* v0.15 */ + bool allow_mouse_controls; + uint8_t cgb_revision; + /* v0.15.1 */ + char audio_driver[16]; + /* v0.15.2 */ + bool allow_background_controllers; + bool gui_pallete_enabled; // Change the GUI palette only once the user changed the DMG palette + char dmg_palette_name[25]; + hotkey_action_t hotkey_actions[2]; + uint16_t agb_revision; + }; +} configuration_t; + +extern configuration_t configuration; + +#endif diff --git a/thirdparty/SameBoy-old/SDL/console.c b/thirdparty/SameBoy-old/SDL/console.c new file mode 100644 index 000000000..295de96ca --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/console.c @@ -0,0 +1,1020 @@ +#include "console.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ESC(x) "\x1B" x +#define CSI(x) ESC("[" x) +#define SGR(x) CSI(x "m") + +static bool initialized = false; +typedef struct listent_s listent_t; + +struct listent_s { + listent_t *prev; + listent_t *next; + char content[]; +}; + +typedef struct { + listent_t *first; + listent_t *last; +} fifo_t; + +static fifo_t lines; +static fifo_t history; + +static void remove_entry(fifo_t *fifo, listent_t *entry) +{ + if (fifo->last == entry) { + fifo->last = entry->prev; + } + if (fifo->first == entry) { + fifo->first = entry->next; + } + if (entry->next) { + entry->next->prev = entry->prev; + } + if (entry->prev) { + entry->prev->next = entry->next; + } + free(entry); +} + +static void add_entry(fifo_t *fifo, const char *content) +{ + size_t length = strlen(content); + listent_t *entry = malloc(sizeof(*entry) + length + 1); + entry->next = NULL; + entry->prev = fifo->last; + memcpy(entry->content, content, length); + entry->content[length] = 0; + if (fifo->last) { + fifo->last->next = entry; + } + fifo->last = entry; + if (!fifo->first) { + fifo->first = entry; + } +} + +static listent_t *reverse_find(listent_t *entry, const char *string, bool exact) +{ + while (entry) { + if (exact && strcmp(entry->content, string) == 0) { + return entry; + } + if (!exact && strstr(entry->content, string)) { + return entry; + } + entry = entry->prev; + } + return NULL; +} + +static bool is_term(void) +{ + if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO)) return false; +#ifdef _WIN32 + if (AllocConsole()) { + FreeConsole(); + return false; + } + + unsigned long input_mode, output_mode; + + GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &input_mode); + GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &output_mode); + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); + + CONSOLE_SCREEN_BUFFER_INFO before = {0,}; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &before); + + printf(SGR("0")); + + CONSOLE_SCREEN_BUFFER_INFO after = {0,}; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &after); + + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), input_mode); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), output_mode); + + + if (before.dwCursorPosition.X != after.dwCursorPosition.X || + before.dwCursorPosition.Y != after.dwCursorPosition.Y) { + printf("\r \r"); + return false; + } + return true; +#else + return getenv("TERM"); +#endif +} + +static unsigned width, height; + +static char raw_getc(void) +{ +#ifdef _WIN32 + char c; + unsigned long ret; + ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &ret, NULL); +#else + ssize_t ret; + char c; + + do { + ret = read(STDIN_FILENO, &c, 1); + } while (ret == -1 && errno == EINTR); +#endif + return ret == 1? c : EOF; +} + +#ifdef _WIN32 +#pragma clang diagnostic ignored "-Wmacro-redefined" +#include + +static void update_size(void) +{ + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); + width = csbi.srWindow.Right - csbi.srWindow.Left + 1; + height = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +} + +static unsigned long input_mode, output_mode; + +static void cleanup(void) +{ + printf(CSI("!p")); // reset + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), input_mode); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), output_mode); + fflush(stdout); +} + +static bool initialize(void) +{ + if (!is_term()) return false; + update_size(); + if (width == 0 || height == 0) { + return false; + } + + static bool once = false; + if (!once) { + atexit(cleanup); + GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &input_mode); + GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &output_mode); + once = true; + } + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); + + printf(CSI("%dB") "\n" CSI("A") ESC("7") CSI("B"), height); + + fflush(stdout); + initialized = true; + return true; +} +#else +#include + +static void update_size(void) +{ + struct winsize winsize; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize); + width = winsize.ws_col; + height = winsize.ws_row; +} + +static void terminal_resized(int ignored) +{ + update_size(); +} + +#include +static struct termios terminal; + + +static void cleanup(void) +{ + printf(CSI("!p")); // reset + tcsetattr(STDIN_FILENO, TCSAFLUSH, &terminal); + fflush(stdout); +} + +static bool initialize(void) +{ + if (!is_term()) return false; + update_size(); + if (width == 0 || height == 0) { + return false; + } + + static bool once = false; + if (!once) { + atexit(cleanup); + signal(SIGWINCH, terminal_resized); + tcgetattr(STDIN_FILENO, &terminal); +#ifdef _WIN32 + _setmode(STDIN_FILENO, _O_TEXT); +#endif + once = true; + } + struct termios raw_terminal; + raw_terminal = terminal; + raw_terminal.c_lflag = 0; + tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw_terminal); + + printf(CSI("%dB") "\n" CSI("A") ESC("7") CSI("B"), height); + + fflush(stdout); + initialized = true; + return true; +} +#endif + +static struct { + char *content; + size_t allocation_size; + size_t length; + size_t position; + size_t scroll; + bool reverse_search; + listent_t *search_line; +} line; + +#define CTL(x) ((x) - 'A' + 1) + +static const char *prompt = ""; +static size_t prompt_length = 0; +static bool repeat_empty = false; + +static bool redraw_prompt(bool force) +{ + if (line.reverse_search) { + if (!force) return false; + if (line.length == 0) { + printf("\r" CSI("K") "%s" SGR("2") "Reverse Search..." SGR("0") CSI("%zuG"), prompt, prompt_length + 1); + return true; + } + if (!line.search_line) { + printf("\r" CSI("K") "%s" SGR("1") "%s" SGR("0"), prompt, line.content); + return true; + } + const char *loc = strstr(line.search_line->content, line.content); + printf("\r" CSI("K") "%s" "%.*s" SGR("1") "%s" SGR("0") "%s" CSI("%uG"), + prompt, + (int)(loc - line.search_line->content), + line.search_line->content, + line.content, + loc + line.length, + (unsigned)(loc - line.search_line->content + line.length + prompt_length + 1)); + return true; + } + + size_t max = width - 1 - prompt_length; + + if (line.scroll && line.length <= max) { + line.scroll = 0; + force = true; + } + + if (line.scroll > line.length - max) { + line.scroll = line.length - max; + force = true; + } + + if (line.position < line.scroll + 1 && line.position) { + line.scroll = line.position - 1; + force = true; + } + + if (line.position == 0 && line.scroll) { + line.scroll = 0; + force = true; + } + + if (line.position > line.scroll + max) { + line.scroll = line.position - max; + force = true; + } + + if (!force && line.length <= max) { + return false; + } + + if (line.length <= max) { + printf("\r" CSI("K") "%s%s" CSI("%uG"), prompt, line.content, (unsigned)(line.position + prompt_length + 1)); + return true; + } + + size_t left = max; + const char *string = line.content + line.scroll; + printf("\r" CSI("K") "%s", prompt); + if (line.scroll) { + printf(SGR("2") "%c" SGR("0"), *string); + string++; + left--; + } + if (line.scroll + max == line.length) { + printf("%s", string); + } + else { + printf("%.*s", (int)(left - 1), string); + string += left; + left = 1; + printf(SGR("2") "%c" SGR("0"), *string); + } + printf(CSI("%uG"), (unsigned)(line.position - line.scroll + prompt_length + 1)); + + return true; +} + +static void set_position(size_t position) +{ + if (position > line.length) { + printf("\a"); + return; + } + line.position = position; + if (!redraw_prompt(false)) { + printf(CSI("%uG"), (unsigned)(position + prompt_length + 1)); + } +} + +static void set_line(const char *content) +{ + line.length = strlen(content); + if (line.length + 1 > line.allocation_size) { + line.content = realloc(line.content, line.length + 1); + line.allocation_size = line.length + 1; + } + else if (line.allocation_size > 256 && line.length < 128) { + line.content = realloc(line.content, line.length + 1); + line.allocation_size = line.length + 1; + } + line.position = line.length; + strcpy(line.content, content); + redraw_prompt(true); +} + +static void insert(const char *string) +{ + size_t insertion_length = strlen(string); + size_t new_length = insertion_length + line.length; + bool need_realloc = false; + while (line.allocation_size < new_length + 1) { + line.allocation_size *= 2; + need_realloc = true; + } + if (need_realloc) { + line.content = realloc(line.content, line.allocation_size); + } + memmove(line.content + line.position + insertion_length, + line.content + line.position, + line.length - line.position); + memcpy(line.content + line.position, string, insertion_length); + line.position += insertion_length; + line.content[new_length] = 0; + line.length = new_length; + if (!redraw_prompt(line.position != line.length)) { + printf("%s", string); + } +} + +static void delete(size_t size, bool forward) +{ + if (line.length < size) { + printf("\a"); + return; + } + if (forward) { + if (line.position > line.length - size) { + printf("\a"); + return; + } + else { + line.position += size; + } + } + else if (line.position < size) { + printf("\a"); + return; + } + memmove(line.content + line.position - size, + line.content + line.position, + line.length - line.position); + line.length -= size; + line.content[line.length] = 0; + line.position -= size; + + if (!redraw_prompt(line.position != line.length)) { + printf(CSI("%uG") CSI("K"), + (unsigned)(line.position + prompt_length + 1)); + } +} + +static void move_word(bool forward) +{ + signed offset = forward? 1 : -1; + size_t end = forward? line.length : 0; + signed check_offset = forward? 0 : -1; + if (line.position == end) { + printf("\a"); + return; + } + line.position += offset; + while (line.position != end && isalnum(line.content[line.position + check_offset])) { + line.position += offset; + } + if (!redraw_prompt(false)) { + printf(CSI("%uG"), (unsigned)(line.position + prompt_length + 1)); + } +} + +static void delete_word(bool forward) +{ + size_t original_pos = line.position; + signed offset = forward? 1 : -1; + size_t end = forward? line.length : 0; + signed check_offset = forward? 0 : -1; + if (line.position == end) { + printf("\a"); + return; + } + line.position += offset; + while (line.position != end && isalnum(line.content[line.position + check_offset])) { + line.position += offset; + } + if (forward) { + delete(line.position - original_pos, false); + } + else { + delete(original_pos - line.position, true); + } +} + +#define MOD_ALT(x) (0x100 | x) +#define MOD_SHIFT(x) (0x200 | x) +#define MOD_CTRL(x) (0x400 | x) +#define MOD_SPECIAL(x) (0x800 | x) + +static unsigned get_extended_key(void) +{ + unsigned modifiers = 0; + char c = 0; +restart: + c = raw_getc(); + if (c == 0x1B) { + modifiers = MOD_SHIFT(MOD_ALT(0)); + goto restart; + } + else if (c != '[' && c != 'O') { + return MOD_ALT(c); + } + unsigned ret = 0; + while (true) { + c = raw_getc(); + if (c >= '0' && c <= '9') { + ret = ret * 10 + c - '0'; + } + else if (c == ';') { + if (ret == 1) { + modifiers |= MOD_ALT(0); + } + else if (ret == 2) { + modifiers |= MOD_SHIFT(0); + } + else if (ret == 5) { + modifiers |= MOD_CTRL(0); + } + ret = 0; + } + else if (c == '~') { + return MOD_SPECIAL(ret) | modifiers; + } + else { + if (ret == 1) { + modifiers |= MOD_ALT(0); + } + else if (ret == 2) { + modifiers |= MOD_SHIFT(0); + } + else if (ret == 5) { + modifiers |= MOD_CTRL(0); + } + return c | modifiers; + } + } +} + +#define SWAP(x, y) do {typeof(*(x)) _tmp = *(x); *(x) = *(y);*(y) = _tmp;} while (0) +static pthread_mutex_t terminal_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t lines_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t lines_cond = PTHREAD_COND_INITIALIZER; + +static char reverse_search_mainloop(void) +{ + while (true) { + char c = raw_getc(); + pthread_mutex_lock(&terminal_lock); + + switch (c) { + case CTL('C'): + line.search_line = NULL; + set_line(""); + pthread_mutex_unlock(&terminal_lock); + return CTL('A'); + case CTL('R'): + line.search_line = reverse_find(line.search_line? line.search_line->prev : history.last, line.content, false); + if (!line.search_line) { + printf("\a"); + } + redraw_prompt(true); + break; + case CTL('W'): + delete_word(false); + redraw_prompt(true); + break; +#ifndef _WIN32 + case CTL('Z'): + set_line(""); + raise(SIGSTOP); + initialize(); // Reinitialize + redraw_prompt(true); + break; +#endif + case CTL('H'): + case 0x7F: // Backspace + delete(1, false); + redraw_prompt(true); + break; + default: + if (c >= ' ') { + char string[2] = {c, 0}; + insert(string); + line.search_line = reverse_find(line.search_line?: history.last, line.content, false); + if (!line.search_line) { + printf("\a"); + } + redraw_prompt(true); + } + else { + pthread_mutex_unlock(&terminal_lock); + return c; + } + break; + } + pthread_mutex_unlock(&terminal_lock); + fflush(stdout); + } + +} + + +static +#ifdef _WIN32 +int __stdcall +#else +void * +#endif +mainloop(char *(*completer)(const char *substring, uintptr_t *context)) +{ + listent_t *history_line = NULL; + uintptr_t complete_context = 0; + size_t completion_length = 0; + while (true) { + char c; + if (line.reverse_search) { + c = reverse_search_mainloop(); + line.reverse_search = false; + if (line.search_line) { + size_t pos = strstr(line.search_line->content, line.content) - line.search_line->content + line.length; + set_line(line.search_line->content); + line.search_line = NULL; + set_position(pos); + } + else { + redraw_prompt(true); + } + } + else { + c = raw_getc(); + } + pthread_mutex_lock(&terminal_lock); + + switch (c) { + case CTL('A'): + set_position(0); + complete_context = completion_length = 0; + break; + case CTL('B'): + set_position(line.position - 1); + complete_context = completion_length = 0; + break; + case CTL('C'): + if (line.length) { + set_line(""); + history_line = NULL; + complete_context = completion_length = 0; + } + else { +#ifdef _WIN32 + raise(SIGINT); +#else + kill(getpid(), SIGINT); +#endif + } + break; + case CTL('D'): + if (line.length) { + delete(1, true); + complete_context = completion_length = 0; + } + else { + pthread_mutex_lock(&lines_lock); + add_entry(&lines, CON_EOF); + pthread_cond_signal(&lines_cond); + pthread_mutex_unlock(&lines_lock); + } + break; + case CTL('E'): + set_position(line.length); + complete_context = completion_length = 0; + break; + case CTL('F'): + set_position(line.position + 1); + complete_context = completion_length = 0; + break; + case CTL('K'): + printf(CSI("K")); + if (!redraw_prompt(false)) { + line.length = line.position; + line.content[line.length] = 0; + } + complete_context = completion_length = 0; + break; + case CTL('R'): + complete_context = completion_length = 0; + line.reverse_search = true; + set_line(""); + + break; + case CTL('T'): + if (line.length < 2) { + printf("\a"); + break; + } + if (line.position && line.position == line.length) { + line.position--; + } + if (line.position == 0) { + printf("\a"); + break; + } + SWAP(line.content + line.position, + line.content + line.position - 1); + line.position++; + redraw_prompt(true); + complete_context = completion_length = 0; + break; + case CTL('W'): + delete_word(false); + complete_context = completion_length = 0; + break; +#ifndef _WIN32 + case CTL('Z'): + set_line(""); + complete_context = completion_length = 0; + raise(SIGSTOP); + initialize(); // Reinitialize + break; +#endif + case '\r': + case '\n': + pthread_mutex_lock(&lines_lock); + if (line.length == 0 && repeat_empty && history.last) { + add_entry(&lines, history.last->content); + } + else { + add_entry(&lines, line.content); + } + pthread_cond_signal(&lines_cond); + pthread_mutex_unlock(&lines_lock); + if (line.length) { + listent_t *dup = reverse_find(history.last, line.content, true); + if (dup) { + remove_entry(&history, dup); + } + add_entry(&history, line.content); + set_line(""); + history_line = NULL; + } + complete_context = completion_length = 0; + break; + case CTL('H'): + case 0x7F: // Backspace + delete(1, false); + complete_context = completion_length = 0; + break; + case 0x1B: + switch (get_extended_key()) { + case MOD_SPECIAL(1): // Home + case MOD_SPECIAL(7): + case 'H': + set_position(0); + complete_context = completion_length = 0; + break; + case MOD_SPECIAL(8): // End + case 'F': + set_position(line.length); + complete_context = completion_length = 0; + break; + case MOD_SPECIAL(3): // Delete + delete(1, true); + complete_context = completion_length = 0; + break; + case 'A': // Up + if (!history_line) { + history_line = history.last; + } + else { + history_line = history_line->prev; + } + if (history_line) { + set_line(history_line->content); + complete_context = completion_length = 0; + } + else { + history_line = history.first; + printf("\a"); + } + + break; + case 'B': // Down + if (!history_line) { + printf("\a"); + break; + } + history_line = history_line->next; + if (history_line) { + set_line(history_line->content); + complete_context = completion_length = 0; + } + else { + set_line(""); + complete_context = completion_length = 0; + } + break; + case 'C': // Right + set_position(line.position + 1); + complete_context = completion_length = 0; + break; + case 'D': // Left + set_position(line.position - 1); + complete_context = completion_length = 0; + break; + case MOD_ALT('b'): + case MOD_ALT('D'): + move_word(false); + complete_context = completion_length = 0; + break; + case MOD_ALT('f'): + case MOD_ALT('C'): + move_word(true); + complete_context = completion_length = 0; + break; + case MOD_ALT(0x7F): // ALT+Backspace + delete_word(false); + complete_context = completion_length = 0; + break; + case MOD_ALT('('): // ALT+Delete + delete_word(true); + complete_context = completion_length = 0; + break; + default: + printf("\a"); + break; + } + break; + case '\t': { + char temp = line.content[line.position - completion_length]; + line.content[line.position - completion_length] = 0; + char *completion = completer? completer(line.content, &complete_context) : NULL; + line.content[line.position - completion_length] = temp; + if (completion) { + if (completion_length) { + delete(completion_length, false); + } + insert(completion); + completion_length = strlen(completion); + free(completion); + } + else { + printf("\a"); + } + break; + } + default: + if (c >= ' ') { + char string[2] = {c, 0}; + insert(string); + complete_context = completion_length = 0; + } + else { + printf("\a"); + } + break; + } + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); + } + return 0; +} + +char *CON_readline(const char *new_prompt) +{ + pthread_mutex_lock(&terminal_lock); + const char *old_prompt = prompt; + prompt = new_prompt; + prompt_length = strlen(prompt); + redraw_prompt(true); + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); + + pthread_mutex_lock(&lines_lock); + while (!lines.first) { + pthread_cond_wait(&lines_cond, &lines_lock); + } + char *ret = strdup(lines.first->content); + remove_entry(&lines, lines.first); + pthread_mutex_unlock(&lines_lock); + + pthread_mutex_lock(&terminal_lock); + prompt = old_prompt; + prompt_length = strlen(prompt); + redraw_prompt(true); + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); + return ret; +} + +char *CON_readline_async(void) +{ + char *ret = NULL; + pthread_mutex_lock(&lines_lock); + if (lines.first) { + ret = strdup(lines.first->content); + remove_entry(&lines, lines.first); + } + pthread_mutex_unlock(&lines_lock); + return ret; +} + +bool CON_start(char *(*completer)(const char *substring, uintptr_t *context)) +{ + if (!initialize()) { + return false; + } + set_line(""); + pthread_t thread; + return pthread_create(&thread, NULL, (void *)mainloop, completer) == 0; +} + +void CON_attributed_print(const char *string, CON_attributes_t *attributes) +{ + if (!initialized) { + printf("%s", string); + return; + } + static bool pending_newline = false; + pthread_mutex_lock(&terminal_lock); + printf(ESC("8")); + bool needs_reset = false; + if (attributes) { + if (attributes->color) { + if (attributes->color >= 0x10) { + printf(SGR("%d"), attributes->color - 0x11 + 90); + } + else { + printf(SGR("%d"), attributes->color - 1 + 30); + } + needs_reset = true; + } + if (attributes->background) { + if (attributes->background >= 0x10) { + printf(SGR("%d"), attributes->background - 0x11 + 100); + } + else { + printf(SGR("%d"), attributes->background - 1 + 40); + } + needs_reset = true; + } + if (attributes->bold) { + printf(SGR("1")); + needs_reset = true; + } + if (attributes->italic) { + printf(SGR("3")); + needs_reset = true; + } + if (attributes->underline) { + printf(SGR("4")); + needs_reset = true; + } + } + const char *it = string; + bool need_redraw_prompt = false; + while (*it) { + if (pending_newline) { + need_redraw_prompt = true; + printf("\n" CSI("K") "\n" CSI("A")); + pending_newline = false; + continue; + } + if (*it == '\n') { + printf("%.*s", (int)(it - string), string); + string = it + 1; + pending_newline = true; + } + it++; + } + if (*string) { + printf("%s", string); + } + if (needs_reset) { + printf(SGR("0")); + } + printf(ESC("7") CSI("B")); + if (need_redraw_prompt) { + redraw_prompt(true); + } + else { + set_position(line.position); + } + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); +} + +void CON_print(const char *string) +{ + CON_attributed_print(string, NULL); +} + +void CON_vprintf(const char *fmt, va_list args) +{ + char *string = NULL; + vasprintf(&string, fmt, args); + CON_attributed_print(string, NULL); + free(string); +} + +void CON_attributed_vprintf(const char *fmt, CON_attributes_t *attributes, va_list args) +{ + char *string = NULL; + vasprintf(&string, fmt, args); + CON_attributed_print(string, attributes); + free(string); +} + +void CON_printf(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + CON_vprintf(fmt, args); + va_end(args); +} + + +void CON_attributed_printf(const char *fmt, CON_attributes_t *attributes,...) +{ + va_list args; + va_start(args, attributes); + CON_attributed_vprintf(fmt, attributes, args); + va_end(args); +} + +void CON_set_async_prompt(const char *string) +{ + pthread_mutex_lock(&terminal_lock); + prompt = string; + prompt_length = strlen(string); + redraw_prompt(true); + fflush(stdout); + pthread_mutex_unlock(&terminal_lock); +} + +void CON_set_repeat_empty(bool repeat) +{ + repeat_empty = repeat; +} diff --git a/thirdparty/SameBoy-old/SDL/console.h b/thirdparty/SameBoy-old/SDL/console.h new file mode 100644 index 000000000..d15898888 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/console.h @@ -0,0 +1,49 @@ +#include +#include +#include + +#define CON_EOF "\x04" +bool CON_start(char *(*completer)(const char *substring, uintptr_t *context)); +char *CON_readline(const char *prompt); +char *CON_readline_async(void); + +typedef struct { + enum { + CON_COLOR_NONE = 0, + CON_COLOR_BLACK, + CON_COLOR_RED, + CON_COLOR_GREEN, + CON_COLOR_YELLOW, + CON_COLOR_BLUE, + CON_COLOR_MAGENTA, + CON_COLOR_CYAN, + CON_COLOR_LIGHT_GREY, + + CON_COLOR_DARK_GREY = CON_COLOR_BLACK + 0x10, + CON_COLOR_BRIGHT_RED = CON_COLOR_RED + 0x10, + CON_COLOR_BRIGHT_GREEN = CON_COLOR_GREEN + 0x10, + CON_COLOR_BRIGHT_YELLOW = CON_COLOR_YELLOW + 0x10, + CON_COLOR_BRIGHT_BLUE = CON_COLOR_BLUE + 0x10, + CON_COLOR_BRIGHT_MAGENTA = CON_COLOR_MAGENTA + 0x10, + CON_COLOR_BRIGHT_CYAN = CON_COLOR_CYAN + 0x10, + CON_COLOR_WHITE = CON_COLOR_LIGHT_GREY + 0x10, + } color:8, background:8; + bool bold; + bool italic; + bool underline; +} CON_attributes_t; + +#ifndef __printflike +/* Missing from Linux headers. */ +#define __printflike(fmtarg, firstvararg) \ +__attribute__((__format__ (__printf__, fmtarg, firstvararg))) +#endif + +void CON_print(const char *string); +void CON_attributed_print(const char *string, CON_attributes_t *attributes); +void CON_vprintf(const char *fmt, va_list args); +void CON_attributed_vprintf(const char *fmt, CON_attributes_t *attributes, va_list args); +void CON_printf(const char *fmt, ...) __printflike(1, 2); +void CON_attributed_printf(const char *fmt, CON_attributes_t *attributes,...) __printflike(1, 3); +void CON_set_async_prompt(const char *string); +void CON_set_repeat_empty(bool repeat); diff --git a/thirdparty/SameBoy-old/SDL/font.c b/thirdparty/SameBoy-old/SDL/font.c new file mode 100644 index 000000000..ea2c590cb --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/font.c @@ -0,0 +1,1124 @@ +#include "font.h" + +#define _ 0 +#define X 1 + +uint8_t font[] = { + /* */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* ! */ + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* " */ + X, X, _, X, X, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* # */ + _, X, _, X, _, _, + _, X, _, X, _, _, + X, X, X, X, X, _, + _, X, _, X, _, _, + X, X, X, X, X, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + _, _, _, _, _, _, + + /* $ */ + _, _, X, _, _, _, + _, X, X, X, _, _, + X, _, X, _, X, _, + _, X, X, _, _, _, + _, _, X, X, _, _, + X, _, X, _, X, _, + _, X, X, X, _, _, + _, _, X, _, _, _, + + /* % */ + _, _, _, _, _, _, + X, X, _, _, _, X, + X, X, _, _, X, _, + _, _, _, X, _, _, + _, _, X, _, _, _, + _, X, _, _, X, X, + X, _, _, _, X, X, + _, _, _, _, _, _, + + /* & */ + _, X, X, _, _, _, + X, _, _, X, _, _, + X, _, _, X, _, _, + _, X, X, _, X, _, + X, _, _, X, _, _, + X, _, _, X, _, _, + _, X, X, _, X, _, + _, _, _, _, _, _, + + /* ' */ + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* ( */ + _, _, _, X, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, _, X, _, _, _, + _, _, _, X, _, _, + + /* ) */ + _, X, _, _, _, _, + _, _, X, _, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + + /* * */ + _, _, _, _, _, _, + _, _, X, _, _, _, + X, _, X, _, X, _, + _, X, X, X, _, _, + X, _, X, _, X, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* + */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + X, X, X, X, X, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /*, */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + + /* - */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* . */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* / */ + _, _, _, _, X, _, + _, _, _, _, X, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + + /* 0 */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* 1 */ + _, _, X, _, _, _, + X, X, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + + /* 2 */ + _, X, X, X, _, _, + X, _, _, _, X, _, + _, _, _, _, X, _, + _, _, X, X, _, _, + _, X, _, _, _, _, + X, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + + /* 3 */ + _, X, X, X, _, _, + X, _, _, _, X, _, + _, _, _, _, X, _, + _, _, X, X, _, _, + _, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* 4 */ + _, _, _, X, _, _, + _, _, X, X, _, _, + _, X, _, X, _, _, + X, _, _, X, _, _, + X, X, X, X, X, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, _, _, _, + + /* 5 */ + X, X, X, X, X, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, X, X, X, _, _, + _, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* 6 */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, _, _, + X, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* 7 */ + X, X, X, X, X, _, + _, _, _, _, X, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* 8 */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* 9 */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, X, _, + _, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* : */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* ; */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + + /* < */ + _, _, _, _, _, _, + _, _, _, _, X, _, + _, _, X, X, _, _, + X, X, _, _, _, _, + X, X, _, _, _, _, + _, _, X, X, _, _, + _, _, _, _, X, _, + _, _, _, _, _, _, + + /* = */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* > */ + _, _, _, _, _, _, + X, _, _, _, _, _, + _, X, X, _, _, _, + _, _, _, X, X, _, + _, _, _, X, X, _, + _, X, X, _, _, _, + X, _, _, _, _, _, + _, _, _, _, _, _, + + /* ? */ + _, X, X, X, _, _, + X, _, _, _, X, _, + _, _, _, _, X, _, + _, _, X, X, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* @ */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, X, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + X, _, _, X, X, _, + X, _, _, _, _, _, + _, X, X, X, X, _, + + /* A */ + _, _, X, _, _, _, + _, _, X, _, _, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* B */ + X, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, _, _, + _, _, _, _, _, _, + + /* C */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* D */ + X, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, _, _, + _, _, _, _, _, _, + + /* E */ + X, X, X, X, X, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, X, X, X, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + + /* F */ + X, X, X, X, X, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, X, X, X, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + _, _, _, _, _, _, + + /* G */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, _, _, + X, _, X, X, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* H */ + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* I */ + X, X, X, X, X, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + + /* J */ + _, _, X, X, X, _, + _, _, _, _, X, _, + _, _, _, _, X, _, + _, _, _, _, X, _, + _, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* K */ + X, _, _, _, X, _, + X, _, _, X, _, _, + X, _, X, _, _, _, + X, X, _, _, _, _, + X, _, X, _, _, _, + X, _, _, X, _, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* L */ + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + + /* M */ + X, _, _, _, X, _, + X, X, _, X, X, _, + X, X, _, X, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* N */ + X, _, _, _, X, _, + X, X, _, _, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + X, _, _, X, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* O */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* P */ + X, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + _, _, _, _, _, _, + + /* Q */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, X, _, X, _, + _, X, X, X, _, _, + _, _, _, _, X, X, + + /* R */ + X, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, _, _, + X, _, X, _, _, _, + X, _, _, X, _, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* S */ + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, _, _, + _, X, X, X, _, _, + _, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* T */ + X, X, X, X, X, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* U */ + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* V */ + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* W */ + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + X, X, _, X, X, _, + X, X, _, X, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* X */ + X, _, _, _, X, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + _, _, X, _, _, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* Y */ + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, _, X, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* Z */ + X, X, X, X, X, _, + _, _, _, _, X, _, + _, _, _, X, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + X, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + + /* [ */ + _, X, X, X, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, X, X, _, _, + + /* \ */ + _, X, _, _, _, _, + _, X, _, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, _, X, _, + _, _, _, _, X, _, + + /* ] */ + _, X, X, X, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, X, X, X, _, _, + + /* ^ */ + _, _, X, _, _, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* _ */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, X, X, X, + + /* ` */ + _, X, _, _, _, _, + _, _, X, _, _, _, + _, _, _, X, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* a */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, X, _, _, _, + _, _, _, X, _, _, + _, X, X, X, _, _, + X, _, _, X, _, _, + _, X, X, _, X, _, + _, _, _, _, _, _, + + /* b */ + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, X, X, _, _, + X, X, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, _, _, + _, _, _, _, _, _, + + /* c */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, _, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* d */ + _, _, _, _, X, _, + _, _, _, _, X, _, + _, X, X, X, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, X, _, + _, _, _, _, _, _, + + /* e */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, X, X, _, _, + X, _, _, _, X, _, + X, X, X, X, X, _, + X, _, _, _, _, _, + _, X, X, X, X, _, + _, _, _, _, _, _, + + /* f */ + _, _, X, X, _, _, + _, X, _, _, _, _, + X, X, X, X, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, _, _, _, _, _, + + /* g */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, X, X, X, _, + X, _, _, X, _, _, + _, X, X, _, _, _, + _, _, _, X, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + + /* h */ + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, X, X, _, _, + X, X, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* i */ + _, _, X, _, _, _, + _, _, _, _, _, _, + X, X, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* j */ + _, _, X, _, _, _, + _, _, _, _, _, _, + X, X, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + X, X, _, _, _, _, + + /* k */ + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, X, _, + X, _, X, X, _, _, + X, X, _, _, _, _, + X, _, X, X, _, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* l */ + X, X, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, X, X, _, + _, _, _, _, _, _, + + /* m */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, X, _, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + _, _, _, _, _, _, + + /* n */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, _, X, X, _, _, + X, X, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* o */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, X, X, _, _, + _, _, _, _, _, _, + + /* p */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, X, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, _, _, X, _, + X, _, X, X, _, _, + X, _, _, _, _, _, + + /* q */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, X, X, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, X, X, _, + _, X, X, _, X, _, + _, _, _, _, X, _, + + /* r */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, _, X, _, _, + _, X, X, _, X, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, _, _, _, _, _, + + /* s */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, X, X, X, X, _, + X, _, _, _, _, _, + _, X, X, X, _, _, + _, _, _, _, X, _, + X, X, X, X, _, _, + _, _, _, _, _, _, + + /* t */ + _, _, _, _, _, _, + _, X, _, _, _, _, + X, X, X, X, X, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, _, X, X, X, _, + _, _, _, _, _, _, + + /* u */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, X, X, _, + _, X, X, _, X, _, + _, _, _, _, _, _, + + /* v */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* w */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, _, _, _, X, _, + X, _, X, _, X, _, + X, _, X, _, X, _, + _, X, _, X, _, _, + _, X, _, X, _, _, + _, _, _, _, _, _, + + /* x */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, _, _, _, X, _, + _, X, _, X, _, _, + _, _, X, _, _, _, + _, X, _, X, _, _, + X, _, _, _, X, _, + _, _, _, _, _, _, + + /* y */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, X, X, _, + _, X, X, _, X, _, + _, _, _, _, X, _, + _, X, X, X, _, _, + + /* z */ + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, X, X, _, + _, _, _, X, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + X, X, X, X, X, _, + _, _, _, _, _, _, + + /* { */ + _, _, X, X, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, X, _, _, _, _, + _, X, _, _, _, _, + _, _, X, X, _, _, + + /* | */ + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + + /* } */ + _, X, X, _, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, X, _, _, + _, _, _, X, _, _, + _, X, X, _, _, _, + + /* ~ */ + _, _, _, _, _, X, + _, _, _, _, _, _, + _, _, X, _, _, X, + _, X, _, X, _, X, + _, X, _, _, X, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* Custom characters */ + /* Selection */ + _, X, _, _, _, _, + _, X, X, _, _, _, + _, X, X, X, _, _, + _, X, X, X, X, _, + _, X, X, X, _, _, + _, X, X, _, _, _, + _, X, _, _, _, _, + _, _, _, _, _, _, + + + /* CTRL symbol */ + _, X, X, _, _, X, + X, _, _, X, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, _, _, _, + X, _, _, X, _, _, + _, X, X, _, _, _, + _, _, _, _, _, _, + + X, X, _, X, X, X, + X, _, _, X, _, _, + X, _, _, X, _, _, + X, _, _, X, _, _, + X, _, _, X, X, X, + X, _, _, X, _, X, + X, _, _, X, _, _, + _, _, _, _, _, _, + + _, _, X, _, _, _, + X, _, X, _, _, _, + X, _, X, _, _, _, + X, _, X, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + X, _, X, X, X, X, + _, _, _, _, _, _, + + /* Shift symbol */ + _, _, X, X, _, _, + _, X, X, X, X, _, + X, X, X, X, X, X, + _, X, X, X, X, _, + _, X, X, X, X, _, + _, X, X, X, X, _, + _, X, X, X, X, _, + _, _, _, _, _, _, + + /* Cmd symbol */ + + _, _, _, _, _, X, + _, _, _, _, X, _, + _, _, _, _, _, X, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, X, + _, _, _, _, X, _, + _, _, _, _, _, X, + + _, _, _, _, X, _, + X, _, _, X, _, X, + X, X, X, X, X, _, + X, _, _, X, _, _, + X, _, _, X, _, _, + X, X, X, X, X, _, + X, _, _, X, _, X, + _, _, _, _, X, _, + + /* Left Arrow */ + _, _, _, _, X, _, + _, _, _, X, X, _, + _, _, X, X, X, _, + _, X, X, X, X, _, + _, _, X, X, X, _, + _, _, _, X, X, _, + _, _, _, _, X, _, + _, _, _, _, _, _, + + /* Elipsis */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + X, _, X, _, X, _, + _, _, _, _, _, _, + + /* Mojibake */ + X, X, X, X, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, X, X, _, + + /* Slider */ + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, X, X, X, X, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, X, X, X, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + X, X, X, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, + + /* Slider, selected */ + _, X, X, X, _, _, + _, X, X, X, _, _, + _, X, X, X, _, _, + _, X, X, X, X, X, + _, X, X, X, _, _, + _, X, X, X, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + _, X, X, X, _, _, + _, X, X, X, _, _, + _, X, X, X, _, _, + X, X, X, X, X, X, + _, X, X, X, _, _, + _, X, X, X, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + _, X, X, X, _, _, + _, X, X, X, _, _, + _, X, X, X, _, _, + X, X, X, X, _, _, + _, X, X, X, _, _, + _, X, X, X, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + + /* Slider, tick*/ + _, _, _, _, _, _, + _, _, X, _, _, _, + _, _, X, _, _, _, + X, X, X, X, X, X, + _, _, X, _, _, _, + _, _, X, _, _, _, + _, _, _, _, _, _, + _, _, _, _, _, _, +}; + +const uint8_t font_max = sizeof(font) / GLYPH_HEIGHT / GLYPH_WIDTH + ' '; diff --git a/thirdparty/SameBoy-old/SDL/font.h b/thirdparty/SameBoy-old/SDL/font.h new file mode 100644 index 000000000..e7f8e2a0c --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/font.h @@ -0,0 +1,20 @@ +#ifndef font_h +#define font_h + +#include +extern uint8_t font[]; +extern const uint8_t font_max; +#define GLYPH_HEIGHT 8 +#define GLYPH_WIDTH 6 +#define LEFT_ARROW_STRING "\x86" +#define RIGHT_ARROW_STRING "\x7F" +#define SELECTION_STRING RIGHT_ARROW_STRING +#define CTRL_STRING "\x80\x81\x82" +#define SHIFT_STRING "\x83" +#define CMD_STRING "\x84\x85" +#define ELLIPSIS_STRING "\x87" +#define MOJIBAKE_STRING "\x88" +#define SLIDER_STRING "\x89\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8F\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8B" +#define SELECTED_SLIDER_STRING "\x8C\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8E" +#endif /* font_h */ + diff --git a/thirdparty/SameBoy-old/SDL/gui.c b/thirdparty/SameBoy-old/SDL/gui.c new file mode 100644 index 000000000..befea12ca --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/gui.c @@ -0,0 +1,2152 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "gui.h" +#include "font.h" +#include "audio/audio.h" + +static const SDL_Color gui_palette[4] = {{8, 24, 16,}, {57, 97, 57,}, {132, 165, 99}, {198, 222, 140}}; +static uint32_t gui_palette_native[4]; + +SDL_Window *window = NULL; +SDL_Renderer *renderer = NULL; +SDL_Texture *texture = NULL; +SDL_PixelFormat *pixel_format = NULL; +enum pending_command pending_command; +unsigned command_parameter; +char *dropped_state_file = NULL; + +static char **custom_palettes; +static unsigned n_custom_palettes; + + +#ifdef __APPLE__ +#define MODIFIER_NAME " " CMD_STRING +#else +#define MODIFIER_NAME CTRL_STRING +#endif + +shader_t shader; +static SDL_Rect rect; +static unsigned factor; + +static SDL_Surface *converted_background = NULL; + +void render_texture(void *pixels, void *previous) +{ + if (renderer) { + if (pixels) { + SDL_UpdateTexture(texture, NULL, pixels, GB_get_screen_width(&gb) * sizeof (uint32_t)); + } + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); + } + else { + static void *_pixels = NULL; + if (pixels) { + _pixels = pixels; + } + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + GB_frame_blending_mode_t mode = configuration.blending_mode; + if (!previous) { + mode = GB_FRAME_BLENDING_MODE_DISABLED; + } + else if (mode == GB_FRAME_BLENDING_MODE_ACCURATE) { + if (GB_is_sgb(&gb)) { + mode = GB_FRAME_BLENDING_MODE_SIMPLE; + } + else { + mode = GB_is_odd_frame(&gb)? GB_FRAME_BLENDING_MODE_ACCURATE_ODD : GB_FRAME_BLENDING_MODE_ACCURATE_EVEN; + } + } + render_bitmap_with_shader(&shader, _pixels, previous, + GB_get_screen_width(&gb), GB_get_screen_height(&gb), + rect.x, rect.y, rect.w, rect.h, + mode); + SDL_GL_SwapWindow(window); + } +} + +static const char *help[] = { +"Drop a ROM to play.\n" +"\n" +"Keyboard Shortcuts:\n" +" Open Menu: Escape\n" +" Open ROM: " MODIFIER_NAME "+O\n" +" Reset: " MODIFIER_NAME "+R\n" +" Pause: " MODIFIER_NAME "+P\n" +" Save state: " MODIFIER_NAME "+(0-9)\n" +" Load state: " MODIFIER_NAME "+" SHIFT_STRING "+(0-9)\n" +" Toggle Fullscreen " MODIFIER_NAME "+F\n" +#ifdef __APPLE__ +" Mute/Unmute: " MODIFIER_NAME "+" SHIFT_STRING "+M\n" +#else +" Mute/Unmute: " MODIFIER_NAME "+M\n" +#endif +" Break Debugger: " CTRL_STRING "+C" +}; + +void update_viewport(void) +{ + int win_width, win_height; + SDL_GL_GetDrawableSize(window, &win_width, &win_height); + int logical_width, logical_height; + SDL_GetWindowSize(window, &logical_width, &logical_height); + factor = win_width / logical_width; + + double x_factor = win_width / (double) GB_get_screen_width(&gb); + double y_factor = win_height / (double) GB_get_screen_height(&gb); + + if (configuration.scaling_mode == GB_SDL_SCALING_INTEGER_FACTOR) { + x_factor = (unsigned)(x_factor); + y_factor = (unsigned)(y_factor); + } + + if (configuration.scaling_mode != GB_SDL_SCALING_ENTIRE_WINDOW) { + if (x_factor > y_factor) { + x_factor = y_factor; + } + else { + y_factor = x_factor; + } + } + + unsigned new_width = x_factor * GB_get_screen_width(&gb); + unsigned new_height = y_factor * GB_get_screen_height(&gb); + + rect = (SDL_Rect){(win_width - new_width) / 2, (win_height - new_height) /2, + new_width, new_height}; + + if (renderer) { + SDL_RenderSetViewport(renderer, &rect); + } + else { + glViewport(rect.x, rect.y, rect.w, rect.h); + } +} + +static void rescale_window(void) +{ + SDL_SetWindowSize(window, GB_get_screen_width(&gb) * configuration.default_scale, GB_get_screen_height(&gb) * configuration.default_scale); +} + +static void draw_char(uint32_t *buffer, unsigned width, unsigned height, unsigned char ch, uint32_t color, uint32_t *mask_top, uint32_t *mask_bottom) +{ + if (ch < ' ' || ch > font_max) { + ch = '?'; + } + + uint8_t *data = &font[(ch - ' ') * GLYPH_WIDTH * GLYPH_HEIGHT]; + + for (unsigned y = GLYPH_HEIGHT; y--;) { + for (unsigned x = GLYPH_WIDTH; x--;) { + if (*(data++) && buffer >= mask_top && buffer < mask_bottom) { + (*buffer) = color; + } + buffer++; + } + buffer += width - GLYPH_WIDTH; + } +} + +static signed scroll = 0; +static void draw_unbordered_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, bool is_osd) +{ + if (!is_osd) { + y -= scroll; + } + unsigned orig_x = x; + unsigned y_offset = is_osd? 0 : (GB_get_screen_height(&gb) - 144) / 2; + while (*string) { + if (*string == '\n') { + x = orig_x; + y += GLYPH_HEIGHT + 4; + string++; + continue; + } + + if (x > width - GLYPH_WIDTH) { + break; + } + + draw_char(&buffer[(signed)(x + width * y)], width, height, *string, color, &buffer[width * y_offset], &buffer[width * (is_osd? GB_get_screen_height(&gb) : y_offset + 144)]); + x += GLYPH_WIDTH; + string++; + } +} + +void draw_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, uint32_t border, bool is_osd) +{ + draw_unbordered_text(buffer, width, height, x - 1, y, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x + 1, y, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x, y - 1, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x, y + 1, string, border, is_osd); + draw_unbordered_text(buffer, width, height, x, y, string, color, is_osd); +} + +const char *osd_text = NULL; +unsigned osd_countdown = 0; +unsigned osd_text_lines = 1; + +void show_osd_text(const char *text) +{ + osd_text_lines = 1; + osd_text = text; + osd_countdown = 30; + while (*text++) { + if (*text == '\n') { + osd_text_lines++; + osd_countdown += 30; + } + } +} + + +enum decoration { + DECORATION_NONE, + DECORATION_SELECTION, + DECORATION_ARROWS, +}; + +static void draw_text_centered(uint32_t *buffer, unsigned width, unsigned height, unsigned y, const char *string, uint32_t color, uint32_t border, enum decoration decoration) +{ + unsigned x = width / 2 - (unsigned) strlen(string) * GLYPH_WIDTH / 2; + draw_text(buffer, width, height, x, y, string, color, border, false); + switch (decoration) { + case DECORATION_SELECTION: + draw_text(buffer, width, height, x - GLYPH_WIDTH, y, SELECTION_STRING, color, border, false); + break; + case DECORATION_ARROWS: + draw_text(buffer, width, height, x - GLYPH_WIDTH, y, LEFT_ARROW_STRING, color, border, false); + draw_text(buffer, width, height, width - x, y, RIGHT_ARROW_STRING, color, border, false); + break; + + case DECORATION_NONE: + break; + } +} + +struct menu_item { + const char *string; + void (*handler)(unsigned); + const char *(*value_getter)(unsigned); + void (*backwards_handler)(unsigned); +}; +static const struct menu_item *current_menu = NULL; +static const struct menu_item *root_menu = NULL; +static unsigned menu_height; +static unsigned scrollbar_size; +static bool mouse_scroling = false; + +static unsigned current_selection = 0; + +static enum { + SHOWING_DROP_MESSAGE, + SHOWING_MENU, + SHOWING_HELP, + WAITING_FOR_KEY, + WAITING_FOR_JBUTTON, +} gui_state; + +static unsigned joypad_configuration_progress = 0; +static uint8_t joypad_axis_temp; + +static void item_exit(unsigned index) +{ + pending_command = GB_SDL_QUIT_COMMAND; +} + +static unsigned current_help_page = 0; +static void item_help(unsigned index) +{ + current_help_page = 0; + gui_state = SHOWING_HELP; +} + +static void enter_emulation_menu(unsigned index); +static void enter_graphics_menu(unsigned index); +static void enter_keyboard_menu(unsigned index); +static void enter_joypad_menu(unsigned index); +static void enter_audio_menu(unsigned index); +static void enter_controls_menu(unsigned index); +static void toggle_audio_recording(unsigned index); + +extern void set_filename(const char *new_filename, typeof(free) *new_free_function); +static void open_rom(unsigned index) +{ + char *filename = do_open_rom_dialog(); + if (filename) { + set_filename(filename, free); + pending_command = GB_SDL_NEW_FILE_COMMAND; + } +} + +static void recalculate_menu_height(void) +{ + menu_height = 24; + scrollbar_size = 0; + if (gui_state == SHOWING_MENU) { + for (const struct menu_item *item = current_menu; item->string; item++) { + menu_height += 12; + if (item->backwards_handler) { + menu_height += 12; + } + } + } + if (menu_height > 144) { + scrollbar_size = 144 * 140 / menu_height; + } +} + +static char audio_recording_menu_item[] = "Start Audio Recording"; + +static const struct menu_item paused_menu[] = { + {"Resume", NULL}, + {"Open ROM", open_rom}, + {"Emulation Options", enter_emulation_menu}, + {"Graphic Options", enter_graphics_menu}, + {"Audio Options", enter_audio_menu}, + {"Control Options", enter_controls_menu}, + {audio_recording_menu_item, toggle_audio_recording}, + {"Help", item_help}, + {"Quit SameBoy", item_exit}, + {NULL,} +}; + +static const struct menu_item *const nonpaused_menu = &paused_menu[1]; + +static void return_to_root_menu(unsigned index) +{ + current_menu = root_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static void cycle_model(unsigned index) +{ + + configuration.model++; + if (configuration.model == MODEL_MAX) { + configuration.model = 0; + } + pending_command = GB_SDL_RESET_COMMAND; +} + +static void cycle_model_backwards(unsigned index) +{ + if (configuration.model == 0) { + configuration.model = MODEL_MAX; + } + configuration.model--; + pending_command = GB_SDL_RESET_COMMAND; +} + +static const char *current_model_string(unsigned index) +{ + return (const char *[]){"Game Boy", "Game Boy Color", "Game Boy Advance", "Super Game Boy", "Game Boy Pocket"} + [configuration.model]; +} + +static void cycle_cgb_revision(unsigned index) +{ + + if (configuration.cgb_revision == GB_MODEL_CGB_E - GB_MODEL_CGB_0) { + configuration.cgb_revision = 0; + } + else { + configuration.cgb_revision++; + } + pending_command = GB_SDL_RESET_COMMAND; +} + +static void cycle_cgb_revision_backwards(unsigned index) +{ + if (configuration.cgb_revision == 0) { + configuration.cgb_revision = GB_MODEL_CGB_E - GB_MODEL_CGB_0; + } + else { + configuration.cgb_revision--; + } + pending_command = GB_SDL_RESET_COMMAND; +} + +static const char *current_cgb_revision_string(unsigned index) +{ + return (const char *[]){ + "CPU CGB 0 (Exp.)", + "CPU CGB A (Exp.)", + "CPU CGB B (Exp.)", + "CPU CGB C (Exp.)", + "CPU CGB D", + "CPU CGB E", + } + [configuration.cgb_revision]; +} + +static void cycle_sgb_revision(unsigned index) +{ + + configuration.sgb_revision++; + if (configuration.sgb_revision == SGB_MAX) { + configuration.sgb_revision = 0; + } + pending_command = GB_SDL_RESET_COMMAND; +} + +static void cycle_sgb_revision_backwards(unsigned index) +{ + if (configuration.sgb_revision == 0) { + configuration.sgb_revision = SGB_MAX; + } + configuration.sgb_revision--; + pending_command = GB_SDL_RESET_COMMAND; +} + +static const char *current_sgb_revision_string(unsigned index) +{ + return (const char *[]){"Super Game Boy NTSC", "Super Game Boy PAL", "Super Game Boy 2"} + [configuration.sgb_revision]; +} + +static const uint32_t rewind_lengths[] = {0, 10, 30, 60, 60 * 2, 60 * 5, 60 * 10}; +static const char *rewind_strings[] = {"Disabled", + "10 Seconds", + "30 Seconds", + "1 Minute", + "2 Minutes", + "5 Minutes", + "10 Minutes", +}; + +static void cycle_rewind(unsigned index) +{ + for (unsigned i = 0; i < sizeof(rewind_lengths) / sizeof(rewind_lengths[0]) - 1; i++) { + if (configuration.rewind_length == rewind_lengths[i]) { + configuration.rewind_length = rewind_lengths[i + 1]; + GB_set_rewind_length(&gb, configuration.rewind_length); + return; + } + } + configuration.rewind_length = rewind_lengths[0]; + GB_set_rewind_length(&gb, configuration.rewind_length); +} + +static void cycle_rewind_backwards(unsigned index) +{ + for (unsigned i = 1; i < sizeof(rewind_lengths) / sizeof(rewind_lengths[0]); i++) { + if (configuration.rewind_length == rewind_lengths[i]) { + configuration.rewind_length = rewind_lengths[i - 1]; + GB_set_rewind_length(&gb, configuration.rewind_length); + return; + } + } + configuration.rewind_length = rewind_lengths[sizeof(rewind_lengths) / sizeof(rewind_lengths[0]) - 1]; + GB_set_rewind_length(&gb, configuration.rewind_length); +} + +static const char *current_rewind_string(unsigned index) +{ + for (unsigned i = 0; i < sizeof(rewind_lengths) / sizeof(rewind_lengths[0]); i++) { + if (configuration.rewind_length == rewind_lengths[i]) { + return rewind_strings[i]; + } + } + return "Custom"; +} + +static const char *current_bootrom_string(unsigned index) +{ + if (!configuration.bootrom_path[0]) { + return "Built-in Boot ROMs"; + } + size_t length = strlen(configuration.bootrom_path); + static char ret[24] = {0,}; + if (length <= 23) { + strcpy(ret, configuration.bootrom_path); + } + else { + memcpy(ret, configuration.bootrom_path, 11); + memcpy(ret + 12, configuration.bootrom_path + length - 11, 11); + } + for (unsigned i = 0; i < 24; i++) { + if (ret[i] < 0) { + ret[i] = MOJIBAKE_STRING[0]; + } + } + if (length > 23) { + ret[11] = ELLIPSIS_STRING[0]; + } + return ret; +} + +static void toggle_bootrom(unsigned index) +{ + if (configuration.bootrom_path[0]) { + configuration.bootrom_path[0] = 0; + } + else { + char *folder = do_open_folder_dialog(); + if (!folder) return; + if (strlen(folder) < sizeof(configuration.bootrom_path) - 1) { + strcpy(configuration.bootrom_path, folder); + } + free(folder); + } +} + +static void toggle_rtc_mode(unsigned index) +{ + configuration.rtc_mode = !configuration.rtc_mode; +} + +static const char *current_rtc_mode_string(unsigned index) +{ + switch (configuration.rtc_mode) { + case GB_RTC_MODE_SYNC_TO_HOST: return "Sync to System Clock"; + case GB_RTC_MODE_ACCURATE: return "Accurate"; + } + return ""; +} + +static void cycle_agb_revision(unsigned index) +{ + + configuration.agb_revision ^= GB_MODEL_GBP_BIT; + pending_command = GB_SDL_RESET_COMMAND; +} + +static const char *current_agb_revision_string(unsigned index) +{ + if (configuration.agb_revision == GB_MODEL_GBP_A) { + return "CPU AGB A (GBP)"; + } + return "CPU AGB A (AGB)"; +} + +static const struct menu_item emulation_menu[] = { + {"Emulated Model:", cycle_model, current_model_string, cycle_model_backwards}, + {"SGB Revision:", cycle_sgb_revision, current_sgb_revision_string, cycle_sgb_revision_backwards}, + {"GBC Revision:", cycle_cgb_revision, current_cgb_revision_string, cycle_cgb_revision_backwards}, + {"GBA Revision:", cycle_agb_revision, current_agb_revision_string, cycle_agb_revision}, + {"Boot ROMs Folder:", toggle_bootrom, current_bootrom_string, toggle_bootrom}, + {"Rewind Length:", cycle_rewind, current_rewind_string, cycle_rewind_backwards}, + {"Real Time Clock:", toggle_rtc_mode, current_rtc_mode_string, toggle_rtc_mode}, + {"Back", return_to_root_menu}, + {NULL,} +}; + +static void enter_emulation_menu(unsigned index) +{ + current_menu = emulation_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static const char *current_scaling_mode(unsigned index) +{ + return (const char *[]){"Fill Entire Window", "Retain Aspect Ratio", "Retain Integer Factor"} + [configuration.scaling_mode]; +} + +static const char *current_default_scale(unsigned index) +{ + return (const char *[]){"1x", "2x", "3x", "4x", "5x", "6x", "7x", "8x"} + [configuration.default_scale - 1]; +} + +const char *current_color_correction_mode(unsigned index) +{ + return (const char *[]){"Disabled", "Correct Color Curves", "Modern - Balanced", "Modern - Boost Contrast", "Reduce Contrast", "Harsh Reality", "Modern - Accurate"} + [configuration.color_correction_mode]; +} + +const char *current_color_temperature(unsigned index) +{ + static char ret[22]; + strcpy(ret, SLIDER_STRING); + ret[configuration.color_temperature] = SELECTED_SLIDER_STRING[configuration.color_temperature]; + return ret; +} + + +const char *current_palette(unsigned index) +{ + if (configuration.dmg_palette == 4) { + return configuration.dmg_palette_name; + } + return (const char *[]){"Greyscale", "Lime (Game Boy)", "Olive (Pocket)", "Teal (Light)"} + [configuration.dmg_palette]; +} + +const char *current_border_mode(unsigned index) +{ + return (const char *[]){"SGB Only", "Never", "Always"} + [configuration.border_mode]; +} + +static void cycle_scaling(unsigned index) +{ + configuration.scaling_mode++; + if (configuration.scaling_mode == GB_SDL_SCALING_MAX) { + configuration.scaling_mode = 0; + } + update_viewport(); + render_texture(NULL, NULL); +} + +static void cycle_scaling_backwards(unsigned index) +{ + if (configuration.scaling_mode == 0) { + configuration.scaling_mode = GB_SDL_SCALING_MAX - 1; + } + else { + configuration.scaling_mode--; + } + update_viewport(); + render_texture(NULL, NULL); +} + +static void cycle_default_scale(unsigned index) +{ + if (configuration.default_scale == GB_SDL_DEFAULT_SCALE_MAX) { + configuration.default_scale = 1; + } + else { + configuration.default_scale++; + } + + rescale_window(); + update_viewport(); +} + +static void cycle_default_scale_backwards(unsigned index) +{ + if (configuration.default_scale == 1) { + configuration.default_scale = GB_SDL_DEFAULT_SCALE_MAX; + } + else { + configuration.default_scale--; + } + + rescale_window(); + update_viewport(); +} + +static void cycle_color_correction(unsigned index) +{ + if (configuration.color_correction_mode == GB_COLOR_CORRECTION_LOW_CONTRAST) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_DISABLED; + } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_BALANCED) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_ACCURATE; + } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_ACCURATE) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST; + } + else { + configuration.color_correction_mode++; + } +} + +static void cycle_color_correction_backwards(unsigned index) +{ + if (configuration.color_correction_mode == GB_COLOR_CORRECTION_DISABLED) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_LOW_CONTRAST; + } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_ACCURATE) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_BALANCED; + } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_ACCURATE; + } + else { + configuration.color_correction_mode--; + } +} + +static void decrease_color_temperature(unsigned index) +{ + if (configuration.color_temperature < 20) { + configuration.color_temperature++; + } +} + +static void increase_color_temperature(unsigned index) +{ + if (configuration.color_temperature > 0) { + configuration.color_temperature--; + } +} + +const GB_palette_t *current_dmg_palette(void) +{ + typedef struct __attribute__ ((packed)) { + uint32_t magic; + uint8_t flags; + struct GB_color_s colors[5]; + int32_t brightness_bias; + uint32_t hue_bias; + uint32_t hue_bias_strength; + } theme_t; + + static theme_t theme; + + if (configuration.dmg_palette == 4) { + char *path = resource_path("Palettes"); + sprintf(path + strlen(path), "/%s.sbp", configuration.dmg_palette_name); + FILE *file = fopen(path, "rb"); + if (!file) return &GB_PALETTE_GREY; + memset(&theme, 0, sizeof(theme)); + fread(&theme, sizeof(theme), 1, file); + fclose(file); +#ifdef GB_BIG_ENDIAN + theme.magic = __builtin_bswap32(theme.magic); +#endif + if (theme.magic != 'SBPL') return &GB_PALETTE_GREY; + return (GB_palette_t *)&theme.colors; + } + + switch (configuration.dmg_palette) { + case 1: return &GB_PALETTE_DMG; + case 2: return &GB_PALETTE_MGB; + case 3: return &GB_PALETTE_GBL; + default: return &GB_PALETTE_GREY; + } +} + +static void update_gui_palette(void) +{ + const GB_palette_t *palette = current_dmg_palette(); + + SDL_Color colors[4]; + for (unsigned i = 4; i--; ) { + gui_palette_native[i] = SDL_MapRGB(pixel_format, palette->colors[i].r, palette->colors[i].g, palette->colors[i].b); + colors[i].r = palette->colors[i].r; + colors[i].g = palette->colors[i].g; + colors[i].b = palette->colors[i].b; + } + + SDL_Surface *background = SDL_LoadBMP(resource_path("background.bmp")); + + /* Create a blank background if background.bmp could not be loaded */ + if (!background) { + background = SDL_CreateRGBSurface(0, 160, 144, 8, 0, 0, 0, 0); + } + SDL_SetPaletteColors(background->format->palette, colors, 0, 4); + converted_background = SDL_ConvertSurface(background, pixel_format, 0); + SDL_FreeSurface(background); +} + +static void cycle_palette(unsigned index) +{ + if (configuration.dmg_palette == 3) { + if (n_custom_palettes == 0) { + configuration.dmg_palette = 0; + } + else { + configuration.dmg_palette = 4; + strcpy(configuration.dmg_palette_name, custom_palettes[0]); + } + } + else if (configuration.dmg_palette == 4) { + for (unsigned i = 0; i < n_custom_palettes; i++) { + if (strcmp(custom_palettes[i], configuration.dmg_palette_name) == 0) { + if (i == n_custom_palettes - 1) { + configuration.dmg_palette = 0; + } + else { + strcpy(configuration.dmg_palette_name, custom_palettes[i + 1]); + } + break; + } + } + } + else { + configuration.dmg_palette++; + } + configuration.gui_pallete_enabled = true; + update_gui_palette(); +} + +static void cycle_palette_backwards(unsigned index) +{ + if (configuration.dmg_palette == 0) { + if (n_custom_palettes == 0) { + configuration.dmg_palette = 3; + } + else { + configuration.dmg_palette = 4; + strcpy(configuration.dmg_palette_name, custom_palettes[n_custom_palettes - 1]); + } + } + else if (configuration.dmg_palette == 4) { + for (unsigned i = 0; i < n_custom_palettes; i++) { + if (strcmp(custom_palettes[i], configuration.dmg_palette_name) == 0) { + if (i == 0) { + configuration.dmg_palette = 3; + } + else { + strcpy(configuration.dmg_palette_name, custom_palettes[i - 1]); + } + break; + } + } + } + else { + configuration.dmg_palette--; + } + configuration.gui_pallete_enabled = true; + update_gui_palette(); +} + +static void cycle_border_mode(unsigned index) +{ + if (configuration.border_mode == GB_BORDER_ALWAYS) { + configuration.border_mode = GB_BORDER_SGB; + } + else { + configuration.border_mode++; + } +} + +static void cycle_border_mode_backwards(unsigned index) +{ + if (configuration.border_mode == GB_BORDER_SGB) { + configuration.border_mode = GB_BORDER_ALWAYS; + } + else { + configuration.border_mode--; + } +} + +extern bool uses_gl(void); +struct shader_name { + const char *file_name; + const char *display_name; +} shaders[] = +{ + {"NearestNeighbor", "Nearest Neighbor"}, + {"Bilinear", "Bilinear"}, + {"SmoothBilinear", "Smooth Bilinear"}, + {"MonoLCD", "Monochrome LCD"}, + {"LCD", "LCD Display"}, + {"CRT", "CRT Display"}, + {"Scale2x", "Scale2x"}, + {"Scale4x", "Scale4x"}, + {"AAScale2x", "Anti-aliased Scale2x"}, + {"AAScale4x", "Anti-aliased Scale4x"}, + {"HQ2x", "HQ2x"}, + {"OmniScale", "OmniScale"}, + {"OmniScaleLegacy", "OmniScale Legacy"}, + {"AAOmniScaleLegacy", "AA OmniScale Legacy"}, +}; + +static void cycle_filter(unsigned index) +{ + if (!uses_gl()) return; + unsigned i = 0; + for (; i < sizeof(shaders) / sizeof(shaders[0]); i++) { + if (strcmp(shaders[i].file_name, configuration.filter) == 0) { + break; + } + } + + + i += 1; + if (i >= sizeof(shaders) / sizeof(shaders[0])) { + i -= sizeof(shaders) / sizeof(shaders[0]); + } + + strcpy(configuration.filter, shaders[i].file_name); + free_shader(&shader); + if (!init_shader_with_name(&shader, configuration.filter)) { + init_shader_with_name(&shader, "NearestNeighbor"); + } +} + +static void cycle_filter_backwards(unsigned index) +{ + if (!uses_gl()) return; + unsigned i = 0; + for (; i < sizeof(shaders) / sizeof(shaders[0]); i++) { + if (strcmp(shaders[i].file_name, configuration.filter) == 0) { + break; + } + } + + i -= 1; + if (i >= sizeof(shaders) / sizeof(shaders[0])) { + i = sizeof(shaders) / sizeof(shaders[0]) - 1; + } + + strcpy(configuration.filter, shaders[i].file_name); + free_shader(&shader); + if (!init_shader_with_name(&shader, configuration.filter)) { + init_shader_with_name(&shader, "NearestNeighbor"); + } + +} +static const char *current_filter_name(unsigned index) +{ + if (!uses_gl()) return "Requires OpenGL 3.2+"; + unsigned i = 0; + for (; i < sizeof(shaders) / sizeof(shaders[0]); i++) { + if (strcmp(shaders[i].file_name, configuration.filter) == 0) { + break; + } + } + + if (i == sizeof(shaders) / sizeof(shaders[0])) { + i = 0; + } + + return shaders[i].display_name; +} + +static void cycle_blending_mode(unsigned index) +{ + if (!uses_gl()) return; + if (configuration.blending_mode == GB_FRAME_BLENDING_MODE_ACCURATE) { + configuration.blending_mode = GB_FRAME_BLENDING_MODE_DISABLED; + } + else { + configuration.blending_mode++; + } +} + +static void cycle_blending_mode_backwards(unsigned index) +{ + if (!uses_gl()) return; + if (configuration.blending_mode == GB_FRAME_BLENDING_MODE_DISABLED) { + configuration.blending_mode = GB_FRAME_BLENDING_MODE_ACCURATE; + } + else { + configuration.blending_mode--; + } +} + +static const char *blending_mode_string(unsigned index) +{ + if (!uses_gl()) return "Requires OpenGL 3.2+"; + return (const char *[]){"Disabled", "Simple", "Accurate"} + [configuration.blending_mode]; +} + +static void toggle_osd(unsigned index) +{ + osd_countdown = 0; + configuration.osd = !configuration.osd; +} + +static const char *current_osd_mode(unsigned index) +{ + return configuration.osd? "Enabled" : "Disabled"; +} + +static const struct menu_item graphics_menu[] = { + {"Scaling Mode:", cycle_scaling, current_scaling_mode, cycle_scaling_backwards}, + {"Default Window Scale:", cycle_default_scale, current_default_scale, cycle_default_scale_backwards}, + {"Scaling Filter:", cycle_filter, current_filter_name, cycle_filter_backwards}, + {"Color Correction:", cycle_color_correction, current_color_correction_mode, cycle_color_correction_backwards}, + {"Ambient Light Temp.:", decrease_color_temperature, current_color_temperature, increase_color_temperature}, + {"Frame Blending:", cycle_blending_mode, blending_mode_string, cycle_blending_mode_backwards}, + {"Mono Palette:", cycle_palette, current_palette, cycle_palette_backwards}, + {"Display Border:", cycle_border_mode, current_border_mode, cycle_border_mode_backwards}, + {"On-Screen Display:", toggle_osd, current_osd_mode, toggle_osd}, + + {"Back", return_to_root_menu}, + {NULL,} +}; + +static void enter_graphics_menu(unsigned index) +{ + current_menu = graphics_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static const char *highpass_filter_string(unsigned index) +{ + return (const char *[]){"None (Keep DC Offset)", "Accurate", "Preserve Waveform"} + [configuration.highpass_mode]; +} + +static void cycle_highpass_filter(unsigned index) +{ + configuration.highpass_mode++; + if (configuration.highpass_mode == GB_HIGHPASS_MAX) { + configuration.highpass_mode = 0; + } +} + +static void cycle_highpass_filter_backwards(unsigned index) +{ + if (configuration.highpass_mode == 0) { + configuration.highpass_mode = GB_HIGHPASS_MAX - 1; + } + else { + configuration.highpass_mode--; + } +} + +static const char *volume_string(unsigned index) +{ + static char ret[5]; + sprintf(ret, "%d%%", configuration.volume); + return ret; +} + +static void increase_volume(unsigned index) +{ + configuration.volume += 5; + if (configuration.volume > 100) { + configuration.volume = 100; + } +} + +static void decrease_volume(unsigned index) +{ + configuration.volume -= 5; + if (configuration.volume > 100) { + configuration.volume = 0; + } +} + +static const char *interference_volume_string(unsigned index) +{ + static char ret[5]; + sprintf(ret, "%d%%", configuration.interference_volume); + return ret; +} + +static void increase_interference_volume(unsigned index) +{ + configuration.interference_volume += 5; + if (configuration.interference_volume > 100) { + configuration.interference_volume = 100; + } +} + +static void decrease_interference_volume(unsigned index) +{ + configuration.interference_volume -= 5; + if (configuration.interference_volume > 100) { + configuration.interference_volume = 0; + } +} + +static const char *audio_driver_string(unsigned index) +{ + return GB_audio_driver_name(); +} + +static const char *preferred_audio_driver_string(unsigned index) +{ + if (configuration.audio_driver[0] == 0) { + return "Auto"; + } + return configuration.audio_driver; +} + +static void audio_driver_changed(void); + +static void cycle_prefrered_audio_driver(unsigned index) +{ + audio_driver_changed(); + if (configuration.audio_driver[0] == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(0)); + return; + } + unsigned i = 0; + while (true) { + const char *name = GB_audio_driver_name_at_index(i); + if (name[0] == 0) { // Not a supported driver? Switch to auto + configuration.audio_driver[0] = 0; + return; + } + if (strcmp(configuration.audio_driver, name) == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(i + 1)); + return; + } + i++; + } +} + +static void cycle_preferred_audio_driver_backwards(unsigned index) +{ + audio_driver_changed(); + if (configuration.audio_driver[0] == 0) { + unsigned i = 0; + while (true) { + const char *name = GB_audio_driver_name_at_index(i); + if (name[0] == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(i - 1)); + return; + } + i++; + } + return; + } + unsigned i = 0; + while (true) { + const char *name = GB_audio_driver_name_at_index(i); + if (name[0] == 0) { // Not a supported driver? Switch to auto + configuration.audio_driver[0] = 0; + return; + } + if (strcmp(configuration.audio_driver, name) == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(i - 1)); + return; + } + i++; + } +} + +static void nop(unsigned index){} + +static struct menu_item audio_menu[] = { + {"Highpass Filter:", cycle_highpass_filter, highpass_filter_string, cycle_highpass_filter_backwards}, + {"Volume:", increase_volume, volume_string, decrease_volume}, + {"Interference Volume:", increase_interference_volume, interference_volume_string, decrease_interference_volume}, + {"Preferred Audio Driver:", cycle_prefrered_audio_driver, preferred_audio_driver_string, cycle_preferred_audio_driver_backwards}, + {"Active Driver:", nop, audio_driver_string}, + {"Back", return_to_root_menu}, + {NULL,} +}; + +static void audio_driver_changed(void) +{ + audio_menu[4].value_getter = NULL; + audio_menu[4].string = "Relaunch to apply"; +} + +static void enter_audio_menu(unsigned index) +{ + current_menu = audio_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static void modify_key(unsigned index) +{ + gui_state = WAITING_FOR_KEY; +} + +static const char *key_name(unsigned index); + +static const struct menu_item keyboard_menu[] = { + {"Right:", modify_key, key_name,}, + {"Left:", modify_key, key_name,}, + {"Up:", modify_key, key_name,}, + {"Down:", modify_key, key_name,}, + {"A:", modify_key, key_name,}, + {"B:", modify_key, key_name,}, + {"Select:", modify_key, key_name,}, + {"Start:", modify_key, key_name,}, + {"Turbo:", modify_key, key_name,}, + {"Rewind:", modify_key, key_name,}, + {"Slow-Motion:", modify_key, key_name,}, + {"Back", enter_controls_menu}, + {NULL,} +}; + +static const char *key_name(unsigned index) +{ + if (index > 8) { + return SDL_GetScancodeName(configuration.keys_2[index - 9]); + } + return SDL_GetScancodeName(configuration.keys[index]); +} + +static void enter_keyboard_menu(unsigned index) +{ + current_menu = keyboard_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static unsigned joypad_index = 0; +static SDL_Joystick *joystick = NULL; +static SDL_GameController *controller = NULL; +SDL_Haptic *haptic = NULL; + +static const char *current_joypad_name(unsigned index) +{ + static char name[23] = {0,}; + const char *orig_name = joystick? SDL_JoystickName(joystick) : NULL; + if (!orig_name) return "Not Found"; + unsigned i = 0; + + // SDL returns a name with repeated and trailing spaces + while (*orig_name && i < sizeof(name) - 2) { + if (orig_name[0] != ' ' || orig_name[1] != ' ') { + name[i++] = *orig_name > 0? *orig_name : MOJIBAKE_STRING[0]; + } + orig_name++; + } + if (i && name[i - 1] == ' ') { + i--; + } + name[i] = 0; + + return name; +} + +static void cycle_joypads(unsigned index) +{ + joypad_index++; + if (joypad_index >= SDL_NumJoysticks()) { + joypad_index = 0; + } + + if (haptic) { + SDL_HapticClose(haptic); + haptic = NULL; + } + + if (controller) { + SDL_GameControllerClose(controller); + controller = NULL; + } + else if (joystick) { + SDL_JoystickClose(joystick); + joystick = NULL; + } + if ((controller = SDL_GameControllerOpen(joypad_index))) { + joystick = SDL_GameControllerGetJoystick(controller); + } + else { + joystick = SDL_JoystickOpen(joypad_index); + } + if (joystick) { + haptic = SDL_HapticOpenFromJoystick(joystick); + }} + +static void cycle_joypads_backwards(unsigned index) +{ + joypad_index--; + if (joypad_index >= SDL_NumJoysticks()) { + joypad_index = SDL_NumJoysticks() - 1; + } + + if (haptic) { + SDL_HapticClose(haptic); + haptic = NULL; + } + + if (controller) { + SDL_GameControllerClose(controller); + controller = NULL; + } + else if (joystick) { + SDL_JoystickClose(joystick); + joystick = NULL; + } + if ((controller = SDL_GameControllerOpen(joypad_index))) { + joystick = SDL_GameControllerGetJoystick(controller); + } + else { + joystick = SDL_JoystickOpen(joypad_index); + } + if (joystick) { + haptic = SDL_HapticOpenFromJoystick(joystick); + }} + +static void detect_joypad_layout(unsigned index) +{ + gui_state = WAITING_FOR_JBUTTON; + joypad_configuration_progress = 0; + joypad_axis_temp = -1; +} + +static void cycle_rumble_mode(unsigned index) +{ + if (configuration.rumble_mode == GB_RUMBLE_ALL_GAMES) { + configuration.rumble_mode = GB_RUMBLE_DISABLED; + } + else { + configuration.rumble_mode++; + } +} + +static void cycle_rumble_mode_backwards(unsigned index) +{ + if (configuration.rumble_mode == GB_RUMBLE_DISABLED) { + configuration.rumble_mode = GB_RUMBLE_ALL_GAMES; + } + else { + configuration.rumble_mode--; + } +} + +static const char *current_rumble_mode(unsigned index) +{ + return (const char *[]){"Disabled", "Rumble Game Paks Only", "All Games"} + [configuration.rumble_mode]; +} + +static void toggle_allow_background_controllers(unsigned index) +{ + configuration.allow_background_controllers ^= true; + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + configuration.allow_background_controllers? "1" : "0"); +} + +static const char *current_background_control_mode(unsigned index) +{ + return configuration.allow_background_controllers? "Always" : "During Window Focus Only"; +} + +static void cycle_hotkey(unsigned index) +{ + if (configuration.hotkey_actions[index - 2] == HOTKEY_MAX) { + configuration.hotkey_actions[index - 2] = 0; + } + else { + configuration.hotkey_actions[index - 2]++; + } +} + +static void cycle_hotkey_backwards(unsigned index) +{ + if (configuration.hotkey_actions[index - 2] == 0) { + configuration.hotkey_actions[index - 2] = HOTKEY_MAX; + } + else { + configuration.hotkey_actions[index - 2]--; + } +} + +static const char *current_hotkey(unsigned index) +{ + return (const char *[]){ + "None", + "Toggle Pause", + "Toggle Mute", + "Reset", + "Quit SameBoy", + "Save State Slot 1", + "Load State Slot 1", + "Save State Slot 2", + "Load State Slot 2", + "Save State Slot 3", + "Load State Slot 3", + "Save State Slot 4", + "Load State Slot 4", + "Save State Slot 5", + "Load State Slot 5", + "Save State Slot 6", + "Load State Slot 6", + "Save State Slot 7", + "Load State Slot 7", + "Save State Slot 8", + "Load State Slot 8", + "Save State Slot 9", + "Load State Slot 9", + "Save State Slot 10", + "Load State Slot 10", + } + [configuration.hotkey_actions[index - 2]]; +} + +static const struct menu_item joypad_menu[] = { + {"Joypad:", cycle_joypads, current_joypad_name, cycle_joypads_backwards}, + {"Configure layout", detect_joypad_layout}, + {"Hotkey 1 Action:", cycle_hotkey, current_hotkey, cycle_hotkey_backwards}, + {"Hotkey 2 Action:", cycle_hotkey, current_hotkey, cycle_hotkey_backwards}, + {"Rumble Mode:", cycle_rumble_mode, current_rumble_mode, cycle_rumble_mode_backwards}, + {"Enable Control:", toggle_allow_background_controllers, current_background_control_mode, toggle_allow_background_controllers}, + {"Back", enter_controls_menu}, + {NULL,} +}; + +static void enter_joypad_menu(unsigned index) +{ + current_menu = joypad_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +joypad_button_t get_joypad_button(uint8_t physical_button) +{ + for (unsigned i = 0; i < JOYPAD_BUTTONS_MAX; i++) { + if (configuration.joypad_configuration[i] == physical_button) { + return i; + } + } + return JOYPAD_BUTTONS_MAX; +} + +joypad_axis_t get_joypad_axis(uint8_t physical_axis) +{ + for (unsigned i = 0; i < JOYPAD_AXISES_MAX; i++) { + if (configuration.joypad_axises[i] == physical_axis) { + return i; + } + } + return JOYPAD_AXISES_MAX; +} + + +void connect_joypad(void) +{ + if (joystick && !SDL_NumJoysticks()) { + if (controller) { + SDL_GameControllerClose(controller); + controller = NULL; + joystick = NULL; + } + else { + SDL_JoystickClose(joystick); + joystick = NULL; + } + } + else if (!joystick && SDL_NumJoysticks()) { + if ((controller = SDL_GameControllerOpen(0))) { + joystick = SDL_GameControllerGetJoystick(controller); + } + else { + joystick = SDL_JoystickOpen(0); + } + } + if (joystick) { + haptic = SDL_HapticOpenFromJoystick(joystick); + } +} + +static void toggle_mouse_control(unsigned index) +{ + configuration.allow_mouse_controls = !configuration.allow_mouse_controls; +} + +static const char *mouse_control_string(unsigned index) +{ + return configuration.allow_mouse_controls? "Allow mouse control" : "Disallow mouse control"; +} + +static const struct menu_item controls_menu[] = { + {"Keyboard Options", enter_keyboard_menu}, + {"Joypad Options", enter_joypad_menu}, + {"Motion-controlled games:", toggle_mouse_control, mouse_control_string, toggle_mouse_control}, + {"Back", return_to_root_menu}, + {NULL,} +}; + +static void enter_controls_menu(unsigned index) +{ + current_menu = controls_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static void toggle_audio_recording(unsigned index) +{ + if (!GB_is_inited(&gb)) { + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", "Cannot start audio recording, open a ROM file first.", window); + return; + } + static bool is_recording = false; + if (is_recording) { + is_recording = false; + show_osd_text("Audio recording ended"); + int error = GB_stop_audio_recording(&gb); + if (error) { + char *message = NULL; + asprintf(&message, "Could not finalize recording: %s", strerror(error)); + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", message, window); + free(message); + } + static const char item_string[] = "Start Audio Recording"; + memcpy(audio_recording_menu_item, item_string, sizeof(item_string)); + return; + } + char *filename = do_save_recording_dialog(GB_get_sample_rate(&gb)); + + /* Drop events as it SDL seems to catch several in-dialog events */ + SDL_Event event; + while (SDL_PollEvent(&event)); + + if (filename) { + GB_audio_format_t format = GB_AUDIO_FORMAT_RAW; + size_t length = strlen(filename); + if (length >= 5) { + if (strcasecmp(".aiff", filename + length - 5) == 0) { + format = GB_AUDIO_FORMAT_AIFF; + } + else if (strcasecmp(".aifc", filename + length - 5) == 0) { + format = GB_AUDIO_FORMAT_AIFF; + } + else if (length >= 4) { + if (strcasecmp(".aif", filename + length - 4) == 0) { + format = GB_AUDIO_FORMAT_AIFF; + } + else if (strcasecmp(".wav", filename + length - 4) == 0) { + format = GB_AUDIO_FORMAT_WAV; + } + } + } + + int error = GB_start_audio_recording(&gb, filename, format); + free(filename); + if (error) { + char *message = NULL; + asprintf(&message, "Could not finalize recording: %s", strerror(error)); + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", message, window); + free(message); + return; + } + + is_recording = true; + static const char item_string[] = "Stop Audio Recording"; + memcpy(audio_recording_menu_item, item_string, sizeof(item_string)); + show_osd_text("Audio recording started"); + } +} + +void convert_mouse_coordinates(signed *x, signed *y) +{ + signed width = GB_get_screen_width(&gb); + signed height = GB_get_screen_height(&gb); + signed x_offset = (width - 160) / 2; + signed y_offset = (height - 144) / 2; + + *x = (signed)(*x - rect.x / factor) * width / (signed)(rect.w / factor) - x_offset; + *y = (signed)(*y - rect.y / factor) * height / (signed)(rect.h / factor) - y_offset; + + if (strcmp("CRT", configuration.filter) == 0) { + *y = *y * 8 / 7; + *y -= 144 / 16; + } +} + +void run_gui(bool is_running) +{ + SDL_ShowCursor(SDL_ENABLE); + connect_joypad(); + + /* Draw the background screen */ + if (!converted_background) { + if (configuration.gui_pallete_enabled) { + update_gui_palette(); + } + else { + SDL_Surface *background = SDL_LoadBMP(resource_path("background.bmp")); + + /* Create a blank background if background.bmp could not be loaded */ + if (!background) { + background = SDL_CreateRGBSurface(0, 160, 144, 8, 0, 0, 0, 0); + } + SDL_SetPaletteColors(background->format->palette, gui_palette, 0, 4); + converted_background = SDL_ConvertSurface(background, pixel_format, 0); + SDL_FreeSurface(background); + + for (unsigned i = 4; i--; ) { + gui_palette_native[i] = SDL_MapRGB(pixel_format, gui_palette[i].r, gui_palette[i].g, gui_palette[i].b); + } + } + } + + unsigned width = GB_get_screen_width(&gb); + unsigned height = GB_get_screen_height(&gb); + unsigned x_offset = (width - 160) / 2; + unsigned y_offset = (height - 144) / 2; + uint32_t pixels[width * height]; + + if (width != 160 || height != 144) { + for (unsigned i = 0; i < width * height; i++) { + pixels[i] = gui_palette_native[0]; + } + } + + SDL_Event event = {0,}; + gui_state = is_running? SHOWING_MENU : SHOWING_DROP_MESSAGE; + bool should_render = true; + current_menu = root_menu = is_running? paused_menu : nonpaused_menu; + recalculate_menu_height(); + current_selection = 0; + scroll = 0; + + bool scrollbar_drag = false; + signed scroll_mouse_start = 0; + signed scroll_start = 0; + while (true) { + SDL_WaitEvent(&event); + /* Convert Joypad and mouse events (We only generate down events) */ + if (gui_state != WAITING_FOR_KEY && gui_state != WAITING_FOR_JBUTTON) { + switch (event.type) { + case SDL_KEYDOWN: + if (gui_state == WAITING_FOR_KEY) break; + if (event.key.keysym.mod != 0) break; + switch (event.key.keysym.scancode) { + // Do not remap these keys to prevent deadlocking + case SDL_SCANCODE_ESCAPE: + case SDL_SCANCODE_RETURN: + case SDL_SCANCODE_RIGHT: + case SDL_SCANCODE_LEFT: + case SDL_SCANCODE_UP: + case SDL_SCANCODE_DOWN: + break; + + default: + if (event.key.keysym.scancode == configuration.keys[GB_KEY_RIGHT]) event.key.keysym.scancode = SDL_SCANCODE_RIGHT; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_LEFT]) event.key.keysym.scancode = SDL_SCANCODE_LEFT; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_UP]) event.key.keysym.scancode = SDL_SCANCODE_UP; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_DOWN]) event.key.keysym.scancode = SDL_SCANCODE_DOWN; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_A]) event.key.keysym.scancode = SDL_SCANCODE_RETURN; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_START]) event.key.keysym.scancode = SDL_SCANCODE_RETURN; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_B]) event.key.keysym.scancode = SDL_SCANCODE_ESCAPE; + break; + } + break; + + case SDL_WINDOWEVENT: + should_render = true; + break; + case SDL_MOUSEBUTTONUP: + scrollbar_drag = false; + break; + case SDL_MOUSEBUTTONDOWN: + if (gui_state == SHOWING_HELP) { + event.type = SDL_KEYDOWN; + event.key.keysym.scancode = SDL_SCANCODE_RETURN; + } + else if (gui_state == SHOWING_DROP_MESSAGE) { + event.type = SDL_KEYDOWN; + event.key.keysym.scancode = SDL_SCANCODE_ESCAPE; + } + else if (gui_state == SHOWING_MENU) { + signed x = event.button.x; + signed y = event.button.y; + convert_mouse_coordinates(&x, &y); + if (x >= 160 - 6 && x < 160 && menu_height > 144) { + unsigned scrollbar_offset = (140 - scrollbar_size) * scroll / (menu_height - 144); + if (scrollbar_offset + scrollbar_size > 140) { + scrollbar_offset = 140 - scrollbar_size; + } + + if (y < scrollbar_offset || y > scrollbar_offset + scrollbar_size) { + scroll = (menu_height - 144) * y / 143; + should_render = true; + } + + scrollbar_drag = true; + mouse_scroling = true; + scroll_mouse_start = y; + scroll_start = scroll; + break; + } + y += scroll; + + if (x < 0 || x >= 160 || y < 24) { + continue; + } + + unsigned item_y = 24; + unsigned index = 0; + for (const struct menu_item *item = current_menu; item->string; item++, index++) { + if (!item->backwards_handler) { + if (y >= item_y && y < item_y + 12) { + break; + } + item_y += 12; + } + else { + if (y >= item_y && y < item_y + 24) { + break; + } + item_y += 24; + } + } + + if (!current_menu[index].string) continue; + + current_selection = index; + event.type = SDL_KEYDOWN; + if (current_menu[index].backwards_handler) { + event.key.keysym.scancode = x < 80? SDL_SCANCODE_LEFT : SDL_SCANCODE_RIGHT; + } + else { + event.key.keysym.scancode = SDL_SCANCODE_RETURN; + } + + } + break; + case SDL_JOYBUTTONDOWN: + event.type = SDL_KEYDOWN; + joypad_button_t button = get_joypad_button(event.jbutton.button); + if (button == JOYPAD_BUTTON_A) { + event.key.keysym.scancode = SDL_SCANCODE_RETURN; + } + else if (button == JOYPAD_BUTTON_MENU) { + event.key.keysym.scancode = SDL_SCANCODE_ESCAPE; + } + else if (button == JOYPAD_BUTTON_UP) event.key.keysym.scancode = SDL_SCANCODE_UP; + else if (button == JOYPAD_BUTTON_DOWN) event.key.keysym.scancode = SDL_SCANCODE_DOWN; + else if (button == JOYPAD_BUTTON_LEFT) event.key.keysym.scancode = SDL_SCANCODE_LEFT; + else if (button == JOYPAD_BUTTON_RIGHT) event.key.keysym.scancode = SDL_SCANCODE_RIGHT; + break; + + case SDL_JOYHATMOTION: { + uint8_t value = event.jhat.value; + if (value != 0) { + uint32_t scancode = + value == SDL_HAT_UP ? SDL_SCANCODE_UP + : value == SDL_HAT_DOWN ? SDL_SCANCODE_DOWN + : value == SDL_HAT_LEFT ? SDL_SCANCODE_LEFT + : value == SDL_HAT_RIGHT ? SDL_SCANCODE_RIGHT + : 0; + + if (scancode != 0) { + event.type = SDL_KEYDOWN; + event.key.keysym.scancode = scancode; + } + } + break; + } + + case SDL_JOYAXISMOTION: { + static bool axis_active[2] = {false, false}; + joypad_axis_t axis = get_joypad_axis(event.jaxis.axis); + if (axis == JOYPAD_AXISES_X) { + if (!axis_active[0] && event.jaxis.value > JOYSTICK_HIGH) { + axis_active[0] = true; + event.type = SDL_KEYDOWN; + event.key.keysym.scancode = SDL_SCANCODE_RIGHT; + } + else if (!axis_active[0] && event.jaxis.value < -JOYSTICK_HIGH) { + axis_active[0] = true; + event.type = SDL_KEYDOWN; + event.key.keysym.scancode = SDL_SCANCODE_LEFT; + + } + else if (axis_active[0] && event.jaxis.value < JOYSTICK_LOW && event.jaxis.value > -JOYSTICK_LOW) { + axis_active[0] = false; + } + } + else if (axis == JOYPAD_AXISES_Y) { + if (!axis_active[1] && event.jaxis.value > JOYSTICK_HIGH) { + axis_active[1] = true; + event.type = SDL_KEYDOWN; + event.key.keysym.scancode = SDL_SCANCODE_DOWN; + } + else if (!axis_active[1] && event.jaxis.value < -JOYSTICK_HIGH) { + axis_active[1] = true; + event.type = SDL_KEYDOWN; + event.key.keysym.scancode = SDL_SCANCODE_UP; + } + else if (axis_active[1] && event.jaxis.value < JOYSTICK_LOW && event.jaxis.value > -JOYSTICK_LOW) { + axis_active[1] = false; + } + } + } + } + } + switch (event.type) { + case SDL_QUIT: { + if (!is_running) { + exit(0); + } + else { + pending_command = GB_SDL_QUIT_COMMAND; + return; + } + + } + case SDL_WINDOWEVENT: { + if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + update_viewport(); + render_texture(NULL, NULL); + } + break; + } + case SDL_DROPFILE: { + if (GB_is_save_state(event.drop.file)) { + if (GB_is_inited(&gb)) { + dropped_state_file = event.drop.file; + pending_command = GB_SDL_LOAD_STATE_FROM_FILE_COMMAND; + } + else { + SDL_free(event.drop.file); + } + break; + } + else { + set_filename(event.drop.file, SDL_free); + pending_command = GB_SDL_NEW_FILE_COMMAND; + return; + } + } + case SDL_JOYBUTTONDOWN: { + if (gui_state == WAITING_FOR_JBUTTON && joypad_configuration_progress != JOYPAD_BUTTONS_MAX) { + should_render = true; + configuration.joypad_configuration[joypad_configuration_progress++] = event.jbutton.button; + } + break; + } + case SDL_JOYHATMOTION: { + if (gui_state == WAITING_FOR_JBUTTON && joypad_configuration_progress == JOYPAD_BUTTON_RIGHT) { + should_render = true; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + } + break; + } + + case SDL_JOYAXISMOTION: { + if (gui_state == WAITING_FOR_JBUTTON && + joypad_configuration_progress == JOYPAD_BUTTONS_MAX && + abs(event.jaxis.value) >= 0x4000) { + if (joypad_axis_temp == (uint8_t)-1) { + joypad_axis_temp = event.jaxis.axis; + } + else if (joypad_axis_temp != event.jaxis.axis) { + if (joypad_axis_temp < event.jaxis.axis) { + configuration.joypad_axises[JOYPAD_AXISES_X] = joypad_axis_temp; + configuration.joypad_axises[JOYPAD_AXISES_Y] = event.jaxis.axis; + } + else { + configuration.joypad_axises[JOYPAD_AXISES_Y] = joypad_axis_temp; + configuration.joypad_axises[JOYPAD_AXISES_X] = event.jaxis.axis; + } + + gui_state = SHOWING_MENU; + should_render = true; + } + } + break; + } + + case SDL_MOUSEWHEEL: { + if (menu_height > 144) { + scroll -= event.wheel.y; + if (scroll < 0) { + scroll = 0; + } + if (scroll >= menu_height - 144) { + scroll = menu_height - 144; + } + + mouse_scroling = true; + should_render = true; + } + break; + } + + case SDL_MOUSEMOTION: { + if (scrollbar_drag && scrollbar_size < 140 && scrollbar_size > 0) { + signed x = event.motion.x; + signed y = event.motion.y; + convert_mouse_coordinates(&x, &y); + signed delta = scroll_mouse_start - y; + scroll = scroll_start - delta * (signed)(menu_height - 144) / (signed)(140 - scrollbar_size); + if (scroll < 0) { + scroll = 0; + } + if (scroll >= menu_height - 144) { + scroll = menu_height - 144; + } + + should_render = true; + } + break; + } + + + case SDL_KEYDOWN: + scrollbar_drag = false; + if (gui_state == WAITING_FOR_KEY) { + if (current_selection > 8) { + configuration.keys_2[current_selection - 9] = event.key.keysym.scancode; + } + else { + configuration.keys[current_selection] = event.key.keysym.scancode; + } + gui_state = SHOWING_MENU; + should_render = true; + } + else if (event_hotkey_code(&event) == SDL_SCANCODE_F && event.key.keysym.mod & MODIFIER) { + if ((SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_DESKTOP) == false) { + SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); + } + else { + SDL_SetWindowFullscreen(window, 0); + } + update_viewport(); + } + else if (event_hotkey_code(&event) == SDL_SCANCODE_O) { + if (event.key.keysym.mod & MODIFIER) { + char *filename = do_open_rom_dialog(); + if (filename) { + set_filename(filename, free); + pending_command = GB_SDL_NEW_FILE_COMMAND; + return; + } + } + } + else if (event.key.keysym.scancode == SDL_SCANCODE_RETURN && gui_state == WAITING_FOR_JBUTTON) { + should_render = true; + if (joypad_configuration_progress != JOYPAD_BUTTONS_MAX) { + configuration.joypad_configuration[joypad_configuration_progress] = -1; + } + else { + configuration.joypad_axises[0] = -1; + configuration.joypad_axises[1] = -1; + } + joypad_configuration_progress++; + + if (joypad_configuration_progress > JOYPAD_BUTTONS_MAX) { + gui_state = SHOWING_MENU; + } + } + else if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE) { + if (gui_state == SHOWING_MENU && current_menu != root_menu) { + for (const struct menu_item *item = current_menu; item->string; item++) { + if (strcmp(item->string, "Back") == 0) { + item->handler(0); + break; + } + } + should_render = true; + } + else if (is_running) { + return; + } + else { + if (gui_state == SHOWING_DROP_MESSAGE) { + gui_state = SHOWING_MENU; + } + else if (gui_state == SHOWING_MENU) { + gui_state = SHOWING_DROP_MESSAGE; + } + current_selection = 0; + mouse_scroling = false; + scroll = 0; + current_menu = root_menu; + recalculate_menu_height(); + should_render = true; + } + } + else if (gui_state == SHOWING_MENU) { + if (event.key.keysym.scancode == SDL_SCANCODE_DOWN && current_menu[current_selection + 1].string) { + current_selection++; + mouse_scroling = false; + should_render = true; + } + else if (event.key.keysym.scancode == SDL_SCANCODE_UP && current_selection) { + current_selection--; + mouse_scroling = false; + should_render = true; + } + else if (event.key.keysym.scancode == SDL_SCANCODE_RETURN && !current_menu[current_selection].backwards_handler) { + if (current_menu[current_selection].handler) { + current_menu[current_selection].handler(current_selection); + if (pending_command == GB_SDL_RESET_COMMAND && !is_running) { + pending_command = GB_SDL_NO_COMMAND; + } + if (pending_command) { + if (!is_running && pending_command == GB_SDL_QUIT_COMMAND) { + exit(0); + } + return; + } + should_render = true; + } + else { + return; + } + } + else if (event.key.keysym.scancode == SDL_SCANCODE_RIGHT && current_menu[current_selection].backwards_handler) { + current_menu[current_selection].handler(current_selection); + should_render = true; + } + else if (event.key.keysym.scancode == SDL_SCANCODE_LEFT && current_menu[current_selection].backwards_handler) { + current_menu[current_selection].backwards_handler(current_selection); + should_render = true; + } + } + else if (gui_state == SHOWING_HELP) { + current_help_page++; + if (current_help_page == sizeof(help) / sizeof(help[0])) { + gui_state = SHOWING_MENU; + } + should_render = true; + } + break; + } + + if (should_render) { + should_render = false; + rerender: + SDL_LockSurface(converted_background); + if (width == 160 && height == 144) { + memcpy(pixels, converted_background->pixels, sizeof(pixels)); + } + else { + for (unsigned y = 0; y < 144; y++) { + memcpy(pixels + x_offset + width * (y + y_offset), ((uint32_t *)converted_background->pixels) + 160 * y, 160 * 4); + } + } + SDL_UnlockSurface(converted_background); + + switch (gui_state) { + case SHOWING_DROP_MESSAGE: + draw_text_centered(pixels, width, height, 8 + y_offset, "Press ESC for menu", gui_palette_native[3], gui_palette_native[0], false); + draw_text_centered(pixels, width, height, 116 + y_offset, "Drop a GB or GBC", gui_palette_native[3], gui_palette_native[0], false); + draw_text_centered(pixels, width, height, 128 + y_offset, "file to play", gui_palette_native[3], gui_palette_native[0], false); + break; + case SHOWING_MENU: + draw_text_centered(pixels, width, height, 8 + y_offset, "SameBoy", gui_palette_native[3], gui_palette_native[0], false); + unsigned i = 0, y = 24; + for (const struct menu_item *item = current_menu; item->string; item++, i++) { + if (i == current_selection && !mouse_scroling) { + if (i == 0) { + if (y < scroll) { + scroll = (y - 4) / 12 * 12; + goto rerender; + } + } + else { + if (y < scroll + 24) { + scroll = (y - 24) / 12 * 12; + goto rerender; + } + } + } + if (i == current_selection && i == 0 && scroll != 0 && !mouse_scroling) { + scroll = 0; + goto rerender; + } + if (item->value_getter && !item->backwards_handler) { + char line[25]; + snprintf(line, sizeof(line), "%s%*s", item->string, 24 - (unsigned)strlen(item->string), item->value_getter(i)); + draw_text_centered(pixels, width, height, y + y_offset, line, gui_palette_native[3], gui_palette_native[0], + i == current_selection ? DECORATION_SELECTION : DECORATION_NONE); + y += 12; + + } + else { + draw_text_centered(pixels, width, height, y + y_offset, item->string, gui_palette_native[3], gui_palette_native[0], + i == current_selection && !item->value_getter ? DECORATION_SELECTION : DECORATION_NONE); + y += 12; + if (item->value_getter) { + draw_text_centered(pixels, width, height, y + y_offset - 1, item->value_getter(i), gui_palette_native[3], gui_palette_native[0], + i == current_selection ? DECORATION_ARROWS : DECORATION_NONE); + y += 12; + } + } + if (i == current_selection && !mouse_scroling) { + if (y > scroll + 144) { + scroll = (y - 144) / 12 * 12; + if (scroll > menu_height - 144) { + scroll = menu_height - 144; + } + goto rerender; + } + } + + } + if (scrollbar_size) { + unsigned scrollbar_offset = (140 - scrollbar_size) * scroll / (menu_height - 144); + if (scrollbar_offset + scrollbar_size > 140) { + scrollbar_offset = 140 - scrollbar_size; + } + for (unsigned y = 0; y < 140; y++) { + uint32_t *pixel = pixels + x_offset + 156 + width * (y + y_offset + 2); + if (y >= scrollbar_offset && y < scrollbar_offset + scrollbar_size) { + pixel[0] = pixel[1] = gui_palette_native[2]; + } + else { + pixel[0] = pixel[1] = gui_palette_native[1]; + } + + } + } + break; + case SHOWING_HELP: + draw_text(pixels, width, height, 2 + x_offset, 2 + y_offset, help[current_help_page], gui_palette_native[3], gui_palette_native[0], false); + break; + case WAITING_FOR_KEY: + draw_text_centered(pixels, width, height, 68 + y_offset, "Press a Key", gui_palette_native[3], gui_palette_native[0], DECORATION_NONE); + break; + case WAITING_FOR_JBUTTON: + draw_text_centered(pixels, width, height, 68 + y_offset, + joypad_configuration_progress != JOYPAD_BUTTONS_MAX ? "Press button for" : "Move the Analog Stick", + gui_palette_native[3], gui_palette_native[0], DECORATION_NONE); + draw_text_centered(pixels, width, height, 80 + y_offset, + (const char *[]) + { + "Right", + "Left", + "Up", + "Down", + "A", + "B", + "Select", + "Start", + "Open Menu", + "Turbo", + "Rewind", + "Slow-Motion", + "Hotkey 1", + "Hotkey 2", + "", + } [joypad_configuration_progress], + gui_palette_native[3], gui_palette_native[0], DECORATION_NONE); + draw_text_centered(pixels, width, height, 104 + y_offset, "Press Enter to skip", gui_palette_native[3], gui_palette_native[0], DECORATION_NONE); + break; + } + + render_texture(pixels, NULL); +#ifdef _WIN32 + /* Required for some Windows 10 machines, god knows why */ + render_texture(pixels, NULL); +#endif + } + } +} + +static void __attribute__ ((constructor)) list_custom_palettes(void) +{ + char *path = resource_path("Palettes"); + if (!path) return; + if (strlen(path) > 1024 - 30) { + // path too long to safely concat filenames + return; + } + DIR *dir = opendir(path); + if (!dir) return; + + struct dirent *ent; + + while ((ent = readdir(dir))) { + unsigned length = strlen(ent->d_name); + if (length < 5 || length > 28) { + continue; + } + if (strcmp(ent->d_name + length - 4, ".sbp")) continue; + ent->d_name[length - 4] = 0; + custom_palettes = realloc(custom_palettes, + sizeof(custom_palettes[0]) * (n_custom_palettes + 1)); + custom_palettes[n_custom_palettes++] = strdup(ent->d_name); + } + + closedir(dir); +} diff --git a/thirdparty/SameBoy-old/SDL/gui.h b/thirdparty/SameBoy-old/SDL/gui.h new file mode 100644 index 000000000..835794a24 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/gui.h @@ -0,0 +1,69 @@ +#ifndef gui_h +#define gui_h + +#include +#include +#include +#include "shader.h" +#include "configuration.h" + +#define JOYSTICK_HIGH 0x4000 +#define JOYSTICK_LOW 0x3800 + +#ifdef __APPLE__ +#define MODIFIER KMOD_GUI +#else +#define MODIFIER KMOD_CTRL +#endif + +extern GB_gameboy_t gb; + +extern SDL_Window *window; +extern SDL_Renderer *renderer; +extern SDL_Texture *texture; +extern SDL_PixelFormat *pixel_format; +extern SDL_Haptic *haptic; +extern shader_t shader; + +enum pending_command { + GB_SDL_NO_COMMAND, + GB_SDL_SAVE_STATE_COMMAND, + GB_SDL_LOAD_STATE_COMMAND, + GB_SDL_RESET_COMMAND, + GB_SDL_NEW_FILE_COMMAND, + GB_SDL_QUIT_COMMAND, + GB_SDL_LOAD_STATE_FROM_FILE_COMMAND, +}; + +#define GB_SDL_DEFAULT_SCALE_MAX 8 + +extern enum pending_command pending_command; +extern unsigned command_parameter; +extern char *dropped_state_file; + +void update_viewport(void); +void run_gui(bool is_running); +void render_texture(void *pixels, void *previous); +void connect_joypad(void); + +joypad_button_t get_joypad_button(uint8_t physical_button); +joypad_axis_t get_joypad_axis(uint8_t physical_axis); + +static SDL_Scancode event_hotkey_code(SDL_Event *event) +{ + if (event->key.keysym.sym >= SDLK_a && event->key.keysym.sym < SDLK_z) { + return SDL_SCANCODE_A + event->key.keysym.sym - SDLK_a; + } + + return event->key.keysym.scancode; +} + +void draw_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, uint32_t border, bool is_osd); +void show_osd_text(const char *text); +extern const char *osd_text; +extern unsigned osd_countdown; +extern unsigned osd_text_lines; +void convert_mouse_coordinates(signed *x, signed *y); +const GB_palette_t *current_dmg_palette(void); + +#endif diff --git a/thirdparty/SameBoy-old/SDL/main.c b/thirdparty/SameBoy-old/SDL/main.c new file mode 100644 index 000000000..c3f95942c --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/main.c @@ -0,0 +1,992 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "gui.h" +#include "shader.h" +#include "audio/audio.h" +#include "console.h" + +#ifndef _WIN32 +#include +#else +#include +#endif + +static bool stop_on_start = false; +GB_gameboy_t gb; +static bool paused = false; +static uint32_t pixel_buffer_1[256 * 224], pixel_buffer_2[256 * 224]; +static uint32_t *active_pixel_buffer = pixel_buffer_1, *previous_pixel_buffer = pixel_buffer_2; +static bool underclock_down = false, rewind_down = false, do_rewind = false, rewind_paused = false, turbo_down = false; +static double clock_mutliplier = 1.0; + +static char *filename = NULL; +static typeof(free) *free_function = NULL; +static char *battery_save_path_ptr = NULL; +static SDL_GLContext gl_context = NULL; +static bool console_supported = false; + +bool uses_gl(void) +{ + return gl_context; +} + +void set_filename(const char *new_filename, typeof(free) *new_free_function) +{ + if (filename && free_function) { + free_function(filename); + } + filename = (char *) new_filename; + free_function = new_free_function; +} + +static char *completer(const char *substring, uintptr_t *context) +{ + if (!GB_is_inited(&gb)) return NULL; + char *temp = strdup(substring); + char *ret = GB_debugger_complete_substring(&gb, temp, context); + free(temp); + return ret; +} + +static void log_callback(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) +{ + CON_attributes_t con_attributes = {0,}; + con_attributes.bold = attributes & GB_LOG_BOLD; + con_attributes.underline = attributes & GB_LOG_UNDERLINE; + if (attributes & GB_LOG_DASHED_UNDERLINE) { + while (*string) { + con_attributes.underline ^= true; + CON_attributed_printf("%c", &con_attributes, *string); + string++; + } + } + else { + CON_attributed_print(string, &con_attributes); + } +} + +static void handle_eof(void) +{ + CON_set_async_prompt(""); + char *line = CON_readline("Quit? [y]/n > "); + if (line[0] == 'n' || line[0] == 'N') { + free(line); + CON_set_async_prompt("> "); + } + else { + exit(0); + } +} + +static char *input_callback(GB_gameboy_t *gb) +{ +retry: { + char *ret = CON_readline("Stopped> "); + if (strcmp(ret, CON_EOF) == 0) { + handle_eof(); + free(ret); + goto retry; + } + else { + CON_attributes_t attributes = {.bold = true}; + CON_attributed_printf("> %s\n", &attributes, ret); + } + return ret; +} +} + +static char *asyc_input_callback(GB_gameboy_t *gb) +{ +retry: { + char *ret = CON_readline_async(); + if (ret && strcmp(ret, CON_EOF) == 0) { + handle_eof(); + free(ret); + goto retry; + } + else if (ret) { + CON_attributes_t attributes = {.bold = true}; + CON_attributed_printf("> %s\n", &attributes, ret); + } + return ret; +} +} + + +static char *captured_log = NULL; + +static void log_capture_callback(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) +{ + size_t current_len = strlen(captured_log); + size_t len_to_add = strlen(string); + captured_log = realloc(captured_log, current_len + len_to_add + 1); + memcpy(captured_log + current_len, string, len_to_add); + captured_log[current_len + len_to_add] = 0; +} + +static void start_capturing_logs(void) +{ + if (captured_log != NULL) { + free(captured_log); + } + captured_log = malloc(1); + captured_log[0] = 0; + GB_set_log_callback(&gb, log_capture_callback); +} + +static const char *end_capturing_logs(bool show_popup, bool should_exit, uint32_t popup_flags, const char *title) +{ + GB_set_log_callback(&gb, console_supported? log_callback : NULL); + if (captured_log[0] == 0) { + free(captured_log); + captured_log = NULL; + } + else { + if (show_popup) { + SDL_ShowSimpleMessageBox(popup_flags, title, captured_log, window); + } + if (should_exit) { + exit(1); + } + } + return captured_log; +} + +static void update_palette(void) +{ + GB_set_palette(&gb, current_dmg_palette()); +} + +static void screen_size_changed(void) +{ + SDL_DestroyTexture(texture); + texture = SDL_CreateTexture(renderer, SDL_GetWindowPixelFormat(window), SDL_TEXTUREACCESS_STREAMING, + GB_get_screen_width(&gb), GB_get_screen_height(&gb)); + + SDL_SetWindowMinimumSize(window, GB_get_screen_width(&gb), GB_get_screen_height(&gb)); + + update_viewport(); +} + +static void open_menu(void) +{ + bool audio_playing = GB_audio_is_playing(); + if (audio_playing) { + GB_audio_set_paused(true); + } + size_t previous_width = GB_get_screen_width(&gb); + run_gui(true); + SDL_ShowCursor(SDL_DISABLE); + if (audio_playing) { + GB_audio_set_paused(false); + } + GB_set_color_correction_mode(&gb, configuration.color_correction_mode); + GB_set_light_temperature(&gb, (configuration.color_temperature - 10.0) / 10.0); + GB_set_interference_volume(&gb, configuration.interference_volume / 100.0); + GB_set_border_mode(&gb, configuration.border_mode); + update_palette(); + GB_set_highpass_filter_mode(&gb, configuration.highpass_mode); + GB_set_rewind_length(&gb, configuration.rewind_length); + GB_set_rtc_mode(&gb, configuration.rtc_mode); + if (previous_width != GB_get_screen_width(&gb)) { + screen_size_changed(); + } +} + +static void handle_events(GB_gameboy_t *gb) +{ + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + pending_command = GB_SDL_QUIT_COMMAND; + break; + + case SDL_DROPFILE: { + if (GB_is_save_state(event.drop.file)) { + dropped_state_file = event.drop.file; + pending_command = GB_SDL_LOAD_STATE_FROM_FILE_COMMAND; + } + else { + set_filename(event.drop.file, SDL_free); + pending_command = GB_SDL_NEW_FILE_COMMAND; + } + break; + } + + case SDL_WINDOWEVENT: { + if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) { + update_viewport(); + } + break; + } + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: { + if (GB_has_accelerometer(gb) && configuration.allow_mouse_controls) { + GB_set_key_state(gb, GB_KEY_A, event.type == SDL_MOUSEBUTTONDOWN); + } + break; + } + + case SDL_MOUSEMOTION: { + if (GB_has_accelerometer(gb) && configuration.allow_mouse_controls) { + signed x = event.motion.x; + signed y = event.motion.y; + convert_mouse_coordinates(&x, &y); + x = SDL_max(SDL_min(x, 160), 0); + y = SDL_max(SDL_min(y, 144), 0); + GB_set_accelerometer_values(gb, (x - 80) / -80.0, (y - 72) / -72.0); + } + break; + } + + case SDL_JOYBUTTONUP: + case SDL_JOYBUTTONDOWN: { + joypad_button_t button = get_joypad_button(event.jbutton.button); + if ((GB_key_t) button < GB_KEY_MAX) { + GB_set_key_state(gb, (GB_key_t) button, event.type == SDL_JOYBUTTONDOWN); + } + else if (button == JOYPAD_BUTTON_TURBO) { + GB_audio_clear_queue(); + turbo_down = event.type == SDL_JOYBUTTONDOWN; + GB_set_turbo_mode(gb, turbo_down, turbo_down && rewind_down); + } + else if (button == JOYPAD_BUTTON_SLOW_MOTION) { + underclock_down = event.type == SDL_JOYBUTTONDOWN; + } + else if (button == JOYPAD_BUTTON_REWIND) { + rewind_down = event.type == SDL_JOYBUTTONDOWN; + if (event.type == SDL_JOYBUTTONUP) { + rewind_paused = false; + } + GB_set_turbo_mode(gb, turbo_down, turbo_down && rewind_down); + } + else if (button == JOYPAD_BUTTON_MENU && event.type == SDL_JOYBUTTONDOWN) { + open_menu(); + } + else if ((button == JOYPAD_BUTTON_HOTKEY_1 || button == JOYPAD_BUTTON_HOTKEY_2) && event.type == SDL_JOYBUTTONDOWN) { + hotkey_action_t action = configuration.hotkey_actions[button - JOYPAD_BUTTON_HOTKEY_1]; + switch (action) { + case HOTKEY_NONE: + break; + case HOTKEY_PAUSE: + paused = !paused; + break; + case HOTKEY_MUTE: + GB_audio_set_paused(GB_audio_is_playing()); + break; + case HOTKEY_RESET: + pending_command = GB_SDL_RESET_COMMAND; + break; + case HOTKEY_QUIT: + pending_command = GB_SDL_QUIT_COMMAND; + break; + default: + command_parameter = (action - HOTKEY_SAVE_STATE_1) / 2 + 1; + pending_command = ((action - HOTKEY_SAVE_STATE_1) % 2)? GB_SDL_LOAD_STATE_COMMAND:GB_SDL_SAVE_STATE_COMMAND; + break; + case HOTKEY_SAVE_STATE_10: + command_parameter = 0; + pending_command = GB_SDL_SAVE_STATE_COMMAND; + break; + case HOTKEY_LOAD_STATE_10: + command_parameter = 0; + pending_command = GB_SDL_LOAD_STATE_COMMAND; + break; + } + } + } + break; + + case SDL_JOYAXISMOTION: { + static bool axis_active[2] = {false, false}; + static double accel_values[2] = {0, 0}; + joypad_axis_t axis = get_joypad_axis(event.jaxis.axis); + if (axis == JOYPAD_AXISES_X) { + if (GB_has_accelerometer(gb)) { + accel_values[0] = event.jaxis.value / (double)32768.0; + GB_set_accelerometer_values(gb, -accel_values[0], -accel_values[1]); + } + else if (event.jaxis.value > JOYSTICK_HIGH) { + axis_active[0] = true; + GB_set_key_state(gb, GB_KEY_RIGHT, true); + GB_set_key_state(gb, GB_KEY_LEFT, false); + } + else if (event.jaxis.value < -JOYSTICK_HIGH) { + axis_active[0] = true; + GB_set_key_state(gb, GB_KEY_RIGHT, false); + GB_set_key_state(gb, GB_KEY_LEFT, true); + } + else if (axis_active[0] && event.jaxis.value < JOYSTICK_LOW && event.jaxis.value > -JOYSTICK_LOW) { + axis_active[0] = false; + GB_set_key_state(gb, GB_KEY_RIGHT, false); + GB_set_key_state(gb, GB_KEY_LEFT, false); + } + } + else if (axis == JOYPAD_AXISES_Y) { + if (GB_has_accelerometer(gb)) { + accel_values[1] = event.jaxis.value / (double)32768.0; + GB_set_accelerometer_values(gb, -accel_values[0], -accel_values[1]); + } + else if (event.jaxis.value > JOYSTICK_HIGH) { + axis_active[1] = true; + GB_set_key_state(gb, GB_KEY_DOWN, true); + GB_set_key_state(gb, GB_KEY_UP, false); + } + else if (event.jaxis.value < -JOYSTICK_HIGH) { + axis_active[1] = true; + GB_set_key_state(gb, GB_KEY_DOWN, false); + GB_set_key_state(gb, GB_KEY_UP, true); + } + else if (axis_active[1] && event.jaxis.value < JOYSTICK_LOW && event.jaxis.value > -JOYSTICK_LOW) { + axis_active[1] = false; + GB_set_key_state(gb, GB_KEY_DOWN, false); + GB_set_key_state(gb, GB_KEY_UP, false); + } + } + } + break; + + case SDL_JOYHATMOTION: { + uint8_t value = event.jhat.value; + int8_t updown = + value == SDL_HAT_LEFTUP || value == SDL_HAT_UP || value == SDL_HAT_RIGHTUP ? -1 : (value == SDL_HAT_LEFTDOWN || value == SDL_HAT_DOWN || value == SDL_HAT_RIGHTDOWN ? 1 : 0); + int8_t leftright = + value == SDL_HAT_LEFTUP || value == SDL_HAT_LEFT || value == SDL_HAT_LEFTDOWN ? -1 : (value == SDL_HAT_RIGHTUP || value == SDL_HAT_RIGHT || value == SDL_HAT_RIGHTDOWN ? 1 : 0); + + GB_set_key_state(gb, GB_KEY_LEFT, leftright == -1); + GB_set_key_state(gb, GB_KEY_RIGHT, leftright == 1); + GB_set_key_state(gb, GB_KEY_UP, updown == -1); + GB_set_key_state(gb, GB_KEY_DOWN, updown == 1); + break; + }; + + case SDL_KEYDOWN: + switch (event_hotkey_code(&event)) { + case SDL_SCANCODE_ESCAPE: { + open_menu(); + break; + } + case SDL_SCANCODE_C: + if (event.type == SDL_KEYDOWN && (event.key.keysym.mod & KMOD_CTRL)) { + CON_print("^C\a\n"); + GB_debugger_break(gb); + } + break; + + case SDL_SCANCODE_R: + if (event.key.keysym.mod & MODIFIER) { + pending_command = GB_SDL_RESET_COMMAND; + } + break; + + case SDL_SCANCODE_O: { + if (event.key.keysym.mod & MODIFIER) { + char *filename = do_open_rom_dialog(); + if (filename) { + set_filename(filename, free); + pending_command = GB_SDL_NEW_FILE_COMMAND; + } + } + break; + } + + case SDL_SCANCODE_P: + if (event.key.keysym.mod & MODIFIER) { + paused = !paused; + } + break; + case SDL_SCANCODE_M: + if (event.key.keysym.mod & MODIFIER) { +#ifdef __APPLE__ + // Can't override CMD+M (Minimize) in SDL + if (!(event.key.keysym.mod & KMOD_SHIFT)) { + break; + } +#endif + GB_audio_set_paused(GB_audio_is_playing()); + } + break; + + case SDL_SCANCODE_F: + if (event.key.keysym.mod & MODIFIER) { + if ((SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_DESKTOP) == false) { + SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); + } + else { + SDL_SetWindowFullscreen(window, 0); + } + update_viewport(); + } + break; + + default: + /* Save states */ + if (event.key.keysym.scancode >= SDL_SCANCODE_1 && event.key.keysym.scancode <= SDL_SCANCODE_0) { + if (event.key.keysym.mod & MODIFIER) { + command_parameter = (event.key.keysym.scancode - SDL_SCANCODE_1 + 1) % 10; + + if (event.key.keysym.mod & KMOD_SHIFT) { + pending_command = GB_SDL_LOAD_STATE_COMMAND; + } + else { + pending_command = GB_SDL_SAVE_STATE_COMMAND; + } + } + } + break; + } + case SDL_KEYUP: // Fallthrough + if (event.key.keysym.scancode == configuration.keys[8]) { + turbo_down = event.type == SDL_KEYDOWN; + GB_audio_clear_queue(); + GB_set_turbo_mode(gb, turbo_down, turbo_down && rewind_down); + } + else if (event.key.keysym.scancode == configuration.keys_2[0]) { + rewind_down = event.type == SDL_KEYDOWN; + if (event.type == SDL_KEYUP) { + rewind_paused = false; + } + GB_set_turbo_mode(gb, turbo_down, turbo_down && rewind_down); + } + else if (event.key.keysym.scancode == configuration.keys_2[1]) { + underclock_down = event.type == SDL_KEYDOWN; + } + else { + for (unsigned i = 0; i < GB_KEY_MAX; i++) { + if (event.key.keysym.scancode == configuration.keys[i]) { + GB_set_key_state(gb, i, event.type == SDL_KEYDOWN); + } + } + } + break; + default: + break; + } + } +} + +static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) +{ + return SDL_MapRGB(pixel_format, r, g, b); +} + +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) +{ + if (underclock_down && clock_mutliplier > 0.5) { + clock_mutliplier -= 1.0/16; + GB_set_clock_multiplier(gb, clock_mutliplier); + } + else if (!underclock_down && clock_mutliplier < 1.0) { + clock_mutliplier += 1.0/16; + GB_set_clock_multiplier(gb, clock_mutliplier); + } + + if (turbo_down) { + show_osd_text("Fast forward..."); + } + else if (underclock_down) { + show_osd_text("Slow motion..."); + } + else if (rewind_down) { + show_osd_text("Rewinding..."); + } + + if (osd_countdown && configuration.osd) { + unsigned width = GB_get_screen_width(gb); + unsigned height = GB_get_screen_height(gb); + draw_text(active_pixel_buffer, + width, height, 8, height - 8 - osd_text_lines * 12, osd_text, + rgb_encode(gb, 255, 255, 255), rgb_encode(gb, 0, 0, 0), + true); + osd_countdown--; + } + if (type != GB_VBLANK_TYPE_REPEAT) { + if (configuration.blending_mode) { + render_texture(active_pixel_buffer, previous_pixel_buffer); + uint32_t *temp = active_pixel_buffer; + active_pixel_buffer = previous_pixel_buffer; + previous_pixel_buffer = temp; + GB_set_pixels_output(gb, active_pixel_buffer); + } + else { + render_texture(active_pixel_buffer, NULL); + } + } + do_rewind = rewind_down; + handle_events(gb); +} + +static void rumble(GB_gameboy_t *gb, double amp) +{ + SDL_HapticRumblePlay(haptic, amp, 250); +} + +static void debugger_interrupt(int ignore) +{ + if (!GB_is_inited(&gb)) exit(0); + /* ^C twice to exit */ + if (GB_debugger_is_stopped(&gb)) { + GB_save_battery(&gb, battery_save_path_ptr); + exit(0); + } + if (console_supported) { + CON_print("^C\n"); + } + GB_debugger_break(&gb); +} + +static void gb_audio_callback(GB_gameboy_t *gb, GB_sample_t *sample) +{ + if (turbo_down) { + static unsigned skip = 0; + skip++; + if (skip == GB_audio_get_frequency() / 8) { + skip = 0; + } + if (skip > GB_audio_get_frequency() / 16) { + return; + } + } + + if (GB_audio_get_queue_length() > GB_audio_get_frequency() / 8) { // Maximum lag of 0.125s + return; + } + + if (configuration.volume != 100) { + sample->left = sample->left * configuration.volume / 100; + sample->right = sample->right * configuration.volume / 100; + } + + GB_audio_queue_sample(sample); + +} + +static bool handle_pending_command(void) +{ + switch (pending_command) { + case GB_SDL_LOAD_STATE_COMMAND: + case GB_SDL_SAVE_STATE_COMMAND: { + char save_path[strlen(filename) + 5]; + char save_extension[] = ".s0"; + save_extension[2] += command_parameter; + replace_extension(filename, strlen(filename), save_path, save_extension); + + start_capturing_logs(); + bool success; + if (pending_command == GB_SDL_LOAD_STATE_COMMAND) { + int result = GB_load_state(&gb, save_path); + if (result == ENOENT) { + char save_extension[] = ".sn0"; + save_extension[3] += command_parameter; + replace_extension(filename, strlen(filename), save_path, save_extension); + start_capturing_logs(); + result = GB_load_state(&gb, save_path); + } + success = result == 0; + } + else { + success = GB_save_state(&gb, save_path) == 0; + } + end_capturing_logs(true, + false, + success? SDL_MESSAGEBOX_INFORMATION : SDL_MESSAGEBOX_ERROR, + success? "Notice" : "Error"); + if (success) { + show_osd_text(pending_command == GB_SDL_LOAD_STATE_COMMAND? "State loaded" : "State saved"); + } + return false; + } + + case GB_SDL_LOAD_STATE_FROM_FILE_COMMAND: + start_capturing_logs(); + bool success = GB_load_state(&gb, dropped_state_file) == 0; + end_capturing_logs(true, + false, + success? SDL_MESSAGEBOX_INFORMATION : SDL_MESSAGEBOX_ERROR, + success? "Notice" : "Error"); + SDL_free(dropped_state_file); + if (success) { + show_osd_text("State loaded"); + } + return false; + + case GB_SDL_NO_COMMAND: + return false; + + case GB_SDL_RESET_COMMAND: + case GB_SDL_NEW_FILE_COMMAND: + GB_save_battery(&gb, battery_save_path_ptr); + return true; + + case GB_SDL_QUIT_COMMAND: + GB_save_battery(&gb, battery_save_path_ptr); + exit(0); + } + return false; +} + +static void load_boot_rom(GB_gameboy_t *gb, GB_boot_rom_t type) +{ + static const char *const names[] = { + [GB_BOOT_ROM_DMG_0] = "dmg0_boot.bin", + [GB_BOOT_ROM_DMG] = "dmg_boot.bin", + [GB_BOOT_ROM_MGB] = "mgb_boot.bin", + [GB_BOOT_ROM_SGB] = "sgb_boot.bin", + [GB_BOOT_ROM_SGB2] = "sgb2_boot.bin", + [GB_BOOT_ROM_CGB_0] = "cgb0_boot.bin", + [GB_BOOT_ROM_CGB] = "cgb_boot.bin", + [GB_BOOT_ROM_AGB] = "agb_boot.bin", + }; + bool use_built_in = true; + if (configuration.bootrom_path[0]) { + static char path[4096]; + snprintf(path, sizeof(path), "%s/%s", configuration.bootrom_path, names[type]); + use_built_in = GB_load_boot_rom(gb, path); + } + if (use_built_in) { + start_capturing_logs(); + GB_load_boot_rom(gb, resource_path(names[type])); + end_capturing_logs(true, false, SDL_MESSAGEBOX_ERROR, "Error"); + } +} + +static bool is_path_writeable(const char *path) +{ + if (!access(path, W_OK)) return true; + int fd = creat(path, 0644); + if (fd == -1) return false; + close(fd); + unlink(path); + return true; +} + +static void run(void) +{ + SDL_ShowCursor(SDL_DISABLE); + GB_model_t model; + pending_command = GB_SDL_NO_COMMAND; +restart: + model = (GB_model_t []) + { + [MODEL_DMG] = GB_MODEL_DMG_B, + [MODEL_CGB] = GB_MODEL_CGB_0 + configuration.cgb_revision, + [MODEL_AGB] = configuration.agb_revision, + [MODEL_MGB] = GB_MODEL_MGB, + [MODEL_SGB] = (GB_model_t []) + { + [SGB_NTSC] = GB_MODEL_SGB_NTSC, + [SGB_PAL] = GB_MODEL_SGB_PAL, + [SGB_2] = GB_MODEL_SGB2, + }[configuration.sgb_revision], + }[configuration.model]; + + if (GB_is_inited(&gb)) { + GB_switch_model_and_reset(&gb, model); + } + else { + GB_init(&gb, model); + + GB_set_boot_rom_load_callback(&gb, load_boot_rom); + GB_set_vblank_callback(&gb, (GB_vblank_callback_t) vblank); + GB_set_pixels_output(&gb, active_pixel_buffer); + GB_set_rgb_encode_callback(&gb, rgb_encode); + GB_set_rumble_callback(&gb, rumble); + GB_set_rumble_mode(&gb, configuration.rumble_mode); + GB_set_sample_rate(&gb, GB_audio_get_frequency()); + GB_set_color_correction_mode(&gb, configuration.color_correction_mode); + GB_set_light_temperature(&gb, (configuration.color_temperature - 10.0) / 10.0); + GB_set_interference_volume(&gb, configuration.interference_volume / 100.0); + update_palette(); + if ((unsigned)configuration.border_mode <= GB_BORDER_ALWAYS) { + GB_set_border_mode(&gb, configuration.border_mode); + } + GB_set_highpass_filter_mode(&gb, configuration.highpass_mode); + GB_set_rewind_length(&gb, configuration.rewind_length); + GB_set_rtc_mode(&gb, configuration.rtc_mode); + GB_set_update_input_hint_callback(&gb, handle_events); + GB_apu_set_sample_callback(&gb, gb_audio_callback); + + if (console_supported) { + CON_set_async_prompt("> "); + GB_set_log_callback(&gb, log_callback); + GB_set_input_callback(&gb, input_callback); + GB_set_async_input_callback(&gb, asyc_input_callback); + } + } + if (stop_on_start) { + stop_on_start = false; + GB_debugger_break(&gb); + } + + bool error = false; + GB_debugger_clear_symbols(&gb); + start_capturing_logs(); + size_t path_length = strlen(filename); + char extension[4] = {0,}; + if (path_length > 4) { + if (filename[path_length - 4] == '.') { + extension[0] = tolower((unsigned char)filename[path_length - 3]); + extension[1] = tolower((unsigned char)filename[path_length - 2]); + extension[2] = tolower((unsigned char)filename[path_length - 1]); + } + } + if (strcmp(extension, "isx") == 0) { + error = GB_load_isx(&gb, filename); + /* Configure battery */ + char battery_save_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .sav + NULL */ + replace_extension(filename, path_length, battery_save_path, ".ram"); + battery_save_path_ptr = battery_save_path; + GB_load_battery(&gb, battery_save_path); + } + else { + GB_load_rom(&gb, filename); + } + + /* Configure battery */ + char battery_save_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .sav + NULL */ + replace_extension(filename, path_length, battery_save_path, ".sav"); + battery_save_path_ptr = battery_save_path; + GB_load_battery(&gb, battery_save_path); + if (GB_save_battery_size(&gb)) { + if (!is_path_writeable(battery_save_path)) { + GB_log(&gb, "The save path for this ROM is not writeable, progress will not be saved.\n"); + } + } + + end_capturing_logs(true, error, SDL_MESSAGEBOX_WARNING, "Warning"); + + static char start_text[64]; + static char title[17]; + GB_get_rom_title(&gb, title); + sprintf(start_text, "SameBoy v" GB_VERSION "\n%s\n%08X", title, GB_get_rom_crc32(&gb)); + show_osd_text(start_text); + + /* Configure symbols */ + GB_debugger_load_symbol_file(&gb, resource_path("registers.sym")); + + char symbols_path[path_length + 5]; + replace_extension(filename, path_length, symbols_path, ".sym"); + GB_debugger_load_symbol_file(&gb, symbols_path); + + screen_size_changed(); + + /* Run emulation */ + while (true) { + if (paused || rewind_paused) { + SDL_WaitEvent(NULL); + handle_events(&gb); + } + else { + if (do_rewind) { + GB_rewind_pop(&gb); + if (turbo_down) { + GB_rewind_pop(&gb); + } + if (!GB_rewind_pop(&gb)) { + rewind_paused = true; + } + do_rewind = false; + } + GB_run(&gb); + } + + /* These commands can't run in the handle_event function, because they're not safe in a vblank context. */ + if (handle_pending_command()) { + pending_command = GB_SDL_NO_COMMAND; + goto restart; + } + pending_command = GB_SDL_NO_COMMAND; + } +} + +static char prefs_path[1024] = {0, }; + +static void save_configuration(void) +{ + FILE *prefs_file = fopen(prefs_path, "wb"); + if (prefs_file) { + fwrite(&configuration, 1, sizeof(configuration), prefs_file); + fclose(prefs_file); + } +} + +static void stop_recording(void) +{ + GB_stop_audio_recording(&gb); +} + +static bool get_arg_flag(const char *flag, int *argc, char **argv) +{ + for (unsigned i = 1; i < *argc; i++) { + if (strcmp(argv[i], flag) == 0) { + (*argc)--; + argv[i] = argv[*argc]; + return true; + } + } + return false; +} + +#ifdef __APPLE__ +#include +static void enable_smooth_scrolling(void) +{ + CFPreferencesSetAppValue(CFSTR("AppleMomentumScrollSupported"), kCFBooleanTrue, kCFPreferencesCurrentApplication); +} +#endif + +int main(int argc, char **argv) +{ +#ifdef _WIN32 + SetProcessDPIAware(); +#endif +#ifdef __APPLE__ + enable_smooth_scrolling(); +#endif + + bool fullscreen = get_arg_flag("--fullscreen", &argc, argv) || get_arg_flag("-f", &argc, argv); + bool nogl = get_arg_flag("--nogl", &argc, argv); + stop_on_start = get_arg_flag("--stop-debugger", &argc, argv) || get_arg_flag("-s", &argc, argv); + + if (argc > 2 || (argc == 2 && argv[1][0] == '-')) { + fprintf(stderr, "SameBoy v" GB_VERSION "\n"); + fprintf(stderr, "Usage: %s [--fullscreen|-f] [--nogl] [--stop-debugger|-s] [rom]\n", argv[0]); + exit(1); + } + + if (argc == 2) { + filename = argv[1]; + } + + signal(SIGINT, debugger_interrupt); + + SDL_Init(SDL_INIT_EVERYTHING & ~SDL_INIT_AUDIO); + if ((console_supported = CON_start(completer))) { + CON_set_repeat_empty(true); + CON_printf("SameBoy v" GB_VERSION "\n"); + } + else { + fprintf(stderr, "SameBoy v" GB_VERSION "\n"); + } + + strcpy(prefs_path, resource_path("prefs.bin")); + if (access(prefs_path, R_OK | W_OK) != 0) { + char *prefs_dir = SDL_GetPrefPath("", "SameBoy"); + snprintf(prefs_path, sizeof(prefs_path) - 1, "%sprefs.bin", prefs_dir); + SDL_free(prefs_dir); + } + + FILE *prefs_file = fopen(prefs_path, "rb"); + if (prefs_file) { + fread(&configuration, 1, sizeof(configuration), prefs_file); + fclose(prefs_file); + + /* Sanitize for stability */ + configuration.color_correction_mode %= GB_COLOR_CORRECTION_MODERN_ACCURATE + 1; + configuration.scaling_mode %= GB_SDL_SCALING_MAX; + configuration.default_scale %= GB_SDL_DEFAULT_SCALE_MAX + 1; + configuration.blending_mode %= GB_FRAME_BLENDING_MODE_ACCURATE + 1; + configuration.highpass_mode %= GB_HIGHPASS_MAX; + configuration.model %= MODEL_MAX; + configuration.sgb_revision %= SGB_MAX; + configuration.dmg_palette %= 5; + if (configuration.dmg_palette) { + configuration.gui_pallete_enabled = true; + } + configuration.border_mode %= GB_BORDER_ALWAYS + 1; + configuration.rumble_mode %= GB_RUMBLE_ALL_GAMES + 1; + configuration.color_temperature %= 21; + configuration.bootrom_path[sizeof(configuration.bootrom_path) - 1] = 0; + configuration.cgb_revision %= GB_MODEL_CGB_E - GB_MODEL_CGB_0 + 1; + configuration.audio_driver[15] = 0; + configuration.dmg_palette_name[24] = 0; + // Fix broken defaults, should keys 12-31 should be unmapped by default + if (configuration.joypad_configuration[31] == 0) { + memset(configuration.joypad_configuration + 12 , -1, 32 - 12); + } + if ((configuration.agb_revision & ~GB_MODEL_GBP_BIT) != GB_MODEL_AGB_A) { + configuration.agb_revision = GB_MODEL_AGB_A; + } + } + + if (configuration.model >= MODEL_MAX) { + configuration.model = MODEL_CGB; + } + + if (configuration.default_scale == 0) { + configuration.default_scale = 2; + } + + atexit(save_configuration); + atexit(stop_recording); + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + configuration.allow_background_controllers? "1" : "0"); + + window = SDL_CreateWindow("SameBoy v" GB_VERSION, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + 160 * configuration.default_scale, 144 * configuration.default_scale, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); + if (window == NULL) { + fputs(SDL_GetError(), stderr); + exit(1); + } + SDL_SetWindowMinimumSize(window, 160, 144); + + if (fullscreen) { + SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); + } + + gl_context = nogl? NULL : SDL_GL_CreateContext(window); + + GLint major = 0, minor = 0; + if (gl_context) { + glGetIntegerv(GL_MAJOR_VERSION, &major); + glGetIntegerv(GL_MINOR_VERSION, &minor); + } + + if (gl_context && major * 0x100 + minor < 0x302) { + SDL_GL_DeleteContext(gl_context); + gl_context = NULL; + } + + if (gl_context == NULL) { + renderer = SDL_CreateRenderer(window, -1, 0); + texture = SDL_CreateTexture(renderer, SDL_GetWindowPixelFormat(window), SDL_TEXTUREACCESS_STREAMING, 160, 144); + pixel_format = SDL_AllocFormat(SDL_GetWindowPixelFormat(window)); + } + else { + pixel_format = SDL_AllocFormat(SDL_PIXELFORMAT_ABGR8888); + } + + GB_audio_init(); + + SDL_EventState(SDL_DROPFILE, SDL_ENABLE); + + if (!init_shader_with_name(&shader, configuration.filter)) { + init_shader_with_name(&shader, "NearestNeighbor"); + } + update_viewport(); + + if (filename == NULL) { + stop_on_start = false; + run_gui(false); + } + else { + connect_joypad(); + } + GB_audio_set_paused(false); + run(); // Never returns + return 0; +} diff --git a/thirdparty/SameBoy-old/SDL/opengl_compat.c b/thirdparty/SameBoy-old/SDL/opengl_compat.c new file mode 100644 index 000000000..af7ce6d77 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/opengl_compat.c @@ -0,0 +1,34 @@ +#define GL_GLEXT_PROTOTYPES +#include + +#ifndef __APPLE__ +#define GL_COMPAT_NAME(func) gl_compat_##func +#define GL_COMPAT_VAR(func) typeof(func) *GL_COMPAT_NAME(func) + +GL_COMPAT_VAR(glCreateShader); +GL_COMPAT_VAR(glGetAttribLocation); +GL_COMPAT_VAR(glGetUniformLocation); +GL_COMPAT_VAR(glUseProgram); +GL_COMPAT_VAR(glGenVertexArrays); +GL_COMPAT_VAR(glBindVertexArray); +GL_COMPAT_VAR(glGenBuffers); +GL_COMPAT_VAR(glBindBuffer); +GL_COMPAT_VAR(glBufferData); +GL_COMPAT_VAR(glEnableVertexAttribArray); +GL_COMPAT_VAR(glVertexAttribPointer); +GL_COMPAT_VAR(glCreateProgram); +GL_COMPAT_VAR(glAttachShader); +GL_COMPAT_VAR(glLinkProgram); +GL_COMPAT_VAR(glGetProgramiv); +GL_COMPAT_VAR(glGetProgramInfoLog); +GL_COMPAT_VAR(glDeleteShader); +GL_COMPAT_VAR(glUniform2f); +GL_COMPAT_VAR(glActiveTexture); +GL_COMPAT_VAR(glUniform1i); +GL_COMPAT_VAR(glBindFragDataLocation); +GL_COMPAT_VAR(glDeleteProgram); +GL_COMPAT_VAR(glShaderSource); +GL_COMPAT_VAR(glCompileShader); +GL_COMPAT_VAR(glGetShaderiv); +GL_COMPAT_VAR(glGetShaderInfoLog); +#endif diff --git a/thirdparty/SameBoy-old/SDL/opengl_compat.h b/thirdparty/SameBoy-old/SDL/opengl_compat.h new file mode 100644 index 000000000..4b79b0c7c --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/opengl_compat.h @@ -0,0 +1,45 @@ +#ifndef opengl_compat_h +#define opengl_compat_h + +#define GL_GLEXT_PROTOTYPES +#include +#include + +#ifndef __APPLE__ +#define GL_COMPAT_NAME(func) gl_compat_##func + +#define GL_COMPAT_WRAPPER(func) \ +({ extern typeof(func) *GL_COMPAT_NAME(func); \ +if (!GL_COMPAT_NAME(func)) GL_COMPAT_NAME(func) = SDL_GL_GetProcAddress(#func); \ + GL_COMPAT_NAME(func); \ +}) + +#define glCreateShader GL_COMPAT_WRAPPER(glCreateShader) +#define glGetAttribLocation GL_COMPAT_WRAPPER(glGetAttribLocation) +#define glGetUniformLocation GL_COMPAT_WRAPPER(glGetUniformLocation) +#define glUseProgram GL_COMPAT_WRAPPER(glUseProgram) +#define glGenVertexArrays GL_COMPAT_WRAPPER(glGenVertexArrays) +#define glBindVertexArray GL_COMPAT_WRAPPER(glBindVertexArray) +#define glGenBuffers GL_COMPAT_WRAPPER(glGenBuffers) +#define glBindBuffer GL_COMPAT_WRAPPER(glBindBuffer) +#define glBufferData GL_COMPAT_WRAPPER(glBufferData) +#define glEnableVertexAttribArray GL_COMPAT_WRAPPER(glEnableVertexAttribArray) +#define glVertexAttribPointer GL_COMPAT_WRAPPER(glVertexAttribPointer) +#define glCreateProgram GL_COMPAT_WRAPPER(glCreateProgram) +#define glAttachShader GL_COMPAT_WRAPPER(glAttachShader) +#define glLinkProgram GL_COMPAT_WRAPPER(glLinkProgram) +#define glGetProgramiv GL_COMPAT_WRAPPER(glGetProgramiv) +#define glGetProgramInfoLog GL_COMPAT_WRAPPER(glGetProgramInfoLog) +#define glDeleteShader GL_COMPAT_WRAPPER(glDeleteShader) +#define glUniform2f GL_COMPAT_WRAPPER(glUniform2f) +#define glActiveTexture GL_COMPAT_WRAPPER(glActiveTexture) +#define glUniform1i GL_COMPAT_WRAPPER(glUniform1i) +#define glBindFragDataLocation GL_COMPAT_WRAPPER(glBindFragDataLocation) +#define glDeleteProgram GL_COMPAT_WRAPPER(glDeleteProgram) +#define glShaderSource GL_COMPAT_WRAPPER(glShaderSource) +#define glCompileShader GL_COMPAT_WRAPPER(glCompileShader) +#define glGetShaderiv GL_COMPAT_WRAPPER(glGetShaderiv) +#define glGetShaderInfoLog GL_COMPAT_WRAPPER(glGetShaderInfoLog) +#endif + +#endif /* opengl_compat_h */ diff --git a/thirdparty/SameBoy-old/SDL/shader.c b/thirdparty/SameBoy-old/SDL/shader.c new file mode 100644 index 000000000..44de29044 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/shader.c @@ -0,0 +1,206 @@ +#include +#include +#include "shader.h" +#include "utils.h" + +static const char *vertex_shader = "\n\ +#version 150 \n\ +in vec4 aPosition;\n\ +void main(void) {\n\ +gl_Position = aPosition;\n\ +}\n\ +"; + +static GLuint create_shader(const char *source, GLenum type) +{ + // Create the shader object + GLuint shader = glCreateShader(type); + // Load the shader source + glShaderSource(shader, 1, &source, 0); + // Compile the shader + glCompileShader(shader); + // Check for errors + GLint status = 0; + glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + if (status == GL_FALSE) { + GLchar messages[1024]; + glGetShaderInfoLog(shader, sizeof(messages), 0, &messages[0]); + fprintf(stderr, "GLSL Shader Error: %s", messages); + } + return shader; +} + +static GLuint create_program(const char *vsh, const char *fsh) +{ + // Build shaders + GLuint vertex_shader = create_shader(vsh, GL_VERTEX_SHADER); + GLuint fragment_shader = create_shader(fsh, GL_FRAGMENT_SHADER); + + // Create program + GLuint program = glCreateProgram(); + + // Attach shaders + glAttachShader(program, vertex_shader); + glAttachShader(program, fragment_shader); + + // Link program + glLinkProgram(program); + // Check for errors + GLint status; + glGetProgramiv(program, GL_LINK_STATUS, &status); + + if (status == GL_FALSE) { + GLchar messages[1024]; + glGetProgramInfoLog(program, sizeof(messages), 0, &messages[0]); + fprintf(stderr, "GLSL Program Error: %s", messages); + } + + // Delete shaders + glDeleteShader(vertex_shader); + glDeleteShader(fragment_shader); + + return program; +} + +extern bool uses_gl(void); +bool init_shader_with_name(shader_t *shader, const char *name) +{ + if (!uses_gl()) return false; + + GLint major = 0, minor = 0; + glGetIntegerv(GL_MAJOR_VERSION, &major); + glGetIntegerv(GL_MINOR_VERSION, &minor); + + if (major * 0x100 + minor < 0x302) { + return false; + } + + static char master_shader_code[0x801] = {0,}; + static char shader_code[0x10001] = {0,}; + static char final_shader_code[0x10801] = {0,}; + static ssize_t filter_token_location = 0; + + if (!master_shader_code[0]) { + FILE *master_shader_f = fopen(resource_path("Shaders/MasterShader.fsh"), "r"); + if (!master_shader_f) return false; + fread(master_shader_code, 1, sizeof(master_shader_code) - 1, master_shader_f); + fclose(master_shader_f); + filter_token_location = strstr(master_shader_code, "{filter}") - master_shader_code; + if (filter_token_location < 0) { + master_shader_code[0] = 0; + return false; + } + } + + char shader_path[1024]; + sprintf(shader_path, "Shaders/%s.fsh", name); + + FILE *shader_f = fopen(resource_path(shader_path), "r"); + if (!shader_f) return false; + memset(shader_code, 0, sizeof(shader_code)); + fread(shader_code, 1, sizeof(shader_code) - 1, shader_f); + fclose(shader_f); + + memset(final_shader_code, 0, sizeof(final_shader_code)); + memcpy(final_shader_code, master_shader_code, filter_token_location); + strcpy(final_shader_code + filter_token_location, shader_code); + strcat(final_shader_code + filter_token_location, + master_shader_code + filter_token_location + sizeof("{filter}") - 1); + + shader->program = create_program(vertex_shader, final_shader_code); + + // Attributes + shader->position_attribute = glGetAttribLocation(shader->program, "aPosition"); + // Uniforms + shader->resolution_uniform = glGetUniformLocation(shader->program, "output_resolution"); + shader->origin_uniform = glGetUniformLocation(shader->program, "origin"); + + glGenTextures(1, &shader->texture); + glBindTexture(GL_TEXTURE_2D, shader->texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glBindTexture(GL_TEXTURE_2D, 0); + shader->texture_uniform = glGetUniformLocation(shader->program, "image"); + + glGenTextures(1, &shader->previous_texture); + glBindTexture(GL_TEXTURE_2D, shader->previous_texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glBindTexture(GL_TEXTURE_2D, 0); + shader->previous_texture_uniform = glGetUniformLocation(shader->program, "previous_image"); + + shader->blending_mode_uniform = glGetUniformLocation(shader->program, "frame_blending_mode"); + + // Program + + glUseProgram(shader->program); + + GLuint vao; + glGenVertexArrays(1, &vao); + glBindVertexArray(vao); + + GLuint vbo; + glGenBuffers(1, &vbo); + + // Attributes + + + static GLfloat const quad[16] = { + -1.f, -1.f, 0, 1, + -1.f, +1.f, 0, 1, + +1.f, -1.f, 0, 1, + +1.f, +1.f, 0, 1, + }; + + + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(quad), quad, GL_STATIC_DRAW); + glEnableVertexAttribArray(shader->position_attribute); + glVertexAttribPointer(shader->position_attribute, 4, GL_FLOAT, GL_FALSE, 0, 0); + + return true; +} + +void render_bitmap_with_shader(shader_t *shader, void *bitmap, void *previous, + unsigned source_width, unsigned source_height, + unsigned x, unsigned y, unsigned w, unsigned h, + GB_frame_blending_mode_t blending_mode) +{ + glUseProgram(shader->program); + glUniform2f(shader->origin_uniform, x, y); + glUniform2f(shader->resolution_uniform, w, h); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, shader->texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, source_width, source_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap); + glUniform1i(shader->texture_uniform, 0); + glUniform1i(shader->blending_mode_uniform, previous? blending_mode : GB_FRAME_BLENDING_MODE_DISABLED); + if (previous) { + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, shader->previous_texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, source_width, source_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, previous); + glUniform1i(shader->previous_texture_uniform, 1); + } + glBindFragDataLocation(shader->program, 0, "frag_color"); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); +} + +void free_shader(shader_t *shader) +{ + if (!uses_gl()) return; + GLint major = 0, minor = 0; + glGetIntegerv(GL_MAJOR_VERSION, &major); + glGetIntegerv(GL_MINOR_VERSION, &minor); + + if (major * 0x100 + minor < 0x302) { + return; + } + + glDeleteProgram(shader->program); + glDeleteTextures(1, &shader->texture); + glDeleteTextures(1, &shader->previous_texture); + +} diff --git a/thirdparty/SameBoy-old/SDL/shader.h b/thirdparty/SameBoy-old/SDL/shader.h new file mode 100644 index 000000000..149958d50 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/shader.h @@ -0,0 +1,34 @@ +#ifndef shader_h +#define shader_h +#include "opengl_compat.h" +#include + +typedef struct shader_s { + GLuint resolution_uniform; + GLuint origin_uniform; + GLuint texture_uniform; + GLuint previous_texture_uniform; + GLuint blending_mode_uniform; + + GLuint position_attribute; + GLuint texture; + GLuint previous_texture; + GLuint program; +} shader_t; + +typedef enum { + GB_FRAME_BLENDING_MODE_DISABLED, + GB_FRAME_BLENDING_MODE_SIMPLE, + GB_FRAME_BLENDING_MODE_ACCURATE, + GB_FRAME_BLENDING_MODE_ACCURATE_EVEN = GB_FRAME_BLENDING_MODE_ACCURATE, + GB_FRAME_BLENDING_MODE_ACCURATE_ODD, +} GB_frame_blending_mode_t; + +bool init_shader_with_name(shader_t *shader, const char *name); +void render_bitmap_with_shader(shader_t *shader, void *bitmap, void *previous, + unsigned source_width, unsigned source_height, + unsigned x, unsigned y, unsigned w, unsigned h, + GB_frame_blending_mode_t blending_mode); +void free_shader(struct shader_s *shader); + +#endif /* shader_h */ diff --git a/thirdparty/SameBoy-old/SDL/utils.c b/thirdparty/SameBoy-old/SDL/utils.c new file mode 100644 index 000000000..603e34a83 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/utils.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include "utils.h" + +static const char *resource_folder(void) +{ + static const char *ret = NULL; + if (!ret) { + ret = SDL_GetBasePath(); + if (!ret) { + ret = "./"; + } + } + return ret; +} + +char *resource_path(const char *filename) +{ + static char path[1024]; + + snprintf(path, sizeof(path), "%s%s", resource_folder(), filename); +#ifdef DATA_DIR + if (access(path, F_OK) == 0) { + return path; + } + snprintf(path, sizeof(path), "%s%s", DATA_DIR, filename); +#endif + return path; +} + + +void replace_extension(const char *src, size_t length, char *dest, const char *ext) +{ + memcpy(dest, src, length); + dest[length] = 0; + + /* Remove extension */ + for (size_t i = length; i--;) { + if (dest[i] == '/') break; + if (dest[i] == '.') { + dest[i] = 0; + break; + } + } + + /* Add new extension */ + strcat(dest, ext); +} diff --git a/thirdparty/SameBoy-old/SDL/utils.h b/thirdparty/SameBoy-old/SDL/utils.h new file mode 100644 index 000000000..5c0383d38 --- /dev/null +++ b/thirdparty/SameBoy-old/SDL/utils.h @@ -0,0 +1,8 @@ +#ifndef utils_h +#define utils_h +#include + +char *resource_path(const char *filename); +void replace_extension(const char *src, size_t length, char *dest, const char *ext); + +#endif /* utils_h */ diff --git a/thirdparty/SameBoy-old/Shaders/AAOmniScaleLegacy.fsh b/thirdparty/SameBoy-old/Shaders/AAOmniScaleLegacy.fsh new file mode 100644 index 000000000..b84e2cedd --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/AAOmniScaleLegacy.fsh @@ -0,0 +1,118 @@ + +STATIC float quickDistance(vec4 a, vec4 b) +{ + return abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z); +} + +STATIC vec4 omniScale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + vec2 pixel = position * input_resolution - vec2(0.5, 0.5); + + vec4 q11 = texture(image, (floor(pixel) + 0.5) / input_resolution); + vec4 q12 = texture(image, (vec2(floor(pixel.x), ceil(pixel.y)) + 0.5) / input_resolution); + vec4 q21 = texture(image, (vec2(ceil(pixel.x), floor(pixel.y)) + 0.5) / input_resolution); + vec4 q22 = texture(image, (ceil(pixel) + 0.5) / input_resolution); + + vec2 pos = fract(pixel); + + /* Special handling for diaonals */ + bool hasDownDiagonal = false; + bool hasUpDiagonal = false; + if (equal(q12, q21) && inequal(q11, q22)) hasUpDiagonal = true; + else if (inequal(q12, q21) && equal(q11, q22)) hasDownDiagonal = true; + else if (equal(q12, q21) && equal(q11, q22)) { + if (equal(q11, q12)) return q11; + int diagonalBias = 0; + for (float y = -1.0; y < 3.0; y++) { + for (float x = -1.0; x < 3.0; x++) { + vec4 color = texture(image, (pixel + vec2(x, y)) / input_resolution); + if (equal(color, q11)) diagonalBias++; + if (equal(color, q12)) diagonalBias--; + } + } + if (diagonalBias <= 0) { + hasDownDiagonal = true; + } + if (diagonalBias >= 0) { + hasUpDiagonal = true; + } + } + + if (hasUpDiagonal || hasDownDiagonal) { + vec4 downDiagonalResult, upDiagonalResult; + + if (hasUpDiagonal) { + float diagonalPos = pos.x + pos.y; + + if (diagonalPos < 0.5) { + upDiagonalResult = q11; + } + else if (diagonalPos > 1.5) { + upDiagonalResult = q22; + } + else { + upDiagonalResult = q12; + } + } + + if (hasDownDiagonal) { + float diagonalPos = 1.0 - pos.x + pos.y; + + if (diagonalPos < 0.5) { + downDiagonalResult = q21; + } + else if (diagonalPos > 1.5) { + downDiagonalResult = q12; + } + else { + downDiagonalResult = q11; + } + } + + if (!hasUpDiagonal) return downDiagonalResult; + if (!hasDownDiagonal) return upDiagonalResult; + return mix(downDiagonalResult, upDiagonalResult, 0.5); + } + + vec4 r1 = mix(q11, q21, fract(pos.x)); + vec4 r2 = mix(q12, q22, fract(pos.x)); + + vec4 unqunatized = mix(r1, r2, fract(pos.y)); + + float q11d = quickDistance(unqunatized, q11); + float q21d = quickDistance(unqunatized, q21); + float q12d = quickDistance(unqunatized, q12); + float q22d = quickDistance(unqunatized, q22); + + float best = min(q11d, + min(q21d, + min(q12d, + q22d))); + + if (equal(q11d, best)) { + return q11; + } + + if (equal(q21d, best)) { + return q21; + } + + if (equal(q12d, best)) { + return q12; + } + + return q22; +} + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + vec2 pixel = vec2(1.0, 1.0) / output_resolution; + // 4-pixel super sampling + + vec4 q11 = omniScale(image, position + pixel * vec2(-0.25, -0.25), input_resolution, output_resolution); + vec4 q21 = omniScale(image, position + pixel * vec2(+0.25, -0.25), input_resolution, output_resolution); + vec4 q12 = omniScale(image, position + pixel * vec2(-0.25, +0.25), input_resolution, output_resolution); + vec4 q22 = omniScale(image, position + pixel * vec2(+0.25, +0.25), input_resolution, output_resolution); + + return (q11 + q21 + q12 + q22) / 4.0; +} diff --git a/thirdparty/SameBoy-old/Shaders/AAScale2x.fsh b/thirdparty/SameBoy-old/Shaders/AAScale2x.fsh new file mode 100644 index 000000000..b1b35cefe --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/AAScale2x.fsh @@ -0,0 +1,38 @@ +STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // texel arrangement + // A B C + // D E F + // G H I + // vec4 A = texture(image, position + vec2( -o.x, o.y)); + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); + vec2 p = position * input_resolution; + // p = the position within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + return equal(B, F) && inequal(B, D) && inequal(F, H) ? F : E; + } else { + // Bottom Right + return equal(H, F) && inequal(D, H) && inequal(B, F) ? F : E; + } + } else { + if (p.y > .5) { + // Top Left + return equal(D, B) && inequal(B, F) && inequal(D, H) ? D : E; + } else { + // Bottom Left + return equal(D, H) && inequal(D, B) && inequal(H, F) ? D : E; + } + } +} + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + return mix(texture(image, position), scale2x(image, position, input_resolution, output_resolution), 0.5); +} diff --git a/thirdparty/SameBoy-old/Shaders/AAScale4x.fsh b/thirdparty/SameBoy-old/Shaders/AAScale4x.fsh new file mode 100644 index 000000000..f8237c791 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/AAScale4x.fsh @@ -0,0 +1,75 @@ +STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // texel arrangement + // A B C + // D E F + // G H I + + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); + vec2 p = position * input_resolution; + // p = the position within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + return equal(B, F) && inequal(B, D) && inequal(F, H) ? F : E; + } else { + // Bottom Right + return equal(H, F) && inequal(D, H) && inequal(B, F) ? F : E; + } + } else { + if (p.y > .5) { + // Top Left + return equal(D, B) && inequal(B, F) && inequal(D, H) ? D : E; + } else { + // Bottom Left + return equal(D, H) && inequal(D, B) && inequal(H, F) ? D : E; + } + } +} +STATIC vec4 scale2x_wrapper(sampler2D t, vec2 pos, vec2 offset, vec2 input_resolution, vec2 output_resolution) +{ + vec2 origin = (floor(pos * input_resolution * 2)) + vec2(0.5, 0.5); + return scale2x(t, (origin + offset) / input_resolution / 2, input_resolution, output_resolution); +} + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // texel arrangement + // A B C + // D E F + // G H I + vec4 B = scale2x_wrapper(image, position, vec2( 0, 1), input_resolution, output_resolution); + vec4 D = scale2x_wrapper(image, position, vec2( -1, 0), input_resolution, output_resolution); + vec4 E = scale2x_wrapper(image, position, vec2( 0, 0), input_resolution, output_resolution); + vec4 F = scale2x_wrapper(image, position, vec2( 1, 0), input_resolution, output_resolution); + vec4 H = scale2x_wrapper(image, position, vec2( 0, -1), input_resolution, output_resolution); + + vec4 R; + vec2 p = position * input_resolution * 2.; + // p = the position within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + R = equal(B, F) && inequal(B, D) && inequal(F, H) ? F : E; + } else { + // Bottom Right + R = equal(H, F) && inequal(D, H) && inequal(B, F) ? F : E; + } + } else { + if (p.y > .5) { + // Top Left + R = equal(D, B) && inequal(B, F) && inequal(D, H) ? D : E; + } else { + // Bottom Left + R = equal(D, H) && inequal(D, B) && inequal(H, F) ? D : E; + } + } + + return mix(R, E, 0.5); +} diff --git a/thirdparty/SameBoy-old/Shaders/Bilinear.fsh b/thirdparty/SameBoy-old/Shaders/Bilinear.fsh new file mode 100644 index 000000000..e68e1d19f --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/Bilinear.fsh @@ -0,0 +1,14 @@ +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + vec2 pixel = position * input_resolution - vec2(0.5, 0.5); + + vec4 q11 = texture(image, (floor(pixel) + 0.5) / input_resolution); + vec4 q12 = texture(image, (vec2(floor(pixel.x), ceil(pixel.y)) + 0.5) / input_resolution); + vec4 q21 = texture(image, (vec2(ceil(pixel.x), floor(pixel.y)) + 0.5) / input_resolution); + vec4 q22 = texture(image, (ceil(pixel) + 0.5) / input_resolution); + + vec4 r1 = mix(q11, q21, fract(pixel.x)); + vec4 r2 = mix(q12, q22, fract(pixel.x)); + + return mix (r1, r2, fract(pixel.y)); +} diff --git a/thirdparty/SameBoy-old/Shaders/CRT.fsh b/thirdparty/SameBoy-old/Shaders/CRT.fsh new file mode 100644 index 000000000..25e5b37f4 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/CRT.fsh @@ -0,0 +1,162 @@ +#define COLOR_LOW 0.7 +#define COLOR_HIGH 1.0 +#define VERTICAL_BORDER_DEPTH 0.6 +#define SCANLINE_DEPTH 0.3 +#define CURVENESS 0.3 + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + /* Curve and pixel ratio */ + float y_curve = cos(position.x - 0.5) * CURVENESS + (1 - CURVENESS); + float y_multiplier = 8.0 / 7.0 / y_curve; + position.y *= y_multiplier; + position.y -= (y_multiplier - 1) / 2; + if (position.y < 0.0) return vec4(0,0,0,0); + if (position.y > 1.0) return vec4(0,0,0,0); + + float x_curve = cos(position.y - 0.5) * CURVENESS + (1 - CURVENESS); + float x_multiplier = 1/x_curve; + position.x *= x_multiplier; + position.x -= (x_multiplier - 1) / 2; + if (position.x < 0.0) return vec4(0,0,0,0); + if (position.x > 1.0) return vec4(0,0,0,0); + + /* Setting up common vars */ + vec2 pos = fract(position * input_resolution); + vec2 sub_pos = fract(position * input_resolution * 6); + + vec4 center = texture_relative(image, position, vec2(0, 0)); + vec4 left = texture_relative(image, position, vec2(-1, 0)); + vec4 right = texture_relative(image, position, vec2(1, 0)); + + /* Vertical blurring */ + if (pos.y < 1.0 / 6.0) { + center = mix(center, texture_relative(image, position, vec2( 0, -1)), 0.5 - sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, -1)), 0.5 - sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, -1)), 0.5 - sub_pos.y / 2.0); + } + else if (pos.y > 5.0 / 6.0) { + center = mix(center, texture_relative(image, position, vec2( 0, 1)), sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, 1)), sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, 1)), sub_pos.y / 2.0); + } + + /* Scanlines */ + float scanline_multiplier; + if (pos.y < 0.5) { + scanline_multiplier = (pos.y * 2) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + else { + scanline_multiplier = ((1 - pos.y) * 2) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + + center *= scanline_multiplier; + left *= scanline_multiplier; + right *= scanline_multiplier; + + /* Vertical seperator for shadow masks */ + bool odd = bool(int((position * input_resolution).x) & 1); + if (odd) { + pos.y += 0.5; + pos.y = fract(pos.y); + } + + if (pos.y < 1.0 / 3.0) { + float gradient_position = pos.y * 3.0; + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + } + else if (pos.y > 2.0 / 3.0) { + float gradient_position = (1 - pos.y) * 3.0; + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + } + + /* Blur the edges of the separators of adjacent columns */ + if (pos.x < 1.0 / 6.0 || pos.x > 5.0 / 6.0) { + pos.y += 0.5; + pos.y = fract(pos.y); + + if (pos.y < 1.0 / 3.0) { + float gradient_position = pos.y * 3.0; + if (pos.x < 0.5) { + gradient_position = 1 - (1 - gradient_position) * (1 - (pos.x) * 6.0); + } + else { + gradient_position = 1 - (1 - gradient_position) * (1 - (1 - pos.x) * 6.0); + } + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + } + else if (pos.y > 2.0 / 3.0) { + float gradient_position = (1 - pos.y) * 3.0; + if (pos.x < 0.5) { + gradient_position = 1 - (1 - gradient_position) * (1 - (pos.x) * 6.0); + } + else { + gradient_position = 1 - (1 - gradient_position) * (1 - (1 - pos.x) * 6.0); + } + center *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + left *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + right *= gradient_position * VERTICAL_BORDER_DEPTH + (1 - VERTICAL_BORDER_DEPTH); + } + } + + + /* Subpixel blurring, like LCD filter*/ + + vec4 midleft = mix(left, center, 0.5); + vec4 midright = mix(right, center, 0.5); + + vec4 ret; + if (pos.x < 1.0 / 6.0) { + ret = mix(vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_HIGH * left.b, 1), + vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_LOW * left.b, 1), + sub_pos.x); + } + else if (pos.x < 2.0 / 6.0) { + ret = mix(vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_LOW * left.b, 1), + vec4(COLOR_HIGH * center.r, COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), + sub_pos.x); + } + else if (pos.x < 3.0 / 6.0) { + ret = mix(vec4(COLOR_HIGH * center.r , COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), + vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g, COLOR_LOW * center.b, 1), + sub_pos.x); + } + else if (pos.x < 4.0 / 6.0) { + ret = mix(vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g , COLOR_LOW * center.b, 1), + vec4(COLOR_LOW * right.r , COLOR_HIGH * center.g, COLOR_HIGH * center.b, 1), + sub_pos.x); + } + else if (pos.x < 5.0 / 6.0) { + ret = mix(vec4(COLOR_LOW * right.r, COLOR_HIGH * center.g , COLOR_HIGH * center.b, 1), + vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), + sub_pos.x); + } + else { + ret = mix(vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), + vec4(COLOR_HIGH * right.r, COLOR_LOW * right.g , COLOR_HIGH * center.b, 1), + sub_pos.x); + } + + /* Anti alias the curve */ + vec2 pixel_position = position * output_resolution; + if (pixel_position.x < 1) { + ret *= pixel_position.x; + } + else if (pixel_position.x > output_resolution.x - 1) { + ret *= output_resolution.x - pixel_position.x; + } + if (pixel_position.y < 1) { + ret *= pixel_position.y; + } + else if (pixel_position.y > output_resolution.y - 1) { + ret *= output_resolution.y - pixel_position.y; + } + + return ret; +} diff --git a/thirdparty/SameBoy-old/Shaders/HQ2x.fsh b/thirdparty/SameBoy-old/Shaders/HQ2x.fsh new file mode 100644 index 000000000..0baf9e146 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/HQ2x.fsh @@ -0,0 +1,113 @@ +/* Based on this (really good) article: http://blog.pkh.me/p/19-butchering-hqx-scaling-filters.html */ + +/* The colorspace used by the HQnx filters is not really YUV, despite the algorithm description claims it is. It is + also not normalized. Therefore, we shall call the colorspace used by HQnx "HQ Colorspace" to avoid confusion. */ +STATIC vec3 rgb_to_hq_colospace(vec4 rgb) +{ + return vec3( 0.250 * rgb.r + 0.250 * rgb.g + 0.250 * rgb.b, + 0.250 * rgb.r - 0.000 * rgb.g - 0.250 * rgb.b, + -0.125 * rgb.r + 0.250 * rgb.g - 0.125 * rgb.b); +} + +STATIC bool is_different(vec4 a, vec4 b) +{ + vec3 diff = abs(rgb_to_hq_colospace(a) - rgb_to_hq_colospace(b)); + return diff.x > 0.018 || diff.y > 0.002 || diff.z > 0.005; +} + +#define P(m, r) ((pattern & (m)) == (r)) + +STATIC vec4 interp_2px(vec4 c1, float w1, vec4 c2, float w2) +{ + return (c1 * w1 + c2 * w2) / (w1 + w2); +} + +STATIC vec4 interp_3px(vec4 c1, float w1, vec4 c2, float w2, vec4 c3, float w3) +{ + return (c1 * w1 + c2 * w2 + c3 * w3) / (w1 + w2 + w3); +} + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // o = offset, the width of a pixel + vec2 o = vec2(1, 1); + + /* We always calculate the top left pixel. If we need a different pixel, we flip the image */ + + // p = the position within a pixel [0...1] + vec2 p = fract(position * input_resolution); + + if (p.x > 0.5) o.x = -o.x; + if (p.y > 0.5) o.y = -o.y; + + vec4 w0 = texture_relative(image, position, vec2( -o.x, -o.y)); + vec4 w1 = texture_relative(image, position, vec2( 0, -o.y)); + vec4 w2 = texture_relative(image, position, vec2( o.x, -o.y)); + vec4 w3 = texture_relative(image, position, vec2( -o.x, 0)); + vec4 w4 = texture_relative(image, position, vec2( 0, 0)); + vec4 w5 = texture_relative(image, position, vec2( o.x, 0)); + vec4 w6 = texture_relative(image, position, vec2( -o.x, o.y)); + vec4 w7 = texture_relative(image, position, vec2( 0, o.y)); + vec4 w8 = texture_relative(image, position, vec2( o.x, o.y)); + + int pattern = 0; + if (is_different(w0, w4)) pattern |= 1; + if (is_different(w1, w4)) pattern |= 2; + if (is_different(w2, w4)) pattern |= 4; + if (is_different(w3, w4)) pattern |= 8; + if (is_different(w5, w4)) pattern |= 16; + if (is_different(w6, w4)) pattern |= 32; + if (is_different(w7, w4)) pattern |= 64; + if (is_different(w8, w4)) pattern |= 128; + + if ((P(0xBF,0x37) || P(0xDB,0x13)) && is_different(w1, w5)) { + return interp_2px(w4, 3.0, w3, 1.0); + } + if ((P(0xDB,0x49) || P(0xEF,0x6D)) && is_different(w7, w3)) { + return interp_2px(w4, 3.0, w1, 1.0); + } + if ((P(0x0B,0x0B) || P(0xFE,0x4A) || P(0xFE,0x1A)) && is_different(w3, w1)) { + return w4; + } + if ((P(0x6F,0x2A) || P(0x5B,0x0A) || P(0xBF,0x3A) || P(0xDF,0x5A) || + P(0x9F,0x8A) || P(0xCF,0x8A) || P(0xEF,0x4E) || P(0x3F,0x0E) || + P(0xFB,0x5A) || P(0xBB,0x8A) || P(0x7F,0x5A) || P(0xAF,0x8A) || + P(0xEB,0x8A)) && is_different(w3, w1)) { + return interp_2px(w4, 3.0, w0, 1.0); + } + if (P(0x0B,0x08)) { + return interp_3px(w4, 2.0, w0, 1.0, w1, 1.0); + } + if (P(0x0B,0x02)) { + return interp_3px(w4, 2.0, w0, 1.0, w3, 1.0); + } + if (P(0x2F,0x2F)) { + return interp_3px(w4, 4.0, w3, 1.0, w1, 1.0); + } + if (P(0xBF,0x37) || P(0xDB,0x13)) { + return interp_3px(w4, 5.0, w1, 2.0, w3, 1.0); + } + if (P(0xDB,0x49) || P(0xEF,0x6D)) { + return interp_3px(w4, 5.0, w3, 2.0, w1, 1.0); + } + if (P(0x1B,0x03) || P(0x4F,0x43) || P(0x8B,0x83) || P(0x6B,0x43)) { + return interp_2px(w4, 3.0, w3, 1.0); + } + if (P(0x4B,0x09) || P(0x8B,0x89) || P(0x1F,0x19) || P(0x3B,0x19)) { + return interp_2px(w4, 3.0, w1, 1.0); + } + if (P(0x7E,0x2A) || P(0xEF,0xAB) || P(0xBF,0x8F) || P(0x7E,0x0E)) { + return interp_3px(w4, 2.0, w3, 3.0, w1, 3.0); + } + if (P(0xFB,0x6A) || P(0x6F,0x6E) || P(0x3F,0x3E) || P(0xFB,0xFA) || + P(0xDF,0xDE) || P(0xDF,0x1E)) { + return interp_2px(w4, 3.0, w0, 1.0); + } + if (P(0x0A,0x00) || P(0x4F,0x4B) || P(0x9F,0x1B) || P(0x2F,0x0B) || + P(0xBE,0x0A) || P(0xEE,0x0A) || P(0x7E,0x0A) || P(0xEB,0x4B) || + P(0x3B,0x1B)) { + return interp_3px(w4, 2.0, w3, 1.0, w1, 1.0); + } + + return interp_3px(w4, 6.0, w3, 1.0, w1, 1.0); +} diff --git a/thirdparty/SameBoy-old/Shaders/LCD.fsh b/thirdparty/SameBoy-old/Shaders/LCD.fsh new file mode 100644 index 000000000..d49ac57ed --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/LCD.fsh @@ -0,0 +1,68 @@ +#define COLOR_LOW 0.8 +#define COLOR_HIGH 1.0 +#define SCANLINE_DEPTH 0.1 + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + vec2 pos = fract(position * input_resolution); + vec2 sub_pos = fract(position * input_resolution * 6); + + vec4 center = texture_relative(image, position, vec2(0, 0)); + vec4 left = texture_relative(image, position, vec2(-1, 0)); + vec4 right = texture_relative(image, position, vec2(1, 0)); + + if (pos.y < 1.0 / 6.0) { + center = mix(center, texture_relative(image, position, vec2( 0, -1)), 0.5 - sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, -1)), 0.5 - sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, -1)), 0.5 - sub_pos.y / 2.0); + center *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + left *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + right *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + else if (pos.y > 5.0 / 6.0) { + center = mix(center, texture_relative(image, position, vec2( 0, 1)), sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, 1)), sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, 1)), sub_pos.y / 2.0); + center *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + left *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + right *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + + + vec4 midleft = mix(left, center, 0.5); + vec4 midright = mix(right, center, 0.5); + + vec4 ret; + if (pos.x < 1.0 / 6.0) { + ret = mix(vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_HIGH * left.b, 1), + vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_LOW * left.b, 1), + sub_pos.x); + } + else if (pos.x < 2.0 / 6.0) { + ret = mix(vec4(COLOR_HIGH * center.r, COLOR_LOW * center.g, COLOR_LOW * left.b, 1), + vec4(COLOR_HIGH * center.r, COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), + sub_pos.x); + } + else if (pos.x < 3.0 / 6.0) { + ret = mix(vec4(COLOR_HIGH * center.r , COLOR_HIGH * center.g, COLOR_LOW * midleft.b, 1), + vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g, COLOR_LOW * center.b, 1), + sub_pos.x); + } + else if (pos.x < 4.0 / 6.0) { + ret = mix(vec4(COLOR_LOW * midright.r, COLOR_HIGH * center.g , COLOR_LOW * center.b, 1), + vec4(COLOR_LOW * right.r , COLOR_HIGH * center.g, COLOR_HIGH * center.b, 1), + sub_pos.x); + } + else if (pos.x < 5.0 / 6.0) { + ret = mix(vec4(COLOR_LOW * right.r, COLOR_HIGH * center.g , COLOR_HIGH * center.b, 1), + vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), + sub_pos.x); + } + else { + ret = mix(vec4(COLOR_LOW * right.r, COLOR_LOW * midright.g, COLOR_HIGH * center.b, 1), + vec4(COLOR_HIGH * right.r, COLOR_LOW * right.g , COLOR_HIGH * center.b, 1), + sub_pos.x); + } + + return ret; +} diff --git a/thirdparty/SameBoy-old/Shaders/MasterShader.fsh b/thirdparty/SameBoy-old/Shaders/MasterShader.fsh new file mode 100644 index 000000000..24bba3cbe --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/MasterShader.fsh @@ -0,0 +1,78 @@ +#version 150 +uniform sampler2D image; +uniform sampler2D previous_image; +uniform int frame_blending_mode; + +uniform vec2 output_resolution; +uniform vec2 origin; + +#define equal(x, y) ((x) == (y)) +#define inequal(x, y) ((x) != (y)) +#define STATIC +#define GAMMA (2.2) + +out vec4 frag_color; + +vec4 _texture(sampler2D t, vec2 pos) +{ + return pow(texture(t, pos), vec4(GAMMA)); +} + +vec4 texture_relative(sampler2D t, vec2 pos, vec2 offset) +{ + vec2 input_resolution = textureSize(t, 0); + return _texture(t, (floor(pos * input_resolution) + offset + vec2(0.5, 0.5)) / input_resolution); +} + +#define texture _texture + +#line 1 +{filter} + + +#define BLEND_BIAS (2.0/5.0) + +#define DISABLED 0 +#define SIMPLE 1 +#define ACCURATE 2 +#define ACCURATE_EVEN ACCURATE +#define ACCURATE_ODD 3 + +void main() +{ + vec2 position = gl_FragCoord.xy - origin; + position /= output_resolution; + position.y = 1 - position.y; + vec2 input_resolution = textureSize(image, 0); + + float ratio; + switch (frame_blending_mode) { + default: + case DISABLED: + frag_color = pow(scale(image, position, input_resolution, output_resolution), vec4(1.0 / GAMMA)); + return; + case SIMPLE: + ratio = 0.5; + break; + case ACCURATE_EVEN: + if ((int(position.y * input_resolution.y) & 1) == 0) { + ratio = BLEND_BIAS; + } + else { + ratio = 1 - BLEND_BIAS; + } + break; + case ACCURATE_ODD: + if ((int(position.y * input_resolution.y) & 1) == 0) { + ratio = 1 - BLEND_BIAS; + } + else { + ratio = BLEND_BIAS; + } + break; + } + + frag_color = pow(mix(scale(image, position, input_resolution, output_resolution), + scale(previous_image, position, input_resolution, output_resolution), ratio), vec4(1.0 / GAMMA)); + +} diff --git a/thirdparty/SameBoy-old/Shaders/MasterShader.metal b/thirdparty/SameBoy-old/Shaders/MasterShader.metal new file mode 100644 index 000000000..7ba04dda6 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/MasterShader.metal @@ -0,0 +1,101 @@ +#include +#include +#include + +using namespace metal; + +/* For GLSL compatibility */ +typedef float2 vec2; +typedef float3 vec3; +typedef float4 vec4; +typedef texture2d sampler2D; +#define equal(x, y) all((x) == (y)) +#define inequal(x, y) any((x) != (y)) +#define STATIC static +#define GAMMA (2.2) + +typedef struct { + float4 position [[position]]; + float2 texcoords; +} rasterizer_data; + +// Vertex Function +vertex rasterizer_data vertex_shader(uint index [[ vertex_id ]], + constant vector_float2 *vertices [[ buffer(0) ]]) +{ + rasterizer_data out; + + out.position.xy = vertices[index].xy; + out.position.z = 0.0; + out.position.w = 1.0; + out.texcoords = (vertices[index].xy + float2(1, 1)) / 2.0; + + return out; +} + + +static inline float4 texture(texture2d texture, float2 pos) +{ + constexpr sampler texture_sampler; + return pow(float4(texture.sample(texture_sampler, pos)), GAMMA); +} + +__attribute__((unused)) static inline float4 texture_relative(texture2d t, float2 pos, float2 offset) +{ + float2 input_resolution = float2(t.get_width(), t.get_height());; + float2 origin = (floor(pos * input_resolution)) + float2(0.5, 0.5); + return texture(t, (origin + offset) / input_resolution); +} + +#line 1 +{filter} + +#define BLEND_BIAS (2.0/5.0) + +enum frame_blending_mode { + DISABLED, + SIMPLE, + ACCURATE, + ACCURATE_EVEN = ACCURATE, + ACCURATE_ODD, +}; + +fragment float4 fragment_shader(rasterizer_data in [[stage_in]], + texture2d image [[ texture(0) ]], + texture2d previous_image [[ texture(1) ]], + constant enum frame_blending_mode *frame_blending_mode [[ buffer(0) ]], + constant float2 *output_resolution [[ buffer(1) ]]) +{ + float2 input_resolution = float2(image.get_width(), image.get_height()); + + in.texcoords.y = 1 - in.texcoords.y; + float ratio; + switch (*frame_blending_mode) { + default: + case DISABLED: + return pow(scale(image, in.texcoords, input_resolution, *output_resolution), 1 / GAMMA); + case SIMPLE: + ratio = 0.5; + break; + case ACCURATE_EVEN: + if (((int)(in.texcoords.y * input_resolution.y) & 1) == 0) { + ratio = BLEND_BIAS; + } + else { + ratio = 1 - BLEND_BIAS; + } + break; + case ACCURATE_ODD: + if (((int)(in.texcoords.y * input_resolution.y) & 1) == 0) { + ratio = 1 - BLEND_BIAS; + } + else { + ratio = BLEND_BIAS; + } + break; + } + + return pow(mix(scale(image, in.texcoords, input_resolution, *output_resolution), + scale(previous_image, in.texcoords, input_resolution, *output_resolution), ratio), 1 / GAMMA); +} + diff --git a/thirdparty/SameBoy-old/Shaders/MonoLCD.fsh b/thirdparty/SameBoy-old/Shaders/MonoLCD.fsh new file mode 100644 index 000000000..009e1db17 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/MonoLCD.fsh @@ -0,0 +1,50 @@ +#define SCANLINE_DEPTH 0.25 +#define BLOOM 0.4 + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + vec2 pixel = position * input_resolution - vec2(0.5, 0.5); + + vec4 q11 = texture(image, (floor(pixel) + 0.5) / input_resolution); + vec4 q12 = texture(image, (vec2(floor(pixel.x), ceil(pixel.y)) + 0.5) / input_resolution); + vec4 q21 = texture(image, (vec2(ceil(pixel.x), floor(pixel.y)) + 0.5) / input_resolution); + vec4 q22 = texture(image, (ceil(pixel) + 0.5) / input_resolution); + + vec2 s = smoothstep(0., 1., fract(pixel)); + + vec4 r1 = mix(q11, q21, s.x); + vec4 r2 = mix(q12, q22, s.x); + + vec2 pos = fract(position * input_resolution); + vec2 sub_pos = fract(position * input_resolution * 6); + + float multiplier = 1.0; + + if (pos.y < 1.0 / 6.0) { + multiplier *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + else if (pos.y > 5.0 / 6.0) { + multiplier *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + + if (pos.x < 1.0 / 6.0) { + multiplier *= sub_pos.x * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + else if (pos.x > 5.0 / 6.0) { + multiplier *= (1.0 - sub_pos.x) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); + } + + vec4 pre_shadow = mix(texture(image, position) * multiplier, mix(r1, r2, s.y), BLOOM); + pixel += vec2(-0.6, -0.8); + + q11 = texture(image, (floor(pixel) + 0.5) / input_resolution); + q12 = texture(image, (vec2(floor(pixel.x), ceil(pixel.y)) + 0.5) / input_resolution); + q21 = texture(image, (vec2(ceil(pixel.x), floor(pixel.y)) + 0.5) / input_resolution); + q22 = texture(image, (ceil(pixel) + 0.5) / input_resolution); + + r1 = mix(q11, q21, fract(pixel.x)); + r2 = mix(q12, q22, fract(pixel.x)); + + vec4 shadow = mix(r1, r2, fract(pixel.y)); + return mix(min(shadow, pre_shadow), pre_shadow, 0.75); +} diff --git a/thirdparty/SameBoy-old/Shaders/NearestNeighbor.fsh b/thirdparty/SameBoy-old/Shaders/NearestNeighbor.fsh new file mode 100644 index 000000000..7f37024c0 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/NearestNeighbor.fsh @@ -0,0 +1,4 @@ +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + return texture(image, position); +} diff --git a/thirdparty/SameBoy-old/Shaders/OmniScale.fsh b/thirdparty/SameBoy-old/Shaders/OmniScale.fsh new file mode 100644 index 000000000..28ce3211d --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/OmniScale.fsh @@ -0,0 +1,262 @@ +/* OmniScale is derived from the pattern based design of HQnx, but with the following general differences: + - The actual output calculating was completely redesigned as resolution independent graphic generator. This allows + scaling to any factor. + - HQnx approximations that were good enough for a 2x/3x/4x factor were refined, creating smoother gradients. + - "Quarters" can be interpolated in more ways than in the HQnx filters + - If a pattern does not provide enough information to determine the suitable scaling interpolation, up to 16 pixels + per quarter are sampled (in contrast to the usual 9) in order to determine the best interpolation. + */ + +/* We use the same colorspace as the HQ algorithms. */ +STATIC vec3 rgb_to_hq_colospace(vec4 rgb) +{ + return vec3( 0.250 * rgb.r + 0.250 * rgb.g + 0.250 * rgb.b, + 0.250 * rgb.r - 0.000 * rgb.g - 0.250 * rgb.b, + -0.125 * rgb.r + 0.250 * rgb.g - 0.125 * rgb.b); +} + + +STATIC bool is_different(vec4 a, vec4 b) +{ + vec3 diff = abs(rgb_to_hq_colospace(a) - rgb_to_hq_colospace(b)); + return diff.x > 0.018 || diff.y > 0.002 || diff.z > 0.005; +} + +#define P(m, r) ((pattern & (m)) == (r)) + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // o = offset, the width of a pixel + vec2 o = vec2(1, 1); + + /* We always calculate the top left quarter. If we need a different quarter, we flip our co-ordinates */ + + // p = the position within a pixel [0...1] + vec2 p = fract(position * input_resolution); + + if (p.x > 0.5) { + o.x = -o.x; + p.x = 1.0 - p.x; + } + if (p.y > 0.5) { + o.y = -o.y; + p.y = 1.0 - p.y; + } + + vec4 w0 = texture_relative(image, position, vec2( -o.x, -o.y)); + vec4 w1 = texture_relative(image, position, vec2( 0, -o.y)); + vec4 w2 = texture_relative(image, position, vec2( o.x, -o.y)); + vec4 w3 = texture_relative(image, position, vec2( -o.x, 0)); + vec4 w4 = texture_relative(image, position, vec2( 0, 0)); + vec4 w5 = texture_relative(image, position, vec2( o.x, 0)); + vec4 w6 = texture_relative(image, position, vec2( -o.x, o.y)); + vec4 w7 = texture_relative(image, position, vec2( 0, o.y)); + vec4 w8 = texture_relative(image, position, vec2( o.x, o.y)); + + int pattern = 0; + if (is_different(w0, w4)) pattern |= 1 << 0; + if (is_different(w1, w4)) pattern |= 1 << 1; + if (is_different(w2, w4)) pattern |= 1 << 2; + if (is_different(w3, w4)) pattern |= 1 << 3; + if (is_different(w5, w4)) pattern |= 1 << 4; + if (is_different(w6, w4)) pattern |= 1 << 5; + if (is_different(w7, w4)) pattern |= 1 << 6; + if (is_different(w8, w4)) pattern |= 1 << 7; + + if ((P(0xBF,0x37) || P(0xDB,0x13)) && is_different(w1, w5)) { + return mix(w4, w3, 0.5 - p.x); + } + if ((P(0xDB,0x49) || P(0xEF,0x6D)) && is_different(w7, w3)) { + return mix(w4, w1, 0.5 - p.y); + } + if ((P(0x0B,0x0B) || P(0xFE,0x4A) || P(0xFE,0x1A)) && is_different(w3, w1)) { + return w4; + } + if ((P(0x6F,0x2A) || P(0x5B,0x0A) || P(0xBF,0x3A) || P(0xDF,0x5A) || + P(0x9F,0x8A) || P(0xCF,0x8A) || P(0xEF,0x4E) || P(0x3F,0x0E) || + P(0xFB,0x5A) || P(0xBB,0x8A) || P(0x7F,0x5A) || P(0xAF,0x8A) || + P(0xEB,0x8A)) && is_different(w3, w1)) { + return mix(w4, mix(w4, w0, 0.5 - p.x), 0.5 - p.y); + } + if (P(0x0B,0x08)) { + return mix(mix(w0 * 0.375 + w1 * 0.25 + w4 * 0.375, w4 * 0.5 + w1 * 0.5, p.x * 2.0), w4, p.y * 2.0); + } + if (P(0x0B,0x02)) { + return mix(mix(w0 * 0.375 + w3 * 0.25 + w4 * 0.375, w4 * 0.5 + w3 * 0.5, p.y * 2.0), w4, p.x * 2.0); + } + if (P(0x2F,0x2F)) { + float dist = length(p - vec2(0.5)); + float pixel_size = length(1.0 / (output_resolution / input_resolution)); + if (dist < 0.5 - pixel_size / 2) { + return w4; + } + vec4 r; + if (is_different(w0, w1) || is_different(w0, w3)) { + r = mix(w1, w3, p.y - p.x + 0.5); + } + else { + r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); + } + + if (dist > 0.5 + pixel_size / 2) { + return r; + } + return mix(w4, r, (dist - 0.5 + pixel_size / 2) / pixel_size); + } + if (P(0xBF,0x37) || P(0xDB,0x13)) { + float dist = p.x - 2.0 * p.y; + float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); + if (dist > pixel_size / 2) { + return w1; + } + vec4 r = mix(w3, w4, p.x + 0.5); + if (dist < -pixel_size / 2) { + return r; + } + return mix(r, w1, (dist + pixel_size / 2) / pixel_size); + } + if (P(0xDB,0x49) || P(0xEF,0x6D)) { + float dist = p.y - 2.0 * p.x; + float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); + if (p.y - 2.0 * p.x > pixel_size / 2) { + return w3; + } + vec4 r = mix(w1, w4, p.x + 0.5); + if (dist < -pixel_size / 2) { + return r; + } + return mix(r, w3, (dist + pixel_size / 2) / pixel_size); + } + if (P(0xBF,0x8F) || P(0x7E,0x0E)) { + float dist = p.x + 2.0 * p.y; + float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); + + if (dist > 1.0 + pixel_size / 2) { + return w4; + } + + vec4 r; + if (is_different(w0, w1) || is_different(w0, w3)) { + r = mix(w1, w3, p.y - p.x + 0.5); + } + else { + r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); + } + + if (dist < 1.0 - pixel_size / 2) { + return r; + } + + return mix(r, w4, (dist + pixel_size / 2 - 1.0) / pixel_size); + } + + if (P(0x7E,0x2A) || P(0xEF,0xAB)) { + float dist = p.y + 2.0 * p.x; + float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); + + if (p.y + 2.0 * p.x > 1.0 + pixel_size / 2) { + return w4; + } + + vec4 r; + + if (is_different(w0, w1) || is_different(w0, w3)) { + r = mix(w1, w3, p.y - p.x + 0.5); + } + else { + r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); + } + + if (dist < 1.0 - pixel_size / 2) { + return r; + } + + return mix(r, w4, (dist + pixel_size / 2 - 1.0) / pixel_size); + } + + if (P(0x1B,0x03) || P(0x4F,0x43) || P(0x8B,0x83) || P(0x6B,0x43)) { + return mix(w4, w3, 0.5 - p.x); + } + + if (P(0x4B,0x09) || P(0x8B,0x89) || P(0x1F,0x19) || P(0x3B,0x19)) { + return mix(w4, w1, 0.5 - p.y); + } + + if (P(0xFB,0x6A) || P(0x6F,0x6E) || P(0x3F,0x3E) || P(0xFB,0xFA) || + P(0xDF,0xDE) || P(0xDF,0x1E)) { + return mix(w4, w0, (1.0 - p.x - p.y) / 2.0); + } + + if (P(0x4F,0x4B) || P(0x9F,0x1B) || P(0x2F,0x0B) || + P(0xBE,0x0A) || P(0xEE,0x0A) || P(0x7E,0x0A) || P(0xEB,0x4B) || + P(0x3B,0x1B)) { + float dist = p.x + p.y; + float pixel_size = length(1.0 / (output_resolution / input_resolution)); + + if (dist > 0.5 + pixel_size / 2) { + return w4; + } + + vec4 r; + if (is_different(w0, w1) || is_different(w0, w3)) { + r = mix(w1, w3, p.y - p.x + 0.5); + } + else { + r = mix(mix(w1 * 0.375 + w0 * 0.25 + w3 * 0.375, w3, p.y * 2.0), w1, p.x * 2.0); + } + + if (dist < 0.5 - pixel_size / 2) { + return r; + } + + return mix(r, w4, (dist + pixel_size / 2 - 0.5) / pixel_size); + } + + if (P(0x0B,0x01)) { + return mix(mix(w4, w3, 0.5 - p.x), mix(w1, (w1 + w3) / 2.0, 0.5 - p.x), 0.5 - p.y); + } + + if (P(0x0B,0x00)) { + return mix(mix(w4, w3, 0.5 - p.x), mix(w1, w0, 0.5 - p.x), 0.5 - p.y); + } + + float dist = p.x + p.y; + float pixel_size = length(1.0 / (output_resolution / input_resolution)); + + if (dist > 0.5 + pixel_size / 2) { + return w4; + } + + /* We need more samples to "solve" this diagonal */ + vec4 x0 = texture_relative(image, position, vec2( -o.x * 2.0, -o.y * 2.0)); + vec4 x1 = texture_relative(image, position, vec2( -o.x , -o.y * 2.0)); + vec4 x2 = texture_relative(image, position, vec2( 0.0 , -o.y * 2.0)); + vec4 x3 = texture_relative(image, position, vec2( o.x , -o.y * 2.0)); + vec4 x4 = texture_relative(image, position, vec2( -o.x * 2.0, -o.y )); + vec4 x5 = texture_relative(image, position, vec2( -o.x * 2.0, 0.0 )); + vec4 x6 = texture_relative(image, position, vec2( -o.x * 2.0, o.y )); + + if (is_different(x0, w4)) pattern |= 1 << 8; + if (is_different(x1, w4)) pattern |= 1 << 9; + if (is_different(x2, w4)) pattern |= 1 << 10; + if (is_different(x3, w4)) pattern |= 1 << 11; + if (is_different(x4, w4)) pattern |= 1 << 12; + if (is_different(x5, w4)) pattern |= 1 << 13; + if (is_different(x6, w4)) pattern |= 1 << 14; + + int diagonal_bias = -7; + while (pattern != 0) { + diagonal_bias += pattern & 1; + pattern >>= 1; + } + + if (diagonal_bias <= 0) { + vec4 r = mix(w1, w3, p.y - p.x + 0.5); + if (dist < 0.5 - pixel_size / 2) { + return r; + } + return mix(r, w4, (dist + pixel_size / 2 - 0.5) / pixel_size); + } + + return w4; +} diff --git a/thirdparty/SameBoy-old/Shaders/OmniScaleLegacy.fsh b/thirdparty/SameBoy-old/Shaders/OmniScaleLegacy.fsh new file mode 100644 index 000000000..06849fdd0 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/OmniScaleLegacy.fsh @@ -0,0 +1,104 @@ +STATIC float quickDistance(vec4 a, vec4 b) +{ + return abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z); +} + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + vec2 pixel = position * input_resolution - vec2(0.5, 0.5); + + vec4 q11 = texture(image, (floor(pixel) + 0.5) / input_resolution); + vec4 q12 = texture(image, (vec2(floor(pixel.x), ceil(pixel.y)) + 0.5) / input_resolution); + vec4 q21 = texture(image, (vec2(ceil(pixel.x), floor(pixel.y)) + 0.5) / input_resolution); + vec4 q22 = texture(image, (ceil(pixel) + 0.5) / input_resolution); + + vec2 pos = fract(pixel); + + /* Special handling for diaonals */ + bool hasDownDiagonal = false; + bool hasUpDiagonal = false; + if (equal(q12, q21) && inequal(q11, q22)) hasUpDiagonal = true; + else if (inequal(q12, q21) && equal(q11, q22)) hasDownDiagonal = true; + else if (equal(q12, q21) && equal(q11, q22)) { + if (equal(q11, q12)) return q11; + int diagonalBias = 0; + for (float y = -1.0; y < 3.0; y++) { + for (float x = -1.0; x < 3.0; x++) { + vec4 color = texture(image, (pixel + vec2(x, y)) / input_resolution); + if (equal(color, q11)) diagonalBias++; + if (equal(color, q12)) diagonalBias--; + } + } + if (diagonalBias <= 0) { + hasDownDiagonal = true; + } + if (diagonalBias >= 0) { + hasUpDiagonal = true; + } + } + + if (hasUpDiagonal || hasDownDiagonal) { + vec4 downDiagonalResult, upDiagonalResult; + + if (hasUpDiagonal) { + float diagonalPos = pos.x + pos.y; + + if (diagonalPos < 0.5) { + upDiagonalResult = q11; + } + else if (diagonalPos > 1.5) { + upDiagonalResult = q22; + } + else { + upDiagonalResult = q12; + } + } + + if (hasDownDiagonal) { + float diagonalPos = 1.0 - pos.x + pos.y; + + if (diagonalPos < 0.5) { + downDiagonalResult = q21; + } + else if (diagonalPos > 1.5) { + downDiagonalResult = q12; + } + else { + downDiagonalResult = q11; + } + } + + if (!hasUpDiagonal) return downDiagonalResult; + if (!hasDownDiagonal) return upDiagonalResult; + return mix(downDiagonalResult, upDiagonalResult, 0.5); + } + + vec4 r1 = mix(q11, q21, fract(pos.x)); + vec4 r2 = mix(q12, q22, fract(pos.x)); + + vec4 unqunatized = mix(r1, r2, fract(pos.y)); + + float q11d = quickDistance(unqunatized, q11); + float q21d = quickDistance(unqunatized, q21); + float q12d = quickDistance(unqunatized, q12); + float q22d = quickDistance(unqunatized, q22); + + float best = min(q11d, + min(q21d, + min(q12d, + q22d))); + + if (equal(q11d, best)) { + return q11; + } + + if (equal(q21d, best)) { + return q21; + } + + if (equal(q12d, best)) { + return q12; + } + + return q22; +} diff --git a/thirdparty/SameBoy-old/Shaders/Scale2x.fsh b/thirdparty/SameBoy-old/Shaders/Scale2x.fsh new file mode 100644 index 000000000..44bcfc4d6 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/Scale2x.fsh @@ -0,0 +1,35 @@ +/* Shader implementation of Scale2x is adapted from https://gist.github.com/singron/3161079 */ + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // texel arrangement + // A B C + // D E F + // G H I + + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); + vec2 p = position * input_resolution; + // p = the position within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + return equal(B, F) && inequal(B, D) && inequal(F, H) ? F : E; + } else { + // Bottom Right + return equal(H, F) && inequal(D, H) && inequal(B, F) ? F : E; + } + } else { + if (p.y > .5) { + // Top Left + return equal(D, B) && inequal(B, F) && inequal(D, H) ? D : E; + } else { + // Bottom Left + return equal(D, H) && inequal(D, B) && inequal(H, F) ? D : E; + } + } +} diff --git a/thirdparty/SameBoy-old/Shaders/Scale4x.fsh b/thirdparty/SameBoy-old/Shaders/Scale4x.fsh new file mode 100644 index 000000000..93c4b2159 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/Scale4x.fsh @@ -0,0 +1,72 @@ +STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // texel arrangement + // A B C + // D E F + // G H I + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); + vec2 p = position * input_resolution; + // p = the position within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + return equal(B, F) && inequal(B, D) && inequal(F, H) ? F : E; + } else { + // Bottom Right + return equal(H, F) && inequal(D, H) && inequal(B, F) ? F : E; + } + } else { + if (p.y > .5) { + // Top Left + return equal(D, B) && inequal(B, F) && inequal(D, H) ? D : E; + } else { + // Bottom Left + return equal(D, H) && inequal(D, B) && inequal(H, F) ? D : E; + } + } +} + +STATIC vec4 scale2x_wrapper(sampler2D t, vec2 pos, vec2 offset, vec2 input_resolution, vec2 output_resolution) +{ + vec2 origin = (floor(pos * input_resolution * 2)) + vec2(0.5, 0.5); + return scale2x(t, (origin + offset) / input_resolution / 2, input_resolution, output_resolution); +} + +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + // texel arrangement + // A B C + // D E F + // G H I + vec4 B = scale2x_wrapper(image, position, vec2( 0, 1), input_resolution, output_resolution); + vec4 D = scale2x_wrapper(image, position, vec2( -1, 0), input_resolution, output_resolution); + vec4 E = scale2x_wrapper(image, position, vec2( 0, 0), input_resolution, output_resolution); + vec4 F = scale2x_wrapper(image, position, vec2( 1, 0), input_resolution, output_resolution); + vec4 H = scale2x_wrapper(image, position, vec2( 0, -1), input_resolution, output_resolution); + + vec2 p = position * input_resolution * 2.; + // p = the position within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + return equal(B, F) && inequal(B, D) && inequal(F, H) ? F : E; + } else { + // Bottom Right + return equal(H, F) && inequal(D, H) && inequal(B, F) ? F : E; + } + } else { + if (p.y > .5) { + // Top Left + return equal(D, B) && inequal(B, F) && inequal(D, H) ? D : E; + } else { + // Bottom Left + return equal(D, H) && inequal(D, B) && inequal(H, F) ? D : E; + } + } +} diff --git a/thirdparty/SameBoy-old/Shaders/SmoothBilinear.fsh b/thirdparty/SameBoy-old/Shaders/SmoothBilinear.fsh new file mode 100644 index 000000000..d50827723 --- /dev/null +++ b/thirdparty/SameBoy-old/Shaders/SmoothBilinear.fsh @@ -0,0 +1,16 @@ +STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +{ + vec2 pixel = position * input_resolution - vec2(0.5, 0.5); + + vec4 q11 = texture(image, (floor(pixel) + 0.5) / input_resolution); + vec4 q12 = texture(image, (vec2(floor(pixel.x), ceil(pixel.y)) + 0.5) / input_resolution); + vec4 q21 = texture(image, (vec2(ceil(pixel.x), floor(pixel.y)) + 0.5) / input_resolution); + vec4 q22 = texture(image, (ceil(pixel) + 0.5) / input_resolution); + + vec2 s = smoothstep(0., 1., fract(pixel)); + + vec4 r1 = mix(q11, q21, s.x); + vec4 r2 = mix(q12, q22, s.x); + + return mix (r1, r2, s.y); +} diff --git a/thirdparty/SameBoy-old/Tester/main.c b/thirdparty/SameBoy-old/Tester/main.c new file mode 100644 index 000000000..a1c89a52f --- /dev/null +++ b/thirdparty/SameBoy-old/Tester/main.c @@ -0,0 +1,537 @@ +// The tester requires low-level access to the GB struct to detect failures +#define GB_INTERNAL + +#include +#include +#include +#include +#include +#include +#ifdef _WIN32 +#include +#include +#define snprintf _snprintf +#else +#include +#endif + +#include +#include + +static bool running = false; +static char *filename; +static char *bmp_filename; +static char *log_filename; +static char *sav_filename; +static FILE *log_file; +static void replace_extension(const char *src, size_t length, char *dest, const char *ext); +static bool push_start_a, start_is_not_first, a_is_bad, b_is_confirm, push_faster, push_slower, + do_not_stop, push_a_twice, start_is_bad, allow_weird_sp_values, large_stack, push_right, + semi_random, limit_start, pointer_control, unsafe_speed_switch; +static unsigned int test_length = 60 * 40; +GB_gameboy_t gb; + +static unsigned int frames = 0; +static bool use_tga = false; +static uint8_t bmp_header[] = { + 0x42, 0x4D, 0x48, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x70, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x02, 0x68, 0x01, 0x00, 0x12, 0x0B, + 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +static uint8_t tga_header[] = { + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x90, 0x00, + 0x20, 0x28, +}; + +uint32_t bitmap[256*224]; + +static char *async_input_callback(GB_gameboy_t *gb) +{ + return NULL; +} + +static void handle_buttons(GB_gameboy_t *gb) +{ + if (!gb->cgb_double_speed && unsafe_speed_switch) { + return; + } + /* Do not press any buttons during the last two seconds, this might cause a + screenshot to be taken while the LCD is off if the press makes the game + load graphics. */ + if (push_start_a && (frames < test_length - 120 || do_not_stop)) { + unsigned combo_length = 40; + if (start_is_not_first || push_a_twice) combo_length = 60; /* The start item in the menu is not the first, so also push down */ + else if (a_is_bad || start_is_bad) combo_length = 20; /* Pressing A has a negative effect (when trying to start the game). */ + + if (semi_random) { + if (frames % 10 == 0) { + unsigned key = (((frames / 20) * 0x1337cafe) >> 29) & 7; + gb->keys[0][key] = (frames % 20) == 0; + } + } + else { + switch ((push_faster ? frames * 2 : + push_slower ? frames / 2 : + push_a_twice? frames / 4: + frames) % combo_length + (start_is_bad? 20 : 0) ) { + case 0: + if (!limit_start || frames < 20 * 60) { + GB_set_key_state(gb, push_right? GB_KEY_RIGHT: GB_KEY_START, true); + } + if (pointer_control) { + GB_set_key_state(gb, GB_KEY_LEFT, true); + GB_set_key_state(gb, GB_KEY_UP, true); + } + + break; + case 10: + GB_set_key_state(gb, push_right? GB_KEY_RIGHT: GB_KEY_START, false); + if (pointer_control) { + GB_set_key_state(gb, GB_KEY_LEFT, false); + GB_set_key_state(gb, GB_KEY_UP, false); + } + break; + case 20: + GB_set_key_state(gb, b_is_confirm? GB_KEY_B: GB_KEY_A, true); + break; + case 30: + GB_set_key_state(gb, b_is_confirm? GB_KEY_B: GB_KEY_A, false); + break; + case 40: + if (push_a_twice) { + GB_set_key_state(gb, b_is_confirm? GB_KEY_B: GB_KEY_A, true); + } + else if (gb->boot_rom_finished) { + GB_set_key_state(gb, GB_KEY_DOWN, true); + } + break; + case 50: + GB_set_key_state(gb, b_is_confirm? GB_KEY_B: GB_KEY_A, false); + GB_set_key_state(gb, GB_KEY_DOWN, false); + break; + } + } + } + +} + +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) +{ + /* Detect common crashes and stop the test early */ + if (frames < test_length - 1) { + if (gb->backtrace_size >= 0x200 + (large_stack? 0x80: 0) || (!allow_weird_sp_values && (gb->registers[GB_REGISTER_SP] >= 0xfe00 && gb->registers[GB_REGISTER_SP] < 0xff80))) { + GB_log(gb, "A stack overflow has probably occurred. (SP = $%04x; backtrace size = %d) \n", + gb->registers[GB_REGISTER_SP], gb->backtrace_size); + frames = test_length - 1; + } + if (gb->halted && !gb->interrupt_enable && gb->speed_switch_halt_countdown == 0) { + GB_log(gb, "The game is deadlocked.\n"); + frames = test_length - 1; + } + } + + if (frames >= test_length && !gb->disable_rendering) { + bool is_screen_blank = true; + if (!gb->sgb) { + for (unsigned i = 160 * 144; i--;) { + if (bitmap[i] != bitmap[0]) { + is_screen_blank = false; + break; + } + } + } + else { + if (gb->sgb->mask_mode == 0) { + for (unsigned i = 160 * 144; i--;) { + if (gb->sgb->screen_buffer[i] != gb->sgb->screen_buffer[0]) { + is_screen_blank = false; + break; + } + } + } + } + + /* Let the test run for extra four seconds if the screen is off/disabled */ + if (!is_screen_blank || frames >= test_length + 60 * 4) { + FILE *f = fopen(bmp_filename, "wb"); + if (use_tga) { + tga_header[0xC] = GB_get_screen_width(gb); + tga_header[0xD] = GB_get_screen_width(gb) >> 8; + tga_header[0xE] = GB_get_screen_height(gb); + tga_header[0xF] = GB_get_screen_height(gb) >> 8; + fwrite(&tga_header, 1, sizeof(tga_header), f); + } + else { + (*(uint32_t *)&bmp_header[0x2]) = sizeof(bmp_header) + sizeof(bitmap[0]) * GB_get_screen_width(gb) * GB_get_screen_height(gb) + 2; + (*(uint32_t *)&bmp_header[0x12]) = GB_get_screen_width(gb); + (*(int32_t *)&bmp_header[0x16]) = -GB_get_screen_height(gb); + (*(uint32_t *)&bmp_header[0x22]) = sizeof(bitmap[0]) * GB_get_screen_width(gb) * GB_get_screen_height(gb) + 2; + fwrite(&bmp_header, 1, sizeof(bmp_header), f); + } + fwrite(&bitmap, 1, sizeof(bitmap[0]) * GB_get_screen_width(gb) * GB_get_screen_height(gb), f); + fclose(f); + if (!gb->boot_rom_finished) { + GB_log(gb, "Boot ROM did not finish.\n"); + } + if (is_screen_blank) { + GB_log(gb, "Game probably stuck with blank screen. \n"); + } + if (sav_filename) { + GB_save_battery(gb, sav_filename); + } + running = false; + } + } + else if (frames >= test_length - 1) { + gb->disable_rendering = false; + } +} + +static void log_callback(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) +{ + if (!log_file) log_file = fopen(log_filename, "w"); + fprintf(log_file, "%s", string); +} + +#ifdef __APPLE__ +#include +#endif + +static const char *executable_folder(void) +{ + static char path[1024] = {0,}; + if (path[0]) { + return path; + } + /* Ugly unportable code! :( */ +#ifdef __APPLE__ + uint32_t length = sizeof(path) - 1; + _NSGetExecutablePath(&path[0], &length); +#else +#ifdef __linux__ + size_t __attribute__((unused)) length = readlink("/proc/self/exe", &path[0], sizeof(path) - 1); + assert(length != -1); +#else +#ifdef _WIN32 + HMODULE hModule = GetModuleHandle(NULL); + GetModuleFileName(hModule, path, sizeof(path) - 1); +#else + /* No OS-specific way, assume running from CWD */ + getcwd(&path[0], sizeof(path) - 1); + return path; +#endif +#endif +#endif + size_t pos = strlen(path); + while (pos) { + pos--; +#ifdef _WIN32 + if (path[pos] == '\\') { +#else + if (path[pos] == '/') { +#endif + path[pos] = 0; + break; + } + } + return path; +} + +static char *executable_relative_path(const char *filename) +{ + static char path[1024]; + snprintf(path, sizeof(path), "%s/%s", executable_folder(), filename); + return path; +} + +static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) +{ +#ifdef GB_BIG_ENDIAN + if (use_tga) { + return (r << 8) | (g << 16) | (b << 24); + } + return (r << 0) | (g << 8) | (b << 16); +#else + if (use_tga) { + return (r << 16) | (g << 8) | (b); + } + return (r << 24) | (g << 16) | (b << 8); +#endif +} + +static void replace_extension(const char *src, size_t length, char *dest, const char *ext) +{ + memcpy(dest, src, length); + dest[length] = 0; + + /* Remove extension */ + for (size_t i = length; i--;) { + if (dest[i] == '/') break; + if (dest[i] == '.') { + dest[i] = 0; + break; + } + } + + /* Add new extension */ + strcat(dest, ext); +} + + +int main(int argc, char **argv) +{ + fprintf(stderr, "SameBoy Tester v" GB_VERSION "\n"); + + if (argc == 1) { + fprintf(stderr, "Usage: %s [--dmg] [--sgb] [--cgb] [--start] [--length seconds] [--sav] [--boot path to boot ROM]" +#ifndef _WIN32 + " [--jobs number of tests to run simultaneously]" +#endif + " rom ...\n", argv[0]); + exit(1); + } + +#ifndef _WIN32 + unsigned int max_forks = 1; + unsigned int current_forks = 0; +#endif + + bool dmg = false; + bool sgb = false; + bool sav = false; + const char *boot_rom_path = NULL; + + GB_random_set_enabled(false); + + for (unsigned i = 1; i < argc; i++) { + if (strcmp(argv[i], "--dmg") == 0) { + fprintf(stderr, "Using DMG mode\n"); + dmg = true; + sgb = false; + continue; + } + + if (strcmp(argv[i], "--sgb") == 0) { + fprintf(stderr, "Using SGB mode\n"); + sgb = true; + dmg = false; + continue; + } + + if (strcmp(argv[i], "--cgb") == 0) { + fprintf(stderr, "Using CGB mode\n"); + dmg = false; + sgb = false; + continue; + } + + if (strcmp(argv[i], "--tga") == 0) { + fprintf(stderr, "Using TGA output\n"); + use_tga = true; + continue; + } + + if (strcmp(argv[i], "--start") == 0) { + fprintf(stderr, "Pushing Start and A\n"); + push_start_a = true; + continue; + } + + if (strcmp(argv[i], "--length") == 0 && i != argc - 1) { + test_length = atoi(argv[++i]) * 60; + fprintf(stderr, "Test length is %d seconds\n", test_length / 60); + continue; + } + + if (strcmp(argv[i], "--boot") == 0 && i != argc - 1) { + fprintf(stderr, "Using boot ROM %s\n", argv[i + 1]); + boot_rom_path = argv[++i]; + continue; + } + + if (strcmp(argv[i], "--sav") == 0) { + fprintf(stderr, "Saving a battery save\n"); + sav = true; + continue; + } + +#ifndef _WIN32 + if (strcmp(argv[i], "--jobs") == 0 && i != argc - 1) { + max_forks = atoi(argv[++i]); + /* Make sure wrong input doesn't blow anything up. */ + if (max_forks < 1) max_forks = 1; + if (max_forks > 16) max_forks = 16; + fprintf(stderr, "Running up to %d tests simultaneously\n", max_forks); + continue; + } + + if (max_forks > 1) { + while (current_forks >= max_forks) { + int wait_out; + while (wait(&wait_out) == -1); + current_forks--; + } + + current_forks++; + if (fork() != 0) continue; + } +#endif + filename = argv[i]; + size_t path_length = strlen(filename); + + char bitmap_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .bmp + NULL */ + replace_extension(filename, path_length, bitmap_path, use_tga? ".tga" : ".bmp"); + bmp_filename = &bitmap_path[0]; + + char log_path[path_length + 5]; + replace_extension(filename, path_length, log_path, ".log"); + log_filename = &log_path[0]; + + char sav_path[path_length + 5]; + if (sav) { + replace_extension(filename, path_length, sav_path, ".sav"); + sav_filename = &sav_path[0]; + } + + fprintf(stderr, "Testing ROM %s\n", filename); + + if (dmg) { + GB_init(&gb, GB_MODEL_DMG_B); + if (GB_load_boot_rom(&gb, boot_rom_path ?: executable_relative_path("dmg_boot.bin"))) { + fprintf(stderr, "Failed to load boot ROM from '%s'\n", boot_rom_path ?: executable_relative_path("dmg_boot.bin")); + exit(1); + } + } + else if (sgb) { + GB_init(&gb, GB_MODEL_SGB2); + if (GB_load_boot_rom(&gb, boot_rom_path ?: executable_relative_path("sgb2_boot.bin"))) { + fprintf(stderr, "Failed to load boot ROM from '%s'\n", boot_rom_path ?: executable_relative_path("sgb2_boot.bin")); + exit(1); + } + } + else { + GB_init(&gb, GB_MODEL_CGB_E); + if (GB_load_boot_rom(&gb, boot_rom_path ?: executable_relative_path("cgb_boot.bin"))) { + fprintf(stderr, "Failed to load boot ROM from '%s'\n", boot_rom_path ?: executable_relative_path("cgb_boot.bin")); + exit(1); + } + } + + GB_set_vblank_callback(&gb, (GB_vblank_callback_t) vblank); + GB_set_pixels_output(&gb, &bitmap[0]); + GB_set_rgb_encode_callback(&gb, rgb_encode); + GB_set_log_callback(&gb, log_callback); + GB_set_async_input_callback(&gb, async_input_callback); + GB_set_color_correction_mode(&gb, GB_COLOR_CORRECTION_EMULATE_HARDWARE); + GB_set_rtc_mode(&gb, GB_RTC_MODE_ACCURATE); + GB_set_emulate_joypad_bouncing(&gb, false); // Adds too much noise + + if (GB_load_rom(&gb, filename)) { + perror("Failed to load ROM"); + exit(1); + } + + /* Game specific hacks for start attempt automations */ + /* It's OK. No overflow is possible here. */ + start_is_not_first = strcmp((const char *)(gb.rom + 0x134), "NEKOJARA") == 0 || + strcmp((const char *)(gb.rom + 0x134), "GINGA") == 0; + a_is_bad = strcmp((const char *)(gb.rom + 0x134), "DESERT STRIKE") == 0 || + /* Restarting in Puzzle Boy/Kwirk (Start followed by A) leaks stack. */ + strcmp((const char *)(gb.rom + 0x134), "KWIRK") == 0 || + strcmp((const char *)(gb.rom + 0x134), "PUZZLE BOY") == 0; + start_is_bad = strcmp((const char *)(gb.rom + 0x134), "BLUESALPHA") == 0 || + strcmp((const char *)(gb.rom + 0x134), "ONI 5") == 0; + b_is_confirm = strcmp((const char *)(gb.rom + 0x134), "ELITE SOCCER") == 0 || + strcmp((const char *)(gb.rom + 0x134), "SOCCER") == 0 || + strcmp((const char *)(gb.rom + 0x134), "GEX GECKO") == 0 || + strcmp((const char *)(gb.rom + 0x134), "BABE") == 0; + push_faster = strcmp((const char *)(gb.rom + 0x134), "MOGURA DE PON!") == 0 || + strcmp((const char *)(gb.rom + 0x134), "HUGO2 1/2") == 0 || + strcmp((const char *)(gb.rom + 0x134), "HUGO") == 0; + push_slower = strcmp((const char *)(gb.rom + 0x134), "BAKENOU") == 0; + do_not_stop = strcmp((const char *)(gb.rom + 0x134), "SPACE INVADERS") == 0; + push_right = memcmp((const char *)(gb.rom + 0x134), "BOB ET BOB", strlen("BOB ET BOB")) == 0 || + strcmp((const char *)(gb.rom + 0x134), "LITTLE MASTER") == 0 || + /* M&M's Minis Madness Demo (which has no menu but the same title as the full game) */ + (memcmp((const char *)(gb.rom + 0x134), "MINIMADNESSBMIE", strlen("MINIMADNESSBMIE")) == 0 && + gb.rom[0x14e] == 0x6c); + /* This game has some terrible menus. */ + semi_random = strcmp((const char *)(gb.rom + 0x134), "KUKU GAME") == 0; + + + + /* This game temporarily sets SP to OAM RAM */ + allow_weird_sp_values = strcmp((const char *)(gb.rom + 0x134), "WDL:TT") == 0 || + /* Some mooneye-gb tests abuse the stack */ + strcmp((const char *)(gb.rom + 0x134), "mooneye-gb test") == 0; + + /* This game uses some recursive algorithms and therefore requires quite a large call stack */ + large_stack = memcmp((const char *)(gb.rom + 0x134), "MICRO EPAK1BM", strlen("MICRO EPAK1BM")) == 0 || + strcmp((const char *)(gb.rom + 0x134), "TECMO BOWL") == 0; + /* High quality game that leaks stack whenever you open the menu (with start), + but requires pressing start to play it. */ + limit_start = strcmp((const char *)(gb.rom + 0x134), "DIVA STARS") == 0; + large_stack |= limit_start; + + /* Pressing start while in the map in Tsuri Sensei will leak an internal screen-stack which + will eventually overflow, override an array of jump-table indexes, jump to a random + address, execute an invalid opcode, and crash. Pressing A twice while slowing down + will prevent this scenario. */ + push_a_twice = strcmp((const char *)(gb.rom + 0x134), "TURI SENSEI V1") == 0; + + /* Yes, you should totally use a cursor point & click interface for the language select menu. */ + pointer_control = memcmp((const char *)(gb.rom + 0x134), "LEGO ATEAM BLPP", strlen("LEGO ATEAM BLPP")) == 0; + push_faster |= pointer_control; + + /* Games that perform an unsafe speed switch, don't input until in double speed */ + unsafe_speed_switch = strcmp((const char *)(gb.rom + 0x134), "GBVideo") == 0 || // lulz this is my fault + strcmp((const char *)(gb.rom + 0x134), "POKEMONGOLD 2") == 0; // Pokemon Adventure + + + /* Run emulation */ + running = true; + gb.turbo = gb.turbo_dont_skip = gb.disable_rendering = true; + frames = 0; + unsigned cycles = 0; + while (running) { + cycles += GB_run(&gb); + if (cycles >= 139810) { /* Approximately 1/60 a second. Intentionally not the actual length of a frame. */ + handle_buttons(&gb); + cycles -= 139810; + frames++; + } + /* This early crash test must not run in vblank because PC might not point to the next instruction. */ + if (gb.pc == 0x38 && frames < test_length - 1 && GB_read_memory(&gb, 0x38) == 0xFF) { + GB_log(&gb, "The game is probably stuck in an FF loop.\n"); + frames = test_length - 1; + } + } + + + if (log_file) { + fclose(log_file); + log_file = NULL; + } + + GB_free(&gb); +#ifndef _WIN32 + if (max_forks > 1) { + exit(0); + } +#endif + } +#ifndef _WIN32 + int wait_out; + while (wait(&wait_out) != -1); +#endif + return 0; +} + diff --git a/thirdparty/SameBoy-old/Windows/dirent.c b/thirdparty/SameBoy-old/Windows/dirent.c new file mode 100644 index 000000000..f5fd8b3b2 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/dirent.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include +#include "dirent.h" + +DIR *opendir(const char *filename) +{ + wchar_t w_filename[MAX_PATH + 3] = {0,}; + unsigned length = MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, MAX_PATH); + if (length) { + w_filename[length - 1] = L'/'; + w_filename[length] = L'*'; + w_filename[length + 1] = 0; + } + DIR *ret = malloc(sizeof(*ret)); + ret->handle = FindFirstFileW(w_filename, &ret->entry); + if (ret->handle == INVALID_HANDLE_VALUE) { + free(ret); + return NULL; + } + + return ret; +} + +int closedir(DIR *dir) +{ + if (dir->handle != INVALID_HANDLE_VALUE) { + FindClose(dir->handle); + } + free(dir); + return 0; +} + +struct dirent *readdir(DIR *dir) +{ + if (dir->handle == INVALID_HANDLE_VALUE) { + return NULL; + } + + WideCharToMultiByte(CP_UTF8, 0, dir->entry.cFileName, -1, + dir->out_entry.d_name, sizeof(dir->out_entry.d_name), + NULL, NULL); + + if (!FindNextFileW(dir->handle, &dir->entry)) { + FindClose(dir->handle); + dir->handle = INVALID_HANDLE_VALUE; + } + + return &dir->out_entry; +} diff --git a/thirdparty/SameBoy-old/Windows/dirent.h b/thirdparty/SameBoy-old/Windows/dirent.h new file mode 100644 index 000000000..7102995b2 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/dirent.h @@ -0,0 +1,15 @@ +#include + +struct dirent { + char d_name[MAX_PATH + 1]; +}; + +typedef struct { + HANDLE handle; + WIN32_FIND_DATAW entry; + struct dirent out_entry; +} DIR; + +DIR *opendir(const char *filename); +int closedir(DIR *dir); +struct dirent *readdir(DIR *dir); diff --git a/thirdparty/SameBoy-old/Windows/inttypes.h b/thirdparty/SameBoy-old/Windows/inttypes.h new file mode 100644 index 000000000..9a6118bd8 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/inttypes.h @@ -0,0 +1 @@ +#include diff --git a/thirdparty/SameBoy-old/Windows/math.h b/thirdparty/SameBoy-old/Windows/math.h new file mode 100644 index 000000000..2b934f90f --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/math.h @@ -0,0 +1,9 @@ +#pragma once +#include_next +#ifndef __MINGW32__ +/* "Old" (Pre-2015) Windows headers/libc don't have round. */ +static inline double round(double f) +{ + return f >= 0? (int)(f + 0.5) : (int)(f - 0.5); +} +#endif \ No newline at end of file diff --git a/thirdparty/SameBoy-old/Windows/pthread.h b/thirdparty/SameBoy-old/Windows/pthread.h new file mode 100644 index 000000000..7bf328bb0 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/pthread.h @@ -0,0 +1,86 @@ +/* Very minimal pthread implementation for Windows */ +#include +#include + +typedef HANDLE pthread_t; +typedef struct pthread_attr_s pthread_attr_t; + +static inline int pthread_create(pthread_t *pthread, + const pthread_attr_t *attrs, + LPTHREAD_START_ROUTINE function, + void *context) +{ + assert(!attrs); + *pthread = CreateThread(NULL, 0, function, + context, 0, NULL); + return *pthread? 0 : GetLastError(); +} + + +typedef struct { + unsigned status; + CRITICAL_SECTION cs; +} pthread_mutex_t; +#define PTHREAD_MUTEX_INITIALIZER {0,} + +static inline CRITICAL_SECTION *pthread_mutex_to_cs(pthread_mutex_t *mutex) +{ +retry: + if (mutex->status == 2) return &mutex->cs; + + unsigned expected = 0; + unsigned desired = 1; + if (__atomic_compare_exchange(&mutex->status, &expected, &desired, false, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) { + InitializeCriticalSection(&mutex->cs); + mutex->status = 2; + return &mutex->cs; + } + goto retry; +} + +static inline int pthread_mutex_lock(pthread_mutex_t *mutex) +{ + EnterCriticalSection(pthread_mutex_to_cs(mutex)); + return 0; +} + +static inline int pthread_mutex_unlock(pthread_mutex_t *mutex) +{ + LeaveCriticalSection(pthread_mutex_to_cs(mutex)); + return 0; +} + +typedef struct { + unsigned status; + CONDITION_VARIABLE cond; +} pthread_cond_t; +#define PTHREAD_COND_INITIALIZER {0,} + +static inline CONDITION_VARIABLE *pthread_cond_to_win(pthread_cond_t *cond) +{ +retry: + if (cond->status == 2) return &cond->cond; + + unsigned expected = 0; + unsigned desired = 1; + if (__atomic_compare_exchange(&cond->status, &expected, &desired, false, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) { + InitializeConditionVariable(&cond->cond); + cond->status = 2; + return &cond->cond; + } + goto retry; +} + + +static inline int pthread_cond_signal(pthread_cond_t *cond) +{ + WakeConditionVariable(pthread_cond_to_win(cond)); + return 0; +} + +static inline int pthread_cond_wait(pthread_cond_t *cond, + pthread_mutex_t *mutex) +{ + // Mutex is locked therefore already initialized + return SleepConditionVariableCS(pthread_cond_to_win(cond), &mutex->cs, INFINITE); +} diff --git a/thirdparty/SameBoy-old/Windows/resources.rc b/thirdparty/SameBoy-old/Windows/resources.rc new file mode 100644 index 0000000000000000000000000000000000000000..73c12139e68ff25a1cf03c451e05e25df9d3c05f GIT binary patch literal 1210 zcmb`H%T5A85Jm5rub8k_9*PUy@z978AcA9D8B|0PWC#q2#P~t}qOleC&8Z|pHc|-=B^_cF?yjUxyAxR`&gZKNv&)Eg z9)5wIG}8bsE8-ro8-lqLv2MXMfVZbpJQM!+$bOo6XEwfzwE^lvcaa7&v@l%5iSOyH z@2&B5^$T<#^f~xR)byKf6m~q_Z(5HQNTVoLQ)UJmd$kd9hhJ>BJ)YjsXpc83>p;8F z%61+~|5d>*3*1-=g&NEjiS-rh8%Z?^Ffi4uV|)T=XPnFc literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Windows/sameboy.ico b/thirdparty/SameBoy-old/Windows/sameboy.ico new file mode 100644 index 0000000000000000000000000000000000000000..17f072c14882ae19f352c9ef8a06601fb648ba2c GIT binary patch literal 132946 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 F@PB`La-#qM literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/Windows/stdint.h b/thirdparty/SameBoy-old/Windows/stdint.h new file mode 100644 index 000000000..cbe84d560 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/stdint.h @@ -0,0 +1,3 @@ +#pragma once +#include_next +typedef intptr_t ssize_t; \ No newline at end of file diff --git a/thirdparty/SameBoy-old/Windows/stdio.h b/thirdparty/SameBoy-old/Windows/stdio.h new file mode 100644 index 000000000..4a9279e3d --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/stdio.h @@ -0,0 +1,91 @@ +#pragma once +#include_next +#include +#include + +int access(const char *filename, int mode); +#define R_OK 4 +#define W_OK 2 + +#ifndef __MINGW32__ +#ifndef __LIBRETRO__ +static inline int vasprintf(char **str, const char *fmt, va_list args) +{ + size_t size = _vscprintf(fmt, args) + 1; + *str = (char*)malloc(size); + int ret = vsprintf(*str, fmt, args); + if (ret != size - 1) { + free(*str); + *str = NULL; + return -1; + } + return ret; +} + +static inline int asprintf(char **strp, const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + int r = vasprintf(strp, fmt, args); + va_end(args); + return r; +} + +#endif +#endif + +/* This code is public domain -- Will Hartung 4/9/09 */ +static inline size_t getline(char **lineptr, size_t *n, FILE *stream) +{ + char *bufptr = NULL; + char *p = bufptr; + size_t size; + int c; + + if (lineptr == NULL) { + return -1; + } + if (stream == NULL) { + return -1; + } + if (n == NULL) { + return -1; + } + bufptr = *lineptr; + size = *n; + + c = fgetc(stream); + if (c == EOF) { + return -1; + } + if (bufptr == NULL) { + bufptr = (char*)malloc(128); + if (bufptr == NULL) { + return -1; + } + size = 128; + } + p = bufptr; + while (c != EOF) { + if ((p - bufptr) > (size - 1)) { + size = size + 128; + bufptr = (char*)realloc(bufptr, size); + if (bufptr == NULL) { + return -1; + } + } + *p++ = c; + if (c == '\n') { + break; + } + c = fgetc(stream); + } + + *p++ = '\0'; + *lineptr = bufptr; + *n = size; + + return p - bufptr - 1; +} + +#define snprintf _snprintf diff --git a/thirdparty/SameBoy-old/Windows/string.h b/thirdparty/SameBoy-old/Windows/string.h new file mode 100644 index 000000000..f1cf6b1e9 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/string.h @@ -0,0 +1,4 @@ +#pragma once +#include_next +#define strdup _strdup +#define strcasecmp _stricmp diff --git a/thirdparty/SameBoy-old/Windows/unistd.h b/thirdparty/SameBoy-old/Windows/unistd.h new file mode 100644 index 000000000..c17587e45 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/unistd.h @@ -0,0 +1,10 @@ +#include +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#define read(...) _read(__VA_ARGS__) +#define write(...) _write(__VA_ARGS__) +#define isatty(...) _isatty(__VA_ARGS__) +#define close(...) _close(__VA_ARGS__) +#define creat(...) _creat(__VA_ARGS__) diff --git a/thirdparty/SameBoy-old/Windows/utf8_compat.c b/thirdparty/SameBoy-old/Windows/utf8_compat.c new file mode 100644 index 000000000..9264e2e80 --- /dev/null +++ b/thirdparty/SameBoy-old/Windows/utf8_compat.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include + +FILE *fopen(const char *filename, const char *mode) +{ + wchar_t w_filename[MAX_PATH] = {0,}; + MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, sizeof(w_filename) / sizeof(w_filename[0])); + + wchar_t w_mode[8] = {0,}; + MultiByteToWideChar(CP_UTF8, 0, mode, -1, w_mode, sizeof(w_mode) / sizeof(w_mode[0])); + + return _wfopen(w_filename, w_mode); +} + +int access(const char *filename, int mode) +{ + wchar_t w_filename[MAX_PATH] = {0,}; + MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, sizeof(w_filename) / sizeof(w_filename[0])); + + return _waccess(w_filename, mode); +} + +int _creat(const char *filename, int mode) +{ + wchar_t w_filename[MAX_PATH] = {0,}; + MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, sizeof(w_filename) / sizeof(w_filename[0])); + return _wcreat(w_filename, mode & 0700); +} + diff --git a/thirdparty/SameBoy-old/libretro/Makefile b/thirdparty/SameBoy-old/libretro/Makefile new file mode 100644 index 000000000..ada200df2 --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/Makefile @@ -0,0 +1,373 @@ +STATIC_LINKING := 0 +AR := ar + +CFLAGS := -Wall $(CFLAGS) + +GIT_VERSION ?= " $(shell git rev-parse --short HEAD || echo unknown)" +ifneq ($(GIT_VERSION)," unknown") + CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" +endif + +SPACE := +SPACE := $(SPACE) $(SPACE) +BACKSLASH := +BACKSLASH := \$(BACKSLASH) +filter_out1 = $(filter-out $(firstword $1),$1) +filter_out2 = $(call filter_out1,$(call filter_out1,$1)) +unixpath = $(subst \,/,$1) +unixcygpath = /$(subst :,,$(call unixpath,$1)) + +ifeq ($(platform),) +platform = unix +ifeq ($(shell uname -a),) + platform = win +else ifneq ($(findstring MINGW,$(shell uname -a)),) + platform = win +else ifneq ($(findstring Darwin,$(shell uname -a)),) + platform = osx +else ifneq ($(findstring win,$(shell uname -a)),) + platform = win +endif +endif + +# system platform +system_platform = unix +ifeq ($(shell uname -a),) + EXE_EXT = .exe + system_platform = win +else ifneq ($(findstring Darwin,$(shell uname -a)),) + system_platform = osx + arch = intel +ifeq ($(shell uname -p),powerpc) + arch = ppc +endif +else ifneq ($(findstring MINGW,$(shell uname -a)),) + system_platform = win +endif + +ifeq ($(platform), win) + INCFLAGS += -I Windows +endif + +CORE_DIR = ../ + +TARGET_NAME = sameboy +LIBM = -lm + +ifeq ($(ARCHFLAGS),) +ifeq ($(archs),ppc) + ARCHFLAGS = -arch ppc -arch ppc64 +else + ARCHFLAGS = -arch i386 -arch x86_64 +endif +endif + +ifneq ($(SANITIZER),) + CFLAGS := -fsanitize=$(SANITIZER) $(CFLAGS) + CXXFLAGS := -fsanitize=$(SANITIZER) $(CXXFLAGS) + LDFLAGS := -fsanitize=$(SANITIZER) $(LDFLAGS) -lasan +endif + +ifeq ($(platform), osx) +ifndef ($(NOUNIVERSAL)) + CFLAGS += $(ARCHFLAGS) + LFLAGS += $(ARCHFLAGS) +endif +endif + +ifeq ($(STATIC_LINKING), 1) +EXT := a +endif + +ifeq ($(platform), unix) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) + fpic := -fPIC + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,--no-undefined +else ifeq ($(platform), linux-portable) + TARGET := $(TARGET_NAME)_libretro.$(EXT) + fpic := -fPIC -nostdlib + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T + LIBM := +# (armv7 a7, hard point, neon based) ### +# NESC, SNESC, C64 mini +else ifeq ($(platform), classic_armv7_a7) + TARGET := $(TARGET_NAME)_libretro.so + fpic := -fPIC + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,--no-undefined + CFLAGS += -Ofast \ + -flto=4 -fwhole-program -fuse-linker-plugin \ + -fdata-sections -ffunction-sections -Wl,--gc-sections \ + -fno-stack-protector -fno-ident -fomit-frame-pointer \ + -falign-functions=1 -falign-jumps=1 -falign-loops=1 \ + -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \ + -fmerge-all-constants -fno-math-errno \ + -marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard + CXXFLAGS += $(CFLAGS) + CPPFLAGS += $(CFLAGS) + ASFLAGS += $(CFLAGS) + HAVE_NEON = 1 + ARCH = arm + BUILTIN_GPU = neon + USE_DYNAREC = 1 + ifeq ($(shell echo `$(CC) -dumpversion` "< 4.9" | bc -l), 1) + CFLAGS += -march=armv7-a + else + CFLAGS += -march=armv7ve + # If gcc is 5.0 or later + ifeq ($(shell echo `$(CC) -dumpversion` ">= 5" | bc -l), 1) + LDFLAGS += -static-libgcc -static-libstdc++ + endif + endif + +########################### +# Raspberry Pi 4 in 64 mode +else ifneq (,$(findstring rpi4_64,$(platform))) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) + fpic := -fPIC + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,--no-undefined + CFLAGS += -O2 -march=armv8-a+crc+simd -mtune=cortex-a72 +########################### + +####################################### +# Nintendo Switch (libtransistor) +else ifeq ($(platform), switch) + TARGET := $(TARGET_NAME)_libretro_$(platform).a + include $(LIBTRANSISTOR_HOME)/libtransistor.mk + CFLAGS += -Wl,-q -O3 -fno-short-enums -fno-optimize-sibling-calls + STATIC_LINKING=1 +# Nintendo Switch (libnx) +else ifeq ($(platform), libnx) + include $(DEVKITPRO)/libnx/switch_rules + TARGET := $(TARGET_NAME)_libretro_$(platform).a + DEFINES += -DSWITCH=1 -D__SWITCH__ -DARM + CFLAGS += $(DEFINES) -fPIE -I$(LIBNX)/include/ -ffunction-sections -fdata-sections -ftls-model=local-exec + CFLAGS += -march=armv8-a -mtune=cortex-a57 -mtp=soft -mcpu=cortex-a57+crc+fp+simd -ffast-math + CXXFLAGS := $(ASFLAGS) $(CFLAGS) + STATIC_LINKING = 1 +# Nintendo WiiU +else ifeq ($(platform), wiiu) + TARGET := $(TARGET_NAME)_libretro_$(platform).a + CC ?= $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) + AR ?= $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT) + CFLAGS += -DGEKKO -DHW_RVL -DWIIU -mwup -mcpu=750 -meabi -mhard-float -D__ppc__ -DMSB_FIRST -I$(DEVKITPRO)/libogc/include + CFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int + STATIC_LINKING = 1 +else ifneq (,$(findstring osx,$(platform))) + TARGET := $(TARGET_NAME)_libretro.dylib + fpic := -fPIC + SHARED := -dynamiclib +else ifneq (,$(findstring ios,$(platform))) + TARGET := $(TARGET_NAME)_libretro_ios.dylib + fpic := -fPIC + SHARED := -dynamiclib + +ifeq ($(IOSSDK),) + IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path) +endif + + DEFINES := -DIOS +ifeq ($(platform),ios-arm64) + CC = cc -arch armv64 -isysroot $(IOSSDK) +else + CC = cc -arch armv7 -isysroot $(IOSSDK) +endif +ifeq ($(platform),$(filter $(platform),ios9 ios-arm64)) +CC += -miphoneos-version-min=8.0 +CFLAGS += -miphoneos-version-min=8.0 +else +CC += -miphoneos-version-min=5.0 +CFLAGS += -miphoneos-version-min=5.0 +endif +else ifneq (,$(findstring qnx,$(platform))) + TARGET := $(TARGET_NAME)_libretro_qnx.so + fpic := -fPIC + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,--no-undefined +else ifeq ($(platform), emscripten) + TARGET := $(TARGET_NAME)_libretro_emscripten.bc + fpic := -fPIC + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,--no-undefined +else ifeq ($(platform), vita) + TARGET := $(TARGET_NAME)_libretro_vita.a + CC = arm-vita-eabi-gcc + AR = arm-vita-eabi-ar + CFLAGS += -Wl,-q -O3 -fno-short-enums -fno-optimize-sibling-calls + STATIC_LINKING = 1 + +# Windows MSVC 2017 all architectures +else ifneq (,$(findstring windows_msvc2017,$(platform))) + + NO_GCC := 1 + CFLAGS += -DNOMINMAX + CXXFLAGS += -DNOMINMAX + WINDOWS_VERSION = 1 + + PlatformSuffix = $(subst windows_msvc2017_,,$(platform)) + ifneq (,$(findstring desktop,$(PlatformSuffix))) + WinPartition = desktop + MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -FS + LDFLAGS += -MANIFEST -LTCG:incremental -NXCOMPAT -DYNAMICBASE -DEBUG -OPT:REF -INCREMENTAL:NO -SUBSYSTEM:WINDOWS -MANIFESTUAC:"level='asInvoker' uiAccess='false'" -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 + LIBS += kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib + else ifneq (,$(findstring uwp,$(PlatformSuffix))) + WinPartition = uwp + MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WINDLL -D_UNICODE -DUNICODE -D__WRL_NO_DEFAULT_LIB__ -EHsc -FS + LDFLAGS += -APPCONTAINER -NXCOMPAT -DYNAMICBASE -MANIFEST:NO -LTCG -OPT:REF -SUBSYSTEM:CONSOLE -MANIFESTUAC:NO -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 -DEBUG:FULL -WINMD:NO + LIBS += WindowsApp.lib + endif + + CFLAGS += $(MSVC2017CompileFlags) + CXXFLAGS += $(MSVC2017CompileFlags) + + TargetArchMoniker = $(subst $(WinPartition)_,,$(PlatformSuffix)) + + CC ?= cl.exe + CXX ?= cl.exe + LD ?= link.exe + + reg_query = $(call filter_out2,$(subst $2,,$(shell reg query "$2" -v "$1" 2>nul))) + fix_path = $(subst $(SPACE),\ ,$(subst \,/,$1)) + + ProgramFiles86w := $(shell cmd //c "echo %PROGRAMFILES(x86)%") + ProgramFiles86 := $(shell cygpath "$(ProgramFiles86w)") + + WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0) + WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0) + WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0) + WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0) + WindowsSdkDir := $(WindowsSdkDir) + + WindowsSDKVersion ?= $(firstword $(foreach folder,$(subst $(subst \,/,$(WindowsSdkDir)Include/),,$(wildcard $(call fix_path,$(WindowsSdkDir)Include\*))),$(if $(wildcard $(call fix_path,$(WindowsSdkDir)Include/$(folder)/um/Windows.h)),$(folder),)))$(BACKSLASH) + WindowsSDKVersion := $(WindowsSDKVersion) + + VsInstallBuildTools = $(ProgramFiles86)/Microsoft Visual Studio/2017/BuildTools + VsInstallEnterprise = $(ProgramFiles86)/Microsoft Visual Studio/2017/Enterprise + VsInstallProfessional = $(ProgramFiles86)/Microsoft Visual Studio/2017/Professional + VsInstallCommunity = $(ProgramFiles86)/Microsoft Visual Studio/2017/Community + + VsInstallRoot ?= $(shell if [ -d "$(VsInstallBuildTools)" ]; then echo "$(VsInstallBuildTools)"; fi) + ifeq ($(VsInstallRoot), ) + VsInstallRoot = $(shell if [ -d "$(VsInstallEnterprise)" ]; then echo "$(VsInstallEnterprise)"; fi) + endif + ifeq ($(VsInstallRoot), ) + VsInstallRoot = $(shell if [ -d "$(VsInstallProfessional)" ]; then echo "$(VsInstallProfessional)"; fi) + endif + ifeq ($(VsInstallRoot), ) + VsInstallRoot = $(shell if [ -d "$(VsInstallCommunity)" ]; then echo "$(VsInstallCommunity)"; fi) + endif + VsInstallRoot := $(VsInstallRoot) + + VcCompilerToolsVer := $(shell cat "$(VsInstallRoot)/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" | grep -o '[0-9\.]*') + VcCompilerToolsDir := $(VsInstallRoot)/VC/Tools/MSVC/$(VcCompilerToolsVer) + + WindowsSDKSharedIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\shared") + WindowsSDKUCRTIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\ucrt") + WindowsSDKUMIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\um") + WindowsSDKUCRTLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\ucrt\$(TargetArchMoniker)") + WindowsSDKUMLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\um\$(TargetArchMoniker)") + + # For some reason the HostX86 compiler doesn't like compiling for x64 + # ("no such file" opening a shared library), and vice-versa. + # Work around it for now by using the strictly x86 compiler for x86, and x64 for x64. + # NOTE: What about ARM? + ifneq (,$(findstring x64,$(TargetArchMoniker))) + VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX64 + else + VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX86 + endif + + PATH := $(shell IFS=$$'\n'; cygpath "$(VCCompilerToolsBinDir)/$(TargetArchMoniker)"):$(PATH) + PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VsInstallRoot)/Common7/IDE") + INCLUDE := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/include") + LIB := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/lib/$(TargetArchMoniker)") + ifneq (,$(findstring uwp,$(PlatformSuffix))) + LIB := $(LIB);$(shell IFS=$$'\n'; cygpath -w "$(LIB)/store") + endif + + export INCLUDE := $(INCLUDE);$(WindowsSDKSharedIncludeDir);$(WindowsSDKUCRTIncludeDir);$(WindowsSDKUMIncludeDir) + export LIB := $(LIB);$(WindowsSDKUCRTLibDir);$(WindowsSDKUMLibDir) + TARGET := $(TARGET_NAME)_libretro.dll + PSS_STYLE :=2 + LDFLAGS += -DLL + +else + CC ?= gcc + TARGET := $(TARGET_NAME)_libretro.dll + SHARED := -shared -static-libgcc -static-libstdc++ -s -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,--no-undefined +endif + +TARGET := $(CORE_DIR)/build/bin/$(TARGET) + +# To force use of the Unix version instead of the Windows version +MKDIR := $(shell which mkdir) + +LDFLAGS += $(LIBM) + +ifeq ($(DEBUG), 1) + CFLAGS += -O0 -g +else + CFLAGS += -O2 -DNDEBUG +endif + +include Makefile.common + +CFLAGS += -DGB_VERSION=\"$(VERSION)\" + +OBJECTS := $(patsubst $(CORE_DIR)/%.c,$(CORE_DIR)/build/obj/%_libretro.c.o,$(SOURCES_C)) + +OBJOUT = -o +LINKOUT = -o + +ifneq (,$(findstring msvc,$(platform))) + OBJOUT = -Fo + LINKOUT = -out: +ifeq ($(STATIC_LINKING),1) + LD ?= lib.exe + STATIC_LINKING=0 +else + LD = link.exe +endif +else + LD = $(CC) +endif + +CFLAGS += -D__LIBRETRO__ $(fpic) $(INCFLAGS) -std=gnu11 -D_GNU_SOURCE -D_USE_MATH_DEFINES + +all: $(TARGET) + +$(CORE_DIR)/libretro/%_boot.c: $(CORE_DIR)/build/bin/BootROMs/%_boot.bin + echo "/* AUTO-GENERATED */" > $@ + echo "const unsigned char $(notdir $(@:%.c=%))[] = {" >> $@ +ifneq ($(findstring Haiku,$(shell uname -s)),) + # turns out od is posix, hexdump is not hence is less portable + # this is still rather ugly and could be done better I guess + od -A none -t x1 -v $< | sed -e 's/^\ /0x/' -e 's/\ /,\ 0x/g' -e 's/$$/,/g' | tr '\n' ' ' >> $@ +else + hexdump -v -e '/1 "0x%02x, "' $< >> $@ +endif + echo "};" >> $@ + echo "const unsigned $(notdir $(@:%.c=%))_length = sizeof($(notdir $(@:%.c=%)));" >> $@ + +$(CORE_DIR)/build/bin/BootROMs/%_boot.bin: + $(MAKE) -C $(CORE_DIR) $(patsubst $(CORE_DIR)/%,%,$@) + +$(TARGET): $(OBJECTS) + -@$(MKDIR) -p $(dir $@) +ifeq ($(STATIC_LINKING), 1) + $(AR) rcs $@ $(OBJECTS) +else + $(LD) $(fpic) $(SHARED) $(INCFLAGS) $(LINKOUT)$@ $(OBJECTS) $(LDFLAGS) +endif + +$(CORE_DIR)/build/obj/%_libretro.c.o: $(CORE_DIR)/%.c + -@$(MKDIR) -p $(dir $@) + $(CC) -c $(OBJOUT)$@ $< $(CFLAGS) $(fpic) -DGB_INTERNAL + +%.o: %.c + $(CC) $(CFLAGS) $(fpic) -c $(OBJOUT)$@ $< + +clean: + rm -f $(OBJECTS) $(TARGET) + +.PHONY: clean + diff --git a/thirdparty/SameBoy-old/libretro/Makefile.common b/thirdparty/SameBoy-old/libretro/Makefile.common new file mode 100644 index 000000000..fabe3ad4a --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/Makefile.common @@ -0,0 +1,29 @@ +include $(CORE_DIR)/version.mk + +INCFLAGS := -I$(CORE_DIR) + +SOURCES_C := $(CORE_DIR)/Core/gb.c \ + $(CORE_DIR)/Core/sgb.c \ + $(CORE_DIR)/Core/apu.c \ + $(CORE_DIR)/Core/memory.c \ + $(CORE_DIR)/Core/mbc.c \ + $(CORE_DIR)/Core/timing.c \ + $(CORE_DIR)/Core/display.c \ + $(CORE_DIR)/Core/symbol_hash.c \ + $(CORE_DIR)/Core/camera.c \ + $(CORE_DIR)/Core/sm83_cpu.c \ + $(CORE_DIR)/Core/joypad.c \ + $(CORE_DIR)/Core/save_state.c \ + $(CORE_DIR)/Core/random.c \ + $(CORE_DIR)/Core/rumble.c \ + $(CORE_DIR)/libretro/agb_boot.c \ + $(CORE_DIR)/libretro/cgb_boot.c \ + $(CORE_DIR)/libretro/dmg_boot.c \ + $(CORE_DIR)/libretro/sgb_boot.c \ + $(CORE_DIR)/libretro/sgb2_boot.c \ + $(CORE_DIR)/libretro/libretro.c + +CFLAGS += -DGB_DISABLE_TIMEKEEPING -DGB_DISABLE_REWIND -DGB_DISABLE_DEBUGGER -DGB_DISABLE_CHEATS + + +SOURCES_CXX := diff --git a/thirdparty/SameBoy-old/libretro/jni/Android.mk b/thirdparty/SameBoy-old/libretro/jni/Android.mk new file mode 100644 index 000000000..8ac1b3bab --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/jni/Android.mk @@ -0,0 +1,32 @@ +LOCAL_PATH := $(call my-dir) + +CORE_DIR := $(LOCAL_PATH)/../.. + +CFLAGS := + +include $(CORE_DIR)/libretro/Makefile.common + +GENERATED_SOURCES := $(filter %_boot.c,$(SOURCES_C)) + +COREFLAGS := -DINLINE=inline -D__LIBRETRO__ -DGB_INTERNAL $(INCFLAGS) -DGB_VERSION=\"$(VERSION)\" -Wno-multichar -DANDROID + +GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)" +ifneq ($(GIT_VERSION)," unknown") + COREFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" +endif + +include $(CLEAR_VARS) +LOCAL_MODULE := retro +LOCAL_SRC_FILES := $(SOURCES_C) +LOCAL_CFLAGS := -std=c99 $(COREFLAGS) $(CFLAGS) +LOCAL_LDFLAGS := -Wl,-version-script=$(CORE_DIR)/libretro/link.T +include $(BUILD_SHARED_LIBRARY) + +$(CORE_DIR)/libretro/%_boot.c: $(CORE_DIR)/build/bin/BootROMs/%_boot.bin + echo "/* AUTO-GENERATED */" > $@ + echo "const unsigned char $(notdir $(@:%.c=%))[] = {" >> $@ + hexdump -v -e '/1 "0x%02x, "' $< >> $@ + echo "};" >> $@ + echo "const unsigned $(notdir $(@:%.c=%))_length = sizeof($(notdir $(@:%.c=%)));" >> $@ + +.INTERMEDIATE: $(GENERATED_SOURCES) diff --git a/thirdparty/SameBoy-old/libretro/jni/Application.mk b/thirdparty/SameBoy-old/libretro/jni/Application.mk new file mode 100644 index 000000000..a252a72d7 --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/jni/Application.mk @@ -0,0 +1 @@ +APP_ABI := all diff --git a/thirdparty/SameBoy-old/libretro/libretro.c b/thirdparty/SameBoy-old/libretro/libretro.c new file mode 100644 index 000000000..eb5f2dd68 --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/libretro.c @@ -0,0 +1,1817 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef WIIU +#define AUDIO_FREQUENCY 384000 +#else +/* Use the internal sample rate for the Wii U */ +#define AUDIO_FREQUENCY 48000 +#endif + +#ifdef _WIN32 +#include +#include +#define snprintf _snprintf +#endif + +#include +#include "libretro.h" +#include "libretro_core_options.inc" + +#ifdef _WIN32 +static const char slash = '\\'; +#else +static const char slash = '/'; +#endif + +#define MAX_VIDEO_WIDTH 256 +#define MAX_VIDEO_HEIGHT 224 +#define MAX_VIDEO_PIXELS (MAX_VIDEO_WIDTH * MAX_VIDEO_HEIGHT) + +#define RETRO_MEMORY_GAMEBOY_1_SRAM ((1 << 8) | RETRO_MEMORY_SAVE_RAM) +#define RETRO_MEMORY_GAMEBOY_1_RTC ((2 << 8) | RETRO_MEMORY_RTC) +#define RETRO_MEMORY_GAMEBOY_2_SRAM ((3 << 8) | RETRO_MEMORY_SAVE_RAM) +#define RETRO_MEMORY_GAMEBOY_2_RTC ((3 << 8) | RETRO_MEMORY_RTC) + +#define RETRO_GAME_TYPE_GAMEBOY_LINK_2P 0x101 + +enum rom_type { + ROM_TYPE_INVALID, + ROM_TYPE_DMG, + ROM_TYPE_SGB, + ROM_TYPE_CGB +}; + +enum model { + MODEL_DMG_B, + MODEL_CGB_C, + MODEL_CGB_E, + MODEL_AGB, + MODEL_SGB_PAL, + MODEL_SGB_NTSC, + MODEL_SGB2, + MODEL_AUTO +}; + +static const GB_model_t libretro_to_internal_model[] = +{ + [MODEL_DMG_B] = GB_MODEL_DMG_B, + [MODEL_CGB_C] = GB_MODEL_CGB_C, + [MODEL_CGB_E] = GB_MODEL_CGB_E, + [MODEL_AGB] = GB_MODEL_AGB_A, + [MODEL_SGB_PAL] = GB_MODEL_SGB_PAL, + [MODEL_SGB_NTSC] = GB_MODEL_SGB_NTSC, + [MODEL_SGB2] = GB_MODEL_SGB2 +}; + +enum screen_layout { + LAYOUT_TOP_DOWN, + LAYOUT_LEFT_RIGHT +}; + +enum audio_out { + GB_1, + GB_2 +}; + +static enum model model[2] = { + MODEL_DMG_B, + MODEL_DMG_B +}; +static enum model auto_model[2] = { + MODEL_CGB_E, + MODEL_CGB_E +}; +static enum model auto_sgb_model[2] = { + MODEL_SGB_NTSC, + MODEL_SGB_NTSC +}; +static bool auto_sgb_enabled[2] = { + false, + false +}; + +static uint32_t *frame_buf = NULL; +static uint32_t *frame_buf_copy = NULL; +static uint32_t retained_frame_1[256 * 224]; +static uint32_t retained_frame_2[256 * 224]; +static struct retro_log_callback logging; +static retro_log_printf_t log_cb; + +static retro_video_refresh_t video_cb; +static retro_audio_sample_batch_t audio_batch_cb; +static retro_input_poll_t input_poll_cb; +static retro_input_state_t input_state_cb; + +static bool libretro_supports_bitmasks = false; + +static unsigned emulated_devices = 1; +static bool initialized = false; +static unsigned screen_layout = 0; +static unsigned audio_out = 0; + +static bool geometry_updated = false; +static bool link_cable_emulation = false; +/*static bool infrared_emulation = false;*/ + +static struct { + int16_t *data; + int32_t size; + int32_t capacity; +} output_audio_buffer = {NULL, 0, 0}; + +char retro_system_directory[4096]; + +GB_gameboy_t gameboy[2]; + +extern const unsigned char dmg_boot[], cgb_boot[], agb_boot[], sgb_boot[], sgb2_boot[]; +extern const unsigned dmg_boot_length, cgb_boot_length, agb_boot_length, sgb_boot_length, sgb2_boot_length; +bool vblank1_occurred = false, vblank2_occurred = false; + +static void fallback_log(enum retro_log_level level, const char *fmt, ...) +{ + (void)level; + va_list va; + va_start(va, fmt); + vfprintf(stderr, fmt, va); + va_end(va); +} + +static struct retro_rumble_interface rumble; + +static void GB_update_keys_status(GB_gameboy_t *gb, unsigned port) +{ + uint16_t joypad_bits = 0; + + input_poll_cb(); + + if (libretro_supports_bitmasks) { + joypad_bits = input_state_cb(port, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_MASK); + } + else { + unsigned j; + + for (j = 0; j < (RETRO_DEVICE_ID_JOYPAD_R3 + 1); j++) { + if (input_state_cb(port, RETRO_DEVICE_JOYPAD, 0, j)) { + joypad_bits |= (1 << j); + } + } + } + + GB_set_key_state_for_player(gb, GB_KEY_RIGHT, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)); + GB_set_key_state_for_player(gb, GB_KEY_LEFT, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)); + GB_set_key_state_for_player(gb, GB_KEY_UP, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_UP)); + GB_set_key_state_for_player(gb, GB_KEY_DOWN, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN)); + GB_set_key_state_for_player(gb, GB_KEY_A, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_A)); + GB_set_key_state_for_player(gb, GB_KEY_B, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_B)); + GB_set_key_state_for_player(gb, GB_KEY_SELECT, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_SELECT)); + GB_set_key_state_for_player(gb, GB_KEY_START, emulated_devices == 1 ? port : 0, + joypad_bits & (1 << RETRO_DEVICE_ID_JOYPAD_START)); + +} + +static void rumble_callback(GB_gameboy_t *gb, double amplitude) +{ + if (!rumble.set_rumble_state) return; + + if (gb == &gameboy[0]) { + rumble.set_rumble_state(0, RETRO_RUMBLE_STRONG, 65535 * amplitude); + } + else if (gb == &gameboy[1]) { + rumble.set_rumble_state(1, RETRO_RUMBLE_STRONG, 65535 * amplitude); + } +} + +static void ensure_output_audio_buffer_capacity(int32_t capacity) +{ + if (capacity <= output_audio_buffer.capacity) { + return; + } + output_audio_buffer.data = realloc( + output_audio_buffer.data, capacity * sizeof(*output_audio_buffer.data)); + output_audio_buffer.capacity = capacity; + log_cb(RETRO_LOG_DEBUG, "Output audio buffer capacity set to %d\n", capacity); +} + +static void init_output_audio_buffer(int32_t capacity) +{ + output_audio_buffer.data = NULL; + output_audio_buffer.size = 0; + output_audio_buffer.capacity = 0; + ensure_output_audio_buffer_capacity(capacity); +} + +static void free_output_audio_buffer() +{ + free(output_audio_buffer.data); + output_audio_buffer.data = NULL; + output_audio_buffer.size = 0; + output_audio_buffer.capacity = 0; +} + +static void upload_output_audio_buffer() +{ + int32_t remaining_frames = output_audio_buffer.size / 2; + int16_t *buf_pos = output_audio_buffer.data; + + while (remaining_frames > 0) { + size_t uploaded_frames = audio_batch_cb(buf_pos, remaining_frames); + buf_pos += uploaded_frames * 2; + remaining_frames -= uploaded_frames; + } + output_audio_buffer.size = 0; +} + +static void audio_callback(GB_gameboy_t *gb, GB_sample_t *sample) +{ + if (!(audio_out == GB_1 && gb == &gameboy[0]) && + !(audio_out == GB_2 && gb == &gameboy[1])) { + return; + } + + if (output_audio_buffer.capacity - output_audio_buffer.size < 2) { + ensure_output_audio_buffer_capacity(output_audio_buffer.capacity * 1.5); + } + + output_audio_buffer.data[output_audio_buffer.size++] = sample->left; + output_audio_buffer.data[output_audio_buffer.size++] = sample->right; +} + +static void vblank1(GB_gameboy_t *gb, GB_vblank_type_t type) +{ + if (type == GB_VBLANK_TYPE_REPEAT) { + memcpy(GB_get_pixels_output(gb), + retained_frame_1, + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } + vblank1_occurred = true; +} + +static void vblank2(GB_gameboy_t *gb, GB_vblank_type_t type) +{ + if (type == GB_VBLANK_TYPE_REPEAT) { + memcpy(GB_get_pixels_output(gb), + retained_frame_2, + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } + vblank2_occurred = true; +} + +static void lcd_status_change_1(GB_gameboy_t *gb, bool on) +{ + if (!on) { + memcpy(retained_frame_1, + GB_get_pixels_output(gb), + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } +} + +static void lcd_status_change_2(GB_gameboy_t *gb, bool on) +{ + if (!on) { + memcpy(retained_frame_2, + GB_get_pixels_output(gb), + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } +} + +static bool bit_to_send1 = true, bit_to_send2 = true; + +static void serial_start1(GB_gameboy_t *gb, bool bit_received) +{ + bit_to_send1 = bit_received; +} + +static bool serial_end1(GB_gameboy_t *gb) +{ + bool ret = GB_serial_get_data_bit(&gameboy[1]); + GB_serial_set_data_bit(&gameboy[1], bit_to_send1); + return ret; +} + +static void serial_start2(GB_gameboy_t *gb, bool bit_received) +{ + bit_to_send2 = bit_received; +} + +static bool serial_end2(GB_gameboy_t *gb) +{ + bool ret = GB_serial_get_data_bit(&gameboy[0]); + GB_serial_set_data_bit(&gameboy[0], bit_to_send2); + return ret; +} + +static void infrared_callback1(GB_gameboy_t *gb, bool output) +{ + GB_set_infrared_input(&gameboy[1], output); +} + +static void infrared_callback2(GB_gameboy_t *gb, bool output) +{ + GB_set_infrared_input(&gameboy[0], output); +} + +static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) +{ + return r <<16 | g <<8 | b; +} + +static retro_environment_t environ_cb; + +static void set_variable_visibility(void) +{ + struct retro_core_option_display option_display_singlecart; + struct retro_core_option_display option_display_dualcart; + + size_t i; + size_t num_options = 0; + + // Show/hide options depending on the number of emulated devices + if (emulated_devices == 1) { + option_display_singlecart.visible = true; + option_display_dualcart.visible = false; + } + else if (emulated_devices == 2) { + option_display_singlecart.visible = false; + option_display_dualcart.visible = true; + } + + // Determine number of options + while (true) { + if (!option_defs_us[num_options].key) break; + num_options++; + } + + // Copy parameters from option_defs_us array + for (i = 0; i < num_options; i++) { + const char *key = option_defs_us[i].key; + if ((strcmp(key, "sameboy_model") == 0) || + (strcmp(key, "sameboy_auto_sgb_model") == 0) || + (strcmp(key, "sameboy_rtc") == 0) || + (strcmp(key, "sameboy_scaling_filter") == 0) || + (strcmp(key, "sameboy_mono_palette") == 0) || + (strcmp(key, "sameboy_color_correction_mode") == 0) || + (strcmp(key, "sameboy_light_temperature") == 0) || + (strcmp(key, "sameboy_border") == 0) || + (strcmp(key, "sameboy_high_pass_filter_mode") == 0) || + (strcmp(key, "sameboy_audio_interference") == 0) || + (strcmp(key, "sameboy_rumble") == 0)) { + option_display_singlecart.key = key; + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display_singlecart); + } + else if ((strcmp(key, "sameboy_link") == 0) || + (strcmp(key, "sameboy_screen_layout") == 0) || + (strcmp(key, "sameboy_audio_output") == 0) || + (strcmp(key, "sameboy_model_1") == 0) || + (strcmp(key, "sameboy_auto_sgb_model_1") == 0) || + (strcmp(key, "sameboy_model_2") == 0) || + (strcmp(key, "sameboy_auto_sgb_model_2") == 0) || + (strcmp(key, "sameboy_mono_palette_1") == 0) || + (strcmp(key, "sameboy_mono_palette_2") == 0) || + (strcmp(key, "sameboy_color_correction_mode_1") == 0) || + (strcmp(key, "sameboy_color_correction_mode_2") == 0) || + (strcmp(key, "sameboy_light_temperature_1") == 0) || + (strcmp(key, "sameboy_light_temperature_2") == 0) || + (strcmp(key, "sameboy_high_pass_filter_mode_1") == 0) || + (strcmp(key, "sameboy_high_pass_filter_mode_2") == 0) || + (strcmp(key, "sameboy_audio_interference_1") == 0) || + (strcmp(key, "sameboy_audio_interference_2") == 0) || + (strcmp(key, "sameboy_rumble_1") == 0) || + (strcmp(key, "sameboy_rumble_2") == 0)) { + option_display_dualcart.key = key; + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display_dualcart); + } + } +} + +static const struct retro_subsystem_memory_info gb1_memory[] = { + { "srm", RETRO_MEMORY_GAMEBOY_1_SRAM }, + { "rtc", RETRO_MEMORY_GAMEBOY_1_RTC }, +}; + +static const struct retro_subsystem_memory_info gb2_memory[] = { + { "srm", RETRO_MEMORY_GAMEBOY_2_SRAM }, + { "rtc", RETRO_MEMORY_GAMEBOY_2_RTC }, +}; + +static const struct retro_subsystem_rom_info gb_roms[] = { + { "GameBoy #1", "gb|gbc", false, false, true, gb1_memory, 1 }, + { "GameBoy #2", "gb|gbc", false, false, true, gb2_memory, 1 }, +}; + +static const struct retro_subsystem_info subsystems[] = { + { "2 Player Game Boy Link", "gb_link_2p", gb_roms, 2, RETRO_GAME_TYPE_GAMEBOY_LINK_2P }, + { NULL }, +}; + +static const struct retro_controller_description controllers[] = { + { "Nintendo Game Boy", RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 0) }, +}; + +static const struct retro_controller_description controllers_sgb[] = { + { "SNES/SFC Gamepad", RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 0) }, +}; + +static struct retro_input_descriptor descriptors_1p[] = { + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 0 }, +}; + +static struct retro_input_descriptor descriptors_2p[] = { + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 0 }, +}; + +static struct retro_input_descriptor descriptors_4p[] = { + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, + { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, + { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, + { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, + { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, + { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, + { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 0 }, +}; + + +static void set_link_cable_state(bool state) +{ + if (state && emulated_devices == 2) { + GB_set_serial_transfer_bit_start_callback(&gameboy[0], serial_start1); + GB_set_serial_transfer_bit_end_callback(&gameboy[0], serial_end1); + GB_set_serial_transfer_bit_start_callback(&gameboy[1], serial_start2); + GB_set_serial_transfer_bit_end_callback(&gameboy[1], serial_end2); + GB_set_infrared_callback(&gameboy[0], infrared_callback1); + GB_set_infrared_callback(&gameboy[1], infrared_callback2); + } + else if (!state) { + GB_set_serial_transfer_bit_start_callback(&gameboy[0], NULL); + GB_set_serial_transfer_bit_end_callback(&gameboy[0], NULL); + GB_set_serial_transfer_bit_start_callback(&gameboy[1], NULL); + GB_set_serial_transfer_bit_end_callback(&gameboy[1], NULL); + GB_set_infrared_callback(&gameboy[0], NULL); + GB_set_infrared_callback(&gameboy[1], NULL); + } +} + +static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) +{ + const char *model_name = (char *[]) { + [GB_BOOT_ROM_DMG_0] = "dmg0", + [GB_BOOT_ROM_DMG] = "dmg", + [GB_BOOT_ROM_MGB] = "mgb", + [GB_BOOT_ROM_SGB] = "sgb", + [GB_BOOT_ROM_SGB2] = "sgb2", + [GB_BOOT_ROM_CGB_0] = "cgb0", + [GB_BOOT_ROM_CGB] = "cgb", + [GB_BOOT_ROM_AGB] = "agb", + }[type]; + + const uint8_t *boot_code = (const unsigned char *[]) { + [GB_BOOT_ROM_DMG_0] = dmg_boot, // DMG_0 not implemented yet + [GB_BOOT_ROM_DMG] = dmg_boot, + [GB_BOOT_ROM_MGB] = dmg_boot, // mgb not implemented yet + [GB_BOOT_ROM_SGB] = sgb_boot, + [GB_BOOT_ROM_SGB2] = sgb2_boot, + [GB_BOOT_ROM_CGB_0] = cgb_boot, // CGB_0 not implemented yet + [GB_BOOT_ROM_CGB] = cgb_boot, + [GB_BOOT_ROM_AGB] = agb_boot, + }[type]; + + unsigned boot_length = (unsigned []) { + [GB_BOOT_ROM_DMG_0] = dmg_boot_length, // DMG_0 not implemented yet + [GB_BOOT_ROM_DMG] = dmg_boot_length, + [GB_BOOT_ROM_MGB] = dmg_boot_length, // mgb not implemented yet + [GB_BOOT_ROM_SGB] = sgb_boot_length, + [GB_BOOT_ROM_SGB2] = sgb2_boot_length, + [GB_BOOT_ROM_CGB_0] = cgb_boot_length, // CGB_0 not implemented yet + [GB_BOOT_ROM_CGB] = cgb_boot_length, + [GB_BOOT_ROM_AGB] = agb_boot_length, + }[type]; + + char buf[256]; + snprintf(buf, sizeof(buf), "%s%c%s_boot.bin", retro_system_directory, slash, model_name); + log_cb(RETRO_LOG_INFO, "Initializing as model: %s\n", model_name); + log_cb(RETRO_LOG_INFO, "Loading boot image: %s\n", buf); + + if (GB_load_boot_rom(gb, buf)) { + GB_load_boot_rom_from_buffer(gb, boot_code, boot_length); + } +} + +static void retro_set_memory_maps(void) +{ + struct retro_memory_descriptor descs[11]; + size_t size; + uint16_t bank; + unsigned i; + + + /* todo: add netplay awareness for this so achievements can be granted on the respective client */ + i = 0; + memset(descs, 0, sizeof(descs)); + + descs[0].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_IE, &size, &bank); + descs[0].start = 0xFFFF; + descs[0].len = 1; + + descs[1].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_HRAM, &size, &bank); + descs[1].start = 0xFF80; + descs[1].len = 0x0080; + + descs[2].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_RAM, &size, &bank); + descs[2].start = 0xC000; + descs[2].len = 0x1000; + + descs[3].ptr = descs[2].ptr + 0x1000; /* GB RAM/GBC RAM bank 1 */ + descs[3].start = 0xD000; + descs[3].len = 0x1000; + + descs[4].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_CART_RAM, &size, &bank); + descs[4].start = 0xA000; + descs[4].len = 0x2000; + + descs[5].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_VRAM, &size, &bank); + descs[5].start = 0x8000; + descs[5].len = 0x2000; + + descs[6].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_ROM, &size, &bank); + descs[6].start = 0x0000; + descs[6].len = 0x4000; + descs[6].flags = RETRO_MEMDESC_CONST; + + descs[7].ptr = descs[6].ptr + (bank * 0x4000); + descs[7].start = 0x4000; + descs[7].len = 0x4000; + descs[7].flags = RETRO_MEMDESC_CONST; + + descs[8].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_OAM, &size, &bank); + descs[8].start = 0xFE00; + descs[8].len = 0x00A0; + descs[8].select = 0xFFFFFF00; + + descs[9].ptr = descs[2].ptr + 0x2000; /* GBC RAM bank 2 */ + descs[9].start = 0x10000; + descs[9].len = GB_is_cgb(&gameboy[i]) ? 0x6000 : 0; /* 0x1000 per bank (2-7), unmapped on GB */ + descs[9].select = 0xFFFF0000; + + descs[10].ptr = GB_get_direct_access(&gameboy[i], GB_DIRECT_ACCESS_IO, &size, &bank); + descs[10].start = 0xFF00; + descs[10].len = 0x0080; + descs[10].select = 0xFFFFFF00; + + struct retro_memory_map mmaps; + mmaps.descriptors = descs; + mmaps.num_descriptors = sizeof(descs) / sizeof(descs[0]); + environ_cb(RETRO_ENVIRONMENT_SET_MEMORY_MAPS, &mmaps); +} + +static void init_for_current_model(unsigned id) +{ + unsigned i = id; + enum model effective_model; + + effective_model = model[i]; + if (effective_model == MODEL_AUTO) { + effective_model = auto_model[i]; + } + + if (GB_is_inited(&gameboy[i])) { + GB_switch_model_and_reset(&gameboy[i], libretro_to_internal_model[effective_model]); + retro_set_memory_maps(); + } + else { + GB_init(&gameboy[i], libretro_to_internal_model[effective_model]); + } + + GB_set_boot_rom_load_callback(&gameboy[i], boot_rom_load); + + /* When running multiple devices they are assumed to use the same resolution */ + + GB_set_pixels_output(&gameboy[i], + (uint32_t *)(frame_buf + GB_get_screen_width(&gameboy[0]) * GB_get_screen_height(&gameboy[0]) * i)); + GB_set_rgb_encode_callback(&gameboy[i], rgb_encode); + GB_set_sample_rate(&gameboy[i], AUDIO_FREQUENCY); + GB_apu_set_sample_callback(&gameboy[i], audio_callback); + GB_set_rumble_callback(&gameboy[i], rumble_callback); + + /* todo: attempt to make these more generic */ + GB_set_vblank_callback(&gameboy[0], (GB_vblank_callback_t) vblank1); + GB_set_lcd_status_callback(&gameboy[0], lcd_status_change_1); + if (emulated_devices == 2) { + GB_set_vblank_callback(&gameboy[1], (GB_vblank_callback_t) vblank2); + GB_set_lcd_status_callback(&gameboy[2], lcd_status_change_2); + if (link_cable_emulation) { + set_link_cable_state(true); + } + } + + /* Let's be extremely nitpicky about how devices and descriptors are set */ + if (emulated_devices == 1 && (model[0] == MODEL_SGB_PAL || model[0] == MODEL_SGB_NTSC || model[0] == MODEL_SGB2)) { + static const struct retro_controller_info ports[] = { + { controllers_sgb, 1 }, + { controllers_sgb, 1 }, + { controllers_sgb, 1 }, + { controllers_sgb, 1 }, + { NULL, 0 }, + }; + environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); + environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, descriptors_4p); + } + else if (emulated_devices == 1) { + static const struct retro_controller_info ports[] = { + { controllers, 1 }, + { NULL, 0 }, + }; + environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); + environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, descriptors_1p); + } + else { + static const struct retro_controller_info ports[] = { + { controllers, 1 }, + { controllers, 1 }, + { NULL, 0 }, + }; + environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); + environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, descriptors_2p); + } +} + +static void check_variables() +{ + struct retro_variable var = {0}; + if (emulated_devices == 1) { + + var.key = "sameboy_model"; + var.value = NULL; + + model[0] = MODEL_AUTO; + auto_sgb_enabled[0] = false; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + enum model new_model = model[0]; + if (strcmp(var.value, "Game Boy") == 0) { + new_model = MODEL_DMG_B; + } + else if (strcmp(var.value, "Game Boy Color C") == 0) { + new_model = MODEL_CGB_C; + } + else if (strcmp(var.value, "Game Boy Color") == 0) { + new_model = MODEL_CGB_E; + } + else if (strcmp(var.value, "Game Boy Advance") == 0) { + new_model = MODEL_AGB; + } + else if (strcmp(var.value, "Super Game Boy") == 0) { + new_model = MODEL_SGB_NTSC; + } + else if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else if (strcmp(var.value, "Auto (SGB)") == 0) { + new_model = MODEL_AUTO; + auto_sgb_enabled[0] = true; + } + else { + new_model = MODEL_AUTO; + } + + model[0] = new_model; + } + + var.key = "sameboy_auto_sgb_model"; + var.value = NULL; + + auto_sgb_model[0] = MODEL_SGB_NTSC; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + enum model new_model = auto_sgb_model[0]; + if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else { + new_model = MODEL_SGB_NTSC; + } + + auto_sgb_model[0] = new_model; + } + + var.key = "sameboy_rtc"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "sync to system clock") == 0) { + GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_SYNC_TO_HOST); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_ACCURATE); + } + } + + var.key = "sameboy_mono_palette"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "greyscale") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GREY); + } + else if (strcmp(var.value, "lime") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_DMG); + } + else if (strcmp(var.value, "olive") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_MGB); + } + else if (strcmp(var.value, "teal") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GBL); + } + } + + var.key = "sameboy_color_correction_mode"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "off") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_DISABLED); + } + else if (strcmp(var.value, "correct curves") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_CORRECT_CURVES); + } + else if (strcmp(var.value, "emulate hardware") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BALANCED); + } + else if (strcmp(var.value, "preserve brightness") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST); + } + else if (strcmp(var.value, "reduce contrast") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_REDUCE_CONTRAST); + } + else if (strcmp(var.value, "harsh reality") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_LOW_CONTRAST); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_ACCURATE); + } + } + + var.key = "sameboy_light_temperature"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_light_temperature(&gameboy[0], atof(var.value)); + } + + var.key = "sameboy_border"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "never") == 0) { + GB_set_border_mode(&gameboy[0], GB_BORDER_NEVER); + } + else if (strcmp(var.value, "Super Game Boy only") == 0) { + GB_set_border_mode(&gameboy[0], GB_BORDER_SGB); + } + else if (strcmp(var.value, "always") == 0) { + GB_set_border_mode(&gameboy[0], GB_BORDER_ALWAYS); + } + geometry_updated = true; + } + + var.key = "sameboy_high_pass_filter_mode"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "off") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_OFF); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_ACCURATE); + } + else if (strcmp(var.value, "remove dc offset") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_REMOVE_DC_OFFSET); + } + } + + var.key = "sameboy_audio_interference"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_interference_volume(&gameboy[0], atoi(var.value) / 100.0); + } + + var.key = "sameboy_rumble"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "never") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_DISABLED); + } + else if (strcmp(var.value, "rumble-enabled games") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_CARTRIDGE_ONLY); + } + else if (strcmp(var.value, "all games") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_ALL_GAMES); + } + } + + } + else { + GB_set_border_mode(&gameboy[0], GB_BORDER_NEVER); + GB_set_border_mode(&gameboy[1], GB_BORDER_NEVER); + GB_set_rtc_mode(&gameboy[0], GB_RTC_MODE_ACCURATE); + GB_set_rtc_mode(&gameboy[1], GB_RTC_MODE_ACCURATE); + + var.key = "sameboy_link"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + bool tmp = link_cable_emulation; + if (strcmp(var.value, "enabled") == 0) { + link_cable_emulation = true; + } + else { + link_cable_emulation = false; + } + if (link_cable_emulation && link_cable_emulation != tmp) { + set_link_cable_state(true); + } + else if (!link_cable_emulation && link_cable_emulation != tmp) { + set_link_cable_state(false); + } + } + + var.key = "sameboy_screen_layout"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "top-down") == 0) { + screen_layout = LAYOUT_TOP_DOWN; + } + else { + screen_layout = LAYOUT_LEFT_RIGHT; + } + + geometry_updated = true; + } + + var.key = "sameboy_audio_output"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "Game Boy #1") == 0) { + audio_out = GB_1; + } + else { + audio_out = GB_2; + } + } + + var.key = "sameboy_model_1"; + var.value = NULL; + + model[0] = MODEL_AUTO; + auto_sgb_enabled[0] = false; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + enum model new_model = model[0]; + if (strcmp(var.value, "Game Boy") == 0) { + new_model = MODEL_DMG_B; + } + else if (strcmp(var.value, "Game Boy Color C") == 0) { + new_model = MODEL_CGB_C; + } + else if (strcmp(var.value, "Game Boy Color") == 0) { + new_model = MODEL_CGB_E; + } + else if (strcmp(var.value, "Game Boy Advance") == 0) { + new_model = MODEL_AGB; + } + else if (strcmp(var.value, "Super Game Boy") == 0) { + new_model = MODEL_SGB_NTSC; + } + else if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else if (strcmp(var.value, "Auto (SGB)") == 0) { + new_model = MODEL_AUTO; + auto_sgb_enabled[0] = true; + } + else { + new_model = MODEL_AUTO; + } + + model[0] = new_model; + } + + var.key = "sameboy_auto_sgb_model_1"; + var.value = NULL; + + auto_sgb_model[0] = MODEL_SGB_NTSC; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + enum model new_model = auto_sgb_model[0]; + if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else { + new_model = MODEL_SGB_NTSC; + } + + auto_sgb_model[0] = new_model; + } + + var.key = "sameboy_model_2"; + var.value = NULL; + + model[1] = MODEL_AUTO; + auto_sgb_enabled[1] = false; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + enum model new_model = model[1]; + if (strcmp(var.value, "Game Boy") == 0) { + new_model = MODEL_DMG_B; + } + else if (strcmp(var.value, "Game Boy Color C") == 0) { + new_model = MODEL_CGB_C; + } + else if (strcmp(var.value, "Game Boy Color") == 0) { + new_model = MODEL_CGB_E; + } + else if (strcmp(var.value, "Game Boy Advance") == 0) { + new_model = MODEL_AGB; + } + else if (strcmp(var.value, "Super Game Boy") == 0) { + new_model = MODEL_SGB_NTSC; + } + else if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else if (strcmp(var.value, "Auto (SGB)") == 0) { + new_model = MODEL_AUTO; + auto_sgb_enabled[1] = true; + } + else { + new_model = MODEL_AUTO; + } + + model[1] = new_model; + } + + var.key = "sameboy_auto_sgb_model_2"; + var.value = NULL; + + auto_sgb_model[1] = MODEL_SGB_NTSC; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + enum model new_model = auto_sgb_model[1]; + if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = MODEL_SGB_PAL; + } + else if (strcmp(var.value, "Super Game Boy 2") == 0) { + new_model = MODEL_SGB2; + } + else { + new_model = MODEL_SGB_NTSC; + } + + auto_sgb_model[1] = new_model; + } + + var.key = "sameboy_mono_palette_1"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "greyscale") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GREY); + } + else if (strcmp(var.value, "lime") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_DMG); + } + else if (strcmp(var.value, "olive") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_MGB); + } + else if (strcmp(var.value, "teal") == 0) { + GB_set_palette(&gameboy[0], &GB_PALETTE_GBL); + } + } + + var.key = "sameboy_mono_palette_2"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "greyscale") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_GREY); + } + else if (strcmp(var.value, "lime") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_DMG); + } + else if (strcmp(var.value, "olive") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_MGB); + } + else if (strcmp(var.value, "teal") == 0) { + GB_set_palette(&gameboy[1], &GB_PALETTE_GBL); + } + } + + var.key = "sameboy_color_correction_mode_1"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "off") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_DISABLED); + } + else if (strcmp(var.value, "correct curves") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_CORRECT_CURVES); + } + else if (strcmp(var.value, "emulate hardware") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BALANCED); + } + else if (strcmp(var.value, "preserve brightness") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST); + } + else if (strcmp(var.value, "reduce contrast") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_REDUCE_CONTRAST); + } + else if (strcmp(var.value, "harsh reality") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_LOW_CONTRAST); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_ACCURATE); + } + } + + var.key = "sameboy_color_correction_mode_2"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "off") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_DISABLED); + } + else if (strcmp(var.value, "correct curves") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_CORRECT_CURVES); + } + else if (strcmp(var.value, "emulate hardware") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_MODERN_BALANCED); + } + else if (strcmp(var.value, "preserve brightness") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST); + } + else if (strcmp(var.value, "reduce contrast") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_REDUCE_CONTRAST); + } + else if (strcmp(var.value, "harsh reality") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_LOW_CONTRAST); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_MODERN_ACCURATE); + } + } + + var.key = "sameboy_light_temperature_1"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_light_temperature(&gameboy[0], atof(var.value)); + } + + var.key = "sameboy_light_temperature_2"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_light_temperature(&gameboy[1], atof(var.value)); + } + + var.key = "sameboy_high_pass_filter_mode_1"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "off") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_OFF); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_ACCURATE); + } + else if (strcmp(var.value, "remove dc offset") == 0) { + GB_set_highpass_filter_mode(&gameboy[0], GB_HIGHPASS_REMOVE_DC_OFFSET); + } + } + + var.key = "sameboy_high_pass_filter_mode_2"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "off") == 0) { + GB_set_highpass_filter_mode(&gameboy[1], GB_HIGHPASS_OFF); + } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_highpass_filter_mode(&gameboy[1], GB_HIGHPASS_ACCURATE); + } + else if (strcmp(var.value, "remove dc offset") == 0) { + GB_set_highpass_filter_mode(&gameboy[1], GB_HIGHPASS_REMOVE_DC_OFFSET); + } + } + + var.key = "sameboy_audio_interference_1"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_interference_volume(&gameboy[0], atoi(var.value) / 100.0); + } + + var.key = "sameboy_audio_interference_2"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_set_interference_volume(&gameboy[1], atoi(var.value) / 100.0); + } + + var.key = "sameboy_rumble_1"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "never") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_DISABLED); + } + else if (strcmp(var.value, "rumble-enabled games") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_CARTRIDGE_ONLY); + } + else if (strcmp(var.value, "all games") == 0) { + GB_set_rumble_mode(&gameboy[0], GB_RUMBLE_ALL_GAMES); + } + } + + var.key = "sameboy_rumble_2"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + if (strcmp(var.value, "never") == 0) { + GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_DISABLED); + } + else if (strcmp(var.value, "rumble-enabled games") == 0) { + GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_CARTRIDGE_ONLY); + } + else if (strcmp(var.value, "all games") == 0) { + GB_set_rumble_mode(&gameboy[1], GB_RUMBLE_ALL_GAMES); + } + } + + } + set_variable_visibility(); +} + +void retro_init(void) +{ + const char *dir = NULL; + + if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir) && dir) { + snprintf(retro_system_directory, sizeof(retro_system_directory), "%s", dir); + } + else { + snprintf(retro_system_directory, sizeof(retro_system_directory), "%s", "."); + } + + if (environ_cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging)) { + log_cb = logging.log; + } + else { + log_cb = fallback_log; + } + + if (environ_cb(RETRO_ENVIRONMENT_GET_INPUT_BITMASKS, NULL)) { + libretro_supports_bitmasks = true; + } + + init_output_audio_buffer(16384); +} + +void retro_deinit(void) +{ + free(frame_buf); + free(frame_buf_copy); + frame_buf = NULL; + frame_buf_copy = NULL; + + free_output_audio_buffer(); + + libretro_supports_bitmasks = false; +} + +unsigned retro_api_version(void) +{ + return RETRO_API_VERSION; +} + +void retro_set_controller_port_device(unsigned port, unsigned device) +{ + log_cb(RETRO_LOG_INFO, "Connecting device %u into port %u\n", device, port); +} + +void retro_get_system_info(struct retro_system_info *info) +{ + memset(info, 0, sizeof(*info)); + info->library_name = "SameBoy"; +#ifdef GIT_VERSION + info->library_version = GB_VERSION GIT_VERSION; +#else + info->library_version = GB_VERSION; +#endif + info->need_fullpath = false; + info->valid_extensions = "gb|gbc"; +} + +void retro_get_system_av_info(struct retro_system_av_info *info) +{ + struct retro_game_geometry geom; + struct retro_system_timing timing = { GB_get_usual_frame_rate(&gameboy[0]), AUDIO_FREQUENCY }; + + if (emulated_devices == 2) { + if (screen_layout == LAYOUT_TOP_DOWN) { + geom.base_width = GB_get_screen_width(&gameboy[0]); + geom.base_height = GB_get_screen_height(&gameboy[0]) * emulated_devices; + geom.aspect_ratio = (double)GB_get_screen_width(&gameboy[0]) / (emulated_devices * GB_get_screen_height(&gameboy[0])); + } + else if (screen_layout == LAYOUT_LEFT_RIGHT) { + geom.base_width = GB_get_screen_width(&gameboy[0]) * emulated_devices; + geom.base_height = GB_get_screen_height(&gameboy[0]); + geom.aspect_ratio = ((double)GB_get_screen_width(&gameboy[0]) * emulated_devices) / GB_get_screen_height(&gameboy[0]); + } + } + else { + geom.base_width = GB_get_screen_width(&gameboy[0]); + geom.base_height = GB_get_screen_height(&gameboy[0]); + geom.aspect_ratio = (double)GB_get_screen_width(&gameboy[0]) / GB_get_screen_height(&gameboy[0]); + } + + geom.max_width = MAX_VIDEO_WIDTH * emulated_devices; + geom.max_height = MAX_VIDEO_HEIGHT * emulated_devices; + + info->geometry = geom; + info->timing = timing; +} + +void retro_set_environment(retro_environment_t cb) +{ + bool categories_supported; + + environ_cb = cb; + + libretro_set_core_options(environ_cb, &categories_supported); + + environ_cb(RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO, (void*)subsystems); +} + +void retro_set_audio_sample(retro_audio_sample_t cb) +{ + (void)cb; +} + +void retro_set_audio_sample_batch(retro_audio_sample_batch_t cb) +{ + audio_batch_cb = cb; +} + +void retro_set_input_poll(retro_input_poll_t cb) +{ + input_poll_cb = cb; +} + +void retro_set_input_state(retro_input_state_t cb) +{ + input_state_cb = cb; +} + +void retro_set_video_refresh(retro_video_refresh_t cb) +{ + video_cb = cb; +} + +void retro_reset(void) +{ + check_variables(); + + for (int i = 0; i < emulated_devices; i++) { + init_for_current_model(i); + GB_reset(&gameboy[i]); + } + + geometry_updated = true; +} + +void retro_run(void) +{ + + bool updated = false; + + if (!initialized) { + geometry_updated = false; + } + + if (geometry_updated) { + struct retro_system_av_info info; + retro_get_system_av_info(&info); + environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &info.geometry); + geometry_updated = false; + } + + if (!frame_buf) { + return; + } + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) { + check_variables(); + } + + if (emulated_devices == 2) { + GB_update_keys_status(&gameboy[0], 0); + GB_update_keys_status(&gameboy[1], 1); + } + else if (emulated_devices == 1 && (model[0] == MODEL_SGB_PAL || model[0] == MODEL_SGB_NTSC || model[0] == MODEL_SGB2)) { + for (unsigned i = 0; i < 4; i++) { + GB_update_keys_status(&gameboy[0], i); + } + } + else { + GB_update_keys_status(&gameboy[0], 0); + } + + vblank1_occurred = vblank2_occurred = false; + signed delta = 0; + if (emulated_devices == 2) { + while (!vblank1_occurred || !vblank2_occurred) { + if (delta >= 0) { + delta -= GB_run(&gameboy[0]); + } + else { + delta += GB_run(&gameboy[1]); + } + } + } + else { + GB_run_frame(&gameboy[0]); + } + + if (emulated_devices == 2) { + if (screen_layout == LAYOUT_TOP_DOWN) { + video_cb(frame_buf, + GB_get_screen_width(&gameboy[0]), + GB_get_screen_height(&gameboy[0]) * emulated_devices, + GB_get_screen_width(&gameboy[0]) * sizeof(uint32_t)); + } + else if (screen_layout == LAYOUT_LEFT_RIGHT) { + unsigned pitch = GB_get_screen_width(&gameboy[0]) * emulated_devices; + unsigned pixels_per_device = GB_get_screen_width(&gameboy[0]) * GB_get_screen_height(&gameboy[0]); + for (int y = 0; y < GB_get_screen_height(&gameboy[0]); y++) { + for (unsigned i = 0; i < emulated_devices; i++) { + memcpy(frame_buf_copy + y * pitch + GB_get_screen_width(&gameboy[0]) * i, + frame_buf + pixels_per_device * i + y * GB_get_screen_width(&gameboy[0]), + GB_get_screen_width(&gameboy[0]) * sizeof(uint32_t)); + } + } + + video_cb(frame_buf_copy, GB_get_screen_width(&gameboy[0]) * emulated_devices, GB_get_screen_height(&gameboy[0]), GB_get_screen_width(&gameboy[0]) * emulated_devices * sizeof(uint32_t)); + } + } + else { + video_cb(frame_buf, + GB_get_screen_width(&gameboy[0]), + GB_get_screen_height(&gameboy[0]), + GB_get_screen_width(&gameboy[0]) * sizeof(uint32_t)); + } + + upload_output_audio_buffer(); + initialized = true; +} + +static enum rom_type check_rom_header(const uint8_t *data, size_t size) +{ + enum rom_type type; + uint8_t cgb_flag; + uint8_t sgb_flag; + + if (!data || (size < 0x146 + 1)) { + return ROM_TYPE_INVALID; + } + + type = ROM_TYPE_DMG; + cgb_flag = data[0x143]; + sgb_flag = data[0x146]; + + if ((cgb_flag == 0x80) || (cgb_flag == 0xC0)) { + type = ROM_TYPE_CGB; + } + + if ((type == ROM_TYPE_DMG) && (sgb_flag == 0x03)) { + type = ROM_TYPE_SGB; + } + + return type; +} + +bool retro_load_game(const struct retro_game_info *info) +{ + enum rom_type content_type = ROM_TYPE_INVALID; + const uint8_t *content_data = NULL; + size_t content_size; + + if (info) { + content_data = (const uint8_t *)info->data; + content_size = info->size; + content_type = check_rom_header(content_data, content_size); + } + + check_variables(); + + switch (content_type) { + case ROM_TYPE_DMG: + auto_model[0] = MODEL_DMG_B; + auto_model[1] = MODEL_DMG_B; + break; + case ROM_TYPE_SGB: + auto_model[0] = auto_sgb_enabled[0] ? auto_sgb_model[0] : MODEL_DMG_B; + auto_model[1] = auto_sgb_enabled[1] ? auto_sgb_model[1] : MODEL_DMG_B; + break; + case ROM_TYPE_CGB: + auto_model[0] = MODEL_CGB_E; + auto_model[1] = MODEL_CGB_E; + break; + case ROM_TYPE_INVALID: + default: + log_cb(RETRO_LOG_ERROR, "Invalid content\n"); + return false; + } + + frame_buf = (uint32_t *)malloc(MAX_VIDEO_PIXELS * emulated_devices * sizeof(uint32_t)); + memset(frame_buf, 0, MAX_VIDEO_PIXELS * emulated_devices * sizeof(uint32_t)); + + enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; + if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { + log_cb(RETRO_LOG_ERROR, "XRGB8888 is not supported\n"); + return false; + } + + for (int i = 0; i < emulated_devices; i++) { + init_for_current_model(i); + GB_load_rom_from_buffer(&gameboy[i], content_data, content_size); + } + + bool achievements = true; + environ_cb(RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS, &achievements); + + if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble)) { + log_cb(RETRO_LOG_INFO, "Rumble environment supported\n"); + } + else { + log_cb(RETRO_LOG_INFO, "Rumble environment not supported\n"); + } + + check_variables(); + + retro_set_memory_maps(); + + return true; +} + +void retro_unload_game(void) +{ + for (int i = 0; i < emulated_devices; i++) { + log_cb(RETRO_LOG_INFO, "Unloading GB: %d\n", emulated_devices); + GB_free(&gameboy[i]); + } +} + +unsigned retro_get_region(void) +{ + return RETRO_REGION_NTSC; +} + +bool retro_load_game_special(unsigned type, const struct retro_game_info *info, size_t num_info) +{ + if ((type == RETRO_GAME_TYPE_GAMEBOY_LINK_2P) && (num_info >= 2)) { + emulated_devices = 2; + } + else { + return false; /* all other types are unhandled for now */ + } + + check_variables(); + + frame_buf = (uint32_t*)malloc(emulated_devices * MAX_VIDEO_PIXELS * sizeof(uint32_t)); + frame_buf_copy = (uint32_t*)malloc(emulated_devices * MAX_VIDEO_PIXELS * sizeof(uint32_t)); + + memset(frame_buf, 0, emulated_devices * MAX_VIDEO_PIXELS * sizeof(uint32_t)); + memset(frame_buf_copy, 0, emulated_devices * MAX_VIDEO_PIXELS * sizeof(uint32_t)); + + enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; + if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { + log_cb(RETRO_LOG_ERROR, "XRGB8888 is not supported\n"); + return false; + } + + for (int i = 0; i < emulated_devices; i++) { + enum rom_type content_type = ROM_TYPE_INVALID; + const uint8_t *content_data = info[i].data; + size_t content_size = info[i].size; + + content_type = check_rom_header(content_data, content_size); + + switch (content_type) { + case ROM_TYPE_DMG: + auto_model[i] = MODEL_DMG_B; + break; + case ROM_TYPE_SGB: + auto_model[i] = auto_sgb_enabled[i] ? auto_sgb_model[i] : MODEL_DMG_B; + break; + case ROM_TYPE_CGB: + auto_model[i] = MODEL_CGB_E; + break; + case ROM_TYPE_INVALID: + default: + log_cb(RETRO_LOG_ERROR, "Invalid content\n"); + return false; + } + + init_for_current_model(i); + GB_load_rom_from_buffer(&gameboy[i], content_data, content_size); + } + + bool achievements = true; + environ_cb(RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS, &achievements); + + if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble)) { + log_cb(RETRO_LOG_INFO, "Rumble environment supported\n"); + } + else { + log_cb(RETRO_LOG_INFO, "Rumble environment not supported\n"); + } + + check_variables(); + return true; +} + +size_t retro_serialize_size(void) +{ + static size_t maximum_save_size = 0; + if (maximum_save_size) { + return maximum_save_size * 2; + } + + GB_gameboy_t temp; + + GB_init(&temp, GB_MODEL_DMG_B); + maximum_save_size = GB_get_save_state_size(&temp); + GB_free(&temp); + + GB_init(&temp, GB_MODEL_CGB_E); + maximum_save_size = MAX(maximum_save_size, GB_get_save_state_size(&temp)); + GB_free(&temp); + + GB_init(&temp, GB_MODEL_SGB2); + maximum_save_size = MAX(maximum_save_size, GB_get_save_state_size(&temp)); + GB_free(&temp); + + return maximum_save_size * 2; +} + +bool retro_serialize(void *data, size_t size) +{ + + if (!initialized || !data) { + return false; + } + + size_t offset = 0; + + for (int i = 0; i < emulated_devices; i++) { + size_t state_size = GB_get_save_state_size(&gameboy[i]); + if (state_size > size) { + return false; + } + + GB_save_state_to_buffer(&gameboy[i], ((uint8_t *) data) + offset); + offset += state_size; + size -= state_size; + } + + return true; +} + +bool retro_unserialize(const void *data, size_t size) +{ + for (int i = 0; i < emulated_devices; i++) { + size_t state_size = GB_get_save_state_size(&gameboy[i]); + if (state_size > size) { + return false; + } + + if (GB_load_state_from_buffer(&gameboy[i], data, state_size)) { + return false; + } + + size -= state_size; + data = ((uint8_t *)data) + state_size; + } + + return true; + +} + +void *retro_get_memory_data(unsigned type) +{ + void *data = NULL; + if (emulated_devices == 1) { + switch (type) { + case RETRO_MEMORY_SYSTEM_RAM: + data = gameboy[0].ram; + break; + case RETRO_MEMORY_SAVE_RAM: + if (gameboy[0].cartridge_type->has_battery && gameboy[0].mbc_ram_size != 0) { + data = gameboy[0].mbc_ram; + } + else { + data = NULL; + } + break; + case RETRO_MEMORY_VIDEO_RAM: + data = gameboy[0].vram; + break; + case RETRO_MEMORY_RTC: + if (gameboy[0].cartridge_type->has_battery) { + data = GB_GET_SECTION(&gameboy[0], rtc); + } + else { + data = NULL; + } + break; + default: + break; + } + } + else { + switch (type) { + case RETRO_MEMORY_GAMEBOY_1_SRAM: + if (gameboy[0].cartridge_type->has_battery && gameboy[0].mbc_ram_size != 0) { + data = gameboy[0].mbc_ram; + } + else { + data = NULL; + } + break; + case RETRO_MEMORY_GAMEBOY_2_SRAM: + if (gameboy[1].cartridge_type->has_battery && gameboy[1].mbc_ram_size != 0) { + data = gameboy[1].mbc_ram; + } + else { + data = NULL; + } + break; + case RETRO_MEMORY_GAMEBOY_1_RTC: + if (gameboy[0].cartridge_type->has_battery) { + data = GB_GET_SECTION(&gameboy[0], rtc); + } + else { + data = NULL; + } + break; + case RETRO_MEMORY_GAMEBOY_2_RTC: + if (gameboy[1].cartridge_type->has_battery) { + data = GB_GET_SECTION(&gameboy[1], rtc); + } + else { + data = NULL; + } + break; + default: + break; + } + } + + return data; +} + +size_t retro_get_memory_size(unsigned type) +{ + size_t size = 0; + if (emulated_devices == 1) { + switch (type) { + case RETRO_MEMORY_SYSTEM_RAM: + size = gameboy[0].ram_size; + break; + case RETRO_MEMORY_SAVE_RAM: + if (gameboy[0].cartridge_type->has_battery && gameboy[0].mbc_ram_size != 0) { + size = gameboy[0].mbc_ram_size; + } + else { + size = 0; + } + break; + case RETRO_MEMORY_VIDEO_RAM: + size = gameboy[0].vram_size; + break; + case RETRO_MEMORY_RTC: + if (gameboy[0].cartridge_type->has_battery) { + size = GB_SECTION_SIZE(rtc); + } + else { + size = 0; + } + break; + default: + break; + } + } + else { + switch (type) { + case RETRO_MEMORY_GAMEBOY_1_SRAM: + if (gameboy[0].cartridge_type->has_battery && gameboy[0].mbc_ram_size != 0) { + size = gameboy[0].mbc_ram_size; + } + else { + size = 0; + } + break; + case RETRO_MEMORY_GAMEBOY_2_SRAM: + if (gameboy[1].cartridge_type->has_battery && gameboy[1].mbc_ram_size != 0) { + size = gameboy[1].mbc_ram_size; + } + else { + size = 0; + } + break; + case RETRO_MEMORY_GAMEBOY_1_RTC: + if (gameboy[0].cartridge_type->has_battery) { + size = GB_SECTION_SIZE(rtc); + } + break; + case RETRO_MEMORY_GAMEBOY_2_RTC: + if (gameboy[1].cartridge_type->has_battery) { + size = GB_SECTION_SIZE(rtc); + } + break; + default: + break; + } + } + + return size; +} + +void retro_cheat_reset(void) +{} + +void retro_cheat_set(unsigned index, bool enabled, const char *code) +{ + (void)index; + (void)enabled; + (void)code; +} diff --git a/thirdparty/SameBoy-old/libretro/libretro.h b/thirdparty/SameBoy-old/libretro/libretro.h new file mode 100644 index 000000000..4f4db1cf9 --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/libretro.h @@ -0,0 +1,3638 @@ +/* Copyright (C) 2010-2020 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this libretro API header (libretro.h). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef LIBRETRO_H__ +#define LIBRETRO_H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __cplusplus +#if defined(_MSC_VER) && _MSC_VER < 1800 && !defined(SN_TARGET_PS3) +/* Hack applied for MSVC when compiling in C89 mode + * as it isn't C99-compliant. */ +#define bool unsigned char +#define true 1 +#define false 0 +#else +#include +#endif +#endif + +#ifndef RETRO_CALLCONV +# if defined(__GNUC__) && defined(__i386__) && !defined(__x86_64__) +# define RETRO_CALLCONV __attribute__((cdecl)) +# elif defined(_MSC_VER) && defined(_M_X86) && !defined(_M_X64) +# define RETRO_CALLCONV __cdecl +# else +# define RETRO_CALLCONV /* all other platforms only have one calling convention each */ +# endif +#endif + +#ifndef RETRO_API +# if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) +# ifdef RETRO_IMPORT_SYMBOLS +# ifdef __GNUC__ +# define RETRO_API RETRO_CALLCONV __attribute__((__dllimport__)) +# else +# define RETRO_API RETRO_CALLCONV __declspec(dllimport) +# endif +# else +# ifdef __GNUC__ +# define RETRO_API RETRO_CALLCONV __attribute__((__dllexport__)) +# else +# define RETRO_API RETRO_CALLCONV __declspec(dllexport) +# endif +# endif +# else +# if defined(__GNUC__) && __GNUC__ >= 4 +# define RETRO_API RETRO_CALLCONV __attribute__((__visibility__("default"))) +# else +# define RETRO_API RETRO_CALLCONV +# endif +# endif +#endif + +/* Used for checking API/ABI mismatches that can break libretro + * implementations. + * It is not incremented for compatible changes to the API. + */ +#define RETRO_API_VERSION 1 + +/* + * Libretro's fundamental device abstractions. + * + * Libretro's input system consists of some standardized device types, + * such as a joypad (with/without analog), mouse, keyboard, lightgun + * and a pointer. + * + * The functionality of these devices are fixed, and individual cores + * map their own concept of a controller to libretro's abstractions. + * This makes it possible for frontends to map the abstract types to a + * real input device, and not having to worry about binding input + * correctly to arbitrary controller layouts. + */ + +#define RETRO_DEVICE_TYPE_SHIFT 8 +#define RETRO_DEVICE_MASK ((1 << RETRO_DEVICE_TYPE_SHIFT) - 1) +#define RETRO_DEVICE_SUBCLASS(base, id) (((id + 1) << RETRO_DEVICE_TYPE_SHIFT) | base) + +/* Input disabled. */ +#define RETRO_DEVICE_NONE 0 + +/* The JOYPAD is called RetroPad. It is essentially a Super Nintendo + * controller, but with additional L2/R2/L3/R3 buttons, similar to a + * PS1 DualShock. */ +#define RETRO_DEVICE_JOYPAD 1 + +/* The mouse is a simple mouse, similar to Super Nintendo's mouse. + * X and Y coordinates are reported relatively to last poll (poll callback). + * It is up to the libretro implementation to keep track of where the mouse + * pointer is supposed to be on the screen. + * The frontend must make sure not to interfere with its own hardware + * mouse pointer. + */ +#define RETRO_DEVICE_MOUSE 2 + +/* KEYBOARD device lets one poll for raw key pressed. + * It is poll based, so input callback will return with the current + * pressed state. + * For event/text based keyboard input, see + * RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK. + */ +#define RETRO_DEVICE_KEYBOARD 3 + +/* LIGHTGUN device is similar to Guncon-2 for PlayStation 2. + * It reports X/Y coordinates in screen space (similar to the pointer) + * in the range [-0x8000, 0x7fff] in both axes, with zero being center and + * -0x8000 being out of bounds. + * As well as reporting on/off screen state. It features a trigger, + * start/select buttons, auxiliary action buttons and a + * directional pad. A forced off-screen shot can be requested for + * auto-reloading function in some games. + */ +#define RETRO_DEVICE_LIGHTGUN 4 + +/* The ANALOG device is an extension to JOYPAD (RetroPad). + * Similar to DualShock2 it adds two analog sticks and all buttons can + * be analog. This is treated as a separate device type as it returns + * axis values in the full analog range of [-0x7fff, 0x7fff], + * although some devices may return -0x8000. + * Positive X axis is right. Positive Y axis is down. + * Buttons are returned in the range [0, 0x7fff]. + * Only use ANALOG type when polling for analog values. + */ +#define RETRO_DEVICE_ANALOG 5 + +/* Abstracts the concept of a pointing mechanism, e.g. touch. + * This allows libretro to query in absolute coordinates where on the + * screen a mouse (or something similar) is being placed. + * For a touch centric device, coordinates reported are the coordinates + * of the press. + * + * Coordinates in X and Y are reported as: + * [-0x7fff, 0x7fff]: -0x7fff corresponds to the far left/top of the screen, + * and 0x7fff corresponds to the far right/bottom of the screen. + * The "screen" is here defined as area that is passed to the frontend and + * later displayed on the monitor. + * + * The frontend is free to scale/resize this screen as it sees fit, however, + * (X, Y) = (-0x7fff, -0x7fff) will correspond to the top-left pixel of the + * game image, etc. + * + * To check if the pointer coordinates are valid (e.g. a touch display + * actually being touched), PRESSED returns 1 or 0. + * + * If using a mouse on a desktop, PRESSED will usually correspond to the + * left mouse button, but this is a frontend decision. + * PRESSED will only return 1 if the pointer is inside the game screen. + * + * For multi-touch, the index variable can be used to successively query + * more presses. + * If index = 0 returns true for _PRESSED, coordinates can be extracted + * with _X, _Y for index = 0. One can then query _PRESSED, _X, _Y with + * index = 1, and so on. + * Eventually _PRESSED will return false for an index. No further presses + * are registered at this point. */ +#define RETRO_DEVICE_POINTER 6 + +/* Buttons for the RetroPad (JOYPAD). + * The placement of these is equivalent to placements on the + * Super Nintendo controller. + * L2/R2/L3/R3 buttons correspond to the PS1 DualShock. + * Also used as id values for RETRO_DEVICE_INDEX_ANALOG_BUTTON */ +#define RETRO_DEVICE_ID_JOYPAD_B 0 +#define RETRO_DEVICE_ID_JOYPAD_Y 1 +#define RETRO_DEVICE_ID_JOYPAD_SELECT 2 +#define RETRO_DEVICE_ID_JOYPAD_START 3 +#define RETRO_DEVICE_ID_JOYPAD_UP 4 +#define RETRO_DEVICE_ID_JOYPAD_DOWN 5 +#define RETRO_DEVICE_ID_JOYPAD_LEFT 6 +#define RETRO_DEVICE_ID_JOYPAD_RIGHT 7 +#define RETRO_DEVICE_ID_JOYPAD_A 8 +#define RETRO_DEVICE_ID_JOYPAD_X 9 +#define RETRO_DEVICE_ID_JOYPAD_L 10 +#define RETRO_DEVICE_ID_JOYPAD_R 11 +#define RETRO_DEVICE_ID_JOYPAD_L2 12 +#define RETRO_DEVICE_ID_JOYPAD_R2 13 +#define RETRO_DEVICE_ID_JOYPAD_L3 14 +#define RETRO_DEVICE_ID_JOYPAD_R3 15 + +#define RETRO_DEVICE_ID_JOYPAD_MASK 256 + +/* Index / Id values for ANALOG device. */ +#define RETRO_DEVICE_INDEX_ANALOG_LEFT 0 +#define RETRO_DEVICE_INDEX_ANALOG_RIGHT 1 +#define RETRO_DEVICE_INDEX_ANALOG_BUTTON 2 +#define RETRO_DEVICE_ID_ANALOG_X 0 +#define RETRO_DEVICE_ID_ANALOG_Y 1 + +/* Id values for MOUSE. */ +#define RETRO_DEVICE_ID_MOUSE_X 0 +#define RETRO_DEVICE_ID_MOUSE_Y 1 +#define RETRO_DEVICE_ID_MOUSE_LEFT 2 +#define RETRO_DEVICE_ID_MOUSE_RIGHT 3 +#define RETRO_DEVICE_ID_MOUSE_WHEELUP 4 +#define RETRO_DEVICE_ID_MOUSE_WHEELDOWN 5 +#define RETRO_DEVICE_ID_MOUSE_MIDDLE 6 +#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP 7 +#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN 8 +#define RETRO_DEVICE_ID_MOUSE_BUTTON_4 9 +#define RETRO_DEVICE_ID_MOUSE_BUTTON_5 10 + +/* Id values for LIGHTGUN. */ +#define RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X 13 /*Absolute Position*/ +#define RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y 14 /*Absolute*/ +#define RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN 15 /*Status Check*/ +#define RETRO_DEVICE_ID_LIGHTGUN_TRIGGER 2 +#define RETRO_DEVICE_ID_LIGHTGUN_RELOAD 16 /*Forced off-screen shot*/ +#define RETRO_DEVICE_ID_LIGHTGUN_AUX_A 3 +#define RETRO_DEVICE_ID_LIGHTGUN_AUX_B 4 +#define RETRO_DEVICE_ID_LIGHTGUN_START 6 +#define RETRO_DEVICE_ID_LIGHTGUN_SELECT 7 +#define RETRO_DEVICE_ID_LIGHTGUN_AUX_C 8 +#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_UP 9 +#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_DOWN 10 +#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_LEFT 11 +#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_RIGHT 12 +/* deprecated */ +#define RETRO_DEVICE_ID_LIGHTGUN_X 0 /*Relative Position*/ +#define RETRO_DEVICE_ID_LIGHTGUN_Y 1 /*Relative*/ +#define RETRO_DEVICE_ID_LIGHTGUN_CURSOR 3 /*Use Aux:A*/ +#define RETRO_DEVICE_ID_LIGHTGUN_TURBO 4 /*Use Aux:B*/ +#define RETRO_DEVICE_ID_LIGHTGUN_PAUSE 5 /*Use Start*/ + +/* Id values for POINTER. */ +#define RETRO_DEVICE_ID_POINTER_X 0 +#define RETRO_DEVICE_ID_POINTER_Y 1 +#define RETRO_DEVICE_ID_POINTER_PRESSED 2 +#define RETRO_DEVICE_ID_POINTER_COUNT 3 + +/* Returned from retro_get_region(). */ +#define RETRO_REGION_NTSC 0 +#define RETRO_REGION_PAL 1 + +/* Id values for LANGUAGE */ +enum retro_language +{ + RETRO_LANGUAGE_ENGLISH = 0, + RETRO_LANGUAGE_JAPANESE = 1, + RETRO_LANGUAGE_FRENCH = 2, + RETRO_LANGUAGE_SPANISH = 3, + RETRO_LANGUAGE_GERMAN = 4, + RETRO_LANGUAGE_ITALIAN = 5, + RETRO_LANGUAGE_DUTCH = 6, + RETRO_LANGUAGE_PORTUGUESE_BRAZIL = 7, + RETRO_LANGUAGE_PORTUGUESE_PORTUGAL = 8, + RETRO_LANGUAGE_RUSSIAN = 9, + RETRO_LANGUAGE_KOREAN = 10, + RETRO_LANGUAGE_CHINESE_TRADITIONAL = 11, + RETRO_LANGUAGE_CHINESE_SIMPLIFIED = 12, + RETRO_LANGUAGE_ESPERANTO = 13, + RETRO_LANGUAGE_POLISH = 14, + RETRO_LANGUAGE_VIETNAMESE = 15, + RETRO_LANGUAGE_ARABIC = 16, + RETRO_LANGUAGE_GREEK = 17, + RETRO_LANGUAGE_TURKISH = 18, + RETRO_LANGUAGE_SLOVAK = 19, + RETRO_LANGUAGE_PERSIAN = 20, + RETRO_LANGUAGE_HEBREW = 21, + RETRO_LANGUAGE_ASTURIAN = 22, + RETRO_LANGUAGE_FINNISH = 23, + RETRO_LANGUAGE_LAST, + + /* Ensure sizeof(enum) == sizeof(int) */ + RETRO_LANGUAGE_DUMMY = INT_MAX +}; + +/* Passed to retro_get_memory_data/size(). + * If the memory type doesn't apply to the + * implementation NULL/0 can be returned. + */ +#define RETRO_MEMORY_MASK 0xff + +/* Regular save RAM. This RAM is usually found on a game cartridge, + * backed up by a battery. + * If save game data is too complex for a single memory buffer, + * the SAVE_DIRECTORY (preferably) or SYSTEM_DIRECTORY environment + * callback can be used. */ +#define RETRO_MEMORY_SAVE_RAM 0 + +/* Some games have a built-in clock to keep track of time. + * This memory is usually just a couple of bytes to keep track of time. + */ +#define RETRO_MEMORY_RTC 1 + +/* System ram lets a frontend peek into a game systems main RAM. */ +#define RETRO_MEMORY_SYSTEM_RAM 2 + +/* Video ram lets a frontend peek into a game systems video RAM (VRAM). */ +#define RETRO_MEMORY_VIDEO_RAM 3 + +/* Keysyms used for ID in input state callback when polling RETRO_KEYBOARD. */ +enum retro_key +{ + RETROK_UNKNOWN = 0, + RETROK_FIRST = 0, + RETROK_BACKSPACE = 8, + RETROK_TAB = 9, + RETROK_CLEAR = 12, + RETROK_RETURN = 13, + RETROK_PAUSE = 19, + RETROK_ESCAPE = 27, + RETROK_SPACE = 32, + RETROK_EXCLAIM = 33, + RETROK_QUOTEDBL = 34, + RETROK_HASH = 35, + RETROK_DOLLAR = 36, + RETROK_AMPERSAND = 38, + RETROK_QUOTE = 39, + RETROK_LEFTPAREN = 40, + RETROK_RIGHTPAREN = 41, + RETROK_ASTERISK = 42, + RETROK_PLUS = 43, + RETROK_COMMA = 44, + RETROK_MINUS = 45, + RETROK_PERIOD = 46, + RETROK_SLASH = 47, + RETROK_0 = 48, + RETROK_1 = 49, + RETROK_2 = 50, + RETROK_3 = 51, + RETROK_4 = 52, + RETROK_5 = 53, + RETROK_6 = 54, + RETROK_7 = 55, + RETROK_8 = 56, + RETROK_9 = 57, + RETROK_COLON = 58, + RETROK_SEMICOLON = 59, + RETROK_LESS = 60, + RETROK_EQUALS = 61, + RETROK_GREATER = 62, + RETROK_QUESTION = 63, + RETROK_AT = 64, + RETROK_LEFTBRACKET = 91, + RETROK_BACKSLASH = 92, + RETROK_RIGHTBRACKET = 93, + RETROK_CARET = 94, + RETROK_UNDERSCORE = 95, + RETROK_BACKQUOTE = 96, + RETROK_a = 97, + RETROK_b = 98, + RETROK_c = 99, + RETROK_d = 100, + RETROK_e = 101, + RETROK_f = 102, + RETROK_g = 103, + RETROK_h = 104, + RETROK_i = 105, + RETROK_j = 106, + RETROK_k = 107, + RETROK_l = 108, + RETROK_m = 109, + RETROK_n = 110, + RETROK_o = 111, + RETROK_p = 112, + RETROK_q = 113, + RETROK_r = 114, + RETROK_s = 115, + RETROK_t = 116, + RETROK_u = 117, + RETROK_v = 118, + RETROK_w = 119, + RETROK_x = 120, + RETROK_y = 121, + RETROK_z = 122, + RETROK_LEFTBRACE = 123, + RETROK_BAR = 124, + RETROK_RIGHTBRACE = 125, + RETROK_TILDE = 126, + RETROK_DELETE = 127, + + RETROK_KP0 = 256, + RETROK_KP1 = 257, + RETROK_KP2 = 258, + RETROK_KP3 = 259, + RETROK_KP4 = 260, + RETROK_KP5 = 261, + RETROK_KP6 = 262, + RETROK_KP7 = 263, + RETROK_KP8 = 264, + RETROK_KP9 = 265, + RETROK_KP_PERIOD = 266, + RETROK_KP_DIVIDE = 267, + RETROK_KP_MULTIPLY = 268, + RETROK_KP_MINUS = 269, + RETROK_KP_PLUS = 270, + RETROK_KP_ENTER = 271, + RETROK_KP_EQUALS = 272, + + RETROK_UP = 273, + RETROK_DOWN = 274, + RETROK_RIGHT = 275, + RETROK_LEFT = 276, + RETROK_INSERT = 277, + RETROK_HOME = 278, + RETROK_END = 279, + RETROK_PAGEUP = 280, + RETROK_PAGEDOWN = 281, + + RETROK_F1 = 282, + RETROK_F2 = 283, + RETROK_F3 = 284, + RETROK_F4 = 285, + RETROK_F5 = 286, + RETROK_F6 = 287, + RETROK_F7 = 288, + RETROK_F8 = 289, + RETROK_F9 = 290, + RETROK_F10 = 291, + RETROK_F11 = 292, + RETROK_F12 = 293, + RETROK_F13 = 294, + RETROK_F14 = 295, + RETROK_F15 = 296, + + RETROK_NUMLOCK = 300, + RETROK_CAPSLOCK = 301, + RETROK_SCROLLOCK = 302, + RETROK_RSHIFT = 303, + RETROK_LSHIFT = 304, + RETROK_RCTRL = 305, + RETROK_LCTRL = 306, + RETROK_RALT = 307, + RETROK_LALT = 308, + RETROK_RMETA = 309, + RETROK_LMETA = 310, + RETROK_LSUPER = 311, + RETROK_RSUPER = 312, + RETROK_MODE = 313, + RETROK_COMPOSE = 314, + + RETROK_HELP = 315, + RETROK_PRINT = 316, + RETROK_SYSREQ = 317, + RETROK_BREAK = 318, + RETROK_MENU = 319, + RETROK_POWER = 320, + RETROK_EURO = 321, + RETROK_UNDO = 322, + RETROK_OEM_102 = 323, + + RETROK_LAST, + + RETROK_DUMMY = INT_MAX /* Ensure sizeof(enum) == sizeof(int) */ +}; + +enum retro_mod +{ + RETROKMOD_NONE = 0x0000, + + RETROKMOD_SHIFT = 0x01, + RETROKMOD_CTRL = 0x02, + RETROKMOD_ALT = 0x04, + RETROKMOD_META = 0x08, + + RETROKMOD_NUMLOCK = 0x10, + RETROKMOD_CAPSLOCK = 0x20, + RETROKMOD_SCROLLOCK = 0x40, + + RETROKMOD_DUMMY = INT_MAX /* Ensure sizeof(enum) == sizeof(int) */ +}; + +/* If set, this call is not part of the public libretro API yet. It can + * change or be removed at any time. */ +#define RETRO_ENVIRONMENT_EXPERIMENTAL 0x10000 +/* Environment callback to be used internally in frontend. */ +#define RETRO_ENVIRONMENT_PRIVATE 0x20000 + +/* Environment commands. */ +#define RETRO_ENVIRONMENT_SET_ROTATION 1 /* const unsigned * -- + * Sets screen rotation of graphics. + * Valid values are 0, 1, 2, 3, which rotates screen by 0, 90, 180, + * 270 degrees counter-clockwise respectively. + */ +#define RETRO_ENVIRONMENT_GET_OVERSCAN 2 /* bool * -- + * NOTE: As of 2019 this callback is considered deprecated in favor of + * using core options to manage overscan in a more nuanced, core-specific way. + * + * Boolean value whether or not the implementation should use overscan, + * or crop away overscan. + */ +#define RETRO_ENVIRONMENT_GET_CAN_DUPE 3 /* bool * -- + * Boolean value whether or not frontend supports frame duping, + * passing NULL to video frame callback. + */ + + /* Environ 4, 5 are no longer supported (GET_VARIABLE / SET_VARIABLES), + * and reserved to avoid possible ABI clash. + */ + +#define RETRO_ENVIRONMENT_SET_MESSAGE 6 /* const struct retro_message * -- + * Sets a message to be displayed in implementation-specific manner + * for a certain amount of 'frames'. + * Should not be used for trivial messages, which should simply be + * logged via RETRO_ENVIRONMENT_GET_LOG_INTERFACE (or as a + * fallback, stderr). + */ +#define RETRO_ENVIRONMENT_SHUTDOWN 7 /* N/A (NULL) -- + * Requests the frontend to shutdown. + * Should only be used if game has a specific + * way to shutdown the game from a menu item or similar. + */ +#define RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL 8 + /* const unsigned * -- + * Gives a hint to the frontend how demanding this implementation + * is on a system. E.g. reporting a level of 2 means + * this implementation should run decently on all frontends + * of level 2 and up. + * + * It can be used by the frontend to potentially warn + * about too demanding implementations. + * + * The levels are "floating". + * + * This function can be called on a per-game basis, + * as certain games an implementation can play might be + * particularly demanding. + * If called, it should be called in retro_load_game(). + */ +#define RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY 9 + /* const char ** -- + * Returns the "system" directory of the frontend. + * This directory can be used to store system specific + * content such as BIOSes, configuration data, etc. + * The returned value can be NULL. + * If so, no such directory is defined, + * and it's up to the implementation to find a suitable directory. + * + * NOTE: Some cores used this folder also for "save" data such as + * memory cards, etc, for lack of a better place to put it. + * This is now discouraged, and if possible, cores should try to + * use the new GET_SAVE_DIRECTORY. + */ +#define RETRO_ENVIRONMENT_SET_PIXEL_FORMAT 10 + /* const enum retro_pixel_format * -- + * Sets the internal pixel format used by the implementation. + * The default pixel format is RETRO_PIXEL_FORMAT_0RGB1555. + * This pixel format however, is deprecated (see enum retro_pixel_format). + * If the call returns false, the frontend does not support this pixel + * format. + * + * This function should be called inside retro_load_game() or + * retro_get_system_av_info(). + */ +#define RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS 11 + /* const struct retro_input_descriptor * -- + * Sets an array of retro_input_descriptors. + * It is up to the frontend to present this in a usable way. + * The array is terminated by retro_input_descriptor::description + * being set to NULL. + * This function can be called at any time, but it is recommended + * to call it as early as possible. + */ +#define RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK 12 + /* const struct retro_keyboard_callback * -- + * Sets a callback function used to notify core about keyboard events. + */ +#define RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE 13 + /* const struct retro_disk_control_callback * -- + * Sets an interface which frontend can use to eject and insert + * disk images. + * This is used for games which consist of multiple images and + * must be manually swapped out by the user (e.g. PSX). + */ +#define RETRO_ENVIRONMENT_SET_HW_RENDER 14 + /* struct retro_hw_render_callback * -- + * Sets an interface to let a libretro core render with + * hardware acceleration. + * Should be called in retro_load_game(). + * If successful, libretro cores will be able to render to a + * frontend-provided framebuffer. + * The size of this framebuffer will be at least as large as + * max_width/max_height provided in get_av_info(). + * If HW rendering is used, pass only RETRO_HW_FRAME_BUFFER_VALID or + * NULL to retro_video_refresh_t. + */ +#define RETRO_ENVIRONMENT_GET_VARIABLE 15 + /* struct retro_variable * -- + * Interface to acquire user-defined information from environment + * that cannot feasibly be supported in a multi-system way. + * 'key' should be set to a key which has already been set by + * SET_VARIABLES. + * 'data' will be set to a value or NULL. + */ +#define RETRO_ENVIRONMENT_SET_VARIABLES 16 + /* const struct retro_variable * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterward it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * + * 'data' points to an array of retro_variable structs + * terminated by a { NULL, NULL } element. + * retro_variable::key should be namespaced to not collide + * with other implementations' keys. E.g. A core called + * 'foo' should use keys named as 'foo_option'. + * retro_variable::value should contain a human readable + * description of the key as well as a '|' delimited list + * of expected values. + * + * The number of possible options should be very limited, + * i.e. it should be feasible to cycle through options + * without a keyboard. + * + * First entry should be treated as a default. + * + * Example entry: + * { "foo_option", "Speed hack coprocessor X; false|true" } + * + * Text before first ';' is description. This ';' must be + * followed by a space, and followed by a list of possible + * values split up with '|'. + * + * Only strings are operated on. The possible values will + * generally be displayed and stored as-is by the frontend. + */ +#define RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE 17 + /* bool * -- + * Result is set to true if some variables are updated by + * frontend since last call to RETRO_ENVIRONMENT_GET_VARIABLE. + * Variables should be queried with GET_VARIABLE. + */ +#define RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME 18 + /* const bool * -- + * If true, the libretro implementation supports calls to + * retro_load_game() with NULL as argument. + * Used by cores which can run without particular game data. + * This should be called within retro_set_environment() only. + */ +#define RETRO_ENVIRONMENT_GET_LIBRETRO_PATH 19 + /* const char ** -- + * Retrieves the absolute path from where this libretro + * implementation was loaded. + * NULL is returned if the libretro was loaded statically + * (i.e. linked statically to frontend), or if the path cannot be + * determined. + * Mostly useful in cooperation with SET_SUPPORT_NO_GAME as assets can + * be loaded without ugly hacks. + */ + + /* Environment 20 was an obsolete version of SET_AUDIO_CALLBACK. + * It was not used by any known core at the time, + * and was removed from the API. */ +#define RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK 21 + /* const struct retro_frame_time_callback * -- + * Lets the core know how much time has passed since last + * invocation of retro_run(). + * The frontend can tamper with the timing to fake fast-forward, + * slow-motion, frame stepping, etc. + * In this case the delta time will use the reference value + * in frame_time_callback.. + */ +#define RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK 22 + /* const struct retro_audio_callback * -- + * Sets an interface which is used to notify a libretro core about audio + * being available for writing. + * The callback can be called from any thread, so a core using this must + * have a thread safe audio implementation. + * It is intended for games where audio and video are completely + * asynchronous and audio can be generated on the fly. + * This interface is not recommended for use with emulators which have + * highly synchronous audio. + * + * The callback only notifies about writability; the libretro core still + * has to call the normal audio callbacks + * to write audio. The audio callbacks must be called from within the + * notification callback. + * The amount of audio data to write is up to the implementation. + * Generally, the audio callback will be called continously in a loop. + * + * Due to thread safety guarantees and lack of sync between audio and + * video, a frontend can selectively disallow this interface based on + * internal configuration. A core using this interface must also + * implement the "normal" audio interface. + * + * A libretro core using SET_AUDIO_CALLBACK should also make use of + * SET_FRAME_TIME_CALLBACK. + */ +#define RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE 23 + /* struct retro_rumble_interface * -- + * Gets an interface which is used by a libretro core to set + * state of rumble motors in controllers. + * A strong and weak motor is supported, and they can be + * controlled indepedently. + * Should be called from either retro_init() or retro_load_game(). + * Should not be called from retro_set_environment(). + * Returns false if rumble functionality is unavailable. + */ +#define RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES 24 + /* uint64_t * -- + * Gets a bitmask telling which device type are expected to be + * handled properly in a call to retro_input_state_t. + * Devices which are not handled or recognized always return + * 0 in retro_input_state_t. + * Example bitmask: caps = (1 << RETRO_DEVICE_JOYPAD) | (1 << RETRO_DEVICE_ANALOG). + * Should only be called in retro_run(). + */ +#define RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE (25 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_sensor_interface * -- + * Gets access to the sensor interface. + * The purpose of this interface is to allow + * setting state related to sensors such as polling rate, + * enabling/disable it entirely, etc. + * Reading sensor state is done via the normal + * input_state_callback API. + */ +#define RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE (26 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_camera_callback * -- + * Gets an interface to a video camera driver. + * A libretro core can use this interface to get access to a + * video camera. + * New video frames are delivered in a callback in same + * thread as retro_run(). + * + * GET_CAMERA_INTERFACE should be called in retro_load_game(). + * + * Depending on the camera implementation used, camera frames + * will be delivered as a raw framebuffer, + * or as an OpenGL texture directly. + * + * The core has to tell the frontend here which types of + * buffers can be handled properly. + * An OpenGL texture can only be handled when using a + * libretro GL core (SET_HW_RENDER). + * It is recommended to use a libretro GL core when + * using camera interface. + * + * The camera is not started automatically. The retrieved start/stop + * functions must be used to explicitly + * start and stop the camera driver. + */ +#define RETRO_ENVIRONMENT_GET_LOG_INTERFACE 27 + /* struct retro_log_callback * -- + * Gets an interface for logging. This is useful for + * logging in a cross-platform way + * as certain platforms cannot use stderr for logging. + * It also allows the frontend to + * show logging information in a more suitable way. + * If this interface is not used, libretro cores should + * log to stderr as desired. + */ +#define RETRO_ENVIRONMENT_GET_PERF_INTERFACE 28 + /* struct retro_perf_callback * -- + * Gets an interface for performance counters. This is useful + * for performance logging in a cross-platform way and for detecting + * architecture-specific features, such as SIMD support. + */ +#define RETRO_ENVIRONMENT_GET_LOCATION_INTERFACE 29 + /* struct retro_location_callback * -- + * Gets access to the location interface. + * The purpose of this interface is to be able to retrieve + * location-based information from the host device, + * such as current latitude / longitude. + */ +#define RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY 30 /* Old name, kept for compatibility. */ +#define RETRO_ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY 30 + /* const char ** -- + * Returns the "core assets" directory of the frontend. + * This directory can be used to store specific assets that the + * core relies upon, such as art assets, + * input data, etc etc. + * The returned value can be NULL. + * If so, no such directory is defined, + * and it's up to the implementation to find a suitable directory. + */ +#define RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY 31 + /* const char ** -- + * Returns the "save" directory of the frontend, unless there is no + * save directory available. The save directory should be used to + * store SRAM, memory cards, high scores, etc, if the libretro core + * cannot use the regular memory interface (retro_get_memory_data()). + * + * If the frontend cannot designate a save directory, it will return + * NULL to indicate that the core should attempt to operate without a + * save directory set. + * + * NOTE: early libretro cores used the system directory for save + * files. Cores that need to be backwards-compatible can still check + * GET_SYSTEM_DIRECTORY. + */ +#define RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO 32 + /* const struct retro_system_av_info * -- + * Sets a new av_info structure. This can only be called from + * within retro_run(). + * This should *only* be used if the core is completely altering the + * internal resolutions, aspect ratios, timings, sampling rate, etc. + * Calling this can require a full reinitialization of video/audio + * drivers in the frontend, + * + * so it is important to call it very sparingly, and usually only with + * the users explicit consent. + * An eventual driver reinitialize will happen so that video and + * audio callbacks + * happening after this call within the same retro_run() call will + * target the newly initialized driver. + * + * This callback makes it possible to support configurable resolutions + * in games, which can be useful to + * avoid setting the "worst case" in max_width/max_height. + * + * ***HIGHLY RECOMMENDED*** Do not call this callback every time + * resolution changes in an emulator core if it's + * expected to be a temporary change, for the reasons of possible + * driver reinitialization. + * This call is not a free pass for not trying to provide + * correct values in retro_get_system_av_info(). If you need to change + * things like aspect ratio or nominal width/height, + * use RETRO_ENVIRONMENT_SET_GEOMETRY, which is a softer variant + * of SET_SYSTEM_AV_INFO. + * + * If this returns false, the frontend does not acknowledge a + * changed av_info struct. + */ +#define RETRO_ENVIRONMENT_SET_PROC_ADDRESS_CALLBACK 33 + /* const struct retro_get_proc_address_interface * -- + * Allows a libretro core to announce support for the + * get_proc_address() interface. + * This interface allows for a standard way to extend libretro where + * use of environment calls are too indirect, + * e.g. for cases where the frontend wants to call directly into the core. + * + * If a core wants to expose this interface, SET_PROC_ADDRESS_CALLBACK + * **MUST** be called from within retro_set_environment(). + */ +#define RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO 34 + /* const struct retro_subsystem_info * -- + * This environment call introduces the concept of libretro "subsystems". + * A subsystem is a variant of a libretro core which supports + * different kinds of games. + * The purpose of this is to support e.g. emulators which might + * have special needs, e.g. Super Nintendo's Super GameBoy, Sufami Turbo. + * It can also be used to pick among subsystems in an explicit way + * if the libretro implementation is a multi-system emulator itself. + * + * Loading a game via a subsystem is done with retro_load_game_special(), + * and this environment call allows a libretro core to expose which + * subsystems are supported for use with retro_load_game_special(). + * A core passes an array of retro_game_special_info which is terminated + * with a zeroed out retro_game_special_info struct. + * + * If a core wants to use this functionality, SET_SUBSYSTEM_INFO + * **MUST** be called from within retro_set_environment(). + */ +#define RETRO_ENVIRONMENT_SET_CONTROLLER_INFO 35 + /* const struct retro_controller_info * -- + * This environment call lets a libretro core tell the frontend + * which controller subclasses are recognized in calls to + * retro_set_controller_port_device(). + * + * Some emulators such as Super Nintendo support multiple lightgun + * types which must be specifically selected from. It is therefore + * sometimes necessary for a frontend to be able to tell the core + * about a special kind of input device which is not specifcally + * provided by the Libretro API. + * + * In order for a frontend to understand the workings of those devices, + * they must be defined as a specialized subclass of the generic device + * types already defined in the libretro API. + * + * The core must pass an array of const struct retro_controller_info which + * is terminated with a blanked out struct. Each element of the + * retro_controller_info struct corresponds to the ascending port index + * that is passed to retro_set_controller_port_device() when that function + * is called to indicate to the core that the frontend has changed the + * active device subclass. SEE ALSO: retro_set_controller_port_device() + * + * The ascending input port indexes provided by the core in the struct + * are generally presented by frontends as ascending User # or Player #, + * such as Player 1, Player 2, Player 3, etc. Which device subclasses are + * supported can vary per input port. + * + * The first inner element of each entry in the retro_controller_info array + * is a retro_controller_description struct that specifies the names and + * codes of all device subclasses that are available for the corresponding + * User or Player, beginning with the generic Libretro device that the + * subclasses are derived from. The second inner element of each entry is the + * total number of subclasses that are listed in the retro_controller_description. + * + * NOTE: Even if special device types are set in the libretro core, + * libretro should only poll input based on the base input device types. + */ +#define RETRO_ENVIRONMENT_SET_MEMORY_MAPS (36 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* const struct retro_memory_map * -- + * This environment call lets a libretro core tell the frontend + * about the memory maps this core emulates. + * This can be used to implement, for example, cheats in a core-agnostic way. + * + * Should only be used by emulators; it doesn't make much sense for + * anything else. + * It is recommended to expose all relevant pointers through + * retro_get_memory_* as well. + * + * Can be called from retro_init and retro_load_game. + */ +#define RETRO_ENVIRONMENT_SET_GEOMETRY 37 + /* const struct retro_game_geometry * -- + * This environment call is similar to SET_SYSTEM_AV_INFO for changing + * video parameters, but provides a guarantee that drivers will not be + * reinitialized. + * This can only be called from within retro_run(). + * + * The purpose of this call is to allow a core to alter nominal + * width/heights as well as aspect ratios on-the-fly, which can be + * useful for some emulators to change in run-time. + * + * max_width/max_height arguments are ignored and cannot be changed + * with this call as this could potentially require a reinitialization or a + * non-constant time operation. + * If max_width/max_height are to be changed, SET_SYSTEM_AV_INFO is required. + * + * A frontend must guarantee that this environment call completes in + * constant time. + */ +#define RETRO_ENVIRONMENT_GET_USERNAME 38 + /* const char ** + * Returns the specified username of the frontend, if specified by the user. + * This username can be used as a nickname for a core that has online facilities + * or any other mode where personalization of the user is desirable. + * The returned value can be NULL. + * If this environ callback is used by a core that requires a valid username, + * a default username should be specified by the core. + */ +#define RETRO_ENVIRONMENT_GET_LANGUAGE 39 + /* unsigned * -- + * Returns the specified language of the frontend, if specified by the user. + * It can be used by the core for localization purposes. + */ +#define RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER (40 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_framebuffer * -- + * Returns a preallocated framebuffer which the core can use for rendering + * the frame into when not using SET_HW_RENDER. + * The framebuffer returned from this call must not be used + * after the current call to retro_run() returns. + * + * The goal of this call is to allow zero-copy behavior where a core + * can render directly into video memory, avoiding extra bandwidth cost by copying + * memory from core to video memory. + * + * If this call succeeds and the core renders into it, + * the framebuffer pointer and pitch can be passed to retro_video_refresh_t. + * If the buffer from GET_CURRENT_SOFTWARE_FRAMEBUFFER is to be used, + * the core must pass the exact + * same pointer as returned by GET_CURRENT_SOFTWARE_FRAMEBUFFER; + * i.e. passing a pointer which is offset from the + * buffer is undefined. The width, height and pitch parameters + * must also match exactly to the values obtained from GET_CURRENT_SOFTWARE_FRAMEBUFFER. + * + * It is possible for a frontend to return a different pixel format + * than the one used in SET_PIXEL_FORMAT. This can happen if the frontend + * needs to perform conversion. + * + * It is still valid for a core to render to a different buffer + * even if GET_CURRENT_SOFTWARE_FRAMEBUFFER succeeds. + * + * A frontend must make sure that the pointer obtained from this function is + * writeable (and readable). + */ +#define RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE (41 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* const struct retro_hw_render_interface ** -- + * Returns an API specific rendering interface for accessing API specific data. + * Not all HW rendering APIs support or need this. + * The contents of the returned pointer is specific to the rendering API + * being used. See the various headers like libretro_vulkan.h, etc. + * + * GET_HW_RENDER_INTERFACE cannot be called before context_reset has been called. + * Similarly, after context_destroyed callback returns, + * the contents of the HW_RENDER_INTERFACE are invalidated. + */ +#define RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS (42 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* const bool * -- + * If true, the libretro implementation supports achievements + * either via memory descriptors set with RETRO_ENVIRONMENT_SET_MEMORY_MAPS + * or via retro_get_memory_data/retro_get_memory_size. + * + * This must be called before the first call to retro_run. + */ +#define RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE (43 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* const struct retro_hw_render_context_negotiation_interface * -- + * Sets an interface which lets the libretro core negotiate with frontend how a context is created. + * The semantics of this interface depends on which API is used in SET_HW_RENDER earlier. + * This interface will be used when the frontend is trying to create a HW rendering context, + * so it will be used after SET_HW_RENDER, but before the context_reset callback. + */ +#define RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS 44 + /* uint64_t * -- + * Sets quirk flags associated with serialization. The frontend will zero any flags it doesn't + * recognize or support. Should be set in either retro_init or retro_load_game, but not both. + */ +#define RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT (44 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* N/A (null) * -- + * The frontend will try to use a 'shared' hardware context (mostly applicable + * to OpenGL) when a hardware context is being set up. + * + * Returns true if the frontend supports shared hardware contexts and false + * if the frontend does not support shared hardware contexts. + * + * This will do nothing on its own until SET_HW_RENDER env callbacks are + * being used. + */ +#define RETRO_ENVIRONMENT_GET_VFS_INTERFACE (45 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_vfs_interface_info * -- + * Gets access to the VFS interface. + * VFS presence needs to be queried prior to load_game or any + * get_system/save/other_directory being called to let front end know + * core supports VFS before it starts handing out paths. + * It is recomended to do so in retro_set_environment + */ +#define RETRO_ENVIRONMENT_GET_LED_INTERFACE (46 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_led_interface * -- + * Gets an interface which is used by a libretro core to set + * state of LEDs. + */ +#define RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE (47 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* int * -- + * Tells the core if the frontend wants audio or video. + * If disabled, the frontend will discard the audio or video, + * so the core may decide to skip generating a frame or generating audio. + * This is mainly used for increasing performance. + * Bit 0 (value 1): Enable Video + * Bit 1 (value 2): Enable Audio + * Bit 2 (value 4): Use Fast Savestates. + * Bit 3 (value 8): Hard Disable Audio + * Other bits are reserved for future use and will default to zero. + * If video is disabled: + * * The frontend wants the core to not generate any video, + * including presenting frames via hardware acceleration. + * * The frontend's video frame callback will do nothing. + * * After running the frame, the video output of the next frame should be + * no different than if video was enabled, and saving and loading state + * should have no issues. + * If audio is disabled: + * * The frontend wants the core to not generate any audio. + * * The frontend's audio callbacks will do nothing. + * * After running the frame, the audio output of the next frame should be + * no different than if audio was enabled, and saving and loading state + * should have no issues. + * Fast Savestates: + * * Guaranteed to be created by the same binary that will load them. + * * Will not be written to or read from the disk. + * * Suggest that the core assumes loading state will succeed. + * * Suggest that the core updates its memory buffers in-place if possible. + * * Suggest that the core skips clearing memory. + * * Suggest that the core skips resetting the system. + * * Suggest that the core may skip validation steps. + * Hard Disable Audio: + * * Used for a secondary core when running ahead. + * * Indicates that the frontend will never need audio from the core. + * * Suggests that the core may stop synthesizing audio, but this should not + * compromise emulation accuracy. + * * Audio output for the next frame does not matter, and the frontend will + * never need an accurate audio state in the future. + * * State will never be saved when using Hard Disable Audio. + */ +#define RETRO_ENVIRONMENT_GET_MIDI_INTERFACE (48 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_midi_interface ** -- + * Returns a MIDI interface that can be used for raw data I/O. + */ + +#define RETRO_ENVIRONMENT_GET_FASTFORWARDING (49 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* bool * -- + * Boolean value that indicates whether or not the frontend is in + * fastforwarding mode. + */ + +#define RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE (50 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* float * -- + * Float value that lets us know what target refresh rate + * is curently in use by the frontend. + * + * The core can use the returned value to set an ideal + * refresh rate/framerate. + */ + +#define RETRO_ENVIRONMENT_GET_INPUT_BITMASKS (51 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* bool * -- + * Boolean value that indicates whether or not the frontend supports + * input bitmasks being returned by retro_input_state_t. The advantage + * of this is that retro_input_state_t has to be only called once to + * grab all button states instead of multiple times. + * + * If it returns true, you can pass RETRO_DEVICE_ID_JOYPAD_MASK as 'id' + * to retro_input_state_t (make sure 'device' is set to RETRO_DEVICE_JOYPAD). + * It will return a bitmask of all the digital buttons. + */ + +#define RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION 52 + /* unsigned * -- + * Unsigned value is the API version number of the core options + * interface supported by the frontend. If callback return false, + * API version is assumed to be 0. + * + * In legacy code, core options are set by passing an array of + * retro_variable structs to RETRO_ENVIRONMENT_SET_VARIABLES. + * This may be still be done regardless of the core options + * interface version. + * + * If version is >= 1 however, core options may instead be set by + * passing an array of retro_core_option_definition structs to + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS, or a 2D array of + * retro_core_option_definition structs to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. + * This allows the core to additionally set option sublabel information + * and/or provide localisation support. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS 53 + /* const struct retro_core_option_definition ** -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 1. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * + * 'data' points to an array of retro_core_option_definition structs + * terminated by a { NULL, NULL, NULL, {{0}}, NULL } element. + * retro_core_option_definition::key should be namespaced to not collide + * with other implementations' keys. e.g. A core called + * 'foo' should use keys named as 'foo_option'. + * retro_core_option_definition::desc should contain a human readable + * description of the key. + * retro_core_option_definition::info should contain any additional human + * readable information text that a typical user may need to + * understand the functionality of the option. + * retro_core_option_definition::values is an array of retro_core_option_value + * structs terminated by a { NULL, NULL } element. + * > retro_core_option_definition::values[index].value is an expected option + * value. + * > retro_core_option_definition::values[index].label is a human readable + * label used when displaying the value on screen. If NULL, + * the value itself is used. + * retro_core_option_definition::default_value is the default core option + * setting. It must match one of the expected option values in the + * retro_core_option_definition::values array. If it does not, or the + * default value is NULL, the first entry in the + * retro_core_option_definition::values array is treated as the default. + * + * The number of possible options should be very limited, + * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. + * i.e. it should be feasible to cycle through options + * without a keyboard. + * + * Example entry: + * { + * "foo_option", + * "Speed hack coprocessor X", + * "Provides increased performance at the expense of reduced accuracy", + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * Only strings are operated on. The possible values will + * generally be displayed and stored as-is by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL 54 + /* const struct retro_core_options_intl * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 1. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * + * This is fundamentally the same as RETRO_ENVIRONMENT_SET_CORE_OPTIONS, + * with the addition of localisation support. The description of the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS callback should be consulted + * for further details. + * + * 'data' points to a retro_core_options_intl struct. + * + * retro_core_options_intl::us is a pointer to an array of + * retro_core_option_definition structs defining the US English + * core options implementation. It must point to a valid array. + * + * retro_core_options_intl::local is a pointer to an array of + * retro_core_option_definition structs defining core options for + * the current frontend language. It may be NULL (in which case + * retro_core_options_intl::us is used by the frontend). Any items + * missing from this array will be read from retro_core_options_intl::us + * instead. + * + * NOTE: Default core option values are always taken from the + * retro_core_options_intl::us array. Any default values in + * retro_core_options_intl::local array will be ignored. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY 55 + /* struct retro_core_option_display * -- + * + * Allows an implementation to signal the environment to show + * or hide a variable when displaying core options. This is + * considered a *suggestion*. The frontend is free to ignore + * this callback, and its implementation not considered mandatory. + * + * 'data' points to a retro_core_option_display struct + * + * retro_core_option_display::key is a variable identifier + * which has already been set by SET_VARIABLES/SET_CORE_OPTIONS. + * + * retro_core_option_display::visible is a boolean, specifying + * whether variable should be displayed + * + * Note that all core option variables will be set visible by + * default when calling SET_VARIABLES/SET_CORE_OPTIONS. + */ + +#define RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER 56 + /* unsigned * -- + * + * Allows an implementation to ask frontend preferred hardware + * context to use. Core should use this information to deal + * with what specific context to request with SET_HW_RENDER. + * + * 'data' points to an unsigned variable + */ + +#define RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION 57 + /* unsigned * -- + * Unsigned value is the API version number of the disk control + * interface supported by the frontend. If callback return false, + * API version is assumed to be 0. + * + * In legacy code, the disk control interface is defined by passing + * a struct of type retro_disk_control_callback to + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE. + * This may be still be done regardless of the disk control + * interface version. + * + * If version is >= 1 however, the disk control interface may + * instead be defined by passing a struct of type + * retro_disk_control_ext_callback to + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. + * This allows the core to provide additional information about + * disk images to the frontend and/or enables extra + * disk control functionality by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE 58 + /* const struct retro_disk_control_ext_callback * -- + * Sets an interface which frontend can use to eject and insert + * disk images, and also obtain information about individual + * disk image files registered by the core. + * This is used for games which consist of multiple images and + * must be manually swapped out by the user (e.g. PSX, floppy disk + * based systems). + */ + +#define RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION 59 + /* unsigned * -- + * Unsigned value is the API version number of the message + * interface supported by the frontend. If callback returns + * false, API version is assumed to be 0. + * + * In legacy code, messages may be displayed in an + * implementation-specific manner by passing a struct + * of type retro_message to RETRO_ENVIRONMENT_SET_MESSAGE. + * This may be still be done regardless of the message + * interface version. + * + * If version is >= 1 however, messages may instead be + * displayed by passing a struct of type retro_message_ext + * to RETRO_ENVIRONMENT_SET_MESSAGE_EXT. This allows the + * core to specify message logging level, priority and + * destination (OSD, logging interface or both). + */ + +#define RETRO_ENVIRONMENT_SET_MESSAGE_EXT 60 + /* const struct retro_message_ext * -- + * Sets a message to be displayed in an implementation-specific + * manner for a certain amount of 'frames'. Additionally allows + * the core to specify message logging level, priority and + * destination (OSD, logging interface or both). + * Should not be used for trivial messages, which should simply be + * logged via RETRO_ENVIRONMENT_GET_LOG_INTERFACE (or as a + * fallback, stderr). + */ + +#define RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS 61 + /* unsigned * -- + * Unsigned value is the number of active input devices + * provided by the frontend. This may change between + * frames, but will remain constant for the duration + * of each frame. + * If callback returns true, a core need not poll any + * input device with an index greater than or equal to + * the number of active devices. + * If callback returns false, the number of active input + * devices is unknown. In this case, all input devices + * should be considered active. + */ + +#define RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK 62 + /* const struct retro_audio_buffer_status_callback * -- + * Lets the core know the occupancy level of the frontend + * audio buffer. Can be used by a core to attempt frame + * skipping in order to avoid buffer under-runs. + * A core may pass NULL to disable buffer status reporting + * in the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY 63 + /* const unsigned * -- + * Sets minimum frontend audio latency in milliseconds. + * Resultant audio latency may be larger than set value, + * or smaller if a hardware limit is encountered. A frontend + * is expected to honour requests up to 512 ms. + * + * - If value is less than current frontend + * audio latency, callback has no effect + * - If value is zero, default frontend audio + * latency is set + * + * May be used by a core to increase audio latency and + * therefore decrease the probability of buffer under-runs + * (crackling) when performing 'intensive' operations. + * A core utilising RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK + * to implement audio-buffer-based frame skipping may achieve + * optimal results by setting the audio latency to a 'high' + * (typically 6x or 8x) integer multiple of the expected + * frame time. + * + * WARNING: This can only be called from within retro_run(). + * Calling this can require a full reinitialization of audio + * drivers in the frontend, so it is important to call it very + * sparingly, and usually only with the users explicit consent. + * An eventual driver reinitialize will happen so that audio + * callbacks happening after this call within the same retro_run() + * call will target the newly initialized driver. + */ + +#define RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE 64 + /* const struct retro_fastforwarding_override * -- + * Used by a libretro core to override the current + * fastforwarding mode of the frontend. + * If NULL is passed to this function, the frontend + * will return true if fastforwarding override + * functionality is supported (no change in + * fastforwarding state will occur in this case). + */ + +#define RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE 65 + /* const struct retro_system_content_info_override * -- + * Allows an implementation to override 'global' content + * info parameters reported by retro_get_system_info(). + * Overrides also affect subsystem content info parameters + * set via RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO. + * This function must be called inside retro_set_environment(). + * If callback returns false, content info overrides + * are unsupported by the frontend, and will be ignored. + * If callback returns true, extended game info may be + * retrieved by calling RETRO_ENVIRONMENT_GET_GAME_INFO_EXT + * in retro_load_game() or retro_load_game_special(). + * + * 'data' points to an array of retro_system_content_info_override + * structs terminated by a { NULL, false, false } element. + * If 'data' is NULL, no changes will be made to the frontend; + * a core may therefore pass NULL in order to test whether + * the RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE and + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT callbacks are supported + * by the frontend. + * + * For struct member descriptions, see the definition of + * struct retro_system_content_info_override. + * + * Example: + * + * - struct retro_system_info: + * { + * "My Core", // library_name + * "v1.0", // library_version + * "m3u|md|cue|iso|chd|sms|gg|sg", // valid_extensions + * true, // need_fullpath + * false // block_extract + * } + * + * - Array of struct retro_system_content_info_override: + * { + * { + * "md|sms|gg", // extensions + * false, // need_fullpath + * true // persistent_data + * }, + * { + * "sg", // extensions + * false, // need_fullpath + * false // persistent_data + * }, + * { NULL, false, false } + * } + * + * Result: + * - Files of type m3u, cue, iso, chd will not be + * loaded by the frontend. Frontend will pass a + * valid path to the core, and core will handle + * loading internally + * - Files of type md, sms, gg will be loaded by + * the frontend. A valid memory buffer will be + * passed to the core. This memory buffer will + * remain valid until retro_deinit() returns + * - Files of type sg will be loaded by the frontend. + * A valid memory buffer will be passed to the core. + * This memory buffer will remain valid until + * retro_load_game() (or retro_load_game_special()) + * returns + * + * NOTE: If an extension is listed multiple times in + * an array of retro_system_content_info_override + * structs, only the first instance will be registered + */ + +#define RETRO_ENVIRONMENT_GET_GAME_INFO_EXT 66 + /* const struct retro_game_info_ext ** -- + * Allows an implementation to fetch extended game + * information, providing additional content path + * and memory buffer status details. + * This function may only be called inside + * retro_load_game() or retro_load_game_special(). + * If callback returns false, extended game information + * is unsupported by the frontend. In this case, only + * regular retro_game_info will be available. + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT is guaranteed + * to return true if RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE + * returns true. + * + * 'data' points to an array of retro_game_info_ext structs. + * + * For struct member descriptions, see the definition of + * struct retro_game_info_ext. + * + * - If function is called inside retro_load_game(), + * the retro_game_info_ext array is guaranteed to + * have a size of 1 - i.e. the returned pointer may + * be used to access directly the members of the + * first retro_game_info_ext struct, for example: + * + * struct retro_game_info_ext *game_info_ext; + * if (environ_cb(RETRO_ENVIRONMENT_GET_GAME_INFO_EXT, &game_info_ext)) + * printf("Content Directory: %s\n", game_info_ext->dir); + * + * - If the function is called inside retro_load_game_special(), + * the retro_game_info_ext array is guaranteed to have a + * size equal to the num_info argument passed to + * retro_load_game_special() + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 67 + /* const struct retro_core_options_v2 * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 2. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API + * version of >= 2, this callback is guaranteed to succeed + * (i.e. callback return value does not indicate success) + * If callback returns true, frontend has core option category + * support. + * If callback returns false, frontend does not have core option + * category support. + * + * 'data' points to a retro_core_options_v2 struct, containing + * of two pointers: + * - retro_core_options_v2::categories is an array of + * retro_core_option_v2_category structs terminated by a + * { NULL, NULL, NULL } element. If retro_core_options_v2::categories + * is NULL, all core options will have no category and will be shown + * at the top level of the frontend core option interface. If frontend + * does not have core option category support, categories array will + * be ignored. + * - retro_core_options_v2::definitions is an array of + * retro_core_option_v2_definition structs terminated by a + * { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL } + * element. + * + * >> retro_core_option_v2_category notes: + * + * - retro_core_option_v2_category::key should contain string + * that uniquely identifies the core option category. Valid + * key characters are [a-z, A-Z, 0-9, _, -] + * Namespace collisions with other implementations' category + * keys are permitted. + * - retro_core_option_v2_category::desc should contain a human + * readable description of the category key. + * - retro_core_option_v2_category::info should contain any + * additional human readable information text that a typical + * user may need to understand the nature of the core option + * category. + * + * Example entry: + * { + * "advanced_settings", + * "Advanced", + * "Options affecting low-level emulation performance and accuracy." + * } + * + * >> retro_core_option_v2_definition notes: + * + * - retro_core_option_v2_definition::key should be namespaced to not + * collide with other implementations' keys. e.g. A core called + * 'foo' should use keys named as 'foo_option'. Valid key characters + * are [a-z, A-Z, 0-9, _, -]. + * - retro_core_option_v2_definition::desc should contain a human readable + * description of the key. Will be used when the frontend does not + * have core option category support. Examples: "Aspect Ratio" or + * "Video > Aspect Ratio". + * - retro_core_option_v2_definition::desc_categorized should contain a + * human readable description of the key, which will be used when + * frontend has core option category support. Example: "Aspect Ratio", + * where associated retro_core_option_v2_category::desc is "Video". + * If empty or NULL, the string specified by + * retro_core_option_v2_definition::desc will be used instead. + * retro_core_option_v2_definition::desc_categorized will be ignored + * if retro_core_option_v2_definition::category_key is empty or NULL. + * - retro_core_option_v2_definition::info should contain any additional + * human readable information text that a typical user may need to + * understand the functionality of the option. + * - retro_core_option_v2_definition::info_categorized should contain + * any additional human readable information text that a typical user + * may need to understand the functionality of the option, and will be + * used when frontend has core option category support. This is provided + * to accommodate the case where info text references an option by + * name/desc, and the desc/desc_categorized text for that option differ. + * If empty or NULL, the string specified by + * retro_core_option_v2_definition::info will be used instead. + * retro_core_option_v2_definition::info_categorized will be ignored + * if retro_core_option_v2_definition::category_key is empty or NULL. + * - retro_core_option_v2_definition::category_key should contain a + * category identifier (e.g. "video" or "audio") that will be + * assigned to the core option if frontend has core option category + * support. A categorized option will be shown in a subsection/ + * submenu of the frontend core option interface. If key is empty + * or NULL, or if key does not match one of the + * retro_core_option_v2_category::key values in the associated + * retro_core_option_v2_category array, option will have no category + * and will be shown at the top level of the frontend core option + * interface. + * - retro_core_option_v2_definition::values is an array of + * retro_core_option_value structs terminated by a { NULL, NULL } + * element. + * --> retro_core_option_v2_definition::values[index].value is an + * expected option value. + * --> retro_core_option_v2_definition::values[index].label is a + * human readable label used when displaying the value on screen. + * If NULL, the value itself is used. + * - retro_core_option_v2_definition::default_value is the default + * core option setting. It must match one of the expected option + * values in the retro_core_option_v2_definition::values array. If + * it does not, or the default value is NULL, the first entry in the + * retro_core_option_v2_definition::values array is treated as the + * default. + * + * The number of possible option values should be very limited, + * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. + * i.e. it should be feasible to cycle through options + * without a keyboard. + * + * Example entries: + * + * - Uncategorized: + * + * { + * "foo_option", + * "Speed hack coprocessor X", + * NULL, + * "Provides increased performance at the expense of reduced accuracy.", + * NULL, + * NULL, + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * - Categorized: + * + * { + * "foo_option", + * "Advanced > Speed hack coprocessor X", + * "Speed hack coprocessor X", + * "Setting 'Advanced > Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", + * "Setting 'Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", + * "advanced_settings", + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * Only strings are operated on. The possible values will + * generally be displayed and stored as-is by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL 68 + /* const struct retro_core_options_v2_intl * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 2. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API + * version of >= 2, this callback is guaranteed to succeed + * (i.e. callback return value does not indicate success) + * If callback returns true, frontend has core option category + * support. + * If callback returns false, frontend does not have core option + * category support. + * + * This is fundamentally the same as RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, + * with the addition of localisation support. The description of the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 callback should be consulted + * for further details. + * + * 'data' points to a retro_core_options_v2_intl struct. + * + * - retro_core_options_v2_intl::us is a pointer to a + * retro_core_options_v2 struct defining the US English + * core options implementation. It must point to a valid struct. + * + * - retro_core_options_v2_intl::local is a pointer to a + * retro_core_options_v2 struct defining core options for + * the current frontend language. It may be NULL (in which case + * retro_core_options_v2_intl::us is used by the frontend). Any items + * missing from this struct will be read from + * retro_core_options_v2_intl::us instead. + * + * NOTE: Default core option values are always taken from the + * retro_core_options_v2_intl::us struct. Any default values in + * the retro_core_options_v2_intl::local struct will be ignored. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK 69 + /* const struct retro_core_options_update_display_callback * -- + * Allows a frontend to signal that a core must update + * the visibility of any dynamically hidden core options, + * and enables the frontend to detect visibility changes. + * Used by the frontend to update the menu display status + * of core options without requiring a call of retro_run(). + * Must be called in retro_set_environment(). + */ + +#define RETRO_ENVIRONMENT_SET_VARIABLE 70 + /* const struct retro_variable * -- + * Allows an implementation to notify the frontend + * that a core option value has changed. + * + * retro_variable::key and retro_variable::value + * must match strings that have been set previously + * via one of the following: + * + * - RETRO_ENVIRONMENT_SET_VARIABLES + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL + * + * After changing a core option value via this + * callback, RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE + * will return true. + * + * If data is NULL, no changes will be registered + * and the callback will return true; an + * implementation may therefore pass NULL in order + * to test whether the callback is supported. + */ + +#define RETRO_ENVIRONMENT_GET_THROTTLE_STATE (71 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_throttle_state * -- + * Allows an implementation to get details on the actual rate + * the frontend is attempting to call retro_run(). + */ + +/* VFS functionality */ + +/* File paths: + * File paths passed as parameters when using this API shall be well formed UNIX-style, + * using "/" (unquoted forward slash) as directory separator regardless of the platform's native separator. + * Paths shall also include at least one forward slash ("game.bin" is an invalid path, use "./game.bin" instead). + * Other than the directory separator, cores shall not make assumptions about path format: + * "C:/path/game.bin", "http://example.com/game.bin", "#game/game.bin", "./game.bin" (without quotes) are all valid paths. + * Cores may replace the basename or remove path components from the end, and/or add new components; + * however, cores shall not append "./", "../" or multiple consecutive forward slashes ("//") to paths they request to front end. + * The frontend is encouraged to make such paths work as well as it can, but is allowed to give up if the core alters paths too much. + * Frontends are encouraged, but not required, to support native file system paths (modulo replacing the directory separator, if applicable). + * Cores are allowed to try using them, but must remain functional if the front rejects such requests. + * Cores are encouraged to use the libretro-common filestream functions for file I/O, + * as they seamlessly integrate with VFS, deal with directory separator replacement as appropriate + * and provide platform-specific fallbacks in cases where front ends do not support VFS. */ + +/* Opaque file handle + * Introduced in VFS API v1 */ +struct retro_vfs_file_handle; + +/* Opaque directory handle + * Introduced in VFS API v3 */ +struct retro_vfs_dir_handle; + +/* File open flags + * Introduced in VFS API v1 */ +#define RETRO_VFS_FILE_ACCESS_READ (1 << 0) /* Read only mode */ +#define RETRO_VFS_FILE_ACCESS_WRITE (1 << 1) /* Write only mode, discard contents and overwrites existing file unless RETRO_VFS_FILE_ACCESS_UPDATE is also specified */ +#define RETRO_VFS_FILE_ACCESS_READ_WRITE (RETRO_VFS_FILE_ACCESS_READ | RETRO_VFS_FILE_ACCESS_WRITE) /* Read-write mode, discard contents and overwrites existing file unless RETRO_VFS_FILE_ACCESS_UPDATE is also specified*/ +#define RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING (1 << 2) /* Prevents discarding content of existing files opened for writing */ + +/* These are only hints. The frontend may choose to ignore them. Other than RAM/CPU/etc use, + and how they react to unlikely external interference (for example someone else writing to that file, + or the file's server going down), behavior will not change. */ +#define RETRO_VFS_FILE_ACCESS_HINT_NONE (0) +/* Indicate that the file will be accessed many times. The frontend should aggressively cache everything. */ +#define RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS (1 << 0) + +/* Seek positions */ +#define RETRO_VFS_SEEK_POSITION_START 0 +#define RETRO_VFS_SEEK_POSITION_CURRENT 1 +#define RETRO_VFS_SEEK_POSITION_END 2 + +/* stat() result flags + * Introduced in VFS API v3 */ +#define RETRO_VFS_STAT_IS_VALID (1 << 0) +#define RETRO_VFS_STAT_IS_DIRECTORY (1 << 1) +#define RETRO_VFS_STAT_IS_CHARACTER_SPECIAL (1 << 2) + +/* Get path from opaque handle. Returns the exact same path passed to file_open when getting the handle + * Introduced in VFS API v1 */ +typedef const char *(RETRO_CALLCONV *retro_vfs_get_path_t)(struct retro_vfs_file_handle *stream); + +/* Open a file for reading or writing. If path points to a directory, this will + * fail. Returns the opaque file handle, or NULL for error. + * Introduced in VFS API v1 */ +typedef struct retro_vfs_file_handle *(RETRO_CALLCONV *retro_vfs_open_t)(const char *path, unsigned mode, unsigned hints); + +/* Close the file and release its resources. Must be called if open_file returns non-NULL. Returns 0 on success, -1 on failure. + * Whether the call succeeds ot not, the handle passed as parameter becomes invalid and should no longer be used. + * Introduced in VFS API v1 */ +typedef int (RETRO_CALLCONV *retro_vfs_close_t)(struct retro_vfs_file_handle *stream); + +/* Return the size of the file in bytes, or -1 for error. + * Introduced in VFS API v1 */ +typedef int64_t (RETRO_CALLCONV *retro_vfs_size_t)(struct retro_vfs_file_handle *stream); + +/* Truncate file to specified size. Returns 0 on success or -1 on error + * Introduced in VFS API v2 */ +typedef int64_t (RETRO_CALLCONV *retro_vfs_truncate_t)(struct retro_vfs_file_handle *stream, int64_t length); + +/* Get the current read / write position for the file. Returns -1 for error. + * Introduced in VFS API v1 */ +typedef int64_t (RETRO_CALLCONV *retro_vfs_tell_t)(struct retro_vfs_file_handle *stream); + +/* Set the current read/write position for the file. Returns the new position, -1 for error. + * Introduced in VFS API v1 */ +typedef int64_t (RETRO_CALLCONV *retro_vfs_seek_t)(struct retro_vfs_file_handle *stream, int64_t offset, int seek_position); + +/* Read data from a file. Returns the number of bytes read, or -1 for error. + * Introduced in VFS API v1 */ +typedef int64_t (RETRO_CALLCONV *retro_vfs_read_t)(struct retro_vfs_file_handle *stream, void *s, uint64_t len); + +/* Write data to a file. Returns the number of bytes written, or -1 for error. + * Introduced in VFS API v1 */ +typedef int64_t (RETRO_CALLCONV *retro_vfs_write_t)(struct retro_vfs_file_handle *stream, const void *s, uint64_t len); + +/* Flush pending writes to file, if using buffered IO. Returns 0 on sucess, or -1 on failure. + * Introduced in VFS API v1 */ +typedef int (RETRO_CALLCONV *retro_vfs_flush_t)(struct retro_vfs_file_handle *stream); + +/* Delete the specified file. Returns 0 on success, -1 on failure + * Introduced in VFS API v1 */ +typedef int (RETRO_CALLCONV *retro_vfs_remove_t)(const char *path); + +/* Rename the specified file. Returns 0 on success, -1 on failure + * Introduced in VFS API v1 */ +typedef int (RETRO_CALLCONV *retro_vfs_rename_t)(const char *old_path, const char *new_path); + +/* Stat the specified file. Retruns a bitmask of RETRO_VFS_STAT_* flags, none are set if path was not valid. + * Additionally stores file size in given variable, unless NULL is given. + * Introduced in VFS API v3 */ +typedef int (RETRO_CALLCONV *retro_vfs_stat_t)(const char *path, int32_t *size); + +/* Create the specified directory. Returns 0 on success, -1 on unknown failure, -2 if already exists. + * Introduced in VFS API v3 */ +typedef int (RETRO_CALLCONV *retro_vfs_mkdir_t)(const char *dir); + +/* Open the specified directory for listing. Returns the opaque dir handle, or NULL for error. + * Support for the include_hidden argument may vary depending on the platform. + * Introduced in VFS API v3 */ +typedef struct retro_vfs_dir_handle *(RETRO_CALLCONV *retro_vfs_opendir_t)(const char *dir, bool include_hidden); + +/* Read the directory entry at the current position, and move the read pointer to the next position. + * Returns true on success, false if already on the last entry. + * Introduced in VFS API v3 */ +typedef bool (RETRO_CALLCONV *retro_vfs_readdir_t)(struct retro_vfs_dir_handle *dirstream); + +/* Get the name of the last entry read. Returns a string on success, or NULL for error. + * The returned string pointer is valid until the next call to readdir or closedir. + * Introduced in VFS API v3 */ +typedef const char *(RETRO_CALLCONV *retro_vfs_dirent_get_name_t)(struct retro_vfs_dir_handle *dirstream); + +/* Check if the last entry read was a directory. Returns true if it was, false otherwise (or on error). + * Introduced in VFS API v3 */ +typedef bool (RETRO_CALLCONV *retro_vfs_dirent_is_dir_t)(struct retro_vfs_dir_handle *dirstream); + +/* Close the directory and release its resources. Must be called if opendir returns non-NULL. Returns 0 on success, -1 on failure. + * Whether the call succeeds ot not, the handle passed as parameter becomes invalid and should no longer be used. + * Introduced in VFS API v3 */ +typedef int (RETRO_CALLCONV *retro_vfs_closedir_t)(struct retro_vfs_dir_handle *dirstream); + +struct retro_vfs_interface +{ + /* VFS API v1 */ + retro_vfs_get_path_t get_path; + retro_vfs_open_t open; + retro_vfs_close_t close; + retro_vfs_size_t size; + retro_vfs_tell_t tell; + retro_vfs_seek_t seek; + retro_vfs_read_t read; + retro_vfs_write_t write; + retro_vfs_flush_t flush; + retro_vfs_remove_t remove; + retro_vfs_rename_t rename; + /* VFS API v2 */ + retro_vfs_truncate_t truncate; + /* VFS API v3 */ + retro_vfs_stat_t stat; + retro_vfs_mkdir_t mkdir; + retro_vfs_opendir_t opendir; + retro_vfs_readdir_t readdir; + retro_vfs_dirent_get_name_t dirent_get_name; + retro_vfs_dirent_is_dir_t dirent_is_dir; + retro_vfs_closedir_t closedir; +}; + +struct retro_vfs_interface_info +{ + /* Set by core: should this be higher than the version the front end supports, + * front end will return false in the RETRO_ENVIRONMENT_GET_VFS_INTERFACE call + * Introduced in VFS API v1 */ + uint32_t required_interface_version; + + /* Frontend writes interface pointer here. The frontend also sets the actual + * version, must be at least required_interface_version. + * Introduced in VFS API v1 */ + struct retro_vfs_interface *iface; +}; + +enum retro_hw_render_interface_type +{ + RETRO_HW_RENDER_INTERFACE_VULKAN = 0, + RETRO_HW_RENDER_INTERFACE_D3D9 = 1, + RETRO_HW_RENDER_INTERFACE_D3D10 = 2, + RETRO_HW_RENDER_INTERFACE_D3D11 = 3, + RETRO_HW_RENDER_INTERFACE_D3D12 = 4, + RETRO_HW_RENDER_INTERFACE_GSKIT_PS2 = 5, + RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX +}; + +/* Base struct. All retro_hw_render_interface_* types + * contain at least these fields. */ +struct retro_hw_render_interface +{ + enum retro_hw_render_interface_type interface_type; + unsigned interface_version; +}; + +typedef void (RETRO_CALLCONV *retro_set_led_state_t)(int led, int state); +struct retro_led_interface +{ + retro_set_led_state_t set_led_state; +}; + +/* Retrieves the current state of the MIDI input. + * Returns true if it's enabled, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_input_enabled_t)(void); + +/* Retrieves the current state of the MIDI output. + * Returns true if it's enabled, false otherwise */ +typedef bool (RETRO_CALLCONV *retro_midi_output_enabled_t)(void); + +/* Reads next byte from the input stream. + * Returns true if byte is read, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_read_t)(uint8_t *byte); + +/* Writes byte to the output stream. + * 'delta_time' is in microseconds and represent time elapsed since previous write. + * Returns true if byte is written, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_write_t)(uint8_t byte, uint32_t delta_time); + +/* Flushes previously written data. + * Returns true if successful, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_flush_t)(void); + +struct retro_midi_interface +{ + retro_midi_input_enabled_t input_enabled; + retro_midi_output_enabled_t output_enabled; + retro_midi_read_t read; + retro_midi_write_t write; + retro_midi_flush_t flush; +}; + +enum retro_hw_render_context_negotiation_interface_type +{ + RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_VULKAN = 0, + RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_DUMMY = INT_MAX +}; + +/* Base struct. All retro_hw_render_context_negotiation_interface_* types + * contain at least these fields. */ +struct retro_hw_render_context_negotiation_interface +{ + enum retro_hw_render_context_negotiation_interface_type interface_type; + unsigned interface_version; +}; + +/* Serialized state is incomplete in some way. Set if serialization is + * usable in typical end-user cases but should not be relied upon to + * implement frame-sensitive frontend features such as netplay or + * rerecording. */ +#define RETRO_SERIALIZATION_QUIRK_INCOMPLETE (1 << 0) +/* The core must spend some time initializing before serialization is + * supported. retro_serialize() will initially fail; retro_unserialize() + * and retro_serialize_size() may or may not work correctly either. */ +#define RETRO_SERIALIZATION_QUIRK_MUST_INITIALIZE (1 << 1) +/* Serialization size may change within a session. */ +#define RETRO_SERIALIZATION_QUIRK_CORE_VARIABLE_SIZE (1 << 2) +/* Set by the frontend to acknowledge that it supports variable-sized + * states. */ +#define RETRO_SERIALIZATION_QUIRK_FRONT_VARIABLE_SIZE (1 << 3) +/* Serialized state can only be loaded during the same session. */ +#define RETRO_SERIALIZATION_QUIRK_SINGLE_SESSION (1 << 4) +/* Serialized state cannot be loaded on an architecture with a different + * endianness from the one it was saved on. */ +#define RETRO_SERIALIZATION_QUIRK_ENDIAN_DEPENDENT (1 << 5) +/* Serialized state cannot be loaded on a different platform from the one it + * was saved on for reasons other than endianness, such as word size + * dependence */ +#define RETRO_SERIALIZATION_QUIRK_PLATFORM_DEPENDENT (1 << 6) + +#define RETRO_MEMDESC_CONST (1 << 0) /* The frontend will never change this memory area once retro_load_game has returned. */ +#define RETRO_MEMDESC_BIGENDIAN (1 << 1) /* The memory area contains big endian data. Default is little endian. */ +#define RETRO_MEMDESC_SYSTEM_RAM (1 << 2) /* The memory area is system RAM. This is main RAM of the gaming system. */ +#define RETRO_MEMDESC_SAVE_RAM (1 << 3) /* The memory area is save RAM. This RAM is usually found on a game cartridge, backed up by a battery. */ +#define RETRO_MEMDESC_VIDEO_RAM (1 << 4) /* The memory area is video RAM (VRAM) */ +#define RETRO_MEMDESC_ALIGN_2 (1 << 16) /* All memory access in this area is aligned to their own size, or 2, whichever is smaller. */ +#define RETRO_MEMDESC_ALIGN_4 (2 << 16) +#define RETRO_MEMDESC_ALIGN_8 (3 << 16) +#define RETRO_MEMDESC_MINSIZE_2 (1 << 24) /* All memory in this region is accessed at least 2 bytes at the time. */ +#define RETRO_MEMDESC_MINSIZE_4 (2 << 24) +#define RETRO_MEMDESC_MINSIZE_8 (3 << 24) +struct retro_memory_descriptor +{ + uint64_t flags; + + /* Pointer to the start of the relevant ROM or RAM chip. + * It's strongly recommended to use 'offset' if possible, rather than + * doing math on the pointer. + * + * If the same byte is mapped my multiple descriptors, their descriptors + * must have the same pointer. + * If 'start' does not point to the first byte in the pointer, put the + * difference in 'offset' instead. + * + * May be NULL if there's nothing usable here (e.g. hardware registers and + * open bus). No flags should be set if the pointer is NULL. + * It's recommended to minimize the number of descriptors if possible, + * but not mandatory. */ + void *ptr; + size_t offset; + + /* This is the location in the emulated address space + * where the mapping starts. */ + size_t start; + + /* Which bits must be same as in 'start' for this mapping to apply. + * The first memory descriptor to claim a certain byte is the one + * that applies. + * A bit which is set in 'start' must also be set in this. + * Can be zero, in which case each byte is assumed mapped exactly once. + * In this case, 'len' must be a power of two. */ + size_t select; + + /* If this is nonzero, the set bits are assumed not connected to the + * memory chip's address pins. */ + size_t disconnect; + + /* This one tells the size of the current memory area. + * If, after start+disconnect are applied, the address is higher than + * this, the highest bit of the address is cleared. + * + * If the address is still too high, the next highest bit is cleared. + * Can be zero, in which case it's assumed to be infinite (as limited + * by 'select' and 'disconnect'). */ + size_t len; + + /* To go from emulated address to physical address, the following + * order applies: + * Subtract 'start', pick off 'disconnect', apply 'len', add 'offset'. */ + + /* The address space name must consist of only a-zA-Z0-9_-, + * should be as short as feasible (maximum length is 8 plus the NUL), + * and may not be any other address space plus one or more 0-9A-F + * at the end. + * However, multiple memory descriptors for the same address space is + * allowed, and the address space name can be empty. NULL is treated + * as empty. + * + * Address space names are case sensitive, but avoid lowercase if possible. + * The same pointer may exist in multiple address spaces. + * + * Examples: + * blank+blank - valid (multiple things may be mapped in the same namespace) + * 'Sp'+'Sp' - valid (multiple things may be mapped in the same namespace) + * 'A'+'B' - valid (neither is a prefix of each other) + * 'S'+blank - valid ('S' is not in 0-9A-F) + * 'a'+blank - valid ('a' is not in 0-9A-F) + * 'a'+'A' - valid (neither is a prefix of each other) + * 'AR'+blank - valid ('R' is not in 0-9A-F) + * 'ARB'+blank - valid (the B can't be part of the address either, because + * there is no namespace 'AR') + * blank+'B' - not valid, because it's ambigous which address space B1234 + * would refer to. + * The length can't be used for that purpose; the frontend may want + * to append arbitrary data to an address, without a separator. */ + const char *addrspace; + + /* TODO: When finalizing this one, add a description field, which should be + * "WRAM" or something roughly equally long. */ + + /* TODO: When finalizing this one, replace 'select' with 'limit', which tells + * which bits can vary and still refer to the same address (limit = ~select). + * TODO: limit? range? vary? something else? */ + + /* TODO: When finalizing this one, if 'len' is above what 'select' (or + * 'limit') allows, it's bankswitched. Bankswitched data must have both 'len' + * and 'select' != 0, and the mappings don't tell how the system switches the + * banks. */ + + /* TODO: When finalizing this one, fix the 'len' bit removal order. + * For len=0x1800, pointer 0x1C00 should go to 0x1400, not 0x0C00. + * Algorithm: Take bits highest to lowest, but if it goes above len, clear + * the most recent addition and continue on the next bit. + * TODO: Can the above be optimized? Is "remove the lowest bit set in both + * pointer and 'len'" equivalent? */ + + /* TODO: Some emulators (MAME?) emulate big endian systems by only accessing + * the emulated memory in 32-bit chunks, native endian. But that's nothing + * compared to Darek Mihocka + * (section Emulation 103 - Nearly Free Byte Reversal) - he flips the ENTIRE + * RAM backwards! I'll want to represent both of those, via some flags. + * + * I suspect MAME either didn't think of that idea, or don't want the #ifdef. + * Not sure which, nor do I really care. */ + + /* TODO: Some of those flags are unused and/or don't really make sense. Clean + * them up. */ +}; + +/* The frontend may use the largest value of 'start'+'select' in a + * certain namespace to infer the size of the address space. + * + * If the address space is larger than that, a mapping with .ptr=NULL + * should be at the end of the array, with .select set to all ones for + * as long as the address space is big. + * + * Sample descriptors (minus .ptr, and RETRO_MEMFLAG_ on the flags): + * SNES WRAM: + * .start=0x7E0000, .len=0x20000 + * (Note that this must be mapped before the ROM in most cases; some of the + * ROM mappers + * try to claim $7E0000, or at least $7E8000.) + * SNES SPC700 RAM: + * .addrspace="S", .len=0x10000 + * SNES WRAM mirrors: + * .flags=MIRROR, .start=0x000000, .select=0xC0E000, .len=0x2000 + * .flags=MIRROR, .start=0x800000, .select=0xC0E000, .len=0x2000 + * SNES WRAM mirrors, alternate equivalent descriptor: + * .flags=MIRROR, .select=0x40E000, .disconnect=~0x1FFF + * (Various similar constructions can be created by combining parts of + * the above two.) + * SNES LoROM (512KB, mirrored a couple of times): + * .flags=CONST, .start=0x008000, .select=0x408000, .disconnect=0x8000, .len=512*1024 + * .flags=CONST, .start=0x400000, .select=0x400000, .disconnect=0x8000, .len=512*1024 + * SNES HiROM (4MB): + * .flags=CONST, .start=0x400000, .select=0x400000, .len=4*1024*1024 + * .flags=CONST, .offset=0x8000, .start=0x008000, .select=0x408000, .len=4*1024*1024 + * SNES ExHiROM (8MB): + * .flags=CONST, .offset=0, .start=0xC00000, .select=0xC00000, .len=4*1024*1024 + * .flags=CONST, .offset=4*1024*1024, .start=0x400000, .select=0xC00000, .len=4*1024*1024 + * .flags=CONST, .offset=0x8000, .start=0x808000, .select=0xC08000, .len=4*1024*1024 + * .flags=CONST, .offset=4*1024*1024+0x8000, .start=0x008000, .select=0xC08000, .len=4*1024*1024 + * Clarify the size of the address space: + * .ptr=NULL, .select=0xFFFFFF + * .len can be implied by .select in many of them, but was included for clarity. + */ + +struct retro_memory_map +{ + const struct retro_memory_descriptor *descriptors; + unsigned num_descriptors; +}; + +struct retro_controller_description +{ + /* Human-readable description of the controller. Even if using a generic + * input device type, this can be set to the particular device type the + * core uses. */ + const char *desc; + + /* Device type passed to retro_set_controller_port_device(). If the device + * type is a sub-class of a generic input device type, use the + * RETRO_DEVICE_SUBCLASS macro to create an ID. + * + * E.g. RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1). */ + unsigned id; +}; + +struct retro_controller_info +{ + const struct retro_controller_description *types; + unsigned num_types; +}; + +struct retro_subsystem_memory_info +{ + /* The extension associated with a memory type, e.g. "psram". */ + const char *extension; + + /* The memory type for retro_get_memory(). This should be at + * least 0x100 to avoid conflict with standardized + * libretro memory types. */ + unsigned type; +}; + +struct retro_subsystem_rom_info +{ + /* Describes what the content is (SGB BIOS, GB ROM, etc). */ + const char *desc; + + /* Same definition as retro_get_system_info(). */ + const char *valid_extensions; + + /* Same definition as retro_get_system_info(). */ + bool need_fullpath; + + /* Same definition as retro_get_system_info(). */ + bool block_extract; + + /* This is set if the content is required to load a game. + * If this is set to false, a zeroed-out retro_game_info can be passed. */ + bool required; + + /* Content can have multiple associated persistent + * memory types (retro_get_memory()). */ + const struct retro_subsystem_memory_info *memory; + unsigned num_memory; +}; + +struct retro_subsystem_info +{ + /* Human-readable string of the subsystem type, e.g. "Super GameBoy" */ + const char *desc; + + /* A computer friendly short string identifier for the subsystem type. + * This name must be [a-z]. + * E.g. if desc is "Super GameBoy", this can be "sgb". + * This identifier can be used for command-line interfaces, etc. + */ + const char *ident; + + /* Infos for each content file. The first entry is assumed to be the + * "most significant" content for frontend purposes. + * E.g. with Super GameBoy, the first content should be the GameBoy ROM, + * as it is the most "significant" content to a user. + * If a frontend creates new file paths based on the content used + * (e.g. savestates), it should use the path for the first ROM to do so. */ + const struct retro_subsystem_rom_info *roms; + + /* Number of content files associated with a subsystem. */ + unsigned num_roms; + + /* The type passed to retro_load_game_special(). */ + unsigned id; +}; + +typedef void (RETRO_CALLCONV *retro_proc_address_t)(void); + +/* libretro API extension functions: + * (None here so far). + * + * Get a symbol from a libretro core. + * Cores should only return symbols which are actual + * extensions to the libretro API. + * + * Frontends should not use this to obtain symbols to standard + * libretro entry points (static linking or dlsym). + * + * The symbol name must be equal to the function name, + * e.g. if void retro_foo(void); exists, the symbol must be called "retro_foo". + * The returned function pointer must be cast to the corresponding type. + */ +typedef retro_proc_address_t (RETRO_CALLCONV *retro_get_proc_address_t)(const char *sym); + +struct retro_get_proc_address_interface +{ + retro_get_proc_address_t get_proc_address; +}; + +enum retro_log_level +{ + RETRO_LOG_DEBUG = 0, + RETRO_LOG_INFO, + RETRO_LOG_WARN, + RETRO_LOG_ERROR, + + RETRO_LOG_DUMMY = INT_MAX +}; + +/* Logging function. Takes log level argument as well. */ +typedef void (RETRO_CALLCONV *retro_log_printf_t)(enum retro_log_level level, + const char *fmt, ...); + +struct retro_log_callback +{ + retro_log_printf_t log; +}; + +/* Performance related functions */ + +/* ID values for SIMD CPU features */ +#define RETRO_SIMD_SSE (1 << 0) +#define RETRO_SIMD_SSE2 (1 << 1) +#define RETRO_SIMD_VMX (1 << 2) +#define RETRO_SIMD_VMX128 (1 << 3) +#define RETRO_SIMD_AVX (1 << 4) +#define RETRO_SIMD_NEON (1 << 5) +#define RETRO_SIMD_SSE3 (1 << 6) +#define RETRO_SIMD_SSSE3 (1 << 7) +#define RETRO_SIMD_MMX (1 << 8) +#define RETRO_SIMD_MMXEXT (1 << 9) +#define RETRO_SIMD_SSE4 (1 << 10) +#define RETRO_SIMD_SSE42 (1 << 11) +#define RETRO_SIMD_AVX2 (1 << 12) +#define RETRO_SIMD_VFPU (1 << 13) +#define RETRO_SIMD_PS (1 << 14) +#define RETRO_SIMD_AES (1 << 15) +#define RETRO_SIMD_VFPV3 (1 << 16) +#define RETRO_SIMD_VFPV4 (1 << 17) +#define RETRO_SIMD_POPCNT (1 << 18) +#define RETRO_SIMD_MOVBE (1 << 19) +#define RETRO_SIMD_CMOV (1 << 20) +#define RETRO_SIMD_ASIMD (1 << 21) + +typedef uint64_t retro_perf_tick_t; +typedef int64_t retro_time_t; + +struct retro_perf_counter +{ + const char *ident; + retro_perf_tick_t start; + retro_perf_tick_t total; + retro_perf_tick_t call_cnt; + + bool registered; +}; + +/* Returns current time in microseconds. + * Tries to use the most accurate timer available. + */ +typedef retro_time_t (RETRO_CALLCONV *retro_perf_get_time_usec_t)(void); + +/* A simple counter. Usually nanoseconds, but can also be CPU cycles. + * Can be used directly if desired (when creating a more sophisticated + * performance counter system). + * */ +typedef retro_perf_tick_t (RETRO_CALLCONV *retro_perf_get_counter_t)(void); + +/* Returns a bit-mask of detected CPU features (RETRO_SIMD_*). */ +typedef uint64_t (RETRO_CALLCONV *retro_get_cpu_features_t)(void); + +/* Asks frontend to log and/or display the state of performance counters. + * Performance counters can always be poked into manually as well. + */ +typedef void (RETRO_CALLCONV *retro_perf_log_t)(void); + +/* Register a performance counter. + * ident field must be set with a discrete value and other values in + * retro_perf_counter must be 0. + * Registering can be called multiple times. To avoid calling to + * frontend redundantly, you can check registered field first. */ +typedef void (RETRO_CALLCONV *retro_perf_register_t)(struct retro_perf_counter *counter); + +/* Starts a registered counter. */ +typedef void (RETRO_CALLCONV *retro_perf_start_t)(struct retro_perf_counter *counter); + +/* Stops a registered counter. */ +typedef void (RETRO_CALLCONV *retro_perf_stop_t)(struct retro_perf_counter *counter); + +/* For convenience it can be useful to wrap register, start and stop in macros. + * E.g.: + * #ifdef LOG_PERFORMANCE + * #define RETRO_PERFORMANCE_INIT(perf_cb, name) static struct retro_perf_counter name = {#name}; if (!name.registered) perf_cb.perf_register(&(name)) + * #define RETRO_PERFORMANCE_START(perf_cb, name) perf_cb.perf_start(&(name)) + * #define RETRO_PERFORMANCE_STOP(perf_cb, name) perf_cb.perf_stop(&(name)) + * #else + * ... Blank macros ... + * #endif + * + * These can then be used mid-functions around code snippets. + * + * extern struct retro_perf_callback perf_cb; * Somewhere in the core. + * + * void do_some_heavy_work(void) + * { + * RETRO_PERFORMANCE_INIT(cb, work_1; + * RETRO_PERFORMANCE_START(cb, work_1); + * heavy_work_1(); + * RETRO_PERFORMANCE_STOP(cb, work_1); + * + * RETRO_PERFORMANCE_INIT(cb, work_2); + * RETRO_PERFORMANCE_START(cb, work_2); + * heavy_work_2(); + * RETRO_PERFORMANCE_STOP(cb, work_2); + * } + * + * void retro_deinit(void) + * { + * perf_cb.perf_log(); * Log all perf counters here for example. + * } + */ + +struct retro_perf_callback +{ + retro_perf_get_time_usec_t get_time_usec; + retro_get_cpu_features_t get_cpu_features; + + retro_perf_get_counter_t get_perf_counter; + retro_perf_register_t perf_register; + retro_perf_start_t perf_start; + retro_perf_stop_t perf_stop; + retro_perf_log_t perf_log; +}; + +/* FIXME: Document the sensor API and work out behavior. + * It will be marked as experimental until then. + */ +enum retro_sensor_action +{ + RETRO_SENSOR_ACCELEROMETER_ENABLE = 0, + RETRO_SENSOR_ACCELEROMETER_DISABLE, + RETRO_SENSOR_GYROSCOPE_ENABLE, + RETRO_SENSOR_GYROSCOPE_DISABLE, + RETRO_SENSOR_ILLUMINANCE_ENABLE, + RETRO_SENSOR_ILLUMINANCE_DISABLE, + + RETRO_SENSOR_DUMMY = INT_MAX +}; + +/* Id values for SENSOR types. */ +#define RETRO_SENSOR_ACCELEROMETER_X 0 +#define RETRO_SENSOR_ACCELEROMETER_Y 1 +#define RETRO_SENSOR_ACCELEROMETER_Z 2 +#define RETRO_SENSOR_GYROSCOPE_X 3 +#define RETRO_SENSOR_GYROSCOPE_Y 4 +#define RETRO_SENSOR_GYROSCOPE_Z 5 +#define RETRO_SENSOR_ILLUMINANCE 6 + +typedef bool (RETRO_CALLCONV *retro_set_sensor_state_t)(unsigned port, + enum retro_sensor_action action, unsigned rate); + +typedef float (RETRO_CALLCONV *retro_sensor_get_input_t)(unsigned port, unsigned id); + +struct retro_sensor_interface +{ + retro_set_sensor_state_t set_sensor_state; + retro_sensor_get_input_t get_sensor_input; +}; + +enum retro_camera_buffer +{ + RETRO_CAMERA_BUFFER_OPENGL_TEXTURE = 0, + RETRO_CAMERA_BUFFER_RAW_FRAMEBUFFER, + + RETRO_CAMERA_BUFFER_DUMMY = INT_MAX +}; + +/* Starts the camera driver. Can only be called in retro_run(). */ +typedef bool (RETRO_CALLCONV *retro_camera_start_t)(void); + +/* Stops the camera driver. Can only be called in retro_run(). */ +typedef void (RETRO_CALLCONV *retro_camera_stop_t)(void); + +/* Callback which signals when the camera driver is initialized + * and/or deinitialized. + * retro_camera_start_t can be called in initialized callback. + */ +typedef void (RETRO_CALLCONV *retro_camera_lifetime_status_t)(void); + +/* A callback for raw framebuffer data. buffer points to an XRGB8888 buffer. + * Width, height and pitch are similar to retro_video_refresh_t. + * First pixel is top-left origin. + */ +typedef void (RETRO_CALLCONV *retro_camera_frame_raw_framebuffer_t)(const uint32_t *buffer, + unsigned width, unsigned height, size_t pitch); + +/* A callback for when OpenGL textures are used. + * + * texture_id is a texture owned by camera driver. + * Its state or content should be considered immutable, except for things like + * texture filtering and clamping. + * + * texture_target is the texture target for the GL texture. + * These can include e.g. GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE, and possibly + * more depending on extensions. + * + * affine points to a packed 3x3 column-major matrix used to apply an affine + * transform to texture coordinates. (affine_matrix * vec3(coord_x, coord_y, 1.0)) + * After transform, normalized texture coord (0, 0) should be bottom-left + * and (1, 1) should be top-right (or (width, height) for RECTANGLE). + * + * GL-specific typedefs are avoided here to avoid relying on gl.h in + * the API definition. + */ +typedef void (RETRO_CALLCONV *retro_camera_frame_opengl_texture_t)(unsigned texture_id, + unsigned texture_target, const float *affine); + +struct retro_camera_callback +{ + /* Set by libretro core. + * Example bitmask: caps = (1 << RETRO_CAMERA_BUFFER_OPENGL_TEXTURE) | (1 << RETRO_CAMERA_BUFFER_RAW_FRAMEBUFFER). + */ + uint64_t caps; + + /* Desired resolution for camera. Is only used as a hint. */ + unsigned width; + unsigned height; + + /* Set by frontend. */ + retro_camera_start_t start; + retro_camera_stop_t stop; + + /* Set by libretro core if raw framebuffer callbacks will be used. */ + retro_camera_frame_raw_framebuffer_t frame_raw_framebuffer; + + /* Set by libretro core if OpenGL texture callbacks will be used. */ + retro_camera_frame_opengl_texture_t frame_opengl_texture; + + /* Set by libretro core. Called after camera driver is initialized and + * ready to be started. + * Can be NULL, in which this callback is not called. + */ + retro_camera_lifetime_status_t initialized; + + /* Set by libretro core. Called right before camera driver is + * deinitialized. + * Can be NULL, in which this callback is not called. + */ + retro_camera_lifetime_status_t deinitialized; +}; + +/* Sets the interval of time and/or distance at which to update/poll + * location-based data. + * + * To ensure compatibility with all location-based implementations, + * values for both interval_ms and interval_distance should be provided. + * + * interval_ms is the interval expressed in milliseconds. + * interval_distance is the distance interval expressed in meters. + */ +typedef void (RETRO_CALLCONV *retro_location_set_interval_t)(unsigned interval_ms, + unsigned interval_distance); + +/* Start location services. The device will start listening for changes to the + * current location at regular intervals (which are defined with + * retro_location_set_interval_t). */ +typedef bool (RETRO_CALLCONV *retro_location_start_t)(void); + +/* Stop location services. The device will stop listening for changes + * to the current location. */ +typedef void (RETRO_CALLCONV *retro_location_stop_t)(void); + +/* Get the position of the current location. Will set parameters to + * 0 if no new location update has happened since the last time. */ +typedef bool (RETRO_CALLCONV *retro_location_get_position_t)(double *lat, double *lon, + double *horiz_accuracy, double *vert_accuracy); + +/* Callback which signals when the location driver is initialized + * and/or deinitialized. + * retro_location_start_t can be called in initialized callback. + */ +typedef void (RETRO_CALLCONV *retro_location_lifetime_status_t)(void); + +struct retro_location_callback +{ + retro_location_start_t start; + retro_location_stop_t stop; + retro_location_get_position_t get_position; + retro_location_set_interval_t set_interval; + + retro_location_lifetime_status_t initialized; + retro_location_lifetime_status_t deinitialized; +}; + +enum retro_rumble_effect +{ + RETRO_RUMBLE_STRONG = 0, + RETRO_RUMBLE_WEAK = 1, + + RETRO_RUMBLE_DUMMY = INT_MAX +}; + +/* Sets rumble state for joypad plugged in port 'port'. + * Rumble effects are controlled independently, + * and setting e.g. strong rumble does not override weak rumble. + * Strength has a range of [0, 0xffff]. + * + * Returns true if rumble state request was honored. + * Calling this before first retro_run() is likely to return false. */ +typedef bool (RETRO_CALLCONV *retro_set_rumble_state_t)(unsigned port, + enum retro_rumble_effect effect, uint16_t strength); + +struct retro_rumble_interface +{ + retro_set_rumble_state_t set_rumble_state; +}; + +/* Notifies libretro that audio data should be written. */ +typedef void (RETRO_CALLCONV *retro_audio_callback_t)(void); + +/* True: Audio driver in frontend is active, and callback is + * expected to be called regularily. + * False: Audio driver in frontend is paused or inactive. + * Audio callback will not be called until set_state has been + * called with true. + * Initial state is false (inactive). + */ +typedef void (RETRO_CALLCONV *retro_audio_set_state_callback_t)(bool enabled); + +struct retro_audio_callback +{ + retro_audio_callback_t callback; + retro_audio_set_state_callback_t set_state; +}; + +/* Notifies a libretro core of time spent since last invocation + * of retro_run() in microseconds. + * + * It will be called right before retro_run() every frame. + * The frontend can tamper with timing to support cases like + * fast-forward, slow-motion and framestepping. + * + * In those scenarios the reference frame time value will be used. */ +typedef int64_t retro_usec_t; +typedef void (RETRO_CALLCONV *retro_frame_time_callback_t)(retro_usec_t usec); +struct retro_frame_time_callback +{ + retro_frame_time_callback_t callback; + /* Represents the time of one frame. It is computed as + * 1000000 / fps, but the implementation will resolve the + * rounding to ensure that framestepping, etc is exact. */ + retro_usec_t reference; +}; + +/* Notifies a libretro core of the current occupancy + * level of the frontend audio buffer. + * + * - active: 'true' if audio buffer is currently + * in use. Will be 'false' if audio is + * disabled in the frontend + * + * - occupancy: Given as a value in the range [0,100], + * corresponding to the occupancy percentage + * of the audio buffer + * + * - underrun_likely: 'true' if the frontend expects an + * audio buffer underrun during the + * next frame (indicates that a core + * should attempt frame skipping) + * + * It will be called right before retro_run() every frame. */ +typedef void (RETRO_CALLCONV *retro_audio_buffer_status_callback_t)( + bool active, unsigned occupancy, bool underrun_likely); +struct retro_audio_buffer_status_callback +{ + retro_audio_buffer_status_callback_t callback; +}; + +/* Pass this to retro_video_refresh_t if rendering to hardware. + * Passing NULL to retro_video_refresh_t is still a frame dupe as normal. + * */ +#define RETRO_HW_FRAME_BUFFER_VALID ((void*)-1) + +/* Invalidates the current HW context. + * Any GL state is lost, and must not be deinitialized explicitly. + * If explicit deinitialization is desired by the libretro core, + * it should implement context_destroy callback. + * If called, all GPU resources must be reinitialized. + * Usually called when frontend reinits video driver. + * Also called first time video driver is initialized, + * allowing libretro core to initialize resources. + */ +typedef void (RETRO_CALLCONV *retro_hw_context_reset_t)(void); + +/* Gets current framebuffer which is to be rendered to. + * Could change every frame potentially. + */ +typedef uintptr_t (RETRO_CALLCONV *retro_hw_get_current_framebuffer_t)(void); + +/* Get a symbol from HW context. */ +typedef retro_proc_address_t (RETRO_CALLCONV *retro_hw_get_proc_address_t)(const char *sym); + +enum retro_hw_context_type +{ + RETRO_HW_CONTEXT_NONE = 0, + /* OpenGL 2.x. Driver can choose to use latest compatibility context. */ + RETRO_HW_CONTEXT_OPENGL = 1, + /* OpenGL ES 2.0. */ + RETRO_HW_CONTEXT_OPENGLES2 = 2, + /* Modern desktop core GL context. Use version_major/ + * version_minor fields to set GL version. */ + RETRO_HW_CONTEXT_OPENGL_CORE = 3, + /* OpenGL ES 3.0 */ + RETRO_HW_CONTEXT_OPENGLES3 = 4, + /* OpenGL ES 3.1+. Set version_major/version_minor. For GLES2 and GLES3, + * use the corresponding enums directly. */ + RETRO_HW_CONTEXT_OPENGLES_VERSION = 5, + + /* Vulkan, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE. */ + RETRO_HW_CONTEXT_VULKAN = 6, + + /* Direct3D, set version_major to select the type of interface + * returned by RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */ + RETRO_HW_CONTEXT_DIRECT3D = 7, + + RETRO_HW_CONTEXT_DUMMY = INT_MAX +}; + +struct retro_hw_render_callback +{ + /* Which API to use. Set by libretro core. */ + enum retro_hw_context_type context_type; + + /* Called when a context has been created or when it has been reset. + * An OpenGL context is only valid after context_reset() has been called. + * + * When context_reset is called, OpenGL resources in the libretro + * implementation are guaranteed to be invalid. + * + * It is possible that context_reset is called multiple times during an + * application lifecycle. + * If context_reset is called without any notification (context_destroy), + * the OpenGL context was lost and resources should just be recreated + * without any attempt to "free" old resources. + */ + retro_hw_context_reset_t context_reset; + + /* Set by frontend. + * TODO: This is rather obsolete. The frontend should not + * be providing preallocated framebuffers. */ + retro_hw_get_current_framebuffer_t get_current_framebuffer; + + /* Set by frontend. + * Can return all relevant functions, including glClear on Windows. */ + retro_hw_get_proc_address_t get_proc_address; + + /* Set if render buffers should have depth component attached. + * TODO: Obsolete. */ + bool depth; + + /* Set if stencil buffers should be attached. + * TODO: Obsolete. */ + bool stencil; + + /* If depth and stencil are true, a packed 24/8 buffer will be added. + * Only attaching stencil is invalid and will be ignored. */ + + /* Use conventional bottom-left origin convention. If false, + * standard libretro top-left origin semantics are used. + * TODO: Move to GL specific interface. */ + bool bottom_left_origin; + + /* Major version number for core GL context or GLES 3.1+. */ + unsigned version_major; + + /* Minor version number for core GL context or GLES 3.1+. */ + unsigned version_minor; + + /* If this is true, the frontend will go very far to avoid + * resetting context in scenarios like toggling fullscreen, etc. + * TODO: Obsolete? Maybe frontend should just always assume this ... + */ + bool cache_context; + + /* The reset callback might still be called in extreme situations + * such as if the context is lost beyond recovery. + * + * For optimal stability, set this to false, and allow context to be + * reset at any time. + */ + + /* A callback to be called before the context is destroyed in a + * controlled way by the frontend. */ + retro_hw_context_reset_t context_destroy; + + /* OpenGL resources can be deinitialized cleanly at this step. + * context_destroy can be set to NULL, in which resources will + * just be destroyed without any notification. + * + * Even when context_destroy is non-NULL, it is possible that + * context_reset is called without any destroy notification. + * This happens if context is lost by external factors (such as + * notified by GL_ARB_robustness). + * + * In this case, the context is assumed to be already dead, + * and the libretro implementation must not try to free any OpenGL + * resources in the subsequent context_reset. + */ + + /* Creates a debug context. */ + bool debug_context; +}; + +/* Callback type passed in RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK. + * Called by the frontend in response to keyboard events. + * down is set if the key is being pressed, or false if it is being released. + * keycode is the RETROK value of the char. + * character is the text character of the pressed key. (UTF-32). + * key_modifiers is a set of RETROKMOD values or'ed together. + * + * The pressed/keycode state can be indepedent of the character. + * It is also possible that multiple characters are generated from a + * single keypress. + * Keycode events should be treated separately from character events. + * However, when possible, the frontend should try to synchronize these. + * If only a character is posted, keycode should be RETROK_UNKNOWN. + * + * Similarily if only a keycode event is generated with no corresponding + * character, character should be 0. + */ +typedef void (RETRO_CALLCONV *retro_keyboard_event_t)(bool down, unsigned keycode, + uint32_t character, uint16_t key_modifiers); + +struct retro_keyboard_callback +{ + retro_keyboard_event_t callback; +}; + +/* Callbacks for RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE & + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. + * Should be set for implementations which can swap out multiple disk + * images in runtime. + * + * If the implementation can do this automatically, it should strive to do so. + * However, there are cases where the user must manually do so. + * + * Overview: To swap a disk image, eject the disk image with + * set_eject_state(true). + * Set the disk index with set_image_index(index). Insert the disk again + * with set_eject_state(false). + */ + +/* If ejected is true, "ejects" the virtual disk tray. + * When ejected, the disk image index can be set. + */ +typedef bool (RETRO_CALLCONV *retro_set_eject_state_t)(bool ejected); + +/* Gets current eject state. The initial state is 'not ejected'. */ +typedef bool (RETRO_CALLCONV *retro_get_eject_state_t)(void); + +/* Gets current disk index. First disk is index 0. + * If return value is >= get_num_images(), no disk is currently inserted. + */ +typedef unsigned (RETRO_CALLCONV *retro_get_image_index_t)(void); + +/* Sets image index. Can only be called when disk is ejected. + * The implementation supports setting "no disk" by using an + * index >= get_num_images(). + */ +typedef bool (RETRO_CALLCONV *retro_set_image_index_t)(unsigned index); + +/* Gets total number of images which are available to use. */ +typedef unsigned (RETRO_CALLCONV *retro_get_num_images_t)(void); + +struct retro_game_info; + +/* Replaces the disk image associated with index. + * Arguments to pass in info have same requirements as retro_load_game(). + * Virtual disk tray must be ejected when calling this. + * + * Replacing a disk image with info = NULL will remove the disk image + * from the internal list. + * As a result, calls to get_image_index() can change. + * + * E.g. replace_image_index(1, NULL), and previous get_image_index() + * returned 4 before. + * Index 1 will be removed, and the new index is 3. + */ +typedef bool (RETRO_CALLCONV *retro_replace_image_index_t)(unsigned index, + const struct retro_game_info *info); + +/* Adds a new valid index (get_num_images()) to the internal disk list. + * This will increment subsequent return values from get_num_images() by 1. + * This image index cannot be used until a disk image has been set + * with replace_image_index. */ +typedef bool (RETRO_CALLCONV *retro_add_image_index_t)(void); + +/* Sets initial image to insert in drive when calling + * core_load_game(). + * Since we cannot pass the initial index when loading + * content (this would require a major API change), this + * is set by the frontend *before* calling the core's + * retro_load_game()/retro_load_game_special() implementation. + * A core should therefore cache the index/path values and handle + * them inside retro_load_game()/retro_load_game_special(). + * - If 'index' is invalid (index >= get_num_images()), the + * core should ignore the set value and instead use 0 + * - 'path' is used purely for error checking - i.e. when + * content is loaded, the core should verify that the + * disk specified by 'index' has the specified file path. + * This is to guard against auto selecting the wrong image + * if (for example) the user should modify an existing M3U + * playlist. We have to let the core handle this because + * set_initial_image() must be called before loading content, + * i.e. the frontend cannot access image paths in advance + * and thus cannot perform the error check itself. + * If set path and content path do not match, the core should + * ignore the set 'index' value and instead use 0 + * Returns 'false' if index or 'path' are invalid, or core + * does not support this functionality + */ +typedef bool (RETRO_CALLCONV *retro_set_initial_image_t)(unsigned index, const char *path); + +/* Fetches the path of the specified disk image file. + * Returns 'false' if index is invalid (index >= get_num_images()) + * or path is otherwise unavailable. + */ +typedef bool (RETRO_CALLCONV *retro_get_image_path_t)(unsigned index, char *path, size_t len); + +/* Fetches a core-provided 'label' for the specified disk + * image file. In the simplest case this may be a file name + * (without extension), but for cores with more complex + * content requirements information may be provided to + * facilitate user disk swapping - for example, a core + * running floppy-disk-based content may uniquely label + * save disks, data disks, level disks, etc. with names + * corresponding to in-game disk change prompts (so the + * frontend can provide better user guidance than a 'dumb' + * disk index value). + * Returns 'false' if index is invalid (index >= get_num_images()) + * or label is otherwise unavailable. + */ +typedef bool (RETRO_CALLCONV *retro_get_image_label_t)(unsigned index, char *label, size_t len); + +struct retro_disk_control_callback +{ + retro_set_eject_state_t set_eject_state; + retro_get_eject_state_t get_eject_state; + + retro_get_image_index_t get_image_index; + retro_set_image_index_t set_image_index; + retro_get_num_images_t get_num_images; + + retro_replace_image_index_t replace_image_index; + retro_add_image_index_t add_image_index; +}; + +struct retro_disk_control_ext_callback +{ + retro_set_eject_state_t set_eject_state; + retro_get_eject_state_t get_eject_state; + + retro_get_image_index_t get_image_index; + retro_set_image_index_t set_image_index; + retro_get_num_images_t get_num_images; + + retro_replace_image_index_t replace_image_index; + retro_add_image_index_t add_image_index; + + /* NOTE: Frontend will only attempt to record/restore + * last used disk index if both set_initial_image() + * and get_image_path() are implemented */ + retro_set_initial_image_t set_initial_image; /* Optional - may be NULL */ + + retro_get_image_path_t get_image_path; /* Optional - may be NULL */ + retro_get_image_label_t get_image_label; /* Optional - may be NULL */ +}; + +enum retro_pixel_format +{ + /* 0RGB1555, native endian. + * 0 bit must be set to 0. + * This pixel format is default for compatibility concerns only. + * If a 15/16-bit pixel format is desired, consider using RGB565. */ + RETRO_PIXEL_FORMAT_0RGB1555 = 0, + + /* XRGB8888, native endian. + * X bits are ignored. */ + RETRO_PIXEL_FORMAT_XRGB8888 = 1, + + /* RGB565, native endian. + * This pixel format is the recommended format to use if a 15/16-bit + * format is desired as it is the pixel format that is typically + * available on a wide range of low-power devices. + * + * It is also natively supported in APIs like OpenGL ES. */ + RETRO_PIXEL_FORMAT_RGB565 = 2, + + /* Ensure sizeof() == sizeof(int). */ + RETRO_PIXEL_FORMAT_UNKNOWN = INT_MAX +}; + +struct retro_message +{ + const char *msg; /* Message to be displayed. */ + unsigned frames; /* Duration in frames of message. */ +}; + +enum retro_message_target +{ + RETRO_MESSAGE_TARGET_ALL = 0, + RETRO_MESSAGE_TARGET_OSD, + RETRO_MESSAGE_TARGET_LOG +}; + +enum retro_message_type +{ + RETRO_MESSAGE_TYPE_NOTIFICATION = 0, + RETRO_MESSAGE_TYPE_NOTIFICATION_ALT, + RETRO_MESSAGE_TYPE_STATUS, + RETRO_MESSAGE_TYPE_PROGRESS +}; + +struct retro_message_ext +{ + /* Message string to be displayed/logged */ + const char *msg; + /* Duration (in ms) of message when targeting the OSD */ + unsigned duration; + /* Message priority when targeting the OSD + * > When multiple concurrent messages are sent to + * the frontend and the frontend does not have the + * capacity to display them all, messages with the + * *highest* priority value should be shown + * > There is no upper limit to a message priority + * value (within the bounds of the unsigned data type) + * > In the reference frontend (RetroArch), the same + * priority values are used for frontend-generated + * notifications, which are typically assigned values + * between 0 and 3 depending upon importance */ + unsigned priority; + /* Message logging level (info, warn, error, etc.) */ + enum retro_log_level level; + /* Message destination: OSD, logging interface or both */ + enum retro_message_target target; + /* Message 'type' when targeting the OSD + * > RETRO_MESSAGE_TYPE_NOTIFICATION: Specifies that a + * message should be handled in identical fashion to + * a standard frontend-generated notification + * > RETRO_MESSAGE_TYPE_NOTIFICATION_ALT: Specifies that + * message is a notification that requires user attention + * or action, but that it should be displayed in a manner + * that differs from standard frontend-generated notifications. + * This would typically correspond to messages that should be + * displayed immediately (independently from any internal + * frontend message queue), and/or which should be visually + * distinguishable from frontend-generated notifications. + * For example, a core may wish to inform the user of + * information related to a disk-change event. It is + * expected that the frontend itself may provide a + * notification in this case; if the core sends a + * message of type RETRO_MESSAGE_TYPE_NOTIFICATION, an + * uncomfortable 'double-notification' may occur. A message + * of RETRO_MESSAGE_TYPE_NOTIFICATION_ALT should therefore + * be presented such that visual conflict with regular + * notifications does not occur + * > RETRO_MESSAGE_TYPE_STATUS: Indicates that message + * is not a standard notification. This typically + * corresponds to 'status' indicators, such as a core's + * internal FPS, which are intended to be displayed + * either permanently while a core is running, or in + * a manner that does not suggest user attention or action + * is required. 'Status' type messages should therefore be + * displayed in a different on-screen location and in a manner + * easily distinguishable from both standard frontend-generated + * notifications and messages of type RETRO_MESSAGE_TYPE_NOTIFICATION_ALT + * > RETRO_MESSAGE_TYPE_PROGRESS: Indicates that message reports + * the progress of an internal core task. For example, in cases + * where a core itself handles the loading of content from a file, + * this may correspond to the percentage of the file that has been + * read. Alternatively, an audio/video playback core may use a + * message of type RETRO_MESSAGE_TYPE_PROGRESS to display the current + * playback position as a percentage of the runtime. 'Progress' type + * messages should therefore be displayed as a literal progress bar, + * where: + * - 'retro_message_ext.msg' is the progress bar title/label + * - 'retro_message_ext.progress' determines the length of + * the progress bar + * NOTE: Message type is a *hint*, and may be ignored + * by the frontend. If a frontend lacks support for + * displaying messages via alternate means than standard + * frontend-generated notifications, it will treat *all* + * messages as having the type RETRO_MESSAGE_TYPE_NOTIFICATION */ + enum retro_message_type type; + /* Task progress when targeting the OSD and message is + * of type RETRO_MESSAGE_TYPE_PROGRESS + * > -1: Unmetered/indeterminate + * > 0-100: Current progress percentage + * NOTE: Since message type is a hint, a frontend may ignore + * progress values. Where relevant, a core should therefore + * include progress percentage within the message string, + * such that the message intent remains clear when displayed + * as a standard frontend-generated notification */ + int8_t progress; +}; + +/* Describes how the libretro implementation maps a libretro input bind + * to its internal input system through a human readable string. + * This string can be used to better let a user configure input. */ +struct retro_input_descriptor +{ + /* Associates given parameters with a description. */ + unsigned port; + unsigned device; + unsigned index; + unsigned id; + + /* Human readable description for parameters. + * The pointer must remain valid until + * retro_unload_game() is called. */ + const char *description; +}; + +struct retro_system_info +{ + /* All pointers are owned by libretro implementation, and pointers must + * remain valid until it is unloaded. */ + + const char *library_name; /* Descriptive name of library. Should not + * contain any version numbers, etc. */ + const char *library_version; /* Descriptive version of core. */ + + const char *valid_extensions; /* A string listing probably content + * extensions the core will be able to + * load, separated with pipe. + * I.e. "bin|rom|iso". + * Typically used for a GUI to filter + * out extensions. */ + + /* Libretro cores that need to have direct access to their content + * files, including cores which use the path of the content files to + * determine the paths of other files, should set need_fullpath to true. + * + * Cores should strive for setting need_fullpath to false, + * as it allows the frontend to perform patching, etc. + * + * If need_fullpath is true and retro_load_game() is called: + * - retro_game_info::path is guaranteed to have a valid path + * - retro_game_info::data and retro_game_info::size are invalid + * + * If need_fullpath is false and retro_load_game() is called: + * - retro_game_info::path may be NULL + * - retro_game_info::data and retro_game_info::size are guaranteed + * to be valid + * + * See also: + * - RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + * - RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY + */ + bool need_fullpath; + + /* If true, the frontend is not allowed to extract any archives before + * loading the real content. + * Necessary for certain libretro implementations that load games + * from zipped archives. */ + bool block_extract; +}; + +struct retro_game_geometry +{ + unsigned base_width; /* Nominal video width of game. */ + unsigned base_height; /* Nominal video height of game. */ + unsigned max_width; /* Maximum possible width of game. */ + unsigned max_height; /* Maximum possible height of game. */ + + float aspect_ratio; /* Nominal aspect ratio of game. If + * aspect_ratio is <= 0.0, an aspect ratio + * of base_width / base_height is assumed. + * A frontend could override this setting, + * if desired. */ +}; + +struct retro_system_timing +{ + double fps; /* FPS of video content. */ + double sample_rate; /* Sampling rate of audio. */ +}; + +struct retro_system_av_info +{ + struct retro_game_geometry geometry; + struct retro_system_timing timing; +}; + +struct retro_variable +{ + /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. + * If NULL, obtains the complete environment string if more + * complex parsing is necessary. + * The environment string is formatted as key-value pairs + * delimited by semicolons as so: + * "key1=value1;key2=value2;..." + */ + const char *key; + + /* Value to be obtained. If key does not exist, it is set to NULL. */ + const char *value; +}; + +struct retro_core_option_display +{ + /* Variable to configure in RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY */ + const char *key; + + /* Specifies whether variable should be displayed + * when presenting core options to the user */ + bool visible; +}; + +/* Maximum number of values permitted for a core option + * > Note: We have to set a maximum value due the limitations + * of the C language - i.e. it is not possible to create an + * array of structs each containing a variable sized array, + * so the retro_core_option_definition values array must + * have a fixed size. The size limit of 128 is a balancing + * act - it needs to be large enough to support all 'sane' + * core options, but setting it too large may impact low memory + * platforms. In practise, if a core option has more than + * 128 values then the implementation is likely flawed. + * To quote the above API reference: + * "The number of possible options should be very limited + * i.e. it should be feasible to cycle through options + * without a keyboard." + */ +#define RETRO_NUM_CORE_OPTION_VALUES_MAX 128 + +struct retro_core_option_value +{ + /* Expected option value */ + const char *value; + + /* Human-readable value label. If NULL, value itself + * will be displayed by the frontend */ + const char *label; +}; + +struct retro_core_option_definition +{ + /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. */ + const char *key; + + /* Human-readable core option description (used as menu label) */ + const char *desc; + + /* Human-readable core option information (used as menu sublabel) */ + const char *info; + + /* Array of retro_core_option_value structs, terminated by NULL */ + struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX]; + + /* Default core option value. Must match one of the values + * in the retro_core_option_value array, otherwise will be + * ignored */ + const char *default_value; +}; + +struct retro_core_options_intl +{ + /* Pointer to an array of retro_core_option_definition structs + * - US English implementation + * - Must point to a valid array */ + struct retro_core_option_definition *us; + + /* Pointer to an array of retro_core_option_definition structs + * - Implementation for current frontend language + * - May be NULL */ + struct retro_core_option_definition *local; +}; + +struct retro_core_option_v2_category +{ + /* Variable uniquely identifying the + * option category. Valid key characters + * are [a-z, A-Z, 0-9, _, -] */ + const char *key; + + /* Human-readable category description + * > Used as category menu label when + * frontend has core option category + * support */ + const char *desc; + + /* Human-readable category information + * > Used as category menu sublabel when + * frontend has core option category + * support + * > Optional (may be NULL or an empty + * string) */ + const char *info; +}; + +struct retro_core_option_v2_definition +{ + /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. + * Valid key characters are [a-z, A-Z, 0-9, _, -] */ + const char *key; + + /* Human-readable core option description + * > Used as menu label when frontend does + * not have core option category support + * e.g. "Video > Aspect Ratio" */ + const char *desc; + + /* Human-readable core option description + * > Used as menu label when frontend has + * core option category support + * e.g. "Aspect Ratio", where associated + * retro_core_option_v2_category::desc + * is "Video" + * > If empty or NULL, the string specified by + * desc will be used as the menu label + * > Will be ignored (and may be set to NULL) + * if category_key is empty or NULL */ + const char *desc_categorized; + + /* Human-readable core option information + * > Used as menu sublabel */ + const char *info; + + /* Human-readable core option information + * > Used as menu sublabel when frontend + * has core option category support + * (e.g. may be required when info text + * references an option by name/desc, + * and the desc/desc_categorized text + * for that option differ) + * > If empty or NULL, the string specified by + * info will be used as the menu sublabel + * > Will be ignored (and may be set to NULL) + * if category_key is empty or NULL */ + const char *info_categorized; + + /* Variable specifying category (e.g. "video", + * "audio") that will be assigned to the option + * if frontend has core option category support. + * > Categorized options will be displayed in a + * subsection/submenu of the frontend core + * option interface + * > Specified string must match one of the + * retro_core_option_v2_category::key values + * in the associated retro_core_option_v2_category + * array; If no match is not found, specified + * string will be considered as NULL + * > If specified string is empty or NULL, option will + * have no category and will be shown at the top + * level of the frontend core option interface */ + const char *category_key; + + /* Array of retro_core_option_value structs, terminated by NULL */ + struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX]; + + /* Default core option value. Must match one of the values + * in the retro_core_option_value array, otherwise will be + * ignored */ + const char *default_value; +}; + +struct retro_core_options_v2 +{ + /* Array of retro_core_option_v2_category structs, + * terminated by NULL + * > If NULL, all entries in definitions array + * will have no category and will be shown at + * the top level of the frontend core option + * interface + * > Will be ignored if frontend does not have + * core option category support */ + struct retro_core_option_v2_category *categories; + + /* Array of retro_core_option_v2_definition structs, + * terminated by NULL */ + struct retro_core_option_v2_definition *definitions; +}; + +struct retro_core_options_v2_intl +{ + /* Pointer to a retro_core_options_v2 struct + * > US English implementation + * > Must point to a valid struct */ + struct retro_core_options_v2 *us; + + /* Pointer to a retro_core_options_v2 struct + * - Implementation for current frontend language + * - May be NULL */ + struct retro_core_options_v2 *local; +}; + +/* Used by the frontend to monitor changes in core option + * visibility. May be called each time any core option + * value is set via the frontend. + * - On each invocation, the core must update the visibility + * of any dynamically hidden options using the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY environment + * callback. + * - On the first invocation, returns 'true' if the visibility + * of any core option has changed since the last call of + * retro_load_game() or retro_load_game_special(). + * - On each subsequent invocation, returns 'true' if the + * visibility of any core option has changed since the last + * time the function was called. */ +typedef bool (RETRO_CALLCONV *retro_core_options_update_display_callback_t)(void); +struct retro_core_options_update_display_callback +{ + retro_core_options_update_display_callback_t callback; +}; + +struct retro_game_info +{ + const char *path; /* Path to game, UTF-8 encoded. + * Sometimes used as a reference for building other paths. + * May be NULL if game was loaded from stdin or similar, + * but in this case some cores will be unable to load `data`. + * So, it is preferable to fabricate something here instead + * of passing NULL, which will help more cores to succeed. + * retro_system_info::need_fullpath requires + * that this path is valid. */ + const void *data; /* Memory buffer of loaded game. Will be NULL + * if need_fullpath was set. */ + size_t size; /* Size of memory buffer. */ + const char *meta; /* String of implementation specific meta-data. */ +}; + +#define RETRO_MEMORY_ACCESS_WRITE (1 << 0) + /* The core will write to the buffer provided by retro_framebuffer::data. */ +#define RETRO_MEMORY_ACCESS_READ (1 << 1) + /* The core will read from retro_framebuffer::data. */ +#define RETRO_MEMORY_TYPE_CACHED (1 << 0) + /* The memory in data is cached. + * If not cached, random writes and/or reading from the buffer is expected to be very slow. */ +struct retro_framebuffer +{ + void *data; /* The framebuffer which the core can render into. + Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. + The initial contents of data are unspecified. */ + unsigned width; /* The framebuffer width used by the core. Set by core. */ + unsigned height; /* The framebuffer height used by the core. Set by core. */ + size_t pitch; /* The number of bytes between the beginning of a scanline, + and beginning of the next scanline. + Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ + enum retro_pixel_format format; /* The pixel format the core must use to render into data. + This format could differ from the format used in + SET_PIXEL_FORMAT. + Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ + + unsigned access_flags; /* How the core will access the memory in the framebuffer. + RETRO_MEMORY_ACCESS_* flags. + Set by core. */ + unsigned memory_flags; /* Flags telling core how the memory has been mapped. + RETRO_MEMORY_TYPE_* flags. + Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ +}; + +/* Used by a libretro core to override the current + * fastforwarding mode of the frontend */ +struct retro_fastforwarding_override +{ + /* Specifies the runtime speed multiplier that + * will be applied when 'fastforward' is true. + * For example, a value of 5.0 when running 60 FPS + * content will cap the fast-forward rate at 300 FPS. + * Note that the target multiplier may not be achieved + * if the host hardware has insufficient processing + * power. + * Setting a value of 0.0 (or greater than 0.0 but + * less than 1.0) will result in an uncapped + * fast-forward rate (limited only by hardware + * capacity). + * If the value is negative, it will be ignored + * (i.e. the frontend will use a runtime speed + * multiplier of its own choosing) */ + float ratio; + + /* If true, fastforwarding mode will be enabled. + * If false, fastforwarding mode will be disabled. */ + bool fastforward; + + /* If true, and if supported by the frontend, an + * on-screen notification will be displayed while + * 'fastforward' is true. + * If false, and if supported by the frontend, any + * on-screen fast-forward notifications will be + * suppressed */ + bool notification; + + /* If true, the core will have sole control over + * when fastforwarding mode is enabled/disabled; + * the frontend will not be able to change the + * state set by 'fastforward' until either + * 'inhibit_toggle' is set to false, or the core + * is unloaded */ + bool inhibit_toggle; +}; + +/* Callbacks */ + +/* Environment callback. Gives implementations a way of performing + * uncommon tasks. Extensible. */ +typedef bool (RETRO_CALLCONV *retro_environment_t)(unsigned cmd, void *data); + +/* Render a frame. Pixel format is 15-bit 0RGB1555 native endian + * unless changed (see RETRO_ENVIRONMENT_SET_PIXEL_FORMAT). + * + * Width and height specify dimensions of buffer. + * Pitch specifices length in bytes between two lines in buffer. + * + * For performance reasons, it is highly recommended to have a frame + * that is packed in memory, i.e. pitch == width * byte_per_pixel. + * Certain graphic APIs, such as OpenGL ES, do not like textures + * that are not packed in memory. + */ +typedef void (RETRO_CALLCONV *retro_video_refresh_t)(const void *data, unsigned width, + unsigned height, size_t pitch); + +/* Renders a single audio frame. Should only be used if implementation + * generates a single sample at a time. + * Format is signed 16-bit native endian. + */ +typedef void (RETRO_CALLCONV *retro_audio_sample_t)(int16_t left, int16_t right); + +/* Renders multiple audio frames in one go. + * + * One frame is defined as a sample of left and right channels, interleaved. + * I.e. int16_t buf[4] = { l, r, l, r }; would be 2 frames. + * Only one of the audio callbacks must ever be used. + */ +typedef size_t (RETRO_CALLCONV *retro_audio_sample_batch_t)(const int16_t *data, + size_t frames); + +/* Polls input. */ +typedef void (RETRO_CALLCONV *retro_input_poll_t)(void); + +/* Queries for input for player 'port'. device will be masked with + * RETRO_DEVICE_MASK. + * + * Specialization of devices such as RETRO_DEVICE_JOYPAD_MULTITAP that + * have been set with retro_set_controller_port_device() + * will still use the higher level RETRO_DEVICE_JOYPAD to request input. + */ +typedef int16_t (RETRO_CALLCONV *retro_input_state_t)(unsigned port, unsigned device, + unsigned index, unsigned id); + +/* Sets callbacks. retro_set_environment() is guaranteed to be called + * before retro_init(). + * + * The rest of the set_* functions are guaranteed to have been called + * before the first call to retro_run() is made. */ +RETRO_API void retro_set_environment(retro_environment_t); +RETRO_API void retro_set_video_refresh(retro_video_refresh_t); +RETRO_API void retro_set_audio_sample(retro_audio_sample_t); +RETRO_API void retro_set_audio_sample_batch(retro_audio_sample_batch_t); +RETRO_API void retro_set_input_poll(retro_input_poll_t); +RETRO_API void retro_set_input_state(retro_input_state_t); + +/* Library global initialization/deinitialization. */ +RETRO_API void retro_init(void); +RETRO_API void retro_deinit(void); + +/* Must return RETRO_API_VERSION. Used to validate ABI compatibility + * when the API is revised. */ +RETRO_API unsigned retro_api_version(void); + +/* Gets statically known system info. Pointers provided in *info + * must be statically allocated. + * Can be called at any time, even before retro_init(). */ +RETRO_API void retro_get_system_info(struct retro_system_info *info); + +/* Gets information about system audio/video timings and geometry. + * Can be called only after retro_load_game() has successfully completed. + * NOTE: The implementation of this function might not initialize every + * variable if needed. + * E.g. geom.aspect_ratio might not be initialized if core doesn't + * desire a particular aspect ratio. */ +RETRO_API void retro_get_system_av_info(struct retro_system_av_info *info); + +/* Sets device to be used for player 'port'. + * By default, RETRO_DEVICE_JOYPAD is assumed to be plugged into all + * available ports. + * Setting a particular device type is not a guarantee that libretro cores + * will only poll input based on that particular device type. It is only a + * hint to the libretro core when a core cannot automatically detect the + * appropriate input device type on its own. It is also relevant when a + * core can change its behavior depending on device type. + * + * As part of the core's implementation of retro_set_controller_port_device, + * the core should call RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS to notify the + * frontend if the descriptions for any controls have changed as a + * result of changing the device type. + */ +RETRO_API void retro_set_controller_port_device(unsigned port, unsigned device); + +/* Resets the current game. */ +RETRO_API void retro_reset(void); + +/* Runs the game for one video frame. + * During retro_run(), input_poll callback must be called at least once. + * + * If a frame is not rendered for reasons where a game "dropped" a frame, + * this still counts as a frame, and retro_run() should explicitly dupe + * a frame if GET_CAN_DUPE returns true. + * In this case, the video callback can take a NULL argument for data. + */ +RETRO_API void retro_run(void); + +/* Returns the amount of data the implementation requires to serialize + * internal state (save states). + * Between calls to retro_load_game() and retro_unload_game(), the + * returned size is never allowed to be larger than a previous returned + * value, to ensure that the frontend can allocate a save state buffer once. + */ +RETRO_API size_t retro_serialize_size(void); + +/* Serializes internal state. If failed, or size is lower than + * retro_serialize_size(), it should return false, true otherwise. */ +RETRO_API bool retro_serialize(void *data, size_t size); +RETRO_API bool retro_unserialize(const void *data, size_t size); + +RETRO_API void retro_cheat_reset(void); +RETRO_API void retro_cheat_set(unsigned index, bool enabled, const char *code); + +/* Loads a game. + * Return true to indicate successful loading and false to indicate load failure. + */ +RETRO_API bool retro_load_game(const struct retro_game_info *game); + +/* Loads a "special" kind of game. Should not be used, + * except in extreme cases. */ +RETRO_API bool retro_load_game_special( + unsigned game_type, + const struct retro_game_info *info, size_t num_info +); + +/* Unloads the currently loaded game. Called before retro_deinit(void). */ +RETRO_API void retro_unload_game(void); + +/* Gets region of game. */ +RETRO_API unsigned retro_get_region(void); + +/* Gets region of memory. */ +RETRO_API void *retro_get_memory_data(unsigned id); +RETRO_API size_t retro_get_memory_size(unsigned id); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/SameBoy-old/libretro/libretro_core_options.inc b/thirdparty/SameBoy-old/libretro/libretro_core_options.inc new file mode 100644 index 000000000..94e147412 --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/libretro_core_options.inc @@ -0,0 +1,946 @@ +#ifndef LIBRETRO_CORE_OPTIONS_H__ +#define LIBRETRO_CORE_OPTIONS_H__ + +#include +#include + +#include "libretro.h" +#include "retro_inline.h" + +/* + ******************************** + * VERSION: 2.0 + ******************************** + * + * - 2.0: Add support for core options v2 interface + * - 1.3: Move translations to libretro_core_options_intl.h + * - libretro_core_options_intl.h includes BOM and utf-8 + * fix for MSVC 2010-2013 + * - Added HAVE_NO_LANGEXTRA flag to disable translations + * on platforms/compilers without BOM support + * - 1.2: Use core options v1 interface when + * RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION is >= 1 + * (previously required RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION == 1) + * - 1.1: Support generation of core options v0 retro_core_option_value + * arrays containing options with a single value + * - 1.0: First commit + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + ******************************** + * Core Option Definitions + ******************************** + */ + +/* RETRO_LANGUAGE_ENGLISH */ + +/* Default language: + * - All other languages must include the same keys and values + * - Will be used as a fallback in the event that frontend language + * is not available + * - Will be used as a fallback for any missing entries in + * frontend language definition */ + +struct retro_core_option_v2_category option_cats_us[] = { + { + "system", + "System", + "Configure base hardware selection." + }, + { + "video", + "Video", + "Configure display parameters: palette selection, colour correction, screen border." + }, + { + "audio", + "Audio", + "Configure audio emulation: highpass filter, electrical interference." + }, + { + "input", + "Input", + "Configure input parameters: rumble support." + }, + { NULL, NULL }, +}; + +struct retro_core_option_v2_definition option_defs_us[] = { + + /* Core options used in single cart mode */ + + { + "sameboy_model", + "System - Emulated Model (Requires Restart)", + "Emulated Model (Requires Restart)", + "Chooses which system model the content should be started on. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Auto", "Auto Detect DMG/CGB" }, + { "Auto (SGB)", "Auto Detect DMG/SGB/CGB" }, + { "Game Boy", "Game Boy (DMG-CPU B)" }, + { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, + { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, + { "Game Boy Advance", NULL }, + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Auto" + }, + { + "sameboy_auto_sgb_model", + "System - Auto Detected SGB Model (Requires Restart)", + "Auto Detected SGB Model (Requires Restart)", + "Specifies which model of Super Game Boy hardware to emulate when SGB content is automatically detected. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Super Game Boy" + }, + { + "sameboy_rtc", + "System - Real Time Clock Emulation", + "Real Time Clock Emulation", + "Specifies how the emulation of the real-time clock feature used in certain Game Boy and Game Boy Color games should function.", + NULL, + "system", + { + { "sync to system clock", "Sync to System Clock" }, + { "accurate", "Accurate" }, + { NULL, NULL }, + }, + "sync to system clock" + }, + { + "sameboy_mono_palette", + "Video - GB Mono Palette", + "GB Mono Palette", + "Selects the color palette that should be used when playing Game Boy games.", + NULL, + "video", + { + { "greyscale", "Greyscale" }, + { "lime", "Lime (Game Boy)" }, + { "olive", "Olive (Game Boy Pocket)" }, + { "teal", "Teal (Game Boy Light)" }, + { NULL, NULL }, + }, + "greyscale" + }, + { + "sameboy_color_correction_mode", + "Video - GBC Color Correction", + "GBC Color Correction", + "Defines which type of color correction should be applied when playing Game Boy Color games.", + NULL, + "video", + { + { "emulate hardware", "Modern – Balanced" }, + { "accurate", "Modern – Accurate" }, + { "preserve brightness", "Modern – Boost Contrast" }, + { "reduce contrast", "Reduce Contrast" }, + { "correct curves", "Correct Color Curves" }, + { "harsh reality", "Harsh Reality (Low Contrast)" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "emulate hardware" + }, + { + "sameboy_light_temperature", + "Video - Ambient Light Temperature", + "Ambient Light Temperature", + "Simulates an ambient light's effect on non-backlit Game Boy screens, by setting a user-controlled color temperature. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + NULL, + "video", + { + { "1.0", "1000K (Warmest)" }, + { "0.9", "1550K" }, + { "0.8", "2100K" }, + { "0.7", "2650K" }, + { "0.6", "3200K" }, + { "0.5", "3750K" }, + { "0.4", "4300K" }, + { "0.3", "4850K" }, + { "0.2", "5400K" }, + { "0.1", "5950K" }, + { "0", "6500K (Neutral White)" }, + { "-0.1", "7050K" }, + { "-0.2", "7600K" }, + { "-0.3", "8150K" }, + { "-0.4", "8700K" }, + { "-0.5", "9250K" }, + { "-0.6", "9800K" }, + { "-0.7", "10350K" }, + { "-0.8", "10900K" }, + { "-0.9", "11450K" }, + { "-1.0", "12000K (Coolest)" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_border", + "Video - Display Border", + "Display Border", + "Defines when to display an on-screen border around the content.", + NULL, + "video", + { + { "always", "Always" }, + { "Super Game Boy only", "Only for Super Game Boy" }, + { "never", "Disabled" }, + { NULL, NULL }, + }, + "Super Game Boy only" + }, + { + "sameboy_high_pass_filter_mode", + "Audio - Highpass Filter", + "Highpass Filter", + "Applies a filter to the audio output, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + NULL, + "audio", + { + { "accurate", "Accurate" }, + { "remove dc offset", "Preserve Waveform" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "accurate" + }, + { + "sameboy_audio_interference", + "Audio - Interference Volume", + "Interference Volume", + "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers.", + NULL, + "audio", + { + { "0", "0%" }, + { "5", "5%" }, + { "10", "10%" }, + { "15", "15%" }, + { "20", "20%" }, + { "25", "25%" }, + { "30", "30%" }, + { "35", "35%" }, + { "40", "40%" }, + { "45", "45%" }, + { "50", "50%" }, + { "55", "55%" }, + { "60", "60%" }, + { "65", "65%" }, + { "70", "70%" }, + { "75", "75%" }, + { "80", "80%" }, + { "85", "85%" }, + { "90", "90%" }, + { "95", "95%" }, + { "100", "100%" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_rumble", + "Input - Rumble Mode", + "Rumble Mode", + "Defines which type of content should trigger rumble effects.", + NULL, + "input", + { + { "all games", "Always" }, + { "rumble-enabled games", "Only for rumble-enabled games" }, + { "never", "Never" }, + { NULL, NULL }, + }, + "rumble-enabled games" + }, + + /* Core options used in dual cart mode */ + + { + "sameboy_link", + "System - Link Cable Emulation", + "Link Cable Emulation", + "Enables the emulation of the link cable, allowing communication and exchange of data between two Game Boy systems.", + NULL, + "system", + { + { "enabled", "Enabled" }, + { "disabled", "Disabled" }, + { NULL, NULL }, + }, + "enabled" + }, + { + "sameboy_screen_layout", + "System - Screen Layout", + "Screen Layout", + "When emulating two systems at once, this option defines the respective position of the two screens.", + NULL, + "system", + { + { "top-down", "Top-Down" }, + { "left-right", "Left-Right" }, + { NULL, NULL }, + }, + "top-down" + }, + { + "sameboy_audio_output", + "System - Audio Output", + "Audio Output", + "Selects which of the two emulated Game Boy systems should output audio.", + NULL, + "system", + { + { "Game Boy #1", NULL }, + { "Game Boy #2", NULL }, + { NULL, NULL }, + }, + "Game Boy #1" + }, + { + "sameboy_model_1", + "System - Emulated Model for Game Boy #1 (Requires Restart)", + "Emulated Model for Game Boy #1 (Requires Restart)", + "Chooses which system model the content should be started on for Game Boy #1. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Auto", "Auto Detect DMG/CGB" }, + { "Auto (SGB)", "Auto Detect DMG/SGB/CGB" }, + { "Game Boy", "Game Boy (DMG-CPU B)" }, + { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, + { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, + { "Game Boy Advance", NULL }, + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Auto" + }, + { + "sameboy_auto_sgb_model_1", + "System - Auto Detected SGB Model for Game Boy #1 (Requires Restart)", + "Auto Detected SGB Model for Game Boy #1 (Requires Restart)", + "Specifies which model of Super Game Boy hardware to emulate when SGB content is automatically detected for Game Boy #1. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Super Game Boy" + }, + { + "sameboy_model_2", + "System - Emulated Model for Game Boy #2 (Requires Restart)", + "Emulated Model for Game Boy #2 (Requires Restart)", + "Chooses which system model the content should be started on for Game Boy #2. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Auto", "Auto Detect DMG/CGB" }, + { "Auto (SGB)", "Auto Detect DMG/SGB/CGB" }, + { "Game Boy", "Game Boy (DMG-CPU B)" }, + { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, + { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, + { "Game Boy Advance", NULL }, + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Auto" + }, + { + "sameboy_auto_sgb_model_2", + "System - Auto Detected SGB Model for Game Boy #2 (Requires Restart)", + "Auto Detected SGB Model for Game Boy #2 (Requires Restart)", + "Specifies which model of Super Game Boy hardware to emulate when SGB content is automatically detected for Game Boy #2. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Super Game Boy" + }, + { + "sameboy_mono_palette_1", + "Video - GB Mono Palette for Game Boy #1", + "GB Mono Palette for Game Boy #1", + "Selects the color palette that should be used when playing Game Boy games on Game Boy #1.", + NULL, + "video", + { + { "greyscale", "Greyscale" }, + { "lime", "Lime (Game Boy)" }, + { "olive", "Olive (Game Boy Pocket)" }, + { "teal", "Teal (Game Boy Light)" }, + { NULL, NULL }, + }, + "greyscale" + }, + { + "sameboy_mono_palette_2", + "Video - GB Mono Palette for Game Boy #2", + "GB Mono Palette for Game Boy #2", + "Selects the color palette that should be used when playing Game Boy games on Game Boy #2.", + NULL, + "video", + { + { "greyscale", "Greyscale" }, + { "lime", "Lime (Game Boy)" }, + { "olive", "Olive (Game Boy Pocket)" }, + { "teal", "Teal (Game Boy Light)" }, + { NULL, NULL }, + }, + "greyscale" + }, + { + "sameboy_color_correction_mode_1", + "Video - GBC Color Correction for Game Boy #1", + "GBC Color Correction for Game Boy #1", + "Defines which type of color correction should be applied when playing Game Boy Color games on Game Boy #1.", + NULL, + "video", + { + { "emulate hardware", "Modern – Balanced" }, + { "accurate", "Modern – Accurate" }, + { "preserve brightness", "Modern – Boost Contrast" }, + { "reduce contrast", "Reduce Contrast" }, + { "correct curves", "Correct Color Curves" }, + { "harsh reality", "Harsh Reality (Low Contrast)" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "emulate hardware" + }, + { + "sameboy_color_correction_mode_2", + "Video - GBC Color Correction for Game Boy #2", + "GBC Color Correction for Game Boy #2", + "Defines which type of color correction should be applied when playing Game Boy Color games on Game Boy #2.", + NULL, + "video", + { + { "emulate hardware", "Modern – Balanced" }, + { "accurate", "Modern – Accurate" }, + { "preserve brightness", "Modern – Boost Contrast" }, + { "reduce contrast", "Reduce Contrast" }, + { "correct curves", "Correct Color Curves" }, + { "harsh reality", "Harsh Reality (Low Contrast)" }, + { "off", "Disabled" }, + { NULL, NULL }, + }, + "emulate hardware" + }, + { + "sameboy_light_temperature_1", + "Video - Ambient Light Temperature for Game Boy #1", + "Ambient Light Temperature for Game Boy #1", + "Simulates an ambient light's effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #1. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + NULL, + "video", + { + { "1.0", "1000K (Warmest)" }, + { "0.9", "1550K" }, + { "0.8", "2100K" }, + { "0.7", "2650K" }, + { "0.6", "3200K" }, + { "0.5", "3750K" }, + { "0.4", "4300K" }, + { "0.3", "4850K" }, + { "0.2", "5400K" }, + { "0.1", "5950K" }, + { "0", "6500K (Neutral White)" }, + { "-0.1", "7050K" }, + { "-0.2", "7600K" }, + { "-0.3", "8150K" }, + { "-0.4", "8700K" }, + { "-0.5", "9250K" }, + { "-0.6", "9800K" }, + { "-0.7", "10350K" }, + { "-0.8", "10900K" }, + { "-0.9", "11450K" }, + { "-1.0", "12000K (Coolest)" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_light_temperature_2", + "Video - Ambient Light Temperature for Game Boy #2", + "Ambient Light Temperature for Game Boy #2", + "Simulates an ambient light's effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #2. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + NULL, + "video", + { + { "1.0", "1000K (Warmest)" }, + { "0.9", "1550K" }, + { "0.8", "2100K" }, + { "0.7", "2650K" }, + { "0.6", "3200K" }, + { "0.5", "3750K" }, + { "0.4", "4300K" }, + { "0.3", "4850K" }, + { "0.2", "5400K" }, + { "0.1", "5950K" }, + { "0", "6500K (Neutral White)" }, + { "-0.1", "7050K" }, + { "-0.2", "7600K" }, + { "-0.3", "8150K" }, + { "-0.4", "8700K" }, + { "-0.5", "9250K" }, + { "-0.6", "9800K" }, + { "-0.7", "10350K" }, + { "-0.8", "10900K" }, + { "-0.9", "11450K" }, + { "-1.0", "12000K (Coolest)" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_high_pass_filter_mode_1", + "Audio - Highpass Filter for Game Boy #1", + "Highpass Filter for Game Boy #1", + "Applies a filter to the audio output for Game Boy #1, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + NULL, + "audio", + { + { "accurate", "Accurate" }, + { "remove dc offset", "Preserve Waveform" }, + { "off", "disabled" }, + { NULL, NULL }, + }, + "accurate" + }, + { + "sameboy_high_pass_filter_mode_2", + "Audio - Highpass Filter for Game Boy #2", + "Highpass Filter for Game Boy #2", + "Applies a filter to the audio output for Game Boy #2, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + NULL, + "audio", + { + { "accurate", "Accurate" }, + { "remove dc offset", "Preserve Waveform" }, + { "off", "disabled" }, + { NULL, NULL }, + }, + "accurate" + }, + { + "sameboy_audio_interference_1", + "Audio - Interference Volume for Game Boy #1", + "Interference Volume for Game Boy #1", + "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers on Game Boy #1.", + NULL, + "audio", + { + { "0", "0%" }, + { "5", "5%" }, + { "10", "10%" }, + { "15", "15%" }, + { "20", "20%" }, + { "25", "25%" }, + { "30", "30%" }, + { "35", "35%" }, + { "40", "40%" }, + { "45", "45%" }, + { "50", "50%" }, + { "55", "55%" }, + { "60", "60%" }, + { "65", "65%" }, + { "70", "70%" }, + { "75", "75%" }, + { "80", "80%" }, + { "85", "85%" }, + { "90", "90%" }, + { "95", "95%" }, + { "100", "100%" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_audio_interference_2", + "Audio - Interference Volume for Game Boy #2", + "Interference Volume for Game Boy #2", + "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers on Game Boy #2.", + NULL, + "audio", + { + { "0", "0%" }, + { "5", "5%" }, + { "10", "10%" }, + { "15", "15%" }, + { "20", "20%" }, + { "25", "25%" }, + { "30", "30%" }, + { "35", "35%" }, + { "40", "40%" }, + { "45", "45%" }, + { "50", "50%" }, + { "55", "55%" }, + { "60", "60%" }, + { "65", "65%" }, + { "70", "70%" }, + { "75", "75%" }, + { "80", "80%" }, + { "85", "85%" }, + { "90", "90%" }, + { "95", "95%" }, + { "100", "100%" }, + { NULL, NULL }, + }, + "0" + }, + { + "sameboy_rumble_1", + "Input - Rumble Mode for Game Boy #1", + "Rumble Mode for Game Boy #1", + "Defines which type of content should trigger rumble effects when played on Game Boy #1.", + NULL, + "input", + { + { "all games", "Always" }, + { "rumble-enabled games", "Only for rumble-enabled games" }, + { "never", "Never" }, + { NULL, NULL }, + }, + "rumble-enabled games" + }, + { + "sameboy_rumble_2", + "Input - Rumble Mode for Game Boy #2", + "Rumble Mode for Game Boy #2", + "Defines which type of content should trigger rumble effects when played on Game Boy #2.", + NULL, + "input", + { + { "all games", "Always" }, + { "rumble-enabled games", "Only for rumble-enabled games" }, + { "never", "Never" }, + { NULL, NULL }, + }, + "rumble-enabled games" + }, + + { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL }, +}; + +struct retro_core_options_v2 options_us = { + option_cats_us, + option_defs_us +}; + +/* + ******************************** + * Language Mapping + ******************************** + */ + +#ifndef HAVE_NO_LANGEXTRA +struct retro_core_options_v2 *options_intl[RETRO_LANGUAGE_LAST] = { + &options_us, /* RETRO_LANGUAGE_ENGLISH */ + NULL, /* RETRO_LANGUAGE_JAPANESE */ + NULL, /* RETRO_LANGUAGE_FRENCH */ + NULL, /* RETRO_LANGUAGE_SPANISH */ + NULL, /* RETRO_LANGUAGE_GERMAN */ + NULL, /* RETRO_LANGUAGE_ITALIAN */ + NULL, /* RETRO_LANGUAGE_DUTCH */ + NULL, /* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */ + NULL, /* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */ + NULL, /* RETRO_LANGUAGE_RUSSIAN */ + NULL, /* RETRO_LANGUAGE_KOREAN */ + NULL, /* RETRO_LANGUAGE_CHINESE_TRADITIONAL */ + NULL, /* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */ + NULL, /* RETRO_LANGUAGE_ESPERANTO */ + NULL, /* RETRO_LANGUAGE_POLISH */ + NULL, /* RETRO_LANGUAGE_VIETNAMESE */ + NULL, /* RETRO_LANGUAGE_ARABIC */ + NULL, /* RETRO_LANGUAGE_GREEK */ + NULL, /* RETRO_LANGUAGE_TURKISH */ + NULL, /* RETRO_LANGUAGE_SLOVAK */ + NULL, /* RETRO_LANGUAGE_PERSIAN */ + NULL, /* RETRO_LANGUAGE_HEBREW */ + NULL, /* RETRO_LANGUAGE_ASTURIAN */ + NULL, /* RETRO_LANGUAGE_FINNISH */ +}; +#endif + +/* + ******************************** + * Functions + ******************************** + */ + +/* Handles configuration/setting of core options. + * Should be called as early as possible - ideally inside + * retro_set_environment(), and no later than retro_load_game() + * > We place the function body in the header to avoid the + * necessity of adding more .c files (i.e. want this to + * be as painless as possible for core devs) + */ + +static INLINE void libretro_set_core_options(retro_environment_t environ_cb, + bool *categories_supported) +{ + unsigned version = 0; +#ifndef HAVE_NO_LANGEXTRA + unsigned language = 0; +#endif + + if (!environ_cb || !categories_supported) return; + + *categories_supported = false; + + if (!environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version)) version = 0; + + if (version >= 2) { +#ifndef HAVE_NO_LANGEXTRA + struct retro_core_options_v2_intl core_options_intl; + + core_options_intl.us = &options_us; + core_options_intl.local = NULL; + + if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) && + (language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH)) + core_options_intl.local = options_intl[language]; + + *categories_supported = environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL, + &core_options_intl); +#else + *categories_supported = environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, + &options_us); +#endif + } + else { + size_t i, j; + size_t option_index = 0; + size_t num_options = 0; + struct retro_core_option_definition + *option_v1_defs_us = NULL; +#ifndef HAVE_NO_LANGEXTRA + size_t num_options_intl = 0; + struct retro_core_option_v2_definition + *option_defs_intl = NULL; + struct retro_core_option_definition + *option_v1_defs_intl = NULL; + struct retro_core_options_intl + core_options_v1_intl; +#endif + struct retro_variable *variables = NULL; + char **values_buf = NULL; + + /* Determine total number of options */ + while (true) { + if (option_defs_us[num_options].key) num_options++; + else break; + } + + if (version >= 1) { + /* Allocate US array */ + option_v1_defs_us = (struct retro_core_option_definition *) calloc(num_options + 1, sizeof(struct retro_core_option_definition)); + + /* Copy parameters from option_defs_us array */ + for (i = 0; i < num_options; i++) { + struct retro_core_option_v2_definition *option_def_us = &option_defs_us[i]; + struct retro_core_option_value *option_values = option_def_us->values; + struct retro_core_option_definition *option_v1_def_us = &option_v1_defs_us[i]; + struct retro_core_option_value *option_v1_values = option_v1_def_us->values; + + option_v1_def_us->key = option_def_us->key; + option_v1_def_us->desc = option_def_us->desc; + option_v1_def_us->info = option_def_us->info; + option_v1_def_us->default_value = option_def_us->default_value; + + /* Values must be copied individually... */ + while (option_values->value) { + option_v1_values->value = option_values->value; + option_v1_values->label = option_values->label; + + option_values++; + option_v1_values++; + } + } + +#ifndef HAVE_NO_LANGEXTRA + if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) && + (language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH) && + options_intl[language]) + option_defs_intl = options_intl[language]->definitions; + + if (option_defs_intl) { + /* Determine number of intl options */ + while (true) { + if (option_defs_intl[num_options_intl].key) num_options_intl++; + else break; + } + + /* Allocate intl array */ + option_v1_defs_intl = (struct retro_core_option_definition *) + calloc(num_options_intl + 1, sizeof(struct retro_core_option_definition)); + + /* Copy parameters from option_defs_intl array */ + for (i = 0; i < num_options_intl; i++) { + struct retro_core_option_v2_definition *option_def_intl = &option_defs_intl[i]; + struct retro_core_option_value *option_values = option_def_intl->values; + struct retro_core_option_definition *option_v1_def_intl = &option_v1_defs_intl[i]; + struct retro_core_option_value *option_v1_values = option_v1_def_intl->values; + + option_v1_def_intl->key = option_def_intl->key; + option_v1_def_intl->desc = option_def_intl->desc; + option_v1_def_intl->info = option_def_intl->info; + option_v1_def_intl->default_value = option_def_intl->default_value; + + /* Values must be copied individually... */ + while (option_values->value) { + option_v1_values->value = option_values->value; + option_v1_values->label = option_values->label; + + option_values++; + option_v1_values++; + } + } + } + + core_options_v1_intl.us = option_v1_defs_us; + core_options_v1_intl.local = option_v1_defs_intl; + + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_v1_intl); +#else + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS, option_v1_defs_us); +#endif + } + else { + /* Allocate arrays */ + variables = (struct retro_variable *)calloc(num_options + 1, + sizeof(struct retro_variable)); + values_buf = (char **)calloc(num_options, sizeof(char *)); + + if (!variables || !values_buf) goto error; + + /* Copy parameters from option_defs_us array */ + for (i = 0; i < num_options; i++) { + const char *key = option_defs_us[i].key; + const char *desc = option_defs_us[i].desc; + const char *default_value = option_defs_us[i].default_value; + struct retro_core_option_value *values = option_defs_us[i].values; + size_t buf_len = 3; + size_t default_index = 0; + + values_buf[i] = NULL; + + if (desc) { + size_t num_values = 0; + + /* Determine number of values */ + while (true) { + if (values[num_values].value) { + /* Check if this is the default value */ + if (default_value) { + if (strcmp(values[num_values].value, default_value) == 0) default_index = num_values; + + buf_len += strlen(values[num_values].value); + num_values++; + } + } + else break; + } + + /* Build values string */ + if (num_values > 0) { + buf_len += num_values - 1; + buf_len += strlen(desc); + + values_buf[i] = (char *)calloc(buf_len, sizeof(char)); + if (!values_buf[i]) goto error; + + strcpy(values_buf[i], desc); + strcat(values_buf[i], "; "); + + /* Default value goes first */ + strcat(values_buf[i], values[default_index].value); + + /* Add remaining values */ + for (j = 0; j < num_values; j++) { + if (j != default_index) { + strcat(values_buf[i], "|"); + strcat(values_buf[i], values[j].value); + } + } + } + } + + variables[option_index].key = key; + variables[option_index].value = values_buf[i]; + option_index++; + } + + /* Set variables */ + environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables); + } + +error: + /* Clean up */ + + if (option_v1_defs_us) { + free(option_v1_defs_us); + option_v1_defs_us = NULL; + } + +#ifndef HAVE_NO_LANGEXTRA + if (option_v1_defs_intl) { + free(option_v1_defs_intl); + option_v1_defs_intl = NULL; + } +#endif + + if (values_buf) { + for (i = 0; i < num_options; i++) { + if (values_buf[i]) { + free(values_buf[i]); + values_buf[i] = NULL; + } + } + + free(values_buf); + values_buf = NULL; + } + + if (variables) { + free(variables); + variables = NULL; + } + } +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/SameBoy-old/libretro/link.T b/thirdparty/SameBoy-old/libretro/link.T new file mode 100644 index 000000000..b0c262db9 --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/link.T @@ -0,0 +1,5 @@ +{ + global: retro_*; + local: *; +}; + diff --git a/thirdparty/SameBoy-old/libretro/retro_inline.h b/thirdparty/SameBoy-old/libretro/retro_inline.h new file mode 100644 index 000000000..14c038ccd --- /dev/null +++ b/thirdparty/SameBoy-old/libretro/retro_inline.h @@ -0,0 +1,39 @@ +/* Copyright (C) 2010-2020 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (retro_inline.h). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __LIBRETRO_SDK_INLINE_H +#define __LIBRETRO_SDK_INLINE_H + +#ifndef INLINE + +#if defined(_WIN32) || defined(__INTEL_COMPILER) +#define INLINE __inline +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define INLINE inline +#elif defined(__GNUC__) +#define INLINE __inline__ +#else +#define INLINE +#endif + +#endif +#endif diff --git a/thirdparty/SameBoy-old/version.mk b/thirdparty/SameBoy-old/version.mk new file mode 100644 index 000000000..ee8731d3e --- /dev/null +++ b/thirdparty/SameBoy-old/version.mk @@ -0,0 +1 @@ +VERSION := 0.15.4 \ No newline at end of file diff --git a/thirdparty/SameBoy/.github/FUNDING.yml b/thirdparty/SameBoy/.github/FUNDING.yml new file mode 100644 index 000000000..a4c3a1bbd --- /dev/null +++ b/thirdparty/SameBoy/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: LIJI32 diff --git a/thirdparty/SameBoy/.github/actions/install_deps.sh b/thirdparty/SameBoy/.github/actions/install_deps.sh index 1c9749efc..52c66d96f 100755 --- a/thirdparty/SameBoy/.github/actions/install_deps.sh +++ b/thirdparty/SameBoy/.github/actions/install_deps.sh @@ -4,7 +4,7 @@ case `echo $1 | cut -d '-' -f 1` in sudo apt-get install -yq bison libpng-dev pkg-config libsdl2-dev ( cd `mktemp -d` - curl -L https://github.com/rednex/rgbds/archive/v0.4.0.zip > rgbds.zip + curl -L https://github.com/rednex/rgbds/archive/v0.6.0.zip > rgbds.zip unzip rgbds.zip cd rgbds-* make -sj diff --git a/thirdparty/SameBoy/.github/actions/sanity_tests.sh b/thirdparty/SameBoy/.github/actions/sanity_tests.sh index 13b5e39b1..1d8b33e2c 100755 --- a/thirdparty/SameBoy/.github/actions/sanity_tests.sh +++ b/thirdparty/SameBoy/.github/actions/sanity_tests.sh @@ -16,10 +16,10 @@ set +e FAILED_TESTS=` shasum .github/actions/*.bmp | grep -E -v \(\ -5283564df0cf5bb78a7a90aff026c1a4692fd39e\ \ .github/actions/cgb-acid2.bmp\|\ +64c3fd9a5fe9aee40fe15f3371029c0d2f20f5bc\ \ .github/actions/cgb-acid2.bmp\|\ dbcc438dcea13b5d1b80c5cd06bda2592cc5d9e0\ \ .github/actions/cgb_sound.bmp\|\ 0caadf9634e40247ae9c15ff71992e8f77bbf89e\ \ .github/actions/dmg-acid2.bmp\|\ -a732077f98f43d9231453b1764d9f797a836924d\ \ .github/actions/dmg-mode-acid2.bmp\|\ +fbdb5e342bfdd2edda3ea5601d35d0ca60d18034\ \ .github/actions/dmg-mode-acid2.bmp\|\ c9e944b7e01078bdeba1819bc2fa9372b111f52d\ \ .github/actions/dmg_sound-2.bmp\|\ f0172cc91867d3343fbd113a2bb98100074be0de\ \ .github/actions/oam_bug-2.bmp\ \)` diff --git a/thirdparty/SameBoy/BESS.md b/thirdparty/SameBoy/BESS.md index e040d903b..1807943c6 100644 --- a/thirdparty/SameBoy/BESS.md +++ b/thirdparty/SameBoy/BESS.md @@ -89,7 +89,7 @@ The values of memory-mapped registers should be written 'as-is' to memory as if * Unused register bits have Don't-Care values which should be ignored * If the model is CGB or newer, the value of KEY0 (FF4C) must be valid as it determines DMG mode * Bit 2 determines DMG mode. A value of 0x04 usually denotes DMG mode, while a value of `0x80` usually denotes CGB mode. -* Sprite priority is derived from KEY0 (FF4C) instead of OPRI (FF6C) because OPRI can be modified after booting, but only the value of OPRI during boot ROM execution takes effect +* Object priority is derived from KEY0 (FF4C) instead of OPRI (FF6C) because OPRI can be modified after booting, but only the value of OPRI during boot ROM execution takes effect * If a register doesn't exist on the emulated model (For example, KEY0 (FF4C) on a DMG), its value should be ignored. * BANK (FF50) should be 0 if the boot ROM is still mapped, and 1 otherwise, and must be valid. * Implementations should not start a serial transfer when writing the value of SB @@ -176,6 +176,48 @@ The length of this block is 0x11 bytes long and it follows the following structu | 0x0E | Scheduled alarm time days (16-bit) | | 0x10 | Alarm enabled flag (8-bits, either 0 or 1) | +#### TPP1 block +The TPP1 block uses the `'TPP1'` identifier, and is an optional block that is used while emulating a TPP1 cartridge to store RTC information. This block can be omitted if the ROM header does not specify the inclusion of a RTC. + +The length of this block is 0x11 bytes long and it follows the following structure: + +| Offset | Content | +|--------|-------------------------------------------------------| +| 0x00 | UNIX timestamp at the time of the save state (64-bit) | +| 0x08 | The current RTC data (4 bytes) | +| 0x0C | The latched RTC data (4 bytes) | +| 0x10 | The value of the MR4 register (8-bits) | + + +#### MBC7 block +The MBC7 block uses the `'MBC7'` identifier, and is an optional block that is used while emulating an MBC7 cartridge to store the EEPROM communication state and motion control state. + +The length of this block is 0xA bytes long and it follows the following structure: + +| Offset | Content | +|--------|-------------------------------------------------------| +| 0x00 | Flags (8-bits) | +| 0x01 | Argument bits left (8-bits) | +| 0x02 | Current EEPROM command (16-bits) | +| 0x04 | Pending bits to read (16-bits) | +| 0x06 | Latched gyro X value (16-bits) | +| 0x08 | Latched gyro Y value (16-bits) | + +The meaning of the individual bits in flags are: + * Bit 0: Latch ready; set after writing `0x55` to `0xAX0X` and reset after writing `0xAA` to `0xAX1X` + * Bit 1: EEPROM DO line + * Bit 2: EEPROM DI line + * Bit 3: EEPROM CLK line + * Bit 4: EEPROM CS line + * Bit 5: EEPROM write enable; set after an `EWEN` command, reset after an `EWDS` command + * Bits 6-7: Unused. + +The current EEPROM command field has bits pushed to its LSB first, padded with zeros. For example, if the ROM clocked a single `1` bit, this field should contain `0b1`; if the ROM later clocks a `0` bit, this field should contain `0b10`. + +If the currently transmitted command has an argument, the "Argument bits left" field should contain the number argument bits remaining. Otherwise, it should contain 0. + +The "Pending bits to read" field contains the pending bits waiting to be shifted into the DO signal, MSB first, padded with ones. + #### SGB block The SGB block uses the `'SGB '` identifier, and is an optional block that is only used while emulating an SGB or SGB2 *and* SGB commands enabled. Implementations must not save this block on other models or when SGB commands are disabled, and should assume SGB commands are disabled if this block is missing. diff --git a/thirdparty/SameBoy/BootROMs/SameBoyLogo.png b/thirdparty/SameBoy/BootROMs/SameBoyLogo.png index c7cfc087dbf7a26a2969fc463d116b9e28eb58ac..ad1a760c02e47b9cb802373b3b5c4b035b0968d0 100644 GIT binary patch delta 427 zcmV;c0aX6q1Kk6VJb#QyL_t(2&yCU{Zd^eSgyC8Z7}z9yj?!!G0UY2b!#&Eo+E@mG z87nf*7249QLVENEJlhH|NTCKFs%lB!^kp7C4kJ`jg`vt5@B~BJ8EvXAX(v@vg^+Ov z+yN?(ma^0dQg(pG1-Jlb18T}ch2NpJR0uhjwQZNR(VZ*LXn*gjsV+x_shyHiNzobN z1#y;zq#aeJ)(7xsBo8j=0C28WSWm0e3L%lsN3(2N4q{>pA-Yv4etqNHo4q$YtK)3K=vFv3Tq`_z*Ss2pM>1bg= zd-?$D0Ch>yiGT3kq7D3#cH6$&?U5Ezi;|Kgj~$|oeJ^PtS%_;$KHh-^Fx%KE*@o1H z_G?Icuk!$JK(^ue3Aj&*1DO2R+OFySUtp-BIwkolKc`B1_gQCq-5%QOmBQ=34glPT z%JS|}r$ajA378){Egw4Jy^T*00{Q_O)4NXW=hiJ8rX<5zjrG3tY5V%Ax3m5)e*y8` VRn9UgABqv&c1I&`dp zB6F{x05ZBr`2CFIphJclW-MEe?;8azM}aiyf<9g(|~|2H!VibAEqg*XK zQ3lQsjN*%!4hpQ&S3sG}^6VxHz^3k}8BhsS(Jj@7f)Dc4Cz~FVo7>Rf2rx_^Q}w%= z4I_(c^4B(0xOv*U`OvMduWE)kbmkB!&0V|W(2TMG9!bm*Zff?W`*Zi^51kAK6c3Tb zQ-1IT;j{vM0e{SBDn!u~O32V{^YirP=K~A~#fBD}H?nKUF%Iq4y9kbaYQ6(34paiP zDNr^e8o<%(0$d4jOWOm$j=5L>FZ$J|Bc1pQc=KLvfL`!fZ&qn_HC(2BxEwLy68i$M z{Emm-2^1Q}W)>ThwVqSg%vm{VegMVt(gFm~X995y<|Zf;86!XU`$=!6=YQ&Hl>c47 X@!eI<`B+HV00000NkvXXu0mjfE=$N| diff --git a/thirdparty/SameBoy/BootROMs/cgb0_boot.asm b/thirdparty/SameBoy/BootROMs/cgb0_boot.asm new file mode 100644 index 000000000..d49166d89 --- /dev/null +++ b/thirdparty/SameBoy/BootROMs/cgb0_boot.asm @@ -0,0 +1,2 @@ +CGB0 EQU 1 +include "cgb_boot.asm" \ No newline at end of file diff --git a/thirdparty/SameBoy/BootROMs/cgb_boot.asm b/thirdparty/SameBoy/BootROMs/cgb_boot.asm index 0bc2b179c..f05c7fb15 100644 --- a/thirdparty/SameBoy/BootROMs/cgb_boot.asm +++ b/thirdparty/SameBoy/BootROMs/cgb_boot.asm @@ -1,5 +1,7 @@ ; SameBoy CGB bootstrap ROM -; Todo: use friendly names for HW registers instead of magic numbers + +INCLUDE "hardware.inc" + SECTION "BootCode", ROM0[$0] Start: ; Init stack pointer @@ -7,13 +9,6 @@ Start: ; Clear memory VRAM call ClearMemoryPage8000 - ld a, 2 - ld c, $70 - ld [c], a -; Clear RAM Bank 2 (Like the original boot ROM) - ld h, $D0 - call ClearMemoryPage - ld [c], a ; Clear OAM ld h, $fe @@ -23,6 +18,7 @@ Start: dec c jr nz, .clearOAMLoop +IF !DEF(CGB0) ; Init waveform ld c, $10 ld hl, $FF30 @@ -31,24 +27,26 @@ Start: cpl dec c jr nz, .waveformLoop +ENDC ; Clear chosen input palette ldh [InputPalette], a ; Clear title checksum ldh [TitleChecksum], a +; Init Audio ld a, $80 - ldh [$26], a - ldh [$11], a + ldh [rNR52], a + ldh [rNR11], a ld a, $f3 - ldh [$12], a - ldh [$25], a + ldh [rNR12], a + ldh [rNR51], a ld a, $77 - ldh [$24], a + ldh [rNR50], a ; Init BG palette ld a, $fc - ldh [$47], a + ldh [rBGP], a ; Load logo from ROM. ; A nibble represents a 4-pixels line, 2 bytes represent a 4x4 tile, scaled to 8x8. @@ -70,14 +68,14 @@ Start: ; Clear the second VRAM bank ld a, 1 - ldh [$4F], a + ldh [rVBK], a call ClearMemoryPage8000 call LoadTileset ld b, 3 IF DEF(FAST) xor a - ldh [$4F], a + ldh [rVBK], a ELSE ; Load Tilemap ld hl, $98C2 @@ -127,11 +125,11 @@ ELSE push af ; Switch to second VRAM Bank ld a, 1 - ldh [$4F], a + ldh [rVBK], a ld [hl], 8 ; Switch to back first VRAM Bank xor a - ldh [$4F], a + ldh [rVBK], a pop af ldi [hl], a ret @@ -185,7 +183,7 @@ ENDC ; Turn on LCD ld a, $91 - ldh [$40], a + ldh [rLCDC], a IF !DEF(FAST) call DoIntroAnimation @@ -218,12 +216,15 @@ ENDC IF DEF(AGB) ld b, 1 ENDC + jr BootGame -; Will be filled with NOPs +HDMAData: + db $D0, $00, $98, $A0, $12 + db $D0, $00, $80, $00, $40 SECTION "BootGame", ROM0[$fe] BootGame: - ldh [$50], a + ldh [rBANK], a ; unmap boot ROM SECTION "MoreStuff", ROM0[$200] ; Game Palettes Data @@ -328,7 +329,7 @@ FirstChecksumWithDuplicate: ChecksumsEnd: PalettePerChecksum: -palette_index: MACRO ; palette, flags +MACRO palette_index ; palette, flags db ((\1)) | (\2) ; | $80 means game requires DMG boot tilemap ENDM palette_index 0, 0 ; Default Palette @@ -432,10 +433,10 @@ Dups4thLetterArray: ; We assume the last three arrays fit in the same $100 byte page! PaletteCombinations: -palette_comb: MACRO ; Obj0, Obj1, Bg +MACRO palette_comb ; Obj0, Obj1, Bg db (\1) * 8, (\2) * 8, (\3) *8 ENDM -raw_palette_comb: MACRO ; Obj0, Obj1, Bg +MACRO raw_palette_comb ; Obj0, Obj1, Bg db (\1) * 2, (\2) * 2, (\3) * 2 ENDM palette_comb 4, 4, 29 @@ -564,7 +565,12 @@ AnimationColors: dw $017D ; Orange dw $241D ; Red dw $6D38 ; Purple - dw $7102 ; Blue +IF DEF(AGB) + dw $6D60 ; Blue +ELSE + dw $5500 ; Blue +ENDC + AnimationColorsEnd: ; Helper Functions @@ -608,9 +614,9 @@ WaitBFrames: ret PlaySound: - ldh [$13], a + ldh [rNR13], a ld a, $87 - ldh [$14], a + ldh [rNR14], a ret ClearMemoryPage8000: @@ -761,7 +767,7 @@ ReadTrademarkSymbol: DoIntroAnimation: ; Animate the intro ld a, 1 - ldh [$4F], a + ldh [rVBK], a ld d, 26 .animationLoop ld b, 2 @@ -833,8 +839,6 @@ IF !DEF(FAST) res 2, b .redNotMaxed - ; add de, bc - ; ld [hli], de ld a, e add c ld [hli], a @@ -852,12 +856,19 @@ IF !DEF(FAST) dec b jr nz, .fadeLoop ENDC - ld a, 1 + ld a, 2 + ldh [rSVBK], a + ; Clear RAM Bank 2 (Like the original boot ROM) + ld hl, $D000 + call ClearMemoryPage + inc a call ClearVRAMViaHDMA call _ClearVRAMViaHDMA call ClearVRAMViaHDMA ; A = $40, so it's bank 0 - ld a, $ff - ldh [$00], a + xor a + ldh [rSVBK], a + cpl + ldh [rJOYP], a ; Final values for CGB mode ld d, a @@ -869,7 +880,7 @@ ENDC call z, EmulateDMG bit 7, a - ldh [$4C], a + ldh [rKEY0], a ; write CGB compatibility byte, CGB mode ldh a, [TitleChecksum] ld b, a @@ -899,7 +910,7 @@ ENDC .emulateDMGForCGBGame call EmulateDMG - ldh [$4C], a + ldh [rKEY0], a ; write $04, DMG emulation mode ld a, $1 ret @@ -913,7 +924,7 @@ GetKeyComboPalette: EmulateDMG: ld a, 1 - ldh [$6C], a ; DMG Emulation + ldh [rOPRI], a ; DMG Emulation sprite priority call GetPaletteIndex bit 7, a call nz, LoadDMGTilemap @@ -1050,7 +1061,7 @@ LoadPalettesFromHRAM: LoadBGPalettes: ld e, 0 - ld c, $68 + ld c, LOW(rBGPI) LoadPalettes: ld a, $80 @@ -1065,9 +1076,10 @@ LoadPalettes: ret ClearVRAMViaHDMA: - ldh [$4F], a + ldh [rVBK], a ld hl, HDMAData _ClearVRAMViaHDMA: + call WaitFrame ; Wait for vblank ld c, $51 ld b, 5 .loop @@ -1081,8 +1093,8 @@ _ClearVRAMViaHDMA: ; clobbers AF and HL GetInputPaletteIndex: ld a, $20 ; Select directions - ldh [$00], a - ldh a, [$00] + ldh [rJOYP], a + ldh a, [rJOYP] cpl and $F ret z ; No direction keys pressed, no palette @@ -1096,8 +1108,8 @@ GetInputPaletteIndex: ; c = 1: Right, 2: Left, 3: Up, 4: Down ld a, $10 ; Select buttons - ldh [$00], a - ldh a, [$00] + ldh [rJOYP], a + ldh a, [rJOYP] cpl rla rla @@ -1221,10 +1233,6 @@ LoadDMGTilemap: pop af ret -HDMAData: - db $88, $00, $98, $A0, $12 - db $88, $00, $80, $00, $40 - BootEnd: IF BootEnd > $900 FAIL "BootROM overflowed: {BootEnd}" diff --git a/thirdparty/SameBoy/BootROMs/dmg_boot.asm b/thirdparty/SameBoy/BootROMs/dmg_boot.asm index 97a12e7cd..1d282744b 100644 --- a/thirdparty/SameBoy/BootROMs/dmg_boot.asm +++ b/thirdparty/SameBoy/BootROMs/dmg_boot.asm @@ -1,5 +1,7 @@ ; SameBoy DMG bootstrap ROM -; Todo: use friendly names for HW registers instead of magic numbers + +INCLUDE "hardware.inc" + SECTION "BootCode", ROM0[$0] Start: ; Init stack pointer @@ -15,17 +17,17 @@ Start: ; Init Audio ld a, $80 - ldh [$26], a - ldh [$11], a + ldh [rNR52], a + ldh [rNR11], a ld a, $f3 - ldh [$12], a - ldh [$25], a + ldh [rNR12], a + ldh [rNR51], a ld a, $77 - ldh [$24], a + ldh [rNR50], a ; Init BG palette ld a, $54 - ldh [$47], a + ldh [rBGP], a ; Load logo from ROM. ; A nibble represents a 4-pixels line, 2 bytes represent a 4x4 tile, scaled to 8x8. @@ -70,11 +72,11 @@ Start: .tilemapDone ld a, 30 - ldh [$ff42], a + ldh [rSCY], a ; Turn on LCD ld a, $91 - ldh [$40], a + ldh [rLCDC], a ld d, (-119) & $FF ld c, 15 @@ -84,7 +86,7 @@ Start: ld a, d sra a sra a - ldh [$ff42], a + ldh [rSCY], a ld a, d add c ld d, a @@ -92,12 +94,12 @@ Start: cp 8 jr nz, .noPaletteChange ld a, $A8 - ldh [$47], a + ldh [rBGP], a .noPaletteChange dec c jr nz, .animate ld a, $fc - ldh [$47], a + ldh [rBGP], a ; Play first sound ld a, $83 @@ -115,7 +117,11 @@ Start: call WaitBFrames ; Set registers to match the original DMG boot +IF DEF(MGB) + ld hl, $FFB0 +ELSE ld hl, $01B0 +ENDC push hl pop af ld hl, $014D @@ -163,9 +169,9 @@ WaitBFrames: ret PlaySound: - ldh [$13], a + ldh [rNR13], a ld a, $87 - ldh [$14], a + ldh [rNR14], a ret @@ -174,4 +180,4 @@ db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c SECTION "BootGame", ROM0[$fe] BootGame: - ldh [$50], a \ No newline at end of file + ldh [rBANK], a ; unmap boot ROM \ No newline at end of file diff --git a/thirdparty/SameBoy/BootROMs/hardware.inc b/thirdparty/SameBoy/BootROMs/hardware.inc new file mode 100644 index 000000000..882afc18e --- /dev/null +++ b/thirdparty/SameBoy/BootROMs/hardware.inc @@ -0,0 +1,988 @@ +;* +;* Gameboy Hardware definitions +;* +;* Based on Jones' hardware.inc +;* And based on Carsten Sorensen's ideas. +;* +;* Rev 1.1 - 15-Jul-97 : Added define check +;* Rev 1.2 - 18-Jul-97 : Added revision check macro +;* Rev 1.3 - 19-Jul-97 : Modified for RGBASM V1.05 +;* Rev 1.4 - 27-Jul-97 : Modified for new subroutine prefixes +;* Rev 1.5 - 15-Aug-97 : Added _HRAM, PAD, CART defines +;* : and Nintendo Logo +;* Rev 1.6 - 30-Nov-97 : Added rDIV, rTIMA, rTMA, & rTAC +;* Rev 1.7 - 31-Jan-98 : Added _SCRN0, _SCRN1 +;* Rev 1.8 - 15-Feb-98 : Added rSB, rSC +;* Rev 1.9 - 16-Feb-98 : Converted I/O registers to $FFXX format +;* Rev 2.0 - : Added GBC registers +;* Rev 2.1 - : Added MBC5 & cart RAM enable/disable defines +;* Rev 2.2 - : Fixed NR42,NR43, & NR44 equates +;* Rev 2.3 - : Fixed incorrect _HRAM equate +;* Rev 2.4 - 27-Apr-13 : Added some cart defines (AntonioND) +;* Rev 2.5 - 03-May-15 : Fixed format (AntonioND) +;* Rev 2.6 - 09-Apr-16 : Added GBC OAM and cart defines (AntonioND) +;* Rev 2.7 - 19-Jan-19 : Added rPCMXX (ISSOtm) +;* Rev 2.8 - 03-Feb-19 : Added audio registers flags (Álvaro Cuesta) +;* Rev 2.9 - 28-Feb-20 : Added utility rP1 constants +;* Rev 3.0 - 27-Aug-20 : Register ordering, byte-based sizes, OAM additions, general cleanup (Blitter Object) +;* Rev 4.0 - 03-May-21 : Updated to use RGBDS 0.5.0 syntax, changed IEF_LCDC to IEF_STAT (Eievui) +;* Rev 4.1 - 16-Aug-21 : Added more flags, bit number defines, and offset constants for OAM and window positions (rondnelson99) +;* Rev 4.2 - 04-Sep-21 : Added CH3- and CH4-specific audio registers flags (ISSOtm) +;* Rev 4.3 - 07-Nov-21 : Deprecate VRAM address constants (Eievui) +;* Rev 4.4 - 11-Jan-22 : Deprecate VRAM CART_SRAM_2KB constant (avivace) +;* Rev 4.5 - 03-Mar-22 : Added bit number definitions for OCPS, BCPS and LCDC (sukus) + +IF __RGBDS_MAJOR__ == 0 && __RGBDS_MINOR__ < 5 + FAIL "This version of 'hardware.inc' requires RGBDS version 0.5.0 or later." +ENDC + +; If all of these are already defined, don't do it again. + + IF !DEF(HARDWARE_INC) +DEF HARDWARE_INC EQU 1 + +MACRO rev_Check_hardware_inc +;NOTE: REVISION NUMBER CHANGES MUST BE ADDED +;TO SECOND PARAMETER IN FOLLOWING LINE. + IF \1 > 4.5 ;PUT REVISION NUMBER HERE + WARN "Version \1 or later of 'hardware.inc' is required." + ENDC +ENDM + +DEF _VRAM EQU $8000 ; $8000->$9FFF +DEF _SCRN0 EQU $9800 ; $9800->$9BFF +DEF _SCRN1 EQU $9C00 ; $9C00->$9FFF +DEF _SRAM EQU $A000 ; $A000->$BFFF +DEF _RAM EQU $C000 ; $C000->$CFFF / $C000->$DFFF +DEF _RAMBANK EQU $D000 ; $D000->$DFFF +DEF _OAMRAM EQU $FE00 ; $FE00->$FE9F +DEF _IO EQU $FF00 ; $FF00->$FF7F,$FFFF +DEF _AUD3WAVERAM EQU $FF30 ; $FF30->$FF3F +DEF _HRAM EQU $FF80 ; $FF80->$FFFE + +; *** MBC5 Equates *** + +DEF rRAMG EQU $0000 ; $0000->$1fff +DEF rROMB0 EQU $2000 ; $2000->$2fff +DEF rROMB1 EQU $3000 ; $3000->$3fff - If more than 256 ROM banks are present. +DEF rRAMB EQU $4000 ; $4000->$5fff - Bit 3 enables rumble (if present) + + +;*************************************************************************** +;* +;* Custom registers +;* +;*************************************************************************** + +; -- +; -- P1 ($FF00) +; -- Register for reading joy pad info. (R/W) +; -- +DEF rP1 EQU $FF00 + +DEF P1F_5 EQU %00100000 ; P15 out port, set to 0 to get buttons +DEF P1F_4 EQU %00010000 ; P14 out port, set to 0 to get dpad +DEF P1F_3 EQU %00001000 ; P13 in port +DEF P1F_2 EQU %00000100 ; P12 in port +DEF P1F_1 EQU %00000010 ; P11 in port +DEF P1F_0 EQU %00000001 ; P10 in port + +DEF P1F_GET_DPAD EQU P1F_5 +DEF P1F_GET_BTN EQU P1F_4 +DEF P1F_GET_NONE EQU P1F_4 | P1F_5 + + +; -- +; -- SB ($FF01) +; -- Serial Transfer Data (R/W) +; -- +DEF rSB EQU $FF01 + + +; -- +; -- SC ($FF02) +; -- Serial I/O Control (R/W) +; -- +DEF rSC EQU $FF02 + +DEF SCF_START EQU %10000000 ;Transfer Start Flag (1=Transfer in progress, or requested) +DEF SCF_SPEED EQU %00000010 ;Clock Speed (0=Normal, 1=Fast) ** CGB Mode Only ** +DEF SCF_SOURCE EQU %00000001 ;Shift Clock (0=External Clock, 1=Internal Clock) + +DEF SCB_START EQU 7 +DEF SCB_SPEED EQU 1 +DEF SCB_SOURCE EQU 0 + +; -- +; -- DIV ($FF04) +; -- Divider register (R/W) +; -- +DEF rDIV EQU $FF04 + + +; -- +; -- TIMA ($FF05) +; -- Timer counter (R/W) +; -- +DEF rTIMA EQU $FF05 + + +; -- +; -- TMA ($FF06) +; -- Timer modulo (R/W) +; -- +DEF rTMA EQU $FF06 + + +; -- +; -- TAC ($FF07) +; -- Timer control (R/W) +; -- +DEF rTAC EQU $FF07 + +DEF TACF_START EQU %00000100 +DEF TACF_STOP EQU %00000000 +DEF TACF_4KHZ EQU %00000000 +DEF TACF_16KHZ EQU %00000011 +DEF TACF_65KHZ EQU %00000010 +DEF TACF_262KHZ EQU %00000001 + +DEF TACB_START EQU 2 + + +; -- +; -- IF ($FF0F) +; -- Interrupt Flag (R/W) +; -- +DEF rIF EQU $FF0F + + +; -- +; -- AUD1SWEEP/NR10 ($FF10) +; -- Sweep register (R/W) +; -- +; -- Bit 6-4 - Sweep Time +; -- Bit 3 - Sweep Increase/Decrease +; -- 0: Addition (frequency increases???) +; -- 1: Subtraction (frequency increases???) +; -- Bit 2-0 - Number of sweep shift (# 0-7) +; -- Sweep Time: (n*7.8ms) +; -- +DEF rNR10 EQU $FF10 +DEF rAUD1SWEEP EQU rNR10 + +DEF AUD1SWEEP_UP EQU %00000000 +DEF AUD1SWEEP_DOWN EQU %00001000 + + +; -- +; -- AUD1LEN/NR11 ($FF11) +; -- Sound length/Wave pattern duty (R/W) +; -- +; -- Bit 7-6 - Wave Pattern Duty (00:12.5% 01:25% 10:50% 11:75%) +; -- Bit 5-0 - Sound length data (# 0-63) +; -- +DEF rNR11 EQU $FF11 +DEF rAUD1LEN EQU rNR11 + + +; -- +; -- AUD1ENV/NR12 ($FF12) +; -- Envelope (R/W) +; -- +; -- Bit 7-4 - Initial value of envelope +; -- Bit 3 - Envelope UP/DOWN +; -- 0: Decrease +; -- 1: Range of increase +; -- Bit 2-0 - Number of envelope sweep (# 0-7) +; -- +DEF rNR12 EQU $FF12 +DEF rAUD1ENV EQU rNR12 + + +; -- +; -- AUD1LOW/NR13 ($FF13) +; -- Frequency low byte (W) +; -- +DEF rNR13 EQU $FF13 +DEF rAUD1LOW EQU rNR13 + + +; -- +; -- AUD1HIGH/NR14 ($FF14) +; -- Frequency high byte (W) +; -- +; -- Bit 7 - Initial (when set, sound restarts) +; -- Bit 6 - Counter/consecutive selection +; -- Bit 2-0 - Frequency's higher 3 bits +; -- +DEF rNR14 EQU $FF14 +DEF rAUD1HIGH EQU rNR14 + + +; -- +; -- AUD2LEN/NR21 ($FF16) +; -- Sound Length; Wave Pattern Duty (R/W) +; -- +; -- see AUD1LEN for info +; -- +DEF rNR21 EQU $FF16 +DEF rAUD2LEN EQU rNR21 + + +; -- +; -- AUD2ENV/NR22 ($FF17) +; -- Envelope (R/W) +; -- +; -- see AUD1ENV for info +; -- +DEF rNR22 EQU $FF17 +DEF rAUD2ENV EQU rNR22 + + +; -- +; -- AUD2LOW/NR23 ($FF18) +; -- Frequency low byte (W) +; -- +DEF rNR23 EQU $FF18 +DEF rAUD2LOW EQU rNR23 + + +; -- +; -- AUD2HIGH/NR24 ($FF19) +; -- Frequency high byte (W) +; -- +; -- see AUD1HIGH for info +; -- +DEF rNR24 EQU $FF19 +DEF rAUD2HIGH EQU rNR24 + + +; -- +; -- AUD3ENA/NR30 ($FF1A) +; -- Sound on/off (R/W) +; -- +; -- Bit 7 - Sound ON/OFF (1=ON,0=OFF) +; -- +DEF rNR30 EQU $FF1A +DEF rAUD3ENA EQU rNR30 + +DEF AUD3ENA_OFF EQU %00000000 +DEF AUD3ENA_ON EQU %10000000 + + +; -- +; -- AUD3LEN/NR31 ($FF1B) +; -- Sound length (R/W) +; -- +; -- Bit 7-0 - Sound length +; -- +DEF rNR31 EQU $FF1B +DEF rAUD3LEN EQU rNR31 + + +; -- +; -- AUD3LEVEL/NR32 ($FF1C) +; -- Select output level +; -- +; -- Bit 6-5 - Select output level +; -- 00: 0/1 (mute) +; -- 01: 1/1 +; -- 10: 1/2 +; -- 11: 1/4 +; -- +DEF rNR32 EQU $FF1C +DEF rAUD3LEVEL EQU rNR32 + +DEF AUD3LEVEL_MUTE EQU %00000000 +DEF AUD3LEVEL_100 EQU %00100000 +DEF AUD3LEVEL_50 EQU %01000000 +DEF AUD3LEVEL_25 EQU %01100000 + + +; -- +; -- AUD3LOW/NR33 ($FF1D) +; -- Frequency low byte (W) +; -- +; -- see AUD1LOW for info +; -- +DEF rNR33 EQU $FF1D +DEF rAUD3LOW EQU rNR33 + + +; -- +; -- AUD3HIGH/NR34 ($FF1E) +; -- Frequency high byte (W) +; -- +; -- see AUD1HIGH for info +; -- +DEF rNR34 EQU $FF1E +DEF rAUD3HIGH EQU rNR34 + + +; -- +; -- AUD4LEN/NR41 ($FF20) +; -- Sound length (R/W) +; -- +; -- Bit 5-0 - Sound length data (# 0-63) +; -- +DEF rNR41 EQU $FF20 +DEF rAUD4LEN EQU rNR41 + + +; -- +; -- AUD4ENV/NR42 ($FF21) +; -- Envelope (R/W) +; -- +; -- see AUD1ENV for info +; -- +DEF rNR42 EQU $FF21 +DEF rAUD4ENV EQU rNR42 + + +; -- +; -- AUD4POLY/NR43 ($FF22) +; -- Polynomial counter (R/W) +; -- +; -- Bit 7-4 - Selection of the shift clock frequency of the (scf) +; -- polynomial counter (0000-1101) +; -- freq=drf*1/2^scf (not sure) +; -- Bit 3 - Selection of the polynomial counter's step +; -- 0: 15 steps +; -- 1: 7 steps +; -- Bit 2-0 - Selection of the dividing ratio of frequencies (drf) +; -- 000: f/4 001: f/8 010: f/16 011: f/24 +; -- 100: f/32 101: f/40 110: f/48 111: f/56 (f=4.194304 Mhz) +; -- +DEF rNR43 EQU $FF22 +DEF rAUD4POLY EQU rNR43 + +DEF AUD4POLY_15STEP EQU %00000000 +DEF AUD4POLY_7STEP EQU %00001000 + + +; -- +; -- AUD4GO/NR44 ($FF23) +; -- +; -- Bit 7 - Initial (when set, sound restarts) +; -- Bit 6 - Counter/consecutive selection +; -- +DEF rNR44 EQU $FF23 +DEF rAUD4GO EQU rNR44 + + +; -- +; -- AUDVOL/NR50 ($FF24) +; -- Channel control / ON-OFF / Volume (R/W) +; -- +; -- Bit 7 - Vin->SO2 ON/OFF (left) +; -- Bit 6-4 - SO2 output level (left speaker) (# 0-7) +; -- Bit 3 - Vin->SO1 ON/OFF (right) +; -- Bit 2-0 - SO1 output level (right speaker) (# 0-7) +; -- +DEF rNR50 EQU $FF24 +DEF rAUDVOL EQU rNR50 + +DEF AUDVOL_VIN_LEFT EQU %10000000 ; SO2 +DEF AUDVOL_VIN_RIGHT EQU %00001000 ; SO1 + + +; -- +; -- AUDTERM/NR51 ($FF25) +; -- Selection of Sound output terminal (R/W) +; -- +; -- Bit 7 - Output channel 4 to SO2 terminal (left) +; -- Bit 6 - Output channel 3 to SO2 terminal (left) +; -- Bit 5 - Output channel 2 to SO2 terminal (left) +; -- Bit 4 - Output channel 1 to SO2 terminal (left) +; -- Bit 3 - Output channel 4 to SO1 terminal (right) +; -- Bit 2 - Output channel 3 to SO1 terminal (right) +; -- Bit 1 - Output channel 2 to SO1 terminal (right) +; -- Bit 0 - Output channel 1 to SO1 terminal (right) +; -- +DEF rNR51 EQU $FF25 +DEF rAUDTERM EQU rNR51 + +; SO2 +DEF AUDTERM_4_LEFT EQU %10000000 +DEF AUDTERM_3_LEFT EQU %01000000 +DEF AUDTERM_2_LEFT EQU %00100000 +DEF AUDTERM_1_LEFT EQU %00010000 +; SO1 +DEF AUDTERM_4_RIGHT EQU %00001000 +DEF AUDTERM_3_RIGHT EQU %00000100 +DEF AUDTERM_2_RIGHT EQU %00000010 +DEF AUDTERM_1_RIGHT EQU %00000001 + + +; -- +; -- AUDENA/NR52 ($FF26) +; -- Sound on/off (R/W) +; -- +; -- Bit 7 - All sound on/off (sets all audio regs to 0!) +; -- Bit 3 - Sound 4 ON flag (read only) +; -- Bit 2 - Sound 3 ON flag (read only) +; -- Bit 1 - Sound 2 ON flag (read only) +; -- Bit 0 - Sound 1 ON flag (read only) +; -- +DEF rNR52 EQU $FF26 +DEF rAUDENA EQU rNR52 + +DEF AUDENA_ON EQU %10000000 +DEF AUDENA_OFF EQU %00000000 ; sets all audio regs to 0! + + +; -- +; -- LCDC ($FF40) +; -- LCD Control (R/W) +; -- +DEF rLCDC EQU $FF40 + +DEF LCDCF_OFF EQU %00000000 ; LCD Control Operation +DEF LCDCF_ON EQU %10000000 ; LCD Control Operation +DEF LCDCF_WIN9800 EQU %00000000 ; Window Tile Map Display Select +DEF LCDCF_WIN9C00 EQU %01000000 ; Window Tile Map Display Select +DEF LCDCF_WINOFF EQU %00000000 ; Window Display +DEF LCDCF_WINON EQU %00100000 ; Window Display +DEF LCDCF_BG8800 EQU %00000000 ; BG & Window Tile Data Select +DEF LCDCF_BG8000 EQU %00010000 ; BG & Window Tile Data Select +DEF LCDCF_BG9800 EQU %00000000 ; BG Tile Map Display Select +DEF LCDCF_BG9C00 EQU %00001000 ; BG Tile Map Display Select +DEF LCDCF_OBJ8 EQU %00000000 ; OBJ Construction +DEF LCDCF_OBJ16 EQU %00000100 ; OBJ Construction +DEF LCDCF_OBJOFF EQU %00000000 ; OBJ Display +DEF LCDCF_OBJON EQU %00000010 ; OBJ Display +DEF LCDCF_BGOFF EQU %00000000 ; BG Display +DEF LCDCF_BGON EQU %00000001 ; BG Display + +DEF LCDCB_ON EQU 7 ; LCD Control Operation +DEF LCDCB_WIN9C00 EQU 6 ; Window Tile Map Display Select +DEF LCDCB_WINON EQU 5 ; Window Display +DEF LCDCB_BG8000 EQU 4 ; BG & Window Tile Data Select +DEF LCDCB_BG9C00 EQU 3 ; BG Tile Map Display Select +DEF LCDCB_OBJ16 EQU 2 ; OBJ Construction +DEF LCDCB_OBJON EQU 1 ; OBJ Display +DEF LCDCB_BGON EQU 0 ; BG Display +; "Window Character Data Select" follows BG + + +; -- +; -- STAT ($FF41) +; -- LCDC Status (R/W) +; -- +DEF rSTAT EQU $FF41 + +DEF STATF_LYC EQU %01000000 ; LYC=LY Coincidence (Selectable) +DEF STATF_MODE10 EQU %00100000 ; Mode 10 +DEF STATF_MODE01 EQU %00010000 ; Mode 01 (V-Blank) +DEF STATF_MODE00 EQU %00001000 ; Mode 00 (H-Blank) +DEF STATF_LYCF EQU %00000100 ; Coincidence Flag +DEF STATF_HBL EQU %00000000 ; H-Blank +DEF STATF_VBL EQU %00000001 ; V-Blank +DEF STATF_OAM EQU %00000010 ; OAM-RAM is used by system +DEF STATF_LCD EQU %00000011 ; Both OAM and VRAM used by system +DEF STATF_BUSY EQU %00000010 ; When set, VRAM access is unsafe + +DEF STATB_LYC EQU 6 +DEF STATB_MODE10 EQU 5 +DEF STATB_MODE01 EQU 4 +DEF STATB_MODE00 EQU 3 +DEF STATB_LYCF EQU 2 +DEF STATB_BUSY EQU 1 + +; -- +; -- SCY ($FF42) +; -- Scroll Y (R/W) +; -- +DEF rSCY EQU $FF42 + + +; -- +; -- SCX ($FF43) +; -- Scroll X (R/W) +; -- +DEF rSCX EQU $FF43 + + +; -- +; -- LY ($FF44) +; -- LCDC Y-Coordinate (R) +; -- +; -- Values range from 0->153. 144->153 is the VBlank period. +; -- +DEF rLY EQU $FF44 + + +; -- +; -- LYC ($FF45) +; -- LY Compare (R/W) +; -- +; -- When LY==LYC, STATF_LYCF will be set in STAT +; -- +DEF rLYC EQU $FF45 + + +; -- +; -- DMA ($FF46) +; -- DMA Transfer and Start Address (W) +; -- +DEF rDMA EQU $FF46 + + +; -- +; -- BGP ($FF47) +; -- BG Palette Data (W) +; -- +; -- Bit 7-6 - Intensity for %11 +; -- Bit 5-4 - Intensity for %10 +; -- Bit 3-2 - Intensity for %01 +; -- Bit 1-0 - Intensity for %00 +; -- +DEF rBGP EQU $FF47 + + +; -- +; -- OBP0 ($FF48) +; -- Object Palette 0 Data (W) +; -- +; -- See BGP for info +; -- +DEF rOBP0 EQU $FF48 + + +; -- +; -- OBP1 ($FF49) +; -- Object Palette 1 Data (W) +; -- +; -- See BGP for info +; -- +DEF rOBP1 EQU $FF49 + + +; -- +; -- WY ($FF4A) +; -- Window Y Position (R/W) +; -- +; -- 0 <= WY <= 143 +; -- When WY = 0, the window is displayed from the top edge of the LCD screen. +; -- +DEF rWY EQU $FF4A + + +; -- +; -- WX ($FF4B) +; -- Window X Position (R/W) +; -- +; -- 7 <= WX <= 166 +; -- When WX = 7, the window is displayed from the left edge of the LCD screen. +; -- Values of 0-6 and 166 are unreliable due to hardware bugs. +; -- +DEF rWX EQU $FF4B + +DEF WX_OFS EQU 7 ; add this to a screen position to get a WX position + + +; -- +; -- SPEED ($FF4D) +; -- Select CPU Speed (R/W) +; -- +DEF rKEY1 EQU $FF4D +DEF rSPD EQU rKEY1 + +DEF KEY1F_DBLSPEED EQU %10000000 ; 0=Normal Speed, 1=Double Speed (R) +DEF KEY1F_PREPARE EQU %00000001 ; 0=No, 1=Prepare (R/W) + + +; -- +; -- VBK ($FF4F) +; -- Select Video RAM Bank (R/W) +; -- +; -- Bit 0 - Bank Specification (0: Specify Bank 0; 1: Specify Bank 1) +; -- +DEF rVBK EQU $FF4F + + +; -- +; -- HDMA1 ($FF51) +; -- High byte for Horizontal Blanking/General Purpose DMA source address (W) +; -- CGB Mode Only +; -- +DEF rHDMA1 EQU $FF51 + + +; -- +; -- HDMA2 ($FF52) +; -- Low byte for Horizontal Blanking/General Purpose DMA source address (W) +; -- CGB Mode Only +; -- +DEF rHDMA2 EQU $FF52 + + +; -- +; -- HDMA3 ($FF53) +; -- High byte for Horizontal Blanking/General Purpose DMA destination address (W) +; -- CGB Mode Only +; -- +DEF rHDMA3 EQU $FF53 + + +; -- +; -- HDMA4 ($FF54) +; -- Low byte for Horizontal Blanking/General Purpose DMA destination address (W) +; -- CGB Mode Only +; -- +DEF rHDMA4 EQU $FF54 + + +; -- +; -- HDMA5 ($FF55) +; -- Transfer length (in tiles minus 1)/mode/start for Horizontal Blanking, General Purpose DMA (R/W) +; -- CGB Mode Only +; -- +DEF rHDMA5 EQU $FF55 + +DEF HDMA5F_MODE_GP EQU %00000000 ; General Purpose DMA (W) +DEF HDMA5F_MODE_HBL EQU %10000000 ; HBlank DMA (W) +DEF HDMA5B_MODE EQU 7 ; DMA mode select (W) + +; -- Once DMA has started, use HDMA5F_BUSY to check when the transfer is complete +DEF HDMA5F_BUSY EQU %10000000 ; 0=Busy (DMA still in progress), 1=Transfer complete (R) + + +; -- +; -- RP ($FF56) +; -- Infrared Communications Port (R/W) +; -- CGB Mode Only +; -- +DEF rRP EQU $FF56 + +DEF RPF_ENREAD EQU %11000000 +DEF RPF_DATAIN EQU %00000010 ; 0=Receiving IR Signal, 1=Normal +DEF RPF_WRITE_HI EQU %00000001 +DEF RPF_WRITE_LO EQU %00000000 + + +; -- +; -- BCPS ($FF68) +; -- Background Color Palette Specification (R/W) +; -- +DEF rBCPS EQU $FF68 + +DEF BCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) +DEF BCPSB_AUTOINC EQU 7 + + +; -- +; -- BCPD ($FF69) +; -- Background Color Palette Data (R/W) +; -- +DEF rBCPD EQU $FF69 + + +; -- +; -- OCPS ($FF6A) +; -- Object Color Palette Specification (R/W) +; -- +DEF rOCPS EQU $FF6A + +DEF OCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) +DEF OCPSB_AUTOINC EQU 7 + + +; -- +; -- OCPD ($FF6B) +; -- Object Color Palette Data (R/W) +; -- +DEF rOCPD EQU $FF6B + + +; -- +; -- SMBK/SVBK ($FF70) +; -- Select Main RAM Bank (R/W) +; -- +; -- Bit 2-0 - Bank Specification (0,1: Specify Bank 1; 2-7: Specify Banks 2-7) +; -- +DEF rSVBK EQU $FF70 +DEF rSMBK EQU rSVBK + + +; -- +; -- PCM12 ($FF76) +; -- Sound channel 1&2 PCM amplitude (R) +; -- +; -- Bit 7-4 - Copy of sound channel 2's PCM amplitude +; -- Bit 3-0 - Copy of sound channel 1's PCM amplitude +; -- +DEF rPCM12 EQU $FF76 + + +; -- +; -- PCM34 ($FF77) +; -- Sound channel 3&4 PCM amplitude (R) +; -- +; -- Bit 7-4 - Copy of sound channel 4's PCM amplitude +; -- Bit 3-0 - Copy of sound channel 3's PCM amplitude +; -- +DEF rPCM34 EQU $FF77 + + +; SameBoy additions +DEF rKEY0 EQU $FF4C +DEF rBANK EQU $FF50 +DEF rOPRI EQU $FF6C + +DEF rJOYP EQU rP1 +DEF rBGPI EQU rBCPS +DEF rBGPD EQU rBCPD +DEF rOBPI EQU rOCPS +DEF rOBPD EQU rOCPD + +; -- +; -- IE ($FFFF) +; -- Interrupt Enable (R/W) +; -- +DEF rIE EQU $FFFF + +DEF IEF_HILO EQU %00010000 ; Transition from High to Low of Pin number P10-P13 +DEF IEF_SERIAL EQU %00001000 ; Serial I/O transfer end +DEF IEF_TIMER EQU %00000100 ; Timer Overflow +DEF IEF_STAT EQU %00000010 ; STAT +DEF IEF_VBLANK EQU %00000001 ; V-Blank + +DEF IEB_HILO EQU 4 +DEF IEB_SERIAL EQU 3 +DEF IEB_TIMER EQU 2 +DEF IEB_STAT EQU 1 +DEF IEB_VBLANK EQU 0 + + +;*************************************************************************** +;* +;* Flags common to multiple sound channels +;* +;*************************************************************************** + +; -- +; -- Square wave duty cycle +; -- +; -- Can be used with AUD1LEN and AUD2LEN +; -- See AUD1LEN for more info +; -- +DEF AUDLEN_DUTY_12_5 EQU %00000000 ; 12.5% +DEF AUDLEN_DUTY_25 EQU %01000000 ; 25% +DEF AUDLEN_DUTY_50 EQU %10000000 ; 50% +DEF AUDLEN_DUTY_75 EQU %11000000 ; 75% + + +; -- +; -- Audio envelope flags +; -- +; -- Can be used with AUD1ENV, AUD2ENV, AUD4ENV +; -- See AUD1ENV for more info +; -- +DEF AUDENV_UP EQU %00001000 +DEF AUDENV_DOWN EQU %00000000 + + +; -- +; -- Audio trigger flags +; -- +; -- Can be used with AUD1HIGH, AUD2HIGH, AUD3HIGH +; -- See AUD1HIGH for more info +; -- + +DEF AUDHIGH_RESTART EQU %10000000 +DEF AUDHIGH_LENGTH_ON EQU %01000000 +DEF AUDHIGH_LENGTH_OFF EQU %00000000 + + +;*************************************************************************** +;* +;* CPU values on bootup (a=type, b=qualifier) +;* +;*************************************************************************** + +DEF BOOTUP_A_DMG EQU $01 ; Dot Matrix Game +DEF BOOTUP_A_CGB EQU $11 ; Color GameBoy +DEF BOOTUP_A_MGB EQU $FF ; Mini GameBoy (Pocket GameBoy) + +; if a=BOOTUP_A_CGB, bit 0 in b can be checked to determine if real CGB or +; other system running in GBC mode +DEF BOOTUP_B_CGB EQU %00000000 +DEF BOOTUP_B_AGB EQU %00000001 ; GBA, GBA SP, Game Boy Player, or New GBA SP + + +;*************************************************************************** +;* +;* Cart related +;* +;*************************************************************************** + +; $0143 Color GameBoy compatibility code +DEF CART_COMPATIBLE_DMG EQU $00 +DEF CART_COMPATIBLE_DMG_GBC EQU $80 +DEF CART_COMPATIBLE_GBC EQU $C0 + +; $0146 GameBoy/Super GameBoy indicator +DEF CART_INDICATOR_GB EQU $00 +DEF CART_INDICATOR_SGB EQU $03 + +; $0147 Cartridge type +DEF CART_ROM EQU $00 +DEF CART_ROM_MBC1 EQU $01 +DEF CART_ROM_MBC1_RAM EQU $02 +DEF CART_ROM_MBC1_RAM_BAT EQU $03 +DEF CART_ROM_MBC2 EQU $05 +DEF CART_ROM_MBC2_BAT EQU $06 +DEF CART_ROM_RAM EQU $08 +DEF CART_ROM_RAM_BAT EQU $09 +DEF CART_ROM_MMM01 EQU $0B +DEF CART_ROM_MMM01_RAM EQU $0C +DEF CART_ROM_MMM01_RAM_BAT EQU $0D +DEF CART_ROM_MBC3_BAT_RTC EQU $0F +DEF CART_ROM_MBC3_RAM_BAT_RTC EQU $10 +DEF CART_ROM_MBC3 EQU $11 +DEF CART_ROM_MBC3_RAM EQU $12 +DEF CART_ROM_MBC3_RAM_BAT EQU $13 +DEF CART_ROM_MBC5 EQU $19 +DEF CART_ROM_MBC5_BAT EQU $1A +DEF CART_ROM_MBC5_RAM_BAT EQU $1B +DEF CART_ROM_MBC5_RUMBLE EQU $1C +DEF CART_ROM_MBC5_RAM_RUMBLE EQU $1D +DEF CART_ROM_MBC5_RAM_BAT_RUMBLE EQU $1E +DEF CART_ROM_MBC7_RAM_BAT_GYRO EQU $22 +DEF CART_ROM_POCKET_CAMERA EQU $FC +DEF CART_ROM_BANDAI_TAMA5 EQU $FD +DEF CART_ROM_HUDSON_HUC3 EQU $FE +DEF CART_ROM_HUDSON_HUC1 EQU $FF + +; $0148 ROM size +; these are kilobytes +DEF CART_ROM_32KB EQU $00 ; 2 banks +DEF CART_ROM_64KB EQU $01 ; 4 banks +DEF CART_ROM_128KB EQU $02 ; 8 banks +DEF CART_ROM_256KB EQU $03 ; 16 banks +DEF CART_ROM_512KB EQU $04 ; 32 banks +DEF CART_ROM_1024KB EQU $05 ; 64 banks +DEF CART_ROM_2048KB EQU $06 ; 128 banks +DEF CART_ROM_4096KB EQU $07 ; 256 banks +DEF CART_ROM_8192KB EQU $08 ; 512 banks +DEF CART_ROM_1152KB EQU $52 ; 72 banks +DEF CART_ROM_1280KB EQU $53 ; 80 banks +DEF CART_ROM_1536KB EQU $54 ; 96 banks + +; $0149 SRAM size +; these are kilobytes +DEF CART_SRAM_NONE EQU 0 +DEF CART_SRAM_8KB EQU 2 ; 1 bank +DEF CART_SRAM_32KB EQU 3 ; 4 banks +DEF CART_SRAM_128KB EQU 4 ; 16 banks + +DEF CART_SRAM_ENABLE EQU $0A +DEF CART_SRAM_DISABLE EQU $00 + +; $014A Destination code +DEF CART_DEST_JAPANESE EQU $00 +DEF CART_DEST_NON_JAPANESE EQU $01 + + +;*************************************************************************** +;* +;* Keypad related +;* +;*************************************************************************** + +DEF PADF_DOWN EQU $80 +DEF PADF_UP EQU $40 +DEF PADF_LEFT EQU $20 +DEF PADF_RIGHT EQU $10 +DEF PADF_START EQU $08 +DEF PADF_SELECT EQU $04 +DEF PADF_B EQU $02 +DEF PADF_A EQU $01 + +DEF PADB_DOWN EQU $7 +DEF PADB_UP EQU $6 +DEF PADB_LEFT EQU $5 +DEF PADB_RIGHT EQU $4 +DEF PADB_START EQU $3 +DEF PADB_SELECT EQU $2 +DEF PADB_B EQU $1 +DEF PADB_A EQU $0 + + +;*************************************************************************** +;* +;* Screen related +;* +;*************************************************************************** + +DEF SCRN_X EQU 160 ; Width of screen in pixels +DEF SCRN_Y EQU 144 ; Height of screen in pixels +DEF SCRN_X_B EQU 20 ; Width of screen in bytes +DEF SCRN_Y_B EQU 18 ; Height of screen in bytes + +DEF SCRN_VX EQU 256 ; Virtual width of screen in pixels +DEF SCRN_VY EQU 256 ; Virtual height of screen in pixels +DEF SCRN_VX_B EQU 32 ; Virtual width of screen in bytes +DEF SCRN_VY_B EQU 32 ; Virtual height of screen in bytes + + +;*************************************************************************** +;* +;* OAM related +;* +;*************************************************************************** + +; OAM attributes +; each entry in OAM RAM is 4 bytes (sizeof_OAM_ATTRS) +RSRESET +DEF OAMA_Y RB 1 ; y pos plus 16 +DEF OAMA_X RB 1 ; x pos plus 8 +DEF OAMA_TILEID RB 1 ; tile id +DEF OAMA_FLAGS RB 1 ; flags (see below) +DEF sizeof_OAM_ATTRS RB 0 + +DEF OAM_Y_OFS EQU 16 ; add this to a screen-relative Y position to get an OAM Y position +DEF OAM_X_OFS EQU 8 ; add this to a screen-relative X position to get an OAM X position + +DEF OAM_COUNT EQU 40 ; number of OAM entries in OAM RAM + +; flags +DEF OAMF_PRI EQU %10000000 ; Priority +DEF OAMF_YFLIP EQU %01000000 ; Y flip +DEF OAMF_XFLIP EQU %00100000 ; X flip +DEF OAMF_PAL0 EQU %00000000 ; Palette number; 0,1 (DMG) +DEF OAMF_PAL1 EQU %00010000 ; Palette number; 0,1 (DMG) +DEF OAMF_BANK0 EQU %00000000 ; Bank number; 0,1 (GBC) +DEF OAMF_BANK1 EQU %00001000 ; Bank number; 0,1 (GBC) + +DEF OAMF_PALMASK EQU %00000111 ; Palette (GBC) + +DEF OAMB_PRI EQU 7 ; Priority +DEF OAMB_YFLIP EQU 6 ; Y flip +DEF OAMB_XFLIP EQU 5 ; X flip +DEF OAMB_PAL1 EQU 4 ; Palette number; 0,1 (DMG) +DEF OAMB_BANK1 EQU 3 ; Bank number; 0,1 (GBC) + + +;* +;* Nintendo scrolling logo +;* (Code won't work on a real GameBoy) +;* (if next lines are altered.) +MACRO NINTENDO_LOGO + DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D + DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 + DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E +ENDM + +; Deprecated constants. Please avoid using. + +DEF IEF_LCDC EQU %00000010 ; LCDC (see STAT) +DEF _VRAM8000 EQU _VRAM +DEF _VRAM8800 EQU _VRAM+$800 +DEF _VRAM9000 EQU _VRAM+$1000 +DEF CART_SRAM_2KB EQU 1 ; 1 incomplete bank + + + ENDC ;HARDWARE_INC diff --git a/thirdparty/SameBoy/BootROMs/mgb_boot.asm b/thirdparty/SameBoy/BootROMs/mgb_boot.asm new file mode 100644 index 000000000..3a98aefd8 --- /dev/null +++ b/thirdparty/SameBoy/BootROMs/mgb_boot.asm @@ -0,0 +1,2 @@ +MGB EQU 1 +include "dmg_boot.asm" \ No newline at end of file diff --git a/thirdparty/SameBoy/BootROMs/pb12.c b/thirdparty/SameBoy/BootROMs/pb12.c index cfedf6bb1..a022fce19 100644 --- a/thirdparty/SameBoy/BootROMs/pb12.c +++ b/thirdparty/SameBoy/BootROMs/pb12.c @@ -25,7 +25,7 @@ void write_all(int fd, const void *buf, size_t count) { } } -int main() +int main(void) { static uint8_t source[0x4000]; size_t size = read(STDIN_FILENO, &source, sizeof(source)); @@ -87,7 +87,7 @@ int main() prev[1] = byte; if (bits >= 8) { uint8_t outctl = control >> (bits - 8); - assert(outctl != 1); + assert(outctl != 1); // 1 is reserved as the end byte write_all(STDOUT_FILENO, &outctl, 1); write_all(STDOUT_FILENO, literals, literals_size); bits -= 8; diff --git a/thirdparty/SameBoy/BootROMs/sgb_boot.asm b/thirdparty/SameBoy/BootROMs/sgb_boot.asm index cdb9d774d..e0928616a 100644 --- a/thirdparty/SameBoy/BootROMs/sgb_boot.asm +++ b/thirdparty/SameBoy/BootROMs/sgb_boot.asm @@ -1,5 +1,7 @@ ; SameBoy SGB bootstrap ROM -; Todo: use friendly names for HW registers instead of magic numbers + +INCLUDE "hardware.inc" + SECTION "BootCode", ROM0[$0] Start: ; Init stack pointer @@ -15,17 +17,17 @@ Start: ; Init Audio ld a, $80 - ldh [$26], a - ldh [$11], a + ldh [rNR52], a + ldh [rNR11], a ld a, $f3 - ldh [$12], a - ldh [$25], a + ldh [rNR12], a + ldh [rNR51], a ld a, $77 - ldh [$24], a + ldh [rNR50], a ; Init BG palette to white ld a, $0 - ldh [$47], a + ldh [rBGP], a ; Load logo from ROM. ; A nibble represents a 4-pixels line, 2 bytes represent a 4x4 tile, scaled to 8x8. @@ -71,10 +73,10 @@ Start: ; Turn on LCD ld a, $91 - ldh [$40], a + ldh [rLCDC], a ld a, $f1 ; Packet magic, increases by 2 for every packet - ldh [$80], a + ldh [_HRAM], a ld hl, $104 ; Header start xor a @@ -86,7 +88,7 @@ Start: ld a, $30 ld [c], a - ldh a, [$80] + ldh a, [_HRAM] call SendByte push hl ld b, $e @@ -117,9 +119,9 @@ Start: ld [c], a ; Update command - ldh a, [$80] + ldh a, [_HRAM] add 2 - ldh [$80], a + ldh [_HRAM], a ld a, $58 cp l @@ -135,7 +137,7 @@ Start: ; Init BG palette ld a, $fc - ldh [$47], a + ldh [rBGP], a ; Set registers to match the original SGB boot IF DEF(SGB2) @@ -210,4 +212,4 @@ db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c SECTION "BootGame", ROM0[$fe] BootGame: - ldh [$50], a \ No newline at end of file + ldh [rBANK], a \ No newline at end of file diff --git a/thirdparty/SameBoy/Cocoa/AppIcon.icns b/thirdparty/SameBoy/Cocoa/AppIcon.icns index 92ad4c6516aaac4a4bc16850b06370f1d59f5005..2a85022a965752735fd24d90c4151a7628a44089 100644 GIT binary patch literal 631345 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 z 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�DD{D78rBqD(fCjB8G$N_$?x7V)2E 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�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

l0T2F!wS$P_Oho(bE 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 FuUJfhdA`xk3T2=Y%~ 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

nr2z+7Ff|`3i@N+go5P{;wzKnzEgWk!dVaye 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 literal 312085 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%0A2GhP>M=0kYX;FKZ)Gog=80 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 z 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/CPU.png b/thirdparty/SameBoy/Cocoa/CPU.png index 7f13621351f0de516706036db2704d63de8e7abd..2601ac4646c37a25989adbb8257c2d0dacba35b3 100644 GIT binary patch delta 1069 zcmbQ$&v=z%f<-+GyQhm|NW|fz(_i}sr!yS;d4xUDs>w_$*7;bj)Y7F}rW9pgwp>@I z9pck7ZCQrIlxY(=!wzs8XKPAVXr>B3Rw^-6Yx6D%HouVbd&7bIoAy7P_ldZaR0j9L(B! z=w(Tk-T}X|$&O+(Kh4yrvsEf&!746!|Gs3*0At!)($0^ z#TQoyBv?#OH{zTCbeGqIn;nd+&3$I@&uh7v)UMO5q z_EzN4-=`~9t#YcZ{af#qot=H`HN;5{N)dg_mDL4a>-uUNn3=U5J?d&GB-DTW=&iS9 ztFsR#1k8CVcl}J6A~@8%>Jta0Ud3t*K(XChH+U|k^P^jWce9w^p&9thnGLD|UJ|&^f6^kF<%x%R9T9Y#OP6tP52vgzxK$|zeStfG3 z2Si44&OSSBDpbPoy`aqt+pZ5k4|^?GxssEanYmzROp>1ayOV+QZu3p5-jlwY0c`ZU zs*)MIOC+|Rua|w~&775$_26TL%b&Xa9y(&euLCqx*0mo_G!#-gU-%^I-N!X|9!Ek# zE8*86#WTN3W>`e8V5t!1j_{FiUzfU4WMb3GMW5{EJ>I(#oVtX5ysJ@sSIz%u*=`25 zX2(4{Qvr>{K+{~k@Vb5hyWR4K(?10U1}etMY-!s(84|=2d1nt_ z{bp11@=p7vO-6~Q4o9`k1)H;!A)e>=Hlw{$E9d%s?~hyWZgwcoXwn+HpFy+c&$)1H z||P(VBz2ehy@O)`(n!|7<-X>C`At)s$+rx)IT%Bo-ImP`o`QO{^hHxz7xgG-i&-6g5vIw zzBfR%b%P-&6=QSqggnP+3&pt;Nt!ES5-Z$ZQ5%A+4^?});wg3wN_X}2X00n;R<)DhqqKDY5aaI;%})L z)xdrgp(II@ECqz~99eKG=VM?)B7so2&IB9HiMYXR(&`gnErt^)W=3&6g5eg-Y{782 z>!Y#7iodKr+G)wQr+0-D|4Y&o3xd~zqUGh~iRHRP&gVjLv)PPdT2!k=L=A+m^ax}H z;^Bt}oB%&|hNpb2S7130EcqpixH2J0qmcpyKV9Q;dxL>Id>1>BB3eOuQ9KbtBN=&% zIf3Jgxn4|zmwREjt`;w5Ro%nPpN;8K-rLf!Gl8bi7nTWZ!gIQ5YfI1M&pTCE<=k@q^J7V34-W4JqM z3<})&)xzCbQE87UWxJ0v(As_Y^6o{XChL}+qspYsAlXAPyf}5Q6Ru61z={`%w~*4^hUy|#q|tsFa#4V%VYQurNPJ$%a1|v z0Ml8t!2?XD)w`4KJQbbMN)i$3B~?s%TnueP!6XI^;eGmF&Yhky8}vnt9-(OyhUhWU zjF6;O+#+e(sMqQ+r^&>C@%`-F$%_v)cfl=?^GsrV*Ru(VwT)P%2vT9>^l@&O^m#ia-nP*QOL5{jgXOA#iZq~Zc36iF4AB1}L@#RW(xk}57mn1GUs z3y@GGRa}ZN0VNd|AfZUAxD;UmN-8cuLXlK)DZ&JlR9t|BBB|n1gb66AxBv-7QpKeR z6Hrod0TPO&ic1kDprqmgBos*%mm*9+NyP<7D3U5JMVNq+iVKiXBvo9BFaaeM7a*ZX zs<;$k0!k__KthpJaVf$ClvG@Rgd(ZpQiKU8ski_MMe>@sVneUNU_9cxFUrN2T+C_K zYs431z*I)I1A?mVgP`Z0hoB#>it;1`m0=L{O(6tX7DCWn+}!ay(;=wOu}ph%PQ{@Q z7pyBu7&ox#59LH$>@%%z4X7LSp=OMIT>*Z4@tD~ypK5Xsy;(DLVD1Y7v3=#({Kn23 z7T-T@t^0^$8GLqQ`;kF+r)lQoXVyJ)w(-vOIxhap7OVI96+^y0i+$B_qWZ*Qe%{3; zS9Jt5FMDR{)s6+JQ!Z4^sY`yg{n<~qoqvCX_raPWS2s;7(A~hzcO6N5;>HhZ`7@ty zr;azih9ICT~s6>dEY~=qsHa_a-lXt){W6W97M;6)m3in>KAC zZr^K8MA6%BtEs;5<*mPIy!g+dE@V&|bHSd?mN%4eO0t--lD<-rA;yE(d$;; zeEQ6pIm<`I$Hy11S~U88Xhdepux3cu((>xL0VTL*@Nhobjx}lCt$ldKXZP;WersJb zxx*Uo`0U{7=ceymIM@DE6qT^Mvi_rNF3OaYbiBQN_DNxPAy#M_=BuiD=|F8u%Ts@8 zXgGHtl{SEC*EPCxhGf|`Hbk?v1oUn~ANUh~)~s3k3J!j`X-#zhsG{iO1=ADGPI;#( zfBu~1Z0hvGhYx=^@yS=>cFeBXdh51byLR1^qPYdX^C5Km(g82yAJr#z+}4b@corNz zN~JG*EOq*4C+B$@_7q~TA3U}HPjgTFkkUT);Thuw@|uB*%07sSdTby*bSAWM(LQ=<614KaPrt&RKL?B$~_U%qUA%)aDA|9f-YZ*O@2=v@UR z+p%M9ZEf>o?kS3nzcOg@(vdOMSq)9q3Ag9fE`RjK1n^7ch9#2~Q^ zpZ4`U-?HMue%tHqO~#oSFC$3hwEi!WUu59k6ZMlue^_Pa`8rEE?9GEux{yW-CPVJ)4 zpK7aWj)%tAoK0o_eQslyz)lokspW7`|X;h!5)vNctb(SeTA!b4&L#- zp|jEe>}6`lPqQR%05ooOtLyY$`B@=Lj^D)IBT zEZKUjc|6;B8prdKh)yK#BbTdGnb~m+C3VI<)U>K;YKqD*wk7VUYK#2P6}v^X>c~)6 z$JA{Gts}m{l z8&Bv4qfxOgt!eOKLc18h7wZaPJEaQJF+_xf9Eh|hO zTiHrHnjt+}&TH)fT`$V?X7Wa>4J-{*lB>6OpU#eVGMV<1Lz0OB?Ky*>&A~xO8fVqk z;?qPaEdita_04;~t<(VY4K0;QcM1*%}O+&Vab~u@UJxC#LB5_j<+`);@24gvCae(%#1($Q*EtYYngz=xT?-lz z78Z66{cCgcy{V`+eMqASDUlCU`3~v#AV1$NG&Hm|a?`ve@NRpX2QGKuaq3ek*4c@0HBC)hgdMcp zNhsSOs7H%>v`uru2#fL1a-OqLdm17v`QiJtE9Nm9Np5=GCDHia{P3O&yu@`hg%YrT34Od zSHxs0C#Ri&>`zqOdxoq%DN3PZryZG%BKmThYPuEVvev?JL&I)|rI(YFH8nM!=$O?R z`?Ghx!L_KtiRq2<7Yps=KuaqPQ*oyyH$ma~^XE$G>KYpGTNamxj=UpBZmXa%80Gg7 zAf6A0-ALNMnHayuXJDjtn<{$Zj!hMndZ0)$zBbFu2a13jlfGyOs>9^U`+hnwvU+S- zy3>znOz4)2gmkCwj*hC035B<9j?5Vxf!1%Y#pR;r_IQUMP7DD&ECeJVb069MJ;M>2 z_)0gYjWWb}0$W)GrPBEIPmdqiTG}S8ly`J=fZH%^6SRakO_19iFLWN!`PrCt!ywi9 z2d)@``~UoFH!uDCbTxt$)6?QWfoj-H@&;i~50}oSfi-~AFHM^gNfh5Ig5_P=(AgPO zqobpv>E0i*Y(Ac_IuqFeTX_vO__zJ>>fgm5Wvun?t~+V(R8y(chrPY-{3itk8p9bM zIUI+(O2Zj8XyMpcRhDU=nZ`U6q!CYw=sRNE8^(;QY!K&hsy7nyLj<{7Y843U=IIut z`JsLM{g*=^!4##gQOJRXb!QYUX;wzrAJwaozfj6W;uZ+ z`ThN#wKX-$SBr+g^SI))WDN$PHH4m+=!Yo_5eyM`olCfwscahet%R_>F%Fk4oXyfx zg+g-EzTNr~QbCR!*UjwdPyX@Yk5DP<)lYvR2CNmE9`@&;W%V1V*{Iyh=_bTz|CN=0 z$V5Oa|D<=6j}hcx;Y1ekqRd7dF+9AM#qS6kG4udFgPU3j@HjX98^T@DJ#PdB!UHv1 zw--RFoKSG}#YNdNNj8!St*xum{OqtXeAeAD$73Zp_&qwSjqc+Z_Qg0KFg7-xHw;Nh*|USg;YkAlZB(HN7Kc-X z=@l&hR9yU8tf*yUu(V(U3S5SE)aX~$YSdbgF*LB zB#&Isx{GiK3v?sH3BUoAeJ01{l4f@8l7}nj$Y@a3icJq&ctNgv+3{Admt1G{k0y=MJDN>D*gW+p*JUH$zzZ*OEz zZ?BDv2r(pz+HP*06)rye_Fd(G{0oOogbaJ#wz{PN4Wq~BFnJHuM vQ41|dcVq3$`7Sm-4jS-BYJh?f4zs36$;s3hZt^OI>_1Pp)2@xql(hc>YjbXM literal 19184 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 AtpET3 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/CPU~solid@2x.png b/thirdparty/SameBoy/Cocoa/CPU~solid@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ff17bd84a58e8adfb49ff17462a26ed0c90ed4cf GIT binary patch literal 586 zcmV-Q0=4~#P)~W7tTt9cuLN0Xtn-}NhA*#V#`!hdP0C38(3+MuVgMf(-&T1b_`vT5Ozev~> zaCX}ia8>&`0xmB>_dxf+YXUOqIu9i77z_gr(X|-}CNkiO2sbj30e4iu zvn6mCa*5s(aL5Cev5MX+!66U$jXSWk|LB1`32-=sTeWAvsgQIg2i8&G8v)=MFqqx` zpUQ!BJ_jzG3)+4kqv6XQsQI@>23rQBQ9w~`F~sljK+C^13dB!1s)uK;2JAr(wETNS zj}*d4z%i7f2qTfW+5fjZ(DLsQ-StetFfu3~C|kzntV14X`L{+v1uQg}n5z;Zl3W( zEHjCSFslvy200$-{Sgn?va~>CA|XH|Xqr9P`i(pAf(I7tfM5ZO072z|D*}bgjK`7m zZV4H|GXoC)B@cEzkV^?1Q7;RkduKhym3eVl&p18C5s+sDY?UCE#DSzU|KbB7WAU0K z5D~4n$0G!yCblFjt|`?E9@w7I^QYzZ-p+wO7jzH&W)EEcvikDZ_5F)U7tjU#wXf&@ Y0G7-;(^#VORsaA107*qoM6N<$f>UYuKL7v# literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/CPU~solid~dark.png b/thirdparty/SameBoy/Cocoa/CPU~solid~dark.png new file mode 100644 index 0000000000000000000000000000000000000000..eea9a43d78cbdb6366093f7a87ab26ea1709cfba GIT binary patch literal 311 zcmV-70m%M|P)kdg00009a7bBm000XU z000XU0RWnu7ytkO=}AOER7l6=)xm88ArMAkTA&45m=YUrEBZW8BP#sH!eB z$s#F26^bG>pF002ov JPDHLkV1f(ujK=OUBG_nX9-sY z033EPokOb-OVV=L%l8_2-b6r)|Gfm<#K6-9bOwGI0~+%>1`HA;Lp9^kS z%@zg%frKUs%>y1wV!&XD41%F={Bydb_gff9d7DsJju;{ei<30=O8b4I2ku~CwjD(z zp-4m&PUI*;78ubCcmhUxE24>b1{49G{orl}bS^=_%FimIoE_wvkmtpDUlZh-fFs@_ zpw&$_Cw3T_`DYFynuM1m4oj4Jdpr?`mBa}{BIHut$$)Npo&K_IpY1--=Yr0_Mh2e# rs`jm3R=@mpeg9(81#|)b?d$m`Fq|R{gJ*5}00000NkvXXu0mjfAH4pV literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Cartridge.icns b/thirdparty/SameBoy/Cocoa/Cartridge.icns index 6e0c78dd8d880a08fa2ec19ac7385a4a8b3e2d65..1dae2b4a21282e887360ea7f7745afaedd8ab0a4 100644 GIT binary patch literal 75751 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 aiSrh&+Oz)%$lE}#GD2tuStt#ojsXAzrUrBX literal 274241 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 Y!$@>VIM4|8GwJF9$Q~2LJ#7 diff --git a/thirdparty/SameBoy/Cocoa/ContinueTemplate.png b/thirdparty/SameBoy/Cocoa/ContinueTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..eb72962c02e049c275725142863100a623bb7c5b GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh0wlLOK8*rWJ)SO(ArhBMFD&G9WE5e0@SdxQ zQ)Kp{fRv`Q+#2%^sD0q*N($yst6)4@a#5LM(-L7;&j(zOY|H$9Z>xX)Cx}mKWk%ia zO#y$}Q?<>RJzFkpEx*(ycZow_l-8Ice(P;9s9Nh#oP}x*89iJSJPN-`Re%%pt~46UHx3vIVCg!0K}F{{r~^~ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/ContinueTemplate@2x.png b/thirdparty/SameBoy/Cocoa/ContinueTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..586ab3d279c202ca8a5d657d4de8230d2cb7fa4e GIT binary patch literal 314 zcmV-A0mc4_P)X zFD!*o7{~FC>rcADW^Ae%T_MQ=n@l2+Z3J1<3CvUhn{bm&Gn;9WO`{6ZH9P`id-tAu z&vBk`PWkSf{l3q6gb=h$exGvdZ)@8%_#ZHYXR8|J;Dr!w%#?zxxD`Gf8!ZE2PYACz z4U~b5IT6Bx`7#g|TndralmcPPV_H)ukfwu_rp_Qt*K6tys@IeU)@aHHE1DYeSD#++ z=3T*!`$BlJp+EnrYwm;(heq5lQ`Bs(K^T74r*oR9-M{Vr6<8i4Pd(J?vjlCOqmWn-9Um;r~#ZT=;KL7v# M07*qoM6N<$g1*OxQ~&?~ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Display.png b/thirdparty/SameBoy/Cocoa/Display.png index 5753f5588ea2f99b198f09c6605d9369e2ef12bb..c955c4688acf1fa49a8a3b8cfa52099f515d9edb 100644 GIT binary patch delta 438 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 diff --git a/thirdparty/SameBoy/Cocoa/Display~solid.png b/thirdparty/SameBoy/Cocoa/Display~solid.png new file mode 100644 index 0000000000000000000000000000000000000000..2980ad71a7959b9dc00172c91344cc7ffe17972b GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UoCO|{#S9GG!XV7ZFl&wkP;i~6 zi(`n#@wZnUbB`MEFkEn7DB_hU;shiWL8O!7^S{BGGnzEN$eU$O_nTbzb*uN=&G9+f zlVsN|Z9abbYQO#iCuaKt+J(&KALJ5D&t$w%a}6$;y=?Z`UCT7=)}%XVsm0Ec4O8Ut z72KsK>MVMwhRtN5$I4qvFSIW7$~4@Nd8o+j(687K-n&}4tG28TidYh>Pvo4tvoAC0?qCJ7K}ccu$F!`6@ek^6h|eu&zHO{- z!kna1D;MA7awxldJHwBH%3qW9?eZEK53kdX{Um`?tj^pxK z2X%68Du?7)78!FalzV%fWA{0YFBU7W9cQ?@Zu^UadT-pn3x?LlDl+x?Z&B<96xBfb3`d-`LA$#?be`u@oGhEvf-G8(^cG_yMdDEGT zb?em@OI?)Lz5Ma)m-|0?y6vvNKHq7hBKd^lL ka{GVN&wszUr!Ms;Z-vp@AAhBHmw;l()78&qol`;+02n2}Gynhq literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Display~solid~dark.png b/thirdparty/SameBoy/Cocoa/Display~solid~dark.png new file mode 100644 index 0000000000000000000000000000000000000000..05245deeab1cd3e1139abd9361e7984121db3698 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UoCO|{#S9GG!XV7ZFl&wkP;jHC zi(`n#@wZnUbB{RiuwHOKDB`0i;*_YN)4I?=#7R-)*&W-dP8uzT-YlG2t1!Wuey=bwd%E?OEo%_CL*F?0mtNF~D5SBQp z?N2WI@A=uc-#hPWG-saP{ItID^TS_;JEY$0cbTfUFVdQ&MBb@04_yh Au>b%7 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Display~solid~dark@2x.png b/thirdparty/SameBoy/Cocoa/Display~solid~dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3dec49d5d07959399019faf2f56984282ce42bfb GIT binary patch literal 454 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;&H|6fVg?3oVGw3ym^DX&fq}8Y z)5S3) z5lVe;YUJ+E=Qz3Qx>-KshljtuXvf#yVYoj1&Y!PrD^{h;ht@hDxU99FQECAK-ILqk znGhJdJ0&Po_}2`_psydhZr*mVI^NGQ_iopkT^?=689ddcQ$w#Vw64}nld-MZd^7D( z)`2YN^v!q9u9~#OhE3t-;{6F78&wv%Jcv7(w0(8e$vmftO_7g(cg!<>X3uCmBZRft zwC+rcuTjF5dHFw8gU+o;+SeT-k|ZgocW9CNx#P9#jr2S|?vzrl;fyg{aEEc%iPng} z?F^eeO_Ln+O_EH6SKGV#Re4TJwHAvMFP@asFY$H#92*7+rJ08#YuqFGCP_X2ctqy- z{G%RWp?2=iKF>UPzmlh0=IgJ|+jeiMKg5>NfIvU&7QCHda^OFA#o1#|uk(I*`TFJb i|4%>Hnyrt&S;x#NzC%W9$_f)u{CK+hxvX -#include "GBView.h" -#include "GBImageView.h" -#include "GBSplitView.h" -#include "GBVisualizerView.h" -#include "GBOSDView.h" +#import "GBView.h" +#import "GBImageView.h" +#import "GBSplitView.h" +#import "GBVisualizerView.h" +#import "GBOSDView.h" +#import "GBDebuggerButton.h" @class GBCheatWindowController; +@class GBPaletteView; +@class GBObjectView; -@interface Document : NSDocument +@interface Document : NSDocument @property (nonatomic, readonly) GB_gameboy_t *gb; @property (nonatomic, strong) IBOutlet GBView *view; @property (nonatomic, strong) IBOutlet NSTextView *consoleOutput; @@ -29,8 +32,8 @@ @property (nonatomic, strong) IBOutlet NSTabView *vramTabView; @property (nonatomic, strong) IBOutlet NSPanel *vramWindow; @property (nonatomic, strong) IBOutlet NSTextField *vramStatusLabel; -@property (nonatomic, strong) IBOutlet NSTableView *paletteTableView; -@property (nonatomic, strong) IBOutlet NSTableView *spritesTableView; +@property (nonatomic, strong) IBOutlet GBPaletteView *paletteView; +@property (nonatomic, strong) IBOutlet GBObjectView *objectView; @property (nonatomic, strong) IBOutlet NSPanel *printerFeedWindow; @property (nonatomic, strong) IBOutlet NSImageView *feedImageView; @property (nonatomic, strong) IBOutlet NSTextView *debuggerSideViewInput; @@ -51,7 +54,20 @@ @property (strong) IBOutlet NSSegmentedControl *gbsNextPrevButton; @property (strong) IBOutlet GBVisualizerView *gbsVisualizer; @property (strong) IBOutlet GBOSDView *osdView; +@property (readonly) GB_oam_info_t *oamInfo; +@property uint8_t oamCount; +@property uint8_t oamHeight; +@property (strong) IBOutlet NSView *audioRecordingAccessoryView; +@property (strong) IBOutlet NSPopUpButton *audioFormatButton; +@property (strong) IBOutlet NSVisualEffectView *debuggerSidebarEffectView API_AVAILABLE(macos(10.10)); +@property (strong) IBOutlet GBDebuggerButton *debuggerContinueButton; +@property (strong) IBOutlet GBDebuggerButton *debuggerNextButton; +@property (strong) IBOutlet GBDebuggerButton *debuggerStepButton; +@property (strong) IBOutlet GBDebuggerButton *debuggerFinishButton; + + ++ (NSImage *) imageFromData:(NSData *)data width:(NSUInteger) width height:(NSUInteger) height scale:(double) scale; -(uint8_t) readMemory:(uint16_t) addr; -(void) writeMemory:(uint16_t) addr value:(uint8_t)value; -(void) performAtomicBlock: (void (^)())block; diff --git a/thirdparty/SameBoy/Cocoa/Document.m b/thirdparty/SameBoy/Cocoa/Document.m index 2a54a1391..1ecc04b1d 100644 --- a/thirdparty/SameBoy/Cocoa/Document.m +++ b/thirdparty/SameBoy/Cocoa/Document.m @@ -1,15 +1,47 @@ -#include -#include -#include -#include "GBAudioClient.h" -#include "Document.h" -#include "AppDelegate.h" -#include "HexFiend/HexFiend.h" -#include "GBMemoryByteArray.h" -#include "GBWarningPopover.h" -#include "GBCheatWindowController.h" -#include "GBTerminalTextFieldCell.h" -#include "BigSurToolbar.h" +#import +#import +#import +#import "GBAudioClient.h" +#import "Document.h" +#import "GBApp.h" +#import "HexFiend/HexFiend.h" +#import "GBMemoryByteArray.h" +#import "GBWarningPopover.h" +#import "GBCheatWindowController.h" +#import "GBTerminalTextFieldCell.h" +#import "BigSurToolbar.h" +#import "GBPaletteEditorController.h" +#import "GBObjectView.h" +#import "GBPaletteView.h" + +#define likely(x) GB_likely(x) +#define unlikely(x) GB_unlikely(x) + +@implementation NSString (relativePath) + +- (NSString *)pathRelativeToDirectory:(NSString *)directory +{ + NSMutableArray *baseComponents = [[directory pathComponents] mutableCopy]; + NSMutableArray *selfComponents = [[self pathComponents] mutableCopy]; + + while (baseComponents.count) { + if (![baseComponents.firstObject isEqualToString:selfComponents.firstObject]) { + break; + } + + [baseComponents removeObjectAtIndex:0]; + [selfComponents removeObjectAtIndex:0]; + } + while (baseComponents.count) { + [baseComponents removeObjectAtIndex:0]; + [selfComponents insertObject:@".." atIndex:0]; + } + return [selfComponents componentsJoinedByString:@"/"]; +} + +@end + +#define GB_MODEL_PAL_BIT_OLD 0x1000 /* Todo: The general Objective-C coding style conflicts with SameBoy's. This file needs a cleanup. */ /* Todo: Split into category files! This is so messy!!! */ @@ -20,10 +52,22 @@ MODEL_CGB, MODEL_AGB, MODEL_SGB, + MODEL_MGB, + + MODEL_QUICK_RESET = -1, }; @interface Document () +@property GBAudioClient *audioClient; +@end + +@implementation Document { + GB_gameboy_t gb; + volatile bool running; + volatile bool stopping; + NSConditionLock *has_debugger_input; + NSMutableArray *debugger_input_queue; NSMutableAttributedString *pending_console_output; NSRecursiveLock *console_output_lock; @@ -32,20 +76,18 @@ @interface Document () bool fullScreen; bool in_sync_input; + NSString *_debuggerCommandWhilePaused; HFController *hex_controller; - + NSString *lastConsoleInput; HFLineCountingRepresenter *lineRep; - + CVImageBufferRef cameraImage; AVCaptureSession *cameraSession; AVCaptureConnection *cameraConnection; AVCaptureStillImageOutput *cameraOutput; - GB_oam_info_t oamInfo[40]; - uint16_t oamCount; - uint8_t oamHeight; - bool oamUpdating; + GB_oam_info_t _oamInfo[40]; NSMutableData *currentPrinterImageData; enum {GBAccessoryNone, GBAccessoryPrinter, GBAccessoryWorkboy, GBAccessoryLinkCable} accessory; @@ -65,6 +107,7 @@ @interface Document () size_t audioBufferSize; size_t audioBufferPosition; size_t audioBufferNeeded; + double _volume; bool borderModeChanged; @@ -73,37 +116,23 @@ @interface Document () Document *slave; signed linkOffset; bool linkCableBit; + + NSSavePanel *_audioSavePanel; + bool _isRecordingAudio; + + void (^ volatile _pendingAtomicBlock)(); } -@property GBAudioClient *audioClient; -- (void) vblank; -- (void) log: (const char *) log withAttributes: (GB_log_attributes) attributes; -- (char *) getDebuggerInput; -- (char *) getAsyncDebuggerInput; -- (void) cameraRequestUpdate; -- (uint8_t) cameraGetPixelAtX:(uint8_t)x andY:(uint8_t)y; -- (void) printImage:(uint32_t *)image height:(unsigned) height - topMargin:(unsigned) topMargin bottomMargin: (unsigned) bottomMargin - exposure:(unsigned) exposure; -- (void) gotNewSample:(GB_sample_t *)sample; -- (void) rumbleChanged:(double)amp; -- (void) loadBootROM:(GB_boot_rom_t)type; -- (void)linkCableBitStart:(bool)bit; -- (bool)linkCableBitEnd; -- (void)infraredStateChanged:(bool)state; - -@end - static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) { Document *self = (__bridge Document *)GB_get_user_data(gb); [self loadBootROM: type]; } -static void vblank(GB_gameboy_t *gb) +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) { Document *self = (__bridge Document *)GB_get_user_data(gb); - [self vblank]; + [self vblankWithType:type]; } static void consoleLog(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes) @@ -191,15 +220,6 @@ static void infraredStateChanged(GB_gameboy_t *gb, bool on) } -@implementation Document -{ - GB_gameboy_t gb; - volatile bool running; - volatile bool stopping; - NSConditionLock *has_debugger_input; - NSMutableArray *debugger_input_queue; -} - - (instancetype)init { self = [super init]; @@ -208,6 +228,7 @@ - (instancetype)init debugger_input_queue = [[NSMutableArray alloc] init]; console_output_lock = [[NSRecursiveLock alloc] init]; audioLock = [[NSCondition alloc] init]; + _volume = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"]; } return self; } @@ -234,6 +255,7 @@ - (GB_model_t)internalModel return (GB_model_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"GBDMGModel"]; case MODEL_NONE: + case MODEL_QUICK_RESET: case MODEL_CGB: return (GB_model_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"GBCGBModel"]; @@ -245,30 +267,17 @@ - (GB_model_t)internalModel return model; } + case MODEL_MGB: + return GB_MODEL_MGB; + case MODEL_AGB: - return GB_MODEL_AGB; + return (GB_model_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"GBAGBModel"]; } } - (void) updatePalette { - switch ([[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorPalette"]) { - case 1: - GB_set_palette(&gb, &GB_PALETTE_DMG); - break; - - case 2: - GB_set_palette(&gb, &GB_PALETTE_MGB); - break; - - case 3: - GB_set_palette(&gb, &GB_PALETTE_GBL); - break; - - default: - GB_set_palette(&gb, &GB_PALETTE_GREY); - break; - } + GB_set_palette(&gb, [GBPaletteEditorController userPalette]); } - (void) updateBorderMode @@ -317,26 +326,29 @@ - (void) updateMinSize self.osdView.usesSGBScale = GB_get_screen_width(&gb) == 256; } -- (void) vblank +- (void) vblankWithType:(GB_vblank_type_t)type { if (_gbsVisualizer) { dispatch_async(dispatch_get_main_queue(), ^{ [_gbsVisualizer setNeedsDisplay:true]; }); } - [self.view flip]; - if (borderModeChanged) { - dispatch_sync(dispatch_get_main_queue(), ^{ - size_t previous_width = GB_get_screen_width(&gb); - GB_set_border_mode(&gb, (GB_border_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBBorderMode"]); - if (GB_get_screen_width(&gb) != previous_width) { - [self.view screenSizeChanged]; - [self updateMinSize]; - } - }); - borderModeChanged = false; + if (type != GB_VBLANK_TYPE_REPEAT) { + [self.view flip]; + if (borderModeChanged) { + dispatch_sync(dispatch_get_main_queue(), ^{ + size_t previous_width = GB_get_screen_width(&gb); + GB_set_border_mode(&gb, (GB_border_mode_t) [[NSUserDefaults standardUserDefaults] integerForKey:@"GBBorderMode"]); + if (GB_get_screen_width(&gb) != previous_width) { + [self.view screenSizeChanged]; + [self updateMinSize]; + } + }); + borderModeChanged = false; + } + GB_set_pixels_output(&gb, self.view.pixels); } - GB_set_pixels_output(&gb, self.view.pixels); + if (self.vramWindow.isVisible) { dispatch_async(dispatch_get_main_queue(), ^{ self.view.mouseHidingEnabled = (self.mainWindow.styleMask & NSWindowStyleMaskFullScreen) != 0; @@ -355,7 +367,7 @@ - (void)gotNewSample:(GB_sample_t *)sample [_gbsVisualizer addSample:sample]; } [audioLock lock]; - if (self.audioClient.isPlaying) { + if (_audioClient.isPlaying) { if (audioBufferPosition == audioBufferSize) { if (audioBufferSize >= 0x4000) { audioBufferPosition = 0; @@ -371,10 +383,9 @@ - (void)gotNewSample:(GB_sample_t *)sample } audioBuffer = realloc(audioBuffer, sizeof(*sample) * audioBufferSize); } - double volume = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"]; - if (volume != 1) { - sample->left *= volume; - sample->right *= volume; + if (_volume != 1) { + sample->left *= _volume; + sample->right *= _volume; } audioBuffer[audioBufferPosition++] = *sample; } @@ -394,12 +405,12 @@ - (void) preRun { GB_set_pixels_output(&gb, self.view.pixels); GB_set_sample_rate(&gb, 96000); - self.audioClient = [[GBAudioClient alloc] initWithRendererBlock:^(UInt32 sampleRate, UInt32 nFrames, GB_sample_t *buffer) { + _audioClient = [[GBAudioClient alloc] initWithRendererBlock:^(UInt32 sampleRate, UInt32 nFrames, GB_sample_t *buffer) { [audioLock lock]; if (audioBufferPosition < nFrames) { audioBufferNeeded = nFrames; - [audioLock wait]; + [audioLock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.125]]; } if (stopping || GB_debugger_is_stopped(&gb)) { @@ -408,7 +419,13 @@ - (void) preRun return; } - if (audioBufferPosition >= nFrames && audioBufferPosition < nFrames + 4800) { + if (audioBufferPosition < nFrames) { + // Not enough audio + memset(buffer, 0, (nFrames - audioBufferPosition) * sizeof(*buffer)); + memcpy(buffer, audioBuffer, audioBufferPosition * sizeof(*buffer)); + audioBufferPosition = 0; + } + else if (audioBufferPosition < nFrames + 4800) { memcpy(buffer, audioBuffer, nFrames * sizeof(*buffer)); memmove(audioBuffer, audioBuffer + nFrames, (audioBufferPosition - nFrames) * sizeof(*buffer)); audioBufferPosition = audioBufferPosition - nFrames; @@ -420,7 +437,7 @@ - (void) preRun [audioLock unlock]; } andSampleRate:96000]; if (![[NSUserDefaults standardUserDefaults] boolForKey:@"Mute"]) { - [self.audioClient start]; + [_audioClient start]; } hex_timer = [NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(reloadMemoryView) userInfo:nil repeats:true]; [[NSRunLoop mainRunLoop] addTimer:hex_timer forMode:NSDefaultRunLoopMode]; @@ -453,10 +470,9 @@ - (void) preRun return ret; } -- (void) run +- (void)run { assert(!master); - running = true; [self preRun]; if (slave) { [slave preRun]; @@ -469,6 +485,10 @@ - (void) run else { linkOffset -= masterTable[GB_run(&slave->gb)]; } + if (unlikely(_pendingAtomicBlock)) { + _pendingAtomicBlock(); + _pendingAtomicBlock = nil; + } } free(masterTable); free(slaveTable); @@ -486,6 +506,10 @@ - (void) run else { GB_run(&gb); } + if (unlikely(_pendingAtomicBlock)) { + _pendingAtomicBlock(); + _pendingAtomicBlock = nil; + } } } [self postRun]; @@ -500,11 +524,11 @@ - (void)postRun audioBufferPosition = audioBufferNeeded; [audioLock signal]; [audioLock unlock]; - [self.audioClient stop]; - self.audioClient = nil; + [_audioClient stop]; + _audioClient = nil; self.view.mouseHidingEnabled = false; - GB_save_battery(&gb, [[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sav"].path UTF8String]); - GB_save_cheats(&gb, [[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"cht"].path UTF8String]); + GB_save_battery(&gb, self.savPath.UTF8String); + GB_save_cheats(&gb, self.chtPath.UTF8String); unsigned time_to_alarm = GB_time_to_alarm(&gb); if (time_to_alarm) { @@ -528,6 +552,10 @@ - (void)postRun - (void) start { + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateDebuggerButtons]; + [slave updateDebuggerButtons]; + }); self.gbsPlayPauseButton.state = true; self.view.mouseHidingEnabled = (self.mainWindow.styleMask & NSWindowStyleMaskFullScreen) != 0; if (master) { @@ -535,11 +563,16 @@ - (void) start return; } if (running) return; + running = true; [[[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil] start]; } - (void) stop { + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateDebuggerButtons]; + [slave updateDebuggerButtons]; + }); self.gbsPlayPauseButton.state = false; if (master) { if (!master->running) return; @@ -572,12 +605,12 @@ - (void) stop - (void) loadBootROM: (GB_boot_rom_t)type { static NSString *const names[] = { - [GB_BOOT_ROM_DMG0] = @"dmg0_boot", + [GB_BOOT_ROM_DMG_0] = @"dmg0_boot", [GB_BOOT_ROM_DMG] = @"dmg_boot", [GB_BOOT_ROM_MGB] = @"mgb_boot", [GB_BOOT_ROM_SGB] = @"sgb_boot", [GB_BOOT_ROM_SGB2] = @"sgb2_boot", - [GB_BOOT_ROM_CGB0] = @"cgb0_boot", + [GB_BOOT_ROM_CGB_0] = @"cgb0_boot", [GB_BOOT_ROM_CGB] = @"cgb_boot", [GB_BOOT_ROM_AGB] = @"agb_boot", }; @@ -593,7 +626,12 @@ - (IBAction)reset:(id)sender current_model = (enum model)[sender tag]; } - GB_switch_model_and_reset(&gb, [self internalModel]); + if ([sender tag] == MODEL_QUICK_RESET) { + GB_quick_reset(&gb); + } + else { + GB_switch_model_and_reset(&gb, [self internalModel]); + } if (old_width != GB_get_screen_width(&gb)) { [self.view screenSizeChanged]; @@ -601,11 +639,12 @@ - (IBAction)reset:(id)sender [self updateMinSize]; - if ([sender tag] != 0) { + if ([sender tag] > MODEL_NONE) { /* User explictly selected a model, save the preference */ [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_DMG forKey:@"EmulateDMG"]; [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_SGB forKey:@"EmulateSGB"]; [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_AGB forKey:@"EmulateAGB"]; + [[NSUserDefaults standardUserDefaults] setBool:current_model == MODEL_MGB forKey:@"EmulateMGB"]; } /* Reload the ROM, SAV and SYM files */ @@ -694,7 +733,8 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)aController self.consoleWindow.title = [NSString stringWithFormat:@"Debug Console – %@", [self.fileURL.path lastPathComponent]]; - self.debuggerSplitView.dividerColor = [NSColor clearColor]; + self.debuggerSplitView.dividerColor = self.debuggerVerticalLine.borderColor; + [self.debuggerVerticalLine removeFromSuperview]; // No longer used, just there for the color if (@available(macOS 11.0, *)) { self.memoryWindow.toolbarStyle = NSWindowToolbarStyleExpanded; self.printerFeedWindow.toolbarStyle = NSWindowToolbarStyleUnifiedCompact; @@ -773,12 +813,26 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)aController name:@"GBCGBModelChanged" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(agbModelChanged) + name:@"GBAGBModelChanged" + object:nil]; + + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateVolume) + name:@"GBVolumeChanged" + object:nil]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateDMG"]) { current_model = MODEL_DMG; } else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateSGB"]) { current_model = MODEL_SGB; } + else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateMGB"]) { + current_model = MODEL_MGB; + } else { current_model = [[NSUserDefaults standardUserDefaults] boolForKey:@"EmulateAGB"]? MODEL_AGB : MODEL_CGB; } @@ -840,6 +894,7 @@ - (void) initMemoryView [layoutView setFrame:layoutViewFrame]; [layoutView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable | NSViewMaxYMargin]; [self.memoryView addSubview:layoutView]; + self.memoryView = layoutView; self.memoryBankItem.enabled = false; } @@ -900,7 +955,12 @@ - (void)prepareGBSInterface: (GB_gbs_info_t *)info for (NSView *view in [_mainWindow.contentView.subviews copy]) { [view removeFromSuperview]; } - [[NSBundle mainBundle] loadNibNamed:@"GBS" owner:self topLevelObjects:nil]; + if (@available(macOS 11, *)) { + [[NSBundle mainBundle] loadNibNamed:@"GBS11" owner:self topLevelObjects:nil]; + } + else { + [[NSBundle mainBundle] loadNibNamed:@"GBS" owner:self topLevelObjects:nil]; + } [_mainWindow setContentSize:self.gbsPlayerView.bounds.size]; _mainWindow.styleMask &= ~NSWindowStyleMaskResizable; dispatch_async(dispatch_get_main_queue(), ^{ // Cocoa is weird, no clue why it's needed @@ -928,8 +988,8 @@ - (void)prepareGBSInterface: (GB_gbs_info_t *)info [self.gbsNextPrevButton imageForSegment:i].template = true; } - if (!self.audioClient.isPlaying) { - [self.audioClient start]; + if (!_audioClient.isPlaying) { + [_audioClient start]; } if (@available(macOS 10.10, *)) { @@ -937,28 +997,124 @@ - (void)prepareGBSInterface: (GB_gbs_info_t *)info } } +- (bool)isCartContainer +{ + return [self.fileName.pathExtension.lowercaseString isEqualToString:@"gbcart"]; +} + +- (NSString *)savPath +{ + if (self.isCartContainer) { + return [self.fileName stringByAppendingPathComponent:@"battery.sav"]; + } + + return [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sav"].path; +} + +- (NSString *)chtPath +{ + if (self.isCartContainer) { + return [self.fileName stringByAppendingPathComponent:@"cheats.cht"]; + } + + return [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"cht"].path; +} + +- (NSString *)saveStatePath:(unsigned)index +{ + if (self.isCartContainer) { + return [self.fileName stringByAppendingPathComponent:[NSString stringWithFormat:@"state.s%u", index]]; + } + return [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"s%u", index]].path; +} + +- (NSString *)romPath +{ + NSString *fileName = self.fileName; + if (self.isCartContainer) { + NSArray *paths = [[NSString stringWithContentsOfFile:[fileName stringByAppendingPathComponent:@"rom.gbl"] + encoding:NSUTF8StringEncoding + error:nil] componentsSeparatedByString:@"\n"]; + fileName = nil; + bool needsRebuild = false; + for (NSString *path in paths) { + NSURL *url = [NSURL URLWithString:path relativeToURL:self.fileURL]; + if ([[NSFileManager defaultManager] fileExistsAtPath:url.path]) { + if (fileName && ![fileName isEqualToString:url.path]) { + needsRebuild = true; + break; + } + fileName = url.path; + } + else { + needsRebuild = true; + } + } + if (fileName && needsRebuild) { + [[NSString stringWithFormat:@"%@\n%@\n%@", + [fileName pathRelativeToDirectory:self.fileName], + fileName, + [[NSURL fileURLWithPath:fileName].fileReferenceURL.absoluteString substringFromIndex:strlen("file://")]] + writeToFile:[self.fileName stringByAppendingPathComponent:@"rom.gbl"] + atomically:false + encoding:NSUTF8StringEncoding + error:nil]; + } + } + + return fileName; +} + +static bool is_path_writeable(const char *path) +{ + if (!access(path, W_OK)) return true; + int fd = creat(path, 0644); + if (fd == -1) return false; + close(fd); + unlink(path); + return true; +} + - (int) loadROM { __block int ret = 0; + NSString *fileName = self.romPath; + if (!fileName) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:@"Could not locate the ROM referenced by this Game Boy Cartridge"]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + return 1; + } + NSString *rom_warnings = [self captureOutputForBlock:^{ GB_debugger_clear_symbols(&gb); - if ([[[self.fileType pathExtension] lowercaseString] isEqualToString:@"isx"]) { - ret = GB_load_isx(&gb, self.fileURL.path.UTF8String); - GB_load_battery(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"ram"].path.UTF8String); + if ([[[fileName pathExtension] lowercaseString] isEqualToString:@"isx"]) { + ret = GB_load_isx(&gb, fileName.UTF8String); + if (!self.isCartContainer) { + GB_load_battery(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"ram"].path.UTF8String); + } } - else if ([[[self.fileType pathExtension] lowercaseString] isEqualToString:@"gbs"]) { + else if ([[[fileName pathExtension] lowercaseString] isEqualToString:@"gbs"]) { __block GB_gbs_info_t info; - ret = GB_load_gbs(&gb, self.fileURL.path.UTF8String, &info); + ret = GB_load_gbs(&gb, fileName.UTF8String, &info); [self prepareGBSInterface:&info]; } else { - ret = GB_load_rom(&gb, [self.fileURL.path UTF8String]); + ret = GB_load_rom(&gb, [fileName UTF8String]); + } + if (GB_save_battery_size(&gb)) { + if (!is_path_writeable(self.savPath.UTF8String)) { + GB_log(&gb, "The save path for this ROM is not writeable, progress will not be saved.\n"); + } } - GB_load_battery(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sav"].path.UTF8String); - GB_load_cheats(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"cht"].path.UTF8String); - [self.cheatWindowController cheatsUpdated]; + GB_load_battery(&gb, self.savPath.UTF8String); + GB_load_cheats(&gb, self.chtPath.UTF8String); + dispatch_async(dispatch_get_main_queue(), ^{ + [self.cheatWindowController cheatsUpdated]; + }); GB_debugger_load_symbol_file(&gb, [[[NSBundle mainBundle] pathForResource:@"registers" ofType:@"sym"] UTF8String]); - GB_debugger_load_symbol_file(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"sym"].path.UTF8String); + GB_debugger_load_symbol_file(&gb, [[fileName stringByDeletingPathExtension] stringByAppendingPathExtension:@"sym"].UTF8String); }]; if (ret) { NSAlert *alert = [[NSAlert alloc] init]; @@ -1000,32 +1156,37 @@ - (IBAction) interrupt:(id)sender - (IBAction)mute:(id)sender { - if (self.audioClient.isPlaying) { - [self.audioClient stop]; + if (_audioClient.isPlaying) { + [_audioClient stop]; } else { - [self.audioClient start]; - if ([[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"] == 0) { + [_audioClient start]; + if (_volume == 0) { [GBWarningPopover popoverWithContents:@"Warning: Volume is set to to zero in the preferences panel" onWindow:self.mainWindow]; } } - [[NSUserDefaults standardUserDefaults] setBool:!self.audioClient.isPlaying forKey:@"Mute"]; + [[NSUserDefaults standardUserDefaults] setBool:!_audioClient.isPlaying forKey:@"Mute"]; +} + +- (bool) isPaused +{ + if (self.partner) { + return !self.partner->running || GB_debugger_is_stopped(&gb) || GB_debugger_is_stopped(&self.partner->gb); + } + return (!running) || GB_debugger_is_stopped(&gb); } - (BOOL)validateUserInterfaceItem:(id)anItem { if ([anItem action] == @selector(mute:)) { - [(NSMenuItem *)anItem setState:!self.audioClient.isPlaying]; + [(NSMenuItem *)anItem setState:!_audioClient.isPlaying]; } else if ([anItem action] == @selector(togglePause:)) { - if (master) { - [(NSMenuItem *)anItem setState:(!master->running) || (GB_debugger_is_stopped(&gb)) || (GB_debugger_is_stopped(&gb))]; - } - [(NSMenuItem *)anItem setState:(!running) || (GB_debugger_is_stopped(&gb))]; + [(NSMenuItem *)anItem setState:self.isPaused]; return !GB_debugger_is_stopped(&gb); } - else if ([anItem action] == @selector(reset:) && anItem.tag != MODEL_NONE) { - [(NSMenuItem*)anItem setState:anItem.tag == current_model]; + else if ([anItem action] == @selector(reset:) && anItem.tag != MODEL_NONE && anItem.tag != MODEL_QUICK_RESET) { + [(NSMenuItem *)anItem setState:anItem.tag == current_model]; } else if ([anItem action] == @selector(interrupt:)) { if (![[NSUserDefaults standardUserDefaults] boolForKey:@"DeveloperMode"]) { @@ -1033,21 +1194,34 @@ - (BOOL)validateUserInterfaceItem:(id)anItem } } else if ([anItem action] == @selector(disconnectAllAccessories:)) { - [(NSMenuItem*)anItem setState:accessory == GBAccessoryNone]; + [(NSMenuItem *)anItem setState:accessory == GBAccessoryNone]; } else if ([anItem action] == @selector(connectPrinter:)) { - [(NSMenuItem*)anItem setState:accessory == GBAccessoryPrinter]; + [(NSMenuItem *)anItem setState:accessory == GBAccessoryPrinter]; } else if ([anItem action] == @selector(connectWorkboy:)) { - [(NSMenuItem*)anItem setState:accessory == GBAccessoryWorkboy]; + [(NSMenuItem *)anItem setState:accessory == GBAccessoryWorkboy]; } else if ([anItem action] == @selector(connectLinkCable:)) { - [(NSMenuItem*)anItem setState:[(NSMenuItem *)anItem representedObject] == master || + [(NSMenuItem *)anItem setState:[(NSMenuItem *)anItem representedObject] == master || [(NSMenuItem *)anItem representedObject] == slave]; } else if ([anItem action] == @selector(toggleCheats:)) { - [(NSMenuItem*)anItem setState:GB_cheats_enabled(&gb)]; + [(NSMenuItem *)anItem setState:GB_cheats_enabled(&gb)]; + } + else if ([anItem action] == @selector(toggleDisplayBackground:)) { + [(NSMenuItem *)anItem setState:!GB_is_background_rendering_disabled(&gb)]; + } + else if ([anItem action] == @selector(toggleDisplayObjects:)) { + [(NSMenuItem *)anItem setState:!GB_is_object_rendering_disabled(&gb)]; + } + else if ([anItem action] == @selector(toggleAudioRecording:)) { + [(NSMenuItem *)anItem setTitle:_isRecordingAudio? @"Stop Audio Recording" : @"Start Audio Recording…"]; + } + else if ([anItem action] == @selector(toggleAudioChannel:)) { + [(NSMenuItem *)anItem setState:!GB_is_channel_muted(&gb, [anItem tag])]; } + return [super validateUserInterfaceItem:anItem]; } @@ -1114,9 +1288,8 @@ - (void) appendPendingOutput [self.consoleWindow orderFront:nil]; } pending_console_output = nil; -} + } [console_output_lock unlock]; - } - (void) log: (const char *) string withAttributes: (GB_log_attributes) attributes @@ -1171,6 +1344,25 @@ - (IBAction)showConsoleWindow:(id)sender [self.consoleWindow orderBack:nil]; } +- (void)queueDebuggerCommand:(NSString *)command +{ + if (!master && !running && !GB_debugger_is_stopped(&gb)) { + _debuggerCommandWhilePaused = command; + GB_debugger_break(&gb); + [self start]; + return; + } + + if (!in_sync_input) { + [self log:">"]; + } + [self log:[command UTF8String]]; + [self log:"\n"]; + [has_debugger_input lock]; + [debugger_input_queue addObject:command]; + [has_debugger_input unlockWithCondition:1]; +} + - (IBAction)consoleInput:(NSTextField *)sender { NSString *line = [sender stringValue]; @@ -1183,15 +1375,8 @@ - (IBAction)consoleInput:(NSTextField *)sender else { line = @""; } - - if (!in_sync_input) { - [self log:">"]; - } - [self log:[line UTF8String]]; - [self log:"\n"]; - [has_debugger_input lock]; - [debugger_input_queue addObject:line]; - [has_debugger_input unlockWithCondition:1]; + + [self queueDebuggerCommand: line]; [sender setStringValue:@""]; } @@ -1239,14 +1424,29 @@ - (void) updateSideView [console_output_lock unlock]; } -- (char *) getDebuggerInput +- (char *)getDebuggerInput { + bool isPlaying = _audioClient.isPlaying; + if (isPlaying) { + [_audioClient stop]; + } [audioLock lock]; [audioLock signal]; [audioLock unlock]; + in_sync_input = true; [self updateSideView]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateDebuggerButtons]; + }); + [self.partner updateDebuggerButtons]; [self log:">"]; - in_sync_input = true; + if (_debuggerCommandWhilePaused) { + NSString *command = _debuggerCommandWhilePaused; + _debuggerCommandWhilePaused = nil; + dispatch_async(dispatch_get_main_queue(), ^{ + [self queueDebuggerCommand:command]; + }); + } [has_debugger_input lockWhenCondition:1]; NSString *input = [debugger_input_queue firstObject]; [debugger_input_queue removeObjectAtIndex:0]; @@ -1258,7 +1458,12 @@ - (char *) getDebuggerInput shouldClearSideView = false; [self.debuggerSideView setString:@""]; } + [self updateDebuggerButtons]; + [self.partner updateDebuggerButtons]; }); + if (isPlaying) { + [_audioClient start]; + } if ((id) input == [NSNull null]) { return NULL; } @@ -1283,7 +1488,7 @@ - (IBAction)saveState:(id)sender { bool __block success = false; [self performAtomicBlock:^{ - success = GB_save_state(&gb, [[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"s%ld", (long)[sender tag] ]].path.UTF8String) == 0; + success = GB_save_state(&gb, [self saveStatePath:[sender tag]].UTF8String) == 0; }]; if (!success) { @@ -1321,8 +1526,8 @@ - (int)loadStateFile:(const char *)path noErrorOnNotFound:(bool)noErrorOnFileNot - (IBAction)loadState:(id)sender { - int ret = [self loadStateFile:[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"s%ld", (long)[sender tag]]].path.UTF8String noErrorOnNotFound:true]; - if (ret == ENOENT) { + int ret = [self loadStateFile:[self saveStatePath:[sender tag]].UTF8String noErrorOnNotFound:true]; + if (ret == ENOENT && !self.isCartContainer) { [self loadStateFile:[[self.fileURL URLByDeletingPathExtension] URLByAppendingPathExtension:[NSString stringWithFormat:@"sn%ld", (long)[sender tag]]].path.UTF8String noErrorOnNotFound:false]; } } @@ -1340,7 +1545,7 @@ - (void)log:(const char *)log - (uint8_t) readMemory:(uint16_t)addr { while (!GB_is_inited(&gb)); - return GB_read_memory(&gb, addr); + return GB_safe_read_memory(&gb, addr); } - (void) writeMemory:(uint16_t)addr value:(uint8_t)value @@ -1352,20 +1557,25 @@ - (void) writeMemory:(uint16_t)addr value:(uint8_t)value - (void) performAtomicBlock: (void (^)())block { while (!GB_is_inited(&gb)); - bool was_running = running && !GB_debugger_is_stopped(&gb); + bool isRunning = running && !GB_debugger_is_stopped(&gb); if (master) { - was_running |= master->running; + isRunning |= master->running; } - if (was_running) { - [self stop]; + if (!isRunning) { + block(); + return; } - block(); - if (was_running) { - [self start]; + + if (master) { + [master performAtomicBlock:block]; + return; } + + _pendingAtomicBlock = block; + while (_pendingAtomicBlock); } -- (NSString *) captureOutputForBlock: (void (^)())block +- (NSString *)captureOutputForBlock: (void (^)())block { capturedOutput = [[NSMutableString alloc] init]; [self performAtomicBlock:block]; @@ -1376,28 +1586,21 @@ - (NSString *) captureOutputForBlock: (void (^)())block + (NSImage *) imageFromData:(NSData *)data width:(NSUInteger) width height:(NSUInteger) height scale:(double) scale { - CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef) data); - CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); - CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; - CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; - - CGImageRef iref = CGImageCreate(width, - height, - 8, - 32, - 4 * width, - colorSpaceRef, - bitmapInfo, - provider, - NULL, - true, - renderingIntent); - CGDataProviderRelease(provider); - CGColorSpaceRelease(colorSpaceRef); - - NSImage *ret = [[NSImage alloc] initWithCGImage:iref size:NSMakeSize(width * scale, height * scale)]; - CGImageRelease(iref); + NSImage *ret = [[NSImage alloc] initWithSize:NSMakeSize(width * scale, height * scale)]; + NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL + pixelsWide:width + pixelsHigh:height + bitsPerSample:8 + samplesPerPixel:3 + hasAlpha:false + isPlanar:false + colorSpaceName:NSDeviceRGBColorSpace + bitmapFormat:0 + bytesPerRow:4 * width + bitsPerPixel:32]; + memcpy(rep.bitmapData, data.bytes, data.length); + [ret addRepresentation:rep]; return ret; } @@ -1411,6 +1614,7 @@ - (void) reloadMemoryView - (IBAction) reloadVRAMData: (id) sender { if (self.vramWindow.isVisible) { + uint8_t *io_regs = GB_get_direct_access(&gb, GB_DIRECT_ACCESS_IO, NULL, NULL); switch ([self.vramTabView.tabViewItems indexOfObject:self.vramTabView.selectedTabViewItem]) { case 0: /* Tileset */ @@ -1449,8 +1653,8 @@ - (IBAction) reloadVRAMData: (id) sender (GB_map_type_t) self.tilemapMapButton.indexOfSelectedItem, (GB_tileset_type_t) self.TilemapSetButton.indexOfSelectedItem); - self.tilemapImageView.scrollRect = NSMakeRect(GB_read_memory(&gb, 0xFF00 | GB_IO_SCX), - GB_read_memory(&gb, 0xFF00 | GB_IO_SCY), + self.tilemapImageView.scrollRect = NSMakeRect(io_regs[GB_IO_SCX], + io_regs[GB_IO_SCY], 160, 144); self.tilemapImageView.image = [Document imageFromData:data width:256 height:256 scale:1.0]; self.tilemapImageView.layer.magnificationFilter = kCAFilterNearest; @@ -1460,13 +1664,9 @@ - (IBAction) reloadVRAMData: (id) sender case 2: /* OAM */ { - oamCount = GB_get_oam_info(&gb, oamInfo, &oamHeight); + _oamCount = GB_get_oam_info(&gb, _oamInfo, &_oamHeight); dispatch_async(dispatch_get_main_queue(), ^{ - if (!oamUpdating) { - oamUpdating = true; - [self.spritesTableView reloadData]; - oamUpdating = false; - } + [self.objectView reloadData:self]; }); } break; @@ -1475,7 +1675,7 @@ - (IBAction) reloadVRAMData: (id) sender /* Palettes */ { dispatch_async(dispatch_get_main_queue(), ^{ - [self.paletteTableView reloadData]; + [self.paletteView reloadData:self]; }); } break; @@ -1503,9 +1703,17 @@ - (IBAction)hexGoTo:(id)sender GB_log(&gb, "Value $%04x is out of range.\n", addr); return; } - [hex_controller setSelectedContentsRanges:@[[HFRangeWrapper withRange:HFRangeMake(addr, 0)]]]; - [hex_controller _ensureVisibilityOfLocation:addr]; - [self.memoryWindow makeFirstResponder:self.memoryView.subviews[0].subviews[0]]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [hex_controller setSelectedContentsRanges:@[[HFRangeWrapper withRange:HFRangeMake(addr, 0)]]]; + [hex_controller _ensureVisibilityOfLocation:addr]; + for (HFRepresenter *representer in hex_controller.representers) { + if ([representer isKindOfClass:[HFHexTextRepresenter class]]) { + [self.memoryWindow makeFirstResponder:representer.view]; + break; + } + } + }); }]; if (error) { NSBeep(); @@ -1553,7 +1761,9 @@ - (void)hexUpdateBank:(NSControl *)sender ignoreErrors: (bool)ignore_errors [sender setStringValue:[NSString stringWithFormat:@"$%x", bank]]; [(GBMemoryByteArray *)(hex_controller.byteArray) setSelectedBank:bank]; - [hex_controller reloadData]; + dispatch_async(dispatch_get_main_queue(), ^{ + [hex_controller reloadData]; + }); }]; if (error && !ignore_errors) { @@ -1598,7 +1808,9 @@ - (IBAction)hexUpdateSpace:(NSPopUpButtonCell *)sender } [self.memoryBankInput setStringValue:[NSString stringWithFormat:@"$%x", byteArray.selectedBank]]; [hex_controller reloadData]; - [self.memoryView setNeedsDisplay:true]; + for (NSView *view in self.memoryView.subviews) { + [view setNeedsDisplay:true]; + } } - (GB_gameboy_t *) gameboy @@ -1742,14 +1954,14 @@ - (IBAction)vramTabChanged:(NSSegmentedControl *)sender window_rect.origin.y += window_rect.size.height; switch ([sender selectedSegment]) { case 0: + case 2: window_rect.size.height = 384 + height_diff + 48; break; case 1: - case 2: window_rect.size.height = 512 + height_diff + 48; break; case 3: - window_rect.size.height = 20 * 16 + height_diff + 34; + window_rect.size.height = 24 * 16 + height_diff; break; default: @@ -1780,12 +1992,12 @@ - (void)imageView:(GBImageView *)view mouseMovedToX:(NSUInteger)x Y:(NSUInteger) uint8_t lcdc = ((uint8_t *)GB_get_direct_access(&gb, GB_DIRECT_ACCESS_IO, NULL, NULL))[GB_IO_LCDC]; uint8_t *vram = GB_get_direct_access(&gb, GB_DIRECT_ACCESS_VRAM, NULL, NULL); - if (map_type == GB_MAP_9C00 || (map_type == GB_MAP_AUTO && lcdc & 0x08)) { - map_base = 0x1c00; + if (map_type == GB_MAP_9C00 || (map_type == GB_MAP_AUTO && lcdc & GB_LCDC_BG_MAP)) { + map_base = 0x1C00; } if (tileset_type == GB_TILESET_AUTO) { - tileset_type = (lcdc & 0x10)? GB_TILESET_8800 : GB_TILESET_8000; + tileset_type = (lcdc & GB_LCDC_TILE_SEL)? GB_TILESET_8800 : GB_TILESET_8000; } uint8_t tile = vram[map_base + map_offset]; @@ -1822,79 +2034,9 @@ - (void)imageView:(GBImageView *)view mouseMovedToX:(NSUInteger)x Y:(NSUInteger) } } -- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView -{ - if (tableView == self.paletteTableView) { - return 16; /* 8 BG palettes, 8 OBJ palettes*/ - } - else if (tableView == self.spritesTableView) { - return oamCount; - } - return 0; -} - -- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row -{ - NSUInteger columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; - if (tableView == self.paletteTableView) { - if (columnIndex == 0) { - return [NSString stringWithFormat:@"%s %u", row >= 8 ? "Object" : "Background", (unsigned)(row & 7)]; - } - - uint8_t *palette_data = GB_get_direct_access(&gb, row >= 8? GB_DIRECT_ACCESS_OBP : GB_DIRECT_ACCESS_BGP, NULL, NULL); - - uint16_t index = columnIndex - 1 + (row & 7) * 4; - return @((palette_data[(index << 1) + 1] << 8) | palette_data[(index << 1)]); - } - else if (tableView == self.spritesTableView) { - switch (columnIndex) { - case 0: - return [Document imageFromData:[NSData dataWithBytesNoCopy:oamInfo[row].image - length:64 * 4 * 2 - freeWhenDone:false] - width:8 - height:oamHeight - scale:16.0/oamHeight]; - case 1: - return @((unsigned)oamInfo[row].x - 8); - case 2: - return @((unsigned)oamInfo[row].y - 16); - case 3: - return [NSString stringWithFormat:@"$%02x", oamInfo[row].tile]; - case 4: - return [NSString stringWithFormat:@"$%04x", 0x8000 + oamInfo[row].tile * 0x10]; - case 5: - return [NSString stringWithFormat:@"$%04x", oamInfo[row].oam_addr]; - case 6: - if (GB_is_cgb(&gb)) { - return [NSString stringWithFormat:@"%c%c%c%d%d", - oamInfo[row].flags & 0x80? 'P' : '-', - oamInfo[row].flags & 0x40? 'Y' : '-', - oamInfo[row].flags & 0x20? 'X' : '-', - oamInfo[row].flags & 0x08? 1 : 0, - oamInfo[row].flags & 0x07]; - } - return [NSString stringWithFormat:@"%c%c%c%d", - oamInfo[row].flags & 0x80? 'P' : '-', - oamInfo[row].flags & 0x40? 'Y' : '-', - oamInfo[row].flags & 0x20? 'X' : '-', - oamInfo[row].flags & 0x10? 1 : 0]; - case 7: - return oamInfo[row].obscured_by_line_limit? @"Dropped: Too many sprites in line": @""; - - } - } - return nil; -} - -- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row +- (GB_oam_info_t *)oamInfo { - return tableView == self.spritesTableView; -} - -- (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row -{ - return false; + return _oamInfo; } - (IBAction)showVRAMViewer:(id)sender @@ -1944,7 +2086,7 @@ - (IBAction)savePrinterFeed:(id)sender { bool shouldResume = running; [self stop]; - NSSavePanel * savePanel = [NSSavePanel savePanel]; + NSSavePanel *savePanel = [NSSavePanel savePanel]; [savePanel setAllowedFileTypes:@[@"png"]]; [savePanel beginSheetModalForWindow:self.printerFeedWindow completionHandler:^(NSInteger result) { if (result == NSModalResponseOK) { @@ -1991,6 +2133,11 @@ - (IBAction)connectWorkboy:(id)sender }]; } +- (void) updateVolume +{ + _volume = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBVolume"]; +} + - (void) updateHighpassFilter { if (GB_is_inited(&gb)) { @@ -2067,6 +2214,15 @@ - (void)cgbModelChanged modelsChanging = false; } +- (void)agbModelChanged +{ + modelsChanging = true; + if (current_model == MODEL_AGB) { + [self reset:nil]; + } + modelsChanging = false; +} + - (void)setFileURL:(NSURL *)fileURL { [super setFileURL:fileURL]; @@ -2106,11 +2262,6 @@ - (void)splitViewDidResizeSubviews:(NSNotification *)notification if ([[[splitview arrangedSubviews] firstObject] frame].size.width < 600) { [splitview setPosition:600 ofDividerAtIndex:0]; } - /* NSSplitView renders its separator without the proper vibrancy, so we made it transparent and move an - NSBox-based separator that renders properly so it acts like the split view's separator. */ - NSRect rect = self.debuggerVerticalLine.frame; - rect.origin.x = [[[splitview arrangedSubviews] firstObject] frame].size.width - 1; - self.debuggerVerticalLine.frame = rect; } - (IBAction)showCheats:(id)sender @@ -2128,6 +2279,7 @@ - (void)disconnectLinkCable bool wasRunning = self->running; Document *partner = master ?: slave; if (partner) { + wasRunning |= partner->running; [self stop]; partner->master = nil; partner->slave = nil; @@ -2207,6 +2359,12 @@ - (NSImage *)takeScreenshot NSImage *ret = nil; if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBFilterScreenshots"]) { ret = [_view renderToImage]; + [ret lockFocus]; + NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, + ret.size.width, ret.size.height)]; + [ret unlockFocus]; + ret = [[NSImage alloc] initWithSize:ret.size]; + [ret addRepresentation:bitmapRep]; } if (!ret) { ret = [Document imageFromData:[NSData dataWithBytesNoCopy:_view.currentBuffer @@ -2216,12 +2374,6 @@ - (NSImage *)takeScreenshot height:GB_get_screen_height(&gb) scale:1.0]; } - [ret lockFocus]; - NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, - ret.size.width, ret.size.height)]; - [ret unlockFocus]; - ret = [[NSImage alloc] initWithSize:ret.size]; - [ret addRepresentation:bitmapRep]; return ret; } @@ -2312,4 +2464,187 @@ - (IBAction)copyScreenshot:(id)sender [self.osdView displayText:@"Screenshot copied"]; } +- (IBAction)toggleDisplayBackground:(id)sender +{ + GB_set_background_rendering_disabled(&gb, !GB_is_background_rendering_disabled(&gb)); +} + +- (IBAction)toggleDisplayObjects:(id)sender +{ + GB_set_object_rendering_disabled(&gb, !GB_is_object_rendering_disabled(&gb)); +} + +- (IBAction)newCartridgeInstance:(id)sender +{ + bool shouldResume = running; + [self stop]; + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setAllowedFileTypes:@[@"gbcart"]]; + [savePanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [savePanel orderOut:self]; + NSString *romPath = self.romPath; + [[NSFileManager defaultManager] trashItemAtURL:savePanel.URL resultingItemURL:nil error:nil]; + [[NSFileManager defaultManager] createDirectoryAtURL:savePanel.URL withIntermediateDirectories:false attributes:nil error:nil]; + [[NSString stringWithFormat:@"%@\n%@\n%@", + [romPath pathRelativeToDirectory:savePanel.URL.path], + romPath, + [[NSURL fileURLWithPath:romPath].fileReferenceURL.absoluteString substringFromIndex:strlen("file://")] + ] writeToURL:[savePanel.URL URLByAppendingPathComponent:@"rom.gbl"] atomically:false encoding:NSUTF8StringEncoding error:nil]; + [[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:savePanel.URL display:true completionHandler:nil]; + } + if (shouldResume) { + [self start]; + } + }]; +} + +- (IBAction)toggleAudioRecording:(id)sender +{ + + bool shouldResume = running; + [self stop]; + if (_isRecordingAudio) { + _isRecordingAudio = false; + int error = GB_stop_audio_recording(&gb); + if (error) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:[NSString stringWithFormat:@"Could not finalize recording: %s", strerror(error)]]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + } + else { + [self.osdView displayText:@"Audio recording ended"]; + } + if (shouldResume) { + [self start]; + } + return; + } + _audioSavePanel = [NSSavePanel savePanel]; + if (!self.audioRecordingAccessoryView) { + [[NSBundle mainBundle] loadNibNamed:@"AudioRecordingAccessoryView" owner:self topLevelObjects:nil]; + } + _audioSavePanel.accessoryView = self.audioRecordingAccessoryView; + [self audioFormatChanged:self.audioFormatButton]; + + [_audioSavePanel beginSheetModalForWindow:self.mainWindow completionHandler:^(NSInteger result) { + if (result == NSModalResponseOK) { + [_audioSavePanel orderOut:self]; + int error = GB_start_audio_recording(&gb, _audioSavePanel.URL.fileSystemRepresentation, self.audioFormatButton.selectedTag); + if (error) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:[NSString stringWithFormat:@"Could not start recording: %s", strerror(error)]]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + } + else { + [self.osdView displayText:@"Audio recording started"]; + _isRecordingAudio = true; + } + } + if (shouldResume) { + [self start]; + } + _audioSavePanel = nil; + }]; +} + +- (IBAction)audioFormatChanged:(NSPopUpButton *)sender +{ + switch ((GB_audio_format_t)sender.selectedTag) { + case GB_AUDIO_FORMAT_RAW: + _audioSavePanel.allowedFileTypes = @[@"raw", @"pcm"]; + break; + case GB_AUDIO_FORMAT_AIFF: + _audioSavePanel.allowedFileTypes = @[@"aiff", @"aif", @"aifc"]; + break; + case GB_AUDIO_FORMAT_WAV: + _audioSavePanel.allowedFileTypes = @[@"wav"]; + break; + } +} + +- (IBAction)toggleAudioChannel:(NSMenuItem *)sender +{ + GB_set_channel_muted(&gb, sender.tag, !GB_is_channel_muted(&gb, sender.tag)); +} + +- (IBAction)cartSwap:(id)sender +{ + bool wasRunning = running; + if (wasRunning) { + [self stop]; + } + [[NSDocumentController sharedDocumentController] beginOpenPanelWithCompletionHandler:^(NSArray *urls) { + if (urls.count == 1) { + bool ok = true; + for (Document *document in [NSDocumentController sharedDocumentController].documents) { + if ([document.fileURL isEqual:urls.firstObject]) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:[NSString stringWithFormat:@"‘%@’ is already open in another window. Close ‘%@’ before hot swapping it into this instance.", + urls.firstObject.lastPathComponent, urls.firstObject.lastPathComponent]]; + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; + ok = false; + break; + } + } + if (ok) { + GB_save_battery(&gb, self.savPath.UTF8String); + self.fileURL = urls.firstObject; + [self loadROM]; + } + } + if (wasRunning) { + [self start]; + } + }]; +} + +- (void)updateDebuggerButtons +{ + bool updateContinue = false; + if (@available(macOS 10.10, *)) { + if ([self.consoleInput.placeholderAttributedString.string isEqualToString:self.debuggerContinueButton.alternateTitle]) { + [self.debuggerContinueButton mouseExited:nil]; + updateContinue = true; + } + } + if (self.isPaused) { + self.debuggerContinueButton.toolTip = self.debuggerContinueButton.title = @"Continue"; + self.debuggerContinueButton.alternateTitle = @"continue"; + self.debuggerContinueButton.imagePosition = NSImageOnly; + if (@available(macOS 10.14, *)) { + self.debuggerContinueButton.contentTintColor = nil; + } + self.debuggerContinueButton.image = [NSImage imageNamed:@"ContinueTemplate"]; + + self.debuggerNextButton.enabled = true; + self.debuggerStepButton.enabled = true; + self.debuggerFinishButton.enabled = true; + } + else { + self.debuggerContinueButton.toolTip = self.debuggerContinueButton.title = @"Interrupt"; + self.debuggerContinueButton.alternateTitle = @"interrupt"; + self.debuggerContinueButton.imagePosition = NSImageOnly; + if (@available(macOS 10.14, *)) { + self.debuggerContinueButton.contentTintColor = [NSColor controlAccentColor]; + } + self.debuggerContinueButton.image = [NSImage imageNamed:@"InterruptTemplate"]; + + self.debuggerNextButton.enabled = false; + self.debuggerStepButton.enabled = false; + self.debuggerFinishButton.enabled = false; + } + if (updateContinue) { + [self.debuggerContinueButton mouseEntered:nil]; + } +} + +- (IBAction)debuggerButtonPressed:(NSButton *)sender +{ + [self queueDebuggerCommand:sender.alternateTitle]; +} + @end diff --git a/thirdparty/SameBoy/Cocoa/Document.xib b/thirdparty/SameBoy/Cocoa/Document.xib index c76c148ac..bbdaf7ea7 100644 --- a/thirdparty/SameBoy/Cocoa/Document.xib +++ b/thirdparty/SameBoy/Cocoa/Document.xib @@ -3,6 +3,7 @@ + @@ -14,9 +15,14 @@ + + + + + @@ -25,10 +31,10 @@ + - + - @@ -83,54 +89,35 @@ - + - - - - - - - - - NSAllRomanInputSourcesLocaleIdentifier - - - - - - - - - - - + - + - + - + - - + + - - + + - - + + @@ -138,29 +125,112 @@ - - + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + - - + + - + - + @@ -186,22 +256,22 @@ - + - + - - + + - + - + @@ -216,7 +286,7 @@ - + @@ -341,17 +411,17 @@ - + - + - + @@ -360,7 +430,7 @@ - + @@ -392,7 +462,7 @@ - + @@ -431,7 +501,7 @@ - + @@ -464,7 +534,7 @@ - + @@ -482,7 +552,7 @@ - + @@ -502,252 +572,47 @@ - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + - - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -770,7 +635,7 @@ - + @@ -840,7 +705,7 @@ - + @@ -931,7 +796,6 @@ - @@ -947,7 +811,6 @@ - @@ -963,7 +826,6 @@ - @@ -971,7 +833,7 @@ - + @@ -986,7 +848,7 @@ - + @@ -998,7 +860,7 @@ - + @@ -1051,7 +913,7 @@ - + @@ -1082,7 +944,12 @@ + + + + + diff --git a/thirdparty/SameBoy/Cocoa/FinishTemplate.png b/thirdparty/SameBoy/Cocoa/FinishTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa831df73596fd2f9a32001ff6826a77677d63a GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh0wlLOK8*rWxt=bLArhC@p4}*T$Uwm5;`9X_ zd=f4W!tZ##AHL8c8X%xJk)wviLE+}P8@zen%KquxT+(&ystS8o;3X}|yUhO8-m0bD zcXrmCSfgVW-xd5~-`d?Do_|{XW9~kgGlz0Ec-?DxZFTbE;l$NX?&R%byjs(|>xk&4 Qe4xb)p00i_>zopr0IDoRVE_OC literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/FinishTemplate@2x.png b/thirdparty/SameBoy/Cocoa/FinishTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..06bbcd4909ebeb50f237e5b82dc6bdf466092090 GIT binary patch literal 298 zcmV+_0oDGAP)7~>3uxszsDMh1WAT8Hu**J(rQcLL z$$uv^-wZI;ScpO_G)C(OOpC~NOxNH@2(^Kd1|~unw_qbobX6@hEjSm3ox!0n525EU z1uE!y$4zJO7H?Kogz%tWg!=03;T&xTTx%?g$Wqf*3(+=Onnp@hI8IqRs@VT$&tF&k z2X}m|5_gbZf>gzq%`%4YoL#By02jVCiBIQ}i<<&@+9V!#Ki>zQnF(R$^e~WnA>5_f wS)Em8swY1Dxb&TyYTk}3;WckZ9xNR5FO9nJ6)pIfw*UYD07*qoM6N<$f^DvSjsO4v literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/GBApp.h b/thirdparty/SameBoy/Cocoa/GBApp.h new file mode 100644 index 000000000..0ad7ac309 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBApp.h @@ -0,0 +1,26 @@ +#import +#import +#import + +@interface GBApp : NSApplication + +@property (nonatomic, strong) IBOutlet NSWindow *preferencesWindow; +@property (nonatomic, strong) IBOutlet NSView *graphicsTab; +@property (nonatomic, strong) IBOutlet NSView *emulationTab; +@property (nonatomic, strong) IBOutlet NSView *audioTab; +@property (nonatomic, strong) IBOutlet NSView *controlsTab; +@property (nonatomic, strong) IBOutlet NSView *updatesTab; +- (IBAction)showPreferences: (id) sender; +- (IBAction)toggleDeveloperMode:(id)sender; +- (IBAction)switchPreferencesTab:(id)sender; +@property (nonatomic, weak) IBOutlet NSMenuItem *linkCableMenuItem; +@property (nonatomic, strong) IBOutlet NSWindow *updateWindow; +@property (nonatomic, strong) IBOutlet WebView *updateChanges; +@property (nonatomic, strong) IBOutlet NSProgressIndicator *updatesSpinner; +@property (strong) IBOutlet NSButton *updatesButton; +@property (strong) IBOutlet NSTextField *updateProgressLabel; +@property (strong) IBOutlet NSButton *updateProgressButton; +@property (strong) IBOutlet NSWindow *updateProgressWindow; +@property (strong) IBOutlet NSProgressIndicator *updateProgressSpinner; +@end + diff --git a/thirdparty/SameBoy/Cocoa/GBApp.m b/thirdparty/SameBoy/Cocoa/GBApp.m new file mode 100644 index 000000000..588de44b1 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBApp.m @@ -0,0 +1,663 @@ +#import "GBApp.h" +#import "GBButtons.h" +#import "GBView.h" +#import "Document.h" +#import "GBJoyConManager.h" +#import +#import +#import +#import +#import + +#define UPDATE_SERVER "https://sameboy.github.io" + +static uint32_t color_to_int(NSColor *color) +{ + color = [color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + return (((unsigned)(color.redComponent * 0xFF)) << 16) | + (((unsigned)(color.greenComponent * 0xFF)) << 8) | + ((unsigned)(color.blueComponent * 0xFF)); +} + +@implementation GBApp +{ + NSArray *_preferencesTabs; + NSString *_lastVersion; + NSString *_updateURL; + NSURLSessionDownloadTask *_updateTask; + enum { + UPDATE_DOWNLOADING, + UPDATE_EXTRACTING, + UPDATE_WAIT_INSTALL, + UPDATE_INSTALLING, + UPDATE_FAILED, + } _updateState; + NSString *_downloadDirectory; + AuthorizationRef _auth; + bool _simulatingMenuEvent; +} + +- (void) applicationDidFinishLaunching:(NSNotification *)notification +{ + // Refresh icon if launched via a software update + [NSApplication sharedApplication].applicationIconImage = [NSImage imageNamed:@"AppIcon"]; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + for (unsigned i = 0; i < GBButtonCount; i++) { + if ([[defaults objectForKey:button_to_preference_name(i, 0)] isKindOfClass:[NSString class]]) { + [defaults removeObjectForKey:button_to_preference_name(i, 0)]; + } + } + [[NSUserDefaults standardUserDefaults] registerDefaults:@{ + @"GBRight": @(kVK_RightArrow), + @"GBLeft": @(kVK_LeftArrow), + @"GBUp": @(kVK_UpArrow), + @"GBDown": @(kVK_DownArrow), + + @"GBA": @(kVK_ANSI_X), + @"GBB": @(kVK_ANSI_Z), + @"GBSelect": @(kVK_Delete), + @"GBStart": @(kVK_Return), + + @"GBTurbo": @(kVK_Space), + @"GBRewind": @(kVK_Tab), + @"GBSlow-Motion": @(kVK_Shift), + + @"GBFilter": @"NearestNeighbor", + @"GBColorCorrection": @(GB_COLOR_CORRECTION_MODERN_BALANCED), + @"GBHighpassFilter": @(GB_HIGHPASS_REMOVE_DC_OFFSET), + @"GBRewindLength": @(10), + @"GBFrameBlendingMode": @([defaults boolForKey:@"DisableFrameBlending"]? GB_FRAME_BLENDING_MODE_DISABLED : GB_FRAME_BLENDING_MODE_ACCURATE), + + @"GBDMGModel": @(GB_MODEL_DMG_B), + @"GBCGBModel": @(GB_MODEL_CGB_E), + @"GBAGBModel": @(GB_MODEL_AGB_A), + @"GBSGBModel": @(GB_MODEL_SGB2), + @"GBRumbleMode": @(GB_RUMBLE_CARTRIDGE_ONLY), + + @"GBVolume": @(1.0), + + @"GBMBC7JoystickOverride": @NO, + @"GBMBC7AllowMouse": @YES, + + @"GBJoyConAutoPair": @YES, + @"GBJoyConsDefaultsToHorizontal": @YES, + + // Default themes + @"GBThemes": @{ + @"Desert": @{ + @"BrightnessBias": @0.0, + @"Colors": @[@0xff302f3e, @0xff576674, @0xff839ba4, @0xffb1d0d2, @0xffb7d7d8], + @"DisabledLCDColor": @YES, + @"HueBias": @0.10087773904382469, + @"HueBiasStrength": @0.062142056772908363, + @"Manual": @NO, + }, + @"Evening": @{ + @"BrightnessBias": @-0.10168700106441975, + @"Colors": @[@0xff362601, @0xff695518, @0xff899853, @0xffa6e4ae, @0xffa9eebb], + @"DisabledLCDColor": @YES, + @"HueBias": @0.60027079191058874, + @"HueBiasStrength": @0.33816297305747867, + @"Manual": @NO, + }, + @"Fog": @{ + @"BrightnessBias": @0.0, + @"Colors": @[@0xff373c34, @0xff737256, @0xff9da386, @0xffc3d2bf, @0xffc7d8c6], + @"DisabledLCDColor": @YES, + @"HueBias": @0.55750435756972117, + @"HueBiasStrength": @0.18424738545816732, + @"Manual": @NO, + }, + @"Magic Eggplant": @{ + @"BrightnessBias": @0.0, + @"Colors": @[@0xff3c2136, @0xff942e84, @0xffc7699d, @0xfff1e4b0, @0xfff6f9b2], + @"DisabledLCDColor": @YES, + @"HueBias": @0.87717878486055778, + @"HueBiasStrength": @0.65018052788844627, + @"Manual": @NO, + }, + @"Radioactive Pea": @{ + @"BrightnessBias": @-0.48079556772908372, + @"Colors": @[@0xff215200, @0xff1f7306, @0xff169e34, @0xff03ceb8, @0xff00d4d1], + @"DisabledLCDColor": @YES, + @"HueBias": @0.3795131972111554, + @"HueBiasStrength": @0.34337649402390436, + @"Manual": @NO, + }, + @"Seaweed": @{ + @"BrightnessBias": @-0.28532744023904377, + @"Colors": @[@0xff3f0015, @0xff426532, @0xff58a778, @0xff95e0df, @0xffa0e7ee], + @"DisabledLCDColor": @YES, + @"HueBias": @0.2694067480079681, + @"HueBiasStrength": @0.51565612549800799, + @"Manual": @NO, + }, + @"Twilight": @{ + @"BrightnessBias": @-0.091789093625498031, + @"Colors": @[@0xff3f0015, @0xff461286, @0xff6254bd, @0xff97d3e9, @0xffa0e7ee], + @"DisabledLCDColor": @YES, + @"HueBias": @0.0, + @"HueBiasStrength": @0.49710532868525897, + @"Manual": @NO, + }, + }, + + @"NSToolbarItemForcesStandardSize": @YES, // Forces Monterey to resepect toolbar item sizes + }]; + + [JOYController startOnRunLoop:[NSRunLoop currentRunLoop] withOptions:@{ + JOYAxes2DEmulateButtonsKey: @YES, + JOYHatsEmulateButtonsKey: @YES, + }]; + + [GBJoyConManager sharedInstance]; // Starts handling Joy-Cons + + [JOYController registerListener:self]; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBNotificationsUsed"]) { + [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self; + } + + [self askAutoUpdates]; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBAutoUpdatesEnabled"]) { + [self checkForUpdates]; + } + + if ([[NSProcessInfo processInfo].arguments containsObject:@"--update-launch"]) { + [NSApp activateIgnoringOtherApps:true]; + } +} + +- (IBAction)toggleDeveloperMode:(id)sender +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setBool:![defaults boolForKey:@"DeveloperMode"] forKey:@"DeveloperMode"]; +} + +- (IBAction)switchPreferencesTab:(id)sender +{ + for (NSView *view in _preferencesTabs) { + [view removeFromSuperview]; + } + NSView *tab = _preferencesTabs[[sender tag]]; + NSRect old = [_preferencesWindow frame]; + NSRect new = [_preferencesWindow frameRectForContentRect:tab.frame]; + new.origin.x = old.origin.x; + new.origin.y = old.origin.y + (old.size.height - new.size.height); + [_preferencesWindow setFrame:new display:true animate:_preferencesWindow.visible]; + [_preferencesWindow.contentView addSubview:tab]; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)anItem +{ + if ([anItem action] == @selector(toggleDeveloperMode:)) { + [(NSMenuItem *)anItem setState:[[NSUserDefaults standardUserDefaults] boolForKey:@"DeveloperMode"]]; + } + + if (anItem == self.linkCableMenuItem) { + return [[NSDocumentController sharedDocumentController] documents].count > 1; + } + return true; +} + +- (void)menuNeedsUpdate:(NSMenu *)menu +{ + NSMutableArray *items = [NSMutableArray array]; + NSDocument *currentDocument = [[NSDocumentController sharedDocumentController] currentDocument]; + + for (NSDocument *document in [[NSDocumentController sharedDocumentController] documents]) { + if (document == currentDocument) continue; + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:document.displayName action:@selector(connectLinkCable:) keyEquivalent:@""]; + item.representedObject = document; + item.image = [[NSWorkspace sharedWorkspace] iconForFile:document.fileURL.path]; + [item.image setSize:NSMakeSize(16, 16)]; + [items addObject:item]; + } + menu.itemArray = items; +} + +- (IBAction) showPreferences: (id) sender +{ + NSArray *objects; + if (!_preferencesWindow) { + [[NSBundle mainBundle] loadNibNamed:@"Preferences" owner:self topLevelObjects:&objects]; + NSToolbarItem *first_toolbar_item = [_preferencesWindow.toolbar.items firstObject]; + _preferencesWindow.toolbar.selectedItemIdentifier = [first_toolbar_item itemIdentifier]; + _preferencesTabs = @[self.emulationTab, self.graphicsTab, self.audioTab, self.controlsTab, self.updatesTab]; + [self switchPreferencesTab:first_toolbar_item]; + [_preferencesWindow center]; +#ifndef UPDATE_SUPPORT + [_preferencesWindow.toolbar removeItemAtIndex:4]; +#endif + if (@available(macOS 11.0, *)) { + [_preferencesWindow.toolbar insertItemWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier atIndex:0]; + [_preferencesWindow.toolbar insertItemWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier atIndex:_preferencesWindow.toolbar.items.count]; + } + } + [_preferencesWindow makeKeyAndOrderFront:self]; +} + +- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender +{ + [self askAutoUpdates]; + /* Bring an existing panel to the foreground */ + for (NSWindow *window in [[NSApplication sharedApplication] windows]) { + if ([window isKindOfClass:[NSOpenPanel class]]) { + [(NSOpenPanel *)window makeKeyAndOrderFront:nil]; + return true; + } + } + [[NSDocumentController sharedDocumentController] openDocument:self]; + return true; +} + +- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification +{ + [[NSDocumentController sharedDocumentController] openDocumentWithContentsOfFile:notification.identifier display:true]; +} + +- (void)updateFound +{ + [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@UPDATE_SERVER "/raw_changes"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + + NSColor *linkColor = [NSColor colorWithRed:0.125 green:0.325 blue:1.0 alpha:1.0]; + if (@available(macOS 10.10, *)) { + linkColor = [NSColor linkColor]; + } + + NSString *changes = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSRange cutoffRange = [changes rangeOfString:@""]; + if (cutoffRange.location != NSNotFound) { + changes = [changes substringToIndex:cutoffRange.location]; + } + + NSString *html = [NSString stringWithFormat:@"" + "" + "%@", + color_to_int([NSColor textColor]), + color_to_int(linkColor), + changes]; + + if ([(NSHTTPURLResponse *)response statusCode] == 200) { + dispatch_async(dispatch_get_main_queue(), ^{ + NSArray *objects; + [[NSBundle mainBundle] loadNibNamed:@"UpdateWindow" owner:self topLevelObjects:&objects]; + self.updateChanges.preferences.standardFontFamily = [NSFont systemFontOfSize:0].familyName; + self.updateChanges.preferences.fixedFontFamily = @"Menlo"; + self.updateChanges.drawsBackground = false; + [self.updateChanges.mainFrame loadHTMLString:html baseURL:nil]; + }); + } + }] resume]; +} + +- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems +{ + // Disable reload context menu + if ([defaultMenuItems count] <= 2) { + return nil; + } + return defaultMenuItems; +} + +- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sender.mainFrame.frameView.documentView.enclosingScrollView.drawsBackground = true; + sender.mainFrame.frameView.documentView.enclosingScrollView.backgroundColor = [NSColor textBackgroundColor]; + sender.policyDelegate = self; + [self.updateWindow center]; + [self.updateWindow makeKeyAndOrderFront:nil]; + }); +} + +- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener +{ + [listener ignore]; + [[NSWorkspace sharedWorkspace] openURL:[request URL]]; +} + +- (void)checkForUpdates +{ +#ifdef UPDATE_SUPPORT + [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@UPDATE_SERVER "/latest_version"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.updatesSpinner stopAnimation:nil]; + [self.updatesButton setEnabled:true]; + }); + if ([(NSHTTPURLResponse *)response statusCode] == 200) { + NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSArray *components = [string componentsSeparatedByString:@"|"]; + if (components.count != 2) return; + _lastVersion = components[0]; + _updateURL = components[1]; + if (![@GB_VERSION isEqualToString:_lastVersion] && + ![[[NSUserDefaults standardUserDefaults] stringForKey:@"GBSkippedVersion"] isEqualToString:_lastVersion]) { + [self updateFound]; + } + } + }] resume]; +#endif +} + +- (IBAction)userCheckForUpdates:(id)sender +{ + if (self.updateWindow) { + [self.updateWindow makeKeyAndOrderFront:sender]; + } + else { + [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"GBSkippedVersion"]; + [self checkForUpdates]; + [sender setEnabled:false]; + [self.updatesSpinner startAnimation:sender]; + } +} + +- (void)askAutoUpdates +{ +#ifdef UPDATE_SUPPORT + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"GBAskedAutoUpdates"]) { + NSAlert *alert = [[NSAlert alloc] init]; + alert.messageText = @"Should SameBoy check for updates when launched?"; + alert.informativeText = @"SameBoy is frequently updated with new features, accuracy improvements, and bug fixes. This setting can always be changed in the preferences window."; + [alert addButtonWithTitle:@"Check on Launch"]; + [alert addButtonWithTitle:@"Don't Check on Launch"]; + + [[NSUserDefaults standardUserDefaults] setBool:[alert runModal] == NSAlertFirstButtonReturn forKey:@"GBAutoUpdatesEnabled"]; + [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"GBAskedAutoUpdates"]; + } +#endif +} + +- (IBAction)skipVersion:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:_lastVersion forKey:@"GBSkippedVersion"]; + [self.updateWindow performClose:sender]; +} + +- (bool)executePath:(NSString *)path withArguments:(NSArray *)arguments +{ + if (!_auth) { + NSTask *task = [[NSTask alloc] init]; + task.launchPath = path; + task.arguments = arguments; + [task launch]; + [task waitUntilExit]; + return task.terminationStatus == 0 && task.terminationReason == NSTaskTerminationReasonExit; + } + + char *argv[arguments.count + 1]; + argv[arguments.count] = NULL; + for (unsigned i = 0; i < arguments.count; i++) { + argv[i] = (char *)arguments[i].UTF8String; + } + + return AuthorizationExecuteWithPrivileges(_auth, path.UTF8String, kAuthorizationFlagDefaults, argv, NULL) == errAuthorizationSuccess; +} + +- (void)deauthorize +{ + if (_auth) { + AuthorizationFree(_auth, kAuthorizationFlagDefaults); + _auth = nil; + } +} + +- (IBAction)installUpdate:(id)sender +{ + bool needsAuthorization = false; + if ([self executePath:@"/usr/sbin/spctl" withArguments:@[@"--status"]]) { // Succeeds when GateKeeper is on + // GateKeeper is on, we need to --add ourselves as root, else we might get a GateKeeper crash + needsAuthorization = true; + } + else if (access(_dyld_get_image_name(0), W_OK)) { + // We don't have write access, so we need authorization to update as root + needsAuthorization = true; + } + + if (needsAuthorization && !_auth) { + AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagPreAuthorize | kAuthorizationFlagInteractionAllowed, &_auth); + // Make sure we can modify the bundle + if (![self executePath:@"/usr/sbin/chown" withArguments:@[@"-R", [NSString stringWithFormat:@"%d:%d", getuid(), getgid()], [NSBundle mainBundle].bundlePath]]) { + [self deauthorize]; + return; + } + } + + [self.updateProgressSpinner startAnimation:nil]; + self.updateProgressButton.title = @"Cancel"; + self.updateProgressButton.enabled = true; + self.updateProgressLabel.stringValue = @"Downloading update..."; + _updateState = UPDATE_DOWNLOADING; + _updateTask = [[NSURLSession sharedSession] downloadTaskWithURL: [NSURL URLWithString:_updateURL] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { + _updateTask = nil; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Extracting update..."; + _updateState = UPDATE_EXTRACTING; + }); + + _downloadDirectory = [[[NSFileManager defaultManager] URLForDirectory:NSItemReplacementDirectory + inDomain:NSUserDomainMask + appropriateForURL:[[NSBundle mainBundle] bundleURL] + create:true + error:nil] path]; + if (!_downloadDirectory) { + [self deauthorize]; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to extract update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + return; + } + + NSTask *unzipTask; + unzipTask = [[NSTask alloc] init]; + unzipTask.launchPath = @"/usr/bin/unzip"; + unzipTask.arguments = @[location.path, @"-d", _downloadDirectory]; + [unzipTask launch]; + [unzipTask waitUntilExit]; + if (unzipTask.terminationStatus != 0 || unzipTask.terminationReason != NSTaskTerminationReasonExit) { + [self deauthorize]; + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to extract update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + return; + } + + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Update ready, save your game progress and click Install."; + _updateState = UPDATE_WAIT_INSTALL; + self.updateProgressButton.title = @"Install"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + }]; + [_updateTask resume]; + + self.updateProgressWindow.preventsApplicationTerminationWhenModal = false; + [self.updateWindow beginSheet:self.updateProgressWindow completionHandler:^(NSModalResponse returnCode) { + [self.updateWindow close]; + }]; +} + +- (void)performUpgrade +{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Instaling update..."; + _updateState = UPDATE_INSTALLING; + self.updateProgressButton.enabled = false; + [self.updateProgressSpinner startAnimation:nil]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSString *executablePath = [[NSBundle mainBundle] executablePath]; + NSString *contentsPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents"]; + NSString *contentsTempPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"TempContents"]; + NSString *updateContentsPath = [_downloadDirectory stringByAppendingPathComponent:@"SameBoy.app/Contents"]; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtPath:contentsPath toPath:contentsTempPath error:&error]; + if (error) { + [self deauthorize]; + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + _downloadDirectory = nil; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to install update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + return; + } + [[NSFileManager defaultManager] moveItemAtPath:updateContentsPath toPath:contentsPath error:&error]; + if (error) { + [self deauthorize]; + [[NSFileManager defaultManager] moveItemAtPath:contentsTempPath toPath:contentsPath error:nil]; + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + _downloadDirectory = nil; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.updateProgressButton.enabled = false; + self.updateProgressLabel.stringValue = @"Failed to install update."; + _updateState = UPDATE_FAILED; + self.updateProgressButton.title = @"Close"; + self.updateProgressButton.enabled = true; + [self.updateProgressSpinner stopAnimation:nil]; + }); + return; + } + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + [[NSFileManager defaultManager] removeItemAtPath:contentsTempPath error:nil]; + _downloadDirectory = nil; + atexit_b(^{ + execl(executablePath.UTF8String, executablePath.UTF8String, "--update-launch", NULL); + }); + + dispatch_async(dispatch_get_main_queue(), ^{ + [NSApp terminate:nil]; + }); + }); +} + +- (IBAction)updateAction:(id)sender +{ + switch (_updateState) { + case UPDATE_DOWNLOADING: + [_updateTask cancelByProducingResumeData:nil]; + _updateTask = nil; + [self.updateProgressWindow close]; + break; + case UPDATE_WAIT_INSTALL: + [self performUpgrade]; + break; + case UPDATE_EXTRACTING: + case UPDATE_INSTALLING: + break; + case UPDATE_FAILED: + [self.updateProgressWindow close]; + break; + } +} + +- (void)orderFrontAboutPanel:(id)sender +{ + // NSAboutPanelOptionApplicationIcon is not available prior to 10.13, but the key is still there and working. + [[NSApplication sharedApplication] orderFrontStandardAboutPanelWithOptions:@{ + @"ApplicationIcon": [NSImage imageNamed:@"Icon"] + }]; +} + +- (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)button +{ + if (!button.isPressed) return; + NSDictionary *mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitInstanceMapping"][controller.uniqueID]; + if (!mapping) { + mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitNameMapping"][controller.deviceName]; + } + + JOYButtonUsage usage = ((JOYButtonUsage)[mapping[n2s(button.uniqueID)] unsignedIntValue]) ?: -1; + if (!mapping && usage >= JOYButtonUsageGeneric0) { + usage = (const JOYButtonUsage[]){JOYButtonUsageY, JOYButtonUsageA, JOYButtonUsageB, JOYButtonUsageX}[(usage - JOYButtonUsageGeneric0) & 3]; + } + + if (usage == GBJoyKitHotkey1 || usage == GBJoyKitHotkey2) { + if (_preferencesWindow && self.keyWindow == _preferencesWindow) { + return; + } + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"GBAllowBackgroundControllers"] && !self.keyWindow) { + return; + } + + NSString *keyEquivalent = [[NSUserDefaults standardUserDefaults] stringForKey:usage == GBJoyKitHotkey1? @"GBJoypadHotkey1" : @"GBJoypadHotkey2"]; + NSEventModifierFlags flags = NSEventModifierFlagCommand; + if ([keyEquivalent hasPrefix:@"^"]) { + flags |= NSEventModifierFlagShift; + [keyEquivalent substringFromIndex:1]; + } + _simulatingMenuEvent = true; + [[NSApplication sharedApplication] sendEvent:[NSEvent keyEventWithType:NSEventTypeKeyDown + location:(NSPoint){0,} + modifierFlags:flags + timestamp:0 + windowNumber:0 + context:NULL + characters:keyEquivalent + charactersIgnoringModifiers:keyEquivalent + isARepeat:false + keyCode:0]]; + _simulatingMenuEvent = false; + } +} + +- (NSWindow *)keyWindow +{ + NSWindow *ret = [super keyWindow]; + if (!ret && _simulatingMenuEvent) { + ret = [(Document *)self.orderedDocuments.firstObject mainWindow]; + } + return ret; +} + +- (NSWindow *)mainWindow +{ + NSWindow *ret = [super mainWindow]; + if (!ret && _simulatingMenuEvent) { + ret = [(Document *)self.orderedDocuments.firstObject mainWindow]; + } + return ret; +} + +- (IBAction)openDebuggerHelp:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://sameboy.github.io/debugger/"]]; +} + +- (IBAction)openSponsor:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://github.com/sponsors/LIJI32"]]; +} + +- (void)dealloc +{ + if (_downloadDirectory) { + [[NSFileManager defaultManager] removeItemAtPath:_downloadDirectory error:nil]; + } +} + +- (IBAction)nop:(id)sender +{ +} +@end diff --git a/thirdparty/SameBoy/Cocoa/GBButtons.h b/thirdparty/SameBoy/Cocoa/GBButtons.h index 1f8b5afbd..f5c76dab7 100644 --- a/thirdparty/SameBoy/Cocoa/GBButtons.h +++ b/thirdparty/SameBoy/Cocoa/GBButtons.h @@ -13,11 +13,17 @@ typedef enum : NSUInteger { GBTurbo, GBRewind, GBUnderclock, - GBButtonCount, + GBHotkey1, + GBHotkey2, + GBJoypadButtonCount, + GBButtonCount = GBUnderclock + 1, GBGameBoyButtonCount = GBStart + 1, } GBButton; -extern NSString const *GBButtonNames[GBButtonCount]; +#define GBJoyKitHotkey1 JOYButtonUsageGeneric0 + 0x100 +#define GBJoyKitHotkey2 JOYButtonUsageGeneric0 + 0x101 + +extern NSString const *GBButtonNames[GBJoypadButtonCount]; static inline NSString *n2s(uint64_t number) { diff --git a/thirdparty/SameBoy/Cocoa/GBButtons.m b/thirdparty/SameBoy/Cocoa/GBButtons.m index 044e93326..ef86738f0 100644 --- a/thirdparty/SameBoy/Cocoa/GBButtons.m +++ b/thirdparty/SameBoy/Cocoa/GBButtons.m @@ -1,4 +1,4 @@ #import #import "GBButtons.h" -NSString const *GBButtonNames[] = {@"Right", @"Left", @"Up", @"Down", @"A", @"B", @"Select", @"Start", @"Turbo", @"Rewind", @"Slow-Motion"}; +NSString const *GBButtonNames[] = {@"Right", @"Left", @"Up", @"Down", @"A", @"B", @"Select", @"Start", @"Turbo", @"Rewind", @"Slow-Motion", @"Hotkey 1", @"Hotkey 2"}; diff --git a/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m b/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m index 1fdafea04..bc09e8152 100644 --- a/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m +++ b/thirdparty/SameBoy/Cocoa/GBCheatTextFieldCell.m @@ -6,7 +6,7 @@ @interface GBCheatTextView : NSTextView @implementation GBCheatTextView -- (bool)_insertText:(NSString *)string replacementRange:(NSRange)range +- (bool)_internalInsertText:(NSString *)string replacementRange:(NSRange)range { if (range.location == NSNotFound) { range = self.selectedRange; @@ -60,19 +60,19 @@ - (bool)_insertText:(NSString *)string replacementRange:(NSRange)range return true; } if (([string isEqualToString:@"$"] || [string isEqualToString:@":"]) && range.length == 0 && range.location == 0) { - if ([self _insertText:@"$00:" replacementRange:range]) { + if ([self _internalInsertText:@"$00:" replacementRange:range]) { self.selectedRange = NSMakeRange(1, 2); return true; } } if ([string isEqualToString:@":"] && range.length + range.location == self.string.length) { - if ([self _insertText:@":$0" replacementRange:range]) { + if ([self _internalInsertText:@":$0" replacementRange:range]) { self.selectedRange = NSMakeRange(self.string.length - 2, 2); return true; } } if ([string isEqualToString:@"$"]) { - if ([self _insertText:@"$0" replacementRange:range]) { + if ([self _internalInsertText:@"$0" replacementRange:range]) { self.selectedRange = NSMakeRange(range.location + 1, 1); return true; } @@ -88,8 +88,10 @@ - (NSUndoManager *)undoManager - (void)insertText:(id)string replacementRange:(NSRange)replacementRange { - if (![self _insertText:string replacementRange:replacementRange]) { - NSBeep(); + if (![self _internalInsertText:string replacementRange:replacementRange]) { + if (![self _internalInsertText:[@"$" stringByAppendingString:string] replacementRange:replacementRange]) { + NSBeep(); + } } } diff --git a/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m b/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m index 5cc8f5959..24987dac6 100644 --- a/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m +++ b/thirdparty/SameBoy/Cocoa/GBCheatWindowController.m @@ -98,8 +98,10 @@ - (IBAction)importCheat:(id)sender [self tableViewSelectionDidChange:nil]; } else { - NSBeep(); - [GBWarningPopover popoverWithContents:@"This code is not a valid GameShark or GameGenie code" onView:self.importCodeField]; + dispatch_async(dispatch_get_main_queue(), ^{ + NSBeep(); + [GBWarningPopover popoverWithContents:@"This code is not a valid GameShark or GameGenie code" onView:self.importCodeField]; + }); } }]; } diff --git a/thirdparty/SameBoy/Cocoa/GBColorCell.h b/thirdparty/SameBoy/Cocoa/GBColorCell.h deleted file mode 100644 index a622c7883..000000000 --- a/thirdparty/SameBoy/Cocoa/GBColorCell.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface GBColorCell : NSTextFieldCell - -@end diff --git a/thirdparty/SameBoy/Cocoa/GBColorCell.m b/thirdparty/SameBoy/Cocoa/GBColorCell.m deleted file mode 100644 index 761ad43b3..000000000 --- a/thirdparty/SameBoy/Cocoa/GBColorCell.m +++ /dev/null @@ -1,49 +0,0 @@ -#import "GBColorCell.h" - -static inline double scale_channel(uint8_t x) -{ - x &= 0x1f; - return x / 31.0; -} - -@implementation GBColorCell -{ - NSInteger _integerValue; -} - -- (void)setObjectValue:(id)objectValue -{ - _integerValue = [objectValue integerValue]; - uint8_t r = _integerValue & 0x1F, - g = (_integerValue >> 5) & 0x1F, - b = (_integerValue >> 10) & 0x1F; - super.objectValue = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"$%04x", (uint16_t)(_integerValue & 0x7FFF)] attributes:@{ - NSForegroundColorAttributeName: r * 3 + g * 4 + b * 2 > 120? [NSColor blackColor] : [NSColor whiteColor], - NSFontAttributeName: [NSFont userFixedPitchFontOfSize:12] - }]; -} - -- (NSInteger)integerValue -{ - return _integerValue; -} - -- (int)intValue -{ - return (int)_integerValue; -} - - -- (NSColor *) backgroundColor -{ - /* Todo: color correction */ - uint16_t color = self.integerValue; - return [NSColor colorWithRed:scale_channel(color) green:scale_channel(color >> 5) blue:scale_channel(color >> 10) alpha:1.0]; -} - -- (BOOL)drawsBackground -{ - return true; -} - -@end diff --git a/thirdparty/SameBoy/Cocoa/GBDebuggerButton.h b/thirdparty/SameBoy/Cocoa/GBDebuggerButton.h new file mode 100644 index 000000000..5c3a12f63 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBDebuggerButton.h @@ -0,0 +1,7 @@ +#import + +@class GBDocument; +@interface GBDebuggerButton : NSButton +@property (weak) IBOutlet NSTextField *textField; +@end + diff --git a/thirdparty/SameBoy/Cocoa/GBDebuggerButton.m b/thirdparty/SameBoy/Cocoa/GBDebuggerButton.m new file mode 100644 index 000000000..15e6eb02a --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBDebuggerButton.m @@ -0,0 +1,48 @@ +#import "GBDebuggerButton.h" + +@implementation GBDebuggerButton +{ + NSTrackingArea *_trackingArea; +} +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + self.toolTip = self.title; + return self; +} + +- (void)mouseEntered:(NSEvent *)event +{ + if (@available(macOS 10.10, *)) { + NSDictionary *attributes = @{ + NSForegroundColorAttributeName: [NSColor colorWithWhite:1.0 alpha:0.5], + NSFontAttributeName: self.textField.font + }; + self.textField.placeholderAttributedString = + [[NSAttributedString alloc] initWithString:self.alternateTitle attributes:attributes]; + } +} + +- (void)mouseExited:(NSEvent *)event +{ + if (@available(macOS 10.10, *)) { + if ([self.textField.placeholderAttributedString.string isEqualToString:self.alternateTitle]) { + self.textField.placeholderAttributedString = nil; + } + } +} + +-(void)updateTrackingAreas +{ + [super updateTrackingAreas]; + if (_trackingArea) { + [self removeTrackingArea:_trackingArea]; + } + + _trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] + options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways + owner:self + userInfo:nil]; + [self addTrackingArea:_trackingArea]; +} +@end diff --git a/thirdparty/SameBoy/Cocoa/GBHueSliderCell.h b/thirdparty/SameBoy/Cocoa/GBHueSliderCell.h new file mode 100644 index 000000000..f293124b5 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBHueSliderCell.h @@ -0,0 +1,9 @@ +#import + +@interface NSSlider (GBHueSlider) +-(NSColor *)colorValue; +@end + +@interface GBHueSliderCell : NSSliderCell +-(NSColor *)colorValue; +@end diff --git a/thirdparty/SameBoy/Cocoa/GBHueSliderCell.m b/thirdparty/SameBoy/Cocoa/GBHueSliderCell.m new file mode 100644 index 000000000..9b397cb46 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBHueSliderCell.m @@ -0,0 +1,113 @@ +#import "GBHueSliderCell.h" + +@interface NSSliderCell(privateAPI) +- (double)_normalizedDoubleValue; +@end + +@implementation GBHueSliderCell +{ + bool _drawingTrack; +} + +-(NSColor *)colorValue +{ + double hue = self.doubleValue / 360.0; + double r = 0, g = 0, b =0 ; + double t = fmod(hue * 6, 1); + switch ((int)(hue * 6) % 6) { + case 0: + r = 1; + g = t; + break; + case 1: + r = 1 - t; + g = 1; + break; + case 2: + g = 1; + b = t; + break; + case 3: + g = 1 - t; + b = 1; + break; + case 4: + b = 1; + r = t; + break; + case 5: + b = 1 - t; + r = 1; + break; + } + return [NSColor colorWithRed:r green:g blue:b alpha:1.0]; +} + +-(void)drawKnob:(NSRect)knobRect +{ + [super drawKnob:knobRect]; + NSRect peekRect = knobRect; + peekRect.size.width /= 2; + peekRect.size.height = peekRect.size.width; + peekRect.origin.x += peekRect.size.width / 2; + peekRect.origin.y += peekRect.size.height / 2; + NSColor *color = self.colorValue; + if (!self.enabled) { + color = [color colorWithAlphaComponent:0.5]; + } + [color setFill]; + NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:peekRect]; + [path fill]; + [[NSColor colorWithWhite:0 alpha:0.25] setStroke]; + [path setLineWidth:0.5]; + [path stroke]; +} + +-(double)_normalizedDoubleValue +{ + if (_drawingTrack) return 0; + return [super _normalizedDoubleValue]; +} + +-(void)drawBarInside:(NSRect)rect flipped:(BOOL)flipped +{ + if (!self.enabled) { + [super drawBarInside:rect flipped:flipped]; + return; + } + + _drawingTrack = true; + [super drawBarInside:rect flipped:flipped]; + _drawingTrack = false; + + NSGradient *gradient = [[NSGradient alloc] initWithColors:@[ + [NSColor redColor], + [NSColor yellowColor], + [NSColor greenColor], + [NSColor cyanColor], + [NSColor blueColor], + [NSColor magentaColor], + [NSColor redColor], + ]]; + + rect.origin.y += rect.size.height / 2 - 0.5; + rect.size.height = 1; + rect.size.width -= 2; + rect.origin.x += 1; + [[NSColor redColor] set]; + NSRectFill(rect); + + rect.size.width -= self.knobThickness + 2; + rect.origin.x += self.knobThickness / 2 - 1; + + [gradient drawInRect:rect angle:0]; +} + +@end + +@implementation NSSlider (GBHueSlider) +- (NSColor *)colorValue +{ + return ((GBHueSliderCell *)self.cell).colorValue; +} +@end diff --git a/thirdparty/SameBoy/Cocoa/GBImageCell.h b/thirdparty/SameBoy/Cocoa/GBImageCell.h deleted file mode 100644 index 0323b41dc..000000000 --- a/thirdparty/SameBoy/Cocoa/GBImageCell.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface GBImageCell : NSImageCell - -@end diff --git a/thirdparty/SameBoy/Cocoa/GBImageCell.m b/thirdparty/SameBoy/Cocoa/GBImageCell.m deleted file mode 100644 index de75e0e98..000000000 --- a/thirdparty/SameBoy/Cocoa/GBImageCell.m +++ /dev/null @@ -1,10 +0,0 @@ -#import "GBImageCell.h" - -@implementation GBImageCell -- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView -{ - CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort]; - CGContextSetInterpolationQuality(context, kCGInterpolationNone); - [super drawWithFrame:cellFrame inView:controlView]; -} -@end diff --git a/thirdparty/SameBoy/Cocoa/GBImageView.m b/thirdparty/SameBoy/Cocoa/GBImageView.m index 3525e72ec..c496d9667 100644 --- a/thirdparty/SameBoy/Cocoa/GBImageView.m +++ b/thirdparty/SameBoy/Cocoa/GBImageView.m @@ -10,18 +10,18 @@ - (instancetype)initWithColor:(NSColor *)color size:(NSUInteger)size } @end -@implementation GBImageView -{ - NSTrackingArea *trackingArea; -} +@interface GBGridView : NSView +@end + +@implementation GBGridView + - (void)drawRect:(NSRect)dirtyRect { - CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort]; - CGContextSetInterpolationQuality(context, kCGInterpolationNone); - [super drawRect:dirtyRect]; - CGFloat y_ratio = self.frame.size.height / self.image.size.height; - CGFloat x_ratio = self.frame.size.width / self.image.size.width; - for (GBImageViewGridConfiguration *conf in self.verticalGrids) { + GBImageView *parent = (GBImageView *)self.superview; + + CGFloat y_ratio = parent.frame.size.height / parent.image.size.height; + CGFloat x_ratio = parent.frame.size.width / parent.image.size.width; + for (GBImageViewGridConfiguration *conf in parent.verticalGrids) { [conf.color set]; for (CGFloat y = conf.size * y_ratio; y < self.frame.size.height; y += conf.size * y_ratio) { NSBezierPath *line = [NSBezierPath bezierPath]; @@ -32,7 +32,7 @@ - (void)drawRect:(NSRect)dirtyRect } } - for (GBImageViewGridConfiguration *conf in self.horizontalGrids) { + for (GBImageViewGridConfiguration *conf in parent.horizontalGrids) { [conf.color set]; for (CGFloat x = conf.size * x_ratio; x < self.frame.size.width; x += conf.size * x_ratio) { NSBezierPath *line = [NSBezierPath bezierPath]; @@ -43,11 +43,11 @@ - (void)drawRect:(NSRect)dirtyRect } } - if (self.displayScrollRect) { + if (parent.displayScrollRect) { NSBezierPath *path = [NSBezierPath bezierPathWithRect:CGRectInfinite]; for (unsigned x = 0; x < 2; x++) { for (unsigned y = 0; y < 2; y++) { - NSRect rect = self.scrollRect; + NSRect rect = parent.scrollRect; rect.origin.x *= x_ratio; rect.origin.y *= y_ratio; rect.size.width *= x_ratio; @@ -56,7 +56,7 @@ - (void)drawRect:(NSRect)dirtyRect rect.origin.x -= self.frame.size.width * x; rect.origin.y += self.frame.size.height * y; - + NSBezierPath *subpath = [NSBezierPath bezierPathWithRect:rect]; [path appendBezierPath:subpath]; @@ -72,36 +72,62 @@ - (void)drawRect:(NSRect)dirtyRect [path stroke]; } } +@end + +@implementation GBImageView +{ + NSTrackingArea *_trackingArea; + GBGridView *_gridView; + NSRect _scrollRect; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + self.wantsLayer = true; + _gridView = [[GBGridView alloc] initWithFrame:self.bounds]; + _gridView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [self addSubview:_gridView]; + return self; +} + +-(void)viewWillDraw +{ + [super viewWillDraw]; + for (CALayer *layer in self.layer.sublayers) { + layer.magnificationFilter = kCAFilterNearest; + } +} - (void)setHorizontalGrids:(NSArray *)horizontalGrids { self->_horizontalGrids = horizontalGrids; - [self setNeedsDisplay]; + [_gridView setNeedsDisplay:true]; } - (void)setVerticalGrids:(NSArray *)verticalGrids { self->_verticalGrids = verticalGrids; - [self setNeedsDisplay]; + [_gridView setNeedsDisplay:true]; } - (void)setDisplayScrollRect:(bool)displayScrollRect { self->_displayScrollRect = displayScrollRect; - [self setNeedsDisplay]; + [_gridView setNeedsDisplay:true]; } - (void)updateTrackingAreas { - if (trackingArea != nil) { - [self removeTrackingArea:trackingArea]; + if (_trackingArea != nil) { + [self removeTrackingArea:_trackingArea]; } - trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] + _trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingMouseMoved owner:self userInfo:nil]; - [self addTrackingArea:trackingArea]; + [self addTrackingArea:_trackingArea]; } - (void)mouseExited:(NSEvent *)theEvent @@ -124,4 +150,17 @@ - (void)mouseMoved:(NSEvent *)theEvent } } +- (void)setScrollRect:(NSRect)scrollRect +{ + if (memcmp(&scrollRect, &_scrollRect, sizeof(scrollRect)) != 0) { + _scrollRect = scrollRect; + [_gridView setNeedsDisplay:true]; + } +} + +- (NSRect)scrollRect +{ + return _scrollRect; +} + @end diff --git a/thirdparty/SameBoy/Cocoa/GBJoyConManager.h b/thirdparty/SameBoy/Cocoa/GBJoyConManager.h new file mode 100644 index 000000000..f016c3d24 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBJoyConManager.h @@ -0,0 +1,13 @@ +#import +#import +#import + +@interface GBJoyConManager : NSObject ++ (instancetype) sharedInstance; + +@property (nonatomic) bool arrangementMode; +@property (weak) IBOutlet NSTableView *tableView; +@property (nonatomic) IBOutlet NSButton *autoPairCheckbox; +@property (nonatomic) IBOutlet NSButton *horizontalCheckbox; +@end + diff --git a/thirdparty/SameBoy/Cocoa/GBJoyConManager.m b/thirdparty/SameBoy/Cocoa/GBJoyConManager.m new file mode 100644 index 000000000..fe0060207 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBJoyConManager.m @@ -0,0 +1,323 @@ +#import "GBJoyConManager.h" +#import "GBTintedImageCell.h" +#import + +@implementation GBJoyConManager +{ + GBTintedImageCell *_tintedImageCell; + NSImageCell *_imageCell; + NSMutableDictionary *_pairings; + NSMutableDictionary *_gripSettings; + NSButton *_autoPairCheckbox; + bool _unpairing; +} + ++ (instancetype)sharedInstance +{ + static GBJoyConManager *manager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + manager = [[self alloc] _init]; + }); + return manager; +} + +- (NSArray *)joycons +{ + NSMutableArray *ret = [[JOYController allControllers] mutableCopy]; + for (JOYController *controller in [JOYController allControllers]) { + if (controller.joyconType == JOYJoyConTypeNone) { + [ret removeObject:controller]; + } + } + return ret; +} + +- (instancetype)init +{ + return [self.class sharedInstance]; +} + +- (instancetype) _init +{ + self = [super init]; + _imageCell = [[NSImageCell alloc] init]; + _tintedImageCell = [[GBTintedImageCell alloc] init]; + if (@available(macOS 10.14, *)) { + _tintedImageCell.tint = [NSColor controlAccentColor]; + } + else { + _tintedImageCell.tint = [NSColor selectedMenuItemColor]; + } + _pairings = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"GBJoyConPairings"] ?: @{} mutableCopy]; + _gripSettings = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"GBJoyConGrips"] ?: @{} mutableCopy]; + + // Sanity check the pairings + for (NSString *key in _pairings) { + if (![_pairings[_pairings[key]] isEqualToString:key]) { + [_pairings removeAllObjects]; + break; + } + } + + [JOYController registerListener:self]; + for (JOYController *controller in [JOYController allControllers]) { + [self controllerConnected:controller]; + } + + return self; +} + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + return self.joycons.count; +} + +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + if (row >= [self numberOfRowsInTableView:tableView]) return nil; + + unsigned columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; + JOYController *controller = self.joycons[row]; + switch (columnIndex) { + case 0: { + switch (controller.joyconType) { + case JOYJoyConTypeNone: + return nil; + case JOYJoyConTypeLeft: + return [NSImage imageNamed:[NSString stringWithFormat:@"%sJoyConLeftTemplate", controller.usesHorizontalJoyConGrip? "Horizontal" :""]]; + case JOYJoyConTypeRight: + return [NSImage imageNamed:[NSString stringWithFormat:@"%sJoyConRightTemplate", controller.usesHorizontalJoyConGrip? "Horizontal" :""]]; + case JOYJoyConTypeDual: + return [NSImage imageNamed:@"JoyConDualTemplate"]; + } + } + case 1: { + NSMutableAttributedString *ret = [[NSMutableAttributedString alloc] initWithString:controller.deviceName + attributes:@{NSFontAttributeName: + [NSFont systemFontOfSize:[NSFont systemFontSize]]}]; + + [ret appendAttributedString:[[NSAttributedString alloc] initWithString:[@"\n" stringByAppendingString:controller.uniqueID] + attributes:@{NSFontAttributeName: + [NSFont systemFontOfSize:[NSFont smallSystemFontSize]], + NSForegroundColorAttributeName:[NSColor disabledControlTextColor]}]]; + return ret; + } + case 2: + return @([(_gripSettings[controller.uniqueID] ?: @(-1)) unsignedIntValue] + 1); + } + return nil; +} + +- (void)updateGripForController:(JOYController *)controller +{ + NSNumber *grip = _gripSettings[controller.uniqueID]; + if (!grip) { + controller.usesHorizontalJoyConGrip = [[NSUserDefaults standardUserDefaults] boolForKey:@"GBJoyConsDefaultsToHorizontal"]; + return; + } + controller.usesHorizontalJoyConGrip = [grip unsignedIntValue] == 1; +} + +- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + unsigned columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; + if (columnIndex != 2) return; + if (row >= [self numberOfRowsInTableView:tableView]) return; + JOYController *controller = self.joycons[row]; + if (controller.joyconType == JOYJoyConTypeDual) { + return; + } + switch ([object unsignedIntValue]) { + case 0: + [_gripSettings removeObjectForKey:controller.uniqueID]; + break; + case 1: + _gripSettings[controller.uniqueID] = @(0); + break; + case 2: + _gripSettings[controller.uniqueID] = @(1); + break; + } + [[NSUserDefaults standardUserDefaults] setObject:_gripSettings forKey:@"GBJoyConGrips"]; + [self updateGripForController:controller]; +} + +- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + if (row >= [self numberOfRowsInTableView:tableView]) return [[NSCell alloc] init]; + + unsigned columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; + if (columnIndex == 2) { + JOYCombinedController *controller = (JOYCombinedController *)self.joycons[row]; + if (controller.joyconType == JOYJoyConTypeDual) { + NSButtonCell *cell = [[NSButtonCell alloc] initTextCell:@"Separate Joy-Cons"]; + cell.bezelStyle = NSBezelStyleRounded; + cell.action = @selector(invoke); + id block = ^(void) { + dispatch_async(dispatch_get_main_queue(), ^{ + for (JOYController *child in controller.children) { + [_pairings removeObjectForKey:child.uniqueID]; + } + [[NSUserDefaults standardUserDefaults] setObject:_pairings forKey:@"GBJoyConPairings"]; + _unpairing = true; + [controller breakApart]; + _unpairing = false; + }); + }; + // To retain the block + objc_setAssociatedObject(cell, @selector(breakApart), block, OBJC_ASSOCIATION_RETAIN); + cell.target = block; + return cell; + } + } + if (columnIndex == 0) { + JOYController *controller = self.joycons[row]; + for (JOYButton *button in controller.buttons) { + if (button.isPressed) { + return _tintedImageCell; + } + } + return _imageCell; + } + return nil; +} + +- (void)controllerConnected:(JOYController *)controller +{ + [self updateGripForController:controller]; + for (JOYController *partner in [JOYController allControllers]) { + if ([partner.uniqueID isEqualToString:_pairings[controller.uniqueID]]) { + [self pairJoyCon:controller withJoyCon:partner]; + break; + } + } + if (controller.joyconType == JOYJoyConTypeLeft || controller.joyconType == JOYJoyConTypeRight) { + [self autopair]; + } + if (_arrangementMode) { + [self.tableView reloadData]; + } +} + +- (void)autopair +{ + if (_unpairing) return; + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"GBJoyConAutoPair"]) return; + NSArray *controllers = [[JOYController allControllers] copy]; + for (JOYController *first in controllers) { + if (_pairings[first.uniqueID]) continue; // Has an established partner + if (first.joyconType != JOYJoyConTypeLeft) continue; + for (JOYController *second in controllers) { + if (_pairings[second.uniqueID]) continue; // Has an established partner + if (second.joyconType != JOYJoyConTypeRight) continue; + [self pairJoyCon:first withJoyCon:second]; + break; + } + } + if (_arrangementMode) { + [self.tableView reloadData]; + } +} + +- (void)controllerDisconnected:(JOYController *)controller +{ + if (_arrangementMode) { + [self.tableView reloadData]; + } +} + +- (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + unsigned columnIndex = [[tableView tableColumns] indexOfObject:tableColumn]; + return columnIndex == 2; +} + +- (JOYCombinedController *)pairJoyCon:(JOYController *)first withJoyCon:(JOYController *)second +{ + if (first.joyconType != JOYJoyConTypeLeft && first.joyconType != JOYJoyConTypeRight) return nil; // Not a Joy-Con + if (second.joyconType != JOYJoyConTypeLeft && second.joyconType != JOYJoyConTypeRight) return nil; // Not a Joy-Con + if (first.joyconType == second.joyconType) return nil; // Not a sensible pair + + _pairings[first.uniqueID] = second.uniqueID; + _pairings[second.uniqueID] = first.uniqueID; + first.usesHorizontalJoyConGrip = false; + second.usesHorizontalJoyConGrip = false; + [[NSUserDefaults standardUserDefaults] setObject:_pairings forKey:@"GBJoyConPairings"]; + return [[JOYCombinedController alloc] initWithChildren:@[first, second]]; +} + +- (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)button +{ + if (!_arrangementMode) return; + if (controller.joyconType == JOYJoyConTypeNone) return; + [self.tableView setNeedsDisplay:true]; + if (controller.joyconType != JOYJoyConTypeLeft && controller.joyconType != JOYJoyConTypeRight) return; + if (button.usage != JOYButtonUsageL1 && button.usage != JOYButtonUsageR1) return; + + + // L or R were pressed on a single Joy-Con, try and pair available Joy-Cons + JOYController *left = nil; + JOYController *right = nil; + for (JOYController *controller in [JOYController allControllers]) { + if (!left && controller.joyconType == JOYJoyConTypeLeft) { + for (JOYButton *button in controller.buttons) { + if (button.usage == JOYButtonUsageL1 && button.isPressed) { + left = controller; + break; + } + } + } + if (!right && controller.joyconType == JOYJoyConTypeRight) { + for (JOYButton *button in controller.buttons) { + if (button.usage == JOYButtonUsageR1 && button.isPressed) { + right = controller; + break; + } + } + } + if (left && right) { + [self pairJoyCon:left withJoyCon:right]; + return; + } + } +} + +- (void)setAutoPairCheckbox:(NSButton *)autoPairCheckbox +{ + _autoPairCheckbox = autoPairCheckbox; + [_autoPairCheckbox setState:[[NSUserDefaults standardUserDefaults] boolForKey:@"GBJoyConAutoPair"]]; +} + +- (IBAction)toggleAutoPair:(NSButton *)sender +{ + [[NSUserDefaults standardUserDefaults] setBool:sender.state forKey:@"GBJoyConAutoPair"]; + [self autopair]; +} + +- (void)setHorizontalCheckbox:(NSButton *)horizontalCheckbox +{ + _horizontalCheckbox = horizontalCheckbox; + [_horizontalCheckbox setState:[[NSUserDefaults standardUserDefaults] boolForKey:@"GBJoyConsDefaultsToHorizontal"]]; +} + +- (IBAction)toggleHorizontalDefault:(NSButton *)sender +{ + [[NSUserDefaults standardUserDefaults] setBool:sender.state forKey:@"GBJoyConsDefaultsToHorizontal"]; + for (JOYController *controller in self.joycons) { + [self updateGripForController:controller]; + } + if (_arrangementMode) { + [self.tableView reloadData]; + } +} + +- (void)setArrangementMode:(bool)arrangementMode +{ + _arrangementMode = arrangementMode; + if (arrangementMode) { + [self.tableView reloadData]; + } +} + +@end diff --git a/thirdparty/SameBoy/Cocoa/GBMemoryByteArray.m b/thirdparty/SameBoy/Cocoa/GBMemoryByteArray.m index 32526ade2..55e1bd152 100644 --- a/thirdparty/SameBoy/Cocoa/GBMemoryByteArray.m +++ b/thirdparty/SameBoy/Cocoa/GBMemoryByteArray.m @@ -1,4 +1,3 @@ -#define GB_INTERNAL // Todo: Some memory accesses are being done using the struct directly #import "GBMemoryByteArray.h" #import "GBCompleteByteSlice.h" @@ -32,69 +31,110 @@ - (unsigned long long)length } } +- (uint16_t)base +{ + switch (_mode) { + case GBMemoryEntireSpace: return 0; + case GBMemoryROM: return 0; + case GBMemoryVRAM: return 0x8000; + case GBMemoryExternalRAM: return 0xA000; + case GBMemoryRAM: return 0xC000; + } +} + - (void)copyBytes:(unsigned char *)dst range:(HFRange)range { - __block uint16_t addr = (uint16_t) range.location; - __block unsigned long long length = range.length; - if (_mode == GBMemoryEntireSpace) { - while (length) { - *(dst++) = [_document readMemory:addr++]; - length--; - } + // Do everything in 0x1000 chunks, never cross a 0x1000 boundary + if ((range.location & 0xF000) != ((range.location + range.length) & 0xF000)) { + size_t partial = 0x1000 - (range.location & 0xFFF); + [self copyBytes:dst + partial range:HFRangeMake(range.location + partial, range.length - partial)]; + range.length = partial; } - else { - [_document performAtomicBlock:^{ - unsigned char *_dst = dst; - uint16_t bank_backup = 0; - GB_gameboy_t *gb = _document.gameboy; - switch (_mode) { - case GBMemoryROM: - bank_backup = gb->mbc_rom_bank; - gb->mbc_rom_bank = self.selectedBank; - break; - case GBMemoryVRAM: - bank_backup = gb->cgb_vram_bank; - if (GB_is_cgb(gb)) { - gb->cgb_vram_bank = self.selectedBank; - } - addr += 0x8000; - break; - case GBMemoryExternalRAM: - bank_backup = gb->mbc_ram_bank; - gb->mbc_ram_bank = self.selectedBank; - addr += 0xA000; - break; - case GBMemoryRAM: - bank_backup = gb->cgb_ram_bank; - if (GB_is_cgb(gb)) { - gb->cgb_ram_bank = self.selectedBank; + range.location += self.base; + + GB_gameboy_t *gb = _document.gameboy; + + switch (range.location >> 12) { + case 0x0: + case 0x1: + case 0x2: + case 0x3: { + uint16_t bank; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_ROM0, NULL, &bank); + memcpy(dst, data + bank * 0x4000 + range.location, range.length); + break; + } + case 0x4: + case 0x5: + case 0x6: + case 0x7: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_ROM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x4000 - 1); + } + memcpy(dst, data + bank * 0x4000 + range.location - 0x4000, range.length); + break; + } + case 0x8: + case 0x9: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_VRAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x2000 - 1); + } + memcpy(dst, data + bank * 0x2000 + range.location - 0x8000, range.length); + break; + } + case 0xA: + case 0xB: { + // Some carts are special, use memory read directly in full mem mode + if (_mode == GBMemoryEntireSpace) { + case 0xF: + slow_path: + [_document performAtomicBlock:^{ + for (unsigned i = 0; i < range.length; i++) { + dst[i] = GB_safe_read_memory(gb, range.location + i); } - addr += 0xC000; - break; - default: - assert(false); + }]; + break; } - while (length) { - *(_dst++) = [_document readMemory:addr++]; - length--; + else { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_CART_RAM, &size, &bank); + bank = self.selectedBank & (size / 0x2000 - 1); + if (size == 0) { + memset(dst, 0xFF, range.length); + } + else if (range.location + range.length - 0xA000 > size) { + goto slow_path; + } + else { + memcpy(dst, data + bank * 0x2000 + range.location - 0xA000, range.length); + } + break; } - switch (_mode) { - case GBMemoryROM: - gb->mbc_rom_bank = bank_backup; - break; - case GBMemoryVRAM: - gb->cgb_vram_bank = bank_backup; - break; - case GBMemoryExternalRAM: - gb->mbc_ram_bank = bank_backup; - break; - case GBMemoryRAM: - gb->cgb_ram_bank = bank_backup; - break; - default: - assert(false); + } + case 0xC: + case 0xE: { + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, NULL, NULL); + memcpy(dst, data + (range.location & 0xFFF), range.length); + break; + } + + case 0xD: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x1000 - 1); } - }]; + memcpy(dst, data + bank * 0x1000 + range.location - 0xD000, range.length); + break; + } } } @@ -113,65 +153,104 @@ - (HFByteArray *)subarrayWithRange:(HFRange)range return ret; } -- (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)lrange +- (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)range { - if (slice.length != lrange.length) return; /* Insertion is not allowed, only overwriting. */ - [_document performAtomicBlock:^{ - uint16_t addr = (uint16_t) lrange.location; - uint16_t bank_backup = 0; - GB_gameboy_t *gb = _document.gameboy; - switch (_mode) { - case GBMemoryROM: - bank_backup = gb->mbc_rom_bank; - gb->mbc_rom_bank = self.selectedBank; + if (slice.length != range.length) return; /* Insertion is not allowed, only overwriting. */ + // Do everything in 0x1000 chunks, never cross a 0x1000 boundary + if ((range.location & 0xF000) != ((range.location + range.length) & 0xF000)) { + size_t partial = 0x1000 - (range.location & 0xFFF); + if (slice.length - partial) { + [self insertByteSlice:[slice subsliceWithRange:HFRangeMake(partial, slice.length - partial)] + inRange:HFRangeMake(range.location + partial, range.length - partial)]; + } + range.length = partial; + } + range.location += self.base; + + GB_gameboy_t *gb = _document.gameboy; + + + switch (range.location >> 12) { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + case 0x7: { + return; // ROM not writeable + } + case 0x8: + case 0x9: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_VRAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x2000 - 1); + } + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + memcpy(data + bank * 0x2000 + range.location - 0x8000, sliceData, range.length); + break; + } + case 0xA: + case 0xB: { + // Some carts are special, use memory write directly in full mem mode + if (_mode == GBMemoryEntireSpace) { + case 0xF: + slow_path: + [_document performAtomicBlock:^{ + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + for (unsigned i = 0; i < range.length; i++) { + GB_write_memory(gb, range.location + i, sliceData[i]); + } + }]; break; - case GBMemoryVRAM: - bank_backup = gb->cgb_vram_bank; - if (GB_is_cgb(gb)) { - gb->cgb_vram_bank = self.selectedBank; + } + else { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_CART_RAM, &size, &bank); + bank = self.selectedBank & (size / 0x2000 - 1); + if (size == 0) { + // Nothing to write to } - addr += 0x8000; - break; - case GBMemoryExternalRAM: - bank_backup = gb->mbc_ram_bank; - gb->mbc_ram_bank = self.selectedBank; - addr += 0xA000; - break; - case GBMemoryRAM: - bank_backup = gb->cgb_ram_bank; - if (GB_is_cgb(gb)) { - gb->cgb_ram_bank = self.selectedBank; + else if (range.location + range.length - 0xA000 > size) { + goto slow_path; + } + else { + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + memcpy(data + bank * 0x2000 + range.location - 0xA000, sliceData, range.length); } - addr += 0xC000; - break; - default: break; + } } - uint8_t values[lrange.length]; - [slice copyBytes:values range:HFRangeMake(0, lrange.length)]; - uint8_t *src = values; - unsigned long long length = lrange.length; - while (length) { - [_document writeMemory:addr++ value:*(src++)]; - length--; + case 0xC: + case 0xE: { + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, NULL, NULL); + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + memcpy(data + (range.location & 0xFFF), sliceData, range.length); + break; } - switch (_mode) { - case GBMemoryROM: - gb->mbc_rom_bank = bank_backup; - break; - case GBMemoryVRAM: - gb->cgb_vram_bank = bank_backup; - break; - case GBMemoryExternalRAM: - gb->mbc_ram_bank = bank_backup; - break; - case GBMemoryRAM: - gb->cgb_ram_bank = bank_backup; - break; - default: - break; + + case 0xD: { + uint16_t bank; + size_t size; + uint8_t *data = GB_get_direct_access(gb, GB_DIRECT_ACCESS_RAM, &size, &bank); + if (_mode != GBMemoryEntireSpace) { + bank = self.selectedBank & (size / 0x1000 - 1); + } + uint8_t sliceData[range.length]; + [slice copyBytes:sliceData range:HFRangeMake(0, range.length)]; + + memcpy(data + bank * 0x1000 + range.location - 0xD000, sliceData, range.length); + break; } - }]; + } } @end diff --git a/thirdparty/SameBoy/Cocoa/GBObjectView.h b/thirdparty/SameBoy/Cocoa/GBObjectView.h new file mode 100644 index 000000000..2d1c955de --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBObjectView.h @@ -0,0 +1,6 @@ +#import +#import "Document.h" + +@interface GBObjectView : NSView +- (void)reloadData:(Document *)document; +@end diff --git a/thirdparty/SameBoy/Cocoa/GBObjectView.m b/thirdparty/SameBoy/Cocoa/GBObjectView.m new file mode 100644 index 000000000..0fb22a158 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBObjectView.m @@ -0,0 +1,124 @@ +#import "GBObjectView.h" + +@interface GBObjectViewItem : NSObject +@property IBOutlet NSView *view; +@property IBOutlet NSImageView *image; +@property IBOutlet NSTextField *oamAddress; +@property IBOutlet NSTextField *position; +@property IBOutlet NSTextField *attributes; +@property IBOutlet NSTextField *tile; +@property IBOutlet NSTextField *tileAddress; +@property IBOutlet NSImageView *warningIcon; +@property IBOutlet NSBox *verticalLine; +@end + +@implementation GBObjectViewItem +{ + @public + uint32_t _lastImageData[128]; + uint8_t _lastHeight; +} +@end + +@implementation GBObjectView +{ + NSMutableArray *_items; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + _items = [NSMutableArray array]; + CGFloat height = self.frame.size.height; + for (unsigned i = 0; i < 40; i++) { + GBObjectViewItem *item = [[GBObjectViewItem alloc] init]; + [_items addObject:item]; + [[NSBundle mainBundle] loadNibNamed:@"GBObjectViewItem" owner:item topLevelObjects:nil]; + item.view.hidden = true; + [self addSubview:item.view]; + [item.view setFrameOrigin:NSMakePoint((i % 4) * 120, height - (i / 4 * 68) - 68)]; + item.oamAddress.toolTip = @"OAM address"; + item.position.toolTip = @"Position"; + item.attributes.toolTip = @"Attributes"; + item.tile.toolTip = @"Tile index"; + item.tileAddress.toolTip = @"Tile address"; + item.warningIcon.toolTip = @"Dropped: too many objects in line"; + if ((i % 4) == 3) { + [item.verticalLine removeFromSuperview]; + } + item.view.autoresizingMask = NSViewMaxXMargin | NSViewMinYMargin; + } + return self; +} + +- (void)reloadData:(Document *)document +{ + GB_oam_info_t *info = document.oamInfo; + uint8_t length = document.oamCount; + bool cgb = GB_is_cgb(document.gb); + uint8_t height = document.oamHeight; + for (unsigned i = 0; i < 40; i++) { + GBObjectViewItem *item = _items[i]; + if (i >= length) { + item.view.hidden = true; + } + else { + item.view.hidden = false; + item.oamAddress.stringValue = [NSString stringWithFormat:@"$%04X", info[i].oam_addr]; + item.position.stringValue = [NSString stringWithFormat:@"(%d, %d)", + ((signed)(unsigned)info[i].x) - 8, + ((signed)(unsigned)info[i].y) - 16]; + item.tile.stringValue = [NSString stringWithFormat:@"$%02X", info[i].tile]; + item.tileAddress.stringValue = [NSString stringWithFormat:@"$%04X", 0x8000 + info[i].tile * 0x10]; + item.warningIcon.hidden = !info[i].obscured_by_line_limit; + if (cgb) { + item.attributes.stringValue = [NSString stringWithFormat:@"%c%c%c%d%d", + info[i].flags & 0x80? 'P' : '-', + info[i].flags & 0x40? 'Y' : '-', + info[i].flags & 0x20? 'X' : '-', + info[i].flags & 0x08? 1 : 0, + info[i].flags & 0x07]; + } + else { + item.attributes.stringValue = [NSString stringWithFormat:@"%c%c%c%d", + info[i].flags & 0x80? 'P' : '-', + info[i].flags & 0x40? 'Y' : '-', + info[i].flags & 0x20? 'X' : '-', + info[i].flags & 0x10? 1 : 0]; + } + size_t imageSize = 8 * 4 * height; + if (height == item->_lastHeight && memcmp(item->_lastImageData, info[i].image, imageSize) == 0) { + continue; + } + memcpy(item->_lastImageData, info[i].image, imageSize); + item->_lastHeight = height; + item.image.image = [Document imageFromData:[NSData dataWithBytesNoCopy:info[i].image + length:64 * 4 * 2 + freeWhenDone:false] + width:8 + height:height + scale:32.0 / height]; + } + } + + NSRect frame = self.frame; + CGFloat newHeight = MAX(68 * ((length + 3) / 4), self.superview.frame.size.height); + frame.origin.y -= newHeight - frame.size.height; + frame.size.height = newHeight; + self.frame = frame; +} + +- (void)drawRect:(NSRect)dirtyRect +{ + if (@available(macOS 10.14, *)) { + [[NSColor alternatingContentBackgroundColors].lastObject setFill]; + } + else { + [[NSColor colorWithDeviceWhite:0.96 alpha:1] setFill]; + } + NSRect frame = self.frame; + for (unsigned i = 1; i <= 5; i++) { + NSRectFill(NSMakeRect(0, frame.size.height - i * 68 * 2, frame.size.width, 68)); + } +} +@end diff --git a/thirdparty/SameBoy/Cocoa/GBObjectViewItem.xib b/thirdparty/SameBoy/Cocoa/GBObjectViewItem.xib new file mode 100644 index 000000000..85b37820e --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBObjectViewItem.xib @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/GBPaletteEditorController.h b/thirdparty/SameBoy/Cocoa/GBPaletteEditorController.h new file mode 100644 index 000000000..fd362ec14 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBPaletteEditorController.h @@ -0,0 +1,18 @@ +#import +#import + +@interface GBPaletteEditorController : NSObject +@property (weak) IBOutlet NSColorWell *colorWell0; +@property (weak) IBOutlet NSColorWell *colorWell1; +@property (weak) IBOutlet NSColorWell *colorWell2; +@property (weak) IBOutlet NSColorWell *colorWell3; +@property (weak) IBOutlet NSColorWell *colorWell4; +@property (weak) IBOutlet NSButton *disableLCDColorCheckbox; +@property (weak) IBOutlet NSButton *manualModeCheckbox; +@property (weak) IBOutlet NSSlider *brightnessSlider; +@property (weak) IBOutlet NSSlider *hueSlider; +@property (weak) IBOutlet NSSlider *hueStrengthSlider; +@property (weak) IBOutlet NSTableView *themesList; +@property (weak) IBOutlet NSMenu *menu; ++ (const GB_palette_t *)userPalette; +@end diff --git a/thirdparty/SameBoy/Cocoa/GBPaletteEditorController.m b/thirdparty/SameBoy/Cocoa/GBPaletteEditorController.m new file mode 100644 index 000000000..0a613fba4 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBPaletteEditorController.m @@ -0,0 +1,378 @@ +#import "GBPaletteEditorController.h" +#import "GBHueSliderCell.h" +#import + +#define MAGIC 'SBPL' + +typedef struct __attribute__ ((packed)) { + uint32_t magic; + bool manual:1; + bool disabled_lcd_color:1; + unsigned padding:6; + struct GB_color_s colors[5]; + int32_t brightness_bias; + uint32_t hue_bias; + uint32_t hue_bias_strength; +} theme_t; + +static double blend(double from, double to, double position) +{ + return from * (1 - position) + to * position; +} + +@implementation NSColor (GBColor) + +- (struct GB_color_s)gbColor +{ + NSColor *sRGB = [self colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + return (struct GB_color_s){round(sRGB.redComponent * 255), round(sRGB.greenComponent * 255), round(sRGB.blueComponent * 255)}; +} + +- (uint32_t)intValue +{ + struct GB_color_s color = self.gbColor; + return (color.r << 0) | (color.g << 8) | (color.b << 16) | 0xFF000000; +} + +@end + +@implementation GBPaletteEditorController + +- (NSArray *)colorWells +{ + return @[_colorWell0, _colorWell1, _colorWell2, _colorWell3, _colorWell4]; +} + +- (void)updateEnabledControls +{ + if (self.manualModeCheckbox.state) { + _brightnessSlider.enabled = false; + _hueSlider.enabled = false; + _hueStrengthSlider.enabled = false; + _colorWell1.enabled = true; + _colorWell2.enabled = true; + _colorWell3.enabled = true; + if (!(_colorWell4.enabled = self.disableLCDColorCheckbox.state)) { + _colorWell4.color = _colorWell3.color; + } + } + else { + _colorWell1.enabled = false; + _colorWell2.enabled = false; + _colorWell3.enabled = false; + _colorWell4.enabled = true; + _brightnessSlider.enabled = true; + _hueSlider.enabled = true; + _hueStrengthSlider.enabled = true; + [self updateAutoColors]; + } +} + +- (NSColor *)autoColorAtPositon:(double)position +{ + NSColor *first = [_colorWell0.color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + NSColor *second = [_colorWell4.color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + double brightness = 1 / pow(4, (_brightnessSlider.doubleValue - 128) / 128.0); + position = pow(position, brightness); + NSColor *hue = _hueSlider.colorValue; + double bias = _hueStrengthSlider.doubleValue / 256.0; + double red = 1 / pow(4, (hue.redComponent * 2 - 1) * bias); + double green = 1 / pow(4, (hue.greenComponent * 2 - 1) * bias); + double blue = 1 / pow(4, (hue.blueComponent * 2 - 1) * bias); + NSColor *ret = [NSColor colorWithRed:blend(first.redComponent, second.redComponent, pow(position, red)) + green:blend(first.greenComponent, second.greenComponent, pow(position, green)) + blue:blend(first.blueComponent, second.blueComponent, pow(position, blue)) + alpha:1.0]; + return ret; +} + +- (IBAction)updateAutoColors:(id)sender +{ + if (!self.manualModeCheckbox.state) { + [self updateAutoColors]; + } + else { + [self savePalette:sender]; + } +} + +- (void)updateAutoColors +{ + if (_disableLCDColorCheckbox.state) { + _colorWell1.color = [self autoColorAtPositon:8 / 25.0]; + _colorWell2.color = [self autoColorAtPositon:16 / 25.0]; + _colorWell3.color = [self autoColorAtPositon:24 / 25.0]; + } + else { + _colorWell1.color = [self autoColorAtPositon:1 / 3.0]; + _colorWell2.color = [self autoColorAtPositon:2 / 3.0]; + _colorWell3.color = _colorWell4.color; + } + [self savePalette:nil]; +} + +- (IBAction)disabledLCDColorCheckboxChanged:(id)sender +{ + [self updateEnabledControls]; +} + +- (IBAction)manualModeChanged:(id)sender +{ + [self updateEnabledControls]; +} + +- (IBAction)updateColor4:(id)sender +{ + if (!self.disableLCDColorCheckbox.state) { + self.colorWell4.color = self.colorWell3.color; + } + [self savePalette:self]; +} + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + if (themes.count == 0) { + [defaults setObject:@"Untitled Palette" forKey:@"GBCurrentTheme"]; + [self savePalette:nil]; + return 1; + } + return themes.count; +} + +-(void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + NSString *oldName = [self tableView:tableView objectValueForTableColumn:tableColumn row:row]; + if ([oldName isEqualToString:object]) { + return; + } + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSMutableDictionary *themes = [[defaults dictionaryForKey:@"GBThemes"] ?: @{} mutableCopy]; + NSString *newName = object; + unsigned i = 2; + if (!newName.length) { + newName = @"Untitled Palette"; + } + while (themes[newName]) { + newName = [NSString stringWithFormat:@"%@ %d", object, i]; + } + themes[newName] = themes[oldName]; + [themes removeObjectForKey:oldName]; + if ([oldName isEqualToString:[defaults stringForKey:@"GBCurrentTheme"]]) { + [defaults setObject:newName forKey:@"GBCurrentTheme"]; + } + [defaults setObject:themes forKey:@"GBThemes"]; + [tableView reloadData]; + [self awakeFromNib]; +} + +- (IBAction)deleteTheme:(id)sender +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *name = [defaults stringForKey:@"GBCurrentTheme"]; + NSMutableDictionary *themes = [[defaults dictionaryForKey:@"GBThemes"] ?: @{} mutableCopy]; + [themes removeObjectForKey:name]; + [defaults setObject:themes forKey:@"GBThemes"]; + [_themesList reloadData]; + [self awakeFromNib]; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)notification +{ + NSString *name = [self tableView:nil objectValueForTableColumn:nil row:_themesList.selectedRow]; + [[NSUserDefaults standardUserDefaults] setObject:name forKey:@"GBCurrentTheme"]; + [self loadPalette]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorPaletteChanged" object:nil]; +} + +- (void)tableViewSelectionIsChanging:(NSNotification *)notification +{ + [self tableViewSelectionDidChange:notification]; +} + +- (void)awakeFromNib +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSString *theme = [defaults stringForKey:@"GBCurrentTheme"]; + if (theme && themes[theme]) { + unsigned index = [[themes.allKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] indexOfObject:theme]; + [_themesList selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:false]; + } + else { + [_themesList selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:false]; + } + [self tableViewSelectionDidChange:nil]; +} + +- (IBAction)addTheme:(id)sender +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSString *newName = @"Untitled Palette"; + unsigned i = 2; + while (themes[newName]) { + newName = [NSString stringWithFormat:@"Untitled Palette %d", i++]; + } + [defaults setObject:newName forKey:@"GBCurrentTheme"]; + [self savePalette:sender]; + [_themesList reloadData]; + [self awakeFromNib]; +} + +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + return [themes.allKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)][row]; +} + +- (void)loadPalette +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *theme = [defaults dictionaryForKey:@"GBThemes"][[defaults stringForKey:@"GBCurrentTheme"]]; + NSArray *colors = theme[@"Colors"]; + if (colors.count == 5) { + unsigned i = 0; + for (NSNumber *color in colors) { + uint32_t c = [color unsignedIntValue]; + self.colorWells[i++].color = [NSColor colorWithRed:(c & 0xFF) / 255.0 + green:((c >> 8) & 0xFF) / 255.0 + blue:((c >> 16) & 0xFF) / 255.0 + alpha:1.0]; + } + } + _disableLCDColorCheckbox.state = [theme[@"DisabledLCDColor"] boolValue]; + _manualModeCheckbox.state = [theme[@"Manual"] boolValue]; + _brightnessSlider.doubleValue = [theme[@"BrightnessBias"] doubleValue] * 128 + 128; + _hueSlider.doubleValue = [theme[@"HueBias"] doubleValue] * 360; + _hueStrengthSlider.doubleValue = [theme[@"HueBiasStrength"] doubleValue] * 256; + [self updateEnabledControls]; +} + +- (IBAction)savePalette:(id)sender +{ + NSDictionary *theme = @{ + @"Colors": + @[@(_colorWell0.color.intValue), + @(_colorWell1.color.intValue), + @(_colorWell2.color.intValue), + @(_colorWell3.color.intValue), + @(_colorWell4.color.intValue)], + @"DisabledLCDColor": _disableLCDColorCheckbox.state? @YES : @NO, + @"Manual": _manualModeCheckbox.state? @YES : @NO, + @"BrightnessBias": @((_brightnessSlider.doubleValue - 128) / 128.0), + @"HueBias": @(_hueSlider.doubleValue / 360.0), + @"HueBiasStrength": @(_hueStrengthSlider.doubleValue / 256.0) + }; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSMutableDictionary *themes = [[defaults dictionaryForKey:@"GBThemes"] ?: @{} mutableCopy]; + themes[[defaults stringForKey:@"GBCurrentTheme"]] = theme; + [defaults setObject:themes forKey:@"GBThemes"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorPaletteChanged" object:nil]; +} + ++ (const GB_palette_t *)userPalette +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + switch ([defaults integerForKey:@"GBColorPalette"]) { + case 1: return &GB_PALETTE_DMG; + case 2: return &GB_PALETTE_MGB; + case 3: return &GB_PALETTE_GBL; + default: return &GB_PALETTE_GREY; + case -1: { + static GB_palette_t customPalette; + NSArray *colors = [defaults dictionaryForKey:@"GBThemes"][[defaults stringForKey:@"GBCurrentTheme"]][@"Colors"]; + if (colors.count == 5) { + unsigned i = 0; + for (NSNumber *color in colors) { + uint32_t c = [color unsignedIntValue]; + customPalette.colors[i++] = (struct GB_color_s) {c, c >> 8, c >> 16}; + } + } + return &customPalette; + } + } +} + +- (IBAction)export:(id)sender +{ + NSSavePanel *savePanel = [NSSavePanel savePanel]; + [savePanel setAllowedFileTypes:@[@"sbp"]]; + savePanel.nameFieldStringValue = [NSString stringWithFormat:@"%@.sbp", [[NSUserDefaults standardUserDefaults] stringForKey:@"GBCurrentTheme"]]; + if ([savePanel runModal] == NSModalResponseOK) { + theme_t theme = {0,}; + theme.magic = MAGIC; + theme.manual = _manualModeCheckbox.state; + theme.disabled_lcd_color = _disableLCDColorCheckbox.state; + unsigned i = 0; + for (NSColorWell *well in self.colorWells) { + theme.colors[i++] = well.color.gbColor; + } + theme.brightness_bias = (_brightnessSlider.doubleValue - 128) * (0x40000000 / 128); + theme.hue_bias = round(_hueSlider.doubleValue * (0x80000000 / 360.0)); + theme.hue_bias_strength = (_hueStrengthSlider.doubleValue) * (0x80000000 / 256); + size_t size = sizeof(theme); + if (theme.manual) { + size = theme.disabled_lcd_color? 5 + 5 * sizeof(theme.colors[0]) : 5 + 4 * sizeof(theme.colors[0]); + } + [[NSData dataWithBytes:&theme length:size] writeToURL:savePanel.URL atomically:false]; + } +} + +- (IBAction)import:(id)sender +{ + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowedFileTypes:@[@"sbp"]]; + if ([openPanel runModal] == NSModalResponseOK) { + NSData *data = [NSData dataWithContentsOfURL:openPanel.URL]; + theme_t theme = {0,}; + memcpy(&theme, data.bytes, MIN(sizeof(theme), data.length)); + if (theme.magic != MAGIC) { + NSBeep(); + return; + } + _manualModeCheckbox.state = theme.manual; + _disableLCDColorCheckbox.state = theme.disabled_lcd_color; + unsigned i = 0; + for (NSColorWell *well in self.colorWells) { + well.color = [NSColor colorWithRed:theme.colors[i].r / 255.0 + green:theme.colors[i].g / 255.0 + blue:theme.colors[i].b / 255.0 + alpha:1.0]; + i++; + } + if (!theme.disabled_lcd_color) { + _colorWell4.color = _colorWell3.color; + } + _brightnessSlider.doubleValue = theme.brightness_bias / (0x40000000 / 128.0) + 128; + _hueSlider.doubleValue = theme.hue_bias / (0x80000000 / 360.0); + _hueStrengthSlider.doubleValue = theme.hue_bias_strength / (0x80000000 / 256.0); + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSString *baseName = openPanel.URL.lastPathComponent.stringByDeletingPathExtension; + NSString *newName = baseName; + i = 2; + while (themes[newName]) { + newName = [NSString stringWithFormat:@"%@ %d", baseName, i++]; + } + [defaults setObject:newName forKey:@"GBCurrentTheme"]; + [self savePalette:sender]; + [self awakeFromNib]; + } +} + +- (IBAction)done:(NSButton *)sender +{ + [sender.window.sheetParent endSheet:sender.window]; +} + +- (instancetype)init +{ + static id singleton = nil; + if (singleton) return singleton; + return (singleton = [super init]); +} +@end diff --git a/thirdparty/SameBoy/Cocoa/GBPaletteView.h b/thirdparty/SameBoy/Cocoa/GBPaletteView.h new file mode 100644 index 000000000..d92cb5f17 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBPaletteView.h @@ -0,0 +1,6 @@ +#import +#import "Document.h" + +@interface GBPaletteView : NSView +- (void)reloadData:(Document *)document; +@end diff --git a/thirdparty/SameBoy/Cocoa/GBPaletteView.m b/thirdparty/SameBoy/Cocoa/GBPaletteView.m new file mode 100644 index 000000000..6aeddc05c --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBPaletteView.m @@ -0,0 +1,91 @@ +#import "GBPaletteView.h" + +@interface GBPaletteViewItem : NSObject +@property IBOutlet NSView *view; +@property (strong) IBOutlet NSTextField *label; +@property (strong) IBOutlet NSTextField *color0; +@property (strong) IBOutlet NSTextField *color1; +@property (strong) IBOutlet NSTextField *color2; +@property (strong) IBOutlet NSTextField *color3; +@end + +@implementation GBPaletteViewItem +@end + +@implementation GBPaletteView +{ + NSMutableArray *_colors; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + _colors = [NSMutableArray array]; + CGFloat height = self.frame.size.height; + for (unsigned i = 0; i < 16; i++) { + GBPaletteViewItem *item = [[GBPaletteViewItem alloc] init]; + [[NSBundle mainBundle] loadNibNamed:@"GBPaletteViewRow" owner:item topLevelObjects:nil]; + [self addSubview:item.view]; + [item.view setFrameOrigin:NSMakePoint(0, height - (i * 24) - 24)]; + item.label.stringValue = [NSString stringWithFormat:@"%@ %d", i < 8? @"Background" : @"Object", i % 8]; + item.view.autoresizingMask = NSViewMaxXMargin | NSViewMinYMargin; + [_colors addObject:item.color0]; + [_colors addObject:item.color1]; + [_colors addObject:item.color2]; + [_colors addObject:item.color3]; + + } + return self; +} + +- (void)reloadData:(Document *)document +{ + GB_gameboy_t *gb = document.gb; + uint8_t *bg = GB_get_direct_access(gb, GB_DIRECT_ACCESS_BGP, NULL, NULL); + uint8_t *obj = GB_get_direct_access(gb, GB_DIRECT_ACCESS_OBP, NULL, NULL); + + for (unsigned i = 0; i < 4 * 8 * 2; i++) { + uint8_t index = i % (4 * 8); + uint8_t *palette = i >= 4 * 8 ? obj : bg; + uint16_t color = (palette[(index << 1) + 1] << 8) | palette[(index << 1)]; + uint32_t nativeColor = GB_convert_rgb15(gb, color, false); + + uint8_t r = color & 0x1F, + g = (color >> 5) & 0x1F, + b = (color >> 10) & 0x1F; + + NSTextField *field = _colors[i]; + field.stringValue = [NSString stringWithFormat:@"$%04X", color]; + field.textColor = r * 3 + g * 4 + b * 2 > 120? [NSColor blackColor] : [NSColor whiteColor]; + field.toolTip = [NSString stringWithFormat:@"Red: %d, Green: %d, Blue: %d", r, g, b]; + field.backgroundColor = [NSColor colorWithRed:(nativeColor & 0xFF) / 255.0 + green:((nativeColor >> 8) & 0xFF) / 255.0 + blue:((nativeColor >> 16) & 0xFF) / 255.0 + alpha:1.0]; + } +} + +- (void)drawRect:(NSRect)dirtyRect +{ + NSRect frame = self.frame; + if (@available(macOS 10.14, *)) { + [[NSColor alternatingContentBackgroundColors].lastObject setFill]; + } + else { + [[NSColor colorWithDeviceWhite:0.96 alpha:1] setFill]; + } + for (unsigned i = 1; i <= 8; i++) { + NSRectFill(NSMakeRect(0, frame.size.height - i * 24 * 2, frame.size.width, 24)); + } + + if (@available(macOS 10.14, *)) { + [[NSColor alternatingContentBackgroundColors].firstObject setFill]; + } + else { + [[NSColor controlBackgroundColor] setFill]; + } + for (unsigned i = 0; i < 8; i++) { + NSRectFill(NSMakeRect(0, frame.size.height - i * 24 * 2 - 24, frame.size.width, 24)); + } +} +@end diff --git a/thirdparty/SameBoy/Cocoa/GBPaletteViewRow.xib b/thirdparty/SameBoy/Cocoa/GBPaletteViewRow.xib new file mode 100644 index 000000000..950b199a7 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBPaletteViewRow.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h index e11c5d3cd..15afcebfb 100644 --- a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h +++ b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.h @@ -1,32 +1,42 @@ #import #import +#import "GBPaletteEditorController.h" @interface GBPreferencesWindow : NSWindow -@property (nonatomic, strong) IBOutlet NSTableView *controlsTableView; -@property (nonatomic, strong) IBOutlet NSPopUpButton *graphicsFilterPopupButton; -@property (nonatomic, strong) IBOutlet NSButton *analogControlsCheckbox; -@property (nonatomic, strong) IBOutlet NSButton *aspectRatioCheckbox; -@property (nonatomic, strong) IBOutlet NSPopUpButton *highpassFilterPopupButton; -@property (nonatomic, strong) IBOutlet NSPopUpButton *colorCorrectionPopupButton; -@property (nonatomic, strong) IBOutlet NSPopUpButton *frameBlendingModePopupButton; -@property (nonatomic, strong) IBOutlet NSPopUpButton *colorPalettePopupButton; -@property (nonatomic, strong) IBOutlet NSPopUpButton *displayBorderPopupButton; -@property (nonatomic, strong) IBOutlet NSPopUpButton *rewindPopupButton; -@property (nonatomic, strong) IBOutlet NSPopUpButton *rtcPopupButton; -@property (nonatomic, strong) IBOutlet NSButton *configureJoypadButton; -@property (nonatomic, strong) IBOutlet NSButton *skipButton; -@property (nonatomic, strong) IBOutlet NSMenuItem *bootROMsFolderItem; -@property (nonatomic, strong) IBOutlet NSPopUpButtonCell *bootROMsButton; -@property (nonatomic, strong) IBOutlet NSPopUpButton *rumbleModePopupButton; -@property (nonatomic, weak) IBOutlet NSSlider *temperatureSlider; -@property (nonatomic, weak) IBOutlet NSSlider *interferenceSlider; -@property (nonatomic, weak) IBOutlet NSPopUpButton *dmgPopupButton; -@property (nonatomic, weak) IBOutlet NSPopUpButton *sgbPopupButton; -@property (nonatomic, weak) IBOutlet NSPopUpButton *cgbPopupButton; -@property (nonatomic, weak) IBOutlet NSPopUpButton *preferredJoypadButton; -@property (nonatomic, weak) IBOutlet NSPopUpButton *playerListButton; -@property (nonatomic, weak) IBOutlet NSButton *autoUpdatesCheckbox; -@property (weak) IBOutlet NSSlider *volumeSlider; -@property (weak) IBOutlet NSButton *OSDCheckbox; -@property (weak) IBOutlet NSButton *screenshotFilterCheckbox; +@property IBOutlet NSTableView *controlsTableView; +@property IBOutlet NSPopUpButton *graphicsFilterPopupButton; +@property IBOutlet NSButton *analogControlsCheckbox; +@property IBOutlet NSButton *controllersFocusCheckbox; +@property IBOutlet NSButton *aspectRatioCheckbox; +@property IBOutlet NSPopUpButton *highpassFilterPopupButton; +@property IBOutlet NSPopUpButton *colorCorrectionPopupButton; +@property IBOutlet NSPopUpButton *frameBlendingModePopupButton; +@property IBOutlet NSPopUpButton *colorPalettePopupButton; +@property IBOutlet NSPopUpButton *displayBorderPopupButton; +@property IBOutlet NSPopUpButton *rewindPopupButton; +@property IBOutlet NSPopUpButton *rtcPopupButton; +@property IBOutlet NSButton *configureJoypadButton; +@property IBOutlet NSButton *skipButton; +@property IBOutlet NSMenuItem *bootROMsFolderItem; +@property IBOutlet NSPopUpButtonCell *bootROMsButton; +@property IBOutlet NSPopUpButton *rumbleModePopupButton; +@property IBOutlet NSPopUpButton *hotkey1PopupButton; +@property IBOutlet NSPopUpButton *hotkey2PopupButton; +@property IBOutlet NSSlider *temperatureSlider; +@property IBOutlet NSSlider *interferenceSlider; +@property IBOutlet NSPopUpButton *dmgPopupButton; +@property IBOutlet NSPopUpButton *sgbPopupButton; +@property IBOutlet NSPopUpButton *cgbPopupButton; +@property IBOutlet NSPopUpButton *agbPopupButton; +@property IBOutlet NSPopUpButton *preferredJoypadButton; +@property IBOutlet NSPopUpButton *playerListButton; +@property IBOutlet NSButton *autoUpdatesCheckbox; +@property IBOutlet NSSlider *volumeSlider; +@property IBOutlet NSButton *OSDCheckbox; +@property IBOutlet NSButton *screenshotFilterCheckbox; +@property IBOutlet GBPaletteEditorController *paletteEditorController; +@property IBOutlet NSWindow *paletteEditor; +@property IBOutlet NSButton *joystickMBC7Checkbox; +@property IBOutlet NSButton *mouseMBC7Checkbox; +@property IBOutlet NSWindow *joyconsSheet; @end diff --git a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m index 60df2dde7..c0efc3827 100644 --- a/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m +++ b/thirdparty/SameBoy/Cocoa/GBPreferencesWindow.m @@ -1,8 +1,10 @@ #import "GBPreferencesWindow.h" +#import "GBJoyConManager.h" #import "NSString+StringForKey.h" #import "GBButtons.h" #import "BigSurToolbar.h" #import "GBViewMetal.h" +#import "GBWarningPopover.h" #import @implementation GBPreferencesWindow @@ -23,17 +25,22 @@ @implementation GBPreferencesWindow NSPopUpButton *_rtcPopupButton; NSButton *_aspectRatioCheckbox; NSButton *_analogControlsCheckbox; + NSButton *_controllersFocusCheckbox; NSEventModifierFlags previousModifiers; - NSPopUpButton *_dmgPopupButton, *_sgbPopupButton, *_cgbPopupButton; + NSPopUpButton *_dmgPopupButton, *_sgbPopupButton, *_cgbPopupButton, *_agbPopupButton; NSPopUpButton *_preferredJoypadButton; NSPopUpButton *_rumbleModePopupButton; + NSPopUpButton *_hotkey1PopupButton; + NSPopUpButton *_hotkey2PopupButton; NSSlider *_temperatureSlider; NSSlider *_interferenceSlider; NSSlider *_volumeSlider; NSButton *_autoUpdatesCheckbox; NSButton *_OSDCheckbox; NSButton *_screenshotFilterCheckbox; + NSButton *_joystickMBC7Checkbox; + NSButton *_mouseMBC7Checkbox; } + (NSArray *)filterList @@ -63,7 +70,7 @@ + (NSArray *)filterList - (NSWindowToolbarStyle)toolbarStyle { - return NSWindowToolbarStylePreference; + return NSWindowToolbarStyleExpanded; } - (void)close @@ -96,7 +103,7 @@ - (void)setColorCorrectionPopupButton:(NSPopUpButton *)colorCorrectionPopupButto { _colorCorrectionPopupButton = colorCorrectionPopupButton; NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorCorrection"]; - [_colorCorrectionPopupButton selectItemAtIndex:mode]; + [_colorCorrectionPopupButton selectItemWithTag:mode]; } @@ -153,8 +160,14 @@ - (NSPopUpButton *)frameBlendingModePopupButton - (void)setColorPalettePopupButton:(NSPopUpButton *)colorPalettePopupButton { _colorPalettePopupButton = colorPalettePopupButton; + [self updatePalettesMenu]; NSInteger mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorPalette"]; - [_colorPalettePopupButton selectItemAtIndex:mode]; + if (mode >= 0) { + [_colorPalettePopupButton selectItemWithTag:mode]; + } + else { + [_colorPalettePopupButton selectItemWithTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"GBCurrentTheme"] ?: @""]; + } } - (NSPopUpButton *)colorPalettePopupButton @@ -186,6 +199,45 @@ - (NSPopUpButton *)rumbleModePopupButton return _rumbleModePopupButton; } +static inline NSString *keyEquivalentString(NSMenuItem *item) +{ + return [NSString stringWithFormat:@"%s%@", (item.keyEquivalentModifierMask & NSEventModifierFlagShift)? "^":"", item.keyEquivalent]; +} + +- (void)setHotkey1PopupButton:(NSPopUpButton *)hotkey1PopupButton +{ + _hotkey1PopupButton = hotkey1PopupButton; + NSString *keyEquivalent = [[NSUserDefaults standardUserDefaults] stringForKey:@"GBJoypadHotkey1"]; + for (NSMenuItem *item in _hotkey1PopupButton.menu.itemArray) { + if ([keyEquivalent isEqualToString:keyEquivalentString(item)]) { + [_hotkey1PopupButton selectItem:item]; + break; + } + } +} + +- (NSPopUpButton *)hotkey1PopupButton +{ + return _hotkey1PopupButton; +} + +- (void)setHotkey2PopupButton:(NSPopUpButton *)hotkey2PopupButton +{ + _hotkey2PopupButton = hotkey2PopupButton; + NSString *keyEquivalent = [[NSUserDefaults standardUserDefaults] stringForKey:@"GBJoypadHotkey2"]; + for (NSMenuItem *item in _hotkey2PopupButton.menu.itemArray) { + if ([keyEquivalent isEqualToString:keyEquivalentString(item)]) { + [_hotkey2PopupButton selectItem:item]; + break; + } + } +} + +- (NSPopUpButton *)hotkey2PopupButton +{ + return _hotkey2PopupButton; +} + - (void)setRewindPopupButton:(NSPopUpButton *)rewindPopupButton { _rewindPopupButton = rewindPopupButton; @@ -318,12 +370,31 @@ - (IBAction)highpassFilterChanged:(id)sender [[NSNotificationCenter defaultCenter] postNotificationName:@"GBHighpassFilterChanged" object:nil]; } + +- (IBAction)changeMBC7JoystickOverride:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBMBC7JoystickOverride"]; +} + +- (IBAction)changeMBC7AllowMouse:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBMBC7AllowMouse"]; +} + - (IBAction)changeAnalogControls:(id)sender { [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState forKey:@"GBAnalogControls"]; } +- (IBAction)changeControllerFocus:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] == NSOnState + forKey:@"GBAllowBackgroundControllers"]; +} + - (IBAction)changeAspectRatio:(id)sender { [[NSUserDefaults standardUserDefaults] setBool: [(NSButton *)sender state] != NSOnState @@ -333,7 +404,7 @@ - (IBAction)changeAspectRatio:(id)sender - (IBAction)colorCorrectionChanged:(id)sender { - [[NSUserDefaults standardUserDefaults] setObject:@([sender indexOfSelectedItem]) + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedItem].tag) forKey:@"GBColorCorrection"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorCorrectionChanged" object:nil]; } @@ -356,6 +427,7 @@ - (IBAction)volumeChanged:(id)sender { [[NSUserDefaults standardUserDefaults] setObject:@([sender doubleValue] / 256.0) forKey:@"GBVolume"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBVolumeChanged" object:nil]; } - (IBAction)franeBlendingModeChanged:(id)sender @@ -366,10 +438,51 @@ - (IBAction)franeBlendingModeChanged:(id)sender } +- (void)updatePalettesMenu +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *themes = [defaults dictionaryForKey:@"GBThemes"]; + NSMenu *menu = _colorPalettePopupButton.menu; + while (menu.itemArray.count != 4) { + [menu removeItemAtIndex:4]; + } + [menu addItem:[NSMenuItem separatorItem]]; + for (NSString *name in [themes.allKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]) { + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:name action:nil keyEquivalent:@""]; + item.tag = -2; + [menu addItem:item]; + } + if (themes) { + [menu addItem:[NSMenuItem separatorItem]]; + } + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:@"Custom…" action:nil keyEquivalent:@""]; + item.tag = -1; + [menu addItem:item]; +} + - (IBAction)colorPaletteChanged:(id)sender { - [[NSUserDefaults standardUserDefaults] setObject:@([sender indexOfSelectedItem]) - forKey:@"GBColorPalette"]; + signed tag = [sender selectedItem].tag; + if (tag == -2) { + [[NSUserDefaults standardUserDefaults] setObject:@(-1) + forKey:@"GBColorPalette"]; + [[NSUserDefaults standardUserDefaults] setObject:[sender selectedItem].title + forKey:@"GBCurrentTheme"]; + + } + else if (tag == -1) { + [[NSUserDefaults standardUserDefaults] setObject:@(-1) + forKey:@"GBColorPalette"]; + [_paletteEditorController awakeFromNib]; + [self beginSheet:_paletteEditor completionHandler:^(NSModalResponse returnCode) { + [self updatePalettesMenu]; + [_colorPalettePopupButton selectItemWithTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"GBCurrentTheme"] ?: @""]; + }]; + } + else { + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedItem].tag) + forKey:@"GBColorPalette"]; + } [[NSNotificationCenter defaultCenter] postNotificationName:@"GBColorPaletteChanged" object:nil]; } @@ -387,6 +500,18 @@ - (IBAction)rumbleModeChanged:(id)sender [[NSNotificationCenter defaultCenter] postNotificationName:@"GBRumbleModeChanged" object:nil]; } +- (IBAction)hotkey1Changed:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:keyEquivalentString([sender selectedItem]) + forKey:@"GBJoypadHotkey1"]; +} + +- (IBAction)hotkey2Changed:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:keyEquivalentString([sender selectedItem]) + forKey:@"GBJoypadHotkey2"]; +} + - (IBAction)rewindLengthChanged:(id)sender { [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) @@ -427,7 +552,7 @@ - (void) advanceConfigurationStateMachine if (joystick_configuration_state == GBUnderclock) { [self.configureJoypadButton setTitle:@"Press Button for Slo-Mo"]; // Full name is too long :< } - else if (joystick_configuration_state < GBButtonCount) { + else if (joystick_configuration_state < GBJoypadButtonCount) { [self.configureJoypadButton setTitle:[NSString stringWithFormat:@"Press Button for %@", GBButtonNames[joystick_configuration_state]]]; } else { @@ -449,7 +574,7 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b if (!button.isPressed) return; if (joystick_configuration_state == -1) return; - if (joystick_configuration_state == GBButtonCount) return; + if (joystick_configuration_state == GBJoypadButtonCount) return; if (!joystick_being_configured) { joystick_being_configured = controller.uniqueID; } @@ -491,6 +616,8 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b [GBTurbo] = JOYButtonUsageL1, [GBRewind] = JOYButtonUsageL2, [GBUnderclock] = JOYButtonUsageR1, + [GBHotkey1] = GBJoyKitHotkey1, + [GBHotkey2] = GBJoyKitHotkey2, }; if (joystick_configuration_state == GBUnderclock) { @@ -498,7 +625,6 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b double max = 0; for (JOYAxis *axis in controller.axes) { if ((axis.value > 0.5 || (axis.equivalentButtonUsage == button.usage)) && axis.value >= max) { - max = axis.value; mapping[@"AnalogUnderclock"] = @(axis.uniqueID); break; } @@ -525,6 +651,28 @@ - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)b [self advanceConfigurationStateMachine]; } +- (NSButton *)joystickMBC7Checkbox +{ + return _joystickMBC7Checkbox; +} + +- (void)setJoystickMBC7Checkbox:(NSButton *)joystickMBC7Checkbox +{ + _joystickMBC7Checkbox = joystickMBC7Checkbox; + [_joystickMBC7Checkbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7JoystickOverride"]]; +} + +- (NSButton *)mouseMBC7Checkbox +{ + return _mouseMBC7Checkbox; +} + +- (void)setMouseMBC7Checkbox:(NSButton *)mouseMBC7Checkbox +{ + _mouseMBC7Checkbox = mouseMBC7Checkbox; + [_mouseMBC7Checkbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7AllowMouse"]]; +} + - (NSButton *)analogControlsCheckbox { return _analogControlsCheckbox; @@ -536,6 +684,17 @@ - (void)setAnalogControlsCheckbox:(NSButton *)analogControlsCheckbox [_analogControlsCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAnalogControls"]]; } +- (NSButton *)controllersFocusCheckbox +{ + return _controllersFocusCheckbox; +} + +- (void)setControllersFocusCheckbox:(NSButton *)controllersFocusCheckbox +{ + _controllersFocusCheckbox = controllersFocusCheckbox; + [_controllersFocusCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"GBAllowBackgroundControllers"]]; +} + - (NSButton *)aspectRatioCheckbox { return _aspectRatioCheckbox; @@ -639,6 +798,17 @@ - (NSPopUpButton *)cgbPopupButton return _cgbPopupButton; } +- (void)setAgbPopupButton:(NSPopUpButton *)agbPopupButton +{ + _agbPopupButton = agbPopupButton; + [_agbPopupButton selectItemWithTag:[[NSUserDefaults standardUserDefaults] integerForKey:@"GBAGBModel"]]; +} + +- (NSPopUpButton *)agbPopupButton +{ + return _agbPopupButton; +} + - (IBAction)dmgModelChanged:(id)sender { [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) @@ -661,6 +831,13 @@ - (IBAction)cgbModelChanged:(id)sender [[NSNotificationCenter defaultCenter] postNotificationName:@"GBCGBModelChanged" object:nil]; } +- (IBAction)agbModelChanged:(id)sender +{ + [[NSUserDefaults standardUserDefaults] setObject:@([sender selectedTag]) + forKey:@"GBAGBModel"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"GBAGBModelChanged" object:nil]; +} + - (IBAction)reloadButtonsData:(id)sender { [self.controlsTableView reloadData]; @@ -791,4 +968,48 @@ - (void)setScreenshotFilterCheckbox:(NSButton *)screenshotFilterCheckbox } } +- (IBAction)displayColorCorrectionHelp:(id)sender +{ + [GBWarningPopover popoverWithContents: + (NSString * const[]){ + [GB_COLOR_CORRECTION_DISABLED] = @"Colors are directly interpreted as sRGB, resulting in unbalanced colors and inaccurate hues.", + [GB_COLOR_CORRECTION_CORRECT_CURVES] = @"Colors have their brightness corrected, but hues remain unbalanced.", + [GB_COLOR_CORRECTION_MODERN_BALANCED] = @"Emulates a modern display. Blue contrast is moderately enhanced at the cost of slight hue inaccuracy.", + [GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST] = @"Like Modern – Balanced, but further boosts the contrast of greens and magentas that is lacking on the original hardware.", + [GB_COLOR_CORRECTION_REDUCE_CONTRAST] = @"Slightly reduce the contrast to better represent the tint and contrast of the original display.", + [GB_COLOR_CORRECTION_LOW_CONTRAST] = @"Harshly reduce the contrast to accurately represent the tint low constrast of the original display.", + [GB_COLOR_CORRECTION_MODERN_ACCURATE] = @"Emulates a modern display. Colors have their hues and brightness corrected.", + } [self.colorCorrectionPopupButton.selectedItem.tag] + title:self.colorCorrectionPopupButton.selectedItem.title + onView:sender + timeout:6 + preferredEdge:NSRectEdgeMaxX]; +} + +- (IBAction)displayHighPassHelp:(id)sender +{ + [GBWarningPopover popoverWithContents: + (NSString * const[]){ + [GB_HIGHPASS_OFF] = @"No high-pass filter will be applied. DC offset will be kept, pausing and resuming will trigger audio pops.", + [GB_HIGHPASS_ACCURATE] = @"An accurate high-pass filter will be applied, removing the DC offset while somewhat attenuating the bass.", + [GB_HIGHPASS_REMOVE_DC_OFFSET] = @"A high-pass filter will be applied to the DC offset itself, removing the DC offset while preserving the waveform.", + } [self.highpassFilterPopupButton.indexOfSelectedItem] + title:self.highpassFilterPopupButton.selectedItem.title + onView:sender + timeout:6 + preferredEdge:NSRectEdgeMaxX]; +} + +- (IBAction)arrangeJoyCons:(id)sender +{ + [GBJoyConManager sharedInstance].arrangementMode = true; + [self beginSheet:self.joyconsSheet completionHandler:nil]; +} + +- (IBAction)closeJoyConsSheet:(id)sender +{ + [self endSheet:self.joyconsSheet]; + [GBJoyConManager sharedInstance].arrangementMode = false; +} + @end diff --git a/thirdparty/SameBoy/Cocoa/GBS.xib b/thirdparty/SameBoy/Cocoa/GBS.xib index 534ff5590..65bd44f82 100644 --- a/thirdparty/SameBoy/Cocoa/GBS.xib +++ b/thirdparty/SameBoy/Cocoa/GBS.xib @@ -44,7 +44,7 @@ - - - - - - - - - - - - - - + - - + + @@ -114,6 +91,29 @@ + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/GBS11.xib b/thirdparty/SameBoy/Cocoa/GBS11.xib new file mode 100644 index 000000000..b7a69fd56 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBS11.xib @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/SameBoy/Cocoa/GBSplitView.m b/thirdparty/SameBoy/Cocoa/GBSplitView.m index d24d58065..ca51068d0 100644 --- a/thirdparty/SameBoy/Cocoa/GBSplitView.m +++ b/thirdparty/SameBoy/Cocoa/GBSplitView.m @@ -19,6 +19,12 @@ - (NSColor *)dividerColor return [super dividerColor]; } +- (void)drawDividerInRect:(NSRect)rect +{ + [self.dividerColor set]; + NSRectFill(rect); +} + /* Mavericks comaptibility */ - (NSArray *)arrangedSubviews { diff --git a/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m b/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m index e1ba95779..a6f76a4bb 100644 --- a/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m +++ b/thirdparty/SameBoy/Cocoa/GBTerminalTextFieldCell.m @@ -1,7 +1,11 @@ #import #import "GBTerminalTextFieldCell.h" +#import "NSTextFieldCell+Inset.h" @interface GBTerminalTextView : NSTextView +{ + @public __weak NSTextField *_field; +} @property GB_gameboy_t *gb; @end @@ -10,7 +14,7 @@ @implementation GBTerminalTextFieldCell GBTerminalTextView *field_editor; } -- (NSTextView *)fieldEditorForView:(NSView *)controlView +- (NSTextView *)fieldEditorForView:(NSTextField *)controlView { if (field_editor) { field_editor.gb = self.gb; @@ -19,6 +23,10 @@ - (NSTextView *)fieldEditorForView:(NSView *)controlView field_editor = [[GBTerminalTextView alloc] init]; [field_editor setFieldEditor:true]; field_editor.gb = self.gb; + field_editor->_field = (NSTextField *)controlView; + ((NSTextFieldCell *)controlView.cell).textInset = + field_editor.textContainerInset = + NSMakeSize(0, 2); return field_editor; } @@ -185,14 +193,21 @@ - (BOOL)resignFirstResponder return [super resignFirstResponder]; } --(void)drawRect:(NSRect)dirtyRect +- (NSColor *)backgroundColor +{ + return nil; +} + +- (void)drawRect:(NSRect)dirtyRect { - [super drawRect:dirtyRect]; if (reverse_search_mode && [super string].length == 0) { NSMutableDictionary *attributes = [self.typingAttributes mutableCopy]; NSColor *color = [attributes[NSForegroundColorAttributeName] colorWithAlphaComponent:0.5]; [attributes setObject:color forKey:NSForegroundColorAttributeName]; - [[[NSAttributedString alloc] initWithString:@"Reverse search..." attributes:attributes] drawAtPoint:NSMakePoint(2, 0)]; + [[[NSAttributedString alloc] initWithString:@"Reverse search..." attributes:attributes] drawAtPoint:NSMakePoint(2, 2)]; + } + else { + [super drawRect:dirtyRect]; } } diff --git a/thirdparty/SameBoy/Cocoa/GBTintedImageCell.h b/thirdparty/SameBoy/Cocoa/GBTintedImageCell.h new file mode 100644 index 000000000..eb6c8b33c --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBTintedImageCell.h @@ -0,0 +1,5 @@ +#import + +@interface GBTintedImageCell : NSImageCell +@property NSColor *tint; +@end diff --git a/thirdparty/SameBoy/Cocoa/GBTintedImageCell.m b/thirdparty/SameBoy/Cocoa/GBTintedImageCell.m new file mode 100644 index 000000000..af4faa665 --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/GBTintedImageCell.m @@ -0,0 +1,20 @@ +#import "GBTintedImageCell.h" + +@implementation GBTintedImageCell + +- (NSImage *)image +{ + if (!self.tint || !super.image.isTemplate) { + return [super image]; + } + + NSImage *tinted = [super.image copy]; + [tinted lockFocus]; + [self.tint set]; + NSRectFillUsingOperation((NSRect){.size = tinted.size}, NSCompositeSourceIn); + [tinted unlockFocus]; + tinted.template = false; + return tinted; +} + +@end diff --git a/thirdparty/SameBoy/Cocoa/GBView.h b/thirdparty/SameBoy/Cocoa/GBView.h index 01481a7d1..a264d29a4 100644 --- a/thirdparty/SameBoy/Cocoa/GBView.h +++ b/thirdparty/SameBoy/Cocoa/GBView.h @@ -2,6 +2,7 @@ #include #import #import "GBOSDView.h" + @class Document; typedef enum { diff --git a/thirdparty/SameBoy/Cocoa/GBView.m b/thirdparty/SameBoy/Cocoa/GBView.m index 6c92c3f0b..65b807cff 100644 --- a/thirdparty/SameBoy/Cocoa/GBView.m +++ b/thirdparty/SameBoy/Cocoa/GBView.m @@ -118,6 +118,7 @@ @implementation GBView JOYController *lastController; GB_frame_blending_mode_t _frameBlendingMode; bool _turbo; + bool _mouseControlEnabled; } + (instancetype)alloc @@ -147,7 +148,7 @@ - (void) _init [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ratioKeepingChanged) name:@"GBAspectChanged" object:nil]; tracking_area = [ [NSTrackingArea alloc] initWithRect:(NSRect){} - options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingInVisibleRect + options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingInVisibleRect | NSTrackingMouseMoved owner:self userInfo:nil]; [self addTrackingArea:tracking_area]; @@ -156,6 +157,7 @@ - (void) _init [self addSubview:self.internalView]; self.internalView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; [JOYController registerListener:self]; + _mouseControlEnabled = true; } - (void)screenSizeChanged @@ -459,9 +461,34 @@ - (void)setRumble:(double)amp [lastController setRumbleAmplitude:amp]; } +- (bool)shouldControllerUseJoystickForMotion:(JOYController *)controller +{ + if (!_gb) return false; + if (!GB_has_accelerometer(_gb)) return false; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7JoystickOverride"]) return true; + for (JOYAxes3D *axes in controller.axes3D) { + if (axes.usage == JOYAxes3DUsageOrientation || axes.usage == JOYAxes3DUsageAcceleration) { + return false; + } + } + return true; +} + +- (bool)allowController +{ + if ([self.window isMainWindow]) return true; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBAllowBackgroundControllers"]) { + if ([(Document *)[NSApplication sharedApplication].orderedDocuments.firstObject mainWindow] == self.window) { + return true; + } + } + return false; +} + - (void)controller:(JOYController *)controller movedAxis:(JOYAxis *)axis { - if (![self.window isMainWindow]) return; + if (!_gb) return; + if (![self allowController]) return; NSDictionary *mapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"JoyKitInstanceMapping"][controller.uniqueID]; if (!mapping) { @@ -481,9 +508,53 @@ - (void)controller:(JOYController *)controller movedAxis:(JOYAxis *)axis } } +- (void)controller:(JOYController *)controller movedAxes2D:(JOYAxes2D *)axes +{ + if (!_gb) return; + if ([self shouldControllerUseJoystickForMotion:controller]) { + if (!self.mouseControlsActive) { + GB_set_accelerometer_values(_gb, -axes.value.x, -axes.value.y); + } + } +} + +- (void)controller:(JOYController *)controller movedAxes3D:(JOYAxes3D *)axes +{ + if (!_gb) return; + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7JoystickOverride"]) return; + if (self.mouseControlsActive) return; + if (controller != lastController) return; + // When using Joy-Cons in dual-controller grip, ignore motion data from the left Joy-Con + if (controller.joyconType == JOYJoyConTypeDual) { + for (JOYController *child in [(JOYCombinedController *)controller children]) { + if (child.joyconType != JOYJoyConTypeRight && [child.axes3D containsObject:axes]) { + return; + } + } + } + + if (axes.usage == JOYAxes3DUsageOrientation) { + for (JOYAxes3D *axes in controller.axes3D) { + // Only use orientation if there's no acceleration axes + if (axes.usage == JOYAxes3DUsageAcceleration) { + return; + } + } + JOYPoint3D point = axes.normalizedValue; + GB_set_accelerometer_values(_gb, point.x, point.z); + } + else if (axes.usage == JOYAxes3DUsageAcceleration) { + JOYPoint3D point = axes.gUnitsValue; + GB_set_accelerometer_values(_gb, point.x, point.z); + } +} + - (void)controller:(JOYController *)controller buttonChangedState:(JOYButton *)button { - if (![self.window isMainWindow]) return; + if (!_gb) return; + if (![self allowController]) return; + _mouseControlEnabled = false; + if (button.type == JOYButtonTypeAxes2DEmulated && [self shouldControllerUseJoystickForMotion:controller]) return; unsigned player_count = GB_get_player_count(_gb); if (self.document.partner) { @@ -588,11 +659,18 @@ - (BOOL)acceptsFirstResponder return true; } +- (bool)mouseControlsActive +{ + return _gb && GB_is_inited(_gb) && GB_has_accelerometer(_gb) && + _mouseControlEnabled && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBMBC7AllowMouse"]; +} + - (void)mouseEntered:(NSEvent *)theEvent { if (!mouse_hidden) { mouse_hidden = true; - if (_mouseHidingEnabled) { + if (_mouseHidingEnabled && + !self.mouseControlsActive) { [NSCursor hide]; } } @@ -610,6 +688,46 @@ - (void)mouseExited:(NSEvent *)theEvent [super mouseExited:theEvent]; } +- (void)mouseDown:(NSEvent *)event +{ + _mouseControlEnabled = true; + if (self.mouseControlsActive) { + if (event.type == NSEventTypeLeftMouseDown) { + GB_set_key_state(_gb, GB_KEY_A, true); + } + } +} + +- (void)mouseUp:(NSEvent *)event +{ + if (self.mouseControlsActive) { + if (event.type == NSEventTypeLeftMouseUp) { + GB_set_key_state(_gb, GB_KEY_A, false); + } + } +} + +- (void)mouseMoved:(NSEvent *)event +{ + if (self.mouseControlsActive) { + NSPoint point = [self convertPoint:[event locationInWindow] toView:nil]; + + point.x /= self.frame.size.width; + point.x *= 2; + point.x -= 1; + + point.y /= self.frame.size.height; + point.y *= 2; + point.y -= 1; + + if (GB_get_screen_width(_gb) != 160) { // has border + point.x *= 256 / 160.0; + point.y *= 224 / 114.0; + } + GB_set_accelerometer_values(_gb, -point.x, point.y); + } +} + - (void)setMouseHidingEnabled:(bool)mouseHidingEnabled { if (mouseHidingEnabled == _mouseHidingEnabled) return; diff --git a/thirdparty/SameBoy/Cocoa/GBVisualizerView.m b/thirdparty/SameBoy/Cocoa/GBVisualizerView.m index 61688e628..08f6024db 100644 --- a/thirdparty/SameBoy/Cocoa/GBVisualizerView.m +++ b/thirdparty/SameBoy/Cocoa/GBVisualizerView.m @@ -1,4 +1,5 @@ #import "GBVisualizerView.h" +#import "GBPaletteEditorController.h" #include #define SAMPLE_COUNT 1024 @@ -28,24 +29,7 @@ @implementation GBVisualizerView - (void)drawRect:(NSRect)dirtyRect { - const GB_palette_t *palette; - switch ([[NSUserDefaults standardUserDefaults] integerForKey:@"GBColorPalette"]) { - case 1: - palette = &GB_PALETTE_DMG; - break; - - case 2: - palette = &GB_PALETTE_MGB; - break; - - case 3: - palette = &GB_PALETTE_GBL; - break; - - default: - palette = &GB_PALETTE_GREY; - break; - } + const GB_palette_t *palette = [GBPaletteEditorController userPalette]; NSSize size = self.bounds.size; [color_to_effect_color(palette->colors[0]) setFill]; diff --git a/thirdparty/SameBoy/Cocoa/GBWarningPopover.h b/thirdparty/SameBoy/Cocoa/GBWarningPopover.h index 1d695b13e..953aa3c91 100644 --- a/thirdparty/SameBoy/Cocoa/GBWarningPopover.h +++ b/thirdparty/SameBoy/Cocoa/GBWarningPopover.h @@ -4,5 +4,6 @@ + (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView *)view; + (GBWarningPopover *) popoverWithContents:(NSString *)contents onWindow:(NSWindow *)window; ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents title:(NSString *)title onView:(NSView *)view timeout:(double)seconds preferredEdge:(NSRectEdge)preferredEdge; @end diff --git a/thirdparty/SameBoy/Cocoa/GBWarningPopover.m b/thirdparty/SameBoy/Cocoa/GBWarningPopover.m index 74f6444da..b66186ba2 100644 --- a/thirdparty/SameBoy/Cocoa/GBWarningPopover.m +++ b/thirdparty/SameBoy/Cocoa/GBWarningPopover.m @@ -4,7 +4,7 @@ @implementation GBWarningPopover -+ (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView *)view ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents title:(NSString *)title onView:(NSView *)view timeout:(double)seconds preferredEdge:(NSRectEdge)preferredEdge { [lastPopover close]; lastPopover = [[self alloc] init]; @@ -13,7 +13,17 @@ + (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView * [lastPopover setAnimates:true]; lastPopover.contentViewController = [[NSViewController alloc] initWithNibName:@"PopoverView" bundle:nil]; NSTextField *field = (NSTextField *)lastPopover.contentViewController.view; - [field setStringValue:contents]; + if (!title) { + [field setStringValue:contents]; + } + else { + NSMutableAttributedString *fullContents = [[NSMutableAttributedString alloc] initWithString:title + attributes:@{NSFontAttributeName: [NSFont boldSystemFontOfSize:[NSFont systemFontSize]]}]; + [fullContents appendAttributedString:[[NSAttributedString alloc] initWithString:[@"\n" stringByAppendingString:contents] + attributes:@{NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]]}]]; + [field setAttributedStringValue:fullContents]; + + } NSSize textSize = [field.cell cellSizeForBounds:[field.cell drawingRectForBounds:NSMakeRect(0, 0, 240, CGFLOAT_MAX)]]; textSize.width = ceil(textSize.width) + 16; textSize.height = ceil(textSize.height) + 12; @@ -25,11 +35,13 @@ + (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView * [lastPopover showRelativeToRect:view.bounds ofView:view - preferredEdge:NSMinYEdge]; + preferredEdge:preferredEdge]; NSRect frame = field.frame; frame.origin.x += 8; - frame.origin.y -= 6; + frame.origin.y += 6; + frame.size.width -= 16; + frame.size.height -= 12; field.frame = frame; @@ -38,6 +50,11 @@ + (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView * return lastPopover; } ++ (GBWarningPopover *) popoverWithContents:(NSString *)contents onView:(NSView *)view +{ + return [self popoverWithContents:contents title:nil onView:view timeout:3.0 preferredEdge:NSMinYEdge]; +} + + (GBWarningPopover *)popoverWithContents:(NSString *)contents onWindow:(NSWindow *)window { return [self popoverWithContents:contents onView:window.contentView.superview.subviews.lastObject]; diff --git a/thirdparty/SameBoy/Cocoa/HelpTemplate.png b/thirdparty/SameBoy/Cocoa/HelpTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..6b12375e1ae822094bec4c7459960d0e0da75f9c GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh0wlLOK8*rWb)GJcArhC9f1GDv_2e;^s588i zdLk_$Dd7iy8&AMViMH1~Z9F{=H4_&K#eOnsX1>Cb+{XT5QoUrvf=Mzw_7_wI6?z{U z=y}Grr8_il^zveQ`mdKI;Vst0H<<72><{9 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/HelpTemplate@2x.png b/thirdparty/SameBoy/Cocoa/HelpTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f8237aa7c391531dce41edcc05ed6438ffdb33 GIT binary patch literal 323 zcmV-J0lfZ+P)p8YLON0+|WO?q;wDyTA#*#wH+RD+4;{0g5igukk#P;fbNq94Pt_zs7Gs zhA4(cUZChN{2I~X1qwugqAv(X2PUWlO7A3Hqb$QmpmYeS8o3xw0428*lX8#&Bg0yt z)NKY4QZ-HlN<3yzCN8ZaKo(H=1A{KHi5w9q-x&TexFZCJ)mRM_oQEtxtj5DYK_hZB zJ_QQ$kfZS%x*)L{|C6f`t4V`VqbI{NAoL_%<1?_}GjcUPCtaf#P}372NmwJP5CG|q Vm57nrUw!}p002ovPDHLkV1nqmb^HJT literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/HorizontalJoyConLeftTemplate.png b/thirdparty/SameBoy/Cocoa/HorizontalJoyConLeftTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4b5974de009c861a2923fab4d9ac3df5098a26 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UjKx9jP7LeL$-D$|4tlychIkx* zd&Q8i$w7ei!gJL%Z?8L7h@DT!ex$l$N297t!=+Qq7or5Yw55|9Sr<7aiEMcCKh1ph z|MIl5w3!AE{W*lvL-psWIw|W{bxDhDbu|iz+j(n2`3L=XuSLohpO_w9P2a9AAD>6@+=|OtTsvbULm{1(jv>~799_uXBa$P L{an^LB{Ts5Ja}eP literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/HorizontalJoyConLeftTemplate@2x.png b/thirdparty/SameBoy/Cocoa/HorizontalJoyConLeftTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..816706d0421cd70ceae4bfe5773c07d2bf77f618 GIT binary patch literal 394 zcmV;50d@X~P)Px$L`g(JRA}DqmNBkHP!NVct9a4fC{=e6a#tX>!ve4grKl`I_cox`OC+M=6(V@f z%?-i1#eCC94D%oJ&pAL41VIo4L6~?EQBX5n7&QeEuWj)MA@V7Y290rofC?WQ8=p##fZ0sG z9s#qN?6U>*B)FKExFqy<3+R`V3ixj%T-JhQGcAeIdcTURYM+2sdCT1ha6hbj|F>wz z^ip}#+z2o~bbh}Z$}v6HCLkZv18pq`#&k!U37zr92AP&I%rK@$J-XXBq7HAlzWDa7 zI9~VHBE9u6O0oW1?0Hbak>fb!sroUoh?QPAH#*|&>SsLVM4T7d+IlJs90GF6H)q6= oXer4FaOS}i1VIo4LHHv60M!_snwKK&5&!@I07*qoM6N<$f|~xN(f|Me literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/HorizontalJoyConRightTemplate.png b/thirdparty/SameBoy/Cocoa/HorizontalJoyConRightTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..866992bedb84e1fea84ad1b510888a14ed468d97 GIT binary patch literal 266 zcmV+l0rmcgP)kdg00001b5ch_0Itp) z=>Px##7RU!R7l6|)Uj>DFcbvPSGus)NW&cj*ljj(={iM*u%I~v&*H*>0T)`s5>rS* zoPY=97YTM_1+-tPSiTq}#)!46J*ouF|7s<_ZS1;Uc Qc>n+a07*qoM6N<$f~y5Px$NJ&INRA}DqmN9OFFcgNroT6fj7@2YiloOy_2M$2EgvTfohhXakn6o1xAtvZx zMUaAO(-u3!``!}CQT*BOw;d1!K@bE%cq`6asc0B?tcHp!=jG%_a@t*|o>xoG@pXFT zZ1QKRxkB!I`jL@*>V4})pnYcHgOrCCh3nLW)Qdnh2}E85nm4(CMvt|Nz=M>C$ST^q z2&5aLy^BD!A=(=S1{4Va0SSu1wZJgjT)n}A+ZL$B`BAIU`&{|-_(`C%6i5~ViDBKQ zz3B8{Z7C2e1Oh|nO=+n0VChYu)PtF~7G!!b_7=ie|IC5Amt%P6@ciP1-uXq;bD6KE zaDEjRuiXr}Iem<7gx>>o`ZophbA02p_Qxcou*||=s;5}4e&S+zB7R%<*XXTrASR=v swtgeb)lpND5l;tC5ClOG1VPYz0sq3CntW`*P5=M^07*qoM6N<$g4H6ktpET3 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Icon.png b/thirdparty/SameBoy/Cocoa/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a5675ca2c3d4f0ccc34e4ffbdccba45593646c50 GIT binary patch literal 3156 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 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Info.plist b/thirdparty/SameBoy/Cocoa/Info.plist index 5e409c981..dce84c924 100644 --- a/thirdparty/SameBoy/Cocoa/Info.plist +++ b/thirdparty/SameBoy/Cocoa/Info.plist @@ -88,6 +88,24 @@ NSDocumentClass Document + + CFBundleTypeExtensions + + gbcart + + CFBundleTypeIconFile + ColorCartridge + CFBundleTypeName + Game Boy Cartridge + CFBundleTypeRole + Viewer + LSItemContentTypes + + LSTypeIsPackage + 1 + NSDocumentClass + Document + CFBundleExecutable SameBoy @@ -95,6 +113,8 @@ AppIcon.icns CFBundleIdentifier com.github.liji32.sameboy + LSApplicationCategoryType + public.app-category.games CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -112,11 +132,11 @@ LSMinimumSystemVersion 10.9 NSHumanReadableCopyright - Copyright © 2015-2021 Lior Halphon + Copyright © 2015-@COPYRIGHT_YEAR Lior Halphon NSMainNibFile MainMenu NSPrincipalClass - NSApplication + GBApp UTExportedTypeDeclarations diff --git a/thirdparty/SameBoy/Cocoa/InterruptTemplate.png b/thirdparty/SameBoy/Cocoa/InterruptTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..35307279fb46d74fa5b583afaa4a25a366697852 GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh0wlLOK8*rWDxNNmArhC9f1Lj?zwx0xOHyjH qfWV*QhyL-WCrw&B$;C5?zk(qwf4^h8g`Fx;J%gvKpUXO@geCx2hTTd6q5R22vf6g;7_872<{7FBe zf9{Bbn#0u-9IY=Hx-F*Wr2OD-o52t~C(5iZOXjM@s=^RuUsIz?dsWyOW|jz;t4&WV Q0~*BO>FVdQ&MBb@01mn%0ssI2 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/JoyConDualTemplate.png b/thirdparty/SameBoy/Cocoa/JoyConDualTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..42e7a2711997be841258473f652f5211662e2813 GIT binary patch literal 315 zcmV-B0mS}^P)kdg00033NklA%LC()LxN_p@J4300WpYBWmmwunz=C7@)ymxKeV(U}#-=g(m10*Ohfq#Kom^)BnNjuBKyV}+4 zg8D?H6tr}_7^Y)Doo|ns^ox#`f|Q7j=Rsqv(hgu84UgrQ-ze#KskD{uDY@ydzf&Jj zX)j%KSHHeKtkPDxp8gA^6P32o<>-2S5P<&29iw&67X}z;h#+;U(pEZ!A}BxsZBT#~ zI%VNaMMg|aM#b9^z>}PWgq)`)*`dVzH~Dmzd_*_|kWVz~IYOCMx+W?o0LibuWG1Uj zve|Ct7a*SP#=<5L1sGlLYvI>Z-ULhEJzo=a!X?Yk*R&|$@)+&_a2tqrn80l)-r<^)Zv;BC7TG%iojx((I59s-Zx Z0N;Z<Rs literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/JoyConLeftTemplate.png b/thirdparty/SameBoy/Cocoa/JoyConLeftTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..924c427bdfa175382fba48d0eddb481a75159158 GIT binary patch literal 266 zcmV+l0rmcgP)kdg0002dNkl8KwW~miHnSJ{hwG27?#?J#Q^nIR{Mh5nd07f=9TV^F?WVzqC4lt8(7MpC>fYg QM*si-07*qoM6N<$f<1L=T>t<8 literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/JoyConLeftTemplate@2x.png b/thirdparty/SameBoy/Cocoa/JoyConLeftTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6b2f9969412096409d6f6595ade5510bdf0063ea GIT binary patch literal 502 zcmVXK3Ih^`+RTDtXbArRATU$I zLbA*rV!yg>T}N{5TUbx^?!8<;?R$N_ysy%D4dt9}vcW2g%rk8_Xr;dS;Dtvjtrfh7 z`XfM!J$45BY1P`S&NWw5%>zU^=7=dbzYYLEfpe;60aiF8G0d+A04~Xx1c-7m{PukS zb#`^d96+8EFFywW@iam<^#h=l8GtO7 zEWiWXvH+hf*mvcgGS9#|arV1)%0GaHt>$ZTI%l(4SZxIV0PHRWedw^>aS$XxQkNXo z1jQf$BKpf=ouf8U0OBDKPeSp}P^1uzaGX|oSxNO&a3tqxytaD28LAY#=;nFRD sMaD1bwmo$huK{LRHY{HIJH!Eg0mI(55Zpw^qW}N^07*qoM6N<$g7wGHX8-^I literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/JoyConRightTemplate.png b/thirdparty/SameBoy/Cocoa/JoyConRightTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..1fccf5f67cdcf67e4f5750c04ec51a0ddab654dc GIT binary patch literal 262 zcmV+h0r~!kP)kdg0002ZNkl)dmyModYBqN1y!%9PY&yr*3*&B~MxB?}5dZ)H M07*qoM6N<$f@|(()Bpeg literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/JoyConRightTemplate@2x.png b/thirdparty/SameBoy/Cocoa/JoyConRightTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c385caf09b29cc269ff5b517aa668e5a8f1f45 GIT binary patch literal 411 zcmV;M0c8G(P)53r`6GW_I1^||DiKsFJ-7SzhJ<>^tDy9fYjyOOR+3!b(<0g7~ zjy__?Mt-n(*P3gE9Zon~bP_Jekzs=+CV05)fQEs98MgSX0xvopu?_>6!L)&wovzqp z?jNxI8+hC4fQ4Vcs($$c0TzeqE%*ZL9s`3q?R^4HBLG*d{Q=G+02W6~d;#nzfW?vx z*suYa44{C9f`UfT$;@Q{y2;bsJwgVcnmpxZeg)w95CjFZQ}3tet_Tn4``u0~B%p8P zo!Gwy(1(CN3F)6n$0wO>JP{JTZf&?iHN@+mZt^)U!pp*p|C)daV zQYSZ+1td;x@?`+}5YQ(f{WGL5L~$>OfC%_-z=aLS*?^1zdjX+~*I^qSa05JLNPKuFhvNVM002ovPDHLk FV1lA_sXqV! literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Joypad.png b/thirdparty/SameBoy/Cocoa/Joypad.png index f30d8f99f08ffdf38d4b1b0c31b327f0edff93fd..46cd64837cc6cadfe2d07e4f056a956d6da5fd52 100644 GIT binary patch delta 728 zcmV;}0w?|cn*rnnkQsjj0002lbFzN`000SaNLh0L01FcU01FcV0GgZ_0007(Nkls5XaqxF;v*sxc%!qkA6&OMpI}eG8BJ)d;RRT=iPu>|5J+4 zbNWJGp>t?SA@x71S~b8%H`A0u6Uv|ov;d%!sf}s?r(-N&Mlm$U=#&9QIh6q^-g-(2 z9RiSG#DI2nKwAJg!mS>;f?OK+hK?V$f}Sz7t_*;fdiMi{Ti%X0TxmSoznDn|Y_MIy zly)!1qiZj3XSjd00yzFpPT92396H9*GfJ_6Da5H7kpSER5W<*XGAscx1#nGd7ZQJr0$8*FLW~pmPuBqf3>?DK zsVJ5jv>9MrglD#g;uZf5@G+(36@n7LyI|xX8QFnY>>QrUXhQop0f|7gOeP{-R-!Hw zswF$O0J{Z0Eu7drmN&KKoC;2_`EZH{C7{v$-KV$o4vqC5Zl~oNNwKmtKEB?TPBpe`%=m)K&$$F&@_SE zL|OnEqYNAS2tX{g&)F~lG#>)+i`&qi3oh!thX7FA&jSj|E0q9h0000< KMNUMnLSTaA@=Lz} literal 19966 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 diff --git a/thirdparty/SameBoy/Cocoa/Joypad@2x.png b/thirdparty/SameBoy/Cocoa/Joypad@2x.png index d91ee30b9ddefe4c041bbb3ecd95059c298bf9bf..4fcc1f433c18d07e46b50843477ef9d4006d1ccc 100644 GIT binary patch delta 1559 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 diff --git a/thirdparty/SameBoy/Cocoa/Joypad~dark.png b/thirdparty/SameBoy/Cocoa/Joypad~dark.png index 8a7687b5fffcef9c4fec0f4b00ee026ec6ee3b11..18bdccd95683be7737e12164c4c1cdd37f24f499 100644 GIT binary patch delta 1289 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 diff --git a/thirdparty/SameBoy/Cocoa/Joypad~dark@2x.png b/thirdparty/SameBoy/Cocoa/Joypad~dark@2x.png index ce2a07cc1a35f58e36814aa88adaecc41ba256b5..aa6b5c006a59526759876c88a94f85ede7f1c518 100644 GIT binary patch delta 2839 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 Ohk>4nZiTi>)PDil;Mytx diff --git a/thirdparty/SameBoy/Cocoa/Joypad~solid.png b/thirdparty/SameBoy/Cocoa/Joypad~solid.png new file mode 100644 index 0000000000000000000000000000000000000000..fecb8b32030bfe384acc6fe84b4b9bc8e10ec453 GIT binary patch literal 427 zcmV;c0aX5pP)naOxuOR@1nmT}N z7{I0kLj@&hwIY-tu@ENShJ(8PLDXpcV-!!Kyv$Sh7n}e#0GU#7FH_P8FuVnd(x)gq zttBXQq<_;)AOrI}q%Ps?Q>+sSq4^@DErd>l(d-xs0j{6HPQk~+ZrLfwca#CB&>9Ne VoLZSs5PARr002ovPDHLkV1i}u`KoEvsS;~)H**<{JfPD#b2*f24$$JOVAr62z z1Zk+KlRLPg0#^wYBE=}$&mR!m@y5W;7Av`!U5y?I&&)eBsB3`pfdTMW599705CTXN zAWeUFk_6ZZ;O>5e0D?f>Yra2109mH)wJaMUfFf7-T9IoCAdZ38m??m&0xSzyZ|FBW z0AVO?qlg)R&kta=lD4ZAP?n4UcwW=~#bW}X$btF1X}?$khXVruPtVw780La?GaoVd$5+T`rv{Ru9X^oRXZqvh9Ou*fOY94ouS2!qoZ z`PS82P@V`m&TtYT*S%39)RqcwdrXDxzEWW=iy`*quwW#J>_mqo76kfBV!q!hi5XSc z05AXy00ZDp0oWI`$G1AR$Jq}^)HUF`r|&tA=0j4)igHug)p|&Z{g~W$Z=or#lbqc> zT&YRtb%707*qoM6N<$f=co@o&W#< literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/License.html b/thirdparty/SameBoy/Cocoa/License.html index 984651413..16c26a942 100644 --- a/thirdparty/SameBoy/Cocoa/License.html +++ b/thirdparty/SameBoy/Cocoa/License.html @@ -30,7 +30,7 @@

SameBoy

MIT License

-

Copyright © 2015-2021 Lior Halphon

+

Copyright © 2015-@COPYRIGHT_YEAR Lior Halphon

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/thirdparty/SameBoy/Cocoa/MainMenu.xib b/thirdparty/SameBoy/Cocoa/MainMenu.xib index 348e9605a..08e0771b9 100644 --- a/thirdparty/SameBoy/Cocoa/MainMenu.xib +++ b/thirdparty/SameBoy/Cocoa/MainMenu.xib @@ -7,12 +7,11 @@ - + - - + @@ -27,13 +26,19 @@ - + + + + + + + - + @@ -77,6 +82,12 @@ + + + + + +

@@ -91,6 +102,12 @@ + + + + + + @@ -185,6 +202,12 @@ + + + + + + @@ -339,6 +362,12 @@ + + + + + + @@ -358,9 +387,14 @@ - + + + + + + - + @@ -398,11 +432,11 @@ - + - + @@ -427,7 +461,7 @@ - + @@ -450,6 +484,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -494,9 +573,10 @@ - + + - + diff --git a/thirdparty/SameBoy/Cocoa/NSImageNamedDarkSupport.m b/thirdparty/SameBoy/Cocoa/NSImageNamedDarkSupport.m index 821ba3b94..73e7b64b7 100644 --- a/thirdparty/SameBoy/Cocoa/NSImageNamedDarkSupport.m +++ b/thirdparty/SameBoy/Cocoa/NSImageNamedDarkSupport.m @@ -11,6 +11,13 @@ @implementation NSImage(DarkHooks) + (NSImage *)imageNamedWithDark:(NSImageName)name { + if (@available(macOS 11.0, *)) { + if (![name containsString:@"~solid"]) { + NSImage *solid = [self imageNamed:[name stringByAppendingString:@"~solid"]]; + [solid setTemplate:true]; + if (solid) return solid; + } + } NSImage *light = imageNamed(self, _cmd, name); if (@available(macOS 10.14, *)) { NSImage *dark = imageNamed(self, _cmd, [name stringByAppendingString:@"~dark"]); diff --git a/thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.h b/thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.h new file mode 100644 index 000000000..3b3cac8cf --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.h @@ -0,0 +1,6 @@ +#import +#import + +@interface NSTextFieldCell (Inset) +@property NSSize textInset; +@end diff --git a/thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.m b/thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.m new file mode 100644 index 000000000..acc6b3baf --- /dev/null +++ b/thirdparty/SameBoy/Cocoa/NSTextFieldCell+Inset.m @@ -0,0 +1,39 @@ +#import "NSTextFieldCell+Inset.h" +#import +#import + +@interface NSTextFieldCell () +- (CGRect)_textLayerDrawingRectForCellFrame:(CGRect)rect; +@property NSSize textInset; +@end + +@implementation NSTextFieldCell (Inset) + +- (void)setTextInset:(NSSize)textInset +{ + objc_setAssociatedObject(self, @selector(textInset), @(textInset), OBJC_ASSOCIATION_RETAIN); +} + +- (NSSize)textInset +{ + return [objc_getAssociatedObject(self, _cmd) sizeValue]; +} + +- (CGRect)_textLayerDrawingRectForCellFrameHook:(CGRect)rect +{ + CGRect ret = [self _textLayerDrawingRectForCellFrameHook:rect]; + NSSize inset = self.textInset; + ret.origin.x += inset.width; + ret.origin.y += inset.height; + ret.size.width -= inset.width; + ret.size.height -= inset.height; + return ret; +} + ++ (void)load +{ + method_exchangeImplementations(class_getInstanceMethod(self, @selector(_textLayerDrawingRectForCellFrame:)), + class_getInstanceMethod(self, @selector(_textLayerDrawingRectForCellFrameHook:))); +} + +@end diff --git a/thirdparty/SameBoy/Cocoa/Next.png b/thirdparty/SameBoy/Cocoa/Next.png index cd9a4c318c6b74cd95443dafd7d2a0c0eb1efd60..eb4d135222d1fbb3518f044c942dd84e8115ca96 100644 GIT binary patch delta 121 zcmV-<0EYjJ4W0pz83+Ub000-a78j8r7iIuZNklkx4?xK9pW!#d zTn0&~5IXNag!s?!nW2V(hXET8Dg=Vh7?QB?kc6;9QWW5|;xj`XiX-cg9r*{vV}H=S bNg$vAYbR*SCaU3900000NkvXXu0mjfKTk0s literal 1676 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 diff --git a/thirdparty/SameBoy/Cocoa/NextTemplate.png b/thirdparty/SameBoy/Cocoa/NextTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..071e750ea4c10679ab8b7800630fa6db9e6b24ad GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh0wlLOK8*rW&7LlfArhC96BL9D3{MztNSw}< zTygTll!u}djxl8N@Jp05Zqb|I$9^eiMUYp(HlYcz#|maO3I}tsoRR#;yil9@M#EZ- zAReB}5_L?fy9;;DZa+9(kv-C(FH!t(y27->%c{(sSp(cz57*^Pn%@|tApYmb(#f+I m%Ix;DT<}F)VVb(p2F7Xwx!*VR>|24(VeoYIb6Mw<&;$UMCP66x literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/NextTemplate@2x.png b/thirdparty/SameBoy/Cocoa/NextTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..616fb2e3f893a1b4ed8cd6dcf32efe4382a6a780 GIT binary patch literal 309 zcmV-50m}Y~P)TM1!htewhw=0ag&q7deKDXecHjO>GbBVnPR#)e literal 1614 zcmcIkO^@3|7XvM(pu{zWApUmOhi#R(6Deg8|e zGY^3vmztq@J}v5S9@z`t5Z30H*k}RKCy~8t9HQgo5cO3hk>BcI?sz`x1}&%4_JZIG z~unphOUcNmkr)3k%mX{gOxAXMfODNG9+X+o3&=`ma4|Y34(x7m$)tl z1g_5u&E~kMx7Q4@ta+7{I#UHQjBKP%b!3CmWe9oM&=&P7O^`4$XC-l3)P%GKCduW{ zJa5po-a7*?E4}X|u7~HPBuBDVrxllbXR^@SYiEKtw&iIxT|_E4kyDuitOj9DWnj9MYW$y~bful)ND1FE8!HuQY@v!fE5(mQX z;I!LKnQ*1k73rGoQI)~(!=`Vu8dU-q`N-wcO)2iO)WM#i2!f7}-GDoO&}D&0JsSxg zrmD&rG)tDVu_R?Nw$U3keKl28q6Fl;ZCV=GA&UL1hWeeaev-%Xr`2kjp+)C~jGKm! zY;GzoA^PQU_KxgrrgLdOn@AwNr1(o%tx`Q>mE0XerZ?*_^1cXac6Pb`&8q)@>t7|9 zPgpUQFh_}PA|htuEXzawTe-!zx2Dq?4kOPjn^_B+W?IVvs4JMo|Ni;v8O-rJgLrp% x{RjT?59{hjPi`K(y0(4u%5(G&x)s+u*2ACgB|8s({nkwU!QMgq%U3@>eGN7g@ofMA diff --git a/thirdparty/SameBoy/Cocoa/Pause@2x.png b/thirdparty/SameBoy/Cocoa/Pause@2x.png index 36b6da0188ab9c00f2c0b86f132af5b22ada1b5a..965b40f24291881086171b031e7f7ee9a3e7987d 100644 GIT binary patch delta 113 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 diff --git a/thirdparty/SameBoy/Cocoa/Play.png b/thirdparty/SameBoy/Cocoa/Play.png index 3f8709217dcecc464c72a8133fb273e784d1feba..fd43bc97f5903d9dccd34b3ca58f23de4efb3c85 100644 GIT binary patch delta 126 zcmcbmG=Xt~WH}211B1FXyBUz;EbxddW?&Fg1z|?dAe9e5K_^ca#}JO_WKWY`$HKqH&a$gqBj&U` atYBF1N#|rr&p9QaX$+pOelF{r5}E)aZz>M} literal 4442 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 DDNu2x diff --git a/thirdparty/SameBoy/Cocoa/Play@2x.png b/thirdparty/SameBoy/Cocoa/Play@2x.png index 0de055300ff748dace38a9ccfb5522df06367a11..a0edda659328e8234ece8cd3c4158227c5006876 100644 GIT binary patch delta 204 zcmZ3le3x;8WIYQ51A}_Q)ixl-S>O>_%)lU~3c`$@K`I}Bg8iN@jv*T7lM@&kzw&7D zxHSIfxi1kVv79^#U&fp*OADSNyVRK9pX?l>|#>1utVpy_eKN9(u z{^R(DDUOpQS`~iGTsWt(7s#lXeXu*C_1=*P*I3URuj+YDODyT&l#5Pcvgs~pXkHXB zV}?tjgGHbXlbW%c)5$mN1`j_8`0bG9OlM_S(boFyt=akR{0E)~^ ALjV8( literal 4527 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 diff --git a/thirdparty/SameBoy/Cocoa/Preferences.xib b/thirdparty/SameBoy/Cocoa/Preferences.xib index 6d726521a..4641eba32 100644 --- a/thirdparty/SameBoy/Cocoa/Preferences.xib +++ b/thirdparty/SameBoy/Cocoa/Preferences.xib @@ -6,7 +6,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -68,6 +68,7 @@ + @@ -77,6 +78,7 @@ + @@ -84,7 +86,14 @@ + + + + + + + @@ -99,11 +108,11 @@ - + - + @@ -112,7 +121,7 @@ - + @@ -149,7 +158,7 @@ - + @@ -169,7 +178,7 @@ - + @@ -179,11 +188,14 @@ - - - - - + + + + + + + + @@ -192,7 +204,7 @@ - + @@ -200,7 +212,7 @@ - + @@ -209,16 +221,16 @@ - + - + - + @@ -238,7 +250,7 @@ - + @@ -247,7 +259,7 @@ - + @@ -257,9 +269,9 @@ - - - + + +
@@ -268,7 +280,7 @@
- + @@ -277,7 +289,7 @@ - + @@ -297,7 +309,7 @@ +
- +
- + - + @@ -335,7 +358,7 @@ - + @@ -344,7 +367,7 @@ - + @@ -353,7 +376,7 @@ - + @@ -362,7 +385,7 @@ - + @@ -381,7 +404,7 @@ - + @@ -390,19 +413,19 @@ - + - + - - - - - - + + + + + + @@ -411,7 +434,7 @@ - + @@ -420,29 +443,11 @@ - + - - - - - - - - - - - - - - - - - - - + @@ -461,7 +466,7 @@ - + @@ -485,7 +490,7 @@ - + @@ -508,8 +513,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -525,7 +578,7 @@ - + @@ -533,7 +586,7 @@ - + @@ -553,7 +606,7 @@ - + @@ -571,22 +624,33 @@ - + + - + - + - + @@ -594,24 +658,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + @@ -630,7 +972,7 @@ - + @@ -662,8 +1004,8 @@ - - + + @@ -671,8 +1013,8 @@ - - + + @@ -686,91 +1028,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -803,14 +1062,398 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Text Cell +Test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- + + +
diff --git a/thirdparty/SameBoy/Cocoa/Previous.png b/thirdparty/SameBoy/Cocoa/Previous.png index cc91221dd816c5226aa36517ec7f09cc88c490e7..9dc6141a8aa05d26d5df6f390ebed1af0fb543c2 100644 GIT binary patch delta 111 zcmV-#0FeKH4U_?p83+Ub000-a78j8r7hC{FNkl^KNSt90!#^+^g9jq!G5m#cF?mQ#?2tGG1g!u$Yafau_n|rxuQv$<6acNvZY5`A RHk$wd002ovPDHLkV1n#uB=!IR literal 1664 zcmcIl&5zqe6!%Ji*p&)bbS&*AzuL*J?Hn;Jyy$+LKSf_1o`${uFMjN%MN9DCaK}=Su5f>vu(Y{Kv3;m>&jj zcuYnW%4Jtn#!&)jMY(i&oKSWoa?}<5F!t5^x9_MZ*6(5(G-#&`RaDz5FG~ls4i21>`GN*x@Du9 zThXhg<+`sRgXj(>4%SUguX+~o3M^rwI~<$27ru zg%lwzfI)CJG>S@emhYT^m$}}D5@+p6BJhF8yifWG=ITd_)}Ob{S3L)l)%pnYN`IE(*23U_teIQ5Y9p3@8iZg8HRG*4#=o zXfAx!Acn3HOCx5R5YIL}!+DvQ9w9Sm0L{Q@PL~5q9`+{7K!d<*#aT{cCRz<&1yPkS zcjQ5O>Q&0=4zJFt!kF73ylh4 zXtvvRiDQ|-RZ|gXUQebGg=PsO+7~#9`zrcZOCM${3E$0 z-kGn4A)0ocM_JMEzRHS93(z}z9X=#`%julij|Kur&nW&3mdRc|qN&*KL#CJOF#M

ez_4YK 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 Lp|4(j9})RK%sen! literal 26853 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 diff --git a/thirdparty/SameBoy/FreeDesktop/Cartridge/16x16.png b/thirdparty/SameBoy/FreeDesktop/Cartridge/16x16.png index 3cbd9ae7afc08e91da93da8401b3c54f675fd670..e3780396fbf12a63523d384c97c175589f08ed55 100644 GIT binary patch delta 390 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

+>gYU_!p)HUAB;#{bm$_GtO5o1&P5;d;aa z;!&(HG0lfZoy=ffxyc9rbcKM3rT+!k(HX*y|K<}ADtt=i6a5DcFZRgYpk?a*S12%$ z^f-3xd5PKJmg$m&ifbZ|UfyIXR`nF>|C}>?`_SgUOf_9={rvw#2Gno;8-s_7@Jmo0 z=`19n=?L|B1{Ki&r23wRNeCx{!WbclkRkx;E(6^_uJ`ZR!ot)92*86;6Bx%Br5H+z zKWBZi(eX0B%ceVmJ6>%H+2GtzIanv?JRBq~4oWSa`^B*6tg8ajy7zI`WY@DVAMIC) zSxpoFq}Syi&Vy=+gR8M(^)Q^9S^-R?j}GkZ!Wr zB`g)@y%Mw)?!7D-e!;mtg3a7%Nf*v>Ksz4>q9X+mtjOw#30Mi`3491 z5$*~~G$T5u%>ADpUj7`W8kRmaJ^VJ^i}Ne_4IP~Dp*{1BwGZO8zAq>aGAN9$tPaxyP{wV&X9B=^Iw&hHWhDYQEuako*v1 zo|~f`E8oQaH``pZEY~iao}F*?F`zb6=2F&nC@U;{Kk}7nkd*qc)bWJAf?CBX@r(J=NXPwoI|pIF7uK=(Xb7_%X}Lw|BXHc>DvGtpXM9Q=pzf) zPK+DOD}`ZcoV>elJvAn20e;eRU$^&h;3*YB zAb)v&J6?)3RQt!du4+ks4Srg50eCdgjXGNS=0~_-je|Iqe)B^Vq^LsL#W~$%3v7Gv%zZFNof8NR`vr%k$Z|vn#a(aA!r(e;s*B~N zIk?AhN3vJH#(N6mWoZ4@eR>|tn)_8LLQb%|L21$ zl%wwN??Uv$Ib1|Zkr{~jsiDCeTMcX+M7;JaFvUy^{fJx>g`@#b#Bg{_n-Bpip8-YG zGT8`>KW_)0$xf7o;O!+i^=SNCkfihzxls$BrHEy44G@G#E0W6N2K3o-cie=s`#un} zm~3RuX&!j|m6_h7=fg8omw$UcNM~@e@ZWvssxkSAuY*3QPXa|>2`;=4oW;6NcLgC0 zS#ZSp;bq}LKrfDJY)5iOHXNlDhXKiY_TApnh&JU#-AgHRH3xh1hAb+Z=Wu3t34}rv zb)-OERk4mScklTKt0(T9gES<|eUQ^Kl~$y@X|H9QFe}f&J|5t)0*t?u)>AOU`{hb` zA7xPeMV^mv-cX&c%P-g?rMIR_qInCaWujA&eYEQSaM%1D;*b-9y!UQ%4GJSP|EE1j z)v)IVxQpG+{&JfS)a@UTIx*PP8gJqJr3$=J!2Z+kXZ}9&J_c`7B=@t*2b5{~VfBmjH@aZ2=(rm`O@O$!oG^kyT2we4jk*FmxU{(8z*b^iBp7+SD z&GA<%jLl38j)D;Shb0)SIF||$jmA9PpNu+wfBmEIexz1}41KHk(wj3i#od}y^bt== zK89J#D%qR__+x;BZ`!JhIvNzc+>|jkcH)<0+4ApYW*&lCZJrfY@Mj4&p=*C2lL%7z V^lsG#@aGf2eI+f$DtTn+{{tt=S1|wp literal 35511 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 jPHK%|?B9M?{QNszFXS)uC+J2u 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 diff --git a/thirdparty/SameBoy/FreeDesktop/Cartridge/512x512.png b/thirdparty/SameBoy/FreeDesktop/Cartridge/512x512.png index 71314f72bbbdd4c42fa9764598565571ed5f149e..e8257c19e1b009b1be893eb80975e88d12b9d99e 100644 GIT binary patch literal 37757 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�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 literal 60580 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 F{0EYSu#o@& diff --git a/thirdparty/SameBoy/FreeDesktop/Cartridge/64x64.png b/thirdparty/SameBoy/FreeDesktop/Cartridge/64x64.png index 8835f79c48cb2b35580f65fb95a56cf5ff3e0363..34d006d7a0dfae7da708d1c975cc6e2d5010b968 100644 GIT binary patch delta 2127 zcmV-V2(b6)vjLP5kR+3MPAick6@LgCNklt}5Xa5Ntj2xWecWV|-E4c> zhcz1uQQvqm`(h(zMI*5gH5dg8)8fNeB zkb%qH?~@Px&c_8#GP(Ekng5xYQ|`GfM5Kk16TWijTZevk=+8zn7mLw~JX1PE?< zjm#bZT17`k|C5@UTDfrHLRq?WX``YgOO{AlTAGX;IWo_Y<$IT0Ap_7RDk>^*^5n^~ zbLURU%F2@M+qX9w+OcDYY}v9!5)u-M9a(<;900!Q(4j-pgb5P_4QOn%Xwf2ByLPRN z88fEDk>&3|W>F^q?c29cN`FpHmIVtI1np?<+_^Gp)F|oOx36^X-o3#nCMHJWI9%m zmoD+aGyru&cyAsEuUfUrJl*!F<&;q^yLj>9>a^v{mm3dGdGa+++aYh=x^>n0!~+2_ zZ{9rAyxJVxgqFs|#eWrs1b}LQ8$l37-2lcdq&B{0%^H&q6QuDxbm))~jyMAB*|W#I zqnU+w zX3UsT3j}x^K76>*2)71@MFXZzooYJtrUL+KhY*^EHeh?3Hh*n0f+*t%clhvOIdI^B zDTi>h$LP`qR5Jj5>m;9n%i!T6X2im8J|JA{1>>9(xbw7jy=5 z`+=}%0F2SO*M9~X2~Zz0WQYN(fB*hQNT^@GeumkhLx&nBa8hH(j+KD}2O4w2p$;21 z%#@)G@*Qu@LdLX>IwJ^Wsi(6Lb-aQD6q<*?yoXf-U;x1picw}nyx`dK^r5tkcA$X( zfVQDMR%QXz6txTlLPM_p;EAQXvxlkWi#}TediU;KOMe4&Ccrsi^Ej&P>}&%BD=(05 z2x10dv4c}pKZF^2d1pX7ckUdL2DElmB>}tk+L3!+rXw_fj?bJqBj?VYi#VMd~Wz^y<~imjrL{Xbpf7BSx6j8cW%mH*d=A+qWe*H&?D*yCx+i zC35=oX+xx4y?WK;<0GzIxnjx}7Z=N;M~~$0-Mez};zcPfEtR~yJX4l5^6uZiZ|XdK z`cw)F3+4Rz^K$RrJ=6ZBOP5SOZ9RGN#MHwV(0>no;1J=_3INy=&Jo7ny?ZBq41f=h z-lcHZ03e+;{l||VeF?y=Tel34Rslf0{i*?&j&%U?^Yg{8;n}likq~)&QKKU)KSwB&`E*yJsBsDNf2m^V|0YQ{u-j!jma7wBvywi>fs(%^= zX?;!CG8zgB3L-NLxHm&?6|^}6gfa_6L<8!x9e(-pr8%+Puwg^MRhyR4_dw<96VOiU z0I=Q;HSqOUh2zPGOHPy!l+SEDi9-NIK6M~>nNS1gh}Ho(dGch)3~`XD8UP_6PtsL5 z-VvB`q`3i5z(NfVA3lr>0Pbnf#(#ze;Z<|$6F5D#4#4&6*L}MijL2q)4F`^^*&c}j zfL}vIOu)|vBAixP2Y~gqU&G_akL?5SIo`QR9f`5$_G{oSp>+WGid$J(*?a-uP}Hv> zBGcf}qep!U0H4RL1Hc_%KOT#}dGp5p=W(vgbD^0fC(e*5ksTO*fxUQHS$~;HV?n~k zgePTLJiU1F!mJ><*}(>g!wYV9R8&-$9VSa`Z20-}=kogXYeTg8;K2h!+(MyG1f>pj zX|KGz+{9^*-)7*^3IJS-;}#}YDaMj zwdzwx``Nc|pW)Gai8E|>gnzh_*3j4DLb*0)?UK}&5+kF(x&$KfY+S+h4FKHZ)&CB7 z@^=U1PU9A8lLY|cVl%f)ai;35xb8}Nu(|NGNf#dbgVnb_D^06_SqE&y7!ZQC}s zXV0FM-MV#a(7!^%NyyT*YuA56`E#@>{67E5U+TR8{0GFCDW+aU;-&xq002ovPDHLk FV1lB#0X+Z! literal 23016 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 diff --git a/thirdparty/SameBoy/FreeDesktop/ColorCartridge/128x128.png b/thirdparty/SameBoy/FreeDesktop/ColorCartridge/128x128.png index da4757e816c22938c2652d79f84ff1f8c222c7a1..978b27b3234cb4b84689c2b2ab5f79c1e70542a0 100644 GIT binary patch delta 4779 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 FV1n>X^AZ36 literal 26446 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 Ys^dS);hdOv-W#s2tfiEF*8Il*0H7Tk*8l(j diff --git a/thirdparty/SameBoy/FreeDesktop/ColorCartridge/16x16.png b/thirdparty/SameBoy/FreeDesktop/ColorCartridge/16x16.png index 50e6b2b47bcdf081613d0faede2d91711a4ac8e8..899886ef13a89fb48d9d1babe254fb3a0a1ae80b 100644 GIT binary patch delta 419 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 Oik-ECRhEV4rvCs;#^~e# diff --git a/thirdparty/SameBoy/FreeDesktop/ColorCartridge/256x256.png b/thirdparty/SameBoy/FreeDesktop/ColorCartridge/256x256.png index 186f5d30b86ab51723cb0007be7f31d66ec1c121..10e6558374a00bdf5790cce7004625e23dc88785 100644 GIT binary patch literal 11778 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 literal 34200 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 KMNUMnLSTYhF2iI1 literal 21157 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 bcLMMa@#rCzZyUMg00000NkvXXu0mjf71jHW literal 22767 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 0); HFASSERT(range.length >= 0); - HFASSERT(range.location + range.length <= HFULToFP([self totalLineCount])); #endif + if (range.location + range.length > HFULToFP([self totalLineCount])) { + range.location = [self totalLineCount] - range.length; + if (range.location < 0) { + return; + } + } if (! HFFPRangeEqualsRange(range, displayedLineRange)) { displayedLineRange = range; [self _addPropertyChangeBits:HFControllerDisplayedLineRange]; diff --git a/thirdparty/SameBoy/HexFiend/HFHexTextRepresenter.m b/thirdparty/SameBoy/HexFiend/HFHexTextRepresenter.m index f98382b6e..4ff9f2028 100644 --- a/thirdparty/SameBoy/HexFiend/HFHexTextRepresenter.m +++ b/thirdparty/SameBoy/HexFiend/HFHexTextRepresenter.m @@ -182,7 +182,7 @@ - (void)controllerDidChange:(HFControllerPropertyBits)bits { [[self view] setHidesNullBytes:[[self controller] shouldHideNullBytes]]; } [super controllerDidChange:bits]; - if (bits & (HFControllerContentValue | HFControllerContentLength | HFControllerSelectedRanges)) { + if (bits & (HFControllerSelectedRanges)) { [self _clearOmittedNybble]; } } diff --git a/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc b/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc index fb7df6301..a60f2796b 100644 --- a/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc +++ b/thirdparty/SameBoy/JoyKit/ControllerConfiguration.inc @@ -101,15 +101,31 @@ hacksByManufacturer = @{ @{@"reportID": @(0x31), @"size":@1, @"offset":@0x47, @"usagePage":@(kHIDPage_Button), @"usage":@4}, @{@"reportID": @(0x31), @"size":@1, @"offset":@0x48, @"usagePage":@(kHIDPage_Button), @"usage":@5}, @{@"reportID": @(0x31), @"size":@1, @"offset":@0x49, @"usagePage":@(kHIDPage_Button), @"usage":@6}, - @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4a, @"usagePage":@(kHIDPage_Button), @"usage":@7}, - @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4b, @"usagePage":@(kHIDPage_Button), @"usage":@8}, - @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4c, @"usagePage":@(kHIDPage_Button), @"usage":@9}, - @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4d, @"usagePage":@(kHIDPage_Button), @"usage":@10}, - @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4e, @"usagePage":@(kHIDPage_Button), @"usage":@11}, - @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4f, @"usagePage":@(kHIDPage_Button), @"usage":@12}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4A, @"usagePage":@(kHIDPage_Button), @"usage":@7}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4B, @"usagePage":@(kHIDPage_Button), @"usage":@8}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4C, @"usagePage":@(kHIDPage_Button), @"usage":@9}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4D, @"usagePage":@(kHIDPage_Button), @"usage":@10}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4E, @"usagePage":@(kHIDPage_Button), @"usage":@11}, + @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4F, @"usagePage":@(kHIDPage_Button), @"usage":@12}, @{@"reportID": @(0x31), @"size":@1, @"offset":@0x50, @"usagePage":@(kHIDPage_Button), @"usage":@13}, @{@"reportID": @(0x31), @"size":@1, @"offset":@0x51, @"usagePage":@(kHIDPage_Button), @"usage":@14}, @{@"reportID": @(0x31), @"size":@1, @"offset":@0x52, @"usagePage":@(kHIDPage_Button), @"usage":@15}, + + @{@"reportID": @(0x31), @"size":@16, @"offset":@0x80, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0x90, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xA0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xB0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xC0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(0x31), @"size":@16, @"offset":@0xD0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, + ], + + @(1): @[ + @{@"reportID": @(1), @"size":@16, @"offset":@0x78, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0x88, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0x98, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0xA8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0xB8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(1), @"size":@16, @"offset":@0xC8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, ], }, @@ -406,8 +422,6 @@ hacksByName = @{ JOYCustomReports: @{ @(0x30): @[ - // For USB mode, which uses the wrong report descriptor - @{@"reportID": @(1), @"size":@1, @"offset":@16, @"usagePage":@(kHIDPage_Button), @"usage":@3}, @{@"reportID": @(1), @"size":@1, @"offset":@17, @"usagePage":@(kHIDPage_Button), @"usage":@4}, @{@"reportID": @(1), @"size":@1, @"offset":@18, @"usagePage":@(kHIDPage_Button), @"usage":@1}, @@ -440,11 +454,136 @@ hacksByName = @{ @{@"reportID": @(1), @"size":@12, @"offset":@64, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @0xFFF}, @{@"reportID": @(1), @"size":@12, @"offset":@76, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0xFFF, @"max": @0}, + + @{@"reportID": @(1), @"size":@16, @"offset":@96, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, + @{@"reportID": @(1), @"size":@16, @"offset":@112, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(1), @"size":@16, @"offset":@128, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(1), @"size":@16, @"offset":@144, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@160, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@176, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, + ], + }, + + JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken + }, + + @"Joy-Con (L)": @{ // Switch Pro Controller + JOYIsSwitch: @YES, + JOYJoyCon: @(JOYJoyConTypeLeft), + JOYAxisGroups: @{ + @(kHIDUsage_GD_X): @(0), + @(kHIDUsage_GD_Y): @(0), + @(kHIDUsage_GD_Z): @(0), + }, + + JOYButtonUsageMapping: @{ + BUTTON(5): @(JOYButtonUsageL1), + BUTTON(7): @(JOYButtonUsageL2), + BUTTON(9): @(JOYButtonUsageSelect), + BUTTON(11): @(JOYButtonUsageLStick), + BUTTON(14): @(JOYButtonUsageMisc), + BUTTON(15): @(JOYButtonUsageL3), + BUTTON(16): @(JOYButtonUsageR3), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(1): @(JOYAxes2DUsageLeftStick), + }, + + JOYCustomReports: @{ + @(0x30): @[ + @{@"reportID": @(1), @"size":@1, @"offset":@24, @"usagePage":@(kHIDPage_Button), @"usage":@9}, + @{@"reportID": @(1), @"size":@1, @"offset":@27, @"usagePage":@(kHIDPage_Button), @"usage":@11}, + + @{@"reportID": @(1), @"size":@1, @"offset":@29, @"usagePage":@(kHIDPage_Button), @"usage":@14}, + + @{@"reportID": @(1), @"size":@1, @"offset":@32, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)}, + @{@"reportID": @(1), @"size":@1, @"offset":@33, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)}, + @{@"reportID": @(1), @"size":@1, @"offset":@34, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)}, + @{@"reportID": @(1), @"size":@1, @"offset":@35, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)}, + + @{@"reportID": @(1), @"size":@1, @"offset":@36, @"usagePage":@(kHIDPage_Button), @"usage":@16}, + @{@"reportID": @(1), @"size":@1, @"offset":@37, @"usagePage":@(kHIDPage_Button), @"usage":@15}, + @{@"reportID": @(1), @"size":@1, @"offset":@38, @"usagePage":@(kHIDPage_Button), @"usage":@5}, + @{@"reportID": @(1), @"size":@1, @"offset":@39, @"usagePage":@(kHIDPage_Button), @"usage":@7}, + + /* Sticks */ + @{@"reportID": @(1), @"size":@12, @"offset":@40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @0xFFF}, + @{@"reportID": @(1), @"size":@12, @"offset":@52, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @0xFFF, @"max": @0}, + + @{@"reportID": @(1), @"size":@16, @"offset":@96, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, + @{@"reportID": @(1), @"size":@16, @"offset":@112, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(1), @"size":@16, @"offset":@128, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(1), @"size":@16, @"offset":@144, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@160, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@176, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, + ], + }, + + JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken + }, + + @"Joy-Con (R)": @{ // Switch Pro Controller + JOYIsSwitch: @YES, + JOYJoyCon: @(JOYJoyConTypeRight), + JOYAxisGroups: @{ + @(kHIDUsage_GD_Rx): @(1), + @(kHIDUsage_GD_Ry): @(1), + @(kHIDUsage_GD_Rz): @(1), + }, + + JOYButtonUsageMapping: @{ + BUTTON(1): @(JOYButtonUsageB), + BUTTON(2): @(JOYButtonUsageA), + BUTTON(3): @(JOYButtonUsageY), + BUTTON(4): @(JOYButtonUsageX), + BUTTON(6): @(JOYButtonUsageR1), + BUTTON(8): @(JOYButtonUsageR2), + BUTTON(10): @(JOYButtonUsageStart), + BUTTON(12): @(JOYButtonUsageRStick), + BUTTON(13): @(JOYButtonUsageHome), + BUTTON(15): @(JOYButtonUsageL3), + BUTTON(16): @(JOYButtonUsageR3), + }, + + JOYAxes2DUsageMapping: @{ + AXES2D(4): @(JOYAxes2DUsageRightStick), + }, + + JOYCustomReports: @{ + @(0x30): @[ + + @{@"reportID": @(1), @"size":@1, @"offset":@16, @"usagePage":@(kHIDPage_Button), @"usage":@3}, + @{@"reportID": @(1), @"size":@1, @"offset":@17, @"usagePage":@(kHIDPage_Button), @"usage":@4}, + @{@"reportID": @(1), @"size":@1, @"offset":@18, @"usagePage":@(kHIDPage_Button), @"usage":@1}, + @{@"reportID": @(1), @"size":@1, @"offset":@19, @"usagePage":@(kHIDPage_Button), @"usage":@2}, + @{@"reportID": @(1), @"size":@1, @"offset":@20, @"usagePage":@(kHIDPage_Button), @"usage":@16}, + @{@"reportID": @(1), @"size":@1, @"offset":@21, @"usagePage":@(kHIDPage_Button), @"usage":@15}, + @{@"reportID": @(1), @"size":@1, @"offset":@22, @"usagePage":@(kHIDPage_Button), @"usage":@6}, + @{@"reportID": @(1), @"size":@1, @"offset":@23, @"usagePage":@(kHIDPage_Button), @"usage":@8}, + + @{@"reportID": @(1), @"size":@1, @"offset":@25, @"usagePage":@(kHIDPage_Button), @"usage":@10}, + @{@"reportID": @(1), @"size":@1, @"offset":@26, @"usagePage":@(kHIDPage_Button), @"usage":@12}, + @{@"reportID": @(1), @"size":@1, @"offset":@28, @"usagePage":@(kHIDPage_Button), @"usage":@13}, + + /* Sticks */ + @{@"reportID": @(1), @"size":@12, @"offset":@64, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @0xFFF}, + @{@"reportID": @(1), @"size":@12, @"offset":@76, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0xFFF, @"max": @0}, + + // The X axis is inverted on the right Joy-Con + @{@"reportID": @(1), @"size":@16, @"offset":@96, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)}, + @{@"reportID": @(1), @"size":@16, @"offset":@112, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)}, + @{@"reportID": @(1), @"size":@16, @"offset":@128, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)}, + @{@"reportID": @(1), @"size":@16, @"offset":@144, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@160, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)}, + @{@"reportID": @(1), @"size":@16, @"offset":@176, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)}, ], }, JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken }, + + @"PLAYSTATION(R)3 Controller": @{ // DualShock 3 JOYAxisGroups: @{ @(kHIDUsage_GD_X): @(0), diff --git a/thirdparty/SameBoy/JoyKit/JOYAxes2D.h b/thirdparty/SameBoy/JoyKit/JOYAxes2D.h index b6f6d152f..71fdb422e 100644 --- a/thirdparty/SameBoy/JoyKit/JOYAxes2D.h +++ b/thirdparty/SameBoy/JoyKit/JOYAxes2D.h @@ -1,4 +1,5 @@ #import +#import "JOYInput.h" typedef enum { JOYAxes2DUsageNone, @@ -11,10 +12,8 @@ typedef enum { JOYAxes2DUsageGeneric0 = 0x10000, } JOYAxes2DUsage; -@interface JOYAxes2D : NSObject -- (NSString *)usageString; +@interface JOYAxes2D : JOYInput + (NSString *)usageToString: (JOYAxes2DUsage) usage; -- (uint64_t)uniqueID; - (double)distance; - (double)angle; - (NSPoint)value; diff --git a/thirdparty/SameBoy/JoyKit/JOYAxes2D.m b/thirdparty/SameBoy/JoyKit/JOYAxes2D.m index 272d34f9c..0d80de04d 100644 --- a/thirdparty/SameBoy/JoyKit/JOYAxes2D.m +++ b/thirdparty/SameBoy/JoyKit/JOYAxes2D.m @@ -1,14 +1,17 @@ #import "JOYAxes2D.h" #import "JOYElement.h" +@interface JOYAxes2D() +@property unsigned rotation; // in 90 degrees units, clockwise +@end + @implementation JOYAxes2D { JOYElement *_element1, *_element2; double _state1, _state2; - int32_t initialX, initialY; - int32_t minX, minY; - int32_t maxX, maxY; - + int32_t _initialX, _initialY; + int32_t _minX, _minY; + int32_t _maxX, _maxY; } + (NSString *)usageToString: (JOYAxes2DUsage) usage @@ -36,12 +39,12 @@ - (NSString *)usageString - (uint64_t)uniqueID { - return _element1.uniqueID; + return _element1.uniqueID | (uint64_t)self.combinedIndex << 32; } - (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, %@ (%llu); State: %.2f%%, %.2f degrees>", self.className, self, self.usageString, self.uniqueID, self.distance * 100, self.angle]; + return [NSString stringWithFormat:@"<%@: %p, %@ (%llx); State: %.2f%%, %.2f degrees>", self.className, self, self.usageString, self.uniqueID, self.distance * 100, self.angle]; } - (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2 @@ -57,12 +60,12 @@ - (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYEl uint16_t usage = element1.usage; _usage = JOYAxes2DUsageGeneric0 + usage - kHIDUsage_GD_X + 1; } - initialX = 0; - initialY = 0; - minX = element1.max; - minY = element2.max; - maxX = element1.min; - maxY = element2.min; + _initialX = 0; + _initialY = 0; + _minX = element1.max; + _minY = element2.max; + _maxX = element1.min; + _maxY = element2.min; return self; } @@ -72,44 +75,44 @@ - (NSPoint)value return NSMakePoint(_state1, _state2); } --(int32_t) effectiveMinX +- (int32_t)effectiveMinX { int32_t rawMin = _element1.min; int32_t rawMax = _element1.max; - if (initialX == 0) return rawMin; - if (minX <= (rawMin * 2 + initialX) / 3 && maxX >= (rawMax * 2 + initialX) / 3 ) return minX; - if ((initialX - rawMin) < (rawMax - initialX)) return rawMin; - return initialX - (rawMax - initialX); + if (_initialX == 0) return rawMin; + if (_minX <= (rawMin * 2 + _initialX) / 3 && _maxX >= (rawMax * 2 + _initialX) / 3 ) return _minX; + if ((_initialX - rawMin) < (rawMax - _initialX)) return rawMin; + return _initialX - (rawMax - _initialX); } --(int32_t) effectiveMinY +- (int32_t)effectiveMinY { int32_t rawMin = _element2.min; int32_t rawMax = _element2.max; - if (initialY == 0) return rawMin; - if (minX <= (rawMin * 2 + initialY) / 3 && maxY >= (rawMax * 2 + initialY) / 3 ) return minY; - if ((initialY - rawMin) < (rawMax - initialY)) return rawMin; - return initialY - (rawMax - initialY); + if (_initialY == 0) return rawMin; + if (_minX <= (rawMin * 2 + _initialY) / 3 && _maxY >= (rawMax * 2 + _initialY) / 3 ) return _minY; + if ((_initialY - rawMin) < (rawMax - _initialY)) return rawMin; + return _initialY - (rawMax - _initialY); } --(int32_t) effectiveMaxX +- (int32_t)effectiveMaxX { int32_t rawMin = _element1.min; int32_t rawMax = _element1.max; - if (initialX == 0) return rawMax; - if (minX <= (rawMin * 2 + initialX) / 3 && maxX >= (rawMax * 2 + initialX) / 3 ) return maxX; - if ((initialX - rawMin) > (rawMax - initialX)) return rawMax; - return initialX + (initialX - rawMin); + if (_initialX == 0) return rawMax; + if (_minX <= (rawMin * 2 + _initialX) / 3 && _maxX >= (rawMax * 2 + _initialX) / 3 ) return _maxX; + if ((_initialX - rawMin) > (rawMax - _initialX)) return rawMax; + return _initialX + (_initialX - rawMin); } --(int32_t) effectiveMaxY +- (int32_t)effectiveMaxY { int32_t rawMin = _element2.min; int32_t rawMax = _element2.max; - if (initialY == 0) return rawMax; - if (minX <= (rawMin * 2 + initialY) / 3 && maxY >= (rawMax * 2 + initialY) / 3 ) return maxY; - if ((initialY - rawMin) > (rawMax - initialY)) return rawMax; - return initialY + (initialY - rawMin); + if (_initialY == 0) return rawMax; + if (_minX <= (rawMin * 2 + _initialY) / 3 && _maxY >= (rawMax * 2 + _initialY) / 3 ) return _maxY; + if ((_initialY - rawMin) > (rawMax - _initialY)) return rawMax; + return _initialY + (_initialY - rawMin); } - (bool)updateState @@ -118,18 +121,18 @@ - (bool)updateState int32_t y = [_element2 value]; if (x == 0 && y == 0) return false; - if (initialX == 0 && initialY == 0) { - initialX = x; - initialY = y; + if (_initialX == 0 && _initialY == 0) { + _initialX = x; + _initialY = y; } double old1 = _state1, old2 = _state2; { int32_t value = x; - if (initialX != 0) { - minX = MIN(value, minX); - maxX = MAX(value, maxX); + if (_initialX != 0) { + _minX = MIN(value, _minX); + _maxX = MAX(value, _maxX); } double min = [self effectiveMinX]; @@ -142,9 +145,9 @@ - (bool)updateState { int32_t value = y; - if (initialY != 0) { - minY = MIN(value, minY); - maxY = MAX(value, maxY); + if (_initialY != 0) { + _minY = MIN(value, _minY); + _maxY = MAX(value, _maxY); } double min = [self effectiveMinY]; @@ -158,11 +161,29 @@ - (bool)updateState _state2 < -1 || _state2 > 1) { // Makes no sense, recalibrate _state1 = _state2 = 0; - initialX = initialY = 0; - minX = _element1.max; - minY = _element2.max; - maxX = _element1.min; - maxY = _element2.min; + _initialX = _initialY = 0; + _minX = _element1.max; + _minY = _element2.max; + _maxX = _element1.min; + _maxY = _element2.min; + } + + + double temp = _state1; + switch (_rotation & 3) { + case 0: break; + case 1: + _state1 = -_state2; + _state2 = temp; + break; + case 2: + _state1 = -_state1; + _state2 = -_state2; + break; + case 3: + _state1 = _state2; + _state2 = -temp; + break; } return old1 != _state1 || old2 != _state2; @@ -173,9 +194,11 @@ - (double)distance return MIN(sqrt(_state1 * _state1 + _state2 * _state2), 1.0); } -- (double)angle { +- (double)angle +{ double temp = atan2(_state2, _state1) * 180 / M_PI; if (temp >= 0) return temp; return temp + 360; } + @end diff --git a/thirdparty/SameBoy/JoyKit/JOYAxes3D.h b/thirdparty/SameBoy/JoyKit/JOYAxes3D.h new file mode 100644 index 000000000..e30d46586 --- /dev/null +++ b/thirdparty/SameBoy/JoyKit/JOYAxes3D.h @@ -0,0 +1,26 @@ +#import +#import "JOYInput.h" + +typedef enum { + JOYAxes3DUsageNone, + JOYAxes3DUsageAcceleration, + JOYAxes3DUsageOrientation, + JOYAxes3DUsageGyroscope, + JOYAxes3DUsageNonGenericMax, + + JOYAxes3DUsageGeneric0 = 0x10000, +} JOYAxes3DUsage; + +typedef struct { + double x, y, z; +} JOYPoint3D; + +@interface JOYAxes3D : JOYInput ++ (NSString *)usageToString: (JOYAxes3DUsage) usage; +- (JOYPoint3D)rawValue; +- (JOYPoint3D)normalizedValue; // For orientation +- (JOYPoint3D)gUnitsValue; // For acceleration +@property JOYAxes3DUsage usage; +@end + + diff --git a/thirdparty/SameBoy/JoyKit/JOYAxes3D.m b/thirdparty/SameBoy/JoyKit/JOYAxes3D.m new file mode 100644 index 000000000..d14b5c68c --- /dev/null +++ b/thirdparty/SameBoy/JoyKit/JOYAxes3D.m @@ -0,0 +1,129 @@ +#import "JOYAxes3D.h" +#import "JOYElement.h" + +@interface JOYAxes3D() +@property unsigned rotation; // in 90 degrees units, clockwise +@end + +@implementation JOYAxes3D +{ + JOYElement *_element1, *_element2, *_element3; + double _state1, _state2, _state3; + int32_t _minX, _minY, _minZ; + int32_t _maxX, _maxY, _maxZ; + double _gApproximation; +} + ++ (NSString *)usageToString: (JOYAxes3DUsage) usage +{ + if (usage < JOYAxes3DUsageNonGenericMax) { + return (NSString *[]) { + @"None", + @"Acceleretion", + @"Orientation", + @"Gyroscope", + }[usage]; + } + if (usage >= JOYAxes3DUsageGeneric0) { + return [NSString stringWithFormat:@"Generic 3D Analog Control %d", usage - JOYAxes3DUsageGeneric0]; + } + + return [NSString stringWithFormat:@"Unknown Usage 3D Axes %d", usage]; +} + +- (NSString *)usageString +{ + return [self.class usageToString:_usage]; +} + +- (uint64_t)uniqueID +{ + return _element1.uniqueID | (uint64_t)self.combinedIndex << 32; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p, %@ (%llx); State: (%.2f, %.2f, %.2f)>", self.className, self, self.usageString, self.uniqueID, _state1, _state2, _state3]; +} + +- (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2 thirdElement:(JOYElement *)element3 +{ + self = [super init]; + if (!self) return self; + + _element1 = element1; + _element2 = element2; + _element3 = element3; + + _maxX = element1? element1.max : 1; + _maxY = element2? element2.max : 1; + _maxZ = element3? element3.max : 1; + _minX = element1? element1.min : -1; + _minY = element2? element2.min : -1; + _minZ = element3? element3.min : -1; + + return self; +} + +- (JOYPoint3D)rawValue +{ + return (JOYPoint3D){_state1, _state2, _state3}; +} + +- (JOYPoint3D)normalizedValue +{ + double distance = sqrt(_state1 * _state1 + _state2 * _state2 + _state3 * _state3); + if (distance == 0) { + distance = 1; + } + return (JOYPoint3D){_state1 / distance, _state2 / distance, _state3 / distance}; +} + +- (JOYPoint3D)gUnitsValue +{ + double distance = _gApproximation ?: 1; + return (JOYPoint3D){_state1 / distance, _state2 / distance, _state3 / distance}; +} + +- (bool)updateState +{ + int32_t x = [_element1 value]; + int32_t y = [_element2 value]; + int32_t z = [_element3 value]; + + if (x == 0 && y == 0 && z == 0) return false; + + double old1 = _state1, old2 = _state2, old3 = _state3; + _state1 = (x - _minX) / (double)(_maxX - _minX) * 2 - 1; + _state2 = (y - _minY) / (double)(_maxY - _minY) * 2 - 1; + _state3 = (z - _minZ) / (double)(_maxZ - _minZ) * 2 - 1; + + double distance = sqrt(_state1 * _state1 + _state2 * _state2 + _state3 * _state3); + if (_gApproximation == 0) { + _gApproximation = distance; + } + else { + _gApproximation = _gApproximation * 0.9999 + distance * 0.0001; + } + + double temp = _state1; + switch (_rotation & 3) { + case 0: break; + case 1: + _state1 = -_state3; + _state3 = temp; + break; + case 2: + _state1 = -_state1; + _state3 = -_state3; + break; + case 3: + _state1 = _state3; + _state3 = -temp; + break; + } + + return old1 != _state1 || old2 != _state2 || old3 != _state3; +} + +@end diff --git a/thirdparty/SameBoy/JoyKit/JOYAxis.h b/thirdparty/SameBoy/JoyKit/JOYAxis.h index 8d4b7abe3..06c0917c7 100644 --- a/thirdparty/SameBoy/JoyKit/JOYAxis.h +++ b/thirdparty/SameBoy/JoyKit/JOYAxis.h @@ -1,5 +1,6 @@ #import #import "JOYButton.h" +#import "JOYInput.h" typedef enum { JOYAxisUsageNone, @@ -24,10 +25,8 @@ typedef enum { JOYAxisUsageGeneric0 = 0x10000, } JOYAxisUsage; -@interface JOYAxis : NSObject -- (NSString *)usageString; +@interface JOYAxis : JOYInput + (NSString *)usageToString: (JOYAxisUsage) usage; -- (uint64_t)uniqueID; - (double)value; - (JOYButtonUsage)equivalentButtonUsage; @property JOYAxisUsage usage; diff --git a/thirdparty/SameBoy/JoyKit/JOYAxis.m b/thirdparty/SameBoy/JoyKit/JOYAxis.m index afe90d268..5e27c46e3 100644 --- a/thirdparty/SameBoy/JoyKit/JOYAxis.m +++ b/thirdparty/SameBoy/JoyKit/JOYAxis.m @@ -42,12 +42,12 @@ - (NSString *)usageString - (uint64_t)uniqueID { - return _element.uniqueID; + return _element.uniqueID | (uint64_t)self.combinedIndex << 32; } - (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, %@ (%llu); State: %f%%>", self.className, self, self.usageString, self.uniqueID, _state * 100]; + return [NSString stringWithFormat:@"<%@: %p, %@ (%llx); State: %f%%>", self.className, self, self.usageString, self.uniqueID, _state * 100]; } - (instancetype)initWithElement:(JOYElement *)element diff --git a/thirdparty/SameBoy/JoyKit/JOYButton.h b/thirdparty/SameBoy/JoyKit/JOYButton.h index 6a67c6c16..c3f13dea5 100644 --- a/thirdparty/SameBoy/JoyKit/JOYButton.h +++ b/thirdparty/SameBoy/JoyKit/JOYButton.h @@ -1,6 +1,5 @@ #import - - +#import "JOYInput.h" typedef enum { JOYButtonUsageNone, @@ -41,12 +40,18 @@ typedef enum { JOYButtonUsageGeneric0 = 0x10000, } JOYButtonUsage; -@interface JOYButton : NSObject -- (NSString *)usageString; +typedef enum { + JOYButtonTypeNormal, + JOYButtonTypeAxisEmulated, + JOYButtonTypeAxes2DEmulated, + JOYButtonTypeHatEmulated, +} JOYButtonType; + +@interface JOYButton : JOYInput + (NSString *)usageToString: (JOYButtonUsage) usage; -- (uint64_t)uniqueID; - (bool) isPressed; @property JOYButtonUsage usage; +@property (readonly) JOYButtonType type; @end diff --git a/thirdparty/SameBoy/JoyKit/JOYButton.m b/thirdparty/SameBoy/JoyKit/JOYButton.m index 18970cde8..b56ead0ea 100644 --- a/thirdparty/SameBoy/JoyKit/JOYButton.m +++ b/thirdparty/SameBoy/JoyKit/JOYButton.m @@ -2,6 +2,10 @@ #import "JOYElement.h" #import +@interface JOYButton () +@property JOYButtonUsage originalUsage; +@end + @implementation JOYButton { JOYElement *_element; @@ -51,12 +55,12 @@ - (NSString *)usageString - (uint64_t)uniqueID { - return _element.uniqueID; + return _element.uniqueID | (uint64_t)self.combinedIndex << 32; } - (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, %@ (%llu); State: %s>", self.className, self, self.usageString, self.uniqueID, _state? "Presssed" : "Released"]; + return [NSString stringWithFormat:@"<%@: %p, %@ (%llx); State: %s>", self.className, self, self.usageString, self.uniqueID, _state? "Presssed" : "Released"]; } - (instancetype)initWithElement:(JOYElement *)element @@ -88,6 +92,8 @@ - (instancetype)initWithElement:(JOYElement *)element } } + _originalUsage = _usage; + return self; } @@ -105,4 +111,9 @@ - (bool)updateState } return false; } + +- (JOYButtonType)type +{ + return JOYButtonTypeNormal; +} @end diff --git a/thirdparty/SameBoy/JoyKit/JOYController.h b/thirdparty/SameBoy/JoyKit/JOYController.h index 8f5f6f447..5bd63385b 100644 --- a/thirdparty/SameBoy/JoyKit/JOYController.h +++ b/thirdparty/SameBoy/JoyKit/JOYController.h @@ -2,6 +2,7 @@ #import "JOYButton.h" #import "JOYAxis.h" #import "JOYAxes2D.h" +#import "JOYAxes3D.h" #import "JOYHat.h" static NSString const *JOYAxes2DEmulateButtonsKey = @"JOYAxes2DEmulateButtons"; @@ -17,25 +18,51 @@ static NSString const *JOYHatsEmulateButtonsKey = @"JOYHatsEmulateButtons"; -(void) controller:(JOYController *)controller buttonChangedState:(JOYButton *)button; -(void) controller:(JOYController *)controller movedAxis:(JOYAxis *)axis; -(void) controller:(JOYController *)controller movedAxes2D:(JOYAxes2D *)axes; +-(void) controller:(JOYController *)controller movedAxes3D:(JOYAxes3D *)axes; -(void) controller:(JOYController *)controller movedHat:(JOYHat *)hat; @end +typedef enum { + JOYControllerCombinedTypeSingle, + JOYControllerCombinedTypeComponent, + JOYControllerCombinedTypeCombined, +} JOYControllerCombinedType; + +typedef enum { + JOYJoyConTypeNone, + JOYJoyConTypeLeft, + JOYJoyConTypeRight, + JOYJoyConTypeDual, +} JOYJoyConType; + @interface JOYController : NSObject + (void)startOnRunLoop:(NSRunLoop *)runloop withOptions: (NSDictionary *)options; + (NSArray *) allControllers; + (void) registerListener:(id)listener; + (void) unregisterListener:(id)listener; -- (NSString *)deviceName; -- (NSString *)uniqueID; +- (JOYControllerCombinedType)combinedControllerType; - (NSArray *) buttons; - (NSArray *) axes; - (NSArray *) axes2D; +- (NSArray *) axes3D; - (NSArray *) hats; +- (NSArray *) allInputs; - (void)setRumbleAmplitude:(double)amp; - (void)setPlayerLEDs:(uint8_t)mask; - (uint8_t)LEDMaskForPlayer:(unsigned)player; @property (readonly, getter=isConnected) bool connected; +@property (readonly) JOYJoyConType joyconType; +@property (readonly) NSString *deviceName; +@property (readonly) NSString *uniqueID; +@property (nonatomic) bool usesHorizontalJoyConGrip; @end +@interface JOYCombinedController : JOYController +- (instancetype)initWithChildren:(NSArray *)children; +- (void)breakApart; +@property (readonly) NSArray *children; +@end + + diff --git a/thirdparty/SameBoy/JoyKit/JOYController.m b/thirdparty/SameBoy/JoyKit/JOYController.m index 1097ef65b..dc55c74ae 100644 --- a/thirdparty/SameBoy/JoyKit/JOYController.m +++ b/thirdparty/SameBoy/JoyKit/JOYController.m @@ -3,7 +3,7 @@ #import "JOYElement.h" #import "JOYSubElement.h" #import "JOYFullReportElement.h" - +#import "JOYButton.h" #import "JOYEmulatedButton.h" #include @@ -19,6 +19,7 @@ static NSString const *JOYAxes2DUsageMapping = @"JOYAxes2DUsageMapping"; static NSString const *JOYCustomReports = @"JOYCustomReports"; static NSString const *JOYIsSwitch = @"JOYIsSwitch"; +static NSString const *JOYJoyCon = @"JOYJoyCon"; static NSString const *JOYRumbleUsage = @"JOYRumbleUsage"; static NSString const *JOYRumbleUsagePage = @"JOYRumbleUsagePage"; static NSString const *JOYConnectedUsage = @"JOYConnectedUsage"; @@ -54,6 +55,7 @@ - (void)gotReport:(NSData *)report; @interface JOYButton () - (instancetype)initWithElement:(JOYElement *)element; - (bool)updateState; +@property JOYButtonUsage originalUsage; @end @interface JOYAxis () @@ -69,6 +71,20 @@ - (bool)updateState; @interface JOYAxes2D () - (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2; - (bool)updateState; +@property unsigned rotation; // in 90 degrees units, clockwise +@end + +@interface JOYAxes3D () +{ + @public JOYElement *_element1, *_element2, *_element3; +} +- (instancetype)initWithFirstElement:(JOYElement *)element1 secondElement:(JOYElement *)element2 thirdElement:(JOYElement *)element2; +- (bool)updateState; +@property unsigned rotation; // in 90 degrees units, clockwise +@end + +@interface JOYInput () +@property unsigned combinedIndex; @end static NSDictionary *CreateHIDDeviceMatchDictionary(const UInt32 page, const UInt32 usage) @@ -164,14 +180,17 @@ typedef struct __attribute__((packed)) { @implementation JOYController { + @public // Let JOYCombinedController access everything IOHIDDeviceRef _device; NSMutableDictionary *_buttons; NSMutableDictionary *_axes; NSMutableDictionary *_axes2D; + NSMutableDictionary *_axes3D; NSMutableDictionary *_hats; NSMutableDictionary *_fullReportElements; NSMutableDictionary *> *_multiElements; - + JOYAxes3D *_lastAxes3D; + // Button emulation NSMutableDictionary *_axisEmulatedButtons; NSMutableDictionary *> *_axes2DEmulatedButtons; @@ -203,6 +222,7 @@ @implementation JOYController unsigned _rumbleCounter; bool _deviceCantSendReports; dispatch_queue_t _rumbleQueue; + JOYCombinedController *_parent; } - (instancetype)initWithDevice:(IOHIDDeviceRef) device hacks:(NSDictionary *)hacks @@ -246,6 +266,69 @@ -(void)createInputForElement:(JOYElement *)element @(kHIDUsage_GD_Rz): @(1), }; + if (element.usagePage == kHIDPage_Sensor) { + JOYAxes3DUsage usage; + JOYElement *element1 = nil, *element2 = nil, *element3 = nil; + + switch (element.usage) { + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisX: + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisY: + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ: + usage = JOYAxes3DUsageAcceleration; + break; + case kHIDUsage_Snsr_Data_Motion_AngularPositionXAxis: + case kHIDUsage_Snsr_Data_Motion_AngularPositionYAxis: + case kHIDUsage_Snsr_Data_Motion_AngularPositionZAxis: + usage = JOYAxes3DUsageOrientation; + break; + case kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis: + usage = JOYAxes3DUsageGyroscope; + break; + default: + return; + } + + switch (element.usage) { + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisX: + case kHIDUsage_Snsr_Data_Motion_AngularPositionXAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis: + element1 = element; + if (_lastAxes3D && !_lastAxes3D->_element1 && _lastAxes3D.usage == usage) { + element2 = _lastAxes3D->_element2; + element3 = _lastAxes3D->_element3; + } + break; + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisY: + case kHIDUsage_Snsr_Data_Motion_AngularPositionYAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis: + element2 = element; + if (_lastAxes3D && !_lastAxes3D->_element2 && _lastAxes3D.usage == usage) { + element1 = _lastAxes3D->_element1; + element3 = _lastAxes3D->_element3; + } + break; + case kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ: + case kHIDUsage_Snsr_Data_Motion_AngularPositionZAxis: + case kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis: + element3 = element; + if (_lastAxes3D && !_lastAxes3D->_element3 && _lastAxes3D.usage == usage) { + element1 = _lastAxes3D->_element1; + element2 = _lastAxes3D->_element2; + } + break; + } + + _lastAxes3D = [[JOYAxes3D alloc] initWithFirstElement:element1 secondElement:element2 thirdElement:element3]; + _lastAxes3D.usage = usage; + if (element1) _axes3D[element1] = _lastAxes3D; + if (element2) _axes3D[element2] = _lastAxes3D; + if (element3) _axes3D[element3] = _lastAxes3D; + + return; + } + axisGroups = _hacks[JOYAxisGroups] ?: axisGroups; if (element.usagePage == kHIDPage_Button || @@ -256,7 +339,7 @@ -(void)createInputForElement:(JOYElement *)element [_buttons setObject:button forKey:element]; NSNumber *replacementUsage = element.usagePage == kHIDPage_Button? _hacks[JOYButtonUsageMapping][@(button.usage)] : nil; if (replacementUsage) { - button.usage = [replacementUsage unsignedIntValue]; + button.originalUsage = button.usage = [replacementUsage unsignedIntValue]; } return; } @@ -307,29 +390,12 @@ -(void)createInputForElement:(JOYElement *)element if (axes2DEmulateButtons) { _axes2DEmulatedButtons[@(axes.uniqueID)] = @[ - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadLeft uniqueID:axes.uniqueID | 0x100000000L], - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadRight uniqueID:axes.uniqueID | 0x200000000L], - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadUp uniqueID:axes.uniqueID | 0x300000000L], - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadDown uniqueID:axes.uniqueID | 0x400000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadLeft type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x100000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadRight type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x200000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadUp type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x300000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadDown type:JOYButtonTypeAxes2DEmulated uniqueID:axes.uniqueID | 0x400000000L], ]; } - - /* - for (NSArray *group in axes2d) { - break; - IOHIDElementRef first = (__bridge IOHIDElementRef)group[0]; - IOHIDElementRef second = (__bridge IOHIDElementRef)group[1]; - if (IOHIDElementGetUsage(first) > element.usage) continue; - if (IOHIDElementGetUsage(second) > element.usage) continue; - if (IOHIDElementGetReportID(first) != IOHIDElementGetReportID(element)) continue; - if ((IOHIDElementGetUsage(first) - kHIDUsage_GD_X) / 3 != (element.usage - kHIDUsage_GD_X) / 3) continue; - if (IOHIDElementGetParent(first) != IOHIDElementGetParent(element)) continue; - - [axes2d removeObject:group]; - [axes3d addObject:@[(__bridge id)first, (__bridge id)second, _element]]; - found = true; - break; - }*/ break; } case kHIDUsage_GD_Slider: @@ -346,7 +412,7 @@ -(void)createInputForElement:(JOYElement *)element if ([_hacks[JOYEmulateAxisButtons] boolValue]) { _axisEmulatedButtons[@(axis.uniqueID)] = - [[JOYEmulatedButton alloc] initWithUsage:axis.equivalentButtonUsage uniqueID:axis.uniqueID]; + [[JOYEmulatedButton alloc] initWithUsage:axis.equivalentButtonUsage type:JOYButtonTypeAxisEmulated uniqueID:axis.uniqueID]; } @@ -366,10 +432,10 @@ -(void)createInputForElement:(JOYElement *)element [_hats setObject:hat forKey:element]; if (hatsEmulateButtons) { _hatEmulatedButtons[@(hat.uniqueID)] = @[ - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadLeft uniqueID:hat.uniqueID | 0x100000000L], - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadRight uniqueID:hat.uniqueID | 0x200000000L], - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadUp uniqueID:hat.uniqueID | 0x300000000L], - [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadDown uniqueID:hat.uniqueID | 0x400000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadLeft type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x100000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadRight type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x200000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadUp type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x300000000L], + [[JOYEmulatedButton alloc] initWithUsage:JOYButtonUsageDPadDown type:JOYButtonTypeHatEmulated uniqueID:hat.uniqueID | 0x400000000L], ]; } break; @@ -388,6 +454,7 @@ - (instancetype)initWithDevice:(IOHIDDeviceRef)device reportIDFilter:(NSArray *)axes3D +{ + return [[NSSet setWithArray:[_axes3D allValues]] allObjects]; +} + - (NSArray *)hats { return [_hats allValues]; @@ -666,6 +761,7 @@ - (void)_elementChanged:(JOYElement *)element } } else if (old && !self.connected) { + [_parent breakApart]; for (id listener in listeners) { if ([listener respondsToSelector:@selector(controllerDisconnected:)]) { [listener controllerDisconnected:self]; @@ -681,7 +777,7 @@ - (void)_elementChanged:(JOYElement *)element if ([button updateState]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { - [listener controller:self buttonChangedState:button]; + [listener controller:_parent ?: self buttonChangedState:button]; } } } @@ -696,14 +792,14 @@ - (void)_elementChanged:(JOYElement *)element if ([axis updateState]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controller:movedAxis:)]) { - [listener controller:self movedAxis:axis]; + [listener controller:_parent ?: self movedAxis:axis]; } } - JOYEmulatedButton *button = _axisEmulatedButtons[@(axis.uniqueID)]; + JOYEmulatedButton *button = _axisEmulatedButtons[@(axis.uniqueID & 0xFFFFFFFF)]; // Mask the combined prefix away if ([button updateStateFromAxis:axis]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { - [listener controller:self buttonChangedState:button]; + [listener controller:_parent ?: self buttonChangedState:button]; } } } @@ -718,15 +814,15 @@ - (void)_elementChanged:(JOYElement *)element if ([axes updateState]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controller:movedAxes2D:)]) { - [listener controller:self movedAxes2D:axes]; + [listener controller:_parent ?: self movedAxes2D:axes]; } } - NSArray *buttons = _axes2DEmulatedButtons[@(axes.uniqueID)]; + NSArray *buttons = _axes2DEmulatedButtons[@(axes.uniqueID & 0xFFFFFFFF)]; // Mask the combined prefix away for (JOYEmulatedButton *button in buttons) { if ([button updateStateFromAxes2D:axes]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { - [listener controller:self buttonChangedState:button]; + [listener controller:_parent ?: self buttonChangedState:button]; } } } @@ -736,22 +832,36 @@ - (void)_elementChanged:(JOYElement *)element } } + { + JOYAxes3D *axes = _axes3D[element]; + if (axes) { + if ([axes updateState]) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controller:movedAxes3D:)]) { + [listener controller:_parent ?: self movedAxes3D:axes]; + } + } + } + return; + } + } + { JOYHat *hat = _hats[element]; if (hat) { if ([hat updateState]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controller:movedHat:)]) { - [listener controller:self movedHat:hat]; + [listener controller:_parent ?: self movedHat:hat]; } } - NSArray *buttons = _hatEmulatedButtons[@(hat.uniqueID)]; + NSArray *buttons = _hatEmulatedButtons[@(hat.uniqueID & 0xFFFFFFFF)]; // Mask the combined prefix away for (JOYEmulatedButton *button in buttons) { if ([button updateStateFromHat:hat]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controller:buttonChangedState:)]) { - [listener controller:self buttonChangedState:button]; + [listener controller:_parent ?: self buttonChangedState:button]; } } } @@ -764,6 +874,8 @@ - (void)_elementChanged:(JOYElement *)element - (void)disconnected { + _physicallyConnected = false; + [_parent breakApart]; if (_logicallyConnected && [exposedControllers containsObject:self]) { for (id listener in listeners) { if ([listener respondsToSelector:@selector(controllerDisconnected:)]) { @@ -771,7 +883,6 @@ - (void)disconnected } } } - _physicallyConnected = false; [exposedControllers removeObject:self]; [self setRumbleAmplitude:0]; dispatch_sync(_rumbleQueue, ^{ @@ -801,55 +912,55 @@ - (void) sendDualSenseOutput } _lastVendorSpecificOutput.dualsenseOutput.sequence += 0x10; static const uint32_t table[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, + 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, + 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, + 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, + 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, + 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, + 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, + 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, + 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, + 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, + 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, + 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, + 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, + 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, + 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, + 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, + 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, + 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, + 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, + 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; const uint8_t *byte = (void *)&_lastVendorSpecificOutput.dualsenseOutput; uint32_t size = sizeof(_lastVendorSpecificOutput.dualsenseOutput) - 4; uint32_t ret = 0xFFFFFFFF; - ret = table[(ret ^ 0xa2) & 0xFF] ^ (ret >> 8); + ret = table[(ret ^ 0xA2) & 0xFF] ^ (ret >> 8); while (size--) { ret = table[(ret ^ *byte++) & 0xFF] ^ (ret >> 8); @@ -865,7 +976,7 @@ - (uint8_t)LEDMaskForPlayer:(unsigned)player if (_isDualShock3) { return 2 << player; } - if (_isUSBDualSense) { + if (_isDualSense) { switch (player) { case 0: return 0x04; case 1: return 0x0A; @@ -962,13 +1073,13 @@ - (void)updateRumble } else if (_isDualShock3) { _lastVendorSpecificOutput.ds3Output.reportID = 1; - _lastVendorSpecificOutput.ds3Output.rumbleLeftDuration = _lastVendorSpecificOutput.ds3Output.rumbleRightDuration = _rumbleAmplitude? 0xff : 0; - _lastVendorSpecificOutput.ds3Output.rumbleLeftStrength = _lastVendorSpecificOutput.ds3Output.rumbleRightStrength = round(_rumbleAmplitude * 0xff); + _lastVendorSpecificOutput.ds3Output.rumbleLeftDuration = _lastVendorSpecificOutput.ds3Output.rumbleRightDuration = _rumbleAmplitude? 0xFF : 0; + _lastVendorSpecificOutput.ds3Output.rumbleLeftStrength = _lastVendorSpecificOutput.ds3Output.rumbleRightStrength = round(_rumbleAmplitude * 0xFF); [self sendReport:[NSData dataWithBytes:&_lastVendorSpecificOutput.ds3Output length:sizeof(_lastVendorSpecificOutput.ds3Output)]]; } else if (_isDualSense) { - _lastVendorSpecificOutput.dualsenseOutput.rumbleLeftStrength = round(_rumbleAmplitude * _rumbleAmplitude * 0xff); - _lastVendorSpecificOutput.dualsenseOutput.rumbleRightStrength = _rumbleAmplitude > 0.25 ? round(pow(_rumbleAmplitude - 0.25, 2) * 0xff) : 0; + _lastVendorSpecificOutput.dualsenseOutput.rumbleLeftStrength = round(_rumbleAmplitude * _rumbleAmplitude * 0xFF); + _lastVendorSpecificOutput.dualsenseOutput.rumbleRightStrength = _rumbleAmplitude > 0.25 ? round(pow(_rumbleAmplitude - 0.25, 2) * 0xFF) : 0; [self sendDualSenseOutput]; } else { @@ -989,6 +1100,71 @@ - (bool)isConnected return _logicallyConnected && _physicallyConnected; } +- (NSArray *)allInputs +{ + NSMutableArray *ret = [NSMutableArray array]; + [ret addObjectsFromArray:self.buttons]; + [ret addObjectsFromArray:self.axes]; + [ret addObjectsFromArray:self.axes2D]; + [ret addObjectsFromArray:self.axes3D]; + [ret addObjectsFromArray:self.hats]; + return ret; +} + +- (void)setusesHorizontalJoyConGrip:(bool)usesHorizontalJoyConGrip +{ + if (usesHorizontalJoyConGrip == _usesHorizontalJoyConGrip) return; // Nothing to do + _usesHorizontalJoyConGrip = usesHorizontalJoyConGrip; + switch (self.joyconType) { + case JOYJoyConTypeLeft: + case JOYJoyConTypeRight: { + NSArray *buttons = _buttons.allValues; // not self.buttons to skip emulated buttons + if (!usesHorizontalJoyConGrip) { + for (JOYAxes2D *axes in self.axes2D) { + axes.rotation = 0; + } + for (JOYAxes3D *axes in self.axes3D) { + axes.rotation = 0; + } + for (JOYButton *button in buttons) { + button.usage = button.originalUsage; + } + return; + } + for (JOYAxes2D *axes in self.axes2D) { + axes.rotation = self.joyconType == JOYJoyConTypeLeft? -1 : 1; + } + for (JOYAxes3D *axes in self.axes3D) { + axes.rotation = self.joyconType == JOYJoyConTypeLeft? -1 : 1; + } + if (self.joyconType == JOYJoyConTypeLeft) { + for (JOYButton *button in buttons) { + switch (button.originalUsage) { + case JOYButtonUsageDPadLeft: button.usage = JOYButtonUsageB; break; + case JOYButtonUsageDPadRight: button.usage = JOYButtonUsageX; break; + case JOYButtonUsageDPadUp: button.usage = JOYButtonUsageY; break; + case JOYButtonUsageDPadDown: button.usage = JOYButtonUsageA; break; + default: button.usage = button.originalUsage; break; + } + } + } + else { + for (JOYButton *button in buttons) { + switch (button.originalUsage) { + case JOYButtonUsageY: button.usage = JOYButtonUsageX; break; + case JOYButtonUsageA: button.usage = JOYButtonUsageB; break; + case JOYButtonUsageX: button.usage = JOYButtonUsageA; break; + case JOYButtonUsageB: button.usage = JOYButtonUsageY; break; + default: button.usage = button.originalUsage; break; + } + } + } + } + default: + return; + } +} + + (void)controllerAdded:(IOHIDDeviceRef) device { NSString *name = (__bridge NSString *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductKey)); @@ -1008,8 +1184,6 @@ + (void)controllerAdded:(IOHIDDeviceRef) device } [controllers setObject:controller forKey:[NSValue valueWithPointer:device]]; - - } + (void)controllerRemoved:(IOHIDDeviceRef) device @@ -1079,3 +1253,237 @@ - (void)dealloc } } @end + + +@implementation JOYCombinedController +- (instancetype)initWithChildren:(NSArray *)children +{ + self = [super init]; + // Sorting makes the device name and unique id consistent + _children = [children sortedArrayUsingComparator:^NSComparisonResult(JOYController *a, JOYController *b) { + return [a.uniqueID compare:b.uniqueID]; + }]; + + if (_children.count == 0) return nil; + + for (JOYController *child in _children) { + if (child.combinedControllerType != JOYControllerCombinedTypeSingle) { + NSLog(@"Cannot combine non-single controller %@", child); + return nil; + } + if (![exposedControllers containsObject:child]) { + NSLog(@"Cannot combine unexposed controller %@", child); + return nil; + } + } + + unsigned index = 0; + for (JOYController *child in _children) { + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerDisconnected:)]) { + [listener controllerDisconnected:child]; + } + } + child->_parent = self; + for (JOYInput *input in child.allInputs) { + input.combinedIndex = index; + } + index++; + [exposedControllers removeObject:child]; + } + + [exposedControllers addObject:self]; + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerConnected:)]) { + [listener controllerConnected:self]; + } + } + + return self; +} + +- (void)breakApart +{ + if (![exposedControllers containsObject:self]) { + // Already broken apart + return; + } + + [exposedControllers removeObject:self]; + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerDisconnected:)]) { + [listener controllerDisconnected:self]; + } + } + + for (JOYController *child in _children) { + child->_parent = nil; + for (JOYInput *input in child.allInputs) { + input.combinedIndex = 0; + } + if (!child.connected) break; + [exposedControllers addObject:child]; + for (id listener in listeners) { + if ([listener respondsToSelector:@selector(controllerConnected:)]) { + [listener controllerConnected:child]; + } + } + } +} + +- (NSString *)deviceName +{ + NSString *ret = nil; + for (JOYController *child in _children) { + if (ret) { + ret = [ret stringByAppendingFormat:@" + %@", child.deviceName]; + } + else { + ret = child.deviceName; + } + } + return ret; +} + +- (NSString *)uniqueID +{ + NSString *ret = nil; + for (JOYController *child in _children) { + if (ret) { + ret = [ret stringByAppendingFormat:@"+%@", child.uniqueID]; + } + else { + ret = child.uniqueID; + } + } + return ret; +} + +- (JOYControllerCombinedType)combinedControllerType +{ + return JOYControllerCombinedTypeCombined; +} + +- (NSArray *)buttons +{ + NSArray *ret = nil; + for (JOYController *child in _children) { + if (ret) { + ret = [ret arrayByAddingObjectsFromArray:child.buttons]; + } + else { + ret = child.buttons; + } + } + return ret; +} + +- (NSArray *)axes +{ + NSArray *ret = nil; + for (JOYController *child in _children) { + if (ret) { + ret = [ret arrayByAddingObjectsFromArray:child.axes]; + } + else { + ret = child.axes; + } + } + return ret; +} + +- (NSArray *)axes2D +{ + NSArray *ret = nil; + for (JOYController *child in _children) { + if (ret) { + ret = [ret arrayByAddingObjectsFromArray:child.axes2D]; + } + else { + ret = child.axes2D; + } + } + return ret; +} + +- (NSArray *)axes3D +{ + NSArray *ret = nil; + for (JOYController *child in _children) { + if (ret) { + ret = [ret arrayByAddingObjectsFromArray:child.axes3D]; + } + else { + ret = child.axes3D; + } + } + return ret; +} + +- (NSArray *)hats +{ + NSArray *ret = nil; + for (JOYController *child in _children) { + if (ret) { + ret = [ret arrayByAddingObjectsFromArray:child.hats]; + } + else { + ret = child.hats; + } + } + return ret; +} + +- (void)setRumbleAmplitude:(double)amp +{ + for (JOYController *child in _children) { + [child setRumbleAmplitude:amp]; + } +} + +- (void)setPlayerLEDs:(uint8_t)mask +{ + // Mask is actually just the player ID in a combined controller to + // allow combining controllers with different LED layouts + for (JOYController *child in _children) { + [child setPlayerLEDs:[child LEDMaskForPlayer:mask]]; + } +} + +- (uint8_t)LEDMaskForPlayer:(unsigned int)player +{ + return player; +} + +- (bool)isConnected +{ + if (![exposedControllers containsObject:self]) { + // Controller was broken apart + return false; + } + + for (JOYController *child in _children) { + if (!child.isConnected) { + return false; // Should never happen + } + } + + return true; +} + +- (JOYJoyConType)joyconType +{ + if (_children.count != 2) return JOYJoyConTypeNone; + if (_children[0].joyconType == JOYJoyConTypeLeft && + _children[1].joyconType == JOYJoyConTypeRight) { + return JOYJoyConTypeDual; + } + + if (_children[1].joyconType == JOYJoyConTypeLeft && + _children[0].joyconType == JOYJoyConTypeRight) { + return JOYJoyConTypeDual; + } + return JOYJoyConTypeNone; +} + +@end diff --git a/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.h b/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.h index 491e0c734..05ccde829 100644 --- a/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.h +++ b/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.h @@ -4,7 +4,7 @@ #import "JOYHat.h" @interface JOYEmulatedButton : JOYButton -- (instancetype)initWithUsage:(JOYButtonUsage)usage uniqueID:(uint64_t)uniqueID; +- (instancetype)initWithUsage:(JOYButtonUsage)usage type:(JOYButtonType)type uniqueID:(uint64_t)uniqueID; - (bool)updateStateFromAxis:(JOYAxis *)axis; - (bool)updateStateFromAxes2D:(JOYAxes2D *)axes; - (bool)updateStateFromHat:(JOYHat *)hat; diff --git a/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m b/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m index b62670a62..841617edd 100644 --- a/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m +++ b/thirdparty/SameBoy/JoyKit/JOYEmulatedButton.m @@ -10,20 +10,22 @@ @interface JOYButton () @implementation JOYEmulatedButton { uint64_t _uniqueID; + JOYButtonType _type; } -- (instancetype)initWithUsage:(JOYButtonUsage)usage uniqueID:(uint64_t)uniqueID; +- (instancetype)initWithUsage:(JOYButtonUsage)usage type:(JOYButtonType)type uniqueID:(uint64_t)uniqueID; { self = [super init]; self.usage = usage; _uniqueID = uniqueID; + _type = type; return self; } - (uint64_t)uniqueID { - return _uniqueID; + return _uniqueID | (uint64_t)self.combinedIndex << 32; } - (bool)updateStateFromAxis:(JOYAxis *)axis @@ -89,4 +91,9 @@ - (bool)updateStateFromHat:(JOYHat *)hat return _state != old; } +- (JOYButtonType)type +{ + return _type; +} + @end diff --git a/thirdparty/SameBoy/JoyKit/JOYFullReportElement.m b/thirdparty/SameBoy/JoyKit/JOYFullReportElement.m index c8efb270b..a19a53007 100644 --- a/thirdparty/SameBoy/JoyKit/JOYFullReportElement.m +++ b/thirdparty/SameBoy/JoyKit/JOYFullReportElement.m @@ -61,9 +61,10 @@ - (NSUInteger)hash return self.uniqueID; } -- (BOOL)isEqual:(id)object +- (BOOL)isEqual:(JOYFullReportElement *)object { - return self.uniqueID == self.uniqueID; + if ([object isKindOfClass:self.class]) return false; + return self.uniqueID == object.uniqueID; } - (id)copyWithZone:(nullable NSZone *)zone; diff --git a/thirdparty/SameBoy/JoyKit/JOYHat.h b/thirdparty/SameBoy/JoyKit/JOYHat.h index 05a582927..f430beb20 100644 --- a/thirdparty/SameBoy/JoyKit/JOYHat.h +++ b/thirdparty/SameBoy/JoyKit/JOYHat.h @@ -1,7 +1,7 @@ #import +#import "JOYInput.h" -@interface JOYHat : NSObject -- (uint64_t)uniqueID; +@interface JOYHat : JOYInput - (double)angle; - (unsigned)resolution; @property (readonly, getter=isPressed) bool pressed; diff --git a/thirdparty/SameBoy/JoyKit/JOYHat.m b/thirdparty/SameBoy/JoyKit/JOYHat.m index b5a18f0b4..261721627 100644 --- a/thirdparty/SameBoy/JoyKit/JOYHat.m +++ b/thirdparty/SameBoy/JoyKit/JOYHat.m @@ -10,15 +10,15 @@ @implementation JOYHat - (uint64_t)uniqueID { - return _element.uniqueID; + return _element.uniqueID | (uint64_t)self.combinedIndex << 32; } - (NSString *)description { if (self.isPressed) { - return [NSString stringWithFormat:@"<%@: %p (%llu); State: %f degrees>", self.className, self, self.uniqueID, self.angle]; + return [NSString stringWithFormat:@"<%@: %p (%llx); State: %f degrees>", self.className, self, self.uniqueID, self.angle]; } - return [NSString stringWithFormat:@"<%@: %p (%llu); State: released>", self.className, self, self.uniqueID]; + return [NSString stringWithFormat:@"<%@: %p (%llx); State: released>", self.className, self, self.uniqueID]; } @@ -59,4 +59,9 @@ - (bool)updateState return false; } +- (NSString *)usageString +{ + return @"Hat switch"; +} + @end diff --git a/thirdparty/SameBoy/JoyKit/JOYInput.h b/thirdparty/SameBoy/JoyKit/JOYInput.h new file mode 100644 index 000000000..ea45b59a7 --- /dev/null +++ b/thirdparty/SameBoy/JoyKit/JOYInput.h @@ -0,0 +1,8 @@ +#import + +@interface JOYInput : NSObject +@property (readonly) unsigned combinedIndex; +- (NSString *)usageString; +- (uint64_t)uniqueID; +@end + diff --git a/thirdparty/SameBoy/JoyKit/JOYInput.m b/thirdparty/SameBoy/JoyKit/JOYInput.m new file mode 100644 index 000000000..0de83bf23 --- /dev/null +++ b/thirdparty/SameBoy/JoyKit/JOYInput.m @@ -0,0 +1,21 @@ +#import "JOYInput.h" + +@interface JOYInput () +@property unsigned combinedIndex; +@end + +@implementation JOYInput + +- (uint64_t)uniqueID +{ + [self doesNotRecognizeSelector:_cmd]; + __builtin_unreachable(); +} + +- (NSString *)usageString +{ + [self doesNotRecognizeSelector:_cmd]; + __builtin_unreachable(); +} + +@end diff --git a/thirdparty/SameBoy/JoyKit/JOYSubElement.m b/thirdparty/SameBoy/JoyKit/JOYSubElement.m index c94badc7d..186caf9ee 100644 --- a/thirdparty/SameBoy/JoyKit/JOYSubElement.m +++ b/thirdparty/SameBoy/JoyKit/JOYSubElement.m @@ -57,6 +57,12 @@ - (int32_t)value memcpy(temp, bytes + _offset / 8, (_offset + _size - 1) / 8 - _offset / 8 + 1); uint32_t ret = (*(uint32_t *)temp) >> (_offset % 8); ret &= (1 << _size) - 1; + // + if (_min < 0 || _max < 0) { // Uses unsigned values + if (ret & (1 << (_size - 1)) ) { // Is negative + ret |= ~((1 << _size) - 1); // Fill with 1s + } + } if (_max < _min) { return _max + _min - ret; diff --git a/thirdparty/SameBoy/LICENSE b/thirdparty/SameBoy/LICENSE index 3303e0d7f..94f34689c 100644 --- a/thirdparty/SameBoy/LICENSE +++ b/thirdparty/SameBoy/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2015-2021 Lior Halphon +Copyright (c) 2015-2022 Lior Halphon Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/thirdparty/SameBoy/Makefile b/thirdparty/SameBoy/Makefile index 7bfe5803d..e2ba5c9d6 100644 --- a/thirdparty/SameBoy/Makefile +++ b/thirdparty/SameBoy/Makefile @@ -17,15 +17,18 @@ ifeq ($(PLATFORM),windows32) _ := $(shell chcp 65001) EXESUFFIX:=.exe NATIVE_CC = clang -IWindows -Wno-deprecated-declarations --target=i386-pc-windows +SDL_AUDIO_DRIVERS ?= xaudio2 xaudio2_7 sdl else EXESUFFIX:= NATIVE_CC := cc +SDL_AUDIO_DRIVERS ?= sdl endif PB12_COMPRESS := build/pb12$(EXESUFFIX) ifeq ($(PLATFORM),Darwin) DEFAULT := cocoa +ENABLE_OPENAL ?= 1 else DEFAULT := sdl endif @@ -45,9 +48,9 @@ MAKECMDGOALS := $(DEFAULT) endif include version.mk +COPYRIGHT_YEAR := $(shell grep -oE "20[2-9][0-9]" LICENSE) export VERSION CONF ?= debug -SDL_AUDIO_DRIVER ?= sdl BIN := build/bin OBJ := build/obj @@ -68,8 +71,11 @@ endif # Find libraries with pkg-config if available. ifneq (, $(shell which pkg-config)) +# But not on macOS, it's annoying +ifneq ($(PLATFORM),Darwin) PKG_CONFIG := pkg-config endif +endif ifeq ($(PLATFORM),windows32) # To force use of the Unix version instead of the Windows version @@ -121,7 +127,7 @@ endif CFLAGS += $(WARNINGS) -CFLAGS += -std=gnu11 -D_GNU_SOURCE -DGB_VERSION='"$(VERSION)"' -I. -D_USE_MATH_DEFINES +CFLAGS += -std=gnu11 -D_GNU_SOURCE -DGB_VERSION='"$(VERSION)"' -DGB_COPYRIGHT_YEAR='"$(COPYRIGHT_YEAR)"' -I. -D_USE_MATH_DEFINES ifneq (,$(UPDATE_SUPPORT)) CFLAGS += -DUPDATE_SUPPORT endif @@ -129,16 +135,39 @@ endif ifeq (,$(PKG_CONFIG)) SDL_CFLAGS := $(shell sdl2-config --cflags) SDL_LDFLAGS := $(shell sdl2-config --libs) -lpthread + +# We cannot detect the presence of OpenAL dev headers, +# so we must do this manually +ifeq ($(ENABLE_OPENAL),1) +SDL_CFLAGS += -DENABLE_OPENAL +ifeq ($(PLATFORM),Darwin) +SDL_LDFLAGS += -framework OpenAL +else +SDL_LDFLAGS += -lopenal +endif +SDL_AUDIO_DRIVERS += openal +endif else SDL_CFLAGS := $(shell $(PKG_CONFIG) --cflags sdl2) SDL_LDFLAGS := $(shell $(PKG_CONFIG) --libs sdl2) -lpthread + +# Allow OpenAL to be disabled even if the development libraries are available +ifneq ($(ENABLE_OPENAL),0) +ifeq ($(shell $(PKG_CONFIG) --exists openal && echo 0),0) +SDL_CFLAGS += $(shell $(PKG_CONFIG) --cflags openal) -DENABLE_OPENAL +SDL_LDFLAGS += $(shell $(PKG_CONFIG) --libs openal) +SDL_AUDIO_DRIVERS += openal +endif endif +endif + ifeq (,$(PKG_CONFIG)) GL_LDFLAGS := -lGL else GL_CFLAGS := $(shell $(PKG_CONFIG) --cflags gl) GL_LDFLAGS := $(shell $(PKG_CONFIG) --libs gl || echo -lGL) endif + ifeq ($(PLATFORM),windows32) CFLAGS += -IWindows -Drandom=rand --target=i386-pc-windows LDFLAGS += -lmsvcrt -lcomdlg32 -luser32 -lshell32 -lole32 -lSDL2main -Wl,/MANIFESTFILE:NUL --target=i386-pc-windows @@ -159,7 +188,7 @@ endif CFLAGS += -F/Library/Frameworks -mmacosx-version-min=10.9 -isysroot $(SYSROOT) OCFLAGS += -x objective-c -fobjc-arc -Wno-deprecated-declarations -isysroot $(SYSROOT) -LDFLAGS += -framework AppKit -framework PreferencePanes -framework Carbon -framework QuartzCore -weak_framework Metal -weak_framework MetalKit -mmacosx-version-min=10.9 -isysroot $(SYSROOT) +LDFLAGS += -framework AppKit -framework PreferencePanes -framework Carbon -framework QuartzCore -framework Security -framework WebKit -weak_framework Metal -weak_framework MetalKit -mmacosx-version-min=10.9 -isysroot $(SYSROOT) GL_LDFLAGS := -framework OpenGL endif CFLAGS += -Wno-deprecated-declarations @@ -173,15 +202,18 @@ CFLAGS += -g else ifeq ($(CONF), release) CFLAGS += -O3 -DNDEBUG STRIP := strip +CODESIGN := true ifeq ($(PLATFORM),Darwin) LDFLAGS += -Wl,-exported_symbols_list,$(NULL) -STRIP := -@true +STRIP := strip -x +CODESIGN := codesign -fs - +endif +ifeq ($(PLATFORM),windows32) +LDFLAGS += -fuse-ld=lld endif -ifneq ($(PLATFORM),windows32) LDFLAGS += -flto CFLAGS += -flto LDFLAGS += -Wno-lto-type-mismatch # For GCC's LTO -endif else $(error Invalid value for CONF: $(CONF). Use "debug", "release" or "native_release") @@ -199,15 +231,15 @@ endif cocoa: $(BIN)/SameBoy.app quicklook: $(BIN)/SameBoy.qlgenerator -sdl: $(SDL_TARGET) $(BIN)/SDL/dmg_boot.bin $(BIN)/SDL/cgb_boot.bin $(BIN)/SDL/agb_boot.bin $(BIN)/SDL/sgb_boot.bin $(BIN)/SDL/sgb2_boot.bin $(BIN)/SDL/LICENSE $(BIN)/SDL/registers.sym $(BIN)/SDL/background.bmp $(BIN)/SDL/Shaders -bootroms: $(BIN)/BootROMs/agb_boot.bin $(BIN)/BootROMs/cgb_boot.bin $(BIN)/BootROMs/dmg_boot.bin $(BIN)/BootROMs/sgb_boot.bin $(BIN)/BootROMs/sgb2_boot.bin +sdl: $(SDL_TARGET) $(BIN)/SDL/dmg_boot.bin $(BIN)/SDL/mgb_boot.bin $(BIN)/SDL/cgb0_boot.bin $(BIN)/SDL/cgb_boot.bin $(BIN)/SDL/agb_boot.bin $(BIN)/SDL/sgb_boot.bin $(BIN)/SDL/sgb2_boot.bin $(BIN)/SDL/LICENSE $(BIN)/SDL/registers.sym $(BIN)/SDL/background.bmp $(BIN)/SDL/Shaders $(BIN)/SDL/Palettes +bootroms: $(BIN)/BootROMs/agb_boot.bin $(BIN)/BootROMs/cgb_boot.bin $(BIN)/BootROMs/cgb0_boot.bin $(BIN)/BootROMs/dmg_boot.bin $(BIN)/BootROMs/mgb_boot.bin $(BIN)/BootROMs/sgb_boot.bin $(BIN)/BootROMs/sgb2_boot.bin tester: $(TESTER_TARGET) $(BIN)/tester/dmg_boot.bin $(BIN)/tester/cgb_boot.bin $(BIN)/tester/agb_boot.bin $(BIN)/tester/sgb_boot.bin $(BIN)/tester/sgb2_boot.bin all: cocoa sdl tester libretro # Get a list of our source files and their respective object file targets CORE_SOURCES := $(shell ls Core/*.c) -SDL_SOURCES := $(shell ls SDL/*.c) $(OPEN_DIALOG) SDL/audio/$(SDL_AUDIO_DRIVER).c +SDL_SOURCES := $(shell ls SDL/*.c) $(OPEN_DIALOG) $(patsubst %,SDL/audio/%.c,$(SDL_AUDIO_DRIVERS)) TESTER_SOURCES := $(shell ls Tester/*.c) ifeq ($(PLATFORM),Darwin) @@ -243,6 +275,10 @@ endif $(OBJ)/SDL/%.dep: SDL/% -@$(MKDIR) -p $(dir $@) $(CC) $(CFLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -MT $(OBJ)/$^.o -M $^ -c -o $@ + +$(OBJ)/OpenDialog/%.dep: OpenDialog/% + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -MT $(OBJ)/$^.o -M $^ -c -o $@ $(OBJ)/%.dep: % -@$(MKDIR) -p $(dir $@) @@ -258,6 +294,11 @@ $(OBJ)/SDL/%.c.o: SDL/%.c -@$(MKDIR) -p $(dir $@) $(CC) $(CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@ +$(OBJ)/OpenDialog/%.c.o: OpenDialog/%.c + -@$(MKDIR) -p $(dir $@) + $(CC) $(CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@ + + $(OBJ)/%.c.o: %.c -@$(MKDIR) -p $(dir $@) $(CC) $(CFLAGS) $(FAT_FLAGS) -c $< -o $@ @@ -279,6 +320,8 @@ $(BIN)/SameBoy.app: $(BIN)/SameBoy.app/Contents/MacOS/SameBoy \ Cocoa/Info.plist \ Misc/registers.sym \ $(BIN)/SameBoy.app/Contents/Resources/dmg_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/mgb_boot.bin \ + $(BIN)/SameBoy.app/Contents/Resources/cgb0_boot.bin \ $(BIN)/SameBoy.app/Contents/Resources/cgb_boot.bin \ $(BIN)/SameBoy.app/Contents/Resources/agb_boot.bin \ $(BIN)/SameBoy.app/Contents/Resources/sgb_boot.bin \ @@ -288,12 +331,15 @@ $(BIN)/SameBoy.app: $(BIN)/SameBoy.app/Contents/MacOS/SameBoy \ Shaders $(MKDIR) -p $(BIN)/SameBoy.app/Contents/Resources cp Cocoa/*.icns Cocoa/*.png Misc/registers.sym $(BIN)/SameBoy.app/Contents/Resources/ - sed s/@VERSION/$(VERSION)/ < Cocoa/Info.plist > $(BIN)/SameBoy.app/Contents/Info.plist - cp Cocoa/License.html $(BIN)/SameBoy.app/Contents/Resources/Credits.html + sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < Cocoa/Info.plist > $(BIN)/SameBoy.app/Contents/Info.plist + sed "s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < Cocoa/License.html > $(BIN)/SameBoy.app/Contents/Resources/Credits.html $(MKDIR) -p $(BIN)/SameBoy.app/Contents/Resources/Shaders cp Shaders/*.fsh Shaders/*.metal $(BIN)/SameBoy.app/Contents/Resources/Shaders $(MKDIR) -p $(BIN)/SameBoy.app/Contents/Library/QuickLook/ cp -rf $(BIN)/SameBoy.qlgenerator $(BIN)/SameBoy.app/Contents/Library/QuickLook/ +ifeq ($(CONF), release) + $(CODESIGN) $@ +endif $(BIN)/SameBoy.app/Contents/MacOS/SameBoy: $(CORE_OBJECTS) $(COCOA_OBJECTS) -@$(MKDIR) -p $(dir $@) @@ -313,13 +359,19 @@ $(BIN)/SameBoy.qlgenerator: $(BIN)/SameBoy.qlgenerator/Contents/MacOS/SameBoyQL $(BIN)/SameBoy.qlgenerator/Contents/Resources/cgb_boot_fast.bin $(MKDIR) -p $(BIN)/SameBoy.qlgenerator/Contents/Resources cp QuickLook/*.png $(BIN)/SameBoy.qlgenerator/Contents/Resources/ - sed s/@VERSION/$(VERSION)/ < QuickLook/Info.plist > $(BIN)/SameBoy.qlgenerator/Contents/Info.plist + sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < QuickLook/Info.plist > $(BIN)/SameBoy.qlgenerator/Contents/Info.plist +ifeq ($(CONF), release) + $(CODESIGN) $@ +endif # Currently, SameBoy.app includes two "copies" of each Core .o file once in the app itself and # once in the QL Generator. It should probably become a dylib instead. $(BIN)/SameBoy.qlgenerator/Contents/MacOS/SameBoyQL: $(CORE_OBJECTS) $(QUICKLOOK_OBJECTS) -@$(MKDIR) -p $(dir $@) $(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) -Wl,-exported_symbols_list,QuickLook/exports.sym -bundle -framework Cocoa -framework Quicklook +ifeq ($(CONF), release) + $(STRIP) $@ +endif # cgb_boot_fast.bin is not a standard boot ROM, we don't expect it to exist in the user-provided # boot ROM directory. @@ -335,6 +387,7 @@ $(BIN)/SDL/sameboy: $(CORE_OBJECTS) $(SDL_OBJECTS) $(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS) ifeq ($(CONF), release) $(STRIP) $@ + $(CODESIGN) $@ endif # Windows version builds two, one with a conole and one without it @@ -349,11 +402,11 @@ $(BIN)/SDL/sameboy_debugger.exe: $(CORE_OBJECTS) $(SDL_OBJECTS) $(OBJ)/Windows/r ifneq ($(USE_WINDRES),) $(OBJ)/%.o: %.rc -@$(MKDIR) -p $(dir $@) - windres --preprocessor cpp -DVERSION=\"$(VERSION)\" $^ $@ + windres --preprocessor cpp -DVERSION=\"$(VERSION)\" -DCOPYRIGHT_YEAR=\"$(COPYRIGHT_YEAR)\" $^ $@ else $(OBJ)/%.res: %.rc -@$(MKDIR) -p $(dir $@) - rc /fo $@ /dVERSION=\"$(VERSION)\" $^ + rc /fo $@ /dVERSION=\"$(VERSION)\" /dCOPYRIGHT_YEAR=\"$(COPYRIGHT_YEAR)\" $^ %.o: %.res cvtres /OUT:"$@" $^ @@ -371,6 +424,7 @@ $(BIN)/tester/sameboy_tester: $(CORE_OBJECTS) $(TESTER_OBJECTS) $(CC) $^ -o $@ $(LDFLAGS) ifeq ($(CONF), release) $(STRIP) $@ + $(CODESIGN) $@ endif $(BIN)/tester/sameboy_tester.exe: $(CORE_OBJECTS) $(SDL_OBJECTS) @@ -404,19 +458,26 @@ $(BIN)/SDL/background.bmp: SDL/background.bmp $(BIN)/SDL/Shaders: Shaders -@$(MKDIR) -p $@ cp -rf Shaders/*.fsh $@ + +$(BIN)/SDL/Palettes: Misc/Palettes + -@$(MKDIR) -p $@ + cp -rf Misc/Palettes/*.sbp $@ # Boot ROMs $(OBJ)/%.2bpp: %.png -@$(MKDIR) -p $(dir $@) - rgbgfx -h -u -o $@ $< + rgbgfx $(if $(filter $(shell echo 'print __RGBDS_MAJOR__ || (!__RGBDS_MAJOR__ && __RGBDS_MINOR__ > 5)' | rgbasm -), $$0), -h -u, -Z -u -c embedded) -o $@ $< $(OBJ)/BootROMs/SameBoyLogo.pb12: $(OBJ)/BootROMs/SameBoyLogo.2bpp $(PB12_COMPRESS) + -@$(MKDIR) -p $(dir $@) $(realpath $(PB12_COMPRESS)) < $< > $@ $(PB12_COMPRESS): BootROMs/pb12.c + -@$(MKDIR) -p $(dir $@) $(NATIVE_CC) -std=c99 -Wall -Werror $< -o $@ +$(BIN)/BootROMs/cgb0_boot.bin: BootROMs/cgb_boot.asm $(BIN)/BootROMs/agb_boot.bin: BootROMs/cgb_boot.asm $(BIN)/BootROMs/cgb_boot_fast.bin: BootROMs/cgb_boot.asm $(BIN)/BootROMs/sgb2_boot: BootROMs/sgb_boot.asm @@ -461,15 +522,15 @@ endif $(DESTDIR)$(PREFIX)/share/icons/hicolor/%/apps/sameboy.png: FreeDesktop/AppIcon/%.png -@$(MKDIR) -p $(dir $@) cp -f $^ $@ - + $(DESTDIR)$(PREFIX)/share/icons/hicolor/%/mimetypes/x-gameboy-rom.png: FreeDesktop/Cartridge/%.png -@$(MKDIR) -p $(dir $@) cp -f $^ $@ - + $(DESTDIR)$(PREFIX)/share/icons/hicolor/%/mimetypes/x-gameboy-color-rom.png: FreeDesktop/ColorCartridge/%.png -@$(MKDIR) -p $(dir $@) cp -f $^ $@ - + $(DESTDIR)$(PREFIX)/share/mime/packages/sameboy.xml: FreeDesktop/sameboy.xml -@$(MKDIR) -p $(dir $@) cp -f $^ $@ diff --git a/thirdparty/SameBoy/Misc/Palettes/Desert.sbp b/thirdparty/SameBoy/Misc/Palettes/Desert.sbp new file mode 100644 index 0000000000000000000000000000000000000000..28625ad3b807240dea55043679d261eb39163d71 GIT binary patch literal 32 ncmeYXa0+I!(>Ewd3tuw3`O<}rH?D7I0D|-VFL|O|zpw)U(FzS} literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Misc/Palettes/Evening.sbp b/thirdparty/SameBoy/Misc/Palettes/Evening.sbp new file mode 100644 index 000000000..e11998ab1 --- /dev/null +++ b/thirdparty/SameBoy/Misc/Palettes/Evening.sbp @@ -0,0 +1 @@ +LPBS&6UiS䦻}^LH+ \ No newline at end of file diff --git a/thirdparty/SameBoy/Misc/Palettes/Fog.sbp b/thirdparty/SameBoy/Misc/Palettes/Fog.sbp new file mode 100644 index 0000000000000000000000000000000000000000..a79fe00fd112d9b5276a96491a0cb9586f7ca97c GIT binary patch literal 32 mcmeYXa0+HJu`v%TDsEdmcmJis$8H>F0D>0Z7K literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Misc/Palettes/Radioactive Pea.sbp b/thirdparty/SameBoy/Misc/Palettes/Radioactive Pea.sbp new file mode 100644 index 0000000000000000000000000000000000000000..57f9d6a31fcddce8aa40f2772455113540d456cd GIT binary patch literal 32 ocmeYXa0+H(2vTG#mN%Ivw&NW0#VZWfORXLjKAvoF?$Bp#0IXmQ6#xJL literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Misc/Palettes/Seaweed.sbp b/thirdparty/SameBoy/Misc/Palettes/Seaweed.sbp new file mode 100644 index 0000000000000000000000000000000000000000..3718efd749165f5fa3060b17f23e0b03166c3e50 GIT binary patch literal 32 ocmeYXa0+G;Ww19&b*fk%asR>8ch496GTi%i*6V5|NmfQD0M&pE`2YX_ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Misc/Palettes/Twilight.sbp b/thirdparty/SameBoy/Misc/Palettes/Twilight.sbp new file mode 100644 index 0000000000000000000000000000000000000000..a5decc103acfc724e3e38a0d1dad71814e846d97 GIT binary patch literal 32 ncmeYXa0+G;Ww37(a@!k{^z!obch46rQBe5B00etf7uo{=!4(WZ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Misc/registers.sym b/thirdparty/SameBoy/Misc/registers.sym index 3b31b7458..67c3266d3 100644 --- a/thirdparty/SameBoy/Misc/registers.sym +++ b/thirdparty/SameBoy/Misc/registers.sym @@ -1,67 +1,134 @@ 00:FF00 IO_JOYP +00:FF00 rJOYP 00:FF01 IO_SB +00:FF01 rSB 00:FF02 IO_SC +00:FF02 rSC 00:FF04 IO_DIV +00:FF04 rDIV 00:FF05 IO_TIMA +00:FF05 rTIMA 00:FF06 IO_TMA +00:FF06 rTMA 00:FF07 IO_TAC +00:FF07 rTAC 00:FF0F IO_IF +00:FF0F rIF 00:FF10 IO_NR10 +00:FF10 rNR10 00:FF11 IO_NR11 +00:FF11 rNR11 00:FF12 IO_NR12 +00:FF12 rNR12 00:FF13 IO_NR13 +00:FF13 rNR13 00:FF14 IO_NR14 +00:FF14 rNR14 00:FF16 IO_NR21 +00:FF16 rNR21 00:FF17 IO_NR22 +00:FF17 rNR22 00:FF18 IO_NR23 +00:FF18 rNR23 00:FF19 IO_NR24 +00:FF19 rNR24 00:FF1A IO_NR30 +00:FF1A rNR30 00:FF1B IO_NR31 +00:FF1B rNR31 00:FF1C IO_NR32 +00:FF1C rNR32 00:FF1D IO_NR33 +00:FF1D rNR33 00:FF1E IO_NR34 +00:FF1E rNR34 00:FF20 IO_NR41 +00:FF20 rNR41 00:FF21 IO_NR42 +00:FF21 rNR42 00:FF22 IO_NR43 +00:FF22 rNR43 00:FF23 IO_NR44 +00:FF23 rNR44 00:FF24 IO_NR50 +00:FF24 rNR50 00:FF25 IO_NR51 +00:FF25 rNR51 00:FF26 IO_NR52 +00:FF26 rNR52 00:FF30 IO_WAV_START +00:FF30 rWAV_START 00:FF3F IO_WAV_END +00:FF3F rWAV_END 00:FF40 IO_LCDC +00:FF40 rLCDC 00:FF41 IO_STAT +00:FF41 rSTAT 00:FF42 IO_SCY +00:FF42 rSCY 00:FF43 IO_SCX +00:FF43 rSCX 00:FF44 IO_LY +00:FF44 rLY 00:FF45 IO_LYC +00:FF45 rLYC 00:FF46 IO_DMA +00:FF46 rDMA 00:FF47 IO_BGP +00:FF47 rBGP 00:FF48 IO_OBP0 +00:FF48 rOBP0 00:FF49 IO_OBP1 +00:FF49 rOBP1 00:FF4A IO_WY +00:FF4A rWY 00:FF4B IO_WX +00:FF4B rWX 00:FF4C IO_KEY0 +00:FF4C rKEY0 00:FF4D IO_KEY1 +00:FF4D rKEY1 00:FF4F IO_VBK +00:FF4F rVBK 00:FF50 IO_BANK +00:FF50 rBANK 00:FF51 IO_HDMA1 +00:FF51 rHDMA1 00:FF52 IO_HDMA2 +00:FF52 rHDMA2 00:FF53 IO_HDMA3 +00:FF53 rHDMA3 00:FF54 IO_HDMA4 +00:FF54 rHDMA4 00:FF55 IO_HDMA5 +00:FF55 rHDMA5 00:FF56 IO_RP +00:FF56 rRP 00:FF68 IO_BGPI +00:FF68 rBGPI 00:FF69 IO_BGPD +00:FF69 rBGPD 00:FF6A IO_OBPI +00:FF6A rOBPI 00:FF6B IO_OBPD +00:FF6B rOBPD 00:FF6C IO_OPRI +00:FF6C rOPRI 00:FF70 IO_SVBK -00:FF72 IO_UNKNOWN2 -00:FF73 IO_UNKNOWN3 -00:FF74 IO_UNKNOWN4 +00:FF70 rSVBK +00:FF71 IO_PSM +00:FF71 rPSM +00:FF72 IO_PSWX +00:FF72 rPSWX +00:FF73 IO_PSWY +00:FF73 rPSWY +00:FF74 IO_PSW +00:FF74 rPSW 00:FF75 IO_UNKNOWN5 -00:FF76 IO_PCM_12 -00:FF77 IO_PCM_34 -00:FF7F IO_UNKNOWN8 +00:FF75 rUNKNOWN5 +00:FF76 IO_PCM12 +00:FF76 rPCM12 +00:FF77 IO_PCM34 +00:FF77 rPCM34 00:FFFF IO_IE +00:FFFF rIE diff --git a/thirdparty/SameBoy/OpenDialog/cocoa.m b/thirdparty/SameBoy/OpenDialog/cocoa.m index cfb2553a8..fd9af3ca6 100644 --- a/thirdparty/SameBoy/OpenDialog/cocoa.m +++ b/thirdparty/SameBoy/OpenDialog/cocoa.m @@ -11,7 +11,7 @@ NSOpenPanel *dialog = [NSOpenPanel openPanel]; dialog.title = @"Open ROM"; dialog.allowedFileTypes = @[@"gb", @"gbc", @"sgb", @"isx"]; - [dialog runModal]; + if ([dialog runModal] != NSModalResponseOK) return nil; [key makeKeyAndOrderFront:nil]; NSString *ret = [[[dialog URLs] firstObject] path]; dup2(stderr_fd, STDERR_FILENO); @@ -32,7 +32,7 @@ dialog.title = @"Select Boot ROMs Folder"; dialog.canChooseDirectories = true; dialog.canChooseFiles = false; - [dialog runModal]; + if ([dialog runModal] != NSModalResponseOK) return nil; [key makeKeyAndOrderFront:nil]; NSString *ret = [[[dialog URLs] firstObject] path]; dup2(stderr_fd, STDERR_FILENO); @@ -42,3 +42,25 @@ return NULL; } } + +/* The Cocoa variant of this function isn't as fully featured as the GTK and Windows ones, as Mac users would use + the fully featured Cocoa port of SameBoy anyway*/ +char *do_save_recording_dialog(unsigned frequency) +{ + @autoreleasepool { + int stderr_fd = dup(STDERR_FILENO); + close(STDERR_FILENO); + NSWindow *key = [NSApp keyWindow]; + NSSavePanel *dialog = [NSSavePanel savePanel]; + dialog.title = @"Audio recording save location"; + dialog.allowedFileTypes = @[@"aiff", @"aif", @"aifc", @"wav", @"raw", @"pcm"]; + if ([dialog runModal] != NSModalResponseOK) return nil; + [key makeKeyAndOrderFront:nil]; + NSString *ret = [[dialog URL] path]; + dup2(stderr_fd, STDERR_FILENO); + if (ret) { + return strdup(ret.UTF8String); + } + return NULL; + } +} diff --git a/thirdparty/SameBoy/OpenDialog/gtk.c b/thirdparty/SameBoy/OpenDialog/gtk.c index 378dcb4e5..2b08f1df8 100644 --- a/thirdparty/SameBoy/OpenDialog/gtk.c +++ b/thirdparty/SameBoy/OpenDialog/gtk.c @@ -1,4 +1,5 @@ #include "open_dialog.h" +#include #include #include #include @@ -6,6 +7,7 @@ #include #define GTK_FILE_CHOOSER_ACTION_OPEN 0 +#define GTK_FILE_CHOOSER_ACTION_SAVE 1 #define GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER 2 #define GTK_RESPONSE_ACCEPT -3 #define GTK_RESPONSE_CANCEL -6 @@ -28,6 +30,19 @@ void _gtk_file_filter_set_name(void *filter, const char *name); void _gtk_file_chooser_add_filter(void *dialog, void *filter); void _gtk_main_iteration(void); bool _gtk_events_pending(void); +unsigned long _g_signal_connect_data(void *instance, + const char *detailed_signal, + void *c_handler, + void *data, + void *destroy_data, + unsigned connect_flags); +void _gtk_file_chooser_set_current_name(void *dialog, + const char *name); +void *_gtk_file_chooser_get_filter(void *dialog); +const char *_gtk_file_filter_get_name (void *dialog); +#define g_signal_connect(instance, detailed_signal, c_handler, data) \ +g_signal_connect_data((instance), (detailed_signal), (c_handler), (data), NULL, 0) + #define LAZY(symbol) static typeof(_##symbol) *symbol = NULL;\ @@ -35,10 +50,20 @@ if (symbol == NULL) symbol = dlsym(handle, #symbol);\ if (symbol == NULL) goto lazy_error #define TRY_DLOPEN(name) handle = handle? handle : dlopen(name, RTLD_NOW) -void nop(){} +void nop(void){} + +static void wait_mouse_up(void) +{ + while (true) { + if (!(SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT))) break; + SDL_Event event; + SDL_PollEvent(&event); + } +} char *do_open_rom_dialog(void) { + wait_mouse_up(); static void *handle = NULL; TRY_DLOPEN("libgtk-3.so"); @@ -87,7 +112,7 @@ char *do_open_rom_dialog(void) gtk_file_filter_set_name(filter, "Game Boy ROMs"); gtk_file_chooser_add_filter(dialog, filter); - int res = gtk_dialog_run (dialog); + int res = gtk_dialog_run(dialog); char *ret = NULL; if (res == GTK_RESPONSE_ACCEPT) { @@ -115,6 +140,7 @@ char *do_open_rom_dialog(void) char *do_open_folder_dialog(void) { + wait_mouse_up(); static void *handle = NULL; TRY_DLOPEN("libgtk-3.so"); @@ -155,7 +181,169 @@ char *do_open_folder_dialog(void) NULL ); - int res = gtk_dialog_run (dialog); + int res = gtk_dialog_run(dialog); + char *ret = NULL; + + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + filename = gtk_file_chooser_get_filename(dialog); + ret = strdup(filename); + g_free(filename); + } + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + + gtk_widget_destroy(dialog); + + while (gtk_events_pending()) { + gtk_main_iteration(); + } + return ret; + +lazy_error: + fprintf(stderr, "Failed to display GTK dialog\n"); + return NULL; +} + +static void filter_changed(void *dialog, + void *unused, + void *unused2) +{ + static void *handle = NULL; + + TRY_DLOPEN("libgtk-3.so"); + TRY_DLOPEN("libgtk-3.so.0"); + TRY_DLOPEN("libgtk-2.so"); + TRY_DLOPEN("libgtk-2.so.0"); + + if (!handle) { + goto lazy_error; + } + + LAZY(gtk_file_chooser_get_filename); + LAZY(gtk_file_chooser_set_current_name); + LAZY(g_free); + LAZY(gtk_file_chooser_get_filter); + LAZY(gtk_file_filter_get_name); + + char *filename = gtk_file_chooser_get_filename(dialog); + if (!filename) return; + char *temp = filename + strlen(filename); + char *basename = filename; + bool deleted_extension = false; + while (temp != filename) { + temp--; + if (*temp == '.' && !deleted_extension) { + *temp = 0; + deleted_extension = true; + } + else if (*temp == '/') { + basename = temp + 1; + break; + } + } + + char *new_filename = NULL; + + switch (gtk_file_filter_get_name(gtk_file_chooser_get_filter(dialog))[1]) { + case 'p': + default: + asprintf(&new_filename, "%s.aiff", basename); + break; + case 'I': + asprintf(&new_filename, "%s.wav", basename); + break; + case 'a': + asprintf(&new_filename, "%s.raw", basename); + break; + } + + + gtk_file_chooser_set_current_name(dialog, new_filename); + free(new_filename); + g_free(filename); + return; + +lazy_error: + fprintf(stderr, "Failed updating the file extension\n"); +} + + +char *do_save_recording_dialog(unsigned frequency) +{ + wait_mouse_up(); + static void *handle = NULL; + + TRY_DLOPEN("libgtk-3.so"); + TRY_DLOPEN("libgtk-3.so.0"); + TRY_DLOPEN("libgtk-2.so"); + TRY_DLOPEN("libgtk-2.so.0"); + + if (!handle) { + goto lazy_error; + } + + + LAZY(gtk_init_check); + LAZY(gtk_file_chooser_dialog_new); + LAZY(gtk_dialog_run); + LAZY(g_free); + LAZY(gtk_widget_destroy); + LAZY(gtk_file_chooser_get_filename); + LAZY(g_log_set_default_handler); + LAZY(gtk_file_filter_new); + LAZY(gtk_file_filter_add_pattern); + LAZY(gtk_file_filter_set_name); + LAZY(gtk_file_chooser_add_filter); + LAZY(gtk_events_pending); + LAZY(gtk_main_iteration); + LAZY(g_signal_connect_data); + LAZY(gtk_file_chooser_set_current_name); + + /* Shut up GTK */ + g_log_set_default_handler(nop, NULL); + + gtk_init_check(0, 0); + + + void *dialog = gtk_file_chooser_dialog_new("Audio recording save location", + 0, + GTK_FILE_CHOOSER_ACTION_SAVE, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Save", GTK_RESPONSE_ACCEPT, + NULL ); + + + void *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, "*.aiff"); + gtk_file_filter_add_pattern(filter, "*.aif"); + gtk_file_filter_add_pattern(filter, "*.aifc"); + gtk_file_filter_set_name(filter, "Apple AIFF"); + gtk_file_chooser_add_filter(dialog, filter); + + filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, "*.wav"); + gtk_file_filter_set_name(filter, "RIFF WAVE"); + gtk_file_chooser_add_filter(dialog, filter); + + filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, "*.raw"); + gtk_file_filter_add_pattern(filter, "*.pcm"); + static char raw_name[40]; +#ifdef GB_BIG_ENDIAN + sprintf(raw_name, "Raw PCM (Stereo %dHz, 16-bit BE)", frequency); +#else + sprintf(raw_name, "Raw PCM (Stereo %dHz, 16-bit LE)", frequency); +#endif + gtk_file_filter_set_name(filter, raw_name); + gtk_file_chooser_add_filter(dialog, filter); + + g_signal_connect(dialog, "notify::filter", filter_changed, NULL); + gtk_file_chooser_set_current_name(dialog, "Untitled.aiff"); + + int res = gtk_dialog_run(dialog); char *ret = NULL; if (res == GTK_RESPONSE_ACCEPT) { diff --git a/thirdparty/SameBoy/OpenDialog/open_dialog.h b/thirdparty/SameBoy/OpenDialog/open_dialog.h index 6d7fb5b2a..35484108d 100644 --- a/thirdparty/SameBoy/OpenDialog/open_dialog.h +++ b/thirdparty/SameBoy/OpenDialog/open_dialog.h @@ -3,4 +3,5 @@ char *do_open_rom_dialog(void); char *do_open_folder_dialog(void); +char *do_save_recording_dialog(unsigned frequency); #endif /* open_rom_h */ diff --git a/thirdparty/SameBoy/OpenDialog/windows.c b/thirdparty/SameBoy/OpenDialog/windows.c index e71103206..5a0af0e32 100644 --- a/thirdparty/SameBoy/OpenDialog/windows.c +++ b/thirdparty/SameBoy/OpenDialog/windows.c @@ -1,57 +1,104 @@ #include #include +#include #include "open_dialog.h" +static char *wc_to_utf8_alloc(const wchar_t *wide) +{ + unsigned int cb = WideCharToMultiByte(CP_UTF8, 0, wide, -1, NULL, 0, NULL, NULL); + if (cb) { + char *buffer = (char*) malloc(cb); + if (buffer) { + WideCharToMultiByte(CP_UTF8, 0, wide, -1, buffer, cb, NULL, NULL); + return buffer; + } + } + return NULL; +} + char *do_open_rom_dialog(void) { OPENFILENAMEW dialog; - static wchar_t filename[MAX_PATH] = {0}; - + wchar_t filename[MAX_PATH]; + + filename[0] = '\0'; memset(&dialog, 0, sizeof(dialog)); dialog.lStructSize = sizeof(dialog); dialog.lpstrFile = filename; - dialog.nMaxFile = sizeof(filename); + dialog.nMaxFile = MAX_PATH; dialog.lpstrFilter = L"Game Boy ROMs\0*.gb;*.gbc;*.sgb;*.isx\0All files\0*.*\0\0"; dialog.nFilterIndex = 1; dialog.lpstrFileTitle = NULL; dialog.nMaxFileTitle = 0; dialog.lpstrInitialDir = NULL; - dialog.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; - - if (GetOpenFileNameW(&dialog) == TRUE) { - char *ret = malloc(MAX_PATH * 4); - WideCharToMultiByte(CP_UTF8, 0, filename, sizeof(filename), ret, MAX_PATH * 4, NULL, NULL); - return ret; + dialog.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + + if (GetOpenFileNameW(&dialog)) { + return wc_to_utf8_alloc(filename); } - + return NULL; } char *do_open_folder_dialog(void) { - + char *ret = NULL; BROWSEINFOW dialog; + memset(&dialog, 0, sizeof(dialog)); - - dialog.ulFlags = BIF_USENEWUI; + dialog.ulFlags = BIF_USENEWUI | BIF_RETURNONLYFSDIRS; dialog.lpszTitle = L"Select Boot ROMs Folder"; - - OleInitialize(NULL); - - LPITEMIDLIST list = SHBrowseForFolderW(&dialog); - static wchar_t filename[MAX_PATH] = {0}; + HRESULT hrOleInit = OleInitialize(NULL); + LPITEMIDLIST list = SHBrowseForFolderW(&dialog); if (list) { - if (!SHGetPathFromIDListW(list, filename)) { - OleUninitialize(); - return NULL; + wchar_t filename[MAX_PATH]; + if (SHGetPathFromIDListW(list, filename)) { + ret = wc_to_utf8_alloc(filename); } - char *ret = malloc(MAX_PATH * 4); - WideCharToMultiByte(CP_UTF8, 0, filename, sizeof(filename), ret, MAX_PATH * 4, NULL, NULL); CoTaskMemFree(list); - OleUninitialize(); - return ret; } - OleUninitialize(); + + if (SUCCEEDED(hrOleInit)) OleUninitialize(); + return ret; +} + +char *do_save_recording_dialog(unsigned frequency) +{ + OPENFILENAMEW dialog; + wchar_t filename[MAX_PATH + 5] = L"recording.wav"; + static wchar_t filter[] = L"RIFF WAVE\0*.wav\0Apple AIFF\0*.aiff;*.aif;*.aifc\0Raw PCM (Stereo _______Hz, 16-bit LE)\0*.raw;*.pcm;\0All files\0*.*\0\0"; + + memset(&dialog, 0, sizeof(dialog)); + dialog.lStructSize = sizeof(dialog); + dialog.lpstrFile = filename; + dialog.nMaxFile = MAX_PATH; + dialog.lpstrFilter = filter; + swprintf(filter + sizeof("RIFF WAVE\0*.wav\0Apple AIFF\0*.aiff;*.aif;*.aifc\0Raw PCM (Stereo ") - 1, + sizeof("_______Hz, 16-bit LE)"), + L"%dHz, 16-bit LE) ", + frequency); + + dialog.nFilterIndex = 1; + dialog.lpstrInitialDir = NULL; + dialog.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; + + if (GetSaveFileNameW(&dialog)) { + if (dialog.nFileExtension == 0) { + switch (dialog.nFilterIndex) { + case 1: + wcscat(filename, L".wav"); + break; + case 2: + wcscat(filename, L".aiff"); + break; + case 3: + wcscat(filename, L".raw"); + break; + } + } + return wc_to_utf8_alloc(filename); + } + return NULL; } diff --git a/thirdparty/SameBoy/QuickLook/CartridgeTemplate.png b/thirdparty/SameBoy/QuickLook/CartridgeTemplate.png index 5bf1a2fb187112ce7d09e69cab9c92b2366551ad..3d6d600eef7822c0e958007d715a82d5b834e2e0 100644 GIT binary patch literal 80261 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

?(dx6j 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 NUmZ^S=v5gJQB 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 S5x)Y!KUGC7g?INXga02Nl2R-H literal 129141 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%0A@6Z=ILl;3QkZRUlu_Wz>tl|; zYxQ&_D|gDH+{X4D)!(af!ozPfM<3anHn<7hyh>mMGJoUaQpBj+(#rU}mzK7{ip-7i zy$Nc!4{F`bigs|->5XH<7;b|m~=<2wNW7& z^vLbBAdFZTL$;Sj`#hs?ToQ#)4sIl)otu|OiZ*#Qvsl@>QZ_GHu8K%RtG)aMIvA^}k@rD%o8^&9M>bGII-B-qF&-|daPjFQ+I zb{~6Htlcw_i7-vv!mQk~_2Tr|Sjhp6K_;ldC*c;C+T^{-m?%flBE>0;_y9fxnO13D zKX)HXDX$=VmRwnC(U+V^jnryoJ_zu8&FRBOn+gUh0yoa%n>Nw&Zzngc5Pperu+q_u zGSjRYi*+SHI@HEvVEo3IklWF zlc!If3JlUT9elmn_Bw)H+=*0HPDE_@5_>G4Ke}q#Tci}jrgd&GpRhmU6i17#{~EdEoteU9T8tn54}( z`DeV!`Zvpp1=GIB>L6Ht6FV=`vQFI3HyDIRD{gEx(oen8M;s#oKYN$O2sX+eNuxZu zb1r_3lpg^< zupzv@ACENG;o8?O;M|vg&>d01ewB&_}je~0*O--6Na#DSS}Uj1%h|S5p-(NjohuE zXyd!kb`;jw`bse&ha5mse?wZ6ryqx(qjnePPWi7Yet)|`%Y`pV`dsLr6UWm!lW7XL zo^HFo+xkGPC5BfD7Uj4KW>IBXov^4*{<+|7y}Hm+l=CLTw`4c-t-9io%F^7+ug1o_ zl1Q<9hHprhn26hZ3@wjQNT=f9KpeBB-{6&i&+YH{1_-)FOf6!riPl+QqQZpR~? z0`Tmx`rLw%dF2D_bKMv|mOf{de&^!YCPp`UIL4&Kb6XV3GoQP=Yr zrSwT#+I!rFIto6pXx3dT+AkN{E7<1SVlOc=Gc!Z02zeU}{A&yc173&?1*O8~X3zeb zN+LQya1vacI$RhlE>p3XwOGusbtdz&NxIEp2*l+X7tF?u-;9ZgiLqV0^bzr6tby65n&wqdkh8IDyHZhFa@ZK9ex#ud(2ZIPx;Ctx3BucNg_1UwZ6IOghC8FJSbbZ#F zu<>CQEkgId`<_5qgrC&zuUpa~@GS&tOK!weSYeffDe#BhW2T7f#Wq0_Qt%G%_Y`$7 zj}yZiWoSvN*^DIo7^Y83o2tfv1pG!jZ}TbZUt$(6%#HjK2lFF~(lYuy6PYK#av*R{ zv$*LUM;ObMe=a`qR<&2s*9bA3EH$n9eUd?2H?G~c9UKp0JJ8S9(146+&j_3c)PW@LV}Oba=w&Tm(78a2u_yMRz6TQt;??K+^;f1RfFF_V7C{rQbi|i&dr~ z6;|rv55eC+SJgonee!A7Y}+?7Y%pAu=6p8TZ3mvvjJh76=r=cfdp`w4KVV$kQdGfQ zom#BRr5A~!%VoCjxd*$Ee93h^#$7Cen6jfZwoDb~&@1Yz2!#1wo4gUY1O1q_O_;e& zj65{u0h&VkgO?L&Q}6&|DCO|X<)m4(?stejYEasnCpI(nOQOxNw1;G}^7+@S?e1e< zWj(9IO#?G-IkX(PD>YC1<^6wLk6i4P)4-Ye9QcTvn(^Xoy7j5fSG8oE@|A{mnxk~!ezLiQTJF!ClvA+w1RRTs#**?MkZ2PpV%1HP_P9lr(dT zN?9YnnZ|6NQQey$dB*4NNQnrV@NmSFt8URb(rVg8WyoiB$n)|$_Zz%*HBEWDHR_IQ zG&%Zgq4r^l$kx^QlYKC~ze6Cs$ouZr&JHKPjezwVI2){hCv9<9eA(ytJER;Az z%0mxCwj5883{P>gm zS3%aFhA5PhvAUB(JIqw&I_C=9KhM5$Jzz5Q`BR7gkL|g2$MBX{YUW>8`yP3;s>j$M zx#s>DT3s6%ULGfnZcp-;OiE=Cn^rtE{s&E09?10n|A%rE@hM5}K7H^ZLgl{m=|CvA z6f#E{A@?zxgi5Gf$<^h)@7w0c5=P19h&ie`#wN!w+kUU<`}=$E*Iw82dOV)b*XxC9 zS(N4 zL_q1ZQeMft6G}gM7T$4~d?#brTz8V(9E*47!_VEkUAeZq*cB1kCKOL`dT@m3YIj?E z4ZbGf6jKq-PwL*$enkCvRt$lIY*o=bV2k2?o7yNsArCR@3Em;41 zp#gUHE^YXZu+bH-LpkMY7hd9rPiB@LA-9Y0^1bbz&3Q9+a?Kp7``Ejbjj(R~wAsesg+FCp^lUHH3Md5oxz&pCx-Ox;Z8o~-Rf^y8Mo>rmu90U$zIQKgsAa4B zQNgwl%?6RXJ%$M08pTh^Yw(f3R4S{B{Cj;%2sK(Fx53kN+dP5#AdctgZL2vB@C+Land@vKR|}0U8xVigp3zwW19~i6IHq*b3No_KcA5 z?ZU5pPcZ!1nPeqdQSW&C)vEKoLU;U_U`5~1MaM#l{x`!X!fm;w29re?=~hz>-(TP_ zW+NR+XPhK+M`UMpyt}B=v8bRD_M>=8M|kBlVRckhGmh8{>c=am8;JtQoeOQbn-L$y zu;TnB-%-?dvMvH3FWL|1y#&M>?PZkB*WUmuu6r`u5o7`_Z!aIUk-_N2fYZn$&el>= zjHEGQSz|6I%jQ?@@=+~Zw+L2rGL^Qc#Qcfcvq1c`i~6a*L#iE$64ny;H99To$&=+} zJC`#2A}MEgYzz~<>ze55Eiexm({{_d3Ee##cv)-NO~)oD&T+x5$9(5zP)WgX=W1yZ zbv)PZSQMcQb23k3(vL5u&QUlrlxuBdxO($Vck3|EhT%lM$Ty7PwlD*Ab}u(#;h(x$ zhGwAD+`yigQ@3gxr|GM4;V#1RMOn`y;`7phoRy7EcEXMAwuJx8U!w}tNNzZCG zVj7o3#oNUSuOkMNt;e9sCgs4y-~kC2`>mSSau?&{qOyvXo~)u88n zC`1MO@lpxT{zwQ@%&8XE6xizLjgkL1gg>T5lQ%Hk%dc%o<^8)OE?`3KBCkSD38=*y zE~^GITK%ve2|tMxX&t;q)7t#58xwJ?f<~l7RmBCk@Fq7;&d-%i2~Jy8%!c0XB72o| zA_mHumi-G z2W?L#EvihOcA}{mx$+V_MW$&5etR|taX7!J@7+w1m;@D3*-|LMUOj|Ld&VA{vC-67?k~IPj@2+ z&h$C{ZIe2ez|8@#41R9<7YIpH)WCV5lt^N=WMf`QnxN`b-`2 zt?x$fgGZrHq1W8YJ!R%pn{843h^Rw}3n>zw4x*wiVV>&P)N&io3s_hF@a)B?3dYc` zX3vqWfQ18tvzksu6schINrC_TiNnRCXE?xhQ+o*Si^TN`s%I1-wlnaWXL2#kNEL0Z zTKeS?8K09PcR+nkN*dc6ennp*t72)R5||_&@hT0+iP)LglBBGXb=Z-d;>+%8;pLpg z0h?`5B$SUMS>wGBhps8N$hVls0mrLOcKbi!i0u%072)T?O(k?KYs3a@m0>cMVZx!e zy5B%~a<=~szBV~*Xs0@Jvl}K5^S4F#z)kyZDdmn{sBlk@dH8!wo!1bfx#Or<=%LDD z{)-lGM;#F7hdso#iHLy!;WuHN-O^&o8W7)ZrluX+a+3~G^OkSk zqRPmbvzrb^Rrjiv!-r{^4^;YRkLebCB{=h3#a13DqSJrg;(HFIT(%K-dzkD?92UCW zwR|oXwsVZ;bPQWv@8xN$>#pnMvEwFVTP(?e*K4{INfpFKtBI9b zkd|LX6Dy}`KWqXVlfz_y@>pg(f=Zx=F!PuU6qC%X)D@kv`1{yQ0x6yy;9beJUo=_O zZ6>Hf?j|$dBf!%jL?#PA`Nm(qcO<7=LpdqYI-5^pS*2aO;5y-Ae3z9<`-qTdDpcgY z*pE@z24=WetmJXH72NmGkbZ$cZ&J{Jz=FPP=wF^3MCEk>E>g^AZy&L};-%rX!$ajx zN-MSEX2Nb8qY8$Vn9T06w;hj?epv?nb3E5hQfr<{5&JcKD$I`W>4dUIx&;1$dHAiY zGwrB~-y5I3FArQ@Fq-M}Om&r7(&Y8Xb>7jGeD-mi^a>{yW2kcV=(=!a_^rRsJxYRJ z3$xK6fGhF_t~-j8FOij$9-q%rp}Cb;6fd7)%L9x4xz`K*CC<=t?{9q&A*;&ij+BW1lnto-I;)KITADVN`mPy>RW8}Y-skT zXm^c_50L~t=@4!lW*d`e1)<4fMe5WEC4zI65gZ!4wanDdBvvg)llgBBj**2oz{ zPaAT#nQ%{URF~z!zg>gDF$UH4qj$45>)3C?O>we$Kr6`$I zV-8w`>akNa$GjzfwTN%?Wr4RWMDU@#C);1;ifeOjqU9M=jp4USr{m2{NCFsi+)zue z11U@5yxyG1u>BjqLop2j8tOvrc|1pBj;@@+_!V*9Rd3giIqBKEoVvc<^0DRU30>@G zV2ocpgE1!MKLzn)3i!nF_RmX7Ig=ZQctk$3eVQEZ^z9CKyxf}CO-?@FkrylFm<^}m zH^p*|awH-SiC{~Qo{J6&KVvx{bs?S8Ao zC7J)LR(swA%~;srBXs%^zm4Hjjb)LHYdu(?wXsVyCyzq=@dwWco^W|$lURR+nVopj3-MsGR2YfNO(A969bkzeHuHrGq$(QaB z;-qW_9(fr(Zz`Ucs%|l#r(tdVuaC8 ziC1(u%O%c#udor27s^h|jDR=ge!yHyQ4#CjOzSXE_#m(AVFO&cc!D6UI{BofuXOv4 z9m}fW^!MVK6vSF114r1^r+>4ce>?G-$AEL6MR*`ElOVD;`I@gD9Uy^J(^ zj}hE9Oopu#41dCgmmR+z0+~nu)Z|6$9j@htseaP6i+MkG&%r74%VQWCGpzEeBrk76 zgQLM(eDKwru%~YP@Xj;XUi-WRez&7Dw6T4ZmeoDR5yedOLDS~|Z|tqgVK^BW3B@KMV!-pL`O&A0`XOAIl_{Yb>q zT0GHidIYL60Mn51cR9)d_2+tJf8Z>q2Dm6vt}WQV&r;!?&``VZ<0JAjx#;F*)Q!PYx2}{n{2j4|NHi>n2+e!iAD=GIt!<5Y%bzzit6I!4x`qIu z1PnL-AXSgoM3)l5&#@W~LGZCXE(C~3{$Cv%4t&#@&z`3=#4@aVNL8U{d+X>{#~0w? z`Q?eR{>xi`<3@^W)#uj3aJ1HGg;Sv#kKPO&eYoO(LY)7<5S!L9yP<$D^AD1nOfk1~ z39r_M;|Prl^lP=|$tRrw0RQF7*g`P!m_!7%lDUauptSRb=qJWA+$j94@bKcg&hkDK zVs0xj`;eoP|VPClRM|K^0Ge(WcPJ)hJZ>5jrxK~F~^UF_eOLyXOa%Q+GmrvgV+ z9>*-Ud=4U^jgw(n%kt~^;T_?NR{|?MPE>?nn@?P(lV^9ZHlEO8tw?_x_q8&$HJ}(+xbt%eM`gK=tLJFG^IhOU<^O%FF~j^DejN{VmQlIrNtPO#8gf zvcH+vt<_rF&O(j5k&b*7xtmRb(29qgB@Z8)sy21laUf6aVNV?>GoRI!!9H*00%Ur*h;S=Hdeh zmnSjSv3PCH4Ogl6)9)xZbI87>gvKSh&tLPaT-6W5%g+B5BJB^sYwaeGZ| zGzD}CtR~cs8a1uD-e}v^tv;-OthRNoWm8L9??_akT@rji?J552ExvE@@>Rr4D~6sZ zf#22kqhj5rzp;%Sovzk~NVHL|)uZN>qOWBK7KM~PL6q`zHrj71br5jc8$CIauFusP zsQ&jbS7tSWU+Oi?2fo}GVU8j;o$0&I+lLXe`m{#o3W8Qi)$NuP6Q$YCR9#$R@-tZl zyiDV}lniAwq7X!6%}WYBn`zZXf8krzt7~%tavxxo79VO79k;asUIKh36hAzS2^y{z z`E6>gPi%W+p2a1TyFymdBoedN?FXN>HGKT4-Hr+gzZS5;7E1buhPT4*+`O~}T`K|~ z3^Gs-U%iL4g|2&-%fMJfKMo0j(*K&K|NWR9ZML>qC}!{3SBk>pEGKQ4=@j zR4c7RZvCLgP?En#vsw`Bg(pLAd{j9g>S3HfH)m$b=nSdxvKN#D!230mHHn(p$pISi zHzUk&0^grv0F;vV&(3^Z@@8P;Gt94&)9m*;I*HzIFyd4weL&sSo!Cm}_ZON<4!R{8 zbtLDD#$g113|cZ5lE@`I59pX&PaYlc9X0U#w(R)VF7n5H z{Cj6nAFO79KgQ6Tv|TYOReHD*BbR-qR3af2H~Dd=x@|n*@sKAs$0v<3+fX`P6VsJd zJ9VNqvVbztw$)T2V$gH({#y3$<-a{@dQ!JC6u)$l#hp&ND1;C67A=bhZt006P*i8N zNTr=c53p9;B!$rks4wP1hdM1{$SnENZ^7yQUW!xLCca2Ze<^dQRs8)ZHs2vRQ=VEP zR~8}>R#6e%)HXPo)pXlAQs0q8&*xeBZn}1pMws7hxe9n*ejArX&ANzEac8Eue?p7Z zUC%w;xpAkIh$dXRJW^u$LeIOBQe6b1eJ+A&D(b^@RKRKc$|l6YWNdemWBs621#5cI z60qNGf=Br<3Qp>#$A#C|&)nC&j++u1Oa2kPji(^>3;q#vL;p-gu}B>zDDTbNb8$$g z%F{SN)EM&$q|DYtQEPb};N^x@J25V8vr)DT3A|T$ymv#=x?AF$tE3*KnA*IB?R#mt zRQ6si3^T|T3xp$Ia3m@%ASvgqs6YfBMJ6aTP>7Ykuup`B%8D!;MTq&IxwWlwc% zqL1dMifEg|nks9F$2|L1PeE$q2wx`F??dB1MUlNR8`3skqYAr_oA)vA%=5RBCi-zN zwnT#OP~>UfW6t!Si4kDt#c9k`5mkR?)2ZgO_9#I`UgAY)^rO;{g-wma#GFqbv2Qby zO5jno0rMhUiBXIn*}ii5YWaZxQ#{JpES#->8YGcwxwH~QfzIZPX+d!DZ21?t9PZ4V z!ya55!3z<0sI4+)P;g(^;2U~H0SixugxMemHx`Um~O7n_c>PZpq1~=i=I85 zXd~r+Z=tM0S0tWZ+f@~vo}7>m-K1!ZsruE5Nxt{*ct4)pw9he&G z&R&0IsWlGO4IPbx;HPp!=7}#*>W`LtlglOJ`zoT%zsj|p_3!ULmCcodD%e6n}?4j7ErS1XhFBzo!3O_pkF4d zTjG#-#l5^5qF)VEoWo1$WH2M@I3qr^T)s_BCE?B?{HkIbCY;lmOs<{X%PS53Au&DV z^zeq9w0=|$-8TlsHMw)nb|sHX%&8*GH-^M)o!FEZTFc0n+Y<8)CSgzARg0I(KoNOo z$-C>|J=UmEnf}TQKfb|PU9(yEn_{d|ECIpiQ-M-yoQ*8NW{6!7Ib)slY z55pKeUfW#?;@OrMnGr(Y*`1Ng{|1Vu#01aYDKME03z@d*tB3PF2U zYE&CJE3AfV7A`-wb#8J7f#({~n<>s+7s(y5KB%&~rHvnE``u})Akq-W)Le}dU``Jv zqnLaV;!YlmrPx>e@;d)kht9~h*_x_u+h24sS__Lq8%R36*DzQQXytdPd00&A+3(b&kJkv|N%W%?A4e;F`47ZGmoXEb zOy4^*Tjz?_qpd@8jWjCO_BN3Pk}1_9ff3LD?NE!#*(HdSy4>4?f1Q7sRWEWi0_|E) z&2H9mQtE7>G-`u2rM($(F2%9yMd`KO!jD31x0+6g(d2k{aekzDzr>H!@}~DlNk_!( z*8&^2NV+nd_A;p66$C1t;9u!n`F!?`0D6P@o(}{6MvGnh;bRm^KhF7jP1j?M>ZKh& z|GVgHTa>Br_wvzzt$;C(!|l2Shl#Hm%_O+Jbfw;&D$1vfP7&ZUMUVO)6t|ce-jZ?3tAGw%%+qEhE1^e0a zGesr9i#Lx}9mY^%BrxanTfw_L;5^$Se|tVTW&KV=FOf=H+CPhDUUtYYF29Ug^<}Q0 z=*hbs83^9)H`_r3D##r>1=aaDGIRJFXMO$A&i>aho2aR4ZV^wC*ne=4lJaZe7uNdT=x?z;28xDQZ5Uz+)_ntnv+Sa)d*Dq3o z^Xzx!uvLEpa=}-QKI|lKCNFioJa`r-e_bfXK(g5FZj@UmGQoth>k8lQM^Gg9xR^9& zRu#t?IDy#%zl^$#w*m1u$i#zcD3HP)Z4DuB;29InBcQ^oght06rkzfjg<-5GWPV28 zTh$o?bxE^OF-&|VbDBVlKv;d1ytvU@XlcRq%!;(%BSyE7CLK3B%E?Eh+u{HWvgEZ|hzmryysU6MHOOQrCN4^qh+B znNJ+-POz@?Pus9qaE@sQTWQ6`B2r>F**a)bWJa7s<5~i(0u!|1FaEtmakKh~T$zfr z5LgCguVHlYZX199zmal7{g&0&O=W~6pJ|^66V0hbI?Cj7_kjI;HbKKLO+xoWP;dR`V zr;Y;4paNox{G5$dNMINPVU_%C7k{3{b^QDSOB;7?;60T1Vu*nfT;qu)gMm>F29A4o zC=cX__O>(Lh79V#PH@tzFZzC8 z-zrcHCnY{Fd>i(0Pll6KK1BJ*t!>%UiTGaMdzd}^BZ82Ip#^s=_sHK1qiy*t(+!ZI z07u6kHJ#xQ)k+Y3nWB2OL;AUI|Hw_{Hwk=#;2%21qztl=)jl%w!5F8?zS=A}>=Ho^ zodF4S?c(IZ9EFJG6g~?Rhgi@ht-T;UoE}HcGpsjQ>+#?rBxS1i8ib4q`-^Doey^}@ zW$8lfWb0>h3-qZMY{>Vm6H?5wm%sHNasG2TnXJ}N2xAi|y?hu{-00tFP<8Rlqn(2g z7(+B~r*F-6atAafpy>i)kRwlk;7ncmN?lpEl@2F4ehy7TNK%~3?z~vJ#A>T#m=@N2 z^Dl!ToR~EHqn>_z)YO}r)LOgoQ67zd&Owkq1%$@uYjD^zNxJv>dBZnRvE_j z(NJdp5_?Z(RBR^-@BW*HQKoqAae!Tm4(mi|Uf^}&^{X1X?Fk#iRq-pbmgb*nW=$ru zbM=0m*~0b#b689i8S^op?HR%VxGUvK-enkOZ&~`gJ}g0o7FBag9kii2*8AW|lZ>#b zf>CyM7&rSf`Fd0QwD+Pstv6{lqC-$hO_?>Im-(r?*ZI*2%#SX}iy#Z>f~<4r z9ggP!g+}N|Fb&3fCtOk_^^3&hIPUxhCI=`n5r&?WT!>IB^d(0&R%Q%mWOWf)bxBB9 zReQqGVSI8J@=a~!iBh)V52;#DfkZ+`U5D9vHxNn-q!g`olQsPzc8VfLv=M(4^7QgQ zx~0~Ma8Z#LXCp(8k82XI{SXF~YqFX|m3%?2b$?CIQXe_AUDu4hdHBnZPmE4;K&~`C z>g>RCXpCcu6d&ru!QAUPfha&|2ib(OQZucCIW!hkMA2mGH>SB8tM1M3u9-0DOyue) z!!B)!8RF}w;SD~QyylEefb6y)ESS`rkeG&R7UX%h_>U}E^W_hCxq)3>Ph~oNEtEgW z9wTwM543RMlFL7}F{v|3fI+suVzWM|4DBvd*|yg3#Ue+R(!j6|R z`EiBoXe2)1_roD4@)K`!F%eY=az%^ciga3G)(#ug2^|nFd)w^)3G}lyKY7m4j%y53HxdIR^$hK6O{5^(09i=pz-34v` zblw0+c~Q#Lv=PTFxLqdL`NTu^#_aXm?w;UdNMxU-iIGVk?e14K|9MHhdHs?yy1xH6 zmJz(k_q+YCdtKD_q5=8E0g^tLbBDL12l;)X{CIZ8aI$tR<9k{8We8mZRC*opuD*Qw zKF2~QBw3247M<&=_A^`dh&XGVRB{)sEt&07Gi5$6!QM?Y^LMf#flL|r4~~g(?wD;) zm-t*kwn(ssvvrIH(`(X)ITFbP@U8}o`_R6dSgIe~rEbl_==9TSXG4t3^RvNny2#4q z@`=K~!%%Sq>r zQrQrayMcONnv2{xu3kgV&9GW{`YgJd-PPd)T9L!IZD)*6wM?;G8fOWJOGu*65UG_d z+ZvQfugEwr?I<+(v&sP8zHM?i?O*F+P>RW6({YhnVojWc@nC8@zCH=l-1(7sBBbM9 z{}$kr`aO}Xg;GyjVYHcew-G#!+Hu`)n*D z@@DQeLP=yK_Hs8hz5OP%=0|qn^-yr-2gJE1yS8#C&wCg(<^$tks6^JC(m<;rHTGt> zG|u@7UQR1_^=KUmIYHL9@;{$Cbvht%$7wcWFkd0@UZrXK!%lSf1B9GJV_ zJo(GK%q`J??Y5D0IX`nbzJ^s^(1^BZ6YTw)C(ASKi8y)LOg<=An27|_pu`zX;No?Q zNz%&^z2U(~bukIS1&u(^qV;ztv&iztP{zUS*9ZcqpKYHYi{0ir0=W>bz`0-usr*}X zglShD4E}z`Xy(|3Y0qWruS`1{r99Uiu9F@BsuBHM0`5vh&M-gJh@!{u>nc~7D8;fQ zyz1DQ&pIX6G-@D%FsFHc^7|tQn*mEBR4yFIIe4IAmZqXHgXdjl0*MMvx72bFn334^ z@jqEOv^De=1v?cs-*3%`G{v#C zSDsqug*dO1`HZj00+C=D$^h&*%?HX23Ef2@rc2xc)t({z0(IjdT==`CyNJ;S_%rK< z7mGIUKADB?efpykqYz5e_{ZG`CzerRoSv1KXXd?n8ajWwXtXpR;=C|n*|&O!LMRdB z@m`5xKL?gnyIL_5UO?cYCVoC*p1VahJ=iuB@^c{?Yyt^_J}Pq1Vui}-ekidwH9$gI z6}JGIxS*tv7T*H5W{+u z6~J^Lb3UX_q*~spS#-$u;b#B$J5e=TB#BjEjQJT$H1PZr;;w>_@sRvqu0u!fTAAeJXDNzlfo^Um zZq1r%wm+}sXG{)fXcsFS-)|t)NK3c}?KnR3ucK0WK(3WZ;#Eno$YVCxajV@d`G05V z&3$@#iW#DK2_G@>OHQ$R;m~i(9qezzo8UN7}dMnO76MC3Ur$8&uR%< zzw1po2=Pcutv*X^`;l#TMhC1HGH2}3HP4t`r+j1p4BptsNtY08nt-xAOmroic!}N3mVyu8d}Zkc0pJ>ocYxXx%%~`<=h0= zlCc{m_pbN-+HlXVg~RKIPS7SA54-W~OA9|_Tj-n<7uu@VHZ90)+J1WiAp%Z%AjKX2 zLThBsJ7jyN@mdVAHzlwmK^J09P)U{Br28>Z%)3T0HF0S0=a4OO|Lv|ZkI@FfnF__z zQd?_#FeK2a>rUS*ZRAAOKUfO*)nIsQE}m=PfFy!=4Q*~|664eVy~qs``s){fWN2DM zhYpe@C6FT|x5PMt+Qi?zwQvMCALgS-wp9_h-xUPjnfXlG3?V_C_5f-Abx^NO4?X&j zgYODISlfA#autft9dr3huCAkFPWfli|NUhE+R#6w#@RiDIMs#K=}leA$639%{C-l3 zwf6HM&Jd_n;dWUb z6f)J^x5Q-@zmBPuetv{aX&7g`S|x)&=l)}d_^wpefCo#TZq~bXoHp>~!~T8f6KgUn zxd9y$#18Lu52zSC@9Wh7Mt)oMe=CHK^dmt_iY%vnOMtUaFaqcp2wq zvZ*F{Yv)ovg-}+rw{Ik>*RB_DF)e@Uf5(p#zX~}xb#>H&fsGkr$6@CN@AwhoJ3EwC zHu}UIl#%;I>|8=;x_506QMY-8r0lz>aGpP6*%676A@udpd}R+G2)$kCxczz!9OHs; z1($H{z31D~4gcnbRCiI*%}wl z0yLp6;9ou_i@UxZd`^Pf-pZu>pBo2QCRJZ9UuNSAus4XIg^iUQ_?5z1xZZ;eKQ}kX z%t9MFukiVfIV2?Q;yKwg?sI8Su$jRgs+k^XH_hI|;WskT4%X>`=5L4gJ+>Dg{vn7+ zH1CsWQ6ToKdw2epHW(R=i!IVc|874gMVifMfgq<7*C!?>VhX|^C$Zi$%sdjKQGOAs zl2bO?a17nGzbo;IY?NKIX}k5PDVwhr4*IJfYD!ZqRw3~p6=afD-_=MA;N$v4l3U>$ zpyh`|Fe*}IO5IH%Bzf$I14Pz=%`;5|(w+$a_XnspK}UaNS9xy|YwyhNhZDNgVf@;g z3v!MX*aZJ@Jm-iS2=V(pFo@gr3-JN2b!xiId4Dz~JorwrhwRn=zOhSNu`&Um|;-Sn8a4LK>5i%#n}LIW!P<5FO6tGPeHiUDmh zYZB#%ZT6_aQaYjBf(RAoKN9+ucm}}CUJ+rj9J{!7nB$S*BGMrNJTt-%eHdF63qn}5 zIl!|A*>Czx(!$nIvby(~M2B3T1sc##WX#R_OAj55$soMduO&NMAL`p~Ik$i4N4q8( z9GIz;Uu4!EWQ&aO9QxH}vMYb($Q2g3GgajC3t{UZ`6~uK1Vk00bkFVoK_>`^eq>+i zKhRVp$S!8Rqy@Unf|DyO4?|cy3tCmG-KLm#@@C8z))}MYt?_Y>L|C)auHng)-WazP zB{iP4-iLI@^cORt#OUGCsb(K0WHia~+4#CIBRXFp7)WKFDZPE20{U0iL2? z4ev)#knuMFTU4idL1_AFw)MMD)$d5-e-Dc9!zw#dlfDGah}mD7ktjUv9y7t7ofQ?l z-PvW_aFj9d{%IG7WCQp8zXN{^_1kw>O;>AM4Bvf)h%P?wPgoS#L%QNnD z`|nyF!?wl^^}W#Fa8FGZM?t$Pr;3wpy_Z$hyzE~nlQ-;Oz4v-UR*C2%7Cp8psD)S3%=Saq1 zYb6eU3dG%gw$)zyq0e#TOwC?TWSvGr(lIJ>(uBA7cw?9;Cc4P+UB5;FVV6HVnAvFka2%&A zpJd_(&HTUyRhGFJvw%8emYdkFd(+kOhHs3bU?0yyq<{;b7#HCo=oQ>}A{-%vBoGg} zr~WV2F~)|~`DBvS3f3+#9o&1J<;U4NRHd{vffD(-=r#G4-D#R2=CaMeKG{0F%>=+V zpx~hbOS-+!^;+$lIY@#(|(6>?|i6 zF7>Oidx0~~Q?v|0bjay2HK_E-gctyUE9&IjHoJQPC%|i8f9d6wR`3Ef1U!rmf((W8 zwS4qOoZfx;N%mg%tZOsKeVY(sGk&(9)(~~#`IBhKkf3n>%V1zIk+(USM%b_##)KU2 zYAdCli(AVlMQ?*(06`idV= zR<}}2ixrQ34=oZ*d_pw_g6+u`t;u-)hr_s%o(AsJy(PMPKY*M4s(Xek7!HW|1bR!m z!&{g~A97Sb9`Krk)Wow^Hfrw2zy}`>6rbdY<<==ua7h%W6j-C@C#a$qm4UCnYvh9V z+=Cus#YVv{+UIucd+}S9@*g3(98x%rR~xT3d00dF)X0DtaXiS_@Xm{98FNXzl4toh z5N!ZB2ruOFFBG}?g^NSRXAs2?+5KA$SOYSMX}C+d7+*y;Ty|2Vn z|7V38w6o?3pI6Pzgg2CM80{xH5Ogeu*lTq`{BUUKF4L7-X;XzB!LqvGD8>A^M^9;} zXE?1PuFElqn~=yWvh4ff@#;#fBTN|FTV>lBUHVy~27EuJ&porq=-_?R$e7UGnAD<8 z2XJ!(PipI-(V{^ke{>Z}Td3k|hxcAQ7MC4QDWzzysT7?M(6Ri-z^nMz16@eTRfAc)jsVW0zS-^MZT zUS3qYSIRTIT>a^prOAIR5^rndQPkwIhJwvEU337-^o^~0RmfH%AW5s(5$C`X`*yhH4-tZ`3N zaiQDs53mPV8WH?5AlK4F_Aq-WqP%`c=}r~dA*+_f$*_FzsywVGa*H6E(zm*fgxrII z@3l?k`0hL>c$sceJ0^>2bl;G08G+N9;h+bx4BrzYr6f^pn5pFYrmNG9;MBm+nw9@= z>9TArq41i^?w*BTc7rj8HI~u`b2N24U$4 z){5pH!^|?-MR9Si&Q=SuwjQ9rzVqsE*IwBNk($K2RLsSpm{&cZ!OU>mc3xrJZJUO~ z%&wpZ)p2g0ST#MF`>rH;_(YaX!w#(8?1#czed00o($D7mJl%}W!|$b}L&NcxfBxdT zYEs5pcZ!{9h zcb4Q_DSr?GH{Q3iRi0^|s;)fYf=RU*HkZ2bD6=wvW6mdb{mL7RvjY}dckB!8#*g{| zj|)6|_3g6Rrnug&M#zRcTj>Y&;P$$PX%G-WXlv0ZB{pFrXDkZQDAnnfN3;C{#M1@1 z7wRrOnb)g1VQe8J)ie%`*jK2Eg6wtg%uGH1`GeV$$}<@zoCczLTt}Wn^Cn?OFgn6B z&Jq8FSvxQ*fx9#U6R4`p4#@7y`v>j@Z~oG&k@NW_w)I10$+!I~TCPoReCOSmy^skH z8hlG%O#yCluljQQKKcuGZ9TU+;la4lI_XK(KFqm|h2*Y<;nT-?#DrKVKsHSgssks9 ziKG}xr+KG-Q`ujD9O~%mgpAMSH0kV)6@nMMEukSl+kes%32f;wY{o0GyQoIr+qW}X z^TOXR11;q0g@V8!(R#S-buUx43i*C@_%PX2yPZG8c6?$VXj>nRWr15=Pi2yO!{*K?G-kBj^%Aw~bx*VWu%S*XAi?YeFW36|x!bG(_EQl1LxEyRCLE1+F_zVt(Go zLZc;?1I_iF^zr*}ZBN3X>suPZ`?8PbOxwJZ0H3hK;ZW%fU0w~+78$xz;E_TMl7x_{PL78f7QECKmbLWZgk03ZMCi?j1vp%DQ+t>yk5 zp=g*eIrO${uf7z}m$A``m@oI0gm@_zk*3_7Wes#m7N`UHx3(&RnL9>ie1=&;4T*I9 zU;c1@IDY6jC%t9{{Z7$K=c<>(zJth1eMx4Y`IxPQOJ0BSy7T^tv|aOBiAMedECmaw z;a3t2sEO;OKG~dn~4HNXJoY2#! z!O8>O9QCHFSS(UI9HH>$@!imzsqnnyeTTT*7S-zSIxfwQjhz(ruP7= zN1=9hAXYgd^H!))+0>u+#dN`Nla@;`pZuXQ%#R|8XD`Skeu$H1EiMiCA|Y;ggW7FJUTvQZ84F-|t1X}uYxY)jJs$YIruWLkIlDFewL z&I$s`H;n>n96=W(DPmhe>O|G?Hx_dWYM-d?IWhE4qrH0nVw* zr?5#luc-@}$*aW0uS@4z$fxL%_90jFjsl`mQB=y7K~;47B_MTIaRQiSz}(hcQ^I|} znYU74c^FL#DE$z!1x?umH$DQDzwM3Gk6V7rlh-&Kk;28v%~BN-Cfz+3+}4uDZ2yX? zGo$cMcIe-8M5^1zvzt^rRRXepcx;d+TFuR1su0cB78Wh&k13HS`yurBx9%Zlo zLkkxPK0g;`KZPG*YvK%iv0>{z#WZsae^r>YQ-kai*>~Na8rVoa6#e1>20^-=$1qy` zl$2j>WpuYIAPYlkFLzGaY(3jlbp_xQR8nfVfsSZ3D@-BUSI_MeY2w)*EGfSAwA`Mf zf4p9qrGST}v7}?&rI)R{0Wd%Cc~wgG`rpO%<(YX#sIzBBv&#|0V;Ui8Kl4~27_#kw zx2Q;bO2bwEX97yNv9g!p4?!CUt-8Y=+7HRKmhlr2{XsC2to+jOW8^R=i(!e;TK11) z9u-M8c2^pA_&Qj^O#YwM*D^N6YM%XhtIlkdcMGm0Ae<581kU9G*~feF^^_>yY>T_x zmB1eUld1kvtDm*b=p=X(%K<{BJ|B~_*EhB5< zKAfgY0)y1ebKp^Q)QR2T+Y9|b{UVz9Sv?GwDSAcPX72c2G*T(~@1>|Q-y#!q&^-bD1T5zpqy_1F{U|pj|BvNv+eN7hCGde~?hOiSc;BQ2dY&-=vcmrmf6vS2sYbGV ztJV$<)ckT+rS9joS^@8{aT0Ma;b?2=6gfJ2`YEWRfVf<-&04Im>ur?t?5DVJVjGPgEr*W7;#TUXgF1YrcqMKkX1^@(Q6d4o@&K zLjvmC)42RnHmf=TGG>e&Phf=U`=oDpbI@heb|EPy=|r34Kcyd?+2yB%6(N2jLgMKS z+|{1!+u_w`^S{-yoFkwjr3t;7NicI9BBFtD>%>C{d}00%p|fHC*A}aOCO+;XKD}I% z_@tW^kVy7_+E8W2NF?ml&jwV^{-EooLy#ama8Vci5y5tnVA6|!xkHq72zM}fvH*}J zI{tk6Nt*`Wt$IcdoRATm1TGi>YM7#Wv_qz>wzH!!Y3d@h`sz{u_ShttB!pDK16K!- zxtbP{R%Xr&|KsASr>uk7?R{p*2bq!mulhPdUe?)j?&~2?_M~g?KR+o8 zDol##M1hinm4Hf~;Rzgzxfx5QVr&m{mW7wi*FDmkF2V3fvZiZ*r!=b{QWpgY#%QLz zF)&AfNx4&He3D$KDnH63w(u8%r?#Ykq^6#D7qafaNG?a5 z;5Z=pCyZ$*RXyYnd)0bdGQs3P*p>lXD`)|X=aNeO+aa7|-fCil17guX0qr#T2>axH zJgbZ>={`4KXBnnTIYe|@NsU5QxT^feP3fzhthI%TD6uy!`O6|ZcLUx09{!;@ORcxb zAQLIh_S$dq5hjFX1R*5Z{BOi;S;s>&j?6H{Lfd2;rswi}Q22Lt5h<|91IAxdJ~tq$ z7YHtikCgx~wU4Pu7#JipPjMPi-r;0j!+v(3(MVdB;M{TI_N#_L8))r**E}Z&t60Gp zI_Uv6L9tIKmW|=y{?3DyE_*i=(=cFx1lxVRqXJ=Bd~|sf>e!0d=#|dDU?0;hbPhBF zNo7d;;{acJL#fG>jM8r%Sk`9Vir&*VF`$`WhcoH6hsjw6S;dQT|$nylaFIIC%EIp3{J{y@qQAovPXBmfS#d(0|*9$-R(ev=2^?cJKUdI@bDrn9pZmV<>$)DtPW7!v(EwtI#PT!iq(nTKI1|EN18mxd3nGYw zL2nf>^ScelA3%H-!GPKf0>h!1T^ZBzL)whJ=6QR|$0`6_#(7Tp7gm4&nTxK}@*!Mr02k!OJC(qQ-pUc!yUtggi zbbkHj6N#x9s6t%XporiNi_fRR6xIVwx#CyK92Tx;2gGNaqQWT{V*ed8dF;E))p|(B z*myZKRU@ic!o2fNHJ8e+51Gm6Ngw26w+P1_-+s0sMTa(z#<$q?^g*3fMFac~S*QR? zocwzooDMO^aX| zpS2v<2^RmYR$UK?47#|UgPY3WW0p4sxFO{+9%b&xu+QbnT>g7Z> zs9(<;;oor6m?$Kcv{bj7*0BH^E~3}2V^OvFaasM4!_Yl5XI}sQs=tX0U#$sB8IKs6 z(9P~qjn~*{SJQofRV{zi-JXF?QOpUs`9aIo)(@Vu(!^I{vsZ155ouUwr#~NTS^Q^y z7ji85MR{YrVFeSCGL%7-7MN*GnxjAjNVnPN7iM5iP3Q2XeBw2D>$Qrk<==#zC10c% zIl4TqzKw3B3;bLmW#h5!&&}$allp`2j!FKhc7?>&Qw~10y0eGzo1i5h?Y84zLp0S8 zS9<4@q?$Qx6n*_{$-NbT!P?}Yfyz$FKdDGf8aZZ{6$szY?~m13fT1Vs8Xz_R7}XuT zXeCM&B;jXIb=kU~G$x?&+wkGy4V8@cV8S)*{)pp*MzNh`{P1|hX^__FY=*~9neAry z58XA9K!d99r?IfIq^g}Pl3@zY@1FWujIo#iI!`*Qwm zh=gC5#6I3o-7OC=oysLe*j-XtoO~%OeHOa#p^%|NDVY_eeqbFuF{vuJ{Fx+9o{q6g%B^O+{RQL zV%iL?ly+NNuHtkEp6i!_BkSqtItzA5QmMb$%Z-8bx;T9;JkMV$DBa%+?JDbUj3`5h zLeFE*$lyAxT3>%a^8*(?&7HllGzUGFEaX$u;^)b=I|zIm&$4TGKsd3|5mgO#tQh! zy(IV_DEPF2rDR|=dr|7V=tPJ#Q8t9oyeEF=@qUvq5iUeh#?WNt6YpA*!aWHOrU{#_ zWU-BR?OF{zM|D=IhP7%c#GZ}z=fpKngkj_F!kO0b?=IFLpJjsB?9qW+oy?lp_8o+J zabs*0EATrVJo5-JF4RVrsMtC|9{nLA-u8~9)?hhO>j5_fP_^aV_Zqp1+|oN%^srz= z7nEN6UCsY{qoDs)iyb`v8SRsJEGF{Wj?JQ0rm`Fm!mevsvPI45dp8uXQ|Wr*OW~b) zdeB{Lk>=gce@H|uQS)=yUtgZePoaHp*9^>pPw%TnAX+f4#rIN>E3C zbddbVuWxT~$5%}Ok0`vW{5t%Si?bndF|xrAqdj2UVAu9@jw@1&Lk+3)ie0ZY_+L}u zc@e`UzavorXsR>WT%oz0cUgq7@}J@q<(luKBa~^N4nWc}&~NM)AL+>zvhonf%x5lH zn#LFFVA-@m2GHULH>y#J1Zitk6_A(FX>W@$f12j?ydKHwtfk6+%s;~;GC`2HoQK~* z7E*w>!Yb~os;m&41F}cwN^rmd_By6wiT(45z=Uf6YCk_U2oo`kmQ2vxFdTgU+$NB)OC@v9 zxFa((l9*H^U~CG^kP6rt*nM(n5x1(Ei4HI48_lm9r0gVOT6!nq+L=7Ct8(J#e z*e4cutY{Z(^-DrUPu5d4crdjM_KM0Ia|K&*y{9X={Pg?FpIA)YVPj6+1TLezamPLte2X=aPDeqj4a0Mr+#^`>fWWP z;D2A_-0uR4L+;;WurHKun@H3kd8RcVFHsB(6u@a;dcRS$xgULH1ar+9yd_z3{Bm`6 zyQZoo`J^qRu;}9u`&SqX_-o>m;aSrc*EA_R{^5X)<3p>V_Xqe^<8f2i*0afq9;-C? zd@1)3Z)v4F60pg$d!xOzH|EV@!Zr>w?REYq%uFQ8c>RVc`}n^xa*<+9;K!iRK>{nUDJYyx}b@-Aqtgce_RpbL&$e#I0-% z9uXjZW{;k6jb=>uRE@`RfQ0V$Q*v(=%;~+u=rvPj?(aSK1)#eX0sGiG{=9Y1T6hfw zPIebSJh49OGhrkrrPjY3GNv%Ds03EnkYD|fhXoD6RNrFLtT90(_6OL?TD|A>9qLTi z{|RxCpp@nNezN+=_iDupalQE$!&i6&Q`4m(sd?zf65(THf^d@I9vPW-g0l!${HMKf zFHv%Rm6aPeGq(M!00+t)aBxp+sAv~J+=4PX7S@jSbf7>2VeM;r|LOZ=zLo3YRSc2j zV$2%j)K>!h55GJa>E0nc6VqhXT6;no{t^r-VQbP-cr=hzf0%4nm)2v^ zDN$-6MC4npGadIRX+348wE1O$@J1ei*ux&iax4AhTX_i?d+V(3CD^2m0k}Gb^_OoD1{zh{^s`MPjj8{5j2~qvapM`a z?{!M5*js+^KY>nr=Si{v+mWwE4YweT`-6?qOg(tli$PK}zdWGtWe<}~`3ZVxJVO|! zavG@I>1!Vgtt1_jPZ7FS0t}}^zi?RTu-n}no}4|FIP~^iz1GwF2S?Eyp;Ry{?w2mI zD1^-H;yPPn_m+Ld69P$ zS5Yvl=nuX6zTcKWLH?tkPX@1#@9?3}|I8-_x`9`1cyw%NZ)Z+94^?L~Q;z`^9y)yW zyE;sAm$CpA_*s^XOW%tEgKXjzFb=IBc(i07If}sF42Rx{fj#?WNg%hQFYJRz%0sUH zH`Tx%vOzM6g1FcvP4Q34sMRNPNZc60PSig21{+tSwjKn!O` z-Xh(#8s6wx!uXp5@HX()sup#xGU8Y!?sf>}tcL)q@j@ouI&~7|9nyT4BCOjc=a56& zR)W!AAodfqM78R&496*pj4pN54xPb=SelkeU9*#$o|LM8pJcI6<^yo3?(EsGhw z%zs#1?6!$ae8;AiA{|=Ilpf>~gk4|LJqx+1xED?^7JV!JmSnNg3PznXpTv%6fG8?V zuMU8mtN2Msl`+BY-aH*{$>q2vL&?CyJF|!~9?fj|kjS_T92eq+01Wl}!LU=yDW;Vy zTbW0bK^QTUb{(rjJJ3rWV5l{kq27@Aor34vN_%c8&JH2>{dSLGS#=j~W8Xre|KPm-S|6=Ppnv9{;EA!pv1wXFC#urbGKz0p1h=$Bm2zN_}D|u%4;* zvWhI{99-E%m0JzGUv$fy9N!FV;$G=NN>nEt5Dr=b<@h7Z-wv!pLs!h4%YQUtx_Ln+ zr~phsDxbEx(#CCA%o{SkTWID#f~nlRjweUiCe9;TY1XbVxKS^>VM<~p@cKlOfe1%S z@NI&zHVZPLAb!HJp{;~FGH_prRNTvLMDMj~&AF*sUZR=19O8dMSdF{iIDhj*{9946 zyGaJqWU>3eUW1l3C;wfaq>?mGJ~q)`_sJKuV1>{iU{n=Q?SExO$TGcgwh_#v)99`QAu zE`Rh9jy!%5SEVyYiP%Y?bGk!6J@}*iL;`yr?AuWYNLVToyVs%50j@#m=i}*hFP-yL zL#^l}^#b9mPdS8w9lb63-sg_r9&^E)%Pm{7=eK$SFjeGaq&{7{FhkeV&HyoL$go-! z!XqL8oK#x0OT=k>6@xT03eEio7uG}}drI)JdwMAMH|xAi_AF?CeBT?;7u*!SLH;X% z5$NLktz}|C@&XU96rug!i!WSy84NcSOvA2?eT^?N>c={gesHsDOh0-O(E1G_(6>!+ zU-$dlTz=whgaz3!0ssg^?}S{C{Cmx{zknxYlJSw31tJ^^_R5Z+(kqd1AyNC{-Kj;R zqCi>AA#da)LOPz%iUktPjTXk0sH(Q~Bz~sfg6IPb`a94o@LaS2!O#ztTv)? zoHu6(OY0w6bcK+f^6^BpdCZ#P6F42K>-;aCjA}dlr4rqGb#UXmt7sK>FOZ|MG%r#L zuFgg5eASpv!liwhWAxhfF5OFfo3EonOKH6I9f^}N(LT0qXeL3twT(vMt=2?)wBNU!{4E zYXLP>`{YW;^Gz08!mH@RHdPNCF6qO)EhM3gF2jEVQ|4OggGidGy^fU5hG_*MBF}z- z_)W<1esb%up}uJ8&Buhi`yed3(glrtG`dHb=CTThwPLOh6CM4Gre5@l!+K(%^p7IKOmOh_Ik-~UvBJ;?D{=hvMWr_W?Qh7=iRfr`gET)7zm@TxIBfj|)zV zGN`lTsw8kemBP{|F%VGr)T5=1rFa>#$=+q<$1aw)c#N}aLYu!Xy=dD>PsuneP0cCi zHqI_Do^5~9{O`Y9QBbYPH(&S2N(AbF!A1Ju-L{aZvK}@;LY5|xaxv`Jcv?>45$8_E z6{oMuZIW!Fe|!H8Gmy?n?z(Ja*}fvA{E(fbG0Nxg&h=!Vz**+=eHg-NnHVXmYGV#^ zNjMc@l=J_-YY~i_+kINu;mJ;RUK;H2gB4q)!89C@nrdbQcMq!aM7$>+IF7;?ZhT0s z{iza5(d#AnA;bffy)ABa1;#mC%paK+a6EFVwPfi~f z8g2(7-H{Wy50YNE`;J(vYI`ORniq@}qflCQ6F>uJ&D)-?lOAnjgvj z&9mPIxu42m;RB_$X#Hcsnd9R9A;#2wKiuFdr3D4@6?5t{RFn?~1(zlsb?BeOzZ!eWwF||jUf)s9usV~e-^}PJGq&DK-g_e<`=JzRBjYTV3BeEp1Po4 zOc76v1F}kCk^PhM}-!L(;irbVbn_TP`Aw@n4iPD}R zG_oGoq4oVlLUz+eR@gZp-DU+@YjRJ^NytC6Kw6CaPRE1+ua?LEM#mX~AJ@1+V)i_g7O zlt#B;>h~`z%*OfzENjisfxF`D7Gg5HZ=MLXM4;1^E~f?);5FFdG@O5iZas+@LvElB zSkqmW6Y_zNm1#RpMx6Xnyil*gJvEcR)GKY^R~$i`y4ZoV7-_2mIwe!bx*Xqh-tqoY zL3vD(ASQ}LVp~9DMdC|TL$_Hm=uarY$#ehC)4E7`sOe7pdeMaERwkP!j$~7}yYnRn zu`-$6K`^mOv(qa?766gNwR#|kmoED4<_r*55hOu1uWA+YPnTjxKIsL}J zP+ntz(p=~rh7vwk2U`FF3{_=(?UGJCI73XpsFBGHuU?2 zc>)2ws*;sq>Ol|*z5K@9TpC4Yyto-3#rR4jC*&>~GVmJ{x3F>0;BVxI8S}laB#+PA zje&wy%yGA=N&;pymj6x72jg^`g7*UQLCC-nv`{q)tkjsjSY2n@jt4&w=D@!kG#;2y zO6$Cu`vYzfba>WBbhFDGV%5ckdh+?9zs;n0mkV)pfXt2%5cFm~6=gppE>u;Oyo7<(`ERLU`d{7l$q;aj?4K;Wh*oU_=B4~AV1oi_aLTnSwJI#+`* z{b&MF8feZXI-VSfqSkt9jZP@5*iH^v5?%=j7&fZ;Q_a^?teB3;!sTyyS+VUTRbe#S z9B=@QfHZ+V@+lf+?^YdhPeJGt8WIK)4&A$njr@aqnw`{JHnpC!*~pW5SjYuB`R0f) zXfluirS<-{ax=6@g6$Abw+s)LVL8JQR+cVQ^%_E?B}as~i4|&0eO{j6Q+|ToV%~Pm z_h)6_)kjBIz8~G5dKUfSk=U_CSt6rks=+q?PWO`1sO}{hMY-I!oOQ@oCYhwjCwiDN z{okUjZk?C(pKhscge6&xw0LhGP?dzbvtwnY0LFljDZ+95{ymF5yL8ZP(BBz*5*b(rSGmYO*^%VOx(53Um3wvH+ypOUro)15 zgk$>GZt;O|p3u@`Z!3`T^jXE+Pxdd^wGfy?9%gl_X-?#3#F{GRy)=_HhUg=0v2%7} zv<=$jzv<8K9S$z{t^gLtH#SMYyGzHpm_>4w>f&3;#x0TXPTYh&1ZkM9PG3 zx)G;Cr<}L3WZE&(&$Hub2tw>#8-Avk+`-3m(g>a-BJ6O0R-4V`9X0bGYcD4$hzhA8 z5ly!^n(c)mOND)x*M*cx6J6rl9Ne89{H)qzL{>jHD-#_5vr=exR7im~~jaix|d>NQR57 zy9l2*%qctdxhk}jQTK(VxOsK$IsuJ;b~RJhRd;s2n39{wXLTDcb?bz4bZe*GFRp~K zfO!z^k>|<%MllnmIY#oaoPJPZS3_S6SiONxe}V4?jK8}Kcrd&Z@3%nKR+gfZ&{eo1s5xMC z>A;e#_@vhE6V!DV2T+!V%W=8fmK9&a3Zud5k!Lx}*G5UL2A=|&*nPa&7B>N~4QQ1? z0z=LfTB@Uu!Fc6}xKuKSOdKO=FC|>6T0@JGeOHWOb}wmA;~O1hIw`Sl!3D-BX37md zZb&dp-wpy`(gLM&`;`U5OggXs$FZ%PAXR}oHyM1ojR!zIC+V4sSa31WgS`^n{uh2w2O_yEWWHh zjnW_ELRg&tqh!ypUbs2Gv8?PykzMk*dmYZpt6{AM^WrHKjx5xH# zXeC|izXzy*=@#u06O4T>%U^OmxnB6ih4<*H2H@=~EQPFj=flQS30`Iyg|KZ&5-Wxq--DpOKqgQo`-l1o)Ds8 zZ6c{~68UiHJv(*a;M|ho zPeU$vONa6wN%~QsA3) zh%Uovke|X`{R2#H`wkP7La|7(Ati+VdYFvreO#Pv*ZWspf0T%g_(0b~6^_g1L-uM}MLsNIgm*#}(U!J`Hi78x&sWhpw2HjD33cDdaa2=^3z+fFWK$TiAM+ zV#OHq$___HHIUUnlb=?mP+0uw*0nwSc)4T;&+VgWS%+EEPs`_LQ-Lgt`rBQz%U_|# z$8=A3FO2>>CP&jJ+Y&hb7k~{dZDzHtc+1w%pO>$Dyf{DopOCaMFCtK4V46VqPd4s@o1`or$}zgBzs*oKHB` zfX^-D-hNBZ+(6yVO8Zbf>z?^1xv{I6*F_8`@KxA1)p5U$MSsGhlbYPY%DLA=c{a%d z#zj+$E<{nuBOrGLPJ%e<4Av?ncFWw|li*+p#560@98~x?DaAAM1#kGy*`{2#?qQ(# zN+>^S1+c|fB13R>ZPs>3x7>C}OtoQt;@bnupPc@W)B$9GOt@Zt2&5awh{Kobo+nw1 z13_3I5qu%fXIpM=@myAte~&qq9EX4h);eie2*4b+0?7?4ZT?~9tAd=>a82Sn6iFc< z#+$i9xOW3Sphz|u5oA-_%1-qv69;HV8l&ond| zn#=$D<)Nu&p)jA14_g+na7L+h?r@hDRUz4xa1o7x#$!)D0-agm80ofp*ym#{ z;=<@4<~)jfg-!dlSY$@|UD7-D98nvSlGt?=C|!?>CKl&i1MCPdgF9l^nF~W(0VMVi z#h5tPap9FZ^y)EH$#uc7!7^cRllI@|5`t>&h&tb`?qvDr^?@O5^*JszcthsQjRTV z5%^GGH`Kd<52K6Sze9YEVOUBxy)%VfSYOCfW7?QRn8RIdSSo_c$D^0p@>FI#@LMItxEVwx&fVeNh{7?U+`tC3FGEs@!TfPQ%g+gP{ zmJhuGB#7N4DaWZXADj*uv|mzAf>hVUi9bZrx|22g%DhH0P<1x?XkAT)7 zVf5}!%@0Q8W?kR+m~nqf>L0Q(0nQM4D}%W{!GAIfwVHzqP}9xY63v2B;~|lrQZtNV zIzrqlfR;1k6^tZ}^%*11V!d7`|C%i#d<;hC3sJz*)YmlMrtS0n`O(+jMPutSZ~fu& zep|N|G0{+id!vgKnm#a=1yL`ocwA7G;;av@`b_TS-lMtKdxfSOAPPxCLi@-r?tJBT zuE`^RjpknrU=7I8B2LPcu`Noj>nAsSv>m3za%K8FrW6V@lS~_ldK_ip@5s8jhhn6B zpA8}9Lx*}?!@D?^PkU+lL!^#rF)r>5+;Dyl=PHXCQ$}VI1omm{8+O%fr2D|(vDe-^KI5s|P5lh$n!&}PgQ&kI3 z-jyL{aG4%qM;^`Z*L-qhwW8 zM_&I%mksLZIPMUSe5vJQh3ocY_Ji9Se6%4T&eJ`Cl;~KwJ>)^VYL{*9;|f21He;#1 zu*Gm$+DLuRHOA-IjyVW#cM(hUe^7FV4yrGV=y_UZI8@QTfOiu8z{jj>zbI(TE@@^L z_o#k+J6$u>pOFLJ`mVC@Qy|L{!ALaqXHL_PVsL9l>mYQYsm1J0R$+Tl1E}Klh_3Oi z3P6E8%PE-3iV^WT=TEPCAB^f?-}Ai8R~XF^M45Vx+(`McroUQ8yg=)q?~|?`nAR7nO?hfBA+?wzFZI8i%2S2>6o@ttq9Z zJ)vvfq_f=yW)&|$JQ@XMS-xA8=@ueMZ0B=vccw0z@qOVlRl3z4=dU-^M;e| zc_g1G>s~S<(=vDYFVOSuAKY^TmPu(L1fxR)^W59BGMiVynjl}8S3>)WG=fN9{y{s5 zT;z|j?qOO0hcm~ph@Bf>9}~?Q&H~7{FTavuAs>`6ZPOqKpO=WEZy$>09rbZOpuVTB zs=chomdF1Kdrq}5T+e^69)8jJ+bFs|!}GG!QOs2W%tF8CH!xZ?2R%UYaNpqM&xj4i zrgwxPrV=vjR~oE)7&IZC5Zg8cv@HSUeCSVDpA*z1YXsOh92w{JJ6HRCGrLm=8Z>7X zzW>2b*4`iS^JDtrE~WH4OmSlb5p{mGPycR2Ma+L^>eFfR2JzrGzY-AmNdg5KC%|b#(ZJEmyie&OVNq#X7(xFG8)%Blq6uBR7 zh>Vo20ba9!koF|_eURIDSDk(sjkG)_9<`k4V=1z^V{1jgq32(#a&RApzRGqgP8Xio z-z8w!KJVU+@rhQ~oR^jR)!6Es`W?w<%~5$M%D&w^6NjiiJ_IxSEMjzK2;vc~l1KvDU@B0Dnl zn%+6pHMZ%1Sq(hS@KToNDTH#^<(I5t`*}9 zp5A|yt~S&PH#fO|`rUoY*WiU^#j2~f`aJzg5W{vUhGvi$EBvJ-%k>&0f59(KSazl#1M!kG6o&uarP#`9BY~hVnf;a)CbDX z9c)0_G&S+EuL3YX6d6F<^e%m42)_xfd@FVaPwx%`ikf+ZJMaN8KRA7TwZe-53r|?2!CNBhYS|uJs%%X)X1J*F zU#Z--E$BZOfe z*j2Alk+--ACKzk=8WHO9(FlsX912}W?z>EvpLn+l2Ca9?;x#z=q29tMxKBbcRo)4J z;_DB1$EgRpfKU^6L%CTA;@y4fVk*f{?1lbS?*AQrVPT6U3wLUaoIY|b?FdEDFoEMS zQw5$iS(QhlL6f(1R#i|yKa{&^1uaxS-w$Qs@B{ai2lxOiO=XUfqgqyRWe$Ce=QSDv zB3NPlN1w4L*ZdUr`&Y)eRmvb7U3~XFNUgFa<>orOMrY5!)@m{RS(_uLb~!}wteHA| zWHcJFV|-4*oYL`x<^oJ!Z6N1RZ1#DBX#g{0ewcTnCN!SV2T46l$j1@R1G35By)HBs zfAe^v2#~!>IIwRCB$>1bXyi%RJU|pk-Flba&&|;*IJ)Nv@W&dOS1!z9h4T^wnd0Pw z$o~+2&t!Gj$0v;Fg&C9K^_vKMJhj>`-5e6$mpIli@0wu^t4Q&`$;ikq`K~T@xBw=X z=I${^oz@NF4*01epbg|$(l=q5HS?k^8H;m!%l$>OPYy$ z+PL1e9F_dmk^Z<=UuDyl$#EYXzB4F?ulZuX!ptnNBvy0dT&6!1Gg2m6xqh*{LfmmDi z-C7l+uhDU!WhJbvkDKR@qwg*N4kxlhU*kP-8d9s_Mt+uUJm1;dtVBxQ0;L!e+OuQV z0=7B3UDnT9VK|PBT?7lOsu@&L)G#q0vSJ~Wjew}En-D$r z9O&4n+G>r54(@5WNr{wobI^vAMhMM%`IG$NwhoI*Kq`&ZkaSY;&qWsuSSb=z;yj(I z;Gj=DE22u8z_$)vl!uDtv2XP^8Ov{R_d79t@1PDXEk|?GfE`?b$G{4nnetmBQ2U|I>EW0MOD74Y>ZzP($v4b5~x@y-lSK8zPh)-|s)JwyDs5{6rn{9l7$ zhr-jS_`yBzDm1prI%E*;Tc!j$aVQLZu0u!|#cap=msn6Y6bbe}>sSSsAT)**pE2Q| zEq0B-*%y{yn{1QHvh-H?hSmsr@oqj?kM1w}g{MYBj4ty_)z88`ptm-#m3OJGU6n8* zcDE2mxyEC!z)jd#j$TrB9tjigPH!Sm{5%aj0$1GHzOZMCKDWz@ZUdX5k7HFTBO&`i zAio{Hh&UZVkOFh_s;>H8D=986v^|9;qG<)kE`UWrUzJlw%DOmc4axk+hTgz%HhtDr zPaTeQ7%>E*3;~2nHHKx|*qiD&w&{y8{?mgMU`{0X{GHcIrG>5wgxVEj_hy z`0`_MnV7|)rgc;^z+tfHen5vndKPW97#Om8MKGpg>S9d*|u_FeAY zeVWbF-M<4f=R&}T9NH;}yx8ppA17pdO{bv-c?)OFGv;ZTO$29ohs?nBn-O#~igkRW zzED{rKKl*1Uh_3Q<^EQ-QyoBQ8N&jaPk&gKtGj)}Q$Csumh%j>??jOrXYQb*1BZY< zoW~63{_@e|KXeBM2V_RVsS5s|egM+q?D7sJl93TQw?J%NN5IwkX%^TI0s@z$u_wE# z($%kWifg6=)yEE`Z1-4j0K=K3Iwi<@QGIOEey-b50HdAbb}w#--SX|I~d=IvXqtR(&D}6@)K=g2BZx_9NXyi@$*Bq z30B(-or|-o3qA$!fuTnw?OpwM=XZ-zjd!ksp!mlHt>mjJWSWx{^?5O&!~5g7IQuO>k7CK?es$CiuX<{|FJK>I zNp7NM+08CNG9eCdstivgeJY#(P^5-_OA6P^JM6Bu;Lw9*umnAZgAtI$|AXVR{naw|m`|-3tSj_sTLFZs_ z&?B9z+N!9T{)qBb(*8L4kE6#D)mZga3YXCu1B4eAAJSiR&QYeAX}Az6`eoe9w}!j| zyWksJ>v?&7D_A4;pRmmlE%^KDrr*ru!qf?`$Iq}&%Fv-`oaRchdM8EBYaVSoCu75OKbo7-n>GZz8|Ip=_BSfR0_ zoR!9zS6Gp%9^HpQHc}bsz=xXa8YJA|5DNu!E*amR8 z&;S54PLVuoegufqG$Ky7f`<^u>U^2{u29FDxAe9=UkFMIT)11o0ffulQw@pEAe_Q# zhpse~FkmlWKS8<(6AIqg^CETax@9f(0BefWHE@i_=D$S{@a01vSN!vosf%&u1lS&D zjx`rD8Lh*-t6Iqh9^#v}e%?C|$_ftpk^&Je@BSd@TpRJ{#_$z}886&1A(6(xSJ32@ z*hSJ_I*3?#?XQ(Ib^~|}@`Gwe_LWP&74MPmTjp8T$O+7>U3cF2Vd%IgP9Ocj(*Z*C z30A+5@JvBDkf6Fc*zBKHZ`FDEpmg5kc2;>Lvp{u-e$rs<3cF!rT*yDk2b9?QjE*D? zVW;&UvfF#AwizFhhLNGZ_f%s+oxvXkM)1B`jMXC5RJCZj8nf|9S@O<=u4<(AZ1&7W z{#H*-YQs=5AD0-`C#Q81O&ue2YL6v39>I6^vW|mkh|=##oE~SCE(h-lF&*&XZztE| z%c+EtooVQ?A^9ob!I5U^ii$7@N&%abAoCEPmArv?`ff`vY=49=!6*;9{iq%V*aKKN zG6sbZUVPnFXOGDocw8OhHm`s{L)Z+`ZFSL26 zVj*&ydw&Gfh=M(^cx-rA=sk778EbqaOyEMK-aerGZPkU#3Y&U?&|b_GOE%d>?oVp( zL2hvNy`o~}I4~S~RCd&Tc%ZG`kn9%bo9roqz4;)0_HWos5o&BoV5Xwb2Wz*7WGF%l z+p4+Fz3B7zo}6uz>@8H-0w*A0HkI%Xq+5Zh%_<(RR&f1azYZNzsfQvD%d8AoZ9-_`inaKm6oc>IPtpzyHlB z9~@yOoMKb|yRM~NzE$~Sxqa2Qi-|fk^yEja!F^ZsI~&S|lIFX^l6|@y+#T4rC~dL4 zsK^?Gj@s=qC4T#PdxaS|&c|&mr*+Sb9$RUD6SPEUIhJVN2x=bZf1GnrJ=k~n^jYpf z@~qd9nI{_#-A;LYq%S1wZ2Br|@vz>)S|iJku?FVXRaw}kfHU)2&djWtieL1FQCf<< z)f2;gqrWn9KQ50o&ECPwK3#g-S~aTi^KfSj>3XXRtJN#Z;)3rJzRRSa0|r;mt=iiq z{_4-(bTrP1w11GYAn^WNok!<^lV&k9M)N_^ZHax@lH-$bFz>Uq^e#KU)^}1`ODw6b z*j#2^Np0}2>#U)utZmG5&6KH0R%TN_c1_}^`IiIu>R8$p{oviov|a5fSeez~-Sy*H zfkjeXn1)QJ&~&L12TQ4vTQk*ZArej9W>0ztV*>XdRPlCNPAgffuh)HE?A*U#NbMhR zZ3x^zD`7CPf?S)?hxGoLmhmjU+jUlaI_JTlvAFYy()j#%2MtP|kdB_FZb}RK%pz8@I`l#gh&4=_j!vtPqo73%O1k@d#UTbUr_wTh@1*`gH*# z8(ekBCRmsP&puXdLfIxi%LpB-?TeDSktAt25m<}yN=5x%p;i;f?#-kH^qqLCo>&b> z$8=m1oiR5{u`JND8@XcyO%~Gagg)dyL2jw&%`qd_pUxjTp+QZE_gyt2efV{G3P0Wa z_;oC+(5PGc`}&N|-09Um?(agKet}(!GkPfla)n%aW=k0XGe23kt_|oiSgpzfzhtB; z>ddbjzF@8vQ2(}C6O`4v9zZRt?P)V&Py~#w*_pVfPc64Zx=6%5w{aQE9dqDUPFd2Q zTAdL%n`Qa?vEAlL^*-bhKdnoQOGYVNCGY;%XqB;aem=_X@@0 zUxAhR3E5IfN$oo_lIm_Op9T__+nXp84o4g|XG8 zB5=3Ut&D3vg>g@AVUFpWFW^7pW<IQ`$Ey^kf^1`nvo1PE?JVuGVZUv5~s5g?Y|qZED}<)BErxnX@dR?pp~r}Yu?HsBfGLhDukiRYeD5zt>dx3T-$bFL?a=k4NiRMN5WIgK8MeBr~F z4QDpd-dOXsHZh`D8KjK`%M-n1Y>#zgkH#vTIko7}uOZOnTRKh-z!+&iZX?0Ux9Mve{8ken+w77mbI`C4MjMs~pz-NmK?-DE5 zSV2R%Gxe{m8}Gb&O$s+z6kWfbK3veX$>vbaa`I#U&7#9o_DZ7>M$6&DSd52BRF=3+ z>E46kafyCSfr)ErDOFEi8#-~d+2F^gY0nlLU1wy^O&GpQ#B{_CvxEoF7}+}Y|F}ru zOVC?#u)E=6v>>fv7SX(PH>bpO<#kRLV+haiV`bOVzezPK@4r60Soiw5)lil9qhr29 zEA)t${POIf+J0`-YXmh5{|Wk?+}whCRK#N#=P;@abOltngFLYGz5#`wN-P ztQn(KDeOsT`zEwk@Jkw&wR|OuC3rFh`C{mYvxlM`?!{{SuKw_H{@&%V&rg8_?tJ9e zqmk?5mE;`Fzu!php~#ar8hROox;Y=EuF*56UWFi3;mq*K&u<+3{L=ZtyO@ivqZtQz zG@pK$xn^VRUM4_#n|Uj5boj{eUKXt-p^dEDaMFHLh+u0Te0L#vgVgB^n+GmMqdK40 z7GwJN2isdP#cU%n{cp#x-3-?TY>`LuTBTSsb~_*9CVI1I_l$Di&RwHHvE8lQ*4ewd zb%JdR6IS07c6a<zgFI&C@B$=*wi6meI<40dQmC10MoRtZ zbpk0ulXn`I9=eZ4O{TRo`_8Zb@+P6gFEB`uc78QHQ=Z}USmATkg_)qTv2C6TN~3Fg zx|UjUEjQ8_ZJ7+A8&@SGQkz3@8~a@&3~`%tq90pM94b=&Czjs&tFCwhJt{zHMyED! zNyVXnXuJ8Mz-XQ6=-N+L+L(mep2N~Vg|GJuSC|yAhWX}x>83P1mCx_AdMW9odSq39 zBR$nBgnqf{adrOliYM)^6Y~#K`+k&N3A5YfiBH%VHG0c!S4BY+-A-F}T=Z|jMj0D? zb^c(@!PTx5+O`DNxk@}vW5B>Js{2+dtH1oZtMX^&^J=TSnUVc9EU}Rx$C@3FlusJO zm_%2B;1lx(Y+oPhl*KG2rHyoN{e9=|$t6Z{2A<|07c(;=rS`x)>{NzxQ#k2}_^#(V zETh*y4W1Qez8B&aT8IeOW6p;|jH;mh#8p%@EDLuXr&loMasSShwO4hgG%&8Qrc2Hp z6q#R3%-S?x*7N%L+5i8zQuDmE;}XsN3Hf^!-~ShMzEUA}Jd~tvCMY$gZ5Xk($b>UX z)9x{idlvVuo$m1@*)^0*=mx$)O@O44nO7JB>$}lPB9jD%pk_|RH!sGmy%B2)|Ni%I zaiiFgJeVGg5lL~r<44wuKKuFAxe!jo{#t31CnKP}BTHsIf6=wm21yq-FSdT$#MH|= za;uGREA5}r54R54tcn(f=`2|z`u+zxudH! z%yS1v7X_biSKjR38+?5=bP1~&gURG0tcIt|gs%oUy0+@@oHc*aEF3Gm{41fP*(Nc1 zAI)Fl3!Km1-Dq&j+}so2ulLaE`{}BZRl{iW^BtE{oi_x(3G^!FI;~=`B+08B;6H3f z3$WYOoHXL>(Hm_(@wn9>vvsC=dxDv>dwfx!TmKAe8C>m9+8uqju}1X7S0@}^VAr=> zkyqyjcI)?R6CM@&zKR*6*fu`USao(2<=Jc_baM2OWE17?+cNV}m6I=9Tz^(HO?>NL zlhMCi#C09sBi647N?g%rR3`Kqf=`o9gW^9wrtpCm>Y(-$6(w75KyjIDh>`nl#N zc5l64>*AB$t0OwKhW*OfAthY$fgxG98z1#2939?JbCXq=FL`YPUFQ7yV_8iT%C_Ch zPB;n$8#9BS8>MFyumS~WALUkktk&(D9zA=uu<=#F#GyXIH345r-Npyqy9e|q%5H>< zC$w(u3WyGD;+|n@#07NCR9lW8vjMjRM z)+*rSSH{ADUD6GPBji?{t0zWcBLA*sSqGWdc>iRRqkud96>R~1O26YA`ObJh&vUC}xCwB&zUcY+YC$rjCchz3-^O}eaQ&yke z6@Qw++(J95!>4c_nrk-h8@kl+fkorBHe7Z1gt)oF@s4P|@Xp>cI7|vEWj|oG;7fsv zrCk$RoZUOlGdVOLjokMnS4xpi6Xj{La2F?ipt;y|qd6Wbg+uENiU99@J)^v&{A_;h z#brd);v4 z@~^O|w{80|ul}qidim0zW49xUrn?L)H5RAY+qP?8!>7&OnjFRJS;|$9I5Ql)q$q`Q zm@l8q3hKR^M9M;v3TC_tyqm)xd2 zyJv@8&BM!kosw3eOSwD7o$F^T(|O#i6DB^cf{Xr#i*D+AiWQVleT&1F8Esf6(`mXe zTBv`p=8bOosqpl+x~a$YK^N;5xVr%@oIt}i&YtRgN$7GZ6W4^sHld4UR_4E>m^1wJ z@^i*)rkzT=rnViRP5A$!*BrS1D46JpuYHu6}1*k{FhBY;(4A+L!y!Dd- zKA1=b7q1}}F}nS=m3nlXd4$b{ENGJxh1bF}^fgwd?b~mDK$aG43hd0zgcl0z4VPND z^F+Fo27rqLsm9>^&2I4lrWPl80khA1nl-a;%0z+&1R7~5l(NfMf_xTFj&8u+sTI(X z$d|<-22|4>1Y^3?jgf1x`pEswC$}l{ie>CX*1u%*Y`25Hm1)|l+q@wf;r8yeIeKd0 z!-Sy|PHvlkN=e#Cbb5)CJ!5(%ABk}v$5wR9?<5t)+c)M}3+HaF&{!$b>3mpbIjy2N z5nuF2F;7;okE{f978xMY4axXu@~j`7v4;482L$w5laqSr!z=+G6^rpt`zRDO-> zRhi7hde#pXcC2pG+hPh!xd@xhQcUVj!}elI6u}i38bQQ|5x&zH0oMf+{t`*BESOP{^nj**Tv@ge(`{CG?+miyVZ5h zx9DNe&{-Ogmb_hz9@gD-rt&=2vn(E4-U|g*Hp7RkDI~1rX+r9{(Y&gfJZ5T>2K1Dc z10^yDsFl#AXCEsG(0{x_K^U}dfP7vf?C zKW#|1)c#odSP8FHuz9FH$kr(ya>wEraF;Bkbz0d(46>gYfjjJZz3UrCyeDi_QPSS? z=i5Q7GHI7Gom1h`RPNJs{D9NY(U=fUiiwCh8yXIv=(>$)2+Hl6YRg+oIy*f{q`S6y zXec6|H=NPFE*wsiFi0qHBa2S#%l9tt$>spGW1FI+Z#YA!n8@uJB5#osf0~JXqwT?Ohl^*WVWGM6S|V?a z$aeh&7HfU27USLSqHG9i^ zriu;{R2k;I@^+3DiUwpOkfM5F9Vha-LdCHd-9Dg% zD-(HqU=EGhVP~INRXZ`!AQSFeG?vvXU1o__`&Kv{u`CmLT$o1@*Quyspy8BuSgXr3 z@GTHBsly<4b|+1tg8lPgNA>czE?emCB=usj;H8^~^k`PswM*{vCZ_Mk#Vy-)6s#F- z#A=M8_w(0aZnwqJXX7;?$*l@_y<SmSORb5J$)wjP-;RzQgvqz;T!P!v0atyVFC_GLciDhyh1d z|1JVdPFIeShi^cMo!XY(BUyxyE>qm>Vbb0=_r8n=!e6)eyQY!?|4demfn3PCP9T?& zQWaTiup_U9oUX4#W$a3(`~Kt0XKPZ=l8QAwa*yp9)>}{ltf|#9JX_iA?6R1AgMmmd zCf!b3?y@1^YClNj)k)6Ay$AFON8obwZ8A!(e=VdF9kIV!}N`Krc}5N=)-r(m*J~v*<1*UsC`jVxQ%czB>{EBaT-(9+rk6Pj`@ZWW7%AC@jj1vtjI51(Xq39WA%6t#e`j7 zPV|(08C!gqL4@U8s_?EmBDB^_ocY<6k=O1`YHy966|=9?c36&iE-<7K=3?<6vb?`3A7-5=^>@1p#Q*(6H16dY?RtHOE?6MqCrAngDe@o)Z zCw}9<=D9*i7_@vHeX<>VSZr}IO$$3|SD+fk*~=l64vaw*M3IJnxFJR{)GN5mCehXR zd}@RHevwh#-QCgZ`X1^rs5Qja^Tg42RU($hoCI%3L@Zh?T5#e( zZp36wBGaknRV=Tc2~#m$rMP4GVeZ%OXDa1}D)%CzYI7MAc}_BfTvrtBAfi1O0z&#^ zX6E)L%zWVdaZp&y%@WTHlSe*5u?CyowgC%*-N_9*dIKIpb1I^y>OQyc`sEn5pXk*( zIfPgU4iyG5rnA0zagT*NF2%lyt2BGNginTrd%E`v;u`(W7_y^?KY0+0ic`wN-`sU| zqT1y&UTrV-rliWg7F#6NQS@*@s;Y8XsH#xKvUQ@bbPdlMT}uqC$_Mq{jg>bUyeLP6 z_G6H*p-88}cF{)=#`2$Ie{M6UR=K3kE^%4&dYecxkKRdshnZ#2T-zVj2yZfK46xIr zb9`Kgco2acyGJli=c@5`=t+>Z2UA^qzc|l#jXo-9;8(t`l-DEcNsUg7gcghDxhlpy zonYqu;8S@u&r4%Z8_k+WTwR|-l~^iOn|nb}EfN?O*zsJpQ{K zMHy@0Z;BeH6ld$8hNJzj&QJca$FN5{?)@D(1jSek;S`Fy)Tp`wDuwVQL zS8B9q)aR98o`J_BHcGOhE3Os?X^Z0Cn3r!1`O+Vk*mB(VG@aOLSUnZ2sg+RGI#RlU zF7`kxfOSGv1`-1EJv7v~IFOUgFlg-VJ_1?++sn=-J?PDPP6j;N)jRF=ih4RyUAOzp+0 zhF5&_`85-M0`0GT^BUM~OwIVFo7aB&XrGIZkB|51-Y-9T9Gn2OLmGn<(|`&y9W>)E zwsFHkA-l0SUdH8)X2An{2iK3+lj|tEeugDrnq&(Tw4}c0Hy@Q8YQ~h~L%bqamwrlFa*TzQ<}@lYL8V zE-ck03C!u|E09P@9@o@7SCw3!QU#yi;aX+gwrz-2vclAlN$P(_7lytYF+4JgBp17; zP0#IMWqU_`2`hno@RekOBK7UJJGLfgZ9cqL+dJI)m%85yvwKO>k3G{6cOkVlcPN6t zeL7q~>ZPj6Fwh)X@!Zp>lycwvPOgOr$`863KbaJyYzHFz|?uG z#>g~5sW_(C-&rM&Y9){=%_{5k@N1k`iA7eMG9?^ht?ZEc&7J1wJB$7?ffov6<^8(A z9uVl_KFLE@qt40lAbB%w+Lt3Y?%DFHYEFA>NP3peJ!g?LKQv|endL36$2ac0F2R5d za7jfCv&zLbNSx%n3YOHo%JV(+kGa?Dj}Z4CD5<-@DLbYcj@n>5avoB8oP*n-cLiksIm5U{*su1(G_;iIB!XJ4jh0(`8970 z>lX#b#?A=N1T|fIGc+W4|6#07(fA9KxL=3d_XI2HGV6{<%06~iP55as%Z%7tda#js zb!LWeu+7Lx`@NmxdcdnXU1XvwT=!ahVBx0&Wl4L^%*!dWFwfX^?OPI=SB>gDvM4#{ zudx}kP6@vooD{A2#c{b4slY--D#rx^5rGzf%b?5oD~{1H+}n`T9~PHIcVeLQkcWQn zDHw5w!Cs2Rl&R_vZ_n%-8`Gb(3~u%<-G9cARlis5H0V`~y?1I{?e7z!!X2t4ycW~+ zS_TpIY`0Cl{d(1h8gcb+)igTE#)IhREheGcCWmaiIA=^Kp)@YdYz_jz8GdnZP!R%QR>Jf|k4K0{`G>l>srB5_hYMx|KRY|D z_U*k7+Io)~_RUG5fQ%PF1bW=iJz`@3riq`g;aMn#ZqL9<1-lB%8X8ov<02ig`Sts&D~()I1D# z!QmL_3ZeqRCln_+5-maB5C{aWC-b~#FywMS6F0jQvt$#?XSKc}s9xVGk(pU?>U@Jm z@nOp6m8HyXXKsi=nCq;HWQ7!NI_>nkiwEtlDz|4z>H(rBA`oz)O2&Wg_@U>N4}^YD zg!U*mtkJPfE6812zIQsGq62It_1UwR;5aiCq~i{b-QUqufAcNyYhxuQd&_uO-UFPy zQzy#vL7dfynhm-++KpYW)o#7cEt9A|NeVgEK7#I5qCUm=^e2835DXvpno-}^4C5TH z1XF(<{|LEYhDSWRP`PQ>JJwMj|6J67Ql60l|p5Mr$eQ4 zpHTkL<9gA_Rc*{{u;}F^59LFvczFS$N^~X*aQ1lGt6UxHmS|AlbCM#u8!+G^>K8IB zB335#oSPN>25V{@e4lm3`CfG;JkN-g-Bij;;M-EMRBw9p(*BlC?9H1_^eN4H+40mB zQn#e5YWX4|Ow{xgIOvDN=XptQuHid_b414v#&am);37Qaf=n)JgroEI*}A1i$@*fwU! zSJa`#a}fj2R4rWZ?BOk+2`V((9c6omqGz{lS|-TJGH3V&;q^`)a>QnH;~%eVKKNNt zo0!8+$pU4JW7-6ck(X!lODnzzDH1?jw{oQs@x*w0O^AtSYRCuPoEVv9-h6{H6Zh5> z^}wi=7+tO2k2%-Cs9CX6!Oli9FIU&r)>MT-@uD>c!5aj^Ake`39Rt8`nU~rlu?m_ql=*&3FFbe8szXhXMym< zo-z|Dp1D$*6X8x>^O<8AiJJ19Qpw6K_eN#zG?wW?@Qr>+R^!>orb?+7MqUA;Q=~s! zpXcxe)z`nPdy?j+mT&bYrNE9ijCWZ}#j`E43kPc9|=bxar4F@`^70t$3`n4b=;a zQ$e!emu4E|L*1MLufN*$4<);>WanCyrC?1>(vCB`p>s=Zp@}FnaGvYZe1%l7;=>aY zzrLcy+-1HEo?r{JMHi_2frYFV6+exJ=3E(M;KmIZC%u7}H&5f7#MYQtdeHfhnvayr zUxgm%%PRb-tNyt8<;Li=zNU)7ntE#oGq8!*&0#a*srs*1;PWP$_FVA_>N>>jE&rj% z@uq!tC67jG_rIvx-G(qSjeb8Kf1^+#bqt%fA{8)Vy^*DI(w7|DypUHXBKpyJ<%7$1 zA2UVsrw8jtHNN)?(uTkK5Inb^9visEF0))wed?S2yV^}K@8MeCJ@KA{v-gIq5kuYn ztTIH}Dz$Z(ao5(43EJI5wX61DCd%I&CQ)YAVd5Rd=c**sq&^)6q{2=XBe$Dymso|3 z!+=k=QS5iab70%6e#T$U>4xSB$6Gxe?XxShv#4fIaILVC ze(M)#w0B!B`1dQYAdzJD5c`fyvbYib@MbO-pHC@+a*lr7_|wTk^@6HT57v}-x|dkb zRF!qO+B(u|S9@*^80e4xp$6`NixqQ>a<%e!Z1?kqlg}^pTp_Uooy<}azAjgvFXgAE zqvJ~s?`&h+>#KSjs(-IVKN}vPV5y?Z;WHNbZXApC&=R1r8rL@ki!id#H=n_xQFHuj z@zGTX)53S;*uW+3Tsx2EW?$=}Giqa0P|t6#$*^Z)^dBNp@1&}~?oZ}XgOnnYQ7BQb z*cq6B(QJwiGFMf?@kXn<{KKty60_)u0$S?Q@wMgV6UX)D!FrVVovX|vycC~aTrZ94 zDSEw9j#6PCI~R^McvN*e{q?g6&66uu1*>=EAI(yhsdi|hlL@O_8fKTeV+v99c5>34 zUa_$mwyv^H1@(EN0zWVu#-^s)d^NObcLq_Fyell0ko;mQesd2A`sGB?8$KM)ksyJy z0xX}0U7FCwCt1;~kNde0_fdu*i*R9=^=Pbx#gL#6X8OT^h@Aa^(;Ill8*r2BK{_*X zZ9s&(OP6=Xd#YbZ9T9BY?ZsQ|JW*~J2aN27jQwMMgT z8ba0)>d)K51=Pv(1!&C1pM2JIuZ;LavHzZ|$(S2ghrQ2&C}#Mn*XJMz-BgZ*u>E}C zB>$+|H^EaQ@L9H*@ocGK@u>mik;F$=&o7G`L@zIkP$bLTnxojA{r9OSPTe)Cc2oig z@Vg%`+<3vuqe~1)!l$%LIUl{e1Z*^C$emu57WQMT^6s^!_u5bNcqIju7_zp$uZ>Pc zoJ+Wxym0Mvuvjk?r4?J_@>6BN9`(vJniYSb1373! zl-N_I3Vm?IPPmK9jWw43YSf9o`>v<1%9l{aXSpraFxs^A>|S%wmCV~OLvCWq+%<CHXTJT`75lBw?mq0h0<&WLk65zMK<~bV`S^9-ma9 zq?CGSal|cgs0ZYU=jL?P57?1C>}Y!e7}$$T%F;_BOW;aIt`E18>#BJc=U-2Bm-mr| zy)vu!UM)eM#3D~|gJa6h^@VCP7I0g=q;V7oFtMs^NaO8U0JVS@n&*ujYb- z(S+Z;!TsO&m~!q_Mj1?7>3(F(oOrR6F4ejbD`K~22K;z8(_?Na(b6m7{jA0ZpQ|N{ zh-m>OK4s@YYwDYb^p=q^TIzjj?8B}^%^b1FI!tE`r19r9QUP|`fj*;Z|HQjBwa;r+ z-TxFNzaG^u=cuF`PeF|#+fPgqpovmSd8&^Mp%d&gUs3Pbfrnu@Zw=DY~muf3Zku=VY;$!RoBkZQ=b}Z?jLwi?E`ymdw`1<8k1xcq4R}Srp&cS&IGd!8TVLW0JAjAYab+fJFx18OYUS7XSX zC=8`04qljAe8;5UziJ<eVp9XgqLyX@50gd3+N-Ad z1!w=5Jbhj8I@X%K_-VRxs_yJpu!d?U~Q3D!~iN z?u+VV3?aNJeHob9$R`U!zfEK!52tq9iXY~B%)Y>Vff^n40qHE;`sWZ0pmOhf8FB5R9DTb z1MXy89|<)G`B~JNl2==>`%G5!OO@24U)LXZmY0g8J!yzNvh_l3ll0{nE)}T|+~O ztZO$#)>R|iM5>1Rmt5NZ$JZ(n`8i-;aMxSU*|BC|wOPK5~7zSpY64YHDIeXWykka49yV)}uxuccT zZs>Fl(k=hz3A(vqVqb;67@g?X%1M%ndn(=Z*7aULu3w;P>rGxGvJcT(IcKd#tHh3! zdPmGLE<>@ zB8}_3HH3dc`Lr-Bbe2U+;3L4Zxk0 znO;DSeJ2>Uz6bX$)zk5@J&^IU>$Zdil6o)~MV8ij49gHSxOiw{0Alv~k{=Mowp(5l znL6%UP1k|Z(SceFuEwbkb05EkJn~IqwKujkrPOgcDXI<_$+4D?ldh@dIQf8r_T1y~ z6pJ+P=b?_&%l@kJ+jt6+@~F7WcYQ#`3R`Nznyy_xalQA_E&a~W&}rFygNGQO=WYYD z4llluye}pZy&{qMbSYO?Obfk&`^@h;mWMUw`wlb2_cKsc?7YCoKAw#dozZo+=D&ED)(3~}i@d`6d7*AQ`5JaaoLi50Bl=ef0KnyFHQ?w|aSj#Q|T11inR{treHX5%nFvg>p}ePbLKegT^gFqMioPi!)~ZI zKGgJHjr#~pBYhsbpXZhA;>i95(p&t?YZQX1*5?wdA`O47OKOGuebjW6bHW%Fz$wiemk-}97AF@=3+iE}OEDL& zlrrvHIr|V*SoHg&#oXBDNIg{VN7)yKt@g{w?^2j%_ZcNh$~BDUoJW3Wxo4N{mhuZ* z4>MK^4f&ed$F3F~g&CA;vFo=A?v8npS~I zeJG(k=%74LBH~BNW|y_4lK`!}Wi1=E_9`th&@)JrU-Q>63#XbZEA4D(Satju&S1Z? zQff?#QJU2C+sCc6d=jD(^frc3(A2QOcXRsJ`b4QkL(u77ji6cmfh!WdeHb9O4%DTX zQ?-Z-j>;ruNl**0?ftdX2J!r_9d^tuwoA$ImD+LU54t zQ|!%QK+}{;7Ssg4fe-{YZ~!?R*d^6873^$Z#huB-LST@7Ieg#6`~v`HV!fX|ke+?- z_;7n|vib2-cyhn#$`0-lf9(pW`6W>c8rkR6NCDFzr{+T5i5ZY~Fytg`0k-;*sOG-k z+}!ku!97DMq@{(O99x+Pd49Dm-XQ&_O`c9RoEtAG5&>j*Ku9{KTE#6fmL7hokwD1Z}hBcVg zo`qF!rzamKErq{}Y2*&!c3@6~{8ulS@Kk|HOLy>|ig*-6=G9w|fXbu~2q>C01&BWt zCuspzXGN67uh#H#|92mVj1bAM#`ojr-u)WDqdoc17Y@_Y8zz@+WCspY0ESy0{X+41 zq)7%w^d=x@z8GtX!O@7@q7@}20(>!qL?A%8nj;`XbMtDG8rP}020weArFz6>acOh; z*qELP@H+t4PD1txRu`oH7i0&_;1A#%?d*B`j$)iP(2y_#VVBwJQavn4k1^-@9+0+Eh zgk9Fjg`7_o6{XAtG-U+uv|a($1Q5*kfD?ecJGJKCJ-;u zmvBHHBPLqW)Fj6j!^JC14ZP)ZZwt=}N$BYSnwkK+v0(})MA(%CEf+U8H|`bW$r5GY z*+HRMohM2{QWEOpGxoYY8?ad;kIxGygaDqF^*5#1YsxS~F^b|#fLqmr3b@(c^0*G1 zgIGE6b_bo3SGKtcO;zWvcrfx;C@zH8R76a6EsTuHwu83=eYfZ38oV$A{EbM2Gw@G5 zpaFy9H7OC`leA+QMce*U+5R}0TkZQip^|xKs6%{sv8FHx?8nRF3 z8efheERe3iVtjplbH-r!R{?Gd#O!BfuQOBg%A6+A8(VV?M}LNMr+Q?cT>Zsr=tpEt-TIBMJxxMns{m7HwW95m%RTWjT*GCe<^0hky54}hN+ zM??y0DZWQgZ%jPj96Xb8|E0B7rhFB^a)31bYp4gqw0MASpYCS8t>CZt^~?798`bLO zX4mW2uU8a|q^Gk1&q*Y!f4f7`fmf+UCom@yNJV?{=g$v-yO<)M#b9rq;Vn{;8f3x9 z8Gfq8oshgkdzT;z)&dwlid(U^w5T_4q!8~$1+HC;3;`SJ0Y567Nkyu7hvJW0D=XfI zOA!%ERy(o)R$9&<>l(Xvi3hpR55YMRj{308wXr7X;o(Vz@$6UvzsP|vDzSKf4$tko zt+xYEfNxPI6WB=aGOfB(+2HR@C)0RgfHK<;aPxOKGB1IBK;!JHF%UT~j`h`mv^{@g-a)2>e7@52q3 zByKDD!AXX#DB{H{x?JE<-xeC_25gV0?CA1QKcB4MQVg=<$gOj5_eb z^&fVKJ~g}mzHaY5q-}c^(aea8WCn%fGTDNfaZ03$wGo+PmO~e38&jeU?u(&%dMHxT z|IDjU|8VOQrVjA6eI3a8^CBdYt%?SeMorWb3#*VKQA8mn3G3D2fIc^PuYMTw(YW?M zdTjx=-5-Pk-edqoW-SzT!T;lT2kbL>78m_M2Ko0p6j^+PS%~#1o7)@ca()5e zmjn0{Q2!CTHHeCo2=C&~8I{dH*^2IRY`rxG(G4J&7jA+=39fCe*Js538S17Jtq4IX zTnDxp;$0I6WIqcM7Bw+3sSrY*dkRj-MqTDIfq1VmHoaxcb`QWFWI>zmP;f?_tEk3v za1<98rw;;jw%}(<*$^w$)YUm^W!zsC1JOJsARFA}+7VXrXKjr#+VLc8Q0u_@#@#qq zc=Dkx2<8U)v)+6-ZnAOnzte?C70o7&j%M6u(q;X=@&Bk>!GI$dEu_}9_^8bAw;Odudk)gUjRc=v5bSXMlS&Vj&r`QLI) z(q4^=>dB2gS-#Y$DSM4|W&`0^-|RgLTWC6-uc$|q6!9JbJ2x%y>qzqf46dliMJ9dv ztJ>!czYvVy#z4BP=#A9~oD~WOA%7-BXQABE9L=?VD~E$-W;~?fweP!W$j|Ep+s#-+ zNlD4nNWPXm=~V#MUjZ`bL1&T)gn^iQv^g_gT>{uosm==48W#Brhb`I_y1DU$#J>*e zl|)ac+(>bW2!>&gpbZ|&ukogsH*y!BMF3$6*x+pLkkT2G^Bo9YKg#=>FE-swQu0K> zS!(?3!0kp#IU|e-fks}S_c%|x7Nta-4+k1>$<@`>E`fo7H#q`)tUeBa^AEG=azNY( zJ^YQhIX`sOttT5mbfk<}Rx0jT^wDeKxOK)z9;|<1p}FI?S*n74bo_9_`E?==(C?YK zxhfzn@G-Ob`QHV;#t9S-{T6|%ug3MK zN^Y)=6-NQFqy<a`^5np8pV1B2rTgx;lPM*#ud4mPV;v;EC=$&I~VKmHFb8gL+U6cxoT#R_q?{)z2* z3FeF%5YxcKfyC)(?h)ypaNMR|;7=hI`Y;1~_hanCZBFa%LN?VF@7TW!&9GXh|)ml{LnrV;{J{xt8E^QjGL6_>x3h>uU=gGnYCF^ z!&R1$fNi498hokoVE!s*5@@gv(AVT(HgY;L(iScP7G2pN(xuO-L*V5d>#EvoD;&6@C4JVz}->|#`&0;7=02YQe2nd{NIx_;sn#xRX}Q#oZQbv(AU?w>~YIH z>;#se0XL}Iv-q250m+;8W&{9m25<>~hB(1M$_XtW?%!pA zMF<|;YDsk=Y+U<}159Rlm+5~TbN5w;-+J;5u|CmBtcX9Rz!HE7YNY2@q&rCHS$WJ2 z_`(Y8zAIs))2>3Y`oAdAY2@#0lL1NcgIi*8`*wui_x>vdIJrA9SW#v3r6|Eb=m~me z=HdSUr*VK68pnvGVy$pM$y?LkuYuRff85g)K)H?v=zl+exLc~6@mdjdvQs5S@Gt5l z5Z1IQV61PWN|eAn@ualKshXPpf4s0CAatx@x{OL8hAs#KuHwewG5UdfJ9@%^l^+TME?qDA&MJL;cUV59kH$>LePd~ zpCFbZ`7q&8Dm1mg|I($sqK{6Ri=kGda8)`0MUK;1*3DHqP^)XKZklHk@7* z?z*JwBr2BiU;2|kT~Dr%<;1(CUAIS=#elUHE>E6I?6}<@le_K|+>Wg$2q;Cv zuFy7XgBOG$Dg^(B2oeqWkIzD>$>}lVbVZjO*Y=Q)&jS}Z=1nv}uzzI?PXa+_1jPtK z;UPv~pw4to`8`<-=l=%}y<1dELpt-R+wsG(WJ%OA1U>|5J33)D1uvkLVca z!fRtz^BlQ|EZ;K&8JN8Jt;;b^vL&FZDK4V;mkV7Y1Rrj#@>3;YPG@<8yH5?Y5jhIq zPB?V0JwqY$u6ut4oj8O7F_~WtFuVVQ1wl>+e3`LgecL5Z0{Oo(Hy%3b#f133 z6Exe1rM~H9vVa!rve^~sw#`W46fn_L@MXv^U=2X2{_h%ipoHPxAcmDDbGK{)x_XlE zKn9!{6hvF^6OGHc<8m)qc?st1{6o;R)^cWM1|Q%OdWip>4zQrF5Ab>nqz8NlR)^-O zdfE#GR|_6;AfdCvmsYk4vj%$Nlvvs&_J3#OzaVV9IGV9Ly3b}Q zlg`dWzTkCAd-K~#WE#xuG*dHQ|C);K4(&hB?{xlTFn&3UQy5SNPV1QG2lR7B8f*!$ zDb&KvtmGVG25WPI`CI&5eU3g1FLfy>l=!cgb*m(|gggSsvtHhRl+?`MtH8VmH8eDMSzTz17-nF`#rpXLI2+CBaJELq+SmT0y@tdC5FoJ> z2V1(i2^r6AA7jVY5BYzTcZ2>IUmTO*@N~g{xBWFZQA@(`C&MOgP2!(v=sJS+^nkMC z*Gu_z3OX*L^EH_EHSGc1^z`2h2XJj-9iGGJ_BXR30KcfgigiHoku3L?I7u^K^c5Pw zF}QCe0<>O$5LyF`1y}@kQ`d1cNLh9gYytWIBATet`-wSOQk!QQ!q@;O!LbU? zf0onCbDo4v9=~mp#!KW{efS07nFW5_12!C+d#CTdcLX95W5GeqLH4?}m5I2B&0O%SC2nbC5r>1b$5YD?2 z_6o2qqffR+K%s|EXLtSM@T>s?m9Wn*;bHV)U<*h}bO|=B2u-n*XnkJB5u$}ZKr-!` z#zmKAIz9a;L);clOOcLH#UHN7f=&Pq-#Qfl-t+O&*&5n7kq9m z>$6%QNUd@WMA}j(3<|mhkAZPGy?oZHKq>`E|Fw1OM%&$1OtvmX-ygzf`<4#Wxy2DF{KSkBP4g#7pL z8Gii30&=?Pa|RWwgq~YYB$L&f8*YEor9wcf*YQn^o$?&y`Yu=NcGbtrI0C#psNje+ z+>Y!U!ksHETsO0dkc5+$~_KsC!w<@dLTtB4T57|u`0vpju$b25h#P+ z?E}bxQJPDT#odxK7Q%o#6TJ&OY3~Zh-iI+i1PNwi@W>mYxyBL1FZU<_1{e|I>vP{CO(aX`ZXhLYB# zfC!LhKqK7NNWz}be_s)$F#PvXpqQ(CA9ESziM!~983=%4K-QqNI;Ca@PVOhxdU`5@ zluH&GAT;+g6@|P10CzVBy1rvLK_I%GSm<68_NK-2PGpFYx_jrC|A(EzmEFv|)eQ(B zL|uGe5>I;0+xT+4O0Ysm@a#zAJRcF;6e9?VQ3UK82wC%Fz;gbMfrOpoWAhWCn7=M* zDU<9k@PQ`!1v5e9GzYt+23Q5;zgt=e`s>pGxzGa1Pd4rm6o+|;`)b3IjYpt)zRpPt zY*Z(E_MRggXi$6c;Vv`o{DVP?whfKO7UATtT54CpkZZ`S-^Q`@aDp9;=u3z1tMCn{ z#fhq)9C2{O5R8L-==LS>VIY1id?UjN?rsA)Qz0ml9QV)@CqgI;($qU2WF~;l=-0Ca zPpXk&Y2RKv1=ybXUu5gtEnGwk!eC47a79Lq5%m%qZ3q~UTxADron2BzJ7{?OxRhUp z>4AgV=kD!Z?B5g#uR<>fy~l_Q4{E~h{Mai?7QgaG6tFP{aMnDBe?Jfhx>8e94QOOJ z+bj|5XDwqPLg!EZt0&x-4RLTm@PZW3Ifh*YHYsvHJhuU*@xHn4K9-*uawZ8(g}Ka?9EIhRD_bhI2f@=HnJ_}Y=99_!4udgsy=y|!2^iL;qfxo<=0Sl8q`;&{jSJBf>{(cD8SCn zMuZ@U7{vN2Jn`2}moKHu+d5boYimophoaY$r&5xkNmCIQ*h3(ng{=dH`6&iy1lItc zQ3ZUsl?3<`{CJe*m;&sDum>8+7yWp~4P$_}1X^}SqkS1kQwG@M!9Ev1G+okkh?rt* zEea&1M8r8I2@1e+x0ENBBuy11mu#cQk6`SZsl*o-nEa#r)1fbb00|6uDS4<^_)36^uG+>f5WA%Cg{YDV6#0-EzD(U`bO>Yqm>h+D#$oAXr-oHk+R6y~ zN6sK&H_&KKJ~x&NW^ZxewvD?#KVdyh4O)Cl;Jy@gj~?H@jwTCWzy)GS6=AUJ`B-ic z>0jiamPUeSvL)hEjM%^~K6H34&Tgru@mGMy5_q@Zo?y855`w zjQi(p6lf=p61P)ZylfmrOlH^8kr8<@v8MpIY+fQUBjJ`%0=hI_23&F!?r)9>V53V0 zmGtMEUIDkD9}K_*rsKw7RB#=(FB)BgGLJ=hF2&FPmL==KyY^gL4vyk2yTr956~n)LvSa!6C{lW5AN1TBMBZ{8-mlg z^`CcUzKfaP)pv31Id!V`Q)gGz+H0?h($-YMeNOcp007{sC@bg!0O(J*=m0Ftrwf>t zGvw*QV56+70RXtN0RUdr0Kmfu0Pw{S0B|z`0FEdC0KRho03SlFVYByC7TaCf*b4x7 zLHy5w0?5jt0AK+CDhjgtpg#u>CNP)9G&;qMn4xlr1ynfD?ZqM@0@!k?u|;P@p<3EYn=b~`-RV5$Au50VBd4j z%9`H)I-MX_yE&h~GqMUJ{jZZS;D1X#eOQ5F`9H<}dBg?$pIU2rodEx*%BQku-T&42 zzipuc{8!8WZea%SKZgG65i{t&t^EJj{3H0q5bPb7|8o_EeE%)M&Jxn(|FPV#$Mv2% z|1{vyz)`nuzL6T5rI7MnR|q1*jBK&6k`Kb`6*$sFdRs9 zVv?h(J{GwG`qX`T?$)t^6{RImAtfEA?&u$p`C)?wEfSk4exxr=zlWiQkDu_30{dG% z;f$U)48SiCAsac=NaM(_T*k4#gyQ@azgs{k>yyM7tyq~9)qlxhWeEk#5)d*01<)*= z7+KWzY}<*gPGDk%-2=zw0-Cz2+TDY2d0lG59lfn3{k+J`3`*t|VHP#^%=lRLY*KaSs0 z$oVnI$ND@{qX|LVu$WnLcfit3&iTB>emBc6k|RxXkzzb#5IMt=pE_*^6Vr-R6pN?5 zFUR2vslj}w=d!}@V~4{j;;pvznj+slDim@M98 zjQef>Y0aJbD|VUk8-q4qetYT5%0#{k2e`Jbi&COfI8Y`TH!F!n&n8F#ee;SPGdtm! z3^yJmW3iYC0|b0|rs*QM15zn>@3oZvHGuJhfDl$m{bg+NHB@hL+SE^ry=;JjY+^OZ z*ON7U=j?!kJ1eW4dq*5PSK{ugiPo9h?Ak=ZIn`pc}|X%DU}s*5X>TS}8Gw z5_}0u^t;S~8a{OWMH(QxIvZ2HEUmtvu(POb7k<7GlaG88`h^WG*b-nw!GxoM`4fGL zsT=4*KpaWocO){Rz{!SRfa|Z+fSm~N zvu?D~$Hy*Y*U5>@J@l~_e0I3#3#J$HR1MEy8X$3`U}~*;#)Se?V0fuP5pLDl^a>sj z^5@n52itdYzcdwWgTAt$Zd;-e6JegoB8BFYSq&&q&<#U#$ksC_Zf+PR07BH1tc?08 z@7~ohW@a&dS9ocgM{BTx0thE5819xU&3#6wvx+|(;lPh62Djn^9S`S@5C+5?=*YRlLiQ2zzCB65PXTFu3t)* zH~CC=MGw4GW0dcTYvh;MIp6E@2x=ZLA%WV0Mk!%7z zq^l5@WPiKOe0efuM8P|=SBML-X;#{^({^ee2Z41%C%y>%ow6vxZww03G|>dr)-aY6_Q)w4`dyg%ESW-?wD#q? zieNZ8-2LBkY<%W_;?@%gQQi`;w%o9r=8qnGNb}S8a`mInTpJ6x6-PKvOw56|Xn{=Z z&bdOlgSLDIVZoEvOTU_Tnr#30yST0=Wfqi+K*wm5syo0d$6^VDGEEM?JbiNN;hDyL zTIskzkH(0M{SBRxF~<&<@=AJ}I)WrWUgF%3jDPq(iqMx_kq&<(821dAK~_8>CC!jZ z8j#_%+f{7S#wMoB%q&@hdL7+lM^vN4t7$Is#XxI0b?gU%7@X0;;13APQjY!}EL2`p zRwe^(#aaK;Bcs@`NaHu?p(y}io55kOtZeSI7g=~*NpS-=bpkTVfI+|C0+AA60&RX8 zimwEOSe@miXYnX?6v=@P7lvR&{zEod}kIuK(c`Ifvk@9I;0S%{@6dC2jdjt`Eh_o@%Dd9$~|TJEZNI&t;){Zi4&8T9*6byM22Lc zA~Pi0y6kR>8I#k(pACEbC`DVb`YZz|a8$-%Z{XPlzdo6!L<}@INSf%E8FfN6K0F2h zhw`KoCYGIw)=*4iTNQBh-lD=bqQ-}?X#}Ih&c>O`z27qzR<4jY3Ac=y948!`-??fguM9Wrc)i%mR1b=EHsARH zVWZ+{QelL|@DtmcmK0B2Lw((Tp`@EMl(z0V`vVIN*o?zT<|?JpB`vxJ!mo(i@AsxY zd2CArG%Q%9DH8If`+D8DYtY4>IUNl!^fGs7c&-_Aa_uJr-@7Q*6X(WzksX))FdnGqEOYxF$_7WH(K^uG7rbH!{tmV~Gf>~Y>-JY}c9w&sQt$1K= zRzI|x>1k}shKk{cj5K)+xSlQuzo&p=ZG8r`73#q~kH{u?cBEG}^uDUtH+<40-#QEK zS_2nER1eP^Aggb|GsygEWEgEG$~g8w299<=1+Iu1*A5Ng*QnU5V^sMs<=gcN>NUSg zp$mL}bGS6ub6(Rj@K86xEEzG4B=!2s_6rr1KKVoG|8B`H@c52Vij%B(al3F6hC!wro}qKxN_us{-n&%kF&kMv-K zTOisu89~(InHQG-!He0*=WlSoJq%bp9`X9$JjSfzTRFsPYlz?wvcLUkro}ku|LJMv zB&ts#3eT9l>L~j&9450mMy%uG_i~GV^ia-6*3!NgeQJY8P>_V8Qi#94vZ5F8dx;=) z;16USy>F716_pR;FT~0kg==9QH0@~rg&!>g}a`lj3D?hFs7zrXlMJC=0!Tc8S~bKD^?ezny#k_Ec|okSzqtV9&(pLT!O z?{)g&(JRl}JKL>kVyneXL`p<*MA58rDhcz+dWZAh^x8^hGy4^f78l4>#@qa=Vzlh+ z1KY>D19{bMc5AEWb6KXRId&I*+PF*^;8#XgjU`PY@dWWZ2E=G-*6SFQs80B8#Px+eZ}G@ zRwuOxxVY$gfFdQq2VK}}MzMgtCE}-{QTY^j%^V^@*KU9YgAIFiYTV?j@LMcj%o2qR?Gj~K$iU1;0hO3`(6+#Dn z#^GY)!%;>2frst9Ry=dzh{e7ssnDCPI*?5)f}bE*QAUm0hQc`Vt+KG43&d&D3o_94 z0m4-khp0c**^w8Mzkm_hrY-XxD&E0A3T&L-UlG%ukhqagxXaL!6DBtk&8y;&%-s?c z}u*udm|2r?+0ahw&(y=OOZm(>IR=9aG1#6fiZ) z83#E*WK>Xze5iOX>{OJWEq8W3Ysq}_0jJs+j~5fDG;bI z15ltNIKd<5hKIl}adCp`dtd^BnIZm# zmd?qVjipcaw_oQT;L)2#2%R` zgK!?en#_GdP`p7ifD?IP00Gby2@nDJfFCE2YRGA=hs*p&wCBR87(mV5!g6dCQho*9 zI4bLrFCmKig^9#KBk8gdu8a~}&IMAZk4G~6x#eW$!z$`9fRFLLk*0w40#UlCmT5yv z8R@7~`~$rWZJ7~)y@v!MuEkMATYcihkyuj?mTb<*M2JN!7>NVq&yur|j#Pi={tUL1 z{MBt+tc?MX6_7qc@lEuSakO*d4|UhnTdsmOn&X3xf%+gTpV2otdd$V4`)QlM$LBHg z6WjuA3QkGuJF<`U96a|jHWO(9At||J`HmPG5D`ha)SuJNW`2Xh zQ0i-@@75SOQ-|VX6OPCf^dp6Ysd~z;O$n`i{!JHgm4>M5(Zjx_@z%A|8~~}Ew4ek% zT*#gzdmCjWUW=vZm*ZD+IcJ^ z;9z(<6wk(Q#@Ku%s=UDx?Mv5bg+(SQ*WX z?%IP^?t!yCwE3#x-4=Fc=HAbr;_0bsw_6K#%{(5tRt3|Ro1gw#w`OAU9*}yObGeMe zc7<3^XO@7oYuh*$pzlLVf`6xXCI?&H-M&))jLLpGBxmAAHB+9!+B z1vZPF)6&G-%Jr&uVPXD2-zvR#{|?=e47d5fD<7LLN1hkF>QYB-Vd7pL zbVZ!W-)&XKB8NSB;woRUQ)8YPx0R|9+Gh;=gaotW|N2OFQi2Ub4fzroRo^WeI~<9V zrfE-QC_aog5>7$Pm-n?$_Dq`{lO<8k=oo5)?6 zGbNOEfS4sEUd;~b6Jsc&j|Lz|djdZgH5l$l^1ut;2REO^!*^CuQN)65z?WYS$cW{N z35p;T-yp>c)%2Oj-3AxoAZ6LDH#k&3P85WW#I(_a z8B>ArHx1#Gv1GGEFpGU}N?HIwpe zV9{2qTie(@DS%Z{JA%HxSF_~V7sj$+WvfBEO(BFQ#iHzZXltx+nuol1#CpWs~XAn3sRcLg~tmQbvwi)SM#(sqH6y%uMc z5-l6XNOIu#cv`uN-jFOvr$Bn%_)M?&M_*Wlbwhv;fzOEzKt{g$ci{}?@--4E61hh zN1L^V*&CqF-#%2*#6?K8fwS%m|9^@q9Q0N>C%K)hoS$`I12fH?DT9S4IyF2rvd2cTwAc!E{?XgtW1W&yPVK!7m;YWm z&(AsAZI=~Fu)QIV+4$a9zm0s)s#p7IH%{;K3HR8ICsPJJOi#AA>O9y(#-X=<`%q&| z9iNW8sT*&<+l97Z>PKFm0=Ceo=wIf%@Yl(!MTvRq_^$?NqgQ)D3?c?mSb_;XXR6x*1-mr^&Gw%*Uh>w>U4CJO{w10F*j^;~ie{+?qlHv*5dSMMDu6$yIFbr$j?MgE&BI ztp$lBZK*9BpsivNF<={&TBV@n)@Zn=TVxiOSvci{U3exjnTE|quqcHnH3=hym`m5k z9cXPGZd+8w7bDfxPV=~q{7ZjB3D5#uiiM#mR9XQlP}U+o00?q69-9C@0J_H!iyO|a zmj-WbBNr;ni6ad%lD$@7v2w8~o`YK(k3!fIdfYV6QQ@{~3JjaSk|XOl*#=#HY!}jD z&ZmH!+R=&LvnKrXRKv`0KZV!odenff_)gh9BiJo|#odaor}PP4^)V?ZzM;^~deOv0 zVn191;vg&(xy2&XsEP=aj9H|gYSxjM(t_F5=ewbB=Q^d582fSj+{nR7{~eLW{EF*) zCE2+Yj~kb_u*p^uwt?H;@SNDTKTR^H!?QuXj z_!pOu+ur&0J%>rVZy{gzI>ivoOGwbp!wN-J-A0*ol z5y4C0KU8zxexoT+;T8R|IA4NI6zk#7 z*9j_O&?%CHz`~vwpO)C%Gx%@@aZj?h1EYB`)L*o$T`|$~?Airp zw0@TXHi$y|9A@+kB-6d-W}W-lS-C$Ez0DdkC7ZBC4+wW{6jz+qK7ufD0KrM#_=%fbpFKU4nP@#IhdmicHh^vX>!uy~PZSB4~YY z7Iu=pvFoZve~TtTm5W@c7hA+r9;?$xI%|lGoX1Yi3?b^zV4lsxfJjfM}MDUz%IQ0Vl{fH>ucRvwvU2=zF6 z?6bT`2#E7BcBn!#Df-h8XvI01DRtFTzsHE!9r1{?!^-TOH*A~70`mlWd~}K$n(u$Z zx-ILerl&p^UG@6Q+kej~7{^m)N^*`(q1|n`dBvZPK$|LVt}6*0_mzVOSWpwE(%{?C z#B{pvWDCVHE?NzOa5S=rC1Cl)Y*LgCm7&Jp&z+pYO>9~q-5TDtWHI7aRsOZ5B40J+ z{c9Py>2mBPF|$Mj-Z5n&3b3RMN7&s?^mMFW3eW}AQx`amGmcMjH*sG`=5kEMuP(-2 zv^7#wypDi_hMQ{^efXV?EMGn*GQnbzM4L9(-FD0zR` ze{ijy+zSoSc^P-9$ho9@sYJd><(M_`N20{Wv|y~Iy*X@D9L4>QkPVIm3YO(mL{rPgCQ#Qs{4FHXwDXUWj<{7=SC ztJOxj=UZUCSM4$gyfUsJXk&B3XE(P+XC=PEUiihX)^@WqkVn31{gg^mNt~ahS8@W( zm)r$!_l*;&T0im^+sdT%JV^Fqv?L4uptW+m=qDcN zRAL&5QksqXNbqWG{ZyQBsORv$jydOe{=%dr=GYg+N`j(uE~Sxz;&vYcwb}5lEqCz( zW21eA`f)wRk5L`Yu-3Y?_Kj(m3Mv@OTm$rB;v68gh5HST$o{d1M{bU}Tt zAt6?hFPW^lB13bP!(LM3V0u9}4STUH)d7My%!=Y|0KcAlbtCwprR;&GWH5<#^Eqx= zyldLjXZz;73BRQ_N_B4bX-#Zym@71gK!YvlH0?r^jX>t=m5bV6p7z?-kHCv)mr9awWA}$bFd9R=WAx&f^(1T7w&VI4_ZV(gyGXTjms#a< z+|LZR#uBxq`c?9X&M25>Ny@^dV_iuO4vk}=mUDi+PxYAH#^&%3=_#h%;Wiy}+tB!D zfB1_`8@Zjc{5kpH^cxtxPl*S_&2Qa2a|_-v1INfpqa>M_SuOtWh5{jGo5S@#>F|Ax z7jkFaX^cPZgIy{uj5GlcLW}RCib4TNd}0%5w_jUXX^>y@w$h%?X!%A zOA6Q?Y7=j&_gX1s2=hlg;w4hTdiv$WJ4MyLF`nxuds3A<@>(^!^&E@w;?OJZl+1rlqNl*YS~OH|@75 zbxMqP&4H@t&-s>X^&uVdYTmIe%}QWCL6?8u+3U}|aTY0*!>OGOuw>Pqfo&Fcp4V$t zv5x$rd+6ol_E6M z1la4j+xf6fBd$EYj}4^7*AYadT{qs$pK*6zFZ!7vL~vm+@pqLkbMrH+JcR_fXT6px z;!=BgyW09s{S$l_@LYe}Yw`;*8RM>L!S;kit@$)uLrRSDHfSo6`zjsZt$fFGn5`EF zJxmD}j%#?D5^C9~h) z+CK+JQ1J%x6jw-frpUsjQmSZocD+0ONZI=J>lC#Q17onz^sE zgmO5e6Sg-!i9E80DJjY0px5hySsb2$TVZ>ZN;Yz5_itO7Y<_coOoALMKC)P6?SHN9 z(veybb6PzM&b)T`IGrasKe@N^srbU=6X-wm3w|LIItGfL8O790iMH6BdDtBukW1Mn zfhEPKkqz4F@X>a7M*m13RsWfD9upiD{UW-YMPrx?lA%7MJ0$*W(3C^rgC8U)nFBt8 z?IEO>h=_;cG-ko%qMcaQDZd7VP4j0*QV^Qp1na6wh04msl0<0t;>NP8Q8E#cVa9kB zL(X#Dz;|6JYy1CkYd*n&Co#)fgag3A9y7=n(0To$>$U<6A<by1MU#e;3;VBePzm_gN8+@9~?e zOfvN|3>$0JlLN>6X1&TKnlo=Ix5?8Y_?9Hz z`t27VnVHAOj(2};FS+QFA-CD~=bjJzK(gmy^n;yR;rMx}Yrk*4?;d>Fwq{e+GvC%Z z`C|v6qMG_Ko=2;uZRR?2Fv4<_8d#F6fQ=*mef;L7w5D1WIJ-C4%^WA*D|_>Es6)E5 z%g^K>ujxgQsK*?Vj>>Ho( z?u}^Pd)Mz7ua?kGoRy#D$hfXMN#`Lv0;CfXe2G5V{HUI|BTKMpCC{|8kSIDu_`&7^ zgY$pmElan7Poa2YJDuz9H2sVx z`B@05(ngYfY~?g@lP>2n*5E+pQGW#%byO*NBL(w73Wx%eQqEG1gMrw9*?`%~ijWl^ zT2$^2Uj$!wVXRebVDM1^;{OeDYj6RiL6|Hz7N>ygjkc~c@<&J3mx3=d%J?a%Sv+zw z`sY1t(`a&dt&<)eRU)~d?{wHHnO>R$-&z?9?-@agU#{qua+tThV{*A{bt=ftk5KS+zVzObZ%h2#iF^tApvWRF|m*CqnCD)hh+sbG_$KRMgE@~Zz~ zQB_7#3)1BDlF$-e@~%dlv4IXpved=QKR6%SqUC}IHVrleiZ>cC>rZ*FHzZ#3&g}>s z&gRULgMO*~d3`#)f2?bjY70!t+_jD>UApfa>?1dzd9JB=ulbOwU}O_bwd;@TDiPWR z$$o0)pO&BV^5D$ajH zk#6za$I;{dnGmIVGOI>fQkK(iiX;{_AW#HH=SfPHrifI)BIaTrRINyo$E?H|gL!re z66pj7cNnq?SiOVi3>2g@D$>bqkuaA~gk=oWb$NE4kn9wzbRrJjkWDctmN2vv)Ng2f zPYIVNj=E0(fTc+XkOW)}(E%(T|61IRf>kpNgtzB?rxX;TGMNb}V`3COz-*ZcTXGcf zA|~jrbsJvRUd3yEzw^w=bt>$IrRXnAD;HQ=^D>zhmWrj10A2`s022>(cy*J~PjSM<7$YJb^Yi$cchAww|6;>``>NiDS433A(5J*# zEgKtCJfH4#Vf;P0%P{W8V(MF~(|fTa5BuC7iq&08dI3W7Mkeo}cj$LC8y(#j)+;uc z70KA2A+o%uUEOG7u2vs>Cj2^G?WK!HA4hRZwim3wHIdAtf2XoL76Dy|m0W&K**f1)B&kp2r<4?uf1%+^H8 z{EfKpl}&zP2+mK@nxAfC=PZ&Vs!#v8DPArWx3$D(M66f-8#y8uCy}C+DE0nt*g9+x zp_FT(D>z;M%@dIM%0FJLa{!vb*p{y;TtlbEd+qUTZ)~O6Ri{v!QwV%0csb6|%|!$p6Hw=Ve)!k#Z-{gDq~R?+##xFE zl?~f|6y%I22DZOU{Ow*CAUe$LuoIY^Fu-K|D% z6i<}qfZI-Fakkh^FKwldLZ}Z-VSuj}7 zP}snte27r~wyTY+Si|*=Qld0M*ZK)1ML#V#kMHT|R&Rysr8!4a*ztrK@uL@~bl3RT z*^?cc0VAyW?SR%+L_lkzkyB(5n}=&hKS~hvL{WmY)R=;>TET5h6wokF`PaeJG_rqU z;moY!r{n~sf2T*LYTH^Ngp)g&n2=jk4Dd^b}-m>;S+I@f)M04eA?kogG zdVY|i9%DbgxW6)vD%N6OnOHgw^vw4W>8!7qsKflI%bRa>m2HtT25$MRgO!)*p3qqQ9%{B)S5%0|ScnNC9j5@7-Hp8&@HO zC0fWj_~7f=*WW3X_V+&R-Sbt}Gq3$-#`x5D#iaEaXcQ#RB=dT#EIRNV3XqzbuLrkPQ0wEBIC$|+cmZsN!*T?|^{ zu1_?#oU|xpkw3+jTL90|JQto0$YZ-t74A1MN8>s1@Q#!5<^C6+-lcbe#CPK9sYS;BxXWKUH^ib=S?7e5drLmU`cVyq?;lgLcu zc#Ph0p_beHM&bNwUPFLs!)n9C?6bqEgXwG_UQr${hn3`oa!w-uG7LLJMIkg(%yA?C z=GkNLFEmR!RCm*Vg{(?00MN6w7>nB@UvRKWU7WfVx(3%c2V7r)2wTZY$11p*LyQpG z!s-GPHy|Ywpg;?)l6i-0LSA)!zB<1DjGP!-cmF8MOc9>GN!VFcRwm_dKq#32v9tEE zJZ9i(?gEDly6IpO%33NjjPQ$xP?b@(i+$ig32|3O@rZP1D$SAC@0+S+=FC*>xUMB( z;CdTM65Wd;#c#A^Bx$LxjW-o)PW;WPt}yU&Y~Hy+EUhT`4OG3nzLE0FAJJX;XMlMF zT)IX{Ar0J&b$79iigcxOs;c*J=hclEpBTDmcsl%^Mj9dF@P`CjO3;WSbe^%32~2~1 z^oN!MPH5c??Rzo3asHW`w6hru0QeuDq7@FlMIMXbH@o=)g3{glp>XKZYRUD@-^`uc zrNNt=&5h1KsJ$R@I>^t`fEdw3R{PYr50k5kWG6Ov{z$KIpTGQ2WsnG0ptnHVO zMG5_O-3*4gq`t_=dfhmNiMcjOOJ?(9p{R=b4JmJcZ(+7zb9EzNeIxTUz|b_mh+S@4 ztLl)=@y^;%?db(pI5z!Hx7t(EBzC;zb;RtYf51fEoB)uu@k0q9mcSxhFc2r0W zTB17+A(RhLgDvxdO4>Pw@uXAkaOwP>rroR5=!`5W_>bX9Ckl$#K{9G~UfN`IT%tPu6MIyBQveBU|ZwP3Lwa(7ARCc>Q~7D{m14DOk#0SB02 zi+bDu>*e>Q;`!II`!-RpGD}QA$0$spjEtdl6U&6W@{loD^30GKR{066GysFmb@*BJ zP-Shdi(Zdp1iHzI&3@BKJYiuWK3iw$LeVAZ7t}0FbOSz=Y+%T&p}V>m=77g8`SEg6 zI({}68u7;@>I3v7n~w$9LErbC&&wEonymADG=>1HEHd1CR!s#0Eq3z|fj|LvNMuQ% zOb7Dl5yh=Z@|p>efBD%Txwom3H})~}iqy&ajpr<)1*Ze!>X4S^bB$&1qA4CTJHwX| zNkBIN>aBF44-TBBkkUN4z%sd=3ZLg4Nie6AUgG zo(l){>}eYjE1$bb_;&~;pzbV`ph#@?T%2_;&f%m-O}q9C&-=imkZ2R+9x2n8xE66W zS1MF{o1h&|rQl2|Sq>E9zS?ep8o!au`EF~EZtRn^NBtLFe%|5UsY>5uNYpnVE6l;i zYWDHUX4S+@=+q-T)!vYJJgQpY1p zobuw{M%Q((dl@GmcipdI;pI$Dq2GfX7Iakm<*{}*f{wxWk@A1}25d-!HvnQ~D11aD zR=X&GDD#-F9A$dD@1rQVM!e$kCroUt`TRcY<8o2ronrlTFY_NR@)QoA*Xj}tjNlcy zn!kM>!XkBncDYR43d*^)2Ec?@Tk>j<0rmN2ib4Wmps9oCyo21QDy_&?*S| z@m$p)#7SFiCGx^4h~>O5DE%Y_I?mmAh&PNwk8fcXd(|1xJ#KiSNnqV=7?CcOXC0Zj z3GzR#@8q3qCR_Y8i@bi_bYc*eNR${|P+G37lJ{8#XIB@@fBbeaFk(i^fmoit?3sd{in^icSQ7ULqnO_PPe?bn^&zfK%@qMuqs2TC48bfAr=b6u@H* zCr^Mloj@FQ?w$jq1D>?yGTr8X&3+F`t=h2xp1rt#PSIIj z<4qb$sX`iLP0vh+pFr;Qy5z?IMb)HeGIVhat<%AmfsJA#2p_sx=mNdKSeB^z^$u4~ z^~Hjxb9#y3r&2RqHEj8X`2>G_qVorS#O*=u;PDA$xsa#*oCuW;pPtRs0(Oci6d2Ly zG>JZ?hMPlGK9WsX|F}T%maShZXT>^2_Zn~Kgq#Y zN+rK$qK}|BojHws@KAZ?^{JBuI)3BbAG~?nPmTy#$idvX7x3A4yAu6d7SZ~&S1bVQ zdguBJxR?-;RSiz42CV>cCd|JQhSx zTOq6!RG)-Ky*Pxy&#dS%{V(pVl1Sla5TbN%KUH#2TgzbekI{ePQ)JOJ62)>N`P6k| zvre4~0QW1D)v}If*>@-Ukj+hHk%<-bh7}O{VAM*jfX;|QAuhwg-)@72?Qdd#Qyp#t z?q3JNBs8ku$4^e<#nTkBl>R08lCEE%13$75%RSLz`-D+xFqKxg{IfaPp}u)j z+2>5@#q}(%alGlpvb(}G07`dt`1*}s$m1Bo@Vm>v@01*wCT~~fzdp5 zoG#7J#UTYj5Tqhm}}1~>VE+tH{}kEPr7jxLqB{Ua|(oCW|`Y#cO01o51MB&6l^ z%=3wHIl@0G#MVxBj+g6LY+TlzT@RbOmrDgc9^p!py?LI%<6*u#EB=O5hcupY^!@&=nP13b2+MY5w#?uxx?#vyeI5>To>ip4TwZD$D7-ID9^Ob z%J&r}84529tq|C{5V=7$1d!D^nZTt5@^g2ZT=rkIKW??+bzIrsbv5HaP_b z(+I4G8un?V&;5}W<}adu zsqtl`ALs!eIzsGye<$)ihPa}DWb6j8YP93EHzs8zC2SbRZn3C}Mi=6aAq?gX23Tvsxxg3MOH!cdJ zlfv^BjZ?gF17#IL8~jpPh3?e+&`1cD8jFiBl@{{mOT7A+LoCwJHUfo~mOBuJ<4KXa%vCX_?_ z##FfC_oL$Z!Ash!XV~nm6iiAQsKOpRZDJLaV7NW_X-nuoI_7+oHFEGxIyf(CdRjkN zfq|u9OJO=@s=UfTp&O>nAkLJC<-txm!gN0OSdE19KE`!Dg4^{JLQByp!iv9du_f!% z%|KY;9PWqOe!-E?I2hsn9+ccXDwS`DG6*8;V~A+%Vm2rkY}r2(u#EqnQSF^^&IVI6 z->YT*x;c_T!EX~KAc+6eeLBf43P%;2vt^`c`*4V{rZfjRqhwUFBLvlr$4_)Dw+~cx zDm4Thcln3dbVZP2$mN{^5qQ+AYXlMpcWj{~nSc6J&OHRcjM&>Bw z5(t>vv3w5E-p_SMG4$g>6WwXzcQ-w#IQ1~d6uE^(I)lB6UKmF3u;5Vf;V6ZIJ~O9y z$jA6~Tll$)bPZPZU><+E->Uw5Iq(kgwjG@Q-w)S7I z!T8;wysKE9O93y&vGd~Z90TX@-&ygw*vMC*F}>-m?DO%8@V%gpH8soh5AGE+!2n0U@H*3ib?*?xzLKf_AD7LL{lzQ(*0L>qmD7<70CcM|Fh zFIl>jtFoY!uh|BbT#l^!@wjz(1z9<{^)H(~=8t-5d^){@_i8N#1UDVN{(_1eMqIf! zdt}^h(e)!V0($hhp}v8qe|hbO#gCUlIiN7^} za2i>9gv5KA?oLI{FIlfw4BQS6T|>g1LDs}X)8-7inaY<$0HM)v+tPL=J<${Iu!3WE zDLR7Rx|fEUZ(j20g=X;RI((*#)Bj|(l^4s%wc`%X>2TLB+av`Lsd_B}d%4avCsO+y1x|Mn!V8)gmh>sDZu2+}w#Zk9E1wxa^ z&bmx5d3U|;yx(SNQw1G!Mbj%PIKE)(y!i1r%Da*}w6$a`B*<30a<_NZaQrNaQCV4s zEAy3pWF)1f;E8Xb>%ZrWB9t}oom$sDqBn)p1~B}FqxWxUGI@FqF=9o&KO_S;sBTL) z0I)kxzYjjMxDLzzD_=~2ic7^_mc*wsZTfe}58vXm@*(32N*?1%NalL`MAPGjjsc!` zTNv4#+;3Bc$wf$>-YT_4YF1yh~(_$3I8?XZnc#wg3*5O`koxvaELic!{#4Y<{1e3ws65qu2%E+ zyMXH=uG13>5pP!+!>~-BpsZ7nv259!E1fRRM{`8qSX%tHJ7}F^1ZdqHjjtE*5Y$)V zfzo{nYHn@_^tuXa+d=8T1Nr+YtkT;@fBS;KEB84KFb^5^nDKrA#WUDn*RjGa>KermeEC1iJ!X@M`IHO44#k=Jyqj-AzcwsF?XqW*MHej zGmxP9gax{z#wl$mynCbZiX-Uo@HUXQJKH_XLz^u2OERTxs*izhdL)o7@+F5n!4P&4 z_h@#ttt0;bn{?kx^v^g9Nn2)Cu*8CQ6p6^ z**cw{Z1TYSs`NHb#!weZdvWzJedz}E&D>m}KUjJdpv!E}>84B$Lv~*uAoi_%AGeQt zY@ND;pH9B_Qa0R}OoR!LtRBO6YUxOr`+M%O^A2X@JeG`5`5=GuV zc%I}r3}DYEhtD+VGaLFeYHqJomr%Fs0p~*(^u7Vd58~cIG0Y@a4=5Mze%4;7-C_0e zT2~ZPQAGMZe{Q^guV(M1^U^Eqrq20#k=5=lyL=T}FX$)W;aYpo_&$JN?7MioMAl)^ zPq&W1m}oJRiwSfGag1!tS=ZRy`r;A56>{&|`?%x(_#ofW=n4()$RY_yK*rP%zR^R=v22Flm4oB-}sv8ce7g7CIfCZ2z1r{7w&A(V^36@9%dp z2ctpaN(p5=N^uA&U+`z%2xzs$PF`i$nntcCiR5*k=GX7Ey!OFe^D?n2*aKJBj`jAA z0Fqp6B+e>d{$YF!xN*Ga+JTugnBR5YISD{-192&*J!A~RTrT7A%(U!azsU+D;n+YO zg`uxE(*2(gabs3PWG8bGK0AqS!9Ub7ynt>42cJOCzQqgF3TtEs&BJHp>0$Sz5%brX zZN9f8mo@U*RJ@rp2w$kQ3IR))f%|J-p1U+|M2UDy&%=wrhVjDH1Ez7yfmeef`msr3-tu$@GWH zDLdI$@yC#+62WEL217T>98})7&OAl{VeYj-&c+zjZZW5Aj7~8{rRV?xF!T2e%R6+3 zYi5Jr6H*~+qy3q0sR4tM`Gd?Z6$i16StpV17P)rBmr&)6^6WzPzKEbfM0gP{HP|Nd zMSTf@?7U$tTb?YBqC=n(bgg4y8YS!vxiHgW#c%U@FP!>%A?T#>e)H&HmFAcITP!Y& z7sy!PkjT`quX-7MHxu~zJ5>wZp;S_3v;Osm3r3Uw7?J^7z*QfbADJLTiwhij9iC7P z3`ITX{W|VX#Xijaf`!S#yBnJTK9hlY0NVR9r%(GJKA%dXO2c ztdzMP%NJ%doo{dOl0$~bmE{`|p9o*gzYeAG-xF4FFy==kgR_^E+aP0>*v3}861D(n z0C!|)TcMB1#!z7b!&l6BkC#$vxat_(AW~A7BQzK}=TuMx6_Y?#`}aOTrLvt|8@2#5 z3<>ExMcvSn!=tLz&_0webSO-myO3lfNm!9%`$vDHk=Li<*l{zNIQoN0c6s{9<@Z*{ z#oUw17(*)FemkRVF3Um-9~qg*=t=#>KpdM?qY3C3aWuxJ!NwR*B~s2!SU}zHrZoA~ zx%K7vw%apJl6>>FU?|MVO_GF<$X?1PpeqQdfs*vNUTz>px6jJxqLoYE;@TU0cI*!o z5i5LJnz0nz>We4e{c!bqs-XOY+3aiHvmhfdX0LhEUk9j@aamdSDo^Vx?*W=K<#*lh z$aezqE%jWcoQ3R$sNPWaE+Cr!9V4#Gv+9g=sSM^VB%cOxLV}z8W6;;k?zZCtFT0uy z?1iN(65SJGKK<#4pd}>^DGCAlW4{!0Z?l+v4*=^>3IO&nY&alKb>xx>4?Un=$F3pp zo+A6HmJ5N4BZ@6-8 zoR*cwMSz|$i7E#R3{et{9bApcf`mesq)n%y^eFQ6;5&!URA{`X?N@M2Cc_QznBJ63 zHuH7a;qCp|k8;kBgsWBwktx6U!bY}un7OK>WG<#{w)J*fO%BS5%toi;X*_C+AX8p)ft?!1P$KOk<B=X%1O7YAd*sEo$g~6wTn^s z&*cRL2Z7BWZY14;5d_3B%DM$*W%M$1tQK1MJBWX~iv~pcshg^z)R?h? zk9dynjvslIWp7DUiu-{iW?4)B#X)?w2NSTxGJ)sJhC}aeFt>{&BrS{yS1@G39a0E^ zZ~kgaB|UEW?D4vWQbWs-;Tlg|dh<8$wUxbK}Kj@I}T=OMCD6;qEe|WY*Ft z+F}WpX6flxZ=U?H7Fx>`|EABAQ#s`)9mdqhii{1?Qc`-W(_KDmh=z>;VSkkeCf5!A)$ETp?AZm_CzAnX)D9UHgGZY{s&%}4&A z#Z}+^jWK`%t@5dTpE3#GTS`e=QcLUTSe5AX?W$%x@`Sc6X}ntW;^uJOC53b3r{Vhe z_#7d@XAJE@*V{Id$^ZJIURO%gmL9q_mUiutYjyGw!R-gr{yb$@_1NP2SneIID@J0y zXP4*4WoKccy_VH_laaeUNLix z_{<10(zm+Mi$rAR--yZgR6;>84gUb>Lx?kkXO}6#Ji{9r_CEW|U5l z_gTDE$5}F%m=l;g^zr7M=Ft9Q2mtenGhJ2?7(alpXjcmx-s$z~jB2bzu!^#N(;TL= zG5Njrj5Ofim`l&H4OY@9Dq$5P@Qn-rV()PP7zT495x=eq=HBW|bI&g|5c_z-?4pD&ql}eE2U=}}B0DH`1R+Y- z5z47?=ZY1ad}J$ep0pQ@_Yjr06YysE9q{PBB=_y_cz^Q~=5OGnG5&mO-6UQDgcJ%~|Pf#9Gtwy}E(^@IhJAQ$3xo#xIOo z^pkj5B8%Aiui>n9``#C7pv(V8DZ}rNy7(H{E{C9v=y$gZ#88oTCQuD?z#B9E&Ugf% z+$e5N58B}$o@uyO(hxVZa7|0xHap%GBdm!%Aeh;J>7VyU#QGjMtbUDT3HEMcf1%SJ z2Ek)dsKF-2ki`d1ST=V9dgj&JN3ks77_#eQx#lxoaW>jL%AX)aXfCdR5NLezw?8~5 zJW;kLwz zY}&}Kfkeoe;(Px0IIRIOoRX*f!Mh1R|KpA=`2hi!t&hXJRt%OLY`QG(Y@QE%)zvPg zOwWebz^m~y^raL=yZMqIk0mcP?>!k=dQuYH@{18{hS!5zy*#8o(8~)|oz~2ZXQA#d z_Wh@ikuhqvl&#$1}%XEroO~aM_d*r@=`tIMd zJ3zo}`?ha(VYt~Xcufc(#&`iCSw;Suk_kL8X||{RmcKjA&Es)_mZM}gbQL*IrDT~; zhnV5khZH0L1rQ62G);jEtCre&5PCc@P_72usXbobf&j6Y9uS#0K)B)T0TW(si+Vt7 zHBO-@AGSzuw=OWA1@3QX#Sn=(9Is`;r@co+U<~e9&=9ZxSqtuGUbO)DRyT0JhVr#k|dmJTdyL*bGHh zKCLz}Xmq(^sk2s=CgIBA5u@Yy_}>=&Fhr5oE4!Q%@X|T|)tZnYANDQ8Y+Z6S(Wlr~ zl=uIj7f=H3SZoALXw&Ez*W zo6F#BU*@a~G=aXhvOg^7m{vWo(B<(-J!`AVz7u>7mDmGE1QoOvnj9P+WQta?+SRFf zv}7;iXyzj7e$uWu)dc;4x&Hp(ao=HoMCo%F{c!l7q-@>qp46;%$b?N$ch{+Ni0}oZj!F6xlGnN$RhV?s>%Y%9L74 zddj`S-Jkg~2-K%F5RM$!5uc}m+k1^H9uyf;WU`&cH4z_WvXetCN9Xc1E@;qG9&zU+ zLu;v*+qK2pF|)K&VC)Wd_%lsk-ygAEi89<&7^6hEHqyW04+~!$o$lHLVQ*c71?Hp8DJw*>e;G1VQGTOs{LDw~haEF{bL z&@0Mr^CI|&^dbE*>3vMyMTeen7w3IB)*b8rfWXg}; zGT|FX>nSbS7}H>y+W^r-Gp-}!n}EP8IIyNu&peaj1(^bdJT_}da$TofA3T( zomC|XipCHy27dD>(a3x-K{h<~b;FFaKOWU=yQN;!5qa;(NU}Q}f-l=g5?9VtlE{}I zgM}Lh949fABXKgun2eEKtUq3%MG1KABqIN1MYitK!D)zAL4lltMz7LiMSbUvXC?YX z1ZHuI$YBSrIGQ5bLZV&huHffKCYD|8PSyDWI+EH4lf}}MU>Lvrn|Rd#oD80AmFGv} zJ$l3qUc{PVW(2nfa3C%m0LB<%aoAz{oqtZ!!{LY>>6|fEz9Gwdo43N%=yDX~56i%8 z54wR%c(RZDia*Tu#z=M9z}~fN1Bw#n4A-Wr09aznN&)yJx8jkL>Jx`TJ_`b4R!)op zUoFyI{*Ln5CG6Z|a1fCNyAP=&Jjv4B9lgIgz5*o^xselr+&78BXBFN z{4|uO(yMWIiD&}0LrW=t#RXinXw2{@7_?uHUfn9u5VYj~vR?OH35+JZGdjHVT&T$0 z$J{|-Qjj|g51}lcK*c~+jKXQQ0lK%iKFbUlIJ~eO!uGPjaN$cACIFg_qSA_uS!Omu zEG`M#HTq(Sd1ApCmde6XnnoP&v(bZGm7{mQg}yQevgg4*G;d{snofklousq}g*xqf z!{b~xK6j8!B9zrSUHkC-XZp$MbFSBcJ8s*)uk4vl8Fnai-p+KB*)x6L=ZlCrfA;6v z=)F@WZtv{bo#QF(HBV8t+6AqXUb}SnXWjvcmPzAD)Zp!hNJg3y2L%6HE2S-Z&;h8* zjqW9j#9rQU+vC-6i_2TVeav||67IqG9Mj4gv*V%PzWmgktKj&?!uzzBDqyQR)#!w; zC`9&&60`a9tfzousXjq^>xq&S3K`m?^N|7N_Y?#m(3%-52sVR24I~I#cNZMhO(k}Qut%YS0R>KCyb-!J>ae6S(ZSK!be96wU91#ktjIkELiS8z6; zM`>V(F!!cVk{JYjj+qCLWAwg^IxilPNlF2Xu8tfhK#XEK`C1NONfx1yT z@KOJ~UV^d~Wvl)`NhNsrw+w6mrE~^dw<~y;^u9~71s$G@)tN8`IEv{w8|mm&i~0bM znpG>zl(%_*7*O_Cr7!Az1xq+M1DJVT^e=w)5gB}6+%Ze1&9ViT8UlndQ^;~AJZGwK z80<$m*J210$A(z$x_i5`lbNCnTYc=xiIGq)3k*R~IJE9}XDt^VV^5-=9RG9OGY&QD zVtP@&t*c!LFGwUw4;hUxMRSE~Y8-)%G{*CPlLN_Se@I{-e!tqR!Wut^YZDc}hHSMO z*LL+gA-=f5@d6G}dW-5#MBbS$yGEacTZN(XD_CUM`);v#L~c^>XbG>~n`g7ySD<64on`n{4l z6P*j;a8}JbWLP0PUAG`;s583YvpQ5`vQ2L*Y?gi-GEzP2hEjCouTr9JSRf+6@+_My zPt$l<3)k#a>4dqzQ^xh=vQ$1ufLsOHQ#(G{td2F*gRW>D5&z9?Y(l{+7 z^Sp6+@5njXg`q=446$|O?wily)!A!tp8j@P)qz??LXHSxf;>5;u}qlNIX zm9F#m+k>|^1{Je|J+kyXe~$axvRXLT(C&*KkM?SEbAfZ*%URqw$HeHEe}klj0ZLmo zFH21{vAtx|jJFO?y*gfBs85G|$hV#r*$!+{$jg1!UiL243mR|@&GNQ6s%jqSvB8_5 zia!o1K1lp?t#;AG&v4uZaiaU#UU^kJTR5+;=TsoL4>SBZ_1wDHrSiA+FRBjF8YLB2 z4JLpsfRP+@4_8K$Aw6osR=yV`bb8DVz04$V@K-mHsPrn?F)Fcn07aMr_SoVc3<%x@ z;Dt1YxnB7FMXH$?Cq)VRLkHm2*>3Nr15*B%eCLw-kg)YZ@2tZXCVLryYHA4Ah{W5W zU)x*DcP9xa0mdty8Am|mKMl8?LQ5K;b_V|I0indAj-@rm#)V!~nJt3pq+7UL2(i;s z%>F92FS@yAcEioTw)w1=@w#r&N*Qc`Y%KK-0fp)p7xu6KtYDQ%2b*hK7Cx%W=d;{T zI0_T>D`+F|177ouzE$l`2Aj>Se#0FZf64U1%0JTDDL#!;T)-)4x`xty5R&fm%mgw++&AIpY?S1GN~&E zT`aGg$o^L>rv57y#ZphZzQy;#mDL5SJ%&Wm|CaqOE0a?D=wJnqPVI{5d3gKSUHMQM z^i|P9wHM1TV$=$smW;kLm0fQ>f6jb*rEtyfY-m`zXaxkpg?EyWxr@A`@#pi$--`Hx z8JWq9#R*Bo$NDJ2!rC$M@IF3w4YjY$EM z{aY36oB28|4Cpo6DWCz41yq%yp{`d4cMNU#U+vdABe2^29ssItrA@X&?>Kih%59b) zWBg+gGdq*8y+R?wK`jse+Mb+B=}lKSMgs4;kyv9X9a{0g7Qy_?0%!(j8p?ubk64Zy`| z3(u+WNtm~)<55g*WPBF1uDh+Jc2`X#($7g*j|xDvnNQTUGHWAeOB%DP=Z}8v{;2d5=iYC9A~QWy0=H~T&5p3 z6PhupL-)~0yBkcA8`%@)ZIT>^dgCnYa#YkjFgIWFU8XKXcK3Kj67lCMA_)JJgxHcz zco`H*1pZ1F|A8l=`WMo*!#7#nuVv@cDCjzG(Oh!x*mKZPV!YBzmt4B(rvhMnMw3d$z8OpZW1r_9dEsSn+kp%PqiYklVQ7xJeR7|ae^&gZ;Dt4@=5RPB8amRBgDaRx$Bkd*%ObfG5ul5q zR+SHwA=Tv<{5~}(*gic&TunwKg^%TV*2$oGJ#9cvZdMlQPQhCYeVw^AtA7^*DEOGd zSDOs}q~eT;`OK^ropWB6rg3hykl{<9ul2I)+k(suk3O9I9bRpUN>HSwpWh;DB*0rH zYd9HGfCz(DJ$PsRT-1bfr|=8Q7dCBmwG=pquCBFBJ|7W4m<~+my z5lD7`tM6z6i5H;M|F)#`a!p?@N6CGy{FLVndB!tY=_hR3e1p5!Ti+jSA5J>Xwp7JV z09D`d;hh2r*H)oLG^`ZIz!Q!%j9kQ_hO zSq$@vJ$uGme{^UDQ>-<2x9&^l|D0-Ph)`J6Tv#dL(_ELUwF(WRk%{k}QRm2fxA(N0#9?$UYCF*G{ ziw3}`)R$qJFD?#;jGXK_JEh79B`={3MAF*2WqmC)$x>?I<06{PaF;MF!_eu~rudp( z!0Q+qbH1QMwdTD3)$LVT*s=tJn-Z4EO%L+dqIe(iUsYQ=qMuN@kx{Y(`}5T=p@n$NaHuC1R;B(>a=+R&DANsHplQ4^C0_U~FBJTh_$!bmPJN zR(Yj@-lOW*g^vvjP1*JL&`%nbw5d-z)?K{GPLjEt>fq@GJ=OlXcC|k__c9p*M1YJI zKA$8e?4Ji;#3OR@9J=|zGP^VZ;Bl9K!V5aYPdinErPdE^?~-1KK-X8ywTE9trc9>y zhPIxpPRCvR^Kp;R0CV@hmS7Bxc|yUeu}b`bjYUd@Mr=QTSV7`>e>a|q7$*mm zU17}xDz|?;)1h`^qpa#awf;Zcwe%4+(_u^>Tl`1pDd8>^ z{IE2uoKajikP!=xN_;3it(nwsGY;C%FZi|XV)4Nnu6yUM(CXrJn%cMhFGfGgage;_ zzc=pq=hI%d{~{Ho(k{lP(W{g?5(R2)Pkx%5@d9iS`U1o5e-bxz6i0eT7BL|6Gr60E zxyQKUma&D~kgo1&QGjl zGwu1N@`h=DSrrHgo~NF(?e@QvQPZ(WZs9Dp4Xd-Xki_`9^*BxhTHWKCM7SSh53hBrsSi zkA!gk5{Edgp5{12;S6jBTzyqBSxS>R4Egd$H+M;p_$-!3;pRkZhr;I%ykgyS@n5hoi*);KAZncjkKJMO2LdLXgxP>>u=L(3juj2$s}B0r?>_bn=O9ll(nV& zn#o=!uZ8eU9?CLT?sbB_2m9~gL^Pchs z=!^`ePxqM(Tj#a%P0}k2XmSBD=^&?MgOz!0-M?xQyt}pk0k*H0Rwv@|yEHP1vvdp) zKlajtI&DtBn~Pg=no;-2HbR{mHszjbYCFAEy&#L-%HK5>Wcw{ff)@ahu)yz$l4Rhq z>a1An0_@!umpfMd#|7{Ic^qwod1kymDBr4CxK~T40?>6}gipdi13a7eGA~{xj?~T1 zfqs^&lOqsE{lW`_{RhU5hh_f$9jl0nC4;RtUkD{x3XxR+!ikNj3Llt4c~{CqFHy7} z1sGv&EL!yF;nv%ywY>gC79l>kwQK&>9pM6Ir{j(cNjW8@lElCy_~D)#V9Z=<4)L~` zR2EkE?TR}2WW42}595p^dmY4`AR7@YFC~IW3NHQrjZasVql-w1~v#$67 zja$AA>yCLKt_m~S?61tKB@puT@k_^!TciLJu$|iCjjLJ9}fB7i%Dk&?!QueOG z;3o{eAA|j!cv$MV>tptMYWCVL!j0OmKl1j{C9#d2E#%)5B=!mvO+z`>XxXq3rI}^^ z^iILc{)Dsx2xjKA*K!@-og$sT>Cm=bY5#5NCP-cEqCbP z9+OXxR~W#fuOsL}mh={`sl7N}%^AvZMl(giP4H$ax^FLt5B|bdY**5?Og`L;pZiBV zHLo6B9J?!wmRxX5QLo+k1^HP1iuM>%6f%HfCEG{dUyE8wY9p`}wL4rRoNBvnw?PD* zmcdez^qppWtgVK*)=b{m@bW}tVwT9Ieb)Kv%@ZRbO<5q%5++721850vMUS{`(=fIo zCE7iERd$vla)vbmbo(olnEYY6R_)Jk^~DI`=3 z@zHH(1FoXQzg9+tmp-8Mx#DmyMfI8W4HuKNpp9_ z+GaFC5p*x%%X;OLsJ5c`XHW7O=l$AE^CoOfI6k3M-j2#LJUO^3Vgn^$bM<7HCf(%s zgEUhBMZ3UHPJu8>F^hEujr)$dBAtcVS5hLZ57z+<%sYBg-f?+CWfh?zY3`vRms!FK z@9BD`&Ep7ohQJ6*?gPa-Fq_k*wcQOx3#jB;Pr}Pgv@sA>D%2X z4IV2wV=IezkIOx@p`%ERl)U)-hcO`s6(*>4K;GZuT@Z1H2C&}cXhR6V4}zsfb(k0~ zyAdl&5ETB%JLf-iT%LgsX$ZI~q#L=@#J(Oxx;XPH>Yc^XG(vv(J2Pc#GQ!?&o*U(k z&XxQ$fDDO1Om0x0;`PrT%N~P0ZzLJdEMLbqlV$k{*l}FIEQO>Tx{Dk(#P*;>eCj2= z1@55w(*<7_!!>jmc=fFx?6ST7c5IyUWbWokw#(G3fi-Yv%C)7{OJugBv??2q`dhm- z#uPC|qt7>B{?fAZ`^10hqbj%-&Yc#+3Q&Z_-80oNKlo*e4teCb0%iV0>JufZG?@@- zRZfOCR2v+Rt^(UaoCu;Pmdp^`E&52@SJy)|{9#M^nUt7iRIG|T8>8g2qKiUA=uBRWvZ_vxTLIck5*5C;qWhuGNX| zS>f@y!WrV-5>RACF%bnXvsx||sJU)}cBd{8!X0oSpLZh_jxogk`>I1+3Tl65(sLN3 zc0FzeC*r=RN#Izn$8+Ih$ZE-9>%XyfVz@c;>(J}3Ulm9m@yLsZb950Dq#02ZX^M!t z@i=W4P`?n{0b5rlv=i2jF?H#I2yhvYb?+-NMA6sJJPLnf77Q#p{N=$n9dkW4Zz-nq z{?kPyMKEo$@g%nBuywOmTj#yEc0n3#yaVLLl{;k{DV`W9Z;bDQO@4*AfvIhw5jsrJ zh+zOZ=Z89O_tWdfa(Ax^Tw&b}!S3NpxtwUDZOn35qTQ5@!;>ZZnYFt!ce5u%*H#V! z;DTVbV(rDAk*TpUYlBesy7gCMG%E5*;#adJxH7uB*f{`z;=#@SPjx+8T6 z=5cdH0)kb<^uKqr*Zt%%t(rM@d$h3u;BO#a7#b}ouS8H2fgJrx9GpnLx8qzg z7ox%Qhbt~ZttCa7{G^?7`k&--k~0L}5lPFyzh*vXqhz5ZR|KYH(7@{CeKclZ9~i#X*R78P>I+6?TCY)&hwR?2KbGClJZg5FNW30&a)?*5l6yN| z{r)}wXQ=y6mqQ%V`WNSa zFA|QS`+OG$LMQKj@)!K%oI!f5VW|VT%_l?JV`!e)IPOd)9CQft=bH|d8*{hYmx1rG zj^5d?i^!ljv7dj-m~0Yr9;it9GTg{8h1oKR`2J7w3(jLQr1fO9A|)x7`Y2#U^U98n zG|szQ^I5G_qQJC#i(oFl*kLAZy#P9FnUOT+W`3SEPAC3~r;JMP&@F(>{UJi+-uRivzR`>0jMdvuwT}L% z!?)o_^rTleTW*n(!oU0*MUwYz-8W)d@x*kRfA=xt(0B7k3P_nBZ6dyOeHTZ5H2OR3 zDjn{Gno{}{eQMq-5UM|^LWqILh=-*76*6p;*GA@;cAGP!UYNMkb%scIQN~LuRs_x+ z?$lH{u`gn8is9Bf7HtMdX<&-&hDgiC@4Om1pcic`1x?;Ok*3UTQ4A0}NOv^7VVIv{ z9jT4R&d+|zH_7G7uF$^{?t%xT8SLe{)6EdGIXYEq!ad z7#;Hw)T6OaL8uSkt|UTj6#Z<#7FGzkcNVSBLD!m|VO_z5%p)52s>q}UUptX%ueK> zviFqUSg{*-(wvOT^f)4e;f!S+G9r(e5@G?0VkCiurO1l zZDyX!OQkbvPYtizMaYCJUH`VtZn?}LwB?*6%S_y!fMVZs*3b*W-;ZV~uU3|*@0 z2Fx~Cx!54#LE|O5b+n|P{Eq#$A||OEvn9JX(qn8Vh2^u2<6V)1+fIX>F^&x^9YJ8~ z#TX;Xs1iG8zqY1Z@|=An3QV2e==nM#k4>~W{~NYaYI34cqmg2)H(r4e-etvNC=e=Q z!tq7OpO+L_qd#9%TK#iL%UPNHRS4W;k)`bD^959bJ|7^|E`#Edi-ErJj%jIZf3E+f z-*v7S0*k9mK0RnT#7{sGf{PW$@rFl@T&Tp0D6gcTs{|s0T20~w83zo>QJpE2x z?E7o+z+HWH614?2x=td?X^he#W&M63M6AS~3FZhpfu_$O%WR>@2?0tZ2c2mLlYtM(qOQ6x?6q42T+(Ov&D z_fJruoiU~=kufd1YVzrooDlZk%uie^g==Zh4VE7h7#6|wy29ln*# z+oX<*K;h%7g$`Cca}56Ipmz}z;qAvFPpwc5W-M(HGyxDX>&5pcCERB^1>yNU_G6Vt ztK|X*D`UR@<-|$)-Mc_~StURw?)XFc$O|+64-stETy#=HRlmJ#brW%YVEiriK7`F z_$aGYTR=K(Vy*H=P=sPry!|`)E?tGCBRPIdhyq8ueex(*TBJ*=8KGBFh9jyAM4oV^ zquRS)Oqit5w}S#c<+a(qyWQk$I-NMAtrCHH0=FEB$AF~8f*z}BRy@~)60 z_s+G%;LG0QK_$-5y@+*K*wsE^(&`le8`Z?y_}e>e29DOSw0NDCl()wFO*loem+ic zmu=~~Ofe7ot#gDlCzf5R`> z6+?@CYf8k5vdumvS>{BYI2qsVb4msO2T!m$4gGBKKE@E-aNO~D+JqpE%Y{$GDG|D0Vt5*p8UFlRI=*j-J5-o55Nf)qJ1L(`(|tpii-wQ>DEoE!?BIw*yd;bIrBVuUFdug(wpC|DK^MgW7RNo-HRJg$rP@VF zntV5l(i7@E-Y^1<2Ki8{te)jnAILO_69(5GVPtvDRaJ_57Pp8N4N=dYQNM{SlgG`TS720(Yh2KS&0; zb@M~|L zZY|#-N3{p9{J5{Z{Tc7WpYB*D&N$gplq=g)ROS-M%l@fdBZ>DI=e@_Q4pV1|z4Wf_ ziCuR12lP^-pCA8RUr#V0tVwYSrX_^$Js*PKJU*UhKhl$Vb)!6cVFUj9@ls`VXG-<9 zx#aZBS0T#{JzT+6bRCWFXv(^BCm&#bnj%D;MB@D3NMGNg`rDI%{jl(B%FuZaHxljaBgCJF z(YYd=p>x~otG9{jnzQ(ywjBaV8M_Hox%;+683PJXQPU^F-XJG0NxHeLT;?F4gBt@O(53E;~+e2rIT;18mG9 z1eYe$w0v`1B_%9q2b?Z^*@SyZOn^C+0){>0nMhor1DoKO@O9=7-C4z?BbW1H`QNiv zuH}p1G3I1O;nnS=)jjPZ&)iFrPB_?!s`)6PJ272fyiViiCFTeBWbp0&`p1>~X72==gT>J_Uzt!-NAupnBWiiyHxjowx70R$J=OgUh+|j$9Ky6zLzvZ-dW<z@$|5@Ys;oOEv!KL#UG4&hHS1?)qjkk><>ll5CUqr#T2 zDPn6P*z(Sao)5k(-;RBy1UDC2xRr_5&=QDeZSO-0!}IdcXCk2nqEpeJN= zc0@DvNfW%Tb6PbjS5z^QL(kNj`7~(q($CMi%b^E{fkGr~!%0p4XTy1B;iNXTJICO6 zm2)iAVYRD2r*7VEbKQVheJiF96N}nv#Zuik4rgOH$wD7Bi23c}`I(9x^fBc5S*0~1 zi#=YYd^3OExY!;KDe&as2B6sx^TYE*)B%9Fnf^XL6}6P{gfe3mF;2u%_0tF&-v46A zDKFqGu#fP zMk$*)t&aVV2R1+mrD}D?b-vpdKj@{3Tdf8;{+~jZWfolf*L&rBef;VG0m(q*X?@K& zm|(^{&5>J2$bEv`T-bEhzjbN6P@W}HNM0(b6s)U*BHu2AXM4yO8kDu> z5KXoM1pBg>zET5;ebg~AHa*0xfUw)lU`sJ7Xqh`?OQB%eXO)$R79CJW^(4gD8+Re=3)W^aHnUwEhBdd=IeV(wZw)h)|Ab!Q&8`IswiO~t~ zD+Y}{5IYOEtqI%70>9!8Rd|pht{(jD!Q&#wviEbP>3m@df%VB73#Tn9vxY#wb9B5R zJnNGbkaYT5AR)|Ue^!c)cdhn+%E|L5E zT5tSNazMMkUuX+-;wIhx*4T9kipkF`Rt03e z$h+{v2d5|_l&*VWxRv!p9{ z&GKedOWztM9{<+UCCZJarp$LzeH%Nt&wyB+u3rljTTAmk`Lk@JfYa04&X2#3PVGYzr*S}}+b0#hi2Y(6 z1wHlYz%zPxJ|htyWsMYTFV(hy?-8|&caWzF`dMvaZBjIKcVLnRDj7Dvv!kuie$uLI z>~c+Pav#6cM&I^~44F#~onx=Bb=}>zp*ZA(4c@8D=IFyi0e!*Z2$?(t z;$R{aaAe|W-Ix;&!#I^fTeSM4eWithMtJno4QVp<|dAvq2jszG|K;GCF zx1!?|54`1ZPKWQwtJjQwdznwQb^9tHnzR9pww}@XH>7~|D`R7&IR{ObQ;%)9<&3s3 z9duWWi62H;suqEA_+axt)ySp7&-J63p6>g^)TsjZQr z-9W`$lBT9p1w)0BIfAkKW|$2jA?E||p*~m2RHp$dds5=730ru3Pg;!QSJ5wNo=E>k zuEZ?E`hTI%1qgct{QuLFQ*OYSIpR6=f|O0WP~e+Wh6Tkt90EXmmeVdI4Wt42lZ8UU z_IN%15%Do}yDLztKc(Ru0xDT!8pA4d-fYM8*Q5YYqWZMaE(9hx_F}!;rgmAN%qjmw z<)tt}jVgbpzHf~|Nt6!hex(Gk%Ey^!Yd9MfkUc^XR;#6|Ek@-e% zCkt7t5TnV#r55;;kxY+!(R_kMkp4?^m3c{JZj?mI?4CPc_WhWb*RG+Frh#Fx3{Jfs z;#-afydgJ_5hLjHN2{)wr?}#-l}{UMjW1&fm8i6Psn~Y1cur*Ke9#PG!eFd>I9@jq(Wsq0IMsp^bi+sEh-CmdWv0+9S*UrLn2E z)AhqUMBJMTNyYfvBhPHD`PW_`^BWGoS6fp62|$QFf5fy1b}-VTme!KuJii7vsR zaFt*SHOK7utJD4L7BZ43k#1tf`O5l1?R193jo&>IilnV9^}&!twzq!5LvN6o!=xo7 zKvI`l%Dk!Vgh0X-H<$rMi+o6E<1J#-OOvGGC#C=qclc*y2E)|+?{VmynBCS7PPBj= zcWUL`mv0e1J@+Rl9RZM9$DP08edS=k+9cXiTS*RpQ$0*tQu>gCPr(nJT|928vuH$6 zKYm0n!CD~ROwHITx+(RDKZ=EaOmcSczqJXYwd+Q*ilyCq5>P5|`j5-ddNk>v4k>xQ=((rd1QD866CCs;cabI#tcM39s>0oxP1GJ0`_#U7wHKq$Zy_3_0FRP@R76ZN+ z6SyCc|C&MMjB}%)OR#9976V;q*j`#AZJhov$r5QnSbd&K-Rj(&Y4o|xgNMk=lL9&KJWDy2U~3!{;a zM~K0oXu1;3i5f4d?F1w5LUa&?KIT0YV5rL7lzH26FGU;ev+Rd}WmfeXh;z#vwp3a( zgw_cDua!iMY*TwJ2hYi$6~*u!5dEPh78E6|sODju{5F#zY^hc6R@~`0Jqg?wV&E45 zpXRBGi81c&J2#BL{}nuOPpw8^GSyqZJEH!P@YQ+q@@dTlrr$XOA6{G*uBK}NW`FHv z@A!t`d_vrEU!lz{-mUv%Sja*A<_ApBao#(i&v8}8oso;5dD)mGu3CiXei*-?LI3KEN*Xat6jP)-Z z`?y=I(9>&xVq8#g@>}LtLS+W`FHc?@lADqy|KaP0<4^s4I_$6u*=EoDw)juFRLK5e z*=lSbiA>Y{`-cAE&jU!<=Q0R5zx$XClPr+00`6om?9?o${~L9PbA%9CE5vX&(?80-j<||4Dsh(&xi?Jrz1CwgK8up78AHclrBlN>`-|^0?krEu%F+m zGUi$&YeQCTw6UIR3?`0joG;O40gbP*^w`w=`(yWsk*P|t{O8vELmsb%M(!f^6MFh^ z|JB{|`F{cB5n_itioe$q*->8oO#v!7(`**MtKCvE}-LegsXiFC9*jm+voEiuyd31fe%u@-S6dnf~!kv30gDZj@3jmE@#3 zlUtKM=tGvGTcR3gS8Ff*TYN;m_C43UXTwjd9eRteMA1?6!U8H*ZefdNJkezv$_?Bd zD3pTM?-;WSnu9_z_{mGKt_gI~BmX`kIROY{Xb6-Iu(hYRLcr-RLEw{lwS3 zP)Q+g_!9@b?eHYJDD(wmwiP@2+n^C?3_H``%7Tt|i4(#%$~yW)Y2buxwFMSRh><{? z<5wy+`*+8pY`y(E;3&ilV&}g&fCqS-IDKAo;{#2wm!o87$Dajc=9cJL)lo4!PgIuR zy?{e{H1=}cI*|m|rsso0s0YKkFdpv@3`sR>{*bH`nO{V!@sT{atvY>m?f zF)j`A1oFFd#~ihiUZ=puPr`!RIKkU}#5%wN?`9F@?;|%F@-?5pxTSjUb{kRq-vZjP z2wY-=7a~9N|3D!eV!LGT6*7~y{|>=^)7JM@J&+1Rme(;BOiSQ`%WClOvj7TV^2ute z-}SJXy?`$;&w4C6(awYX>m@cyq+}PisgS^n+YeQDSb6DXrd(5!nd{j$AK!eK`4xKJ z;!RK}w{5(mE6{f+3^^qZ(ovyLwJMj2{_8R?7%>1{9A zq31H~2BeP+QxZteJ2Xa+Pt~uhvN|zmeWB5bg5^#`L~5l08$B9meMoKpnXh@oxG>Vg zbL8G8(cOkjOIFP4opA$DXE=|KD>x+w}IR^KdTqL{z)PDb^~(%BcTW_eJHezOq& zR;X{1Uh}a2tFTp)DV9Uf{`fKUdCL@D3**z1LrdI2!xFvOn3%7cb9mxH@^acD$-*QJ z<_0XNtonlyXsR<-YU3S6?|#iFD;oS$K2lAOxG2`(O$I$GQ zI+F!O@_2m^+#w^bpcA6{x~NYN(Wwl!aTDW7ghdnN{H?u4);$K*hK08&Kx>!S=Bse{ zgI95Ae%o~raP~0d`XPcT{GGW=l~kLnnRV>QFayiSu?>#(TC^~y?6aqtZDr`sUGLNZ zJNcJBw@14a5=|ew>+glO#``3I(CLTZDj7;Cx6D?)Ta5Bn{JqL5!p?B!CKJg_#C2aY zt=nvPo?BtY=uLfi$K0upX|?!yGjbbl2vJ_#X)Onw@lzX)PYEx6906zd2wT(Fn+;np zT0{9s+h*@%LhO?-k(d4cBf`MvnNag8zvTnbfm%TNm@>+GV6b0!@G{`H8uU}_Ajaoy*mf~WcdV}LX|ptB3m?S_~*eZsIX(j!MBw?lSoBj>9Q$zFl2zpU+Y z3HK9_Y`S&c4h19cZDuM)OJyPc^2AVbrcUrSebH>J>mD9WU^lVbFeeHK%Z z#@>(U3sk*6GSxs7V#X+B&YtZ2*?WxHN?1+Re6l?1C(U~gd;;5w&R%2GY|BZnk(2TD z*(Cvs^cDws*)#komGv1u+RVC@3K%4t#A(j@cLd}x#aqOecC{-axSQO4h$~WwC@3tM zOygpE1_a$>7p)Y&Hyhnm38FY-;A@*Ebn?&bDc^Qz4GUiA3rvEL+QCcU&Qnn(+OFwg6CMYJ%1xkJoaF-8?|@E`si%5>se%`*J)O>()Ba51 z*0G=BECb{daD1XB-dJ3_CvGlAMiE>0_swAT|Hu^B#>&^AF4}neTl)Z9TR@TR)E--K z*TOBo{aHHUsSHX22i_#sTonItkJCvJd>{RFO#Y_7sAR z#$Qt)(WJHp3s@!0boq4U&%>05de_F?4F{(;iNryeZwL7kZA0|uPueKVa-vVvLA_6B zx;6)DNZ=wH^qg+8fi^k(M)QfkKTrymn8FpfTKlbFkcG6p zGqxIF1+X4rPJD7N>vRA0WnO$Mr&Dsh$zI&AUVr}jZV8(65Qh5>%{AvmtIGJB(d%~D z?h}DUn_@++fI)DE#w?#LY-Nkc*zX@$$q#~ox9w4HchPocB-|5p%1VZYfSzO1Y&+sp zHx@9#+4&? z^t^-T$k5^SjNp_(IR7OAoW+$Em9d<05j>d20x&TW1dir>f2||mSbpi|QDL;0Zk(NA{O>kNwHGv5ejwBrxL&`Dsp#H-YOe0aCa|ySQ1vBD3Tz^Z1;yKV;Z)r z(A@~+v9IWO1}$o`3ofB2<*stm5KwV%o!^Ez<{u-N9d44&{h&n*^?H}?*UAT7W5OQU>vlZmrvakos~9g)qcLNZIpWO>XgHZ05)Eh z&cW_G2nq*~3X679$uBRYCEMRmtBU0mXazXINk$vkJ(y9A;gk$Nod4B_n7_xPDBG~` zXMW!gz47F7Fb%uaUK{PlHB8?|O@?OR98U{bDG{3ifr9c_A9Pk^XfvOtqA^@vvn;S{ zM2|p6kj-z?@4>u1 zXh4P}?f^?EjQ4d3cR6$cBB|yDZ0O3=zrET*tB$PS*EImS0uHFN%?`Un)r+st!)^$A zaHE2IV#<1;{E2>u&0wQk=Kz;tRq0<7@I#?P_HpX(`;IR2hu&4ymkKOzPP0uNHl?g{ zJlW69Mq!JM@YZS&ojiJQaKenfdH&DeA@kj}L!ugfm4Bz?(Sv4cBaI`BW30^|`f+8q zMX&uJF}N*0uNtjT*gDP=xT>!V98}0*+a4y@etiV7Pe^xU)DnjRjc9e_%x)}q>#;?_LCRqc&vo7DOU0Vrg;e4;ANhTUu|!bF;d@2UZFR3 zyaFt3g$X8ST!i+XFSyyB{Fht=KUd`IxnKctqw4?C^gHBX3R=V4SA8(s9B+Q5=B@rS zdy(3BblFYEGywtgQ<*{1^dE0)_P$a%lAI^EuD* za~La@dd(Q|%wOOM22NtLClF@`$1}{VaX?EnodiCc(PHF0*YP#2Sx3N^5*GlgB)+C! zf^~7!$Z)^K&*Jw2H{Upt0o&e{joO<^?Bk%GNKZw2=0Qi3wC}o0H1QZ8%m~t2ZpbQL zcQj-8K2QLxvlK693DDuv9tPLDnA%aI z=GbAfS^yRCV3%X)@Y=&`A||}PFlYwo{Q5@ zHb`LUWs4<_22Gqcgdl?VHrhA#MHw6=)5EH#+CLLh#B$`_)*3kT)6e;~Rb8uRBs>b= zeXP!9Hi)n-S)MlT^-ku8*SO^{t&6z~*5BYS{fY)fWRYwMF*+K52!cX*=Qdos-Yi6-iXr^MZAxT(SnXYd+pS$3o~3dj)+?VOPJyjB+~H1 zmW(#}aD$Om-hAIqjETa{uoC>@c`;44mTY`xxW~e=D&lOr_9)eR^^82x`wgc2;XPLK zt4aZ+(HO=m(_j^Q4>%-8o5mUHj(0}5a-O6^-U?u zYDpBWZL-k$V;D7iV)4BKc?K@ucT&YZx-nhBUylB~Z0#RDl90dEI-F+$SPVE10dEWRwSBofbj3^c|C)cMaS)vmuzDGTcXzZM&Z}K%QB+ovbQl^o+U`k=J2kf z28_2(cJtT-i+3?^C@?UwR8+U>0=g*T?N1 z{Ye;4z*Fc|qdz(AGrw;`^i{Z>t{1^bH8Xw#ULnW+l!18iTUf^-Nhc+o-EWyb*ky5O zui6N9)^!)25A12F&nj`1{$U~O7XC1Hw#N7_Qa_F>nasw8OngS0CsQQ0yQMHtCGVh; zQv~C(L?x}6YGW;PtbnFO$OZ5C!&C*7X1~M5cP~f&?!rB&`yGV}H48R?lwgn;eC{ zh4vv$+7!Zc@&!ahQbSgCv*l6Dazdgbr}eHla*?Up?))oFV%*!ktdMPT)5sBOWxcM`osd<3q$8kLSXN}8Fq zNNM7ymo!2X-wR4o6B!3rPr?kEs)-aPhme(egwLX?Gu%3((R8_20+T6X7kU0O4vGgQ z{3ySPZCf6^x$vGjA_@}yIpg#RUf{ouMljG#7buDULcq)NgXla<5Bf?2emB7rUk2TE zIfI=M9wP&^eQX{iZdAT4PPsZ=PTdVqdOF2J51*R7!3YbXX%bJwYC0xZ!?aP);@G+v zcrbW-ZPH2dY4H$t;Lnrp2p4~T_Cqt zKxgMv9%r`K@YdesnKG_B$qJrVM7%Y+u#wi2Dl3SMRBA4#_$TI31Fxn3Z!oxx-I><7ce z^90Qn+U=?mvGvv(Q1fU|#5i?l{{e}Vuyv+;L+oCoM3Awwr|d_i32KipFg@Jyb_OjS z6NovF0H}$}tbc0^_xq#c&5)VuUwueVBkhyr($Gy0JvKlbK>^*!bwdTX&0BxMuD2Oy zkNnpEHTrctNX)O`%WolDe!bu2+9+aJOqa)R)^FDzK87A&c>rJ6|Fg)p&_@MisP@l_ zS+UlD-1FW$#PLrFx1mlNJRrVP$2bB~BJyGd!{t+^qYT3(>R5Ju4C~hc6l7J1%gI-B zsJDVq#E2F11rle%ENPmSgb!JnEDQn)EI7-PFWkjRA-Y6tItkk!@DC_lgmaRtyB?2E zb}{m$68lKkq(Yjlnw5pM$=S`>Hhys$h+jm%+iaBTkGsdTfaSbbw2YX`kR&Xf#yx@Ab0kyg&tc$ndr64Vy)E5D zzQ4y)y3;5%|4Wk*T5dSHZ0R|-N%0Spm!&eJ?Qc2qnb;u|})%L+%@X6hm>-m1OAbI_dUa5byr&)4R+24zC!R zk>#!i{I%=O#B_&$ zIX#ec(YRCZs+SN^CM)gH4Er_!K$UTMrv1RX)B$1ZdZ!DvKtCfCd?=VY0P{ROj^-?k zu+|E^s-hA{W728NV$Ic7NW|6(uQcWWXvZ)z+H-S9Y895JS@*g&)zgPwM{YmYsEXN- zim@luiE6P~Nux!g%m}F@XzA(!NU4-8KRNw#?z-nJkOjyf>xk<(017Q`2`%MUxF8A& z{2n&ux-=$umT1Wsx^r9>_2cz%AfhewqPp`0T8jq2xnmvE5{{rANwg~-X4;6s9rzs* zyI~A$#mJ{634@-4Ju3fxPqegAvMvn6DeS3okz>H?18*-dJ8qtm+kyRR(x&w=`r5Qb z^!Q%j)>w=U`1xzZ#t)M$nu|g*xwGck=-WkC8qmF^ilaPo_GI*VN0wQQ#94~#PkwKK9%HCQ_a2G@anF<|WIqq` z?2V5G&ntq5ca2(?+~o1tVD0mGUzMPNz*eafpFp&A`DP0lyqTz>!lCWj>*K%eQeJSl z`9oVeKNl>YP?rLr@0SBtTYp?TgxyJX9qPcHPvj;_+;xe%Kyj+d7Tdp`-N>10w!X36-?Wda9hY7&Nrf8&hQq|A^3JC&TB(KbQaZS4sH{hvrp~v zcplmUZijG*a3Z~>p4653gclLce8uNptJ!1QD-4;_fo;w=NZVQ+3=S8qIW+Y$ivn=0 zFF^^lj*Dv=`jwa!)%}5qKlp;4zE5wxDNQIYHHUvB*FR@oR98Q&R8JZ+n`Q?vu!?uAq7O>^1A1{DEa#omHOA7D#eiNAiRdWbz6d?u{yK4RY?KQkQ!%5|;P~sP}?R>4O`5ON%|B42PY7hq_beHaSL2da-z0ps7{JhX# zW%`&P6M>6)!852xPlf$dHo^L-DMJz{8SG?c=|lw*uxQ0(&G>MSm{=z(Omt`%Ki%bL489#e{)Slww2u7M?-9i=l*x} z0{r|hwYB5fjVc3r8yI%Tc0!|z)tqp~Ki9MR`H8|O#i|QdgRlSmVoaac7mkhtf2MSi z4-5Z9^IqA*(6n4 zT=H*qC}UjxV~@v8>vMo^+3YWv!X!!4a%^~%l4J_jiO^3LM53My1}dKYExpuZlJAMa zO{VNS-j3)KJD~8Qh{21-KrtlUuZunM+!zy6bQERYDbT7S+|TyfG1)CgSmM(?jj3Ls zMZ4Xydhs#gZG(rNYsLGnKkf3@bjSM0y`>+ddkd^($i^zr145of=zl1ny+g&ILWvJTf?5=YzbPxAS{#+N2M8vMX zO%`^g95IDM%|)D6R!6zP#TcA7s=^g{pe1RYE3S$@*nXLqH-ax0D8%D`>it>zc z6UefnL^b^)=S5)NHPxi>Dm!jKQ0wHodb&9XUtW5;8>EQity;od<8Y2h;I8#y@cB)A zrB{oaI~~)B)dVcBJ}L41sHOgq2#brr#QAG|iS`%4!{}LIgJpw*4!dAB6B}P@xFC#x zQ!yo)plW)ZolFc$;&4gF&ITOX*49F^L!)^b z&mY$~OJL#bZT6jS-urv8k{ZAe&UL}pO-cC(PN_@Ypyz_5cd&`j=S;6>coGEh_;_~; zPL}q0t_T?`HT}($UlwDzLVH4#bdZi`o(7D;IPAg+c1sAhHL zND7Pw`NrRSwv9j1j z!9x_v89U&t0|O8O_YGyz5NNQVCDpP^jww-IQ=KppF76kz7ZF4uR=qoWAf#V0f22pa z@t)Aje6TtDp~!$PMo2(l(_Pwvv7+KeXTna&0xSK}I8e5&L-rwRbNDSJ%^^q)9Zlt8 zWugA}8mY=)8g2S;(?m+A*pL%Z#?p;}>MR~r1@V+f=j1qYs8Yj^DqjPul5zp%&|!!C z{jQ4Jre{)IRNxFP5%QXd}o0Q1_cjmpD zC}ZGQKe{I0QRP=dmM&j!sDtb(%bupyz_kpX_Kmi{Do;_?Q3LpoE4K1xD&`mvn!7P| zn85pPa``CM1^~*okcFDZ-?oJTIVomw^U83e{o-r{7286Cnv18J&d;RC94%5hX1jSwTLR{P&lkpkvL<18 ztWF2l9u7zv^!F;{z7R}=o@R0-LGA-#JA18`CK0X*?O}GdjWdtZxxp10LqWTyDda=w z*ejnu68%&~n8~Z%Ssi`3IAc;;B)XtLgn=`^&fc9~JY}zz-_)Rq*r8d)$f7~vd1Auy zb!mPhahm>PwZo%#fu`B>0+euBwc>+ewNa1@IT}NZH9NX0T%_;*xx&7oszHViMOn~_ zYvPz|=8K<~I_~M)MZ`=)1NW!eZ*ly#_SUPy++Zwz*4J@kxq4%iGrcuL8qUgqDB#!h zuWN=LI9X_08V@!h`|$n;)#LYuc9}-5 z_wXYZs@yyv{<(anGDSJEG^YtEH20!Iu1W&|J2<&IH1dCbRNhZ&F=cuj$j@6%Ei-5}CRB^JJNp#)ATXSJwTA%e`j= zyYn5K#)ir&CwZa>3<7-XzRu&*-wQ}Y%Hn=rjE;PmEwj$Yd0NLfI=}2nFrwd`!I={k zo(=m!8e`82V~Jz1u;C{AN=+R+@~bGKSRXBan1mzV06&Uz*rmWdD3$QW?@l}8*zkEQsP zZUn2sPxbE;8DgX8@_S&&*kDs3@EXc6-5al{mJU-bJz1o{F|Fo z2PXFhHHJv%k6@6Jm?ceQ!T$aagJoNc1 z1sbHXmdlwvT{tw7F{@%N26lPVF-Wh1XjdtCl$zR>BQo;IhV~5u#bK(ypCZ=swxgs6 z;X{7ccmUA`2|iW+5+S!N%3pueOyp|g1Y!LSxfE@aa#@p_%rTa)sq;8U**S-?dqa|Z zy585XGkZxy{R(#;K@cJhM?IEGE+M2ZI%QuUzut)U^Li~6+QA+W?>C7}??n9|2Q<@; zH(0TPB?RW3%>?x~vAeEiW{{Z4zm0&IzQEXCQ*1XcR0w1}syGrSLKPG0SKypglcmWF+tQzoQ0GZ7JfAeYb12SMZAo+9H1!5iOmd}SE{#t zLRQM5%6BI*kN?GTzrNQqE0%Yz2khih1t+mCqd6e>bt7+9Nv@bj-9UkSF?Z#H0DbygQ& zs?)plKCp0_uigE+J{}UMFFg(Dq-ffjN~uuLh>klrlw|5-U|3Nq!~*JhZ2ViciF@PU zeLH5ftjqCxrj6X9{{c8krT_1jeXPWFRx$;3)_iI=xc(?_wW}h)*65HEBr^(TmJ?X5 zN;T2SfjzDg%gK&jC1SKqp1pGN5eMWaiu3T#WJN)!y)Sj3gQLsdukt z<3ax{JQ}nh$8)8WzMU(cX>c>$Lhu_N9MEu7Aol93n&t(htB)@2bkDikc^$j&?Ia2F zOO1a8G7)+nA*UDX;=S;y9?BIfg1nCTs5kzPu2NaY5)+~FLkXEjmJIFVI$}B#sA&aa zN#@Bf2#)x&ww#a8HQry^KP6WW6c!qX+Y-BZR@$eTQtX(DAwu^)it=@;1p7BNsPiwg zgTiB|tHg7{v17UXzF>rhRmZ$<|MGr?Fexhr#RGWm1w6aG3_IUP&R&p~K-qp!`=yF> zY!H?GMv^x4#YNAN4TC&v05&!MfO>b2M68I{o;)UR0{fR>&JrA&P3tjQ3Ee!}bvRA=Dd#=O981MLZ`x z9~1iWx~7(MT%e*lY$*)1s4?W1XnATBIThtZ%i>uo>OVLBH+>=qILqz2TJG9}=!}=u z0Eo(xZHP72VikIajl`g@jmX99F|yjN?++^6a=I>Wo(rmD%Ami~h9tj|^xXm0)9^y* z1qUQi5*d$h>i7i{s4_rEb32M9*%xVED32R7jOIiS_{FdST7ottI7{n`a1p&C((b?{ z&9z5Uzn?++NwnMZyuFvc?+UO;idIhOz&aIh|KXdPphZOTVtGG5Hp<$L5?vsc2TT{!+fjZf%b* zOSn>?XprPy)DXm-DE8$wmPJqvxO%%eq3vgI zEG=%pxVuF|uY04@?{JT|(US*}EJ36XNr{_AQXk+OG3b~EkOMcXmG%q5w~@S}WU+l1 zk5eOIM_C))XD0XEv>xmQ<8k^_68}C>#CBuzvUxx-C*lKJ~$Aw1WEd1=B}$$RAaZj$f|{8Ks}FoTcG0DR;AnyW z&J_G6!Lek-TDxb1Vxk-YKGHW7{!;X9W<4Y+0wwg(1l7O4M{m#(p9*jHl>7{NFoKP9 zo<4q`+$_N`8)~Hp#z&Lh_1fe^TtE<}QkhV3LJ1PT!twmaiJM#MqjhSsNt9*}0tt=< zYV#o)Kj~#$jBlj9;i}z|avo}NJ^5k?WsQlgfxCiV%GqMdRtut8Y^mLoeA}^>v9MA( z)daS9zY5}xM5+{z1nTb`l?McojBM{hLz6as+A+ z!YQ>?m1s2EZ9<}_fmR|rMtbkj`bQa-k63PDV-i~Hn~fW$-t!pD6-|8W7;JRxY$eZJ zRfjaw=-?egdm`@R<4&(ge9=xukR#vpQcgH!OJOWE@&=`C?;S*jMcN|CmDei-e}U~G{=aEM=>_gYcA zYRV5BPYgRg2G-ZdSUI>1|ITlJP>}XxC7M33KmIGYKRXyO&mne zQb$XyoUC%9-$jAh2ZuvX=0lJF6UgHO9u**?>@3mcb*Ur(_pj|2pQDnkw%FM;tgRvi zEM84q%$s+eBaYXfoU3K!Q_>$KwY1R#lS+^m2JM(c+zc36Hcg-x#=wk$=Wa&yh`0L# z+0pr_56(-LfO|#hqiLSfwoZ~`&Z+>XQ)L&@%{CnSMK6__H4;YEa9xz;aHMGMkg78I z?v-VTUd7uZVyFGxET(%$q|ZZRWOzp1PSFY{ldB4tLUZ$<@D;AsXL)V(h(cpyP1{dH z3k5%|`T2@b}ImJlnsnFQ^`@GsRCBc6CkuK75y>?tqKMuOoYneqZRLKN7na6JS$_g=ad z2-$quo*b6Q+5Ll^PS|=fVT~-+PIBBf?d76jp?K=IikF+`M{1(UeHv(QgkMNz^AKEY z=cvSC#b$SPbizEVX)GRkh5a^B#rXnk9ydkP0{_5Zv9xBj>z9aY;p?@+VK+DI^?vNr z-8DFQ=w-Oc&lUE+`S0uXes^vD*)SY@_&%w}oaWvTb>q?7heLFZ9{5U7(s-XZgxi(9 z%Y4rA;u#gjBGKLn3*WIagTquQ&v2_=$liYc!+Vogz{YTybN(Epxu2de=!B;Q^54C? z^VUD$c-72kwpK5?M(}1UdCYxmf3db;9r|(p=j4%L39f(Z)w57+#a-^-Nx?qY{Scnk z)hp-Lf0NY9At+3bK?|Eh+A5w1OG(!PkH1ea@1^^$P%`nL34DPD{qs-oLgt=uV5_a$ z%K)9A@1%+Bv*k$DX1^pdotg;Toto~Nq?W91TP$PxcIE?;qNvm_zGcypk#pWCvMIxO zZ8bM;Nbm~kn+5Nhcu>XO+tD?nb%xbhV~n{MOz)e)hBtSg7k^Q2MC?WLn$+W+!U+6I3hN%c^CL&0Q+@s>WX5i;C5~U78oN{;T$5)VH;0n?QFVVWfr7>*{fR zucjVk(ShJO=`xmJ?IG;n-arFvYLU`e_4iSeAMGoM{=9oUy|@x>WXn6LWs@rf{2x(g z8P!(UZR_Cf?$#E9yE_ypP~6?!p|}-yXmPjVZUu_F6Wm=(aSfi6@1F0DGe-XIk^ITp z?>pC=&m13VQDiBLmtbTXcz$iT&zSlhgw%U*B@d4wM4Z}A#kQQPg-Ur8eiU;d? zCT=2J3IqAO$>;s}k4ZT2o`rI|O9HYxK;mfpCgv}A-lL9`yDE|w8}L*8PyMQAx70j$ z`1>C-hQSJU{tqmVglLERnU3C0;J!UILvGpYPP8FbmUDSTrp0e1MZYy*kvTe@Cp%z! zr#}8wZL~*MIoGq55|R<@}TRGtpa81%l_q0M!lV&}m1MrE;or7JpWj0{6f%OJtU6%R{;T}cny%=iRA zpQz}4cl}}biIEwLR6(JE;L}fdgz5;h`RH7B_(;PQ332bXpn6wQiCOC4&8>}N7;${Cih|&oeBcvdFN!8;Ej6FrqUk8a7$jCM@As z#Ni+mEOs|v?tsP|<-hWSV>3zfhW8m`FXizwZQO~!a%i#c9aBW_^v}5q4n}plX@$M1 zMXThgk6)WjA8ytXA0up3OcN2+`Vbna4l#&}?~~Ru1(ddH`P_|AzVTBZ!?R&}u^H_x zVs%S{hmLpB*>*asYWZ?~Uo)=yTfG;#qwF3%v)Jvbf9#lr{l>i-C`EwrPNx<9RWTY~ zgXu#{o+E402W1Rc`=61W!s+MSmJH^~e+#Cgj*?PmLJs>rQr)IpM!6dSzgg+8{FQ^5 zKF{>A_IF|v&qr3_o)`!NQpgQ{g0urzQbO(7k z4R(Awu<42>DIT)KG=3svGd$s;`qwcD?lz6=4I4vO*1b;o*FrSBpDKF)5!s8djBZD^ zaEM8pd^kw(!Mg`m(|$CanH27eqfff^BPR?2)T$g?FJdJB! zOd^t#h=YIMvX61Q$t>6E|NS^TB&F#~XvH_a70qt0-A*O8mI_&>Dfl>S5@SC8m&cgu zw54I^CJzbtdfYYr@$~6wJKyr04A(=+g%0z(l3Qcv00Gj}ccM&(XdF}TsE^PE1)5Pi zAqz@Ts)?SAOkE70dcO^hWQfqQGH1M6>Az@poz<#i5UV9<*-}EzWdPP{c+y79K1fq! z>`3#7e|4H@>N2VdWG6SXXnmfEW7jhGE2gf@yP0b_plfZ> z&ropm6k>S4jF+Z%-J-Y=H4^(TBZDMRP>J5q&C=<}$M7^hLf8l?GL87so%Q9C?((%C zsk1gg$mFm4Fozf<0RsiFuY}bzHhsUOT_{D;Rj4&yle-v`OOyMy7)H)u`*aM zO@E^zPBy^6UKsRN?QmEQ@$E-Rn3veG8eCxbycRf`0JfCrwwBwQ)*5X!Y4{L@yL=++ z-mk@mv&CM4!y{#Oqz-=bwsgP#2tdL`GGHoTOe%HXb@T;mrY{|^YAKG?56f#{X~ou` zjPuTSJ{MSJSjEw^hoB*E=?XwdrcrD>Z3wUl?K_dUqJ5V$k(#IJBuw?*Md9cK(=fVBh0UpoQolx8Gm52|EQDwd*{l(EsOVW;ywI5mpYt8V zOT+F;t`ps&&{Z>7>banyuF%r8!7k~Ly9~t%XLv|zRo)bZ%c;PC%=SdM8Haam*byu_ zu_9Tc-Y+2sL01<;n~sxT7UkljQZpx`)p4|78HWCGlPW1zl`KN&a|8*w91aH4X z?Ml(^MFLe;Q<>u9ieu10=Z+FwQjP0wp`N5?W%C`@|Mr{=@)C4f*DW|4{nH|0brfDs z+L8-R!e3TYV}_MWk(B7ONfjrJd8H+U=UGMz&hDe+MQ-p|=xCDpw=HIv3YmGP7F1+$ zt+wICn}E%k@>GW_VA1Iio$guzR(7plzJq%0H{BzzrSaHeUEo& z6u7_5O%R5{E=i*iuL4c_KKl4OIuMD=bv{wxnQnX7_^UI~q6^S}nBq?uKu2@+OvEeE zbM;3vp+QzK=1{@s#9I^<(kn0gX*KE?*+KPA-1Dl?6UJs7(A~@+j-f2DSGJF1!6kye z*z(c;0*)O1@+J%ikhydt)K9c!en~1^g0g+2G1BES9*q3>R63Ar&t9>Y&A$_X@tUIM zFSM$tT|T{JuK@B9@RW3M>RU|GKH)9IbKdtirUi99FK`y0M|>L}?EFfWg6%4ZVSf}FQiUzbOCA7YD5 zI^yficrN!qabwb`&YoRc+TQu54R?2p^-Jk{SN#Yd;I@uXE^i)k^=D3emXEwK&IZFk zhJeu7<0vcvy5(OJL^QopNv4my@!ktTo@>nsC_Otu00Wng{{ktP>42<9H3)qisn)qL z5mVbBo$t5&$M>YnV)`)~A!*>~tgCM^Wj@_SRC+2;frv8(`u+DW9nTwn6B8w;e!kd& zxuE>B-CM36?=Cuz~h;8h#?U5ozfyBjG*IM&3R!0K%($EL$ zZroSTncTE2!3wVYa^=KmLqI>L_hXUYQe(Yv?%8tv`mscfa~!(_sWG8Q^HrDcx%&Z_ z!PgF$D#u={9iU(e-x*IT?bYmU1>`axBP5k*UULCq}xJ zFMCnB2$Z6DNJzu$+-Za;ECeNpJMPB~$-&T$gKYlPvkSE#6`Oy78)q(87^NxK=XYUP zu7fU+;4-myROj~-Bg`0U84Nz-&u?Gb40T9q94LP!Ho49y*3 z&+8;dmibw0CY`A1RBD{f!x9^5X^i&n%{Icx+q++5RMrst2hZQE2a>XvWLboSG)kBt zn!8(3Q%UTKgLlIT%@DWIIC(EHWU)|^_T`oU?A-v2Z!A6n7AB*#=ciCCmJF% z&mlQZD!+8(NgZJde{wqC7XJRzT8tOsF8_xlx$4Kx6N3BPyhz$Ma;F!)I62EAs%^;* z_-pJiA2mQKhIr)qxdSBf)?Pbdu%+C4(X{M+A1jtfBnCDQbBatO$px3FNusW(0YSX} zLU-N^1}Sx#=%J)G-XyTE8}733oKj(ClM#JOk<%5;(06BD7GZ05TZ^$WUU!z#YH9*; z90TMoDjj$mHee)@8kNRBe?Z+i6{}Wv5))s*GcquU)YY0Q@tJ= zE&+%a>cbtj(%b{NY^U&mS*_cKtPZ7Lce1s;Yw}Dnd$v-JKJBF#E)5a-x?AHX{!==+ z!PBV)29q&HsNte-n8y3XpL@}X#f_JCB@j5SNw zOTFbQ#q|v{$Y8wl^UQHvKBiQrvIx^U&9n7*uPc`?<$ zh4!zVCy(CPP1Ty(zaYgYNy6Hi#pgHcO+uY3NpfN0E=%E~FdKwHj(YK^oeKCE#%|WF z!!W-2HlHIFG`$}mAF~y&MUP{<)^PTxg`k|ntURh0cZmkyH)c?x!0u_5p@Bs_6Cv8{ z7tduk27-KBu!!0WtmC7S#rN?KgH@w$7tardj ztF!XrcMsGE+`L&fuD6|v&g0C>Q~${}bPYX|@J-tOO5etY1+AXL3CZC+U9T32!e*p)|8hpWw_rRMBnado6IREYXm0Jii+GtAykls{6O&2>GGHfVmK~dC-`H= z4u3XGfEabz7qf9QtD&sa|J@P%KY->v^p1&VHmxaQO{>OkDVvky6)jGxj?0C|g9j^z zaVC8=)#^L|xxah`vn4hhOH+sAF#c(g|DyX5TLM4@>**MaO_~9W;5Q>it2c_CCLqN( zgJGhfGmn{XbZvQ94Q0)BC~5q@`WPpuWnZ`H|0r*ZFylx?r_QmZth8}bpV#!DH<1^E z$)uq+{pCDhJi`n)GTj3IPk^pBR*H<29p;VORQ`I;t3TvZ%BW*4z6BBT>+-?-nTfA! z+d$zajFtD_L~ruETG}U~UJ@)=w$AHYdhf*S2gLX~4=ax1`~>KUtYqJ~@1feIrneQQ zF7TS@>R);g%2c2+`2z{lcN+nd^7rg8*YeD(>KHJPH3NrQ(quTEyX`t8y*B)Kj_fTl zlD@O*R*nY`KVzm|s@(Fi2Dy=7qfgpEf3 z^E20~)HdtIS>euHG^Di}J3A)qrsq3~BLYHpQu;%%)aSOm>R<`gDe{_$gClgw@{-x* zJCg#I(FK2EN}aSg&_3+ex3sY~$tR*HY}c{306I*{uq{?D?RCFe%eqMrD4Y-pNbP6H zgGkl5m#-)*Jef+)^rs`?3IFdCD`}f0rQO(Td*6EwOi=u=y=Q06$V*C^-)7W6qEx5| zn(t=}MGKEJMz_x0Z2sM{dH7xz6Qq%5fc3WE@Nu_paQl|+pwzexxZ0}AGI2R zId$i{C10qGe8-kKMUY4-moi_hIhVKZQKW7Db;AYAPJu4g6SXtg19yb{FGR>ybfnGt zBe`=mPqAS+{6+GM2#~HN=7&W8X3YNR)uiju-t6WIUdDAf6(&WL`E1)U8e@y#iPM|3 zmcXTrHKnPD!6oXB$;V1}dqH20sl2cFV~-)n>P^gTQb&i{BdJ zxj2M$#~hlpz7zAEp{k4LZog<8nQ4ejU8cHT>RgTcc*AyoP51NdN+%8jS_|8~uX-%6 zzP?6#CQ@npM+A{0y?QWmdmmF-^`m)CWV-k0z33lbxtm53akg?XZ2f{UuG6F9qwOr* zn!KliI%pZA&ayx2XNtX$?!@X|vwqEf+eK;H4Gy*LOaW-a{DK6H(03~Ak3E#b)JG^J zRsWFW$yjtzq!S%PiHH*q(L%kQ$h}2Yj7q!K3>u{B_6e#|rnqm^KEsntL(3 zc;-;JiAFhR%i2K;V8AC)qsq3S*VFK~%i0{Oxcivc&qGZ>Sq_{GV5;v|=F)Gi0G(;- zY&cg746gG5rCTVive9t<5ONlDZ@m@p@NB82nIu6_s%X)Ngkfl&mKtID3#e2rfCezN zGW|5J`?MT*uMIt){g<`@Ib?ec&krjd%WA@H`2HoFflJkG%Nouj=7;;VgPr0ab3ZNf zRQ4?YBLwQDAC%Cy|mpzRD+ntlGNjpu@t=ElSPv)mPAk7a})e|z?>qZQlPAT~a z=LkyK*eZs%vDu3@;#_z}k;1Ir!ADx|$0C%K*aA2@SYqz|8mkRuob6#0lEYpXZXq}X zeg_a`J`ao^{okhDbM9R!$~u{+o;wN|F8?-IxkI^_Th(0af#}K_97(kusEAzWk|+ko z!9A0M{ux8q^VIs6x!7mDQZ5ADR$_O6^dI8MMqYd(2U&!tPj^N`mDZ0*06D4R$xN2< z2EF5gz{57^SC7ptsp`M2YyKPX7?xl;gK|(R@wNDgoM2iS)emD%xVlbJf;*nKI(#7` zIcYCFo-ExC3U#N&jNO#7!bkA1yS2YP@R7PL#*7gXsY8H7G0kN;fRynNB@5l#GK29C zw*-4Vw>P@!R=(q6=(}Kt=&$q=GtHN3&7)$XUyUh@(rvLU-Nz@cNd)ka`{dXy_mfvOn8YYBpv$) z^0|3t<&z8);R_sEgKuqGh~DEu&Yv8vwSISyMlo~$NEbf6HJCc=Z<-wZ=f5U9+`0kc zrKBbo*oc;z2yqC{@`xu;pVsdSL=>rccFSVo2|M*hF9znhZH+EgGhKWr&?PxD|Bbsb zXG=GN;R=KJd+%}TjNq-3(|JiGyQRAqXEmgPa43GPI8z8>m`wx?bP(cEKI1r#&^4BXBwvqg?+u7O(R+jE#h5k1 z_h!%a9_34fmCRct*gz0No2036@Nunci&qr#7c_%!70AfgBQp+B0%r2pPvX0RnVR=e zL=yY@QP#g~CB@>7Eh`ibC-ee!Vnis+!}MyHi&@}$eQ|BtFh(I zq}Uu#5IXQPuO^MzNJ&_@X6pYNh57nhY5;TOe}+*=fQ1)!T^ru+0HPdHP; zQ{wwyCP@1GLlC4g@rUg(iX``87zbgPI<5E@WJT&r#x;@9&ojPQrhO^&ar=yD3Ev2} zD(6pea*&Xt)K#OVIUY}Xl9dhTwH^D8H5{#)^!f+>y3s!X8!w@S3dSf{w;owuLY?3xE_V&A4r z&8^PXDRR8zILvaGkZT2yk0W1K-GfRM`?f->__(8#Xg2Z3%>hy zUBqE`iRsZ7e`Gc{)2GPCqG!z>9Pjj!qi4*P1;i3{-@Q|s55EXAui)ebJYhy)0qHc4 zx0^<4DP?3?BIXru)j7r7ugX(0dt4~|OJIG|&3KaLbWsf2wHy|0)Gf^q|l{J?MDMIg?Opd&)fE z1ok4wgmXZ9U+01Y;+ecDw&||j#Fi*vTK&>mMSyRrnX;rp8Wv{y2hewwr<$NNzH7a&Y zUq1rkV-fYD>>}yTr0tI0w_<@|=JX$cc`13LHm`iP>6$+EK|M>y-Rm5Gp3b*?uM=dn z%(B@ z85zUINH;hXuc+xGcm`pmjTt zcH;I4X})^=oe0qKb6y%kfJn?nL-#9vx$YTm!`eWz$=@4ZvrX3K487i%wTQR8%z{;* zJUCdCjnyYH%`&~ORf;)F`_vfl8v5_($tClh`BTyKiBw^Pxp;TLUBj4cuRtfviKqO$ z^w3zYt$@1@sxT4JTT00=BZ3i9c;vy7UsMQ}yP}`bfpmTBcA|xw`MKKZyq%_OTzH|o z99EsmBcD@*1vVDl-oa2PU>iS3$TNJ8e`HT%IZUnMRgr+ZzWHI}&+qC~k}YMac4Z9z zby#)=cJ(s@aeu+RD#+92{s7fGjz7Xm&bgd=O%C{DtfAtl+3iuz%*aU?%l!{=RxYA- z9fRFAZola5aJnhjq=uW)r1gixsXFdFuRzwU&#cv1W?i+Y%471SU;9 zn%V(d+z|IPYw5i>2&~-W_x5~o2f>BABEvYUN5aO}4`b4G^kBuPhtsE+_)RxPP!gY9QDDywf^A|f1}eS+dUJcEOoo3& zy!iJ7(5ugcn6Oym{ajXT)vo-2oag1en{D=Z5QlXVcpD2EKGSEX`hJI+ zk1VNQRYBkg4Y-;ehx=j7DrxQZU*A3HkoLUB(#css-38OX%7HaD_s6x%81u@QR-oA& zIy3`95HXT6{``s#?$PrRPq+V_M^uU^gc1x>tQ5s7%Jop15MWS?2Z)E?kgqVH#$T&{ zA!oAyw=+KqvtbCyor9>{{}At^|7}hVdEK%fHurs;ZnEwEZR+LQ(OoiAR9G7c#$-ftMr~5(X9W)6ai+Q&t?o?|H#fcVW54j zP_&AY4$JVO=I4*Eo_GWnnsPSjUSMmwhENbt`-xK166H3fjVwBY{e#VAc!kE!{{jt&E{H{ z1%WNWW=q(DUJVWqfh9mtDZY!EUK)<@@nc+8QX$!!*So+d2IgLp=>&1w+nDJp*=NR9 zRFQ1ch33?XlC0vo`xXj2HMU z27!B>?*T(TXYGaH)t^4tNTJd86U(B{N4=6?m90U8nrpN=j?uucOaZ`>gYJ-()PKR6 zEvk+f3@8LhQb6<8Ta(z@NvGkTVS=k27+Iw?juIY?=ITbhm8QMe_GVJb;FB!EEfhCa z0um(y%MRLKIqXAGf&YF?X=zNH{sj=ea6KY+@99jf7)TP-gW5|Pd8Kwo`%prM7Ugw^ z)WuBV%%>jkY^vN)v@g!LX(sd(cMo-WvsGyp1*pEEHg#kCP6QeHKRUzI_H*v6{9 zBqs`!IBCvAp)F^WJVI{@gZ(E>%UYOV=WZXo_YTMj=zBNXi-rZFD^U^ z?y68^Ao zn#@&d8fg5toPG|7*+*9rX()kKEFpOb-%9hh3%C>kBvB)M*Ce01oIu) zh#VK)dEb?TQJCs#-~s^fCh`+L4D?Cop~f;rTXGlF)`oCsQ#-`Xk+fl<)hzlmIGn(6 ziNh8GLa1xvxC?`q=XRF_6cJx{J*4#n2yVae8T@tl`SC6-$+1#K1xbn((iOa(dP~$Rv)_)|r+x6(JnO1_qzNo2i_Hqon#f2#JbWTrUfAZ_=nG}f*zFB0bUtM<%Yh@) zu5EY6urMD*GZK&(2$@wXDaQHpWSCEoNJbgDrh%%d2{h%O;J= z`nQsN-}Zyd|6)Lr$v1!QXe&Fw?Ki98xw0sKq!2JwGErdv3$$3ewZg!Uw`@qUd!r*k zkbFh#W%6Ed^76W1VDTl#mjOr|!$=c+U*o0B`2xXYEo8HKC z@ywz~-gV@>H*ny?V-cc}HQ~>Ztkh|(3`}{GewX}xx69*)30PR)ZqTW>yvy;f5F~Ji z!pWewrtR=GXcC2LPQ~M19?KwsuAnMaHvAj(k?DgTqh*&!kU@pN9;`nwZ|OnkZoMdb zdOG*1%W0^1w_o(?{_fr9?HcE;_4lmtAE9PN;zm~T+XQl0m;|(v<7{u~TFx_@L@Hh( zK<|3Rh+?4AC|GiSZoH))qr2C!oe;;{H<0F>2_kPN~9nH`$s$38&~` z6u7@B_A2ZBg7prBMW%sg2resROND0|x1!ZOlZE#VU27s0=8}eAmDdWe#nP)S^!-{`Rhqha z_)AS^`Jt#Bg+qy8zoT(OqeG+=`DpKvi=%Yyy$=wQ%|Qgf>2(!PlB5Wnq*GHg`P5t( z4yLptdE=Mh$=Aba3!!CaoY$#|We?ZPxA^T^h|mTWk8uSQRVL82s^ZZ0^Q!hEx&P&vHTbJo_A>S6Z&~W00iFh1)b6}Bh;uV zpeTIWBM$*7DX{>uzN*QqWYqIpeR_U4{a+C+z$eEyZ;-)~j!x>RUjmcnv9zT2914SN zFeR2%B&C_eCiJ$YmQ>K!iNkv?H1@p+C)x6m);z#ho*k~tsVM!`#UvlGD#2qehi4WS z4(_yCDI@;DJ>V8dIFy;eMh=-5o?c*hVpMzh38aTjmRjbm0tC~Rc51F1;~T}!vEe9I z^fG*wsHxSLulF7sep!rM6)bTD122kz^eSd73P}LED}Ojo6>o+U#Xzi^VY^eg(SDF|2>Rw;d0p-gBDYxmeopyzCF#SPcD~gH_sZsk zSRZHPW#$i|e1l5HNuSWug8#{R4T@#&H@k5=4M`PxXAj30d*P7t^IeJ2;(^{D#+|L` z@p-n}p|)3D>aV;K!L$$<3bc#cu)6*0ISB!G>TVY=Z-Oi}fg%#)uXxZP*nWSHNO}%i z!fd}PNP8skVkRGnlk_49LwniObNmz2+mYiY7>V!$9Hn}H^4C!*E<#<{A zI^mUv(Yl()a&9rbYCn&B^!Co5!#y}1U7iaJp`#{2wKTm*_v76#RW2#9xvl1+5J1Wh zCZOLJl_mei+=hU^6Q<+`q5IzSwf@2!rtSDauB){eGylbk0H7jlwTb8ef_a+uu%Xr? zcAkdovhU(X`uQg&vOb5-`p;h(C+dRuxTzPP_c#C2so&zZ9>q7WOcFn=L!raYpC8<03XrDAYv+vts*fvZ! zVe~6N_@6SYq^8e=FZ|-k^fQBB1yMSrpe~SeH1U-V^ zX%gNBfMs8G*b_p~Y$W06%jWH;YpvB4T`gM;EgOH7{PW1|yuJ_2MxDRENBa=ih4nIL zwnOeFF9&5cl>EE-sS@haWo)bYIryFj-l}Iuqa-H{HR=<5Gf%P;`+*vCE=L>`!l()boPbbl;69=-Yz1I0|f{iJa|GZ39V_(`d*+s zJ2Ov?uRqN#xb{(tWhy`Qyr1^m82{Hpb_o-#Mw7~gV;Ss*EXt+uiB>^Cbv%;=NQQ^U z!S%iS`6wRp*7KxojG+$t5hr6|#?FZo2iW#*KF{+0-42pFpbl?yX)c5*yC}eHt#%3e+{DOC}<=`$Ig}XONb3sCJh!>WWHq34dW{x z>iwP?Cb~*OuPhKJn!YEnJP)fWFOH}O&F#H{aK3ctk?iEAAeVVt zDDY#74D)}lxT)7u?L1yK1|Zi$SX-FIPGGy;V4Hb#SP!4s-fQv)tb=Zpdl3?MU@x*n zgwwZky7YA)Ix^^+`x3q8X&xW zV@Q&}_j*=OgawUcMMe5|vTx;0ZR95IW?C;S4x*;Qu^j}9LzAHi?Z)y}%Hd^UWUJ@iOia&pxNPBfDE@^~18#MJPMD|{a7lIhH(-I_j^ z2l1D|N{*Ctwt)h4^Y7PQ(OrS!IDyU=o?qa+ z_!p>AaEi5uBDtACF369ZXG*=E0)`jhZ$s$F`H}kkw8Euf;HT^2{T$0$y4KNM4iHSm z8*YKXr=bAK+JBj}mpBz#p4hJ^UZ75}Z{9Mv^9MyB_MeiNBdq60(j*-Li1yu4yOH`tcyj2iZtG5^QcD?V|Yg2ZWR;1URyM>?k%7a*=lqYJWPp4KJ$qU(!pM=rf zZ+xS=ZOHRM)OILqp;!w8RFJ%QBdjDvp?)pA#U7F4Fpa~zK?S(H%esUM&Q{l3oIH2& zoo9!Wl-YZR2QYuONigyJD=EGVy?SvZ&^_CVi^cC4^lJ2`8SIe6+LX%0)6I236+YSW{-?x(dkXnN|jE|TBnL$Qr~!Ou`0Mgjn~ ztRy_LRC^kYEwDwc^1D=3ux^ILjr@umCV=@u1kdQ=l6sQ3EGn`LX=V70jcmKAmj|XA zu?EUlll0U`I=ekP(=x;{*Q1R$B9}a*R|e8)t>M7-X)nyTBSHAl>FM)O`h2))#22r) z$@zpw;<3CNdP1E^Z7Mx{rHu0@TxtuhMqd5#br?bA8XgP8bi>@NCVWQn0`CTnSB6xd zB$j!pRct9T`s|PuqBq`SmmhDoU!ZaENX`jG{znQUPb6|lB*ZHkCGR-6JU8PPIOWW@ zB_Dn>^fc69TpVE@{>NYy)pfC7Wok6RY9dg?I&2gzOFs!7S3d*K=09Z_17wn#yz_;tWu&_3cpU9N`;stw; zDL3xJCgJyc=MJwqWD3U#uRQzyxjYgp#K#~~vt`ad+q(b*_aY%&#nKk=oki#7csFrn zT1=mJO$h+L@aH1Z93eNljyT>eY}m-(Hl|^{3y}D*(xvC=Lof{Z>Eua#a3loZy5}0d zKyHFRjJUONKmyjN-4WvE{E;c8@;iw==%wS%``TZ5NQLFnCWD!F?L^?z`n-}(D02_^ z^{=D!N%OGPmI#MYJDdT9I<<^Goc5byS1F3~e7ynv;NNnIow=aPDprxBw(8U8Tp?5L zq#>n$Ec@BE4401-x?S`9aDopR%w{vECBrO8omWEM*p%+VQ@g2g71;Y+L80XlSWgX; zyQ}WbmWj*VLyi~*_`=a)eAjK6Xv&xrk(Sf>Zcs*n2($sOk58&jA6m=GRBtlZnVGGd z;1@sPzTC(TYNsET@U&t4Y9$qyK+#rIA_g^)+4_5K1x)deFzGJGD~jz$1v;?3SNmCa z8MQhYQw+6@YP@5*47KmcFN3;inezHiM3y<-9@dTRjEgP%1EwEO9xwiNIawyw=7nly z;#kEcMNkM6EP%fdbUTHVaql*0DU-Ji^rg#3bI=PPp~S$;xIT}Ij8ne&3g+c_6K;%R zda+VxLIZGW7`)aM#(&@f+eLO%PB?qM&~;}Ht1V$BDxubI7K^GQL-F9)ZG-nZqTYQ4_DM?C zsm~Hrz3u5@yAOA~dKbme^Dh%$$tc(eZqu}vA@kh9+V&UdUyWK{; zKgbzy8rs#05rKM&!Slf*@|JCQkzKboIx}TabuS|ylT55y^bC3}Tt1i(>s{MKp`8~i zc?Sv8{)4ya_c*&=gd9`toK!h$Q+sKw9@jP`=8!volK5WGl=yxj)Q}s9*vinRmzJoP z`=?SavqvGTRb#Qr+QspS*@w34r^io0hnnA3Ux!^As#<%i-Sz9J;jwgVTS`*7oayyK zK7Ma({+`t@UPTx|VjR4aqd|^j$f&Z0J@Xh`>bTopkNWGEoNLHYST%t<)8|;|5LQg8 z29S~Rtvw*mf8^@U22i0a4lrRb*PZO0G>5(EQd|<<<*<$-y z*YdXng`Q^NX3=4C^Xc}7Ek&E<2_uv1oTjCm{W)2xuGWW^x`6F`h&kkDJw3mZ+|4(j`2Ch>fY|#$n#P(|R)w~y6_1q^06>A8 z`~)Z$&wBp(vv#H{4xV+ar~aObCjCH4@nlo_o;C@Kv{;=-ckrM*3|{xPPx9koXnQY5 zrBAbo(>jLUHgz8}suX+4YPF#DF5g$Q5lWhb74T+U5oa{8=g33msxB)Wo+rDklQv&@ zDRD-pw54kY*H*;HTZF8?(+%0%*Qvmhr_-I+XrG-6{@)a$@k=3<^!=;u$!Y8RYN(mm ze!nwD(in<_EOx_pI`*aDW5ne}M1A8z5RP*slC;IyD?+!1^Ne7k5!c0VaJIMDI=zqG zjG(c~L6}k~MN?d~RD4a<)i~culsG}#7)*Y=U)*Q0-~<4EB&mKyy)q063<(P5R}{6^ zN$*oPaY+MR0V5YbIeeloBD*`^0@EqAdSiNP64X5#Zsp#Y=N6~`5Wq`vwOEw5Fx?5P z_}rme)@_u@a&2#S7OID;z6^j@;Il=61a0LpBPmzEbr1t9wsuPDez*JhpQak7^Ur{Tvo{_ULp-9w0b+&9^lp>KLD%qroM0@^l=46 zGhNQ&7SG4Ae%=^~3LwR)pV=CXw10(Oa2Lxv9NrFbaDeo2l@DF+5*zAZjoNmrzOQHO zc36ps|H)T!zVsnT6`J1GCJ26fp@64k^S2M!64-BY6*C@jZy%1W48fM4%ifKiWaQkc zK0=Jzncc~>pQLrHRmnGk2tO!q%-bA@|E7PJfXL9gM~D%Y&7RH<_N+tbHql8`h;c!r_~`t1sZ_Fg4Mcujx8t=hba z5`zNM9wYi`jeo+V&3l;pUF4@&)i=3*?<3~!lq!O6|KslCys57_)S zHY-#60r`|zr~T38=d-@*f!zio15Db5k$c@bBi|~d7+!{C82!~2ZDJn=tP71NKU zKnB~X2Gf!uy5BPhP@d|CJIx`+T~f04%hx*272)-M$62i#WwnQ}P{BgemC7-X3x!+& zN?M-srNG%`cyCKVGcP&7F{eB-SMtj%BLx}8#`Ak*UHNuO&4ej8LhM z=AW92YuG0@AEY+yl4787XA_hh3AYwhS{>wEV^bE|jR^rwA*=fS$CnVPxECivRCvI6 z#^PV)BmcsF<(Hm%oozvr-Vu$4ppo|=Olj;iDMh^_k*0xC+nu4jfGC(Z{xsq?3H_E) zf&Fej{sxZf93+lap2INkv1xOgX47!ax3+}up%q_gt+6NU;+Xf!hSsDGjRtdYO3hIU zYe@M$n^O071u-91Gf^aaOPywy;-@yTXTmX|?SNqgrsNWpCJ1r_JOTukZwLR{-=D;; z>pHtSH{v<6B1knfGq~{RFLNsihz#Q-3UuAHXskSy7>4dt;dbZ%SDR27@4fD=KL{`d z9Lz9NM46EuL;{F^h{WbEWdR|~3pKu}Ym*6Z!j2h9wa6l)OQ*z3h)FHcI~=L6KUPcKj0T2|_iR~7 z)GEG?b+1Iaq+nQlo%PiB^lk7r|8uMWv7FmO*UX(gV!VsJP!ZUVGrx#-ye$u{d+3Yx z8dMJjDa6&uhqWr!+gQvJkdaLu%2$h(aWZj#X?zwB6TL@HR)a_yj1>Pqpy-vlsP>Be z3y&}6Jzfj9jAr}8t$)Ah@|yxno+cT$^yf#G0;Y4CDvK)y{s(LgjVToWOkioRQm-LO zZ9=FJ z@sk1y1Zgl)Pbt4t8$31@p9-nsByv)hPN&nuHAss$ZrYWm-~n^V`-AL zZ9U+5*PF(hW9eW0XKmG$2vt_7y|+YTDLIE$GQp;;e^{W|jBzIsXvRR0z?#S<*DS2` znMbeoDnmvZ{kSgM2l1yJp|=_Q6tNp);Lh${2h-uR+81*~2~4osMW{rZ!pmv`s&%Cd znca0~<5Q7}zu;74F-HUZUsIlh^hOSFh-5fn+x>mosqZ1Hyym3%3aCGL{fl~`zmwq? zd=sB)j{~=c$5$oRdQ0c7?h{iH<#B^>2_QXqkh&w`&>aZ6SZj$|edI#yKS=h=9yaBP zOvpQ*unVO?%etWiuU4N^&cUb{PSZq^vUSCuX3tPe>%MFK@L9>`cM@!Wunpw03FIAd z_kW@^khlC|CGU;*LelH7s%H(QDay>#2?!2zKM3KR4fdh!PZ3|`&eSZYaCx>_Z<`+7 zoH<6IZH&F)qNBHf29u8igefOn$-d4KJJPCNJ;y zHZVhu10!qr`Fnq^@KbIL&~I%X8VDP>>r7?tzpTlJqZ?9n#66%SO~x^;?zY#}jQBS| zys})W222C=8AtGT@x0>Y)0n9k(eZ~q)Gn9A@ts)Z2JhKoTf?>hRwz4Q5fR8%X^(;> zWZ4B49QJ=;J3#X9wAJ`x5m{T&6G^|~$Op=8(k9G7F(`N*h-s?Cxp6GZPz5f(L+zth zv&R0Ptpdbd8u+vM;MzeW8gSZcdV@Oo1}rf=lKG>}Z+PLduytd|CnLzPvl+6vsh8Oh zVn#-G!Vsz@z$`8bD3PJ+bDB@zSfs?~S;aeTxm#9i@9l~V+$;1m82X{)t%+Y5`}6(4 zYd18ZBC=7?=Ge6<{58Q~-xFkAmXeIVhCC{lGMGS3O0adOwOAdCDh33lb z&}ZgfVV{E-0g{^9HU=0;wm=I_@8ex2XWktFb43`SHMKHrM9I{O_XsxoimsxdlH?|d zxMG%CV-FlQ0PP_7?fz_ zpodlKi{qdtu_i)51P4HPpdImS{3TgpJgp#>Kg!xjX$X8zFYlS?BJrfB-qjU2= z00u$%zCXqQh+4G+dYPP!keHkYaR9vH#dS3Wrir8ykjsq-J{;f|TonkDDK2;(d_2tufI{p#W z@yhK`v*1nGo36m>7)Q{1p~MprUim9*#i7p$k10Ymp=FONXH?1C5K6UmNv*v!ANBHD zXi?hlvRUOg^0;=J*<<`M4(PPEY8Sbpk{@OoX~R`XTt?i*{UV^Nu#vh{J0_r<(6Y=T zQZXmIjj>p2t%pm9>&Fu4slxh@yTyH-Nh(%} z%kjMu0AB)KU?-Q@IER=sJ_|SHxamxlRPc$v!j-q=`?$5Rx{7!!6HHH|2<^t~8J)Ltinbx8qr&*YG zx^DZ9F97hk7#~}ozg!zA_%@8ViTlN~Kl45wC#(5{#;}+x>9o3+Dx)|{$ z20W&Wr~&usv9xt9V+nyHOJfaGYS5CvvlT)P>m{CUL3>yG*|C<)$s#21Js%AqI;Fb3`Q$*pK+;|L0e5`{oV0Fxd5!7KOU1%^rE)|E;PXjd2Sm zM(wNF`Y(i{j86<jIOl4vpjKtx!CIj8&)0Qd+1e0KqWZ+zqb{?p8q zV+=WEO{$uiIeG6=UDZjPOT##DiiuN7%)%n#g_!8|7dP(be(67c){i|0RvI)Bh#}rX zJOL1NDHIz(hW9nvx`q=6&5FJ(gifT0*CoT>#VV&v4DU_RGlYcu?g1eLc<*u5UZAaN zgq-p4c#r#jf2yiq1ngD-0Ffz-0&~wlV0L-{kS05orvLyxB=C*5;3VaQA%=qx$+@I| z@m(Q7={o#35 z>%XeDfD-OfS3rbf=U5WpN?KgY2A&Cz8cG7Y^jLR?;hlZDj{xQ33gAlcGY4P#9_0C{ z;N^qX;i+f4TB*j5C7^D|++lsTm zmIx0y;yc4*8MpLARZHG|j=YF!n94a#lxxfpNkf^wekCplpjfH7LW$Hf_jZ~vZn?!X z*8psO^Y%`SecPTEO>7gRHaV=_i z3IJF_#Ixl8jj6A?KTW& zulpD{c769#q-=QJFgO2E8oZpoM9Oh3> z^E0|~8(grR^F9to^J_gO{ut=C?!8)B=D$69V zoS^c4E;wbiKKd#C9O8I#tjd)=V`{aXm?2`xRnZNjI{03QK>?;Zf~Ge7gQf03B78uXd6=1j~<#O1bbl5gr9#!<#F zk|t$9nV5-1_|4lJ_aFVO|Mc18e$Rn24aminkCC}hu1ScTiG{G3?G>RYY))*rnTl?< zX&FG{Ju0c-y$75DimdZGZtMZ-+58V1QRMTyF8N?h)7wBKPr%t&iTN*85kpAOI0s=thT`+#5kZGp*zd}3@v7Rwi}mr|#1U_1VK4#}OP$uW zCE(}^8Dx>@&lW|;Ai$EkXwCo^Y+{KiXM7&^2nbIKUTwJ8DyiAmg`A*>vnIi+%7tqF zn**cb8X>2r1GJUMAEDwJQ4>ZzqtS3K7+cMs^}TMm#WmNcoO$$q5gtn-0bI%km##)m z8J{im6;{`EgvM87zS0jGihDyYR8(Gn|47WOLWM>g`V=uP#HYT;UE{*pTnjm4A0uw^ zfc;SdU!lTIYI6uEe|sT2d{Q?Bxwoo)%%wj+4Ttl*YoB}q)TzK|q=AR5&bdm?!Pt~) z)N(A|^?aAd1*{jkFZ9W4u2B^l!k83;Ce$QgCUhy{Ha*VgxRecoS{ulRh`c@Z^R?<3 zUbqU52zyQVXZ`K^nB`b6WQUD&HqOz;7v*ZEYihZ|hHBJgnh}l&l@naC!`8b(+0Gc^ zTEeo^gxhh%Z!fGGr}+|9O=t>B0m==oT#bvV1!WBQBHm#v@0(|bl(G8G@v{ZoeB}&R z1g(bozptf5?RXZ)yALB?AA8Intq+c9uDVyK@X}dg^xG4oN7oFDmaEbU5iug4zHf{7 z*%gZEbdOiE#m-lVIpep+x9_w|T)yj2YagnKaaC2=%@uaVn>6Cn;nBwJ1Lo8;Cu$Nz zD56@zAO%3_HQ}@25#uC+cXUr5{Bu^wZ<+&sX6(!&o+Zsy1@6*;32|0n@<_P!QZ~3C zZz^Lt2vSC3!VpI! z!psJE=C`Fa5%H-cspW1_4Y@P*$I=gnKZEoCTHTTwjC-bVaPL0^4&T zff1=Kn2QSwyz{`xp%QAKP=la~n1=b@m)Bs)_R~589_HSWGEOR;=PKea+y)okng4GQ z%!?^u)HDM>(;TRUu`M3tL6eCo#(u6IFDu`du9@xP5)?5d+~#q%Co_gZg$-4>PvhcR zm*aoh2RW;$gU^mb1qRMN_fA1(w^JK2hIu^3JRtH`@OPn&2771EK6~0to;8Ki^J!-~%3ixc;+xJ(=^5Om1`3+ij z7_#DaN_H0S#(I3ySq9VBnrmFm_MjQ9FfQ1kX2C-W_}0*u@j3i##Kcio&-Z8?o}9B! zRXFKs*3C4g``8yicX=pzVhvgUtpdYIJ+mtmX|^}qPyx3Wv&Nh?s3fHc-|26jTx+h} z1{+j*PWoNM>1ez85G~hn$*X)3tR}2Bu4M?SZ zfPfhB`XBxVZol)Xg(t_V_Q%DdSyO>Zgrsw^sq!9`^WY-%XDtHRSelENaH91S@u4WS z)N&9y&t3)A*RzUH=p_E^#vUo9`S0F)i10za0w#oN@?46P<7q2PiCwwqCmCxPND~`_ zmZE|LW|Wwm&MYqsVJg}Tgj{+-GLhvTWTK6+002Zl>pg@jI8x0yAx1?mEyylIYZYyM zmH+G?{nKw>ym%g|$UznwaAGIPi6k&n3_)TDVgLZdiDM9n=EOho6F>29eFOkL0s!AN z0N_9TnVcnXV;Dj@aq^hb@<$W4spm7Wo$3Q71kXU{Ev(G>GKmW_W_*|T4 z*EF;bJ>B;ANSTl+!|X5`N)+eHh?brrwv7G2j9XN)Gfm(?>BGSxST%-e5gEyfgMA2{ zWlc@JghYIx9hHAfbf>9DQi{EZYM$-?0Khxz^>-}h6&l8)ihiNii?u7n!W8gM%udBQ z0459*QbaclNJ~MRGs@ZmHnEkm=q*3v#6eS@eZ++vobbviV2JB$bS!Y}p*hWJvM;{> z`|$kxzK*NblzeZxJt9V(UFsmm|o0UJ^fM~`0D)nK4gU3Y))(0JJVdtVn6D;Y3dbRsjx29 zjUBu=c(@f{4EU{dVx6 z5-d;D)Hyh3XS7fxJf`tb{aGfE)Z$7kx%N!xW3jf=(b^7{-}!)R^YGZZ4R)?ZBRn53 zYQ$qcT*EXj^Et}<)D${!Ul;%zzQ8kY)|UH}5Hx_n*trTj=Svkh;ywf-o(>uJIH++GXE3@j<5qIgn1W0jyDigrzsa>D@DXSI3L>DLY*G7AR`_H}Uq# zs+WUbS#%!%_k92Fx`xGAf3<#vuQV-cBD@X*ZeqYq*dr-$DJ?c4$N=7k4*PsYRsB7l z+tW2o@5cl_-=)s3b9#1iy;Z~W z0GY>^>ubF5wNYka0Wpdt=A+u2e?8un#QSg!FWn0~t3CEH;nU$}z6J-6jWl*$v&G*# z<^=ErOKv?rCx8Ed`#YW|#xmHUBEL|cccq`-EIs$dPIe;=cCJCoj4wie@(kvLnp*>> z%DTIi3OlLL6q>YV#Y38GE4z2@{~qRZo)oL~YC2CU!nxD@n$}(ez=Ew2i)(D9#fDlW zm~iU^kX2ISxwrZG+3--@3-W4zU0&0r->(cQ$Mu#O#O&Q+9W9v77Dh4&-I>10mB1Xfm?Ei|8ZU66M zH&^$4(J;{*FlvCO8c@Yp1Oid|{sF~>Y)!y1j<_9f=f68tsF~5lfH8H4R)L&P*a0pR zZol;@KL6EUx5vxYS}MY8Az?cFo(cn13PW^^p|sK-;zo-%F~^}c#WFJT94n^DN$YpG z|1-E0=j^dBnfy+S1$x%msvJ_-nH!e(2L^45h$$lKkr;L^EeJ~?%_DGx2x#gGm2ZsE z8m-MMYqnyWCgbcd!HGjman{+$M5x^)x|k7FQHjjrpTiK4V^ENyaWytog9?loljeP| zm2>&W|M*zzC#wp3Soqh=b zth2JUKnw`*&{6yG0LWc zr-cB^XKP=HCTe1|t@RbNQlU>OSOro!JpaMpi~8!q z7FQ}FD`a9nR8;(l9cpetNEj)v?EmcFbNP+|0FAU5bO4Y+YODrgH*aFoea-(4LQO5c z+-$KCkA2Q~hy&iHyMtXGFR7sil)PRf+5`F({j-L{fOvMyp35b6&f_s=e39NRsF-1q z@W@f{=umTom`C)O`c@qj4g=OnZjJWP=dD20grJI+9X8IYFZ(#+CLM(AYHG0&j|=hG zh`^B`sZnkNfTnD?U7@BCF?M3X%-b07&Hl4RD+HeeysEIuMQN?*Q$(*FJRF|+OFXOW zx;`KFcoXkd71QVL61&pdomFQ)Z3eK937^NetNU-r`ZpcPe4gW~@^g2IOK$-+0PM3> zUF_UXR8|*NQV)ln+ssL{Be7(O?VPu9z|E0R;OTJ%*KRj!7z`=HF~Kv#gG%rEo7Ht+ zyB$0n?o(gx>nRq&`3iai>lqIxb2FVLM-Vh{c-~y$O3b4=s^T_|_`JU<^YC!~hFTB< zH8~6#(WP!(d7Y{(Kc6$>O;0mF&L@#>ac}3@BdxTEDa@bqaClYjam#{U6~Em- z*j&)Gs&trS#Y=AtAcYC0MNRYkI-QrN*U?amOVDE|nRoU4&-DJS-n%E5Q}g``BS7(H*q@mL^4<{OT5SDd7KD^cNN@=PodG{;*d8#P zvnV}t-8HoUA_kmkSDW9@A{xj|0n}~o5kIkZEN-kugD=<9{$KWiba&X7pAZ+Ui;ZQM zB8D<{QyYNo|6#Fj=)4a;bC=kOFMHRUSsMU|P@P;A)>;5g1r08;kJm=61Y zRotigFyd~1cd8KpUd4e7hF<^!Nh27HrfSgCMXa>n8&x## zw?dYsw6rl1(y|?3qSH<;Rkc}F0zirZeFzv*e})CH1^^~I#ipv~)t-dmT?NOC5EI5Q z6pe)iladT5;t922E6&wb4OSF~DTXWT(tg0Nl`QaHoi6%K}aewX~RDMxj+7| zy!rB%KM67BsRbY_u{sg0DxaAd!!U}bBr!%ItCq1i;S?hO)K7gB0sII6d=~+LZ+zoF z`b#X5b51FYW6q$Qp;?GiRaL2}s|04`lqAMP$Y78XnE3P0-nhT~|NiSQ`Y>=Hr9hyJ zY!!R~ym*jQB()`onE(>9M7!8$#b^t4T?9XffH4HzJ>DbcH19`5lZ~4i=nOLPKx6KM z$w9>4?W_qoTS9+8O>Gg1NfBcz!hqI)nilp>wQJB+6|ySEaX`1Mq)*jX=L?{a)|LG8 z6olo9c1Y5QP`hegjL%j)-%-Jt7Ia|;7BW@S5N1}u;SweroD5ZU=DL$BSwM$878Hg2I|$ z0+Gx4a2JQwJ+0=}qLt?B^-FBUEoHz==&o2(9{(6%*sbRS)^ozrpkU`a_pFYdQ;imv zzC|l$*ZSG;IG>|oOM<6)(Xz+RIW+9y7E8MIM34CPaD%AB>i8$gCbtj}hCH6UZ#5ho zSM#%Xa1eL^!9dZ)*iF~%iO?DOK!C-#}GyABMvku(-!*JoYi10KjM08yvB1$j!$&nU7EI|MJ8->fza*-#+f2 z1iqJ*`kGp#!U#M34QBz1hT0j>S%n}gz?t3wAQa|Rxz8FNglYc=c5Z`9-=HDWL5VQi z#kWVG+cS4H>p>jo?}z<=8n7BIwo=W)&#D<+>d|Ykzf+41dyF~aAwM1ffNVYB24?6% z^p6xZD!i;O0V2eda5wG^Y|F9e16bQ?%@uOYPz|W1f+JVvT!Lpt?F9We;(qAxICOw! z6Y^6AQo?tBmSAesjvaI z?FNmn0VwYGkCxCMwT?EvMpc+WDIeMzy0JeLyk^kh$Q|Z57m>;G(Dr{W?9mV+LJIS| zSOt2(9G`mUux&P|o!R~l(={-|i$5g)$BZ{HG$ja^7NgSE>%?@QoDf93xjm$8c8L29 zIspLL^c$EM9z_GdRr$yM=nubr_3Gt_tg4zbF)0zUb53jTGl@_bgQOHW#^j1R0kaUN znB-so*MI6G1K=Y7@LdG}ewvtaPASKfGoU$U&BC0#NUEDAiAYW{NK$3ZrCpvNpMLSi z|K-2^H=p-?$3c_^%>*_Izc?xjc1rk7Lmzi>hhP*nILFFaFT)1(k}(T>UQ#EJO<3 z-z-=T$-W+{|Lo9k0}zaYNc5!bUrjY$G&^__Bq;ink<|jxm}99l)o6VMDuJ77Ho>Vh zU?7_SuiSI|o_1rE`<(D;-{CIy7!Z;3x|;D^u5js1KupSb^f}@&B|OFv`!rzC0S)$hJk=~}MQ zus1*7hQpblH6AFK z1qhgw^g|v?wW$aWQK_Ws`Cw!#rvKnb5Y?(xP;1fHNR5s2*ovDSy55fCVO+}bH(X;^ z)p+SEGzCogB8(*<>mlSyV0*YGW+0^UyK~9Pf;n<6+wvL}%C08dEQP3^O3L0NsMbo2 zhU&xdP7;bOh{S^4Me_A~nitrJL#K-GbhjAt{^WZBipR7+N!q6IHgMx`J)rORL}TRD9$<1XA`SOoMAa_X^u=H6=vUN+Y=z%V^at1{cOa1aPNFaup0R?p&@ zyTq>eUdNo!$Bc(`ct@7!GH}YHS-2}arigKB!(xUbYg5u zH_a=@f{GkA&ZA{P0HE2z*DjdNT09y%A#>Q+_y(Q@by=S_?7+q1@-9WZ?r&_|k45cf z;OESIIbI8-MuQrPbXX^k-pv{UCv}0Qi!XLQ{|?uXmA$HsT|8XpnK5eFL8wA43%gXc zx%H6u^K;*dfxwO!k0Ii9eEY$|m&fDk$mq@c7|`o*aLfa+ks2?m2A9r5K)6i-pAX$h zvRRh|_~hR3eh|=6g)4W73|r$?>*{&(;M1-&3sFfA!B$#ysaw61?_8J8e1^!qqmnP@ zuj$BQv@TTnL62Dkbi{P1@uJ?%&!kHkSx59b?fb{T zAf}8r!yY%`4w_N{38;vgdT3UR+1d{@2PhZ~c`zF*;2}Pgb_0is1u-Vv_m3EJ4-EmY z|M54m|LjeP&5jw9CB}QAH{Z!r;g9owS7P>o)BYcWFDNs)? z09BKJ?2r7JH=lgzWzeLWQpzl>UO2OGcFwDFf)Jw1nq7#Ik(2=l3sF|^PyK5@`H=ze z5diq^0RTVqGe7&&ESz)JoKwt1tVEQVSwS3p|uY;0ht1bh!s><7~=>9fy9xkOpVkzQ<#m>`hM&sWwgEsm_$W4TK}bLngvl9Ttc&%PfZ&{i zFY2Pl`#gY|7Bz$hmy|u*OIR^sGH2+Bvc@}Y52+7#Sg<{Rah#_M8^-pm5z2CE_ z^7Gu=zpDPzp(Vf^0G0{912N;uZ@|P*f`KhaAhtfk);Ay}>~oKO8Xy2#*P;?jcK5L} z(Vs%gs9A93E{zTf>j~@fXo{@laN#_5&g0rw5Mq2bboi(H&u7}^aj)XFY_WB%RT=?k z&WOkpi4_lVkDIuM2jQ8&#tUD8*~Dn}IiXJ(xAC@keIMwu*KUKYv>0>7+i){iFcpfr z(9&J$HS|;z?^B1Q8BzkExOm=8xxRi1t~5R2P5q9aBYQXpf-uiM&$#Xd&d#k-U9H>Fw>HREpF<1r8C>8=ZVF2H=rH`2h7^|yzd7sr2E9IuA;!Q0rb zt6;~^Wi@`~)A7t&F!y1fWpxl5*P_qE$#Iv@rr{bJSL0GD2m|*a;?4MgA&>Llr=LC# zaB$eTx-bj!YHa7{oihfUv0Ph>&2)VXTMJg>m(R_oQ{la7?sl=q+gW5Y&11SeLgQLg z-ld7AfBepvkYkIDI8?Kpoe72Q!yYJOI?dbVxYR6YxQ38} zB4MBU!@Om|R<_uRB?~!cJf>iPNlu7)obPAjH)yCruOr@uM?59!w|qYvu2FG4uR9NC z#&miQH*Nz5V4sJ@n5|m}ruSq_vAkRM_jz8H@pmxG*tWb=QOA?}zI5ApzP%l9PR7lF ztOX14>|8%(NC;}K=QVFRU!VCcUR4*UnQ;?Gd_LS9tx?llc%ldW?3%ou^9K0x$*i7$ zwWuTR!~V&4d-a}|ac-mnfzhRYHGU^+7#)oR)wV{wGnb&J--|QA$F*!`O{J(AQG*Gm zackFE_Wy_29rl0r2$~8@;owxzkl=FO|FPQtnH(;}7&E`){lCOQsu@A2{oh(qZsHye zglGN=&wT}^Y5$Mb;u3Dr=Qsm!s){RVv2hK?l<;=AncV>ZMFnHW2r)?2#Dr7CK6Xec zfnoH0`;G|$R)vw$$5;dcBQ)CI?!NgQ+4@32pDx$Lxjkd#0P03Uy_AS>}M1(S;r%CP1l>W{ve* zxeB%S$XPL@h%t;v<$Vw))K!D3h-qid=!c=WWtA3yavyn-H!uN737!nBAP`s`a_qG4 zd!%UGXiUdRme$IDQ5;NL9=tBERrklF^r?6lw7vlNf^W;!YL*G$&WUG z9|3^xDgf}a-}q_gILDZBOi?v!R-)`gk}&0}s*|sLN-0xHQB*-pmKNUJ-`79)xBkZS z{o_3cR)Y8Boky1=`q0^H&q5?tfvIZ`V(V`P<I3A#S7II&s4lmkrg@XI;nmKO24Vv(vt*) z6cCChDiw;82-`o);-i{vkybrn`c0yHQmW~y87W&!L&|9eL5Q#tikSjETMQLUR^<~R zy!wN`7wwB@$YfSD#5SIh%7VB^{_V*!DsoV=>u-IHq>7*si4JUlR$8=DnO|}0;7G7> zErkjQJBR&L02pZ<+e)@9qJ4!!zvg&1)VQK9oQLYiC|1Tmv@m;I4ufAW#=#{@j zB^B;tkGu460L3zZi84A-nwe0+qbXHHA;NRN!KL$vQ2fUJ7I)zut6laika2tu9!w~- zO{}kx>Ahp~%w3@s#(f%aANTV(OxG$zhulFmd^tK-cJ4PN6+N+ zdp5_%lU`?e_cbhzJ3Z&sds4>Y_!?Jpaq)YLkx%ctA&;zBUEe#eZE;=C+zu~`B6(L5 zlA#Fb)x>69RlLJ1VhlOrJN?c2dFzZGujcet8f=`6cNY_G0PtOA066b8rId1t8e&oa znS@j2d=e+Q_H|MsS5)(54^u_Bp{^x$_ufH6_z_jtCB$O4{haN$##~b7b0jJ*E6jtrHoeuNB5)?zH8fMsKy`_7AUXx1XwR{{rSv~>$F*6%fhfH4lXpqE~FRltduqA49% z0#4jaQHm*nnab}OAx7+n?qKP6vT+{HUpZfTnG{0|&}8T|GvU<_{64hTS5PJ-jRr2T zM?x8M=91J~^6$yvs=2~t(}0Tq^ALKx4v#j{T3Q1 zJRBj~%XgT0Ue6CfGp*_QM@h2-gNfGxO<{bj(rP*Y4;7px9|ioW*`v!N9!qb2BQQgaVMFh}Z>g_N{gDSIbd5t0U?D&#jL`{S&}xSfcs=U zZ{|xas7rz{SrZ*69W6Uth=DEpG|czAl@>eS;L6vyaDqN2yomvC#|PZS$3+lO+5$=d z@XYUU={NA@){Sz_=u*VDy4R+NeH3I=WWY(EyR(0P@6S`8FYiYM0fxF@9yB530S&ivf@R`nX5lqX0-tA?I;%MPI=Cl9;^~2^&nftA5AaLcqHt|`v0B0Y={s8(Bt%1L3JfC9flHOd(m-wUTP~T)&Uq;d!30)AXsp;BbAahvav89p@^9L?`dn zwy+Wa;3nSMJb2#8s%8K803!OFa2Fm7x><<>a@pI}VlFZuN>w3BMRrOJ0LXb3 z3Y-9d2@GH*)M8p0A~ZV&JifWXcmDoAL5}9!051AjRaM-k0>&7SQZB-K3~@3uMbEKJ zEncikY#a_wSK?4r6&l~5^44nFg%SPGS^T*I0S*8_<15rvGq)Kq+4~)H#NGbE7yxC= zCJ;c#!Ffi^g$b-nJ6l@O1xkbJ`qf>;`j}cJ%I`_cF~Kww(n<)>5#XG;VS(A+0kyfz zAk!ciL(%=q))|wd0t(K8)*JBcRJ9hbZB^@^{Ud+o&5Nt6G3N{=WFZ0xtB|NT$-No0KoMAxVnWgkB~Ro55;nVg?;)@X^qg4dY>Dt9 zS`aq+k{1C%;FyrqD%>Fi`@Z6AaH9+LSIr4W2L~qPa|(c*2SJc?Ldv#enyntK{N{5B z7-NhJ@}DhQ=}dLkF&9mO1ByHsDOlj07}^Q52qLyVCjjWj5&hU77VvWc%;I;VfH-G; zO67Mie&BnNYG11RR*9b~{KVFSwrRGgeGSh7kZq)mb0A_2n(=11w^j<6S1J(!LLe42 z;!$xuw+M8pM}oo=<3;-%JF!|_BB0M!m8h68s^T&BxC;*m6Wwza01GPe*t!;3(~+mK zV8ab+@pHoFVb4i5mE+-HIrJp0o>x_b(`lr5=6BdijXq_35#Fq>!IJ}WI$ZyP3aZdK z*#Ut2@PN2DK~>am$C4~n>~JBQnYNybO_9wZtHOrdqf4U&kFLR%tui*fLxX0-lo2$d zO99Fw?WGdA`bTk&1)Zca(G@}qGo3;6q<22c6M*a_jRt1^$gJBxyEJH;#w-S z?w~o)=Y-FP0k6k5XZw$z`%7H-21zp>9`=Qc%9(1fk-<9ZL38fA><1yaN=bf(2G(GbC->>RxJg+kL;t!TnlRF zXOHoddsv*)kw?_9`kN<*=l&9o84=m^U*aPIG8`B$s%z|gWx!Sc#o77f$sOjgE`s6X z=kl)p^tus zN#^V`@1eH#d-gNXy-(Km;z4-PJjYJ_yuNlhK?<{Bz5nNf*?f<3u%F?^_OIIrV&)fwzQk&LH*%vI|FgAgvR9JL}-%m>U9)i}@P|bK4 z9udoDRBgS{oC`2uZ8EK^OA#p}=71Q?u6cZTz^DJ+uOX&@q#4dRRNkAw_T1*6MIg}F zqA@K5P|twnjv0;}Ouq2IO0j+0`s{t#|3e(D5EaAOxYIGC@r|8#AyP zD}l06%yS}865-4&sj7Su?=+>%DMYj8B*+&xH~z2w?O%Kua^yft_rpNKfNL5!=a7-` z7!oOEI43}%-YXfMT%#TU004Q4D2Wf5+oZh7V&0)F1!XmAT#R9^;H8`qVl=ANGLm9K zEe%u?#-*x1o!SZJLX#4a*{5`F8v+4Y=l*^w>i1dmx=LS;J-G!;b2O&3qW*tK7*+Q^3|Wa3XWBoF|XgS4GiYai1glG+-ac+0S^n$v5oq zqPhkEd_LTo%~uK9Ui#-~gt3pNf=wV?xE2W+`_Q3F{UY$q>-LZ$VzU^V%&ZRa+4R(bQzW+0@5Z+8!P9q!H^t6_(&Yyb#?_UK};#G4)N<0JM9jRB+j zioyL5gq+Yi4^IsmDLN=A8vVIcPWm|FHryBQ_4MR(@^J8M$9$hfnOUv1*s#N>8GSSd zh?DOf&CTf^!g2NJXhO};Kc};E$(6Nfc^nUi)_HU>JbnE~?rA1;s{uA@!`2HLSpES=wM7R%+hk3RbmlysSYGK@r5B9wC{}0LhnRoEgwb=P> z0Sg~b=J?rXe)gFe7}WX-Eje@=563$<#*6RU{NBNdf#rQ3ii1jkqUiBJPTu<~w?)G> zqDDNXJu3FNa2sq`(B*`O*ki~8D)w_lZ#wST_3DXvv~dkuXF`Ef(lewmw^vQaT|KwO zF|XWq{r7jQe-4C-%~q_70TU@}0!!UYX=exo5#cb#i(_B9cD}B&bCTb0uX${5=#~P- z%RQs0{5Qn`XUyXYsF?S=*|Edg{9ZNJQv`vB*kd2}wl9@?S%oMI@Sy_FfI;gv*t!N; z75mhqPa`&B?9G@HGBP|4`#+#~NCAB^QQpbIbGiRd%!+CM4+!NR-?RV69)0XEQei8c z1>+9;zaBFS=KY^hQH_Qxj5*>>xV1#TcoU1FXabDrQYe;w<_Z8}NH#iph~{svDO%+p z)`sa62szEn0L|Ix=z3rPc(GQ{{;tEPzw)aX#}Tro=R=H7wiq0=vaHhI`U)wh*-eWV=N55jstVqD@Kh8DJ@&%@CB>#{ zaM4_VnJ|PNk3(;ag=PF)YyoEgU=|ENvrze-W_Ty4>lSU@!21dyAclzh{T=rE z{Tcw!sHzIj&TIeyXpBk`dUbK3KlVfa@|&xxT}UZqsAe`@t?a#1=RGRtbc{h#N)8Gk zCJ|y{VU8)$kN?<@{aZ%>z~e^%;3EL=-v7gpGimVx|2LM0{5}KFDFce-Yvn(l#cgVS*>BY_iwpi`E&M131L)mPHm;_@QjS=u3 z0HAgrwXXnTvlJ|f(kxthsMr*rQ%1`1kl3GL030(Dl1Z+fP^nf(?Sd-YxC-7|;5!}( z05-ltB@P+DI1K2+2x7wXKlpX{ZEIQwrJC~P^WXkCR-75lhHS9(@K1kzM&j|@QZlWhY8!lv?lE|ILr?uxOU3EJvt z{q3EVvEx92juYnz=n}M2qb>CDSgIBgiZSQ4IFj-f^Dsl(vryhySO`n;-mUkq|0PH@_9K$Hm>FhBokO5ZWXQ9b4 z4=XCX2Vvtj*trIccvHlV5o0#*b1s5J4{?t^_HbMk(KZLigho6roEXhDC)|V)pY=Bw z^YC<)`5kNs4?^pjb<%WH72R-+sA)y3of4Y){`8c&bLm>doDuSf07c8rm|IH*$Omm& zhvy66w4LMlxxY&R{iJo}>G$H~dZ+snndf7IiJ65b=F~JN#xo3yb5-b<)iZp#*`Q*^ zeF%6P2JGYBk`VR?Ijw+>r+z9BE~{%aB50Ub@6t48(|gPyJjDH3aKKL*16;#%g`CrD z88^*wfq+>SVx|EADnZr0x8wc%%qy-B>(z&_UXI?kRW)}p|1R8St}2f?Te2pMrmT^D z3ixcg=Q6$0+G?<-j0I#?Qr-Pri3&fPxdN z=|iDw5~4O-NasB(<#<~BTCum*6?tB|3`~VJVQlLSyz>Y#p&NQ6m`gXR#pa0|k>f29Vy$CrcWnm>H&8pc6XJ1$FEE-Z0g*qd2vIsMi5JCv_=YI4@|4jg2 zoB;sBM*!d>0PwpF05q@`fE|Em0A7CM8{hapIqwy!NI9pJ%+C_4*?E`5IjyQHS5*^J zjFMB9Ov%c(*XdO-h2jl0-80?FC|L9 zyd@fG_OQ3F*<#|RjkPGQGBKQ!gN^`z6jPz>8#OA-6efK#Da^3Gxz^Xl0GKHA<(yoo zQXxi+DPZ62&kC`;pO$#0ANU=AZ(N1Sd&HFIwg3j95(f|=#L?7Jp?LlWe-EnGl7I3H zVlkl>X2hbTdaU|yKq@cV1B}*4M5svMTy3owg=Jyd1&luTND3q>R*QsE>7lt|K?N}{ z0s;pn1zF#HUL?VnZi|hyW}~CYRIA0IWkc<|YzY5DcwF_5N~yNnvBHXO+OP$?O6CaA z=V2D|Ic#)1SGWa&SM4*jB)AI!_wfz{;JUuTC3{>rk5MyjLXW%A0xr8wM$C%0;TFT3 z{4D@1BGl~ANK^U_9V)TSs81utl+ed+MS*{(JnvI~D!=gHSxp?wxO6SNROn)l+wkzD zmC)IKVVX1@4u5W>o`Zls_Argz^g%ttAN-jQs9abL4i>EG_8GR~ zEwSit&eNJ9*!b2c+5m<)qE91+93VvVSh+&C24Dh{In9D-Np)_+xbhcxSznmHITJht z7hX`Y;4TGx-go%+{tfc+wLEpN$NkaluydEQJ!D83StGJ$bh$Up5^`vyLgoD7oh|F% zKJ>Uh)0ez++gX?_7P~?7n8x8d@6vl%tfM=(HNX+ToBr1P;!jks9IpKxhgW zmtoE$4=Lbv_x9wu{I2Z(So|G~D|dkl-=I$kH{0L`Q*EDF z?Je|M|yCu^5U7w6zSNfB}FfK_%YeUS&8T(5!YJ(GNXF zom>G@(Q?Z6PbkKR4sZVPH-W5k3`OVGIwDgbVw$z6YVRT95Mn?d#^3S&FC|W#{_I3% zASgyF;pAgcK^)j7tMOJnYWu-T6!KlPDLxhgEbr$e48GJ8B+LHSasC7VEW{}fI-({5 zXqJH)h`{BhRWBYXMm*l%L9@aWDQD7cWdOj-7taC{t0|*FnUJYy0MvDbFh+r9r%-`{ znMDi$i1gz>_M`vn0sy=Pa1Uz%=syAg9|3^hO#pxw0Kf*oC4g%H&%g1FZ~UKqRe^}K z^r+{Qb51E|Axh#TiSw!QRZ2Or=EONGgNRf5W3Cz6l)_-q3v5K_l z=g$k|(>n)Y^CtC0i8z&oPBqUWefeDgz&iqiV=DjjyQg~oYiG76Q*W23IV8DG>3OG3T2(SDFE?k2RJL^S{9d5=)0}jj^7Tc0!$7GU6_hFBu3L(O!-@uVa zpG{~AuweSa8G9iEc*p^7``ZJP;G7*5FRB)+mw{FR`;>UaGViBkZyye#Qc|=v>Pg1| zK$rTn3Be?W)yIATzP#Vex;n0cWkq^Y;O<;Y!4lx0Cn|PZ`0_j-qHWR^7}!tEH9Xg7 zoS=^bUXOQ&xrp`g1%j<>3g}m%aYm2sbHwNU+j(pRvbql`jFzUH%ZvFw_frM5^p*B` zK+6qUKT*|t^r*@+#_yG8v`H_;uwr+!+ z_Yh({rhqrY4N_KI_!ckg3)JE;ri3m>JcJHi=;k>v&x<_R^#f>JGtVbigyBLS%Dh_# zc9(7oA~M^o++)KHo;5qXs2T{Fb>i#3!>7aRnMzYZ@T|TDF(IU}yod1!R3a13t2X65 z$cU=&!f03!ie^Ta`oneQ1u#f%QmuMoZrWVA@a^pSF|lI~$3$UMG}!sA>DZKKzIxB{ z5f}vn3u~^A-nS3^SpXu6g_8aH9h&AWm3L(0TN|64@WpVm05UBROfXurgF`}G{r%~8 zndbA1`NOmYP5^-4;m?%#0l;JI%X@mbo=FUJ$ivxtnAQN#HCpen6%&aZOKai8;Q3;> zIXU)IV{q;q08ZABbh5S{-jk*HWd(tg3Neq?7N%=mhbb|(bDVLXS?nECGWirBGTCS{ z6ZWx3o?AAl?0?5f^fI55=xN|X$Xt2m1deR~pW+}@iz^zo0)(*@dc0XW%RGT4?qrLq z?EhmPaGxGe3Io&6!4YBYqM?ge%=Z5lE!o;}7anmlJR+&ZgcX@xqZg}Us|MVUd$R!~ z!q(LgIP|HWeTTQd`dhPJ-V6ei zWLAjb#liVQwcZF!2bZX+V$UFpm09NXdSx-a_?g78V~j}0G3xOHSgP_b*dGKs1zJyl zsAFY+I{bf@(`iaH$LJu_EXbNckePho*ujYyTObDP$HCaehu&Urw)xCZn`;?hWi(Ed z!ALRTVSfh=8J#9;Gf^iHkXJx3_sC(~) z2nZ?BkN(Jy{4Y!O{|3Mvfc*jh$RD%Uj{v~$CIC?5NC4=lq{^tO8lwiJ z7_0(GLc$L0s5k)#90bZ%rJscHrWf5212kocIxkFP7%_z5bWhFiNg`GN0-YsoQb9Ns z87Z$(bfe$XTy68t!?DrsLyE}7+GWmHio3ztfLnM56_|k#B8D(Rv(8q5-aAvmWkS8% zVEfeW7h9y+a*+r%In-QX$m1da)OSpyd{!jzBndAY zO1+?#I=G_N4Gh@?;g*%th8?b}OE{P+Zl6c=xnGE6E!8Y+4qv(rF8yZ3IB3}6qF5>J zV~>zx>04`NDyt>``$gis!A4p*;lfTZj*EFA2TP^_wA|pLvR?88;4zJO+r2G*&T9~$ z2BR%%`BU-=Ocr643GT%aOr~*wqO-APPLx&;*Q_)VvSwq4i=Ki&iv*E?gZ{+gJ}%uBUv93jsViv8xDO-V3{z{2p4{`{S|YkQ z9;~)t+6UMEY7YKy!oxf6{jfMs*QYrze7}#Yn|5vh81e`L@Up(fRb`azoHG(K`jjzD z7Ogm_N!P`~6Cm7%5qIMwhS&pTyf6F)&#HR%!tO%A<7EF-uI6FBr}Oh+0)NgWWi_}Y z#dba>MxXjs?{&it&+BWn;xHr=**h-?dHP%?U5toqdLQ0s>3vKXb3f0m<9Ec4e|o%g zpj{0{T>uOwbMP2*Jadiu4nft!@h;uwXkE2&n$+DJws$(CwD=t#vfRsL(>GP;4)gLI z@!lCg??aMt2e$q6WUc~RZe|fo0BEHtng`bYG?oOdWXMR1wdrKOuG*3f;Q%5yFw*K6i@z_$+sebbbQ^PF$p$Wf#Mqmp?_dnkYX5&ocO`aUwA_|4OW3C# zQ+;~=-g5shW3%4hb(NGJa*T<-KK;&YnkR5~`ey~1zb6n>?7&d;X`ERDD8kScF?RJ9 ztd@NDp+_HjV-e&$$Cp!E06>sF;_;t;2U&qW4ko-TvQqa?DMK71e0GQMFd&40ap=+a zhxUxhSH=u*4$gTvXP|Wm0YeBF#=*1*oJUjoS%~Z9k@rTy!KV zU)%SgMMRrWIR_R-i~(IgAf$Nclq7<$YOoxb0Xb$QB;3QOhv}dF)|gKF!2B>Vo2brGF_BwHRriM%X<%Y zW>M7b_XtZyz~ZqB+skQIJ?r`4eNh?>asFIb^tw55*t9KbUqPJNpFBL?uNKNferJ^2 zY03#(kJ8eMIOd2kgu~)^1_bb>nm-ngQ~(gi5OEN3XxkRss|#HJzONyMU<-PTh(%;3 z7C{+Pea*Q1zAxj&S3W`8w1xF2NI7DR8Br5N95!_eCl!dS5*Bg-K~YyNYUiO~>n}u_ z83I!q07?aWTeV0DxCysNh0;%RPan7WNWYzA3 zG$+=RD3SpPOR>L$(r-;}P17%T@^n0utvWbo4(^Dywu~3_y#c2k!TM}HdyFZ}fk;Ir zoY%0m6htUuHW5C7;KJ3|_zE=%`eam8E#h{b1$|C%s#n#vxae74 z_PbA(TF+{8DsW_~`TH>9Ar7m6aOy(_fG@_kt7BaH-JHyNHm89pQ0?M?eJVC{(%{0? zXvL!uhlGT?Xms9*7LTmxvneK9qE%tzy*X19rRlra<6-QvkB?7l02~20FRL9Kd-QR% z`&!ybEiD?)RNPj-KTeb;u;`>k!TOi4-6e<#-87zhJpY$@vpYTS;<>i2!Pd3d6jzBc zMcl?c?qm1#b)V3yZ~|X>jRl^qO%u47dy9JSS}1@o3l*^|#~gS{UtU+^|TDDiCVdpk`NqyKdzg za_uhcI&+61_Ggo-oojJbZBdb6)HKgU6uVBrx(9uq`X{~FCothzbv0Ws>Y{&oI#QoA zhTNlzJ($GS5@*7>^Bg$3?{_DIi+PdH%<1FL6mhvHH8aSe7LSy5UT+Q-QE?+p=eMtKU!a;=*lkAs)V5&!`bG8aSMg5OP4);!0G`vn#pf5N_( zj`zjm@6T;+=`i}o`#*cM+#n;HQ@{k~EDH$74d(?YIcd{-g1xCTbD^{#kwVp#{#9Dp z0$MSv{4*bV{wE>g`7_xxucT-Q3}M8O#zHSQ;M-3Ef;l0?akk5As~Sz!p#S0yzx|JX z-5i>@fOkc7ao=~wo^S+Whr3_@Z43`xVZvquQq^K#H`{DxXlYphu!>(r7`3m_whg?u zcD4{BhH=0+4(Nwr_1UJjMEr5T5NP#`y57viG3R7%FEcyBfDlS-;2o->)Gs0ievKny z0SKIPg@tSG0;-BiDpXB{##@0d=8S#cqaXGdL%`WQk=D;TfpEFmK**u*2Xw<8oRVf_ zAX_ZF1OUXb{&Syv-@a)ZBTX<&n?YEcx)qnYmIp?=9 z%KsYxuaBz#9e@!){0IPi1OR@w001fgz{CRBz{CJAr{uqY0apO7e&~n(*q``Q|H8lc zrz$U6)m8T1<=y4Arj!T@h7iRV>Gti7`{m#G`(jR>VwHc~Fa zHd5&2n$;5DB8(P7ER_67m7P$DH#?Fr9@=)zQ?K}tdR%NSp&IencNhkH*@dlIUsZLf zDr9pIC@LW_rWpnG-ouemhK3Mvzkk5vd;hZ4nTzpLrfOgxoaO`J6-<+(!H$^UvJS(DB1gI|SP;*_jQ0+^%PV~CkN+VMfX9b>jAM@&ZJ`S>&aDxeGqzuOf$djb z!jsHZ6;eKE0EolO?K5l}s~$a!BlckrV#coC;Ih3y>l`vnD20g7IL4R>Z-;x_mcW+^ z#i}8X0m*;?%_ZrVg6`*;s&!1|qD6oRA~Z$lX;>V%uzuR$- zFUI?okl9XJ)ZD;3qbrX&FI*ptX1tFb#uU){3L9xlqBr0^90hTj&j#)_IqZCkq^3L` zH5$mVtTZ2uNlgwL*BXG86fuwJ(qQK+@3>Xuw*VaO!~ID>>A+}Rje6=UhN&bc%?LSw zAgINe;x{uq5&B{=Bw#em@FH-;=u^VoI2h2dm|y0X&gepC6}{!$TilC@S*CUMM;BGV zW#V%@9x0zDLaVVpuG-_gZo}f3*KUhSYGl>Zu{#0}92qO85?K{@yEx$O8H()Ls%JU( ze4gXP{;A3;@$W2QlO;p)l()Emg?3;r`@#wOk`>THVib-a#{nd8T8}Yst}CVGOVCEZDGf zEnYR32&%Xr9`O)uoNIEZ#Lx51?#Y7qplWS%09tXla1K=FKo=vv==b<+c(WRdN)|xv z(OOqYy?O`7lrR()P0hx@8j~^So_ZIjajwbXMRSeo%GSr5&|{3lyhbj;;$_lW!+_G5 z8{L@BfSYp(XQavHu?eiiL0@%bIOMQe1=b{P%`TtT^U`n{)d=%Msgd z@h_UJO@{!T=dOY73@et@Q~|2Ek9$N-2Qk1Y=`Ub_Q^Iw%L+c$>6?feOUibIV6lX@k zhATL75FvOreUVfg1E6NHJ%kZ&e)BsRKD$9(RiGlMJQfN+6M>wAt4(L=i~sJ|kV7m9 zxI)12m4_x2W^G2M!n~RK=lMv$j~I1bLD(F=Qp^Y;9K^a8F);`jhtcBYEHM5#(?$-U&#Y zwW{RuoCMIMg_)e~HP2BsE0h>sCl@e)f@Pk&H(3_>2bfucRu@${5SvPzuk>7P&agV zdw)-gj6@k=0Xs%jwFI&rFBXFH4nz(RQ`t1Ty&^CY6S7)`IwccBi3w1|S&4u4K24@r zU;E0aMJb~z{b`l+5OT;cjq@wc+JS zkfh8>@BFNs8ioP=IM_xIQ#m)Ias^RM0VySj7kuT9em|OLm+0>waDRJ`Jce0oK-H@1 zIcGF4F0uPPUs}-VOJQ0CCcNlyQEyQB2DSI_&O-@B`yheE7jYPYC$WmOv%c^#Dc+8c zxQ%;2_0TG?{3i$-Y4E(c0#xysdaL4^5W~FgAJnk*B;lSa_KnnVU^K2q&cK`T&7rsP zM4)C-B}j+opryYPOc?W84DgfYIT~g>goxL}8$@Ii-711o8ESpIiWOaO`hFudF8l^< z5reu9BR=cj7y@4^TN`Os^nF*nfB_Tw3mVP0-S5yiL#gkE8}vDrUdsl39u6M9F#5e? zK^J?(Wq;^`Ms0LyUHtuMzMc`>YuMqczOul3Y7IzgK^MFEGnSy7d48*s^m>D>ikMl= zHKJyOJYXLOL?krq&`N7!akSxWQsI?%_Tm_K|th9fsu+L;Lqhm44< zXWn-*YWS|&;>y<$B6Kn0F$Fw^J;prFZSboK_*2h8-$6$|c2s!>!RP=0*j(Sb9japg zI#WrD;Hm*^3HPNE?TUUzoZh>mKIn=Zm~i;}JUi|9ja1kcO8-9exDWf2_jmfNRkqJ) zR-Ci@D(8RZcetoFsEDvn5pT;nGhN$c7uQE)eJ!uc7tNI+nqG+`hiCN#uBsM0Z|!f7 zAz(;xUMC;Yh)=uMYmaaUHnVd`5sxE=(4pc#jrXLip9_$gvLYkTbK}5hD*JW0<_q6q z>l#ETy3m;g-D2$lA{|VJZpA9Ry@YV{=fK4n6=FE2}8iclDtMLIFiNwzYtiQ zmE`pZR5((UC${~6dS}YqtjOV$_Bk4|{r`*6_W!DA5LoqB54s&QkU@X~o*f#lOap*D z924%sfX}*V|5p=&l?Gkv&?hTGIapkSqS+F1fP-M`wy2#Tq=>uy4f+(|GQm5KKJ*AN zm<^p~)a1bgbbXJQOC>uikN_3M{cnDT@aDlpj)`Vn00x1az&91#MT_q3J>LAvKLfI< zEje*$D%*oX2(u8QX*dB8G3##Pl};9p${MsRr_+Mv>b>cHWgw=AvBcAk-Q1Ejmisj8 z>VwEE6{jtbiS

M=D0`Ow5o;5K}a^L&}HcoaWH;FmF!6P8+ADY2dv_3|1V3TKPCUSi~mj3|9-0e+w$}=x%~(L{O$n&dX{uf_)^~#H@5;JKSN9tpwFbou8rY}DG)c-&K;orHU8l0HWhd>YA9w|j6XZCyI zJb~4)+-$ZTO)RgUSS(S}?8Kx{h!83+NwpGU8ZpLzloUCoSxC-_ zgDYZ2DOwd-*z^bTg!(R8(G;dfpat32MRYaKFFhi2zen+x2=L-T%*ZKX3`Sq7#F>jh zDSAmcRZM0lSbg~l7vJ|)3=a zO#Ld+UncxpZVH>BhT|f#Gw$aeX3q|v)YrJGnxZxV>|?}D=np}@S|#sAy+b`aQ&`pQ zCOqQJaJMKEtmng(zbM~x7*n(g+<3c4jt-x__FFu!cK~2jm+*)uqy2Q6%&+bpf~{{s zu)hB_aIiS1yFev198;-qb_bPqS_2;|#rG$x!l&1or}J*-wrHh6?cB^d*@q5~MX+=08dO|Em@pI| z0ID`lANVuRnRop7!hm@4-8jDQ#l1TSc79`^;{=e6w|1;21Zk&ha&BVNev7LmJGrhY1^J0O$lTCd~+%XFZ@U_DHITIiW-j zt9ic!0J~%^1k*K5)#Zkp)jKtpE!Fa<6HD8&CHb6wHUI!|C-g3;e}Z1xi%C! z1{un4uiOQ;b=m)yAQJ?2x&K`H-wjmDD^WrR!Bw@z#&2-xJbc;z_c5U>iDw2ds;q zxa}XHbML=d1LkB501XFcAr zrmEna_5Xu_lp^{ZKp_f~INV3kxA@MvM`U-DA;R$be3TMnhX%CS+tt z5-_ROAUN^)U;G3A{Owo1{5=VP)^%eV0!@?a+Qaz@Z@zdv{+s{X|IL4xV!SDd|CIdS z;h_4zKTiG)fBu-r2Bjep~R_LD#PlYc-&l4fX# zfych5s7lDdx4!+`{;&V?fAI{S`Qq{t;%gdp#J=033r6lraHN_MU}7K;GQ`|Dw7#;% zCn|Cdr2@ZBrWimf)qc;6rm9gp69<7OO>;&7Y0TCml5jg{OUE!j=K;sSFy&o)yHJE@wQvNrI{*^@DEC8nj zA0QF5(%?&*YiyiD$Uv_N_v0h(Q#Y&6dh#Hs+49U{KnL`-VTW3Z+Pyd^fX5VZJKoRM zOjao}pLAmD>0}Tte1*yhG-o`-fZH(6jDUuv=HKZ)Fa37~ z$ziJ&JgctIIyZ|>Wn}DAKp(6U?-z9RkOS_A{j9|7l+pScF=upXSY`Ddf@kd&90|J6 z;~{p3pgu1*J`>>E$_`P-m3p`@%KxTMrR&P-nLxgERe5I)wD7E@XEf_sHSwupf@7w} zQ3|-mr zJ-#DhJ_khXT#KFGB9~+ZFh_^Y+{;{)m)S(srT{ZvMiMGis^sq}tNzkAtSW9usu zx=Tj8A9BJ_)(kGRTa-O#%>9abZq+-xkE8)(jtDuxvyI(2X$8FJ$9m+;`?wGTeO_Oq z5syAce6fF1m@P-|;Zx7mU*KiE!-exmQ0!yC=l$&mUC+7X)w4I|-E!S{f=zVgFYrB^ zOSG=W5F_4(9$n}QgTmII<7ZWs)(s&)k7XCfv!KlcHhA{9sxPn=k4gkXiidlAm-XQL zfW_sSvRF&by>B1-vvV!Dh}kWl!Opd)xS0XvX)Q3zVzoVSInF}wWW-G88B&j|_8#y2 z7LD`Bn(=mg#9er_J!cB7_j8g^5w~Gjy)P4UZvv0v0%&OD zu>bFKm|0Pzhw<}pcwSwhb$(?Dy3a@Zzci(w6mT~@npG;)_J3#l|2}mGL2FfbWn8zH z5HR**hlj97$njw7r)u#WnGj$j8^ko?Zg@a(;f7PQ@g-!Wm@%dz0+|o%vOnlVwGF7Q@aZr81B887q?!oMd60Kz83=%is4Ax7)KXxSbrxWy^7|*- z)Cpjc*^OXo`Hh+m?Q=vRA!y7e8W3|{C&%%8x%YHnxlGxOh&R^nB;f7X?vKfAEGIKC z$}`B3a<*21l#sJR)07{mb!BQ)XaZ#cat48MQCGTaHt<~MKlA^FY)SO3z#|L^||94P-&@_$VGA7Rx0R8}JW2mpKp0DdWORJu-~RS@++X?IzxX^L(#7Q^`F2A? z>~X)}T9;domE{k@uJ%tlDBG_#M13L=S@x|F6_)^k6GM!LIAG|9S@|_b0|IhL$SK<5 zR~Gay{fX}foFLrq5&Iq~<`t@}$*%qS4}2Z|vPC6=)^AHyYQQ)KWTr)e&jr!tQfbKL zZ@vHl#rlt}x|1ju>XijRuQt!{qS-)5@E8LgQ$&|~0EAX*Qw2^v_Mt@RjV`CF!gHpVSKW3>d76({K)@%uDE`Pm;4z@&XdPD3jTeexLe{L zPsa4pU*K77J=_r{n6%Fkq3DVla876->RoJuL3?_~`=!6bR-T6yL=m+#v& zM;=0lyU97@eRjdqb?8LLcBcTq;yN1f*vJl!$*AXXnD>RVd&}~;WuG~`Z@k)*Ccx}@ zZF(vXVZ>t!w*MD4hPeVvYkxkU1(x;fvbw-!X$Ki|!b2GGcDetT{WRdfAb8$B$5#Bz z5Lxd3s#xv+AxFfN5pCB2kTH%fs$!9-88HR)VMN#M zF^ofLZviUta858jbolgFehmqFum@zGwE+C4g5PeTA>q@%^N;3zf*gaL1A756fgLaG z@u(Dr*5lOp3QgTYm=I#Z7zT4KSc~Z#jkCqZAVw~&wr30dVtcd|z7Fw_FqIbAqu8A3 z?0d;eK%umU2z%rlE&b3#rl6B0Ia%`05QqXP0UAfmDS;9|NFWkyn^vFK7udF&{3Cz( ze{y?qxeKJGgdif>J8#y6mE-@zzx}`eg0mTUaZ=!~l5Sw(Xbx>M#5!|GTR4ImW;-L`pHxw5NRW_O1K5|N1|9_Aowj zVx^!UDpXV@1%#pM2&5p#1@SA|Ewcru^;n8Xp;!SrZRlyVZC(Quzv>sDYP<4?X3m!IQ&RFJ9n6Jo=n)A4Y_f;iS-0i&}Z> zYV7<5zElYxLpK8j^Zl->YIffjz6BGZCbNz5Y@ouB6S~kN<_L4H&4((}yM*gjLFZAx z_6}h;4>mP*SApQ*go^8cE6Vi&Z~BR9{Irt%&b1(BbYWP3wg_r%suFw^q?P1$v$#^S@(7yw$S(fAskJvY^}j=hLhR8nBPuY<=g!Ye$Ik@2jMA z7Bq}lijCG&JHXOL@918ZwutXqtHSa3&wSSvWrwg734O}FV|CqF)0NMx9~aV~avoz& z=tGY;l};o7cM|;XMK^_LRl3aOU3Tv6WRIKM;-8kTWyq&+}L1^6Z{vXWELyy7rWbDZK-f7oJ-%p2*>=+ZVVHhb|@D zhXG^C1}>(IeR#x}Mzm7l!nbfF7*oK*XzQ@5LUV-1gFApyhAKgGE{r}!1qUKEv1n3^ zF<|Hi6N4`A^nMu7eQ|^P-~7ztI#_ibMR$WM2fu0HFSmI7?JscmPrnTkqx+L%uy


f^Q%kcws)6*x6R;)7F@r&< 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

@;HaI5W+M~k(faW;9_IbAX5afEy%#e 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­SfmWr>*1y+`Ky8hjT>Ez?P9VdWRqO_(gd!M#3u=c5fmh^!CiCrkR9E>}7y z=DDMS4+2Uq*&?`s&A->n2S!H>9MAxqizL0bxO`c46#Rq z`;ii{jhIQik#QUKb#-k23I21mL!s7IUJCF}C?^(I;4mCo6N-tT(~7_AFaUA1ty)pb z)BcrwLnnO}{R=yip%W#WwmpUxJ!2b5;a3>@dw=XxpHJjbQoBFDfQ?s2c_Gv;&4ydH z0da0%lMgfC8uu+P$gQ0N?vmyfu|G{)FgT4h^p36FyU zE-OY9F9hi$ammPP5E$5@KZAB6d^`}rqW>`~84-PZmV;2y82|Z*$_&R%r&xgPVl?b- zRf?d0SdJ0$H%G>VMee;m@=9h|{?dPc-eb=#X&$16ATRmo?}_6#hzbrIyv5qu-FRBY zZjnubGeJYHwZPKWB>5{81=;fUK&Pf@;n)3Xp{A>v^!;k`YcISO43_lWi}hdzMNIEU z6KDV^ZhCUa7OS=gBvDTj7S(c^y z=T0U*P_00Pj9y8TeNbi?z0Z_WmHtj>&p%F0SGG$6^fvt_ zDZigWGMnl6rlIz?CXbpt=c<`?x(%Xm%@-gg+45CBNQVIS!%cNjSR%D=x=1%<@_R*E zh&Vng_jH1!)mh;BjuJN_LB1X*CsUxFpr#wsPrp#53|nfm`PTa4<%Xy9@Hu9Y4sG<2 zN#+TGf$`pn?I^GY<1_+o>r8h%?Fc5S;T%{ziqoPF|7i8J@@r2b{-GT*54{ zWZD;1k!?+xpE4oR;*gHdhm&K{>Zp=*y6T_Xvku*qo%jvNwC&=}IaV-)uF69-d349) z&D}d)Fh@N?cmCQsrV=?~?HF${%y75E13Ux3!dq2l^wOy()WB{o9K?NV>D5e5$1m!c0ug<_&kI3o8U*2CpBxrMv;wb z)Y#D0UeDDF>-sMY6mkK-CEO{PnQs}2CJ7JG1of0 zL0Ngr4$*l^B+u1454X*5H~8m!%Yji0eR)_HdnR=9V>6qJBL;DslQiZ|(ZUU5ghK8Z zbn2WoR7brxQ+)N+oQDZmpX;t7wU77SK;=1~NctXt+U8zyu8C2Xq&*xsBKW?3gV@%? z1_gBJ#Dr4!3x>0JmqRK|kZ^_?O1Ii}5OuJ*Xt1Sp*rrItLd-lyfO4@)#ZC2VohFI;ev8ag=Eoq-qf(bs1RE)w5+;saw76dR# zB2lJad&LGF3O+2Jn($v%mMRphj zEUU6#G^6=K%;%(wPsw1ns38GrS*@u?VD`B5V{ZMvNdoWWZZ!uLV1=QBUZ#Ynmg#d; zRZz&HBqd&C2JP_`tp%nKl|PmD_{7<<7AaV}DAEw}R~N+861-JksutLLe-om#`2Gnpm+#}F=xhCl{ushw1}tf7fIzM5>I76Ozgd)pCt7g|ipMmMcV z4b%!)awfG1B%| zoJ83(ImjEo$nzpPg*a%;Ajm&xU(A4u?O>((2eJgIs3baOUfCb;i+*!_piGw0qBEPd zMZL^bS15w^e(uA#%A5vRW-+Yg^}mGS8aiE+6KtGBBj2#+E6pXF{?*P>7&&S#fWWMkgFB6q?=3W%mJl2qL^!UB>G*h+gkTNB^Er# zkJUQXZ+(2C8z(02E^2SKoN&ZGjD@<&9cZhXmXAnc^jZFFirqG-7(S_`{3(zMW>|~`i1?k5S_VuT80hf&y^3*QOtN#c}TuMJvc}O&j04> z%qv>-(2bU{9V`v zH)aoQda_XkVw4iEc3~Il~UEO8=Gc%p~$rD4OO{^cBbx4LMTj|PeH&a#f<0c?m zRbCk-OS02*yccwXx`uwY-X$Y44My1ADqHmdW;LSg@{u7g+R+%gXqj&0<2L!aHtNv< zt(evK?GMZvcU2(BObi^EL#QlE4W7(P5FEr#DmHt9u*Y zWZ_lAX`anW_eupLYijQn>FO2YTgbA8Cywf6GWlPCpTFsCvkZ{o^8 z2utZbJ3vQpa4iA`Cj_D~4FW+}ino6xFiHQp@8KuX95PHQ#Hyv7K==YcX`dJi*gyUVuMhLr#i$;M2 zhYzj!kwW=eDSYr;kLZ&7pT10Et3A)AMSTjzFP+Q~y|x2JEOGJDsE)DsR=Z-Wd(DpZ zi%wIQ5~32{4kVaK{xhg}HVsu&Sc320&bh08G|z2P4I2mps6;f1t_1*_pUnt1<*?0i z!d0rTCYz%D0cNGRk+Qf%o(Oq(^tGW{M7xoNkYDlj!u$W2#-trM6W*jg`&-h8OXlfm znJ!|WnqQ-bkM3b%O&x9MPOvNAox9vTczZ=q`_8Pd#BnpwTF1|Y@Np%Nwm`@K;Rwt4 zFTzzS+?*J$B6Jc(H={&|LK%IO(Clc@DW7J)Dyb@IT0K0U`ty=aGbP@`kUG8lm5R?jAUMReO9a>!JU|8|(h>hYGR$G>D=-6l0bv5i>k8V%@nj?jo(h%21 z_m+WMn|B<%Ykeqrlt!KJ-4cTA?W(D5Dr9#Gm~eUJ9xkfvtMi*8uR(!d0~*&#&v)`d zC{I=&jCeb0V-yS-l%475SgC3gPuo8#yE+BNI1ZQkT>K_tIlNp5>d#HHH?&u(juvYb zs7716U5NQa##+zvNlQHaNFC3L;ir?xH{azqSh6Z(>_SNRJ!co%h^v{bKEF{S1>tqg z;J4f`Cimtb)$(h0H=USo+#kMhrVwx_3o#7Pwa{VE3s&U(;g4yKroWACya!Uk|07X( z&gQ6;szqO`!sLtI7N-(;A^_G_SW&6&1^xn>H^23S1|*U{0CtNj(acMzuwl6QHkL z7fycgkhbdUwyPZ@W`IBo5@1XJ+Y3jSVMsViFx^bb zuwYtE0*lY`J=*XBe{w`?@`_(p?AF4Wp?{b> z2F0H9ew3?7ceu;KfAM)-c-$6`={xitstzccY6`uyPkHIycBRI1^$q$s*CqRUwJmQ2 zc#|)C#j93TF7VrS_L++xsYk^+$No4*O+QAp<*l1%Fu=1y#U5hRGZaEO68>sw4Ilt8Ws$>^JdY74+3aDoSs@s_eQk7;-_(<0+j0N0Z?^ z4vr&%FKP8sRpTN3)|;|0g5#fgu)TMQL3{X;(1>sdvc%P{;?8AS6@vlntTT=e!vq_> zZ*Wo-OB93e@R*W8F!A%`BU#JNRbgBav>ljbQAWgi@W|87X(>BaB~tE*Bcu+rNN%(X zdOyD97p}<~&zm@#!3Sc4cTNKQ{ZwlB$xy0`LEJ8Z+1$;Ni z&QLn~m+lFl?^EOH)1fNz;q@$YgQJ9v(EwQLLUL z@>p3Vi_ry^$_(Y}nI>+tAJ&&-!=7_hN=s*S%eCe0+3fb^TavypFLh_9V`{9Ksmucf zb>lsM!jhHj#1Rh4229(=O~HuhEkRQ41*V!;>-F^|TK8r-Z}bHOnble>iJ`KXMi}<_ zP{OhW%5-p2R;n8EVLhd#B?}v~z|fauCWfM3@qOm#)XiN_7TR?*^ItCYqoMway22b+ zFW=v_nce5Jzp)*(FSq6SF&8kA2k=Vk`+F!D>mL7h;yK5>UE}zC-fNIA?eld0{pra_ zUtCF4{SKK0y_Y!cbjQum9iP0UXd-PCNPKAdmD z_{kW;vli93X+EM4dlItU(al(8i=0{%{C!cdC(L)@e}qfGmo!OVyyzt$AjRldJIci% zt&lf6FgYO+`v6Mj3g;dFZAhu&tgE)F6kk=Z& zqg8W|l*mCHtX@P%gtNCq5>^ki;(p86Q;K-nAlRTiDIUiTffU5X#>PB{@wFa#xAsU4 zJCoH3aUo1-p-60?mo(M;$qY?NIURL%*TVaYX>yjlfp3-L13$VYR%~=ec)m&iVxk%1 z@igD<;xkUo3XLEQDStA9oVl*uj;J-z5E-Mdg@HpxKqx;YaQ6vyDwORoHYV#fhJ0;pE zBGM!lhD#%-2?EIBP*B1753I)@&+DYLi|^m?^G|J13aX5ZS1W_iZ;b0Rzo(VXHX8-{zVf~LjG0?*7L8V0*)Dqus@_-ropt@kjk32` z!9rIEKo6s|-1z$#r?*S`*^+1(IH5r&>Ch z8^imz;ds5cXuW9go0U5<6xHt@LAXH)8u!PX+_o8KD;FElRd54o zgpjMo$c2o_aiJaY@x}aw2>Y;-J2j(QVoQ2#>FMZt1dC#T%oyKELV}vQAChaNn9I%@ zSZcjAn?4En^904IOUNwXWmf%YoQKk5&rhU8AHAtjk$($PCEymt9snEzzmCS>Lh41X z*v*c7>Aj6b3N>Xh+&MYePgojXuIN#k!W#yExt5;Yp(1{7p6=;vf)Igzi99YPSm;H@Kjm(mam@k{CD7%#)%o}1w73Mnc(D$4z|Q^ZNHx;HoPLc>VD`fKc0bW5X- ztcnQ=n*5qN*&`Y3;i#&DD<>^=&aliwWxxEd@I70jRvEOu0MpTA`+d`p2#r)|Q$>9N zt8mubbDEYG`_glA-seZNk~=I_2!x?}nJ4BSSLuBe;|YHUl$3Yq_fd>+2-C*qby@(4 zzmkDpu)}7H*7hz@Fkgcl_TX@2L4&#KpG1JG*f$)O`GL8s`WIZpog&gi zRpIqgvr%1)L0;TwZp3=&rjY2)vl5xoldc;)9KbkuJD8KK8a3JpIJ{U7SGoU{kp)8F zMeTYdd#paT+F&qi2*VM}C1DUidh_R34_zCOK^{iGz6CGGf!=&L-t3BcF%J(UsBqRu zY(A+w?pQ!I-#S6vokBrELL&tm*VQ@n>d#^7R&Pp~cZKkg2rr~I{wUgJ;9UR-V}VL` zn`_ur2*_4|!~QZ56nWf$MKzih&|=cdU<`qR?0q_$>gFQ-SFV z0ZC^x(rz6JN-_-w1IEs4f%1U3@ui2I5nO-LZ`ng@&(`g(fBv~BzT2ZV-VpF%Vu&e!jx z$~8X*sP1Enesc6SD0sN1cx$k>5q1d$bp-QM*H_{o9iXH9*t=)YTMp#BXG7t zzu}~z`?DqHVl9j+y7f87yp?hqYZqs!2$qS-+*DB=rJu3$_Yt@B&kEdQMw_^9# z1%n!j!Kb=e32c;N^puMcg*6;`OWd2m7{gKFB%)>YEFr6iV7@vYugmRr*)&$ij+*7l zn6rv~^}5&)!bPR3X~)?#V<=>#-Fj@vsJ&$LRB?tN(3rD(E_q+IAd1x@WDr?YKZJvCS`y8rrmA8R2+K;f zgDU)j6mpfTT4fti&IFwGC2T}{e^#_m)|0J?YkAT2%tZG6?qK*jUiYp|Dm#VVp}TI^ z4O!1Mss2@rg*$ZuHmaLOGPci2ZohAk?wn2?6qNPA7lk)pfT%t zxKej^M)lptHSBsPx_$dG7_JwNfcYhm$&925SC%;1GKC>?Iq;m(arLydNFoHL*%ubS3vMSI5jke;Kxm3F6%LDTU4pAJG!A=6D3 z5#_PdUd5fB7TmAv<%d;s5^EW(A3K|-9ugSvf#fqr)O);Wwx%dSQr}$vh5Hp03pp7y z7PZaZz!KP|eUdS`?RLN*Sr>`661!QeIjC(C*Q9%BCYdhxIbP&ZtdArduKL)cTIy;H zAkv*{{$^!As;TM{HdKp@_2GL>%o|;pM2&le#hzms8yjz2y7)*ncaRJ%yoQech44*K z69%u@Zc1fc*QpAO7<`0Z;AZbnUvV{;3=erte_f`;?#uVChgfeGTsF>6Re(o-A2Dr7 z9z=qMmIY;W1Q`b{n17JHVw}h5x4%q34v*%N(`M8{q-qeTWZNP9n zfQ^?uVv9gOlC&#+Z$%AMMQh!2#)u>ElmJSHtV)3Q4xj~qU;u#g1Z-jjQ^L=seYP1| zlrblOJo9QMt9S);0tEyH{X_J`LGc7&gyKo1-zaMB{a*Yk5-?Q4M*8PHud2N@0*6k=cPZ3dLg}RXeO&c>G`4uU z2@<&9{s#&EiP2%#>LQbW`WUurIm-)-P#tkFuqH2vx!dz-Q>Kg4^%km6T$DiUs`8~Q zvH=|mi!Dp%6^+ezQTFsgiSU=X{kfh@f)llenj{2@L`Jn%0>}t^R}swe^Y8W~=`(Wt zd^HO)OWml+RS3Y0HgQCipMbf@yFcHr5o6dUooVMoSem%MNBWkBr!LbUc#I!-qMO;~ zz^Gix7Nl>mUYkKvL-wh0lL^1-*3qDcr-MY(H~STQx6xfy&`Ot+{>+$g;?Ppz**2sJY(R^wNE+O#^#B0nB6 zAkL#q9dTI3inc${%+op`Aph>Kn~kuZ89n7+!dQuq2Z$Aq>TU**%T zaPenKdGQ|c)nV<7IL5|LN#*_dGk!}FVaGKCivD6q`RwKS;qU?eLGf$4MAdq4GQvLn4$^^|& zrnQ-9`E(CEY-qj{d(YR!!dRvITIj8b>>;LF*-h2^Wqe+8lzY}@MNX-Xu|9U5gYxts zOQGXxr*e9p21*Qn;eUaw5h`K}rNwdV%e^-bYMhPzMS9HNPYB(S{p8UXnzTjwd%m}K zpkvcy$QYi>v0R1f(eKx&S8G!Nko_lnyl4mt@Jr3Y1hKKdqcHWpfM`|T8h=kTAcZzpWkV_8s%Yqmz zpf{+JpZTpH!4b|_$|)d_S7kqZefxRJ!~m?c;7MJuHHmylk^wMzYaA%l@!(4guS&*Iq$Dt!JQEq&C0K6wn_=A;JhV~hW{2tO&i zjkUnWv*1(tN(2{-buZf?1SG>pdF@o#C;eWoWNbU$GlZ=O-#Eia#YmIVsR#j)B2NOl8bIgz{SklRQ_I3n3$O>+)Ve0#edo z*0RNqe9g9sZ)|X96Sx36SZgb)Zg^g5C_1vl`#o{x6-^>=Zqscutc;}wA7=y!l7 zKW~tfS7wV3GxNPIKEUd^S{ZO!$7Ha?0ur&aI zX+~88v9-RL;&jj8P?&_Elf{L2(r}+$1%Aat(C~nfLW=aB$24SMHc1zyoJa)&_Rn;{ zVbfF}=b!=vL5NknoJ9DTi-u~0PJg;+%spc19j_Oyx4rK-xpTpT{g-CI$xLfyju=-9 z>1fsNrA?mv&@D5rrsXhqCV0T=d5P7ckJq%4b4+Sc@RFxVkVoL65foa=%CD0rTV8|o|ZDbY%@SLYLChQ7x3 z%D!B{m3a5Dr4`yg{Wij=T4~AM(GP*f>5wO06gY*lzE+dpSFmZ8jv*-iNgYr{@Y~mm zwU2a#p)>Dlk_r+Ra&BAIOk2@z`zPk?FVsHCY1I8?!wjG5-|Rly7V`c3PI@zz@rXf% z1DJaoGR2O9NA6Dja~g=?voTgyq*5Ng?{%#|YlC{m6R=SHTUi(Jw#s$Z~Y1qNQ@6x(MFlP5JbN5SFq(_uL&#k)Dx z7VUph;@w}1>`OJHZy+H%P*qb_U9kV9?CTQ^n;<{BlNNU)`v?oQtqOmW`4L;9`I3__ zq16#A_s+xvYYE*`H{PRlwlgCvTQO4|v=M(Si1B`O<88CtWu3r~66)$7lJFljTv5N4 zIF2|61=AA_tn8W0t7*AJ?IzhV_N-B=lJ=e}`bB7DVwC4uM0Fhn)hw#nU-MV1>L`*J zRvalO3-URl{a$@C2DCUCy9tTcco_ZfHGx+}1A+VLAOHDQ0xpCLXn;FY4%Wg>jZ%&` z_W=^o#0q1C=XgXJxaH zhf^D(cmS}Ea!j7@2b0l_)b^kjEAVk!EKyQHMF0C8fpl~3{x>3D8ir;w9RtvN7h?e` z=u8m;nn9D-0oO>t2ErhFi3CVL-y+IL5!tBOwQfdV!o0mQbBP8|H-Yc0Tr~)O7X;Zgk0Ypqx6eD|M5QvkYdvTB(h#(=dKl;xj^!2w5BW_3nC@<3oE&ja53J>oGftSE?iFC&UQ-;36vwIiK1%Q@7@IX${7 zR9O-;(6!^QYi^#{p3C-UT3)1Ld4lVYrRQ;xGy+r-CRAl&SpfmF0=W^6hUWaPu25)< zy_#ZSlW~oLcVOai-9XI=0bCEMH;wb7I^KlT#l$~k25}o7$D!_hu|2^aG#FTkpvwoj zV#qGQ&pAF;Hi9|17YF4;gKC^;GOhcVyiP0hP@1YBXtJ+mL^L|}Nj_~=UYn0}d29^V zkvh)1u9?nfj8!7l}#8 z=;wBT{{$@d@i3ulzwOKMpRF82R_U|Nd)NF;oiWO4U&omS4j-KSvSD zDCgQrpO82Db}zF|2qPfFVe$AEU3gku(Cs}lgjNxU}4Za zH%@k{IiZ?zABtJkg&Bs+uqxY>HMwRBPR*!S26@C4Q628pT0isVRgP zXIE!-nahbjpfJc&aoHLCIG1wXM!f2dDM9@a2}iJ_Igkz0Pq(F89^OlU&b!D%Bfi$z z6(YJYkwIXyeyyV}@^XO%s}H}-0%2X4z)A}+2HA5q+tuCQB6zz({#sv)qh6*375%2o z@O$>WGdW*b>@s8PLz{TJ;RK|jRKL=3i5#(CekZ(;mAk$5j{p&TN?EsjY+hvoggkVU zz+465n4lypsFbl-LlPP0QhZwY+y+|kG5V7K)Bx_M!H>0~! zi6OuodQC%;90DC8Nd*q6l`^9EGZmPb!;zAs)%EB3H_`JTv8;W!22+O}P~@pH)HEpB zww7#ojJ1J&<>@Dx%U#o;i~OJU2+vM!YIq7eE0@VBXn%7!gO@v2p#Hr4^tCFva8MqAF2)5S9$D4WgsA+7$xVveo{I_<@#i% zKUsin0$3>47z|q94Jvr-2;LvQ{Ex3bzJX)>2VUAcyU1JFII9~`Vrs#3S;gN;X(^*G z%|n2keRtTP7wTEhPoiVPLyMMD=XlQtTCJpDR=i$$B@vnA@TzVi@$HFCfg}wJN`ink zTk|WMTEovDk!bT8XxnQ5QroRaBm8JfT_L^N@eHURZ5|WT5C)&D>_(EGxBAy(1<*uq zb5cW*v+i6{5kBO;vCBL5@s0^nKP%2>de7H`K* z8XeSxjq2w)jxbJTZH9$P3uyNWkauT8D({ z3g#HpcCFV;yAV$wdI>H^wYB#Fjr7);DMovM-86#MK0;l z7o82h7T4cz{ha$g^NC)~KJBatjb-o#Nhk6zSaDs)*lm3rTrn1^R5gP)IdrmXdFPGi zBgfCT=lJ?#>1^M+9ft>gxd`g7Zn#qQ%ZFw!h}8cI6nXd2YDjWAvDsG$$qow*P1x)Y z_)}En-&i;vu07GsK-%5Itp`^~dj^SqS4bQOKhj zD>`0l5Uh^GQFpu5Xw%3uoRE4^&aGx|uPE6lv@o78zU!G0T_?Kht^4QS+`6$p)-IU% zg-IVc(vI7D*JgvITAC$hPbO{RKT)B5`nZgg_V?_I!~FW>`kSTSTtrJhMBlGT(Ecg9 zuLKf`wY|4KI=f86;JaVLjm7Zysqx_h}4M zi|uR@8_oc{B>-iay^6!XI^ie|US$O@Oeg>hK<}ILKUQQMPq!#s#gzqe;C(oIVG)xaAu*njaHF}xsoZm1r}adXQYJu& zolo3Xg{?5URiqHLSDS!}85mOJBHS(TY&qtt;)AS3*lVk4(Zf{Z9WU7h3os9DiMt

PCGd6ou(SG_L>Ip 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 z zrTc#Z01Rd^tBS>ciNV;p)5PX91Ha?$&vsoDG6==W?)d8dF2@YTT-!1&;=FRi49Mr` zqah+Id>;^CePmF7e<;fYEr2qB_rF5PcDo{-TL6`BrSNd?KP zxt^fHhFC#D72r+87YcSKlN@bTqY)LPtiTn=s5KtXj~J(swsXl>h2>cWXKirSI_I4C z&V~{iNjL6$_WG~?^!ORl%k;05 z{VCGJ7vxJ|iVjd69kh)x7|jG90u&ceN`eQGsn;$oP9Bg#Ku8W}JkJ6u$JA|L=boz&UpN)BlI~&`532DK!KmFc3cZ=l;avDN&j| zC6{*N2~FKlVGAwsf&$Edywn93sqdt5z7*Qiz4zJUN2U#7G9D}4T9xTV66n2`mpdU$ob#zk~@CGq%9qT^KMH&zD31;M{V}oGQAHq z`6O6RAc2QR>YFVx+*jk4XxZB6?KOFdlKsTb)k;K)aL8tEQYz{cM>a&76Uo^=o1Cqv z$x4c>F(;RQO8r=v2HqIkGFc)7yVctll=fN@&|s{^pvPE<5~x<1HyUSP<60y6?8?7u zuy^aaJ#pV8-~s`g1c3yyuJ7q`?gzMCb4;Rb%b5D$@^#sxY_B`+#|VsQTNH>-$aMsx z6qwQsa5479`jhXKvcu0Ax(H$<2@A>2=sLVjqEdGJl_0}ME)={okq$00P?nAAidT}t zJh@IiVUWrNMKJX{^#ro);&@S?@VtG7T1eE4{uF`A6yVt2X3BJ!K={qBm6zJ8D0 zW8X6xd_r0yGY;zwf=50!A<6Jt37Ma_ z#8l-_s)lzig5?IV4xW?2Xb9vr=AFl>s)AAy0s?RzV?O}i1m$?BtH%GafB*Nte);@P z2gboDA}x@Iny^BM5Sy&ZX(L^5908m&&KU>uK8Qd5$NuPh3BY>>z_%0}n6pmPqc8+! zy=My(J?~Md<%{*0=iJ(PB>><(xRmJXI&Pq8b19jGQXDd7*3u0^rXfN|bnOw(j(2!= zIN{K?s8th-f4)#Ttrwt4PdH!CWKLuqLew7hJ#{p!Be&(rYN8)H`tvjyxZpMv-Srfs zho)QTp*#!GQNCafcn|9>5I3*Kw!`Uo!trp#U2{O!98lK{Dj~rjz?py&98$@=4Wo=D zk3mm3U$40I7mRw$Km!11=g^ORD(=%Er~);%@k+RYGA2Ix=YPt7^3VN=@Js*4pOwq* zjmKpe@bTjteD&jR;Hz&w!pDzqs3Wv4{)>&Eb|!bXzWVSn&cho_X2_;6=>fT)eeP~& zb%%gaPtlOZ=kDlebnbM%t>9nMmXmvWm?b8uNUUnSJl*5|@C=ny2yo=mA06fa4{OPE zF6F5!q2QgvWxC>{^D8`@ALh

@?Pu+|t__gAgi8Dwa9(La=O1*j63xk9S#)acr8o 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 z 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 z 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≺9xY1 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�=GU-$c^ZROn}2Y^80Wuo_4)sr?acp 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%0D)*HaQUcYc309?x5`#seKh6Bxxlz2uo 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

xRLSC`3#2}fpNlcWkONk=)3Z@J;5TQ7V>C7 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 E0koIte*gdg literal 1139466 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�sB3A(*J9sye(Q1f>^~VR_%*Xsjuqc-`lcA}cmp6Lq?cQ%P3hermAIsD0XB3F)`TFpI8y}fU;)m(; zE2!@RL=fey5XF^e*i8p88?T zG3Q$A`@X$vSJf_8Q8w6ykQgK=lUx{~0162g2t^6kk#a`@B!2+`^kw~q8}`(_ z8x(K^KF*KI(%DtEqA5*evuw6%7awmf{qCDcNs@UdCf zSsbGc9Q=XcEKAls%NoOAdtJAsAXO;svkq=x@I6%clpcwq&*TTq_D*f-qr#Vqy?!V3RZ|85n$fk&aBFThCd3PHbCIW`b?AtzOUHr~1N_W?fI~wHm`9J>sg0`C<4$ z|IiY!M6Q)sGmrV{Z4mSoIHn@0Mk*dhZym;Zh6ct}gmcckNab<_n9tJ}3l5^~ zV)im0ulF9&4b^5I<1+ZvYk8nX+x3>DRISjs|{14S%z zDLkbU2H~sW9rspU2^J}Qjx*0uL8)LnelYgrQu!1=YeKvN(#EK;GRk7@T+s7DEWRay zQ&OhDyvzz-u!0~Jk&KjzI5__CU*zLo|1Y#%6p*UFU)`=XqZMu(24l^pMb(FZbDoqF z^D2sM-+1OXqJrB7nzL$Kt=d=4U6OF+inc=D4Xc-H-HK`ycD};lO66rb-6R4E5S(xJ zV{7fJBHPMfFC~p`$8~3KjMYfXeISM&2;T zvlq-?s*u*CNFc2n&d$2nTC)XrsTNgV-%&NKb*(2>C^_Hc1;RNl1n+THtM9>S#XIKQ zP{_J%1V4Y&-wq5g2J6htCd&oMHRftO=Nwz$eX(#cD?P1b1sX*7@aw-qxEpkAt!+rH zLyRh2nH)?xUP2GtTSz^tN5uo3bHFelQ zPvSK2Nu_Y-M-B|sCR{j`xyk1lrO;JNvi(MtUK7LpIg@FWw%u4hxVv`Uo>Ui2dUw^s zeGoad09JS7e3gu@pEIQy)mc=^-jo+kc~am&Ug)g~oW1WJ$VDZOp3|9v;EdrR9PlPE z*F_Vdtg;Y!?5!Z%YFh*LHSx;j;u;~+e1JDG9M#t7 zZNDAnQ+b^bAj06f29V4|N&_aofZ*+x^Qw1nIj}{?>`i*2yqy%-o6p!i{6gl=-*Mj* zv0t(t(pwS%^tLD1p20ijyzpIox`1p~pKowD?);$bP_}C%0NFY?_hYw$Mv+X3XU=(I zXrJ}a-62(&TcRvg=j~HHG1`GK40x*?i@D62uU4z9m|FR?EM$r5)EKrCn>3+7D#z%-chn+QaMs4#BVbrmyg>RS7n_k3H5*?0$s=Ghp zDdaZy{-9ce!HLf6So0quQn`$a+$N^`-u|nvYqy9s@dG&JxvkU7^>jD}Kd{v0)jdQq zpOzQy{6MfhV+hHO4ZNsv&I!2#vj>+*(1FS8U6BcSqOG|F}DI_l1Ei zzA8&g==5y*z3JQS-q-7%^Njani#aQEQNh3>8R0}{)E4u7|BmDeB8lgCR-0|-x$`{^ z&s^qaDOee5#~6Cv5BI7q({+4)c_ghChSewtRx4CP=zBi=@gMW)|NWEZP@YhsPln z6*bv{Yh97vSTL2fS8LsvVu~zjd3~nVFCDtK|82H}Z;#IgP?UO&qAUI0P}{*9e9-=I zv0pn|oKQf5gJsj^uGhTwH0v4;Nsz}+u@-Oxf&FV|IF*ecaC zrA(=n_kZG-xqJV>{dmVX9I#fYvrp3t8KpxRW9Y0ytO`G^-(&Z0v#Ri}z5muRxHX}0 zobtlweA=GNY9nZj+0=QxQF{0*?^<(Fku^J7*n>M@jbpBpdg2;Kk)i@fU#J+0KyN({ z{y{^){G_5h?I0GU*`iIYn$UtuW9W^iw;fB3y8uvr&NQlT6t0?;;VX9n=yz0Kk5{oc zqkgx~d8cY@loI~Fd%&ZrxM~$PU-~z1f-x{W_yZ5&aA6$O%wRo7uU3lZJd;W$SkEC0 zSYybd`Up=uFZ2h0;NV8QvyGjgK%06YCrze-(GDEDk%RRV;8Y@?rcce!`5FZ1v5ZYE ze@$M2W)aq@;9ibcqZ$Voqm`3(AD3~ns~VXIT=@`Fu&5Z>wb(-uokmFc3@SIY0d&lAPDUeUHVoiqtCZbvxf4{DH0s zFnVL~R@cm&md$4CDv?`3AbVkx7-;k4y6^MB-|?g29f!U{O6564J}#$=V)e~EU#=xH z<#@5$LPZ4Mhj&!jxXNdwP354Ax)wQtu9* z9!r7k`C4O{%Wmzq@%yTO&*(f$$vma=)f#-Av|m2kZwXvgy^o-@^f?z|owvDlyGHc= zU%%h$jZN2UzuJ}>i#H15zP`rSjuo#!y!Je=_f;LIRo#8Cx~41jO|h=^URImF)qU?W zFaH1r0dD|?e?T(sv3j1qnyYYUhfM@?W#_2ofwn)z8uiR-plsRgO|RyQ)pMt_1Kt_t zwD6M8WGX!tZ@W#D?e^E#y-ymWYZVXNk9BW7AHqBC+CDgy%y+AZ-&WCACSd-#`Nj1d zS@!^Mt*)2+a`W;_&*(ay<;E{(`}r%)49kN*s0&M-m9f?|bW~9DON=3Nb^gDUrxrU{ zMmx4KE1b*R?)B0(dUgJ{vAI6q8DSm zmxYuPahaLti{?}pI%NiUkM{xZ)txJ)#F7$ATvUs|2ZnwigbtC)5@*iSL@D(umRV!m z-~+}e=vteOL>GGf{iam~hR%Dev*etZ=7m)9HZ80%gs$HTWnieeQYh4X**mPY+>Hm0 z4@br@ZZUYRg;)|fCrWN{eHE58X{+{goGSu9=w9WpmtDjfxJvEryhYnBo=0X{=Vv$9~}M z-I4dd{$p}Vx}j%P+ZU_7mN{pwLe$E`ul++NKsE(b4h6Dst4(v8@K-NvOf^b+Qy~_a9+O$Y-Xp%TqO+~=p(4g z|EqwaRWxLm{J7WEqEr@2vp56rBAn#h00h}3==Q48{Im%_t;F>|pkHpKAg@aJ=8Yt% z9s2WCVw|8%Z){vfdx?$b<9ulw=#1wf-1BwN))v)ONNUrD{UPV<@0l`%q&pgW6c-OUMW{S(jqe^8oK_#-~xAUx$eF%XRL8L{|yA&wF(UsQyJ}mh$fx~H*oYlqYDhqQz$%TrSsk~;?z5n zxmI#b%E|pU73GcLV291R@3l6A0yH1GcWtk6%%$*gdC@&hs)7#nvbN4La~3^2 zdOuvPTV?#j-F|a@rYu!ksjOFK%l=sidXH8NM}OexlzBK8)#1pwVzCrkNHsB+s7Z3W z*?T{7^amWMux^cM1g-fLY2v^Cu zY%HqGPGC;<$(G%{`~pZlrPFSx%;o$qaM?)xjf945=YOSc8WUcGvrLx)!cMSq`%SZt zIqJ6ezs0Dzm=mN;pisnLgG`%-)hb}AHga0r%ACuzF@8)7bgfbLjW>?R>4l|eAt)Hj zU3bU(!H{xRO{E;wE>DE9>lwZon1=^`_pkluI`?b?@0@S1&l}s%{P2PK<#$;YWgR$g z6-aGhMXs3~GpFf{G%L$XtjZR{Sfh5=A@p>iW9SboaUsTqd0B1>T}`-h-szT@1>;;R zjv2gno2Gyu>$$ zU;Ov}AOCi(^%L+3_`D|jEhk&^v+t|g-!lOINEra8fh8*o-~ikK55QNz2jG2U1-$$F z|Nj5hKlo?=k^j!0?Shl8?`jCX-aovTQi?&aIAe0o=JC^K{~!PMe|C78PUd+zZ@FG_ zT5BJ=o{X5%0zBJ#6IdwiAgc{1XhITFFI259!CDvU&N9*%h9>m1?3Kh{0X#bj>z2Q- zbHiPJXBQdt?f;A9tDpDQaqkY~TKH5>uRrq(maMA&e{Gw!PoiC$H-qU~C1QG|j4x?Z1CD*0)uAUO$JMYkKeR=v+?~c|CUf_qO1TvT{1- zu8O-;Uig%r{}9Nz-5f@?&)LuOpI2G^gY1jtjb7yTT#n%mW7IGGIX+&V&&HndmutFV z*Yw6;e}6ZRwVFS@o#5}^=dGHGv)jDf#>aSq4O?&VOFA_WpkCceDhto?bX7U_SdL-j z;70_Q^2AG;wuFBD-LcVX*ZCdu!jzZSN!ZP^?~P{+qgrFGD&=xry}tJ&-}Lt!yt0p; zQ{>Zf;&VRHW3lbtZUKS)`Y1aK$I}A>-ecMv zm~!UZ`OHt3k5^;Sxj-!G&AqO3{nZ+brLZ&>O>dQf6^k)}1`JKY~Y zr9tBGCjaCNM@eBP|9DN4}k1_I`b$_@IBk#HcgH?;gRZD5GhPetK zmuEib^Oeg-hu>^5uLN0dp39zHd3o)ogvZdFoUYFQ-Tjz7^U3(vtd6~KqIK776XTk= zUfq5^7|+q``TzN?^WVA~w%zU@QZ^w!*@--Q%%+9Vn+`;H&S$a|q_rfj?m^l{rs8q$ zyL-l<_I*#&3*XJpNVByTsT^#FHy-BAMbN4Y?L# zqwrf}Fy7<)Ko$7*Klz)~lv@HWIII@O3XNG?sirY+Y-4C{g3y;ZweLF>l%`N}C8gAy zt*&EY48$c~1hUO#YJ||!t)QQ%qe4O3YK+mMT^;JB;({u2tJ}av((-Gr8(AuUVuD(nOo7qTRAdqz^&<-XHz? z`Te{1xfBtRBGv~&Ye_g958`|<)A?loZ~ykc{U7|tf90?Il~(D0Y{~zpR{ehhPKv@` z00H?vx&592@OOX#u=f5hjc)S7svOq-{3rj(|LZUR+OPew_kZrs{bPT(cvIfpJ=DAV zBNnk0q~^-$d=~G0xqEy^I35_5Nj^P48=+!N)eY5K4&B&#!9~3>gU1*TP7z+`ToaU2 zbq1P8_7Y+)EYoewzUx4v>~9M&4O?P+I4r+OT# zIwy11%6*ke^@i?lcuh~l(TTsHzO7;;CIRg;tig!aO~8i@<@C#fX`8;}(mvbLc@ZK=a(tHVSaw$c{)*J(gaXMfk;u|k>TqH4nO)zk?_`wwCXPC6Sdrhfg-|^ zBf$sy&f~*9B^Lz8oHI#;U>x4MU9bHOO{yKxi;0^~02oF)@YV26tkXt_>|uWHnl$9Ur42i}EyvQ$!CIOl~- z!C8yLw(rgA4Q$LtqA60TlD3}Cxm;{J2j8>Uo}nq1=2CfFKC5%W4!n4h)0@?tO_T}9 zQaFZ=(cjUxp72weln%b{RW+CD`lS*oH@@xV5@2kvb+4;R?Ps0w9NYkg3tI#Dl%9Ez zLa^$(aA)oq+Wv7)D)t5NVR*-V(_|2!caClailid3zUsGKudg$zRUslRSt@!xe%R5+ zzc7DVrL4o^jo&Km)*39HN~Q`IAuDrPuMckEJ{))#I-D^~CgbgUPDv} zy@$#y@%sA|W(sp!u9d8RUflFn>zF8&KA4Wqx#rWXRMIR3i{Z|X1k>@Ho{5qhyI^T7 zo$Eg6gwCZYPnVx>vr}~_5J4KH|D0x?)A`l<_2{)kYTNYn^qy^EUeeokUz;$OC5bTQ z$hl-bEuXh_T$>*|A_Or+%Jx}<>j+JAWy!imz43hL?s(UY+y`xcJEg=@^voH%1HpNI zfBJ4W_LW#72jA1-FXC~=;>@MuzmB&xmP75;(WWevDpV@5EX{4PZes$DOu>uxG0!=X z5lYh?dgl-HwkJzv$rIjmcxzaUFjz+bLel_3gqM_pKSPWC1i6u8N+sfxSG3UI^x7&H4z4tqI z!TxO6=7izi4x~~z6V+A1Ti)4w?Uk;Ub52ag&>0o>^HyUurJPGkpadENbGZ>4J-Cq% z!#&hyBek_x=VlDwA*D zmTBn3^7ZhZ!RYz#s-FLy3EVYH$FiRPS3rg`6oU;6zT@aeMjP22ra>ADEMB1k`2)*qeYgFwHZ0Z&O>K|KS61 znK^xYQ7y^UwP_V!Y#!eI{m55;`d9h*pZ+Z{YVu{BCvW^$NSzaT)-mn|6~8;Kl#hQ_=6t==euI9krbmz zIhzz0qZqiM*<}lu4?*?9`Go@sT*NxNp09F*stsvgh_pR#gJyHabtolox_HEZ3 zF;y$Xu0W-4;u(g{wxn7NxkO@4#8OpU#5+|-b{=CLwL-~CDRg474wiE5>1vv=U&-yz zFc#B!e0L+7A~%EdM*D;8sO?6*_b3)>QLknSl#p0=X2rAH9QjM;@P^ zNT)NBTWz3T`p|2wgu8+JU-{wdr)({E!^mMcFouCx3opwHPf_sJbL9%4>nKwBc7EP^ zn1l8Fpnu1^ZdjdxIp=#mr+Evyyl5rw>;9g86~U>MR0?yMH+v{}El%|=9NX`CV#!*8 zi;u*b_-^^gUL^Z{xZ|t-9)OPvd@dJ7=X04G$WbpR@J&J!%iiDIaTi7mrim5KWcyk~ zY%o1i1aD1C2;o^y4FsTBF$#n0ndJ?epI2?Jmw6E-A+cgR&)_}1)gX5%xmBsp6yZYa zedD;BOM2D+8B=aR`5VdoT7@!eb;dFJ0dH2d>NXZq2*&eac-N?}m8E3nyzn_aUniaN z^9~;OD)GB_2ZHTXxf#KlfOqO1zK>6wb%eHmjIL)&Gp90>B=1^N^jX&0-m_LLYG-tg z6UnOOV-=yZ{iY!h^MV)KXt?s~`5b)D=sKpBgo5CVqcfcfA7MD9=|8T|-k zlCjKXVK9BO26Gf69OzZYLM}QMsi-a8=Qu0qSfkpA0p6-Yei6C&soydsUMZE!>v^~) zwM~TVt%O=D!1=~hLkOnBVesa{I+@bMsku=(bw}Z_gQB z1F@#7XT3f1#(+qYx7S{c#g_Ek96T-Ixc3JI9gSg0iQkKldcRjfZI`{uZ@ZsRMTjg| z49@l#0gI4I|Y4k4-g^ir}o_;B{YE zt^1VybD3|Ys=%JM^a-}Dg~9a%+g$;GQ;40!MoLQnjWOJZQ3Ys?VX$t~!s)_+=n7Mw`Pup77v~jC zi1+6qT=(69qdzb@&r~v>;wQda%En9?{n%_RACW~g8QzJtM#*2q&8~|B>QEwbd;UWw zj^3+iX>I-QpmgrC0|Er$Aq*VCfd?N5+xb5-wZyXmOHKTAQ5TkbcfcCUDYt!U3%-PC zGJ$sfV;Dn^H;y90xAFG;f6s?**p}6~==uMYpGj>FAN_%^x;sX%b2&>T*P?C#ySA!G zCgztdUVPsj`Kr^nVNQ|f*z;-mOe~2{@iQ_@t1=4@;g0vi9aV%+XL#K8!Y?HvQZM3p z`5Mr_|CJx|d5)yhjA`x+T?m^7jZ~rL%JD}(AibP<{+(~JB6MBAdW-X(Fm#lXnQODO zvres|gU1;|%9gFq^Y+;PLOfiZ>VX9xkXl%pUeYRjACXRH(s`yViCWu1(J1zk1sg06zy3>L40qjt zF_u&!wL;%@9Qu*LD`+yOg{4`glu~$Fl*+n^{x$XfB$>@0KokKU?Z7V_-gEGtRAH9F zb3E}}CPkZRsQ+qTw}}A>(Fie}7_6sv13&2Ab8sF3PDSmFraF_!JjN5L3Z)L1tUa9; z!!dMp-XXQ}k}blAt#^2^jt_E2MbUJms)$j*=K@o4OljsN zPnU#uZx3lLQUGQ|bBYVOC5XNS$k$?1mmN9PM5^gBZql?v)_cZLy}D;yjpMC& zR{MXgLK1B!at4eza!s7`Ns|C+LZ)kv?~OWmu8Fvd;~Y*!mqZogt0<@xY+x{sRFfuf z#*vGzp-(H&(!P=yrjqdLF8?-@h0DC}8ry2FuM_!o+`RD^xy;Ybc)l6la~C=lx+_Y% zUut1#dq%DWDU}&0rRlk}`5$A#bLP&E^seLH55$_WRe|o#dg7`T@P)6$j zU-j=9Twt!5Z_gh$9gi!!*!>*cJ)3v_j&J&Vjy_Nj&N=avpI_-xArK{At-E9^pQ7%O4~GZdbw@sgflp~>N^_eR`ph>6fC5wbNEfwr!m>pvJ~BeROMe)@UQGl-OXnfxtb66e#9EbQf8{Cp2E=$3{Hh~ zPx;JTGE|K*KG(Dp^4yKj?LKdm-S@-s9iw-oB1|>&9A9|eS+kz~m!Ri=Y9haR z0~(-nm-GKz6MuX9Rx9F7iXhd*Pp6OM@{ZAm%{A)YcR2fSIsXw(C9{aSPdzOswMs?w z{P%kPpUZSLC(dzd=fC9~CtlK7nGmLdN^2$Gz)}|;7e_9Ur+8k2O@ag}RkicQ>iY9d ziN3ix3Btp#{}PYC`Cl~aKXq)NiA5TzkP@;ieE1W8jQH_HI!}78q>Pt<30|$P=`c-H zwRHj@#EHbAlJjll|GE7+H2`2u z{=a7cd=CKp9R&dPEP%H_UbABc_`m!g{YQWGpZg#GbH5%!5LL$)G2=ieRlwN8cn})` zNxPnm^_H4je?g-MVhtv!%D!=}2TatL{hXF&OQ#Gk>pgZ8WwDpU+g}#7D#ItWMXrKa zt1JV+6k%`9ccH`IDAJ0(8Wq7}C@+v(1+Am?fqjL^#JDfEL+8;Q@$Xq_R z1m8A9w<-IR8wV=rySB~Vn3Y!85_oF}I6m}8?n8%bfqbcgF_s5^WOTi%0+*R{nh#j za@K(JIiLBQRwemfZ4}o7cZ0$zk;?DS-)`UPjAv|$*p(KzmZ)CLZzLiH!#Di{cRui( z7CtV|Jf-v2Qt)Yd+$F!B(Q8laB+EtMON2Q^=Jee~Q_vb7!W|#FyJo4Vc2RS!OpRKc zw%**K*&S*!dRy)L@@}wNkJYyYkbaI4&4a(=>;9wK%kX33fy z$$nq41Zx?c;}`;^RL(W?d6`=9@90-%j7DSRA}m!clv0gX;}vk1N>&@EU3!~ObZi+|wOF+Udk=j?&r^1fT zYZ~>`GFTO+oEk`2$!bfvf-03OKx<#w^bL&NfSI)?xZU$0{?)aul)Sh z>UzGgPh`~ddmX!bKVZ=3nCxr&L3I~VCHF-Nb4onN)0Vhj)ePISj6}XG@r&YXTdPi+ z6Pb)D!YRE_%Loo~*73fwnft=~d=Uf@d6Us}#o$=?p*MintG?phdRtp}Uea`Reb4a( z=KSUBS%p7M3vcE2+__xi-~z!6O}Ml$=Y{7yU4u~jGjDz0>bG;|vfk{K=wyfEeRs#v zYZ4tLQfh7I|AApW|FiD>w-m`$C4VXz-xz3qWfG$2e{Sc0mds;%=A5PrNQUF9@hk3J zP=<)qcK(}fC_+2`6NV&3Rp&(km&bNbW9XT4+V)1-jb9}3d&{?5OIv6fH|si4;41Q% zo_9`=5nbT(^Us@cF z;f`accC;duToQANOw*YqUIboy*Wr6d|EK;ge*ZuHo0O8bHUML-Y5`=`5DM1v&41(9 z`Tf8A*S5J_Ti2R#R$IBey=XX?*3xRO2{1$G7Wi%1g!tX}{IxJmv4(ErW9@i%_kg$~~Z$jJuj zjLpW>HtNTB_w++ADQ5F{ek7e9Rg46|1_#cnVycn0v6zc?%SQPTr5rlfC|0Pq=0!gKsgS}mN?r1mm(#JA7T#O%61ODj30Ri86|`~0)E$PJ?( zkZ?yYj;W}!E>)W1`E=>S-W^q$!ju+9-}Bx)fEBgr%8@G4dK1x|-YP3#b(^?S^p?_y zsMo=m7;RaRTJgp*x)D#0ca5If)XGQSa~}?bRwXpT7AUOudv)p6@wB{9Yrz^rZ`3xb zw~n#DV+jLO(iQ}Rp0=?fZG?S*8z)feUJvP7FIbDtS4B@;5r3?L|!Y& zZ%a@uhBj*A{(I5}t5yvC#iv^YV}!dflBuMuy|Td$2$@_nb4k0Ff}3kF_5u*x z-v3n}wdElk7);*+Rzv3lQiZ2<)?mK9^qeCx>s+2nEF=(UznE@muT&i-MSq$@H|myt>zWKN9Rfa29Vpg5!lV=ePr8{D`RvOeC^8ux!b+ z#kOm&SM3_wyOdV&W;fQ+2={IzSPg)35n?`HRngy^W3UtKRPngccchwm&bd{L_RrRC zs^6gYXYay8qnl=))0rtN$ae2X#wL>aw7l?~Cp-#{4vn!f=Y>SwzAsX*lA&Nc_u-!V z<~AU$w|;6&AeVb4(SGf9oN^VANUG`Ty*!p$Gs#x9g~RJSu9c@eGnHwhlHa=nL+A-M z5Ue3KPw-&Rgr-BF8Cjhox+?VV?E0|(#p zO@G`zPpXh4an2K^7Jl;ld;C83$`QgF2U0h%a(jN#z?^as8|`=P0Gs{m&An7A=Q#7k zmt6}2_VRghDJJYK71!rr;KE!pJAUL9v*-p2RXoJOGNOu4G zZx&D2dG6JmycH{g@mR|Srq3nm985pEtb3Yx+jgepn=pAjZ}q&}uHCo`KxK3cd*^wH zXI|pD0nQhln&;p7sm6Ni)me+pg*+#Woe2+jJpB4E z^7LDO8{=AW$SNb%dSwD!te|zWT4y$w0o8l4+i3d`5M#7_U7C0vJMqU$W{Vg* zlKoQy0$z5>|IEb!V6FbwHD~)ibNwCw_&f1cZx{h9&gQsw3K);~_i}d_y|q@1h%q9H zB8Z3x=Hc$(4)5`yNIp&Em?76~^OAZ20lxat5BbGk z`(rG5;q=lfA8Q=!R#dbFVOB7xV4*mpqKwwI7KBFqH?7gR2;yp^btx<0DK83=)Roo` z#u=u(FqMjxM4|GW7qS$34meT&-(W4HzoXlU=`A%g&o7#mx8Bm;4|D{Uob~WWZ4j?S z*F=cMQPWH?126T==XAbF_;=cU?RN*;X@K8?K;uwB9p`Wap5s~7v)6M%^dE6Ol&_NL zRRKA)>(sfqNanwM{wep}d&UqLt>->CQpr5!$f;GIW16X=bFLyRY1QklP|QYkyI36n zrM7ke0sBm6Jzov)8C{^mGULf5ajxepzDs93;3-zC&0ofn-J6NJYa&2JG`Z+Z;NSye zP_^g;yeuz#E@{(1D0>W1cH?EjRl#gd%f*gQu9Jdf43Eos`@OG*k%Kw#997wSE`?f7 zbbio4$oH*5$kDrjhrT65r4XyOsuamM<1g(BWu~+aBTT1&fL))rqr+(O=>okA`tDYR zIu0(dgd^vo74T2f3sDjd)9&9~%}HfHl-Hokl`_6lF}7W$FN^RJm*$#jTg9VQ<&5Ed z_YSOKNpo}PxCM|_A8o@@7M|lw=LQa8pp;fYX#ww3n(1x8wsm`@>TNu|@uVg!7--`~ zbKfvJUZ!at=)US(McR@}VJWEzSM8O+*ZU6KcOy$lyyR&&PYu>Ma#hxZNZY&i^R>P9 zT{v*xAGzuRwVu0hWN0oE&UprFc}kI|G+!m8vBX_qZ!}@qRjdxSr*jTxJ4%gwT4GC5 zMFH3bC_Qq%zQ67H-zJlegpksFH7z<*SejNyl(daaX9FUYm?F`t(8!OVXj@9+f|#x=Ke5|kxg^tnxL3ocOGBOsiPnHdbq~|Pbu;o zABiG#To@4j`pL#9kRj=^XW5(gY;V}0iFw!*)LSGQQKDQ|!Z z{wj%G*BVsb_qzX2C2ezg()Xr%^T4i6VMW~ANSg+!XQjsE@8mKO&;>B=(xND$$ zAeurcrL`XFO$^_Bpq>_%$1`G@oSrnBx>U(a!kuT1zw|@q?;a^j)WVTh`ns`3g@L`p zSn%UO7&=1e=v=^BODXC=P-tGw(#J6`dt!k_u_94Bwq4-;6S{*`< zb=p3eQr>d;-~*#|IH!6C#4ZfT4%l2a26T?>Q88IHaq z_#TJBiosbG!jx>NX(6VJE14V<8N=ajw4v*DaMNbviw?*V{65*9$KT(4WDxd~5}mi#a4pFi_w{>%>#heO{Mt{7u6Hn$?P7-y~f z=EpxWT{_uG60t(@f}jeW)_JNmh;_K&n@YY`q>Ob))x)6Hd`&$@sG!tlfwDvQlm&MQ z1lG+GXBfREeX6Q2O+e*xKv$7%pDDTGH$ExN`c13t ztE9j=E!3u-yPiTKg)%4H%bDf7CxY*wR8m?<)gm5>HGKUie-&90b&g1?Sm!XMk}4Mq z8Sio5yyG-4)P296-6fFL(R+`vR{P?tf&rcFI1UFDhiR=9Q%#)8@|ptO4#BmOAkrvc zR$C<^!tb7ccEzFq!{>OSH|F9?-Mp@CqXgF~yTelxE^?xC&C^`U&#AB!vW1_m)=cYb zWnZN+S5@m;g>yZ#w8Q*UJmJM~4C;s6S;vy&ZMnPMGaIYIHwAESJh3MIoqb>2X|II)D4c_ zTBed&%6$DfI{^1`eb?(myM`)DoK*MYOMBFtd6isq>xzL}`h43D7P-tP1sD=baV#bB zoTjTeQCpR4oww_@mv_!9`+Hj?v!u#%I@4ivn>R3e-79+Q)B>(7oO8M)Vp7P)@scKD z(f;vUVZ$u(3-olkR8i%%RcmJgz4xlKAPY;~-T&_O_u=lccgXd8T3hmCdk|h!g?|;< zJo z=fB%+*Vop79>cMn|4WVS{J)%#iwMi|k#FQ3p&Q6G^As1pi=Ubkk+jy27uX3VZfn9- zohP+&=X<0IFY$cIjJK8))vXZ=MKYyCWgl<>?#I68t3UO3^V9$Aw}|sZY-hGXlh_&| zTZ;`nzwoDjo$r40xA5L$y~lM>loTJh^P?Ng8H5MwbxyCee^2@ zP?~3atJ(+a=#9r4r+uNu(pitiQ6yo?jBf|BL4C-Bb*&c`;wrdPGf39NDHpPvsWE}I z%=1F68A+K^6)gDh;~z2J9XNk}B1IL<8bXKZ9Lqd0#RVyq`#<(W70jES3C3vU(O4CQ z0S;YH7kZ3U@gGXYn!w#~U+?;-DKZ(pyATL3fVnI$KjXz)CSftVLQHzn_H zmq(tLXN+-36Is(lX%_(h0ekyC*nb_&!?Lz6ltgR?REG)}IcF)g^4<9(k(;EZUi^|f z0$&YBy!A?*&kNN!1_=z#Zo)!JZ7+O|Ck1YHUeMe7T~)K$D%la$yNEUGZercdrmdoU zo%fVlc`5Uyl4cy8Q{9GBe7Pi&=H|1dkgemK62h4|J8IE@CzfTq27qiGNTMTIJ$xR?f}LzrSsL#I|8E*SmOwy&p=ho)8*RtW4A9L*4IAP z`?+xE2i^}Oa7QfaEbtf?a!E{i!2x48a_sIXRTac@RgIA))86Ic02t0GZnl?mDJrUTLp!;1J)Q4W%rIxBl$g>Z zkYBy_GD9@b&5{Xjq;Eo9#lvH3pLu@cS<&jq9op9^a`}voz`OB?H%=4Uyy*3oLbqPa zE>S(#8FG2eokLnee@$^cx`AUiGR29 zo?|y|x+_^twVCpw&#*SYqV-@$>$bTV(^*9+U5`lOB~8~J^62lWKYV_Bp6=(hac|$~ zE&;CX8g-qe*YCC4PdXDgwtj4j*`7JIT$CcL;|Jr1%@T7eiI3+;rm}3G<@aOrbH1$6 z7KqV0y5I@caNntd{Ha-ys%2?VhMNrx&NBvWdwU;7e)95>7dbWX$87kmZ}+bEaK0M1 zcg|sK;G7bXL~jD`d)=R(<4J!fYj_rI;kzX%D*;1ZmD<`K6`G}ODhpk+oIQkr!RfWG zd;3hqSI=OAI=omdR$O!f6ePB`*B)`BRoPfF3#l;_+rDpYYdb6#ky-0FI%PO6MXeQe zNG^LaWEOil|IJ?baAPOZ#E)-V8e06iI;o(#OY8YBtml8dT0g0YWA^p}n(G|Vg2l3( z|7_>~I)A1-vE+mo!|2q$amn-L{Ev@3#U~7ox&md!LTv?wKj8c~7*1(!1th>XB)qK) zW9sIl5>q6lrXOQG)~G;st-|y2jQrrh^fx{sEq2@FR*DwOLWRS-Bjv}x$n)R+nYv2R zX^idzID;Poe(WiIORSx1kuP)%uUNTjRb2th+UywDDE-E%)T;HjH?E0y^^@0~RkW3Bk$>AOyxb!N8K{P+LqfBGN(cmBd( z_=|7lSGzyoC;s090RR8>bvz!!Kl~ei_P-f?2vRFGILJx_uwu2EUW)0vp57k7YEQK@ zm1OVx1w^z@$>9)$h)^VvDMSm^T&A0tOXB141U!SYP$qJ=s`4#a zW3QMgB`ejdX#0YQ=qCGvcPyugx>OZ9GfjcCX5GB2aQKA}gu7w0gG+4#^r+ZiL5MMu zD;TSZ=Q#8nha(T;5#RI`Qq`XLr6jC%ydUncM*YKI@~jn|<~C5V1T4WStx2R(n!OoD zHnA`ELWOOUe&>3;=^C>_HVW`umg`z)OO6NI(>u#4MY1W4DqZ;y?il?@u9;8qiNvKk zuL6G~$5u6;OTs5!SqzG3PvaOyWj>U|^G*eMv;%`5=v`wkRJE!SftU-A`Ly$Z*1zVQ zIQoIn^_*f;_Z49=8g`C$;OO?^ke0!B+W$)>7C|Ioj3?K~bDpl|W3WAgv!qhBSGNUL zQ=NH!%Q_545>KkjRlxHh95vLc1)(T#WgSZ{EF_-OtiQ7tjcY$CXsX0_kBvM@n73TFmZ(44&p46zct#!9r6;Uj3 zeg9X&T6$gU^_>fRTAsJD+brYu*Sw2Zp6lt&aR;c@Q>$Q5>!x5k#$ZUvQTFZvMaSSi zj2EzHy~dUOaAUFgdD5!UU{xjmyZLcTw%2F&Ih`16PvlCG8*HPN>PC{-9k z$4~;<`t4bNnjSYH!cDl%X&^URhY1I2l}%rz)XdLbzP%DJT<5LMAhqD?y(T3~PQ0Xe znQy!2I@+P>W~h?)hDTQYv?V1bv#9caimI!!KI<>ov@HNvOexLT=QtyjF8~K`BIcKC zwflK>+c#DiyN-v@^ALJIl)SZ@lxF*PPO$}|0q+b`npo0}AZ5vKI$Y3f@>2U*vf9Fy zO6Cv_^v-Dj-V#pVN=$F+EVQ}!Tu*R2uZ>)Rj=N24m%P34o>xJcQ)|GWYV_+@6gV#@ zUea_mZ`fJwuBH8@&iw9ae*K!gSdR#wrf2T%-qSfx&P5Zly~BhtZ$Hah$f(YmAa@6< z6c#McaVCncpXYQY)n&6yG)7$vj-9p)0UZ6nT;^**PuG!)Y}*Hx z9Ot|fr^BV@?7-*`bk4M? zCCXFWJWV^bZx%1_KV&JoTyl1%#~Wzi93~O5cxX4m7t>ICe@+rI&}t&UUPIIPh)WCf&F zx23W&PaFHtn_)}%HxQxe6UfFiy|i#igB`*R!N9iI9<#a@IMt`JsxV>kSXY2REgEAw zr}>5x*V;YRHO4v1oj=f5)7;3sbxHz~6s79>dGa%lAp; z_W;0u{a@yy&aoH$TmSg>$Ng{qxBt8U$@};3?uwLJYn4)jQi_pMrE1T;sioksq#~rM z;kB4b%oTz(L96BkY-$q{(L`X8!cr?Dx%J$u5Q=Zec&T->>{4TZMqzDg*Rn!qCh=XK zTko?92?OWbAgxXQ{-Nq#9AnE>&V~J)}1XZY_yYGdX6` zc_zI~#K&i*$CLKi?`(36G2H*LA0a6b&u4N>+QuisIc202axM5FaQ6#eU5gYs*)~Pz z3`>go;~JHULJj_K4 zfHn@Mfd%XMjYboZO5rJ;6vVI|Zw%gQl|6`KX!OZg3v-R+lIYCHSK|Y@R8HwkC2Mk6 zGR`)Nau)S*x0cZj+_|2<%@+}2@Euc9@vmT2c&~SX(0t%eX`=4L!v@=P^aI{%MbN@# zr8kwx)AD$&mc0g*b>VNHmt7ol-MXcU#RI(ydat5ZZxta`L+{pVx%$oaMpOKu1@ToX zQ(UeRvb?J1-_im=dt*!95;tR^w}Dji#pPRsIh}XG=|1Ub|96neyw#0^?HP?{Dzlb> zO1+{#wr1L^;5yiz!3SbVEG(BqNrbT*IQUNc&Ku%irBEf4TE#T++CN=swUAw#gZrGL zi(=aq}~IgPth2eaw3dE2$uz_4LjXMD6D=UMmkZvy+fUM8yn`{-A;P z^3|DjpIHHYJ=q$e*gSY_cSWcG1I%Aqdx$Z zPs`&KJi5-a=h$ff;f~%p?!w5N6EEqh0THrw^ME0hncj}vhY{}reWP8TQsg;4UBHX> z)!UBu{T-tVR6#|}%FNP4|IC*2Ri-?(Hfy1`hQZx2=R~s0>*vj0`MhpHYL?7XeCD+< z#?QBR4LEw=k!odWZBrh{;5$kca!Di#AE!s2a z?2>lFhyDZJ8J?CCOPMcXCqAOPs3Jr zN#^4+^KrQVr?LZU*KwM6`}iyRbGx?Zcvd!{2{%H3U>VGgD3^i9`yqO!%^M9Q^h951!F?o0ViR zJrCU-y$f^(Vy&F=jI<-o>MYeX^&zdOyZ&;M1&g?9d1 zuK-wUB`VU+e=mqQ?Jbvq!4@)=-l{}%DVZrQ#HvLjhgD{+shftC>|)%kA|0z~Hpar? z$G^aL=ii|$aTDInF*2uwOOa3#;eO=!%Rl1tZ~d2)QgH@yQHB2W?Pm^IRk`ya;D;X9 zIjnVH9nP3de48dAy%uJy^@x-!z{VQW&i#tBt~quUa$^A0#tyyGWnk+)-IlI`oEJL4 z*2TX$7hK|T?GP~(;~ED?uhfz#D8RL`1ll=Min2FrRVIN*(H7-mv5noF5v+K`X(i7< z%~A+hS(!p57gK9B$GhXC4VdO7zXgp#9T4nV7*}s1KxP;!xK%IH4yTu1l&}Zms&_AHCj&H3F0dYz|>2h zeQj)j&Ihc~9{ybNm5AWhe}vIKrP65N&M1>W7j4_DTGETCkce>vXURsby<$$JoHxW) zq*99@rBYL-EQxrUC^13K&GkzCv7PO)0mA)(`ww3+KR%I?AX$}6*Nt78c+K(0KU7D7 z)%xTL;8x}T)dFhkpa7OM@w2Ce-0WbCH7y}_Drg8i#}nSbSHpWALPs!$$NIwa&hjR& z-nC-rtkS2Jsud)uvQf9X_QB^gUng<3C1|C&3%G$`dY~{>t$Zg*Jf_S!S?QX=$VU(-+hWtjk0IC^8?0oq}B@x>Ki@S4xC|5 z%hiK^%NIRht`grBWLs?vr#LrJvt6HF^9a_sO)dxLS~Xb}r!im@PVm-nZ%1OuN*BGk z2G?2%3W68I*ZmzI`U6#j$2jp4&&*{(TJ`T~dAV*+xC$z7Me^1|yGfEw`HsD;_v-|rUMiy5f-^kFNh`o^b!Z3}0Vig&j=~t`yijty03af7 zIz~Lli7Cz;y8&x@raWo;$^KdGo=Ywj7aW7JOgZv-Ic-8!9>YWbj{D{-t<@{LCAH3| z$8{{%6*r$NI8SGsMod*X8@(~~ZeZREmB|he+KbJ}+X;VY6xo$7e(3akdX6(m62Sz9 z;PIwcPMQq_<1h`}aH#*Z6Hh9UbDl}1fEbE1EP3XX<~H{(&ovqdCh*O855{szC#?kT zE2-V6R%f|VN^OFO?NcwlxLbl4WuX>>00=?%zU{!-J36a&m7kV*YZ_8E@3HVz<;Awf`p&PmH?nz~4-e2#l^{xq7Zq?S_IR#225#z*c zW}NknwWrVN*xk`P%fSohr1p1G>t?eT?X+FfItFStdfB5!r|uTcsJ2E0mOL}1Os$!- z%vU5Jc1cw+(jL36J7bk5ugWcka%Gzab2{<2-qmNK5hbd2RC2{#4tb+&r8vQ)8q&bcl7TLqy{ug(HO>7Pkef& zo@ad5!)U>KY)~uaRXETZtCasL7^gZ!W7lD^l(ewqNVzJ=tp%eSs@-Z((bkJ;Yeauz zXW`te4KHjZqqwj3*Q>HXiM`E||Hz6S#Ska_L*NFUue<2*Z%o+OL|T@q-TD2>CCOG1kv*HstOL{Wb5 zCx2B7Ip;`OW>QQnNd>V?)9HHn;a9x>m0zZ76s(vM=lP_FFK`S4-O!U$WKP;XG4un* zTFxalt%YU}=q<)M?!$<6uF(Z6!Sx)%fe7t;bWwjd ze^|86Vo(v5O@QdSFJn7w_x3<~2=5-BHM|c8EIqMKOnIRoI9B1Q%V*yEaYr*_OSX@G zP?ca{s+lEaL>AqJtBSxSF3t~E_EKvS@>U`7_WJk9+zz<8orG&5qH9$vGN86amtOwM z_&oTL-uI*uIpx%7_MR56zfLGyvNO72qng)^(VzjSw9od&T_~&VGv9{;V;IQI#Xu`X z*Prna4tzbl<1ln8URN^boH#8nYSs92#w-|R1uQka4s?EA|L$%~!tV6%-LL_B`!Nir z_3WdqM^jnb@^%cO{pZy^#oWBUrkkJlHgNDGMY7sw-H4YBeqi)H-UZb$K(#_jO*-c! z?Z&BGIZ=#$@+vgwsNU%LnNi}V2x_6#ndxF=b zBv%-_jt^lV1jF-^`2EwTZLBWhkpmbKaIJ+6AeD$Qo!Wd=y@pbS z;4HoCFjkYXU_HhdVy%3fKI@#WZ_Ht9_`&cVZ!OPpdi5;d`s&-*m6~7A!QJya`cWMc zjJeE{_8fW}uJ#Cz;ot|H4Q<}0tDg;iP!_{(y!U(4{<$WRO`~F4cSUw3e77+ULIZF{ zub%RAuFQG9>^-}C?yV`RS|{M4aszLK6i{iI<(d-h&_MyMdIJ z?F_gYmp88O=tu14fKUjoWAr0o1FQ0@ecfZQ76v!qZBLfSd4K-@{J`@S*t(woM&1C? zul68w0UGV)MaEj*hXcl_pyE_6x)}L}4RqghB$8at|Iw>0-)JxA|C}?@IGv@|%lW^} zk)Lz^xBXBIm$uU#f+y&(~EBBn*-QGysjkwKkfvwZk=`zYQxeZ#x>B z3vg|W&Qpw4kk(tIs3uO8%lhm>fEF9%y2{h)2bG+(m{$cUf{`RO7i@cl6$sW#D98}H z`ak+d{s-TE^Uc?ZD%Ch!yAY)7I_71z%e>gfr>F4UcON|>=D+;ipZvT3hkyNF|6jkn zynI5f0Kc~Z{GI{uUu*K;{dfQIf8v+^#2^3lf9RKgagXlx#{7D^d-{m|PN%&yUnx&5~wJusCON-hfkaFHVa56 zYz1GiMt!1_)aJXcOTr+;hSGWG30Up)DOESjBIKPYSy>Xn1%_d0B7FuY_98lTB@DMF z3=U_tS1RXLg|E`Y+rg;WKXEOXA(wUXLYQkJwZ z+5=w=_jn&jweWd*q{LRCG}jf>(GPgnk!mEBjA5a70a^PUYkl1-iux5F{Q+;3PXCQ4|3cA{I$(1#hDl1=m7OUMCO*dlg`ONgb zf2|u-1#bh+1iVw)Y$Gy0Q9lFI5Omdoh=iNab3kS&+?J`?dn|DtI+Ji^vK%rD%!>xe80OCGCt>jy75- zs`-$2&nIcwoDcmwI^Pj<Ll|(*5%WSUnJh`yXiIqV4us2X&iW>LXRRj7Q=Z7%x{KsgpbrejQoQoPVo6F% zU#(=<#=UC5SrSbP1@Ojm%9H-iIuYBvT&hs4FglO-!$mh-1i!oIgz!{8lf%GqI5HSV z?++Yn-R&E<0t-s^8Qegu`SSVY@*2JW#84XWvF(p-{j9=qZlG`CuqnpNeY*;cv6!0M zS0XcI3!HSm><*rcAT<$!!%3x9p?8*Io1j^v`k&&|oQ(|c`n%@5qe}fogtIKl9M}~* zmNYYjk*|h(oOPs{`FQ^PW-=d8#-_9T^S^;merN#a8}Vj4|L?-({C`Q47A_?2&VSxK z|BYL}*C-9I%q@gcE8Z5SG;RC-5Z3d*Hcf-w`M-Pau_jLOa{jM+*lFL&XBwE(o>|)I zPB@xvs?qpP?8U((poOYTZ7p-6StAyVvPCu4yZGRBM$fh)1*usr0xO!V3m9p8dt*p> z<8dzFLtyB7`k|6bVwo4tv9-+z9750iul_3EPJaueV4ZJu7M+&?OD~RaKVp9TW6nSO zP66qvIug{37>hHO&UrecqNO=yQi{p|X^+TQ!(5cfYOU2CdJL7qJkOg2;QA!Y9#Hp= zU|K8^AeGFL6DcVp&pY2*OESxnZxjXBM8RB$gT_)_#wAb632be}4TtY~dJ{J7puDum zPDDYH+VYZ|$*E#myr%bB5iC~yyXlNK%N%XaS-H3dlTty55|?OVOm9CO zlPy%^==y+IkJv&Im<3ZsT?4E!h*8?mCgjy@z6^%J1cFm<;d7pw0L~>Y(oHDn1}v2* zsReJ9B2|-j^g#61vFoeR+@osG(WVpEHZE^8St&VhiT$;LfMD08u&LW`bp6X1)A_LZ zi>7o*8SPHOH0MH|7S#thpD9yrqC1WHU-i$!ulkRxj%I|E?v;u_-Z+K5RbsQ&~8z{?P4rAHsk$9YqSMG<^&*zOA*j z=Qg$K+foyC*Gm$NZLS9gdS^JrMJ*0rjmv8)$XyudOvjuTrW+xpyPzV9T6IuxVrUhI z*fbELETmFZToV=JN~`*xv48jta92ed-N?gm)V3OtS1b)@HG%)`{78}fb66XHRo zQskVc*Vnqc*KZCV7;NBqIq{fIUmWxG85fBcZ}OWqj;(rjb?@9tLvy#YxclNbo9^oW zT`SM8>%kjCaN6BgP{FPJnp&ULyTd!~8UyH5BB%L$HAnBlz%kq*sCLNwh3DX~+Zu`~ zDpq4XgA0^qGr6vz&Us1|qQqD47fh#&E+1MOoPx+vBAw|NyMfNwZEeh1t?_Q}?X71S zOvhKFCVa7~(}jwQz5adOb2Qk#z2E)4-aeysZ@LTP)@F4oktt2Y9CzUAWgczwwEg=S zMusp@s63t@uPd&=L%3t?4h+^Z*GfzaMN|N^79rL|p%Sokp+g%+E@#H{g}I=wRSk+H z_3iQ8txp8Kr@a6sj$?PkdP|Hm&w0LSQ4(HL!?(?24>%DI0f9L?y&VRWYgWj#@f84Z}UO%74Fv4-)Jz$Lr4zF>CVHJ0M15l_t z8|AI^Y~Ef^>zV3D`Y__~o5<%my{NcgbEw*WM^OUBD6$onocTSO5mhCmJ z38AKv5ve$7Hn+7Bmka`ZrW{yQ2184Vnr^$H*ydctAE z9S5qjm(I6cTpPTnv+BaKl)~KB{_FVmx)2n+#~Md2m$-V}_k;8JR-7=Pz-d$IFCt{g zMYf__)62lB?eW2ln<(KLzSLSfkYYHeye)b|vz+rCL!40`)1ZImG24(4*yH;@LA)#z)-Jra?-)W)Fos}k14*>Uab>7|ijSD| zv?cYMkIH%>#!{s4l9uN8+72=iPU%c%dfxQ`7o3U)riH!WS|RZimoFUHmw$9F=m8>? zJ2xme)G9*Ow2CY+xQ;2$E%2(FNBrd=R~w>_%csks-CPr{*aPM!`QJpf+R0>Zdj4;O z*}UnLr79l-_>bT^KorJ1~})_}svU9Vj3|7dq~{fu&^5 z>BO8P#&|lk7dBU=UkeKnN0hiF3~N$RMAZ6d*K`>ObY5wB^BaNv8icM1;{NNLCOYf! zuA^TA2y>~!Wf8Uiq!3KU5JD47Q9(5Q_k}%@DO4$!q^MPE0*)b!bj>LsO4R$XyXMh0 zzpNNO9NuwsJ;CdHkG5mhH3SuXSFJ{)jj8eo)n`_t-^eW6k1l(1j{ao(yqbTUMCxYfEB@; zo-TA-FYo9(43>}6Gf5(8rH8MT zjnVsxH}_?^n%fwoNq)RuU!{~y#~>KX(cclgqX5=YbEyJKpztKXX|qMRc7>;S}2$w;P8mFiO=Y z!Sd=^??3a?@<@oCGJ4y(UiXhGg(+Qox9c2w9Y?I+=$&Wqfs_k#j#v?f&@+UQnv3en zw74ZvNmcjg5Ar~79bpf$NVz2G==o24e8ZaVG6sdpDJ>T;vHj>JO$5{NFsSBImPCp- z=f8aE{5Ko8kF4jv1*sg|u&KIxqihr3z@)(@rgAy|Zv!w>wMu_E|J#}{vac!Z;+(aB z(&C7+CX{lG$n1en5rWb4sN}*Bv{f(F%y}&|ZE;CsLONZ)+t|zXSSKnHCq$ewBW}_g zXH{D&QB{;Wsz9_f=4D>eg-I#9{i*3Qozemw)WMTZ(@r}=?F8dhM&mwgjY7v_R)|%~vU`Tu@_-YID@0 ziNAFX6i`dpeY>r*PK$A-k|k5J-fyyI>msq%Z@<3@eVf9wNqA=nHej7=@uy&orPivt z1?P#F6PuXE+Vy7YpB)NVxWjfF~-z+nrzhS zxRr`=)`B%Q#f49w9_4vDnU{2urC`Jr9!2}K?hbc^VWjT|oL{?a6xGY7Le9ixR$G%= znT+Mxey6s8wcxGCdyf@Jr7+dRa{=!?!Fq(k920e=Ebg>ZHmx=zMC(aS@J*9&JrPn9 z161nu8swSlBFd%PP;WSk+=^E{%z?ElQ=0shOfmJaXm7ZRlK2 zXll!~1@Fi1j)$PM_gE6A63JEX-@A?@mf3jDX;wet8^l?vTs(@K7~oZ4}F|K z*ZzBXrDxE!p7GI-U@cNJr#SPRKJ&czt@^&P9QNRb3EcMwrFWOosuJ_A0-&h$vf0C4 ze-$FjtBTQ0uy1!FMf=`WwS~Cusoed1*(H4YHWsg)cYq~l70C>)BLFdHDjAFC!+7LF zf5)NgRA(dgRGDt7JkS|srv#@xjirgaJui{C+_-hzR9=cymXtTN#^dRnGFn`#1dBvO z;x_*}qs|M?^>ofMIMwfPR&5=h;!G+Fk8z>O;}z|`!(eTPPzly?a1Zo8AX12>QmJ$< zwDtxC$fh_G^U_Z5YqjXH>v-4QG5UbIfhJ-nbi4aps!|Mlr}NAh1t4-(W#lSFMMl?% zb+c;>WGPHpm5Z0Mut<58(D_#J$}PEFU*l0%4&C;IgX@*@Uxmlzg~#Qk*%w}wfM0`S za;wt5E4{39YyW$;+0@yNcf*0fbu6{8&V0;|y7#>jg#1Iqg7xj|?b`EwT9jRN&J$L6t*g;KW1&DP45IU)YH!lTi@oik zm4c~4bt=}ov_yWPvXoD-7~XdyV|S02br0}ltMhuP1?xug)U07^<@55wIi9HP`Z^Oh zgpPyhNM&J(GfSL#UV28?lhMju6?uEC+EkfRX7Kvlm$H!B8Bt0mmc|Oa0YRSk;7@69 zRxXS?bv(CZHYp0UO_`(#! zre`$xj)(q%4}&V#Kb%K?Hb3qdcB`wv6HARvFXI9f*L@qzURMW=*Y;mWw`vK@ui0H9 zJjO?2SybpQ?;GSy+gof?J8F|rN<05mFt`uHc6~)6#u&9N4EnuT@^=1v@18~9m<$Iuf_2oIIi-o`_{dXqn;yn< zo-P1lD>QU??z=l2hFnIbJoA#z$X54h0+P+%={EDLl8CizQIxbeQ!?9o;N()Z--$BP z#FE!@{qRd)^Z3_(M?+$#;?AZj@SNv`S}Sge80*#X)EcreTQ9z}xV^LlxDNv(fljnI zRhKi%yj-8D#q-M$9pe{%2TQ` zFG~@146j%tA=_F?Cox7_QgRh>rIcDk9JN|ZHRNimb*AVeAGz-TukatabA7^RxN(_kYTq&JqnK zHOjtrGg{`;1TNs5(Vl!C@SOv(_~7uya;%;yCeHJW)JkgNC!k8n$Kj}Faw()`L8P#> z>f2muk#d7hf3Sljz;-JC>{Kzi|;s;Jt04WKJ_ntw3biqxLuS=fwz9oEUAu`HpYGzy}`qG(GaXR*NfF*Eci~vN


TgoD;b$O@vC7(eXt!3!J5Q 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 z zvxpeX8{mJioVdj(9% z46bXRU8f$w_03^cxTa|<>SHbpp`$Zuw)T>yJCnjSQ=7fvpQsU5sE$q`OVXIURl6p_ z;5r6BaO?(#Mq?~hfxO!8eJqJ_u9L=#;#5CjpuoJp_+2XeApM6VRb%FGsPB;40K^&FzSg@2VrSB-&HgNdCnSv zmLzhXTOM#fauC6K-_~Ox<-#Q|ye#Ki1AbRz%h&hX377e-TIe;Qp;1_qWIj)yIrxDh zh0a;58K_dZr1?G;>?hXGdfx=it#`FCF03Qfvh@Q8Khk%D>Q0w4a|6eMF?7Di8N17v z)+V*&tQ1ZoOljtMez`M`+!_uklx?5e73%fX)N`E#N&#a@G=S&z=i7rh)+h)g_u0_i z=_I?9MA|jbItr2d_lLCo;sDkW)50abklOcIf%oG(J|2$r)^d&uU(%JBZ}0800!Kg5 zU>(E2v47yu0EBCf%<;k$C-rt{*LnyespQSOVw;*m0ODUnN@IEH~> zyX`s6xll^x8mH}ZZNQ5We!P5o8!$0e_fcbsX}i4 zKCkP(T@a=?<2Ltp^QuYn1mo4&zviZo)|k284;bS}b!IBdy-{ET7hX^4HOet<>q$Lr z-lXy|m4&55obfH9QSR29YplU(12#>=ME~1Kd^;C(|0$WLcHKrl@bPe>)Dx*BF3sO2 z=F-k?JqLX?B!uTU-Qpkb&e8@%8pj%Tni@n?n#244{GXO-OL)n`tMrZgN%1j^9KwjR zfs|+F;`DjFJO8~h2&}=>{rT^{-XkiTAO4eE@6LY^a$R^?*7HBMfdh9nfb3`|1^Bc) z@u{8v=B@qP==DQ{($4?UhP(5>^L@L&iA%a})BIQpgYVnfeP&wiH-ui#vGtj5 z=~szLG?pNal;e#F+V-H{1-dRU_Db_vr=B>m6p*d)>u=GhyiS{SZhf!lTu_Zf^oVj z+u-TLKy{XwBAJZTiVd3W9!tK(TO~o7(><>bcWa^6)t^(d=-*(Hm71Ai!5Pi3a~c@N5C|Cqp_Y+)qLpAKyXLL zEf%I0g?H))dUs^b+LRWl1l!YlN2YR_CJL2<4-8=hshq+ zh($H1%ufU?kB3J-bO$=?S&UI{2C0P5Gshdnywt>(De>dlv=jy0tCahU^zHY)(O4L^ z_cWEIO+VWj+)0*}vgX9=*JDsm3~$VxKY~hbb`2v!Fky4cF9_!}ar6Vd9olQZ==&}D zdyZuxmvR?#6-AJ|05|9TU@V>MG)l`DsF^7*y1qA4Nc)Q6r0-|+p)s}EWM-x3+SinO zdHb5}nx|k4@5e_hmUFyv$+HT@+C=kB22^_=H+I;q@HEzO@*T-IMBpX9+^*gHOlJ() z1yU*GT(o(AeZP0W@cwJb8E+P9jS9xrjI})Fk@M9;pNM6>esG5+6XLOFxxTVL(fmOk_Z+cC!lZ}PT3mDjbxtIu0y>ocq5pyQhE9tHC9{?0V>%Mb$_HJ9L)BovA zr^6F&=fBxfVG9_;u^Z`~SJ_EjczWyncWlO(>8 zwcJ(nQXlAj$9p_e()}Px;T*56A-w?`iUU+G@rtZ9Vyk?m?VH}27UraNhVKFgV=1-p za=mbwF2q#S#owr8(+I>AG1gHf(SLYg`t=WL*4@&1)_YN{P^;iv$JljvHw>pG(VPAJ^)mqQuK);WE4Vf#zcGj)R;bko zl#--GD~O0Q#ulj!F*l-C0hKvLiWS7FF-&#lHVZZy$>DHRQ%R{1Q_{WWwa?|+5WcS6 z?2VLYYMZJ%rSzAw#=_j|#;kESIY3oJ(HZlmKS<|$ESV)oid3>>9P0dB%-036#oRUj z_tT17;iAlH!H`MK1ch~zsOqR-3=AJ0H}K&#oz`LQk?atLf%ywxdw(2?irU?tqbIqzj zOgqZi`~IQDu)$na7ko)m(_r7$>08dxoBpkGE3So`qh)=yHjGC9E$M~cc8C-Tg&HHr z?!YmOd>98_^1_doPdZU(1*zPzTK2CkJ1M21lDJCJ=506d`_R9`d&7C2w4r{b!JZ0) zq{#~cENR)Il(yeSB{-hAU%eR#W&`I77dYWy6QDp zr;+Zbz;lDI%9vSJ`taTqYe&H})^ZF7oP{MXOlf%|pWAR*u5Ef_^}W-yvDVXvR%lk8 z_U>c6_BwLUtOe5Dh{|xjo8sPncic=KZrRbX6iz|#PPL9p&PY}74r4uo_Z+(u!Koig zq2g`V#toj&<>~I82UPPPY>!CflJ(xM@sv398m3S?iIm##^w`ZB{8Rp!xQWB)tNnp9w)+OQD(+M#*6NA>8pyN;IT}3*-0H% zFP@_3q*?dsN=X&t7v?l=j2_;&mYLW7CpR7bZ4c4)G!t3k%yTWgBu{R#sX4zL`)cgE zPu-09MmLaMfm-N&Pw4dg7oarowyZa2e@54vgyH`D?_Zt&mQo6-M9yiVw}E%#0c!&1 z<%M(e3NU+y-Y&ZHse^GC# zbDCRoe}DFw*Nx)p4^egxVrI*=r+nQ}MkB;{VX!?=DU!LS$^!=;yOD3kBQJ5`cjwO0AW?3m9Wn5@sqEt85VzAX)O#_I`7F1dVB*!QQc_Y)dc5 zB5DFCvH^LG5CLlp1u>--3?c<5mLf&nK8>*m)?y3Nc;q;1?u<)vQKPR? zv`~pDg6|l+o-R0|s5y?&@ib zNeVeNgBw6fy?Ont6u32FE=D4W;QXeyw?>%_-a4GK)T&g)+#(1o(hzK3X`fyXyHxjE zs_KRIAi;|6_U}#@XTPRap|Xa~Ii?hwUdhm$W7M@jMQYW&aAQ|mky8Y^A-_ZLir}x) zf78_dR$Wm|o5U?iqhgktn-C!2jYAN8d(V02Iv()Uns}Zsh~)Ox)yHJ;R#_IdVv6A* zjGX!h9z)mk|BfMc%w^FGU~gK+F?wB%Czslo2ZF~@UBy|$(e%yPS{VfAc)=yJZLD=i z^?%>J=fiNs8JJT-O4WFvPAPdYC-rJTU9;7|YSozTjf{BZNYgaTwozhRDulZJEB!Ck zmUY_}-h91K`*$4s0ZOGy@RFP9kuh|}f;ALtR2$a*{Pt_jt5R6**3;+Z3!B-y>_LN_ zlX5lGI^Rv7f(Z;h;Ebb4(kRFEnJz+h`r0Dzco+r*-?ZbTxq&}T_x)-9%*)d9wQDPl%^MT^a=(k|alHBk+%svGe4|Md2yc<*- zd2=85$!UCJ6in&8QECFe{kGu1gdZ~4x@BPF3oYHTNc);eb>1p2C` zix$feI-Kd~CGvEwBuN~@z@h6g;z+VkO5)_ZhCSNNkhwO4(3lp54w^rOH=gP=Ng|i5 z6Z0%AERB|IcnAYSHxOgwDPCLL7Q}tb<2L9sUrkouW`5iz-K8X+=QA{Y^j_2a!S_4_ zjo>;jGuJe+M0LRyDO_{fd`;GS7Ry3t9s=trmJwd!m6v$sAq>>J``Kg!uh?HVK)g|x z+x{JZF7yiW7@aKk&T;HIK21+es&ntF;M!~NKie@3*fwq412lI4lz9bex7Q4JqNxR|QDRw}G!^o0`?WS8 zxBtd<#4-`9A(wkYzn#|d&DvpQ$#mY4*Lzyn&i`wgxTc9(^PMEb?KVnd)oe1=e4na= zV2#il2Ue-}%Q6v5(nwchzy`drny=o@_uQh?Xz`08ngX&)>Wt9|fA4L(E)`SYA&eaR z2i|pk)BmekpPv6}I+v=}a(ezd(#{{l8;!)YMw334lBrdNZ7<6iA6xC$n3Zc=_#wRG z{cyrt%akILE8g^c=oCDPr8(16cLtW__Dt8;D8IemL)=@pP4)Csop#uIq|}5nmS9Kv zmO}I;UN^rH4IMPwXWpwHu>5o&TssF|=9j&E_jdm8(mygFQQ3buL-+1Pex7td=Nuwc zf$QD*U#)O$d&1ClV4c>SwNl%CD7Eekd{KXpIFn0hvf@?l;aXW^sHGBfV*zc?l3vj3 zGOOgku#4q3_m9agtcy1MGoX8O>l^mlnAVrI#Srf+IoV#{Ig9r}ea5c(zRlO10R&-= zk<%EkTZv|jF-962z}8xda~5M9#tODc1lsp0kE+VgF@HY;0RPIrWdDz`25X(cSaP0M zak!CMj5u#KnWIV|NHu~OW30EvVvP^Mn4i$>t6tcEs8NmBK~4GEBjt=Egn+lU<xl<%dHt&uLdY}0?Kb@PoYx!kzTuOUvey9$k}WsFXfy>(jyzfxAE zzC~qii_ki}wJl$@;GL%nfl`E+bpxZR2oM$7f@jcZj~pm^Hus zniuf5-vuPB4-GKyW0)!>;1s?pM@p5gCi*e#}j@ocH4fEg!umxi+2Y&(zmw4rz z=ey=9ksuYYj=^>u!$>Ys&suO)r$HuI?gOQJKkgnOIUpV!BNx8xv$Hg{7Pse2?w)ItDViq6dz( zbp6QSJ;piJZ<;{0f-!=3JzdZQhm^~0(jzeE6`gn zl@0W8VmQakrUhS0R&%AVxvJZL&Us>5u1IO_#whCUn@MG=N#9F*9}d$J9M;#LHG3Gj z71hq&PiM@Imb*42uMEf>=8h2prcJbU!Zf8>6|Vv%SF&B0bG*C0Yi!}Rx9k`L+V~_O z;fr9BdXV*X_RI}Y`thDE zb%`^JS;$pLofc}BIBmb*VR+~t@XnIUqSrv$=WBqKnlHMo0IxC8`9vv|l9GBe)ZE^N zGLlkF7-Q(Y0(}L+6b09+0L7}wXOo+Kkr!T;^KBi-ehpc0MlV$nB{G+)22bUc+^XG& z`o=n3*OoD^1=8qV-MN6VmL*1>FE97acUzN-nfQ`*lKV8Df6}1swdA50kCg_@npIw> zd+RF{FZZygR=c|D==QA5@o_x z!HI3dkW9prZKPz4Xf2JiWmbc`*68=n6I`GesHQMFce9e=3q1ivNr!9 zXDZGGdg~gc+P1ahIeCw19Z#*om*u)q@%Ix~fQK;PUD#G)iZh=}QnTp>5o$t>CLoQ@ zBPDZLE}WO^9k9EsLmT55ttM~e3YT=%zpGV&jNMnTmg*AcWu{V?^TJXxqw_echO?vJ zo&P0~N^9EJy=c$IaIaopjGFyfi(ebpII*nKo(A5nbxEp~&(jlg)AJhw4{jjU($b`4 zGdI=YP{rZMB_Xz8t;btUV~R16%+23uZ^rk_(4l;-9xS@pG8jp*pdUJrn}Hu3?`N$`q- zRuR=+8l~815q_il$bO>U8iMW5t^8yjsC9m8*h{^cm3XU$fgsE!HTu4$9CY5}UDu}O zx58sdamzSesqY~KEeJ|${@Z&@CE==T#xb7p@jdT9zE^gGG5Cg@=d1=YNTYfoUr%B- z@lkWy^-7tFIZ-W*4G`#qX9xq{dCiHfm0Xo2QA#GuRgWX%7`lN&cxZ0y!X=(>+3uy> zD5h^sVQ*IK;NWHFq$?tCPLev?wF#xd)qag@to7^3r)E=XAKnhgy>Zp+o1KBr)6-Xv zKq^4I+-Uc29$?$aLa>&>4-8(Z&X;*=&is{BB2FsPtkk!f3i&)!mPCyODYe-d7-}hZ zhpTTC)et-dowV2E!ua74uvA+RW9d3iKOPx7&8A)NA0h(2^x}Enkbv?c^queIEwxf4ei@WxGcDCaX)KJek&(O@ZE^#K6 z#1GTFJ6zmmdKQdPZES&DQAX@fELOg%32$Bdwbi(RE)Fw8NI_e zi)lUz);Rh#t39P1g%|>kJ_MGONc&0cYAPr2dH%wwr~#VNr1d&wV@PGjx&dbcy~~&- z6PKg~XO*wm3l2x`J*mpJ54_k+yv{BDbJ@|D6%_5Qr|SlK(-EA-+MZ4<&vnv?O%*nb z_BAcq=(BxJS6<>pSzNhLb5;Q0C-#?f$`J820Fm8DL+RP_jK@*9lo{(R)_ROHDxBk|e}3IBYf2;|*j(w8f_xj0>yUuCh z()QZ*9y#L_M5~d+PcvtdHza0ko9b=)^Nq#cCfU{!tYhpC9Qy~3u2X|q>sg9U+xM>F z+nQ|aF#&0J9(15taG;^!eWi4Y^=()Mos) z-bZJZ#nAg6XRS6kC6h{Kt`{h;A=yf*3-K-{(XN;b7(;QEm=Z4dEgeZ4@d$Ex z`}upd2N+}V#xnYGGwhw>)CLqFIWsuRbH3hrH^`369op5cwXhJGb8PGmeFg@cdSsQk zv0Oblt8{YC8E=Kq_l!1BrLv^j0AJC1)EkWjEwRZH_EZ0T~dw0&MoXr@l_w>Fa*G!7)o0XQ>?&P}nRlGQy_jJzVMOk|; z^A*KXqyhU5V~nxZI;pMc$6y+>*yw$BrZFSxPxNL#fBg&q{H1^ZZ0x!w@Diz_kzkl& zgw6#c1~JAO@4fNCJKuRzi!nvAP^nd;wj_i=e>fUy!lXj68CSYy5a>t-MGtoyWX>5g z8|ak@pm8$>Yb=LhBsR@ZMWW$o5&gyf?Jzo+}D%WR*YWb($IN>X*oKF&~qF{f(;7bSW7OIMGBXA zVa}z|%!MQclOu=jNU%z4p3`zO00Nwt8!cMo4kZpIkX*VI1y;UxiYakosT(@5dt_ zh6g(DNm*m%=D4t=M42P`x=>SQ$(i_cB~OtuCv4V4jByyTj~>@`_~3}vQmot^$hB5R zvG^>+7@4m#={L{h-@Z^h#L?i#9zS;2%L_jQe`^vOqXV;>NEUgMuKv2|-y=5iRa_4Q zEQkKYvFph-^ZD|mjbqs%J?;%XFyOJ8$xNk6rR2nzJRwf&t3FPjy zl3d7_ne;MIOL?ty+o|E)Px4yp6$$RpQ%D? zD0Xi!baY|FN`a(ihhH1Zz5V>IpJ(VhthX5FaL(g`$78WeW+_j^$zdBy$%USWuGcgR zRQ~6>j^4YiiNB`h&NwZW$YnCfpiBT`48f=u*8AbW9IZ}DjcUXXejrt=QK(M-Lf~=i zI{MHvEfX(gQfXEy8+cSx!HdN%7I(RlU(PJcqWR+E$Z$ANh5@m%?X{hAd^0@oK6C^z zNUcmMa$X{T_WTJKXUa8^K2Jng=tB65y|Vlg!}&l15|$Kd+i z{<`S1T(lAXYHb^Xu@={R{Lo{LBc{{%xUCtkyJuj3{e|= zHTX_MlPpRpT*|b)@53-+!;RWssT-;F&<%Ku0w7t3PCg8D&SO%=TW72@rmct7KaJYV zPNjKetOkMAVyrbd=dG~@=bX9qVN~8c!GHex836c~JN+*^03h9{GGLrF*4gdRbk-X0 z-5M2Nr3ytvifUtON~yj)pXHjO%w;i4YZi-z(GCpOZG~9~s^3qgP-`L9OuVMuve#*Q zA3B|8V~A;CiSg?Ven-WAUB}ER60*j11Q%}3|GPM+R5CVdGagggrUy%!N!e?Yz0#JA z-Fo;UU~1N;Fefha^+tuVe*rS;Zl*~_)H}g-9(x?fabbzM9jx`035;x?ckB;z-ZLkS zcG-+$v~yADGuURLs2QkF%L|uyRWAY~9J`Uz@IdE0edtLwtC6A+3>qEx>E#Em{lHRm zg3*KnJotg38=2#*+Vx%GIM|-vchur^f@5DdBd?6DTEU=>)cF-bO%%W|O%_rTQZ5W3 z+zRcgPV$}W>8q%r;K~HyM$f!67TUiTcTbITq8a184;;IZhkoRt8(3=M8Z*z+Gt+cI zl2Br#JWpIcKatN1##qMViO1jnp2x>`grOrjVKHExPISFlsbM?iS#1u#rQmbnn`#*f z)M@7V>4_gdf9CSTj~Hj^9!L6*54hm5UHhj^Hq6Q&{|Wc@m7bVg+02vf>;C)i9Yas= z6g9u*nZ)kr?CU1aFu0D#{z&j0DM!wY!dX*hOrH49eoM-#EzBh`myGPR?k7J`U1TYR zOEcko{q^{7e2@Fak;PIP4ci;X-~tCXu;i!>hLvrtU3cFH_9rL3m$+cka%&EE9s#K& zmRNY1UU>QA-?IF8R$B6wS#LJ&;aoCxSA}&p(AhOwON)ylT42PgAZ8ZX_K)%VN8Avw z-jW0)CA_tFjgwAz1J+uKh!%;Wx${Q!v)bkqKj*Z4=G=_DIv41$#FB_5@!QKMM$?gF z;`(yt(?9-GYQ8rkdrRVFv3E4(`(?Lx)fTS14f+&%KK}B1#=rWD&D2WQl`y!0cZYX) zW0~^2B|g~JM3xN8Z+~F=;rT22>G~E28xX53nR(|)VNu#?s`<_7l*MuIVT)y4a(w&q zZQtvgH<5+~&$!n7l?G6mpJX36uEw*NCoN`MLUk6|KD)(XEq9t--6jprTB=dDg0ohe z^57`mGY3oZl{$EwcNp(*UDv<@r_T1KZtv|;4l40Nu!frvTS^*jT4v_U{1waO*!A?G zM~q>Pi$*l=DjfPAdl+!vJn(q<4nGXI zF3@)a)e56)dVZAR{r>Qd58Xg8qKt=>I8SFD(-Fyqk`g6m@)F6{iFmmZKVO-D_l)g4 z;bEZvcp`)zGgu^KW}`8u*AyEFUcRDIZ;eW)62WVpcj+11ZmxC6dk)(?9(kp`BN;C_Bd(!xcxctD{Eq*Dz|*SVfqnG-E>Dk8KF} zp~wEh!-LvY%U)D(Ujv8h`QLHc&i|f83R5Y(#0xPmSfgyL&U%fg+Zun*p*zrrUej3O zmFo)32@2?})KzYE%1gZRvS<>(!S!_hq|${@aLcUwcHzc!tgR6@^)2-CYvA7)oYBcs zHY;n&-Wp|ra2herAysfz&GNj{M1j~qn4h|CwEb=Dd%W{EMr^w_hi;_zJ>FVUO?2L~ zM4O2<4da|Ec06zl&f2lw~Z4BuIr2p_g{15&Qzxvf5{4f6Cul&LP^20aZ z{u|!8qZq2Uo~{ovgkJi?SdB6D{PfI{qQO|>4Cd+O+5MwG`iC~xYO~3juW6v5I&sr9 zP{vqrmdDcr6`gJv!`)#e%>>LlOYa9#%{rN{`z=kd*5IvD-S^OjF?MHYBv|V()=+cV zevh?|t_yhYxB$}sgpVRidFuDHS}GF_kolW^RnzD1(u;3nl@ey(mwo8{&n4e zvGk!Mcug&+B~eRdeE*(WQgcRiklH~k>U~g!TcczwUFbOW1D)^ay1)|C7VVO~+?rlv znn|xf5{fU-3bX5S<(g-D+Y`KJuwISl5cL=^LZXnC>wQCQP0KJ|&9mG#iSVdn^t@;> zcl0A4y7y#>yv&!)IO(pisY0^xtCg9g@H9Vv)yO7R{im7}_Mv4yi)zhfPjhQ}@H^lE zIQV`;?_*vt#?iTew}D(^i`y||f%81^X}WT~KJhYLNK3@T3{z(M-81nTF~^S6?|o1I z?t$(w@c#J7Vd$BS(hQw7EANZ&YQnZ5*R`R|Mw2z(`6FK7{qjBI(-%HHeP;Rm%<}X? ze3|G!9O>R2aWycAqaQrE75S@4);eYGL&xZPZ5WMVO0nfytE29c3)lFfCU{jg;HZf3 zWjbqA)9#?RPBr?e6pHAa|L6w}y%sI8WUgt_d}9Ks7JmGbUz6sE{_({4?gQT)58xb2 z%atBo&)__{3R9jKR$!zQ(lirauB6L^Oo_pC1mA--ElXNkG^tsQK`~1Eef6b{efg?e zROb;7?4_%Klj%!}Hv}WC7_|QLa@{KJd z!dxt{)(=!CB| zqj&UAYi>E~^+p4|$b~#FTz>mmi~08t^zR<(KR>rbPp%}yj|EDx|NKxevZ-g_?8pC z?zp*V`JP`1e006I4Royy7|=e#Xv0x5zJjDmULx^)=JM&8lnbu+bcc@q!;#nrocCC# z3?;0^c*AqNYVLVm&tA*>{s9|2&oSNB<(_C43fGua0wJOe&_24ZtvhRiI^&z$eYc`I z=2Rmw7WG1iLYlA4pD(1R32!Zr@80w74?fU8oQTd+dUKQBSc@~3YRsLs7~m5#bFGXn zFqy=QnUT@ck0-pq(Tz9}rnGRKugp;+dFwgCWu{&x>YrRNj|DzDqKV`bsn!!(BwuMw z(Q3X|cl7qocbvMO&UN%YC__TjH=&Ll!*`F=rQnAiKlDm{mp6>+jG-g&=yWAXt;Cdh zKI=J?t}~y0{E^|q1HSLnkHoS&{|%k-+qoVvlp1-Om&Q66`Ov*1OX56VHzVeI*@BRa zn(~$kQ3owX=?Dj2dyGJ`}YSN=($4FoUQ2c-VYe z4u04s)G03*>*<_EG?$uN?by!$W#;odF}1XUf;5w0^#(EZKE5hRBA19mm~(7iE3X-O zrcKyQW9ZkLM8ycREF8mtaUH<~HIrSku5sI>uRHc+Fb;3kEU`$&8b{d9e+VHkxQ@#+_khMJnpZ@EAhHEu;ZHA3Q-!t|D$p=bK zn!r%j=iTt7B-Obat-V8V)M`m-QF(9ZnERkH*YixSZ}k!7Bw3Upm3-+laO-hcdnG0rUWY_6B9nd3rSmiW8h{`#N%(|`Jhf9H??_>cbH z+K08Ctp42i|9AT`^0SfRzxX0)zKI7qU<3}pBk&&h2KWeku-3l+8-L^9`QQHP4}SGO zHr5(rOznn2f^~Hm50YafrDUo##!59Wm#h1){`r4>xCa0%1=-?4#2RCaL#)AhOX!pi zRC2o4@Ea}U4#S9bj*@Q8x%FzY#E8l7sZ>aat?)*%HS5w@fB!Khyi3cl}8lsB~q?5!6rwixb{z#R~=?^~Q`Vs5++Fc(QTp&2l zw2y&$BISjbq3C8H}HJ&1wsU#x8 zgX=hi4sU|~c~)~%X+YHAJyI+4l87%8%coB)=ZVL^`b*r{V_jv=S#`9#>v9SmV>cjZ zw)*)_7GQAB5v*-)+$|DwE4s^9fSX9AEQvHFE`RhR{lkglFTSCBICAI*PGO*H`{gA~ zyp*_^aeed$3YDik-@V7zUqKwC#M9?5Tz~ix|E{BZ_rT*gVyxfZV=$g$H_~}a%#}-= z6l4@INm(*4fAjNOM`0#t*VuNQ%3v)_f9ET9-LLg|#oACLIH!*u~S1Wfazfmi!TGyaR~^Y+F)dsuVb^TOOf{@yE48@yv^z5y@G z#CbWZc_o4?qUO3OsYzwb*r%ENd7>M8P9NX%;hS%H|L&1)9LUZxo2+|xi|~x4D0SO9 zM(@BFKFyc={kmPVH3dl8bv!u-;#)(JDLFC4g_1KNftw5Q%M+JRU${(X%%LZIIMSU4 zit|)&Fy0c3W9-{!+$A!s&xiMhoCR;ex{lsh=9HPAzp#8>2p^6x_LN}nukZRiwC8tS z(+Rz9d7fCFuUvlfBO;08AAH1*qk=l-zuWo$*dN>ZKM`}nT0Q?`in=CSVophgJTF}T z#;)hGZvaZb zy0AO{4Re`ExwHn_u%v~jSB9T!5{2TY`CphevL=%3>zmL%OOkXmlWl+R@f<@(aE@FG zmt|tgOOttIq)AUiR{Fo-q}ABQ(glsJ*7LupYlSgbuZE7!HThP)MNuy`GtCz+mn+YI z_~#o4rWPy>DEC%@$4^(%=L;!D_4vqHqoQlQ8=_fj=t4)Sa+9rDI2}%e5U8baT{Oba zShM@tTg3LRZ`ry0+ZJajw?wU-YOM1C@6|L_>Q4gzW7lgBB9#;~V%4ZT#r!q^P;?wv zMF9Y3EK)OG9KrhfZ~f}8ULPOdNhwugTttU2J&*4mczk@s7|fS1XERS1`A7fFKl}%O z`)~cN|3|I$Gw>Ps1pEkm0iIV94iI&2Aob_&^=Agazf1|hI{nY6LG08PT@Qp>tNYLX zv%mcx|IhyCf9=b^^Y8wpL*S_QNn{VhIPI@SMrOHZUPONb@#%(pLT|g)Y-W0^4*#R~bkg4Cn8)DT|ic&ml)`Ru@yC=qP9ytE;Bft3Y z9p5~>!x+nRQg%eCnJ5WgU0Z{0%_HSx2jn1Jy=O@?)8{8*$#{v_Vz=*GzuxzcoO-1g z2On7Cyiqjw*C7~B7X}P!28TfBJKm2YODSBJGqJ>N=qScg1T_xp0^>Ii*monY3yogs z8-GvT!L9G`6ecQ@%pmg$Q*ZK|J{$;6K^oup8rf79iY$5J4S|WK%d^G*%YevnBEgasGUP9r1Qk=DnCrm^f9Qk zgo+a(S4&w6%kFs`H+MTNI>-EAt z!Og!aqol<_Dh1g!cGRF|ZRvqLEu_np`RRr9>4o`^J`+A1=)O52O<`q&Ys|m>?^D`q zXu96CJG6tbY6NB-#s-EiFob4$=+xLSIHysyMOi()^N>|T9v7wHmzYTBiTr8e5Jo=! z>K7cp`AGkG2mnt`& zaN*0e+&#y^c;1aC^%xjBq+9TP&*S@#gy5O8N-b7n_$cMBWEQ|zLA=FvCv5OYPF#NX zBPA8OPB``ftl|7teB=K4YVT>zi<++O?(NY84u0SePNX#PJYQAgzbwShFSu+Ne(xKO zzxal5Y@h?s+m3^CbiO0z$TcS-m1=~g(a4<%SZ8@>JC@7DCwnH32I~!@>%ge=$4DmF zBk%hYeHW-wNU7-gFFh_)VofY9h3M4)jVu*IRX>%+9b46%rTI3g)G9 zWpDS3ExBMdHXKF;80VC*ea3n91IwjwohDL>lv|K|Vdf8;_a$HTFX$AdgSpG{mQsil}) z#R!=3-9d(7kZgsVs);p`rKnD@QLHkFX`Wl1Z%7qfA2twAr~7WxhpFSH(uhl=%x5c9 z14~UT5)m&L=kSc!y4S6$7Rm>&&i5<5Fe_E7#InM%nBbchqInTGz#DvUWT&(%cNplb z7VM>{7Hf^ma#bfRw*i>N2FLi_JCV+saEE6ZBwURbXwcY)<%BSDz6j6O|!l>>0(Ky zZix0BJ^9txeWPw}daO*yiQp}#?!X}oJkMw5)uho_oXA(Gx`^l$C?~2wlKS=UG+Ny_ zs}$Z^D`br~4Azi}>aAVVwgSYQxyH!cBBxx7Tl_M=P-CJji99V_e*Kv`XU1&5w9jQ4 z9WA(yW7iQz%VnH-It+9VBh!yZuD|=l0t%w+ED%ezb`SmBv&~g0k8~TS6vx6Vv zM77f5h9FzjOK*+Ij_O&AV8l>*M|V21Je`r8q4--Arl`E;p+9iyMmp!!bj^9BKN551 zX@16LEiAkpVtAYLvMab&L(h+FgDWG#D8UzTy3ckBo;S;ta(YB8BIih&3@w-eMRJwnvOsD`P+4ilYeh z&LKwVO-CPe%3_S6I5-{-yciFDw}$#Y7#ac4?I3T z(jAT%r)#%!t7fP|_YJjK z4+*DWOmHgE{)Yv<=!~69p z7|HWOdYM>$JR=nzzxl}fUwqH-c)}k>vNe2WA*HEJ7IjJ(%fz|fCx2iJwN6ctD|m5a zTeik)TS#&*8!|2GG>git#MEtSiG%1X5)K>>9{=vh^1~DJr!S;wVf_9Bc7W0g)?2c> z`6+zW4p`m)l4Q=)6>pnf*=fVr1;=;CcchXz=fovVT+{OQAm3>muovB*%KOCfd?CHe z^uvK#beg<@^gq@7zm{F?&;Ok9Hqm)aap|q+)0a;?pBKvKh12)nar*u{+{1uvQG;rp zW{F0KWznM5tN+OA+0^$V$K#{QGC%!@%N1uufg~4N%xT>up|;h7OG->pePg!szhu5F z&$otq50>s~oVor_G(uzgbme1P!&vnt}eq*s} z%`$cYZ=9xm#OWqd-`&kZCFX*|;v95Ng@&=QlnPZn33kTWmu3zdyvAOS?;pu2E9T&& z{R%Zy#2V~rWR^rN2{9HMtZskJhsZPrr0ar)LIk4?y)k45Gny_V0q_nhtLW&JA&XIJ zzp)mRAoPK|?tk~a)>?*PP=BnT5!eTLXxvCm@8E2G5Y>hGwu97HSCHS799~j4j z?vc}#%QBHuq6>k}2CNnGlDJ&2#GLSIAT0q$2wpyZ{8%5~eJlopv52=ux^ZOe2YGya zlw5HC=l|3H@gMA(|7YN72L!ADz}^es=jQ)s0N^hT0LYDEVq44W_?qNp{-gis|Nfu; z&Hv5+`d7dI%irsUt}kM(jD2TQE+#HBIf;>+?D(4lVRSl~7zB?x%hwhuB4UA{4Ue(6 zmSTtC1?TC!BBWUgr3jN0YI8`gh88FY#i~2{iWv5Ni``0!&-1|YBw8B193BfTQ9(j0BSNdtbYE$1FL8Yjh`z@E+Fn<403&Y*i>6Z4X$nN;~ zz!>_L0bAPC_|-H2T2Cvt1AA`(xRl6JZ&Q@&J=bMsi3{F!6e>$vR9}eMRPn31pEv51 zzSMXZaU~d1%U<65#jVt~uiuzn%ez9M-ZcErB{Oyjx+AA<;Bk0h@V&A}YG!JO&k7_2 zt2)dz?|791Bw6+9yR2(59Up5z>zclglLIibsu zDYd-mEVsMX)=-i{iUpWCgn>iocpQe!!8>IkN@0ofjiS7prVk-dL|Edi-T*OieZG+9 z#Oe3Hr+YkNJ5M%+Qs+B>UcoTC1LhjlJQxekX%Yr< zU##wRFH-NWv&Z7Cr)yD`*Eo}^P*Nd&x!}i+da@wq;XI~;9?6)UDU^- zMvU>>wv~32{f!A=>@JeaXwnNU8yeOA&UxCrEz@gX17qln;bZ@RwVqnFsfu|fzIy-0 z=<6SR$2HC@qK2i83RNk*>NMW=u`Q8gO+sk7(#>S98}#`J*7ANh@UA}+Ed1H^<=zC( z{e=0fF`WFU+2=;@X{|!F0yS}Gu0_FCOWlkTciMXqI;=7<@LcVJa|0%HbO*!uSeZ@- zKL7f6EPwoo;lK9_OedIP5G!qvsooTC%e5*FeQt|nF3Ze?7Oh%!t$PgCI(>fIerSH5ZVc4m$ZOI5vG4lkR{K&}% zPGRH{C!S<_#U%L`M9HmHhSk&7HX3v9M?M@Lc{!cTV~&tGm6M+xa(_r5VLljIYFL;`w|b^a_e*>c)(D3jheV!x_VrXT(7mdisY0*UwMH zsDEa>+up}dpZ}V)q+Tp?SED3Jyv&&)B#IpvunaXYJ!MYce9P&V-yx@g>RaR2&U$0a zotbBEEg6IF0$mt598UDzz@Pu=Kfzrh^W{aER{CUPMLnZlpZ_^m&gpiZnY%N%J&Trm zR_SUYx9-QO5GC$pnm6iy?|Q7gc~Z@3;kw+;|6o12RL=2vV^B(I|8Dz&AQW3E)$=$U zcojSfzw2WrYTjhz{nWi|x9v zTc}v35=llFdq+2Pcw;a*KydU`8dFrG1J{xxG*iQ9z(^qpL<-3Q!4QoCX;v#K0PwGf0kDDq`|KsN`^T1??f>`x^Z)*5|JJ|xZ~hOR3$;oiSW`m~a~K9& zOO-iJ;`=}{1?vqybOdY2B3u{E)fTI?M?3TlAvYX`k)iJ?wXiISQZnK!h($7Fo3(j# zVDPxA25kb^7TLwBbM6CO81Y6?@K_?#9I28q-fu~r&e?|K%2$A*eMO60bx5J}3}K*% zU?k%iT7gznBa{mz*QV?;7-#tS``=?*ENK)T1mBjy;`|v7o?x?`zTU5 z@AQ%$qgwlv30|{&MTF;hx@!{F>nBq6UM@OGy8hW`toNLL`3v5C_Z{8C0ozb%=k>aO zN-ww9FqVMf7)E*@T5RCVER|Zbn$xY`3e5w+ulP`TOQX9oM=UR8CM3^e*K5R;f6q6^ zN6v>2d>I~j`RxGfKoq}^NQyj!BVib@K4^Sgj?8HnQTJ+)8CvgX8Y?1~%()bj&!ldo zGY;<^AsezY3YP39mDPZy!{W#|mZWaZ@y9d6<0FqB9_jlN#kAsJm9r?y_EpiePGRS= zXw%sWF6$iDJ91o_Hd*cp;H(-PoodF3YZ$O5;Jj%`L3pVp_m19LdeH(eR%u3wH7mI(TIO+0^ipxQr}LI6Eu7;-FoB1|fzkCOsa%)K-E-hXQ&k4n;~K*u zm4p+^RIXg(jEjcT?>*qgo<$NR7kb|}i9>+8+}5PL;*Ph?Gm34;i8jzr>B?MYoiO$g z;*FrJXH&t2 z6=ei0!FQ0WGS6&n50n0#rh};4wDq2YA2@{vy!9>r+c7xL)5b)wjJD%_H?owSJ`m0oJ0+Cr{s1{Bwu*{Bant+#JBw0eIMz3X|jqb6A73ZYU1jGf1Kfu}$F z4c9;aOm-I171wu7!nTj68yUL;RWehYNx72C0>&yJC--{|KsFXi(?FL>%^6uTk}~DD zPdu2OU;Yn%iTm)5JUD7+5br3~P)*h;<(>gocL_0Tv$q+o*+!kN7~_yyG@WF3{&c$r z*EQ*aZ}FhDJ?l~u(dOo%FOfiW%KPRBAllyNhU5CE`RzX&IiWtKj4lB7S}2~sSTKE zypvYv>0WPe&J%pcFdXQ+kw5$OA2Pk1xjuaXr}rxu3)T~}CZu?)k*v@2^*%PXUB5dY zB6E+n1pFP*$~XDibCU+Go(ciO*r`c#%9*%KEK;c@-)g2>z*u6|J*!#G-{N@pjjn*? z%2j3@jzizm8IM0aaFP=#MPg$NIIr~d74Vd*=}Ai}w|(j^B>?<({=0^K2*s*dU^Rx| z9L{SRQ5xZtr;v_@_~k+Ev5X)(=E+iZrG?k(WVX_|m>kaAID zMEe#nVBW;tM1*83xy+2Y;*7pOGc<9N2vQBc>&P_`vktYSf!a$=OcERJ<3LoFa4w0o zB%IX*7B>c5aU41awGza0IG*I=#}CyS#5!dKIOnD7I`Q7|pZ}e|`_D?wuP6U6?Vk%f z&Hv8~fS&*@QRejG_D5laEl0zs&%X{t^e-r5dh3&!XH zCVMDcgry|iu&f7!RHQw~{#951s(Rf|ALVu+?9q@Ul@!$xUrfb$54Ea0c7>8M!I$mA z)glb<9;qo|LQf~InT;fJ(x|_17|69!YQ!6hw+2j55TI$OhF;x%)nrA8P3Nc)icMEm zUlp#|ptj8|>cxr{mR=bdVpaR^ZBWgy(Sz3PXbNIQXPegw6B#emQWjz7RU6JxRzi`f14&8yrFknNc zMl_EDVIHxur}Ldg@re+NPSI8;_+UL_ryvqhil_f%(iK3=BSCU9U~7 z33tf=B51@`6>83yR58yB9}kaw{QY0?@bMdJ@I03Zk*4EYCn&GZH;Z9(f#5n^_Qd$o zd@2OvG%_4q)z1MR4-gCY3lCG2-sism&C6&rh6*K_7 zPu92=U%K!z-y-UgL~`yGs5Ay|480FJX||RnHGOo>ba}TQri`RYdb)Br9eMotk$yaq z?P>(7l-Rfj%P?=#ehv5cV{0rb#%KY*l+1NLGnX?y4!97o#x|Br14dr?e_TmjC9uH)!Gwn=~1Jyg`0Tw?+CS?HXn%7B!l&Gw#+XS|y5m3$ADqV#KLEMpio z@uoyBX`wp7I?w65K&`@`|Ir`u<&XcE!!JMLYp;=|Tl$8AF`69W$yuHI?|ex2Q~6CJ z*Am7{rKU_-BGY+d`m--QzI)HNzxtl;;|Efw6lUuhHF@h6UNu>-y9mqeezfQ7IZr(2 z>8tanH~p3v5u8TI`NouR*57={!$?78Y_Sv+@~LXPClTLy4*o#rJBGgJ<3~vM~i&jT6#!qB{;qs;WN1Za_vbK~2wi18}!syeEu< zvVxwk_&(r$&k$5kAM?GxOu*8G)m-`O^Iwfj^~|d&^D-~YKRhFoaQf9Z)MHN#mQ(23 zbV@d`MQr=G6s$EWnR1S<>v`85_~FxUxqkl4{QQgi%C6Y6EcC_JvpqDHpEuqOr814BH{}I+eEuN+mZiz0^XS z+qD@2*U!&PIWjZ@ZRG1zn4h)FhMOJY63MAz+-E4(3vr;*~al*MIhP z_o}q8hQ2!xyeFoGX;D_f>!F3kypnP0HLSa5Ip&0M1!o<>XwBxVC3Nba($x-`FI%GG zw!N&inOBblN~L5`L(fzY0q+9CFwloUyk5n+!0|B3co@X!6DYwuu|7x_Ix)_gzx#Lp z^MBYT{rkp$ZT_!6G5!A;0QeaI_?OuEi-^&au>J%vz^mpz0R2Dt$N%V`hoJ8Jq=blT z*>px~RSjzqku2HdB@-K}E((=4Etfj0VwD1fHO$QowpK+)ZSar_SgZZsio)+7^w#j3 zHzpLNK?BAbeCIL6-dJh5G(fLy*iDyJQTo0?V+Fl+q?%b$(&nzNH2J25cCMM^tFE!; zym^;t3Qfix2gC|#iAc;i>ow}k_oNt^rkT_GM>0n9nGpuB4Zk%3A#a7rv`m`SY_yo@ z`kr^8BUiXgO+UZp*|%v|-v#pKA7GTehtl~C;LS>rmtFdT*{lV&LuyB91=@j@-dtOW zg2d%+^0*dy)+#bxzdCr$mYFV13r(9=>QFqfluRwql zIMREi6`ym#*h&$LcRG3VUg?~pbq#GURM99KR|*F@tP!Y%r4)Q)sfY;Il6YEXipdyf z$=-79J!5y|eEA)hJh9kB9x}Ol!jiUoHiSSff_H|#8?dG&DdbF%qJ>;ZyJ*JyV)z;- zV$SrT#VNa)gfFKa*Zt-aQ&>W^TgFO$yv*i z60|+S14ZSj048**UsGHpD z6h<691>q%KIOi)C&o{$KGt8@H&NEZZ_b&G9-i)S%Af2Xn81)Vrtezo@ca9%WlXFFH+zpK8wC@twximu(V zB;xah<##WPA09dU@;kck-rm*0s#-x~+|p0+WuxJA&;=lDOo#VOnMf zAhZm0V+aKLX5#5u++giXH1LF6$};EcXY>*bh%PXA*O|F%A1Kmi2_lLi@ySkTGO7Ypqg`Jj zr(b--`0+iV4>+gb`MAcW*38^Y;y^IQYLYAR6%9zWny;yOnjk|k2q#JELE$DFao zvb0!MQ_R=ko!9p^4Bb}yjNQN~991q*5=*JnvXE;f=g5-vzt^vaZsc)%q-)*+FEJ{c zspPxnUqlG){7Lp1L3&_8I6fEot7O?4y8Y2oQ|CX>jLNlWH3U3GY}i@ctenP9t? z^rL4=-vx4UxE5b+*7HAQN-dBrxnpm_hNjYJixeYsV*7#z@~EqzgfD zW#_RL@jgfhK?E`XyUB;5;udSI#{3vXLMxRy#zq4Y`YRd-3dVE;pfeOKoxX|I8XNggrPz_k8 zhD=$M6|fqOt*!`Wr;E@6(KR=9*`#sija_&%^4jfLl|n81P2TWUs!5_iE-XOjGN=Ba zQA>5co1`B6pv7>Tl1*t*O2XixS#SJx{jkikn+T|EZFM!=J&tn zo8S8$cNmBWmzu~Wv()7)&2mLpO2wE;H5Ow%eXu-q1J!r9uH)Dr`9&D{z6%%(Uuxz# zCqgcaQaIJhlp}w3z3|)lg=vXc1D$m|7)NkkkDSk+na(fd>rAN`+dHBp zVoWWr$T5b%I1KczW2uE{xiH83YkHU8zNdMM1*h_iw4^(#{!k0vczp(>Qgb0x%ksku z{y4zHNOToTL5xv4r!#Li!A(A)6XTh?8q%(o0Uq0TjBccJ9TnG{#0?MqiLo0wFB4D8 z%l$-OG&ri1!ct&wisvx&zSlyHd{;>8_0#5IupLXyg#N^-KjB@^BJoxTxA)!|!^t1F z2)k4hf`ghgV$HnDZr?xwv+Z%G;Stl%_)d+7QqqFkp@}HD7QFR5jDegymv%3cWPUt< zA*aGauTvDUo*d7ltV0F6Mp7Xv!HJ3a=}b6`m{U*j6>HStx^vnjmoig~y)(Si&v_zI zSn{;_0~89+>59kk*bN-UcSO-*>uLEyY-}llMXa)(x-j64CznJlI`I$25M0lamlmN_ zskKs~%DGHXme+H-^0G~4Z|f==C~4w3UAKF*?w?al%(=FyUZ?Divf!=bof~<7XwhYo zm{KIw%pr7)Ch%edvyrbNO24i}b?ThcLYfz9${6qPHqeJ&(@R8ltR?Q&oiP@Zg<8OM z14GvntZhq0w#T(IhQW6nZO2^G&9&SLU+O}Tj)!67Ck0 znkY4rO#_idV-7nT$WoZo#O1XFqE-0D7<}I|e0(HL3+b}pA1X$ad>%AxR`>kYAbqVV z->DGHtw`UR|2Z;$dLchejNg6a^n2fO`tXr(IOw%UuvQw8$71L>wHVaF1fmF+cqP|_ zH-^XV!25pWUDqQ`vU0A8mzt^8V60A+dt>NLU@lr8q>}KpC{QEXY%C%Q)Rc@f5#&I? z5Jh-tk+`N&%*Cj)`%9UzZX|RL|1e;`J&@-!=Rf})eR`mKcfb$5GA~?DsTHX=Szhk~ zgC8^=FjZ_PfafS9kNzD8e`3OuY@pP_lxB?_zGIxP^^(?D);s#cNb&>uGAoFKQGNYe zAb|Pl^M7S+lvpTpV)^0B@cxnUyZ89RNb-g(3rmJx3Xk2W=fBKU(dOS-$A|8baTqy{ zCsIoM;h+8?@#VstrxrU|HX!ll?Xxp1em&_IIQAV6{p0PAokqJFr-PDOBbQpqB@@fC z$r<*A^pcg8k!mI8NRgzB95fo%8ONa?Idly;FAGbG^u{xE0}q3;X`bhq%W`JP$|~uc zr+0zJapdXT5;JPqK*ZZw*9<00B$n3y;^;faX&C8zV9A+fxiT+{CIzfamsjAw4XyDl z0;W<-VNMmBTkgTt!b3;CTv}|k?st9P5rS9tM#=aL-67D82Pl2pi{-9_H~WzzX4_gj zhTR^ZXE8=o3zYR%C?#W^^|VD6BE8#&8aEP=sjT2PVNK&Cc8um;n- zqgEw|sY%nws#-p#CDUOE7<2Hw`Nj7i-8hV*b3`Z381Y>vp$j#~?2I)tx3sm@^?!af z`7b+m_Rn8G0|0+HEPz%JncGJ+?(!OpmTv>J%SKRBG;k? zVX60&zLmN6h8wMS&E&?pt;R2D&aV2Lv766#h;d?nYHotG{maBq1MXt z_1xnAs#3K2p0P0+=4DpkK`Jp<4y~XJ-qV?`nbKsW&csz;XAA)~bHmUy(Q z2??HIIC3~V&>i1#93S|u8+mk|1BSU)CMu)p`R`lDdt(`;A|>;~eC0=LsWq|Gg3pOu zGfphHz`+M(92pJ|Jbn2szxk7Y%JTF=TqbN-snCKGyTvQUCE=HuJ_K^9EL%}@-^4g9 z#;YOF?Fd>cOndh;892}94V;r)APMDV##_(n+Yi*SP{_V8Cqkk z#n5fcoe`X<3cwmqCk8+C9LEt8MogXW^5L}s?nreZCCfD@lEk0fhadfjw>^W?Y-%e) z$_tlx;p|{~xsZ&|AGFv#hK{9VF3W|>GLvQJ>max1?92R2E(;$H?=es*_(jRfa6@NRS`Mv4M$E$VYkTTzCI#x>y`)f#Ngd!}|vS-91* z>(thIk8>XH0@ga54-B^F!3RE-nL%{#ya1O?#^53NCVlDU6(VBuP6 zMZV{w_dNPQ!tjruf5(6G{H#(YzXI8n-~uJ3uXNN$-!XOrRLiwqS(X>7fs0v))nfB~ z<7G^zmKq41^?WzH=P6#1pi|Oo=W$(6=sHICo})3!E>YpDLP1r*m0An7RBXvyQzXWT zoGmU#WhqsiOip>eyVv*6Z+l$}G!1$8?nL+z-no&kA2H66C|@zf@@pWW?M0lxzdvVn(ipmS^fy0kp`LbaCc9Jcce z{YVHMz3;Hz^9Noj?Z#M2b2&fP%5U?GshKV(Qd-FE-zHabnz&}ohquO2r1C@j!VmEk z1L%$dt&Pzo&syh@;NigG7w;)KG5_$4>6BugQ{sy}D|4_^4!)!BG|F{7|EDyQbH-LM z=Vyk~fqoo#*B?o?Bj$-x3R8(Y@X~8s9x&yF#b(4>!r{PpJn;GX6Yf;O73^#3&wBog z5E__ycm7vedQv4Xk@>ez_`}HI+xK+GK^dV{nMPs_xwbk^z!DIXFxE2ok-i(00YT*- z|M5TM`RSQudRBSKzP_j`BryBBqt>s_|JHrZd8XF7#m0JT@6w}I`g&&rQtF*7CZ>p# z!d%K$H|>A0GlAZF45IGxHRFw8^y~b z8jL8DbMvB~_ zoDcZmmG9!5~OQRt)qIz5YN88ccpt@^G#G?8+sdaO0-3a0}-%T}FblkL< zGC^r?&NzZGxH>l7>HUYlQGqPhfESCC41FPz>8}InGHttxZH-V>))2lQNY@!^y&*&E{%AsfM0%g}Yr^*XEZ&q}+L!X@4s^M}Kc+-&-F0qng*0Lado3&BUCjA{@PDiW|F{AsMP9a<0r~*@_!) zd!?X>Fy}&+w2K`4dP1New%nrRoFUc7^Q3h5-US}bkyI1cG?U_@F>BVgm$?TK9{Ur$ z4@`NNm0l~I3smQ{O>=?1A@MmzVq93}h37y00pktzUC%jWa=K!w-HJ(LEu9T?)^5f- z))*EtrFkG6#|KUi9~qAi)Kd7}Z~l;f_`{!ZIe(_)Oik)IZe8HRpwo;Gj~{sd?t8|E zcg)8J9-PNszi_>tiObAcGTuAJ@xR@ZGo6L%{fo6^qH0 zXC{oX|3CKrrB||T%kRT}^SRcFi2caSbIyHKiIiBZ66gnMOR_|`VcLLgK!Q4M*gd&p zz&(?&+_2rV8nR%!VbG5c;BR2SJvV5;k^sseWq_busv?V3_tvd@?|EeA-a8`JV?Ny& zbFGNjnWsoYEXs|u3yE8qCv)$JSZmEO#((@D>}}7%nN1FqYi%ZNa&JG!^M=}640|h* z1)~+VDrRS>8m9A^UFXF`88}TNQ<{Xz`1<}*-{XwF!50c=6cxWwMY-B&FENvrL>SK; z4xUgFu0%R*>6Ak$d({U=#<*Mtq|edWuT&_#wH&Mi6d?s(a^@wEOezwliEd}G*^7~A zm0@iR^M$f`{T{D85KdtRp7G8TV`D0``=J)mmg`&@7Q_CFAM@s`A5(h6T(Y=9U!{OJ zj7V)v$CyJiflS0A;OwA12e-chTjhDN6{Zw8WjT{xrV}Nm)`ZIteO~5mhh~&x-y4kX zsbwbB`F1na3;?^{iz#A#b#3+4?>E+zFu&e*_q-YIFxIm;gR@?;sg>pn#itQw&AHm6 z=#^nmiszcQ^UI@nqwOa3@HI2m%!4xghVA*Wb8;T1$a{OB+GlD9#%fZoSG51y&P>~6 z2!@=q(ADG25(3@9aJG)T&>g?`SpC}=ckYS`uve)ITON6ih-O2e1Gl3atq+L;oE48^X%{LSWbb{ z(+i!2V(aJNgYS7pE8aRf-BD~N#lVs(@!KP1j@-oZ1hE}U{Ej&EDG6Az zEF<%DW}Z(lkHjz&(?UrVos|IE^_tmGaaRFoiA*Hps^-q`NjhU5pd?{erS~JT^UY{k zBHQkVJ%|2IVmGNwF)*ivC5MewH-?eryUMd!`03l95Od-j7LmoQT6AD=J#YLVvCBEL zl*BnqjOk3i+p#+yIp~hA-=nQ2D=qau7v_42mNUjlrhBd8ACZ$76Xrsm1Ivda6d2w; z;2sWO?N3Qo(k=F0}}|>`Gd2?Qgp< zv!qX-lY{TcHggVQdKXI|#L)b0U`bW(cXDGdRBRQ1r7DT_+uW_M>bcUo$;zbuXOu`q z%;#wL6{`&UzHdFU)c<;)h~so~PADb50VNjPz5^{3eT&@R(-P1nV~k;Vv%}x-al0Pd zd%WGTcRiqqH4$rRc9fShWT~;qPh?2r7~gLA@H9)t8(B zBH!V{5M4j11`G_^1DdP~xfWEDz~vUhD$RMu)S@gERj97@BOQibDc+cSJq&|aM(3)) zXv@c&m|hr_}B)xY{z|FUz& zC8k3?4qFSUB%#!{XGQeVg+lkrM5?}8{>eivGquo}IuQ}@$#d6!Uuq?mOin_x zUAJyxK2@m(N;LvLXhpZ%$?GnnyWI?hbla9z1OR{w1-~6j22Iy_`fk^d<;c>ggej*R z?OjGt_w@i>LgYA|n8I>pXrdZDIHOV_mUK&rT}y{j#8jBlLMT}V!B$jKj?@f8V;Oks zZ?durl~ZiUb)1>PzFG%XJJn zT!zQ0QAS~vq0=4v;hz278&Zz^-v8%sGo4;oUS5dP0uA62kVCHbnfJ1PP#W9yxS_}I z@A&P1{=dZI{g>>9dtR0^`&zJ8B8A@n@(&rm`<8m1unKm&Jz86q6a~~lw3Ayh#5!nf zTsy^mch_Rime$b2oB~=2CH}74)7!{7&eAyCFj1~3xmh-cX$~wO&e);HzS&cI$p)_L zjZzCw;lz{|c4kL!4EKJAZ)}^`wCsDoqvRxwLHlo|NMRpiB;=V{SHd{r4jtN5VudN5 zB|YNRVB)l;YY{@Sb+~=Tcdio}czdF(zQkh|Dlr9?6lKF5BH3iJUe6mbRO*$%8$-yM zF)Pk-y78;<$~I%n7N=Ll@UkMYb}zM(OX6vKVkw!d3))-CNw(hSFp`e49EhcS9^m-Q z*>zk-SjN|Q2c=|kOqAnj5vw$fwN`Qw&GyQgs_pZ=(1$ZRfac0aq&?GxiY^EkG3@AkCx%Z|%oYWM zkpZygOrVGg`RF@>u@_zUXTJ6d-YLVqQoPhk*NkD`D!u*L z`&u|x+3W9HNB1+}>smN}{FcA}C%;daN4m~qhK|m=W~?Z&oFN3f_w2g^PHUF52=gIj zLJXK%={k82GQcZ3*KIL`OA4e~2;qeogu49I{tZ7K9`XBomd-P$z{}Tv#CU#YSteZ0 zpcSD}ovrn}>+d<-y+sXo?7NOP?hSwJ9S@!7eEf(SpEm=yoFiP*hhNdRymmbL9a=k5 zTzJl!7yp59n#i-kbbiYUx5$R?lbUdKA3q;onB6SVwo4?v%&-)OFW%7q=n;J<+W3wA zp_+O3XCzKaDY7aAB3Xg=Jzc-29}etx_YAu`oa-sIu*_#Ze*Bt0Jbh#uk1X>@YWM5T zcKB|`{_w!z@P@^=A|(rB44jt}W0;xK!cO<}u4mUDC@C_{ z6HBP1F_6!J{a0`4-#&=1fzj>SHHY{HFaZfx+)?`ORa^p@)vSDOE780_3;p;L+g=qTNK#q0WCH$r*c#P>~R*6jiD z7O1VJEGddS$2kt&j_$2x{`QGjOOuFR*j1H+#?bF~#5p#gtu3=kk;IKHy~m=AB^nr2 zrZ*0&3|<*bW1pxhXXjn(;xE8}-f-Sp3tNUoW93;TON3M-wi?;sU!CYyH)%0)uW!o?Fzxm((@BT;k5BK|+ zb15a0ORYI&T}!S-MEh!WYgJe}L^m5tVoH%fXa%cEuJp=ctm6NkYQkZ$&AD}TK3%E| z0=ZNoBVIc!n%p9mQcj<6d+Q1yypB=1Zd7X9Ks0x8F*K3`pjmV2g$QHO3`a0@4ty%3KIWyp3cM+iCLVa^LfJdJ>C5Q<5#NLZPeT~ z(5{e}8>21Gb@aO(z8m=Z>wmuFm+-|xqac<@SrW5$ zLe6y6Sa?Y0P~ zS}S83U!?@B@29r7HPzG|g`84La%rrr@~VP2I{OXCQ6}N{jg`}dyd4q zEGbf|xTQOz7){U5ROUZ4R_-BNc=y$B^6uSlayY!*BEk-)V-6Ebm?+JjD_k9l2fO3W z@7P&S%86r&OayH2iDz}i@S}OOh|%HB_4M9LEy|Lx5*lzE$&~3#s+u}S=JzN3{ht0u z?0k3v8;UbTqv#*s@S`993mop=(Di%HFCQ7lC+7J~S2Vf^=y!_qMj`ho ztnrfY0p!xs8Y)y0-O$s&xhI|{!pj*mbQ^$j98aW_u?prKFVDVGI3)3e6j@>N*RB3LG2&bM(6mw^HCWm3cgj$-rsQ&wwmx)gLRHn3$aK_3aPTr&C)-?!SxKj$Nc0+Jpbywe1@g8gej3) z&QCAW2UMtKN9{7zM2aoKcG3#1_4YE&%7HJHTw{|2$#bn?V+<6s^j=6UR%!(h>n5%7 z+R-a329(vbor@*ZEC55PWF-r|m`(F+5te~LW0dp@F)t$Dss&RU`w5RxnYk2EOTZ^Z3;GuLHXO>A(GN|M&ij|AoKwuN_~Gll88olxhr7kg z3kzdS%qen?fud{G+M>KyMjNsgck8+qZLJtg&rWq1W2Bj@iIg*;#Es6b+SHm$+M<+| zmS$LKC8;JU6H?yx(;_iQP!--<6h@rvpS~g*eXS z5YQ-MRh#2@PQvCGHku1@Xm* zD>)fvo0;RxwU4Vaj?Ri#gV2*Rp=82qZ9ae!DMBbxWSq8qv3q3aI#MY(Z5ZQ341uUG zLx4Aqp*hc&RG670A)v0}E^c(FW0=t>w7Qr?ZZXe|F(T?K$&t=uVt99t8+vIJmEPjA zoK|#hfGW=K2{EnH+VIdHc-+0gbe`Y;`R_76KQTUil%;!X)KD6W;&FG6H=a;sxUO*| zDNuIJx=|PkoX?#3!0&~>!=L~2e~~!s_}$*%&V_&*!jg z#(Gve1}BYuNQs=&CXKKtocC=DUx;NP<$_X>+a_MFS=o4vcTI0j5hrSz^F*C{O$N!KF!`sP6X5*ME4<0ZA>8UUyjRSL#g$zu5X-nT=-edwRd4Yjp0VWNH{0 zm-(_mD|`~Chn8IE5;N&Ep;7erJ8X;8E5M!GW0hu1fkg{zWetiA#-MUyXL~|jn8WhQ z04{&>RRH_$OifG)Z!H!p(xEnlSYxrZl8ghZi6t{rs5Q1+`h0T@ zl=f6A=d^IHuy>m9{)IpI`~UF;AXajpoB(4Hf}rb0Jr%sjB(-P=~>ub4M0AB z_nxo!|Bx@g{3-w3PyPko?%(lpenuC?PC1rU@0=sfh`h%%soqOCGp3nSo={q2oW*HJ z-{MJGufMts0E6!7yd#&wDJ(c+F=1hvC*l%WmdyE=-(mLy!&d?{c2=ZZMp=wfL~`@H zsLjL^VjFbsx*dbvvuM!0=dgdnaCpGy%KVFe#PiDwuJ-_+q{}PA$FEGyW)(_MWSmv4MvdHIFD|^?AsVy+2 z$b97+Vk!c#ThGJYJ-nIuIL@Tgj5Y!$$7Zm(0uwY%w^f$GcVf_HHMTf*$#BoWgWd5| zHRqftMHq>L@-lGMc)53TGXpH3jlu0Y=I<2a`9xG16aA*ScUrccPBpXOS_ml<>O>Av zJR5%f5jS+~zI?;o{R71tVoh|~^3&lB2P?*mUK!3wp1o`g)_J;q$K&o1HP5`fES#U8 z$SM*m%}0u@{;wWT=Q7JZaOJhU*8jYU=kqOlMa+%O1&q6@DV^`7{>RwrqCBs=&SP~) zD$Awr!X;q4rKUJE55qm)iWzSV6Jwa9kJQ34lqC(^bv?>B$O&C5Q=BE%`uf>vXUjP( zSSvsP5`!0WCa1(0W{Dd{VVwZKsa8n_I!~?sXLRSuX%vP=WBv`+ z$udqGhPwmvhodY}8mnzvv@Ds^ufJpZ@PgY9*umqx!}UF*lc8H1EvW@YKJ%CpQ=Eva zyi%)M#iD93LA~-pFTvYA08aSqW%;oHxDE|p$;p1VW&D|bJhz4uvRs^lb)8v{Lb(E z&cFKC|Hj|=@BbhE=HL9kv>7XM(f(go&a%#FKL7zg004hhU;1kEe?9#7hr{9Sum6p| z@jv@3fB7%}wGU5EVVIZfy-y*=np4ubh_h=c36xT&U6+pIu0w7E=5aZJP(B$8y79J`_HRa-Er$Bd(JjwUy ztZThPB}H*(?+(7{lOSiI!PWvXM$!9k0SK9p3spIsF}SuRtqlp?n$j$rxQ)$fD}(R0 zs4v?#)KD3hiIgSMYV}&M+EQz7FGz2GdFL&qX{B)GZS2 zlr#!PS*!|T{AD|wv80kYhJ`uKl0n@|Gns0ZLDBaTvA2x8%;!tu0Af^TjU(mAxH@64 zl(EmHN;P_1Z3bgGCbZG`!%hs!wCKN$G7PrkUp&A28mct!WIw<>nl9D71FMl2QeXW}=`>!S4?2@7|)d;pI>MfO0&O&S%cc znI%W&96&*5CAPQLD))rCtafvST!Rc{>pL|-4vbGT=H&UqY3A|nk$>^G{>!Mt8=j9J zIn8J0mStaxJiik&wNye5H|(KIA(xq|4AwjLkB=;;k@4x7viIoR2Ary{WL^qvW#_uh z?9*vS-x<=h@bTp%M-|!MKcKZnDPbvPN;7pX?a|d_Q#KZvRt7ip*nLMj&)A_852mKe zjwRx&X^g*#*vyYh%H$<6e>|g<;r`37c=N@Vbp4*JGpZ=|c85121APwSVbEzW@s`%% zx{i1IM_jG^?8AG;=VzX$4-}_1-uq`@93?_ zX{HdUD=l9M*!$2OfCKjYA}KU*b#BUY>ivKTsgz|sI13{E?$ zO2n-;tE~VLk}G!S5XC0=%paJnjafVGxd zs+e&aI8Nu*dn&YPu?lNXS`{fz4(d|>wU+bZMt-C& zHNZQ^3Dr^pF36A3VxnoCZpOH?c+#vOwNmVdJx&=iSxm+Yq@0-MKut3>H(#UXo6=*e z$+ZryE5Eq=t@+D$Z-auOwZl4{wKg>@iwR3G&&L<{ayr?+{8#>~|AYVe|Kfl7lmGMo z>Hqleold7~=l`{X&#&9nAHIG70RCxj|6dRP{=fa-`S1SpxBkLk_^C_{ zzow|WUw`v${p!mvvo*F>K?qeXxrUTfl4v{)if`V3$J6siLXP#gjH(og4nY}lF3pO( zMgVI?E*59S$SsFRSOQ}?Ne+B_btQ|zTB(_muC=dXrc)GRZ1##S3hm!fuVeyOGwZt5 zwH8%i92ZKFEcBeNhB2+_oWs^iDMq%gO`8?lrlhoOn{H*pSdBJ@SVUVT*{79|0x1cr z!1mqtGeQo8R-ml1^v;lSxeP9~5>srBv|fg1<3;Np1IOjmxKrxFo7n}1!Fax@$}A-i|FiQj>MEnB@$9#3NyX+Lg%zF zGK(8~E2M{Rw`mK}8n2w>m21s$J~4-xb1U8&EwPEMnLYz{p77Q%$FPAtTcJ~meK!CD zesP?ZY5Upo*$Rjv@qv{o%~T^ma!H_KrWk; zpO%q7Dv9ai3(N6^H~TvAmMr!4d!*bPa}6np z_IN&@nU5nSWOhG(#2t2MBSWgL8rz~Nd(#n!oO8fvgEj`O&87`6N#s1G2$}fp@W{ak zBPHa-DU33R0!dYR-!t^RfQ0Qj$oAgT`#sJyZwOALaPbLAHIu@O&xN~w$7A=Fu*|$H z7fs&Faui=)VCQ@8{GOfm^n*fai|-x?jg^vB{bYb&>HVoJ7z~~1n%l8}8e%j7LD$#00b3k$#@JJ zjqe}n-af)GpsW>Ys!}XvVJQnvS?=6{yKc{zXHJdDqqQNaM64OJHf8O-i$7G^fB~f> zIxUpMoM*yv=D56wHrVYr`29+CB;~{$XQmKt04j~f87D?#vyQviZ26G<(yt z_d+3_(#(>DLTa$27?{Q*)6+{!Ftc>7!#D4T(p;%2l~f8wnF~{>y_Wm#z^<3?KhC0a z7Gjhl=FAkA8&NI_G7<`s$d>fmlYJptQ-U(QKMaIf48DVP?wK$Xi zWd9DMHQ$UM$#Wo{&fE8s^ZkmAwX98(mS_CxJyYuT+0I0M{q3LdCN4~2VR(2TMDZzj z2`6gv?l{Fs{+(7b{9m(BROQ0Xznnc*X)JfGR=YTGEy__fAmQI zc!%*$yaQ_fo<3Pal?YhzIS>H3+uyOna){U z12$5X`frqCj`7OK@fFyq6*))FAHKsU_}$+fe2oC z_Qn%(l7yKy)GxJQbMO_(fx~#h9M4E|;}7(Co_@muZt2=xXRqWmXH*DRb9b zdi9Pw|44F?^K!m91D(?Jw!_;V1B94S8mxU_j-C&{`Ucb)XJVQO(@dQbU;XqqdHB&+biK$nESBCXj8;4?BV(F5rm1agJslqHVCQ!H$#Ue| zKmJ4VY2;=62zHem$lUbV`d`x(a48h|wf>KBZWDvro`bb{Qd-VRfyy&u%#3lS)7^!c zRxc)#$MYFo!CPT-zBP){^y4ANOZ|_LC43Op*>(TIbq0N9Ni)k_L7y*Wx(b+Y5jlfa zdaM8AGB+*%#e+asjWHUdwe-Lh(zQp<$|O*7U+bbUt^VgEAb~;A?+5bJSrS#WL=x6g zS;9=I2EFqbXDK;1z^TZ21*lw`SCcSNmoPVzZhia2)Ux&QN@@1PUQDpJx)1>WKmfnR z7_oiz&f}~s3YYfhS}Qu=(OZXW5{4QVVfr@tYbFzQ#5u>l8`!%&p)8EcBmka<=lHT+ z+rf17yN-LeXYU3|>^M&&%N(gGQmYnUj|@c@73V-sx$QYhOsPcz!_U)to zXW+$*S2x;fuOG_e+9jHD7#D&e$6YsDNFrmI|fi^5xJx@rny1_%TKA#Ot3t=Y0I z!fk0oux#S$&GpYU;f%px(2ZWby6S4(F`pD}x8r_)PuKNSr8vb?)94qf)|~5n#U+$` zWUo6yn)%t&w@lxDpr(akf52)jrk5I=lDNisMej?!ibZ@i2&{|%v4y5;%`%<|M(!B_ zf;5BcamI)ut|lq|Z5Xgh@vz$q|=Xv6IK9Qyob4vW^i=WVc`IayU!dI0dtIXc+`EvKj!C7*F4`Jq|&S1rOOerPO znW8AEG-iu53cJoq1e2}-!gvo{^bG_g>a!-&JPa|3g~V|;mLngjS|-dVVf&eXRw z`|Dyj_(4FR2*+i{7DcB$^?2gp@e%jO3uU(Bxb85#${?WZGldg7~AKc1qiiH5=*pYnP<-Pk#U*n z?+%-Bd7*+)+?kHO-_t2AlAt0{mr4nWyre*!0^xMVdB?urVXOeHQ=D5Y7Teil8cQc# z{rS^;Z0v+gE^@Ya&I7CW!jv z!nUcp0cH8q=N7H#wdYO$fUb%u1fJ(3ah!(qQSF!D<1LZqAS@y}{}9#A!V7Je_#^)o*b3_$4Vv zO!jg<#r6zo#Ztp&;&xsCT~+j^W3ZOHcZP0^oX$tI(m1RPlSW=!Z+j|*^VR*9Nt|L7 zdE+vXra%pepFTV?Mlm;C`>r-FV`!V|t^QZC%Ba34Y0dcYBkIr#5My*R?5(6_Vh%HR z-JSlbXxC*H%pEe2?mTvNrtkXa6bl z%aP@DL^+MFnic;u&75*+Amv(Kub;_MGqoBlW*bmztr)HGR?eARgpntYN#(qpTa=+( zpE=(?!&EVY3_0^Op2R@U7%@rK3R5jk*H-`Y2H*;F^h$iYou8GO+ToU~_yTC@$!HXP zgTg37@B0>gn}u~$M5n*j|GWL33M@g`GfEk}6=U9|lr0hKnr$*zOXoalFycGY*rv&g zX>!+f8&oU!z1wNssX)4wUd{pbGT&N-i}s?{1(owe0_&$0x)gqgQ* z->KjH&EGINMQxl{)@c7P{?70G>y^Luum4;B*8i~nH~-py<1fBmRbD2LAHIG70RHI$ z05{uzUi+-$V0xcVAn z9KQ(LdiD@+YIG$hMWRRPJ}k-H`UYj{VsoKZa%0~5+6&R650Btlv? zS6-tPo$oMBVkyzxOdvyy-!>+VuN;Ai0`s~eav>f`OBw;|Hh(+kG z4uvWLBx&b}L~0aszxA@9^zG2KJ}|aNRZU&agn48q@DR#EDzE;bZhUWL+C8VXgo%_Bb)_7(&%_#OdQxk;ml#@s z4V!$zDvdHbymc6*SxVt$JQ3!J`TY^E9fvR9@#ftZ7;AYh6Q^Yq_Ib&i<4C5bpix$# zkr*lO2f}os+Yc=IOjU^zGBp)m!V53qeA!4Dz2zONQqT&FHS!Fkg6TA=1fFNvv@fZ= zV*ae3&Dsqb&db7LWWzT&kHb+_r3U$os-{Iwia}&JpILUAUFtB}qKYslO3mzCzeXve zlxSFUYc$R|@x`#`&fGDEndkYLC5Z{xF-$n)=#Amd?b>-((FUCD==y=<$M@8tAUl*@ z2YthB7Ncrg>K(pCTa_%aR&x|Nj%kLg%gY(9D&}ra=@c^pI$nrj?fWW6QiXF4?0wJP z^pLFpD>=7F!u9^W(is4I+v9DAQd%hWaiOL{4VQeZb66N-_#R`UJ-*y7(w2YX^-mV zznyOq6%1+lyi_2RL@t>r&h2^2H~(%hp8YT|7~i&XiA1JGCHG#I^q86p!*0)^+mj6K z{8Kld_g?o5zGF#&Q$BNwBQ-|SvNSJPBay7_9`S3PFs}LIR7#F4Ns?Yv&H~yue+jE3 zV>>N@jBwl>x{kJcer-&Uq+F5qKW9T}J@ho9#pvC1K$XZfB zyJKb+W-2fWrCx&!;}!2Rxkbv=LZ$G=NG zN5bjUWIy_{9BC}0e|-Iy=((IS8u1Vj^?=*%;*<*MT7IM|bp@ne#e}*hAJte~tt>e- z!b^oDwR1J5wTJ<>Z0O6zilM4cSpbbCBXW`|28@V_s$J`Ug;;`k#x`)EqQEp%L7OeX zNi_|9Dv6rZMu|7gyf_!p!h@tO2`ewOs67E_ZP$s(V@q9`!a}Y^jPj;H*C+a6z$ob< zLXPr$+Xz0h7)P#&n9|KAzp8rWm7+IamPNs7&Bf9Rqm6($rH$(aFsiX}MXHNQEKIO6 z7)ugX+V-=qmWSF9G%QBW2Z^>8W5n1ZjWvc)vX}tJ45gq{CZ~w0mQ*vbTC!4TTWVCE zm}1ddWoj*`0QfTj z0JiNvFvJjYMX8dT=V&3v8d9w_=bW?Fs)l7DrmS+wEx1K#rL>yHnWy(3>ym=1R@a^F zlv5o`Nz8d6lu;UUa!XVz6syo8ZiQ7-mFtzkirR*Frwx5K;Ebb&g)yEs6D8X=@TnAH zN;h<>D_&*$pYqDd_45C0)aX^aePuMVnu%y2HxxHoO>AapxfGVL5SN7*5;Y}CsjrN< zKzl>)9L8vJ*32n<+Duh(x!(^vjJAwn;y9nS0sEqRZGX4(be%N*=jp`U5(JFWc;|$s zPvR1RC|TlDT!i}R44t(YE!xaEgza<8S9-B6!mh1}w$DgiIk2ydKvU42=8+TQYgSX+ zm}tgwYZ4f9CFb!Te+Sn}=ejnyF0U@;ElRAalIAB%bF#)bx}vFQQf&-@Ug+tkGRa#~ z3a>rr+KeUT>)-|kJCI7@IXtt(nJ`V{kT@I;c-xb!6bm5{wnn1XSCD_b3Jd-Wjn!OB zRtmKwV%1lh$u;dkv+p|;5(SlV;NvOaT-!ui2QiSYwr$pUtkGy3X{FZ}Nb{$k{j|)S zo#^V9c_D{Dnr6xpFh9B@^@^D+u|8PING^qQ8X5D1(gthA$Z6O=us^(I*gx?1{?`AE z-}+bn>(mM<1(J$f6P>qfS-_hfY9Q1suF>9!i?M;u$bhqixdBO+&w21YRy!(5KAS6@ zs~BDyD&jq`Ec0fXnb#6r5;aHhW^h^nnH5|SLNFy4j`>V(v~#5m#yE@>$MLxaI_=o| zj?50GBXctqcQ{)NhRY|$6>eQu-nr$6U>-1A@UQIC1{=iT&G0jGb`BfR>%?t&%{aHFVZ+-w%A%J+O10sU)73Gv_#w zb7Bq)Q=GW9!iIAiIj6BXD_j_yRwa^%9EsV>Fm;;@4GEn7$Qkt$C z_+tMBcin(#9tqEJ<`iDqwYw#`)s`NS=LOxQ8zIK+47fpuuQ>HiOFUi8Y~bYf>}ZQK zVs@H7iLYz>q*pc;D^P2-MjOR(JagnEi6kLXYq{uJ+iR{Aj5F-~p3XUz5_kz?8!UuX zg@Wh#B=q#{vxX8g&KmYZhq0DiDv5+Oj$TXrX(&-L<3rqhHV(sqp_zg%LBN}3UL-B$ z>pZ{s!@tM!a$zX5CAHF7T_>#ph&fl3Y?aaS{0{Ys3mg_(?&_Yd7g}-q{RGu;-mTnkAH5@q2FOr z=0lDRBq}#&`dv5h&>hgqa10Yq^G9Jw5O-H6C=ac&HiAnBL zr8LSG;&kTu_{=|aKjUt=Bh}1cy=>L109T=Xmbsa0s+y^)V4TM7dzP1@(4e!S8qP1p<0hQmLeQy7?$Y_PbD)NY&E&uGg=o%rs4s1Ts(9b|%IY$hk5D z$5#wT^}WBj{9#)IZVM`7G}bsu&bPiZNiDx3zB6iIR1ysrVAY zqD!eZrKn>{DyNil&RQv@wYJq+t;9Qlfr}yF^{*ekegFXe%oqTx@!v4dOGYWQR<)E` zO08LEQc9`V?6S3{gqT!HNw*vkQSnsgLpj(5IOC{@suSP%x<1ofTk!B>M*jN@BXF6=toX%+?#I(K; zNr$*@6a~#8*24WtIZmgxDXfH$*mfMHOSgd6EV+CGwJ3KA!Q1J>BCy zv&qEe38JRczR7Ja_m0*YZ5_57@WX*_cSrp29h{H+c2x9tU-8ine0P4~SI74k6D7n% z(<{k6_Sz7O7L!URy7d$ixyxv+aoQ2{vfT$xDO9ak4chGRt}-tpQ&^h0WMN(+rBp&p z?K8T~4lkw3X5MI&vuLHc_xnwvvdV?#G&9xGhF;l98SAjF=l!pKiTjO?m=>lK#E4C) z?c9O!oAJkR*PWA;6zOvG9Rlu!!qJ3LNkk0EkeX4&Y5AWWM^=Z?!l zIF4v*Fn0sR8xo0w-7)3RK-V>PNw!E?TOyTUGzaJS@UuTby?qc`WiE8a3-!7PeSA#I z747!6!7aH`lH||V_5P@r>x446wsoFUrj$y|GvhpwVUY%RzYWbjJAXn zFQ0manhH88iqAt;Z|F zk_#!%e3+lxvREXG+Ivjj5yy%9ZpYisqRa^dlsQ)?K)cfS(TiIk-Nr;ug6_geo?^CRNIdVS4!-Tu5*s?{tf zi7ZuG>hHP-(kU^X&y3@^ZR1O+H+|%_;pzJMyCyg6`wpWG3QbHRFPyKEqpY)_EJaDL z6x(~-d^%8M=Ws@gp>~ejkJ8G3%NXl1R^f~ISM&XL2HPOw46gRM|7GY@AB=bRT zX5Y4Xe)N8ztFlzO3#b}jltwkwajnTP64Kb=1Vo52PoRgxWYb}PVbz;%E zm!x}=nA&b26NDT+$bMJZj3*16`Q zsfA3{HP@m|p%hfk*_djp#;7pPoa2e2C2zB+igp?jbk3lR!4x^bbF5@8`Piya^tD!4 z-=k6{)WR}OGKj>qMYvgIuy#fNbK3?OIxWUYD#9G|rmd78keP|M^*T2#|El+IQG?}b z;9X+Dm=<$V*<3(#sW;6+=N!IsRD=>J!(+u8D;eL$5<}WzR{E}MuRpdTi!>JTgf()h z%39po$!3gY=zDgZgr)DKb=N1!G>gvlg#C=e&?|dNnvJ_I7|O17FNR8uk`F zltUtfz{k@Io$Khm#af5eV6hu>!x<+9PbhKEn}42c994zpTXIEzeEro#tfF7m)Q~t&BU6eO zBl7kf?!4ruub_@N-`DLqQ?&?FASBYbFuc9T?}v*~QybXUe{<(|7-N_ySZgWH^HCRm z@#~-S{+plk?(Q#$p=n&$X-8)|k~Yj?Z0B;ll5Tk34UZTqFX1Dxeqh#m%Ya`$=c*(d z{j=vlsm-9yU^>fOGhd&-MJ)ofq$_H!)r#Kq8}ne!@>#?fNGXZ)e=~3`<)U4;IBLnw zH{y~qQxv?6Cw9IkQAp|f-|@-)vg>8DE7!x2W8}1)nNwhi^LEdzOt(VBBW;&{;``Nlgo#Q(}n|%4=##xLUE+iP>iP9!60RG7_J6 zHT>67(K%zPA!muIoLyyJo>-P3HCHLT^K`0t#jLC@+i~xAc;BInVYH6#zWrn7k57yr zpG3=@>MJh=sfBBOEV;INeA%+jX~9}2^gr2v$PzR|QPbq#_HtoHBvs6L3vk?V@ss%t~Xe+0qJf&198`A+j*xyN=E|F;c9W zX<04+ky@yFLk&a{sw5rDdqawuF-)Wqsi~5tNM0pW#$l`j4Pgl-4Sii#2c@VAs?-+g znqs2XV#J9>n0LnLs!_U>yaE7A`(+ylp!mTD;0FNU&xirAf&dQaj5T83v-P31YNas3 zRnbO^D|pGZ);9U3T#Gg66jK%BkU%IcQcf#*psqH?VF}XIStC@%l7ybs&RNqQK;NjY zxn$*!oBKth!RJjB2p z+H1S|z^sNX@S~j%24gXsvu_BjD?>vJWnxUA)clpi{nwCi`)#&F{b5}YRBLlRLyBwI3Ax`Yp7mfJg?@8Trb*lAU4g{&7!|5iC5Gx_?--qCB7OM zB~H*8%@Wt(qRWQ-Lg$yp!#T_2u%q{vYZ_A|teq)KM18bg^Av|3;KO^2OLaCs)=t_ntY3# ztj)xcQYayyj3Q8p*`T!~BWNRl$`aF6b17eg_3ZZdbk0+N6cVKdiEvb6QWR4B-iNuA z+CT#SlsZvAg8^QFGD|!+1+vmex2IVvxqm zDNVe(BTK1-6zPn^D@`?yNzL*)xBKCG+vmC4-AQC$&ODtnqmx7rrKE5#ak*+s&TR;E z+&Ry#8_>FA*B{so2YyaPFA>uVGXyP-l2W?8_V#m42THsL&<@~>OEb5pzHVi!9V;D zdHB&!MVFn0S#?a2Nl&t2s;^}Pk`z))!YNCS!)r^>d1Dl5rEuD{+ve7{!5W2AqAk`5 zB8lqSCJ4Prbgu8|RI12#)ard9{wC*XwzU66qEL#q}-PGa+-Te3t1dzV>$Tf4wah1Kbi5)jLwjm{Qp}18C+PS_EyNaY=-6 zvKnI5LP?QYvgDa7@UCNU9o6+rVHShf_RO1>zg;VzB<5(;21;nFF?L|@1_F^(6hyVX z2CGFb6-%O4gK-Y$I?kt&92yhPYQ_+7wP2K`=G@N0TQ-EMRRGYZBW@T-gXUN!bTTrR zw(CBqp3ZjEx;ltkdTZHP&))S6-Hv0J_;6fEEfHb$c3I#5{cg|Tcd~UY5@$Q7nbUlm zAf&6f<7;KfN<12-SHu5cy?igNNI9{09j3d(TZ>hiB`(D9k#wH0y{F{JsT5+Gw|a9^ z|Jwn!Go3KQbQQmXq$ttx;d$oeJTjdZs#UxSO#f`1pjN8VloFZGN9YuHk6)s-Me9V) ztJxtO+(CxuDiraRovE!Rc7|9o^M?_`MB_?n0cc2ux zW?{Y6N+FZT7^CU?JMIpTmEC+?$VvJQq$HX0rFKehM0o~e2W{e zwGwn_5#B3Fu5ODd?>zh6KySo{W{wMr%K0oHovMn3D5_-@iNZ3gjme^Ft+M-2x{4CX zqKQfw1^FtmTh$_yl`cwa-4?N~&1Cuq2EY#hz&{HRU%|m?tAxh(+rc^d zexUO`B_)=$u!IvYv$#ZW`oU`pfm$yO;pbnvq>ekf{+r*3vz6jpfenP=#7 z-Tcyw(#<>JMn$__&y*suifqCe%a9G-7Z2?3A1QXt55MR^AG$pUyJP1%v~}#Qrg%r` zcRYRfE#uQie*9a%LrLOqB7j{cWqCn6+oQFTZDf ztJ)~!iI^fwOk#qlt>~>&A}*16ny?RhtZvSn`Kp3#W*M*h{Q|jA!a~gfg>Ou=D~)%1 z9+Z*>U(S?D&S|S_pFTgrZn__KcV_0gS{v;oya z=@sEL(RoWXnvz8t=DcI~#UuWHhqi`XQ)7Z@oK~DeCL&Zo7O%fS{Hq0?@%*(_-rvCqFAIX)0@tX7?jLF;8xY35r3A-hPAm9I09j&hy zAdRI^t3bEbqD0E26;4C{$Tk zz$LXPZH;psMk$iIHs;hQBN4Q_e!wb8KME-lVZ@FJ$v}_zDS7KS1mYLFkK<6AGHIS}cSYp&dsTVM_)~Z2eZL|SZtkFd~TgmYf zMW!x0Sf!P=0sy#I0KgB!{|^AbpP2+;O^x5Y0E(!4v{I_9j-0g=DF}rc3Aw73ucN9U zT^HBw{oSAFel&$nqW7&0m8zc)_8TS1Sr{%Rw(;}4VIe*WhR2)cimV;`{)8`Ro^?7=A z$pU!PTB%uR=F2j(q(sX3Mq0lX0y&&zXwYp_RdN!Ow47K%Y)wYJ+1_uae^y-eWk9am zr)HII%u{vQG!(>KPANKTC{?a^u0^(I^;(0k=&idrXRE6%trF?Q!|oBU4NG2lnMT=O zDQWo6(*4Vu&P^b-24d%P+nW+U&ldz37FDmaWU$#9HHI zOH{JN11<}cg4Ui=qud`QW0g2`7vruTT#3sWT*u%>KsW{F*g_K zqB0VHQ7+eNHF93J%t~R6=3#e-)|METEm6a2OUaS%&PM?gmW6Ph*dHuks7H*oob&v- zP7+1sIgHE{4z*H@MTba?3%`2*YaaTaG?S!-ToS#pcx6yHPT?$B>MOGZkxt<>DQ9#} zn4%fHp|b<21jex3m`Pn;iVQEOm>8-iKL>_kPj~-_@{+!ywI-E|?|8erSr4@{lgbm&3T?d8re;)&dz9zb8G~)n zge6A;idZ6Zm^r3Nq7Ds|D8m&+iTu$zLTL#>S1<6U{wqZ_S|Sd|33dFySMPozb*qSB zaIJOIM6ZMD&UUS)NMepV?1^I_g@Cn=p?2K$9{

AnN2G0I@I;TXgamRboVu@o_L zwT&HSy8&ekfAWWapK=QLm{C@BvU;p4${qL-$a|1?KVvL+#(dSq2 z|Iqhnr3o=eOAImGpjF z{Z~qOs~QI1G5B73W_?xvl>k98g>6}I`CL>Z3DhgLK)t!0r?B9xVds04vRhKIF-B4n zN;9`#7X;d(w0Nx;r*C@F_1yf^l!dpEfWktGwaPWs`X+J9SxMZo#tB=3BC@x*H18|H zhKs6~c&E0N~UcvI5!6;ml)Sgb_yH!eQ{kvkYn$9^w>w)WMm>4w6LQ9DOV@b@*NL`G$yV(FMMzl+S_&*VLi{Jwou`_4nNF>VuAg<& z{-l6ieHI3dH9}X@N?hrc(v&J&YOM^1ZijP@niEeiktIibmU}_B_0~#diy55BIOBNq zwjt($P()LEZ}#}^k=g9|kQ7h9{s!uTzqc4&nxSC9c9z31pp8e>A{y8nNTqOER_T{q zXR9?v8|Ijp;|p2~I=%09a5ON|qOG1IF@ahV^_R&w=UN7y38%bPor-?=Z@6PV>z&@}b-D=pWhn9_t** zD84zpCyfi?G&bN$wAcc874j6QhfK2Rs_B%?gfotvbrj$fPK-*kGd+9Vp`0TYk%z1r zQ;@Cr=joqU9eXvBA8rgKYhnv4&qU_c6+MgbnNpyg=A35sZoqQe^tslcQL9k#4j;f$t$KDinWgy0dpa1M@VqVw}d*)@L zw$v7$%EoHtlVC&6tl2eN|yLi z)u@@>9okt^T3AZl7*C}}sV^l&6znR=BsBmUq#L;C3)Q$ktL1GEM{!Y3+8+kA-Mi|%;M#e;v&f* zR$@|(Hq3cxV7R*SS*hEj^3V+!?Je@ue!;DiM;x2uifpvRUCK4~>5zU$0B2t|; zEXq<+;`s52)6F zecS*Ss}vyw-iHtLo#(E*<6*dyB%OKUWjS-6&iHrt0)SB(qeuFK=Nnyf-AdY;;NguX zE@xhjN0#?5P&3L|oVV=!KyF+A(`uOa{qz6TR`dHz{^UPdqi^cJ(F%E zJoCB)@*Ie6!n%&tuo5j)>?K7aFcBb(jh1h={zhr>B*}}UeC#{V!|<>%F3-!E=kfgM zvsG8tSw-nA@tFI8C1$iT;+0|?W0<#R)GEWf{aYSgPcD_0aN?*>s7FPwJ>hu58_Uk_ z>AyT+?|0A{l2TNam~&vxBT@((K-}t^wVrO+%X`h^wfdikS!6zY>*<^qYI%wR z*rLR90f<=%xMdYPKcKaRD$>@HE2(7SoVTBElz@Il8J3t>;&H40Lq9ZcD43UdtN$p4 z#bT|-Ye%rsS4#a?bWXrWssE|fe~mXHlTEocscjN=r%sJlA0_Q&87VP}46Ye3Dy421 zuKW} zxxzGbRF}_OSB-5;i*gl7DhAyG1c}u5V&XlAj8l4x4_8$dlFnId^PE_XgKMp5YDp;+ zg+m)%wUQB~d5$Ydw18SlNkXMFR{#J%4E{d=0RJpl0GlabEhtPSr$R2dRI#!^8>0$_ zN>$n@rK{CO8y%w{#l~p0+wb(c}cco)P9j0r_yXs*{rLr9re6Ez84*Xib)pe??$ zlGBQ~OjQgwK#RSIi8l3HxyPGOU;t0yP48#47sM4be(9kQY6=k(PA!DYnG&i zoIedf(QTX2vSD+~uRsAoqSoi_;G0G*uN&BvJ^Jl&KUH=HkuJWPB-S*?6TyqB4h> z7c?m?gff$+jNbJdXs~U)bTbIOGAY^~tCD%1p0TSwQOgfoLZg?q0kWimZd!by3MzWn zW4KOZUoTN1=u<)dU!Pa-EMDa+Qg-%)bm>sU)o~lY|y#X3@s z5}S8*&$DH&UmV|+F`KEJ7+gW9u^E!yf>9wPipr!SW}+qL?VbxoVr8?seMJ@}fCu82 zkaFf6&df20PPIS@<+h!?x>i;zDh8@-^>U>#{RAK^DUs$#I*klpJkr0p$94{<75n~< zP8)i&kX5C#j=tN``2o6)v$gz#fADt+FK6O;ykxf{?%$U6o|Qy|m@;3Qx6KnLaC~~A z8i||JRwCvU*H}}&<#V@dptN|7C=|z!-x1FfF)kSIHeZ2SEAw)ex^xvUBSVHF=epIP zPgi`GA1h2JgE3NzE`z_pS^51m&n?B}D&Dj|IB!ifAoG8+NXvv%YP@!CQki_w4i9UghG2U53i)bB|O%&w<)j@mi2uEf$zX|IQPEe3-R z{($iw)eYGG!14VrDPtfVg=#KdmFm;_Ulmr%M*1IH|JM|rT!<+E;+F5U!&*x%h4Xyo z7^Vwj=NeRKUQS~(#dJo~`;N|gLUt^tBe6uBQrLF3qA!N3rDS3))FhFreJ5M>lq4~z z)Y2Fx=~eyDkXFmjtNNc4`{97nR^%32{lEC;Z1vwbhR$HMCYLG_45eEA2j4kaCRn@G z|M`kAaGvKY@LcrqrBu+B-gWq{C+BoYooK!B6avPGIrrc^&Uvgcve0RLj@4FrV7T=* zDwWTz)=MqKCL1M68jCYC)<|z7=eJ^uxo)(6BM5+;&FWKG#LINTtbR1jlk7T1Tm#uC zF>I}uTWxUt797^0@hH6Sl(t6Kt0<9@QAQP2C{-(kHm*`*Roa45O0S2ax+D{R&usR? z*AD=|pFI#DH@;R|G-+M&TI$wcm5R~2mYgLWGUjtBamQjO8Tg=w|j(B?^&3E}Gs66)&YCAf-`| zwQLABq{D2*&1i)&7Tcs0IVMu6IHk$DprSPVF-N@Xn(>^)smPSC47REmrB&pBbk%DZzTITmYMICM2?xo1k{@yP8ZU5Pn^GbmguB+Zzy=eGBd}8 zqBPctspQJeyPZ+nFnmQLj#S2FrnBw>lx%uO`QI@tjA3b8g7(>I+aiiYdSZR^+`i|~@930a&ap|_+O?`e0em0MgjtiE<@EBz@%f2( zp5*>la*e#}(N;i>k`zRV4>{t&vl#H-$UaDx3c@5p*FfiQP_Z(mdLEpF&R zhf{{3i^3Q}NDw&+5V6Ea35EWvd+fgH!IfNFi5|RwA4cm2HW;S!Gt=>j>B9?gK2uA< z=t7NWjP|H{DYZ^1dN<&W-+WUfUNwU@lvZll%a#iDdG%irE3R%6*&WNIK6bqZz(@WccDOcGrw@l_ACn?K(QY zXXicl-JZK)hw27Cs=^=qgTF&Kj)c>hikK0Kj@oVqowtr9%DFm+z=zWlPHCQAo>``V z9h^u2jJ_tsyt+1*!Drpdpq)taaiLQ9R!;?Uvp8$${eW*? z5c4vz#F;q;#$~zLKBsmM$Gk=avPGWd1~`vl`SgBiuKvzwsTV0?Vx~7D-J0WgC40Qw zgI0kx9;XeZv1YPX)LdJ=%cLx4xVN6(c4*^pNd4c=_7Vjc)na04e8nY8UppL@tYE4O zIWKhD)4Ktu4W~FU#oOQ*z9@Fm` zj~_UG`witZQ)-e$K(5Ha{byMJ;|2J$&7dxC-%DToj&f|*TC>E!K1qs-HL}tTDf03B zOeyW`x+Y__-|YGWcJvURwFR2iB2k=EY@l%w zDA6c(Mm(Nkx&X8NutOJ^mO!itY8HS%gVTx}3zP#XlM@~^GC6S74iKv9B^~2!*0|4-!`&V7VMKr2riSJO#pePkpN=AzZV8g9sHJ?j1 z&!~1So^q67KBk05Xp3uH-+FRnH(;99r>DbOgEIzaBU4x;Di3ZD z|1}>t-E3pIp=i=_N7wAukRl~j6bmdZx3(Fk!y9+t(C-+-$n$&>qsi8Vrdm0NiM<=xy90Zh z8PmdXIa4WUtFSwVws+XU(LL^%KOPxBym0>TLULgDJ;qyd6h~cc4ax{GrWy!rTjGXO z(!hr(#&AoRS;F!?6!%NBC2_fp)~2qwlvUiNpVBi=$M117u9cdr#DB$1ep%Q(KCplD zz+rb_&I`|ZB<6JGT&+0xfmAb93;pw#r}upP`sd6apGh%naYEvXZ81g?F2*`iVsrg% zX$+lp47w-PNDR}>dsJ05mvbc)=RA{Q#3+X{s|+BK+O}0IP3MGJ5K4MQ9W9h%$f-1% zr9%c-IpUz$L{ZF2JvKL))PzpIu%8B}KF~pepe^GI__jEST8L@3i4y z2Oj-B`_ALFVJ?wrHdv?F?;Z9KczXJPMPrS_c!M*J5CT(zLG5l9j?Fg)NBD+Mkjj zQcIyWNsxe632ij~;XwaZg7LjM=nVq#9Y$bb78amYej^~>Bd;iJbW_o@m z98csJQO4q(W7iGaFjaF!Bkt!h$+>nOCrV1>5U3?%hkLAdIHkojQ^Vfv>1>B@XJV{{ zS`(pUmYRfVfMGs8Q^tjo61MBu`3{Ouh?fvpQf%(yGE5xj%iVJ~B;MXhB8%>OtTuS< zaK>?-r%x#L)>zPzuoF{wr3bIys~!j`5l=7VgX1Ng*}ER4xQd;Xd&VhEZY;J`X0jIW zFxHCFid+)oJQHi(7?)E2`>ppc! zAJW1(PSRskVPUT9mTE5ZN~N&mc!?se;B;f+kCIJ((9na*wlb?h7uLp zN}3SPFlddQ7DAA8gqWjTy9}LC!u^xaT9s1KC{?R${cFolRJvA_p$foNYY~{-7_GI@ zO0T)RKYaZF0Q|F@_Fw&Kn|7s8wd#thRIQZGg{oDp;-zO*sijh?C@o9Mb(*Iw2M(T`>;EMT-17v|iBHEVO?sT1LYfza*OdOopPjLzmCV z5n7?VrmL=~>bx4ZHM--fv8psfl=g2@ZtmdCX@AWWDOZL)F~;UVeI4 zc{wrt`Xi?E*qx`p-_t3FbFM|hDT=;CPHJVuVYca8H&kA8LwCRNbhvIP%JoK}e7eM3 zHw9PUuRYb|kny4N=J6}u{kfmw9uAz;%rVXFv%K6dN-07KXzQ`gVT|L$ul|sDI+Ml) z<&6wDMxk2rMyk@>DuYM>+Rs(W5Kei-k_D@;5u<`!P0j-4z{D~J9^*q?fY-I(>rt;(OoY()ir^jJ!AKN&(812 zWac!J%ECFzxwYiLInF4(w0lUh!Pg_!TZhqx(>#9Wo~@rQ*xUI%xSfDI>NPzy-`>+& z7zoEOV^qYWD7~ip@}9%ak*5U}Wy_v&zGc0vpr~;;<0XZlMCK+Rx_z|N<-BY6Uk-sB z#ePb)ZByTQq3M>Z_opjMNX#Z|+f1i*^KHn)7%1AKYQ*GMX0M;w3t6SEwGwg&AiZa*-5IpFp^Zr5Y`4(}b-cN8T?e6H(p-GJ$L z)ZKx!zh@i{e4L*7!@vKxN#nx&d=kSx-(!r_sxeHT#EUs+1ssb-Hpw}WLzEB#Vy!}efN+r+5$N3q%^$r%T45>y` z)h)_cp2_t!t|2LXdxp09p9^y>RHLxnK)1W2R>kt|*W4|hK*Cxh>6m&aKrG0%8<7*_ zQZ|jcK@w}U5+lL2#@AXgEurbt`p<3sN9w<`Qe$(jbiQZrJB&3=zEQ}jlFH?rD5a81 z!en6+WL>u2;D$i7&E_I?`CR>Q&NiP9MQlJ^Zb?cj6R}>^e>v{zD{{bXZQNeVtNLHB zdx)#_s*1izp}LMfe%S5VcROM?@iD+s0&@s5C%p2hUzd3o*WF9a5YV!jovtjgTm>|_ zmWVXwST32A^{pCSe~#wMm9gRNBe(XZ&Rd*vWL5BbWhfVNk+c^oOkos|pv8kPVP+{J zMbTAV7z`^-@k*ksl|lT^wvr$l{ws}9du-W`2&IHtT{AgTi_qRaoyUIo`T+p=XE6A0 z(}6KsX;qarj+~Ursnk*mMj4q+Yn9$#tG2CQpWC7?hCGJHd&!WUQ)JGe>CC0UUZ0&D zvygDKx@!ES>GxV5Dy5*>+Kgjl(>^V8b8IhI>#!gQcr8NlUpJH2EWvV3p{$Zwv8i!SH8n?nNf>a{M*lC3Mx3%lJkbpPE;Mutg3zJ^9;R4tB88&AoBm-G4N-*3!?tuS1+OKTc{ zsg=QdYBhpqXp1qL5SEJ$S;@IShJ{_H$hoj2ap~=>1KTy-SR3kdM=*tW7N_a58Q~~8 z>xELcT$-@jBCIS%np4wJT0U?oLQPaijF|Jb`73HlqsT5kEZsJ~Rsg45Z{;mUOYGM5BJ*Y-ys48{|Jc0N$kdDR zTy2JPvEXtgPZ9r<9l5sz+Hj}Zy?UKVub`mlY=`wdVHwFG62}>grt=-n+UEUJndgZm zMpBHVlu%J3KQVeU-8r`{j#a8X7Z>J9)f%iu`(`}ZO!6rD=5cUNnpUetGi{9(>ScjB z1y0jME{WU#kL}|~nHnP0Of?X4L@WCVMSO2Nde?8Pp1B09Hq@-}1(b6bXVImKyk`m6 z-cwDIhFwWMQbP0H`8&Sj1N-L4KE)s|_-k{Q3#wFV$+B^-a?a^3g+;diHAcd5#CT60 zGz*a!UQkI4{0^=Y8f>jBX`~SGvGDD3;{AtTvb?+y#z{=Za{Hc*s;ZU3ns$a)gGSE6 zB}^zKpQ#{{&HE%}N{EeVkvNSLofC7XPwv&$kghpqoW;iZlJlHuptEqcmV93Z04QzP%FoH<|T~V-_c6Z8^==C zD6-m|+6z7@@^NMwCx%^%Kr5w1M%ByvtB`Z#=@f5y8;o_l|K;!V%|H4F#A#wVO;}_2|FZXIKep^yejoN(zbRr5ndh8a zRb5>@5R|%GB-^ki+9quY79~i4B-jsrumKU)lL5b3vSiqPmHtNBq`W z-}N0HA083wNHMaMW%D^PHxjyZn{D0!ygFxW@I34f3{Ib2W12dW3$&ibv-EmnZD4SY z(#^T%^D{4}7nbR)rn{>z$X)#hZikCLlv`)1xpd>S`R)LoSr4&!|g6O78TO2vzASY?YnyLu8igr$|cIMYpj*ngmGj`VM5z~9w> zcdh?V=kxaW#R&6hLdJo-OjsW}=Tp5la=(U7VDAPR%A7P!{f?G2bIw=aqDteO7mmg# zTdFq1G>*f8VLXz8E(d=5zx+=bW+BZprDf*xm0@VjTL0_sv;L?1`Y%ppeQ(wOzBqAR z>RDSM#>7$zWB=St6fW~gr5~^C>PyL-OJ+7nWi9Q7jnKPbi`+Qix1TVyX!KpM24gGB zd?s$sMZ+40vC(l6-gqCNRbtMy8VjZ=BS7zHSvS$9 zKd7xK$;DZ(F(#-1S;=*C$kO5(Fky$a2BdO{)4eCB(d~G!p22HgcFc?V1eB_=AGK1N zM)E1`UD46hlsdnm@e0MT@w~vBFD&Xf1nvP8ky=f=FC~a8IN_kbt?U_kG1G_>64GHQmWh` zzIR)qExWf7OTk-kNk>lDdC>1I3e zl@VTjqYUuIf76J;nYa}`F_5O2m*+3|EA`B0zwpcWaimt&8UV_*m@DH zRYpo(88xHF5(bcqpqWQTrnh~g#opCr5 zSd21mR#ZQ>#?BeMH5l1lF^tkUrob0ZGtpGaO`^v7&@3@iq_7|N?8B(fRW78Ih&d`) zcsoS)d!aVf2VyK(uQb8V-?{zXsYa$HBdu*tJ~buImoxMEf_Tf`dritP1K#ck!#kQ6 zE;V*@O1WVS6<*>>(KYJT;XT$loLF)$EOol^eo)XJBx`D^=$YB`CwK4jMm-&S$ zM~;5r{qT-=y8}kx91}0g6S?P)XViIItTuFIZF+s!oHm@b9ELs3cw*DDUHr)7&QfY) zsRbuWVGY2v#&sIYJ3lhCflGMe*?vJajwL5*Q6P6es3F;$@}0ToHq15M2FZn>r&wYh@z6~r-m z$A{eqc7BHloa@50oXJHKd=S&OyQ1KLb6hSHzx&tzKcveUAM zi+8%QO}TKHFL&Ms4WTw6h~?e85A64Qrn0b=TSqH>Yu*Ra)eRmJwK)bq za2O6)r);^>RCldlcOw_oTc2a1#*B-J-RRljuzld#w)0KT=K2Xyrf|iTq~9lU6U}%v zLtRQCyixy;BRu!|-%Nv4@Uh`iv1%UN!J9 z^JR1VAML=q-8()ze8%i8|JkqoS>nsY^V2iV>Dh3*#m?pLaQ$CdkYbqISyPaDjoP-@ zue>;NEnQxDts71R>l`KLn{R((Jl*P3BIf5UCE|KEl&fsA|Etm6)_=MBesl(&5z7)6 z?X9-Wm-Jq3=#0AFx0l@gt=9UleZB2+8{bVOU(RPrtJIX4mI>LYa0*IzcV*YD+wk>0 zw^kABup$`al+9W)b4tpfyc$P!kY1BCO7HV;`&)fYZu3PlPPFI2lF7uB?vn=A`>0mx z60w72=wMi?Y6_WBQU<_E0IpZ&hWT;Psd5iQ#GH6eg`JJ9mCp03bz>|xtMm+GM2vCP ziI`N1mDYMW*1oxa>|I#E?~NRN{q;2f@V8<6Uv2<^v^wZ2m92@0h*iTSC8Q}|U5`U) zIOn9~A_&F@&tZR%vKXe4n3faGHkz?rBUdR?AN1{2=O$JZ#*G*tQbf^+(z*1|3}M)YRwKGiScjN5&TTCQRkO9%_qjTQuQ|Z0e)RXoxOgKn zsIS~^sF~JVq{4JMK}(#Ue#Edmd)AZ zt>Wm3OTAGER+Armr>fVIdfLSG`q|cWfNs!YVt%@?)XezdJ^tVk+rU%~Zr7hVtJ^o@ z)Pb7Dg~Elx`HSBqKfjQth;f#R#!|J~Zd{Aicue|joKu2QvDUMb%2W&K#?K>_jNqtT z6f|fJUkpgWTF2hN?s&iiPZ4c!<`|jMLT+%L&ZHDcr6^OVRgKlWlUA@w_%+6E&DTTNjY(j7rvZ7e)2k?@Y(JW zVaNBrxG+y=qEw7`9cx(67vG(;E3OKs(;2rP2oF0ipZ%y~JHDW7ciDuu7o%O~$G|%AYPHd7rpAak!FV>>?9mSd8(8wfloy;09Nd7nM@<3{W!kk` z$&&TnFbz*&?{^&ij$ob2GvbV?4sR@8T#w@vf(y#t5yPb{#B}L^hjeL@*@%LrBu-!b zh|BlB4=)#FneYO;!?8P`XW}W|86HAqUe?&gx@||D7`*iuCtw`QY>*Imic^2CwBdd( z5xBC}f>W8%;0H#d41km-YzCV&!c1;bKb)A&RIydve2-yZKkQYClOj*2lh&Aet^Ygc z8OI&e!t?pm>!Et*1UIOmU9L=NVIgsvCiY=q9QTASBQ%}$Cz6#FSc^szD)|~OZj;8u zTFGrvCe81)w`ptpR{IwE(_uH~+GA1Yo7&o?c`H~i3Vzom#|0*zFz|haJE3y}t&RiTM1?YMT6-#CTW# zw_)zu3;Ye$|JLq%rHvhWU;mAB2#uV}7A4!ZEqT3(`rOH{=(uBVMmt zb4t03(!HZnt{GMWQ(DwO+jVAUy4HW!L0Er})G)c@9c#I)I3 z$CN8ep0DqBO@y)@7d+M(tP9(6DVNM8PMfi(x2~IpDkE}98ik!op>_lBm2I#}Sd3AC zP>iAFwy|i|0X=Jzzj-EFqst9zJr6s-UAEF$jIksIVQE~_M6N0yZJniJ->B$D=w{u@ z!o_Ix?vMK_tza@#$<`StJqnmnDJOs1$yY~N;EuZLOdnkMn8^}-s0^8_Do-3@(?Gv{f3lg>tK zeOXsoA=AN+n&;k;_B9h!)~KqkQwx3|cFI@k^dns?SxV`dthele{&&~tG*%t#dP)G^ z>qcVzo!|WXf4OgY5_61O^a@oEYl*S@j_RQ0y<<0wYKGD(bBano?9K9BvDg}Z*#M9b zf^KH|VOQUf)UJ)X?Qt-zsgaIt8k4pf^OaV3xty>@b#cKD>_&sLPPZzn5suuOS>;j@ zlNp@HxINZ+&eL=SV46A@E7F~CDCN{!OKZ~E6YB=fZIrqt-)l6Tk?UaFbQo>$Nm|4j zC8pz3+qM;UjXaCXmOQZ1adly$+2gTQYAysCPe1q`EoA7&o8)CY2J{R`eQt8ulILNh3EOqyHR7RLXSEs zt>JnjZp3g-S@oEWEiI#3p)J~6Q#G!M5OlCG!g-!4tuQV3#+Aky1{;VeliQW1>x^OV z2WqlZXQ@4}SK6IM<_hku+y5qaW@@Vh(2D7svqoGN;w~_}+p~8g);it~kL>-(oMt}G zPr4ax@Qv{ud$(tfFEmq#DKk{xn|*VYI8qxgy9rdR4H?w6U;0dZi6<`U0tlb&-m@3sQW9TXzU&Px*L98v z);LBxfDtmnTxUvdKN&FOmgTV!YG51=SS%L`OD$dUvG9^zzlRrIPG7Oa3)T+WU^aDy ze!g53w6gx~h&er&X}Mr`1I9SKF?<-`Bi0e~!k5eG3QG8aLpTzw=`o76TzL8I?_(~D(sP}`7|kEA zwQlmRYw@W#BmK;+*R$LRU=An!vKO!Pb^O={+ z3-dJL2aEN71HT3rH1{3V$d{U!QzT_I3tQrHbyUAmNTnQ^o|aGUk0mBdlWtOWZwPu> z7B0(zvl`R68cC*H)w#SX`00(~aX7LIdyK%87fzl1^NEL$+|>UDuEEZD7)G4agpB$V z#)NB9g)T?hP5qb7Zu)roiu8G>&IX>A zGr6W7hv^u?Nbv(N7QX!9Z}8>kKcJnLO#;=imObf9cg{ z5fqfX_1X~bqy{$)NC(ye))-}cB=ub~&N6!Kb(geIva)AI49;1GFc5se+<3%jL~LQ2 z7cR^6>1QQ^cOKub^~&TB0c#EW!vll!%yZ=V=}FlP{rc5ae%W7zZHN=Yzx_M&ZanM< zY28||fw8WIA+*Qik^RHb(3+Vqiy$IPnwRhW&hP&EumAdA`wxHfyWjou>m1f+vikMl z|1|*c(;ohB0f6QC`T48o=jZ?LU-`>_`MbuL_y6tx&Oh=`{ru1U{2wvS%H!^x83ted zIGV?YV~eSnv`oyYG44lB)0t_xF*>Q&7`K+&%8o_E@UTCsVT7h94waC@X94BI0`WB#Pw5Ifl=ah0CuEut&yJ)+eVbocM z^lFf@&Z>^Fqo$=6a&4G3Q@nM9sIGHOIq3jF)xqutrPc%F#zdv*wz)M;B^ZZ6>3gjp zMmUB8)@lnwOqKyt;<({J_o) z3J8}%Dv{-3CV%)Q@#&f8AAG_2^C!%4WO%QB8pB>$C*BxhOPe)BO8FCmtr!#8XWc5L z$kKJF-l`E?y@{GqMurZr^Sm&9JmC%_i@8AdGeAt=ZP{Wc0*xrADMRtMi;OW@WwFuk#E~U@0nT=8grgG*M)4Afzvj< zX+J|!CbdS*iJBAh)0v0IN5+ST&J>WonMyY-MvJvhrA=Yaba^7r3+cRo(arsCJW$f2 zG;ObdkYUD?kFQ}~&yM42f)iTXu?79r> zwA(jo&r3XUj+08gZuhJrh-7LhdKTo|@9BGhB$vonr}!xq_+~SxzAA?OxaVQqvmcH$ z8ZXPsc7Ckieu)#8w6J#rhp;D@zKt^$EQDH^yCLIqdG7J8*RM2J=Dc)=_sA(tKb}6_ z3=d(47oo($d8$n3MZHn1!G%Dn!W3g4s@jzyB9N=OlY$*~dx8s;s)NJJ<&3F~beXAE zba3kT?LEt_15&oHL`Asdr6*w&YRn2^l?>G}8r@RXlGLm+C#>^W150kit#7zJo9^qs zZtGtSZvDMYX?}xde!T}Zp+^A^>9u(SJWC^yS@KL;s=EKnTVT|UxoEG2PE=}eWA0Q$XsyNvELcyWhQs;v{bHAg6m?S{#5FJ zs~TOrto6Tr3ILj(MxzY0grN08ypU_{z>nO0zjHm#)q6aaB`;*Zf<#vq+0F-spi#}V zsuHN2)!5cR&XyRXMncLuP+NivI3vXRY5gxZ49&Pi2B)mjn3ik(H@*JXZoqd_|HX)c z;q~6Vx^4HK*4sHMrsvc+wXz6n!LVoraR+s&JxB!SqQmYnN(Sq3`=?|v4)L#=e?+P zSC@X6E@P1H@ZCKDB&O2x(@TqSsWn&m^}qh>f922o2mgR^|NJw5`rrSr{{#QPSO4fg@{j)U2>O`0?!u)O&s&na$=lBkOlyAY7pnDbg1ucyvFc*b!L zA}sTTOHvx1cOEYu9NXVXSv72#hLc7xo?+PG#dew#o%Z!Qy+B=+pU!98YFubn>OYiR zZwAP9BN7p#kx$-PJf4~5&1PEB6mvsVyrC@CdPf^wbe-7L8t5b$K zGWfv5H@|@#c3Xs850*wP5t-QPnRsOtc2Ih*R0z1 zC1>c-4mAJ?kQOIeDt7v8_;v(LVT8wX;`EM+E^ zj1l4BcZ`0d*=~|$J(u%Dn+vrRtapf5a*4#4h*4>`!K)9-=q-cav9lwC3s`H&S%;1} z&D|YZC?zvxja;q$n7ryLE4e~m3dh}nZ#*7oG^Y8&6eD>lY6_PMEoUCX$m95qgKeDh zM7-H38LMEf7fW+aHM9bI7uba(K^#-L@a6Qvt-j*H?|2*@sZ?T#G_PI+jY`asITx%| zhKMu5DNTKdzW$8C1$BR?M?q!1hGI>Rhm%jv$xjDt{om19_QR3d79QVy6Tg38YKfQW ztoL%ea69O-OlxUTS@rg$gmT_ zcfLdY_yy13`vLLeq{$TfeXsG2X1W8myaE!a(JN^IleLdwF zi7E#hU0`G&3y3!ihX-m&eED0yfxBd+6g8U6J?rG=XMIxtZ$N-T(`e5o6k9Pyx~I(> z_5bFz#T4;0jQ1+t^oLLC|J14Lx6h~P28qU~A!bU6Dg8LcpD+%4f>qwk}qMiWk2%?g|v*S&eV2TliV1cNh%&cLN+T`1kw|J&hzt^Z&3`oGqS)i^ph zPj0>bqZ@BAva#QsQRdCO4e<3R`AnI1oLCvp=p854A(%MJ|{MX-w5Qe}m>}ajB zq(n?fP5Z*2#>v4dgRp5xpzF+~z(9=mi<@RelS=yU)^0n4)s(24sr}|$)9W;dWf%uF zWTcXp#N3iD7Hz{FJO+dJD%Ek;<3-4+kd_N=skjh0KEC6_yLYwL+EU6GYgz~nABJ|^ z@2QAP)7kuc|L*_&|NR&K{Ga;^z%y{_+NMjN!Iqo3tbQ#4_!8ue=YQcBfAQTv{@?w_|GwRRUx(dTcSC5oe1rY*D5VymHL>2xH%{N?!#8uw zG|8nQUTp)GdEv|R3s#_s9)62aYL!18m8nU^`vGq(wN+|LxFJw`vtz7d^d2MHET@#z zh_6#VOKn|E)1PxIly2r{hPN(3eT58OBT#%88Q5zYK+jzDA`C--+E`*_zRZ-Guyk_~ zfnm4DwI1WnR(Ab(Ow9Gdk~LQEZo%?;+k&X>PWNOQ$=|87@|F7`}e)S*X{m*=dIG>r%Czi{JIBSl5>~T}Mq>U8-uy-Q| zzr%%hSfks7SQ1amOlfJO!)r>zgJDgg8g3 ztw){~YOdtV#Be;o!4gTBX7EN3c02^bUo&de$@#X{q}369O$lhUH)KtXmo#Zq zT{Y@a(`M?<5>J`)_fH((B@W;Cz`Nam3tm$jtO8(jT=;l?xp^Ih%QS7zX6vB36$L39 zmAPb)s}9(T?=m1g!(vO6?&q;d1G|x;NK;^{)>qygZ-lhV{kAiuj2|3h7%3$&r3E8~ z(R+rV^>{ThZLMOvj7XOQ-9f&;##HkgaeQ6JTnpm-)wHyKzv+f>#qLGl^J$h|8LJ@u@*|DEE?U}TA`ZSBaSPhany#g z&tBL62G7eA5)EQ3Lpb1vJ^TGT2J85(zy4Q=FK14tlb#W?{UmaDjmZ2|5U(Ke5*HSh zSM}e#UH@-Bn2|eQg~8=RS(}HioxBt->^2xZKP~uyK&U0Mk};jG@i2xdAg9Z!R>9c&bRlE5BbA~Z>Vi& zYt0AGxZAbeF!1>9vE@|F|MlPczx>sk;r|(Ux&Z>F8x}zMngQ@N0PxcW05TA{+T+?c zcscU#{yYE9fACNIiGSkfzwyn_!r*;Hq*~|AlA=QzeEQt;SM{JWR^3Rw^*mUo^rD=oxf{?m*md86TDyS@nm=4xRtixc`mY7{ zYI=4%@UNaA#-KV~W2jXl(l8o3Xl)@Cr8yZAbKh*#dw~{p(>TjUf40^Uf_|j2ZwqeC zfNt>*=_svqK5S|CMbsG8dO{;K|B3GL`ak*}OCS99;|QIi^`;Tu?e#E%7!@2Vl<8@#j|pjfbOK!DTvnex)`4?F&g|L8y9 z8^7=e`I$fXhj@Q{&lrV#Iq}1nA23g6%raqOq?O!dBV|)EcxRNQ(cqjenksNJ==G=# z#2R*fj~^_I?-<<3#~=KN&wu;-xX%vYt!`?Kc~e{Ojbj)LOO9GpOQqV1v2FWyYZ}t@ ze#_uIKXi0Uxjg@PhI z7`tuXBN%Gbcs#tL)Xb$^!J<3u?~T;n^aiS=$g&vh>NH$cH(sWw=jp?a>eR^XGRMA= z8wn;L2oS*DjK=F^2-3Oi>RY@i9uc|vG7l;Umds=?QWxX?J&^Zj6Tr>#|; zD!Jmjv7fOTe`>nF)tn+JX5Gxbs!pu}Dbl2YZA>Ll(Z_n~FCcF^*z18{K=4fAtyUKK_qkP>&S5$4CcPjAPF`F6N0j1>BG! zG?lmYGsjxN_86&k`&VmWiHTYZv1DS*lxe2sO3N2Q7S*@*jB_Uz-v`ZDBByvkJ^ZXj zTse>RLI2k|jCDQP!y@9z^{U}+P5nD+tqkHgi2AXV962p#p68c4n)Ldal%~dW4UJ_C z$30Y-c;fW*LY^1+xo>kcmT}y5kD8`{O@o)qssD^?@d-Y#bAe@!oGu@^)CI{i)&`t4 z9Q}TK6!iTU&M9|bk((i}(XwvVLE~pl2ZO8#gZG^+ww`~c)ASRuWPN7MdVlJ+Z@(LO zC`XNvyaDFCcX+o~&yn?PDyySRaH{omf>>-wM4r?2Pc8X6JA57cR<%p=SBMA+?>-fVS0 zYNRpP&?PBv)PK`A&9-3&$Gc(A@BGGp#`1C|KA*ZL16wckcX$1F8_;_nBc|MvgwPXjM~@c;N@0D#EXJ^)_>0Dp%V04oR} z_buo4$CRASfBK*OC%^HB|L`CB6=Ph5+N^UmBqz1USv)sp(gY}ys-#pLT0lAuX zi3mOf_Tz5TKdo^q!+L)7jqkL~EK4Mo1w+A#kjYfkFTfeWjTUDuC1ql5EXz#Ed1D-u zrn>)5gzR3w>)ukfGb@Pe{d12DDOW8UwGd0h6y0R#R_3}1YQm<+yEUcNLfUidYtg~0 zCURP1X;xzZ!S+bUG3>evtp4}X{R(o{>~4UPGM7{^MjNAdhO!n{axoWjeKr6$tLCxu4UbS@Ed+ zB`uMVE6&M{i*Db>t_OVE_Wug;2~_9t!4WS-sjN4&#~6E*T+!{I!BG0v&u-vWH*u@# z=U`eR#)z?wOy!ayQq6tT=9Pz_zfbzm(Hdk;y0CJU09X;K7@D;TCidpt^n0?2Y{OQT z*Lp2=NXJ-8ESS)!-RZrR3b{}&3*q6wa6I6=@3D~Tb6|{+N+h+)R3d&D31QFkm*3aO zv}sW-r>NW`=So}>C1y&hj0dlubrYn@RY@U&yP>fwL85Q=TGO2HX0YBfgn%0c_Ce`b zsU+My->`wM&t_{4)8iVgv*7G%xOC_2ejCA6tI~C`RtG8{urBB}+Ip<>yz>w2ohO#U zQ;F2J^vrH}SU13H6a5CVW@X@=^`-Cv0h0)a*7G&(P&;bC-mW8q=!{ z=6W`oriQB4se88RgFwn@Ggf@`NBpWu&WTH%cuo=H1Q|xccp&WegmI4xBct- z891kxjVdli7bw;`f@Y)hU;g#~g!$>j^p%2z(hRN2|Nqqg+^D5&pQZC&KP^$FN9eJ5 z5)5;kXpJph%3H5;q8K?%Gjp6bARAi$Jmi%qNH7Ay1WYreWnrosb9Y^Ay^4Tdub=Zh zoku@Qi`l+6#)L@3Ijd7;C!x7pxz8@|N@{-gNc45(QLWe=g8^0NFh%z9nLHL%_B!7uPE(LiT`F zS%3@*Caf3Iv|E2#qcK~1={=a4bd<_8nQ~`in7QkCjsN66E z+@Jq*f8nqE$$#!o{=LSUT8iL6tTmL+t`w>COl;;mHWD?ye+g+ShjQrI1KyVEU50%JM~Ra{j2EK%UVhbs_m<1mXxl5 z39soQt2WMRR3vIfGk1D5fOTqcWUYm{Q06n=KmQs({N8U6_B(#*m;OP1x#p^X0Tp(Dh`REiF47<=BGHB;hDe7O)F4-D^)s^zP2TF!_-Y>`+hZFS1W zV635-faJ{c=RYJ~CemrvWCL43YZaH zLNWBg42pS8AG&c-v7VhD8Lii-xcQl-LX!ek@WyT+inpHqpr({d$tsDcx(!FeY%r&7!jAal*7!Ew_A83Ok>>dcaJs)--`1`^m-*%1&{BBNsuPnUO0PjE$ zzY9=!{j>xu2eW5xh0>Ng5MUIGZx)zDAr6gXc_#Aj=Ji$4J!85XB2n#Qg8TJQ`?>}&O{~5#X z5#toXsNyj);DOzGt|F9{@GP_%DLIoCy?2juVLu$$4F|qFeCw6_vOf{0Sx(5Yk8Jz-CONq3qJw;v?{e3r) zy;I55!Q)LM_H>-B?sk~!S~J`B86S5CbroMCr}P!sdYV_6R7z2wi&y0-)n4;0-aa~)%IX$o}KYcFPR zA%per1kV_D{h67FOS~?8ZU}R6>Gi)gjixkcUBCJLwn52_DP0s4t%(>5^P=^g(gCv@ zU<)*^xX?7t+gto@#Cq57J(VsMs!ECa&@SG6Vz06KX53+C_XhqLy6Il0_^+)(t?kN? z=m2W!>|XJXTk)8+g0(6;OrwoRnzU#clS=*Kxsgzoq7-N-7H0%f5Fw)S2F;T$V-i#NpmZcSHSr}c= zkV`?4^w!j5&UOiya`ZRJU~BpA)oy!qYiYfqOhwJAoUwR2;GCnhsu|O@Y)?|m>E6`0 zLCKMGxo(rJ)5d*UTGvjOsuhgV*=s6PQS%mk(XGd+tec0n{Z4Nk)>_qwHjNxsLZXq4kRq?lb9D$80h7VBq}0clh^I@>lNMU- zWcgyTRvVfoW^3YZjnvj5JU5t57iy`r(tplv6chKxPLIP8Z`I-ZTn(%zU6bv}tuamK4X`rCa@Yl86n4k=91kBb!76dIrj7b41_n29@JAklHur8Z zd{xfWQV2d^y}6?*s|K+rL?J0>KVs3RAk!iouBv0kS*5QW-*^nucl0 zu#mK{`|zIQ`*-+Z53YNF7{_Ro@nJ-;&NF&X3!WeR;J3(^g?x!fZ)%Z#-!wGxsOo@W zgJtw1VF)x4rV=}#bN?K-mZ>!p(cz?~+=&9xb<^?gnKIU@w%R-J1CkbE(v`R|8WH<& zc#jQ3Kj-@ZRIdZV+9`?^yfs)Kbf6gn$M@f2|Lz0h?j3)?>^X`d0kJi3j#v`|I~HKI zi5hNByxi}*vNqbHF6tQ=I70PY&L8>VcmE5OpVUURSB?F$M7(i$>p1QX+rW5hP-(2i zc~5T8jAa-CqaTT`P)fZvHLY-7UT8IQ3`c?;Xi_Os3B!)@@PIWV{P2mFr@zkU&!6+v z<%wFZgVSIFOHFn6ENMYpZcYegnk3O>h)_bb$j2v58mPE=Y_F>Q(+6U9S=H8fFx5#^t zX9G;{c{nt}5$Tq`N_` zNY_sqdL6!g#)J1brp| z0b8!WZyX1xY*M|u`p-|O|Fu$bqb!LM7fMzqd1)&f3r>0JtO`%AiMd8z;sr5=hw*`f z-?7xn>8meTKAvbTGwyeY7?v1sC)odL>wkV#|K%sw|J(|;_UOkP`#qy)k{Iy2V+Y_b z{lB&A&$gZ<9pJ{`oWVQSS$n<%3aZ;T_FA=_Sny--r`AhXx9$H1i!F&(+I{`MV+*vq z`d?bZQX$Jt07B~$0QD%^q*zS{;ntKLDy?=MXE{V6i52uZq&I z)ykYxP~2GsK+;VQzB1?5WTyMR!Lr{Cc;_jlQmR^kis-PCv+ceWtrJeAn^+6pI(&}= z_0Fk0WKjcXYt_*B7zV^zTGl09NrhS}xlAn6f<@W0!4Eu+dmhJ~9EU>-Luk%>pf$zc zE!NuRy>GQO`L$pBtKaRz{<#AIw+4VS*93rd`(M|Y?d!?)YXIP<@l{_j0@ktE_Uq|; zPqaHeJhX8btVp+Xk|wS;YHMP=Hy<8~8IB{7B%UCLLD2oXp}LBQqlrVTq4}<{GW(5= zuIns%o8R!x(lBavQp@!SD_27)F@jUlr8?fSYKALdabgJ=NibRPnws2&A3ZpE<_+B}m>>l!&2hmqaTDXGiCyt+T9g^5oiS&YEY zk#FAy)OmT{4WI(S^tHur(4Q>a_rHi8JTryqOMe zl*wCtp{$J@dUN5fd(yS z$`o-SaCrZYFz&!YK?r8RcHN~?i7Vng2jiLIOuSr(mud4$Xm@6y{kg4rZLG7sQCC@r z6UR%t+|ZuaU=Lx+vo@eHGha@$njsrnP211i{1$T6vw6PPJa}gr{XmJH{r*U`hGpA+ z)%&xmQ;Dt7Ewix$*+Cd~oS(kr8r2!wJ!U*l<7t~&~7$rO1<5AjZ=$x>CWKo zh5>cMSrM?-lXIlxMlPAsStVOjOw-(KYY5(T&zIKk{l3x5jZ_L{Nu(TcQn?h3@Hz~8 zthJPyd0I|Pbz#a2mvmtl_INii3_ITY1JhSe{Q6(|eB8z^cgfJscGvgw4T;iYR4@MzEkKO1_cmyE&zt}e7fl$>b&gMzpnqS z*R<=ZRj+U*RL}e2J;n)3$(-YvDeHCqVypkYd)a`&a$3%eA}r@8%4H&6Cj6-8jpI0Q z-2DyIe_qvp{ub-My{Z3QCiJ&d|9g-gR7^#UF8e>FNZqE>Q49-)l4((|@ zk4k1*F0UdSU%wtfXbd4hs~Y)O+kO34UWKwnjB+1J$=7G6f6B(#O_nvMS*0RyWpHl5 zz^i>>XP9AhxYjTU^@@@Xg67U3JM4BG_6Mw3a>>j!QA`I$g2%4Rft>I3`G}_P1RbhL zrO;5rSMR)T{+nL=gZG>Cu}Z_@a8@_>siw_0OT^%uQ-+LKOv%(b;;S-&f*%>gP#V;p z+GLt8Jmz%fbbiKUJ*P$&7=4h|Ol!fh-|bBB<9U@+jkjYtDt5<6@05GuO1W)%AaV zwfQeM2h!JHUjqO?9Tq^>$jDvgyPi2qAO4s1&maAV|LD)WdwjRcwKNwOoO4ohZh+)g zWiJorv!DOAyewy#DZqoqAX$sJ?o2D%q=`3J8b;Lk#&yT|+8Ry_7DJ`7x(XJO$F%YQ#TQPB7*NMgH*3NxJG5@`sC884)Ca}tkMCi4lucpmxMfdPG5dS z>BGM>jqI$_rAorsdqmbdr?P6K=z+oF^UtFM@I9_I|XsF_Vnar@Lemb|?dZVHaW;6<~Pog`YzcgVJ0 z=1&zQrDQ1Jyn~Xd6_z;RoM9Xe8i`XNS9S2uIT2GN$IP37t85_#+v}y$^M2bcTCgGV zRad~!gp?EFp{C5-H$BEA2s^wDD(k4Z!&Um(yor?Enfz?z^^GsnN+mv@iO(07k7wpD zzr>A!U--lS0Ec(q!1};rI3jVT#mqS`ENRl>)H1mnPTrXup^Oj_gK>^<*i+vn+G*~F zRaPT#dd|18me38ZVoBRQ;GN*{q}0eIBDJX&b&fo~|BP?_?9XE!2VU}tc^#16xDNJ) zC%?CWVc7Bf)y&+49E;MuJ6cov=Qia=Kus+T4(v{KggG*u&eWofLaVyLUz4G%fzXS( z6XEDbtlc5vX*IEw%A7UX!CDK(kYi#$jO_fL-EQdg{>XWnS>nWbxp0{?%+uZW=dc?Y z%&2UjW#&1)P}0CW!BbL-aJ``wmy&oYX)~Q`Jx6%CoS2uHR5N=6;;b67RoI6?2V1W+ z<6YRZ-|et=U@2#w<})RoiN)iLV8r(gQJ|10exX_g6U7*%ZeM1O?;l7*BbJ3$>nC(# zV+_q{iptb7Pe1w|`7)E|s8n^YJ}dcV>(go@MRhsHSf&)2>qo2=L_D?AEXxhWRJyTL zEvgGG%R(*%TZ@`LtwDS3{+zk~0F^eS6tPy3!)gjkRf9I$gk2ce`2m`yH!L;w_ZaZj zQ@e!VhkyOoIDPlGHT&CIrbTu5x8|wqnKure!K-H1x~Sig6J061GCb^#JnTP1Y-LWd1A&e~Oy44|alo>f`bka1?$c5$(Dm^(XHx6H2f7WvHNGDQ zkBCzmf5|sz!JyYJcUGTOv%+o-9Bks!<^QI-qwd|`Qc!HRkSTz7?U*MDmr&gmi~Catx%#{26) z2(oQ_i)N(Z8U(k)n?!BO;<>N?X}j07G*ss4#B#ZiFHxP-o3Nw_=l>S#|LuA4`>Fpu zZZ5T6|Lfmk{eR=^FrTPu+x@?9w|g~ZXBcCkR?dqiN#(54r(Ao_dDGL?H?DS$8S?gLf*8Z_S_Q!wzPyMNX|GT$y6<62) zPjvrZZ~ngq0RBz^0qe4vjqP^LqAWo9r~jFM`X3y2yI@P+%s8sGx~*%CYODFi`)?YO zXE5NZHgAYybV0;8B0{8Y2Z$BXxTfB(Ivj&IN-NAYVwyUE2jlUg+1n~F$mE(>svcCn zHHH-}UboRbgV>5(|1OPK(uOh%Fj|dAi8Ya1>M>J7t`*6VS~Be-NZsL6q&}VW{W^=Z zMl&GZVoE>kjnWt^jgl4}Zuis*N|V!A3>326xyYQ5|hRetg33N6eZC&>KKwET&6nV%07ET=G`X zTdCBTS)NV`E<6OHZ%`sjD_5hnzR_Gwb!s;e6M?}F4AxOo;pOv>#7Rikao* zqULn;l{1xE8YwSVp9SwgG+$lgf<%o1y9QeXK8%k9ukS6_iWftoGPT5|&D57fu^LtR zGFxu7A`WlFU3^czJ%&TxPc#LN%5We?JFmcL&zyb55Fhz5Qo1^kLjm z=Yq`|VRp$Ep5s~1nx>{*sb4wo90#Wv-etGP?MJ3BKk6BiGX6NiaUhw7B~xT|*{bG5E}YM2mQpY~r9-Ymh+e;hcaB`L0-(3gd_SI2 zmjI}LiEJ!_oXRVPcYAfCtHIgR%L}wd&I6(C`?h7o-B6|X;{$u3)kGDcAw(K4U;L2y z;}gpik-epn$*p4C^-Nd+yuo`O_D6ybx?623ttuky#yz_c#5#iY*scX#;-toB{eW2G zv+5f_YEGF2A();AZY_2=P^z+BT5D?VSabs%yr(t2&Qps_clVt>zXesDl@j^k%jdK? z@%;H0EKAaSb+ehhZ0Dt#tSM-mu+UP^79R+q*T9^Z=L_f0Ka!@I-%S4r?eF;!X9FMrsQ(I$>bC>yDWid;wlv1(M zaN?n5o|m|7uMZ(`3_JBZp%P2vk{2%Ve5ai*-Hfx9+PBP>CT1HXf(xAInbM!hB_wX}%qhKmDZo-)`!^Iu%k&;blHiUOwkg z4mjtDzi0hdJGysa7OU#TQg$=fzP z_`o>ssU`8%<$1dg#Tx9Lx6Ipe5b0?!R)kAj@8fp&y{e$;^}lrxpj7oLxHAugmJ3r| zXhngfQZmb$cC`-wR*eK(u3ENx%2e=PqZIqLTxGl(C25=jdutSEZkY=OJHT%5@x#FA zELyQ%rRj)DOJrlftkHc6v>)Ao$Ez)OE0mUL&2;i^?UBWXDwb&M)`;`X)I@WsQnsb(6 z-1YIM$v^ww|L^_LKlP{n{XhNIe0B5Z>%sqP0O0SgujBFP|M(yO<9~l}#@4D7^jf{{ zex)1tl`6sS@RAg%ZwdeuELg|R4mk1bq^cV>jYe59#ceaQ^ux*8fTiKZF^a{CRqbLc z)Mm-W;G5^p;pB!O=)~Z=V{q+gV{1h>Ma}h^qFc(r2KEHi=(Vo(Dry{(M5w-~#@H%j zA@?e)6iUm^1*A3A7S%#BQRM=62eV}#G!AP?vkqQH52D)C5j;wSxdSpvDcBsf+2XI- zW-!#6D4PGO8ELh4y8M;iT5G#=G0#aQ1!EWy8Pw%>GkUu(c(LoA+m@>E#*q4o8n-q< zRvd%tuJpAsO*7GDyt!_v)NQs>oBlg*ug>gcb-<-zjKf>$W`hmygxzq!i6Pa*yv)j5 z5u@mE%AXX-*Tp^Msy`=;q?**d`hMAe-H>#%naBMRZ#}tHVqCUH)!Tq|PHA~HBNl8b zE zCq_T(oElkeURhMOQZnR9UJ|=+z9S9rR9-OA^a6VGH%p;P!C8-YimE%K+V+q0 zv*w=v>?8HbQlDO^r-imuYRQyVH?VDbqnWYB6NZ4>57@_%;r#=~d!$P}a@ObeW=+MH z(-TZjuX@g^)Ih6jj~HjoAGS9Jb;hv|1G|S^Z~hmiW!moZ({!TMs@@(cV+YSLj0|B% zs(6vgic|_>ErW9$9v(S8 zJyDiOcsvk}dj)~4?XLXybZKK%BkaAyS;$UTO<{ArQg{R7gX}`k|t<%1CAO!ny?g%Q;F8f3i>?|ly1J-NHJjtPqnh8 zw8S#=d_!|Rbn`_Khog~b{{*r0PTkPfN0((DV`?;7(CYH>c=1=Y&*V6{dQW%|Mx8FfCq!KyD zM9B)Um42pJqtE?**fIJ6Z@kK}a@@}U(oxw>xhLGD>Civ#0dIP`K+9WtL%T5{lqT$~ z=Tc^Pv=rMg6k@ZqUUQU|FPpplnqVYy-MShIImK=`tSqY66aP9t+}8is_3V@SpS1q7 znQ)fvX&Yon3A zM1T|5PW3ZYlXF%R?#k7+PtW0m0`(j4hVL`TYNFlc z2P?yNU7i@rU`CGppA$_Nh^SUSckBo(zU`DDtoamb^j!*`L@vI|ge#_MZ0Jxe!5whc z8Rxx-7@W1ud58BJC0VPLKl%^Fc5LYXIQC`Y*Xogtw-D>mS$u*#FJ{ z_J8+3d3bz0#8PT0rKMa*DVf%@gz1_0rIiiktu%6LBr3TjS}kPpYJg-64Z+G9!X%qI zkEU^d#;8-Rh%l4YwI8TWjfhrlyT$fQ@$TH&_4~9&B~x1^wM?#g<<)$09j21;VtbKl z-4(S^N}{Alnr2uMLop2dBPAwgv(T(VO2t`^l*Zsats11LrZ{D#wTUt6D^Rs*lQsU2 zwmGo2Rd*(W?NMj@!(NSca_+9hdCN7vJ+Rk?LD0y>6_KSvF@iO3fBs9r6~ zS5&jQvNUSV-NfzMObmm%Tzlh5B{9c&GaYJ8^L&FfIPZG{s(QDaBk{UWr?%W(UAtBm zLn%5G*$~);@zbqx&ZL^S%x8uW7{kb6IN+V7RG62E7hZ1MgEivE8h2HF)=Vmmm@7iM zTWCnv4tAh;8w!H;#FUwq`L4+Wh?20*ZH?w;x0ry zTTxA3gVwH_ilx39jyecogHyA7^KyHw9_)9tcq|*m6!fqTH z#{*{Y6xS%C+jgl&hnX8%Csm#OuWL9p$Xox}c)vO7YdjJ+k{rtzMvnVE-g>6I@N#HKmBBDSh-84b6R0_N^G(U2g zpK%$|Qn1dGDb$p>#CX;7&nmZSu_}erD^)jDb-F%;gMyVcQJW>Wfp7aAsU|+g?hDZL zI#An>y9_tmLmhB-VTW~wWsa0CGqT=mESJ&eu5?z!`gM+HN=poOpdw5)k{8ukr}NyY zqBov<=Bnerb<9#n;s`p&fI%T}S8_ZfQOmV`9p*c06y-Z7wl@^qqkPvLtUAKx*@g;w&mZ5Hu&z%bp@1`#B9{9z=XG?7I7f-8k0 zZA}i^J_n7Lpf~Q7Oe2U8d?1*CB`83GmRA2 z_jcp?a8nbfH~~9-ZbapEwdm(>J7P2h&lpCmSV}E@z|(;x^w`bXDy6FHxiwA)%9yru zDxGJ;^ukWqhkhYvwhEc}kz3Uj$%HjHj$?+1bjq?(!P%(Tq3Tq%p1L0hp5UgZvJ{VypI zTl~AT{&Qdd>9Vg?n&+J-=FAl5PnJ9>Cv3Ua|0~-<7fx}xTmh)wqm`TJ##XO)0YH3R z|35(`))>WpruCoMO0WOY>;Fx3u86*e(&|;hg_0($v+VsyDV6hlVKZNBP`lTZ>9Lii z7L5|VJA&zV{LlWi+xhC|4@yoDzGeb^ z4FLR|82r~#_?GeC01W@qzx*%%5B_Vv`bYlQ$B$3b;6uqZ6PHLXMQSYwMrv!4bFx49 z{I}fG5=xM3h!ni{|rIQ?EL=jyBp( zOVw>c+0eg~%au>Hf()JJwhkZ8sDo^(^{Tqr4pRj*+MFO2STcD^3QqJ1WHb)E1Fw$W zv1OKN0;hUMp;MWh(q5OiP)x(i2wgvg7}7e?G{N4m-FDs0+8ax>1vI8zwchJ=DQp7| zQhq!ozk#t%n`vulrEI7=!kw9y7EAr!HLkB&{deQAItXjwq-X-Mg66up+r z6k$iBT93C@!4hMc<_j^#yNWA7jLThfHyTZJxMd}*`n5V`maMwQ)A`I{?D|6J8;y3? z45wPaDf(?iql#Kv4Pv^fl=B)#R`nVgqb4-F&?#~$X=vD8jE`)M@VY@*ue$)PDlN5? zs&x6%;5(X_fOF(hx>TfYsSc~#b-taInu0IY8tf3*hXap?cepXIFZfaf>t-fp_K(g5Z(6HzS*GR z+fN$&)|uB}f@cUj-4f(UpPtrRq3*oCKKa>P0RgurW;CcPwO%ya*tq*gA?D0wxe)V$ zu}<@@OX&m~*`7g~D0bo;OUb;%7X~+~hB1t^Hjr8))<{{inYD{WfzhnA)ia z5e93SYo?V(?eyuoX@gbfVywd%>F1AZ&$;VP+0_-K_pd%!M67N)TT?L7_|4f~Uq?iO zVBEl913PcY)?&j1-A>N>C%~Gbt|nJPOI&R%4ibsF5tSy5WupUjMj`8%`9=Ea*Sn3 zTrL-umlL~hyvGL1;MEX$W!Jrq|2+DU_roK>1d6~!Vm>dll&LXolCKp+`ibXsoP>jan<+@N(rcszu#5zlL z_w_%`mp4r7{;RM5-Z^ru+9SoN_kj0|z5d7ed({7!KM^%)53B$F>Y386i=3?_s>}Wr zWW0W=+br0wzwM`dt%8;0;3)lC8sX^GTo1>Qiz%3QGEk?U$DlBoBIR9T8()0qMv>3{sT*kH!QtQHLI*+5XBO`a}P%f8k&J z7ypO<`+xJ_{6F^@D{@(K5C7u-{9pQC{OYg% zk$>z5Km6gc+wapj?n+9EYB#FXg2^>wjg`+o|HA*~U;Ha$YK`he&M`^Wa1JUJaTYNH zL$F{i))>5Z;5^AWTHj7w=IM^|uBQI^&b8lrZIVjQoPV{p>AJg4W~v$~xDT5DTd5r- zh0?MX;MV#kUAQ@)sWb*3x?8(yKXV_zjTnvCvJR{v$I28VPCR*u`g^;np|e8CO3g1Q zRclG9AIh=;6~;AS&ad%Y=C|sT9hV=y>YH?sxJ*TkbOhU z%(5)E4CSp*xHV?5Q!`0QGYqbqDfLEnsf{Hkp3kQrOA4$dbDr`|<7sJyZHsjGxxFf# zF(-_%IOF=(>}o#L8h00>0jK$_o~kIC9h|3C>CMhH1~TUKO60&5*yxEo9yt6nTI&-S9 z#Ml#13dX1bsP_Z0pPTb?{^Z_&o?kFsPd=CdYhWtsGHQD^_;x>vFoc0I?5H_&?yRBp zo~>C^Ag-UMQe>xk(WC}zN&O5F3kS1j^aH_-O4Bu!%S$C0PxF=>=dIB;qFLU?UA;PD zx*z@p@Z!KilD3({Zj{shT-RFqIoO#yH$&8|G2)UU^s_!V^-}R(lN7R3=kZliwi|bR zT>!%lOv_h!%M^D%biM|gSFpi)i*J^>MXYz2;8YgV6iFU}-DtPYSq2*rW63g8 z{7fnJdd`;>B)a!09$Zj!#1ffv+(7VLi%Ld}Ra0PV309z4c45RiyQ*v{t>UGy+^{<= zqGqJm4^rQkvDBtp-;xzH^v)APV6ZA3OsTNMx&Pg?)il=(HWyCM7wizQk9%yeH!P7^ag~DmMz_R+o_4?n+TLPfJv-SVgT-9o# z+p=8ie@U-^z#m`#+fS_jw;*IU(F-HaT9tX_%pB+I5@-VfuFSuUiPZbPR3iH}FnBeW zjWKeG(;c9v(T4`t0jyXe>83xh{k@h3mu2ce*cFIa{Vr-%W{feWM{X-y#`}Tbf`X9! z9#|z?YmcBV0!r(Tr!(n%>DQ>6=!wO7{hm~EUr6=Z>^%>=J=PAS+*5W^?h?YQw3N-D zx1U4(a`li#Huu79(|^^1c;{(Ua;u0jcpTWK5#psPo6C82UO`i-uq-o|^Nf|!T$c9H z`}(_wUztAp>_ZY-HO4h-ZJoSpIc2xR#hzYH?(@%oWPkZr{?PyEfBC=qUw`NS^nd(6 z{2Qm!>DKvwt>X7N++Tlv4FLQUw*Rk(|L{-#lmFDu{n9V}(tq<8{=hH(v)}&NpZ#Oj zy8SdS?ZdmVT4PNqxz$pEDlsN~@MxxYM)Gj@AeAC>%fxgh&NIz+y??6=L)Q=w19an` zIW07+jm$F7n{KQ1VSGFG+BFL}r&%{NH~((^=DQ+QdTB6~D2Cuv)0ax7=G>cJrK-Pm zxHl?Onpljv8a7o$zDq5fNrZO`Ae#S-EN2Xp7-uSsh2lH zSI(7rnTRoR{`i934Giy(*fAi+bOXYxw(yQOAclR|vGY4}jyx?dH}6y3?Uyp^{jfPS zUCsAuzd*qm9>*P~Cw#PuM)=iC>WLqals+qZtPC#jZg^nl4+JOJtTfUf3#m7dOV+c) zHW-{CdP7Nt78=#AaYwgL^rxTW(zooTYW8z&g(#Jwn{F;OLsorp?JSK_3WK#IQIjBP z4XUuS1K}{>h7oTq#;APeyv#t{v{prg8Z&WU;O|qMk6`hfEOJEY}0Fa z?vBQFjb!WZ%6m^Ro@yP&=|=4G^d<8}6DMrA>T7KktX*lbx>?S(J4NqCnrQ^<8I2*< z#8Tp`NGhF_YEz$)AP&SbipTE{_GWC-2(Z#~;GsV=0;H6HDg`@PfRf81AT zndvnkc*Dr8jh=MSoAosc1EHox50wSR;5Bssw)Z;@BL^SwVL)0VRL|)4EG1HE)Kmy# zbaR!K4XB}HZO*OJD7m7tj(8`*xz>xEGMT*5Yp}lz!h~jbU-QoO|LhJ2^6|pU7awWPk*(mIey*ko&8R***P_FTXw0Jdq$XS$CNY;y znz(+~k`|T}xfq9cLd>Qnf zjf8+V>%ZM(YetN+D~weyhYHRbj=MD$+fX}WtyFzahhYZ@=Qv|Zp|nOznJ?m39LGIF z2zcjs=Z=)IaT}0OYEy5ExR7&Jfc54joBn*&b|W)r*M4vuM*Jw`B{JuvW`7;TqZ*eE0$ivlso(VVquJhQqilV&7(rT7vroC!nb;y&p=DiPN)uYD*p$_?tZM4m<|ten zB_k;n(^@kkNTY(-T5D~!W)ov%j&sYo%IW+f-}$+p{}cb}zxJ>FH$Hy()qnguzw_Jw z)}Q&)f9B8p)xY{zp5EG_iHLm70{9vL_}hvDaMk@gAOOR^@~{3Y|KaseYqVOMh-u!r zwi|b)HR=)GMIz&s8jh0_p=`v>1snKdKbGxE%tLeXKeeg7dej6-R^O+k}AKF(rrUnRZz!{@v zWu;K68keoh5Zlf3YJH+RfU_IXJ_C=(- z|8GoaMNC^&3f5hn?GyyF$_H*xSA((yf(uw9c-x3sdPL*3(7Z0Z8?7_!2tH7o>Sar= z)S9_WDlZW3O@VIXn8b*xysTi2qZutO2H_A!2)z(yZH!j{!^qo@hv_s?b;#C6B<6y( z!syieOO13Q=jF0dIla}wKga2wR&0Dv@72$9dO1^q#bl$B08`nS0c+LH>|CZT0dn+v zn$e0XS-FPeL;Apo;$@FJ?;4qAYFk-`=FTVO+Oad;spBLsv z8j;{;P+XZy(i+BFQY*xkIhYY|2kOlR@b;=Y=X4+!OGuV1FR&XJ_an}GrRgqb&eNGW zrtJ)}dWdO)L_be_6a4_OS}8@ zYlAtaJ22=|NB4G@;r-Tse_clP8Ql@QN;#+Hay?_r{qJA@{u~oCk(#nHL7e4WXMQw& ziA^Wf#oEB&EM5#qAh*cJWnn4#%2q3d91F!1>P5GGrR&P;YlrX~gTT8SdwY$f717wZ zRw~v4rC_V-inCNwi=Ni);3=r%2Qe1ZM$z&P&lUZ4G`EE=T%S>K0x^vyMdh0h&iBu8>$9^|(7!EjVZt8!c)XZhM zssBz*iMRUS^x3bqVuC}g#oF2zJ@?PM?dEP}Yfc2)G#|avXyPzCPoc*z|32!!K10{~ zpL3lmT?RW)^k41oB8QgI$B7nVC=yDTkm-H z_kIWKM+IHCOL=7#4KA?r0Vh^ju2fP{CRJWv+qRz6@!c4ed{(QEzHe-zuguxp3&p`X9|M~y%KhK}| z6aUyRzdG0&yh&F5`s-@|;BOfKxZC~%yHrYRwNh(swUnkhL{mhhE;(kY(o%|&Q>L^c ztu;eNsxgvd;j7D6?W^Z6nQD>*6e;ZXN2~!`p_!RW)Q4^^3yBJ~VZFneU2kd%DJ|Vd zr4QcamI_d>0Od^v(3()Q7^QHoW*#}KW_hLRQafh>Sj^1W83QS=v3vUSymQoMNG(%y zz0x|@LHwqW)tYIkK+X&vvze{UVZ2aIu)mI=<|Y+ygAZm#w`@7Min1D2e+wpSxvOn2pVJ*Kdt#q#y${0=Jb zJ`Ez4;Ow?-KIQXPkew9;%QrPnCk=!cO$%C=VqJ0hF*Oj!FO6$W^-V+?`8d3Am6bU$sHl}(~e z93%5QsU9;%>N)c6vv2V5&2M4$p}Xl`?=g#Ebb-(I-_Y%Lsa*2RB`xGuI)!>q?FClv z4WqANH8a{SVc%}t46>Wnsu6L zaa#>4KX49jJhfeoEX^%zy&fgzd$x zzE$yGN7?lu@-Q6KJ-;PO6iR8toOq5W>{My?nj|A)+4%uyH6%3EN-B{{=`y+g zt9EXL!7+p##ya(?D3y6xuC+yaKDzZRQ^eM~QM^m3>%JL_`H2hTLg8FB`tkVij`{RL z^%gNjy%E-^ROs3C3G1#Ar?+SB;5^1SVuG@=B{tfmym}p1Gt0g2;Ojhdo)VX*6K)rH z|LvdQ{b%1I_&~D;TH0>Lxn!nvVa{b^{Hc?;C-_01_f$wz>V6aYOa-e0s*zs*s}7Kd z(7hMls{j2ATI>Jqd#$B_DWq9@vec3er}CDIpxNXG#;VUnYmNCbbG|&W#0%c+34>!? z>;E>qzxDNL{jc=;PhyJclQ(g#|84ue+8~jx^}n0>t@S_WH|qbJ&l#W8|JDjlc8vb_ zS^w+R&nMnURX_cmYHx4EQ0hWT8gspVrJ9&886%FtIh?cX&5p~mC^*#z)>?c07eQpF zJ~DCHfDUh+p6w_LHocNR=>o^`uz%F^wN&P~FsH;kFNie^J!Z6sGIbC`LqSNH7G>{P z?Z4ZNSCtWAG7Cv8u0MyVmELpToK5D(Y%5>8$%@&Qd(L^RuT&N?MHzZGQQyvVc9dzv z?p1JAAS%i$DQX5;MUF0;F#1y$}GV!r!B9Zo1nY)=b~=5?bX!_#`P_$9%8K)D6KOPlsS;f)ey!SLn~D& z_gM{cM3g?bn!D-tT`5Pm4cnUGtR^mvR28vLCBdTGaWy~babwFwJr^={qg1Uf#cRJ( zrES#7m=cG*8cbPh$yvdRnBQ>5wVFGuX$DFqTnqeVIo2Q}$SvLf|(XgH&j2O`C zR#K<_ss{Y|bi$aae;nmHpw#=#sOgm25CXPG{;b99HBqY7#!@49&axuc%-_E8Xx-3I zP3;U7)wQeM{o4G^X~J5g8;X*zO<@yaOZQtMxgO(n1B_2eWW7gSzdls!RjDBFW1BJp;k{XaMm5-+<(z0NsVA68u_8$6kQ%fP{NbPY* zrZqZHgH7&TD!}YXomqlF$;DSl=AJQqe72tO~MD%gprh#56r&o99#(ta0qSled`0 zEq}PQOv!qd@48)i$rUk;=XfU9b{9=4!e&Oc+(e*SguxCN5>snkU#kCY=RHP7W&f14 z{hUKMaNHgAZ0#U$FrKC8pyiF%_g`OItjQ;`fO%dhx#9Y2^Ts1SQ?ns4Z^m=p1yWA^ zwbxBnX1p3fUVn7mKc)6p80bo#e)nab+b~cEM{C--Mbf zql{R;V=+}(GffAL&vqXeoG14NJy-?rU*Zc-^GknEhW-A5{m%rRq9Nr%lmwy@EY%Im z_PM=WK7GCvFt(JIJDKROot7@v=N=xpcg+A4n!KrO+t%H?Dl;R( z-M_WgfBg@odoQ(nOmp?Mkwz+sd7fEH<`hPTVNk8VH5+rTQ7NTr%Egqo#f!DKSi_70 zig#j5bAP6eapX7-+r64fp;l$Rt!9EBU{F1}uMH9BlyR3!>C)RBW5ue}%{i@UG{IP9 zi^etLyD88=PnmPRVhid?QmO)@RAuvqficAHsZ_~0%F80@*HbZ&L=fw2OLLYbE-j_S zmQ-AA)s|9it+}=)&LGBnFWFjy_DKhBhJgD&-+X-o0Q|}r0ITueVM$s2FI8|N22)FE zwY65fbIo~Qb19~z+^w0!8DovL)?Vg?>3n9+SE<%2;m|gwIw^wZ48^LSw{Z?@8!imE zU}ym@ZKBnNa}I0N7{%tslBSJqZ*yblF4Sd>A`(SNO)ivL3C@8O)m~zu7D5*0RB2Sa zQSd?OesWLg@AN0@0^;0OO>Aqbi>2alc&{4VHU7g08gthgsm|n-H*&&C)5jQUZd~WN zJ3Kdp%+h*mVb-i?!(QiaI;}n!jc!@>)1dN))G}F`X2xSk_0qQ|N`JNnj^mLqs&=xL zrc}xvWl~Wp;`wr6atp?yG-$ZX&sv*B>)h6Sr;>GuFBR(?);h*8GN+kp)_BO3^^zMDy5Wl4sSKuP((cn zmXfJ+rpyc02mI(64kM*C{XBMsLu&gL|A4sL=KH80$Vl@RL zrN8WzYkEXa&aiIa;0Cg-XcmXu74TFtt!l1)nG^_cpNyD;qx2f1di;8$!~k z25Ye{f(XYLF;>l^F69hH(-LfVQa&uBZSDQRpyd;C-0fk#0sbRjcc$EbJOPE22ZtMN`ugK<;H9d!`3kUQJ6U0#QD0OoMGIVyW%-uXmT2l{&TyH!DQ3=KSIq$C2eJL^qO$I25 zmW7%Yj5&g2jD)*?dkhD>8`PL<_YAh$C~It_*qh2tls0UgxucM)qkH9ieW7$vb#M4* zjQaop{ra!QQWo8A&T2sBF{GVL#d*iz2aRj9jipPY6__@-K7`-EX^S)Ul^JJG2k1If z#L#k8u*0ubJnG8+czoc{>GoBGB`4ZT_(VaprD}ZV!48obVVprsqc-!=`tO`0 z&js6u``T_Sj{jEb{}z4RbWu}pqA=69<*5Vj|HAcO>V5qW>aDWul7Wob?VF@&_PprN zU6%Bry5$w<7@R)0##o|rENNy*qUX5m>i?c;xfzmX{l(VlAiG66->C5^XTErTr~RZ+ zpeI;^_@H%bzG9psM6LfAm0Sc2rHV=)8aE^FRb#O((d4$crc?froDGjE6 z%GNRM=O~r&4{R6z=z#ohU$_+cX*Z7NO>XGf=l3rczdozB@s%m9;j#p zT`@wip%0N>Da{qti_3b7cB7VBNOf-%*jWxe66&%>K&`H;y4+zOC0J?Hk~Tfmwpm*b zTI1GAOe;d_CRDXRN*ULq4ToVM`V;4Q)`N4WLsfr;#wEca4h%k$Tc%aPuFkuNCK@_* zGInds&MV4gO3Phj(AVDViau%M>McWvc;m6oVX6*(CN-Wf&&==6*x-5m?x(a=@X>3d zY%Hd4LUPaa-g3cTdok|ZdX0gH@qq`rSzT*Lf!1cK6UH#mjPGsOhv&Stfrl_`G{7X? zJ-#(+O*rEj#v?9zjMZqGB`vxc62s9ANC;fY%<+>?IDGmR89bRnFrJ4_%MCq8H%Vnq zXO@~-TEikdj8B}#2e86(o)J;E-`pEz={_Bw#1jV}`F8sbU*%_}vV1TkWx0J|!R+{c zB0c_7_+@!VThxrtTB}8~%LM#xb2)}XA26%x)LWuep}9&7ok?UJZ8cijwAT~4WxTOH z<)Z7QOVwdHEzkx=G?U%h$PnW8yHc$z<$2q3RE$#EOQw~qk%;Er7!$NHTJp44*N zPUMmhqZ<>19{E?d_j~&}jYB*!_@Td-^PPl3oz)}9@qh%!`DZ_+ToYwpXwHHW)$U?? zESMp5KZe{gOV;?VRx&m?y*KO%PU`QEu4`hALnPnU%&13;v;s{y!~r*q>esM3YHy8w zKU=yq!y7dNthP{VLY#s$hr<(i+Zj=^HQ}i&-5I~#G)+B%bGkm$YQ`CdvyR{u$h{_w zHFVzfb5&!mF3UyFu~)HP@-gPc*Kp5o-`j9Xm%C#OXzZY2Ni(?#-Wnd_0g=XB4b>H_ zH(f5fcf7wv!+?#L9HYhDQGk7&>tYR@_46d8Yd0Ng~(nZf1GY3lyHb-$>at|xjPruv(ehXV?1`G&xxpZ^8EIF>~z*kxk|@9KZ6 zEcZq|chvave0jy1+SUJ6J|QZd$j1Nf@KL#}}JvMK(A3?V$Ko*8dK$toQVk67zB)RrL%CeJ~xozug@j zFi7Pi^&j~NIY`0&)A+z?WRp%gtG_o_Wf$h6{oV&IQ$4!z7!`!iHIu6HHk4-H@Fw7g zM^1y*&LV}SZ~j%H6LH>msgN#fiU_p4$^Go;6pX`=TO%!3mRv~c*vJ@0tci#(EVXn% zSV0rh%`B~T9EX7z0)ZpfawTm`B)i??ZCC$Q#j*pVbK{yS*UQbR!&}?QP3?}k;*C+G z)GiS$xiZ(8WyjK4lL)G`{{8y-UQ#B_GuAi-G^$DhRwogif9lQHxmluB`GAP15n{b! z8&HM88EBTJoMm37dORFNcMGMNW||Oi zaXfUl>qcp1Gf?>&7Z_~>N+y+6BV-suB=&)9pBcU;u=?XKV;kXRB7Z=b;EQ=v+g?3-b}gethjYZVs0kSYDS~~{1~*kDI!~Q zSbJK7sk;cFEr+^tNf$y5Tk}-UtxdFL&#N!q6m>cEzE$hO>@&#^|o+@F=wO~ceA(GiS*7xI#jQc2Uq`R8A7eRL{!>2az zTb&0twZgR)W|=rwjThSQRKs3|Q7g41rX^99nYPSoYKd-_M}O#puXcyg=te!2#7n+1 zEf<#7s1#fr@wxGEJR#1pUARlh01Au26&Uar*Dq$>mtJ`jU?VB|V5rwO}8!AVa;@SfP&X6s$9F`f$?y}HH#}?3YcNojHy1h^HF+pX71X55kYFgR(KeX z93LMr&T>r)OSy~%V44*s_P9x1(#H`P&`QUZU zC1I@UlWos=U((DnU0Bk!pPe1p?GHc|gF_T_+DQ|dHAr4~|MCurmN(?q`gjo{$KamTw^Miql)afxgii27h3TBhe4UVdQXp zpytdup*5p5lBs-XLMiM%RzAFe?(5`QBM;u+*Z-8L-7L;J-{a73!@JbXOM6e~o=MWA zpM!ca3PMep^nBrZeP%cw@WTkEZLxG){m+F<{uitN#-PTD|ElW0l`Vo5=V-N1b04mo zI>e_6)_D#tVtwcamu#}JIraMg!2@RQWM8Q^hHieVtkX)8E7mxIw>+L6@WykUuRLGR zA8hP{x5`K~21$k`U&u|(DiQT*cr!jQ#v|4$_1zc;i#{j1aLIRpQ?2`4S?4jn%aUwo zS*3|&eP2LpEVcE9vXt&Ipv;cjXWM)ER=Lbq9_%BB5E;T-YHRAN)heZAQbBzkI+LT_ zare3gt+mY*Q_sw*_<=DT;z8vy{nvZvHOf>f*SxUw#4M~;Bg8Neyhepz^Gx2NNYyOX zn0oUYSe3E5+SI|w7@Q4+sPTz4t4CNa1tap&X}t9}*LvEQwbnG1l}eL-wsxaUm0XEf zYn!pwb$QOvXEDE<&%R**d;CZ<6OgNEQK@Ooqu(t zZ_=a|rK9CsnGr?JdUK{mOlE&le*m6tebk!K+!B)Ykcm6D+uQfv5C1^d2i|umsTE|t z5`9Fdw~W)hF24VNx_f-Da@~Z`5`xD$547%DTJB%ZMtf!hJW@B|kydHu=Kd-o3_d6o z$tumN%4#$y${JXUT+5V_dp@e3limfy2&LRK{nm8MSvoF)vP7H6)@ax+F&Kk3z}6}H zD=iS5=R8kaCvl^PamQ3xcFniF0~>B}c+%ar52NddyJN~3BbC-}|K3Wvlv+6qBhio4 zDolB%Rz3Wqiv(+F4c*x8JdO4yfQ?mdAg}ynb_J^xF7-mTftoYRW#;^gFK8kRZy&Hx zHIVr-F@NzM|Cv+TU&%^)c7~R3&3_E4>8;W?*3KzC&pD)3YSW^5O%r*Zxn3vARbv(3 zj6stzjAO9cSWdf*hU?qlRA-uTh-p|0wHb1)8Tt)n_D21Lw%y zc+gr41zJrM8qN>fJv)X0W7Jr1wliN&iSv?3)=;f5j3bBfz@vNWO|j-`Yes`=%yTW& zGLe?V{CvT9i_8P(mx*B*i9V{Fq%4$I2?Wl<5RXI?nB>B_q2^7g@cjOr(%19uT+R*K zpmb9)+l0XcO3AdEH^HT=AYP*%eZS|5XrjqJM|(YwS6BW@Q`1QwlrBmo*GemS!)}eW z8snEUd7cSg0f9u(NJ;aTGY&RDy=gwTjVfnJC6m*{G|#U#!D_M>gFd?@6{h8)W{EW1 z`czg}riJTQ&%`$;!qWrJh0Q&?Zv$>U^DeN$Nnw^oh+chHmYL;xRhRJK)v$Y?V7m@* zuj;=ML#@IxB`((s_Tfxx4R0ORK;C6gI-9pTojMyO=hSPFp*e>?jS7HU!^@Xna(@4g z@O0GerBy)8It4UUs>hZ%v6tV(5Wzqxi8(E#d8VdB?co0Me1TROKYe8Q^bPUxNVaGU zu3c-hTH&iRec&;iHh+d{(fSfBVH~K=^5Y->kjwcU=jSh}(hy^}`>oOXeSOpNuL84G z<XBCKaRKhKc`#$4?Yr{*8fu5M}W7#y8dt9QY)9$o!>%T^qJXT@Acb2Av3bN_Zwf@Im|7)!{`>OtTpl(S?@08HB~{U zX(fmb_|jDOA|ldSHO@J4#z?USQ;jr{UM@s1);MpQ)2=)BEwg z7XX6jfZR5M8O9oGofE)1?^=^8O{$2_9cy&FX;O8Iz`Yxb=}k|F5o--u>KbL+k$iRZ zlve@Mb%zM7F6zp3yCne_gHm~3qp|xgsvqK;1N^G>Hx}P>ujy1H+dlrxS!1X*bG|N{ zeoM{y0^a)@?%a(7^Qy(`pR~mwMw`=hNGRQWu2rSVJFA*0YYfu#0L^7nQDdBHCUM$` zt{;GIoE)xeEOV*It0IlHj6qFv48nDpZU936NSsxDoPPGYQS;rHE7zt?=c*hq5Pf6} zfm&sA6>qBM)@DCtjTADLhe4gTtH3m0SW3b67GUt6=pEiFz;ckN+ICUnICVkq+ULHx zSVe*kv;F@4SL{QQX19w{G)&mM>mN7av)N;yyD_ZOzm-yv@j z@!_CUI;)050z~iBk=J83+&1?{ zQ!{Eykkj23**V8J92v$(7zfOo2g2hC7a~#<*Y{Ukfm~-Cp=(byEn{hk&-wEYo}Ie6 zc+-e%A6BZTCi4SHKmo0 z9&N@N#2Kb}!d@J%Mg#>bO^+73^$PXIlxZlna6BN^GA)zp4$ZxcVeKq!2LM`sE?UW~ zv3%=)_TSUYy}_}bt7<6t?Zc=1+MDk)jt8W{R42T3T+2c!3v*g-O&v|Q8Nd)9IfYT5 z8*6mnaE_Pjd(JN}%KLeG7?!mwd&PuFvn=)(OEZn{*fI zuluSE=J`tXDpB&@F=qv1>POgJ6-bxsE&fA`YNw{Nr`#7QkFu!EWG*Tjc&Mtf-<#gqDyq@yD_IL?G+g7 zjVE}|Bv)FgTrL-`X{FxYCUa*k$8jWtfWt!(HF>L;4FyNe?N2RKK&TcJzXYKWT?rJR7sVuGK3|4SXL8R4eF>Tx5wi#Nk|Gzr0!BUrn zG)J!IXO3^*lBO$djZtmtF|h*TwH0c;r(v6J{3XE;E>0EA80_*N2d%ro^%zuC&J* zdi`gu|2trerbf%bIu3`CI0Tgd^{s2FZ5M~A=U)s1$EX0y%k-@EuWy)*wUn$$PS#jX z;BH5{_Y08O|Z}ng6`iJ%Zx?Jzv(zH+L^&i!Rr&4IOacRnA zvwa|b)hcQ)v}PQ-UG!aT8qI7i(dnkyyMQ#W^}oBsub%F$REi)+Nf?Q(>$)V-yE8x(zhO;=MJ_ zd*?JeF}#||3}4F$`{wH#0O0?BAb{P?=5kJ(lWdm*7;Bw#-r=1yJ_O^eEqZ1x(tXs7 z(q(M7ZOPlfY>iU-jI|tw1AZ95I*R1JZQQK{-Kv|nYN%%&r6!i8XTHiF_Ent@ee12} z_?1@+-;ZwK^n2uHQ1zOD;M5_0jW}7s%B3bGbJw^S=kPuLE|=my~!vA zZOIEuUUmbun*FUhdoYwH8wzTj#x61@ty4;C z!cx4NKsFI|#4f6{YgIM6t*W-N)kb}p89q4?-yA8nam`nKKKirbT;SlNYVr*%)o8R) zRobevgBqH(Zax`IH_~ahZHhEnDWt0!xs9JZFgzX@#{=FwjY(Qr9QV0sxDYvxCr;x7 z_7LD0N!Mro?7#YL=I3YDoQdEAs}|H+v*{y6)K{Z@gdgXeXYc`MEwwe~qzNC+sYATA z9&E#!!1uoQ*ZA~1-@`b|I0S0GcKW5zq-@T|?G=}x89|JwZro|iS8)2A8sC49^OT&n zXJD0ZjKe^!mT??uRws+SW4Yb`cL&t0(KUWWbBT>r29fWB&g;(x(Q{&rIKx)Fb+lZ# z=80@8B8I6f%=yAK%^PUxd}lsXJr8rqJj)BUWqkAmdm@Gd!CAg~ey_U!QZT_&r06v> z8lh*c#aXYPf!qe2WuCDW;t+T^os?3ZFL%wAHEU#Q=A2&o`P&TubD?x#vaP13{WF|% z!mddiAFQ~wS(1K@UDQnX%_C~xK$;tyX}!-{6Xv804<9_kA#!~_Q|Im-;XTGUO4YQM zJy>i%@_JI=%HFL6cmIy}UTYMF#6m*0n9SfEj^NBR-uNA0Bu*J@Dr6mdC>hV+`lz%1fD;^URVitQ0sg%BFGN^R0`G|-RLgt#5z8QqoF9qv47>kXTRw_;mb)HoV90yEm*zWryxq?H3z>I9* z)XqLZ$qL;V)13~C!Q&1i%lk9w-Ilaitx@NN zGG~my!<#3@Z-0h+jL6_gK`>5wRNsD3==YmbIl(nuxTcGOlFk!{$RR#p#=sZvf5!Rw zE3WU)3S4@pX#%nP!Sp(5tV&u!PeUk8hp^Z6U)d5W<7}BUL$=!J5w>#)+1vvIB^&&c<+>5u$@tQLYm!Kvoc#P z>WLbxSAedn@$p6x*?o_(j^I4bSV~I@Otl{AX-#+bH)_yl{Klj;*5W(hwg;cq=g{_{ zKYFjva%(CLZt8=hQZ3h6L6xN_V9{#Bdq*y^c_ggjJ;R6ci@RTIwN9Flz7C zDpQ*8UgI$y7{;jVl{DYi1jP@wi5zRNttX0@_4;{zkYo!$G=i~O$E<`H_52VKM^zPp z)%D#PH@VJXyLRK7!T%co;8)H9*h~Ri6|5JdES9DNl+io7)k@7-#QWBy8t1$*h><47 zS|irEW_uwqO$g3mqOw?;G*ZjVlbYy-G4MDZSz1%a{LRRz;fzz1&O#t!M#nr)H|kKk z4eG5MeI8=pf^F==w$Z}oY3YZC+|i4=Y83P8InzeoXf%j5NRm4mv%;?GQE?mESPnC)pf|@u6Pq7QNZ+3i# zm9vHc(~54_>XLQaW(?z}PsC5&V8?-GtjcGa>Gy|FC4=kHW1=nt-s}HQtx?;;`Q^-V zy&|PxoZl=6Y;RUuuG-X3iSe^1#%ky@q|)#}xD)4-}W+UUS<9g+$y1o~V~E(uclz}-DK zj}xP59>YKwj%2Hj_P2XgZv4f5udAzn!_dfL5wDxzh7erf*p06CvQ*7JR>?vu6kr6o5J+!nQIJ_^R}6Ifh#Y_hIX zHe={#wB>dD+UO$2c{SBq0oSJIoiX4ak30<{j?rJmrhLtuFG zNH~tz<3Jn-+z=2es(%jM^}Q~<-wqSoes$c%u;cq<@)|T51)M-E0CJ%amDIAhcz7Ik?8zK zZZqM$Oq8tmsfz~x#u1ML`SHYjo~Y+5c}gtruUJJ_u-+<-*(o@ek~-aYJum(^aQO6* z8zJ|V)>x{S86TPQZ(9lef{B9|6>?83ckm%%riCr3)X*Q)Fif) zTPn+4a!6rH!Xb{BRyOY*{l3-#wWchHo*J`h9jmfZRUI#co{*BM3TD>(YfxJ0i5~K? z%hT!O1+2q(w{7#CQ!p~+j7Ykxts8o^CXk7Ms_8_7r*ZsZKsvcFP zWR}iwQuDyZ5Chih^)ODC6Ipt1*sJ(n4!dWS2CqHLx>#J-71H_=t~PRMH*bSIz1|pt z_uAh(N9zoWTq$|j8bwHbd3IxQ1)TRAgZ4O#Of`2#u&6Id>mR1s z)h*{3T)-n8Sl75Ag+z^R0Kgb$+h82h#EBKtitPlz{whQym8I=y|K^+R|2F`@f9pVi z^G=N`s8Gd}TACDfu{6fi)}%$vnU*FMtH_!GLkQj&=djA_)dp(OhS50>r7GJ9ix-cv z4iBW=f!GkHl#sS4;@EB@`UfxEScbuM9h(9M-nz~nP$cp?&lIU2ZgJ#JWz@05TlJJ? z!5Idpkzz%v#tQB#?CXJjI{{y9lh&-%jdjr31+F)?Yo@NWrjb0oAzou?*0-Nq!<0e{ zp3`_zWLpZkDvfr1X?HI{?zayjvTgH*@xUpniPw3)Ahm6DyY2m$8&fKg82!l8<5T}T zJ&5xbD|LIZ0Y^24X6s#3QtwRA_O#r#+XnUGGEW*kh2{q<5?ooz%$(5JqJ4Aj977xk zHn7yhWj@o28d|knD05GIl|~LPb16o zh2`bK@_b=-PK%*6SnsxYwN|TY#W1ubfwjcPBjN2M@$rB^j0Ep6-rn-fw^gPvO&2D+ zx}>WKkn^F%le96os<98VN76m=)>w*5HoISda3>q%v1 zY6Y56Lm(e`|I1(U^7GHh?_PKqkAx5?qD8v2+T*G_sO4?ff!?ln41pNcz^>3#f{|x} z4P6RknR`c=bJlWhl`&LPCZ8vs{g?O(d!5!gniZt9yYtX^iIGi|YH+Idn5bdB<&gv%4dxtwj9*>W>5U94%y#6yf?u@{@>pNcN_e3A{ zbKeb+0gH2%A&f*BsSY>{w49KVN!N*5i%Qc_Q%jA^ZTM~^>YXFyecgq$EKDpaO~@5b zVW9Hx>9>f7W8cgRVufHl7>(e=s9#Jp%5+IB^Ris2wdnTF8gLHr785*fh^o_1PspMG zPEA?sMQaLNI*soQqBL&jJvMsW7;!P+f=9f=xu9oPueW=%zsl`=@5E`{`1O>H@p!}! zk>T`2v4)@j$)8ZKGx=pwPyy4k;BWQ+;rO7;wx-5p`}+TpM(Lw}y|4c-(+iR-%QOK7 zw_FK>Zg!1PsYN0&h9jSh5B*vx2)xP&jO~Vi(g-F(H~74-|FWz9=C1zlEmLx9$aJg! z@xMv^UoN*ex{t_!w*OrUHJ^9pj2{Bosp$E+dQ%~drQS1ylDYXY8LKss)^)gP0V<1KEm7U_FvL$5cl$9EZr%V-HiFZ%M?> zcGKx88MjBY#BQmtkh;u=JY7`qcTe6O^x8U_}2LEpW zfd4MPoOjk@szXe*7OBOEh^e)RwH|R|FvbS&DOqTUNNdd)taHw6RMFiqXN?XUA=r+R zT52C0D`neee;`a~{h$`Xz7lE~qsC8)08h;A7CAEb2u+ytyrF~iZB+1Hx40XbSxr#d z>I$(HSepU$q8nqCJI9wIwc=XOxOYwoNg2LLzTA%*Vz%)DTOQgfx~c6y>HGSm6z+a z7o{DN(18`bj!xMdR`pxwypU4YA`c@&JmI@GyEe^|Uh<8i2CrOS(dO|KN3bw=qa10f z{as^oFowBR21cAUjDBRP`EENq#*rZoL>KgP&W%>}+SaTa_~pIo;Sb+>!|?VIe~1|0 z??(fs3C_SOPnAxmkl^tCh#dyp!+~LXq)ZECn#r>^jgoTT<~e-ugz-Qe0}?$FE&ed# z$A}FI8XU(59;3$CUE9KxZkze4&W(7d$hXy!r2Yif>6X#$2g7kc*q|CXUHQsJ_Ej7y1 zaXg$j^jNx5bC-A2?RU&&W=Ux?TFR1%MhBv$q)jurrYaa~sJT(583wQ0WD(|+NTv{d zBzDd97zePzoYcHZW9B+V(_89QY0=JGOz$vOr|cNLYLX4Q$tXo>tES*;p*fX0M0@1P z-k40~jyY4fE{SEjkaEI$vpI04lyq~rn{Mvhx{W?ZEoW-39P^PfRNWYM0*~F2Q$D2g z(y8~>T8t0iJumORRC&w!inaO~;Vc1-v2@l_B#~)noj~xAp+7d5mW|oQOE8vlqH8-3C(O9UBr9W$q$U1p6YgkMoSdZ}m zF9GMe##J=wWeuuXXbjOZgn?+30!{4K6d}aGFa!?AN4&j7r>R!Gswt!McqEJw34x#e#h;Td3w2Hk3|fbGD*b7# zVXe{4YF<913vYvw`s;`{r0at7o-cp=Bfj%nf3pMWLgay3Gne_ywA2lRTKj@&xo+1M zXK|>+F4utBs1%~=Hd9*LSQ65NA$YtW2;NdLEH(9nWVZX>bmPErh#Hqh#+aUz z)3V0K3EOKi#^OWdFq~ADHJ&g>hZy+r@BJ?MIwn4_shRiJh1LW&c&t|zr?FAnO9PUC?*ds>(<(W{B*8U@?UlJqZD1UANY9Oo#*BTvU;aRb=IoaMM_D}^4&}~#*tH(bIc_%rL?`DH7eN|+e>ZR z`ogU(llwO@MD+|B{HXV&K(3i-o|u-U!^Ue}Fbm}t30x0b@C6l_f! zAha$XoO2w817kO$Ew!lZi5nP_O6pz$-K5)A1~cHTV{t|M9ua6g2GyD!f2ZFmqS2hW zR0cobf_itkIH*5O&L8CD$tr^|_MW-IZ9x%&yNe=JMr&0N+dG_raTqy<14ckfqO^)v zr*Nn!*qN5DS=fLcqsM$zs3eJ)NNcs2Ce4VZ1&CN_MzA8zm~ZC&ZvcS*4!-ub*pgFj zA%re(x1w>Cn6AyVAYzTN-g{~4Qb#k2s6`(*9gn6+Cg*tr0h$Pp8LG|}y1=QKO+>2&Mi;QKIA+oA{aCI)WIUEj8ED2`#odP^;>0{{kZJ>DCt^DKG! zFg*Zu;$Dj7G!8f)I9f+*g(a(#_5RmL10O8T#clYhbwq%^6ik?fo7 z-63FB$8I*J0s`|gF)uUDdyU$&j_A$@-+8VW%o7Pr%MT68vHI=ONE79g~bK2df z;z~D7Yy}@q#KAL`!gaooT4o3b4q;GVg*36Gg}G*=Ywyc-CSMnZrxW96Z-`GP+z|0m zo2V_Tc&!oLvDRP^W7HwvDtKa?#RX3|9n|f$Hmn#17x8$UGddhv{qO8FHNlvM^-&FO zoN7#$mU^^~@E8xBNZ0d?TUKMS;291B{&=Jn&2ukHQb%Cxbt~l@&IF_wQl6Q=I`iK&DAz@$5X#lNBMw<< zxX?9=(RUr9!;67xbqh0HZtMnoa|^!C3*KncW2NhO(e3--JlB-Tml=B)5u0g4z)I7I zyp~z2f<&!Fu zw<+YNo(Hw1ZmJbA#_Da{BMdzT=L5|a`+H*W4j31MM8AMVZc~R&WYSpQ?^1KM-K6THI~bK;r;oAwq(*W zenDa>C~-Ka#Db-3AU;f z%tQsNwvBObl&#Y|a*xKNU0T&=R#17-O8qq!?+q?G)q*!o}l^Y;2@r}^?X^KQdp z8nsNDs&*=Ui*7C17^LQ&oS~nMMeuRp=ntyzww7Ty@$~R1kH;r|{`n8FNvPLp(+%r6 zp9t3CeWbQt`(8)5bvaXO<>m_Bb=YZ|@q_2`#V>jL>)!_#sY~H{RmmDX0i-&^b-CQ# zFV-1O!x3-w9yTp0jXy*@h7bz$2zC;_G2kS^lO+eQk%@`Q_QYxq1Q%gE9<}Ix+ z;-vR|wns`wuS}S``rj<6s)6ynW(`lG(CBfNNSfpiGA7 zA~8ftskANQR5hceb+avzJ3~O}O^R+|737elDB~*Pws$ND)z#i8`0a*Nt`SOE335Xm zpi>oF%gjsendiM|?DMA$Fe_lA8-qZp`Bqenx@eDmqnle+VI`YafOGa6;LT(4ZedPg$`88exQD9Up1ST$DauP@h3vr3nDP7S8s9N+LT zp17RfQRal53vmcHbD>wDTIc>Tr!Z04O!GZVcGVFs! zjF!?rKf}^0DJ9|wDml09ENJVsFgMwT zk{EVQ?zQI|TDQpy#xQd5ktCV-i?VB~PO1!tL7lcOSg~Ln*?DClS+5BmuY|v9s;`6l zb-D0z(U`X?3Wi1RH?~MLj^fn#$+2oKV~=Qblva73-*cTVT;+T_!-C`B2TI9IsT;-A zH4e*c(iQsw?6* z!$}9;wHe=el|;n;5fx2saU4A+-Soqcx);@4w}z?IKXM-7cZalv!DHl<*e@VwzCP;>#(v= zSyKL5mU^SX>zFt1y30DaY%%AVae;?VeuK;TD~eQn&Q#H~nLRDpcKOAd!&5)=7N#;G zrKt->k6iP?5n|*ps!qC;&aQ|zJ>4}=Jd7HZJGj7UIFPC?6G~Z_QtF8pi7^Zy(is}N z^TJwe2>1|a&NDtd5Z}B(TII+8?4K#^|M{W-n{%&j%pC)=e?V0V-WXyWp!Y7V73L+e ztiN0JNO#hWEjh?&oM5h*TDoVAKo|xd4^Oxd$Su)%n%fzugWxJ3(gn@6&J-%k^};pJ zfLB%v{{r>DJilh45^W$3hmX|%LMpmYT6*6yEg!G{xADo`>iQk-ryyTlhtN&`&xZ`` zSM{1MOEBFya85H0t1_P+Ej#5&d!}ulQ%E9AOZ}k!KaAsM4jEPkXOHvSA`|=35M5wz z#1wS6WL~ZsCn@cQxrkAQk+V3XV6HWmQi?|Itv#s-hcMur(`U#SV)t2bR#`lDlePdT zLD#;Rjd^H{QyE^;IKEN~t-Y%M<|eu_PJdUcjRj=`c^mLf0);+CM1_zOs|LQDztsgZ1&C9 zHvqt|1O!-bx(ZYgG3$V5bTNl@niRZhR!eOXT5GLg^sqo`E##DBo~|spB3_kFa!1(g zW*t>FF1Yt=nlxLV+%4{Gj$>Lo8} z`rz$L*9M8e>G+^cWldbBi774W1+b!)J&xrNM>PmEMs-NF+||}xa@X$d2B2;PC{?xt zww12YH5xxM_5)bA=Xn<;xYu*t5Epe#RxPr_kZR#FUwad2wjtf@3drp`G-Vg$e0Pv~ zXYtl6Kq0q-yzM|4%)Qmh=FVEPHpgYJjnhWs;I+WDT8TcW=8u~m`Q}Ef8hYRDp)psd<+fK65^D`%9JJ9H2g1Vve;PPFy#W!Hd5!0?8?R3F$dTvx8Lhf9m%bsGbqt@3q%1G2vzUGc6Uasd4X}ogp(7*oU zXdGb}dU}Avd(UYcd#sZ(OqO}+n?E(CI)($$c$J3KLf#ERYa`m4ZeydThzIdRF;MwxZa>9(Y^Ocao_JYQcrtAMZ7*0$bkN^4Bhgw%q`b(2aMvt!7h z+VLR{SgTEKExJ*dYXxU;&GHx@I0j9Kn6ok{wmri>R@E3p4CiHHaR!smJU^dF)6!#E zoDQe*Aqzn|1@#yQHAa#`N|{T#==1259xldkj0cqu30OSQ_&XnhR1;YWITc#Xw6i7; zs35$NYu;=~q6^#7B;`V@7v_?-jnXE3^bVZmnv%*0V&u)?#ORL<-r@0Br!M^0vM{BI zMXsH~szf!(mBNJNwmYc$kh=pxd~gIC@z#@e4(9?&{kC4;U(I^oyf(S)gPn+QO^G~T zNF`&vhi23VNO^@qGMT`pMb_~l>xIZuD{k?+3!b+Cci6w=ED zNy`SVh%t;IavC0Rz+9H?jD3AZNvSyNc{@BZIF%*6_h(*~mzx?6c$v=_3y;GihoFPh zQWmCib1{+zQ(knCTG?w>>B>6%517M&!^0Ef(PxPf z%Y6MS>;L){tS%z7m$i8BIS%TH)I>djZUBG+jzbvn-qWfAq<5ZPdnTK-E|b#5)_?+b z#`!MAtt@%r-J*uw*6H%Z;qGT_5iZlUr#kd=`gIZA8Geg_c}jRQNzP4LYqI(*8Dp?k zb3m=N)*EXr#+G88F=Dpn&{&Kb2G;)P!<+M)uWtZ=U%~dj?f`(S5tXL1hD4nzjbf(? z4y>(*^w>RPRA*yk&xnz#RJqO5Qd-aA-WJ}st&>wasBFs6_N~Z!<1p=xx zq?8Y1|N6P_F@!iEQq?e}7IiFM(Pg8J2dGPGaG|^E-WU+xh3=lJ!_bm7XMTN;`hB{A zUaFd`ZLwv22)HYJD+pk2w?Gqv)hv>()m2wrc_jt7XC}1mfA73&x|UqGthLq6yio*l zU7#wX!WhfZ>j0aq7IypU^Sdm%NzjCOLteAgU!BBz)`VTFtgM5&;q-9CJ-$(Q*TaB6 z9QfAv|2o(Cf<0d-%S`ER^d3V{;WMQbrn>Y7rD}ogW`D{#(VTIqI^=H{x761>Lj{e( zf#@`XFO?5-&2^(J*bq1jCq8-n7RQG-$PoGApZ@{N^O=0UXwePAfKaMN>D5%IOJaHd zLU=ebym`Pxhd6bPf1Y1>DX$EPq++bssIhp!`M}j=e)*#xslUN>;cz^4$KTbo$kL?Y zjoy=qZU(gJ2i4RoxWH1gN)L8^0m>+8okOH7fLv8d6GDInOHqxjwMGx7Qn^mkrZ@D~ zF~)(^%3iF=oEGLj0C;B^oksaJtI>AOiAGwr-9}w>SZGyx3>w(rw~enf9ipsv#J)Xo z)&ic~64x|$8mmU%nbtICefKp4uhEcI&!AMZYRvoXk~jH}(alEAq*!~zU1JP^Bu&kk zjM?3bJ=P#taKiJ?e@41qsnfE#G{5d2)@$gUQlutkoB|Z7UT`sD$G|72C&odW z@TDxIs*RWRZi}BPrD0HAd&`CCdZx@1-mDv7m1{ZMSumpR;wjH88_=t?Ph&i}Ks=qg z@s;U-Tp&87A(zsaQJpe4R!8wWB8Rjs+RR1IaXfMuMxqN8V<>eu zu&&n}7(*a-c2=s&Xj^}DN$IZXHqI&V=SM0+YZvw7X!Uj$NZk!z_gm+ZYmcaNou&#d zM*MhUIGq@uo`{DdU;gCJ`Q;z~3Hhwis#Y_v?*}JouRz;w#3g;@)l`CF44j4o)~*}v zOzz1c%``6W-(j5PPyYD#`2N54uah4wN8akdGeKDvqzI-p7Ad$qQCqn`Z>7Eh#T;{5 zIQuga9;gV;!DBbOd&yTM=dJ!fPcM{q&~1CpA7OWBJlJp;!8D4oSZ{H0WH_D}pWYCU zM_xYvoX`L82iRO_v--H0)kqLS@PW|le-mMTB~y&fZ}oq!T1WTy*&U;>%QxDq-H&eb zbt@aJqd7f}r&G<^suV;|!^n62U-B@|`d+O(rwNBGyYDFkJqvl(@=l$oUXT%W4ZBw6f(g?uU zz*zr14x@&5A*ku$>UYpT>@1Z)rL^9wH39OL=65Hc=)>$K>9${16BF7d;IvjHYiUgg z*fA$sDR>`yjI~8f!}l23Or~bJu^D=e4$iB`Ox>Gr>vbwkuvWISr*wnX-~(dR)UQ!D z8O7S0ORHF?{mLQ4`xF3RUgj-Q+gneJBiRx)#$cT>t+v$# zFu$6~zF`4;0|5L=fq({-e&gkT@DKjM|Ni^m|Ng)A8^8IR|HG%pxBnWBqcc{p+O@}F zAo@_p(^2x2Osd&f?DZESKa=m=Wk8RwW3clWf$%mUffS>oGX^kO-z+pIG zgJYhqoUfOgv7!CAS%sCM}61X`@iJ4kBc0KqjPxZTQSZ zUEZy8j4}3n`EpzQ^w*GcCFNy1A?`A*MP9T1HtR##P}-iqZHyY3yhbwi4Z!Opg}U3W zbub_|b!$BwPTglfBiEMYzER4xGB^bb#-IaTE1UaXrx<@E`}_6k>%;ZP-QSlUcO^7z zu9zj`=EnEG`&&#;&%A&Bk~YoMl<`e)Sk)^p7tNXOjjNTa18^=MY*bBf9BiaX(;;;I zo-V<7Gd^+%CmcqbOY3lEy=IN26h+m0hBn8M<0s$d@$iP9{KXHLKmP^k<#IFr>&Uyo z;>D1&y8avI7@kgqaZrOu3{KRUx2F2xb_BTQg_^!1m`E*^GA-ough9xy(58tC6C#b$ zjhuopeFLE}N}JK9G%CVz7͆p5@@MJeU3bAP>=UY7X-gU{##HfX~#FB;=%he*V7 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

kd_!1jyP!vsGPB8u0au-QoH<$@D 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�RR>OC5E%Me69Vx8k6p)$F=!k2WDfPHd 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�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%0Dih}uef)yYkz!v!=v88sh~k&iJ+N)C4*~5dRt+I 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

Eu(nV?CsQ<#bDQi1L{;52E!>^9l3ZZ$M) zM-=hwDS)R$1H)~rNXd;$bTSHr0SO$Nh@(=i)uRU2k6oP_|85l1^H}Dv-~@nv^c%m{ z{^X}W&j6H|EQR}WXC|e@$neH!qbSTK>Yot@JA)n?&Ff|HjnEAD8d=7Zp;$`yksW@J z`^Ia`&hTg5;&6LU=!_7<1_T@Rm_jg?WCUU z1-P7>uNiHRxSS=-hn(uzo4~1oAbR*b-po(i?Nr>zOSYXwX0jiH?i4*2-Sni;WdLhi zM{(7e1O^?&@-tmAae5pu3>~i*NM`1_$f3{lBD_5Pcokew1P;tigJ-nY|F`}_au{*GVa-LJ#LF>4UJf$A-iN8G$KhxYNdZG$=F zMs*RL6~)LwA~6kluBG5o-jJEFwd&1}i5K{>{)p`UCM6eK>20JSD16;jV>F6<=3a5k z!x%Zy`-hXcUsIY88dEo89M^Vrr}(bhOo`CcHPAV;N2Kn>*&yIoK+$!|c2kORi7KUz)_BL%0@y2W(Kmow# z`)v%+9{2x!a9FaNbe5b4JLX|L3&oAm`qC^0}+#V}4(ReXK>jN9!U zFhc>5)zeX625n-ZqH0hk7*Qr7FejGQ#Kc5Il+?@;6Xl#a=QR4KkH^OV;JfSoV_fKK zpKpMojS?=MHfbq~849Ge#3@nGoNTAm0j*Zl>Y7n8K$B~Q#Aw&SPALE)65%a$C`{6% zjTCLT)q!tBV;wOZ(qaJMrcWXb_ic4ktJY!&U?XF6>Z~AY`1-y_05UTeKEPn+5q~1F zpl}$0EIn70I6MFVX2wE!yu6yD{x;c@OLr5EsIGm!tB@pd++C}eIHA@xGH>f}^}FT^ zu5Uj8Ah_Ktwq3{F>eXE^f zIQ@)>QA%<1oG{9nk+ElJJVg<_&LE0oma{s1YJvYeb`}xg)Yu zr)xAFuU)z=*7vp6filj+AJGO?&je4Da4q!s3i1G_g*I~^0z@t(ESedR4>5!dR-Y#l zG^L1sB(#`=8oEog?`QhN01W_c>x$dDMh-detdj|8Jkv=BQ^Yu~m&d^dbuX8~!8mdM z7BzTd-5#5;ln9r6#ZtU^l^C>v_BBgmZ9EQ9=nE*d1rnTh7DR8}<{?K9hbHfy&S2{(>Y0lEFw|>$#0#S~;0ftfYk1#)9DBxSzSJOEq3nJ*J$dA| z-Qs8M5Se&xIK>!$Dxc%rI{PG%Yrhk_nVEkizj*r~>QWXg?3C^n07g!PL}hwy9Q5}6 z^9}>$dA&AI@*t%{^Vo+EVosFr>-O9A(_qfbY^B2*Z^uE34-+rQoUpbqJ{_#9kNy99 zwEx?We)GroKl$m;uh?UpbIjp8^55&d7PXzsSP;`O?r&Th6JzxnEQPJDhwqY^a9J++ zvu{7ZDvY~r9%m^U10Xuqun!@AG=7wVSvQVX44yfq!F=uR``tva8!a-q2SiQ@1jDUu zXrbfaNUBMbua0|Rc~XWzqwbI4lzW;D39!MY^9F2ng|LL-uru_`{IygSP+$8!4Z?@3 zWP}rw-_*>_)9s)Ej_rhw(%+8VxL3eO1Nt!l_xNJnc|rXRvX>phFyvGMIdhtO6VEyB>nPJSE(mj^dtG7MG#$2{3VU3r zXJXadxCq=JhDl=r9q0y8qzO<6mRwuC+U8E@O`xWGJX)9=S`0VbghfW9LL9{noeDPF z7w?ihN7t1AN0;`stzc#(_Cmq5q511rYz|*X^Z&1c0U+2jWc%~vPk#FI0zm)dr#~-0 z`pqBLyVV1N)lIUt*btc$-YyrsmFt)?S8ZVq7Ww5tS-r2@!z4UW4p6ckrtGaLQZi(e zsP`3W?eP0u|LxOZAQdmLyXMc-hC{rXy5oINd%OGdMs-9(IxW>ra#C#m-Po!tjwR3= zkva;*b7p-s4R&m!F$YJ${ zKQ%|MgEmPlP7TE_382U@rgZ#_DXvplZ4W^Sn*IZt4ns;|W(0*I52IBIc7>`8wt*w( z1%u`VdNhD4zaM$(>jUk?cLdF_1YQ>S~h#6H@kMNZG(2PcW?kW(%Syl?lzF@7dR zI$zs9*z$Ad4Y)&hWHMSRLJEe-Q4fE!yR$T+N$+dkC0z!Cqf_bo_2KJBAd%x(a0~(5 zM2~_NojIXZ*@t5>OswMTNk>0R3;?}`eLW#kX%d2Eg>uBwPZF}C|kAJm&7%+c{F!*Z%G_9S#?}=RY z$Q-6=!0Vs0;Lnt=@OHgY%7vMHRHzo6z4$~xMU99lapnr46w^)h;kKoZ0l>!q;Jbb# zVpuXH%cLrlsc_2KGN+VNR)9>TSyO4!DjP8;;>4v;Sqgu;zL7{p>#qLTIX+C`3y=~@ zS)fpCZ5sv-Ip$;Ln-5krVSK%11ypH*qni(8@dkw!KJgt##j%;U@qbH{{G2Ke&7a`gBKryFg+i;KXCY5UCLH zMfkviikJF)e|O`BvD1uCbDwxv-5uyp1Nong0L#P%5DN6 zKG@^xIvSGMDU6@4pRkmM_w9z(jz*a|bD(c{(5ueWRys)w+Jp+6o8E&YVO~Gtb0y~S zJzF5d1L;Wx#O&`o#SZzPuNR*^ZNTt(z2Ua5Pn-HLH4-z`Z%1bMx$nV~?;`TL9WB{2 ziU~d#>`iu+M|!QOM>3Vpu0k)S1X^XpezGNW`<32YHWRF3u=?!{f}OF@1|`)g(-gx4 zJIEQDIyL-Q%;Mo3cbQ1P4m+}%lGA8W2sP;4UfAyqN=^*bW0Cv}?V#k?->YK!I3VMP zd#tegAan^yr|90dJC-nC?Q)EHXeFvpF>t1kA}sq*N5b5b8BmP1(6_I4l*Nz_2F86K3=BG~KMX<|14m~t z#E{$spYQKI5;&;v3$E#kEmdr?9;8YA^LN$=B?|4ZCy7W584i*O1j-9`--(=1B_uYJ z4m^h$mfAL>0@IgSnZSm(!ga5f|by8mpb)jxZs(4Py(z@k0uhrOZg6!_bA z_cd;2WOUG@J(@;}8b04|4{L89xJq~kP{gD4>&nz{yRZ9wJvFZ%`~UZ6|NqNB`5WyI zfAYJSP=8EKe~o|Z=}z4&kbM0+#8vki-c112AZw0!j z#|0;L6ivM}d+ox`p550i9c%zc^BqYilOZ1(^nD=YyY4S?-&WkW4WMb=v@h}0=((>^ zgkV42|DRM7`h|VSy&n8KE~y}wLMi3F3OB$^JAWBXB~rEo<_9x{4T7mQV_nF|K2iWa z1_0mfgPBO&@WNDKMq-Qv=7PLr(yCBXQ&CdD$jpqidr1WXzM%0GMKmFbB)~O$#;2GD zB2_^-VPQAcQ1eNk8zZgA5qDG)BePR9XQ$vL%&)4*j!mF^W?&Iu)z;n-@1VffQO z`=N_CBce^*AW37IXw!N#HQ=HO(QWV4cegdr$ZDtfGhs;ud?^q!eAaEOZtGlNgb|jb zM1cnAKCEEV{#85ezs4YdV{#1ahJc76fcDApkACyVW~a>#WQdOTN);@Jxm|2|vW9DzJdu&<>I4X{Ds;V}(clLPwM6liGJi1AK@ zudZ(>T(G1ITDv_o^Bqy^Wz83t>90Pm~yc=K2Xs_9(L3w&L^sHmzr~ zMtvIGb!vQH|MV5x4fyK%Htxx-yX+riJF&3G@UIu%-2jpzD$}503aG>6^4T?hNx{x2 z5tkU(T{m+y)wpl#Fevl&&G*Z#ZAaQSIStk=tq_jw`mmmg7{D$Oxs=6+7ODUoSze-f z+2F6=n!l5okF z@HtT2wmT3}))e({_pT5XSOXfltixch&3-5U2?N5v!-p-R=0<|_95Lv>(_e<;@2~kB z7=AtGF)(PjquRSIm#b}Cm8BGW*#FfaO%!C*L|9Fr8YaCtg{0u4|Nj^Oe8&$nn2Hyj zA_5{ZZmKm^$y+m3RSmO>iS+|*4brOK?{~YccM{Ukgqs;4=IlFi$`MtDnN#E0cMfdH zCx6|I-|riDsMeIgF?uBORzXZrML}d(Qo^TP4(1-6BCJqkcD+z`OV0RxclKswfPHez z%z+$v8i1LBIfFT@lt937|V_>-uNB z*Lrerf8CssJwfHpo6Iw`k|{PpFMvHN%o`Yr2ALzuNmR#1Pt6^HJFV`BD*J1QDmK~B zOh%*4xlVVcHfA1f(uR|s zp2Q7%1h|$oXqf$;zt@UwqUgIGJ#@`tSY;jPUq?S3!JLernnK7XgE9W1)4xZ5dSRWz zq|*T0x6LWlrvhT2uC$|LNQ4V#2=6hUhihXR0>~5JgMMDV=)G`y?xDO08tu{Wk&pLN z=y_8jT+0=O3&8G9KYJt`?_(Xb?>#+`LEYDtXrNP_B3syF#Ht9^DLT1KxSbv6Ps|aIJ-ayFlO3IJCRi(BZS@dU_mr{L&tbT?p9e*BYT%yf?wK;K*E|gq zXf$U1dTvoHi?sNjF&3MU)RcDC%U#=Hcta->&;GgIE`b88FWUz+@O0hS$)8aH0Odd$ zzckwAK2O&#vy%aO7#~U-+GdxUaiEgh(1ja-D%)T%>~g%L=3C4l)s4(LyM(88eLg3G zDu`w4PctC>5u*YyWao**Z-HlY5(1S z^^eP6_^rRT{n2m#-W!fo{~qDo2L!WBpsjW5wp!zUchs98+EDT*TraNs|6DhGzP-b& zftaB%=rj;WkxGFiaW90Po})H3feC|)%iuDnu@F^pGi)C)5DdxXZPEO1Qc;`N*NNG$ zfvD|AoS?Rd2e#>)(1D?~2MomC73aY3b>IItskp7{PWvB>Bp+O8c<}TkI_C@}!Zsa? zacw9@T0xHlRM21ytDF0g%ZAxS0H#n?Qf<^TW9*~Z{}=##Pe%Y_8B8fbRow(o7$Qw! zWYB#8;0Uxw0EoiGH1zmKQ=b|0Qt|v+g&dJe5ws?UsF1$o*V?8D933XGfO`Y@V1Nh8 z&g^-e(L+G2;np^wZc*sQqEz@W-Sfx~J=~-o(WJ*BmS(qv1Y&0iOgSjAkf!ndR2ynj zC@WI(jX@hj?>Aft&_t(Q)T03}<$}aH1|V*Lg6DwR63uY^;&Hb221i~07|8J^6>F^nX=Ta>D&528K8`^?(&eTGfWqYkax%vn5nnyVF-~eve_$jxP>ampdlbRl z9si8tICcO2h|*HmeC}@2dpsQvqq`Kv4ZVn+5;1UgH(gVm%(?tML|l`8(K1lP;cOr7 zWW+}bush=G!SNWKHqu?RgJOIs7kAR`o44($0@4h>lJ}RNyBGX9Gl`uPoTJX+SiC*yVrVf%b$k_8VJBc`0z7F z>WA9%ahT!XF^xjFQ}*ZUsb8z3`441ztB!W5i93XwIMw+DYNF=No=uF2#N9wJ;aV;z zIfb{$4Y%4(+TiX&?w$fEc_Yab#cniyj;iy)*sT}4Z_6^8v7QUwOwfW7o;mLb)eFgq zn&0y!Wq_OtZX*xAY~gtpe5LVl79bh*n;uMUX>C45@)0SUcrD}Z%M z6H4H6JzO3hrFk@2JPba@{!i2XHYKT?&RO64I)k9o^XKos)f)1Zc4YZPbNRL`qmIzn z4+YPMiVhyo*h>y;5dbBDiDA`t9FUZc{r~&0|NnRY)juWx^^bo0_b6DLmkH$uJnFgE zcWeB;#`9c`VTM}QeNvbJ4THpGS-_cr+GVzJ&7(^O6S5YF((pvEZlWEFje`aL;-OaLkGALx5hF$uv1$|NP(m^|s^%fB2K%E&tJP|E($(#mPb6=|(zg z7F0F^CEyYhYba22JsM3-g>Fh5ly({U-JQlLYDg@@QP|}SX`nr%76vpxp&co7`N)D6 zadG~-ZK4hCS>vGztYT8mqP=q61851RtGd5zgY#*h(Ne$HGIOYJJc2LljYbyuxd5l2OpoTQqe*dbc>|jcky~49NQ46ox))E~-CJ#nL;8k?s0}Ce zVa(OFjk7zlJweA$H@&Fgk_gDzi~62b-)}X;xHdb2!jy&)U5#PHTnLsFdRu;jm=|l+ zn*Y8K5?Kt_S`6wGh8Dw+vKv-SwA3CM*b(w7^-%cr=J**(I8((t1-ny=JA$m%AkFqh z$M(jbJ1th)kXY>A352)B^{=&6-0J;MocAWFf4+WAsx@rYQx~qw6=DK3xT#hkp@#^y zBw%(kLo+|_T}{FScShE|8Al{bT=E4aFSw*UkiVu4@Ac-0zci<-<|Slbj))#)9+(UP z)gaVR$`#kkn;RU852YknU=K||+>h?~?yLhJ%n~XZS`(~te;Qf0qem$uCi`H_zl#sW z9I19Bv->Wm8@+G0;wnC{<)A=7CXI3z^u4*l!+^JP^`?a!9PrQLhNoTQ+=pV`JnMw;AMfcte9f8na~2OrS)Z_k zPD3Gs?3P6AgTPD3AIuE*Z961>Jky-_YuaGp2cutHyM2)8aebY#{;~gmxBLH(e)Grn zCqMmppT^{<)q1Dc!JR)B|9y!+uK*-POlAo`?p5kx5c>7)GgjG<5@TyEhD8`n?ot+* zD7H;e+cwe=6!tQt-T>s#9m(!&I`H%m>@ArX#^n!0jIcjUT^EMb4J0eTCS0MF`^GOk>yibsu?lD*gWMwLv zdqI*@8fdb1oo1`JS1-zE_iZNs-;x^Ew?wFZ&=!kWva2niXZ@wM{4YfWtW&Ies2Z_M4UuTKQP40}x(9mPV_9D8ZJ?6-f2pxTA-u*G3lm@PC2ea+rKws&MNWqii5MiOK|p~ zdGGA^hL#QnpT0Kw@HwT3i;JOHZ#>qzqLGYYhO=(+7<}n8)ao&yJvPr7Nxq%glcs^A zi9fH~^IGKQn?3_iiHBD~Kfm3`u?w4+*z1s}LAn$KOfVJHBu7)f)7sQo2(G)w7(m$* zb|uZU?-=g76F%X3@%yTVJNjLp8{_q1&mJR+(WuTo39q6(i5N^7mvjLq8d9l`{r|h) z|9|wGKh~58fBX-A{~8T`#vbJys27&FHI}ID%2q4P)O|B@MlNOeT=l`kwymJV2l*Mr z`mz|IY2EL^&Hyrd)O8S@7(NCE{ber6kvPY|>NzXxI2_XhYvnv7aKf)5r8N9X5aT%M zpF$OFI__KZp+L@gc#G}wE`oNZY$U9O7|6Me3Y$5$Vbh=h+xz{ddKJAW8VrKz=6Rn<(*kb3E3hPDf_BL2@y z-o%`8S<+j%Kt+6d#u@1?gE^s@VQm|l8s67?yn>s9h$+YnCApj_kwV$E@~ZoUpC}Cf zL=OgeIVD`eO}DoCuz>h<&o^W@E3qh!C1}G@R4}^ne?eu}H@Q5b z7a_htS{MX^5||7N6>Mm`%k-o}%3N?aH~Y&>NSO{1Za&qvLAlyDO;=T|+XihhnGC9J zYz}oNe&Kz(H){OZ>14NQGfD63O~(d5(?#1(Hr(Bm0YgJw?I}ffm>tnBR+A@%!Z}jM zwSOFX+m3?oSez8?*O5@7AXIymHv zi$SE0Cb&~tnwNA- z+-ZMFdp7n%lQz(7_mFVc^1Z?MqCPmd%$&PV0|VmxE@H+dU2sVY-nZ40VMKA$6?J1QEenS5$3y-yRtyOy1BYGpI32@&UuVUUZlHgS-j5 zqdox7wm%IJyR^;V+1|uH7(2&^9=u54%mGRSR=#?>yU>hcYOdX#nYqnJVt zv9*f(Rw0`YXZNE_$9%t|>D2)~1ljJ;PZZ{^Wq@HiX!tl@H!mb!^RR5+7R=)ih=J6v zWrBsQX@4C$)C}4x2!tGiAZ8BfK>u8wxiRf?CSY@h0183c9V+g7a@+2xlu($#)#V28 zVVsRUlR(K+5exuY6%%bDqEuToCN^XKR^`>l<6{8uZ+-w^cxh0f2;{sqRW&kIGZ2Fm ztpau1+Q0bK|AepKKil0Z850V7QIJ85>U}J%D4YWjo zpM3*@FF0m~lsk=VH?~1&s@8f3ln(StdgL6$0_D+%+63yG<1!)s_i2;h6NPMz=Pf_{ z+kbWa#s)+?nq+rLiAo= zOxw*Kj>kZ4MWJL5sAa#7d=k8c-ZA4^uHeO)C?XBb`2Hk-odUt+^-dR$QAEsey6+wH7IZkN?uTse~xZ6 z*Nf-1RYcr7mhrxhbnF`urd!4yyh zN%tjqT)cW?-Ww2#;b~!i-|pt!?>i06twJ8Jz}W%n;r2NhX2G?sDcRwkd4~EQn%sDu z+x?CktxpF;zHaEl{re>|#M$Rz$;-Ib2m8S~9XNrhBC~6gy%EER5_`8h#AKMRE~Uh4 z&^Y&E81ji{YuL3ET+(&VK%dr?nd0t4031v@9~#1W7@cT0ykmOsyJ%I=+U?N1_>vw2 zf>!aq-CY6}_stx!Hs8Oo>JG-r5<~JtV@V#*It-f_4^3G|>tPlQojR`fJ8#(PwrkzR z-!D^gIRZINAZgz3)zjnb!k*aa$YuF-NFMNE4xa!1y!KDmtvA*?MVwA48#9f+S&ic= zsEu&v?LY;0nVrQ@VS#X`f6onyU~Bsx=1A<`*y`clZ~IvYX@L(n>X9=2V*l^QQp9$T zgqgL~%{h^d*Pz%zn$_3ekNy9<-~WI4vtJMZ`O81~8}^4k`P~(J%-;>bSHa@E1Namt zwle@y|IP#-I0HZ_3zlWULJLaX@b&sWj^ZU}T$T$q*&wUHA^a&li~5!_8MlVnUfHT)JA*Y15U9o&B=03NU1mi6vsGm0;hyjl5;72^nZvB^bxw}I};Rn zDOfoB;-&&IpmMl3?-GCWn*Q#=qMg*Obn9(GPV~Kmnj?Fe+F&*L>o8uULKIg_G zOx01kv=@oJ2?WJ$deYYu39?S!DfFmi2d2~m?9|X4rdN*MD&Fg@-{((y=x|6kdMu#N zF^c0JbUTnndemc2#Sn$00f;7d9`elB#K|fA0oLf61zVz|o&i`nvUXio-~46`lX#|Hz+=`jz+mNP3v)R_feT|dFh@V?&g zr|+MiqRnFfa=K<+SMN+Io8ov)U&~s~=z=q;1!@{H{#Ejp69{--#8SRw@9jq~g)5f$D=IZL0zbH=urGd&!{EpMB^OJ6ovQ7Q?T8 z9wH4uzwBtQ;a#y06CMpdF?ovhf&FaQpP0R85TKmNXfz5F#3v%&vmd<`w5lF-Ua569qBna7Ga+x2UGr<6zZ-O&p0=%1Ze)Rtz z1Ay-b3!u{o!!c9LP>52_DFN16iegVeAoDxyaYTJt3Wyn1D(-CyN{knPi88L2f|N6a zTKqiXl48Bvq#-qSs!!lm&lSlwsKgwmAZ7|N4MxxI%AXvr0qgS{j-C`%LjyJ5%U9s7 zZpb--@OooHFe<85wAP0Cmk&N%u22?2!4;(}Fb0}6K>Ngz4ivnUGT!n9DY45KGzuKp zn6$=pc;asj)c=Cr2(ZP5(j@^8l*oPJ>j;Rkjz-XR!;eVLC0~(~H=W8r8L13(Kwg}V zzCjE}D&=V!?n50nRk~glBuWpO_J@LZGFWORu~2PN3VXh{n4pFBvAgo`dDlCNNkkqUH=T3p_vnmpCU#x*7y|fb214)3kH`y6@o4hI zzhJo3<7|qjQ!!|9nXVx5*s%WmzDCU1@}s$*ngnG(wsLN4zreX$!Z3)Vc`AtyuOjLawc^y%2tKrXwnTK~*;LI=NO^z;y?b~3kP?y?LytV1ORtuo6;!pZ({ zt#xF+16XEY5&#(lL37`QR@Y#E`gqQ6wg4Q7kCYtnA(j{W~q$SvE|B+qMom ze%JY4Ql6w9`#{NLk5!xjpgDF@6c0nRlz5oo&i8cU66S>ZAPwouq_QBV1cP-{ev{0$g!hx9J>&gS}MnwvDD}tR-K_ zj_+%2m+71_^OU0T!lNVoU_Cv|gyiAv1PQWkV=dx|cBiL-f*G(?9|V-_egqyV+(ry) z;*4C5=k2MiTzd&%%`r87t=i@YwC5~?`tB`F^3ex2Uir##+RI2N{X8>7L?NQcMo4Ufsl`Mv|Kh|%%!!6Q z(O^x-zD0>nVYMHRj{(4U+5GR8o%4J{}VIa|1xx1NCH>RsqM$hic zjLQJlR&nK>_T!5S4U}Zt)}d!LBRuD}?u+&%dsL3JinU2lnSfoC)Xja^O+;o5|1?FU z$)s@K6ec8b+RRiP$ut}z1N*1lO^JdMCCv|*G0MVTtcn}62^;doU2ef09Wl%*K#_)D zwXeru!Q-}~Al^5@5_GXXEiTg#ARXu(0RN@G_t)z``}_Yi{pdG;Eazg1BX{@~j^s;T zu;db(Fb)l>BS&6n+X#vin9ZAjMN^~C&6K8vnWm961r?ei<8`Me9yk9Ph3v;(PtEN- zu|8;KrLG&{k_}ZUlGGkz1HUk~`HVj;voAM}aPMwziGNktri5r>^%iyVJOF zKwqB#8c+B`M+Cj3jLaEL8}4-*?(NT-g+qZYjszd0@=CWQjppAX>WBuqQbr6O?M+e? zyiRd1ffCyh#eY7zMQaMPJJQ87oUeF0T+8!7#?)|MH=sDu{R+wHk_Mo=hwk6=A?0A! z_D@YrH-IAo5@j%13<72puR?>pFkk;$wFlbv*}F&x*LZ8!(VQ6^{eItWh#Adu6VKD}qXVnqsNt4Cb!WCnNd?!%*XI_R`}gfJ z1;DyAM|3b5&c~KcNP3Fz$w;uyewpa!M07}epkQ${*de{7GaN*Kjp{B-m^9ga-M+7z zU!Qo?ia$GtZ_K@J? zJ~0@E2En$+oaQ_=HAj<45yNMhyfj|1I6E8Y9N#)ct`fUOn=vKAeC+?501l*eD9KD=;@3I%Ay3Xo<${$r z+?x1WZvvQ(*lgw)aF~JwC?#Xz0+0{v?rn?v*%PrW=sc=Ayhsvf^r|+&!7v6O?k0)M z2^$MUyd15q#ron@`xO3MMxD{4y9wcmA@rMGK!y0}*wXbxO=cFr<{-N&RCG@G$`R{yd!O(+P!5Menz}z{o^| zRWuPZF)_iwOhl#dVRE=_8;lGBcg7~BpoGozy}d}vMBtprS$`2g^_X!PO3KCL{ITVc9)G`2Zpkfw}831;ezP?MKO@KP2ZY&1D!C5y=3m~?ZM z6IIrAPmBe?Rtam{_Rnf~jD^A|LbeHn=#hZof`!}kXTM+8fA;tPY5q$;`On%tP?))( zo@v1%hDsHg_N-;3Jesm5>PXI1g!E!)j=$RH58t8)pJ=`B>n#RMt_#a#L3^Z!;>RW} zcKcPcoa8Vz-7 z^ptsh)=>{{$!7+7W*$>Sbu1{HU2 zin{yw0qK2lzxIZzN`0WiKWob7Cbth&X3BJmCcde-nGk@Kmtl;ikx0cihsZ70(^bE!)|X#sRXT;Tmx;-P4uJIMQ{FXaG_tnD_xtG6p3|x zq~VC3g7z+>Aa{vYn)kH>Rwu`PJ55nn2E!}utyq1cB>OYj&hL3?3Wtp0>iclrm%gzE zT2r)k;7HZe7b3U)YUpe_jlLYHZ71`vlD)aOMakl+NFg5{(JBnR!Iox0+Z0Z@1fsm|Oh~ zzGd!tDr6G}NK|l8{iZzUiG>lr)6_hL;^ybs(c0;nb*e%xKDh=HKF|Lj#`*t?pZ!^0 z1~o03{yj#_NBpzc2soqFQxBz~VC0rsD1QB1h-&7fN7|5G3!AR0pV9 zYr_F^FD;vcI@tx1br|ZwEYh~7ua>GClr08e z7AXTcWfV?GWrG5cR&l6|J)tu;^y&Pkmk2P_Udc|h8IPqz;Qf!^RYVq^eO)xz}NWijwZJS zAZQ|bnhuUh!R3H%P0?+Px@Is@cC)PZewrYS>qB19WX^uL%DEs~i;izPk4MCu$Belg zuB41F(XgtSXP2uvdf(F{`kOF@^n&_DQ}f;J3*L(7pFfTRANBEi;xwiKP8Cl?(4|O! zyKUfwrnpWrZ81dZEAVPsH5&{bF1oiUN_N`40J%`7uWst=6lAbi)SCov$jW)*6OG4F z>!9O%8V3!gVU_waQ(Dv@kNq??R3?-#8Z$f7<5%M~qDVG~7&4|geOsqQYhk-iSPs&m z1-E6QHnIQi>TScxUzcL}nnC_#Tz8pfUz`6v5o7X9WkfTpF|}waVW>6d5ILqJTP}ba zK2&kYJ|e)jyhV&un=yYUP_f`1=5(i=@5RK(f;RqseBjF#dt1t=;oLugqgi!yvn*jf zc?_%(ZP7Cfv#!_kgWI^4EJya4@Hgx2&zz?e*3R`q`bZOtw}yWBrr{{8ZNbihaS zMI$xd(6g@Iu5XVRtr-v|b05cXVJ75hK!*#p*=Iq19V3>oH`<9Qz!jXR+OH?o-h_V~ z7%4c++0QgiDAGMZ+zd~;L2cY$x=1gG=>_1p%+A7v{*8M&Nto?QeF>J7;y{p?EJm1g zqJO(Ktu754os2-ce8L$*guPa*{Nj~5zuj)Qr5h9;-FNil4SU^0cPDv@J!)l5blQF2 z!$cJlF@{$VuzwbXo2A{#h8u3sO-E+^!;Z1<3=k#2z810tiv)~B8EKnFc|DSG0BrHI zyR`mr&S$c0lVK6jjkUFt)TBy{2vhq!|9>Fo|Brv~Z#4kz7k~2Sw}p6>mwL{YL#49; zYSekNlBY$MMG7-#Amo%Ccw6?_qwd)E0|^9FZ}dGyfN{WMD&4&M+&mkcy=pY|{JjD1 zz8jtP55WBw+UoDaBYKo0_PgH~m$%AnzCp8wSD{lyWoo{*)4Kc|)NLYI0hxYGzPTCcqM_nwnSuA&HTNp_$pLLRE}8 zeWn0@0s!Ct7Zb51Qq@(}*0+>oMtUlgT2p0K04ZsRGMN_VlI4IUcAQLFgK7mhDEH@4 zCVVI)9{33PL*X=0 z(3mm;$d}WUtg%1xE_Y~f_}LilxhuC42Co&s!1Cv8cw`o;->@l)l^MX z@lhW*>hYVS@RsY+8>KUC)17GFwj18I+bQS#DQ@Vbqg?dd%UZF}wdpch^oAnIrm|QMQgDsc|%6js1DC`D!Idklt2C){j?mGG}HGvof*pOgp(RQy* z`epK#IpJQmFpGLXjANgp=V!P#`IqMV1e#rR=(9PaF)4I*$dr-wp%_rEQ|K^adtPQvCk^Vl`HQO__?>E0cIps0QpJ3C0qkDW@_O2D2 z;lwcA#{_bndU8l`S~QwRtE1Dn?7*kb*zfOYPwo4`x+Y^^G{G4Vx?JPF$KNA9tOIp> zt1vslJkh6>U$!(nLr$I%obk5ZktjP&9n~8Q#y9ia-8t8dyhus)myF(V_W9TfyJ$)YJSq&75BwI(EL zE}rs1!6yRn2>^V*Uj|RQn-1MT;%qrHQch-;jJX+wpx8_aUgR6#*_^lA&0{<20~RRx z$NoT;1_|>HO0fZQJYdudEZ;zGc|&4`vfy#F*lc|hZ83q*DKue3qr=5$nEWtmtql`E zW=9)s*${gqp%u?^#qzKJ6Y4cBVP0&I}j)MBI0aX|Dbe>aNZg$b|)2q2v`@Z10O|3%HF zL+#o~_8j>hXY;Vflgs&2esHXv+S)hczkXxEk$9RpErn0l;2E5z_pvv8VD}3M2VgO0*``H)Hc0F z@1;yi@t8n$Hq{w$aSgQt8e1uNpn66%o^{{f@+hF?cPCE4ppcU*`&Kq^iF|Q0s5Lw) zkhl%s2O^5tsfara$--$(Qu;P~ZlRl>L3IaM-nKh#;U=z4@Q{kV?&CfP9C*8z`*0mU zTE!vN^|xJCqs=G2F=d`T`LitKs1>zVpE_|q?Rm5`{bQ=FXG70blG68BImsz(c#zCy z=rT!%n;0JHIRE@NwA=UFhFiM3Yr3ifl_zf#UxVFkJ`tTF@E)~7>>VpTd+zCBlo$79 zun&S_-VG-^gCZr0%y93$k}8Be`tP(4NPSAB=&^-IItGiT#~^k(`nQbt*6UN-iv~1k z{ylEAf4+W?YxCrSwXrWTRJoTFY%2A0PwbQ$@Ol1!zvq7+*esvBZ?1|-|F@;z=`~(L zOx3rtMRcpj#@0Bq_gayZQA)wR-0*hu^ZyWM0CY@&iJ`P`1gJOh2(K=eK$M)r;~}1@ zoJRDXjkJpx01})%j0P`@OxUFAwjm71+TOeV@*)Hmwnd?hnTBfn`rS zX*E)|bbY?v6qqyNPGv|AE;vBkRwLC0rfdMLwPv*)%AMx?>freN`UC*}Q-3wpiOPBb zOery!RMK|eAflFACJ7z=qNkxwHDe0Hu$=I9|M0_-d>WO~2F?r(M}GtW-w_WS~IMJ9=~X~R=%d0k4}iXd7nKM>MkSj&y+dE^xh-YG;~Vy zps?r32!Nb(U=`9aVK01_C?ZaTk`vD3Bj2R0YuW-CVe>$@@lFYW9-mS2c)fnARZQ2| z-jf{hW=D)n#Qr4WB(KIIDRIaz5)94d5B+nqPg{DPZ@~fye>|43vmI^2lOboj=)Orjz*+d!44#Lm>70(ld;8&j)Ee4EB;M=LLlNUw>be{?qBfN-j*WV6smHb%D;R@8y@u?dv)VX zWw=zt8Y^=HwC|^cr zPfa=@Wx_4r#yw5M;FLkqU`QcvXpnZk4x$!4l1)Z(XDOUsOaY`tD{WEBPv%dPo`+7S z=g_49% zc|IM|o*ImCFLQn>WFPWC-RtlY7>QHy+9}Uz`#8%rKBX$EdXt)xo3e@8()ied)6i+% zb#qW&&gP@mmyK(m&bz_o^zi7{DutQb>DdM1*}D&*{LqShm(jqMoagx;zw2n#We~bN z$DtEG>T!DZhQi8454Z-Paf zK}88{<`ZkZMi1+yOSW;J(FrgnV^iyopf{p*0n2pRrQB4tY8_`bGvQt~9DG39i)Z`u z{Qq9g|G)kZe`3p?a76ueO~Bu`XzaBkZww&KRw zU(y}7w4pu@9QMF24*;GbP>E5sg=GNs4+w>zP=XObTCi)Xpbj{$55(d*za&9Spb29L z_jLZhP}g@RgP{+<{C7CGbpr*UaI_j;2d|H=>$#jWVN0G|hKPX8U{nZ9GfE_iwGJHF zG&{Fs>vQZIjhGKkn8KKmSOHTLe?bEjhRlRd`u`^Y@WZ%(q5bn|2#6?iKv*JGtk3HS z#LUciF?A4WsOAwYS5}LdB2%7jsFBOdDV+?8_Ew?Nk$M_>dWBQ?eR8C*%h~cI@n0VP z?!^6iqv>wl{^w)}{ShJx#Pd=e(ZP3snLd>v_N-l>An~L( zflib-W`cr2qJtpd|5zwdejs%HMrU!B1wmf5V;Tl4?H51$v;2SjqyMs1so3kJ9apLN z)rVfFlQuT>27y)yJ>VPen`@#U$Buvh@ypQHMzqX2DO-D^C^QX*K3I9|6%Ra{lc{JN zPRrzIDOf3V-xSyTLj|Z9^t0ME=!D^p-<{ft7Uje%vvr=jOOL7vvomrHC21PhCTGT$ zZ!-c3p5rd4Q5dGtBlY#jAP0JWQ>G+5HR3~NflI_liLqs;-tVN3&iwehuq8P$5A z){2w~_k4FMuqYnk{$F2BvX^x)X81TB{?sh@vcJxGIKgA0~5z9xi3^eBg`e>i-vbnDqHEgv|t!q;^| zF`4WXRMB~j&L&{5hJW*SQzQi3^397lA$-^|rsS^mEnyBgoBO6ZfC@uQMY~&jX9@J? zb^ScT{#h7{D{;Rcvk|$Mf-Qw9n~67s+Q#$1oUv^Y>!<2Pd^3n15m)If1m@x;UI$%L zMrKCN{&_lGl*yZw-h_%Y1krvNOy!)WVH>+X`B5E=@-&M!nsg@Ln=t?eH@w<{dd}g4 zlPM$JTw1%=9q;=C-Xi*>bT)B-z>^^ErQlW)RNW|6)F3g5e+4|PKu~QBU-1sx9i--P zhwe1@+1T-TKGI^mE1_L2obgr)n0eltm3*^!X3WiD?xi_1ZuvIk0ZkhAy1PVye9fiA zK_NcZ08QF7?ppVRAhD%HxTX8T^w#O_%_+eD$5_98a(}-SsN%eSFQ#tRf%NC?Dk#gc zG>&U$K+E1}AjMeEo!!?&FW2!K=YKGs68ZY?;E6`^i3r9X24pD7Wq;v0%vkP8B7$}h zz&M)KYa?yTzQUK8qCf8^u#YqD`Hr-4q*Z*L|KIod|Cj&d=bhf)558?-26XekJ?c6H z%vrg z)Z-fswk=1-WVBwTK0HhzZJE_A=YOz4`Vaa2bv7C?;hy~817C1oA!cMtppBiK8~cS1 z^$LhE7?JBn(SpswP>6^d(uy0n`q~pWj5UKP^^kO!37Qz7OfwjnszO9ULN6vB?O|$^#s*Djn>VGY~>m~ z?PE>E6A4aJ4mW2@!QK&-h;CEY$f~2cJ+qiem*fG918PngZ`&Jg_b;#nJj_`Q-rS#^ za)}6E$_+r6wprx5p6jnWfd4iAdElHC`vy+{cyt=sU;NR(xSagBA-n0#vCKBm3O*N`zWzRHIisj*KfxcIZ0$Q$hU$GbB@hD-Wt zp6KtnH>xMfX{ac?akdK>oIIy$HB5|Yb8j9wB_uU$rC_r%3K|+oCIqyKkEPG7+MuA> zXoE(MbQ6Ja3Ufz>gc)KY&!PWvzkxy6TlEAPlTk1>RaAWpFetJ6xvVjCKH2jq*6>9e zK!~6PU3Px|trUF0n*+2_eDy7~zU ztg&$ZecnKAJ+{-@vS$WuT%G=&GM&IDQ*)s0G9@NTCmD$|GXzN)2AW!Ci{nJ`^xXFS zRRZ`pf6t5_+eL9uMb5!$u?E@gwC}Alx7K{m1M-Z;tnH~u`;E`hCJ&QjW$>Mw8Ta^=s5#6Is|a{uxuGx~0Uprwu9M3*V1Ne6I8i-V$&hrlS`I z#tNQBL*4gHQ7p`%PhOps-Yxo^d(?He z00Jt2{I=AGSBk=Q?$y~yCJkSAR}fHb9#^a52*Mb$$NTQ7GKU;d)6$6nq>FsmAE-q? zAA57>M(F_I?Sh7PW5_8f^r*ZkrR{8!6ku&{^i%)4U}E*}^`D<{e@#NVvPcR{1x9&z zRoL(ux-wYir`8jAH+j1K%t(n-&Y4Qi(xmBWGY{D!@o${`e13fb0RO4le{dpFp+p{0 z)eHDr6p z<4iHbH!6TYTG`z@HESGH9zT|{)7>&SD2ASQe$}3)Fbe8)MJ9IC&;&49;+ZVs$#fPb z1c*6$oMTh#o&y$iAm-w3;5~!);}HloBS)+j8(^Xkk}(B|maWId{OZNHX;A;;z$icd z>F>S+9zFA`k9RGl;Je!!GV{!V@1z2Xi9@GxnoKgJTiW8+AHQCxiPPP;>y8uWF;QCI zng~#`VM`m*TXsXR&?j%XfN077U3IwMkV;Q#t#9HKG`5lpO5PkoZ^tOk7zs!XP%i@R z+ZG3O9huusZJoXmeHz&;ng*SdblbS zy=eRH{sjQ=tH-afMvfD$jRC$f&6)*xp91D^^0g?oMGcvGOb}a`Ik``Poj$h_xl1{w zX8wMgP4wO#PABH}3`B(Xl!@I0Ph1M%Q_M3Jml;6=rv-bPf2UD66MK`qC7%=~&XCmN zxeEihxHbl$R)Z$SeRGX?ri@)G>O!-Ae%w2d%g!2z2EI2ioh>jloRqvUi)Utp3kbnD zKo@nIf2B4k?|qLpddZJM`fZQeXEKpG`Cy-~l%E zJtX97VhtjS57`&W`j|rr;7qHX+f7K?R&;Ll1m<$|6$_WJ-$rRPR_JOU5 z0c(BLBM=Qt1`*L5s0cCfwAgR~bxMg6r&&mRetiM}-`AJHRGn^4W{#Jc0GiZ@i4r)q zlqu)NW{J%#fr#Rev7@>}uExVLkh0K$(zkf8o|gd{j z!@0P#MQdxgmp6PVZ}_r(iHIT@2W=ukP3;`#6dg*R*cw(kHpP33>82XqA0PNQ9^Q!Q zybpqgrUd2|lQpL}cf+ARrQB-`eZ4(V1y>V4QH9`G)(oNMhN50r`-FBaENyA#`&3^B z?bN5%hLkpJIRo%QVs-CsCXnju+^5jaxDhsx(wH1}jd$(QQ45n`eij~0N!LqyDu>|f z?uBHPXv{eWg;U2=hnVoTxdu~A@!j?%?%e?TKn1_WL@wB&Hr(I&62%^w=i&!`)0yWy zruOP!gMyuM-E2;*#@K2-r`@gE zGvM-hhw&X|nn#bbQZD5wjuAZ6y}$)ohBx1>=GJ6P}@_6O2fyo9XFjfO}gsZ2tT`+GFV4JBZ-sa0!W~p1eEPlM*x) zG~GdZrqVktzMW!B`+DwYMamQ&4EEC6%R+aIUo4l1Z?uT}lrcvQioJ{EFT8qMi5O>+5cpXdMge*XX4KmK`H9vq3ft;MwezQ_Zj zZX2Ee<>Rr(RGU4y1v;~}qOK^nf&}seiKV)=MVCQw{-u;)oIu%YYBj+}6}0NWiN};? zq?|@tS6?f)vY}*8^0;reh|a_UPSDBF-y2~}tF-+Kl( z7+w1ZPb9Jcn27t|k^gz~^+f^D8OVuns$mA)LJH+xGR{m~?tceqmuOy5(b}3CjLd@O zVFn|Zihg#kp8&uQ2n5g=-1{Q6WgUYvBe%qo3yTU%6A!&4P+KNA&Zr9w4;aQyDdl_v z*icnL>=8TnvSHiY@a1v1&JyMuju%FP{ivsjAuk!Y5_FwJ?1g4f^Lhc7B1c%H;r)0( zMbTP=vVVW#%`-vai~!gyCNd{9wJ;cU&ZxBM`Y&PXbJ7!;A>|Bar}YxMu8)^Sr0Y8O zx}zmSCLoa_Z)MR1o!JL_-Q9StA2LvAjS1V#m2QL5KM~`8fJn#y-s8{Se(|$EmxVm1 zW`@Up4E)M@%IY zuhZB3S~=a=uJy^F+DqFn%}x}vG3D%Q>8hOj?o$MFGB1yjbB zGgK8Hb%%usK$kb18;A~1;;G#g=xK^Is%S z``h4b0*f`N=EiKH(;mA0_+_)9o<*%2rzPYx_k$)J#gJYo$h`o5UV^Q&Miwga8p|{@ zru%ku*2qJG32~-cUYIK9XYxcVha1t3EA?VZ-8}+(vwCL80Adxz@@PmT8jFv8$4A{4 z#?A9{NW>T^@txIHfnT<-Crb4I#sXkMFd5vvK6y$-P-9z`A!+DQbya4X#BIBKN=_K# z?e+1*7NNz+5%Eko<0y?tI{+{SZnwnKM&LlrECzXK8chtWHb%~yKQ8G`)99% zxluTyqJeZyvYYB+#Hr6|73>m_oD6$yem15lo$2RH?Wrg0=em`#=klfi|CHR#T>`f--W3h>oy_8w4 zzw4+6TI|bDJGKQFt|8}@z*>Sek#okDVn42mtALn@i3sFUIKH@*jD6Pyo!98w&#zAa z;QRbi6$@Rv^&;2QOhrjdA=0$f! z0!VR71-M~Q{YAx__;ijMN+T2850iBOq(L<@i_B3Qbem;zV4)NCO^it6K=FsWyV{C| zA!2NFDhj!X53Og`E*vWn8S3F2)G;zb3r%a&2C_7L45HB74`(Jks#6p9WB0!k4ex_` znjm82>dw9-KH%5*XN^Bw_qTqy)ZhNSzg7S0PyRe0avJ*bf#`SOCK?kW;J$f8qkj%B z;FSfc`NIG>KUpXvJx*ZPntkPj3^#6fE?T)^Jo`J0H>9oej8NHI#F*w9;*-|IyTwt#s1+ zt%Mt~ACevDS#`^&$wG58GyiODnAuEosw?Gp9-^X#7Sj>el5e#Hdz=LqHPQ(xq z98z7+YfH1aNDD*_AG%Mbdqn=Yqx~`7SIJJhb#uJr=sG#epqu=BV0U+-t2Vx^bj}N{ zuYcCz21-jDV0vm~Uw#I*r^6ek;@cJ~{iHqTG&883s(aw*7a|r%GlR-(vKyvr{9D-^ z;MAC4DTc3snIZ+S@`hX7;~I^SQ;T((aGxa}z9+tIcO=f(>yD3o?;DLf(1#&i|2(>~ zl2-o*We6zNT!x|3{%49xH~pi8@ISdmIra5-ZT`92)P_7Dr=X!P5!@V5_@L{L|)GFg#xq?mIFM=pE;3ucOXJGZ!8S#1k z|1i$~e)*Qor!3R{b(dKOJ>Sh2x1N|eO#8$XvLA6zGw$~raxTc)@Nw9P=-qMwnnzvk z$AOPyhqM|x`~J$E<{mXFtr)IT>UTMUZR^j^EtkP8r0nNE6N4DIW5c5z(*%$Z9y07Q z4b=g9Jplvp_;sECe1GTWf69T*Y%HZ0=l|39+3+*;y~d-Iw_LF03}*cnsis5kphQeM zzbi-KlTxBump8FtWdNusDER|fQbM5& zf#Q%JdD5L(1&_z>NM)dcC1qq{91yh7?5<$8ssStk5a{`7jYd4P=lNP}QmbjmM5;aZ z=fDvYnZA>F1K+2B2rq+S8gkloE(VY(S$!n0kl{?(uSIRW7R?H~LXYickUX&eZ9tFTs`5)9AlzLz=O6sb@% zr=){V=3SzW>i6kS;RIV~(c{4B*G#6NL0dGO(kdQYLyJZ+VM$0SLxR4Y!gK}8p^b<* z>(lCUGMf(C>?i`myh^Z|EUk$CY*5by*lbMKNSFSa(pFu)f3B?*+|n%?MS(`F72w)n zpXxb?=GW8TQ?Ic^z0iMdmX?Ga?vXiBxGp-y0|yLl8raRJ6A?s#kI-+QCRC?uw={5a zE+RYNb;#5L_rkZoA7?rUcE~B3u1^hbrA%sc30ieMMlm&-`Y76uCDKAc>o{-?M#^VhMIS#g5Vn}kBhBkwU&ejT228|h`u*APsVKpqc+|tCCSeBH zQUObf$U+Ove8pohW1jagpT4`PoSN&Pm1P*a_0O8}Y=+OVfvcy%na1qz!3O&$C(q5U zp+)caxE>83$78G~CfC0w%Feox`eHZ%fZZ@t?3s$af`{Eewfj_v*)aU`W~;(*jV6eD@ljl~ay%7#fk{0*kosl~I&NeBkg4 zyCiW@#BMP;n8D#4gw{}uz)RhrW~Q|nlZhFOh{VM7In~%%2E=AYq@SJVCjjvMH~*@k z<6kL#!_wPyhSGcQA32vfo!54!swxPyIS7zaf*D69F+5Jg1~C$%?&`_oAo5s`lv5NT zf+lU~R9~Kv=2__)g_x*LWSS7VE=6nNg~8J=37pX`Q~oO~XwQwfe?Fh7*?B~X3ru?I zF>=Yc-|j$W9BoI>2<>Pi5+Ruv&(9Pz3M#m*h;XNg9hdH~#{&|8+yD8$`>)>jCiVaM zd;fj@oBz$PBGGoamKHcH9$j2(~Gqwf$6#cjKe(g1gs!N+aMCHaTHMgJ=n9z+pWz{yZU@I>K2% zjZEKYsAw@0dn-2(`8{k+FO+H;)Ksuf@ON=d<+Z^m5o0!-)X6DzLOw0N>d8yaW0J1H z3Q>qR_Yg2;6y{TdD-9DsSRv?M3{VCq0BnOg%>g6%wnf>Y8V_GRawF5NhxLBO~85yO}i0zv_dmiS1ep_3_dd`Fm zAR_PjgvZkaax}ESqaG*r#WPm7+$1@#Y4=Nb1_?;c(T6QSz(@T!8xPW=>x?y7V*>xE z@$4=c$sRlEMa!v>y+{mJ>4hzB>~wM&Ps79vLFqoEo+iT9>ucg+7S*RdU?5>bE@?#n zbq!{V$)d}y{57gH9CXa*NoV6fOqWd1BJwK{L1NsZoy}#7bgMI`2q2@;{B)zsTQuy= zoY_(LGi_eX<}8kbg|L|W4NxmsGKbBW!CUyY>;ddGS!6X>eGBZQvsMx`!9w|Vsl`V- z@Dba5%8N8^$u>VvEPe9Wb>4^6Dd)JXV^Ws_q(rdASZ(>BPmG*(BHF~8MrZA15P1Y% zt#hxP0TB)&bZ!1%m(T?9y3ymR-+qd0QwQ=i8iHvCIrng5Z|H4I#?N&5s~^`XQRBt4 zO+iV{T_$*q-#bk$>FLkAoXEkQdTBZ%?vXC+rDd(<M4Pd0 zUf_RzeF6aA=U3|nP#yj}bD=~^e>9LOY_7eTrh>y#AKA`qG>w22#^EL0scgHS)DXzH>?^xst0 zt($eu30v7BE4rbD`QNub8Ht{z~46oRP}H-FS&$DySv{1Syn|!kxKF zb$~_`ZHXEJfaW6Q5)6Qt&7S@{#Yx;vW9t9ozxwaGlWaXXBBy-$cx!VLI>Ei38o;;P z<`l0sQw>Znv|0_#X6Prcy6T=0?3-*}BFKV?5(xL8^2PMIY8&Q@X70l4ufb1++qJOh zF2wUQ@{@+uBl&nt^1Q)jyp_#QUUK?s*9>N6e8u~z0B|RH*RA$~M_PR@6qV2*(Oi1w zI5VFecQ4KVeRIPi3Yzg=ANbhYXc7cvI;Kx?L@ejGNQD6eJylQ!kH})g?^t(&&a@N@FE6iPFfe5Zg;X~ zkLT(+@lIF8Xfk>uGYW6UNI_{a6?{z%rSZs3hxRaJBEBS<;6(j)BP*X8eqevrhl7HZ z?{{x>5FuPbMut?XARS@%=4gDEse7DG%n0sz(hv)!W8%g)C4_-e|!o#uV%2as^)Mv_&we?!B(Iq&9sZG%D3(=?u*$>F~5$rVfqNY0q(`*UKP_JNg!F&i7fQ4wagbYf|owmx#i z$S2p!C(jruA64ko(3hNXzi-2&tw-{%(YfH}SdDhM3VgpG(SHWBE2Z0;^0)0aL6Q-J z7yuNVO%0jH=pf8I?FBn)HNTwC+m_uSzB31^w()*WUL&diJGk5LS;q>8r$8`_m|cTU z0o14&qzQIBK#kE<;@Na<_wjlD|6tDl-}(KYw14}@Kkp0dBN~2LdK_Kqx_f{E`0nky z@DO^S?lp=)gH-VWK{w?1hC8aNLYnK`nLQeD1;ES{IeSu;#V`U!u7}Sqhci_iQcv;O zF0=L5opsCvVf%gAa&Zv2366RUV4z2LpU(dn^fk1L7$FRmq~meYtC z*N}dcoROIzRUi;R2}f&C(eR)#uo{#!h6)XA2DP*tkpwUq`QD<-xko0Gy3@@9`_Q$~ zrwHH^0QjE2nEH5_`gUj@vy{wWC^>U$i5e=eJu`!X4nQa+L5(2I9j>iw+zqhgn+)g3 z_RjqU8PmBF-J%snJ=c22N#9He)`3%TC_Jhw88|}5IrW$xhS@P5^h2&OUu*NfpzRz)YAr>-s<{(_eO9!5|eudY1# zr8_**TB6uq-U~Xuwrbklkv4G(hjw`?ke&)k#xV9%bELbe#2TkzKt$w4Z_WvvIOH%5 zL}_Seg{of%b((xT6(=KiDwum3~aiv|^g zCOoJ6&KBbAOtUgYAn>&93W+*CF(Z+$9mVc|mM!Nx*?gWDVC2RBD&D^==mU|jk@d_B zU2`J%`H$=%xVk$}V(;!#Jcq0dSdF}T42jC={HN#h-}SwB`@x@Qm-sQL57e#kgr z8Q0soVJbHi%SbRBt>IVttFdRkYVJSJ|L_0&j}(AT>%U=oIQ7lth`;+THi5nW0%;X3 z(h2}K?(C-4s&FIMFz9WOu#h+dWbPXgNm@-kQK-}pKc_MN3L*^>{v(OL+U^2Wqjh{;kaYVLF#F@hnoF+b7M zrw8CC0Py_-00iR%Rso_B>Er2KJJr4Tc=MsbexKh{oybuVdR4j3X^v8DSetg+0qYF6zA$yHrIacBdGJmQMiMJsX8)66G%neQkOn?7OvY@4K1P>@5vy;ACR@K`I7(?2k#+Ed^h0Z?ouYUSMw7 zU5A_IFfTk)e-kZDQxu(QG^XwpCPm?Vg>w&^o*Bo;hR7>Hu$Tj-) z$ip$7kZ{;zP?o#zKnH_UG%`eA@TdnK#{=*6{K{R;=&|T=QOsz#;I|pt3m2npWD}s$Ez`{Dh_GGF??+hS0LmZJ%|AW)K+YOCw~NQ3QL@2in{D~{Wl$`;Z~1x8UkG!?s#5YGv6cDj?=p8bYAe;1IXo0J{a)x z|8X*nQ=1fKZ}9B&^AjYo6Da1*&HSGC!7UYh)py9zIzi)E($-M`>-7H1iaTY0ck}HP1k@#JmL}68qO>2! zF>Y(g1^3&{J&Y^>AyrUfum5Au7*b_(5TK`RjR?%B-Pb*+uQORUh5!ckc0i@YK<(Mw z&yyqob{Y^sJ_Nj#jFd8SPSC>$rf&J_3^AreFk!p)TLahpQ~-Pe06&y3q9BeD(=<4_ zRtg-Zn?_FgOunC~E!w)7!;Q$?+)Bn)ZXk}REv*9?q;QqxC`1$Ye9?*~EwVL%W9Yl) z!>^>lM40->aTHN#&xk$NLzZnTd;u~iG>eEp)u7EOY7}W60b`@u>@K+!W`kzWo&-ld za6}Xe!raOAcm?0ReTU=z1(gLlt5@u;dcJ$-cctQmc`0BayvvTd3)B=j5L2gZjT*W$ z0Ir1bF39Qx$Oa())t~%1e*Dv)9K%6a>X^bdZPR5#OYy*uyZ+%)pdTGDY@qdn)9{knD8ecv035)WbAlrwob0k+>TVg$Y#$ zhz_ktsh#{UpaA8BlFG=S?*+nnLO&-dBEW||@Tli$!YS>RX8~Wb(;fG=KTWS+QO4HT zCJ18MV&_ID^y|D(RW+tmt5*Bb9pRClqVU$Q!WpU1(#T#XLd!cCQxf;?sM@@UTPLEf z$-%u85E35sae8&nYIf3d6?d+$+QtOO+zb2EffT*Q1`hiSBy{~QEbrl%Jt^OOl+wl|le8SwS-KAPPg2e`@_ zzJ7e*Q6DHNPs%#ZAl5pmm8(JI097c`8|38W;WCZshVMpH?sMPms3Cw6H8pjMHQV_i74KXpg=aHMxn90}?=d2=tXKWBg6C1tSKNFhi|$_<&* znR&_u{k5)5=HeRO?`6pz|B1L}sv2?*2C>s_Q{tt85~tx>n`dOiqz-Mq5+v?J2kx3I z)74HZM+%0}`3%{Tzn0VD=WF?zvoSHn;(Ow;j5!!N-UOZ|+e-M@4?OBIzz8?@EO^`e z464%btB?1Q$^q?@e*c{ie{UXdxIv`h(GIBXv6rRT+hhWq(a3v@Vjl7UCW3Yvw9*1F z(>X!l^Zftb&;K9)^e6I*pZ%OMjhri{!Si2>U)JTDE&fbZ)S0hwJ#J+~4p7$F7lL-k z^veOT@18V8qcr?RbCt5ousS>H()^G0f_aEB^N760GO=F)g)Qfhu$^OaovEj209q4N zt>Gy`asCsO>kncB2~(e7Bu7%2nYEdisA#x# z5GS{%NjVWGrjj!r`}qOys9@#68Bc;2r@4Tv2Wg zBRuL;dKLE+Fn7qmr823x3|LY$^>~pU5yC0qhJ*|b^xo#irWX^yKtPi+jLm@pcc6Nj zsf>wX#FYsQd?e(yLshVq4Rp(}#4zqf(QMG(TXQ;MDZW89ckZ>ANZ6U`+JCT5{L>iD zoGaHOo|g(he(|%P)9?KLPwe$Hz^6+D0tedd6G|BqmKO-pXhPK#D)N+pJ{;-ABe_J~ zsO7P0Kp9A>M1%Ex19)WYx>BXR)8kFbheJ|i=(|I)wq9-Q6$-M1V8bzmk>(slc+GskM5>lp!FY}1W z580RLA3fcFDA3SgE<*9*s!#GYzMsxI(e7n%0tw_&q;f_I_xHpJEuu4-X+}a_PI#9( z*s1Abq*)*;Ak@Gk@xUA4%;AV^25ky61tUd6vVo}^m%0CkdkA0@w&U6)3aagOjqsr2 z!!E?7h#SnDW>k^6ah;k^h}|Hrge$wEMGRw=<@ybSB%0n0@%uG^QN;yBqKtbf!%e@* z#npbD$hS4-lu(-uhQZUC8f`^Y8CHhY{j&re$85 z|L?XhPU%mK)*8NSZ)mv=@W)^P<=B^;`rE3a)#KDGKE00%lc7(r9W-+)w#kdnuo!2F z3aZGdfuDwnG_tUZMUspP-rqlBjVxBR*J*Y{6V_!y?xt`Q`(hj5h2XWOC=mhKr`jjB zQTQxypRkFdwntnh*F`5zGg`6YZ1TCB1AU$3l##iF!D2)SUStj>XWX_8nHWt|Xooqp z_|FWblz=U702q}jT9XN^t!v1CJ2dtEum#i56Nuh&M&^V==#1y!sc7DpTm3%Ani%mpAw zKmO@YcGIO`x_NQyW;L!i{*YtRxvN-jre)58_P)IZ=yf(+$}x>F2p)SK+S+H}Al^5%Q$tv8ggd|CfdjSm z!lO^KW8xD{b-%w7G}=yo?b`fX>CtZ2ocGCVJ5$^TZ3g$7uMsgFj@+*I=aC?ArmNCZ zS(bCc+ja{?JsPYy+?y!&`Z4ZiSsa{oF%cso?DaTNIQ!ozTG)CSR%0;c_%lOsO<

sW{5dMiD7S&0hX>jUl4TowZz?1uild%;)0*zi&J0904n{1cvmlTMt0d%5Fn z+ni;vpUu9`&5hyR9%t?IsoAAdqxjelJop%UYp2A&lGpUf)>W?3_fc(faqXw4Db`?J z1ShO#{Zy&2`t9i#k(-Ov7O|5#N1-3mBb`+LJf3N%$$QF!UvrPZir>A+b{vdq&^|FE z9_*9JNaW$no_mZ}YYR1b%62?kz6K-XhFjTiE8Ace9j&>iP;pInH~o9r3NH2wk6L4| zKkwnM*U(%OAF_LL!}9)1%3-+JuAu~Y>~#Whr~7wief6oojVX0~0hd)CHkH2=X3!0-^^t{W3DA)YKNTTma%PH zuv6=jPOS?dn7}C`r3@u!4|$Ac*ONJo-i?C24sU(KUQ@2joTYrU+V8>s$0E2>`HSn&fhUg5Dk6CD(g zrSTU4`Zxdae<}a+AN|wx*P;8&wx|HTe-pDQ#pm8P{MXAA*aa5 ziH4^`kA!SEYh-Pm4qvIY%V(=CD69)*c`bx9XBcaXLR|6hG&TW0*6g zM5x*iFCOT2*K88`gxaHnE|btcb!=xU=IeslVyy<0M~qT(0376NW4vVt{kp?CEtB^3 zxtNW`@FxMYM*?*qV5RbReexP>)qh9Vlb`hBgwu7UL?dd7Q$i*NZ+B$Qc#n9#rUI~B zrj1=kpS=MlLTieT<2{PA`FtPIj1c{Ln6@zzwtPpqd6V8f8lKiEPryc0Mg!&!*G_f6 zJ~Jh8mVyxGJhsh8-gDFR?Lw_z(pH1uf^tsjZS`k3FdKBfdzfu_JxoiFk zJS_&ToRLe8sk+~1X@+-wjH3EPPF)&-evP!#tgprY1qA60?kW**8AUW%Po4qu`Z?>x z&{hCJmunbii-+vf9bIXeqTA~xC1Mau&d8Pnyqfn;AE^WopOk!s!IHmtW=7`QSi^pfnM-J7IsY%$zBhTIHcT$(_wl7kwzaTUFU_$njWMS^bamJ*CE#1&82c>^rv(NMYdp-ZPcvL9C-Tiy5 zwnd}=qp0V~+)1GTj+Or3fe{;i&+}R`6NnQ)%ia~5+>{uUGo&dpB^>8G?D0uNWS$rF ztsb3LT_C!uIH!zTxgiB;w}Q>06Cn18*7a8}Nj2RZFrKwUjFf{try3xmjy->ZOf*=( zi4&U1sMl%6gT>F!sej>wE%vI!jFP^fa6vnEped>-MAV1~M2UQkp_G_YPDul7AWF<3 zDfYIX$dkQ3=l`Dozz<^je>L~;hu$c$Le(v*Qie$l2^pDBZhBmp!9s7(OyHbx&yLbT z{Gg>Vwe)y1*VwtH#&ttZ8ynQepxyQSP6`BaxLMaa4iP3E#ypKAB0##4pX*3#Yi`C9 zQ6Qc#>RO|fO;3bp6A%FEsl`YsIn621_bp6~_UhBsPFu3^A(q|j{};_qxS}UcxW#0+ z)*bKiF=PtCAXIO}aYozvwCZ8#g3 zaKUcc&?2rW5hJIJkJ^B%#`Z)xy#D$5d(PVUn3e;`sXI?Ajy4P1J`qWYhXK#Ez)I|T z!JIf^o|Zyy7*L*zll8!^tzio%aW%!q@o>GNeyix~&6gLrJ??2t2!^vXhwFMfnZr#( zq&g-LPW6msvKn9ELKy7LShI+Q^HcyzwD@jC<4JQ`b)6#i3C0PK6MBl#8o9|S4R_xD z`8g%m>jn+)zHKr6ZDXSLyf)k{$*I?bDuP3HeAJlc4?sXe_bkuF+#2^Z*7$StKfD%B zK!XE*U9a0?6|eDhow2lP0G!$=@oc#Hm&kf=$c>LJiefW}5+riGu~M^pQx~6!DaU(p zIy#fflDrwBvsVfnROw*FYS?x%?joNQbq)DyKF8sWA}ZKY8BuAYkkfBXj^mltb0ZsR z)yw{3qcLQ@+@n~33PFiUZj~HSeTK`?b)LEfP~utZa{A0q&uP@r-MlYR0+OQYTsJQp z{}+TYTN~{K1TZ#t#Ev*XK*HTV`~+S^H1_Mzr`>8^(5l(k>r`jFR>>0xn!hI^X?Zd7 zQoLjbJU6f3n#Rp(s|X=w9myXhi6~ExDJ;E!{y(c+`(z zZJk*=Q@-__^znS=uYX758r;hriG4cn45TUb5^XR|PX=urxJXnM76*fvkd$#NH&mK( zkbh-V2qY$_!z*4JJ$Cll<2YPK5k`r< zu{Vlz7di$=qy79aKMg*HJ&T{f7rq0uSBhrlJ2=H_isJBVdtVNQo(9nA{>K6kBmniV|G|G@fB8rMqxR-1 zDV-;iFDDRAeH4j2;$?F1aXj#TJgyPepn-N@if&#EP-vl@NA)`k;p>ErPLAb$64)EO z{lWz%grLKO1wETOO05buywN*n_U$3o%dB$heno@^vnR3wtD%zfZx@9;YT+Avi={ z7J8i?dSxY?K#jP@Ij0e;CMrv_cX1DI(`@U@b{_?JZ55Aee9*PX=a5;DQ-A%Q>q(R9 zx+KL7~a~?F})%dD6t=&LzzW(be_;s2m!BX3}04T_OM6*UdQhDcro_ ze!ZqQhrhq#^!v^-Sehs|7Ie3Ck8P_il~bCoYU=CsmTxmXq@9ySX58ewe-cASPQGTE zDNF<(b$^mSsM&}XTGxXyZO7W>ENpZ5gQH(X;;UoKrB?TIwT<7(6&k& zz64h?i7nTgujl_5$~lXG(B)_j`l|#gCIV9hgka6RFy3;(+uIwy+`dpsOjQM@DylFh z6M&4k3R6;p(f)X35oKm30#VMHa!F*Wp9sJw0PuZ(5pe=#WEK(2Tr5#GM+%AfB~QhO z$&0PgOq&k+k4VG*s7|}=L8~XqC)|mfx)eaLx8uCISbxAJqFOj8Jv&5o(fwnI1M!VO z!sO?5QqCG>Ls$*fnBm4KI;WS385VA)?w~C&_7hu7gNfj;%i-zanmI=1FlMT5rjk;| zZ8&T*Oa;~vR`uVxmF%Cdx^a~3du(Lt8`0%Z?FT{puf{*ugQLg)eE`UR`A7d_`|(eI zq9y0Z-POzCZ!hR{>-2PKa&*zNUGli?3Gv6vsckQSIs(rePUkvVAg=wQ5#{DCtNLt4 zq`=qX9b)PZ+HlHV=8Vddy6KZN0nu%2Ac+~47>fD&V>+6E?{42YEm+-9=27cdJ}GAu z%m|z=*>GC;N8}}+>Ck;-->xofBF`@8hxh@4p z9TWb0*>K<9AR+0YFbg6unpUU5FI3+x=;+C2e{1CrOlxR$!XLCOzA`P7~EJ#e=RHB<+br?nhGuYUh5@YgH8_aOr8wj zn(6>4FH-)#S8r)U;*6smsK=6~u%1ml4itb{O#juseg5-8%hTC#Bjg3Pfbecyi6Kof zQy}|3e1zt@Pu%-&P2t;;nZ3D`1_H<4>ruXIGi~tpt|X_nH}$`BsYN|a!B0sQC)!B& zlX0-^6_DAgPuACH#n1Eq`#t~vz^rw+$f`< z4Au*nky6IS?v`I$#nE;=s>gA=OiE7^_}*ma>ecz5v84>+V1wv! zUdAI%cS;(EElixRo}NY!GctEXBb8<*iKJCF7^xXaJUiSQCj+NkJ^_GF0N{IW|6Q3M zd!w0{8jMUN0SwDIaY~su2~5EXBIZP#6D4L!iOJ(;5^g2K2zayxfjANxIoa%hLMJ0G zv@1v848UQ#KjeKjZ;lNA>f?P-v(B+IbOH>tYw)4r_LA(*`{Bahe>=STq{OQlf@OeT?Fu$M>ugrWk1A z-5%pG?q+6_nmZ2-<_t~=Ti#%%c;Ch2#v-CFvlp`^Z^%pz)>w}O+gv-k6i=NwGd1;g z$(2H%sNh6ibSCb4JHx|{$al7r(HE8s^WL1z zyytqF=rRF%iFvE7#%JnT(rFZ`UDv&?H#a3Ryy50eQ)q{CXr)!W(MUw#>@MU4r#&}y z12BtgO5i1hV4kfxM>Jt;r`Ps4EdY_QF<*lgy)T`b24**5`_+D-zw=}?kxm~Fe->tw z{nfrA)iTzAXTk@q_@x6qV)EHeMfLi85?N@pCw0~{wC5CMP*D44dO_zt>0K>;FFfD6 z8>oHVKVa(9)ODI=N_gxQDOJy@&n0{n4yRu-A(NX-fqZ>>d=~&)Cy;aEy-rG-`g5#R zhN)Yp;dXcR9@(|m#}a$xzB8SjkfR7@0$Nk|VHkS+WgT52;0ExMfGxXM2RMz1WE&HB zMov5c4l}3R-iX~_V*xz6OMhLOsvZTYCh^P=hy)f=x^s+ZWY zM2r;I>w#lgn>LKWe);}&@mSCcKs4K>>1QFsuv8)q#dK*BmOYM6y;T5H$;PyskziyI zh8EA47}Tm?gQa8W=>|F0#g;didJH6o7GFeBtu9_IwoEC#A*mw1@jU@`6JY3|ASo{f zpi>U9uCoCa*%?@wXV2&P|NWl-u;2c@zh!^*Cx4zX6P-%@uV0h{E(7RBfFA(1%o#bm z%oW^o?W^nDJA)xK_?a21g53<-KJdQpkfV-;(c#vdJQ>S9xh&X1Z5VX-C|C~yATW4L z=35i@eduzGJkL2%J-JvBrUd7fqvj#+6F8+{#QM)MyiZ7!0%X_lvC%j~y`FC>C#D4g zWGA9948$-lr7)p|H3vQ@A!P?-l@+_~9;GP+Bp+I`xdixY{R;7Y&hi%0F1UXfhXj&1 zfS}e$99T3_GgdV)skZj%0`Lg{{2)jGoyzZhw*Z<&+R-fMOer~a1;n9Ynf&0yj9dzc z1T|>?J(5r9tgmt%VpM5?0E>w~+_8~*LGSq?Uf3=T|1jCJ%dxm53Uo$*crJFI>=UKo zLfqX$y94RSyjG3aL0J%0-&|5+h+_PCY=2;y&gs4RPvj;sM?KJ_`39C5);!XXjln0> zoV%VMAIAY5=2`w4IVZr}G%@EqXsh8`yb6A8!RH?fbnq6yfCZW?-u&ZK+~%BSB-uLE zibGcy!9*|Q+yRY}_`2!~WAbQmko#0hhs&+1MAPl&NdTON_>?Wa=+UX` zG%+TuqB32yV@4oahW1jlL99)hsRGS(MU6n@`frkTN`B6ScDm^n(<%Q&C1sR^rI_r~ z=_nF;dJsVDiBe1O=q8DMVd^B$_qx`KTHDZXa!4Z7oZeq@37-U~^&V}%m>oJr9E%ZJ zH_3BD(qIFH$>1pWt)Ys!8+h`%in{seItqyO(Dx@reb$!J;*1{hhyMOo8hL9#!#RR( zO9gMGc#|6q`c)p-o0%RZxVlww+2dW;o>RiDBxv?#V!dCTHL^-Pn7sg06;z%3E|j4$Z6CYT*#BcP zt!?s?IYUjxTI%mn)EmeZ*y)sSj_Fs|{`SmgT38AVaxoa2&AOTVW~z1fc}N6pK|QZ+ z(3e-10SBw6$(i|c3tf82$)!VZiuc!j8e&!jN-|{Tg$)oXIPtzEBI>@BH*Dz!fZcGH z{CYBZN{?%MgR-xo<8O8bv4W27Sh|A%UB1&~f_jB>M2~if!HmKj+u6dZv9ZrAi2~z3 zH0WsH{Cdq8(@5b!##ZP=Ajk>{h<*weyjGUr&U37TX~qz&>7s{iNt|9zkTaf37lH}?euK!5-h zz;DGn*64c}fPB;g(j=(%HrBDfe!oEk)rz_pU4jIvlh(%U=l|R73y%5$kv6paZN!o; z?2xD(n1V%hs%LFT2$@r^X0pK9$G@vDNpz>Igzo;AE`iksC zuf#3~=3v+w2%ydups1ZBq(vNZL;qZkApitH`@YDjKPoxnPQ?Mz7v_>?hLjQk#wjs! z&Q{81W@?QOB}&QcAOb<88bFpaeWn0>0suc87$9-y>zl%iRMqz5Q1NLZFOTmyq3*Xk z0K&T-sQZT>5<2UwQHYv?$>Rcjq8Z3@h#vbizT_>a&Q39&v{hOu3j;*xxaH~&+Eid_ zvq><2_!HCFq%?k~sZab{HzZL#86!0{+_xJ_N+ZI|U4x&WUsWB(OikKTlEFFU#6L_< z3{^Oa+Yen3wz45HJKaqbM7{NL{bQ?b6nWt04SPypA6OEcI(%9D;`T_ zCu6~B6tpFR&@>~ncvenlJ@-bEChI*KxLzua_^p6xVR?(MLGP9lH0344q<6LFjQ+YqRBMa-PI+=PmNlrzu>g>vrAlJ#S;W zs^-1|O=OuYFZcozGP`0&PxSu*5dm;ngh9}%y_kk#Mi!>z*~pPHP+MCjq&7Sce8TDL zy)#XE0lnU*kKM0(T0jO;zC%XJ--_PC!lhH1o$zrhI@vatvC$jMvYhNs0|kL8)1Aj8^x+A_r?a({yc z`G({B!s_7e>*0pFg$b$nn(k{S1-01Sta~o}oND^^zoS_~idfB_TG1cYL^$#AdnZJT>l_vo-|EUyAe64TY_=SPfNi)cZgD&NW$@}}P0 zKA-=i8@!}MbYGAjVJbS`hj0tCQ#Tbny}i*a))D76&VTjurQ|!lYz0m9$y?z%#V!fa zg#L%L^$R$(CJX^jfUH5F$}Uqhk5ul71cMyNguPZU)xqHCG6aLcHk;j5x!U8A@>oXt6;eQ)RBXc-*Hl^K4LCytD8jjkQAvs~|F_Iy} zP2B&V?_oLakwuKG8an%QNRWtDUN6mBJfgKN02sn0sB8HNGYgL^3-1Jr^Z=J09PMza zu-UVV-!hjhDLa@IOs>7Q6Bz7ZV0e3x0yg)=rUF$RGBpl{ax#WOyk6RFW0*2X$V3nk zV={xYojGL&aiS($5>YZsP=nE@`QIl1@I(1Bm0gBaf~XikzHq%thBgn9 zB@j|cM0-D|uQ5xr*>;LA!;E0@fRFfB@rN;)g0mL^9X&j6whkgG?2i38mh5KLA2I3T2DLogam%|{X1&k2=ChMZ)g8O!lNX6rX zc$ZSb>9(OZMQhbj&&4%7Ob*s(;DA&8ADzv$Ajt_p`_KQ|zi8l39g#L?9pf1gvrjW)mLf%r0GWTg|{(5(67 zQ2pmhcdYG=$>my3^SQ{=M*SAHHJdp~qeuksx+ph~Y6QH1QI=sQ_3X5J&Sme-$T`-2XzLpva!o<0*@euIHW za`uS}!L_$*K7C5$sU75gBKP~B)pB1ZJ7SN;4I5g-;v(WZD?lNQG{)R(^w6g(Lpv~NojME< zH5d}M%zz~%ZV-Kr1GSLln9Xz#Wq*D%3Mv9xbJo^C zIXk28bQaKwE}tmQwCtu~BJG=JQYlXP7ZW^oIWa~`F2gIJg#^YXf^~kDf-%-vV$BRh z&gjUg4yH#*F3ZWp$l;aodH#R@=YKyH|4;wz->?7kKlsxw`b@#xL=1E4()_3R->#xq zqW}jZ=IUu_=d+dqG0nN4?mPBlha3mW{th_~WOV-$^#m+pY_S)*@!pcw#U7d0jeT97 z=PZm}&mI-mqkH88hzigw3YIH2$2u&Mlz6j&F`R^gHaZswTS?# zNSzT(1^2YUHm|p9J+MD^u!X-uCS>sJMNVtd@hlPT;}C)o=akqCiBvcZ+T`cgCjjt$ z0|2hGHB~WDLt-EybpsXa4Y=nsn<<2tV9khH6Z_@YUtzDi9VWCEHW)NPN8L;n7BqJz zfD=Jmj{)*i+#(uCj>jvbI}kCpoZOg9>H?Trm=`e;d^5uE5THx4K-2?KIgG!HDT9$0 zSrno|Zw+7c?a@g}? zdwI~!0BZmOvRtVAzx;zg<-hRCvb95)|z9`G5lnOg`1W<#fvTT`y103EypBP_paYTa7}mXGf<5 z8WM-|)K*~F5{*fintFdOg4N2qsZ70h-1DAYzk&cF4nA=6wY{1lUO_<-r=Z>o+)bQk zuyxls0*EHf8!&HpXWn;CKE-)I9{4zpA!X?1bF=XYgUGlJJu0ogCvS^6n#~O5i)TPQ zE1urqEQc!14cc0JAy0U&b^5f|qhMte^IbmBGKHX0=6 z>~Vt&7^1Om6_ftl8sQP~q^9R{`gFg$e@}R6FcXrcF#MYD#U(PY^4rgeB&rCf{kiXp z0!$sC>%UK+M$btZgALP`IM7a8qyg@&6XbDT=nLSLr*}m6e}LIHQrXVUOBHb+ltssn z@Y8rXZa#s*7~kL5)db-bCWJ#OD)smH80S+?v%&s6|G(e!|8M>`e@_x8{Lla3Py5iO zOEo_L{0P$%pws_%0Dld@jg!j^Zub(;9eK=esO@X35EzbDamaHdV{H}EqZ9-1a^H+S z7*qiWhn`)!j||NkS5=*E&o21`dsCs)bYi)H^Zf6UlcUvG6SzqG0&Gz6#yq?=+>byO z^t&@foUv7MiCD@S14IfLZy9y{2{IylI)5kjy8A_ZU=5T5dD`ymnNdK3!Bv3HbV z>@v&=DTj`fmd%$8M3Xhq%Wy0-y7M$89M=d~LI?VrSttI0>&bRZ`hNm|zxbnnzWw&^ z{qFJ0_g|yChKrsNZl8Sc$&8C)`tvHXZ7r}$&e$>s8ts6#s-ntAxLwnr9Q#E1z`oL< zDUZTgq~X!_F@@*`G&v4tis?e)@OUs8#dJ6KaVAA%&dT|K@9{6_blMB8_^jbRPorL! zcRbB~_^i2h>by_RJSie3sJ1^HeAfwDCLTtZ>$i4S<$0i_F_95-x~oXTlY{&dHIfJ7 z-oIBQrc06OB<8Fc=2Z_m8{XawBu+~#**T79)xLLQqRKTUeRiH2F2%aAYj#uihOX;- zw{S@B_r7UGJ?aVYAfCmlSj0i~hEKb(+a0&Eg)_Swb#@s*X2vbwriq)*q=vQmKba}Q z)lFBEH^Mji0*$CGo;vv6czTmuNBY6NY-jiJD99%@`E{d80B+@mtvFt2VxCgc2x3#; zYztjIW#79xrM4RkstI6*5>uf>3@Qao+o`~2cEF+2y1kK>6BtEIAuq6D@Z}EaKJ_V_ z$LFrW#OT!G?lGY%WAZC|#e?hkonp^d;$(8R{96upbP>ZxJt84vuE+5Ha~w7b`&Z4{ zhaG65{%l5Kj4mD(3PDpvNeNrpKuBnzyYC(nCz;0*lj!SAP-`2_YT|j8c4M-V^N_}M z&wzFPcJ_lmLlmsL@a@ROr?DZ2u`5`(9-9kL&^;4YGr(yys%ULakln35-m#t=+*1r{ zNDxx^>!eKK$S&CHG44Z!Prdy!xNbjlOp(dKypLlKGtldE!e#$etl1bP{w(zym9ocD66cX@k>YvjG1n6HyLQk78Vs7{aOSQSob>(m+_rH3 zS93OiF4j|O0Wh>0XBUsNjGtIG8AT5*M7o(9>?z zyg_eOP^%1?!esO)T8jiP)tNBKge`B_@&*ntU_W-$qk*g;G2^xskSSW7lQ;Ji^Z4^F zjCLhPPeT(Uf{IpYt+9wGh$ykz%w7Hb`UC*J$1mo>W?~9`8H8(OaSX?{VPWkT8^x_; zh~_XD@pu`8wo-jO2;(r)j!lI|Gaa-nB-gd>s1%NW{iv0%;C%NYIo- zWa_Zj^H&8Xip&Muc1OP7pxk$N_NgNXI;Ow_P8_Ff3HRwfwepS6eQ2V|KjMEW{%Olt zxYNh*+rRg_$6x))pV4ps*MG}E2I)oFLM2a`BBfx`pkFo@dd}=7!iZGsQ8(_kOw(DJ zW}NMDHAz|ujvis=1?!y5eA(_p7uK6DCPp*GQ4fF`C>R|gVHgy*`YGz|75}ea1Db@3 zQ`5jpj8FJ6Ky5^|&B>y>6n71+n#5E;2b%2HLw^Ikzw2ASY;T@w5g=2QX%5)kh!ao8 zeX*6|c+EjyE_Phcx9tWq!^g440)~D$=zJYyU?ki&Z!W|X@B7D)(U^2Vuuq*hCL+(A zM1!EN*}~WDXVq}_No6!aJvX~L`mh+U)o(Vy%mBr;2jwwm$uS{P71ZV?Lrt3}b+7{r znKBd{@rl7YiuK&V5W2+jo${}v2)7HclZa;a^)iW0=KG>7ZuEz`x!#s<_|ff0qk$4> zc+}%eQ(a}#J+*-;D30zokP4tEIH=hwi(_#mQ3?J=*mfb;oJQ0`Y_Dpwv4H5># zjLbBg>$@xYl|IdsAlxGQFU-?Yg32^c>}I*nEOEKZfw}ys+SG>fGu6UDL8-Mm&>< z;HwBI`Gnlf8g~av(rm$Xsc&hySw@7n`yHv=(0IqTy`jDD(a>5*s1&LPBqG6y827w6 z&=19a)NwX+20@?9bC~*edofx$PIig&zMlWK{7a;HP4=CO2bxF>8Z`i-dSVP+0kgzu z4EJm#yM%Pne1AD&fM6=v0;DL(NwgUPHlSFF!OOw`SfU6`l~g61&y8L&uRp&&0f6uQ z%dA;zsv@GIt{`J(wRkuw4zQG%RbWPJJ*&^3Y4QU(ZJ;;^ABRVhI31p*aUZ9k*3kg{ zRXidmMWO(O_RY0m?$&Ru4cA?d67h|{q!i46a~zKsaSG7`l?hzaaOCFDP;R-5&Bt{; zW&D1RuJU-U#0gvSELDj{iKBjm7)%Sag7NLczZk9|k3#+=d%-KlCXKoJRE4#i++5=$#Eu@kG4<(lBC7DNpBS zX*0ihxchp0)_*pqh_`F)LR0?sZruIwIFc8-S&AlpQV;@pq>oAw8%RIoRL7TzNr#-UdWz}$c?@EG< zTO8yGL^7h{41$lNj_9%xJ;j8L=X8Cg?ytpk=7d|>kSU{S9nFFno){N%P5ab)%LN9D zDe_V{ss-!exj4F&4R6~GISli@YLC`>k$c{4nvw%IUQj;2X zZ6rwaC_Sb$%*jNK@w~03dMD$IB|^<<*H~VUPVafk+3EhRO-@%#FMD&-P5nHHVD1mU z>A5{MCsEu_Ev|qlkA39`kgywernuj4<%aKWUtEW*f{(hRJ!Zm4Z*2PKPK=naQb=`h za`#W%B`9uSsixE4V*MPKVtlx|tGT;AXB1{|@rX>98%TgZLo4m%H>m&=8k%;GBs{PE z-Ygsv&2OClJ*^|9ZGa-(Xsqu`ha8@`lfqLY_Dbm~2=L#hA@^|Kg?a{RE^-cUMhPW+ zK@wspfZ1TEDGoRr>UmFdaOa-h@TJ^AiP2ia$Khs~98>eYHxYAW!KaXIHLxY5;%uKa zsp0ed{{fu;v*OFko3dqivpzs2fPgm+dI50)Cq@$s2YWuDGQ0o)%o%UDoBKByAV)>} z*wJtxvnS#lO;3+&H_hu4bB$A&L9w6N>4uf;46Ty#kOXP?)(}&~8rMbF{|bj$5@trM zZa@Eh6H=4kbo=Ictr}?_y%ym}Ch*v^M?2huC_Hv1nB3=7ycJM8z$d*v`aCgmsQSaM^xBDBI8M_?VkHdY92;iKdYIw8?tNW>FU!QEI6j`5+ z`1u2yBEF-*tS)HcM7dpG+fH;P1Z9k3&*HAnUCeGg`_v~(?oyqidGLbtaqQlFU^(xv zlmCHLcIs#bapaNK-8V2wFl$heFi9lj+ugyBCa6(l_z={yoKq^OYWVfXuh(6q;p`II zE<4N}!0~VX@jq(-^ml&$C$(pmKk>~2)Mz5E&l-sf^c6HmpOG9`~dWK$2e*JEqu&o4& z_!+`eZgZT$PB~n_sb)}~)7G8=-D!~q0mESIF=tg8s{9IxT(@b_tamzlpR%kCX-UP4 z@-fZx3cpjbOUj-VSu1|MKc>+i7yQ=S7uP8^#V&jJ2-s3s84jyBs1Ch&$$3msIhqZE zo9&72OG7lZlB+X$N9=oKn-^$wk_DWLEFLCQPHpbl*_B+5{(!*Ef|7La9SS|I4b$(_=J68t!PuUJzXy0M-1Z2HSSK*7;H zn|YnTQl{Z#&g{Mjw*as+3qI&^2DsSeD_bhKr5g^ZIND>G8edlNY&l~~HypM<11Rd=03Fmp z9E>F+jORi($5WfLp8tpJI6igSxBDa)@Ep(8%&Ix-AlrPiI_PpuKG1}`#wVN3Jj07BT0f$AIjON&!GzI5=fioey!~| z4A3U-f~1}8=kl&5hGq&fQ|3gR5+~-IQfj4aVy0H>G2Tm;o21Xy^AiC0A$>)z@7PII zl_ZR|M8#BNkd!hxi_ZbBUNee0Fp$Wwq2RC@RQ)^dx6M&Pbqy5MKoPH%Q-VTKFK+)G zK1)m>OW@?KMv7un#UEJLC_A$t%s0@QET%Ni#z=0srz4-VT18K9v6)%r*u6Tdp@Oip zYu7s6C`8jZ4f?v500Cs4dT`tBxZQ8KefNg{cmC?eHl{%H=tCugQfE?RFr3<}R!;?? znMa{L9tU8GCA~p#ruqLGQwG4x_w*f?z1+i-$H1dL@MsUD&Z@Af4ZD{Ow{k}!pRiCg zKRM`U8k(r1qw&3PfMLD8!@g{t3I#is$Rmq%n9R*hU%TNP`Sf@G{aG`*ASUC#RU39| zC;C`0OToy#9zl?yxxN%A9Y9Z5Xr&1`GpKOr!|RzP+c$hH+Tn9;Fn+H$Zh{tB+Fd0! zf1jHzRjDruOhFZYEe3)uAn`j0oM_PZoSr6lXu~eYi2U+jl=0mydx2*`N0#v9;CU^0 zT+>)qs7B@enV>w|DX3?;>&hN zNd@<^Av5EndM3H)EJXWjH*M(b*YIzOXMnj^OD&GJ$7@Y6)LCAWD!kUX*JdVjnpxrMYc;bcM&#sl{I3s#N`snVuN6Bg?pm-# zf`mJcM^qa;)=rb};ae$#wtmzDd)u+M3PyJvPci+A`^l3L(it*6hh3DQ+Tt@t#y6j3 zC{-FbM%t8m6m1$K?zgfHzl5V6c!=xGiGhTkGrbgc0UGyxQ0=@|^+}S14!C>dple7k zZucM{#U#xS;1bWe8(j5+t?#2Y0=I1Z?*4oFwCeqEoxChSb!YOO9nGC_L978*`Q&ih zyh4Apx`*PyY8w>PB^PGr4l#tndN>X7I%TSYX zxe7CwZ(~jReV_E_YhYLvfJec%W9pNmHn9 zGCLZd&-4F#KmVgP)wrEEhz9zU~*QOM@KVK z;^|WZXV$!bI2&sJ_<+=gW+b3@f}gUq3%nXRndzL<>|EswT-8scgt8QO=1cZfsY^2mYg|3!h(~0Kor0zladd z-9%){1n%Uh&RcOaife5>x;}p~0pwBlHM{d=}lATZb4nw_-& z(!wmxp64<8f|kha4elrw#Wm~KVl3L`QIx&9=i@MDcagXK<3%yki_B=OO>n@!r$;@3 z0jWKQTc4%)BRcO~=Htt#&Herc|s9LBrBkr+PYSk~!krX>K}r+_lYUa;`;$%m6+MpzyCoYeAK=py69j8XA zKSMbhxWH_%G2>P?sCrY{9`A#$`f5tjmhOz{Xoe-`~U_qOA`Dx|gL zd7nk!qt@{Z+cNbT*MxjBUh;-}Dagcl5TRLv*5>=X)R?w&G=vT!r^PL*sXvoWE48O4 zDKU+BHPvu$5U1?=3D_IW95}8Gz)d24Rjq-<^`j>B#G0^W!t>29bN`tp%eCmo6Z4bg z;BkCFBTHLUW6zni*L9C>((vnU_^EbkM4w(W{@j~KXYkz8hNdkT6LI~-pABUv8*f}d z5i9pN9^-yDsra?Dx$fgVwnHM(=CXf9#O{XJhWa0*8QB}r@gsw0;O=X4q3EevAKeLqAnDP#Vs{M1wgSXraXR z$eGWF>FO}6hCw!1%z?V*ays=slymD11Ses z;6_5#nG(HVN{ke2Fcm?A7f30m!D@^qzl*=#0Q|Bu&H&tkE+)VD*`M739LzoTrW?ks zIm>aal_o74?npkTD-lSb8MQ}cnGArYY(6d6>%(b;h$-bNnh#HhhCiG6ncr1$<11%t&I^=2E}#t-{n)DTfQN)Q~aAg{JtP!ijw

j;G?KH~w4B$duv}xW<&jcnIMH+}8r}g&Io0J$nH( z8%6)CN2@@sr>5})u&vi)xpwDuy6zQVuA4Cqts+u<)VQy$k z_fO1F0|i#568dP?sSW6m`sDyj*qO7w7g8MO&5FAvZXi_d9 z4P#7==hoc|PMiUlrSaR3NB1@HiSR<{R0Tec$BB*bmToA;*(x7(hsi$uFYNifylr=v zrVu+tz8+{WaPr{W7C>4_4hB?dsK>&PF^h&E{47q5m9uZwYn+(I??%w+_tWG&Rzh;w z!gu#CgGsS6ARPS2V+}b_C16Z*H`Pl6Yp+<@*W?@EmYrF_MC=%;nr|I`S~UDx{z{H^a>K-k;EfpzUudU#}|nMZ*o zZxX9Eh)7IeqlsIl)82T~m}al%+iA}^8IsYtA+gCmDXCyf1(Xs*D&9Zdm%SIKJ&wWv zvE(wmi~tKy3|T-v3K=3zhFBP@Z6O;w+HBak#~Fgb+(F=T&GLEv|8UO#fBVNjPe1`3n8|-ctRZ3{@WW=2?@zhk-i`5pia4g7rH%^gjoH9P@!-Z%|!C7*~8we?)BCnz%LPrGdM@VZ{@eBjhUXw3G0moQ9!|dRA8v5e zlOrzFivEE_+c&2sYon~anaVjlD<&#lrQwj{GF89O<6lgioo<}nF<70dr%eVbJtzDA za}5U3{Y2Xx%(dQxt`ydY&-9o!9R=+uUU*KYGWkS{%z`c*PR**p7!Yq<$&Ic`y!J_g zqXH#=HJl2e#T7oCi#iHcP0k5Ko(aDnA2Au4(;s~*V9lFk*crKxcqr=ehX7LXlqHYD zis?ZvzIK#O@&clS6dCN0#8}7O0oLM}BzBzc)mz|yrk1qEM z7pUai>ih z9z9!p&8S;IF4vh0_WC-$a2T6i_e~YN9}nDvK3{dARMWW-@0V7(??bqSKWbfiI+vnR zX9A=YlCs&{CL&*ly%Afdk5>{(v|h zlcG!^cW6q`(CwdT{AXFrD|c)O8P5^yi4LGJ6EqH_wR!C>-@VDY8vOOOo+G)ZS&x9L zC!;=n!IEf~^Pl*ypC zd79J<8Xkv4qv}ZxoodggCV6gG)!eT|PjS680DzQ||1X|t1lyLoT*I8*(oMFF+z%zC zG<-y6ldLY^2qSQt23n&U&jDVH^BQgto`NYL5!36y5-$uaTdV^5bI0+%CKy4)ZcfY` z(m`i^S#~PFsn_hcMBXb<_afqDXqd2-4LLDwrJxS2g!c_0$ze`ROo^CV6y3=f!pnl?UrHW3;uAjtsU`$zs8fAF_kJvncmCs!SV=ml?mMInEp zPWq^+>C2@D=|r8 z3a^Sur}X7=T$;hN{?QXE2x`rnc+S|^X+3pNGy4>y6GehvTby06(vF)sx}Rhs`h6nY z*SemOEg0E}_V1KQ8`=~f5-c%Ah-v*o4es>xT%3B?Su&QkF{SP7haQ@t#IKpW(G=Xb zH)J9lt-6_*w(;7%aO+ctEpId0$Xr3GCfJV;SlLig!FRVW*vf{Z9x)w9xGATIDRM1( z*X9!ldzj_b*2XRDCXg*;QG+VYGS<$u$>VW5B3qq&LUX>y%TR`WVNS^x3YQh8|%Jbiz^-dUdsHeL5n_r-~6l^)7HeaXoEZ0)$r?G2CW-2 zeey&X?R&>ZeFUvnPhd368`Zx4r^~;c8iqkf*T~^oCP^cHcA@Y$l^1&A=e-Z+=?UI= zeGE!>TNo2f{dL!3Sribfu}(0ap)(WXvIG`7x$lV$+RhDmV#1g04V*GWJeJo%!kGH? zSlgK5-SdVmZEi$%G2F=lXyTCF)fd--aFy@$=d>(qq-)#<^?N!0Q<_fyx|s3pt)irY zTV^1;2Z5WX+SB=eG+%?ae8VlLXhLIh8b++=CXvFM;^q-_!HNNSg28P5JImt&z|kyu zJkE9c9dwC{?}{9I&RnmxHDtPLduIL&fL$|3f(c0kj_Ou{;Pn zfbXJ~>%_MX2s{A%$ghz^zAX)}hE9Q3ajyhVz9^uQVd_jh#9#`i`c}Xx;a+Y)9$sK$ zYOjM8;ARHCO}b=PFL9`54!8}2?L~6X9Vloyi$?oT?k&*jlqQsvkoe}toy35(A?0c& z&M1gP0%BUuD0(6lma^e3{06G__*?9rZ{bNQo$((#W(I9l(JXT}l^?CSp92mXn@7Cxa0MftxL*FL4@1Y`*qqaoha_`qpaZ^Q2DOKL!>4TT|s8S>;q!|E2WYh;k0Sb((XlXd3m> zkg7IR&7jtTvI$U1$S|K8>1C}DUUvV9$Rj<2xnQB=#E4!u5CnuAMYwC7O%Ly?JFYeI4ZODzoq-{zyn;H-x!yVyv9Qg@+xgLE|)+I|haYT&T+4Spak{Z&A zSnJFgsxxA#H(9W+q^XA!T$=x}FWC!&FPsZ_HN}UvAsu@K zCMnKZ^d<@l2}$1&)`s*XsTucoYPY)?r>UVS!lPzE6YSD3FAd}>r|Bk=j%(OO`#kqE zUzZN-$Rf?7NS*zt2U7SSP*7!E-P&L)xHO{Y6xt-1BAu}9MuP60ASd1Y8T5Z~{!?eo z5IkNB@!a~0ewdujdG~|JfXIoa{isf7PO%0B`i=7+!>eE$@&OqDr|4OdNF3wZK~?v- zy_r>RC;3SUHc)4Vm}xYk^SKswR?xlNh8bpOF7$o5gPqS_DX*Vn-#=}DM1AcxlWwW- zdH#RT=l|dMgTLKruAvu4T?RS|;J5m)KK}eRXbPRdmJ;sU1`y$Ke9T)V21y1;!y-WOo7!ldD>h5UR2_$xg0xiXah6GnH zn^sdrR(}o$bw7M~R17WBhZF|Vt3-D-FZO}m_*o0K-TAh)9Zr1c#``AW2SpRd65F@rg9}Om6EYW2;;S7MOzdmg&@n?HImjAZPflOoS zmvccXX`xXHln}bdWkH7-B8AK9Q7dX|?&g=W8)RYke!}lr*Moh;#GeBpzT;a+Y*A$IyPB5yu%*R@NSJlPA1G|ml@*>Wj7qrPy4Sw^!Knd=%2U}zX~aos4V zNSR^n%6iiaGY>D?#q zp}*;}gUksGj%X#EK*mfNm6~h)VW?X1@8y@zjUxHR1b^^}P?^ra20HIK<#G_yXbeC`X)%!|p3MCHtGm^yv>4>~Q=r2&m8 z86`JhU4WRp_*}FXxzhwjW?RaU{@Om!YwEdAIW4h*LGvbJkO}H#{n%<=H~!oA+TVKn z0w$+_|N8N9VlpVfy(93tw-z&q9WO4;`J1l|-1#|PH0*F0(lr%ey$l@SP0IfK^yj%Z z%I6t`f9{X^K$SMuqbHLVa46W@YCVAE+FD#g@84uu52XkbVJH#YEyovhRM>A06 zMI*kf3I^`wj$7HnV?a=w%;>)trkqTE-lXs(I>h4+5nz!q58&XsDRcwIu}&|5RffCP zcOyCwKF|Lj$oc<2{q#?}{=YZ)8>SDy4&blFzi*hgbY9OGR&Ax=%l!-9_s3wu_PW|7 zvK0nrcX1*ZWuO9ee}qn6(WH7TC9O5a+%Ii$<0riE!#dTp4IhI?#L0!pMCFbK(lRjE2=Y($L2 z2`!RidLMGss${0BrUX+ZmJ5tX! zcD^7-)jpD}co=BVZ+-a@=)pLSuVcUQoau?gF^8szeKL45E4pMquXS4!_jsM-23_)0 zZBUq8*Yld5HoteyB}z#rLy~4KrdAwUr?gxb9k6VtJ#u1Xiioi)V>)|2^cc6ajjVFY zZrIgSU~NZc%oKnnFQrODd;itgwIz6P5*O=5e&{tlnd9xY1wrmzRs&%F<`4h*20%-4 zqp&SUOrtdH^}yG?O^Vx~$Pw;&8&V5_4il;lXsVgp3TeAcaPh5(;8D0ZH9F|t?1jk2 zPO)kt6M>HA)wQM@YCCW=pNxQdbR%9ipS?&>abqNb4TGqvfbQKKXBLQ68y?~m#H$&U zD!CcuH~Nf~8rjg$)@jF5a9T9wB7#H1Yr?L^QS?0NxfoQ{>QhTUBq>-o)5W=oqUkZ| z<-AbNF}14CZrJN<&fv>9-;3Zk|+ucuKs6fWZ#tTBo0MrZAC zFpSv~5E3WPRWCP)$|wZfv$QQVRi6+%^tb>i1h5Xj0+@w+vH>cKITuE*Jj4AICL6<^ zCRF3P$U3QXlcu35CEyNkIyvH*R#4}8Qb`wc#dv;#{bV}j18%yvta$|<=7v>?C?b;@j*mS8!$tp^*mqv#2#(djVC=jy)D4UvbQcT*RdO;nV1ResV9^;Q7(nZz?>4KwHYb0u+KC!f~_eEb3|ph zZpjuD5HzPY9FCr5Uhs#yC>*No#1sG)mr-;bER86?Ui4X?F#Uho`=4KXlI1=O{6u7C zopZn4q-HUT!Tcj^aAZI-1RI9evvm`e3|YX)@a%@>d(yL-G_@R<19%9D0(28s=Pf(KPRcl7+K&iNeExL&RFKi$ zU_AU}VuC{qDe9kG16@Bp7#3|Yos9a9jhlX%!a5F*G zhJ;{KBt{b&=7_`?#rZB_a+9VUv2I(dScB@F)gbK8A0t6Yo{@HgQ!e#*ef0``(}|)R z!=lWFEwZ-fC^Ip`+8$%fnUiOtFCe@spr{kl$4~ERZ7a;2a@lF^$&GA-7P~#6(>{Bq zcZObbQ|6MmK}jB73JekT<~E)Smw&Va6NNz7#PDc!py7IuBKSVGloBRa_VhaaT8jez z?#Ex_$K-n#6XVlz_w~|zO>{pD9n2kj+DArQpS0maGB@9xGCq|Xa!zPX@Fpv2Ys2s1 z)9r@B#aU{)O|l((V*E4+vLr}~=S{@fFDGiY8=eMcX1jb~ms8M1Lw6inU?7Tfmi%-E z^z*+rE5yiQR@?{h67*+P-Cg&mrBRaaH<_JwEpgt9sh_LbrrYMabC(6WztTX7se4IG zZv0UhNhwnnpp5*S?!TIC-|CyZs{V4bwzxprQU;OHy zlxX@pU~`Xu@1NiWdm4ZpKBgL!1Z#B@K!hiZ8{Q?a`7DA!7HaP|`>fv{B!8#;+S?3!u%- zIyH~sRFmDGWWERXPBMxLd=Fz!zJPf=tf_)ckjsLk7{=ZuOuXV+Ss&aI$WmfjN=`W^ zH8L@?_ZfR1UmpX2pZ<%8laXm6u!4w~5(h~XW@aEFVrJr$xSzNLVo|Xle*E5xFWqBB zm~0=yt3^bJdT!=8;QMrvk(1BNI@MA{g3_-}3C;kTyX5wEU`z^!leZ01k#4|b)~3|H z{Q=yXPePsUl_FYZcL1G{rak9*9yn-BQY+YeBkTq;A~Ft#iWbKP0gaK^bGC2!hJ3pL zi6FqB_&rgn1hAyYISdiE4Yh7QD$WJPQPL#_0G-h!b8m4P3T*$c-~aFPU;pLbZh!gB zpYiYh@;_Hqd2d}jQ8NYRl+!rueRj&z_{AHQB`;V~!&^Pm*!^X1fz~n6paHvSnGI6I z+h`uWIMNwK-8MXEJD~_Z34Ype$#wNPF#rylvKL@V4Q2qwKsmobDOEY3WJd$9^Yu7U zL8EQ)f%C3qKA?GFmc^mJAJP$Epp~vY)hEP%{)|g@CC6IV!=RuSB8UGbfRLh*^if(4 z6tZcj#`^2u%Yr3nmuuZ%rYPBw^%QY~64Y>a{Z*{CPKey|^5J;COG;SM&5bylVv`kB zoC@3T`EH67h{9~Td02DS-)KMtMS|`$I0>YFoXM9>-BHC;}?o`}!eVSp4q(C z4HB=(lu$+Sw!I!=2rG^>YDeQbWmw10&w6zFjF0hQEnet?XBme#VLo6{lW1t%Jr!F$$iZdGjI5!tUH9CNXI8serQI zJJqAx`mNlt zG-ASJ?D_SYX%c{esNqpp_woo?kb9Hu144!Q^{X4W(bzW?z>@C)jI^=d-#dHFfWiei zyHsn_2AJ1MIcF?fkP;zraZS8!yBQ{V?4iOSCir1}!|S$<6WeQ^kMsYhKL7g%`-@-w zlQeN+JFwFapE9umdQIm>dtf)Mquw49$m01TMpXr3D3wyik}{eJw%XhYp9Qyk10&

VxhIA}O(Q1HhN0ip&}pRLqykPE7UxzAHf?w8_kP`h1qR3O zdSI3{ypWD;@B07R@&%=J_1@!&g!X;8+sN0Gv=DkLMjGyi=?)_5=mz+tN z6A>lylu{K@E4u&o9*JlsG{+Wxe0>Z6e$p@3f+kopGBN4~RWQ@KR#P*pt(mIMym)J^ zN!=>N79aF((-2|x(Q>1DatUWpr>jag z-mypo2(N%nCw->X>M-(mME!W+`ey2zMj{?efWE<~ndcvO1CgHJ*JTM4ollISz+#l@ z8Nb?Auw?Kk=r!P)Y4qBs&Sv=a4?m!!-8_c`7=h)obVZ`?3Jc&0Z}NO0>XUwo~s36d6(5Xf4{)v z9eab@8%QQcX>R3?#K7zNzz^%|n8J%an~Gi4LOJ4eIzwYWY%u7m=jN$j<8D0pXd7;M z0TZK?;=1UL$g5y8og(WliZIiW$*vdf?dPJzU5JkbSc7wz6Ek4`9+y(^vb>-K+Lr=J zPsB*%CQ?=0wcf;@UbBDR67)@qftZB;wyA=s0$S#|`=P<_`tK#ovOIp>Z}RM3{qCB) z__~)nZp(s9?f~8g7>2IzJ+Hm1REFa^qhK49T%t@9*EbVE6sWc0hxLcUXG?+3*IG{l zo8#}5b0a{&5}&o!inVUBXS$wL0+rZWJw>QS87<-lO3YYtLE_tR!tRCebJK25jXi^4 z zax?8miu?m-rH|+uPGKd>q#FjCfDyQkCg?`F=Nf)cJjn#x^IHtEfsC9(IGr zKp!J%p-SDW`@~pg!B?D@Gc!QK7^|c<-XkXt6lNk zG<&ai_r1mkWja_oLrxI&c#7wb5kt~2>m-Qpw^N~Q7qNpSl~M0&_;c8ykw2};C&Rxv zN$fVxe}#EGw*`!7K2GeBoAXcF!Si63LzwycSdyeA+T@2)g5HIoLAHL1qobeM=q z4zKx67~03z#{l5pEB+6dsF+Ao_xx{`N=81Z&D|eFJuDDvOql?qzKCb4syft<$E8wZ=B_hxDm*par; z@as(JnJ7aBF*_WAgX+{bCc|f+WQ(|!Zo_5j8()=%tOQCKLu7S6FgbP=Q*1p3aJaP} zXjeT7aE*Vja0vjPrp6Wr9Dnr(U$+#K**>f|PwRU_*3H_QYEVXl($$OC)=+`aY1?NP zTc5UfW5z?idT+iy(?C2I3Olv)mKWTTJK?*QeuY|SWZ~4?E}=L#3-iBoOo+#4F^?7+ zs7g@2I{Utj;3v_wGx@~y0$1a&Upuu!3U=1gvc}J@Hvs34yH}r>cYMlDB$sF&u zHBbtzE*Js^iQ}TcgyuvsF(QVd2y>TWmp$B;#p(M9N@34FH*t#J0bxC@gP_aq&F+4U zMHCy>NQ^cx8n&n-J#*Tg_W*TYfObOJ-&^A@O-jM`*zn`j6ft|60V00v+{pXz)1Ahh zR_sxz{rNpS=QPQ`?AXYu2_9{xvv=dh@O*eDQRVO%q6r4z`!*kk09*5>cZs#ro6)U# zGuTbW7A`2I1l>Q7ZYWY>6r}Om@9n_~IehNN_5e(ATkgo2@!RA`PiF<*bg7uHij_F37PXir8#KXO~PE$G}2|mcr5NqlZMRm)M$Tx9(5c0+f_4{ z*%>6>FjF+wI@XM$jbX;;o^?@yh4Jj{PjdDG={0#`#!I=o;TCr0$oxCRBoIRE&1>Il zr(u*%`hJD^ei<^B#~kAciakfhfU!Rd<38eQ0JjgM<~8JlC7QY_jA7HfhrNrOpVrI# zyPCClp6KbiJgr~x{c|2L_2}Xa^}wW>2PXaa_n}A*)ON!z1Nk`re-7vWSHJjLzx%^) zXAb~AJ;}>-1v~wJjbXqJ8pXMlrUtdP{p{?I*j85%8LV?>qQRFwtdH~iZGH51HEQP5 zjqIrwM8oGLaUSRY{CqSO)NPl2b&7tM@P^&k?(`q#s~U3Her;3u1JLB1MP0W)47&*_ z`(X2yQuGkon{>49{(q2&_|V^aQh}Q!fg~Uq+WUZ}f_3v@yoz{VBruSvNi+6qe{>TC zQc6sslg#3S1@JKd_{kXn?sXOa?gkst8>8F`nHsfP`N*KzU8Vi7&%lyFDrn~Pcop+# zyes{3$O0%#K5k{fGLUu#NJ9Th*PI3QEMP+OC@SU&nb+X~(1|^!=9Ek3I4rR{`c4f$ zMGRC&2feYdcT9eJq=_8@0Q&V{icM8_c|HZ@u?N0%nbNH+uE!b_TN?&jelnZ^hxpt0AJoe;ctEO_uBvb%m1PLhyUomtfCUx*w4j0QJ^WIZ(Z1< z(K?-PGOu02+Ex?}6nXK_)=|$HAt$5} zQB-n5ivq5H?~ID}>%8O=lvH=dH>sD+O22*r!P_QS+v=z!dqK0d&B51cC~=4|o0?-a z^G2j?J5tpR^C%q(=YyktM_m$z{Gmn!DG?*3f<(UFiApAN zr+YVsA)xV|ws>A-L6C{a$s{aW2l4FA!{U22JiL zyR=i2I!Ti#jceuXl7_9>@r}HLl&cDmGM1e7SS}3&m)~!QANCmcx1+Q3Gd!%)CvdNk`f)Pv41hH*}9t-9H3Bv`4L`)du>1U-Re9aVS6 zghlMOM#6|Qr!o?ZopF+4V4#j%#z35r69LHKQQ-GUq~V8FhrdQ2R8W{#8o5V;QuwR% zvy2IaJe>!e(AswJIFKe-WB-xKXiP-GWIHotjyUx2Mj{(3>#R3Sge}9NT zoEWq_f*tUCVkV|UDKqJ^(5L$gXnUXnpj6<*8qc&P5DGDbjx?UGhhYFIC_fgaSE}L; z`o;g;X~#N{zNY&muH=lD;?A^N^-W9X!zJkcFhJyjJ``vg?|$q)%^ik=7Kq|C!bLYIPYf8$sGMI8}4pJ^i2y5cRGn#?%{B!P6EbaSI2N?v$*VVDMj zz-BPEfg;Q()zNQ(1}d?KMGzPX%-wN*zkj{qQ+RAplg}3=nKPDBc1o@tGsPWo3?D$9hPEvdvB^D|p4%2+CL&>pO>rJ&H5N!g;$aAm*AywNW zi&D7$_k&j9j=(*l>PYLR%WETQP`-%%qN^e)g-mF7{vX=Oxp4^u?1|b*6LJGbZgTR1 zc{Jg1hkFBJaov;z1lb#Zbd9J}@qO+2`s~b#@xGN{oQ71vLSmz^Ve+=;g1aQCQ?w7m znJENa*}!T@%%~R;aeHRCH^7BUd{#cN1=PA35|6b#H}P)X#pC*%6Cw^KS7L{Tq)koy z7{Jh8e0SRPLgj=Y0!{ePJXfgziaSdu-|Jl8Y-51g>6RVU?dbQC%U)R1(XHH@I!Ckn zegFVj7;D=H32${hKHuS3eNPLx+_Bbm=xh5k^c34S{4wI(2wxRU*E@@%WgXX|o2cm+ zeKT&$;@%9oK%3xod&Ar0wJ^WOCXTeHh_OU8nS&KG>z(ZwY1#K!PxqgQ!67AIXC;-0 z_U$aB-V}QxM3pv}AicrwpKZwnFUuXw8MRit*0)1M!+|3H&Ol+0BHb_f806td>3{y& zK<}rx#xxIMslu8Mh8TpDGZNB4exqt=(1<^y1A=Z)X91b*EQ$k*QvV7FPcV57!z&-Q zZXzG&|Igt3|BGM!lk(LszOLW>;kO2$*V6B1c>YS_V==lA*0j6 zM%-Ual6xFr24Mf{n|~$%^ij7<8r*Tf!NFd_Kt6l3z(m7k`tb9_xR+(WE zOoaQgc=0$DIcf&9y$J9Iqm4pjS@LKOn+dk9KA}IC1u?-jf%zV^V0|hWR0W&5lkSpl z1I_6g-5OKn`Or|^i>&^+D71E;qDc@{ysmG9hPc*kd|##vqY1$Z#KTNSCicDfb>i@* zC^>tS8=OM>Xx_|Rp}lj#yQBmP#?4O4c30jRNxU2w&{TlgZ$?y1pIHQs*yjD|Fb%5o z@jeLrzFrlniJjt?k{8XZRG4l+{R}b|r?%&c2co1qDmrUtA8iA=`P>s#^vJyE=^^jy zXb~CKjFbqO+_{@u3Z!bL&dT`ylFMX_XOpShguq;+9qjB_n<%w*WG_vh=h3!N+z-P? zm0&?>m^os2kcdeX_XQ;}ZYd2$Mn{TgG*gw3vYSUW^=J5=?t}8#B8{T2zp6Xkxd~wF ziQYe&Wqth)g>pnZci+MtL8)5 zptYjXb#xdJq2wE2I;1;18CcB;6!(0`7wHq4MYNY8G`k%h<aS1lkx8989Hy6|N9he~LQVjqxS>}JttGrehSY@SCUXmKo1KwhW`QQ+FhuGN z6rfnrZA6(WPR%UA_XgYdAd@44IT#2N4gWjSAkfI!5?FjA9X zE3#*+>*p+VKfXQ&0RJAo5@j+s#WPb?F;gQLYqBP7cwrF{D1yCda{W`-serUJ0+Mt5R|$J7jH%{*=@P%BaOxR2~;rv_c9RgIWF z82~x;SQbuBD{2j@`ygQdJ>KA}UK>mi5y*H@^?Oce-%W1It~qPmoSLd~q&eBH`F~yC z@VdPraq$#@Q5^6v3QHiM_#snkgPJ0T@kq%T+q$7bK#JKLp~kb2u;8n5Zy1Ojyx#itt2oyT%kC&7^|2>iGxmvxZEXSaRiI6x$bc>vDd%Axmmr(%qUz&oxyoMRrxYubi`msP+ z0`=?Pb95u#5Be)pGz~54EiFC}OJ3lWbj<(O$e2#a^U_QH6h=7S2tBq3*5*z9Yf$QY z!EOL*6}&b_zpjuEVqag5wDDe5m{aW-1f^%E?8G~|dyF+Z`)ORGPRGJ)zlLAlKH<~t z4uZ$k{rGr&HvH=J)>@B}foV7)DtK%UJm~SPMaSonzFu$)8AGRjW;YGuD4uJrhYm7x zca!d>WxlRHS9lItMl>)AcMIRN`o3iHE->q~WuBg|{hH3#^$Gz#|Jk0NK-bZJF*M5L zOr)nqmY$nuBEphhoUW-ZVJPg4pNYBKbF8ykD{7FGmt zTlY_%Ki?ETtUq`I*$i*`*eS7zXllO`jv%)I;Lz#^{mcwZm&F}}Y)pG_UHyq7y}xqvytOwgM8{-C?W zNcV(<>CAX3cf2e& zk9lkrZ*?8#=UL`-HHevqOB6mT?pILIddfr?{`CZqDs(XKoqtzO8DHE#p~SOQRi?&Y zpQ0t_rugIh|7p+ve(X-5&db#B^91s2*u4Uzwu)DI!`ov+izr)~Js=`VvUC|$)Uizk zE!c%!wbWw(oe%7qemfZ)_U89e7;8@x&EpV(X_&rxeIs~V9|zVz|8_Naoc1(;!sOAV zs#w<*8`IHDnC5{u9saz_CCn6Ctzf3z%Y+C^Sx|TZn|nH}+j`(Y_bA>11`CF_O)v!P z@cWny#K=rg&P-$kQufYCjhWS;A5wsi0l-iDWhM|)sJ1-{Sq-X2k&MyH0q&bT$V{48 ztyRDO;Rn2J57fxPb!`yznDz5ou7)o-7^G@p#>4^b5D}Z2U4$p`g?9+4(|A0;#O5~_~f@hC%Oum`C z&^Hr2wiRn#ciO(GBdz<86<^$6!qCezQYpFSNy>tiH@vNHK0s(Knlg^qxRH~a;-V?` zsF+S6lM{t(`J4ak-+lbcfB2^h0KJ!c+c#YwkSKe$wZbQ(G+uhY9W_uark%2AQ%nzx z@VdSYJurptYBpT+Mvo&S*^8sfZEvu;G1di2AtpoPch!6`5kB2sJRU0!Fwr)OpfzIM z`r_`+!7x40ok4(AyFB>kW|fV`5q)SzEsW0qteZD-qj7PdFuhhlwtt=UEVOm+VZ%W23ZG;+xOTJFW~r{XCH0MJa` zV*|5EAsyD{Fu^-C`w@+0vll?Pl=tGqaQU<6uZ|Ms#6xd-IQY_z*!Oj}qiZ~dp*?0y z--#kTH~78q&761r@@y1{IkJ&J$v@MkzHUm&xbq!(NocL$Q6G41Z-<|AiNJFT!I^Qg zuW33lIlS1+$;}YgaMm|9D7)#_Y=kDNdyL+pxeprbX;|_yMfdecObH{uj!Mhf3~q{z zyh?aDY@pG^^k-~tBF<5X?;@FfjhqGpsuu6rka+)lr*8Xx>EE-$vPM%W7mdFi9-h%4 z#`kSi@VIDnar(1ODr&0x8XhkzPh^(!Q0s91D?uUHs>hRh192KohB=*?Ywt}AOD_0w z`O-h9)~6=;c~G|RC(JZtD;=SpB@egk29h3eobU-RNQs=4V2ao6fw%234IG|X7+>B# zA*J0oEfIk!!ytI@HtuDWHk$5gekL&`+)L?NWM>!!YpjOP0H z^ymLqfADqv?vK9heobFQ4VQ2=6uH~n-<(VG0h(2XvE!PcqGufry7H}EEx z^t!i1BuLOaDCHi)H--;tihhVc%X{er<{@k#74G zEp;dRJsJaQL)U+B!<&CkYg4@4vpH9YDAD(+I+^=^6Si(RuSBB<6PDuj3U&!8K% z)?g-3BbW(L86~+^cqs*H4Xca}?f?A`{-2Z+kH%q(X=|VU_Y=1lJx@j6$({K!rptB{rgQW1Qf?qH-sBNT>(N~8 zQ1DKf#=S{#7vwq)C7DcGI-M1!;j3WR+Q4CE2Rv#!n$$(pX>{$-d@r8qyVW`xrLGSY z$l-v0%#l$Y@!{DFYS+Gfzy1h=jcjj64HDL=(CLw6txNDeL*?wzYHO4WP-W*==a+`(}>TXF@ezZ z{Q*}0xhHr0E4c;evvHF9de{d7eZbSH(@#Hd$9PdOL6wLN=7J1HZV6322Yp`4^XD7} zig8|)lp$TGKN@t!>-Gv;HBuftGrgN%_Oq`_i{y{z^D$E%F{vY-Eu|~XL@vBpKf~UeiIRY8jEOVLw%h8KmGatm;dO`@~NMZ>ED;A>F(J5 zoD9zd|Cm40hyfhebX63opp;STG2tYqNOcL*P7U*GQ32UW&mXBk0iYN{S3JAu8Oa#seDQ8qMY>;Up z2;VS*CVEIwI=qQ#QlKX-J`Pj2nLPM3^#eJTNN6|qf=8{~6RKr}rnMoWSgxCo{WluvJjA!Fy7`&BvJV#qEC@`yi;y zInl}gzA9F@C8ZBp=E?M4V2{r`ub;F}yAvgB?P$_>U+(x~xqAghaIJ7Jb|5GB?$bPs zydh>wxRrt>FYbe}tpmyYVSUA0T~Shkn7i3u0HFh!<&<`GTlG+E_j@T#hD)SBey-u} z)byrpkKa1ouk&=@waE#emK##a12w(}GVs_QhoY(EG7!i*M@@0R<}^k4?88JR!k70i zJ^l?qs}&E~2D(m(t_GSu?Po^|c%*&o1?_wt6DOoh!w=!t>yLv~l-V7jJIW3P7={dn z*GqeG+yQ?v*`vouo)3E7_oZ7}c8SG&TT>?uT~QkWCBxQMwA9>abTon-p@a?EdgP&o z$(Xa5h@7#6NEPK2=92N=RNRd4T=Wt%?kRaRQ)Jfng8gjX^^gZ<^XWcF8II!JKq^cl ziFev|A5L5uwx0L>W(}qZr4%eECuGxI`1|u{hA^`e+{=QD1&_8}YF8ia;RcdVyO*yY zqI8J{-pXynsv*p(L>eBl!PL>{r7WKEV4gwktT}~Rf~Kk9CV*1{hbDjCKNM5*pM$-U zA|<59isB%>4a)iroYF8PY}SkQo#GDOQQO)4vbGB4bXdpd$T%i9Crt1d;1u$et<|S= z2KOqEze<7PM@@1+p9A&%v_#H-#u1Iy*J@An$;`-{kSHCDLiVfIWT>*o4|7sv_ ~Z})Nj|Fq{nj>4nv_!F=Zut-mypB2 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

Yv`I!$Fe;2eN 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 z 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 c^9;LiERPko>Cbe~ZG7}Gy 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

%VQ4q^z)t`}4JmyccD_dpOGu|$J z-_ywc*l_E~NCR!#KYjpOkorzq(ZP$g7th_g=Q0ZYwYy*Bzp#l_OMUVy*_%lr#mA}Q z{lyNOk=ElYe>g&NV{)#mp^50?=eu?@Op)5w+Qlvje67{95sKmS={ zc7g8){gJ-U-ZTMIck@XT=d$??8S8ta()XTrACLzED8-I#j);|7>9J~l(Ug{b`t&huUcUBg(xAcvPf7ts0=I)qm zhI-Mpaq(E5UY@xH=#lp2n-1A_LZR(F7e&27LWXX~5Ps`#t;$#54cOiIcw!*FoTFfg zJ9v&8@+H+N~>5BWpVao$>2<^pX6oV zH%2~V?V=_{^)d@;FPzlg68_dS7DfixvZ{Qrb!nb9W%A| z>2PuPn)bLH8@mxFm1|UxHQuh7MDRr-+! z_v?{J_?;~O$QjlFF$o7d?97}QGbHiwQdvc$zNFO&*Oe^ZKd+O<{ z&IBFGBRBdYM}y***)hI`I=soQK$b6gtAXg4Q+bh67hV5XnFw$TUKDR{iM87~S3xWB z$oy-2=m4HdW4{4LkAGoi22$Sst|(pA0uaw5EE5y)aQN%W$aLUk*}fX| zO3pDkq_r3;(e0=BD{uZ!?i74tNk{tS(Lv^IE`N)q^RNpjM>o$_z!VlmkYr!LZ#FyH zZ)#i^Wcj;BRK@)b0aowuV+G+jJ!N~e=R?H$PQ{xE=6&)hP`7^a%U$xMhm2Wh5`G@X z!B>4Z%TJVFBFv)uxdj92syRtFS})oCvJ∓Mav9pyrqjo>GD7C)(4!bDz3OkL!&0 zqA!EB;p^N8-^!K^NIsRs6#-z|w;HWwa^7ovODf*snd9W)bvXWT!#?m?eEZC~U|^es z$Y#mOR7t?W4~U-s4*Ir8n8J`uLbpaH00S82lv-P$jRpaI|cm2=Gcd^;|h5=67yFoGUS*hE&A8@)O1mk;?~L!KSHB&+hI z_{)v{o*36J?E=I(m9@Ip9FfE-glUhj|DA0Sr9^%{2~>(PDlPa{wS8v zEnm4o{N1*!n*cx$(C7Oc6Nw-fPe+UdydTfj2xtWnkDA-hqmJo?p+HKhw^#Pn2nmid zjsn! zO^a8QwSr1U4BB0{l0Adl%EE#1kF4V{9s?k{gwl!$2M2r z3{7Yef>vJ2Uqu1^oz||*nrk61XddloO1B?3DTO}v4SANblCZff*M4gBUg>xc4_{aK z-@&m2zt>YKyLt)(axz9d{W&`587=aj`DQ{7>t+Q-H@}Ov`o(0Cb{sT57UQ1pUK&-?2dbd4j8xpz(+B>)FEf$)UkOa zb2*M{_oXsa>lzqT!?P>Bgk4W~CZn3D7`|K9^szpWmKNoGOk>{Q4T1C_xsD{_O60<2 zC;Rw4crNt=wrGn&YNH=Kkd^-U78d?UuMF{OdlT#;#wj0`)DbCh!1h3_4Ypu*O&`jk z5yaL4>3wc{M>zZkE%QBJxg=x}l6bX%bO|uPiku2zQ!}J1CTY9$`$693Ak04RZ*B|1 zrH*f9lUXZvnNkyXXFEBANrG8$sdAoIBQ>3hp|Or(3q;$&`u9+x-6neHEg$hGyS;<4 zb(KkdY~E@bay~Ky%3mQPxo~`h=*WQ~YLqNv59bhF5iyXHD0eX6cd5>r)0pYXIA7Vs z$BF!FvP&3|?JL561K8tg5d8%;KMs_*DBvc29J$iZ_=5D=a;V@Bb9`2Rp}vn9V|q;E z{&JH;rH1($DRoaimEGh=6l2(hN#xY%7%81gQaeBDKqc(^%f)lvT0&w`DR3YWvmL#) z5}bWvzL!^8e5 zvGEz&)f3g-i5BSpTXax*h;YRp$oQsmjH3M$egubD#rOPraU_vKd^qs%%<-8iew>oS zC&KaZ%#4q>1eZncWqHSqp(UQijVk1Zq~GtjidYG{D(c-9*_1bT{hm2r|I74(PD)By z&oVlzv)iI4eyO-Hc#Z?Pwc{ocJvGwkN zx!5=nGw(9S``&H)6Q;ILjhdeSzIZ*&2Htjqq!e$f=^2mQwJtY2&|c4F`xS7bH2nq} zG$Py}bJ^*=4g)nQoz8H53!{Qu8~a!T-V-(Zs)}XTmBJA6(fGwiWZ?Q!smar8J$5?O zHfG2MD>xbr^I0&16E<51%jD10YTD@TOK-MK?xECcch%d~)Eq%2mR-zSA8zl3UIpV>aEF+>ZHBUByUwnxnlpbS zrurZ|SZ-XaZ;Dxt)`&`arB_}~#(Mn#b%B*Al4WY2W!@wqw z-w}HrDwxBTpaynjH|R9`)Jbr51;%e#Doh z_qRosP*$FH6Pws|jG;jn7j)25sbM&q0QTK)xMlCul2-8kf9C2FGDQPHVZ7PTN4jl| zWp~}f$!J%HQtpNqZ-@B`DBK-NRB*<95EYp~A}mmo8TQRV zQ>v=-NxL<@=VC@Lg(1h3QsY+@%o@nTDdaFs$85>6&iu;1Yyla3p4G~A>X;GyXFrxE zD3EgQ%u+tDf;lrx$RErRwK^=?LRtL#5K9(WM7(}MyOd|h1>vi!1y zrXz=D|KFwduzToMq3tOo3pJjC%sX$;KR#1VlwWrlm9i)WW^#7k`u~1X%ARk{?PXx@?YKazo#H~GMs_xk29lG U%d4P|ROg4Wk(pt&zEi~i0RD^q3IG5A diff --git a/thirdparty/SameBoy/QuickLook/Info.plist b/thirdparty/SameBoy/QuickLook/Info.plist index 9b369ec44..5fc594304 100644 --- a/thirdparty/SameBoy/QuickLook/Info.plist +++ b/thirdparty/SameBoy/QuickLook/Info.plist @@ -48,7 +48,7 @@ CFPlugInUnloadFunction NSHumanReadableCopyright - Copyright © 2015-2021 Lior Halphon + Copyright © 2015-@COPYRIGHT_YEAR Lior Halphon QLNeedsToBeRunInMainThread QLPreviewHeight diff --git a/thirdparty/SameBoy/QuickLook/UniversalCartridgeTemplate.png b/thirdparty/SameBoy/QuickLook/UniversalCartridgeTemplate.png index 1bf4903a2c62187a78efdc017a67803c1ae0be37..7f251f4a0374499c366fe1a0772e93790ed0027f 100644 GIT binary patch literal 73171 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 VWM5p>#a03G<8BW2ui`|U{{wi=)%^ef literal 116827 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

Lry-PRq^m=R<6nUR+su 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

=Q2(q8h=6fH` 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 QQC2Wu^~P0qS4N)tUuhG>K>z>% diff --git a/thirdparty/SameBoy/QuickLook/get_image_for_rom.c b/thirdparty/SameBoy/QuickLook/get_image_for_rom.c index b9f87edb1..6c9ac9198 100755 --- a/thirdparty/SameBoy/QuickLook/get_image_for_rom.c +++ b/thirdparty/SameBoy/QuickLook/get_image_for_rom.c @@ -25,7 +25,7 @@ static void log_callback(GB_gameboy_t *gb, const char *string, GB_log_attributes } -static void vblank(GB_gameboy_t *gb) +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) { struct local_data *local_data = (struct local_data *)GB_get_user_data(gb); @@ -59,7 +59,7 @@ int get_image_for_rom(const char *filename, const char *boot_path, uint32_t *out GB_set_rgb_encode_callback(&gb, rgb_encode); GB_set_async_input_callback(&gb, async_input_callback); GB_set_log_callback(&gb, log_callback); - GB_set_color_correction_mode(&gb, GB_COLOR_CORRECTION_EMULATE_HARDWARE); + GB_set_color_correction_mode(&gb, GB_COLOR_CORRECTION_MODERN_BALANCED); size_t length = strlen(filename); char extension[4] = {0,}; diff --git a/thirdparty/SameBoy/SDL/audio.c b/thirdparty/SameBoy/SDL/audio.c new file mode 100644 index 000000000..29b3eb0f6 --- /dev/null +++ b/thirdparty/SameBoy/SDL/audio.c @@ -0,0 +1,111 @@ +#include +#include +#include +#include +#include "audio/audio.h" +#include "configuration.h" + +#define likely(x) GB_likely(x) +#define unlikely(x) GB_unlikely(x) + +static const GB_audio_driver_t *driver = NULL; + +bool GB_audio_init(void) +{ + const GB_audio_driver_t *drivers[] = { +#ifdef _WIN32 + GB_AUDIO_DRIVER_REF(XAudio2), + GB_AUDIO_DRIVER_REF(XAudio2_7), +#endif + GB_AUDIO_DRIVER_REF(SDL), +#ifdef ENABLE_OPENAL + GB_AUDIO_DRIVER_REF(OpenAL), +#endif + }; + + // First try the preferred driver + for (unsigned i = 0; i < sizeof(drivers) / sizeof(drivers[0]); i++) { + driver = drivers[i]; + if (strcmp(driver->name, configuration.audio_driver) != 0) { + continue; + } + if (driver->audio_init()) { + if (driver->audio_deinit) { + atexit(driver->audio_deinit); + } + return true; + } + } + + // Else go by priority + for (unsigned i = 0; i < sizeof(drivers) / sizeof(drivers[0]); i++) { + driver = drivers[i]; + if (driver->audio_init()) { + atexit(driver->audio_deinit); + return true; + } + } + + driver = NULL; + return false; +} + +bool GB_audio_is_playing(void) +{ + if (unlikely(!driver)) return false; + return driver->audio_is_playing(); +} + +void GB_audio_set_paused(bool paused) +{ + if (unlikely(!driver)) return; + return driver->audio_set_paused(paused); +} + +void GB_audio_clear_queue(void) +{ + if (unlikely(!driver)) return; + return driver->audio_clear_queue(); +} + +unsigned GB_audio_get_frequency(void) +{ + if (unlikely(!driver)) return 0; + return driver->audio_get_frequency(); +} + +size_t GB_audio_get_queue_length(void) +{ + if (unlikely(!driver)) return 0; + return driver->audio_get_queue_length(); +} + +void GB_audio_queue_sample(GB_sample_t *sample) +{ + if (unlikely(!driver)) return; + return driver->audio_queue_sample(sample); +} + +const char *GB_audio_driver_name(void) +{ + if (unlikely(!driver)) return "None"; + return driver->name; +} + +const char *GB_audio_driver_name_at_index(unsigned index) +{ + const GB_audio_driver_t *drivers[] = { +#ifdef _WIN32 + GB_AUDIO_DRIVER_REF(XAudio2), + GB_AUDIO_DRIVER_REF(XAudio2_7), +#endif + GB_AUDIO_DRIVER_REF(SDL), +#ifdef ENABLE_OPENAL + GB_AUDIO_DRIVER_REF(OpenAL), +#endif + }; + if (index >= sizeof(drivers) / sizeof(drivers[0])) { + return ""; + } + return drivers[index]->name; +} diff --git a/thirdparty/SameBoy/SDL/audio/audio.h b/thirdparty/SameBoy/SDL/audio/audio.h index acaa011da..0de574679 100644 --- a/thirdparty/SameBoy/SDL/audio/audio.h +++ b/thirdparty/SameBoy/SDL/audio/audio.h @@ -11,6 +11,35 @@ void GB_audio_clear_queue(void); unsigned GB_audio_get_frequency(void); size_t GB_audio_get_queue_length(void); void GB_audio_queue_sample(GB_sample_t *sample); -void GB_audio_init(void); +bool GB_audio_init(void); +void GB_audio_deinit(void); +const char *GB_audio_driver_name(void); +const char *GB_audio_driver_name_at_index(unsigned index); + +typedef struct { + typeof(GB_audio_is_playing) *audio_is_playing; + typeof(GB_audio_set_paused) *audio_set_paused; + typeof(GB_audio_clear_queue) *audio_clear_queue; + typeof(GB_audio_get_frequency) *audio_get_frequency; + typeof(GB_audio_get_queue_length) *audio_get_queue_length; + typeof(GB_audio_queue_sample) *audio_queue_sample; + typeof(GB_audio_init) *audio_init; + typeof(GB_audio_deinit) *audio_deinit; + const char *name; +} GB_audio_driver_t; + +#define GB_AUDIO_DRIVER(_name) const GB_audio_driver_t _name##driver = { \ + .audio_is_playing = _audio_is_playing, \ + .audio_set_paused = _audio_set_paused, \ + .audio_clear_queue = _audio_clear_queue, \ + .audio_get_frequency = _audio_get_frequency, \ + .audio_get_queue_length = _audio_get_queue_length, \ + .audio_queue_sample = _audio_queue_sample, \ + .audio_init = _audio_init, \ + .audio_deinit = _audio_deinit, \ + .name = #_name, \ +} + +#define GB_AUDIO_DRIVER_REF(name) ({extern const GB_audio_driver_t name##driver; &name##driver;}) #endif /* sdl_audio_h */ diff --git a/thirdparty/SameBoy/SDL/audio/openal.c b/thirdparty/SameBoy/SDL/audio/openal.c new file mode 100644 index 000000000..fdcaeadea --- /dev/null +++ b/thirdparty/SameBoy/SDL/audio/openal.c @@ -0,0 +1,317 @@ +#include "audio.h" +#if defined(__APPLE__) +#include +#include + +#else +#include +#include +#endif +#include +#include +#include + +#define BUFFER_LEN_MS 5 + +static ALCdevice *al_device = NULL; +static ALCcontext *al_context = NULL; +static GB_sample_t *audio_buffer = NULL; +static ALuint al_source = 0; +static ALCint sample_rate = 0; +static unsigned buffer_size = 0; +static unsigned buffer_pos = 0; +static bool is_paused = false; + +#define AL_ERR_STRINGIFY(x) #x +#define AL_ERR_TOSTRING(x) AL_ERR_STRINGIFY(x) +#define AL_ERROR(msg) check_al_error(msg, AL_ERR_TOSTRING(__LINE__)) + +// Check if the previous OpenAL call returned an error. +// If an error occurred a message will be logged to stderr. +static bool check_al_error(const char *user_msg, const char *line) +{ + ALCenum error = alGetError(); + const char *description = ""; + + switch (error) { + case AL_NO_ERROR: + return false; + case AL_INVALID_NAME: + description = "A bad name (ID) was passed to an OpenAL function"; + break; + case AL_INVALID_ENUM: + description = "An invalid enum value was passed to an OpenAL function"; + break; + case AL_INVALID_VALUE: + description = "An invalid value was passed to an OpenAL function"; + break; + case AL_INVALID_OPERATION: + description = "The requested operation is not valid"; + break; + case AL_OUT_OF_MEMORY: + description = "The requested operation resulted in OpenAL running out of memory"; + break; + } + + if (user_msg != NULL) { + fprintf(stderr, "[OpenAL:%s] %s: %s\n", line, user_msg, description); + } + else { + fprintf(stderr, "[OpenAL:%s] %s\n", line, description); + } + + return true; +} + +static void _audio_deinit(void) +{ + // Stop the source (this should mark all queued buffers as processed) + alSourceStop(al_source); + + // Check if there are buffers that can be freed + ALint processed; + alGetSourcei(al_source, AL_BUFFERS_PROCESSED, &processed); + if (!AL_ERROR("Failed to query number of processed buffers")) { + // Try to free the buffers, we do not care about potential errors here + while (processed--) { + ALuint buffer; + alSourceUnqueueBuffers(al_source, 1, &buffer); + alDeleteBuffers(1, &buffer); + } + } + + alDeleteSources(1, &al_source); + if (al_context) { + alcDestroyContext(al_context); + al_context = NULL; + } + + if (al_device) { + alcCloseDevice(al_device); + al_device = NULL; + } + + if (audio_buffer) { + free(audio_buffer); + audio_buffer = NULL; + } +} + +static void free_processed_buffers(void) +{ + ALint processed; + alGetSourcei(al_source, AL_BUFFERS_PROCESSED, &processed); + if (AL_ERROR("Failed to query number of processed buffers")) { + return; + } + + while (processed--) { + ALuint buffer; + + alSourceUnqueueBuffers(al_source, 1, &buffer); + if (AL_ERROR("Failed to unqueue buffer")) { + return; + } + + alDeleteBuffers(1, &buffer); + /* Due to a limitation in Apple's OpenAL implementation, this function + can fail once in a few times. If it does, ignore the warning, and let + this buffer be freed in a later call to free_processed_buffers. */ +#if defined(__APPLE__) + if (alGetError()) return; +#else + if (AL_ERROR("Failed to delete buffer")) { + return; + } +#endif + } +} + +static bool _audio_is_playing(void) +{ + ALenum state; + alGetSourcei(al_source, AL_SOURCE_STATE, &state); + if (AL_ERROR("Failed to query source state")) { + return false; + } + + return state == AL_PLAYING; +} + +static void _audio_set_paused(bool paused) +{ + is_paused = paused; + if (paused) { + alSourcePause(al_source); + } + else { + alSourcePlay(al_source); + } +} + +static void _audio_clear_queue(void) +{ + bool is_playing = _audio_is_playing(); + + // Stopping a source clears its queue + alSourceStop(al_source); + if (AL_ERROR(NULL)) { + return; + } + + free_processed_buffers(); + buffer_pos = 0; + + if (is_playing) { + _audio_set_paused(false); + } +} + +static unsigned _audio_get_frequency(void) +{ + return sample_rate; +} + +static size_t _audio_get_queue_length(void) +{ + // Get the number of all attached buffers + ALint buffers; + alGetSourcei(al_source, AL_BUFFERS_QUEUED, &buffers); + if (AL_ERROR("Failed to query number of queued buffers")) { + buffers = 0; + } + + // Get the number of all processed buffers (ready to be detached) + ALint processed; + alGetSourcei(al_source, AL_BUFFERS_PROCESSED, &processed); + if (AL_ERROR("Failed to query number of processed buffers")) { + processed = 0; + } + + return (buffers - processed) * buffer_size + buffer_pos; +} + +static void _audio_queue_sample(GB_sample_t *sample) +{ + if (is_paused) return; + audio_buffer[buffer_pos++] = *sample; + + if (buffer_pos == buffer_size) { + buffer_pos = 0; + + ALuint al_buffer; + alGenBuffers(1, &al_buffer); + if (AL_ERROR("Failed to create audio buffer")) { + return; + } + + alBufferData(al_buffer, AL_FORMAT_STEREO16, audio_buffer, buffer_size * sizeof(GB_sample_t), sample_rate); + if (AL_ERROR("Failed to buffer data")) { + return; + } + + alSourceQueueBuffers(al_source, 1, &al_buffer); + if (AL_ERROR("Failed to queue buffer")) { + return; + } + + // In case of an audio underrun, the source might + // have finished playing all attached buffers + // which means its status will be "AL_STOPPED". + if (!_audio_is_playing()) { + alSourcePlay(al_source); + } + + free_processed_buffers(); + } +} + +static bool _audio_init(void) +{ + // Open the default device + al_device = alcOpenDevice(NULL); + if (!al_device) { + AL_ERROR("Failed to open device"); + return false; + } + + // Create a new audio context without special attributes + al_context = alcCreateContext(al_device, NULL); + if (al_context == NULL) { + AL_ERROR("Failed to create context"); + _audio_deinit(); + return false; + } + + // Enable our audio context + if (!alcMakeContextCurrent(al_context)) { + AL_ERROR("Failed to set context"); + _audio_deinit(); + return false; + } + + // Query the sample rate of the playback device + alcGetIntegerv(al_device, ALC_FREQUENCY, 1, &sample_rate); + if (AL_ERROR("Failed to query sample rate")) { + _audio_deinit(); + return false; + } + if (sample_rate == 0) { + sample_rate = 48000; + } + + // Allocate our working buffer + buffer_size = (sample_rate * BUFFER_LEN_MS) / 1000; + audio_buffer = malloc(buffer_size * sizeof(GB_sample_t)); + if (audio_buffer == NULL) { + fprintf(stderr, "Failed to allocate audio buffer\n"); + _audio_deinit(); + return false; + } + + // Create our playback source + alGenSources(1, &al_source); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Keep the pitch as is + alSourcef(al_source, AL_PITCH, 1); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Keep the volume as is + alSourcef(al_source, AL_GAIN, 1); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Position our source at the center of the 3D space + alSource3f(al_source, AL_POSITION, 0, 0, 0); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Our source is fixed in space + alSource3f(al_source, AL_VELOCITY, 0, 0, 0); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + // Our source does not loop + alSourcei(al_source, AL_LOOPING, AL_FALSE); + if (AL_ERROR(NULL)) { + _audio_deinit(); + return false; + } + + return true; +} + +GB_AUDIO_DRIVER(OpenAL); diff --git a/thirdparty/SameBoy/SDL/audio/sdl.c b/thirdparty/SameBoy/SDL/audio/sdl.c index 12ee69ae0..9c0cd98bb 100644 --- a/thirdparty/SameBoy/SDL/audio/sdl.c +++ b/thirdparty/SameBoy/SDL/audio/sdl.c @@ -29,33 +29,33 @@ static SDL_AudioSpec want_aspec, have_aspec; static unsigned buffer_pos = 0; static GB_sample_t audio_buffer[AUDIO_BUFFER_SIZE]; -bool GB_audio_is_playing(void) +static bool _audio_is_playing(void) { return SDL_GetAudioDeviceStatus(device_id) == SDL_AUDIO_PLAYING; } -void GB_audio_set_paused(bool paused) +static void _audio_clear_queue(void) { - GB_audio_clear_queue(); - SDL_PauseAudioDevice(device_id, paused); + SDL_ClearQueuedAudio(device_id); } -void GB_audio_clear_queue(void) +static void _audio_set_paused(bool paused) { - SDL_ClearQueuedAudio(device_id); + _audio_clear_queue(); + SDL_PauseAudioDevice(device_id, paused); } -unsigned GB_audio_get_frequency(void) +static unsigned _audio_get_frequency(void) { return have_aspec.freq; } -size_t GB_audio_get_queue_length(void) +static size_t _audio_get_queue_length(void) { - return SDL_GetQueuedAudioSize(device_id); + return SDL_GetQueuedAudioSize(device_id) / sizeof(GB_sample_t); } -void GB_audio_queue_sample(GB_sample_t *sample) +static void _audio_queue_sample(GB_sample_t *sample) { audio_buffer[buffer_pos++] = *sample; @@ -65,8 +65,13 @@ void GB_audio_queue_sample(GB_sample_t *sample) } } -void GB_audio_init(void) +static bool _audio_init(void) { + if (SDL_Init(SDL_INIT_AUDIO) != 0) { + printf("Failed to initialize SDL audio: %s", SDL_GetError()); + return false; + } + /* Configure Audio */ memset(&want_aspec, 0, sizeof(want_aspec)); want_aspec.freq = AUDIO_FREQUENCY; @@ -93,4 +98,14 @@ void GB_audio_init(void) #endif device_id = SDL_OpenAudioDevice(0, 0, &want_aspec, &have_aspec, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE | SDL_AUDIO_ALLOW_SAMPLES_CHANGE); + + return true; } + +static void _audio_deinit(void) +{ + _audio_set_paused(true); + SDL_CloseAudioDevice(device_id); +} + +GB_AUDIO_DRIVER(SDL); diff --git a/thirdparty/SameBoy/SDL/audio/xaudio2.c b/thirdparty/SameBoy/SDL/audio/xaudio2.c new file mode 100644 index 000000000..e2ca68b8f --- /dev/null +++ b/thirdparty/SameBoy/SDL/audio/xaudio2.c @@ -0,0 +1,159 @@ +#define COBJMACROS +#include "audio.h" +#include +#include +#include + +static unsigned audio_frequency = 48000; +static IXAudio2 *xaudio2 = NULL; +static IXAudio2MasteringVoice *master_voice = NULL; +static IXAudio2SourceVoice *source_voice = NULL; +static bool playing = false; +static GB_sample_t sample_pool[0x2000]; +static unsigned pos = 0; + +#define BATCH_SIZE 256 + +static WAVEFORMATEX wave_format = { + .wFormatTag = WAVE_FORMAT_PCM, + .nChannels = 2, + .nBlockAlign = 4, + .wBitsPerSample = 16, + .cbSize = 0 +}; + +static bool _audio_is_playing(void) +{ + return playing; +} + +static void _audio_clear_queue(void) +{ + pos = 0; + IXAudio2SourceVoice_FlushSourceBuffers(source_voice); +} + +static void _audio_set_paused(bool paused) +{ + if (paused) { + playing = false; + IXAudio2SourceVoice_Stop(source_voice, 0, XAUDIO2_COMMIT_NOW); + _audio_clear_queue(); + } + else { + playing = true; + IXAudio2SourceVoice_Start(source_voice, 0, XAUDIO2_COMMIT_NOW); + } + +} + + +#define _DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) static const PROPERTYKEY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } +_DEFINE_PROPERTYKEY(_PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); + + +static void update_frequency(void) +{ + HRESULT hr; + IMMDevice *device = NULL; + IMMDeviceEnumerator *enumerator = NULL; + IPropertyStore *store = NULL; + PWAVEFORMATEX deviceFormatProperties; + PROPVARIANT prop; + + hr = CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &IID_IMMDeviceEnumerator, (LPVOID *)&enumerator); + if (FAILED(hr)) return; + + // get default audio endpoint + + hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(enumerator, eRender, eMultimedia, &device); + if (FAILED(hr)) return; + + hr = IMMDevice_OpenPropertyStore(device, STGM_READ, &store); + if (FAILED(hr)) return; + + hr = IPropertyStore_GetValue(store, &_PKEY_AudioEngine_DeviceFormat, &prop); + if (FAILED(hr)) return; + + deviceFormatProperties = (PWAVEFORMATEX)prop.blob.pBlobData; + audio_frequency = deviceFormatProperties->nSamplesPerSec; + if (audio_frequency < 8000 || audio_frequency > 192000) { + // Bogus value, revert to 48KHz + audio_frequency = 48000; + } +} + +static unsigned _audio_get_frequency(void) +{ + return audio_frequency; +} + +static size_t _audio_get_queue_length(void) +{ + static XAUDIO2_VOICE_STATE state; + IXAudio2SourceVoice_GetState(source_voice, &state, XAUDIO2_VOICE_NOSAMPLESPLAYED); + + return state.BuffersQueued * BATCH_SIZE + (pos & (BATCH_SIZE - 1)); +} + +static void _audio_queue_sample(GB_sample_t *sample) +{ + if (!playing) return; + + static XAUDIO2_BUFFER buffer = {.AudioBytes = sizeof(*sample) * BATCH_SIZE, }; + sample_pool[pos] = *sample; + buffer.pAudioData = (void *)&sample_pool[pos & ~(BATCH_SIZE - 1)]; + pos++; + pos &= 0x1fff; + if ((pos & (BATCH_SIZE - 1)) == 0) { + IXAudio2SourceVoice_SubmitSourceBuffer(source_voice, &buffer, NULL); + } +} + +static bool _audio_init(void) +{ + HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + if (FAILED(hr)) { + fprintf(stderr, "CoInitializeEx failed: %lx\n", hr); + return false; + } + + hr = XAudio2Create(&xaudio2, 0, XAUDIO2_DEFAULT_PROCESSOR); + if (FAILED(hr)) { + fprintf(stderr, "XAudio2Create failed: %lx\n", hr); + return false; + } + + update_frequency(); + + hr = IXAudio2_CreateMasteringVoice(xaudio2, &master_voice, + 2, // 2 channels + audio_frequency, + 0, // Flags + 0, // Device index + NULL, // Effect chain + AudioCategory_GameMedia // Category + ); + if (FAILED(hr)) { + fprintf(stderr, "CreateMasteringVoice failed: %lx\n", hr); + return false; + } + + wave_format.nSamplesPerSec = audio_frequency; + wave_format.nAvgBytesPerSec = audio_frequency * 4; + hr = IXAudio2_CreateSourceVoice(xaudio2, &source_voice, &wave_format, 0, XAUDIO2_DEFAULT_FREQ_RATIO, NULL, NULL, NULL); + + if (FAILED(hr)) { + fprintf(stderr, "CreateSourceVoice failed: %lx\n", hr); + return false; + } + + return true; +} + +static void _audio_deinit(void) +{ + _audio_set_paused(true); +} + +GB_AUDIO_DRIVER(XAudio2); diff --git a/thirdparty/SameBoy/SDL/audio/xaudio2_7.c b/thirdparty/SameBoy/SDL/audio/xaudio2_7.c new file mode 100644 index 000000000..b8ed544af --- /dev/null +++ b/thirdparty/SameBoy/SDL/audio/xaudio2_7.c @@ -0,0 +1,179 @@ +#define COBJMACROS +#include "xaudio2_7.h" +#include "audio.h" +#include + + +static unsigned audio_frequency = 48000; +static IXAudio2 *xaudio2 = NULL; +static IXAudio2MasteringVoice *master_voice = NULL; +static IXAudio2SourceVoice *source_voice = NULL; +static bool playing = false; +static GB_sample_t sample_pool[0x2000]; +static unsigned pos = 0; + +#define BATCH_SIZE 256 + + +static WAVEFORMATEX wave_format = { + .wFormatTag = WAVE_FORMAT_PCM, + .nChannels = 2, + .nBlockAlign = 4, + .wBitsPerSample = 16, + .cbSize = 0 +}; + +static inline HRESULT XAudio2Create(IXAudio2 **out, + UINT32 Flags, + XAUDIO2_PROCESSOR XAudio2Processor) +{ + IXAudio2 *xaudio2; + LoadLibraryEx("xaudio2_7.dll", NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); + + HRESULT hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void **)&xaudio2); + if (SUCCEEDED(hr)) { + hr = xaudio2->lpVtbl->Initialize(xaudio2, Flags, XAudio2Processor); + } + + if (SUCCEEDED(hr)) { + *out = xaudio2; + } + else if (xaudio2) { + xaudio2->lpVtbl->Release(xaudio2); + } + return hr; +} + +static bool _audio_is_playing(void) +{ + return playing; +} + +static void _audio_clear_queue(void) +{ + pos = 0; + IXAudio2SourceVoice_FlushSourceBuffers(source_voice); +} + +static void _audio_set_paused(bool paused) +{ + if (paused) { + playing = false; + IXAudio2SourceVoice_Stop(source_voice, 0, XAUDIO2_COMMIT_NOW); + _audio_clear_queue(); + } + else { + playing = true; + IXAudio2SourceVoice_Start(source_voice, 0, XAUDIO2_COMMIT_NOW); + } + +} + +#define _DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) static const PROPERTYKEY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } +_DEFINE_PROPERTYKEY(_PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); + + +static void update_frequency(void) +{ + HRESULT hr; + IMMDevice *device = NULL; + IMMDeviceEnumerator *enumerator = NULL; + IPropertyStore *store = NULL; + PWAVEFORMATEX deviceFormatProperties; + PROPVARIANT prop; + + hr = CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &IID_IMMDeviceEnumerator, (LPVOID *)&enumerator); + if (FAILED(hr)) return; + + // get default audio endpoint + + hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(enumerator, eRender, eMultimedia, &device); + if (FAILED(hr)) return; + + hr = IMMDevice_OpenPropertyStore(device, STGM_READ, &store); + if (FAILED(hr)) return; + + hr = IPropertyStore_GetValue(store, &_PKEY_AudioEngine_DeviceFormat, &prop); + if (FAILED(hr)) return; + + deviceFormatProperties = (PWAVEFORMATEX)prop.blob.pBlobData; + audio_frequency = deviceFormatProperties->nSamplesPerSec; + if (audio_frequency < 8000 || audio_frequency > 192000) { + // Bogus value, revert to 48KHz + audio_frequency = 48000; + } +} + +static unsigned _audio_get_frequency(void) +{ + return audio_frequency; +} + +static size_t _audio_get_queue_length(void) +{ + static XAUDIO2_VOICE_STATE state; + IXAudio2SourceVoice_GetState(source_voice, &state); + + return state.BuffersQueued * BATCH_SIZE + (pos & (BATCH_SIZE - 1)); +} + +static void _audio_queue_sample(GB_sample_t *sample) +{ + if (!playing) return; + + static XAUDIO2_BUFFER buffer = {.AudioBytes = sizeof(*sample) * BATCH_SIZE, }; + sample_pool[pos] = *sample; + buffer.pAudioData = (void *)&sample_pool[pos & ~(BATCH_SIZE - 1)]; + pos++; + pos &= 0x1fff; + if ((pos & (BATCH_SIZE - 1)) == 0) { + IXAudio2SourceVoice_SubmitSourceBuffer(source_voice, &buffer, NULL); + } +} + +static bool _audio_init(void) +{ + HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + if (FAILED(hr)) { + fprintf(stderr, "CoInitializeEx failed: %lx\n", hr); + return false; + } + + hr = XAudio2Create(&xaudio2, 0, XAUDIO2_DEFAULT_PROCESSOR); + if (FAILED(hr)) { + fprintf(stderr, "XAudio2Create failed: %lx\n", hr); + return false; + } + + update_frequency(); + + hr = IXAudio2_CreateMasteringVoice(xaudio2, &master_voice, + 2, // 2 channels + audio_frequency, + 0, // Flags + 0, // Device index + NULL // Effect chain + ); + if (FAILED(hr)) { + fprintf(stderr, "CreateMasteringVoice failed: %lx\n", hr); + return false; + } + + wave_format.nSamplesPerSec = audio_frequency; + wave_format.nAvgBytesPerSec = audio_frequency * 4; + hr = IXAudio2_CreateSourceVoice(xaudio2, &source_voice, &wave_format, 0, XAUDIO2_DEFAULT_FREQ_RATIO, NULL, NULL, NULL); + + if (FAILED(hr)) { + fprintf(stderr, "CreateSourceVoice failed: %lx\n", hr); + return false; + } + + return true; +} + +static void _audio_deinit(void) +{ + _audio_set_paused(true); +} + +GB_AUDIO_DRIVER(XAudio2_7); diff --git a/thirdparty/SameBoy/SDL/audio/xaudio2_7.h b/thirdparty/SameBoy/SDL/audio/xaudio2_7.h new file mode 100644 index 000000000..298715650 --- /dev/null +++ b/thirdparty/SameBoy/SDL/audio/xaudio2_7.h @@ -0,0 +1,108 @@ +#define INITGUID +#include + +/* Minimal definitions for XAudio2.7 */ +typedef UINT32 XAUDIO2_PROCESSOR; + +typedef struct XAUDIO2_BUFFER { + UINT32 Flags; + UINT32 AudioBytes; + const BYTE *pAudioData; + UINT32 PlayBegin; + UINT32 PlayLength; + UINT32 LoopBegin; + UINT32 LoopLength; + UINT32 LoopCount; + void *pContext; +} XAUDIO2_BUFFER; + +typedef struct XAUDIO2_VOICE_STATE { + void *pCurrentBufferContext; + UINT32 BuffersQueued; + UINT64 SamplesPlayed; +} XAUDIO2_VOICE_STATE; + +typedef struct IXAudio2SourceVoice { + struct IXAudio2SourceVoiceVtbl *lpVtbl; +} IXAudio2SourceVoice; + +typedef struct IXAudio2SourceVoiceVtbl IXAudio2SourceVoiceVtbl; + +#undef INTERFACE +#define INTERFACE IXAudio2SourceVoice + +struct IXAudio2SourceVoiceVtbl { + void *voiceMethods[19]; // Unused inherited methods + STDMETHOD(Start) (THIS_ UINT32 Flags, UINT32 OperationSet) PURE; + STDMETHOD(Stop) (THIS_ UINT32 Flags, UINT32 OperationSet) PURE; + STDMETHOD(SubmitSourceBuffer) (THIS_ __in const XAUDIO2_BUFFER *pBuffer, __in_opt const void *pBufferWMA) PURE; + STDMETHOD(FlushSourceBuffers) (THIS) PURE; + STDMETHOD(Discontinuity) (THIS) PURE; + STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet) PURE; + STDMETHOD_(void, GetState) (THIS_ __out XAUDIO2_VOICE_STATE *pVoiceState) PURE; +}; + +typedef struct IXAudio2 { + struct IXAudio2Vtbl *lpVtbl; +} IXAudio2; + +typedef struct IXAudio2Vtbl IXAudio2Vtbl; +typedef void *IXAudio2MasteringVoice; + +#undef INTERFACE +#define INTERFACE IXAudio2 + +struct IXAudio2Vtbl { + void *QueryInterface; + STDMETHOD_(ULONG, AddRef) (THIS) PURE; + STDMETHOD_(ULONG, Release) (THIS) PURE; + void *GetDeviceCount; + void *GetDeviceDetails; + STDMETHOD(Initialize) (THIS_ UINT32 Flags, + XAUDIO2_PROCESSOR XAudio2Processor) PURE; + + void *RegisterForCallbacks; + void *UnregisterForCallbacks; + + STDMETHOD(CreateSourceVoice) (THIS_ __deref_out IXAudio2SourceVoice **ppSourceVoice, + __in const WAVEFORMATEX *pSourceFormat, + UINT32 Flags, + float MaxFrequencyRatio, + __in_opt void *pCallback, + __in_opt const void *pSendList, + __in_opt const void *pEffectChain) PURE; + + void *CreateSubmixVoice; + + STDMETHOD(CreateMasteringVoice) (THIS_ __deref_out IXAudio2MasteringVoice **ppMasteringVoice, + UINT32 InputChannels, + UINT32 InputSampleRate, + UINT32 Flags, UINT32 DeviceIndex, + __in_opt const void *pEffectChain) PURE; +}; + +#define DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ +DEFINE_GUID(CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) + +#define DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ +DEFINE_GUID(IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) + +DEFINE_CLSID(XAudio2, 5a508685, a254, 4fba, 9b, 82, 9a, 24, b0, 03, 06, af); +DEFINE_IID(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb); + + +#define IXAudio2SourceVoice_Start(This,Flags,OperationSet) ((This)->lpVtbl->Start(This,Flags,OperationSet)) +#define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) ((This)->lpVtbl->Stop(This,Flags,OperationSet)) +#define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) ((This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)) +#define IXAudio2SourceVoice_FlushSourceBuffers(This) ((This)->lpVtbl->FlushSourceBuffers(This)) +#define IXAudio2SourceVoice_GetState(This,pVoiceState) ((This)->lpVtbl->GetState(This,pVoiceState)) +#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) ((This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)) +#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) ((This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)) + +#define XAUDIO2_COMMIT_NOW 0 +#define XAUDIO2_DEFAULT_PROCESSOR 0xffffffff +#define XAUDIO2_DEFAULT_FREQ_RATIO 2.0f + +// WASAPI extras. This is a hack, but Windows itself is a hack so I don't care +DEFINE_CLSID(MMDeviceEnumerator, bcde0395, e52f, 467c, 8e, 3d, c4, 57, 92, 91, 69, 2e); +DEFINE_IID(IMMDeviceEnumerator, a95664d2, 9614, 4f35, a7, 46, de, 8d, b6, 36, 17, e6); diff --git a/thirdparty/SameBoy/SDL/background.bmp b/thirdparty/SameBoy/SDL/background.bmp index 0f6192d6db58b5a88cea4624e667a63de5c7b388..d356d24e5d6e55d123cfdf55fa7cbc4e938b7208 100644 GIT binary patch literal 11592 zcmeHL%Z{8d5Hu(sfH~wmSc;TOej?jm?7bq&!x#yK>KBgIO2V z)$Ip-|M}ya@%Do9D~{hde&HC*CzQsFxc}v|9@3(%#$2ygbGzNl{eJiV*Nd(|SKvb_ zV2d_Qq_cya3x;Qrc-EC|Aqmc9I5(37AHX?B5-jkW^jRFi0>44;aRkr#E#oo@;!H(E zIpoUAe9?zpn3Or^H#zyiC;@ZKv~6(mgDp+?iF_(y8-606O4x><$|q$#zc846rSeHx z&(A8LR#89-?{$2)fKfmSZ<~J?p@qVWo*iIf!!!Ctkj+VJ zeiYt@$Np3&hj#H@@hbG2OjvC99OatwSK~Vje&puRNIZp@rm(q)h$cOt1wWG}nVRu? z;D?Q*GG68u`Yo~v9>sYU4_&a|0YAJHB7Clp>^e-A=_O#SS-rTw`1bruneE4K&%Z*p$ouyquc}$A)Xz?siF1H&W&V?eqQH-y|Kxo? zhgYee$XDXm=f6Tm_xUenVr~A(I87+&Oxh>BD;4BF-1-mu1A6?5PRYx3_LlVXTyjO_ z`sQPqE6Dxs8s8kXXY|Wa^KF&+_Ye7z`RC+o@wq|Z!=NfOyo2utc*QLmI!rP-m3zC00>;4mjD0& literal 11592 zcmeI1J&xNj5QRx22Ow3XHU$JolS`ynq)F*}g(xLiI^f5+!9K7a7>?h9(?PB{MUtA32rft5L7fNcvC-$j@ZTQ4KwXhAJ+9$P{Zy3wEQTwDe z^F>t}Hj{yr-YUN}$n2U__s7fbZRMs~IT zQF?OPST=&s_POI2Tm8eSLw4pQ$pEI}olng?rHaxk3EZ_&dY|BX!oNE*{o0z3 z(kl{aqs|WP@;mAo{KFk$AC!t$^Xq*pJ;e%PSX@k$3*Z)fZZXRk{M+zhA*sZvvy9(+ z|B@_%PZB(xm?}K8Rk+BE>5`)<3{$k@&Qv4vHs1$M*(&xGzaQG|QA8 zu0P^wLKRT+t2L#E@qx2oAZnEw1raFP5H;(cA}+;-{XviA!`ZPoel2>60t-ugn&oDE zLzbKQCz%4bg>RkQDfZk<=}o8Z?@)Tj{dZ&Jd-|7R>gAV?7*oW|GA=C@-39o1HzVTZaLw4tbbdqMT^0|nWnG@ zKq_8be?ha|g@csd1OL3|*DnesYoEK45Af?}b?r_of6Yg@cqjh~dYKQCE4hAt#AoY& zdwiie9~JLI|Jw5%{#82UG=2;HMIY>p^It(v2ll)6zu-bP3{TfC;*BRdonNf|FGPpu zemoh9uDqZ0Pc&TcKodA0Mm~D{N@@dMq8AZ0wmEbwpU}W92Nk>m{>$%0R_*lvLH`3D z__oD(|A2b|u5F6dKe4aEXYGIO_{67;8XAoLWuFRqX8-DZhkwWYV{+hS>zC31(eYvH ze>xZnwekL&SxObBH~Ci}dusfa&}{ytT{JnsukR6ZwXpZ!su&JZdin@nm1O&0RqO?P jRJ@PiUcg8B_lbN^@%qINbLH5(X>L1q4hIeg-p7G|_iv)5 diff --git a/thirdparty/SameBoy/SDL/configuration.c b/thirdparty/SameBoy/SDL/configuration.c new file mode 100644 index 000000000..35ad29952 --- /dev/null +++ b/thirdparty/SameBoy/SDL/configuration.c @@ -0,0 +1,54 @@ +#include "configuration.h" + +configuration_t configuration = +{ + .keys = { + SDL_SCANCODE_RIGHT, + SDL_SCANCODE_LEFT, + SDL_SCANCODE_UP, + SDL_SCANCODE_DOWN, + SDL_SCANCODE_X, + SDL_SCANCODE_Z, + SDL_SCANCODE_BACKSPACE, + SDL_SCANCODE_RETURN, + SDL_SCANCODE_SPACE + }, + .keys_2 = { + SDL_SCANCODE_TAB, + SDL_SCANCODE_LSHIFT, + }, + .joypad_configuration = { + 13, + 14, + 11, + 12, + 0, + 1, + 9, + 8, + 10, + 4, + -1, + 5, + // The rest are unmapped by default + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + }, + .joypad_axises = { + 0, + 1, + }, + .color_correction_mode = GB_COLOR_CORRECTION_MODERN_BALANCED, + .highpass_mode = GB_HIGHPASS_ACCURATE, + .scaling_mode = GB_SDL_SCALING_INTEGER_FACTOR, + .blending_mode = GB_FRAME_BLENDING_MODE_ACCURATE, + .rewind_length = 60 * 2, + .model = MODEL_CGB, + .volume = 100, + .rumble_mode = GB_RUMBLE_ALL_GAMES, + .default_scale = 2, + .color_temperature = 10, + .cgb_revision = GB_MODEL_CGB_E - GB_MODEL_CGB_0, + .dmg_palette = 1, // Replacing the old default (0) as of 0.15.2 + .agb_revision = GB_MODEL_AGB_A, +}; diff --git a/thirdparty/SameBoy/SDL/configuration.h b/thirdparty/SameBoy/SDL/configuration.h new file mode 100644 index 000000000..c328e3c9c --- /dev/null +++ b/thirdparty/SameBoy/SDL/configuration.h @@ -0,0 +1,140 @@ +#ifndef configuration_h +#define configuration_h + +#include +#include +#include "shader.h" + +enum scaling_mode { + GB_SDL_SCALING_ENTIRE_WINDOW, + GB_SDL_SCALING_KEEP_RATIO, + GB_SDL_SCALING_INTEGER_FACTOR, + GB_SDL_SCALING_MAX, +}; + +typedef enum { + JOYPAD_BUTTON_RIGHT, + JOYPAD_BUTTON_LEFT, + JOYPAD_BUTTON_UP, + JOYPAD_BUTTON_DOWN, + JOYPAD_BUTTON_A, + JOYPAD_BUTTON_B, + JOYPAD_BUTTON_SELECT, + JOYPAD_BUTTON_START, + JOYPAD_BUTTON_MENU, + JOYPAD_BUTTON_TURBO, + JOYPAD_BUTTON_REWIND, + JOYPAD_BUTTON_SLOW_MOTION, + JOYPAD_BUTTON_HOTKEY_1, + JOYPAD_BUTTON_HOTKEY_2, + JOYPAD_BUTTONS_MAX +} joypad_button_t; + +typedef enum { + JOYPAD_AXISES_X, + JOYPAD_AXISES_Y, + JOYPAD_AXISES_MAX +} joypad_axis_t; + +typedef enum { + HOTKEY_NONE, + HOTKEY_PAUSE, + HOTKEY_MUTE, + HOTKEY_RESET, + HOTKEY_QUIT, + HOTKEY_SAVE_STATE_1, + HOTKEY_LOAD_STATE_1, + HOTKEY_SAVE_STATE_2, + HOTKEY_LOAD_STATE_2, + HOTKEY_SAVE_STATE_3, + HOTKEY_LOAD_STATE_3, + HOTKEY_SAVE_STATE_4, + HOTKEY_LOAD_STATE_4, + HOTKEY_SAVE_STATE_5, + HOTKEY_LOAD_STATE_5, + HOTKEY_SAVE_STATE_6, + HOTKEY_LOAD_STATE_6, + HOTKEY_SAVE_STATE_7, + HOTKEY_LOAD_STATE_7, + HOTKEY_SAVE_STATE_8, + HOTKEY_LOAD_STATE_8, + HOTKEY_SAVE_STATE_9, + HOTKEY_LOAD_STATE_9, + HOTKEY_SAVE_STATE_10, + HOTKEY_LOAD_STATE_10, + HOTKEY_MAX = HOTKEY_LOAD_STATE_10, +} hotkey_action_t; + +typedef struct { + SDL_Scancode keys[9]; + GB_color_correction_mode_t color_correction_mode; + enum scaling_mode scaling_mode; + uint8_t blending_mode; + + GB_highpass_mode_t highpass_mode; + + bool _deprecated_div_joystick; + bool _deprecated_flip_joystick_bit_1; + bool _deprecated_swap_joysticks_bits_1_and_2; + + char filter[32]; + enum { + MODEL_DMG, + MODEL_CGB, + MODEL_AGB, + MODEL_SGB, + MODEL_MGB, + MODEL_MAX, + } model; + + /* v0.11 */ + uint32_t rewind_length; + SDL_Scancode keys_2[32]; /* Rewind and underclock, + padding for the future */ + uint8_t joypad_configuration[32]; /* 14 Keys + padding for the future*/; + uint8_t joypad_axises[JOYPAD_AXISES_MAX]; + + /* v0.12 */ + enum { + SGB_NTSC, + SGB_PAL, + SGB_2, + SGB_MAX + } sgb_revision; + + /* v0.13 */ + uint8_t dmg_palette; + GB_border_mode_t border_mode; + uint8_t volume; + GB_rumble_mode_t rumble_mode; + + uint8_t default_scale; + + /* v0.14 */ + unsigned padding; + uint8_t color_temperature; + char bootrom_path[4096]; + uint8_t interference_volume; + GB_rtc_mode_t rtc_mode; + + /* v0.14.4 */ + bool osd; + + struct __attribute__((packed, aligned(4))) { + + /* v0.15 */ + bool allow_mouse_controls; + uint8_t cgb_revision; + /* v0.15.1 */ + char audio_driver[16]; + /* v0.15.2 */ + bool allow_background_controllers; + bool gui_pallete_enabled; // Change the GUI palette only once the user changed the DMG palette + char dmg_palette_name[25]; + hotkey_action_t hotkey_actions[2]; + uint16_t agb_revision; + }; +} configuration_t; + +extern configuration_t configuration; + +#endif diff --git a/thirdparty/SameBoy/SDL/console.c b/thirdparty/SameBoy/SDL/console.c index ad9c2b545..295de96ca 100644 --- a/thirdparty/SameBoy/SDL/console.c +++ b/thirdparty/SameBoy/SDL/console.c @@ -794,7 +794,7 @@ mainloop(char *(*completer)(const char *substring, uintptr_t *context)) move_word(true); complete_context = completion_length = 0; break; - case MOD_ALT(0x7f): // ALT+Backspace + case MOD_ALT(0x7F): // ALT+Backspace delete_word(false); complete_context = completion_length = 0; break; diff --git a/thirdparty/SameBoy/SDL/font.c b/thirdparty/SameBoy/SDL/font.c index ea2c590cb..6cc09a230 100644 --- a/thirdparty/SameBoy/SDL/font.c +++ b/thirdparty/SameBoy/SDL/font.c @@ -1119,6 +1119,36 @@ uint8_t font[] = { _, _, X, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, + + /* Copyright symbol*/ + _, X, X, X, X, _, + X, _, _, _, _, X, + X, _, X, X, _, X, + X, _, X, _, _, X, + X, _, X, _, _, X, + X, _, X, X, _, X, + X, _, _, _, _, X, + _, X, X, X, X, _, + + /* Alt symbol */ + + _, _, X, X, _, _, + _, X, _, _, X, _, + _, X, _, _, X, _, + _, X, _, _, X, _, + _, X, X, X, X, _, + _, X, _, _, X, _, + _, X, _, _, X, _, + _, _, _, _, _, _, + + X, _, _, X, X, X, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, _, _, _, X, _, + X, X, X, _, X, _, + _, _, _, _, _, _, }; const uint8_t font_max = sizeof(font) / GLYPH_HEIGHT / GLYPH_WIDTH + ' '; diff --git a/thirdparty/SameBoy/SDL/font.h b/thirdparty/SameBoy/SDL/font.h index f2111c3fe..ce6044fee 100644 --- a/thirdparty/SameBoy/SDL/font.h +++ b/thirdparty/SameBoy/SDL/font.h @@ -7,14 +7,16 @@ extern const uint8_t font_max; #define GLYPH_HEIGHT 8 #define GLYPH_WIDTH 6 #define LEFT_ARROW_STRING "\x86" -#define RIGHT_ARROW_STRING "\x7f" +#define RIGHT_ARROW_STRING "\x7F" #define SELECTION_STRING RIGHT_ARROW_STRING #define CTRL_STRING "\x80\x81\x82" #define SHIFT_STRING "\x83" +#define ALT_STRING "\x91\x92" #define CMD_STRING "\x84\x85" #define ELLIPSIS_STRING "\x87" #define MOJIBAKE_STRING "\x88" #define SLIDER_STRING "\x89\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8F\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8A\x8B" #define SELECTED_SLIDER_STRING "\x8C\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8D\x8E" +#define COPYRIGHT_STRING "\x90" #endif /* font_h */ diff --git a/thirdparty/SameBoy/SDL/gui.c b/thirdparty/SameBoy/SDL/gui.c index d9a58e548..22fa5debd 100644 --- a/thirdparty/SameBoy/SDL/gui.c +++ b/thirdparty/SameBoy/SDL/gui.c @@ -5,9 +5,11 @@ #include #include #include +#include #include "utils.h" #include "gui.h" #include "font.h" +#include "audio/audio.h" static const SDL_Color gui_palette[4] = {{8, 24, 16,}, {57, 97, 57,}, {132, 165, 99}, {198, 222, 140}}; static uint32_t gui_palette_native[4]; @@ -20,6 +22,10 @@ enum pending_command pending_command; unsigned command_parameter; char *dropped_state_file = NULL; +static char **custom_palettes; +static unsigned n_custom_palettes; + + #ifdef __APPLE__ #define MODIFIER_NAME " " CMD_STRING #else @@ -30,6 +36,8 @@ shader_t shader; static SDL_Rect rect; static unsigned factor; +static SDL_Surface *converted_background = NULL; + void render_texture(void *pixels, void *previous) { if (renderer) { @@ -67,57 +75,7 @@ void render_texture(void *pixels, void *previous) } } -configuration_t configuration = -{ - .keys = { - SDL_SCANCODE_RIGHT, - SDL_SCANCODE_LEFT, - SDL_SCANCODE_UP, - SDL_SCANCODE_DOWN, - SDL_SCANCODE_X, - SDL_SCANCODE_Z, - SDL_SCANCODE_BACKSPACE, - SDL_SCANCODE_RETURN, - SDL_SCANCODE_SPACE - }, - .keys_2 = { - SDL_SCANCODE_TAB, - SDL_SCANCODE_LSHIFT, - }, - .joypad_configuration = { - 13, - 14, - 11, - 12, - 0, - 1, - 9, - 8, - 10, - 4, - -1, - 5, - }, - .joypad_axises = { - 0, - 1, - }, - .color_correction_mode = GB_COLOR_CORRECTION_EMULATE_HARDWARE, - .highpass_mode = GB_HIGHPASS_ACCURATE, - .scaling_mode = GB_SDL_SCALING_INTEGER_FACTOR, - .blending_mode = GB_FRAME_BLENDING_MODE_ACCURATE, - .rewind_length = 60 * 2, - .model = MODEL_CGB, - .volume = 100, - .rumble_mode = GB_RUMBLE_ALL_GAMES, - .default_scale = 2, - .color_temperature = 10, -}; - - static const char *help[] = { -"Drop a ROM to play.\n" -"\n" "Keyboard Shortcuts:\n" " Open Menu: Escape\n" " Open ROM: " MODIFIER_NAME "+O\n" @@ -131,7 +89,16 @@ static const char *help[] = { #else " Mute/Unmute: " MODIFIER_NAME "+M\n" #endif -" Break Debugger: " CTRL_STRING "+C" +" Toggle channel: " ALT_STRING "+(1-4)\n" +" Break Debugger: " CTRL_STRING "+C", +"\n" +"SameBoy\n" +"Version " GB_VERSION "\n\n" +"Copyright " COPYRIGHT_STRING " 2015-" GB_COPYRIGHT_YEAR "\n" +"Lior Halphon\n\n" +"Licensed under the MIT\n" +"license, see LICENSE for\n" +"more details." }; void update_viewport(void) @@ -311,11 +278,21 @@ static void item_help(unsigned index) gui_state = SHOWING_HELP; } +static void about(unsigned index) +{ + current_help_page = 1; + gui_state = SHOWING_HELP; +} + static void enter_emulation_menu(unsigned index); static void enter_graphics_menu(unsigned index); -static void enter_controls_menu(unsigned index); +static void enter_keyboard_menu(unsigned index); static void enter_joypad_menu(unsigned index); static void enter_audio_menu(unsigned index); +static void enter_controls_menu(unsigned index); +static void enter_help_menu(unsigned index); +static void enter_options_menu(unsigned index); +static void toggle_audio_recording(unsigned index); extern void set_filename(const char *new_filename, typeof(free) *new_free_function); static void open_rom(unsigned index) @@ -327,6 +304,15 @@ static void open_rom(unsigned index) } } +static void cart_swap(unsigned index) +{ + char *filename = do_open_rom_dialog(); + if (filename) { + set_filename(filename, free); + pending_command = GB_SDL_CART_SWAP_COMMAND; + } +} + static void recalculate_menu_height(void) { menu_height = 24; @@ -344,29 +330,108 @@ static void recalculate_menu_height(void) } } -static const struct menu_item paused_menu[] = { - {"Resume", NULL}, - {"Open ROM", open_rom}, +#if SDL_COMPILEDVERSION < 2014 +int SDL_OpenURL(const char *url) +{ + char *string = NULL; +#ifdef __APPLE__ + asprintf(&string, "open '%s'", url); +#else +#ifdef _WIN32 + asprintf(&string, "explorer '%s'", url); +#else + asprintf(&string, "xdg-open '%s'", url); +#endif +#endif + int ret = system(string); + free(string); + return ret; +} +#endif + +static char audio_recording_menu_item[] = "Start Audio Recording"; + +static void sponsor(unsigned index) +{ + SDL_OpenURL("https://github.com/sponsors/LIJI32"); +} + +static void debugger_help(unsigned index) +{ + SDL_OpenURL("https://sameboy.github.io/debugger/"); +} + +static void return_to_root_menu(unsigned index) +{ + current_menu = root_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static const struct menu_item options_menu[] = { {"Emulation Options", enter_emulation_menu}, {"Graphic Options", enter_graphics_menu}, {"Audio Options", enter_audio_menu}, - {"Keyboard", enter_controls_menu}, - {"Joypad", enter_joypad_menu}, - {"Help", item_help}, + {"Control Options", enter_controls_menu}, + {"Back", return_to_root_menu}, + {NULL,} +}; + +static void enter_options_menu(unsigned index) +{ + current_menu = options_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static const struct menu_item paused_menu[] = { + {"Resume", NULL}, + {"Open ROM", open_rom}, + {"Hot Swap Cartridge", cart_swap}, + {"Options", enter_options_menu}, + {audio_recording_menu_item, toggle_audio_recording}, + {"Help & About", enter_help_menu}, + {"Sponsor SameBoy", sponsor}, {"Quit SameBoy", item_exit}, {NULL,} }; -static const struct menu_item *const nonpaused_menu = &paused_menu[1]; +static struct menu_item nonpaused_menu[sizeof(paused_menu) / sizeof(paused_menu[0]) - 2]; -static void return_to_root_menu(unsigned index) +static void __attribute__((constructor)) build_nonpaused_menu(void) { - current_menu = root_menu; + const struct menu_item *in = paused_menu; + struct menu_item *out = nonpaused_menu; + while (in->string) { + if (in->handler == NULL || in->handler == cart_swap) { + in++; + continue; + } + *out = *in; + out++; + in++; + } +} + +static const struct menu_item help_menu[] = { + {"Shortcuts", item_help}, + {"Debugger Help", debugger_help}, + {"About SameBoy", about}, + {"Back", return_to_root_menu}, + {NULL,} +}; + +static void enter_help_menu(unsigned index) +{ + current_menu = help_menu; current_selection = 0; scroll = 0; recalculate_menu_height(); } + static void cycle_model(unsigned index) { @@ -386,12 +451,48 @@ static void cycle_model_backwards(unsigned index) pending_command = GB_SDL_RESET_COMMAND; } -const char *current_model_string(unsigned index) +static const char *current_model_string(unsigned index) { - return (const char *[]){"Game Boy", "Game Boy Color", "Game Boy Advance", "Super Game Boy"} + return (const char *[]){"Game Boy", "Game Boy Color", "Game Boy Advance", "Super Game Boy", "Game Boy Pocket"} [configuration.model]; } +static void cycle_cgb_revision(unsigned index) +{ + + if (configuration.cgb_revision == GB_MODEL_CGB_E - GB_MODEL_CGB_0) { + configuration.cgb_revision = 0; + } + else { + configuration.cgb_revision++; + } + pending_command = GB_SDL_RESET_COMMAND; +} + +static void cycle_cgb_revision_backwards(unsigned index) +{ + if (configuration.cgb_revision == 0) { + configuration.cgb_revision = GB_MODEL_CGB_E - GB_MODEL_CGB_0; + } + else { + configuration.cgb_revision--; + } + pending_command = GB_SDL_RESET_COMMAND; +} + +static const char *current_cgb_revision_string(unsigned index) +{ + return (const char *[]){ + "CPU CGB 0 (Exp.)", + "CPU CGB A (Exp.)", + "CPU CGB B (Exp.)", + "CPU CGB C (Exp.)", + "CPU CGB D", + "CPU CGB E", + } + [configuration.cgb_revision]; +} + static void cycle_sgb_revision(unsigned index) { @@ -411,7 +512,7 @@ static void cycle_sgb_revision_backwards(unsigned index) pending_command = GB_SDL_RESET_COMMAND; } -const char *current_sgb_revision_string(unsigned index) +static const char *current_sgb_revision_string(unsigned index) { return (const char *[]){"Super Game Boy NTSC", "Super Game Boy PAL", "Super Game Boy 2"} [configuration.sgb_revision]; @@ -453,7 +554,7 @@ static void cycle_rewind_backwards(unsigned index) GB_set_rewind_length(&gb, configuration.rewind_length); } -const char *current_rewind_string(unsigned index) +static const char *current_rewind_string(unsigned index) { for (unsigned i = 0; i < sizeof(rewind_lengths) / sizeof(rewind_lengths[0]); i++) { if (configuration.rewind_length == rewind_lengths[i]) { @@ -463,7 +564,7 @@ const char *current_rewind_string(unsigned index) return "Custom"; } -const char *current_bootrom_string(unsigned index) +static const char *current_bootrom_string(unsigned index) { if (!configuration.bootrom_path[0]) { return "Built-in Boot ROMs"; @@ -508,7 +609,7 @@ static void toggle_rtc_mode(unsigned index) configuration.rtc_mode = !configuration.rtc_mode; } -const char *current_rtc_mode_string(unsigned index) +static const char *current_rtc_mode_string(unsigned index) { switch (configuration.rtc_mode) { case GB_RTC_MODE_SYNC_TO_HOST: return "Sync to System Clock"; @@ -517,13 +618,30 @@ const char *current_rtc_mode_string(unsigned index) return ""; } +static void cycle_agb_revision(unsigned index) +{ + + configuration.agb_revision ^= GB_MODEL_GBP_BIT; + pending_command = GB_SDL_RESET_COMMAND; +} + +static const char *current_agb_revision_string(unsigned index) +{ + if (configuration.agb_revision == GB_MODEL_GBP_A) { + return "CPU AGB A (GBP)"; + } + return "CPU AGB A (AGB)"; +} + static const struct menu_item emulation_menu[] = { {"Emulated Model:", cycle_model, current_model_string, cycle_model_backwards}, {"SGB Revision:", cycle_sgb_revision, current_sgb_revision_string, cycle_sgb_revision_backwards}, + {"GBC Revision:", cycle_cgb_revision, current_cgb_revision_string, cycle_cgb_revision_backwards}, + {"GBA Revision:", cycle_agb_revision, current_agb_revision_string, cycle_agb_revision}, {"Boot ROMs Folder:", toggle_bootrom, current_bootrom_string, toggle_bootrom}, {"Rewind Length:", cycle_rewind, current_rewind_string, cycle_rewind_backwards}, {"Real Time Clock:", toggle_rtc_mode, current_rtc_mode_string, toggle_rtc_mode}, - {"Back", return_to_root_menu}, + {"Back", enter_options_menu}, {NULL,} }; @@ -535,13 +653,13 @@ static void enter_emulation_menu(unsigned index) recalculate_menu_height(); } -const char *current_scaling_mode(unsigned index) +static const char *current_scaling_mode(unsigned index) { return (const char *[]){"Fill Entire Window", "Retain Aspect Ratio", "Retain Integer Factor"} [configuration.scaling_mode]; } -const char *current_default_scale(unsigned index) +static const char *current_default_scale(unsigned index) { return (const char *[]){"1x", "2x", "3x", "4x", "5x", "6x", "7x", "8x"} [configuration.default_scale - 1]; @@ -549,7 +667,7 @@ const char *current_default_scale(unsigned index) const char *current_color_correction_mode(unsigned index) { - return (const char *[]){"Disabled", "Correct Color Curves", "Emulate Hardware", "Preserve Brightness", "Reduce Contrast", "Harsh Reality"} + return (const char *[]){"Disabled", "Correct Color Curves", "Modern - Balanced", "Modern - Boost Contrast", "Reduce Contrast", "Harsh Reality", "Modern - Accurate"} [configuration.color_correction_mode]; } @@ -564,6 +682,9 @@ const char *current_color_temperature(unsigned index) const char *current_palette(unsigned index) { + if (configuration.dmg_palette == 4) { + return configuration.dmg_palette_name; + } return (const char *[]){"Greyscale", "Lime (Game Boy)", "Olive (Pocket)", "Teal (Light)"} [configuration.dmg_palette]; } @@ -574,7 +695,7 @@ const char *current_border_mode(unsigned index) [configuration.border_mode]; } -void cycle_scaling(unsigned index) +static void cycle_scaling(unsigned index) { configuration.scaling_mode++; if (configuration.scaling_mode == GB_SDL_SCALING_MAX) { @@ -584,7 +705,7 @@ void cycle_scaling(unsigned index) render_texture(NULL, NULL); } -void cycle_scaling_backwards(unsigned index) +static void cycle_scaling_backwards(unsigned index) { if (configuration.scaling_mode == 0) { configuration.scaling_mode = GB_SDL_SCALING_MAX - 1; @@ -596,7 +717,7 @@ void cycle_scaling_backwards(unsigned index) render_texture(NULL, NULL); } -void cycle_default_scale(unsigned index) +static void cycle_default_scale(unsigned index) { if (configuration.default_scale == GB_SDL_DEFAULT_SCALE_MAX) { configuration.default_scale = 1; @@ -609,7 +730,7 @@ void cycle_default_scale(unsigned index) update_viewport(); } -void cycle_default_scale_backwards(unsigned index) +static void cycle_default_scale_backwards(unsigned index) { if (configuration.default_scale == 1) { configuration.default_scale = GB_SDL_DEFAULT_SCALE_MAX; @@ -627,6 +748,12 @@ static void cycle_color_correction(unsigned index) if (configuration.color_correction_mode == GB_COLOR_CORRECTION_LOW_CONTRAST) { configuration.color_correction_mode = GB_COLOR_CORRECTION_DISABLED; } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_BALANCED) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_ACCURATE; + } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_ACCURATE) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST; + } else { configuration.color_correction_mode++; } @@ -637,6 +764,12 @@ static void cycle_color_correction_backwards(unsigned index) if (configuration.color_correction_mode == GB_COLOR_CORRECTION_DISABLED) { configuration.color_correction_mode = GB_COLOR_CORRECTION_LOW_CONTRAST; } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_ACCURATE) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_BALANCED; + } + else if (configuration.color_correction_mode == GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST) { + configuration.color_correction_mode = GB_COLOR_CORRECTION_MODERN_ACCURATE; + } else { configuration.color_correction_mode--; } @@ -656,24 +789,125 @@ static void increase_color_temperature(unsigned index) } } +const GB_palette_t *current_dmg_palette(void) +{ + typedef struct __attribute__ ((packed)) { + uint32_t magic; + uint8_t flags; + struct GB_color_s colors[5]; + int32_t brightness_bias; + uint32_t hue_bias; + uint32_t hue_bias_strength; + } theme_t; + + static theme_t theme; + + if (configuration.dmg_palette == 4) { + char *path = resource_path("Palettes"); + sprintf(path + strlen(path), "/%s.sbp", configuration.dmg_palette_name); + FILE *file = fopen(path, "rb"); + if (!file) return &GB_PALETTE_GREY; + memset(&theme, 0, sizeof(theme)); + fread(&theme, sizeof(theme), 1, file); + fclose(file); +#ifdef GB_BIG_ENDIAN + theme.magic = __builtin_bswap32(theme.magic); +#endif + if (theme.magic != 'SBPL') return &GB_PALETTE_GREY; + return (GB_palette_t *)&theme.colors; + } + + switch (configuration.dmg_palette) { + case 1: return &GB_PALETTE_DMG; + case 2: return &GB_PALETTE_MGB; + case 3: return &GB_PALETTE_GBL; + default: return &GB_PALETTE_GREY; + } +} + +static void update_gui_palette(void) +{ + const GB_palette_t *palette = current_dmg_palette(); + + SDL_Color colors[4]; + for (unsigned i = 4; i--; ) { + gui_palette_native[i] = SDL_MapRGB(pixel_format, palette->colors[i].r, palette->colors[i].g, palette->colors[i].b); + colors[i].r = palette->colors[i].r; + colors[i].g = palette->colors[i].g; + colors[i].b = palette->colors[i].b; + } + + SDL_Surface *background = SDL_LoadBMP(resource_path("background.bmp")); + + /* Create a blank background if background.bmp could not be loaded */ + if (!background) { + background = SDL_CreateRGBSurface(0, 160, 144, 8, 0, 0, 0, 0); + } + SDL_SetPaletteColors(background->format->palette, colors, 0, 4); + converted_background = SDL_ConvertSurface(background, pixel_format, 0); + SDL_FreeSurface(background); +} + static void cycle_palette(unsigned index) { if (configuration.dmg_palette == 3) { - configuration.dmg_palette = 0; + if (n_custom_palettes == 0) { + configuration.dmg_palette = 0; + } + else { + configuration.dmg_palette = 4; + strcpy(configuration.dmg_palette_name, custom_palettes[0]); + } + } + else if (configuration.dmg_palette == 4) { + for (unsigned i = 0; i < n_custom_palettes; i++) { + if (strcmp(custom_palettes[i], configuration.dmg_palette_name) == 0) { + if (i == n_custom_palettes - 1) { + configuration.dmg_palette = 0; + } + else { + strcpy(configuration.dmg_palette_name, custom_palettes[i + 1]); + } + break; + } + } } else { configuration.dmg_palette++; } + configuration.gui_pallete_enabled = true; + update_gui_palette(); } static void cycle_palette_backwards(unsigned index) { if (configuration.dmg_palette == 0) { - configuration.dmg_palette = 3; + if (n_custom_palettes == 0) { + configuration.dmg_palette = 3; + } + else { + configuration.dmg_palette = 4; + strcpy(configuration.dmg_palette_name, custom_palettes[n_custom_palettes - 1]); + } + } + else if (configuration.dmg_palette == 4) { + for (unsigned i = 0; i < n_custom_palettes; i++) { + if (strcmp(custom_palettes[i], configuration.dmg_palette_name) == 0) { + if (i == 0) { + configuration.dmg_palette = 3; + } + else { + strcpy(configuration.dmg_palette_name, custom_palettes[i - 1]); + } + break; + } + } } else { configuration.dmg_palette--; } + configuration.gui_pallete_enabled = true; + update_gui_palette(); } static void cycle_border_mode(unsigned index) @@ -830,8 +1064,7 @@ static const struct menu_item graphics_menu[] = { {"Mono Palette:", cycle_palette, current_palette, cycle_palette_backwards}, {"Display Border:", cycle_border_mode, current_border_mode, cycle_border_mode_backwards}, {"On-Screen Display:", toggle_osd, current_osd_mode, toggle_osd}, - - {"Back", return_to_root_menu}, + {"Back", enter_options_menu}, {NULL,} }; @@ -843,13 +1076,13 @@ static void enter_graphics_menu(unsigned index) recalculate_menu_height(); } -const char *highpass_filter_string(unsigned index) +static const char *highpass_filter_string(unsigned index) { return (const char *[]){"None (Keep DC Offset)", "Accurate", "Preserve Waveform"} [configuration.highpass_mode]; } -void cycle_highpass_filter(unsigned index) +static void cycle_highpass_filter(unsigned index) { configuration.highpass_mode++; if (configuration.highpass_mode == GB_HIGHPASS_MAX) { @@ -857,7 +1090,7 @@ void cycle_highpass_filter(unsigned index) } } -void cycle_highpass_filter_backwards(unsigned index) +static void cycle_highpass_filter_backwards(unsigned index) { if (configuration.highpass_mode == 0) { configuration.highpass_mode = GB_HIGHPASS_MAX - 1; @@ -867,14 +1100,14 @@ void cycle_highpass_filter_backwards(unsigned index) } } -const char *volume_string(unsigned index) +static const char *volume_string(unsigned index) { static char ret[5]; sprintf(ret, "%d%%", configuration.volume); return ret; } -void increase_volume(unsigned index) +static void increase_volume(unsigned index) { configuration.volume += 5; if (configuration.volume > 100) { @@ -882,7 +1115,7 @@ void increase_volume(unsigned index) } } -void decrease_volume(unsigned index) +static void decrease_volume(unsigned index) { configuration.volume -= 5; if (configuration.volume > 100) { @@ -890,14 +1123,14 @@ void decrease_volume(unsigned index) } } -const char *interference_volume_string(unsigned index) +static const char *interference_volume_string(unsigned index) { static char ret[5]; sprintf(ret, "%d%%", configuration.interference_volume); return ret; } -void increase_interference_volume(unsigned index) +static void increase_interference_volume(unsigned index) { configuration.interference_volume += 5; if (configuration.interference_volume > 100) { @@ -905,7 +1138,7 @@ void increase_interference_volume(unsigned index) } } -void decrease_interference_volume(unsigned index) +static void decrease_interference_volume(unsigned index) { configuration.interference_volume -= 5; if (configuration.interference_volume > 100) { @@ -913,14 +1146,91 @@ void decrease_interference_volume(unsigned index) } } -static const struct menu_item audio_menu[] = { +static const char *audio_driver_string(unsigned index) +{ + return GB_audio_driver_name(); +} + +static const char *preferred_audio_driver_string(unsigned index) +{ + if (configuration.audio_driver[0] == 0) { + return "Auto"; + } + return configuration.audio_driver; +} + +static void audio_driver_changed(void); + +static void cycle_prefrered_audio_driver(unsigned index) +{ + audio_driver_changed(); + if (configuration.audio_driver[0] == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(0)); + return; + } + unsigned i = 0; + while (true) { + const char *name = GB_audio_driver_name_at_index(i); + if (name[0] == 0) { // Not a supported driver? Switch to auto + configuration.audio_driver[0] = 0; + return; + } + if (strcmp(configuration.audio_driver, name) == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(i + 1)); + return; + } + i++; + } +} + +static void cycle_preferred_audio_driver_backwards(unsigned index) +{ + audio_driver_changed(); + if (configuration.audio_driver[0] == 0) { + unsigned i = 0; + while (true) { + const char *name = GB_audio_driver_name_at_index(i); + if (name[0] == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(i - 1)); + return; + } + i++; + } + return; + } + unsigned i = 0; + while (true) { + const char *name = GB_audio_driver_name_at_index(i); + if (name[0] == 0) { // Not a supported driver? Switch to auto + configuration.audio_driver[0] = 0; + return; + } + if (strcmp(configuration.audio_driver, name) == 0) { + strcpy(configuration.audio_driver, GB_audio_driver_name_at_index(i - 1)); + return; + } + i++; + } +} + +static void nop(unsigned index){} + +static struct menu_item audio_menu[] = { {"Highpass Filter:", cycle_highpass_filter, highpass_filter_string, cycle_highpass_filter_backwards}, {"Volume:", increase_volume, volume_string, decrease_volume}, {"Interference Volume:", increase_interference_volume, interference_volume_string, decrease_interference_volume}, - {"Back", return_to_root_menu}, + {"Preferred Audio Driver:", cycle_prefrered_audio_driver, preferred_audio_driver_string, cycle_preferred_audio_driver_backwards}, + {"Active Driver:", nop, audio_driver_string}, + {"Back", enter_options_menu}, {NULL,} }; +static void audio_driver_changed(void) +{ + audio_menu[4].value_getter = NULL; + audio_menu[4].string = "Relaunch to apply"; +} + static void enter_audio_menu(unsigned index) { current_menu = audio_menu; @@ -936,7 +1246,7 @@ static void modify_key(unsigned index) static const char *key_name(unsigned index); -static const struct menu_item controls_menu[] = { +static const struct menu_item keyboard_menu[] = { {"Right:", modify_key, key_name,}, {"Left:", modify_key, key_name,}, {"Up:", modify_key, key_name,}, @@ -948,7 +1258,7 @@ static const struct menu_item controls_menu[] = { {"Turbo:", modify_key, key_name,}, {"Rewind:", modify_key, key_name,}, {"Slow-Motion:", modify_key, key_name,}, - {"Back", return_to_root_menu}, + {"Back", enter_controls_menu}, {NULL,} }; @@ -960,9 +1270,9 @@ static const char *key_name(unsigned index) return SDL_GetScancodeName(configuration.keys[index]); } -static void enter_controls_menu(unsigned index) +static void enter_keyboard_menu(unsigned index) { - current_menu = controls_menu; + current_menu = keyboard_menu; current_selection = 0; scroll = 0; recalculate_menu_height(); @@ -973,7 +1283,7 @@ static SDL_Joystick *joystick = NULL; static SDL_GameController *controller = NULL; SDL_Haptic *haptic = NULL; -const char *current_joypad_name(unsigned index) +static const char *current_joypad_name(unsigned index) { static char name[23] = {0,}; const char *orig_name = joystick? SDL_JoystickName(joystick) : NULL; @@ -1082,17 +1392,85 @@ static void cycle_rumble_mode_backwards(unsigned index) } } -const char *current_rumble_mode(unsigned index) +static const char *current_rumble_mode(unsigned index) { return (const char *[]){"Disabled", "Rumble Game Paks Only", "All Games"} [configuration.rumble_mode]; } +static void toggle_allow_background_controllers(unsigned index) +{ + configuration.allow_background_controllers ^= true; + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + configuration.allow_background_controllers? "1" : "0"); +} + +static const char *current_background_control_mode(unsigned index) +{ + return configuration.allow_background_controllers? "Always" : "During Window Focus Only"; +} + +static void cycle_hotkey(unsigned index) +{ + if (configuration.hotkey_actions[index - 2] == HOTKEY_MAX) { + configuration.hotkey_actions[index - 2] = 0; + } + else { + configuration.hotkey_actions[index - 2]++; + } +} + +static void cycle_hotkey_backwards(unsigned index) +{ + if (configuration.hotkey_actions[index - 2] == 0) { + configuration.hotkey_actions[index - 2] = HOTKEY_MAX; + } + else { + configuration.hotkey_actions[index - 2]--; + } +} + +static const char *current_hotkey(unsigned index) +{ + return (const char *[]){ + "None", + "Toggle Pause", + "Toggle Mute", + "Reset", + "Quit SameBoy", + "Save State Slot 1", + "Load State Slot 1", + "Save State Slot 2", + "Load State Slot 2", + "Save State Slot 3", + "Load State Slot 3", + "Save State Slot 4", + "Load State Slot 4", + "Save State Slot 5", + "Load State Slot 5", + "Save State Slot 6", + "Load State Slot 6", + "Save State Slot 7", + "Load State Slot 7", + "Save State Slot 8", + "Load State Slot 8", + "Save State Slot 9", + "Load State Slot 9", + "Save State Slot 10", + "Load State Slot 10", + } + [configuration.hotkey_actions[index - 2]]; +} + static const struct menu_item joypad_menu[] = { {"Joypad:", cycle_joypads, current_joypad_name, cycle_joypads_backwards}, {"Configure layout", detect_joypad_layout}, + {"Hotkey 1 Action:", cycle_hotkey, current_hotkey, cycle_hotkey_backwards}, + {"Hotkey 2 Action:", cycle_hotkey, current_hotkey, cycle_hotkey_backwards}, {"Rumble Mode:", cycle_rumble_mode, current_rumble_mode, cycle_rumble_mode_backwards}, - {"Back", return_to_root_menu}, + {"Enable Control:", toggle_allow_background_controllers, current_background_control_mode, toggle_allow_background_controllers}, + {"Back", enter_controls_menu}, {NULL,} }; @@ -1151,28 +1529,136 @@ void connect_joypad(void) } } +static void toggle_mouse_control(unsigned index) +{ + configuration.allow_mouse_controls = !configuration.allow_mouse_controls; +} + +static const char *mouse_control_string(unsigned index) +{ + return configuration.allow_mouse_controls? "Allow mouse control" : "Disallow mouse control"; +} + +static const struct menu_item controls_menu[] = { + {"Keyboard Options", enter_keyboard_menu}, + {"Joypad Options", enter_joypad_menu}, + {"Motion-controlled games:", toggle_mouse_control, mouse_control_string, toggle_mouse_control}, + {"Back", enter_options_menu}, + {NULL,} +}; + +static void enter_controls_menu(unsigned index) +{ + current_menu = controls_menu; + current_selection = 0; + scroll = 0; + recalculate_menu_height(); +} + +static void toggle_audio_recording(unsigned index) +{ + if (!GB_is_inited(&gb)) { + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", "Cannot start audio recording, open a ROM file first.", window); + return; + } + static bool is_recording = false; + if (is_recording) { + is_recording = false; + show_osd_text("Audio recording ended"); + int error = GB_stop_audio_recording(&gb); + if (error) { + char *message = NULL; + asprintf(&message, "Could not finalize recording: %s", strerror(error)); + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", message, window); + free(message); + } + static const char item_string[] = "Start Audio Recording"; + memcpy(audio_recording_menu_item, item_string, sizeof(item_string)); + return; + } + char *filename = do_save_recording_dialog(GB_get_sample_rate(&gb)); + + /* Drop events as it SDL seems to catch several in-dialog events */ + SDL_Event event; + while (SDL_PollEvent(&event)); + + if (filename) { + GB_audio_format_t format = GB_AUDIO_FORMAT_RAW; + size_t length = strlen(filename); + if (length >= 5) { + if (strcasecmp(".aiff", filename + length - 5) == 0) { + format = GB_AUDIO_FORMAT_AIFF; + } + else if (strcasecmp(".aifc", filename + length - 5) == 0) { + format = GB_AUDIO_FORMAT_AIFF; + } + else if (length >= 4) { + if (strcasecmp(".aif", filename + length - 4) == 0) { + format = GB_AUDIO_FORMAT_AIFF; + } + else if (strcasecmp(".wav", filename + length - 4) == 0) { + format = GB_AUDIO_FORMAT_WAV; + } + } + } + + int error = GB_start_audio_recording(&gb, filename, format); + free(filename); + if (error) { + char *message = NULL; + asprintf(&message, "Could not finalize recording: %s", strerror(error)); + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", message, window); + free(message); + return; + } + + is_recording = true; + static const char item_string[] = "Stop Audio Recording"; + memcpy(audio_recording_menu_item, item_string, sizeof(item_string)); + show_osd_text("Audio recording started"); + } +} + +void convert_mouse_coordinates(signed *x, signed *y) +{ + signed width = GB_get_screen_width(&gb); + signed height = GB_get_screen_height(&gb); + signed x_offset = (width - 160) / 2; + signed y_offset = (height - 144) / 2; + + *x = (signed)(*x - rect.x / factor) * width / (signed)(rect.w / factor) - x_offset; + *y = (signed)(*y - rect.y / factor) * height / (signed)(rect.h / factor) - y_offset; + + if (strcmp("CRT", configuration.filter) == 0) { + *y = *y * 8 / 7; + *y -= 144 / 16; + } +} + void run_gui(bool is_running) { SDL_ShowCursor(SDL_ENABLE); connect_joypad(); /* Draw the background screen */ - static SDL_Surface *converted_background = NULL; if (!converted_background) { - SDL_Surface *background = SDL_LoadBMP(resource_path("background.bmp")); - - /* Create a blank background if background.bmp could not be loaded */ - if (!background) { - background = SDL_CreateRGBSurface(0, 160, 144, 8, 0, 0, 0, 0); + if (configuration.gui_pallete_enabled) { + update_gui_palette(); } - - SDL_SetPaletteColors(background->format->palette, gui_palette, 0, 4); - converted_background = SDL_ConvertSurface(background, pixel_format, 0); - SDL_LockSurface(converted_background); - SDL_FreeSurface(background); - - for (unsigned i = 4; i--; ) { - gui_palette_native[i] = SDL_MapRGB(pixel_format, gui_palette[i].r, gui_palette[i].g, gui_palette[i].b); + else { + SDL_Surface *background = SDL_LoadBMP(resource_path("background.bmp")); + + /* Create a blank background if background.bmp could not be loaded */ + if (!background) { + background = SDL_CreateRGBSurface(0, 160, 144, 8, 0, 0, 0, 0); + } + SDL_SetPaletteColors(background->format->palette, gui_palette, 0, 4); + converted_background = SDL_ConvertSurface(background, pixel_format, 0); + SDL_FreeSurface(background); + + for (unsigned i = 4; i--; ) { + gui_palette_native[i] = SDL_MapRGB(pixel_format, gui_palette[i].r, gui_palette[i].g, gui_palette[i].b); + } } } @@ -1195,13 +1681,46 @@ void run_gui(bool is_running) recalculate_menu_height(); current_selection = 0; scroll = 0; - do { + + bool scrollbar_drag = false; + signed scroll_mouse_start = 0; + signed scroll_start = 0; + while (true) { + SDL_WaitEvent(&event); /* Convert Joypad and mouse events (We only generate down events) */ if (gui_state != WAITING_FOR_KEY && gui_state != WAITING_FOR_JBUTTON) { switch (event.type) { + case SDL_KEYDOWN: + if (gui_state == WAITING_FOR_KEY) break; + if (event.key.keysym.mod != 0) break; + switch (event.key.keysym.scancode) { + // Do not remap these keys to prevent deadlocking + case SDL_SCANCODE_ESCAPE: + case SDL_SCANCODE_RETURN: + case SDL_SCANCODE_RIGHT: + case SDL_SCANCODE_LEFT: + case SDL_SCANCODE_UP: + case SDL_SCANCODE_DOWN: + break; + + default: + if (event.key.keysym.scancode == configuration.keys[GB_KEY_RIGHT]) event.key.keysym.scancode = SDL_SCANCODE_RIGHT; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_LEFT]) event.key.keysym.scancode = SDL_SCANCODE_LEFT; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_UP]) event.key.keysym.scancode = SDL_SCANCODE_UP; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_DOWN]) event.key.keysym.scancode = SDL_SCANCODE_DOWN; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_A]) event.key.keysym.scancode = SDL_SCANCODE_RETURN; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_START]) event.key.keysym.scancode = SDL_SCANCODE_RETURN; + else if (event.key.keysym.scancode == configuration.keys[GB_KEY_B]) event.key.keysym.scancode = SDL_SCANCODE_ESCAPE; + break; + } + break; + case SDL_WINDOWEVENT: should_render = true; break; + case SDL_MOUSEBUTTONUP: + scrollbar_drag = false; + break; case SDL_MOUSEBUTTONDOWN: if (gui_state == SHOWING_HELP) { event.type = SDL_KEYDOWN; @@ -1212,12 +1731,25 @@ void run_gui(bool is_running) event.key.keysym.scancode = SDL_SCANCODE_ESCAPE; } else if (gui_state == SHOWING_MENU) { - signed x = (event.button.x - rect.x / factor) * width / (rect.w / factor) - x_offset; - signed y = (event.button.y - rect.y / factor) * height / (rect.h / factor) - y_offset; - - if (strcmp("CRT", configuration.filter) == 0) { - y = y * 8 / 7; - y -= 144 / 16; + signed x = event.button.x; + signed y = event.button.y; + convert_mouse_coordinates(&x, &y); + if (x >= 160 - 6 && x < 160 && menu_height > 144) { + unsigned scrollbar_offset = (140 - scrollbar_size) * scroll / (menu_height - 144); + if (scrollbar_offset + scrollbar_size > 140) { + scrollbar_offset = 140 - scrollbar_size; + } + + if (y < scrollbar_offset || y > scrollbar_offset + scrollbar_size) { + scroll = (menu_height - 144) * y / 143; + should_render = true; + } + + scrollbar_drag = true; + mouse_scroling = true; + scroll_mouse_start = y; + scroll_start = scroll; + break; } y += scroll; @@ -1360,14 +1892,23 @@ void run_gui(bool is_running) return; } } - case SDL_JOYBUTTONDOWN: - { + case SDL_JOYBUTTONDOWN: { if (gui_state == WAITING_FOR_JBUTTON && joypad_configuration_progress != JOYPAD_BUTTONS_MAX) { should_render = true; configuration.joypad_configuration[joypad_configuration_progress++] = event.jbutton.button; } break; } + case SDL_JOYHATMOTION: { + if (gui_state == WAITING_FOR_JBUTTON && joypad_configuration_progress == JOYPAD_BUTTON_RIGHT) { + should_render = true; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + configuration.joypad_configuration[joypad_configuration_progress++] = -1; + } + break; + } case SDL_JOYAXISMOTION: { if (gui_state == WAITING_FOR_JBUTTON && @@ -1409,8 +1950,28 @@ void run_gui(bool is_running) break; } + case SDL_MOUSEMOTION: { + if (scrollbar_drag && scrollbar_size < 140 && scrollbar_size > 0) { + signed x = event.motion.x; + signed y = event.motion.y; + convert_mouse_coordinates(&x, &y); + signed delta = scroll_mouse_start - y; + scroll = scroll_start - delta * (signed)(menu_height - 144) / (signed)(140 - scrollbar_size); + if (scroll < 0) { + scroll = 0; + } + if (scroll >= menu_height - 144) { + scroll = menu_height - 144; + } + + should_render = true; + } + break; + } + case SDL_KEYDOWN: + scrollbar_drag = false; if (gui_state == WAITING_FOR_KEY) { if (current_selection > 8) { configuration.keys_2[current_selection - 9] = event.key.keysym.scancode; @@ -1457,7 +2018,12 @@ void run_gui(bool is_running) } else if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE) { if (gui_state == SHOWING_MENU && current_menu != root_menu) { - return_to_root_menu(0); + for (const struct menu_item *item = current_menu; item->string; item++) { + if (strcmp(item->string, "Back") == 0) { + item->handler(0); + break; + } + } should_render = true; } else if (is_running) { @@ -1517,10 +2083,7 @@ void run_gui(bool is_running) } } else if (gui_state == SHOWING_HELP) { - current_help_page++; - if (current_help_page == sizeof(help) / sizeof(help[0])) { - gui_state = SHOWING_MENU; - } + gui_state = SHOWING_MENU; should_render = true; } break; @@ -1529,6 +2092,7 @@ void run_gui(bool is_running) if (should_render) { should_render = false; rerender: + SDL_LockSurface(converted_background); if (width == 160 && height == 144) { memcpy(pixels, converted_background->pixels, sizeof(pixels)); } @@ -1537,6 +2101,7 @@ void run_gui(bool is_running) memcpy(pixels + x_offset + width * (y + y_offset), ((uint32_t *)converted_background->pixels) + 160 * y, 160 * 4); } } + SDL_UnlockSurface(converted_background); switch (gui_state) { case SHOWING_DROP_MESSAGE: @@ -1603,10 +2168,10 @@ void run_gui(bool is_running) for (unsigned y = 0; y < 140; y++) { uint32_t *pixel = pixels + x_offset + 156 + width * (y + y_offset + 2); if (y >= scrollbar_offset && y < scrollbar_offset + scrollbar_size) { - pixel[0] = pixel[1]= gui_palette_native[2]; + pixel[0] = pixel[1] = gui_palette_native[2]; } else { - pixel[0] = pixel[1]= gui_palette_native[1]; + pixel[0] = pixel[1] = gui_palette_native[1]; } } @@ -1637,6 +2202,8 @@ void run_gui(bool is_running) "Turbo", "Rewind", "Slow-Motion", + "Hotkey 1", + "Hotkey 2", "", } [joypad_configuration_progress], gui_palette_native[3], gui_palette_native[0], DECORATION_NONE); @@ -1650,5 +2217,33 @@ void run_gui(bool is_running) render_texture(pixels, NULL); #endif } - } while (SDL_WaitEvent(&event)); + } +} + +static void __attribute__ ((constructor)) list_custom_palettes(void) +{ + char *path = resource_path("Palettes"); + if (!path) return; + if (strlen(path) > 1024 - 30) { + // path too long to safely concat filenames + return; + } + DIR *dir = opendir(path); + if (!dir) return; + + struct dirent *ent; + + while ((ent = readdir(dir))) { + unsigned length = strlen(ent->d_name); + if (length < 5 || length > 28) { + continue; + } + if (strcmp(ent->d_name + length - 4, ".sbp")) continue; + ent->d_name[length - 4] = 0; + custom_palettes = realloc(custom_palettes, + sizeof(custom_palettes[0]) * (n_custom_palettes + 1)); + custom_palettes[n_custom_palettes++] = strdup(ent->d_name); + } + + closedir(dir); } diff --git a/thirdparty/SameBoy/SDL/gui.h b/thirdparty/SameBoy/SDL/gui.h index 1764c8b97..3c12c85f1 100644 --- a/thirdparty/SameBoy/SDL/gui.h +++ b/thirdparty/SameBoy/SDL/gui.h @@ -5,6 +5,7 @@ #include #include #include "shader.h" +#include "configuration.h" #define JOYSTICK_HIGH 0x4000 #define JOYSTICK_LOW 0x3800 @@ -24,14 +25,6 @@ extern SDL_PixelFormat *pixel_format; extern SDL_Haptic *haptic; extern shader_t shader; -enum scaling_mode { - GB_SDL_SCALING_ENTIRE_WINDOW, - GB_SDL_SCALING_KEEP_RATIO, - GB_SDL_SCALING_INTEGER_FACTOR, - GB_SDL_SCALING_MAX, -}; - - enum pending_command { GB_SDL_NO_COMMAND, GB_SDL_SAVE_STATE_COMMAND, @@ -40,6 +33,7 @@ enum pending_command { GB_SDL_NEW_FILE_COMMAND, GB_SDL_QUIT_COMMAND, GB_SDL_LOAD_STATE_FROM_FILE_COMMAND, + GB_SDL_CART_SWAP_COMMAND, }; #define GB_SDL_DEFAULT_SCALE_MAX 8 @@ -48,84 +42,6 @@ extern enum pending_command pending_command; extern unsigned command_parameter; extern char *dropped_state_file; -typedef enum { - JOYPAD_BUTTON_RIGHT, - JOYPAD_BUTTON_LEFT, - JOYPAD_BUTTON_UP, - JOYPAD_BUTTON_DOWN, - JOYPAD_BUTTON_A, - JOYPAD_BUTTON_B, - JOYPAD_BUTTON_SELECT, - JOYPAD_BUTTON_START, - JOYPAD_BUTTON_MENU, - JOYPAD_BUTTON_TURBO, - JOYPAD_BUTTON_REWIND, - JOYPAD_BUTTON_SLOW_MOTION, - JOYPAD_BUTTONS_MAX -} joypad_button_t; - -typedef enum { - JOYPAD_AXISES_X, - JOYPAD_AXISES_Y, - JOYPAD_AXISES_MAX -} joypad_axis_t; - -typedef struct { - SDL_Scancode keys[9]; - GB_color_correction_mode_t color_correction_mode; - enum scaling_mode scaling_mode; - uint8_t blending_mode; - - GB_highpass_mode_t highpass_mode; - - bool _deprecated_div_joystick; - bool _deprecated_flip_joystick_bit_1; - bool _deprecated_swap_joysticks_bits_1_and_2; - - char filter[32]; - enum { - MODEL_DMG, - MODEL_CGB, - MODEL_AGB, - MODEL_SGB, - MODEL_MAX, - } model; - - /* v0.11 */ - uint32_t rewind_length; - SDL_Scancode keys_2[32]; /* Rewind and underclock, + padding for the future */ - uint8_t joypad_configuration[32]; /* 12 Keys + padding for the future*/; - uint8_t joypad_axises[JOYPAD_AXISES_MAX]; - - /* v0.12 */ - enum { - SGB_NTSC, - SGB_PAL, - SGB_2, - SGB_MAX - } sgb_revision; - - /* v0.13 */ - uint8_t dmg_palette; - GB_border_mode_t border_mode; - uint8_t volume; - GB_rumble_mode_t rumble_mode; - - uint8_t default_scale; - - /* v0.14 */ - unsigned padding; - uint8_t color_temperature; - char bootrom_path[4096]; - uint8_t interference_volume; - GB_rtc_mode_t rtc_mode; - - /* v0.14.4 */ - bool osd; -} configuration_t; - -extern configuration_t configuration; - void update_viewport(void); void run_gui(bool is_running); void render_texture(void *pixels, void *previous); @@ -148,5 +64,7 @@ void show_osd_text(const char *text); extern const char *osd_text; extern unsigned osd_countdown; extern unsigned osd_text_lines; +void convert_mouse_coordinates(signed *x, signed *y); +const GB_palette_t *current_dmg_palette(void); #endif diff --git a/thirdparty/SameBoy/SDL/main.c b/thirdparty/SameBoy/SDL/main.c index ccfa906df..4afc5d709 100644 --- a/thirdparty/SameBoy/SDL/main.c +++ b/thirdparty/SameBoy/SDL/main.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -13,7 +14,7 @@ #include "console.h" #ifndef _WIN32 -#include +#include #else #include #endif @@ -161,22 +162,7 @@ static const char *end_capturing_logs(bool show_popup, bool should_exit, uint32_ static void update_palette(void) { - switch (configuration.dmg_palette) { - case 1: - GB_set_palette(&gb, &GB_PALETTE_DMG); - break; - - case 2: - GB_set_palette(&gb, &GB_PALETTE_MGB); - break; - - case 3: - GB_set_palette(&gb, &GB_PALETTE_GBL); - break; - - default: - GB_set_palette(&gb, &GB_PALETTE_GREY); - } + GB_set_palette(&gb, current_dmg_palette()); } static void screen_size_changed(void) @@ -242,6 +228,25 @@ static void handle_events(GB_gameboy_t *gb) } break; } + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: { + if (GB_has_accelerometer(gb) && configuration.allow_mouse_controls) { + GB_set_key_state(gb, GB_KEY_A, event.type == SDL_MOUSEBUTTONDOWN); + } + break; + } + + case SDL_MOUSEMOTION: { + if (GB_has_accelerometer(gb) && configuration.allow_mouse_controls) { + signed x = event.motion.x; + signed y = event.motion.y; + convert_mouse_coordinates(&x, &y); + x = SDL_max(SDL_min(x, 160), 0); + y = SDL_max(SDL_min(y, 144), 0); + GB_set_accelerometer_values(gb, (x - 80) / -80.0, (y - 72) / -72.0); + } + break; + } case SDL_JOYBUTTONUP: case SDL_JOYBUTTONDOWN: { @@ -267,14 +272,50 @@ static void handle_events(GB_gameboy_t *gb) else if (button == JOYPAD_BUTTON_MENU && event.type == SDL_JOYBUTTONDOWN) { open_menu(); } + else if ((button == JOYPAD_BUTTON_HOTKEY_1 || button == JOYPAD_BUTTON_HOTKEY_2) && event.type == SDL_JOYBUTTONDOWN) { + hotkey_action_t action = configuration.hotkey_actions[button - JOYPAD_BUTTON_HOTKEY_1]; + switch (action) { + case HOTKEY_NONE: + break; + case HOTKEY_PAUSE: + paused = !paused; + break; + case HOTKEY_MUTE: + GB_audio_set_paused(GB_audio_is_playing()); + break; + case HOTKEY_RESET: + pending_command = GB_SDL_RESET_COMMAND; + break; + case HOTKEY_QUIT: + pending_command = GB_SDL_QUIT_COMMAND; + break; + default: + command_parameter = (action - HOTKEY_SAVE_STATE_1) / 2 + 1; + pending_command = ((action - HOTKEY_SAVE_STATE_1) % 2)? GB_SDL_LOAD_STATE_COMMAND:GB_SDL_SAVE_STATE_COMMAND; + break; + case HOTKEY_SAVE_STATE_10: + command_parameter = 0; + pending_command = GB_SDL_SAVE_STATE_COMMAND; + break; + case HOTKEY_LOAD_STATE_10: + command_parameter = 0; + pending_command = GB_SDL_LOAD_STATE_COMMAND; + break; + } + } } break; case SDL_JOYAXISMOTION: { static bool axis_active[2] = {false, false}; + static double accel_values[2] = {0, 0}; joypad_axis_t axis = get_joypad_axis(event.jaxis.axis); if (axis == JOYPAD_AXISES_X) { - if (event.jaxis.value > JOYSTICK_HIGH) { + if (GB_has_accelerometer(gb)) { + accel_values[0] = event.jaxis.value / (double)32768.0; + GB_set_accelerometer_values(gb, -accel_values[0], -accel_values[1]); + } + else if (event.jaxis.value > JOYSTICK_HIGH) { axis_active[0] = true; GB_set_key_state(gb, GB_KEY_RIGHT, true); GB_set_key_state(gb, GB_KEY_LEFT, false); @@ -291,7 +332,11 @@ static void handle_events(GB_gameboy_t *gb) } } else if (axis == JOYPAD_AXISES_Y) { - if (event.jaxis.value > JOYSTICK_HIGH) { + if (GB_has_accelerometer(gb)) { + accel_values[1] = event.jaxis.value / (double)32768.0; + GB_set_accelerometer_values(gb, -accel_values[0], -accel_values[1]); + } + else if (event.jaxis.value > JOYSTICK_HIGH) { axis_active[1] = true; GB_set_key_state(gb, GB_KEY_DOWN, true); GB_set_key_state(gb, GB_KEY_UP, false); @@ -396,6 +441,16 @@ static void handle_events(GB_gameboy_t *gb) pending_command = GB_SDL_SAVE_STATE_COMMAND; } } + else if ((event.key.keysym.mod & KMOD_ALT) && event.key.keysym.scancode <= SDL_SCANCODE_4) { + GB_channel_t channel = event.key.keysym.scancode - SDL_SCANCODE_1; + bool state = !GB_is_channel_muted(gb, channel); + + GB_set_channel_muted(gb, channel, state); + + static char message[18]; + sprintf(message, "Channel %d %smuted", channel + 1, state? "" : "un"); + show_osd_text(message); + } } break; } @@ -434,7 +489,7 @@ static uint32_t rgb_encode(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b) return SDL_MapRGB(pixel_format, r, g, b); } -static void vblank(GB_gameboy_t *gb) +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) { if (underclock_down && clock_mutliplier > 0.5) { clock_mutliplier -= 1.0/16; @@ -464,15 +519,17 @@ static void vblank(GB_gameboy_t *gb) true); osd_countdown--; } - if (configuration.blending_mode) { - render_texture(active_pixel_buffer, previous_pixel_buffer); - uint32_t *temp = active_pixel_buffer; - active_pixel_buffer = previous_pixel_buffer; - previous_pixel_buffer = temp; - GB_set_pixels_output(gb, active_pixel_buffer); - } - else { - render_texture(active_pixel_buffer, NULL); + if (type != GB_VBLANK_TYPE_REPEAT) { + if (configuration.blending_mode) { + render_texture(active_pixel_buffer, previous_pixel_buffer); + uint32_t *temp = active_pixel_buffer; + active_pixel_buffer = previous_pixel_buffer; + previous_pixel_buffer = temp; + GB_set_pixels_output(gb, active_pixel_buffer); + } + else { + render_texture(active_pixel_buffer, NULL); + } } do_rewind = rewind_down; handle_events(gb); @@ -510,7 +567,7 @@ static void gb_audio_callback(GB_gameboy_t *gb, GB_sample_t *sample) } } - if (GB_audio_get_queue_length() / sizeof(*sample) > GB_audio_get_frequency() / 4) { + if (GB_audio_get_queue_length() > GB_audio_get_frequency() / 8) { // Maximum lag of 0.125s return; } @@ -523,6 +580,7 @@ static void gb_audio_callback(GB_gameboy_t *gb, GB_sample_t *sample) } +static bool doing_hot_swap = false; static bool handle_pending_command(void) { switch (pending_command) { @@ -575,6 +633,8 @@ static bool handle_pending_command(void) case GB_SDL_NO_COMMAND: return false; + case GB_SDL_CART_SWAP_COMMAND: + doing_hot_swap = true; case GB_SDL_RESET_COMMAND: case GB_SDL_NEW_FILE_COMMAND: GB_save_battery(&gb, battery_save_path_ptr); @@ -590,12 +650,12 @@ static bool handle_pending_command(void) static void load_boot_rom(GB_gameboy_t *gb, GB_boot_rom_t type) { static const char *const names[] = { - [GB_BOOT_ROM_DMG0] = "dmg0_boot.bin", + [GB_BOOT_ROM_DMG_0] = "dmg0_boot.bin", [GB_BOOT_ROM_DMG] = "dmg_boot.bin", [GB_BOOT_ROM_MGB] = "mgb_boot.bin", [GB_BOOT_ROM_SGB] = "sgb_boot.bin", [GB_BOOT_ROM_SGB2] = "sgb2_boot.bin", - [GB_BOOT_ROM_CGB0] = "cgb0_boot.bin", + [GB_BOOT_ROM_CGB_0] = "cgb0_boot.bin", [GB_BOOT_ROM_CGB] = "cgb_boot.bin", [GB_BOOT_ROM_AGB] = "agb_boot.bin", }; @@ -612,6 +672,16 @@ static void load_boot_rom(GB_gameboy_t *gb, GB_boot_rom_t type) } } +static bool is_path_writeable(const char *path) +{ + if (!access(path, W_OK)) return true; + int fd = creat(path, 0644); + if (fd == -1) return false; + close(fd); + unlink(path); + return true; +} + static void run(void) { SDL_ShowCursor(SDL_DISABLE); @@ -621,8 +691,9 @@ static void run(void) model = (GB_model_t []) { [MODEL_DMG] = GB_MODEL_DMG_B, - [MODEL_CGB] = GB_MODEL_CGB_E, - [MODEL_AGB] = GB_MODEL_AGB, + [MODEL_CGB] = GB_MODEL_CGB_0 + configuration.cgb_revision, + [MODEL_AGB] = configuration.agb_revision, + [MODEL_MGB] = GB_MODEL_MGB, [MODEL_SGB] = (GB_model_t []) { [SGB_NTSC] = GB_MODEL_SGB_NTSC, @@ -632,7 +703,12 @@ static void run(void) }[configuration.model]; if (GB_is_inited(&gb)) { - GB_switch_model_and_reset(&gb, model); + if (doing_hot_swap) { + doing_hot_swap = false; + } + else { + GB_switch_model_and_reset(&gb, model); + } } else { GB_init(&gb, model); @@ -692,6 +768,18 @@ static void run(void) else { GB_load_rom(&gb, filename); } + + /* Configure battery */ + char battery_save_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .sav + NULL */ + replace_extension(filename, path_length, battery_save_path, ".sav"); + battery_save_path_ptr = battery_save_path; + GB_load_battery(&gb, battery_save_path); + if (GB_save_battery_size(&gb)) { + if (!is_path_writeable(battery_save_path)) { + GB_log(&gb, "The save path for this ROM is not writeable, progress will not be saved.\n"); + } + } + end_capturing_logs(true, error, SDL_MESSAGEBOX_WARNING, "Warning"); static char start_text[64]; @@ -700,13 +788,6 @@ static void run(void) sprintf(start_text, "SameBoy v" GB_VERSION "\n%s\n%08X", title, GB_get_rom_crc32(&gb)); show_osd_text(start_text); - - /* Configure battery */ - char battery_save_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .sav + NULL */ - replace_extension(filename, path_length, battery_save_path, ".sav"); - battery_save_path_ptr = battery_save_path; - GB_load_battery(&gb, battery_save_path); - /* Configure symbols */ GB_debugger_load_symbol_file(&gb, resource_path("registers.sym")); @@ -756,6 +837,11 @@ static void save_configuration(void) } } +static void stop_recording(void) +{ + GB_stop_audio_recording(&gb); +} + static bool get_arg_flag(const char *flag, int *argc, char **argv) { for (unsigned i = 1; i < *argc; i++) { @@ -801,7 +887,7 @@ int main(int argc, char **argv) signal(SIGINT, debugger_interrupt); - SDL_Init(SDL_INIT_EVERYTHING); + SDL_Init(SDL_INIT_EVERYTHING & ~SDL_INIT_AUDIO); if ((console_supported = CON_start(completer))) { CON_set_repeat_empty(true); CON_printf("SameBoy v" GB_VERSION "\n"); @@ -823,18 +909,31 @@ int main(int argc, char **argv) fclose(prefs_file); /* Sanitize for stability */ - configuration.color_correction_mode %= GB_COLOR_CORRECTION_LOW_CONTRAST +1; + configuration.color_correction_mode %= GB_COLOR_CORRECTION_MODERN_ACCURATE + 1; configuration.scaling_mode %= GB_SDL_SCALING_MAX; configuration.default_scale %= GB_SDL_DEFAULT_SCALE_MAX + 1; configuration.blending_mode %= GB_FRAME_BLENDING_MODE_ACCURATE + 1; configuration.highpass_mode %= GB_HIGHPASS_MAX; configuration.model %= MODEL_MAX; configuration.sgb_revision %= SGB_MAX; - configuration.dmg_palette %= 3; + configuration.dmg_palette %= 5; + if (configuration.dmg_palette) { + configuration.gui_pallete_enabled = true; + } configuration.border_mode %= GB_BORDER_ALWAYS + 1; configuration.rumble_mode %= GB_RUMBLE_ALL_GAMES + 1; configuration.color_temperature %= 21; configuration.bootrom_path[sizeof(configuration.bootrom_path) - 1] = 0; + configuration.cgb_revision %= GB_MODEL_CGB_E - GB_MODEL_CGB_0 + 1; + configuration.audio_driver[15] = 0; + configuration.dmg_palette_name[24] = 0; + // Fix broken defaults, should keys 12-31 should be unmapped by default + if (configuration.joypad_configuration[31] == 0) { + memset(configuration.joypad_configuration + 12 , -1, 32 - 12); + } + if ((configuration.agb_revision & ~GB_MODEL_GBP_BIT) != GB_MODEL_AGB_A) { + configuration.agb_revision = GB_MODEL_AGB_A; + } } if (configuration.model >= MODEL_MAX) { @@ -846,10 +945,14 @@ int main(int argc, char **argv) } atexit(save_configuration); + atexit(stop_recording); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + configuration.allow_background_controllers? "1" : "0"); window = SDL_CreateWindow("SameBoy v" GB_VERSION, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 160 * configuration.default_scale, 144 * configuration.default_scale, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); diff --git a/thirdparty/SameBoy/Shaders/AAScale2x.fsh b/thirdparty/SameBoy/Shaders/AAScale2x.fsh index d51a9a6a8..b1b35cefe 100644 --- a/thirdparty/SameBoy/Shaders/AAScale2x.fsh +++ b/thirdparty/SameBoy/Shaders/AAScale2x.fsh @@ -1,21 +1,15 @@ STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) -{ - // o = offset, the width of a pixel - vec2 o = 1.0 / input_resolution; - +{ // texel arrangement // A B C // D E F // G H I // vec4 A = texture(image, position + vec2( -o.x, o.y)); - vec4 B = texture(image, position + vec2( 0, o.y)); - // vec4 C = texture(image, position + vec2( o.x, o.y)); - vec4 D = texture(image, position + vec2( -o.x, 0)); - vec4 E = texture(image, position + vec2( 0, 0)); - vec4 F = texture(image, position + vec2( o.x, 0)); - // vec4 G = texture(image, position + vec2( -o.x, -o.y)); - vec4 H = texture(image, position + vec2( 0, -o.y)); - // vec4 I = texture(image, position + vec2( o.x, -o.y)); + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); vec2 p = position * input_resolution; // p = the position within a pixel [0...1] p = fract(p); diff --git a/thirdparty/SameBoy/Shaders/AAScale4x.fsh b/thirdparty/SameBoy/Shaders/AAScale4x.fsh index b59b80e97..f8237c791 100644 --- a/thirdparty/SameBoy/Shaders/AAScale4x.fsh +++ b/thirdparty/SameBoy/Shaders/AAScale4x.fsh @@ -1,20 +1,15 @@ STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { - // o = offset, the width of a pixel - vec2 o = 1.0 / input_resolution; // texel arrangement // A B C // D E F // G H I - // vec4 A = texture(image, position + vec2( -o.x, o.y)); - vec4 B = texture(image, position + vec2( 0, o.y)); - // vec4 C = texture(image, position + vec2( o.x, o.y)); - vec4 D = texture(image, position + vec2( -o.x, 0)); - vec4 E = texture(image, position + vec2( 0, 0)); - vec4 F = texture(image, position + vec2( o.x, 0)); - // vec4 G = texture(image, position + vec2( -o.x, -o.y)); - vec4 H = texture(image, position + vec2( 0, -o.y)); - // vec4 I = texture(image, position + vec2( o.x, -o.y)); + + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); vec2 p = position * input_resolution; // p = the position within a pixel [0...1] p = fract(p); @@ -36,30 +31,24 @@ STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 } } } - -STATIC vec4 aaScale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) +STATIC vec4 scale2x_wrapper(sampler2D t, vec2 pos, vec2 offset, vec2 input_resolution, vec2 output_resolution) { - return mix(texture(image, position), scale2x(image, position, input_resolution, output_resolution), 0.5); + vec2 origin = (floor(pos * input_resolution * 2)) + vec2(0.5, 0.5); + return scale2x(t, (origin + offset) / input_resolution / 2, input_resolution, output_resolution); } STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { - // o = offset, the width of a pixel - vec2 o = 1.0 / (input_resolution * 2.); - // texel arrangement // A B C // D E F // G H I - // vec4 A = aaScale2x(image, position + vec2( -o.x, o.y), input_resolution, output_resolution); - vec4 B = aaScale2x(image, position + vec2( 0, o.y), input_resolution, output_resolution); - // vec4 C = aaScale2x(image, position + vec2( o.x, o.y), input_resolution, output_resolution); - vec4 D = aaScale2x(image, position + vec2( -o.x, 0), input_resolution, output_resolution); - vec4 E = aaScale2x(image, position + vec2( 0, 0), input_resolution, output_resolution); - vec4 F = aaScale2x(image, position + vec2( o.x, 0), input_resolution, output_resolution); - // vec4 G = aaScale2x(image, position + vec2( -o.x, -o.y), input_resolution, output_resolution); - vec4 H = aaScale2x(image, position + vec2( 0, -o.y), input_resolution, output_resolution); - // vec4 I = aaScale2x(image, position + vec2( o.x, -o.y), input_resolution, output_resolution); + vec4 B = scale2x_wrapper(image, position, vec2( 0, 1), input_resolution, output_resolution); + vec4 D = scale2x_wrapper(image, position, vec2( -1, 0), input_resolution, output_resolution); + vec4 E = scale2x_wrapper(image, position, vec2( 0, 0), input_resolution, output_resolution); + vec4 F = scale2x_wrapper(image, position, vec2( 1, 0), input_resolution, output_resolution); + vec4 H = scale2x_wrapper(image, position, vec2( 0, -1), input_resolution, output_resolution); + vec4 R; vec2 p = position * input_resolution * 2.; // p = the position within a pixel [0...1] diff --git a/thirdparty/SameBoy/Shaders/CRT.fsh b/thirdparty/SameBoy/Shaders/CRT.fsh index 4cbab721f..25e5b37f4 100644 --- a/thirdparty/SameBoy/Shaders/CRT.fsh +++ b/thirdparty/SameBoy/Shaders/CRT.fsh @@ -25,20 +25,20 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou vec2 pos = fract(position * input_resolution); vec2 sub_pos = fract(position * input_resolution * 6); - vec4 center = texture(image, position); - vec4 left = texture(image, position - vec2(1.0 / input_resolution.x, 0)); - vec4 right = texture(image, position + vec2(1.0 / input_resolution.x, 0)); + vec4 center = texture_relative(image, position, vec2(0, 0)); + vec4 left = texture_relative(image, position, vec2(-1, 0)); + vec4 right = texture_relative(image, position, vec2(1, 0)); /* Vertical blurring */ if (pos.y < 1.0 / 6.0) { - center = mix(center, texture(image, position + vec2(0, -1.0 / input_resolution.y)), 0.5 - sub_pos.y / 2.0); - left = mix(left, texture(image, position + vec2(-1.0 / input_resolution.x, -1.0 / input_resolution.y)), 0.5 - sub_pos.y / 2.0); - right = mix(right, texture(image, position + vec2( 1.0 / input_resolution.x, -1.0 / input_resolution.y)), 0.5 - sub_pos.y / 2.0); + center = mix(center, texture_relative(image, position, vec2( 0, -1)), 0.5 - sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, -1)), 0.5 - sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, -1)), 0.5 - sub_pos.y / 2.0); } else if (pos.y > 5.0 / 6.0) { - center = mix(center, texture(image, position + vec2(0, 1.0 / input_resolution.y)), sub_pos.y / 2.0); - left = mix(left, texture(image, position + vec2(-1.0 / input_resolution.x, 1.0 / input_resolution.y)), sub_pos.y / 2.0); - right = mix(right, texture(image, position + vec2( 1.0 / input_resolution.x, 1.0 / input_resolution.y)), sub_pos.y / 2.0); + center = mix(center, texture_relative(image, position, vec2( 0, 1)), sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, 1)), sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, 1)), sub_pos.y / 2.0); } /* Scanlines */ diff --git a/thirdparty/SameBoy/Shaders/HQ2x.fsh b/thirdparty/SameBoy/Shaders/HQ2x.fsh index 7ae806374..0baf9e146 100644 --- a/thirdparty/SameBoy/Shaders/HQ2x.fsh +++ b/thirdparty/SameBoy/Shaders/HQ2x.fsh @@ -30,7 +30,7 @@ STATIC vec4 interp_3px(vec4 c1, float w1, vec4 c2, float w2, vec4 c3, float w3) STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { // o = offset, the width of a pixel - vec2 o = 1.0 / input_resolution; + vec2 o = vec2(1, 1); /* We always calculate the top left pixel. If we need a different pixel, we flip the image */ @@ -40,17 +40,15 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou if (p.x > 0.5) o.x = -o.x; if (p.y > 0.5) o.y = -o.y; - - - vec4 w0 = texture(image, position + vec2( -o.x, -o.y)); - vec4 w1 = texture(image, position + vec2( 0, -o.y)); - vec4 w2 = texture(image, position + vec2( o.x, -o.y)); - vec4 w3 = texture(image, position + vec2( -o.x, 0)); - vec4 w4 = texture(image, position + vec2( 0, 0)); - vec4 w5 = texture(image, position + vec2( o.x, 0)); - vec4 w6 = texture(image, position + vec2( -o.x, o.y)); - vec4 w7 = texture(image, position + vec2( 0, o.y)); - vec4 w8 = texture(image, position + vec2( o.x, o.y)); + vec4 w0 = texture_relative(image, position, vec2( -o.x, -o.y)); + vec4 w1 = texture_relative(image, position, vec2( 0, -o.y)); + vec4 w2 = texture_relative(image, position, vec2( o.x, -o.y)); + vec4 w3 = texture_relative(image, position, vec2( -o.x, 0)); + vec4 w4 = texture_relative(image, position, vec2( 0, 0)); + vec4 w5 = texture_relative(image, position, vec2( o.x, 0)); + vec4 w6 = texture_relative(image, position, vec2( -o.x, o.y)); + vec4 w7 = texture_relative(image, position, vec2( 0, o.y)); + vec4 w8 = texture_relative(image, position, vec2( o.x, o.y)); int pattern = 0; if (is_different(w0, w4)) pattern |= 1; @@ -62,52 +60,52 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou if (is_different(w7, w4)) pattern |= 64; if (is_different(w8, w4)) pattern |= 128; - if ((P(0xbf,0x37) || P(0xdb,0x13)) && is_different(w1, w5)) { + if ((P(0xBF,0x37) || P(0xDB,0x13)) && is_different(w1, w5)) { return interp_2px(w4, 3.0, w3, 1.0); } - if ((P(0xdb,0x49) || P(0xef,0x6d)) && is_different(w7, w3)) { + if ((P(0xDB,0x49) || P(0xEF,0x6D)) && is_different(w7, w3)) { return interp_2px(w4, 3.0, w1, 1.0); } - if ((P(0x0b,0x0b) || P(0xfe,0x4a) || P(0xfe,0x1a)) && is_different(w3, w1)) { + if ((P(0x0B,0x0B) || P(0xFE,0x4A) || P(0xFE,0x1A)) && is_different(w3, w1)) { return w4; } - if ((P(0x6f,0x2a) || P(0x5b,0x0a) || P(0xbf,0x3a) || P(0xdf,0x5a) || - P(0x9f,0x8a) || P(0xcf,0x8a) || P(0xef,0x4e) || P(0x3f,0x0e) || - P(0xfb,0x5a) || P(0xbb,0x8a) || P(0x7f,0x5a) || P(0xaf,0x8a) || - P(0xeb,0x8a)) && is_different(w3, w1)) { + if ((P(0x6F,0x2A) || P(0x5B,0x0A) || P(0xBF,0x3A) || P(0xDF,0x5A) || + P(0x9F,0x8A) || P(0xCF,0x8A) || P(0xEF,0x4E) || P(0x3F,0x0E) || + P(0xFB,0x5A) || P(0xBB,0x8A) || P(0x7F,0x5A) || P(0xAF,0x8A) || + P(0xEB,0x8A)) && is_different(w3, w1)) { return interp_2px(w4, 3.0, w0, 1.0); } - if (P(0x0b,0x08)) { + if (P(0x0B,0x08)) { return interp_3px(w4, 2.0, w0, 1.0, w1, 1.0); } - if (P(0x0b,0x02)) { + if (P(0x0B,0x02)) { return interp_3px(w4, 2.0, w0, 1.0, w3, 1.0); } - if (P(0x2f,0x2f)) { + if (P(0x2F,0x2F)) { return interp_3px(w4, 4.0, w3, 1.0, w1, 1.0); } - if (P(0xbf,0x37) || P(0xdb,0x13)) { + if (P(0xBF,0x37) || P(0xDB,0x13)) { return interp_3px(w4, 5.0, w1, 2.0, w3, 1.0); } - if (P(0xdb,0x49) || P(0xef,0x6d)) { + if (P(0xDB,0x49) || P(0xEF,0x6D)) { return interp_3px(w4, 5.0, w3, 2.0, w1, 1.0); } - if (P(0x1b,0x03) || P(0x4f,0x43) || P(0x8b,0x83) || P(0x6b,0x43)) { + if (P(0x1B,0x03) || P(0x4F,0x43) || P(0x8B,0x83) || P(0x6B,0x43)) { return interp_2px(w4, 3.0, w3, 1.0); } - if (P(0x4b,0x09) || P(0x8b,0x89) || P(0x1f,0x19) || P(0x3b,0x19)) { + if (P(0x4B,0x09) || P(0x8B,0x89) || P(0x1F,0x19) || P(0x3B,0x19)) { return interp_2px(w4, 3.0, w1, 1.0); } - if (P(0x7e,0x2a) || P(0xef,0xab) || P(0xbf,0x8f) || P(0x7e,0x0e)) { + if (P(0x7E,0x2A) || P(0xEF,0xAB) || P(0xBF,0x8F) || P(0x7E,0x0E)) { return interp_3px(w4, 2.0, w3, 3.0, w1, 3.0); } - if (P(0xfb,0x6a) || P(0x6f,0x6e) || P(0x3f,0x3e) || P(0xfb,0xfa) || - P(0xdf,0xde) || P(0xdf,0x1e)) { + if (P(0xFB,0x6A) || P(0x6F,0x6E) || P(0x3F,0x3E) || P(0xFB,0xFA) || + P(0xDF,0xDE) || P(0xDF,0x1E)) { return interp_2px(w4, 3.0, w0, 1.0); } - if (P(0x0a,0x00) || P(0x4f,0x4b) || P(0x9f,0x1b) || P(0x2f,0x0b) || - P(0xbe,0x0a) || P(0xee,0x0a) || P(0x7e,0x0a) || P(0xeb,0x4b) || - P(0x3b,0x1b)) { + if (P(0x0A,0x00) || P(0x4F,0x4B) || P(0x9F,0x1B) || P(0x2F,0x0B) || + P(0xBE,0x0A) || P(0xEE,0x0A) || P(0x7E,0x0A) || P(0xEB,0x4B) || + P(0x3B,0x1B)) { return interp_3px(w4, 2.0, w3, 1.0, w1, 1.0); } diff --git a/thirdparty/SameBoy/Shaders/LCD.fsh b/thirdparty/SameBoy/Shaders/LCD.fsh index d20a7c937..d49ac57ed 100644 --- a/thirdparty/SameBoy/Shaders/LCD.fsh +++ b/thirdparty/SameBoy/Shaders/LCD.fsh @@ -7,22 +7,22 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou vec2 pos = fract(position * input_resolution); vec2 sub_pos = fract(position * input_resolution * 6); - vec4 center = texture(image, position); - vec4 left = texture(image, position - vec2(1.0 / input_resolution.x, 0)); - vec4 right = texture(image, position + vec2(1.0 / input_resolution.x, 0)); + vec4 center = texture_relative(image, position, vec2(0, 0)); + vec4 left = texture_relative(image, position, vec2(-1, 0)); + vec4 right = texture_relative(image, position, vec2(1, 0)); if (pos.y < 1.0 / 6.0) { - center = mix(center, texture(image, position + vec2(0, -1.0 / input_resolution.y)), 0.5 - sub_pos.y / 2.0); - left = mix(left, texture(image, position + vec2(-1.0 / input_resolution.x, -1.0 / input_resolution.y)), 0.5 - sub_pos.y / 2.0); - right = mix(right, texture(image, position + vec2( 1.0 / input_resolution.x, -1.0 / input_resolution.y)), 0.5 - sub_pos.y / 2.0); + center = mix(center, texture_relative(image, position, vec2( 0, -1)), 0.5 - sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, -1)), 0.5 - sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, -1)), 0.5 - sub_pos.y / 2.0); center *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); left *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); right *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); } else if (pos.y > 5.0 / 6.0) { - center = mix(center, texture(image, position + vec2(0, 1.0 / input_resolution.y)), sub_pos.y / 2.0); - left = mix(left, texture(image, position + vec2(-1.0 / input_resolution.x, 1.0 / input_resolution.y)), sub_pos.y / 2.0); - right = mix(right, texture(image, position + vec2( 1.0 / input_resolution.x, 1.0 / input_resolution.y)), sub_pos.y / 2.0); + center = mix(center, texture_relative(image, position, vec2( 0, 1)), sub_pos.y / 2.0); + left = mix(left, texture_relative(image, position, vec2(-1, 1)), sub_pos.y / 2.0); + right = mix(right, texture_relative(image, position, vec2( 1, 1)), sub_pos.y / 2.0); center *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); left *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); right *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH); diff --git a/thirdparty/SameBoy/Shaders/MasterShader.fsh b/thirdparty/SameBoy/Shaders/MasterShader.fsh index 3f891d5d2..24bba3cbe 100644 --- a/thirdparty/SameBoy/Shaders/MasterShader.fsh +++ b/thirdparty/SameBoy/Shaders/MasterShader.fsh @@ -18,6 +18,12 @@ vec4 _texture(sampler2D t, vec2 pos) return pow(texture(t, pos), vec4(GAMMA)); } +vec4 texture_relative(sampler2D t, vec2 pos, vec2 offset) +{ + vec2 input_resolution = textureSize(t, 0); + return _texture(t, (floor(pos * input_resolution) + offset + vec2(0.5, 0.5)) / input_resolution); +} + #define texture _texture #line 1 diff --git a/thirdparty/SameBoy/Shaders/MasterShader.metal b/thirdparty/SameBoy/Shaders/MasterShader.metal index 2f3113e38..7ba04dda6 100644 --- a/thirdparty/SameBoy/Shaders/MasterShader.metal +++ b/thirdparty/SameBoy/Shaders/MasterShader.metal @@ -40,6 +40,13 @@ static inline float4 texture(texture2d texture, float2 pos) return pow(float4(texture.sample(texture_sampler, pos)), GAMMA); } +__attribute__((unused)) static inline float4 texture_relative(texture2d t, float2 pos, float2 offset) +{ + float2 input_resolution = float2(t.get_width(), t.get_height());; + float2 origin = (floor(pos * input_resolution)) + float2(0.5, 0.5); + return texture(t, (origin + offset) / input_resolution); +} + #line 1 {filter} diff --git a/thirdparty/SameBoy/Shaders/OmniScale.fsh b/thirdparty/SameBoy/Shaders/OmniScale.fsh index eab27ae88..28ce3211d 100644 --- a/thirdparty/SameBoy/Shaders/OmniScale.fsh +++ b/thirdparty/SameBoy/Shaders/OmniScale.fsh @@ -27,7 +27,7 @@ STATIC bool is_different(vec4 a, vec4 b) STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { // o = offset, the width of a pixel - vec2 o = 1.0 / input_resolution; + vec2 o = vec2(1, 1); /* We always calculate the top left quarter. If we need a different quarter, we flip our co-ordinates */ @@ -43,15 +43,15 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou p.y = 1.0 - p.y; } - vec4 w0 = texture(image, position + vec2( -o.x, -o.y)); - vec4 w1 = texture(image, position + vec2( 0, -o.y)); - vec4 w2 = texture(image, position + vec2( o.x, -o.y)); - vec4 w3 = texture(image, position + vec2( -o.x, 0)); - vec4 w4 = texture(image, position + vec2( 0, 0)); - vec4 w5 = texture(image, position + vec2( o.x, 0)); - vec4 w6 = texture(image, position + vec2( -o.x, o.y)); - vec4 w7 = texture(image, position + vec2( 0, o.y)); - vec4 w8 = texture(image, position + vec2( o.x, o.y)); + vec4 w0 = texture_relative(image, position, vec2( -o.x, -o.y)); + vec4 w1 = texture_relative(image, position, vec2( 0, -o.y)); + vec4 w2 = texture_relative(image, position, vec2( o.x, -o.y)); + vec4 w3 = texture_relative(image, position, vec2( -o.x, 0)); + vec4 w4 = texture_relative(image, position, vec2( 0, 0)); + vec4 w5 = texture_relative(image, position, vec2( o.x, 0)); + vec4 w6 = texture_relative(image, position, vec2( -o.x, o.y)); + vec4 w7 = texture_relative(image, position, vec2( 0, o.y)); + vec4 w8 = texture_relative(image, position, vec2( o.x, o.y)); int pattern = 0; if (is_different(w0, w4)) pattern |= 1 << 0; @@ -63,28 +63,28 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou if (is_different(w7, w4)) pattern |= 1 << 6; if (is_different(w8, w4)) pattern |= 1 << 7; - if ((P(0xbf,0x37) || P(0xdb,0x13)) && is_different(w1, w5)) { + if ((P(0xBF,0x37) || P(0xDB,0x13)) && is_different(w1, w5)) { return mix(w4, w3, 0.5 - p.x); } - if ((P(0xdb,0x49) || P(0xef,0x6d)) && is_different(w7, w3)) { + if ((P(0xDB,0x49) || P(0xEF,0x6D)) && is_different(w7, w3)) { return mix(w4, w1, 0.5 - p.y); } - if ((P(0x0b,0x0b) || P(0xfe,0x4a) || P(0xfe,0x1a)) && is_different(w3, w1)) { + if ((P(0x0B,0x0B) || P(0xFE,0x4A) || P(0xFE,0x1A)) && is_different(w3, w1)) { return w4; } - if ((P(0x6f,0x2a) || P(0x5b,0x0a) || P(0xbf,0x3a) || P(0xdf,0x5a) || - P(0x9f,0x8a) || P(0xcf,0x8a) || P(0xef,0x4e) || P(0x3f,0x0e) || - P(0xfb,0x5a) || P(0xbb,0x8a) || P(0x7f,0x5a) || P(0xaf,0x8a) || - P(0xeb,0x8a)) && is_different(w3, w1)) { + if ((P(0x6F,0x2A) || P(0x5B,0x0A) || P(0xBF,0x3A) || P(0xDF,0x5A) || + P(0x9F,0x8A) || P(0xCF,0x8A) || P(0xEF,0x4E) || P(0x3F,0x0E) || + P(0xFB,0x5A) || P(0xBB,0x8A) || P(0x7F,0x5A) || P(0xAF,0x8A) || + P(0xEB,0x8A)) && is_different(w3, w1)) { return mix(w4, mix(w4, w0, 0.5 - p.x), 0.5 - p.y); } - if (P(0x0b,0x08)) { + if (P(0x0B,0x08)) { return mix(mix(w0 * 0.375 + w1 * 0.25 + w4 * 0.375, w4 * 0.5 + w1 * 0.5, p.x * 2.0), w4, p.y * 2.0); } - if (P(0x0b,0x02)) { + if (P(0x0B,0x02)) { return mix(mix(w0 * 0.375 + w3 * 0.25 + w4 * 0.375, w4 * 0.5 + w3 * 0.5, p.y * 2.0), w4, p.x * 2.0); } - if (P(0x2f,0x2f)) { + if (P(0x2F,0x2F)) { float dist = length(p - vec2(0.5)); float pixel_size = length(1.0 / (output_resolution / input_resolution)); if (dist < 0.5 - pixel_size / 2) { @@ -103,7 +103,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou } return mix(w4, r, (dist - 0.5 + pixel_size / 2) / pixel_size); } - if (P(0xbf,0x37) || P(0xdb,0x13)) { + if (P(0xBF,0x37) || P(0xDB,0x13)) { float dist = p.x - 2.0 * p.y; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); if (dist > pixel_size / 2) { @@ -115,7 +115,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou } return mix(r, w1, (dist + pixel_size / 2) / pixel_size); } - if (P(0xdb,0x49) || P(0xef,0x6d)) { + if (P(0xDB,0x49) || P(0xEF,0x6D)) { float dist = p.y - 2.0 * p.x; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); if (p.y - 2.0 * p.x > pixel_size / 2) { @@ -127,7 +127,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou } return mix(r, w3, (dist + pixel_size / 2) / pixel_size); } - if (P(0xbf,0x8f) || P(0x7e,0x0e)) { + if (P(0xBF,0x8F) || P(0x7E,0x0E)) { float dist = p.x + 2.0 * p.y; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); @@ -150,7 +150,7 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou return mix(r, w4, (dist + pixel_size / 2 - 1.0) / pixel_size); } - if (P(0x7e,0x2a) || P(0xef,0xab)) { + if (P(0x7E,0x2A) || P(0xEF,0xAB)) { float dist = p.y + 2.0 * p.x; float pixel_size = length(1.0 / (output_resolution / input_resolution)) * sqrt(5.0); @@ -174,22 +174,22 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou return mix(r, w4, (dist + pixel_size / 2 - 1.0) / pixel_size); } - if (P(0x1b,0x03) || P(0x4f,0x43) || P(0x8b,0x83) || P(0x6b,0x43)) { + if (P(0x1B,0x03) || P(0x4F,0x43) || P(0x8B,0x83) || P(0x6B,0x43)) { return mix(w4, w3, 0.5 - p.x); } - if (P(0x4b,0x09) || P(0x8b,0x89) || P(0x1f,0x19) || P(0x3b,0x19)) { + if (P(0x4B,0x09) || P(0x8B,0x89) || P(0x1F,0x19) || P(0x3B,0x19)) { return mix(w4, w1, 0.5 - p.y); } - if (P(0xfb,0x6a) || P(0x6f,0x6e) || P(0x3f,0x3e) || P(0xfb,0xfa) || - P(0xdf,0xde) || P(0xdf,0x1e)) { + if (P(0xFB,0x6A) || P(0x6F,0x6E) || P(0x3F,0x3E) || P(0xFB,0xFA) || + P(0xDF,0xDE) || P(0xDF,0x1E)) { return mix(w4, w0, (1.0 - p.x - p.y) / 2.0); } - if (P(0x4f,0x4b) || P(0x9f,0x1b) || P(0x2f,0x0b) || - P(0xbe,0x0a) || P(0xee,0x0a) || P(0x7e,0x0a) || P(0xeb,0x4b) || - P(0x3b,0x1b)) { + if (P(0x4F,0x4B) || P(0x9F,0x1B) || P(0x2F,0x0B) || + P(0xBE,0x0A) || P(0xEE,0x0A) || P(0x7E,0x0A) || P(0xEB,0x4B) || + P(0x3B,0x1B)) { float dist = p.x + p.y; float pixel_size = length(1.0 / (output_resolution / input_resolution)); @@ -212,11 +212,11 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou return mix(r, w4, (dist + pixel_size / 2 - 0.5) / pixel_size); } - if (P(0x0b,0x01)) { + if (P(0x0B,0x01)) { return mix(mix(w4, w3, 0.5 - p.x), mix(w1, (w1 + w3) / 2.0, 0.5 - p.x), 0.5 - p.y); } - if (P(0x0b,0x00)) { + if (P(0x0B,0x00)) { return mix(mix(w4, w3, 0.5 - p.x), mix(w1, w0, 0.5 - p.x), 0.5 - p.y); } @@ -228,13 +228,13 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 ou } /* We need more samples to "solve" this diagonal */ - vec4 x0 = texture(image, position + vec2( -o.x * 2.0, -o.y * 2.0)); - vec4 x1 = texture(image, position + vec2( -o.x , -o.y * 2.0)); - vec4 x2 = texture(image, position + vec2( 0.0 , -o.y * 2.0)); - vec4 x3 = texture(image, position + vec2( o.x , -o.y * 2.0)); - vec4 x4 = texture(image, position + vec2( -o.x * 2.0, -o.y )); - vec4 x5 = texture(image, position + vec2( -o.x * 2.0, 0.0 )); - vec4 x6 = texture(image, position + vec2( -o.x * 2.0, o.y )); + vec4 x0 = texture_relative(image, position, vec2( -o.x * 2.0, -o.y * 2.0)); + vec4 x1 = texture_relative(image, position, vec2( -o.x , -o.y * 2.0)); + vec4 x2 = texture_relative(image, position, vec2( 0.0 , -o.y * 2.0)); + vec4 x3 = texture_relative(image, position, vec2( o.x , -o.y * 2.0)); + vec4 x4 = texture_relative(image, position, vec2( -o.x * 2.0, -o.y )); + vec4 x5 = texture_relative(image, position, vec2( -o.x * 2.0, 0.0 )); + vec4 x6 = texture_relative(image, position, vec2( -o.x * 2.0, o.y )); if (is_different(x0, w4)) pattern |= 1 << 8; if (is_different(x1, w4)) pattern |= 1 << 9; diff --git a/thirdparty/SameBoy/Shaders/Scale2x.fsh b/thirdparty/SameBoy/Shaders/Scale2x.fsh index 17b6edb8d..44bcfc4d6 100644 --- a/thirdparty/SameBoy/Shaders/Scale2x.fsh +++ b/thirdparty/SameBoy/Shaders/Scale2x.fsh @@ -2,22 +2,16 @@ STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { - // o = offset, the width of a pixel - vec2 o = 1.0 / input_resolution; - // texel arrangement // A B C // D E F // G H I - // vec4 A = texture(image, position + vec2( -o.x, o.y)); - vec4 B = texture(image, position + vec2( 0, o.y)); - // vec4 C = texture(image, position + vec2( o.x, o.y)); - vec4 D = texture(image, position + vec2( -o.x, 0)); - vec4 E = texture(image, position + vec2( 0, 0)); - vec4 F = texture(image, position + vec2( o.x, 0)); - // vec4 G = texture(image, position + vec2( -o.x, -o.y)); - vec4 H = texture(image, position + vec2( 0, -o.y)); - // vec4 I = texture(image, position + vec2( o.x, -o.y)); + + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); vec2 p = position * input_resolution; // p = the position within a pixel [0...1] p = fract(p); diff --git a/thirdparty/SameBoy/Shaders/Scale4x.fsh b/thirdparty/SameBoy/Shaders/Scale4x.fsh index da1ff1487..93c4b2159 100644 --- a/thirdparty/SameBoy/Shaders/Scale4x.fsh +++ b/thirdparty/SameBoy/Shaders/Scale4x.fsh @@ -1,23 +1,16 @@ STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { - // o = offset, the width of a pixel - vec2 o = 1.0 / input_resolution; // texel arrangement // A B C // D E F // G H I - // vec4 A = texture(image, position + vec2( -o.x, o.y)); - vec4 B = texture(image, position + vec2( 0, o.y)); - // vec4 C = texture(image, position + vec2( o.x, o.y)); - vec4 D = texture(image, position + vec2( -o.x, 0)); - vec4 E = texture(image, position + vec2( 0, 0)); - vec4 F = texture(image, position + vec2( o.x, 0)); - // vec4 G = texture(image, position + vec2( -o.x, -o.y)); - vec4 H = texture(image, position + vec2( 0, -o.y)); - // vec4 I = texture(image, position + vec2( o.x, -o.y)); + vec4 B = texture_relative(image, position, vec2( 0, 1)); + vec4 D = texture_relative(image, position, vec2( -1, 0)); + vec4 E = texture_relative(image, position, vec2( 0, 0)); + vec4 F = texture_relative(image, position, vec2( 1, 0)); + vec4 H = texture_relative(image, position, vec2( 0, -1)); vec2 p = position * input_resolution; // p = the position within a pixel [0...1] - vec4 R; p = fract(p); if (p.x > .5) { if (p.y > .5) { @@ -38,24 +31,24 @@ STATIC vec4 scale2x(sampler2D image, vec2 position, vec2 input_resolution, vec2 } } +STATIC vec4 scale2x_wrapper(sampler2D t, vec2 pos, vec2 offset, vec2 input_resolution, vec2 output_resolution) +{ + vec2 origin = (floor(pos * input_resolution * 2)) + vec2(0.5, 0.5); + return scale2x(t, (origin + offset) / input_resolution / 2, input_resolution, output_resolution); +} + STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution) { - // o = offset, the width of a pixel - vec2 o = 1.0 / (input_resolution * 2.); - // texel arrangement // A B C // D E F // G H I - // vec4 A = scale2x(image, position + vec2( -o.x, o.y), input_resolution, output_resolution); - vec4 B = scale2x(image, position + vec2( 0, o.y), input_resolution, output_resolution); - // vec4 C = scale2x(image, position + vec2( o.x, o.y), input_resolution, output_resolution); - vec4 D = scale2x(image, position + vec2( -o.x, 0), input_resolution, output_resolution); - vec4 E = scale2x(image, position + vec2( 0, 0), input_resolution, output_resolution); - vec4 F = scale2x(image, position + vec2( o.x, 0), input_resolution, output_resolution); - // vec4 G = scale2x(image, position + vec2( -o.x, -o.y), input_resolution, output_resolution); - vec4 H = scale2x(image, position + vec2( 0, -o.y), input_resolution, output_resolution); - // vec4 I = scale2x(image, position + vec2( o.x, -o.y), input_resolution, output_resolution); + vec4 B = scale2x_wrapper(image, position, vec2( 0, 1), input_resolution, output_resolution); + vec4 D = scale2x_wrapper(image, position, vec2( -1, 0), input_resolution, output_resolution); + vec4 E = scale2x_wrapper(image, position, vec2( 0, 0), input_resolution, output_resolution); + vec4 F = scale2x_wrapper(image, position, vec2( 1, 0), input_resolution, output_resolution); + vec4 H = scale2x_wrapper(image, position, vec2( 0, -1), input_resolution, output_resolution); + vec2 p = position * input_resolution * 2.; // p = the position within a pixel [0...1] p = fract(p); diff --git a/thirdparty/SameBoy/Tester/main.c b/thirdparty/SameBoy/Tester/main.c index a3add107d..a1c89a52f 100755 --- a/thirdparty/SameBoy/Tester/main.c +++ b/thirdparty/SameBoy/Tester/main.c @@ -123,7 +123,7 @@ static void handle_buttons(GB_gameboy_t *gb) } -static void vblank(GB_gameboy_t *gb) +static void vblank(GB_gameboy_t *gb, GB_vblank_type_t type) { /* Detect common crashes and stop the test early */ if (frames < test_length - 1) { @@ -432,6 +432,7 @@ int main(int argc, char **argv) GB_set_async_input_callback(&gb, async_input_callback); GB_set_color_correction_mode(&gb, GB_COLOR_CORRECTION_EMULATE_HARDWARE); GB_set_rtc_mode(&gb, GB_RTC_MODE_ACCURATE); + GB_set_emulate_joypad_bouncing(&gb, false); // Adds too much noise if (GB_load_rom(&gb, filename)) { perror("Failed to load ROM"); diff --git a/thirdparty/SameBoy/Windows/dirent.c b/thirdparty/SameBoy/Windows/dirent.c new file mode 100644 index 000000000..f5fd8b3b2 --- /dev/null +++ b/thirdparty/SameBoy/Windows/dirent.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include +#include "dirent.h" + +DIR *opendir(const char *filename) +{ + wchar_t w_filename[MAX_PATH + 3] = {0,}; + unsigned length = MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, MAX_PATH); + if (length) { + w_filename[length - 1] = L'/'; + w_filename[length] = L'*'; + w_filename[length + 1] = 0; + } + DIR *ret = malloc(sizeof(*ret)); + ret->handle = FindFirstFileW(w_filename, &ret->entry); + if (ret->handle == INVALID_HANDLE_VALUE) { + free(ret); + return NULL; + } + + return ret; +} + +int closedir(DIR *dir) +{ + if (dir->handle != INVALID_HANDLE_VALUE) { + FindClose(dir->handle); + } + free(dir); + return 0; +} + +struct dirent *readdir(DIR *dir) +{ + if (dir->handle == INVALID_HANDLE_VALUE) { + return NULL; + } + + WideCharToMultiByte(CP_UTF8, 0, dir->entry.cFileName, -1, + dir->out_entry.d_name, sizeof(dir->out_entry.d_name), + NULL, NULL); + + if (!FindNextFileW(dir->handle, &dir->entry)) { + FindClose(dir->handle); + dir->handle = INVALID_HANDLE_VALUE; + } + + return &dir->out_entry; +} diff --git a/thirdparty/SameBoy/Windows/dirent.h b/thirdparty/SameBoy/Windows/dirent.h new file mode 100644 index 000000000..7102995b2 --- /dev/null +++ b/thirdparty/SameBoy/Windows/dirent.h @@ -0,0 +1,15 @@ +#include + +struct dirent { + char d_name[MAX_PATH + 1]; +}; + +typedef struct { + HANDLE handle; + WIN32_FIND_DATAW entry; + struct dirent out_entry; +} DIR; + +DIR *opendir(const char *filename); +int closedir(DIR *dir); +struct dirent *readdir(DIR *dir); diff --git a/thirdparty/SameBoy/Windows/resources.rc b/thirdparty/SameBoy/Windows/resources.rc index 73c12139e68ff25a1cf03c451e05e25df9d3c05f..7fd16edcf6d6b0b1b7599885b26b825953ac5304 100644 GIT binary patch delta 48 zcmdnRd5v>J7?ZLRg93vygFiz6LnK2GgC~PKg9k$hLp+e@%HRkTQD9Ko9Lp5T1OW3` B2@C)L delta 26 fcmcb{xr=i{7!#)vg8>5wD@>MUbl$v=NrDLgTM`Bt diff --git a/thirdparty/SameBoy/Windows/sameboy.ico b/thirdparty/SameBoy/Windows/sameboy.ico index bd8e372d9b67ca5fa7527ed57831ccc8cbade7bc..17f072c14882ae19f352c9ef8a06601fb648ba2c 100644 GIT binary patch literal 132946 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 F@PB`La-#qM literal 115106 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 diff --git a/thirdparty/SameBoy/Windows/stdio.h b/thirdparty/SameBoy/Windows/stdio.h index 1e6ec02f9..4a9279e3d 100755 --- a/thirdparty/SameBoy/Windows/stdio.h +++ b/thirdparty/SameBoy/Windows/stdio.h @@ -1,10 +1,11 @@ #pragma once #include_next #include +#include int access(const char *filename, int mode); -#define R_OK 2 -#define W_OK 4 +#define R_OK 4 +#define W_OK 2 #ifndef __MINGW32__ #ifndef __LIBRETRO__ @@ -20,6 +21,16 @@ static inline int vasprintf(char **str, const char *fmt, va_list args) } return ret; } + +static inline int asprintf(char **strp, const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + int r = vasprintf(strp, fmt, args); + va_end(args); + return r; +} + #endif #endif diff --git a/thirdparty/SameBoy/Windows/stdlib.h b/thirdparty/SameBoy/Windows/stdlib.h new file mode 100644 index 000000000..7d35615ff --- /dev/null +++ b/thirdparty/SameBoy/Windows/stdlib.h @@ -0,0 +1,3 @@ +#pragma once +#include_next +#define alloca _alloca diff --git a/thirdparty/SameBoy/Windows/string.h b/thirdparty/SameBoy/Windows/string.h index b899ca974..f1cf6b1e9 100755 --- a/thirdparty/SameBoy/Windows/string.h +++ b/thirdparty/SameBoy/Windows/string.h @@ -1,3 +1,4 @@ #pragma once #include_next -#define strdup _strdup \ No newline at end of file +#define strdup _strdup +#define strcasecmp _stricmp diff --git a/thirdparty/SameBoy/Windows/unistd.h b/thirdparty/SameBoy/Windows/unistd.h index 62e2337c3..c17587e45 100644 --- a/thirdparty/SameBoy/Windows/unistd.h +++ b/thirdparty/SameBoy/Windows/unistd.h @@ -6,3 +6,5 @@ #define read(...) _read(__VA_ARGS__) #define write(...) _write(__VA_ARGS__) #define isatty(...) _isatty(__VA_ARGS__) +#define close(...) _close(__VA_ARGS__) +#define creat(...) _creat(__VA_ARGS__) diff --git a/thirdparty/SameBoy/Windows/utf8_compat.c b/thirdparty/SameBoy/Windows/utf8_compat.c index 03472115d..9264e2e80 100755 --- a/thirdparty/SameBoy/Windows/utf8_compat.c +++ b/thirdparty/SameBoy/Windows/utf8_compat.c @@ -22,3 +22,10 @@ int access(const char *filename, int mode) return _waccess(w_filename, mode); } +int _creat(const char *filename, int mode) +{ + wchar_t w_filename[MAX_PATH] = {0,}; + MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, sizeof(w_filename) / sizeof(w_filename[0])); + return _wcreat(w_filename, mode & 0700); +} + diff --git a/thirdparty/SameBoy/libretro/Makefile.common b/thirdparty/SameBoy/libretro/Makefile.common index fabe3ad4a..2093d0d63 100644 --- a/thirdparty/SameBoy/libretro/Makefile.common +++ b/thirdparty/SameBoy/libretro/Makefile.common @@ -18,6 +18,8 @@ SOURCES_C := $(CORE_DIR)/Core/gb.c \ $(CORE_DIR)/Core/rumble.c \ $(CORE_DIR)/libretro/agb_boot.c \ $(CORE_DIR)/libretro/cgb_boot.c \ + $(CORE_DIR)/libretro/cgb0_boot.c \ + $(CORE_DIR)/libretro/mgb_boot.c \ $(CORE_DIR)/libretro/dmg_boot.c \ $(CORE_DIR)/libretro/sgb_boot.c \ $(CORE_DIR)/libretro/sgb2_boot.c \ diff --git a/thirdparty/SameBoy/libretro/libretro.c b/thirdparty/SameBoy/libretro/libretro.c index 5a559c4c8..7b8c779b6 100644 --- a/thirdparty/SameBoy/libretro/libretro.c +++ b/thirdparty/SameBoy/libretro/libretro.c @@ -34,7 +34,6 @@ static const char slash = '/'; #define MAX_VIDEO_HEIGHT 224 #define MAX_VIDEO_PIXELS (MAX_VIDEO_WIDTH * MAX_VIDEO_HEIGHT) - #define RETRO_MEMORY_GAMEBOY_1_SRAM ((1 << 8) | RETRO_MEMORY_SAVE_RAM) #define RETRO_MEMORY_GAMEBOY_1_RTC ((2 << 8) | RETRO_MEMORY_RTC) #define RETRO_MEMORY_GAMEBOY_2_SRAM ((3 << 8) | RETRO_MEMORY_SAVE_RAM) @@ -42,30 +41,14 @@ static const char slash = '/'; #define RETRO_GAME_TYPE_GAMEBOY_LINK_2P 0x101 -char battery_save_path[512]; -char symbols_path[512]; - -enum model { - MODEL_DMG_B, - MODEL_CGB_C, - MODEL_CGB_E, - MODEL_AGB, - MODEL_SGB_PAL, - MODEL_SGB_NTSC, - MODEL_SGB2, - MODEL_AUTO +enum rom_type { + ROM_TYPE_INVALID, + ROM_TYPE_DMG, + ROM_TYPE_SGB, + ROM_TYPE_CGB }; -static const GB_model_t libretro_to_internal_model[] = -{ - [MODEL_DMG_B] = GB_MODEL_DMG_B, - [MODEL_CGB_C] = GB_MODEL_CGB_C, - [MODEL_CGB_E] = GB_MODEL_CGB_E, - [MODEL_AGB] = GB_MODEL_AGB, - [MODEL_SGB_PAL] = GB_MODEL_SGB_PAL, - [MODEL_SGB_NTSC] = GB_MODEL_SGB_NTSC, - [MODEL_SGB2] = GB_MODEL_SGB2 -}; +#define GB_MODEL_AUTO (-1) enum screen_layout { LAYOUT_TOP_DOWN, @@ -77,16 +60,32 @@ enum audio_out { GB_2 }; -static enum model model[2]; -static enum model auto_model = MODEL_CGB_E; +static GB_model_t model[2] = { + GB_MODEL_DMG_B, + GB_MODEL_DMG_B +}; +static GB_model_t auto_model[2] = { + GB_MODEL_CGB_E, + GB_MODEL_CGB_E +}; +static GB_model_t auto_sgb_model[2] = { + GB_MODEL_SGB_NTSC, + GB_MODEL_SGB_NTSC +}; +static bool auto_sgb_enabled[2] = { + false, + false +}; static uint32_t *frame_buf = NULL; static uint32_t *frame_buf_copy = NULL; +static uint32_t retained_frame_1[256 * 224]; +static uint32_t retained_frame_2[256 * 224]; static struct retro_log_callback logging; static retro_log_printf_t log_cb; static retro_video_refresh_t video_cb; -static retro_audio_sample_t audio_sample_cb; +static retro_audio_sample_batch_t audio_batch_cb; static retro_input_poll_t input_poll_cb; static retro_input_state_t input_state_cb; @@ -101,16 +100,18 @@ static bool geometry_updated = false; static bool link_cable_emulation = false; /*static bool infrared_emulation = false;*/ -signed short soundbuf[1024 * 2]; +static struct { + int16_t *data; + int32_t size; + int32_t capacity; +} output_audio_buffer = {NULL, 0, 0}; char retro_system_directory[4096]; -char retro_save_directory[4096]; -char retro_game_path[4096]; GB_gameboy_t gameboy[2]; -extern const unsigned char dmg_boot[], cgb_boot[], agb_boot[], sgb_boot[], sgb2_boot[]; -extern const unsigned dmg_boot_length, cgb_boot_length, agb_boot_length, sgb_boot_length, sgb2_boot_length; +extern const unsigned char dmg_boot[], mgb_boot[], cgb0_boot[], cgb_boot[], agb_boot[], sgb_boot[], sgb2_boot[]; +extern const unsigned dmg_boot_length, mgb_boot_length, cgb0_boot_length, cgb_boot_length, agb_boot_length, sgb_boot_length, sgb2_boot_length; bool vblank1_occurred = false, vblank2_occurred = false; static void fallback_log(enum retro_log_level level, const char *fmt, ...) @@ -174,24 +175,99 @@ static void rumble_callback(GB_gameboy_t *gb, double amplitude) } } +static void ensure_output_audio_buffer_capacity(int32_t capacity) +{ + if (capacity <= output_audio_buffer.capacity) { + return; + } + output_audio_buffer.data = realloc( + output_audio_buffer.data, capacity * sizeof(*output_audio_buffer.data)); + output_audio_buffer.capacity = capacity; + log_cb(RETRO_LOG_DEBUG, "Output audio buffer capacity set to %d\n", capacity); +} + +static void init_output_audio_buffer(int32_t capacity) +{ + output_audio_buffer.data = NULL; + output_audio_buffer.size = 0; + output_audio_buffer.capacity = 0; + ensure_output_audio_buffer_capacity(capacity); +} + +static void free_output_audio_buffer() +{ + free(output_audio_buffer.data); + output_audio_buffer.data = NULL; + output_audio_buffer.size = 0; + output_audio_buffer.capacity = 0; +} + +static void upload_output_audio_buffer() +{ + int32_t remaining_frames = output_audio_buffer.size / 2; + int16_t *buf_pos = output_audio_buffer.data; + + while (remaining_frames > 0) { + size_t uploaded_frames = audio_batch_cb(buf_pos, remaining_frames); + buf_pos += uploaded_frames * 2; + remaining_frames -= uploaded_frames; + } + output_audio_buffer.size = 0; +} + static void audio_callback(GB_gameboy_t *gb, GB_sample_t *sample) { - if ((audio_out == GB_1 && gb == &gameboy[0]) || - (audio_out == GB_2 && gb == &gameboy[1])) { - audio_sample_cb(sample->left, sample->right); + if (!(audio_out == GB_1 && gb == &gameboy[0]) && + !(audio_out == GB_2 && gb == &gameboy[1])) { + return; + } + + if (output_audio_buffer.capacity - output_audio_buffer.size < 2) { + ensure_output_audio_buffer_capacity(output_audio_buffer.capacity * 1.5); } + + output_audio_buffer.data[output_audio_buffer.size++] = sample->left; + output_audio_buffer.data[output_audio_buffer.size++] = sample->right; } -static void vblank1(GB_gameboy_t *gb) +static void vblank1(GB_gameboy_t *gb, GB_vblank_type_t type) { + if (type == GB_VBLANK_TYPE_REPEAT) { + memcpy(GB_get_pixels_output(gb), + retained_frame_1, + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } vblank1_occurred = true; } -static void vblank2(GB_gameboy_t *gb) +static void vblank2(GB_gameboy_t *gb, GB_vblank_type_t type) { + if (type == GB_VBLANK_TYPE_REPEAT) { + memcpy(GB_get_pixels_output(gb), + retained_frame_2, + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } vblank2_occurred = true; } +static void lcd_status_change_1(GB_gameboy_t *gb, bool on) +{ + if (!on) { + memcpy(retained_frame_1, + GB_get_pixels_output(gb), + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } +} + +static void lcd_status_change_2(GB_gameboy_t *gb, bool on) +{ + if (!on) { + memcpy(retained_frame_2, + GB_get_pixels_output(gb), + GB_get_screen_width(gb) * GB_get_screen_height(gb) * sizeof(uint32_t)); + } +} + static bool bit_to_send1 = true, bit_to_send2 = true; static void serial_start1(GB_gameboy_t *gb, bool bit_received) @@ -263,6 +339,7 @@ static void set_variable_visibility(void) for (i = 0; i < num_options; i++) { const char *key = option_defs_us[i].key; if ((strcmp(key, "sameboy_model") == 0) || + (strcmp(key, "sameboy_auto_sgb_model") == 0) || (strcmp(key, "sameboy_rtc") == 0) || (strcmp(key, "sameboy_scaling_filter") == 0) || (strcmp(key, "sameboy_mono_palette") == 0) || @@ -275,11 +352,13 @@ static void set_variable_visibility(void) option_display_singlecart.key = key; environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display_singlecart); } - else if ((strcmp(key, "sameboy_link") == 0) || + else if ((strcmp(key, "sameboy_link") == 0) || (strcmp(key, "sameboy_screen_layout") == 0) || (strcmp(key, "sameboy_audio_output") == 0) || (strcmp(key, "sameboy_model_1") == 0) || + (strcmp(key, "sameboy_auto_sgb_model_1") == 0) || (strcmp(key, "sameboy_model_2") == 0) || + (strcmp(key, "sameboy_auto_sgb_model_2") == 0) || (strcmp(key, "sameboy_mono_palette_1") == 0) || (strcmp(key, "sameboy_mono_palette_2") == 0) || (strcmp(key, "sameboy_color_correction_mode_1") == 0) || @@ -309,8 +388,8 @@ static const struct retro_subsystem_memory_info gb2_memory[] = { }; static const struct retro_subsystem_rom_info gb_roms[] = { - { "GameBoy #1", "gb|gbc", true, false, true, gb1_memory, 1 }, - { "GameBoy #2", "gb|gbc", true, false, true, gb2_memory, 1 }, + { "GameBoy #1", "gb|gbc", false, false, true, gb1_memory, 1 }, + { "GameBoy #2", "gb|gbc", false, false, true, gb2_memory, 1 }, }; static const struct retro_subsystem_info subsystems[] = { @@ -418,34 +497,34 @@ static void set_link_cable_state(bool state) static void boot_rom_load(GB_gameboy_t *gb, GB_boot_rom_t type) { const char *model_name = (char *[]) { - [GB_BOOT_ROM_DMG0] = "dmg0", + [GB_BOOT_ROM_DMG_0] = "dmg0", [GB_BOOT_ROM_DMG] = "dmg", [GB_BOOT_ROM_MGB] = "mgb", [GB_BOOT_ROM_SGB] = "sgb", [GB_BOOT_ROM_SGB2] = "sgb2", - [GB_BOOT_ROM_CGB0] = "cgb0", + [GB_BOOT_ROM_CGB_0] = "cgb0", [GB_BOOT_ROM_CGB] = "cgb", [GB_BOOT_ROM_AGB] = "agb", }[type]; const uint8_t *boot_code = (const unsigned char *[]) { - [GB_BOOT_ROM_DMG0] = dmg_boot, // dmg0 not implemented yet + [GB_BOOT_ROM_DMG_0] = dmg_boot, // DMG_0 not implemented yet [GB_BOOT_ROM_DMG] = dmg_boot, - [GB_BOOT_ROM_MGB] = dmg_boot, // mgb not implemented yet + [GB_BOOT_ROM_MGB] = mgb_boot, [GB_BOOT_ROM_SGB] = sgb_boot, [GB_BOOT_ROM_SGB2] = sgb2_boot, - [GB_BOOT_ROM_CGB0] = cgb_boot, // cgb0 not implemented yet + [GB_BOOT_ROM_CGB_0] = cgb0_boot, [GB_BOOT_ROM_CGB] = cgb_boot, [GB_BOOT_ROM_AGB] = agb_boot, }[type]; unsigned boot_length = (unsigned []) { - [GB_BOOT_ROM_DMG0] = dmg_boot_length, // dmg0 not implemented yet + [GB_BOOT_ROM_DMG_0] = dmg_boot_length, // DMG_0 not implemented yet [GB_BOOT_ROM_DMG] = dmg_boot_length, - [GB_BOOT_ROM_MGB] = dmg_boot_length, // mgb not implemented yet + [GB_BOOT_ROM_MGB] = mgb_boot_length, [GB_BOOT_ROM_SGB] = sgb_boot_length, [GB_BOOT_ROM_SGB2] = sgb2_boot_length, - [GB_BOOT_ROM_CGB0] = cgb_boot_length, // cgb0 not implemented yet + [GB_BOOT_ROM_CGB_0] = cgb0_boot_length, [GB_BOOT_ROM_CGB] = cgb_boot_length, [GB_BOOT_ROM_AGB] = agb_boot_length, }[type]; @@ -530,20 +609,21 @@ static void retro_set_memory_maps(void) static void init_for_current_model(unsigned id) { unsigned i = id; - enum model effective_model; + GB_model_t effective_model; effective_model = model[i]; - if (effective_model == MODEL_AUTO) { - effective_model = auto_model; + if (effective_model == GB_MODEL_AUTO) { + effective_model = auto_model[i]; } - if (GB_is_inited(&gameboy[i])) { - GB_switch_model_and_reset(&gameboy[i], libretro_to_internal_model[effective_model]); + GB_switch_model_and_reset(&gameboy[i], effective_model); + retro_set_memory_maps(); } else { - GB_init(&gameboy[i], libretro_to_internal_model[effective_model]); + GB_init(&gameboy[i], effective_model); } + geometry_updated = true; GB_set_boot_rom_load_callback(&gameboy[i], boot_rom_load); @@ -558,15 +638,17 @@ static void init_for_current_model(unsigned id) /* todo: attempt to make these more generic */ GB_set_vblank_callback(&gameboy[0], (GB_vblank_callback_t) vblank1); + GB_set_lcd_status_callback(&gameboy[0], lcd_status_change_1); if (emulated_devices == 2) { GB_set_vblank_callback(&gameboy[1], (GB_vblank_callback_t) vblank2); + GB_set_lcd_status_callback(&gameboy[2], lcd_status_change_2); if (link_cable_emulation) { set_link_cable_state(true); } } /* Let's be extremely nitpicky about how devices and descriptors are set */ - if (emulated_devices == 1 && (model[0] == MODEL_SGB_PAL || model[0] == MODEL_SGB_NTSC || model[0] == MODEL_SGB2)) { + if (emulated_devices == 1 && (model[0] == GB_MODEL_SGB_PAL || model[0] == GB_MODEL_SGB_NTSC || model[0] == GB_MODEL_SGB2)) { static const struct retro_controller_info ports[] = { { controllers_sgb, 1 }, { controllers_sgb, 1 }, @@ -596,6 +678,34 @@ static void init_for_current_model(unsigned id) } } +static GB_model_t string_to_model(const char *string) +{ + static const struct { + const char *name; + GB_model_t model; + } models[] = { + { "Game Boy", GB_MODEL_DMG_B}, + { "Game Boy Pocket", GB_MODEL_MGB}, + { "Game Boy Color 0", GB_MODEL_CGB_0}, + { "Game Boy Color A", GB_MODEL_CGB_A}, + { "Game Boy Color B", GB_MODEL_CGB_B}, + { "Game Boy Color C", GB_MODEL_CGB_C}, + { "Game Boy Color D", GB_MODEL_CGB_D}, + { "Game Boy Color", GB_MODEL_CGB_E}, + { "Game Boy Advance", GB_MODEL_AGB_A}, + { "Game Boy Player", GB_MODEL_GBP_A}, + { "Super Game Boy", GB_MODEL_SGB_NTSC}, + { "Super Game Boy PAL", GB_MODEL_SGB_PAL}, + { "Super Game Boy 2", GB_MODEL_SGB2}, + }; + for (unsigned i = 0; i < sizeof(models) / sizeof(models[0]); i++) { + if (strcmp(models[i].name, string) == 0) { + return models[i].model; + } + } + return GB_MODEL_AUTO; +} + static void check_variables() { struct retro_variable var = {0}; @@ -603,34 +713,41 @@ static void check_variables() var.key = "sameboy_model"; var.value = NULL; + + model[0] = GB_MODEL_AUTO; + auto_sgb_enabled[0] = false; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - enum model new_model = model[0]; - if (strcmp(var.value, "Game Boy") == 0) { - new_model = MODEL_DMG_B; - } - else if (strcmp(var.value, "Game Boy Color C") == 0) { - new_model = MODEL_CGB_C; - } - else if (strcmp(var.value, "Game Boy Color") == 0) { - new_model = MODEL_CGB_E; - } - else if (strcmp(var.value, "Game Boy Advance") == 0) { - new_model = MODEL_AGB; - } - else if (strcmp(var.value, "Super Game Boy") == 0) { - new_model = MODEL_SGB_NTSC; + GB_model_t new_model = model[0]; + new_model = string_to_model(var.value); + if (new_model == GB_MODEL_AUTO) { + if (strcmp(var.value, "Auto (SGB)") == 0) { + new_model = GB_MODEL_AUTO; + auto_sgb_enabled[0] = true; + } } - else if (strcmp(var.value, "Super Game Boy PAL") == 0) { - new_model = MODEL_SGB_PAL; + + model[0] = new_model; + } + + var.key = "sameboy_auto_sgb_model"; + var.value = NULL; + + auto_sgb_model[0] = GB_MODEL_SGB_NTSC; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_model_t new_model = auto_sgb_model[0]; + if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = GB_MODEL_SGB_PAL; } else if (strcmp(var.value, "Super Game Boy 2") == 0) { - new_model = MODEL_SGB2; + new_model = GB_MODEL_SGB2; } else { - new_model = MODEL_AUTO; + new_model = GB_MODEL_SGB_NTSC; } - model[0] = new_model; + auto_sgb_model[0] = new_model; } var.key = "sameboy_rtc"; @@ -671,10 +788,10 @@ static void check_variables() GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_CORRECT_CURVES); } else if (strcmp(var.value, "emulate hardware") == 0) { - GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_EMULATE_HARDWARE); + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BALANCED); } else if (strcmp(var.value, "preserve brightness") == 0) { - GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS); + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST); } else if (strcmp(var.value, "reduce contrast") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_REDUCE_CONTRAST); @@ -682,6 +799,9 @@ static void check_variables() else if (strcmp(var.value, "harsh reality") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_LOW_CONTRAST); } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_ACCURATE); + } } var.key = "sameboy_light_temperature"; @@ -790,66 +910,81 @@ static void check_variables() var.key = "sameboy_model_1"; var.value = NULL; + + model[0] = GB_MODEL_AUTO; + auto_sgb_enabled[0] = false; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - enum model new_model = model[0]; - if (strcmp(var.value, "Game Boy") == 0) { - new_model = MODEL_DMG_B; - } - else if (strcmp(var.value, "Game Boy Color C") == 0) { - new_model = MODEL_CGB_C; - } - else if (strcmp(var.value, "Game Boy Color") == 0) { - new_model = MODEL_CGB_E; - } - else if (strcmp(var.value, "Game Boy Advance") == 0) { - new_model = MODEL_AGB; - } - else if (strcmp(var.value, "Super Game Boy") == 0) { - new_model = MODEL_SGB_NTSC; + GB_model_t new_model = model[0]; + new_model = string_to_model(var.value); + if (new_model == GB_MODEL_AUTO) { + if (strcmp(var.value, "Auto (SGB)") == 0) { + new_model = GB_MODEL_AUTO; + auto_sgb_enabled[0] = true; + } } - else if (strcmp(var.value, "Super Game Boy PAL") == 0) { - new_model = MODEL_SGB_PAL; + + model[0] = new_model; + } + + + var.key = "sameboy_auto_sgb_model_1"; + var.value = NULL; + + auto_sgb_model[0] = GB_MODEL_SGB_NTSC; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_model_t new_model = auto_sgb_model[0]; + if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = GB_MODEL_SGB_PAL; } else if (strcmp(var.value, "Super Game Boy 2") == 0) { - new_model = MODEL_SGB2; + new_model = GB_MODEL_SGB2; } else { - new_model = MODEL_AUTO; + new_model = GB_MODEL_SGB_NTSC; } - model[0] = new_model; + auto_sgb_model[0] = new_model; } var.key = "sameboy_model_2"; var.value = NULL; + + model[1] = GB_MODEL_AUTO; + auto_sgb_enabled[1] = false; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - enum model new_model = model[1]; - if (strcmp(var.value, "Game Boy") == 0) { - new_model = MODEL_DMG_B; - } - else if (strcmp(var.value, "Game Boy Color C") == 0) { - new_model = MODEL_CGB_C; - } - else if (strcmp(var.value, "Game Boy Color") == 0) { - new_model = MODEL_CGB_E; - } - else if (strcmp(var.value, "Game Boy Advance") == 0) { - new_model = MODEL_AGB; - } - else if (strcmp(var.value, "Super Game Boy") == 0) { - new_model = MODEL_SGB_NTSC; + GB_model_t new_model = model[1]; + new_model = string_to_model(var.value); + if (new_model == GB_MODEL_AUTO) { + if (strcmp(var.value, "Auto (SGB)") == 0) { + new_model = GB_MODEL_AUTO; + auto_sgb_enabled[0] = true; + } } - else if (strcmp(var.value, "Super Game Boy PAL") == 0) { - new_model = MODEL_SGB_PAL; + + model[1] = new_model; + } + + var.key = "sameboy_auto_sgb_model_2"; + var.value = NULL; + + auto_sgb_model[1] = GB_MODEL_SGB_NTSC; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + GB_model_t new_model = auto_sgb_model[1]; + if (strcmp(var.value, "Super Game Boy PAL") == 0) { + new_model = GB_MODEL_SGB_PAL; } else if (strcmp(var.value, "Super Game Boy 2") == 0) { - new_model = MODEL_SGB2; + new_model = GB_MODEL_SGB2; } else { - new_model = MODEL_AUTO; + new_model = GB_MODEL_SGB_NTSC; } - model[1] = new_model; + auto_sgb_model[1] = new_model; } var.key = "sameboy_mono_palette_1"; @@ -896,10 +1031,10 @@ static void check_variables() GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_CORRECT_CURVES); } else if (strcmp(var.value, "emulate hardware") == 0) { - GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_EMULATE_HARDWARE); + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BALANCED); } else if (strcmp(var.value, "preserve brightness") == 0) { - GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS); + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST); } else if (strcmp(var.value, "reduce contrast") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_REDUCE_CONTRAST); @@ -907,6 +1042,9 @@ static void check_variables() else if (strcmp(var.value, "harsh reality") == 0) { GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_LOW_CONTRAST); } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_color_correction_mode(&gameboy[0], GB_COLOR_CORRECTION_MODERN_ACCURATE); + } } var.key = "sameboy_color_correction_mode_2"; @@ -919,10 +1057,10 @@ static void check_variables() GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_CORRECT_CURVES); } else if (strcmp(var.value, "emulate hardware") == 0) { - GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_EMULATE_HARDWARE); + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_MODERN_BALANCED); } else if (strcmp(var.value, "preserve brightness") == 0) { - GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS); + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST); } else if (strcmp(var.value, "reduce contrast") == 0) { GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_REDUCE_CONTRAST); @@ -930,6 +1068,9 @@ static void check_variables() else if (strcmp(var.value, "harsh reality") == 0) { GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_LOW_CONTRAST); } + else if (strcmp(var.value, "accurate") == 0) { + GB_set_color_correction_mode(&gameboy[1], GB_COLOR_CORRECTION_MODERN_ACCURATE); + } } var.key = "sameboy_light_temperature_1"; @@ -1027,13 +1168,6 @@ void retro_init(void) snprintf(retro_system_directory, sizeof(retro_system_directory), "%s", "."); } - if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &dir) && dir) { - snprintf(retro_save_directory, sizeof(retro_save_directory), "%s", dir); - } - else { - snprintf(retro_save_directory, sizeof(retro_save_directory), "%s", "."); - } - if (environ_cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging)) { log_cb = logging.log; } @@ -1044,6 +1178,8 @@ void retro_init(void) if (environ_cb(RETRO_ENVIRONMENT_GET_INPUT_BITMASKS, NULL)) { libretro_supports_bitmasks = true; } + + init_output_audio_buffer(16384); } void retro_deinit(void) @@ -1053,6 +1189,8 @@ void retro_deinit(void) frame_buf = NULL; frame_buf_copy = NULL; + free_output_audio_buffer(); + libretro_supports_bitmasks = false; } @@ -1075,7 +1213,7 @@ void retro_get_system_info(struct retro_system_info *info) #else info->library_version = GB_VERSION; #endif - info->need_fullpath = true; + info->need_fullpath = false; info->valid_extensions = "gb|gbc"; } @@ -1109,23 +1247,25 @@ void retro_get_system_av_info(struct retro_system_av_info *info) info->timing = timing; } - void retro_set_environment(retro_environment_t cb) { + bool categories_supported; + environ_cb = cb; - libretro_set_core_options(environ_cb); + libretro_set_core_options(environ_cb, &categories_supported); - cb(RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO, (void*)subsystems); + environ_cb(RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO, (void*)subsystems); } void retro_set_audio_sample(retro_audio_sample_t cb) { - audio_sample_cb = cb; + (void)cb; } void retro_set_audio_sample_batch(retro_audio_sample_batch_t cb) { + audio_batch_cb = cb; } void retro_set_input_poll(retro_input_poll_t cb) @@ -1183,7 +1323,7 @@ void retro_run(void) GB_update_keys_status(&gameboy[0], 0); GB_update_keys_status(&gameboy[1], 1); } - else if (emulated_devices == 1 && (model[0] == MODEL_SGB_PAL || model[0] == MODEL_SGB_NTSC || model[0] == MODEL_SGB2)) { + else if (emulated_devices == 1 && (model[0] == GB_MODEL_SGB_PAL || model[0] == GB_MODEL_SGB_NTSC || model[0] == GB_MODEL_SGB2)) { for (unsigned i = 0; i < 4; i++) { GB_update_keys_status(&gameboy[0], i); } @@ -1236,32 +1376,80 @@ void retro_run(void) GB_get_screen_width(&gameboy[0]) * sizeof(uint32_t)); } - + upload_output_audio_buffer(); initialized = true; } +static enum rom_type check_rom_header(const uint8_t *data, size_t size) +{ + enum rom_type type; + uint8_t cgb_flag; + uint8_t sgb_flag; + + if (!data || (size < 0x146 + 1)) { + return ROM_TYPE_INVALID; + } + + type = ROM_TYPE_DMG; + cgb_flag = data[0x143]; + sgb_flag = data[0x146]; + + if ((cgb_flag == 0x80) || (cgb_flag == 0xC0)) { + type = ROM_TYPE_CGB; + } + + if ((type == ROM_TYPE_DMG) && (sgb_flag == 0x03)) { + type = ROM_TYPE_SGB; + } + + return type; +} + bool retro_load_game(const struct retro_game_info *info) { + enum rom_type content_type = ROM_TYPE_INVALID; + const uint8_t *content_data = NULL; + size_t content_size; + + if (info) { + content_data = (const uint8_t *)info->data; + content_size = info->size; + content_type = check_rom_header(content_data, content_size); + } + check_variables(); + switch (content_type) { + case ROM_TYPE_DMG: + auto_model[0] = GB_MODEL_DMG_B; + auto_model[1] = GB_MODEL_DMG_B; + break; + case ROM_TYPE_SGB: + auto_model[0] = auto_sgb_enabled[0] ? auto_sgb_model[0] : GB_MODEL_DMG_B; + auto_model[1] = auto_sgb_enabled[1] ? auto_sgb_model[1] : GB_MODEL_DMG_B; + break; + case ROM_TYPE_CGB: + auto_model[0] = GB_MODEL_CGB_E; + auto_model[1] = GB_MODEL_CGB_E; + break; + case ROM_TYPE_INVALID: + default: + log_cb(RETRO_LOG_ERROR, "Invalid content\n"); + return false; + } + frame_buf = (uint32_t *)malloc(MAX_VIDEO_PIXELS * emulated_devices * sizeof(uint32_t)); memset(frame_buf, 0, MAX_VIDEO_PIXELS * emulated_devices * sizeof(uint32_t)); enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { - log_cb(RETRO_LOG_INFO, "XRGB8888 is not supported\n"); + log_cb(RETRO_LOG_ERROR, "XRGB8888 is not supported\n"); return false; } - auto_model = (info->path[strlen(info->path) - 1] & ~0x20) == 'C' ? MODEL_CGB_E : MODEL_DMG_B; - snprintf(retro_game_path, sizeof(retro_game_path), "%s", info->path); - for (int i = 0; i < emulated_devices; i++) { init_for_current_model(i); - if (GB_load_rom(&gameboy[i], info->path)) { - log_cb(RETRO_LOG_INFO, "Failed to load ROM at %s\n", info->path); - return false; - } + GB_load_rom_from_buffer(&gameboy[i], content_data, content_size); } bool achievements = true; @@ -1296,8 +1484,7 @@ unsigned retro_get_region(void) bool retro_load_game_special(unsigned type, const struct retro_game_info *info, size_t num_info) { - - if (type == RETRO_GAME_TYPE_GAMEBOY_LINK_2P) { + if ((type == RETRO_GAME_TYPE_GAMEBOY_LINK_2P) && (num_info >= 2)) { emulated_devices = 2; } else { @@ -1314,19 +1501,35 @@ bool retro_load_game_special(unsigned type, const struct retro_game_info *info, enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { - log_cb(RETRO_LOG_INFO, "XRGB8888 is not supported\n"); + log_cb(RETRO_LOG_ERROR, "XRGB8888 is not supported\n"); return false; } - auto_model = (info->path[strlen(info->path) - 1] & ~0x20) == 'C' ? MODEL_CGB_E : MODEL_DMG_B; - snprintf(retro_game_path, sizeof(retro_game_path), "%s", info->path); - for (int i = 0; i < emulated_devices; i++) { - init_for_current_model(i); - if (GB_load_rom(&gameboy[i], info[i].path)) { - log_cb(RETRO_LOG_INFO, "Failed to load ROM\n"); - return false; + enum rom_type content_type = ROM_TYPE_INVALID; + const uint8_t *content_data = info[i].data; + size_t content_size = info[i].size; + + content_type = check_rom_header(content_data, content_size); + + switch (content_type) { + case ROM_TYPE_DMG: + auto_model[i] = GB_MODEL_DMG_B; + break; + case ROM_TYPE_SGB: + auto_model[i] = auto_sgb_enabled[i] ? auto_sgb_model[i] : GB_MODEL_DMG_B; + break; + case ROM_TYPE_CGB: + auto_model[i] = GB_MODEL_CGB_E; + break; + case ROM_TYPE_INVALID: + default: + log_cb(RETRO_LOG_ERROR, "Invalid content\n"); + return false; } + + init_for_current_model(i); + GB_load_rom_from_buffer(&gameboy[i], content_data, content_size); } bool achievements = true; @@ -1559,4 +1762,3 @@ void retro_cheat_set(unsigned index, bool enabled, const char *code) (void)enabled; (void)code; } - diff --git a/thirdparty/SameBoy/libretro/libretro.h b/thirdparty/SameBoy/libretro/libretro.h index e6ee6269d..4f4db1cf9 100644 --- a/thirdparty/SameBoy/libretro/libretro.h +++ b/thirdparty/SameBoy/libretro/libretro.h @@ -1388,6 +1388,363 @@ enum retro_mod * fastforwarding state will occur in this case). */ +#define RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE 65 + /* const struct retro_system_content_info_override * -- + * Allows an implementation to override 'global' content + * info parameters reported by retro_get_system_info(). + * Overrides also affect subsystem content info parameters + * set via RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO. + * This function must be called inside retro_set_environment(). + * If callback returns false, content info overrides + * are unsupported by the frontend, and will be ignored. + * If callback returns true, extended game info may be + * retrieved by calling RETRO_ENVIRONMENT_GET_GAME_INFO_EXT + * in retro_load_game() or retro_load_game_special(). + * + * 'data' points to an array of retro_system_content_info_override + * structs terminated by a { NULL, false, false } element. + * If 'data' is NULL, no changes will be made to the frontend; + * a core may therefore pass NULL in order to test whether + * the RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE and + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT callbacks are supported + * by the frontend. + * + * For struct member descriptions, see the definition of + * struct retro_system_content_info_override. + * + * Example: + * + * - struct retro_system_info: + * { + * "My Core", // library_name + * "v1.0", // library_version + * "m3u|md|cue|iso|chd|sms|gg|sg", // valid_extensions + * true, // need_fullpath + * false // block_extract + * } + * + * - Array of struct retro_system_content_info_override: + * { + * { + * "md|sms|gg", // extensions + * false, // need_fullpath + * true // persistent_data + * }, + * { + * "sg", // extensions + * false, // need_fullpath + * false // persistent_data + * }, + * { NULL, false, false } + * } + * + * Result: + * - Files of type m3u, cue, iso, chd will not be + * loaded by the frontend. Frontend will pass a + * valid path to the core, and core will handle + * loading internally + * - Files of type md, sms, gg will be loaded by + * the frontend. A valid memory buffer will be + * passed to the core. This memory buffer will + * remain valid until retro_deinit() returns + * - Files of type sg will be loaded by the frontend. + * A valid memory buffer will be passed to the core. + * This memory buffer will remain valid until + * retro_load_game() (or retro_load_game_special()) + * returns + * + * NOTE: If an extension is listed multiple times in + * an array of retro_system_content_info_override + * structs, only the first instance will be registered + */ + +#define RETRO_ENVIRONMENT_GET_GAME_INFO_EXT 66 + /* const struct retro_game_info_ext ** -- + * Allows an implementation to fetch extended game + * information, providing additional content path + * and memory buffer status details. + * This function may only be called inside + * retro_load_game() or retro_load_game_special(). + * If callback returns false, extended game information + * is unsupported by the frontend. In this case, only + * regular retro_game_info will be available. + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT is guaranteed + * to return true if RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE + * returns true. + * + * 'data' points to an array of retro_game_info_ext structs. + * + * For struct member descriptions, see the definition of + * struct retro_game_info_ext. + * + * - If function is called inside retro_load_game(), + * the retro_game_info_ext array is guaranteed to + * have a size of 1 - i.e. the returned pointer may + * be used to access directly the members of the + * first retro_game_info_ext struct, for example: + * + * struct retro_game_info_ext *game_info_ext; + * if (environ_cb(RETRO_ENVIRONMENT_GET_GAME_INFO_EXT, &game_info_ext)) + * printf("Content Directory: %s\n", game_info_ext->dir); + * + * - If the function is called inside retro_load_game_special(), + * the retro_game_info_ext array is guaranteed to have a + * size equal to the num_info argument passed to + * retro_load_game_special() + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 67 + /* const struct retro_core_options_v2 * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 2. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API + * version of >= 2, this callback is guaranteed to succeed + * (i.e. callback return value does not indicate success) + * If callback returns true, frontend has core option category + * support. + * If callback returns false, frontend does not have core option + * category support. + * + * 'data' points to a retro_core_options_v2 struct, containing + * of two pointers: + * - retro_core_options_v2::categories is an array of + * retro_core_option_v2_category structs terminated by a + * { NULL, NULL, NULL } element. If retro_core_options_v2::categories + * is NULL, all core options will have no category and will be shown + * at the top level of the frontend core option interface. If frontend + * does not have core option category support, categories array will + * be ignored. + * - retro_core_options_v2::definitions is an array of + * retro_core_option_v2_definition structs terminated by a + * { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL } + * element. + * + * >> retro_core_option_v2_category notes: + * + * - retro_core_option_v2_category::key should contain string + * that uniquely identifies the core option category. Valid + * key characters are [a-z, A-Z, 0-9, _, -] + * Namespace collisions with other implementations' category + * keys are permitted. + * - retro_core_option_v2_category::desc should contain a human + * readable description of the category key. + * - retro_core_option_v2_category::info should contain any + * additional human readable information text that a typical + * user may need to understand the nature of the core option + * category. + * + * Example entry: + * { + * "advanced_settings", + * "Advanced", + * "Options affecting low-level emulation performance and accuracy." + * } + * + * >> retro_core_option_v2_definition notes: + * + * - retro_core_option_v2_definition::key should be namespaced to not + * collide with other implementations' keys. e.g. A core called + * 'foo' should use keys named as 'foo_option'. Valid key characters + * are [a-z, A-Z, 0-9, _, -]. + * - retro_core_option_v2_definition::desc should contain a human readable + * description of the key. Will be used when the frontend does not + * have core option category support. Examples: "Aspect Ratio" or + * "Video > Aspect Ratio". + * - retro_core_option_v2_definition::desc_categorized should contain a + * human readable description of the key, which will be used when + * frontend has core option category support. Example: "Aspect Ratio", + * where associated retro_core_option_v2_category::desc is "Video". + * If empty or NULL, the string specified by + * retro_core_option_v2_definition::desc will be used instead. + * retro_core_option_v2_definition::desc_categorized will be ignored + * if retro_core_option_v2_definition::category_key is empty or NULL. + * - retro_core_option_v2_definition::info should contain any additional + * human readable information text that a typical user may need to + * understand the functionality of the option. + * - retro_core_option_v2_definition::info_categorized should contain + * any additional human readable information text that a typical user + * may need to understand the functionality of the option, and will be + * used when frontend has core option category support. This is provided + * to accommodate the case where info text references an option by + * name/desc, and the desc/desc_categorized text for that option differ. + * If empty or NULL, the string specified by + * retro_core_option_v2_definition::info will be used instead. + * retro_core_option_v2_definition::info_categorized will be ignored + * if retro_core_option_v2_definition::category_key is empty or NULL. + * - retro_core_option_v2_definition::category_key should contain a + * category identifier (e.g. "video" or "audio") that will be + * assigned to the core option if frontend has core option category + * support. A categorized option will be shown in a subsection/ + * submenu of the frontend core option interface. If key is empty + * or NULL, or if key does not match one of the + * retro_core_option_v2_category::key values in the associated + * retro_core_option_v2_category array, option will have no category + * and will be shown at the top level of the frontend core option + * interface. + * - retro_core_option_v2_definition::values is an array of + * retro_core_option_value structs terminated by a { NULL, NULL } + * element. + * --> retro_core_option_v2_definition::values[index].value is an + * expected option value. + * --> retro_core_option_v2_definition::values[index].label is a + * human readable label used when displaying the value on screen. + * If NULL, the value itself is used. + * - retro_core_option_v2_definition::default_value is the default + * core option setting. It must match one of the expected option + * values in the retro_core_option_v2_definition::values array. If + * it does not, or the default value is NULL, the first entry in the + * retro_core_option_v2_definition::values array is treated as the + * default. + * + * The number of possible option values should be very limited, + * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. + * i.e. it should be feasible to cycle through options + * without a keyboard. + * + * Example entries: + * + * - Uncategorized: + * + * { + * "foo_option", + * "Speed hack coprocessor X", + * NULL, + * "Provides increased performance at the expense of reduced accuracy.", + * NULL, + * NULL, + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * - Categorized: + * + * { + * "foo_option", + * "Advanced > Speed hack coprocessor X", + * "Speed hack coprocessor X", + * "Setting 'Advanced > Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", + * "Setting 'Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", + * "advanced_settings", + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * Only strings are operated on. The possible values will + * generally be displayed and stored as-is by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL 68 + /* const struct retro_core_options_v2_intl * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 2. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API + * version of >= 2, this callback is guaranteed to succeed + * (i.e. callback return value does not indicate success) + * If callback returns true, frontend has core option category + * support. + * If callback returns false, frontend does not have core option + * category support. + * + * This is fundamentally the same as RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, + * with the addition of localisation support. The description of the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 callback should be consulted + * for further details. + * + * 'data' points to a retro_core_options_v2_intl struct. + * + * - retro_core_options_v2_intl::us is a pointer to a + * retro_core_options_v2 struct defining the US English + * core options implementation. It must point to a valid struct. + * + * - retro_core_options_v2_intl::local is a pointer to a + * retro_core_options_v2 struct defining core options for + * the current frontend language. It may be NULL (in which case + * retro_core_options_v2_intl::us is used by the frontend). Any items + * missing from this struct will be read from + * retro_core_options_v2_intl::us instead. + * + * NOTE: Default core option values are always taken from the + * retro_core_options_v2_intl::us struct. Any default values in + * the retro_core_options_v2_intl::local struct will be ignored. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK 69 + /* const struct retro_core_options_update_display_callback * -- + * Allows a frontend to signal that a core must update + * the visibility of any dynamically hidden core options, + * and enables the frontend to detect visibility changes. + * Used by the frontend to update the menu display status + * of core options without requiring a call of retro_run(). + * Must be called in retro_set_environment(). + */ + +#define RETRO_ENVIRONMENT_SET_VARIABLE 70 + /* const struct retro_variable * -- + * Allows an implementation to notify the frontend + * that a core option value has changed. + * + * retro_variable::key and retro_variable::value + * must match strings that have been set previously + * via one of the following: + * + * - RETRO_ENVIRONMENT_SET_VARIABLES + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL + * + * After changing a core option value via this + * callback, RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE + * will return true. + * + * If data is NULL, no changes will be registered + * and the callback will return true; an + * implementation may therefore pass NULL in order + * to test whether the callback is supported. + */ + +#define RETRO_ENVIRONMENT_GET_THROTTLE_STATE (71 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_throttle_state * -- + * Allows an implementation to get details on the actual rate + * the frontend is attempting to call retro_run(). + */ + /* VFS functionality */ /* File paths: @@ -2902,6 +3259,143 @@ struct retro_core_options_intl struct retro_core_option_definition *local; }; +struct retro_core_option_v2_category +{ + /* Variable uniquely identifying the + * option category. Valid key characters + * are [a-z, A-Z, 0-9, _, -] */ + const char *key; + + /* Human-readable category description + * > Used as category menu label when + * frontend has core option category + * support */ + const char *desc; + + /* Human-readable category information + * > Used as category menu sublabel when + * frontend has core option category + * support + * > Optional (may be NULL or an empty + * string) */ + const char *info; +}; + +struct retro_core_option_v2_definition +{ + /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. + * Valid key characters are [a-z, A-Z, 0-9, _, -] */ + const char *key; + + /* Human-readable core option description + * > Used as menu label when frontend does + * not have core option category support + * e.g. "Video > Aspect Ratio" */ + const char *desc; + + /* Human-readable core option description + * > Used as menu label when frontend has + * core option category support + * e.g. "Aspect Ratio", where associated + * retro_core_option_v2_category::desc + * is "Video" + * > If empty or NULL, the string specified by + * desc will be used as the menu label + * > Will be ignored (and may be set to NULL) + * if category_key is empty or NULL */ + const char *desc_categorized; + + /* Human-readable core option information + * > Used as menu sublabel */ + const char *info; + + /* Human-readable core option information + * > Used as menu sublabel when frontend + * has core option category support + * (e.g. may be required when info text + * references an option by name/desc, + * and the desc/desc_categorized text + * for that option differ) + * > If empty or NULL, the string specified by + * info will be used as the menu sublabel + * > Will be ignored (and may be set to NULL) + * if category_key is empty or NULL */ + const char *info_categorized; + + /* Variable specifying category (e.g. "video", + * "audio") that will be assigned to the option + * if frontend has core option category support. + * > Categorized options will be displayed in a + * subsection/submenu of the frontend core + * option interface + * > Specified string must match one of the + * retro_core_option_v2_category::key values + * in the associated retro_core_option_v2_category + * array; If no match is not found, specified + * string will be considered as NULL + * > If specified string is empty or NULL, option will + * have no category and will be shown at the top + * level of the frontend core option interface */ + const char *category_key; + + /* Array of retro_core_option_value structs, terminated by NULL */ + struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX]; + + /* Default core option value. Must match one of the values + * in the retro_core_option_value array, otherwise will be + * ignored */ + const char *default_value; +}; + +struct retro_core_options_v2 +{ + /* Array of retro_core_option_v2_category structs, + * terminated by NULL + * > If NULL, all entries in definitions array + * will have no category and will be shown at + * the top level of the frontend core option + * interface + * > Will be ignored if frontend does not have + * core option category support */ + struct retro_core_option_v2_category *categories; + + /* Array of retro_core_option_v2_definition structs, + * terminated by NULL */ + struct retro_core_option_v2_definition *definitions; +}; + +struct retro_core_options_v2_intl +{ + /* Pointer to a retro_core_options_v2 struct + * > US English implementation + * > Must point to a valid struct */ + struct retro_core_options_v2 *us; + + /* Pointer to a retro_core_options_v2 struct + * - Implementation for current frontend language + * - May be NULL */ + struct retro_core_options_v2 *local; +}; + +/* Used by the frontend to monitor changes in core option + * visibility. May be called each time any core option + * value is set via the frontend. + * - On each invocation, the core must update the visibility + * of any dynamically hidden options using the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY environment + * callback. + * - On the first invocation, returns 'true' if the visibility + * of any core option has changed since the last call of + * retro_load_game() or retro_load_game_special(). + * - On each subsequent invocation, returns 'true' if the + * visibility of any core option has changed since the last + * time the function was called. */ +typedef bool (RETRO_CALLCONV *retro_core_options_update_display_callback_t)(void); +struct retro_core_options_update_display_callback +{ + retro_core_options_update_display_callback_t callback; +}; + struct retro_game_info { const char *path; /* Path to game, UTF-8 encoded. diff --git a/thirdparty/SameBoy/libretro/libretro_core_options.inc b/thirdparty/SameBoy/libretro/libretro_core_options.inc index 118576326..8646b8a7e 100644 --- a/thirdparty/SameBoy/libretro/libretro_core_options.inc +++ b/thirdparty/SameBoy/libretro/libretro_core_options.inc @@ -9,9 +9,10 @@ /* ******************************** - * VERSION: 1.3 + * VERSION: 2.0 ******************************** * + * - 2.0: Add support for core options v2 interface * - 1.3: Move translations to libretro_core_options_intl.h * - libretro_core_options_intl.h includes BOM and utf-8 * fix for MSVC 2010-2013 @@ -44,20 +45,54 @@ extern "C" { * - Will be used as a fallback for any missing entries in * frontend language definition */ -struct retro_core_option_definition option_defs_us[] = { - +struct retro_core_option_v2_category option_cats_us[] = { + { + "system", + "System", + "Configure base hardware selection." + }, + { + "video", + "Video", + "Configure display parameters: palette selection, colour correction, screen border." + }, + { + "audio", + "Audio", + "Configure audio emulation: highpass filter, electrical interference." + }, + { + "input", + "Input", + "Configure input parameters: rumble support." + }, + { NULL, NULL }, +}; + +struct retro_core_option_v2_definition option_defs_us[] = { + /* Core options used in single cart mode */ - + { "sameboy_model", "System - Emulated Model (Requires Restart)", + "Emulated Model (Requires Restart)", "Chooses which system model the content should be started on. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + NULL, + "system", { - { "Auto", "Detect automatically" }, + { "Auto", "Auto Detect DMG/CGB" }, + { "Auto (SGB)", "Auto Detect DMG/SGB/CGB" }, { "Game Boy", "Game Boy (DMG-CPU B)" }, - { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, - { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, - { "Game Boy Advance", NULL }, + { "Game Boy Pocket", "Game Boy Pocket/Light" }, + { "Game Boy Color 0", "Game Boy Color (CPU CGB 0) (Experimental)" }, + { "Game Boy Color A", "Game Boy Color (CPU CGB A) (Experimental)" }, + { "Game Boy Color B", "Game Boy Color (CPU CGB B) (Experimental)" }, + { "Game Boy Color C", "Game Boy Color (CPU CGB C) (Experimental)" }, + { "Game Boy Color D", "Game Boy Color (CPU CGB D)" }, + { "Game Boy Color", "Game Boy Color (CPU CGB E)" }, + { "Game Boy Advance", "Game Boy Advance (CPU AGB A)" }, + { "Game Boy Player", "Game Boy Player (CPU AGB A)" }, { "Super Game Boy", "Super Game Boy NTSC" }, { "Super Game Boy PAL", NULL }, { "Super Game Boy 2", NULL }, @@ -65,10 +100,28 @@ struct retro_core_option_definition option_defs_us[] = { }, "Auto" }, + { + "sameboy_auto_sgb_model", + "System - Auto Detected SGB Model (Requires Restart)", + "Auto Detected SGB Model (Requires Restart)", + "Specifies which model of Super Game Boy hardware to emulate when SGB content is automatically detected. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Super Game Boy" + }, { "sameboy_rtc", "System - Real Time Clock Emulation", + "Real Time Clock Emulation", "Specifies how the emulation of the real-time clock feature used in certain Game Boy and Game Boy Color games should function.", + NULL, + "system", { { "sync to system clock", "Sync to System Clock" }, { "accurate", "Accurate" }, @@ -76,11 +129,13 @@ struct retro_core_option_definition option_defs_us[] = { }, "sync to system clock" }, - { "sameboy_mono_palette", "Video - GB Mono Palette", + "GB Mono Palette", "Selects the color palette that should be used when playing Game Boy games.", + NULL, + "video", { { "greyscale", "Greyscale" }, { "lime", "Lime (Game Boy)" }, @@ -93,10 +148,14 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_color_correction_mode", "Video - GBC Color Correction", + "GBC Color Correction", "Defines which type of color correction should be applied when playing Game Boy Color games.", + NULL, + "video", { - { "emulate hardware", "Emulate Hardware" }, - { "preserve brightness", "Preserve Brightness" }, + { "emulate hardware", "Modern – Balanced" }, + { "accurate", "Modern – Accurate" }, + { "preserve brightness", "Modern – Boost Contrast" }, { "reduce contrast", "Reduce Contrast" }, { "correct curves", "Correct Color Curves" }, { "harsh reality", "Harsh Reality (Low Contrast)" }, @@ -108,7 +167,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_light_temperature", "Video - Ambient Light Temperature", - "Simulates an ambient light’s effect on non-backlit Game Boy screens, by setting a user-controlled color temperature. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + "Ambient Light Temperature", + "Simulates an ambient light's effect on non-backlit Game Boy screens, by setting a user-controlled color temperature. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + NULL, + "video", { { "1.0", "1000K (Warmest)" }, { "0.9", "1550K" }, @@ -130,7 +192,7 @@ struct retro_core_option_definition option_defs_us[] = { { "-0.7", "10350K" }, { "-0.8", "10900K" }, { "-0.9", "11450K" }, - { "-1.0", "12000K (Coolest)" }, + { "-1.0", "12000K (Coolest)" }, { NULL, NULL }, }, "0" @@ -138,7 +200,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_border", "Video - Display Border", + "Display Border", "Defines when to display an on-screen border around the content.", + NULL, + "video", { { "always", "Always" }, { "Super Game Boy only", "Only for Super Game Boy" }, @@ -150,7 +215,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_high_pass_filter_mode", "Audio - Highpass Filter", + "Highpass Filter", "Applies a filter to the audio output, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + NULL, + "audio", { { "accurate", "Accurate" }, { "remove dc offset", "Preserve Waveform" }, @@ -162,7 +230,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_audio_interference", "Audio - Interference Volume", + "Interference Volume", "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers.", + NULL, + "audio", { { "0", "0%" }, { "5", "5%" }, @@ -192,7 +263,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_rumble", "Input - Rumble Mode", + "Rumble Mode", "Defines which type of content should trigger rumble effects.", + NULL, + "input", { { "all games", "Always" }, { "rumble-enabled games", "Only for rumble-enabled games" }, @@ -201,13 +275,16 @@ struct retro_core_option_definition option_defs_us[] = { }, "rumble-enabled games" }, - + /* Core options used in dual cart mode */ - + { "sameboy_link", "System - Link Cable Emulation", + "Link Cable Emulation", "Enables the emulation of the link cable, allowing communication and exchange of data between two Game Boy systems.", + NULL, + "system", { { "enabled", "Enabled" }, { "disabled", "Disabled" }, @@ -218,7 +295,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_screen_layout", "System - Screen Layout", + "Screen Layout", "When emulating two systems at once, this option defines the respective position of the two screens.", + NULL, + "system", { { "top-down", "Top-Down" }, { "left-right", "Left-Right" }, @@ -229,7 +309,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_audio_output", "System - Audio Output", + "Audio Output", "Selects which of the two emulated Game Boy systems should output audio.", + NULL, + "system", { { "Game Boy #1", NULL }, { "Game Boy #2", NULL }, @@ -240,13 +323,23 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_model_1", "System - Emulated Model for Game Boy #1 (Requires Restart)", + "Emulated Model for Game Boy #1 (Requires Restart)", "Chooses which system model the content should be started on for Game Boy #1. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + NULL, + "system", { - { "Auto", "Detect automatically" }, + { "Auto", "Auto Detect DMG/CGB" }, + { "Auto (SGB)", "Auto Detect DMG/SGB/CGB" }, { "Game Boy", "Game Boy (DMG-CPU B)" }, - { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, - { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, - { "Game Boy Advance", NULL }, + { "Game Boy Pocket", "Game Boy Pocket/Light" }, + { "Game Boy Color 0", "Game Boy Color (CPU CGB 0) (Experimental)" }, + { "Game Boy Color A", "Game Boy Color (CPU CGB A) (Experimental)" }, + { "Game Boy Color B", "Game Boy Color (CPU CGB B) (Experimental)" }, + { "Game Boy Color C", "Game Boy Color (CPU CGB C) (Experimental)" }, + { "Game Boy Color D", "Game Boy Color (CPU CGB D)" }, + { "Game Boy Color", "Game Boy Color (CPU CGB E)" }, + { "Game Boy Advance", "Game Boy Advance (CPU AGB A)" }, + { "Game Boy Player", "Game Boy Player (CPU AGB A)" }, { "Super Game Boy", "Super Game Boy NTSC" }, { "Super Game Boy PAL", NULL }, { "Super Game Boy 2", NULL }, @@ -254,16 +347,41 @@ struct retro_core_option_definition option_defs_us[] = { }, "Auto" }, + { + "sameboy_auto_sgb_model_1", + "System - Auto Detected SGB Model for Game Boy #1 (Requires Restart)", + "Auto Detected SGB Model for Game Boy #1 (Requires Restart)", + "Specifies which model of Super Game Boy hardware to emulate when SGB content is automatically detected for Game Boy #1. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Super Game Boy" + }, { "sameboy_model_2", "System - Emulated Model for Game Boy #2 (Requires Restart)", + "Emulated Model for Game Boy #2 (Requires Restart)", "Chooses which system model the content should be started on for Game Boy #2. Certain games may activate special in-game features when ran on specific models. This option requires a content restart in order to take effect.", + NULL, + "system", { - { "Auto", "Detect automatically" }, + { "Auto", "Auto Detect DMG/CGB" }, + { "Auto (SGB)", "Auto Detect DMG/SGB/CGB" }, { "Game Boy", "Game Boy (DMG-CPU B)" }, - { "Game Boy Color C", "Game Boy Color (CPU-CGB C) (Experimental)" }, - { "Game Boy Color", "Game Boy Color (CPU-CGB E)" }, - { "Game Boy Advance", NULL }, + { "Game Boy Pocket", "Game Boy Pocket/Light" }, + { "Game Boy Color 0", "Game Boy Color (CPU CGB 0) (Experimental)" }, + { "Game Boy Color A", "Game Boy Color (CPU CGB A) (Experimental)" }, + { "Game Boy Color B", "Game Boy Color (CPU CGB B) (Experimental)" }, + { "Game Boy Color C", "Game Boy Color (CPU CGB C) (Experimental)" }, + { "Game Boy Color D", "Game Boy Color (CPU CGB D)" }, + { "Game Boy Color", "Game Boy Color (CPU CGB E)" }, + { "Game Boy Advance", "Game Boy Advance (CPU AGB A)" }, + { "Game Boy Player", "Game Boy Player (CPU AGB A)" }, { "Super Game Boy", "Super Game Boy NTSC" }, { "Super Game Boy PAL", NULL }, { "Super Game Boy 2", NULL }, @@ -271,10 +389,28 @@ struct retro_core_option_definition option_defs_us[] = { }, "Auto" }, + { + "sameboy_auto_sgb_model_2", + "System - Auto Detected SGB Model for Game Boy #2 (Requires Restart)", + "Auto Detected SGB Model for Game Boy #2 (Requires Restart)", + "Specifies which model of Super Game Boy hardware to emulate when SGB content is automatically detected for Game Boy #2. This option requires a content restart in order to take effect.", + NULL, + "system", + { + { "Super Game Boy", "Super Game Boy NTSC" }, + { "Super Game Boy PAL", NULL }, + { "Super Game Boy 2", NULL }, + { NULL, NULL }, + }, + "Super Game Boy" + }, { "sameboy_mono_palette_1", "Video - GB Mono Palette for Game Boy #1", + "GB Mono Palette for Game Boy #1", "Selects the color palette that should be used when playing Game Boy games on Game Boy #1.", + NULL, + "video", { { "greyscale", "Greyscale" }, { "lime", "Lime (Game Boy)" }, @@ -287,7 +423,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_mono_palette_2", "Video - GB Mono Palette for Game Boy #2", + "GB Mono Palette for Game Boy #2", "Selects the color palette that should be used when playing Game Boy games on Game Boy #2.", + NULL, + "video", { { "greyscale", "Greyscale" }, { "lime", "Lime (Game Boy)" }, @@ -300,10 +439,14 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_color_correction_mode_1", "Video - GBC Color Correction for Game Boy #1", + "GBC Color Correction for Game Boy #1", "Defines which type of color correction should be applied when playing Game Boy Color games on Game Boy #1.", + NULL, + "video", { - { "emulate hardware", "Emulate Hardware" }, - { "preserve brightness", "Preserve Brightness" }, + { "emulate hardware", "Modern – Balanced" }, + { "accurate", "Modern – Accurate" }, + { "preserve brightness", "Modern – Boost Contrast" }, { "reduce contrast", "Reduce Contrast" }, { "correct curves", "Correct Color Curves" }, { "harsh reality", "Harsh Reality (Low Contrast)" }, @@ -315,10 +458,14 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_color_correction_mode_2", "Video - GBC Color Correction for Game Boy #2", + "GBC Color Correction for Game Boy #2", "Defines which type of color correction should be applied when playing Game Boy Color games on Game Boy #2.", + NULL, + "video", { - { "emulate hardware", "Emulate Hardware" }, - { "preserve brightness", "Preserve Brightness" }, + { "emulate hardware", "Modern – Balanced" }, + { "accurate", "Modern – Accurate" }, + { "preserve brightness", "Modern – Boost Contrast" }, { "reduce contrast", "Reduce Contrast" }, { "correct curves", "Correct Color Curves" }, { "harsh reality", "Harsh Reality (Low Contrast)" }, @@ -330,7 +477,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_light_temperature_1", "Video - Ambient Light Temperature for Game Boy #1", - "Simulates an ambient light’s effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #1. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + "Ambient Light Temperature for Game Boy #1", + "Simulates an ambient light's effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #1. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + NULL, + "video", { { "1.0", "1000K (Warmest)" }, { "0.9", "1550K" }, @@ -352,7 +502,7 @@ struct retro_core_option_definition option_defs_us[] = { { "-0.7", "10350K" }, { "-0.8", "10900K" }, { "-0.9", "11450K" }, - { "-1.0", "12000K (Coolest)" }, + { "-1.0", "12000K (Coolest)" }, { NULL, NULL }, }, "0" @@ -360,7 +510,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_light_temperature_2", "Video - Ambient Light Temperature for Game Boy #2", - "Simulates an ambient light’s effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #2. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + "Ambient Light Temperature for Game Boy #2", + "Simulates an ambient light's effect on non-backlit Game Boy screens, by setting a user-controlled color temperature applied to the screen of Game Boy #2. This option has no effect if the content is run on an original Game Boy (DMG) emulated model.", + NULL, + "video", { { "1.0", "1000K (Warmest)" }, { "0.9", "1550K" }, @@ -382,7 +535,7 @@ struct retro_core_option_definition option_defs_us[] = { { "-0.7", "10350K" }, { "-0.8", "10900K" }, { "-0.9", "11450K" }, - { "-1.0", "12000K (Coolest)" }, + { "-1.0", "12000K (Coolest)" }, { NULL, NULL }, }, "0" @@ -390,7 +543,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_high_pass_filter_mode_1", "Audio - Highpass Filter for Game Boy #1", + "Highpass Filter for Game Boy #1", "Applies a filter to the audio output for Game Boy #1, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + NULL, + "audio", { { "accurate", "Accurate" }, { "remove dc offset", "Preserve Waveform" }, @@ -402,7 +558,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_high_pass_filter_mode_2", "Audio - Highpass Filter for Game Boy #2", + "Highpass Filter for Game Boy #2", "Applies a filter to the audio output for Game Boy #2, removing certain pop sounds caused by the DC Offset. If disabled, the sound will be rendered as output by the Game Boy APU, but popping effects will be heard when the emulator is paused or resumed. 'Accurate' will apply a global filter, masking popping sounds while also reducing lower frequencies. 'Preserve Waveform' applies the filter only to the DC Offset.", + NULL, + "audio", { { "accurate", "Accurate" }, { "remove dc offset", "Preserve Waveform" }, @@ -414,7 +573,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_audio_interference_1", "Audio - Interference Volume for Game Boy #1", + "Interference Volume for Game Boy #1", "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers on Game Boy #1.", + NULL, + "audio", { { "0", "0%" }, { "5", "5%" }, @@ -444,7 +606,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_audio_interference_2", "Audio - Interference Volume for Game Boy #2", + "Interference Volume for Game Boy #2", "Controls the volume of the buzzing effect caused by the electrical interference between the Game Boy SoC and the system speakers on Game Boy #2.", + NULL, + "audio", { { "0", "0%" }, { "5", "5%" }, @@ -474,11 +639,14 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_rumble_1", "Input - Rumble Mode for Game Boy #1", + "Rumble Mode for Game Boy #1", "Defines which type of content should trigger rumble effects when played on Game Boy #1.", + NULL, + "input", { { "all games", "Always" }, { "rumble-enabled games", "Only for rumble-enabled games" }, - { "never", "Never" }, + { "never", "Never" }, { NULL, NULL }, }, "rumble-enabled games" @@ -486,7 +654,10 @@ struct retro_core_option_definition option_defs_us[] = { { "sameboy_rumble_2", "Input - Rumble Mode for Game Boy #2", + "Rumble Mode for Game Boy #2", "Defines which type of content should trigger rumble effects when played on Game Boy #2.", + NULL, + "input", { { "all games", "Always" }, { "rumble-enabled games", "Only for rumble-enabled games" }, @@ -495,8 +666,13 @@ struct retro_core_option_definition option_defs_us[] = { }, "rumble-enabled games" }, - - { NULL, NULL, NULL, {{0}}, NULL }, + + { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL }, +}; + +struct retro_core_options_v2 options_us = { + option_cats_us, + option_defs_us }; /* @@ -506,8 +682,8 @@ struct retro_core_option_definition option_defs_us[] = { */ #ifndef HAVE_NO_LANGEXTRA -struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = { - option_defs_us, /* RETRO_LANGUAGE_ENGLISH */ +struct retro_core_options_v2 *options_intl[RETRO_LANGUAGE_LAST] = { + &options_us, /* RETRO_LANGUAGE_ENGLISH */ NULL, /* RETRO_LANGUAGE_JAPANESE */ NULL, /* RETRO_LANGUAGE_FRENCH */ NULL, /* RETRO_LANGUAGE_SPANISH */ @@ -531,7 +707,6 @@ struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = { NULL, /* RETRO_LANGUAGE_HEBREW */ NULL, /* RETRO_LANGUAGE_ASTURIAN */ NULL, /* RETRO_LANGUAGE_FINNISH */ - }; #endif @@ -549,110 +724,220 @@ struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = { * be as painless as possible for core devs) */ -static INLINE void libretro_set_core_options(retro_environment_t environ_cb) +static INLINE void libretro_set_core_options(retro_environment_t environ_cb, + bool *categories_supported) { - unsigned version = 0; - - if (!environ_cb) return; - - if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version) && (version >= 1)) { + unsigned version = 0; +#ifndef HAVE_NO_LANGEXTRA + unsigned language = 0; +#endif + + if (!environ_cb || !categories_supported) return; + + *categories_supported = false; + + if (!environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version)) version = 0; + + if (version >= 2) { #ifndef HAVE_NO_LANGEXTRA - struct retro_core_options_intl core_options_intl; - unsigned language = 0; - - core_options_intl.us = option_defs_us; + struct retro_core_options_v2_intl core_options_intl; + + core_options_intl.us = &options_us; core_options_intl.local = NULL; - + if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) && (language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH)) - core_options_intl.local = option_defs_intl[language]; - - environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_intl); + core_options_intl.local = options_intl[language]; + + *categories_supported = environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL, + &core_options_intl); #else - environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS, &option_defs_us); + *categories_supported = environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, + &options_us); #endif } else { - size_t i; + size_t i, j; + size_t option_index = 0; size_t num_options = 0; + struct retro_core_option_definition + *option_v1_defs_us = NULL; +#ifndef HAVE_NO_LANGEXTRA + size_t num_options_intl = 0; + struct retro_core_option_v2_definition + *option_defs_intl = NULL; + struct retro_core_option_definition + *option_v1_defs_intl = NULL; + struct retro_core_options_intl + core_options_v1_intl; +#endif struct retro_variable *variables = NULL; char **values_buf = NULL; - - /* Determine number of options */ + + /* Determine total number of options */ while (true) { - if (!option_defs_us[num_options].key) break; - num_options++; + if (option_defs_us[num_options].key) num_options++; + else break; } - - /* Allocate arrays */ - variables = (struct retro_variable *)calloc(num_options + 1, sizeof(struct retro_variable)); - values_buf = (char **)calloc(num_options, sizeof(char *)); - - if (!variables || !values_buf) goto error; - - /* Copy parameters from option_defs_us array */ - for (i = 0; i < num_options; i++) { - const char *key = option_defs_us[i].key; - const char *desc = option_defs_us[i].desc; - const char *default_value = option_defs_us[i].default_value; - struct retro_core_option_value *values = option_defs_us[i].values; - size_t buf_len = 3; - size_t default_index = 0; - - values_buf[i] = NULL; - - if (desc) { - size_t num_values = 0; - - /* Determine number of values */ + + if (version >= 1) { + /* Allocate US array */ + option_v1_defs_us = (struct retro_core_option_definition *) calloc(num_options + 1, sizeof(struct retro_core_option_definition)); + + /* Copy parameters from option_defs_us array */ + for (i = 0; i < num_options; i++) { + struct retro_core_option_v2_definition *option_def_us = &option_defs_us[i]; + struct retro_core_option_value *option_values = option_def_us->values; + struct retro_core_option_definition *option_v1_def_us = &option_v1_defs_us[i]; + struct retro_core_option_value *option_v1_values = option_v1_def_us->values; + + option_v1_def_us->key = option_def_us->key; + option_v1_def_us->desc = option_def_us->desc; + option_v1_def_us->info = option_def_us->info; + option_v1_def_us->default_value = option_def_us->default_value; + + /* Values must be copied individually... */ + while (option_values->value) { + option_v1_values->value = option_values->value; + option_v1_values->label = option_values->label; + + option_values++; + option_v1_values++; + } + } + +#ifndef HAVE_NO_LANGEXTRA + if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) && + (language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH) && + options_intl[language]) + option_defs_intl = options_intl[language]->definitions; + + if (option_defs_intl) { + /* Determine number of intl options */ while (true) { - if (!values[num_values].value) break; - - /* Check if this is the default value */ - if (default_value) { - if (strcmp(values[num_values].value, default_value) == 0) default_index = num_values; + if (option_defs_intl[num_options_intl].key) num_options_intl++; + else break; + } + + /* Allocate intl array */ + option_v1_defs_intl = (struct retro_core_option_definition *) + calloc(num_options_intl + 1, sizeof(struct retro_core_option_definition)); + + /* Copy parameters from option_defs_intl array */ + for (i = 0; i < num_options_intl; i++) { + struct retro_core_option_v2_definition *option_def_intl = &option_defs_intl[i]; + struct retro_core_option_value *option_values = option_def_intl->values; + struct retro_core_option_definition *option_v1_def_intl = &option_v1_defs_intl[i]; + struct retro_core_option_value *option_v1_values = option_v1_def_intl->values; + + option_v1_def_intl->key = option_def_intl->key; + option_v1_def_intl->desc = option_def_intl->desc; + option_v1_def_intl->info = option_def_intl->info; + option_v1_def_intl->default_value = option_def_intl->default_value; + + /* Values must be copied individually... */ + while (option_values->value) { + option_v1_values->value = option_values->value; + option_v1_values->label = option_values->label; + + option_values++; + option_v1_values++; } - - buf_len += strlen(values[num_values].value); - num_values++; } - - /* Build values string */ - if (num_values > 0) { - size_t j; - - buf_len += num_values - 1; - buf_len += strlen(desc); - - values_buf[i] = (char *)calloc(buf_len, sizeof(char)); - if (!values_buf[i]) goto error; - - strcpy(values_buf[i], desc); - strcat(values_buf[i], "; "); - - /* Default value goes first */ - strcat(values_buf[i], values[default_index].value); - - /* Add remaining values */ - for (j = 0; j < num_values; j++) { - if (j != default_index) { - strcat(values_buf[i], "|"); - strcat(values_buf[i], values[j].value); + } + + core_options_v1_intl.us = option_v1_defs_us; + core_options_v1_intl.local = option_v1_defs_intl; + + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_v1_intl); +#else + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS, option_v1_defs_us); +#endif + } + else { + /* Allocate arrays */ + variables = (struct retro_variable *)calloc(num_options + 1, + sizeof(struct retro_variable)); + values_buf = (char **)calloc(num_options, sizeof(char *)); + + if (!variables || !values_buf) goto error; + + /* Copy parameters from option_defs_us array */ + for (i = 0; i < num_options; i++) { + const char *key = option_defs_us[i].key; + const char *desc = option_defs_us[i].desc; + const char *default_value = option_defs_us[i].default_value; + struct retro_core_option_value *values = option_defs_us[i].values; + size_t buf_len = 3; + size_t default_index = 0; + + values_buf[i] = NULL; + + if (desc) { + size_t num_values = 0; + + /* Determine number of values */ + while (true) { + if (values[num_values].value) { + /* Check if this is the default value */ + if (default_value) { + if (strcmp(values[num_values].value, default_value) == 0) default_index = num_values; + + buf_len += strlen(values[num_values].value); + num_values++; + } + } + else break; + } + + /* Build values string */ + if (num_values > 0) { + buf_len += num_values - 1; + buf_len += strlen(desc); + + values_buf[i] = (char *)calloc(buf_len, sizeof(char)); + if (!values_buf[i]) goto error; + + strcpy(values_buf[i], desc); + strcat(values_buf[i], "; "); + + /* Default value goes first */ + strcat(values_buf[i], values[default_index].value); + + /* Add remaining values */ + for (j = 0; j < num_values; j++) { + if (j != default_index) { + strcat(values_buf[i], "|"); + strcat(values_buf[i], values[j].value); + } } } } + + variables[option_index].key = key; + variables[option_index].value = values_buf[i]; + option_index++; } - - variables[i].key = key; - variables[i].value = values_buf[i]; + + /* Set variables */ + environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables); } - - /* Set variables */ - environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables); - - error: - + +error: /* Clean up */ + + if (option_v1_defs_us) { + free(option_v1_defs_us); + option_v1_defs_us = NULL; + } + +#ifndef HAVE_NO_LANGEXTRA + if (option_v1_defs_intl) { + free(option_v1_defs_intl); + option_v1_defs_intl = NULL; + } +#endif + if (values_buf) { for (i = 0; i < num_options; i++) { if (values_buf[i]) { @@ -660,11 +945,11 @@ static INLINE void libretro_set_core_options(retro_environment_t environ_cb) values_buf[i] = NULL; } } - + free(values_buf); values_buf = NULL; } - + if (variables) { free(variables); variables = NULL; diff --git a/thirdparty/SameBoy/version.mk b/thirdparty/SameBoy/version.mk index 89642709d..6196d2412 100644 --- a/thirdparty/SameBoy/version.mk +++ b/thirdparty/SameBoy/version.mk @@ -1 +1 @@ -VERSION := 0.14.7 \ No newline at end of file +VERSION := 0.15.7 \ No newline at end of file From fea71da1f78a5d4645343bce4c4bb346b9a04b34 Mon Sep 17 00:00:00 2001 From: Tom Yaxley Date: Tue, 1 Nov 2022 11:51:23 +1100 Subject: [PATCH 3/4] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1a7b3b7f..b56df17f1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A frontend for the SameBoy GameBoy emulator, with a focus on music creation. It runs standalone and can be used as an audio plugin (VST) in your favourite DAW! ## Features -- Wraps [SameBoy](https://github.com/LIJI32/SameBoy) v0.14.3 +- Wraps [SameBoy](https://github.com/LIJI32/SameBoy) v0.15.7 - Full MIDI support for [mGB](https://github.com/trash80/mGB) - Syncs [LSDj](https://www.littlesounddj.com) to your DAW - Emulates various [Arduinoboy](https://github.com/trash80/Arduinoboy) modes From a995471aaa7c6c0002fdfc3f80cbf1100e5fe40e Mon Sep 17 00:00:00 2001 From: Tom Yaxley Date: Tue, 1 Nov 2022 12:58:18 +1100 Subject: [PATCH 4/4] Fix autoplay --- src/retroplug/luawrapper/UiLuaContext.cpp | 22 ++++++++++++---------- src/retroplug/model/ProcessingContext.cpp | 3 +++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/retroplug/luawrapper/UiLuaContext.cpp b/src/retroplug/luawrapper/UiLuaContext.cpp index 37a7c0c7b..fa50f1f95 100644 --- a/src/retroplug/luawrapper/UiLuaContext.cpp +++ b/src/retroplug/luawrapper/UiLuaContext.cpp @@ -18,9 +18,11 @@ #include "platform/Logger.h" #include "Wrappers.h" -//#ifdef COMPILE_LUA_SCRIPTS +#ifdef COMPILE_LUA_SCRIPTS #include "generated/CompiledScripts.h" -//#endif +#endif + +//#define DEBUG_SCRIPTS void UiLuaContext::init(AudioContextProxy* proxy, const std::string& path, const std::string& scriptPath) { _configPath = path; @@ -47,7 +49,7 @@ bool UiLuaContext::onKey(VirtualKey key, bool down) { return res; } - return false; + return false; } void UiLuaContext::onDoubleClick(float x, float y, MouseMod mod) { @@ -91,14 +93,14 @@ void UiLuaContext::reload() { if (_valid) { callFunc(_viewRoot, "onReloadBegin"); } - + shutdown(); setup(false); if (_valid) { callFunc(_viewRoot, "onReloadEnd"); } - + _haltFrameProcessing = !_valid; } @@ -141,13 +143,13 @@ bool UiLuaContext::setup(bool updateProject) { _state = new sol::state(); sol::state& s = *_state; - s.open_libraries( sol::lib::base, sol::lib::package, sol::lib::table, sol::lib::string, + s.open_libraries( sol::lib::base, sol::lib::package, sol::lib::table, sol::lib::string, sol::lib::math, sol::lib::debug, sol::lib::coroutine, sol::lib::io ); std::string packagePath = s["package"]["path"]; packagePath += ";" + _configPath + "/?.lua"; -#ifdef COMPILE_LUA_SCRIPTS +#ifndef DEBUG_SCRIPTS spdlog::info("Using precompiled lua scripts"); s.add_package_loader(CompiledScripts::common::loader); s.add_package_loader(CompiledScripts::ui::loader); @@ -158,7 +160,7 @@ bool UiLuaContext::setup(bool updateProject) { #endif s["package"]["path"] = packagePath; - + luawrappers::registerCommon(s); luawrappers::registerChrono(s); luawrappers::registerLsdj(s); @@ -191,7 +193,7 @@ bool UiLuaContext::setup(bool updateProject) { ); // TODO: Fix naming of this too! - s.create_named_table("nativeutil", + s.create_named_table("nativeutil", "mergeMenu", mergeMenu ); @@ -223,7 +225,7 @@ bool UiLuaContext::setup(bool updateProject) { } // Load the users config settings - // TODO: This should probably happen outside of this class since it may be used by the + // TODO: This should probably happen outside of this class since it may be used by the // audio lua context too. std::string configPath = _configPath + "/config.lua"; bool configValid = false; diff --git a/src/retroplug/model/ProcessingContext.cpp b/src/retroplug/model/ProcessingContext.cpp index c254a62dc..79859e712 100644 --- a/src/retroplug/model/ProcessingContext.cpp +++ b/src/retroplug/model/ProcessingContext.cpp @@ -174,6 +174,9 @@ void ProcessingContext::process(float** outputs, size_t frameCount) { } else { linkedPlugs[linkedPlugCount++] = plug; } + + plug->pressButtons(_buttonPresses[i].data().presses.data(), _buttonPresses[i].getCount()); + _buttonPresses[i].clear(); totalPlugCount++; }

T_cTYtRp@vRS5)_>W0>#6Ivob~%Fci(H? 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 Nvazr=FWv3M{};>KtZx7S diff --git a/thirdparty/SameBoy/Cocoa/Rewind.png b/thirdparty/SameBoy/Cocoa/Rewind.png index 999f358fa38d23d07f289eda3ff3197fe925c51e..9ac45228e6805a65ff7ea4bc72213486823497a8 100644 GIT binary patch delta 110 zcmV-!0FnQI4U++o83+Ub001XD2R4x*7h3>DNklTO^8Q<7GGjru#q zj(^Q1Jg#HP16H5JDWE0k>e?j5WRDdnV1p>}-cq%esy7tfa!t)O3{)O6M9XOCZg*ZPW5Jy#4~rsoRdqZb*T;=I z&jzaQIF70rs$nRAQ1WR~;E9sts|$t>%SjfcMZ^;%7;(V&3r_~6a|>}=(I$DBCPsGE`m`~?M?Ty(ab3& zDjTsFU^xiWt5E5X7d#*G2l%L7S8h_boiSYStk3yqQK+p23u?DTVH|YX$0SMw^%Wtj z+{HS$V4iGfhOTI)qBZ)O<~A+Yu%FW!uBOeQJ~RWx1zrx!X%tSEf%?ANOY#CIg!MX} z45I2$L|vz$6UPXNV%pG3W-~C9z+x>WXtf+GuxV%$GSdb7JDlu`9E$z(-ld!XN0lbG z*$OR_V614CLltJ3w&E~b@My~qQGd`Ix{IY72DB5p$Y_% zCeTtVB!Lk)LD-ZLC2q*G7(=r}F&;2AO$IW$qo&PAJo7n)oHs;E13S3rMmf}PT7D!q z*qh~Q6row?xtNHC_hcd}&8S>Hj_#Aa<#f(z$3q6Brxbq<%XwIgamLmMkm=<*Ons1p z93Pynf4S=a-}=i0lOaw94CbgR3rDJ$IP>zT_f~H9?yl*yfWycW%WBrbO*O4q0@NAI zV&$X9pN2Vpz1LaqKk+2l-QE31`tH`vi|6^t$;sNse?Rlyhi_dvf4p-0H{^_J)0%iK~yNuWBAWN0H`pm|IYwa1w@B|#9^!& zxEWd)zA^lVDFo5~u_%mWcnFijtx%s~KSUg#LP3V948IY|uq$L@$Y6MltO&b8Yld^^ ziZB#1NHQ#C_=imyy28)c6=5p;Pj!VvTP?+~j4025gU6PL;6H%}cos1M4gtc%L?H|q z5R)h%fDxF?9-%5cf-~Xr02A&HghE1DVIxQ(0H+8bfk!DDxBvhE07*qoM6N<$f*|ls A7ytkO literal 4515 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 W565(3HhfG(sQb!GH<)AjC`5NK7SZpEMeR*2GwR zXnas&R1yfOra@v99x#A{0fR!JwPpW4EK-Uzv?1r=JLe?d@8y?s4v2dT+%rI)b3law z9f5z_y7K^p17|!tVL+T000Mka5rhC+{L|R);v$6S2UsBJo_B-_6h>3A>^1dWm~hSs z00GSqAUgAH6aGGA*vLTTjr2A9N<`-XfC~wshybMN3_5{RjpGww1Q%HP2dv zsedgMM`J(0LTEOC;@arh4Fe***{zu=*J`xV{6OkB9zB9Q>@@Pr%vxYOGIgEPA8l~M z4G~hyOKp>mN1-yeTk1F&{T5l+n9kpC(!UjPs&rL{lD{=o>pG_a!RDnx5h~q&hk1WO z`wCe|Otp8L^z|aj2<_$JyBO~P(^qV@1KSdA2gv2!mKYscc3t)(j@=)?@Qw4uAEj^qc zQwNYi1J%-w%%rpXHl407rS2E*{2hqY@m#zKO z9dtgl{?y_TiZT@V;RR&SNq^i{2~F-)vxoQ3m|AsByXV!Y!igYq+IW1LdyQ2gh{0$eQbdp3W)bt^=Q^w3Y+ zOn}I?(k8touS0~%)3(yl*s&Wr+p|-lml0!#&+R?h-^arLW~cs8A8sy=#=ftQi&Zsi zfgMOtVN3UL>VjQ|NQ1px&(_%h4b=1ZnYF++Bp9T-I+#4))Cn)Uj=z6cns{sr6)${H z?zA`lOV~n3`9SilScXjNk+^lWbuYqHxNU4dw=p{F;+aml(1_jC+5Y^n@sC%dM1jo| zyqF8X#lYe{=`s5X_}F>r^<5+9R?~CWt$l03&d(F&OKpQtD6+~;tWcOAK;)|aFDe%q vlHr8{?_BQH%#umI#eN+=F^_|Huh;os*MRB{XWvD800000NkvXXu0mjfB~A{D literal 18543 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 P0xk9n6dm$iz2ScV#@DwE diff --git a/thirdparty/SameBoy/Cocoa/Speaker@2x.png b/thirdparty/SameBoy/Cocoa/Speaker@2x.png index 41c46ffdb97577786ed67a1e0972b698af41a54c..a07f21b1eafcd4d5c91a608b16d0e7a95030a206 100644 GIT binary patch delta 1762 zcmV<81|9jLngO8>kQoRB00000V7XP3yFf0HBNcxJr%6OXRA}DqnR{$gWfZ_qUu)O3 zTif-yw(HieYuB#bqocjIMI9r64g-dVBGF((hy+NcCSnMQ&WJ>VZ;Tj&C`4uiL{LT) zVn~RQ7~?CL-~$W~A6aIQOvlF9j^Dk#y}c`K*VY#Pklg>i^nUq$kMld{o&v)4ec%Sb z4FG=xO$i>b0Sz-D43_M_D;K|d^7;T++#}8C94=c7&g%mp^>3xI4QoDz z2yTWFfSHmYcW?&B3)X>_Ep!n4bA6 z77IY5Tv9V)87^O)TrK*IvhX)iY)0KP5Cnf&X#r%W70nnx`*#on6F0R8J-)8!L>OIz z(r$2+6aZZ+b;l1hS*_+tXa*@aYIZ_sPYhep{2mF%$|3@Q3@lIwHHk}yVs!ZCMsXTC z|B%cEJ3oE9+e!aJp?9?WUT7#LfK_s9#U|-ua^ezhA}feGK8j%r8h1iFsJKxTYFmGM zW7v+i&w&DC@c?YbBeiHgC!PZ~eyWy6A3YL5&xqo#qs?&bTluGk;AD!Bc1`)A_1Vy8KTA_*f=a-Bv>tF z*HFLH=)=lK1mRdu4(DhTgQ(vMt*L*RAx8i(KqJ{e8-KqwC~w~qi>o%AP%T-lEwG%C zPu~tNYKeTByfH>T4S#>h<_U1a zP7^gqaK|fFfk&7basoiP$`-iTfu8Y-mE3GHO%vkyA>%pgZou!qI{p19JS zFMt#!fk$H)LdUns*E6XWJDhg%s&;p(YEg;$mdAe>T>DoL6=VjtZ*~+3?to+t)Mf`T$rtH9tJ+0YYvfhi z;LoPo%R<#+$f}I|#NcY406*_a3&DM#aiyt`xKf=BKx2N(jV`S06}--<_COldYT~N3 z3sj2|bo%dLaeouf6u7djp^?5sp=VUF6kJ&V^iX?u2id~82qx<`Q9KwNo@#oa=172FQEMtxW}BwGM= zd8js+U9~8~n&5*h?vImP>Gy=A;}L8aDw_|raey-a4vIvx&!~Uehf-BbaJ@}8vA7qc z!bC=UjMImRJ%&LS2T-7~80QnhGAQD_&7yO-cvEoM%&n%q>oE@#z-+zy&q?U?dD0j>*Q!o&C)*)k4bD%DP^YO$SH?c*t`{opFq zDzUm{1B?4b@`itDiR?_I%F!l8#Hx0GX4TqqQmxyas#@mA2<~admD)84eWgvu`Bb&6 zYWsQBDl@B=#SP9_!iM83iAYEfP^fAbO;#;+UZ`4j)PYNSzg~5|epL%;gc4I}}06A2(=~cU%xKhL4r6@jy zYtfOzM_w9$LRGsosU$5_lSc~$0c2I}zBH;ewXSE&(ht*p{}%?3r)p0JXAM&5>&x7X z%ezmQdsTnS;y!S8$KDfvZp7P)29T|)rOt7xP0B|>nC4^C)Ipa=izcILYdO`P67dBF z1FXyG%H`D~%B0%k(#SE^mG?t=5gL4105Vmzv$n739E)7;B5_($fQ+iu;fBFa1`c8m zYDx_tP_3+6P^ig?unj0LMwfkx1_e>AIMm0e*78bj`c7ww0hp`UWQz?G`3y~NE?qkS zCC=&X>l#~ps2EqSpjIt!(W7zprp8~^|S07*qoM6N<$ Eg4>!vXaE2J literal 19746 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 FV1jfeZQ}p{ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/UpdateWindow.xib b/thirdparty/SameBoy/Cocoa/UpdateWindow.xib index e34f8f219..0949af4fe 100644 --- a/thirdparty/SameBoy/Cocoa/UpdateWindow.xib +++ b/thirdparty/SameBoy/Cocoa/UpdateWindow.xib @@ -7,7 +7,7 @@ - + diff --git a/thirdparty/SameBoy/Cocoa/Updates.png b/thirdparty/SameBoy/Cocoa/Updates.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bbbb6a615fbc4f66aff56dafac4fdc35c2ad43 GIT binary patch literal 1576 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 LNkvXXu0mjfMydn$ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Updates~solid~dark.png b/thirdparty/SameBoy/Cocoa/Updates~solid~dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5f21264f4f566e010bf4c243d8eb8cd6b2e760 GIT binary patch literal 366 zcmV-!0g?WRP)m*4PaSND#2g?#iHPAXj#x`z-9xXgKbcFZ^e5K(tB^a>Z!}$!FX6LOYeAguXoVJ?K>%)5eCLsK{0u%o4;Wi!@NdN!< M07*qoM6N<$g6T_=PXGV_ literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy/Cocoa/Updates~solid~dark@2x.png b/thirdparty/SameBoy/Cocoa/Updates~solid~dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eb35dad9f98c5bd7b0034a17fc8050b1d1f5cfef GIT binary patch literal 1021 zcmV*VnaOFqz=MA(V3kP6p8330_{> zu%pR@;uqj#06o7o<;#j;oC^W$+6~vPqjZ|ayrX8zjgK#E-v*a2X#jwaA4*r3Q!H)n z|KRNnoxfZUV1yqZJph2-|Ii!&$L9zI#bA&CBmfCO0+0YC00}?>kN_kA2|xmn03-kj zKmzb^0D*z<{hJ2^h>3yvI;{e5{GQWa0P+t*UY<4qjFt2Om=*&yuSI#>)d2AJL+N&6 zSv)El9zTNch|wCsu^S_d<;F-rAVfsK)^y0tf$`o0!o!sS{wH;{Fmo0dji9RHYLQPy z2vNnos*1KDs2L9MUaa1^H)&qv}@!@#Gzhb?y5z;c@ZG%`1-nt?5E(hR00e(5q1MFDZ zW{Q34bl+@IUpc@|tlI#XJqOO8g-x4v24E;2V1dxPTGS2zOE`=s@!5%W&zlJvjiTUk zEZ^?ZSl?6OuyDx8u)93gH-I5jhTH>y$pqQCP+ksA?*`ZB9E1mDgX`TI!2J?Y83H(d z6q1r`t@=N`+XIMXEu^Hv zj~`-OA86sQaA<9XtgL@0y!toL(jt!PELrMi0K&qp6Pm%?+fptcOxN87ckaNHDe$os zs%zlLVK69e1Yj6-ej9oDLWE56dU*0wc*%wocvT5IcIbQ()bQ zDNLLQJ9k1`8_J|$9Rpaj5bl*gs4C*VtPGYch6VAW&BKQ%t5)k2K#v*n@?q9=m^u}j znjv+g?cQKoCQ9*b9nS #include #include +#include #include "gb.h" -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) - static const uint8_t duties[] = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, @@ -14,7 +12,7 @@ static const uint8_t duties[] = { 0, 1, 1, 1, 1, 1, 1, 0, }; -static void refresh_channel(GB_gameboy_t *gb, unsigned index, unsigned cycles_offset) +static void refresh_channel(GB_gameboy_t *gb, GB_channel_t index, unsigned cycles_offset) { unsigned multiplier = gb->apu_output.cycles_since_render + cycles_offset - gb->apu_output.last_update[index]; gb->apu_output.summed_samples[index].left += gb->apu_output.current_sample[index].left * multiplier; @@ -22,9 +20,9 @@ static void refresh_channel(GB_gameboy_t *gb, unsigned index, unsigned cycles_of gb->apu_output.last_update[index] = gb->apu_output.cycles_since_render + cycles_offset; } -bool GB_apu_is_DAC_enabled(GB_gameboy_t *gb, unsigned index) +bool GB_apu_is_DAC_enabled(GB_gameboy_t *gb, GB_channel_t index) { - if (gb->model >= GB_MODEL_AGB) { + if (gb->model > GB_MODEL_CGB_E) { /* On the AGB, mixing is done digitally, so there are no per-channel DACs. Instead, all channels are summed digital regardless of whatever the DAC state would be on a CGB or earlier model. */ @@ -43,12 +41,14 @@ bool GB_apu_is_DAC_enabled(GB_gameboy_t *gb, unsigned index) case GB_NOISE: return gb->io_registers[GB_IO_NR42] & 0xF8; + + nodefault; } return false; } -static uint8_t agb_bias_for_channel(GB_gameboy_t *gb, unsigned index) +static uint8_t agb_bias_for_channel(GB_gameboy_t *gb, GB_channel_t index) { if (!gb->apu.is_active[index]) return 0; @@ -61,13 +61,16 @@ static uint8_t agb_bias_for_channel(GB_gameboy_t *gb, unsigned index) return 0; case GB_NOISE: return gb->apu.noise_channel.current_volume; + + nodefault; } return 0; } -static void update_sample(GB_gameboy_t *gb, unsigned index, int8_t value, unsigned cycles_offset) +static void update_sample(GB_gameboy_t *gb, GB_channel_t index, int8_t value, unsigned cycles_offset) { - if (gb->model >= GB_MODEL_AGB) { + + if (gb->model > GB_MODEL_CGB_E) { /* On the AGB, because no analog mixing is done, the behavior of NR51 is a bit different. A channel that is not connected to a terminal is idenitcal to a connected channel playing PCM sample 0. */ @@ -86,17 +89,21 @@ static void update_sample(GB_gameboy_t *gb, unsigned index, int8_t value, unsign uint8_t bias = agb_bias_for_channel(gb, index); if (gb->io_registers[GB_IO_NR51] & (1 << index)) { - output.right = (0xf - value * 2 + bias) * right_volume; + output.right = (0xF - value * 2 + bias) * right_volume; } else { - output.right = 0xf * right_volume; + output.right = 0xF * right_volume; } if (gb->io_registers[GB_IO_NR51] & (0x10 << index)) { - output.left = (0xf - value * 2 + bias) * left_volume; + output.left = (0xF - value * 2 + bias) * left_volume; } else { - output.left = 0xf * left_volume; + output.left = 0xF * left_volume; + } + + if (unlikely(gb->apu_output.channel_muted[index])) { + output.left = output.right = 0; } if (*(uint32_t *)&(gb->apu_output.current_sample[index]) != *(uint32_t *)&output) { @@ -108,6 +115,8 @@ static void update_sample(GB_gameboy_t *gb, unsigned index, int8_t value, unsign return; } + if (value == 0 && gb->apu.samples[index] == 0) return; + if (!GB_apu_is_DAC_enabled(gb, index)) { value = gb->apu.samples[index]; } @@ -124,7 +133,10 @@ static void update_sample(GB_gameboy_t *gb, unsigned index, int8_t value, unsign if (gb->io_registers[GB_IO_NR51] & (0x10 << index)) { left_volume = ((gb->io_registers[GB_IO_NR50] >> 4) & 7) + 1; } - GB_sample_t output = {(0xf - value * 2) * left_volume, (0xf - value * 2) * right_volume}; + GB_sample_t output = {0, 0}; + if (likely(!gb->apu_output.channel_muted[index])) { + output = (GB_sample_t){(0xF - value * 2) * left_volume, (0xF - value * 2) * right_volume}; + } if (*(uint32_t *)&(gb->apu_output.current_sample[index]) != *(uint32_t *)&output) { refresh_channel(gb, index, cycles_offset); gb->apu_output.current_sample[index] = output; @@ -142,16 +154,16 @@ static signed interference(GB_gameboy_t *gb) /* These aren't scientifically measured, but based on ear based on several recordings */ signed ret = 0; if (gb->halted) { - if (gb->model != GB_MODEL_AGB) { + if (gb->model <= GB_MODEL_CGB_E) { ret -= MAX_CH_AMP / 5; } else { ret -= MAX_CH_AMP / 12; } } - if (gb->io_registers[GB_IO_LCDC] & 0x80) { + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE) { ret += MAX_CH_AMP / 7; - if ((gb->io_registers[GB_IO_STAT] & 3) == 3 && gb->model != GB_MODEL_AGB) { + if ((gb->io_registers[GB_IO_STAT] & 3) == 3 && gb->model <= GB_MODEL_CGB_E) { ret += MAX_CH_AMP / 14; } else if ((gb->io_registers[GB_IO_STAT] & 3) == 1) { @@ -163,7 +175,7 @@ static signed interference(GB_gameboy_t *gb) ret += MAX_CH_AMP / 10; } - if (GB_is_cgb(gb) && gb->model < GB_MODEL_AGB && (gb->io_registers[GB_IO_RP] & 1)) { + if (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_E && (gb->io_registers[GB_IO_RP] & 1)) { ret += MAX_CH_AMP / 10; } @@ -183,7 +195,7 @@ static void render(GB_gameboy_t *gb) unrolled for (unsigned i = 0; i < GB_N_CHANNELS; i++) { double multiplier = CH_STEP; - if (gb->model < GB_MODEL_AGB) { + if (gb->model <= GB_MODEL_CGB_E) { if (!GB_apu_is_DAC_enabled(gb, i)) { gb->apu_output.dac_discharge[i] -= ((double) DAC_DECAY_SPEED) / gb->apu_output.sample_rate; if (gb->apu_output.dac_discharge[i] < 0) { @@ -220,6 +232,8 @@ static void render(GB_gameboy_t *gb) gb->apu_output.last_update[i] = 0; } gb->apu_output.cycles_since_render = 0; + + if (gb->sgb && gb->sgb->intro_animation < GB_SGB_INTRO_ANIMATION_LENGTH) return; GB_sample_t filtered_output = gb->apu_output.highpass_mode? (GB_sample_t) {output.left - gb->apu_output.highpass_diff.left, @@ -240,18 +254,14 @@ static void render(GB_gameboy_t *gb) unsigned left_volume = 0; unsigned right_volume = 0; unrolled for (unsigned i = GB_N_CHANNELS; i--;) { - if (gb->apu.is_active[i]) { + if (GB_apu_is_DAC_enabled(gb, i)) { if (mask & 1) { - left_volume += (gb->io_registers[GB_IO_NR50] & 7) * CH_STEP * 0xF; + left_volume += ((gb->io_registers[GB_IO_NR50] & 7) + 1) * CH_STEP * 0xF; } if (mask & 0x10) { - right_volume += ((gb->io_registers[GB_IO_NR50] >> 4) & 7) * CH_STEP * 0xF; + right_volume += (((gb->io_registers[GB_IO_NR50] >> 4) & 7) + 1) * CH_STEP * 0xF; } } - else { - left_volume += gb->apu_output.current_sample[i].left * CH_STEP; - right_volume += gb->apu_output.current_sample[i].right * CH_STEP; - } mask >>= 1; } gb->apu_output.highpass_diff = (GB_double_sample_t) @@ -276,11 +286,29 @@ static void render(GB_gameboy_t *gb) } assert(gb->apu_output.sample_callback); gb->apu_output.sample_callback(gb, &filtered_output); + if (unlikely(gb->apu_output.output_file)) { +#ifdef GB_BIG_ENDIAN + if (gb->apu_output.output_format == GB_AUDIO_FORMAT_WAV) { + filtered_output.left = LE16(filtered_output.left); + filtered_output.right = LE16(filtered_output.right); + } +#endif + if (fwrite(&filtered_output, sizeof(filtered_output), 1, gb->apu_output.output_file) != 1) { + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + gb->apu_output.output_error = errno; + } + } } -static void update_square_sample(GB_gameboy_t *gb, unsigned index) +static void update_square_sample(GB_gameboy_t *gb, GB_channel_t index) { - if (gb->apu.square_channels[index].current_sample_index & 0x80) return; + if (gb->apu.square_channels[index].sample_surpressed) { + if (gb->model > GB_MODEL_CGB_E) { + update_sample(gb, index, gb->apu.samples[index], 0); + } + return; + } uint8_t duty = gb->io_registers[index == GB_SQUARE_1? GB_IO_NR11 :GB_IO_NR21] >> 6; update_sample(gb, index, @@ -303,11 +331,6 @@ static inline void update_wave_sample(GB_gameboy_t *gb, unsigned cycles) } } -/* the effects of NRX2 writes on current volume are not well documented and differ - between models and variants. The exact behavior can only be verified on CGB as it - requires the PCM12 register. The behavior implemented here was verified on *my* - CGB, which might behave differently from other CGB revisions, as well as from the - DMG, MGB or SGB/2 */ static void _nrx2_glitch(uint8_t *volume, uint8_t value, uint8_t old_value, uint8_t *countdown, GB_envelope_clock_t *lock) { if (lock->clock) { @@ -321,7 +344,7 @@ static void _nrx2_glitch(uint8_t *volume, uint8_t value, uint8_t old_value, uint } if (should_invert) { - // The weird way and over-the-top way clocks for this counter are connected cause + // The weird and over-the-top way clocks for this counter are connected cause // some weird ways for it to invert if (value & 8) { if (!(old_value & 7) && !lock->locked) { @@ -369,6 +392,11 @@ static void _nrx2_glitch(uint8_t *volume, uint8_t value, uint8_t old_value, uint static void nrx2_glitch(GB_gameboy_t *gb, uint8_t *volume, uint8_t value, uint8_t old_value, uint8_t *countdown, GB_envelope_clock_t *lock) { + /* Note: on pre-CGB models *some* of these are non-deterministic. Specifically, + $x0 writes seem to be non-deterministic while $x8 always work as expected. + TODO: Might be useful to find which cases are non-deterministic, and allow + the debugger to issue warnings when they're used. I suspect writes to/from + $xF are guaranteed to be deterministic. */ if (gb->model <= GB_MODEL_CGB_C) { _nrx2_glitch(volume, 0xFF, old_value, countdown, lock); _nrx2_glitch(volume, value, 0xFF, countdown, lock); @@ -378,11 +406,11 @@ static void nrx2_glitch(GB_gameboy_t *gb, uint8_t *volume, uint8_t value, uint8_ } } -static void tick_square_envelope(GB_gameboy_t *gb, enum GB_CHANNELS index) +static void tick_square_envelope(GB_gameboy_t *gb, GB_channel_t index) { uint8_t nrx2 = gb->io_registers[index == GB_SQUARE_1? GB_IO_NR12 : GB_IO_NR22]; - if (gb->apu.square_envelope_clock[index].locked) return; + if (gb->apu.square_channels[index].envelope_clock.locked) return; if (!(nrx2 & 7)) return; if (gb->cgb_double_speed) { if (index == GB_SQUARE_1) { @@ -398,7 +426,7 @@ static void tick_square_envelope(GB_gameboy_t *gb, enum GB_CHANNELS index) gb->apu.square_channels[index].current_volume++; } else { - gb->apu.square_envelope_clock[index].locked = true; + gb->apu.square_channels[index].envelope_clock.locked = true; } } else { @@ -406,7 +434,7 @@ static void tick_square_envelope(GB_gameboy_t *gb, enum GB_CHANNELS index) gb->apu.square_channels[index].current_volume--; } else { - gb->apu.square_envelope_clock[index].locked = true; + gb->apu.square_channels[index].envelope_clock.locked = true; } } @@ -419,7 +447,7 @@ static void tick_noise_envelope(GB_gameboy_t *gb) { uint8_t nr42 = gb->io_registers[GB_IO_NR42]; - if (gb->apu.noise_envelope_clock.locked) return; + if (gb->apu.noise_channel.envelope_clock.locked) return; if (!(nr42 & 7)) return; if (gb->cgb_double_speed) { @@ -431,7 +459,7 @@ static void tick_noise_envelope(GB_gameboy_t *gb) gb->apu.noise_channel.current_volume++; } else { - gb->apu.noise_envelope_clock.locked = true; + gb->apu.noise_channel.envelope_clock.locked = true; } } else { @@ -439,7 +467,7 @@ static void tick_noise_envelope(GB_gameboy_t *gb) gb->apu.noise_channel.current_volume--; } else { - gb->apu.noise_envelope_clock.locked = true; + gb->apu.noise_channel.envelope_clock.locked = true; } } @@ -477,6 +505,7 @@ static void trigger_sweep_calculation(GB_gameboy_t *gb) void GB_apu_div_event(GB_gameboy_t *gb) { + GB_apu_run(gb, true); if (!gb->apu.global_enable) return; if (gb->apu.skip_div_event == GB_SKIP_DIV_EVENT_SKIP) { gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_SKIPPED; @@ -491,27 +520,27 @@ void GB_apu_div_event(GB_gameboy_t *gb) if ((gb->apu.div_divider & 7) == 7) { unrolled for (unsigned i = GB_SQUARE_2 + 1; i--;) { - if (!gb->apu.square_envelope_clock[i].clock) { + if (!gb->apu.square_channels[i].envelope_clock.clock) { gb->apu.square_channels[i].volume_countdown--; gb->apu.square_channels[i].volume_countdown &= 7; } } - if (!gb->apu.noise_envelope_clock.clock) { + if (!gb->apu.noise_channel.envelope_clock.clock) { gb->apu.noise_channel.volume_countdown--; gb->apu.noise_channel.volume_countdown &= 7; } } unrolled for (unsigned i = GB_SQUARE_2 + 1; i--;) { - if (gb->apu.square_envelope_clock[i].clock) { + if (gb->apu.square_channels[i].envelope_clock.clock) { tick_square_envelope(gb, i); - gb->apu.square_envelope_clock[i].clock = false; + gb->apu.square_channels[i].envelope_clock.clock = false; } } - if (gb->apu.noise_envelope_clock.clock) { + if (gb->apu.noise_channel.envelope_clock.clock) { tick_noise_envelope(gb); - gb->apu.noise_envelope_clock.clock = false; + gb->apu.noise_channel.envelope_clock.clock = false; } if ((gb->apu.div_divider & 1) == 1) { @@ -529,7 +558,7 @@ void GB_apu_div_event(GB_gameboy_t *gb) if (gb->apu.wave_channel.length_enabled) { if (gb->apu.wave_channel.pulse_length) { if (!--gb->apu.wave_channel.pulse_length) { - if (gb->apu.is_active[GB_WAVE] && gb->model == GB_MODEL_AGB) { + if (gb->apu.is_active[GB_WAVE] && gb->model > GB_MODEL_CGB_E) { if (gb->apu.wave_channel.sample_countdown == 0) { gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START + (((gb->apu.wave_channel.current_sample_index + 1) & 0xF) >> 1)]; @@ -564,15 +593,17 @@ void GB_apu_div_event(GB_gameboy_t *gb) void GB_apu_div_secondary_event(GB_gameboy_t *gb) { + GB_apu_run(gb, true); + if (!gb->apu.global_enable) return; unrolled for (unsigned i = GB_SQUARE_2 + 1; i--;) { uint8_t nrx2 = gb->io_registers[i == GB_SQUARE_1? GB_IO_NR12 : GB_IO_NR22]; if (gb->apu.is_active[i] && gb->apu.square_channels[i].volume_countdown == 0) { - gb->apu.square_envelope_clock[i].clock = (gb->apu.square_channels[i].volume_countdown = nrx2 & 7); + gb->apu.square_channels[i].envelope_clock.clock = (gb->apu.square_channels[i].volume_countdown = nrx2 & 7); } } if (gb->apu.is_active[GB_NOISE] && gb->apu.noise_channel.volume_countdown == 0) { - gb->apu.noise_envelope_clock.clock = (gb->apu.noise_channel.volume_countdown = gb->io_registers[GB_IO_NR42] & 7); + gb->apu.noise_channel.envelope_clock.clock = (gb->apu.noise_channel.volume_countdown = gb->io_registers[GB_IO_NR42] & 7); } } @@ -590,43 +621,63 @@ static void step_lfsr(GB_gameboy_t *gb, unsigned cycles_offset) gb->apu.noise_channel.lfsr &= ~high_bit_mask; } - gb->apu.current_lfsr_sample = gb->apu.noise_channel.lfsr & 1; + gb->apu.noise_channel.current_lfsr_sample = gb->apu.noise_channel.lfsr & 1; if (gb->apu.is_active[GB_NOISE]) { update_sample(gb, GB_NOISE, - gb->apu.current_lfsr_sample ? + gb->apu.noise_channel.current_lfsr_sample ? gb->apu.noise_channel.current_volume : 0, cycles_offset); } } -void GB_apu_run(GB_gameboy_t *gb) +void GB_apu_run(GB_gameboy_t *gb, bool force) { + uint32_t clock_rate = GB_get_clock_rate(gb) * 2; + if (!force || + (gb->apu.apu_cycles > 0x1000) || + (gb->apu_output.sample_cycles >= clock_rate) || + (gb->apu.square_sweep_calculate_countdown || gb->apu.channel_1_restart_hold) || + (gb->model <= GB_MODEL_CGB_E && (gb->apu.wave_channel.bugged_read_countdown || (gb->apu.wave_channel.enable && gb->apu.wave_channel.pulsed)))) { + force = true; + } + if (!force) { + return; + } /* Convert 4MHZ to 2MHz. apu_cycles is always divisable by 4. */ - uint8_t cycles = gb->apu.apu_cycles >> 2; + uint16_t cycles = gb->apu.apu_cycles >> 2; gb->apu.apu_cycles = 0; if (!cycles) return; - if (unlikely(gb->apu.channel_3_delayed_bugged_read)) { - gb->apu.channel_3_delayed_bugged_read = false; - gb->apu.wave_channel.current_sample_byte = - gb->io_registers[GB_IO_WAV_START + (gb->address_bus & 0xF)]; + if (unlikely(gb->apu.wave_channel.bugged_read_countdown)) { + uint16_t cycles_left = cycles; + while (cycles_left) { + cycles_left--; + if (--gb->apu.wave_channel.bugged_read_countdown == 0) { + gb->apu.wave_channel.current_sample_byte = + gb->io_registers[GB_IO_WAV_START + (gb->address_bus & 0xF)]; + if (gb->apu.is_active[GB_WAVE]) { + update_wave_sample(gb, 0); + } + break; + } + } } bool start_ch4 = false; if (likely(!gb->stopped || GB_is_cgb(gb))) { - if (gb->apu.channel_4_dmg_delayed_start) { - if (gb->apu.channel_4_dmg_delayed_start == cycles) { - gb->apu.channel_4_dmg_delayed_start = 0; + if (gb->apu.noise_channel.dmg_delayed_start) { + if (gb->apu.noise_channel.dmg_delayed_start == cycles) { + gb->apu.noise_channel.dmg_delayed_start = 0; start_ch4 = true; } - else if (gb->apu.channel_4_dmg_delayed_start > cycles) { - gb->apu.channel_4_dmg_delayed_start -= cycles; + else if (gb->apu.noise_channel.dmg_delayed_start > cycles) { + gb->apu.noise_channel.dmg_delayed_start -= cycles; } else { /* Split it into two */ - cycles -= gb->apu.channel_4_dmg_delayed_start; - gb->apu.apu_cycles = gb->apu.channel_4_dmg_delayed_start * 4; - GB_apu_run(gb); + cycles -= gb->apu.noise_channel.dmg_delayed_start; + gb->apu.apu_cycles = gb->apu.noise_channel.dmg_delayed_start * 4; + GB_apu_run(gb, true); } } /* To align the square signal to 1MHz */ @@ -668,16 +719,25 @@ void GB_apu_run(GB_gameboy_t *gb) unrolled for (unsigned i = GB_SQUARE_1; i <= GB_SQUARE_2; i++) { if (gb->apu.is_active[i]) { - uint8_t cycles_left = cycles; + uint16_t cycles_left = cycles; + if (unlikely(gb->apu.square_channels[i].delay)) { + if (gb->apu.square_channels[i].delay < cycles_left) { + gb->apu.square_channels[i].delay = 0; + } + else { + gb->apu.square_channels[i].delay -= cycles_left; + } + } while (unlikely(cycles_left > gb->apu.square_channels[i].sample_countdown)) { cycles_left -= gb->apu.square_channels[i].sample_countdown + 1; gb->apu.square_channels[i].sample_countdown = (gb->apu.square_channels[i].sample_length ^ 0x7FF) * 2 + 1; gb->apu.square_channels[i].current_sample_index++; gb->apu.square_channels[i].current_sample_index &= 0x7; + gb->apu.square_channels[i].sample_surpressed = false; if (cycles_left == 0 && gb->apu.samples[i] == 0) { gb->apu.pcm_mask[0] &= i == GB_SQUARE_1? 0xF0 : 0x0F; } - + gb->apu.square_channels[i].did_tick = true; update_square_sample(gb, i); } if (cycles_left) { @@ -688,7 +748,7 @@ void GB_apu_run(GB_gameboy_t *gb) gb->apu.wave_channel.wave_form_just_read = false; if (gb->apu.is_active[GB_WAVE]) { - uint8_t cycles_left = cycles; + uint16_t cycles_left = cycles; while (unlikely(cycles_left > gb->apu.wave_channel.sample_countdown)) { cycles_left -= gb->apu.wave_channel.sample_countdown + 1; gb->apu.wave_channel.sample_countdown = gb->apu.wave_channel.sample_length ^ 0x7FF; @@ -704,8 +764,8 @@ void GB_apu_run(GB_gameboy_t *gb) gb->apu.wave_channel.wave_form_just_read = false; } } - else if (gb->apu.wave_channel.enable && gb->apu.channel_3_pulsed && gb->model < GB_MODEL_AGB) { - uint8_t cycles_left = cycles; + else if (gb->apu.wave_channel.enable && gb->apu.wave_channel.pulsed && gb->model <= GB_MODEL_CGB_E) { + uint16_t cycles_left = cycles; while (unlikely(cycles_left > gb->apu.wave_channel.sample_countdown)) { cycles_left -= gb->apu.wave_channel.sample_countdown + 1; gb->apu.wave_channel.sample_countdown = gb->apu.wave_channel.sample_length ^ 0x7FF; @@ -714,26 +774,30 @@ void GB_apu_run(GB_gameboy_t *gb) gb->io_registers[GB_IO_WAV_START + (gb->address_bus & 0xF)]; } else { - gb->apu.channel_3_delayed_bugged_read = true; + gb->apu.wave_channel.bugged_read_countdown = 1; } } if (cycles_left) { gb->apu.wave_channel.sample_countdown -= cycles_left; } + if (gb->apu.wave_channel.sample_countdown == 0) { + gb->apu.wave_channel.bugged_read_countdown = 2; + } } // The noise channel can step even if inactive on the DMG if (gb->apu.is_active[GB_NOISE] || !GB_is_cgb(gb)) { - uint8_t cycles_left = cycles; + uint16_t cycles_left = cycles; unsigned divisor = (gb->io_registers[GB_IO_NR43] & 0x07) << 2; if (!divisor) divisor = 2; if (gb->apu.noise_channel.counter_countdown == 0) { gb->apu.noise_channel.counter_countdown = divisor; } - while (unlikely(cycles_left >= gb->apu.noise_channel.counter_countdown)) { + // This while doesn't get an unlikely because the noise channel steps frequently enough + while (cycles_left >= gb->apu.noise_channel.counter_countdown) { cycles_left -= gb->apu.noise_channel.counter_countdown; - gb->apu.noise_channel.counter_countdown = divisor + gb->apu.channel_4_delta; - gb->apu.channel_4_delta = 0; + gb->apu.noise_channel.counter_countdown = divisor + gb->apu.noise_channel.delta; + gb->apu.noise_channel.delta = 0; bool old_bit = (gb->apu.noise_channel.counter >> (gb->io_registers[GB_IO_NR43] >> 4)) & 1; gb->apu.noise_channel.counter++; gb->apu.noise_channel.counter &= 0x3FFF; @@ -749,10 +813,10 @@ void GB_apu_run(GB_gameboy_t *gb) } if (cycles_left) { gb->apu.noise_channel.counter_countdown -= cycles_left; - gb->apu.channel_4_countdown_reloaded = false; + gb->apu.noise_channel.countdown_reloaded = false; } else { - gb->apu.channel_4_countdown_reloaded = true; + gb->apu.noise_channel.countdown_reloaded = true; } } } @@ -760,8 +824,8 @@ void GB_apu_run(GB_gameboy_t *gb) if (gb->apu_output.sample_rate) { gb->apu_output.cycles_since_render += cycles; - if (gb->apu_output.sample_cycles >= gb->apu_output.cycles_per_sample) { - gb->apu_output.sample_cycles -= gb->apu_output.cycles_per_sample; + if (gb->apu_output.sample_cycles >= clock_rate) { + gb->apu_output.sample_cycles -= clock_rate; render(gb); } } @@ -781,10 +845,13 @@ void GB_apu_init(GB_gameboy_t *gb) gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_SKIP; gb->apu.div_divider = 1; } + gb->apu.square_channels[GB_SQUARE_1].sample_countdown = -1; + gb->apu.square_channels[GB_SQUARE_2].sample_countdown = -1; } uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg) { + GB_apu_run(gb, true); if (reg == GB_IO_NR52) { uint8_t value = 0; for (unsigned i = 0; i < GB_N_CHANNELS; i++) { @@ -817,7 +884,7 @@ uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg) if (!GB_is_cgb(gb) && !gb->apu.wave_channel.wave_form_just_read) { return 0xFF; } - if (gb->model == GB_MODEL_AGB) { + if (gb->model > GB_MODEL_CGB_E) { return 0xFF; } reg = GB_IO_WAV_START + gb->apu.wave_channel.current_sample_index / 2; @@ -839,7 +906,6 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) switch (gb->model) { /* Pre CGB revisions are assumed to be like CGB-C, A and 0 for the lack of a better guess. TODO: It could be verified with audio based test ROMs. */ -#if 0 case GB_MODEL_CGB_B: if (effective_counter & 8) { effective_counter |= 0xE; // Seems to me F under some circumstances? @@ -866,16 +932,16 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) effective_counter |= 0x20; } break; -#endif case GB_MODEL_DMG_B: + case GB_MODEL_MGB: case GB_MODEL_SGB_NTSC: case GB_MODEL_SGB_PAL: case GB_MODEL_SGB_NTSC_NO_SFC: case GB_MODEL_SGB_PAL_NO_SFC: case GB_MODEL_SGB2: case GB_MODEL_SGB2_NO_SFC: - // case GB_MODEL_CGB_0: - // case GB_MODEL_CGB_A: + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: case GB_MODEL_CGB_C: if (effective_counter & 8) { effective_counter |= 0xE; // Sometimes F on some instances @@ -905,7 +971,6 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) effective_counter |= 0x20; } break; -#if 0 case GB_MODEL_CGB_D: if (effective_counter & ((gb->io_registers[GB_IO_NR43] & 8)? 0x40 : 0x80)) { // This is so weird effective_counter |= 0xFF; @@ -926,7 +991,6 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) effective_counter |= 0x10; } break; -#endif case GB_MODEL_CGB_E: if (effective_counter & ((gb->io_registers[GB_IO_NR43] & 8)? 0x40 : 0x80)) { // This is so weird effective_counter |= 0xFF; @@ -935,7 +999,8 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) effective_counter |= 0x10; } break; - case GB_MODEL_AGB: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: /* TODO: AGBs are not affected, but AGSes are. They don't seem to follow a simple pattern like the other revisions. */ /* For the most part, AGS seems to do: @@ -950,6 +1015,7 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) { + GB_apu_run(gb, true); if (!gb->apu.global_enable && reg != GB_IO_NR52 && reg < GB_IO_WAV_START && (GB_is_cgb(gb) || ( reg != GB_IO_NR11 && @@ -962,7 +1028,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) } if (reg >= GB_IO_WAV_START && reg <= GB_IO_WAV_END && gb->apu.is_active[GB_WAVE]) { - if ((!GB_is_cgb(gb) && !gb->apu.wave_channel.wave_form_just_read) || gb->model == GB_MODEL_AGB) { + if ((!GB_is_cgb(gb) && !gb->apu.wave_channel.wave_form_just_read) || gb->model > GB_MODEL_CGB_E) { return; } reg = GB_IO_WAV_START + gb->apu.wave_channel.current_sample_index / 2; @@ -977,7 +1043,9 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) /* These registers affect the output of all 4 channels (but not the output of the PCM registers).*/ /* We call update_samples with the current value so the APU output is updated with the new outputs */ for (unsigned i = GB_N_CHANNELS; i--;) { - update_sample(gb, i, gb->apu.samples[i], 0); + int8_t sample = gb->apu.samples[i]; + gb->apu.samples[i] = 0x10; // Invalidate to force update + update_sample(gb, i, sample, 0); } break; case GB_IO_NR52: { @@ -1025,17 +1093,17 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR11: case GB_IO_NR21: { - unsigned index = reg == GB_IO_NR21? GB_SQUARE_2: GB_SQUARE_1; - gb->apu.square_channels[index].pulse_length = (0x40 - (value & 0x3f)); + GB_channel_t index = reg == GB_IO_NR21? GB_SQUARE_2: GB_SQUARE_1; + gb->apu.square_channels[index].pulse_length = (0x40 - (value & 0x3F)); if (!gb->apu.global_enable) { - value &= 0x3f; + value &= 0x3F; } break; } case GB_IO_NR12: case GB_IO_NR22: { - unsigned index = reg == GB_IO_NR22? GB_SQUARE_2: GB_SQUARE_1; + GB_channel_t index = reg == GB_IO_NR22? GB_SQUARE_2: GB_SQUARE_1; if ((value & 0xF8) == 0) { /* This disables the DAC */ gb->io_registers[reg] = value; @@ -1045,7 +1113,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) else if (gb->apu.is_active[index]) { nrx2_glitch(gb, &gb->apu.square_channels[index].current_volume, value, gb->io_registers[reg], &gb->apu.square_channels[index].volume_countdown, - &gb->apu.square_envelope_clock[index]); + &gb->apu.square_channels[index].envelope_clock); update_square_sample(gb, index); } @@ -1054,7 +1122,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR13: case GB_IO_NR23: { - unsigned index = reg == GB_IO_NR23? GB_SQUARE_2: GB_SQUARE_1; + GB_channel_t index = reg == GB_IO_NR23? GB_SQUARE_2: GB_SQUARE_1; gb->apu.square_channels[index].sample_length &= ~0xFF; gb->apu.square_channels[index].sample_length |= value & 0xFF; break; @@ -1062,19 +1130,20 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR14: case GB_IO_NR24: { - /* TODO: GB_MODEL_CGB_D fails channel_1_sweep_restart_2, don't forget when adding support for this revision! */ - unsigned index = reg == GB_IO_NR24? GB_SQUARE_2: GB_SQUARE_1; + GB_channel_t index = reg == GB_IO_NR24? GB_SQUARE_2: GB_SQUARE_1; bool was_active = gb->apu.is_active[index]; - /* TODO: When the sample length changes right before being updated, the countdown should change to the - old length, but the current sample should not change. Because our write timing isn't accurate to - the T-cycle, we hack around it by stepping the sample index backwards. */ - if ((value & 0x80) == 0 && gb->apu.is_active[index]) { + /* TODO: When the sample length changes right before being updated from ≥$700 to <$700, the countdown + should change to the old length, but the current sample should not change. Because our write + timing isn't accurate to the T-cycle, we hack around it by stepping the sample index backwards. */ + if ((value & 0x80) == 0 && gb->apu.is_active[index] && (gb->io_registers[reg] & 0x7) == 7 && (value & 7) != 7) { /* On an AGB, as well as on CGB C and earlier (TODO: Tested: 0, B and C), it behaves slightly different on double speed. */ - if (gb->model == GB_MODEL_CGB_E /* || gb->model == GB_MODEL_CGB_D */ || gb->apu.square_channels[index].sample_countdown & 1) { - if (gb->apu.square_channels[index].sample_countdown >> 1 == (gb->apu.square_channels[index].sample_length ^ 0x7FF)) { + if (gb->model == GB_MODEL_CGB_E || gb->model == GB_MODEL_CGB_D || gb->apu.square_channels[index].sample_countdown & 1) { + if (gb->apu.square_channels[index].did_tick && + gb->apu.square_channels[index].sample_countdown >> 1 == (gb->apu.square_channels[index].sample_length ^ 0x7FF)) { gb->apu.square_channels[index].current_sample_index--; gb->apu.square_channels[index].current_sample_index &= 7; + gb->apu.square_channels[index].sample_surpressed = false; } } } @@ -1085,32 +1154,46 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) if (value & 0x80) { /* Current sample index remains unchanged when restarting channels 1 or 2. It is only reset by turning the APU off. */ - gb->apu.square_envelope_clock[index].locked = false; - gb->apu.square_envelope_clock[index].clock = false; + gb->apu.square_channels[index].envelope_clock.locked = false; + gb->apu.square_channels[index].envelope_clock.clock = false; + gb->apu.square_channels[index].did_tick = false; + bool force_unsurpressed = false; if (!gb->apu.is_active[index]) { - gb->apu.square_channels[index].sample_countdown = (gb->apu.square_channels[index].sample_length ^ 0x7FF) * 2 + 6 - gb->apu.lf_div; + if (gb->model == GB_MODEL_CGB_E || gb->model == GB_MODEL_CGB_D) { + if (!(value & 4) && !(((gb->apu.square_channels[index].sample_countdown - gb->apu.square_channels[index].delay) / 2) & 0x400)) { + gb->apu.square_channels[index].current_sample_index++; + gb->apu.square_channels[index].current_sample_index &= 0x7; + force_unsurpressed = true; + } + } + gb->apu.square_channels[index].delay = 6 - gb->apu.lf_div; + gb->apu.square_channels[index].sample_countdown = (gb->apu.square_channels[index].sample_length ^ 0x7FF) * 2 + gb->apu.square_channels[index].delay; if (gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { gb->apu.square_channels[index].sample_countdown += 2; + gb->apu.square_channels[index].delay += 2; } } else { unsigned extra_delay = 0; - if (gb->model == GB_MODEL_CGB_E /* || gb->model == GB_MODEL_CGB_D */) { - if (!(value & 4) && !(((gb->apu.square_channels[index].sample_countdown - 1) / 2) & 0x400)) { + if (gb->model == GB_MODEL_CGB_E || gb->model == GB_MODEL_CGB_D) { + if (!(value & 4) && !(((gb->apu.square_channels[index].sample_countdown - 1 - gb->apu.square_channels[index].delay) / 2) & 0x400)) { gb->apu.square_channels[index].current_sample_index++; gb->apu.square_channels[index].current_sample_index &= 0x7; + gb->apu.square_channels[index].sample_surpressed = false; } /* Todo: verify with the schematics what's going on in here */ else if (gb->apu.square_channels[index].sample_length == 0x7FF && old_sample_length != 0x7FF && - (gb->apu.square_channels[index].current_sample_index & 0x80)) { + (gb->apu.square_channels[index].sample_surpressed)) { extra_delay += 2; } } /* Timing quirk: if already active, sound starts 2 (2MHz) ticks earlier.*/ - gb->apu.square_channels[index].sample_countdown = (gb->apu.square_channels[index].sample_length ^ 0x7FF) * 2 + 4 - gb->apu.lf_div + extra_delay; + gb->apu.square_channels[index].delay = 4 - gb->apu.lf_div + extra_delay; + gb->apu.square_channels[index].sample_countdown = (gb->apu.square_channels[index].sample_length ^ 0x7FF) * 2 + gb->apu.square_channels[index].delay; if (gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { gb->apu.square_channels[index].sample_countdown += 2; + gb->apu.square_channels[index].delay += 2; } } gb->apu.square_channels[index].current_volume = gb->io_registers[index == GB_SQUARE_1 ? GB_IO_NR12 : GB_IO_NR22] >> 4; @@ -1126,8 +1209,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) if ((gb->io_registers[index == GB_SQUARE_1 ? GB_IO_NR12 : GB_IO_NR22] & 0xF8) != 0 && !gb->apu.is_active[index]) { gb->apu.is_active[index] = true; update_sample(gb, index, 0, 0); - /* We use the highest bit in current_sample_index to mark this sample is not actually playing yet, */ - gb->apu.square_channels[index].current_sample_index |= 0x80; + gb->apu.square_channels[index].sample_surpressed = true && !force_unsurpressed; } if (gb->apu.square_channels[index].pulse_length == 0) { gb->apu.square_channels[index].pulse_length = 0x40; @@ -1157,16 +1239,18 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) else { gb->apu.sweep_length_addend = 0; } - gb->apu.channel_1_restart_hold = 2 - gb->apu.lf_div + GB_is_cgb(gb) * 2; - if (gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { + gb->apu.channel_1_restart_hold = 2 - gb->apu.lf_div + (GB_is_cgb(gb) && gb->model != GB_MODEL_CGB_D) * 2; + /* + if (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_C && gb->apu.lf_div) { + // TODO: This if makes channel_1_sweep_restart_2 fail on CGB-C mode gb->apu.channel_1_restart_hold += 2; - } + }*/ gb->apu.square_sweep_countdown = ((gb->io_registers[GB_IO_NR10] >> 4) & 7) ^ 7; } } /* APU glitch - if length is enabled while the DIV-divider's LSB is 1, tick the length once. */ - if ((value & 0x40) && + if (((value & 0x40) || (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_B)) && // Current value is irrelevant on CGB-B and older !gb->apu.square_channels[index].length_enabled && (gb->apu.div_divider & 1) && gb->apu.square_channels[index].pulse_length) { @@ -1189,10 +1273,10 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR30: gb->apu.wave_channel.enable = value & 0x80; if (!gb->apu.wave_channel.enable) { - gb->apu.channel_3_pulsed = false; + gb->apu.wave_channel.pulsed = false; if (gb->apu.is_active[GB_WAVE]) { // Todo: I assume this happens on pre-CGB models; test this with an audible test - if (gb->apu.wave_channel.sample_countdown == 0 && gb->model < GB_MODEL_AGB) { + if (gb->apu.wave_channel.sample_countdown == 0 && gb->model <= GB_MODEL_CGB_E) { gb->apu.wave_channel.current_sample_byte = gb->io_registers[GB_IO_WAV_START + (gb->pc & 0xF)]; } else if (gb->apu.wave_channel.wave_form_just_read && gb->model <= GB_MODEL_CGB_C) { @@ -1207,7 +1291,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) gb->apu.wave_channel.pulse_length = (0x100 - value); break; case GB_IO_NR32: - gb->apu.wave_channel.shift = (uint8_t[]){4, 0, 1, 2}[(value >> 5) & 3]; + gb->apu.wave_channel.shift = (const uint8_t[]){4, 0, 1, 2}[(value >> 5) & 3]; if (gb->apu.is_active[GB_WAVE]) { update_wave_sample(gb, 0); } @@ -1220,7 +1304,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) gb->apu.wave_channel.sample_length &= 0xFF; gb->apu.wave_channel.sample_length |= (value & 7) << 8; if (value & 0x80) { - gb->apu.channel_3_pulsed = true; + gb->apu.wave_channel.pulsed = true; /* DMG bug: wave RAM gets corrupted if the channel is retriggerred 1 cycle before the APU reads from it. */ if (!GB_is_cgb(gb) && @@ -1232,10 +1316,13 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) DMG-B: Most of them behave as emulated. A few behave differently. SGB: As far as I know, all tested instances behave as emulated. MGB, SGB2: Most instances behave non-deterministically, a few behave as emulated. + + For DMG-B emulation I emulate the most common behavior, which blargg's tests expect (not my own DMG-B, which fails it) + For MGB emulation, I emulate my Game Boy Light, which happens to be deterministic. Additionally, I believe DMGs, including those we behave differently than emulated, are all deterministic. */ - if (offset < 4) { + if (offset < 4 && gb->model != GB_MODEL_MGB) { gb->io_registers[GB_IO_WAV_START] = gb->io_registers[GB_IO_WAV_START + offset]; } else { @@ -1263,7 +1350,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) } /* APU glitch - if length is enabled while the DIV-divider's LSB is 1, tick the length once. */ - if ((value & 0x40) && + if (((value & 0x40) || (GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_B)) && // Current value is irrelevant on CGB-B and older !gb->apu.wave_channel.length_enabled && (gb->apu.div_divider & 1) && gb->apu.wave_channel.pulse_length) { @@ -1285,7 +1372,7 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) /* Noise Channel */ case GB_IO_NR41: { - gb->apu.noise_channel.pulse_length = (0x40 - (value & 0x3f)); + gb->apu.noise_channel.pulse_length = (0x40 - (value & 0x3F)); break; } @@ -1299,9 +1386,9 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) else if (gb->apu.is_active[GB_NOISE]) { nrx2_glitch(gb, &gb->apu.noise_channel.current_volume, value, gb->io_registers[reg], &gb->apu.noise_channel.volume_countdown, - &gb->apu.noise_envelope_clock); + &gb->apu.noise_channel.envelope_clock); update_sample(gb, GB_NOISE, - gb->apu.current_lfsr_sample ? + gb->apu.noise_channel.current_lfsr_sample ? gb->apu.noise_channel.current_volume : 0, 0); } @@ -1314,18 +1401,18 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) bool old_bit = (effective_counter >> (gb->io_registers[GB_IO_NR43] >> 4)) & 1; gb->io_registers[GB_IO_NR43] = value; bool new_bit = (effective_counter >> (gb->io_registers[GB_IO_NR43] >> 4)) & 1; - if (gb->apu.channel_4_countdown_reloaded) { + if (gb->apu.noise_channel.countdown_reloaded) { unsigned divisor = (gb->io_registers[GB_IO_NR43] & 0x07) << 2; if (!divisor) divisor = 2; if (gb->model > GB_MODEL_CGB_C) { gb->apu.noise_channel.counter_countdown = - divisor + (divisor == 2? 0 : (uint8_t[]){2, 1, 0, 3}[(gb->apu.noise_channel.alignment) & 3]); + divisor + (divisor == 2? 0 : (const uint8_t[]){2, 1, 0, 3}[(gb->apu.noise_channel.alignment) & 3]); } else { gb->apu.noise_channel.counter_countdown = - divisor + (divisor == 2? 0 : (uint8_t[]){2, 1, 4, 3}[(gb->apu.noise_channel.alignment) & 3]); + divisor + (divisor == 2? 0 : (const uint8_t[]){2, 1, 4, 3}[(gb->apu.noise_channel.alignment) & 3]); } - gb->apu.channel_4_delta = 0; + gb->apu.noise_channel.delta = 0; } /* Step LFSR */ if (new_bit && (!old_bit || gb->model <= GB_MODEL_CGB_C)) { @@ -1344,15 +1431,15 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) case GB_IO_NR44: { if (value & 0x80) { - gb->apu.noise_envelope_clock.locked = false; - gb->apu.noise_envelope_clock.clock = false; + gb->apu.noise_channel.envelope_clock.locked = false; + gb->apu.noise_channel.envelope_clock.clock = false; if (!GB_is_cgb(gb) && (gb->apu.noise_channel.alignment & 3) != 0) { - gb->apu.channel_4_dmg_delayed_start = 6; + gb->apu.noise_channel.dmg_delayed_start = 6; } else { unsigned divisor = (gb->io_registers[GB_IO_NR43] & 0x07) << 2; if (!divisor) divisor = 2; - gb->apu.channel_4_delta = 0; + gb->apu.noise_channel.delta = 0; gb->apu.noise_channel.counter_countdown = divisor + 4; if (divisor == 2) { if (gb->model <= GB_MODEL_CGB_C) { @@ -1367,15 +1454,15 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) } else { if (gb->model <= GB_MODEL_CGB_C) { - gb->apu.noise_channel.counter_countdown += (uint8_t[]){2, 1, 4, 3}[gb->apu.noise_channel.alignment & 3]; + gb->apu.noise_channel.counter_countdown += (const uint8_t[]){2, 1, 4, 3}[gb->apu.noise_channel.alignment & 3]; } else { - gb->apu.noise_channel.counter_countdown += (uint8_t[]){2, 1, 0, 3}[gb->apu.noise_channel.alignment & 3]; + gb->apu.noise_channel.counter_countdown += (const uint8_t[]){2, 1, 0, 3}[gb->apu.noise_channel.alignment & 3]; } if (((gb->apu.noise_channel.alignment + 1) & 3) < 2) { if ((gb->io_registers[GB_IO_NR43] & 0x07) == 1) { gb->apu.noise_channel.counter_countdown -= 2; - gb->apu.channel_4_delta = 2; + gb->apu.noise_channel.delta = 2; } else { gb->apu.noise_channel.counter_countdown -= 4; @@ -1405,12 +1492,12 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) cases. */ if (gb->apu.is_active[GB_NOISE]) { update_sample(gb, GB_NOISE, - gb->apu.current_lfsr_sample ? + gb->apu.noise_channel.current_lfsr_sample ? gb->apu.noise_channel.current_volume : 0, 0); } gb->apu.noise_channel.lfsr = 0; - gb->apu.current_lfsr_sample = false; + gb->apu.noise_channel.current_lfsr_sample = false; gb->apu.noise_channel.volume_countdown = gb->io_registers[GB_IO_NR42] & 7; if (!gb->apu.is_active[GB_NOISE] && (gb->io_registers[GB_IO_NR42] & 0xF8) != 0) { @@ -1455,8 +1542,6 @@ void GB_set_sample_rate(GB_gameboy_t *gb, unsigned sample_rate) if (sample_rate) { gb->apu_output.highpass_rate = pow(0.999958, GB_get_clock_rate(gb) / (double)sample_rate); } - gb->apu_output.rate_set_in_clocks = false; - GB_apu_update_cycles_per_sample(gb); } void GB_set_sample_rate_by_clocks(GB_gameboy_t *gb, double cycles_per_sample) @@ -1466,10 +1551,13 @@ void GB_set_sample_rate_by_clocks(GB_gameboy_t *gb, double cycles_per_sample) GB_set_sample_rate(gb, 0); return; } - gb->apu_output.cycles_per_sample = cycles_per_sample; gb->apu_output.sample_rate = GB_get_clock_rate(gb) / cycles_per_sample * 2; gb->apu_output.highpass_rate = pow(0.999958, cycles_per_sample); - gb->apu_output.rate_set_in_clocks = true; +} + +unsigned GB_get_sample_rate(GB_gameboy_t *gb) +{ + return gb->apu_output.sample_rate; } void GB_apu_set_sample_callback(GB_gameboy_t *gb, GB_sample_callback_t callback) @@ -1482,15 +1570,195 @@ void GB_set_highpass_filter_mode(GB_gameboy_t *gb, GB_highpass_mode_t mode) gb->apu_output.highpass_mode = mode; } -void GB_apu_update_cycles_per_sample(GB_gameboy_t *gb) +void GB_set_interference_volume(GB_gameboy_t *gb, double volume) { - if (gb->apu_output.rate_set_in_clocks) return; - if (gb->apu_output.sample_rate) { - gb->apu_output.cycles_per_sample = 2 * GB_get_clock_rate(gb) / (double)gb->apu_output.sample_rate; /* 2 * because we use 8MHz units */ + gb->apu_output.interference_volume = volume; +} + +typedef struct __attribute__((packed)) { + uint32_t format_chunk; // = BE32('FORM') + uint32_t size; // = BE32(file size - 8) + uint32_t format; // = BE32('AIFC') + + uint32_t fver_chunk; // = BE32('FVER') + uint32_t fver_size; // = BE32(4) + uint32_t fver; + + uint32_t comm_chunk; // = BE32('COMM') + uint32_t comm_size; // = BE32(0x18) + + uint16_t channels; // = BE16(2) + uint32_t samples_per_channel; // = BE32(total number of samples / 2) + uint16_t bit_depth; // = BE16(16) + uint16_t frequency_exponent; + uint64_t frequency_significand; + uint32_t compression_type; // = 'NONE' (BE) or 'twos' (LE) + uint16_t compression_name; // = 0 + + uint32_t ssnd_chunk; // = BE32('SSND') + uint32_t ssnd_size; // = BE32(length of samples - 8) + uint32_t ssnd_offset; // = 0 + uint32_t ssnd_block; // = 0 +} aiff_header_t; + +typedef struct __attribute__((packed)) { + uint32_t marker; // = BE32('RIFF') + uint32_t size; // = LE32(file size - 8) + uint32_t type; // = BE32('WAVE') + + uint32_t fmt_chunk; // = BE32('fmt ') + uint32_t fmt_size; // = LE16(16) + uint16_t format; // = LE16(1) + uint16_t channels; // = LE16(2) + uint32_t sample_rate; // = LE32(sample_rate) + uint32_t byte_rate; // = LE32(sample_rate * 4) + uint16_t frame_size; // = LE32(4) + uint16_t bit_depth; // = LE16(16) + + uint32_t data_chunk; // = BE32('data') + uint32_t data_size; // = LE32(length of samples) +} wav_header_t; + + +int GB_start_audio_recording(GB_gameboy_t *gb, const char *path, GB_audio_format_t format) +{ + if (gb->apu_output.sample_rate == 0) { + return EINVAL; + } + + if (gb->apu_output.output_file) { + GB_stop_audio_recording(gb); + } + gb->apu_output.output_file = fopen(path, "wb"); + if (!gb->apu_output.output_file) return errno; + + gb->apu_output.output_format = format; + switch (format) { + case GB_AUDIO_FORMAT_RAW: + return 0; + case GB_AUDIO_FORMAT_AIFF: { + aiff_header_t header = {0,}; + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + return errno; + } + return 0; + } + case GB_AUDIO_FORMAT_WAV: { + wav_header_t header = {0,}; + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + return errno; + } + return 0; + } + default: + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + return EINVAL; + } +} +int GB_stop_audio_recording(GB_gameboy_t *gb) +{ + if (!gb->apu_output.output_file) { + int ret = gb->apu_output.output_error ?: -1; + gb->apu_output.output_error = 0; + return ret; + } + gb->apu_output.output_error = 0; + switch (gb->apu_output.output_format) { + case GB_AUDIO_FORMAT_RAW: + break; + case GB_AUDIO_FORMAT_AIFF: { + size_t file_size = ftell(gb->apu_output.output_file); + size_t frames = (file_size - sizeof(aiff_header_t)) / sizeof(GB_sample_t); + aiff_header_t header = { + .format_chunk = BE32('FORM'), + .size = BE32(file_size - 8), + .format = BE32('AIFC'), + + .fver_chunk = BE32('FVER'), + .fver_size = BE32(4), + .fver = BE32(0xA2805140), + + .comm_chunk = BE32('COMM'), + .comm_size = BE32(0x18), + .channels = BE16(2), + .samples_per_channel = BE32(frames), + .bit_depth = BE16(16), +#ifdef GB_BIG_ENDIAN + .compression_type = 'NONE', +#else + .compression_type = 'twos', +#endif + .compression_name = 0, + .ssnd_chunk = BE32('SSND'), + .ssnd_size = BE32(frames * sizeof(GB_sample_t) - 8), + .ssnd_offset = 0, + .ssnd_block = 0, + }; + + uint64_t significand = gb->apu_output.sample_rate; + uint16_t exponent = 0x403E; + while ((int64_t)significand > 0) { + significand <<= 1; + exponent--; + } + header.frequency_exponent = BE16(exponent); + header.frequency_significand = BE64(significand); + + fseek(gb->apu_output.output_file, 0, SEEK_SET); + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + gb->apu_output.output_error = errno; + } + break; + } + case GB_AUDIO_FORMAT_WAV: { + size_t file_size = ftell(gb->apu_output.output_file); + size_t frames = (file_size - sizeof(wav_header_t)) / sizeof(GB_sample_t); + wav_header_t header = { + .marker = BE32('RIFF'), + .size = LE32(file_size - 8), + .type = BE32('WAVE'), + + .fmt_chunk = BE32('fmt '), + .fmt_size = LE16(16), + .format = LE16(1), + .channels = LE16(2), + .sample_rate = LE32(gb->apu_output.sample_rate), + .byte_rate = LE32(gb->apu_output.sample_rate * 4), + .frame_size = LE32(4), + .bit_depth = LE16(16), + + .data_chunk = BE32('data'), + .data_size = LE32(frames * sizeof(GB_sample_t)), + }; + + fseek(gb->apu_output.output_file, 0, SEEK_SET); + if (fwrite(&header, sizeof(header), 1, gb->apu_output.output_file) != 1) { + gb->apu_output.output_error = errno; + } + break; + } } + fclose(gb->apu_output.output_file); + gb->apu_output.output_file = NULL; + + int ret = gb->apu_output.output_error; + gb->apu_output.output_error = 0; + return ret; } -void GB_set_interference_volume(GB_gameboy_t *gb, double volume) + +void GB_set_channel_muted(GB_gameboy_t *gb, GB_channel_t channel, bool muted) { - gb->apu_output.interference_volume = volume; + assert(channel < GB_N_CHANNELS); + gb->apu_output.channel_muted[channel] = muted; +} + +bool GB_is_channel_muted(GB_gameboy_t *gb, GB_channel_t channel) +{ + return gb->apu_output.channel_muted[channel]; } diff --git a/thirdparty/SameBoy/Core/apu.h b/thirdparty/SameBoy/Core/apu.h index ead4088ae..8f51c7a13 100644 --- a/thirdparty/SameBoy/Core/apu.h +++ b/thirdparty/SameBoy/Core/apu.h @@ -3,8 +3,8 @@ #include #include #include -#include "gb_struct_def.h" - +#include +#include "defs.h" #ifdef GB_INTERNAL /* Speed = 1 / Length (in seconds) */ @@ -38,13 +38,13 @@ typedef struct double right; } GB_double_sample_t; -enum GB_CHANNELS { +typedef enum { GB_SQUARE_1, GB_SQUARE_2, GB_WAVE, GB_NOISE, GB_N_CHANNELS -}; +} GB_channel_t; typedef struct { @@ -58,7 +58,7 @@ typedef void (*GB_sample_callback_t)(GB_gameboy_t *gb, GB_sample_t *sample); typedef struct { bool global_enable; - uint8_t apu_cycles; + uint16_t apu_cycles; uint8_t samples[GB_N_CHANNELS]; bool is_active[GB_N_CHANNELS]; @@ -75,19 +75,22 @@ typedef struct uint16_t shadow_sweep_sample_length; bool unshifted_sweep; bool enable_zombie_calculate_stepping; - + + uint8_t channel_1_restart_hold; + uint16_t channel1_completed_addend; struct { uint16_t pulse_length; // Reloaded from NRX1 (xorred), in 256Hz DIV ticks uint8_t current_volume; // Reloaded from NRX2 uint8_t volume_countdown; // Reloaded from NRX2 - uint8_t current_sample_index; /* For save state compatibility, - highest bit is reused (See NR14/NR24's - write code)*/ + uint8_t current_sample_index; + bool sample_surpressed; uint16_t sample_countdown; // in APU ticks (Reloaded from sample_length, xorred $7FF) uint16_t sample_length; // From NRX3, NRX4, in APU ticks bool length_enabled; // NRX4 - + GB_envelope_clock_t envelope_clock; + uint8_t delay; // Hack for CGB D/E phantom step due to how sample_countdown is implemented in SameBoy + bool did_tick; } square_channels[2]; struct { @@ -100,9 +103,9 @@ typedef struct uint16_t sample_countdown; // in APU ticks (Reloaded from sample_length, xorred $7FF) uint8_t current_sample_index; uint8_t current_sample_byte; // Current sample byte. - - GB_PADDING(int8_t, wave_form)[32]; bool wave_form_just_read; + bool pulsed; + uint8_t bugged_read_countdown; } wave_channel; struct { @@ -113,32 +116,24 @@ typedef struct bool narrow; uint8_t counter_countdown; // Counts from 0-7 to 0 to tick counter (Scaled from 512KHz to 2MHz) - uint8_t __padding; uint16_t counter; // A bit from this 14-bit register ticks LFSR bool length_enabled; // NR44 uint8_t alignment; // If (NR43 & 7) != 0, samples are aligned to 512KHz clock instead of // 1MHz. This variable keeps track of the alignment. - + bool current_lfsr_sample; + int8_t delta; + bool countdown_reloaded; + uint8_t dmg_delayed_start; + GB_envelope_clock_t envelope_clock; } noise_channel; - /* Todo: merge these into their structs when breaking save state compatibility */ -#define GB_SKIP_DIV_EVENT_INACTIVE 0 -#define GB_SKIP_DIV_EVENT_SKIPPED 1 -#define GB_SKIP_DIV_EVENT_SKIP 2 - uint8_t skip_div_event; - bool current_lfsr_sample; + enum { + GB_SKIP_DIV_EVENT_INACTIVE, + GB_SKIP_DIV_EVENT_SKIPPED, + GB_SKIP_DIV_EVENT_SKIP, + } skip_div_event:8; uint8_t pcm_mask[2]; // For CGB-0 to CGB-C PCM read glitch - uint8_t channel_1_restart_hold; - int8_t channel_4_delta; - bool channel_4_countdown_reloaded; - uint8_t channel_4_dmg_delayed_start; - uint16_t channel1_completed_addend; - - GB_envelope_clock_t square_envelope_clock[2]; - GB_envelope_clock_t noise_envelope_clock; - bool channel_3_pulsed; - bool channel_3_delayed_bugged_read; } GB_apu_t; typedef enum { @@ -148,11 +143,16 @@ typedef enum { GB_HIGHPASS_MAX } GB_highpass_mode_t; +typedef enum { + GB_AUDIO_FORMAT_RAW, // Native endian + GB_AUDIO_FORMAT_AIFF, // Native endian + GB_AUDIO_FORMAT_WAV, +} GB_audio_format_t; + typedef struct { unsigned sample_rate; - double sample_cycles; // In 8 MHz units - double cycles_per_sample; + unsigned sample_cycles; // Counts by sample_rate until it reaches the clock frequency // Samples are NOT normalized to MAX_CH_AMP * 4 at this stage! unsigned cycles_since_render; @@ -160,6 +160,7 @@ typedef struct { GB_sample_t current_sample[GB_N_CHANNELS]; GB_sample_t summed_samples[GB_N_CHANNELS]; double dac_discharge[GB_N_CHANNELS]; + bool channel_muted[GB_N_CHANNELS]; GB_highpass_mode_t highpass_mode; double highpass_rate; @@ -167,26 +168,33 @@ typedef struct { GB_sample_callback_t sample_callback; - bool rate_set_in_clocks; double interference_volume; double interference_highpass; + + FILE *output_file; + GB_audio_format_t output_format; + int output_error; + } GB_apu_output_t; +void GB_set_channel_muted(GB_gameboy_t *gb, GB_channel_t channel, bool muted); +bool GB_is_channel_muted(GB_gameboy_t *gb, GB_channel_t channel); void GB_set_sample_rate(GB_gameboy_t *gb, unsigned sample_rate); +unsigned GB_get_sample_rate(GB_gameboy_t *gb); void GB_set_sample_rate_by_clocks(GB_gameboy_t *gb, double cycles_per_sample); /* Cycles are in 8MHz units */ void GB_set_highpass_filter_mode(GB_gameboy_t *gb, GB_highpass_mode_t mode); void GB_set_interference_volume(GB_gameboy_t *gb, double volume); void GB_apu_set_sample_callback(GB_gameboy_t *gb, GB_sample_callback_t callback); - +int GB_start_audio_recording(GB_gameboy_t *gb, const char *path, GB_audio_format_t format); +int GB_stop_audio_recording(GB_gameboy_t *gb); #ifdef GB_INTERNAL -bool GB_apu_is_DAC_enabled(GB_gameboy_t *gb, unsigned index); -void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value); -uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg); -void GB_apu_div_event(GB_gameboy_t *gb); -void GB_apu_div_secondary_event(GB_gameboy_t *gb); -void GB_apu_init(GB_gameboy_t *gb); -void GB_apu_run(GB_gameboy_t *gb); -void GB_apu_update_cycles_per_sample(GB_gameboy_t *gb); +internal bool GB_apu_is_DAC_enabled(GB_gameboy_t *gb, GB_channel_t index); +internal void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value); +internal uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg); +internal void GB_apu_div_event(GB_gameboy_t *gb); +internal void GB_apu_div_secondary_event(GB_gameboy_t *gb); +internal void GB_apu_init(GB_gameboy_t *gb); +internal void GB_apu_run(GB_gameboy_t *gb, bool force); #endif #endif /* apu_h */ diff --git a/thirdparty/SameBoy/Core/camera.c b/thirdparty/SameBoy/Core/camera.c index 7751f18fe..22ecf5de0 100644 --- a/thirdparty/SameBoy/Core/camera.c +++ b/thirdparty/SameBoy/Core/camera.c @@ -3,7 +3,7 @@ static uint32_t noise_seed = 0; /* This is not a complete emulation of the camera chip. Only the features used by the Game Boy Camera ROMs are supported. - We also do not emulate the timing of the real cart, as it might be actually faster than the webcam. */ + We also do not emulate the timing of the real cart when a webcam is used, as it might be actually faster than the webcam. */ static uint8_t generate_noise(uint8_t x, uint8_t y) { @@ -55,10 +55,6 @@ static long get_processed_color(GB_gameboy_t *gb, uint8_t x, uint8_t y) uint8_t GB_camera_read_image(GB_gameboy_t *gb, uint16_t addr) { - if (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1) { - /* Forbid reading the image while the camera is busy. */ - return 0xFF; - } uint8_t tile_x = addr / 0x10 % 0x10; uint8_t tile_y = addr / 0x10 / 0x10; @@ -112,6 +108,12 @@ void GB_set_camera_get_pixel_callback(GB_gameboy_t *gb, GB_camera_get_pixel_call void GB_set_camera_update_request_callback(GB_gameboy_t *gb, GB_camera_update_request_callback_t callback) { + if (gb->camera_countdown > 0 && callback) { + GB_log(gb, "Camera update request callback set while camera was proccessing, clearing camera countdown.\n"); + gb->camera_countdown = 0; + GB_camera_updated(gb); + } + gb->camera_update_request_callback = callback; } @@ -125,12 +127,25 @@ void GB_camera_write_register(GB_gameboy_t *gb, uint16_t addr, uint8_t value) addr &= 0x7F; if (addr == GB_CAMERA_SHOOT_AND_1D_FLAGS) { value &= 0x7; - noise_seed = rand(); - if ((value & 1) && !(gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1) && gb->camera_update_request_callback) { - /* If no callback is set, ignore the write as if the camera is instantly done */ - gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] |= 1; - gb->camera_update_request_callback(gb); + noise_seed = GB_random(); + if ((value & 1) && !(gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1)) { + if (gb->camera_update_request_callback) { + gb->camera_update_request_callback(gb); + } + else { + /* If no callback is set, wait the amount of time the real camera would take before clearing the busy bit */ + uint16_t exposure = (gb->camera_registers[GB_CAMERA_EXPOSURE_HIGH] << 8) | gb->camera_registers[GB_CAMERA_EXPOSURE_LOW]; + gb->camera_countdown = 129792 + ((gb->camera_registers[GB_CAMERA_GAIN_AND_EDGE_ENHACEMENT_FLAGS] & 0x80)? 0 : 2048) + (exposure * 64) + (gb->camera_alignment & 4); + } } + + if (!(value & 1) && (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1)) { + /* We don't support cancelling a camera shoot */ + GB_log(gb, "ROM attempted to cancel camera shoot, which is currently not supported. The camera shoot will not be cancelled.\n"); + value |= 1; + } + + gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] = value; } else { if (addr >= 0x36) { diff --git a/thirdparty/SameBoy/Core/camera.h b/thirdparty/SameBoy/Core/camera.h index 21c69b68e..1461f3adf 100644 --- a/thirdparty/SameBoy/Core/camera.h +++ b/thirdparty/SameBoy/Core/camera.h @@ -1,7 +1,7 @@ #ifndef camera_h #define camera_h #include -#include "gb_struct_def.h" +#include "defs.h" typedef uint8_t (*GB_camera_get_pixel_callback_t)(GB_gameboy_t *gb, uint8_t x, uint8_t y); typedef void (*GB_camera_update_request_callback_t)(GB_gameboy_t *gb); diff --git a/thirdparty/SameBoy/Core/cheats.c b/thirdparty/SameBoy/Core/cheats.c index c7c43fe3f..8b5a7a0ee 100644 --- a/thirdparty/SameBoy/Core/cheats.c +++ b/thirdparty/SameBoy/Core/cheats.c @@ -32,10 +32,11 @@ static uint16_t bank_for_addr(GB_gameboy_t *gb, uint16_t addr) void GB_apply_cheat(GB_gameboy_t *gb, uint16_t address, uint8_t *value) { - if (!gb->cheat_enabled) return; - if (!gb->boot_rom_finished) return; + if (likely(!gb->cheat_enabled)) return; + if (likely(gb->cheat_count == 0)) return; // Optimization + if (unlikely(!gb->boot_rom_finished)) return; const GB_cheat_hash_t *hash = gb->cheat_hash[hash_addr(address)]; - if (hash) { + if (unlikely(hash)) { for (unsigned i = 0; i < hash->size; i++) { GB_cheat_t *cheat = hash->cheats[i]; if (cheat->address == address && cheat->enabled && (!cheat->use_old_value || cheat->old_value == *value)) { @@ -250,7 +251,7 @@ void GB_load_cheats(GB_gameboy_t *gb, const char *path) uint32_t struct_size = 0; fread(&magic, sizeof(magic), 1, f); fread(&struct_size, sizeof(struct_size), 1, f); - if (magic != CHEAT_MAGIC && magic != __builtin_bswap32(CHEAT_MAGIC)) { + if (magic != LE32(CHEAT_MAGIC) && magic != BE32(CHEAT_MAGIC)) { GB_log(gb, "The file is not a SameBoy cheat database"); return; } @@ -267,7 +268,7 @@ void GB_load_cheats(GB_gameboy_t *gb, const char *path) GB_cheat_t cheat; while (fread(&cheat, sizeof(cheat), 1, f)) { - if (magic == __builtin_bswap32(CHEAT_MAGIC)) { + if (magic != CHEAT_MAGIC) { cheat.address = __builtin_bswap16(cheat.address); cheat.bank = __builtin_bswap16(cheat.bank); } diff --git a/thirdparty/SameBoy/Core/cheats.h b/thirdparty/SameBoy/Core/cheats.h index cf8aa20d9..f9c076c64 100644 --- a/thirdparty/SameBoy/Core/cheats.h +++ b/thirdparty/SameBoy/Core/cheats.h @@ -1,6 +1,6 @@ #ifndef cheats_h #define cheats_h -#include "gb_struct_def.h" +#include "defs.h" #define GB_CHEAT_ANY_BANK 0xFFFF @@ -20,7 +20,7 @@ int GB_save_cheats(GB_gameboy_t *gb, const char *path); #ifdef GB_DISABLE_CHEATS #define GB_apply_cheat(...) #else -void GB_apply_cheat(GB_gameboy_t *gb, uint16_t address, uint8_t *value); +internal void GB_apply_cheat(GB_gameboy_t *gb, uint16_t address, uint8_t *value); #endif #endif diff --git a/thirdparty/SameBoy/Core/debugger.c b/thirdparty/SameBoy/Core/debugger.c index db4b02fd9..f2554e95e 100644 --- a/thirdparty/SameBoy/Core/debugger.c +++ b/thirdparty/SameBoy/Core/debugger.c @@ -155,12 +155,20 @@ static const char *value_to_string(GB_gameboy_t *gb, uint16_t value, bool prefer return output; } +static GB_symbol_map_t *get_symbol_map(GB_gameboy_t *gb, uint16_t bank) +{ + if (bank >= gb->n_symbol_maps) { + return NULL; + } + return gb->bank_symbols[bank]; +} + static const char *debugger_value_to_string(GB_gameboy_t *gb, value_t value, bool prefer_name) { if (!value.has_bank) return value_to_string(gb, value.value, prefer_name); static __thread char output[256]; - const GB_bank_symbol_t *symbol = GB_map_find_symbol(gb->bank_symbols[value.bank], value.value); + const GB_bank_symbol_t *symbol = GB_map_find_symbol(get_symbol_map(gb, value.bank), value.value); if (symbol && (value.value - symbol->addr > 0x1000 || symbol->addr == 0) ) { symbol = NULL; @@ -702,7 +710,7 @@ static const char *lstrip(const char *str) #define STOPPED_ONLY \ if (!gb->debug_stopped) { \ -GB_log(gb, "Program is running. \n"); \ +GB_log(gb, "Program is running, use 'interrupt' to stop execution.\n"); \ return false; \ } @@ -741,23 +749,25 @@ static bool cont(GB_gameboy_t *gb, char *arguments, char *modifiers, const debug return false; } -static bool next(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +static bool interrupt(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS - STOPPED_ONLY - + if (strlen(lstrip(arguments))) { print_usage(gb, command); return true; } - - gb->debug_stopped = false; - gb->debug_next_command = true; - gb->debug_call_depth = 0; - return false; + + if (gb->debug_stopped) { + GB_log(gb, "Program already stopped.\n"); + return true; + } + + gb->debug_stopped = true; + return true; } -static bool step(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +static bool next(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS STOPPED_ONLY @@ -767,10 +777,13 @@ static bool step(GB_gameboy_t *gb, char *arguments, char *modifiers, const debug return true; } + gb->debug_stopped = false; + gb->debug_next_command = true; + gb->debug_call_depth = 0; return false; } -static bool finish(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +static bool step(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS STOPPED_ONLY @@ -780,13 +793,10 @@ static bool finish(GB_gameboy_t *gb, char *arguments, char *modifiers, const deb return true; } - gb->debug_stopped = false; - gb->debug_fin_command = true; - gb->debug_call_depth = 0; return false; } -static bool stack_leak_detection(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +static bool finish(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS STOPPED_ONLY @@ -797,7 +807,7 @@ static bool stack_leak_detection(GB_gameboy_t *gb, char *arguments, char *modifi } gb->debug_stopped = false; - gb->stack_leak_detection = true; + gb->debug_fin_command = true; gb->debug_call_depth = 0; return false; } @@ -911,13 +921,14 @@ static char *symbol_completer(GB_gameboy_t *gb, const char *string, uintptr_t *_ size_t length = strlen(symbol_prefix); while (context->bank < 0x200) { - if (gb->bank_symbols[context->bank] == NULL || - context->symbol >= gb->bank_symbols[context->bank]->n_symbols) { + GB_symbol_map_t *map = get_symbol_map(gb, context->bank); + if (map == NULL || + context->symbol >= map->n_symbols) { context->bank++; context->symbol = 0; continue; } - const char *candidate = gb->bank_symbols[context->bank]->symbols[context->symbol++].name; + const char *candidate = map->symbols[context->symbol++].name; if (memcmp(symbol_prefix, candidate, length) == 0) { return strdup(candidate + length); } @@ -1451,7 +1462,7 @@ static bool examine(GB_gameboy_t *gb, char *arguments, char *modifiers, const de while (count) { GB_log(gb, "%02x:%04x: ", addr.bank, addr.value); for (unsigned i = 0; i < 16 && count; i++) { - GB_log(gb, "%02x ", GB_read_memory(gb, addr.value + i)); + GB_log(gb, "%02x ", GB_safe_read_memory(gb, addr.value + i)); count--; } addr.value += 16; @@ -1464,7 +1475,7 @@ static bool examine(GB_gameboy_t *gb, char *arguments, char *modifiers, const de while (count) { GB_log(gb, "%04x: ", addr.value); for (unsigned i = 0; i < 16 && count; i++) { - GB_log(gb, "%02x ", GB_read_memory(gb, addr.value + i)); + GB_log(gb, "%02x ", GB_safe_read_memory(gb, addr.value + i)); count--; } addr.value += 16; @@ -1537,15 +1548,22 @@ static bool mbc(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg } else { static const char *const mapper_names[] = { - [GB_MBC1] = "MBC1", - [GB_MBC2] = "MBC2", - [GB_MBC3] = "MBC3", - [GB_MBC5] = "MBC5", - [GB_HUC1] = "HUC-1", - [GB_HUC3] = "HUC-3", + [GB_MBC1] = "MBC1", + [GB_MBC2] = "MBC2", + [GB_MBC3] = "MBC3", + [GB_MBC5] = "MBC5", + [GB_MBC7] = "MBC7", + [GB_MMM01] = "MMM01", + [GB_HUC1] = "HUC-1", + [GB_HUC3] = "HUC-3", + [GB_CAMERA] = "MAC-GBD", + }; GB_log(gb, "%s\n", mapper_names[cartridge->mbc_type]); } + if (cartridge->mbc_type == GB_MMM01 || cartridge->mbc_type == GB_MBC1) { + GB_log(gb, "Current mapped ROM0 bank: %x\n", gb->mbc_rom0_bank); + } GB_log(gb, "Current mapped ROM bank: %x\n", gb->mbc_rom_bank); if (cartridge->has_ram) { GB_log(gb, "Current mapped RAM bank: %x\n", gb->mbc_ram_bank); @@ -1596,12 +1614,28 @@ static bool backtrace(GB_gameboy_t *gb, char *arguments, char *modifiers, const return true; } +static char *keep_completer(GB_gameboy_t *gb, const char *string, uintptr_t *context) +{ + size_t length = strlen(string); + const char *suggestions[] = {"keep"}; + while (*context < sizeof(suggestions) / sizeof(suggestions[0])) { + if (memcmp(string, suggestions[*context], length) == 0) { + return strdup(suggestions[(*context)++] + length); + } + (*context)++; + } + return NULL; +} + static bool ticks(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS STOPPED_ONLY - - if (strlen(lstrip(arguments))) { + bool keep = false; + if (strcmp(lstrip(arguments), "keep") == 0) { + keep = true; + } + else if (lstrip(arguments)[0]) { print_usage(gb, command); return true; } @@ -1610,8 +1644,10 @@ static bool ticks(GB_gameboy_t *gb, char *arguments, char *modifiers, const debu GB_log(gb, "M-cycles: %llu\n", (unsigned long long)gb->debugger_ticks / 4); GB_log(gb, "Absolute 8MHz ticks: %llu\n", (unsigned long long)gb->absolute_debugger_ticks); GB_log(gb, "Tick count reset.\n"); - gb->debugger_ticks = 0; - gb->absolute_debugger_ticks = 0; + if (!keep) { + gb->debugger_ticks = 0; + gb->absolute_debugger_ticks = 0; + } return true; } @@ -1638,9 +1674,9 @@ static bool palettes(GB_gameboy_t *gb, char *arguments, char *modifiers, const d } } - GB_log(gb, "Sprites palettes: \n"); + GB_log(gb, "Object palettes: \n"); for (unsigned i = 0; i < 32; i++) { - GB_log(gb, "%04x ", ((uint16_t *)&gb->sprite_palettes_data)[i]); + GB_log(gb, "%04x ", ((uint16_t *)&gb->object_palettes_data)[i]); if (i % 4 == 3) { GB_log(gb, "\n"); } @@ -1649,6 +1685,29 @@ static bool palettes(GB_gameboy_t *gb, char *arguments, char *modifiers, const d return true; } +static bool dma(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) +{ + NO_MODIFIERS + if (strlen(lstrip(arguments))) { + print_usage(gb, command); + return true; + } + + if (!GB_is_dma_active(gb)) { + GB_log(gb, "DMA is inactive\n"); + return true; + } + + if (gb->dma_current_dest == 0xFF) { + GB_log(gb, "DMA warming up\n"); // Shouldn't actually happen, as it only lasts 2 T-cycles + return true; + } + + GB_log(gb, "Next DMA write: [$FE%02X] = [$%04X]\n", gb->dma_current_dest, gb->dma_current_src); + + return true; +} + static bool lcd(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS @@ -1657,15 +1716,15 @@ static bool lcd(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg return true; } GB_log(gb, "LCDC:\n"); - GB_log(gb, " LCD enabled: %s\n",(gb->io_registers[GB_IO_LCDC] & 128)? "Enabled" : "Disabled"); - GB_log(gb, " %s: %s\n", (gb->cgb_mode? "Sprite priority flags" : "Background and Window"), - (gb->io_registers[GB_IO_LCDC] & 1)? "Enabled" : "Disabled"); - GB_log(gb, " Objects: %s\n", (gb->io_registers[GB_IO_LCDC] & 2)? "Enabled" : "Disabled"); - GB_log(gb, " Object size: %s\n", (gb->io_registers[GB_IO_LCDC] & 4)? "8x16" : "8x8"); - GB_log(gb, " Background tilemap: %s\n", (gb->io_registers[GB_IO_LCDC] & 8)? "$9C00" : "$9800"); - GB_log(gb, " Background and Window Tileset: %s\n", (gb->io_registers[GB_IO_LCDC] & 16)? "$8000" : "$8800"); - GB_log(gb, " Window: %s\n", (gb->io_registers[GB_IO_LCDC] & 32)? "Enabled" : "Disabled"); - GB_log(gb, " Window tilemap: %s\n", (gb->io_registers[GB_IO_LCDC] & 64)? "$9C00" : "$9800"); + GB_log(gb, " LCD enabled: %s\n",(gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE)? "Enabled" : "Disabled"); + GB_log(gb, " %s: %s\n", (gb->cgb_mode? "Object priority flags" : "Background and Window"), + (gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_EN)? "Enabled" : "Disabled"); + GB_log(gb, " Objects: %s\n", (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_EN)? "Enabled" : "Disabled"); + GB_log(gb, " Object size: %s\n", (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_SIZE)? "8x16" : "8x8"); + GB_log(gb, " Background tilemap: %s\n", (gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_MAP)? "$9C00" : "$9800"); + GB_log(gb, " Background and Window Tileset: %s\n", (gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL)? "$8000" : "$8800"); + GB_log(gb, " Window: %s\n", (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE)? "Enabled" : "Disabled"); + GB_log(gb, " Window tilemap: %s\n", (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_MAP)? "$9C00" : "$9800"); GB_log(gb, "\nSTAT:\n"); static const char *modes[] = {"Mode 0, H-Blank", "Mode 1, V-Blank", "Mode 2, OAM", "Mode 3, Rendering"}; @@ -1680,7 +1739,7 @@ static bool lcd(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg GB_log(gb, "\nCurrent line: %d\n", gb->current_line); GB_log(gb, "Current state: "); - if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) { + if (!(gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE)) { GB_log(gb, "Off\n"); } else if (gb->display_state == 7 || gb->display_state == 8) { @@ -1690,8 +1749,13 @@ static bool lcd(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg GB_log(gb, "Glitched line 0 OAM mode (%d cycles to next event)\n", -gb->display_cycles / 2); } else if (gb->mode_for_interrupt == 3) { - signed pixel = gb->position_in_line > 160? (int8_t) gb->position_in_line : gb->position_in_line; - GB_log(gb, "Rendering pixel (%d/160)\n", pixel); + if (((uint8_t)(gb->position_in_line + 16) < 8)) { + GB_log(gb, "Adjusting for scrolling (%d/%d)\n", gb->position_in_line & 7, gb->io_registers[GB_IO_SCX] & 7); + } + else { + signed pixel = gb->position_in_line > 160? (int8_t) gb->position_in_line : gb->position_in_line; + GB_log(gb, "Rendering pixel (%d/160)\n", pixel); + } } else { GB_log(gb, "Sleeping (%d cycles to next event)\n", -gb->display_cycles / 2); @@ -1700,6 +1764,17 @@ static bool lcd(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg GB_log(gb, "LYC: %d\n", gb->io_registers[GB_IO_LYC]); GB_log(gb, "Window position: %d, %d\n", (signed) gb->io_registers[GB_IO_WX] - 7, gb->io_registers[GB_IO_WY]); GB_log(gb, "Interrupt line: %s\n", gb->stat_interrupt_line? "On" : "Off"); + GB_log(gb, "Background shifter size: %d\n", gb->bg_fifo.size); + GB_log(gb, "Background fetcher state: %s\n", (const char *[]){ + "Tile (1/2)", + "Tile (2/2)", + "Low data (1/2)", + "Low data (2/2)", + "High data (1/2)", + "High data (2/2)", + "Push (1/2)", + "Push (2/2)", + }[gb->fetcher_state & 7]); return true; } @@ -1707,54 +1782,60 @@ static bool lcd(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg static bool apu(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS - if (strlen(lstrip(arguments))) { - print_usage(gb, command); - return true; + const char *stripped = lstrip(arguments); + if (strlen(stripped)) { + if (stripped[0] != 0 && (stripped[0] < '1' || stripped[0] > '5')) { + print_usage(gb, command); + return true; + } } - - GB_log(gb, "Current state: "); - if (!gb->apu.global_enable) { - GB_log(gb, "Disabled\n"); - } - else { - GB_log(gb, "Enabled\n"); - for (uint8_t channel = 0; channel < GB_N_CHANNELS; channel++) { - GB_log(gb, "CH%u is %s, DAC %s; current sample = 0x%x\n", channel + 1, - gb->apu.is_active[channel] ? "active " : "inactive", - GB_apu_is_DAC_enabled(gb, channel) ? "active " : "inactive", - gb->apu.samples[channel]); + if (stripped[0] == 0 || stripped[0] == '5') { + GB_log(gb, "Current state: "); + if (!gb->apu.global_enable) { + GB_log(gb, "Disabled\n"); + } + else { + GB_log(gb, "Enabled\n"); + for (uint8_t channel = 0; channel < GB_N_CHANNELS; channel++) { + GB_log(gb, "CH%u is %s, DAC %s; current sample = 0x%x\n", channel + 1, + gb->apu.is_active[channel] ? "active " : "inactive", + GB_apu_is_DAC_enabled(gb, channel) ? "active " : "inactive", + gb->apu.samples[channel]); + } } - } - GB_log(gb, "SO1 (left output): volume %u,", gb->io_registers[GB_IO_NR50] & 0x07); - if (gb->io_registers[GB_IO_NR51] & 0x0f) { - for (uint8_t channel = 0, mask = 0x01; channel < GB_N_CHANNELS; channel++, mask <<= 1) { - if (gb->io_registers[GB_IO_NR51] & mask) { - GB_log(gb, " CH%u", channel + 1); + GB_log(gb, "SO1 (left output): volume %u,", gb->io_registers[GB_IO_NR50] & 0x07); + if (gb->io_registers[GB_IO_NR51] & 0x0F) { + for (uint8_t channel = 0, mask = 0x01; channel < GB_N_CHANNELS; channel++, mask <<= 1) { + if (gb->io_registers[GB_IO_NR51] & mask) { + GB_log(gb, " CH%u", channel + 1); + } } } - } - else { - GB_log(gb, " no channels"); - } - GB_log(gb, "%s\n", gb->io_registers[GB_IO_NR50] & 0x80 ? " VIN": ""); + else { + GB_log(gb, " no channels"); + } + GB_log(gb, "%s\n", gb->io_registers[GB_IO_NR50] & 0x80 ? " VIN": ""); - GB_log(gb, "SO2 (right output): volume %u,", gb->io_registers[GB_IO_NR50] & 0x70 >> 4); - if (gb->io_registers[GB_IO_NR51] & 0xf0) { - for (uint8_t channel = 0, mask = 0x10; channel < GB_N_CHANNELS; channel++, mask <<= 1) { - if (gb->io_registers[GB_IO_NR51] & mask) { - GB_log(gb, " CH%u", channel + 1); + GB_log(gb, "SO2 (right output): volume %u,", gb->io_registers[GB_IO_NR50] & 0x70 >> 4); + if (gb->io_registers[GB_IO_NR51] & 0xF0) { + for (uint8_t channel = 0, mask = 0x10; channel < GB_N_CHANNELS; channel++, mask <<= 1) { + if (gb->io_registers[GB_IO_NR51] & mask) { + GB_log(gb, " CH%u", channel + 1); + } } } + else { + GB_log(gb, " no channels"); + } + GB_log(gb, "%s\n", gb->io_registers[GB_IO_NR50] & 0x80 ? " VIN": ""); } - else { - GB_log(gb, " no channels"); - } - GB_log(gb, "%s\n", gb->io_registers[GB_IO_NR50] & 0x80 ? " VIN": ""); for (uint8_t channel = GB_SQUARE_1; channel <= GB_SQUARE_2; channel++) { + if (stripped[0] != 0 && stripped[0] != ('1') + channel) continue; + GB_log(gb, "\nCH%u:\n", channel + 1); GB_log(gb, " Current volume: %u, current sample length: %u APU ticks (next in %u ticks)\n", gb->apu.square_channels[channel].current_volume, @@ -1769,10 +1850,10 @@ static bool apu(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg uint8_t duty = gb->io_registers[channel == GB_SQUARE_1? GB_IO_NR11 :GB_IO_NR21] >> 6; GB_log(gb, " Duty cycle %s%% (%s), current index %u/8%s\n", - duty > 3? "" : (const char *[]){"12.5", " 25", " 50", " 75"}[duty], - duty > 3? "" : (const char *[]){"_______-", "-______-", "-____---", "_------_"}[duty], - gb->apu.square_channels[channel].current_sample_index & 0x7f, - gb->apu.square_channels[channel].current_sample_index >> 7 ? " (suppressed)" : ""); + duty > 3? "" : (const char *const[]){"12.5", " 25", " 50", " 75"}[duty], + duty > 3? "" : (const char *const[]){"_______-", "-______-", "-____---", "_------_"}[duty], + gb->apu.square_channels[channel].current_sample_index, + gb->apu.square_channels[channel].sample_surpressed ? " (suppressed)" : ""); if (channel == GB_SQUARE_1) { GB_log(gb, " Frequency sweep %s and %s\n", @@ -1794,50 +1875,53 @@ static bool apu(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugg } } + if (stripped[0] == 0 || stripped[0] == '3') { + GB_log(gb, "\nCH3:\n"); + GB_log(gb, " Wave:"); + for (uint8_t i = 0; i < 16; i++) { + GB_log(gb, "%s%X", i % 2? "" : " ", gb->io_registers[GB_IO_WAV_START + i] >> 4); + GB_log(gb, "%X", gb->io_registers[GB_IO_WAV_START + i] & 0xF); + } + GB_log(gb, "\n"); + GB_log(gb, " Current position: %u\n", gb->apu.wave_channel.current_sample_index); - GB_log(gb, "\nCH3:\n"); - GB_log(gb, " Wave:"); - for (uint8_t i = 0; i < 16; i++) { - GB_log(gb, "%s%X", i % 2? "" : " ", gb->io_registers[GB_IO_WAV_START + i] >> 4); - GB_log(gb, "%X", gb->io_registers[GB_IO_WAV_START + i] & 0xF); - } - GB_log(gb, "\n"); - GB_log(gb, " Current position: %u\n", gb->apu.wave_channel.current_sample_index); - - GB_log(gb, " Volume %s (right-shifted %u times)\n", - gb->apu.wave_channel.shift > 4? "" : (const char *[]){"100%", "50%", "25%", "", "muted"}[gb->apu.wave_channel.shift], - gb->apu.wave_channel.shift); + GB_log(gb, " Volume %s (right-shifted %u times)\n", + gb->apu.wave_channel.shift > 4? "" : (const char *const[]){"100%", "50%", "25%", "", "muted"}[gb->apu.wave_channel.shift], + gb->apu.wave_channel.shift); - GB_log(gb, " Current sample length: %u APU ticks (next in %u ticks)\n", - gb->apu.wave_channel.sample_length ^ 0x7ff, - gb->apu.wave_channel.sample_countdown); + GB_log(gb, " Current sample length: %u APU ticks (next in %u ticks)\n", + gb->apu.wave_channel.sample_length ^ 0x7FF, + gb->apu.wave_channel.sample_countdown); - if (gb->apu.wave_channel.length_enabled) { - GB_log(gb, " Channel will end in %u 256 Hz ticks\n", - gb->apu.wave_channel.pulse_length); + if (gb->apu.wave_channel.length_enabled) { + GB_log(gb, " Channel will end in %u 256 Hz ticks\n", + gb->apu.wave_channel.pulse_length); + } } - GB_log(gb, "\nCH4:\n"); - GB_log(gb, " Current volume: %u, current internal counter: 0x%04x (next increase in %u ticks)\n", - gb->apu.noise_channel.current_volume, - gb->apu.noise_channel.counter, - gb->apu.noise_channel.counter_countdown); + if (stripped[0] == 0 || stripped[0] == '4') { + GB_log(gb, "\nCH4:\n"); + GB_log(gb, " Current volume: %u, current internal counter: 0x%04x (next increase in %u ticks)\n", + gb->apu.noise_channel.current_volume, + gb->apu.noise_channel.counter, + gb->apu.noise_channel.counter_countdown); - GB_log(gb, " %u 256 Hz ticks till next volume %screase (out of %u)\n", - gb->apu.noise_channel.volume_countdown, - gb->io_registers[GB_IO_NR42] & 8 ? "in" : "de", - gb->io_registers[GB_IO_NR42] & 7); + GB_log(gb, " %u 256 Hz ticks till next volume %screase (out of %u)\n", + gb->apu.noise_channel.volume_countdown, + gb->io_registers[GB_IO_NR42] & 8 ? "in" : "de", + gb->io_registers[GB_IO_NR42] & 7); - GB_log(gb, " LFSR in %u-step mode, current value ", - gb->apu.noise_channel.narrow? 7 : 15); - for (uint16_t lfsr = gb->apu.noise_channel.lfsr, i = 15; i--; lfsr <<= 1) { - GB_log(gb, "%u%s", (lfsr >> 14) & 1, i%4 ? "" : " "); - } + GB_log(gb, " LFSR in %u-step mode, current value ", + gb->apu.noise_channel.narrow? 7 : 15); + for (uint16_t lfsr = gb->apu.noise_channel.lfsr, i = 15; i--; lfsr <<= 1) { + GB_log(gb, "%u%s", (lfsr >> 14) & 1, i%4 ? "" : " "); + } - if (gb->apu.noise_channel.length_enabled) { - GB_log(gb, " Channel will end in %u 256 Hz ticks\n", - gb->apu.noise_channel.pulse_length); + if (gb->apu.noise_channel.length_enabled) { + GB_log(gb, " Channel will end in %u 256 Hz ticks\n", + gb->apu.noise_channel.pulse_length); + } } @@ -1877,9 +1961,9 @@ static bool wave(GB_gameboy_t *gb, char *arguments, char *modifiers, const debug break; } } - mask = (0xf << (shift_amount - 1)) & 0xf; + mask = (0xF << (shift_amount - 1)) & 0xF; - for (int8_t cur_val = 0xf & mask; cur_val >= 0; cur_val -= shift_amount) { + for (int8_t cur_val = 0xF & mask; cur_val >= 0; cur_val -= shift_amount) { for (uint8_t i = 0; i < 32; i++) { uint8_t sample = i & 1? (gb->io_registers[GB_IO_WAV_START + i / 2] & 0xF) : @@ -1900,6 +1984,8 @@ static bool wave(GB_gameboy_t *gb, char *arguments, char *modifiers, const debug static bool undo(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command) { NO_MODIFIERS + STOPPED_ONLY + if (strlen(lstrip(arguments))) { print_usage(gb, command); return true; @@ -1922,54 +2008,55 @@ static bool undo(GB_gameboy_t *gb, char *arguments, char *modifiers, const debug static bool help(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *command); -#define HELP_NEWLINE "\n " /* Commands without implementations are aliases of the previous non-alias commands */ static const debugger_command_t commands[] = { {"continue", 1, cont, "Continue running until next stop"}, + {"interrupt", 1, interrupt, "Interrupt the program execution"}, {"next", 1, next, "Run the next instruction, skipping over function calls"}, {"step", 1, step, "Run the next instruction, stepping into function calls"}, {"finish", 1, finish, "Run until the current function returns"}, - {"undo", 1, undo, "Reverts the last command"}, - {"backtrace", 2, backtrace, "Displays the current call stack"}, - {"bt", 2, }, /* Alias */ - {"sld", 3, stack_leak_detection, "Like finish, but stops if a stack leak is detected"}, - {"ticks", 2, ticks, "Displays the number of CPU ticks since the last time 'ticks' was" HELP_NEWLINE - "used"}, + {"undo", 1, undo, "Revert the last command"}, {"registers", 1, registers, "Print values of processor registers and other important registers"}, - {"cartridge", 2, mbc, "Displays information about the MBC and cartridge"}, - {"mbc", 3, }, /* Alias */ - {"apu", 3, apu, "Displays information about the current state of the audio chip"}, - {"wave", 3, wave, "Prints a visual representation of the wave RAM." HELP_NEWLINE - "Modifiers can be used for a (f)ull print (the default)," HELP_NEWLINE - "a more (c)ompact one, or a one-(l)iner", "", "(f|c|l)", .modifiers_completer = wave_completer}, - {"lcd", 3, lcd, "Displays information about the current state of the LCD controller"}, - {"palettes", 3, palettes, "Displays the current CGB palettes"}, - {"softbreak", 2, softbreak, "Enables or disables software breakpoints", "(on|off)", .argument_completer = on_off_completer}, - {"breakpoint", 1, breakpoint, "Add a new breakpoint at the specified address/expression" HELP_NEWLINE - "Can also modify the condition of existing breakpoints." HELP_NEWLINE - "If the j modifier is used, the breakpoint will occur just before" HELP_NEWLINE + {"backtrace", 2, backtrace, "Display the current call stack"}, + {"bt", 2, }, /* Alias */ + {"print", 1, print, "Evaluate and print an expression " + "Use modifier to format as an address (a, default) or as a number in " + "decimal (d), hexadecimal (x), octal (o) or binary (b).", + "", "format", .argument_completer = symbol_completer, .modifiers_completer = format_completer}, + {"eval", 2, }, /* Alias */ + {"examine", 2, examine, "Examine values at address", "", "count", .argument_completer = symbol_completer}, + {"x", 1, }, /* Alias */ + {"disassemble", 1, disassemble, "Disassemble instructions at address", "", "count", .argument_completer = symbol_completer}, + {"breakpoint", 1, breakpoint, "Add a new breakpoint at the specified address/expression " + "Can also modify the condition of existing breakpoints. " + "If the j modifier is used, the breakpoint will occur just before " "jumping to the target.", "[ if ]", "j", .argument_completer = symbol_completer, .modifiers_completer = j_completer}, {"delete", 2, delete, "Delete a breakpoint by its address, or all breakpoints", "[]", .argument_completer = symbol_completer}, - {"watch", 1, watch, "Add a new watchpoint at the specified address/expression." HELP_NEWLINE - "Can also modify the condition and type of existing watchpoints." HELP_NEWLINE + {"watch", 1, watch, "Add a new watchpoint at the specified address/expression. " + "Can also modify the condition and type of existing watchpoints. " "Default watchpoint type is write-only.", "[ if ]", "(r|w|rw)", .argument_completer = symbol_completer, .modifiers_completer = rw_completer }, {"unwatch", 3, unwatch, "Delete a watchpoint by its address, or all watchpoints", "[]", .argument_completer = symbol_completer}, + {"softbreak", 2, softbreak, "Enable or disable software breakpoints ('ld b, b' opcodes)", "(on|off)", .argument_completer = on_off_completer}, {"list", 1, list, "List all set breakpoints and watchpoints"}, - {"print", 1, print, "Evaluate and print an expression" HELP_NEWLINE - "Use modifier to format as an address (a, default) or as a number in" HELP_NEWLINE - "decimal (d), hexadecimal (x), octal (o) or binary (b).", - "", "format", .argument_completer = symbol_completer, .modifiers_completer = format_completer}, - {"eval", 2, }, /* Alias */ - {"examine", 2, examine, "Examine values at address", "", "count", .argument_completer = symbol_completer}, - {"x", 1, }, /* Alias */ - {"disassemble", 1, disassemble, "Disassemble instructions at address", "", "count", .argument_completer = symbol_completer}, - + {"ticks", 2, ticks, "Display the number of CPU ticks since the last time 'ticks' was " + "used. Use 'keep' as an argument to display ticks without reseeting " + "the count.", "(keep)", .argument_completer = keep_completer}, + {"cartridge", 2, mbc, "Display information about the MBC and cartridge"}, + {"mbc", 3, }, /* Alias */ + {"apu", 3, apu, "Display information about the current state of the audio processing " + "unit", "[channel (1-4, 5 for NR5x)]"}, + {"wave", 3, wave, "Print a visual representation of the wave RAM. " + "Modifiers can be used for a (f)ull print (the default), " + "a more (c)ompact one, or a one-(l)iner", "", "(f|c|l)", .modifiers_completer = wave_completer}, + {"lcd", 3, lcd, "Display information about the current state of the LCD controller"}, + {"palettes", 3, palettes, "Display the current CGB palettes"}, + {"dma", 3, dma, "Display the current OAM DMA status"}, {"help", 1, help, "List available commands or show help for the specified command", "[]"}, {NULL,}, /* Null terminator */ @@ -2002,7 +2089,24 @@ static void print_command_description(GB_gameboy_t *gb, const debugger_command_t { print_command_shortcut(gb, command); GB_log(gb, ": "); - GB_log(gb, (const char *)&" %s\n" + strlen(command->command), command->help_string); + GB_log(gb, "%s", (const char *)&" " + strlen(command->command)); + + const char *string = command->help_string; + const unsigned width = 80 - 13; + while (strlen(string) > width) { + const char *space = string + width; + while (*space != ' ') { + space--; + if (space == string) { + // This help string has some extra long word? Abort line-breaking, it's going to break anyway. + GB_log(gb, "%s\n", string); + return; + } + } + GB_log(gb, "%.*s\n ", (unsigned)(space - string), string); + string = space + 1; + } + GB_log(gb, "%s\n", string); } static bool help(GB_gameboy_t *gb, char *arguments, char *modifiers, const debugger_command_t *ignored) @@ -2037,22 +2141,11 @@ void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr) { /* Called just after the CPU calls a function/enters an interrupt/etc... */ - if (gb->stack_leak_detection) { - if (gb->debug_call_depth >= sizeof(gb->sp_for_call_depth) / sizeof(gb->sp_for_call_depth[0])) { - GB_log(gb, "Potential stack overflow detected (Functions nest too much). \n"); - gb->debug_stopped = true; - } - else { - gb->sp_for_call_depth[gb->debug_call_depth] = gb->sp; - gb->addr_for_call_depth[gb->debug_call_depth] = gb->pc; - } - } - if (gb->backtrace_size < sizeof(gb->backtrace_sps) / sizeof(gb->backtrace_sps[0])) { - while (gb->backtrace_size) { if (gb->backtrace_sps[gb->backtrace_size - 1] < gb->sp) { gb->backtrace_size--; + gb->debug_call_depth--; } else { break; @@ -2063,35 +2156,18 @@ void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr) gb->backtrace_returns[gb->backtrace_size].bank = bank_for_addr(gb, call_addr); gb->backtrace_returns[gb->backtrace_size].addr = call_addr; gb->backtrace_size++; + gb->debug_call_depth++; } - - gb->debug_call_depth++; } void GB_debugger_ret_hook(GB_gameboy_t *gb) { /* Called just before the CPU runs ret/reti */ - gb->debug_call_depth--; - - if (gb->stack_leak_detection) { - if (gb->debug_call_depth < 0) { - GB_log(gb, "Function finished without a stack leak.\n"); - gb->debug_stopped = true; - } - else { - if (gb->sp != gb->sp_for_call_depth[gb->debug_call_depth]) { - GB_log(gb, "Stack leak detected for function %s!\n", value_to_string(gb, gb->addr_for_call_depth[gb->debug_call_depth], true)); - GB_log(gb, "SP is $%04x, should be $%04x.\n", gb->sp, - gb->sp_for_call_depth[gb->debug_call_depth]); - gb->debug_stopped = true; - } - } - } - while (gb->backtrace_size) { if (gb->backtrace_sps[gb->backtrace_size - 1] <= gb->sp) { gb->backtrace_size--; + gb->debug_call_depth--; } else { break; @@ -2192,9 +2268,15 @@ void GB_debugger_test_read_watchpoint(GB_gameboy_t *gb, uint16_t addr) /* Returns true if debugger waits for more commands */ bool GB_debugger_execute_command(GB_gameboy_t *gb, char *input) { + while (*input == ' ') { + input++; + } if (!input[0]) { return true; } + + GB_display_sync(gb); + GB_apu_run(gb, true); char *command_string = input; char *arguments = strchr(input, ' '); @@ -2214,6 +2296,7 @@ bool GB_debugger_execute_command(GB_gameboy_t *gb, char *input) modifiers++; } + gb->help_shown = true; const debugger_command_t *command = find_command(command_string); if (command) { uint8_t *old_state = malloc(GB_get_save_state_size_no_bess(gb)); @@ -2242,7 +2325,7 @@ bool GB_debugger_execute_command(GB_gameboy_t *gb, char *input) return ret; } else { - GB_log(gb, "%s: no such command.\n", command_string); + GB_log(gb, "%s: no such command. Type 'help' to list the available debugger commands.\n", command_string); return true; } } @@ -2324,10 +2407,14 @@ void GB_debugger_run(GB_gameboy_t *gb) if (gb->debug_next_command && gb->debug_call_depth <= 0 && !gb->halted) { gb->debug_stopped = true; } - if (gb->debug_fin_command && gb->debug_call_depth == -1) { + if (gb->debug_fin_command && gb->debug_call_depth <= -1) { gb->debug_stopped = true; } if (gb->debug_stopped) { + if (!gb->help_shown) { + gb->help_shown = true; + GB_log(gb, "Type 'help' to list the available debugger commands.\n"); + } GB_cpu_disassemble(gb, gb->pc, 5); } next_command: @@ -2386,7 +2473,6 @@ void GB_debugger_run(GB_gameboy_t *gb) if (gb->debug_stopped && !gb->debug_disable) { gb->debug_next_command = false; gb->debug_fin_command = false; - gb->stack_leak_detection = false; input = gb->input_callback(gb); if (input == NULL) { @@ -2415,7 +2501,12 @@ void GB_debugger_handle_async_commands(GB_gameboy_t *gb) void GB_debugger_add_symbol(GB_gameboy_t *gb, uint16_t bank, uint16_t address, const char *symbol) { - bank &= 0x1FF; + if (bank >= gb->n_symbol_maps) { + gb->bank_symbols = realloc(gb->bank_symbols, (bank + 1) * sizeof(*gb->bank_symbols)); + while (bank >= gb->n_symbol_maps) { + gb->bank_symbols[gb->n_symbol_maps++] = NULL; + } + } if (!gb->bank_symbols[bank]) { gb->bank_symbols[bank] = GB_map_alloc(); @@ -2457,7 +2548,7 @@ void GB_debugger_load_symbol_file(GB_gameboy_t *gb, const char *path) void GB_debugger_clear_symbols(GB_gameboy_t *gb) { - for (unsigned i = sizeof(gb->bank_symbols) / sizeof(gb->bank_symbols[0]); i--;) { + for (unsigned i = gb->n_symbol_maps; i--;) { if (gb->bank_symbols[i]) { GB_map_free(gb->bank_symbols[i]); gb->bank_symbols[i] = 0; @@ -2470,15 +2561,20 @@ void GB_debugger_clear_symbols(GB_gameboy_t *gb) gb->reversed_symbol_map.buckets[i] = next; } } + gb->n_symbol_maps = 0; + if (gb->bank_symbols) { + free(gb->bank_symbols); + gb->bank_symbols = NULL; + } } const GB_bank_symbol_t *GB_debugger_find_symbol(GB_gameboy_t *gb, uint16_t addr) { uint16_t bank = bank_for_addr(gb, addr); - const GB_bank_symbol_t *symbol = GB_map_find_symbol(gb->bank_symbols[bank], addr); + const GB_bank_symbol_t *symbol = GB_map_find_symbol(get_symbol_map(gb, bank), addr); if (symbol) return symbol; - if (bank != 0) return GB_map_find_symbol(gb->bank_symbols[0], addr); /* Maybe the symbol incorrectly uses bank 0? */ + if (bank != 0) return GB_map_find_symbol(get_symbol_map(gb, 0), addr); /* Maybe the symbol incorrectly uses bank 0? */ return NULL; } @@ -2541,7 +2637,7 @@ static bool is_in_trivial_memory(uint16_t addr) return false; } -typedef uint16_t GB_opcode_address_getter_t(GB_gameboy_t *gb, uint8_t opcode); +typedef uint16_t opcode_address_getter_t(GB_gameboy_t *gb, uint8_t opcode); uint16_t trivial_1(GB_gameboy_t *gb, uint8_t opcode) { @@ -2631,7 +2727,7 @@ static uint16_t jp_hl(GB_gameboy_t *gb, uint8_t opcode) return gb->hl; } -static GB_opcode_address_getter_t *opcodes[256] = { +static opcode_address_getter_t *opcodes[256] = { /* X0 X1 X2 X3 X4 X5 X6 X7 */ /* X8 X9 Xa Xb Xc Xd Xe Xf */ trivial_1, trivial_3, trivial_1, trivial_1, trivial_1, trivial_1, trivial_2, trivial_1, /* 0X */ @@ -2709,7 +2805,7 @@ static jump_to_return_t test_jump_to_breakpoints(GB_gameboy_t *gb, uint16_t *add return JUMP_TO_NONE; } - GB_opcode_address_getter_t *getter = opcodes[opcode]; + opcode_address_getter_t *getter = opcodes[opcode]; if (!getter) { gb->n_watchpoints = n_watchpoints; return JUMP_TO_NONE; diff --git a/thirdparty/SameBoy/Core/debugger.h b/thirdparty/SameBoy/Core/debugger.h index 0678b30c9..3d77b7a8c 100644 --- a/thirdparty/SameBoy/Core/debugger.h +++ b/thirdparty/SameBoy/Core/debugger.h @@ -2,7 +2,7 @@ #define debugger_h #include #include -#include "gb_struct_def.h" +#include "defs.h" #include "symbol_hash.h" @@ -17,14 +17,14 @@ #define GB_debugger_add_symbol(gb, bank, address, symbol) ((void)bank, (void)address, (void)symbol) #else -void GB_debugger_run(GB_gameboy_t *gb); -void GB_debugger_handle_async_commands(GB_gameboy_t *gb); -void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr); -void GB_debugger_ret_hook(GB_gameboy_t *gb); -void GB_debugger_test_write_watchpoint(GB_gameboy_t *gb, uint16_t addr, uint8_t value); -void GB_debugger_test_read_watchpoint(GB_gameboy_t *gb, uint16_t addr); -const GB_bank_symbol_t *GB_debugger_find_symbol(GB_gameboy_t *gb, uint16_t addr); -void GB_debugger_add_symbol(GB_gameboy_t *gb, uint16_t bank, uint16_t address, const char *symbol); +internal void GB_debugger_run(GB_gameboy_t *gb); +internal void GB_debugger_handle_async_commands(GB_gameboy_t *gb); +internal void GB_debugger_call_hook(GB_gameboy_t *gb, uint16_t call_addr); +internal void GB_debugger_ret_hook(GB_gameboy_t *gb); +internal void GB_debugger_test_write_watchpoint(GB_gameboy_t *gb, uint16_t addr, uint8_t value); +internal void GB_debugger_test_read_watchpoint(GB_gameboy_t *gb, uint16_t addr); +internal const GB_bank_symbol_t *GB_debugger_find_symbol(GB_gameboy_t *gb, uint16_t addr); +internal void GB_debugger_add_symbol(GB_gameboy_t *gb, uint16_t bank, uint16_t address, const char *symbol); #endif /* GB_DISABLE_DEBUGGER */ #endif diff --git a/thirdparty/SameBoy/Core/defs.h b/thirdparty/SameBoy/Core/defs.h new file mode 100644 index 000000000..53dd38fc5 --- /dev/null +++ b/thirdparty/SameBoy/Core/defs.h @@ -0,0 +1,50 @@ +#ifndef defs_h +#define defs_h + +#define GB_likely(x) __builtin_expect((bool)(x), 1) +#define GB_unlikely(x) __builtin_expect((bool)(x), 0) + +#ifdef GB_INTERNAL + +// "Keyword" definitions +#define likely(x) GB_likely(x) +#define unlikely(x) GB_unlikely(x) + +#define internal +//#define internal __attribute__((visibility("internal"))) + +#if __clang__ +#define unrolled _Pragma("unroll") +#elif __GNUC__ >= 8 +#define unrolled _Pragma("GCC unroll 8") +#else +#define unrolled +#endif + +#define unreachable() __builtin_unreachable(); +#define nodefault default: unreachable() + +#ifdef GB_BIG_ENDIAN +#define LE16(x) __builtin_bswap16(x) +#define LE32(x) __builtin_bswap32(x) +#define LE64(x) __builtin_bswap64(x) +#define BE16(x) (x) +#define BE32(x) (x) +#define BE64(x) (x) +#else +#define LE16(x) (x) +#define LE32(x) (x) +#define LE64(x) (x) +#define BE16(x) __builtin_bswap16(x) +#define BE32(x) __builtin_bswap32(x) +#define BE64(x) __builtin_bswap64(x) +#endif +#endif + +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) +#define __builtin_bswap16(x) ({ typeof(x) _x = (x); _x >> 8 | _x << 8; }) +#endif + +struct GB_gameboy_s; +typedef struct GB_gameboy_s GB_gameboy_t; +#endif diff --git a/thirdparty/SameBoy/Core/display.c b/thirdparty/SameBoy/Core/display.c index aa958de49..30af98b0e 100644 --- a/thirdparty/SameBoy/Core/display.c +++ b/thirdparty/SameBoy/Core/display.c @@ -9,27 +9,32 @@ static inline unsigned fifo_size(GB_fifo_t *fifo) { - return (fifo->write_end - fifo->read_end) & (GB_FIFO_LENGTH - 1); + return fifo->size; } static void fifo_clear(GB_fifo_t *fifo) { - fifo->read_end = fifo->write_end = 0; + fifo->read_end = fifo->size = 0; } -static GB_fifo_item_t *fifo_pop(GB_fifo_t *fifo) +static const GB_fifo_item_t *fifo_pop(GB_fifo_t *fifo) { + assert(fifo->size); + assert(fifo->size <= 8); GB_fifo_item_t *ret = &fifo->fifo[fifo->read_end]; fifo->read_end++; fifo->read_end &= (GB_FIFO_LENGTH - 1); + fifo->size--; return ret; } static void fifo_push_bg_row(GB_fifo_t *fifo, uint8_t lower, uint8_t upper, uint8_t palette, bool bg_priority, bool flip_x) { + assert(fifo->size == 0); + fifo->size = 8; if (!flip_x) { - unrolled for (unsigned i = 8; i--;) { - fifo->fifo[fifo->write_end] = (GB_fifo_item_t) { + unrolled for (unsigned i = 0; i < 8; i++) { + fifo->fifo[i] = (GB_fifo_item_t) { (lower >> 7) | ((upper >> 7) << 1), palette, 0, @@ -37,14 +42,11 @@ static void fifo_push_bg_row(GB_fifo_t *fifo, uint8_t lower, uint8_t upper, uint }; lower <<= 1; upper <<= 1; - - fifo->write_end++; - fifo->write_end &= (GB_FIFO_LENGTH - 1); } } else { - unrolled for (unsigned i = 8; i--;) { - fifo->fifo[fifo->write_end] = (GB_fifo_item_t) { + unrolled for (unsigned i = 0; i < 8; i++) { + fifo->fifo[i] = (GB_fifo_item_t) { (lower & 1) | ((upper & 1) << 1), palette, 0, @@ -52,19 +54,15 @@ static void fifo_push_bg_row(GB_fifo_t *fifo, uint8_t lower, uint8_t upper, uint }; lower >>= 1; upper >>= 1; - - fifo->write_end++; - fifo->write_end &= (GB_FIFO_LENGTH - 1); } } } static void fifo_overlay_object_row(GB_fifo_t *fifo, uint8_t lower, uint8_t upper, uint8_t palette, bool bg_priority, uint8_t priority, bool flip_x) { - while (fifo_size(fifo) < 8) { - fifo->fifo[fifo->write_end] = (GB_fifo_item_t) {0,}; - fifo->write_end++; - fifo->write_end &= (GB_FIFO_LENGTH - 1); + while (fifo->size < GB_FIFO_LENGTH) { + fifo->fifo[(fifo->read_end + fifo->size) & (GB_FIFO_LENGTH - 1)] = (GB_fifo_item_t) {0,}; + fifo->size++; } uint8_t flip_xor = flip_x? 0: 0x7; @@ -85,7 +83,7 @@ static void fifo_overlay_object_row(GB_fifo_t *fifo, uint8_t lower, uint8_t uppe /* - Each line is 456 cycles. Without scrolling, sprites or a window: + Each line is 456 cycles. Without scrolling, objects or a window: Mode 2 - 80 cycles / OAM Transfer Mode 3 - 172 cycles / Rendering Mode 0 - 204 cycles / HBlank @@ -107,11 +105,13 @@ typedef struct __attribute__((packed)) { uint8_t x; uint8_t tile; uint8_t flags; -} GB_object_t; +} object_t; -static void display_vblank(GB_gameboy_t *gb) -{ +void GB_display_vblank(GB_gameboy_t *gb, GB_vblank_type_t type) +{ gb->vblank_just_occured = true; + gb->cycles_since_vblank_callback = 0; + gb->lcd_disabled_outside_of_vblank = false; /* TODO: Slow in turbo mode! */ if (GB_is_hle_sgb(gb)) { @@ -124,9 +124,19 @@ static void display_vblank(GB_gameboy_t *gb) } } - bool is_ppu_stopped = !GB_is_cgb(gb) && gb->stopped && gb->io_registers[GB_IO_LCDC] & 0x80; + if (GB_is_cgb(gb) && type == GB_VBLANK_TYPE_NORMAL_FRAME && gb->frame_repeat_countdown > 0 && gb->frame_skip_state == GB_FRAMESKIP_LCD_TURNED_ON) { + GB_handle_rumble(gb); + + if (gb->vblank_callback) { + gb->vblank_callback(gb, GB_VBLANK_TYPE_REPEAT); + } + GB_timing_sync(gb); + return; + } + + bool is_ppu_stopped = !GB_is_cgb(gb) && gb->stopped && gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE; - if (!gb->disable_rendering && ((!(gb->io_registers[GB_IO_LCDC] & 0x80) || is_ppu_stopped) || gb->cgb_repeated_a_frame)) { + if (!gb->disable_rendering && ((!(gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE) || is_ppu_stopped) || gb->frame_skip_state == GB_FRAMESKIP_LCD_TURNED_ON)) { /* LCD is off, set screen to white or black (if LCD is on in stop mode) */ if (!GB_is_sgb(gb)) { uint32_t color = 0; @@ -157,13 +167,19 @@ static void display_vblank(GB_gameboy_t *gb) GB_borrow_sgb_border(gb); uint32_t border_colors[16 * 4]; - if (!gb->has_sgb_border && GB_is_cgb(gb) && gb->model != GB_MODEL_AGB) { + if (!gb->has_sgb_border && GB_is_cgb(gb) && gb->model <= GB_MODEL_CGB_E) { uint16_t colors[] = { 0x2095, 0x5129, 0x1EAF, 0x1EBA, 0x4648, 0x30DA, 0x69AD, 0x2B57, 0x2B5D, 0x632C, 0x1050, 0x3C84, 0x0E07, 0x0E18, 0x2964, }; - unsigned index = gb->rom? gb->rom[0x14e] % 5 : 0; + unsigned index = gb->rom? gb->rom[0x14E] % 5 : 0; + if (gb->model == GB_MODEL_CGB_0) { + index = 1; // CGB 0 was only available in indigo! + } + else if (gb->model == GB_MODEL_CGB_A) { + index = 0; // CGB A was only available in red! + } gb->borrowed_border.palette[0] = LE16(colors[index]); gb->borrowed_border.palette[10] = LE16(colors[5 + index]); gb->borrowed_border.palette[14] = LE16(colors[10 + index]); @@ -206,7 +222,7 @@ static void display_vblank(GB_gameboy_t *gb) GB_handle_rumble(gb); if (gb->vblank_callback) { - gb->vblank_callback(gb); + gb->vblank_callback(gb, type); } GB_timing_sync(gb); } @@ -238,17 +254,17 @@ static inline uint8_t scale_channel(uint8_t x) static inline uint8_t scale_channel_with_curve(uint8_t x) { - return (uint8_t[]){0,6,12,20,28,36,45,56,66,76,88,100,113,125,137,149,161,172,182,192,202,210,218,225,232,238,243,247,250,252,254,255}[x]; + return (const uint8_t[]){0,6,12,20,28,36,45,56,66,76,88,100,113,125,137,149,161,172,182,192,202,210,218,225,232,238,243,247,250,252,254,255}[x]; } static inline uint8_t scale_channel_with_curve_agb(uint8_t x) { - return (uint8_t[]){0,3,8,14,20,26,33,40,47,54,62,70,78,86,94,103,112,120,129,138,147,157,166,176,185,195,205,215,225,235,245,255}[x]; + return (const uint8_t[]){0,3,8,14,20,26,33,40,47,54,62,70,78,86,94,103,112,120,129,138,147,157,166,176,185,195,205,215,225,235,245,255}[x]; } static inline uint8_t scale_channel_with_curve_sgb(uint8_t x) { - return (uint8_t[]){0,2,5,9,15,20,27,34,42,50,58,67,76,85,94,104,114,123,133,143,153,163,173,182,192,202,211,220,229,238,247,255}[x]; + return (const uint8_t[]){0,2,5,9,15,20,27,34,42,50,58,67,76,85,94,104,114,123,133,143,153,163,173,182,192,202,211,220,229,238,247,255}[x]; } @@ -269,48 +285,76 @@ uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border) b = scale_channel_with_curve_sgb(b); } else { - bool agb = gb->model == GB_MODEL_AGB; + bool agb = gb->model > GB_MODEL_CGB_E; r = agb? scale_channel_with_curve_agb(r) : scale_channel_with_curve(r); g = agb? scale_channel_with_curve_agb(g) : scale_channel_with_curve(g); b = agb? scale_channel_with_curve_agb(b) : scale_channel_with_curve(b); if (gb->color_correction_mode != GB_COLOR_CORRECTION_CORRECT_CURVES) { uint8_t new_r, new_g, new_b; - if (agb) { - new_g = (g * 6 + b * 1) / 7; + if (g != b) { // Minor optimization + double gamma = 2.2; + if (gb->color_correction_mode < GB_COLOR_CORRECTION_REDUCE_CONTRAST) { + /* Don't use absolutely gamma-correct mixing for the high-contrast + modes, to prevent the blue hues from being too washed out */ + gamma = 1.6; + } + + // TODO: Optimze pow out using a LUT + if (agb) { + new_g = round(pow((pow(g / 255.0, gamma) * 5 + pow(b / 255.0, gamma)) / 6, 1 / gamma) * 255); + } + else { + new_g = round(pow((pow(g / 255.0, gamma) * 3 + pow(b / 255.0, gamma)) / 4, 1 / gamma) * 255); + } } else { - new_g = (g * 3 + b) / 4; + new_g = g; } + new_r = r; new_b = b; if (gb->color_correction_mode == GB_COLOR_CORRECTION_REDUCE_CONTRAST) { r = new_r; - g = new_r; - b = new_r; + g = new_g; + b = new_b; - new_r = new_r * 7 / 8 + ( g + b) / 16; - new_g = new_g * 7 / 8 + (r + b) / 16; - new_b = new_b * 7 / 8 + (r + g ) / 16; + new_r = new_r * 15 / 16 + ( g + b) / 32; + new_g = new_g * 15 / 16 + (r + b) / 32; + new_b = new_b * 15 / 16 + (r + g ) / 32; - new_r = new_r * (224 - 32) / 255 + 32; - new_g = new_g * (220 - 36) / 255 + 36; - new_b = new_b * (216 - 40) / 255 + 40; + if (agb) { + new_r = new_r * (224 - 20) / 255 + 20; + new_g = new_g * (220 - 18) / 255 + 18; + new_b = new_b * (216 - 16) / 255 + 16; + } + else { + new_r = new_r * (220 - 40) / 255 + 40; + new_g = new_g * (224 - 36) / 255 + 36; + new_b = new_b * (216 - 32) / 255 + 32; + } } else if (gb->color_correction_mode == GB_COLOR_CORRECTION_LOW_CONTRAST) { r = new_r; - g = new_r; - b = new_r; - - new_r = new_r * 7 / 8 + ( g + b) / 16; - new_g = new_g * 7 / 8 + (r + b) / 16; - new_b = new_b * 7 / 8 + (r + g ) / 16; + g = new_g; + b = new_b; + + new_r = new_r * 15 / 16 + ( g + b) / 32; + new_g = new_g * 15 / 16 + (r + b) / 32; + new_b = new_b * 15 / 16 + (r + g ) / 32; - new_r = new_r * (162 - 67) / 255 + 67; - new_g = new_g * (167 - 62) / 255 + 62; - new_b = new_b * (157 - 58) / 255 + 58; + if (agb) { + new_r = new_r * (167 - 27) / 255 + 27; + new_g = new_g * (165 - 24) / 255 + 24; + new_b = new_b * (157 - 22) / 255 + 22; + } + else { + new_r = new_r * (162 - 45) / 255 + 45; + new_g = new_g * (167 - 41) / 255 + 41; + new_b = new_b * (157 - 38) / 255 + 38; + } } - else if (gb->color_correction_mode == GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS) { + else if (gb->color_correction_mode == GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST) { uint8_t old_max = MAX(r, MAX(g, b)); uint8_t new_max = MAX(new_r, MAX(new_g, new_b)); @@ -323,10 +367,10 @@ uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border) uint8_t old_min = MIN(r, MIN(g, b)); uint8_t new_min = MIN(new_r, MIN(new_g, new_b)); - if (new_min != 0xff) { - new_r = 0xff - (0xff - new_r) * (0xff - old_min) / (0xff - new_min); - new_g = 0xff - (0xff - new_g) * (0xff - old_min) / (0xff - new_min); - new_b = 0xff - (0xff - new_b) * (0xff - old_min) / (0xff - new_min); + if (new_min != 0xFF) { + new_r = 0xFF - (0xFF - new_r) * (0xFF - old_min) / (0xFF - new_min); + new_g = 0xFF - (0xFF - new_g) * (0xFF - old_min) / (0xFF - new_min); + new_b = 0xFF - (0xFF - new_b) * (0xFF - old_min) / (0xFF - new_min); } } r = new_r; @@ -349,10 +393,10 @@ uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border) void GB_palette_changed(GB_gameboy_t *gb, bool background_palette, uint8_t index) { if (!gb->rgb_encode_callback || !GB_is_cgb(gb)) return; - uint8_t *palette_data = background_palette? gb->background_palettes_data : gb->sprite_palettes_data; + uint8_t *palette_data = background_palette? gb->background_palettes_data : gb->object_palettes_data; uint16_t color = palette_data[index & ~1] | (palette_data[index | 1] << 8); - (background_palette? gb->background_palettes_rgb : gb->sprite_palettes_rgb)[index / 2] = GB_convert_rgb15(gb, color, false); + (background_palette? gb->background_palettes_rgb : gb->object_palettes_rgb)[index / 2] = GB_convert_rgb15(gb, color, false); } void GB_set_color_correction_mode(GB_gameboy_t *gb, GB_color_correction_mode_t mode) @@ -388,7 +432,10 @@ void GB_set_light_temperature(GB_gameboy_t *gb, double temperature) void GB_STAT_update(GB_gameboy_t *gb) { - if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) return; + if (!(gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE)) return; + if (GB_is_dma_active(gb) && (gb->io_registers[GB_IO_STAT] & 3) == 2) { + gb->io_registers[GB_IO_STAT] &= ~3; + } bool previous_interrupt_line = gb->stat_interrupt_line; /* Set LY=LYC bit */ @@ -425,20 +472,19 @@ void GB_STAT_update(GB_gameboy_t *gb) void GB_lcd_off(GB_gameboy_t *gb) { + gb->cycles_for_line = 0; gb->display_state = 0; gb->display_cycles = 0; /* When the LCD is disabled, state is constant */ + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3)) { + gb->hdma_on = true; + } + /* When the LCD is off, LY is 0 and STAT mode is 0. */ gb->io_registers[GB_IO_LY] = 0; gb->io_registers[GB_IO_STAT] &= ~3; - if (gb->hdma_on_hblank) { - gb->hdma_on_hblank = false; - gb->hdma_on = false; - - /* Todo: is this correct? */ - gb->hdma_steps_left = 0xff; - } + gb->oam_read_blocked = false; gb->vram_read_blocked = false; @@ -451,50 +497,93 @@ void GB_lcd_off(GB_gameboy_t *gb) gb->accessed_oam_row = -1; gb->wy_triggered = false; + + if (unlikely(gb->lcd_line_callback)) { + gb->lcd_line_callback(gb, 0); + } +} + +static inline uint8_t oam_read(GB_gameboy_t *gb, uint8_t addr) +{ + if (unlikely(gb->oam_ppu_blocked)) { + return 0xFF; + } + if (unlikely(gb->dma_current_dest <= 0xA0 && gb->dma_current_dest > 0)) { // TODO: what happens in the last and first M cycles? + if (gb->hdma_in_progress) { + return GB_read_oam(gb, (gb->hdma_current_src & ~1) | (addr & 1)); + } + if (gb->dma_current_dest != 0xA0) { + return gb->oam[(gb->dma_current_dest & ~1) | (addr & 1)]; + } + } + return gb->oam[addr]; } static void add_object_from_index(GB_gameboy_t *gb, unsigned index) { + if (likely(!GB_is_dma_active(gb) || gb->halted || gb->stopped)) { + gb->mode2_y_bus = oam_read(gb, index * 4); + gb->mode2_x_bus = oam_read(gb, index * 4 + 1); + } + if (gb->n_visible_objs == 10) return; /* TODO: It appears that DMA blocks PPU access to OAM, but it needs verification. */ - if (gb->dma_steps_left && (gb->dma_cycles >= 0 || gb->is_dma_restarting)) { - return; + if (unlikely(GB_is_dma_active(gb) && (gb->halted || gb->stopped))) { + if (gb->model < GB_MODEL_CGB_E) { + return; + } + /* CGB-0 to CGB-D: Halted DMA blocks Mode 2; + Pre-CGB: Unit specific behavior, some units read FFs, some units read using + several different corruption pattterns. For simplicity, we emulate + FFs. */ } - if (gb->oam_ppu_blocked) { + if (unlikely(gb->oam_ppu_blocked)) { return; } - + + bool height_16 = (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_SIZE) != 0; + signed y = gb->mode2_y_bus - 16; /* This reverse sorts the visible objects by location and priority */ - GB_object_t *objects = (GB_object_t *) &gb->oam; - bool height_16 = (gb->io_registers[GB_IO_LCDC] & 4) != 0; - signed y = objects[index].y - 16; if (y <= gb->current_line && y + (height_16? 16 : 8) > gb->current_line) { unsigned j = 0; for (; j < gb->n_visible_objs; j++) { - if (gb->obj_comparators[j] <= objects[index].x) break; + if (gb->objects_x[j] <= gb->mode2_x_bus) break; } memmove(gb->visible_objs + j + 1, gb->visible_objs + j, gb->n_visible_objs - j); - memmove(gb->obj_comparators + j + 1, gb->obj_comparators + j, gb->n_visible_objs - j); + memmove(gb->objects_x + j + 1, gb->objects_x + j, gb->n_visible_objs - j); + memmove(gb->objects_y + j + 1, gb->objects_y + j, gb->n_visible_objs - j); gb->visible_objs[j] = index; - gb->obj_comparators[j] = objects[index].x; + gb->objects_x[j] = gb->mode2_x_bus; + gb->objects_y[j] = gb->mode2_y_bus; gb->n_visible_objs++; } } -static uint8_t data_for_tile_sel_glitch(GB_gameboy_t *gb, bool *should_use) +static uint8_t data_for_tile_sel_glitch(GB_gameboy_t *gb, bool *should_use, bool *cgb_d_glitch) { /* Based on Matt Currie's research here: https://github.com/mattcurrie/mealybug-tearoom-tests/blob/master/the-comprehensive-game-boy-ppu-documentation.md#tile_sel-bit-4 */ - *should_use = true; - if (gb->io_registers[GB_IO_LCDC] & 0x10) { - *should_use = !(gb->current_tile & 0x80); - /* if (gb->model != GB_MODEL_CGB_D) */ return gb->current_tile; - // TODO: CGB D behaves differently + *cgb_d_glitch = false; + + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL) { + if (gb->model != GB_MODEL_CGB_D) { + *should_use = !(gb->current_tile & 0x80); + return gb->current_tile; + } + *cgb_d_glitch = true; + *should_use = false; + gb->io_registers[GB_IO_LCDC] &= ~GB_LCDC_TILE_SEL; + if (gb->fetcher_state == 3) { + *should_use = false; + *cgb_d_glitch = true; + return 0; + } + return 0; } return gb->data_for_sel_glitch; } @@ -502,26 +591,47 @@ static uint8_t data_for_tile_sel_glitch(GB_gameboy_t *gb, bool *should_use) static void render_pixel_if_possible(GB_gameboy_t *gb) { - GB_fifo_item_t *fifo_item = NULL; - GB_fifo_item_t *oam_fifo_item = NULL; + const GB_fifo_item_t *fifo_item = NULL; + const GB_fifo_item_t *oam_fifo_item = NULL; bool draw_oam = false; bool bg_enabled = true, bg_priority = false; + + // Rendering (including scrolling adjustment) does not occur as long as an object at x=0 is pending + if (gb->n_visible_objs != 0 && + (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_EN || GB_is_cgb(gb)) && + gb->objects_x[gb->n_visible_objs - 1] == 0) { + return; + } - if (fifo_size(&gb->bg_fifo)) { + if (unlikely(!fifo_size(&gb->bg_fifo))) return; + + if (unlikely(gb->insert_bg_pixel)) { + gb->insert_bg_pixel = false; + fifo_item = ({static const GB_fifo_item_t empty_item = {0,}; &empty_item;}); + } + else { fifo_item = fifo_pop(&gb->bg_fifo); - bg_priority = fifo_item->bg_priority; - - if (fifo_size(&gb->oam_fifo)) { - oam_fifo_item = fifo_pop(&gb->oam_fifo); - if (oam_fifo_item->pixel && (gb->io_registers[GB_IO_LCDC] & 2)) { - draw_oam = true; - bg_priority |= oam_fifo_item->bg_priority; - } + } + bg_priority = fifo_item->bg_priority; + + if (fifo_size(&gb->oam_fifo)) { + oam_fifo_item = fifo_pop(&gb->oam_fifo); + if (oam_fifo_item->pixel && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_EN) && unlikely(!gb->objects_disabled)) { + draw_oam = true; + bg_priority |= oam_fifo_item->bg_priority; } } - - if (!fifo_item) return; + // (gb->position_in_line + 16 < 8) is (gb->position_in_line < -8) in unsigned logic + if (((uint8_t)(gb->position_in_line + 16) < 8)) { + if ((gb->position_in_line & 7) == (gb->io_registers[GB_IO_SCX] & 7)) { + gb->position_in_line = -8; + } + else if (gb->position_in_line == (uint8_t) -9) { + gb->position_in_line = -16; + return; + } + } /* Drop pixels for scrollings */ if (gb->position_in_line >= 160 || (gb->disable_rendering && !gb->sgb)) { @@ -531,7 +641,7 @@ static void render_pixel_if_possible(GB_gameboy_t *gb) /* Mixing */ - if ((gb->io_registers[GB_IO_LCDC] & 0x1) == 0) { + if ((gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_EN) == 0) { if (gb->cgb_mode) { bg_priority = false; } @@ -539,6 +649,12 @@ static void render_pixel_if_possible(GB_gameboy_t *gb) bg_enabled = false; } } + + if (unlikely(gb->background_disabled)) { + bg_enabled = false; + static const GB_fifo_item_t empty_item = {0,}; + fifo_item = &empty_item; + } uint8_t icd_pixel = 0; uint32_t *dest = NULL; @@ -597,7 +713,7 @@ static void render_pixel_if_possible(GB_gameboy_t *gb) *dest = gb->rgb_encode_callback(gb, 0, 0, 0); } else { - *dest = gb->sprite_palettes_rgb[oam_fifo_item->palette * 4 + pixel]; + *dest = gb->object_palettes_rgb[oam_fifo_item->palette * 4 + pixel]; } } @@ -612,6 +728,23 @@ static void render_pixel_if_possible(GB_gameboy_t *gb) gb->window_is_being_fetched = false; } +static inline void dma_sync(GB_gameboy_t *gb, unsigned *cycles) +{ + if (unlikely(GB_is_dma_active(gb))) { + unsigned offset = *cycles - gb->display_cycles; // Time passed in 8MHz ticks + if (offset) { + *cycles = gb->display_cycles; + if (!gb->cgb_double_speed) { + offset >>= 1; // Convert to T-cycles + } + unsigned old = gb->dma_cycles; + gb->dma_cycles = offset; + GB_dma_run(gb); + gb->dma_cycles = old - offset; + } + } +} + /* All verified CGB timings are based on CGB CPU E. CGB CPUs >= D are known to have slightly different timings than CPUs <= C. @@ -622,7 +755,45 @@ static inline uint8_t fetcher_y(GB_gameboy_t *gb) return gb->wx_triggered? gb->window_y : gb->current_line + gb->io_registers[GB_IO_SCY]; } -static void advance_fetcher_state_machine(GB_gameboy_t *gb) +static inline uint8_t vram_read(GB_gameboy_t *gb, uint16_t addr) +{ + if (unlikely(gb->vram_ppu_blocked)) { + return 0xFF; + } + if (unlikely(gb->hdma_in_progress)) { + gb->addr_for_hdma_conflict = addr; + return 0; + } + // TODO: what if both? + else if (unlikely(gb->dma_current_dest <= 0xA0 && gb->dma_current_dest > 0 && (gb->dma_current_src & 0xE000) == 0x8000)) { // TODO: what happens in the last and first M cycles? + // DMAing from VRAM! + /* TODO: AGS has its own, very different pattern, but AGS is not currently a supported model */ + /* TODO: Research this when researching odd modes */ + /* TODO: probably not 100% on the first few reads during halt/stop modes*/ + unsigned offset = 1 - (gb->halted || gb->stopped); + if (GB_is_cgb(gb)) { + if (gb->dma_ppu_vram_conflict) { + addr = (gb->dma_ppu_vram_conflict_addr & 0x1FFF) | (addr & 0x2000); + } + else if (gb->dma_cycles_modulo && !gb->halted && !gb->stopped) { + addr &= 0x2000; + addr |= ((gb->dma_current_src - offset) & 0x1FFF); + } + else { + addr &= 0x2000 | ((gb->dma_current_src - offset) & 0x1FFF); + gb->dma_ppu_vram_conflict_addr = addr; + gb->dma_ppu_vram_conflict = !gb->halted && !gb->stopped; + } + } + else { + addr |= ((gb->dma_current_src - offset) & 0x1FFF); + } + gb->oam[gb->dma_current_dest - offset] = gb->vram[(addr & 0x1FFF) | (gb->cgb_vram_bank? 0x2000 : 0)]; + } + return gb->vram[addr]; +} + +static void advance_fetcher_state_machine(GB_gameboy_t *gb, unsigned *cycles) { typedef enum { GB_FETCHER_GET_TILE, @@ -644,18 +815,19 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) }; switch (fetcher_state_machine[gb->fetcher_state & 7]) { case GB_FETCHER_GET_TILE: { + dma_sync(gb, cycles); uint16_t map = 0x1800; - if (!(gb->io_registers[GB_IO_LCDC] & 0x20)) { + if (!(gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE)) { gb->wx_triggered = false; gb->wx166_glitch = false; } /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ - if (gb->io_registers[GB_IO_LCDC] & 0x08 && !gb->wx_triggered) { + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_MAP && !gb->wx_triggered) { map = 0x1C00; } - else if (gb->io_registers[GB_IO_LCDC] & 0x40 && gb->wx_triggered) { + else if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_MAP && gb->wx_triggered) { map = 0x1C00; } @@ -665,6 +837,9 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) if (gb->wx_triggered) { x = gb->window_tile_x; } + else if ((uint8_t)(gb->position_in_line + 16) < 8) { + x = gb->io_registers[GB_IO_SCX] >> 3; + } else { /* TODO: There is some CGB timing error around here. Adjusting SCX by 7 or less shouldn't have an effect on a CGB, @@ -676,33 +851,29 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) gb->fetcher_y = y; } gb->last_tile_index_address = map + x + y / 8 * 32; - gb->current_tile = gb->vram[gb->last_tile_index_address]; - if (gb->vram_ppu_blocked) { - gb->current_tile = 0xFF; - } + gb->current_tile = vram_read(gb, gb->last_tile_index_address); if (GB_is_cgb(gb)) { /* The CGB actually accesses both the tile index AND the attributes in the same T-cycle. This probably means the CGB has a 16-bit data bus for the VRAM. */ - gb->current_tile_attributes = gb->vram[gb->last_tile_index_address + 0x2000]; - if (gb->vram_ppu_blocked) { - gb->current_tile_attributes = 0xFF; - } + gb->current_tile_attributes = vram_read(gb, gb->last_tile_index_address + 0x2000); } } gb->fetcher_state++; break; case GB_FETCHER_GET_TILE_DATA_LOWER: { + dma_sync(gb, cycles); bool use_glitched = false; + bool cgb_d_glitch = false; if (gb->tile_sel_glitch) { - gb->current_tile_data[0] = data_for_tile_sel_glitch(gb, &use_glitched); + gb->current_tile_data[0] = data_for_tile_sel_glitch(gb, &use_glitched, &cgb_d_glitch); } uint8_t y_flip = 0; uint16_t tile_address = 0; uint8_t y = gb->model > GB_MODEL_CGB_C ? gb->fetcher_y : fetcher_y(gb); /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ - if (gb->io_registers[GB_IO_LCDC] & 0x10) { + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL) { tile_address = gb->current_tile * 0x10; } else { @@ -716,34 +887,34 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) } if (!use_glitched) { gb->current_tile_data[0] = - gb->vram[tile_address + ((y & 7) ^ y_flip) * 2]; - if (gb->vram_ppu_blocked) { - gb->current_tile_data[0] = 0xFF; - } + vram_read(gb, tile_address + ((y & 7) ^ y_flip) * 2); + } - else { + if ((gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL) && gb->tile_sel_glitch) { gb->data_for_sel_glitch = - gb->vram[tile_address + ((y & 7) ^ y_flip) * 2]; - if (gb->vram_ppu_blocked) { - gb->data_for_sel_glitch = 0xFF; - } + vram_read(gb, tile_address + ((y & 7) ^ y_flip) * 2); + } + else if (cgb_d_glitch) { + gb->data_for_sel_glitch = vram_read(gb, gb->current_tile * 0x10 + ((y & 7) ^ y_flip) * 2); } } gb->fetcher_state++; break; case GB_FETCHER_GET_TILE_DATA_HIGH: { + dma_sync(gb, cycles); /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ bool use_glitched = false; + bool cgb_d_glitch = false; if (gb->tile_sel_glitch) { - gb->current_tile_data[1] = data_for_tile_sel_glitch(gb, &use_glitched); + gb->current_tile_data[1] = data_for_tile_sel_glitch(gb, &use_glitched, &cgb_d_glitch); } uint16_t tile_address = 0; uint8_t y = gb->model > GB_MODEL_CGB_C ? gb->fetcher_y : fetcher_y(gb); - if (gb->io_registers[GB_IO_LCDC] & 0x10) { + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL) { tile_address = gb->current_tile * 0x10; } else { @@ -756,26 +927,23 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) if (gb->current_tile_attributes & 0x40) { y_flip = 0x7; } - gb->last_tile_data_address = tile_address + ((y & 7) ^ y_flip) * 2 + 1; + gb->last_tile_data_address = tile_address + ((y & 7) ^ y_flip) * 2 + 1 - cgb_d_glitch; if (!use_glitched) { gb->current_tile_data[1] = - gb->vram[gb->last_tile_data_address]; - if (gb->vram_ppu_blocked) { - gb->current_tile_data[1] = 0xFF; - } + vram_read(gb, gb->last_tile_data_address); } - else { - if ((gb->io_registers[GB_IO_LCDC] & 0x10) && gb->tile_sel_glitch) { - gb->data_for_sel_glitch = gb->vram[gb->last_tile_data_address]; - if (gb->vram_ppu_blocked) { - gb->data_for_sel_glitch = 0xFF; - } - } + if ((gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL) && gb->tile_sel_glitch) { + gb->data_for_sel_glitch = vram_read(gb, gb->last_tile_data_address); + + } + else if (cgb_d_glitch) { + gb->data_for_sel_glitch = vram_read(gb, gb->current_tile * 0x10 + ((y & 7) ^ y_flip) * 2 + 1); + } } if (gb->wx_triggered) { gb->window_tile_x++; - gb->window_tile_x &= 0x1f; + gb->window_tile_x &= 0x1F; } // fallthrough @@ -785,6 +953,21 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) } if (fifo_size(&gb->bg_fifo) > 0) break; + if (unlikely(gb->wy_triggered && !(gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE) && !GB_is_cgb(gb) && !gb->disable_window_pixel_insertion_glitch)) { + /* See https://github.com/LIJI32/SameBoy/issues/278 for documentation */ + uint8_t logical_position = gb->position_in_line + 7; + if (logical_position > 167) { + logical_position = 0; + } + if (gb->io_registers[GB_IO_WX] == logical_position) { + gb->bg_fifo.read_end--; + gb->bg_fifo.read_end &= GB_FIFO_LENGTH - 1; + gb->bg_fifo.fifo[gb->bg_fifo.read_end] = (GB_fifo_item_t){0,}; + gb->bg_fifo.size = 1; + break; + } + } + fifo_push_bg_row(&gb->bg_fifo, gb->current_tile_data[0], gb->current_tile_data[1], gb->current_tile_attributes & 7, gb->current_tile_attributes & 0x80, gb->current_tile_attributes & 0x20); gb->fetcher_state = 0; @@ -796,60 +979,468 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb) gb->fetcher_state++; } break; + + nodefault; } } -static uint16_t get_object_line_address(GB_gameboy_t *gb, const GB_object_t *object) +static uint16_t get_object_line_address(GB_gameboy_t *gb, uint8_t y, uint8_t tile, uint8_t flags) { - /* TODO: what does the PPU read if DMA is active? */ - if (gb->oam_ppu_blocked) { - static const GB_object_t blocked = {0xFF, 0xFF, 0xFF, 0xFF}; - object = &blocked; - } + bool height_16 = (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_SIZE) != 0; /* Todo: Which T-cycle actually reads this? */ + uint8_t tile_y = (gb->current_line - y) & (height_16? 0xF : 7); - bool height_16 = (gb->io_registers[GB_IO_LCDC] & 4) != 0; /* Todo: Which T-cycle actually reads this? */ - uint8_t tile_y = (gb->current_line - object->y) & (height_16? 0xF : 7); - - if (object->flags & 0x40) { /* Flip Y */ + if (flags & 0x40) { /* Flip Y */ tile_y ^= height_16? 0xF : 7; } /* Todo: I'm not 100% sure an access to OAM can't trigger the OAM bug while we're accessing this */ - uint16_t line_address = (height_16? object->tile & 0xFE : object->tile) * 0x10 + tile_y * 2; + uint16_t line_address = (height_16? tile & 0xFE : tile) * 0x10 + tile_y * 2; - if (gb->cgb_mode && (object->flags & 0x8)) { /* Use VRAM bank 2 */ + if (gb->cgb_mode && (flags & 0x8)) { /* Use VRAM bank 2 */ line_address += 0x2000; } return line_address; } +static inline uint8_t flip(uint8_t x) +{ + x = (x & 0xF0) >> 4 | (x & 0x0F) << 4; + x = (x & 0xCC) >> 2 | (x & 0x33) << 2; + x = (x & 0xAA) >> 1 | (x & 0x55) << 1; + return x; +} + +static inline void get_tile_data(const GB_gameboy_t *gb, uint8_t tile_x, uint8_t y, uint16_t map, uint8_t *attributes, uint8_t *data0, uint8_t *data1) +{ + uint8_t current_tile = gb->vram[map + (tile_x & 0x1F) + y / 8 * 32]; + *attributes = GB_is_cgb(gb)? gb->vram[0x2000 + map + (tile_x & 0x1F) + y / 8 * 32] : 0; + + uint16_t tile_address = 0; + + /* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong. */ + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL) { + tile_address = current_tile * 0x10; + } + else { + tile_address = (int8_t)current_tile * 0x10 + 0x1000; + } + if (*attributes & 8) { + tile_address += 0x2000; + } + uint8_t y_flip = 0; + if (*attributes & 0x40) { + y_flip = 0x7; + } + + *data0 = gb->vram[tile_address + ((y & 7) ^ y_flip) * 2]; + *data1 = gb->vram[tile_address + ((y & 7) ^ y_flip) * 2 + 1]; + + if (*attributes & 0x20) { + *data0 = flip(*data0); + *data1 = flip(*data1); + } + +} + +static void render_line(GB_gameboy_t *gb) +{ + if (gb->disable_rendering) return; + if (!gb->screen) return; + if (gb->current_line > 144) return; // Corrupt save state + + struct { + unsigned pixel:2; // Color, 0-3 + unsigned priority:6; // Object priority – 0 in DMG, OAM index in CGB + unsigned palette:3; // Palette, 0 - 7 (CGB); 0-1 in DMG (or just 0 for BG) + bool bg_priority:1; // BG priority bit + } _object_buffer[160 + 16]; // allocate extra to avoid per pixel checks + static const uint8_t empty_object_buffer[sizeof(_object_buffer)]; + const typeof(_object_buffer[0]) *object_buffer; + + if (gb->n_visible_objs && !gb->objects_disabled && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_EN)) { + object_buffer = &_object_buffer[0]; + object_t *objects = (object_t *) &gb->oam; + memset(_object_buffer, 0, sizeof(_object_buffer)); + + while (gb->n_visible_objs) { + unsigned object_index = gb->visible_objs[gb->n_visible_objs - 1]; + unsigned priority = gb->object_priority == GB_OBJECT_PRIORITY_X? 0 : object_index; + const object_t *object = &objects[object_index]; + gb->n_visible_objs--; + + uint16_t line_address = get_object_line_address(gb, object->y, object->tile, object->flags); + uint8_t data0 = gb->vram[line_address]; + uint8_t data1 = gb->vram[line_address + 1]; + if (gb->n_visible_objs == 0) { + gb->data_for_sel_glitch = data1; + } + if (object->flags & 0x20) { + data0 = flip(data0); + data1 = flip(data1); + } + + typeof(_object_buffer[0]) *p = _object_buffer + object->x; + if (object->x >= 168) { + continue; + } + unrolled for (unsigned x = 0; x < 8; x++) { + unsigned pixel = (data0 >> 7) | ((data1 >> 7) << 1); + data0 <<= 1; + data1 <<= 1; + if (pixel && (!p->pixel || priority < p->priority)) { + p->pixel = pixel; + p->priority = priority; + + if (gb->cgb_mode) { + p->palette = object->flags & 0x7; + } + else { + p->palette = (object->flags & 0x10) >> 4; + } + p->bg_priority = object->flags & 0x80; + } + p++; + } + } + } + else { + object_buffer = (const void *)empty_object_buffer; + } + + + uint32_t *restrict p = gb->screen; + typeof(object_buffer[0]) *object_buffer_pointer = object_buffer + 8; + if (gb->border_mode == GB_BORDER_ALWAYS) { + p += (BORDERED_WIDTH - (WIDTH)) / 2 + BORDERED_WIDTH * (BORDERED_HEIGHT - LINES) / 2; + p += BORDERED_WIDTH * gb->current_line; + } + else { + p += WIDTH * gb->current_line; + } + + if (unlikely(gb->background_disabled) || (!gb->cgb_mode && !(gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_EN))) { + uint32_t bg = gb->background_palettes_rgb[gb->cgb_mode? 0 : (gb->io_registers[GB_IO_BGP] & 3)]; + for (unsigned i = 160; i--;) { + if (unlikely(object_buffer_pointer->pixel)) { + uint8_t pixel = object_buffer_pointer->pixel; + if (!gb->cgb_mode) { + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3); + } + *(p++) = gb->object_palettes_rgb[pixel + (object_buffer_pointer->palette & 7) * 4]; + } + else { + *(p++) = bg; + } + object_buffer_pointer++; + } + return; + } + + unsigned pixels = 0; + uint8_t tile_x = gb->io_registers[GB_IO_SCX] / 8; + unsigned fractional_scroll = gb->io_registers[GB_IO_SCX] & 7; + uint16_t map = 0x1800; + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_MAP) { + map = 0x1C00; + } + uint8_t y = gb->current_line + gb->io_registers[GB_IO_SCY]; + uint8_t attributes; + uint8_t data0, data1; + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + +#define DO_PIXEL() \ +uint8_t pixel = (data0 >> 7) | ((data1 >> 7) << 1);\ +data0 <<= 1;\ +data1 <<= 1;\ +\ +if (unlikely(object_buffer_pointer->pixel) && (pixel == 0 || !(object_buffer_pointer->bg_priority || (attributes & 0x80)) || !(gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_EN))) {\ + pixel = object_buffer_pointer->pixel;\ + if (!gb->cgb_mode) {\ + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3);\ + }\ + *(p++) = gb->object_palettes_rgb[pixel + (object_buffer_pointer->palette & 7) * 4];\ +}\ +else {\ + if (!gb->cgb_mode) {\ + pixel = ((gb->io_registers[GB_IO_BGP] >> (pixel << 1)) & 3);\ + }\ + *(p++) = gb->background_palettes_rgb[pixel + (attributes & 7) * 4];\ +}\ +pixels++;\ +object_buffer_pointer++\ + + // First 1-8 pixels + data0 <<= fractional_scroll; + data1 <<= fractional_scroll; + bool check_window = gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE); + for (unsigned i = fractional_scroll; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { +activate_window: + check_window = false; + map = gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_MAP? 0x1C00 : 0x1800; + tile_x = -1; + y = ++gb->window_y; + break; + } + DO_PIXEL(); + } + tile_x++; + + while (pixels < 160 - 8) { + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + for (unsigned i = 0; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } + tile_x++; + } + + gb->fetcher_state = (160 - pixels) & 7; + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + while (pixels < 160) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } + tile_x++; + + get_tile_data(gb, tile_x, y, map, &attributes, gb->current_tile_data, gb->current_tile_data + 1); +#undef DO_PIXEL +} + +static void render_line_sgb(GB_gameboy_t *gb) +{ + if (gb->current_line > 144) return; // Corrupt save state + + struct { + unsigned pixel:2; // Color, 0-3 + unsigned palette:1; // Palette, 0 - 7 (CGB); 0-1 in DMG (or just 0 for BG) + bool bg_priority:1; // BG priority bit + } _object_buffer[160 + 16]; // allocate extra to avoid per pixel checks + static const uint8_t empty_object_buffer[sizeof(_object_buffer)]; + const typeof(_object_buffer[0]) *object_buffer; + + if (gb->n_visible_objs && !gb->objects_disabled && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_EN)) { + object_buffer = &_object_buffer[0]; + object_t *objects = (object_t *) &gb->oam; + memset(_object_buffer, 0, sizeof(_object_buffer)); + + while (gb->n_visible_objs) { + const object_t *object = &objects[gb->visible_objs[gb->n_visible_objs - 1]]; + gb->n_visible_objs--; + + uint16_t line_address = get_object_line_address(gb, object->y, object->tile, object->flags); + uint8_t data0 = gb->vram[line_address]; + uint8_t data1 = gb->vram[line_address + 1]; + if (object->flags & 0x20) { + data0 = flip(data0); + data1 = flip(data1); + } + + typeof(_object_buffer[0]) *p = _object_buffer + object->x; + if (object->x >= 168) { + continue; + } + unrolled for (unsigned x = 0; x < 8; x++) { + unsigned pixel = (data0 >> 7) | ((data1 >> 7) << 1); + data0 <<= 1; + data1 <<= 1; + if (!p->pixel) { + p->pixel = pixel; + p->palette = (object->flags & 0x10) >> 4; + p->bg_priority = object->flags & 0x80; + } + p++; + } + } + } + else { + object_buffer = (const void *)empty_object_buffer; + } + + + uint8_t *restrict p = gb->sgb->screen_buffer; + typeof(object_buffer[0]) *object_buffer_pointer = object_buffer + 8; + p += WIDTH * gb->current_line; + + if (unlikely(gb->background_disabled) || (!gb->cgb_mode && !(gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_EN))) { + for (unsigned i = 160; i--;) { + if (unlikely(object_buffer_pointer->pixel)) { + uint8_t pixel = object_buffer_pointer->pixel; + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3); + *(p++) = pixel; + } + else { + *(p++) = gb->io_registers[GB_IO_BGP] & 3; + } + object_buffer_pointer++; + } + return; + } + + unsigned pixels = 0; + uint8_t tile_x = gb->io_registers[GB_IO_SCX] / 8; + unsigned fractional_scroll = gb->io_registers[GB_IO_SCX] & 7; + uint16_t map = 0x1800; + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_MAP) { + map = 0x1C00; + } + uint8_t y = gb->current_line + gb->io_registers[GB_IO_SCY]; + uint8_t attributes; + uint8_t data0, data1; + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + +#define DO_PIXEL() \ +uint8_t pixel = (data0 >> 7) | ((data1 >> 7) << 1);\ +data0 <<= 1;\ +data1 <<= 1;\ +\ +if (unlikely(object_buffer_pointer->pixel) && (pixel == 0 || !object_buffer_pointer->bg_priority || !(gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_EN))) {\ + pixel = object_buffer_pointer->pixel;\ + pixel = ((gb->io_registers[GB_IO_OBP0 + object_buffer_pointer->palette] >> (pixel << 1)) & 3);\ + *(p++) = pixel;\ +}\ +else {\ + pixel = ((gb->io_registers[GB_IO_BGP] >> (pixel << 1)) & 3);\ + *(p++) = pixel;\ +}\ +pixels++;\ +object_buffer_pointer++\ + + // First 1-8 pixels + data0 <<= fractional_scroll; + data1 <<= fractional_scroll; + bool check_window = gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE); + for (unsigned i = fractional_scroll; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + activate_window: + check_window = false; + map = gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_MAP? 0x1C00 : 0x1800; + tile_x = -1; + y = ++gb->window_y; + break; + } + DO_PIXEL(); + } + tile_x++; + + while (pixels < 160 - 8) { + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + for (unsigned i = 0; i < 8; i++) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } + tile_x++; + } + + get_tile_data(gb, tile_x, y, map, &attributes, &data0, &data1); + while (pixels < 160) { + if (check_window && gb->io_registers[GB_IO_WX] == pixels + 7) { + goto activate_window; + } + DO_PIXEL(); + } +} + +static inline uint16_t mode3_batching_length(GB_gameboy_t *gb) +{ + if (gb->position_in_line != (uint8_t)-16) return 0; + if (gb->model & GB_MODEL_NO_SFC_BIT) return 0; + if (gb->hdma_on) return 0; + if (gb->stopped) return 0; + if (GB_is_dma_active(gb)) return 0; + if (gb->wy_triggered) { + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE) { + if ((gb->io_registers[GB_IO_WX] < 8 || gb->io_registers[GB_IO_WX] == 166)) { + return 0; + } + } + else { + if (gb->io_registers[GB_IO_WX] < 167 && !GB_is_cgb(gb)) { + return 0; + } + } + } + + // No objects or window, timing is trivial + if (gb->n_visible_objs == 0 && !(gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE))) return 167 + (gb->io_registers[GB_IO_SCX] & 7); + + if (gb->hdma_on_hblank) return 0; + + // 300 is a bit more than the maximum Mode 3 length + + // No HBlank interrupt + if (!(gb->io_registers[GB_IO_STAT] & 0x8)) return 300; + // No STAT interrupt requested + if (!(gb->interrupt_enable & 2)) return 300; + + + return 0; +} + +static inline uint8_t x_for_object_match(GB_gameboy_t *gb) +{ + uint8_t ret = gb->position_in_line + 8; + if (ret > (uint8_t)-16) return 0; + return ret; +} + /* TODO: It seems that the STAT register's mode bits are always "late" by 4 T-cycles. The PPU logic can be greatly simplified if that delay is simply emulated. */ -void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) +void GB_display_run(GB_gameboy_t *gb, unsigned cycles, bool force) { + if (unlikely((gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE) && (signed)(gb->cycles_for_line * 2 + cycles + gb->display_cycles) > LINE_LENGTH * 2)) { + unsigned first_batch = (LINE_LENGTH * 2 - gb->cycles_for_line * 2 + gb->display_cycles); + GB_display_run(gb, first_batch, force); + cycles -= first_batch; + if (gb->display_state == 22) { + gb->io_registers[GB_IO_STAT] &= ~3; + gb->mode_for_interrupt = 0; + GB_STAT_update(gb); + } + gb->display_state = 9; + gb->display_cycles = 0; + } + if (unlikely(gb->delayed_glitch_hblank_interrupt && cycles && gb->current_line < LINES)) { + gb->delayed_glitch_hblank_interrupt = false; + gb->mode_for_interrupt = 0; + GB_STAT_update(gb); + gb->mode_for_interrupt = 3; + } + gb->cycles_since_vblank_callback += cycles / 2; + + if (cycles < gb->frame_repeat_countdown) { + gb->frame_repeat_countdown -= cycles; + } + else { + gb->frame_repeat_countdown = 0; + } + /* The PPU does not advance while in STOP mode on the DMG */ if (gb->stopped && !GB_is_cgb(gb)) { - gb->cycles_in_stop_mode += cycles; - if (gb->cycles_in_stop_mode >= LCDC_PERIOD) { - gb->cycles_in_stop_mode -= LCDC_PERIOD; - display_vblank(gb); + if (gb->cycles_since_vblank_callback >= LCDC_PERIOD) { + GB_display_vblank(gb, GB_VBLANK_TYPE_ARTIFICIAL); } return; } - GB_object_t *objects = (GB_object_t *) &gb->oam; - - GB_STATE_MACHINE(gb, display, cycles, 2) { + + GB_BATCHABLE_STATE_MACHINE(gb, display, cycles, 2, !force) { GB_STATE(gb, display, 1); GB_STATE(gb, display, 2); - // GB_STATE(gb, display, 3); - // GB_STATE(gb, display, 4); - // GB_STATE(gb, display, 5); + GB_STATE(gb, display, 3); + GB_STATE(gb, display, 4); + GB_STATE(gb, display, 5); GB_STATE(gb, display, 6); GB_STATE(gb, display, 7); GB_STATE(gb, display, 8); - // GB_STATE(gb, display, 9); + GB_STATE(gb, display, 9); GB_STATE(gb, display, 10); GB_STATE(gb, display, 11); GB_STATE(gb, display, 12); @@ -858,13 +1449,12 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) GB_STATE(gb, display, 15); GB_STATE(gb, display, 16); GB_STATE(gb, display, 17); - // GB_STATE(gb, display, 19); + GB_STATE(gb, display, 19); GB_STATE(gb, display, 20); GB_STATE(gb, display, 21); GB_STATE(gb, display, 22); GB_STATE(gb, display, 23); GB_STATE(gb, display, 24); - GB_STATE(gb, display, 25); GB_STATE(gb, display, 26); GB_STATE(gb, display, 27); GB_STATE(gb, display, 28); @@ -882,13 +1472,15 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) GB_STATE(gb, display, 40); GB_STATE(gb, display, 41); GB_STATE(gb, display, 42); + GB_STATE(gb, display, 43); } - if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) { + if (!(gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE)) { while (true) { - GB_SLEEP(gb, display, 1, LCDC_PERIOD); - display_vblank(gb); - gb->cgb_repeated_a_frame = true; + if (gb->cycles_since_vblank_callback < LCDC_PERIOD) { + GB_SLEEP(gb, display, 1, LCDC_PERIOD - gb->cycles_since_vblank_callback); + } + GB_display_vblank(gb, GB_VBLANK_TYPE_LCD_OFF); } return; } @@ -903,6 +1495,7 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->current_line = 0; gb->window_y = -1; gb->wy_triggered = false; + gb->position_in_line = -16; gb->ly_for_comparison = 0; gb->io_registers[GB_IO_STAT] &= ~3; @@ -922,6 +1515,7 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) GB_SLEEP(gb, display, 34, 2); gb->n_visible_objs = 0; + gb->orig_n_visible_objs = 0; gb->cycles_for_line += 8; // Mode 0 is shorter on the first line 0, so we augment cycles_for_line by 8 extra cycles. gb->io_registers[GB_IO_STAT] &= ~3; @@ -948,11 +1542,54 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->wx_triggered = false; gb->wx166_glitch = false; goto mode_3_start; - + + // Mode 3 abort, state 9 + display9: { + // TODO: Timing of things in this scenario is almost completely untested + if (gb->current_line < LINES && !GB_is_sgb(gb) && !gb->disable_rendering) { + GB_log(gb, "The ROM is preventing line %d from fully rendering, this could damage a real device's LCD display.\n", gb->current_line); + uint32_t *dest = NULL; + if (gb->border_mode != GB_BORDER_ALWAYS) { + dest = gb->screen + gb->lcd_x + gb->current_line * WIDTH; + } + else { + dest = gb->screen + gb->lcd_x + gb->current_line * BORDERED_WIDTH + (BORDERED_WIDTH - WIDTH) / 2 + (BORDERED_HEIGHT - LINES) / 2 * BORDERED_WIDTH; + } + uint32_t color = GB_is_cgb(gb)? GB_convert_rgb15(gb, 0x7FFF, false) : gb->background_palettes_rgb[4]; + while (gb->lcd_x < 160) { + *(dest++) = color; + gb->lcd_x++; + } + } + gb->n_visible_objs = gb->orig_n_visible_objs; + gb->current_line++; + gb->cycles_for_line = 0; + if (gb->current_line != LINES) { + gb->cycles_for_line = 2; + GB_SLEEP(gb, display, 28, 2); + gb->io_registers[GB_IO_LY] = gb->current_line; + if (gb->position_in_line >= 156 && gb->position_in_line < (uint8_t)-16) { + gb->delayed_glitch_hblank_interrupt = true; + } + GB_STAT_update(gb); + gb->position_in_line = -15; + goto mode_3_start; + } + else { + if (gb->position_in_line >= 156 && gb->position_in_line < (uint8_t)-16) { + gb->delayed_glitch_hblank_interrupt = true; + } + gb->position_in_line = -16; + } + } + while (true) { /* Lines 0 - 143 */ gb->window_y = -1; for (; gb->current_line < LINES; gb->current_line++) { + if (unlikely(gb->lcd_line_callback)) { + gb->lcd_line_callback(gb, gb->current_line); + } gb->oam_write_blocked = GB_is_cgb(gb) && !gb->cgb_double_speed; gb->accessed_oam_row = 0; @@ -987,7 +1624,11 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->mode_for_interrupt = -1; GB_STAT_update(gb); gb->n_visible_objs = 0; + gb->orig_n_visible_objs = 0; + if (!GB_is_dma_active(gb) && !gb->oam_ppu_blocked) { + GB_BATCHPOINT(gb, display, 5, 80); + } for (gb->oam_search_index = 0; gb->oam_search_index < 40; gb->oam_search_index++) { if (GB_is_cgb(gb)) { add_object_from_index(gb, gb->oam_search_index); @@ -1003,11 +1644,10 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->vram_write_blocked = false; gb->cgb_palettes_blocked = false; gb->oam_write_blocked = GB_is_cgb(gb); - GB_STAT_update(gb); } } gb->cycles_for_line = MODE2_LENGTH + 4; - + gb->orig_n_visible_objs = gb->n_visible_objs; gb->accessed_oam_row = -1; gb->io_registers[GB_IO_STAT] &= ~3; gb->io_registers[GB_IO_STAT] |= 3; @@ -1032,8 +1672,9 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->cycles_for_line += 2; GB_SLEEP(gb, display, 32, 2); mode_3_start: + gb->disable_window_pixel_insertion_glitch = false; /* TODO: Timing seems incorrect, might need an access conflict handling. */ - if ((gb->io_registers[GB_IO_LCDC] & 0x20) && + if ((gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE) && gb->io_registers[GB_IO_WY] == gb->current_line) { gb->wy_triggered = true; } @@ -1042,15 +1683,26 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) fifo_clear(&gb->oam_fifo); /* Fill the FIFO with 8 pixels of "junk", it's going to be dropped anyway. */ fifo_push_bg_row(&gb->bg_fifo, 0, 0, 0, false, false); - /* Todo: find out actual access time of SCX */ - gb->position_in_line = - (gb->io_registers[GB_IO_SCX] & 7) - 8; gb->lcd_x = 0; - - gb->extra_penalty_for_sprite_at_0 = (gb->io_registers[GB_IO_SCX] & 7); - /* The actual rendering cycle */ gb->fetcher_state = 0; + if ((gb->mode3_batching_length = mode3_batching_length(gb))) { + GB_BATCHPOINT(gb, display, 3, gb->mode3_batching_length); + if (GB_BATCHED_CYCLES(gb, display) >= gb->mode3_batching_length) { + // Successfully batched! + gb->lcd_x = gb->position_in_line = 160; + gb->cycles_for_line += gb->mode3_batching_length; + if (gb->sgb) { + render_line_sgb(gb); + } + else { + render_line(gb); + } + GB_SLEEP(gb, display, 4, gb->mode3_batching_length); + goto skip_slow_mode_3; + } + } while (true) { /* Handle window */ /* TODO: It appears that WX checks if the window begins *next* pixel, not *this* pixel. For this reason, @@ -1059,16 +1711,16 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) that point. The code should be updated to represent this, and this will fix the time travel hack in WX's access conflict code. */ - if (!gb->wx_triggered && gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20)) { + if (!gb->wx_triggered && gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE)) { bool should_activate_window = false; if (gb->io_registers[GB_IO_WX] == 0) { - static const uint8_t scx_to_wx0_comparisons[] = {-7, -9, -10, -11, -12, -13, -14, -14}; + static const uint8_t scx_to_wx0_comparisons[] = {-7, -1, -2, -3, -4, -5, -6, -6}; if (gb->position_in_line == scx_to_wx0_comparisons[gb->io_registers[GB_IO_SCX] & 7]) { should_activate_window = true; } } else if (gb->wx166_glitch) { - static const uint8_t scx_to_wx166_comparisons[] = {-8, -9, -10, -11, -12, -13, -14, -15}; + static const uint8_t scx_to_wx166_comparisons[] = {-16, -1, -2, -3, -4, -5, -6, -7}; if (gb->position_in_line == scx_to_wx166_comparisons[gb->io_registers[GB_IO_SCX] & 7]) { should_activate_window = true; } @@ -1106,34 +1758,30 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->window_y++; } } - - /* TODO: What happens when WX=0? */ + + /* TODO: What happens when WX=0?*/ if (!GB_is_cgb(gb) && gb->wx_triggered && !gb->window_is_being_fetched && - gb->fetcher_state == 0 && gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 7) ) { + gb->fetcher_state == 0 && gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 7) && gb->bg_fifo.size == 8) { // Insert a pixel right at the FIFO's end - gb->bg_fifo.read_end--; - gb->bg_fifo.read_end &= GB_FIFO_LENGTH - 1; - gb->bg_fifo.fifo[gb->bg_fifo.read_end] = (GB_fifo_item_t){0,}; - gb->window_is_being_fetched = false; + gb->insert_bg_pixel = true; } - + /* Handle objects */ - /* When the sprite enabled bit is off, this proccess is skipped entirely on the DMG, but not on the CGB. + /* When the object enabled bit is off, this proccess is skipped entirely on the DMG, but not on the CGB. On the CGB, this bit is checked only when the pixel is actually popped from the FIFO. */ - + while (gb->n_visible_objs != 0 && - (gb->position_in_line < 160 || gb->position_in_line >= (uint8_t)(-8)) && - gb->obj_comparators[gb->n_visible_objs - 1] < (uint8_t)(gb->position_in_line + 8)) { + gb->objects_x[gb->n_visible_objs - 1] < x_for_object_match(gb)) { gb->n_visible_objs--; } gb->during_object_fetch = true; while (gb->n_visible_objs != 0 && - (gb->io_registers[GB_IO_LCDC] & 2 || GB_is_cgb(gb)) && - gb->obj_comparators[gb->n_visible_objs - 1] == (uint8_t)(gb->position_in_line + 8)) { + (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_EN || GB_is_cgb(gb)) && + gb->objects_x[gb->n_visible_objs - 1] == x_for_object_match(gb)) { while (gb->fetcher_state < 5 || fifo_size(&gb->bg_fifo) == 0) { - advance_fetcher_state_machine(gb); + advance_fetcher_state_machine(gb, &cycles); gb->cycles_for_line++; GB_SLEEP(gb, display, 27, 1); if (gb->object_fetch_aborted) { @@ -1141,20 +1789,8 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) } } - /* Todo: Measure if penalty occurs before or after waiting for the fetcher. */ - if (gb->extra_penalty_for_sprite_at_0 != 0) { - if (gb->obj_comparators[gb->n_visible_objs - 1] == 0) { - gb->cycles_for_line += gb->extra_penalty_for_sprite_at_0; - GB_SLEEP(gb, display, 28, gb->extra_penalty_for_sprite_at_0); - gb->extra_penalty_for_sprite_at_0 = 0; - if (gb->object_fetch_aborted) { - goto abort_fetching_object; - } - } - } - /* TODO: Can this be deleted? { */ - advance_fetcher_state_machine(gb); + advance_fetcher_state_machine(gb, &cycles); gb->cycles_for_line++; GB_SLEEP(gb, display, 41, 1); if (gb->object_fetch_aborted) { @@ -1162,18 +1798,28 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) } /* } */ - advance_fetcher_state_machine(gb); - - gb->cycles_for_line += 3; - GB_SLEEP(gb, display, 20, 3); + advance_fetcher_state_machine(gb, &cycles); + dma_sync(gb, &cycles); + gb->mode2_y_bus = oam_read(gb, gb->visible_objs[gb->n_visible_objs - 1] * 4 + 2); + gb->object_flags = oam_read(gb, gb->visible_objs[gb->n_visible_objs - 1] * 4 + 3); + + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 20, 2); if (gb->object_fetch_aborted) { goto abort_fetching_object; } - gb->object_low_line_address = get_object_line_address(gb, &objects[gb->visible_objs[gb->n_visible_objs - 1]]); + /* TODO: timing not verified */ + dma_sync(gb, &cycles); + gb->object_low_line_address = get_object_line_address(gb, + gb->objects_y[gb->n_visible_objs - 1], + gb->mode2_y_bus, + gb->object_flags); + gb->object_tile_data[0] = vram_read(gb, gb->object_low_line_address); + - gb->cycles_for_line++; - GB_SLEEP(gb, display, 39, 1); + gb->cycles_for_line += 2; + GB_SLEEP(gb, display, 39, 2); if (gb->object_fetch_aborted) { goto abort_fetching_object; } @@ -1181,24 +1827,28 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->during_object_fetch = false; gb->cycles_for_line++; GB_SLEEP(gb, display, 40, 1); - - const GB_object_t *object = &objects[gb->visible_objs[gb->n_visible_objs - 1]]; - uint16_t line_address = get_object_line_address(gb, object); + /* TODO: timing not verified */ + dma_sync(gb, &cycles); + gb->object_tile_data[1] = vram_read(gb, get_object_line_address(gb, + gb->objects_y[gb->n_visible_objs - 1], + gb->mode2_y_bus, + gb->object_flags) + 1); + - uint8_t palette = (object->flags & 0x10) ? 1 : 0; + uint8_t palette = (gb->object_flags & 0x10) ? 1 : 0; if (gb->cgb_mode) { - palette = object->flags & 0x7; + palette = gb->object_flags & 0x7; } fifo_overlay_object_row(&gb->oam_fifo, - gb->vram_ppu_blocked? 0xFF : gb->vram[gb->object_low_line_address], - gb->vram_ppu_blocked? 0xFF : gb->vram[line_address + 1], + gb->object_tile_data[0], + gb->object_tile_data[1], palette, - object->flags & 0x80, + gb->object_flags & 0x80, gb->object_priority == GB_OBJECT_PRIORITY_INDEX? gb->visible_objs[gb->n_visible_objs - 1] : 0, - object->flags & 0x20); + gb->object_flags & 0x20); - gb->data_for_sel_glitch = gb->vram_ppu_blocked? 0xFF : gb->vram[line_address + 1]; + gb->data_for_sel_glitch = gb->vram_ppu_blocked? 0xFF : gb->vram[gb->object_low_line_address + 1]; gb->n_visible_objs--; } @@ -1207,23 +1857,26 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->during_object_fetch = false; render_pixel_if_possible(gb); - advance_fetcher_state_machine(gb); + advance_fetcher_state_machine(gb, &cycles); if (gb->position_in_line == 160) break; gb->cycles_for_line++; GB_SLEEP(gb, display, 21, 1); } - - /* TODO: Verify */ +skip_slow_mode_3: + gb->position_in_line = -16; + + /* TODO: This seems incorrect (glitches Tesserae), verify further */ + /* if (gb->fetcher_state == 4 || gb->fetcher_state == 5) { gb->data_for_sel_glitch = gb->current_tile_data[0]; } else { gb->data_for_sel_glitch = gb->current_tile_data[1]; } - + */ while (gb->lcd_x != 160 && !gb->disable_rendering && gb->screen && !gb->sgb) { - /* Oh no! The PPU and LCD desynced! Fill the rest of the line whith white. */ + /* Oh no! The PPU and LCD desynced! Fill the rest of the line with the last color. */ uint32_t *dest = NULL; if (gb->border_mode != GB_BORDER_ALWAYS) { dest = gb->screen + gb->lcd_x + gb->current_line * WIDTH; @@ -1231,13 +1884,13 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) else { dest = gb->screen + gb->lcd_x + gb->current_line * BORDERED_WIDTH + (BORDERED_WIDTH - WIDTH) / 2 + (BORDERED_HEIGHT - LINES) / 2 * BORDERED_WIDTH; } - *dest = gb->background_palettes_rgb[0]; + *dest = (gb->lcd_x == 0)? gb->background_palettes_rgb[0] : dest[-1]; gb->lcd_x++; } /* TODO: Verify timing */ - if (!GB_is_cgb(gb) && gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20) && gb->io_registers[GB_IO_WX] == 166) { + if (!GB_is_cgb(gb) && gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE) && gb->io_registers[GB_IO_WX] == 166) { gb->wx166_glitch = true; } else { @@ -1275,25 +1928,34 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) GB_SLEEP(gb, display, 33, 2); gb->cgb_palettes_blocked = !gb->cgb_double_speed; + if (gb->hdma_on_hblank && !gb->halted && !gb->stopped) { + gb->hdma_on = true; + } + gb->cycles_for_line += 2; GB_SLEEP(gb, display, 36, 2); gb->cgb_palettes_blocked = false; - gb->cycles_for_line += 8; - GB_SLEEP(gb, display, 25, 8); + if (gb->cycles_for_line > LINE_LENGTH - 2) { + gb->cycles_for_line = 0; + GB_SLEEP(gb, display, 43, LINE_LENGTH - gb->cycles_for_line); + goto display9; + } - if (gb->hdma_on_hblank) { - gb->hdma_starting = true; + { + uint16_t cycles_for_line = gb->cycles_for_line; + gb->cycles_for_line = 0; + GB_SLEEP(gb, display, 11, LINE_LENGTH - cycles_for_line - 2); } - GB_SLEEP(gb, display, 11, LINE_LENGTH - gb->cycles_for_line - 2); /* TODO: Verify double speed timing TODO: Timing differs on a DMG */ - if ((gb->io_registers[GB_IO_LCDC] & 0x20) && + if ((gb->io_registers[GB_IO_LCDC] & GB_LCDC_WIN_ENABLE) && (gb->io_registers[GB_IO_WY] == gb->current_line)) { gb->wy_triggered = true; } + gb->cycles_for_line = 0; GB_SLEEP(gb, display, 31, 2); if (gb->current_line != LINES - 1) { gb->mode_for_interrupt = 2; @@ -1302,7 +1964,7 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) // Todo: unverified timing gb->current_lcd_line++; if (gb->current_lcd_line == LINES && GB_is_sgb(gb)) { - display_vblank(gb); + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); } if (gb->icd_hreset_callback) { @@ -1312,13 +1974,21 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->wx166_glitch = false; /* Lines 144 - 152 */ for (; gb->current_line < VIRTUAL_LINES - 1; gb->current_line++) { - gb->io_registers[GB_IO_LY] = gb->current_line; gb->ly_for_comparison = -1; + if (unlikely(gb->lcd_line_callback)) { + gb->lcd_line_callback(gb, gb->current_line); + } + GB_STAT_update(gb); GB_SLEEP(gb, display, 26, 2); + gb->io_registers[GB_IO_LY] = gb->current_line; if (gb->current_line == LINES && !gb->stat_interrupt_line && (gb->io_registers[GB_IO_STAT] & 0x20)) { gb->io_registers[GB_IO_IF] |= 2; } GB_SLEEP(gb, display, 12, 2); + if (gb->delayed_glitch_hblank_interrupt) { + gb->delayed_glitch_hblank_interrupt = false; + gb->mode_for_interrupt = 0; + } gb->ly_for_comparison = gb->current_line; GB_STAT_update(gb); GB_SLEEP(gb, display, 24, 1); @@ -1336,43 +2006,47 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) if (gb->frame_skip_state == GB_FRAMESKIP_LCD_TURNED_ON) { if (GB_is_cgb(gb)) { - GB_timing_sync(gb); - gb->frame_skip_state = GB_FRAMESKIP_FIRST_FRAME_SKIPPED; + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); + gb->frame_skip_state = GB_FRAMESKIP_FIRST_FRAME_RENDERED; } else { if (!GB_is_sgb(gb) || gb->current_lcd_line < LINES) { gb->is_odd_frame ^= true; - display_vblank(gb); + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); } - gb->frame_skip_state = GB_FRAMESKIP_SECOND_FRAME_RENDERED; + gb->frame_skip_state = GB_FRAMESKIP_FIRST_FRAME_RENDERED; } } else { if (!GB_is_sgb(gb) || gb->current_lcd_line < LINES) { gb->is_odd_frame ^= true; - display_vblank(gb); - } - if (gb->frame_skip_state == GB_FRAMESKIP_FIRST_FRAME_SKIPPED) { - gb->cgb_repeated_a_frame = true; - gb->frame_skip_state = GB_FRAMESKIP_SECOND_FRAME_RENDERED; - } - else { - gb->cgb_repeated_a_frame = false; + GB_display_vblank(gb, GB_VBLANK_TYPE_NORMAL_FRAME); } } } + /* 3640 is just a few cycles less than 4 lines, no clue where the + AGB constant comes from (These are measured and confirmed) */ + gb->frame_repeat_countdown = LINES * LINE_LENGTH * 2 + (gb->model > GB_MODEL_CGB_E? 5982 : 3640); // 8MHz units + if (gb->display_cycles < gb->frame_repeat_countdown) { + gb->frame_repeat_countdown -= gb->display_cycles; + } + else { + gb->frame_repeat_countdown = 0; + } + GB_SLEEP(gb, display, 13, LINE_LENGTH - 5); } /* TODO: Verified on SGB2 and CGB-E. Actual interrupt timings not tested. */ /* Lines 153 */ - gb->io_registers[GB_IO_LY] = 153; gb->ly_for_comparison = -1; GB_STAT_update(gb); - GB_SLEEP(gb, display, 14, (gb->model > GB_MODEL_CGB_C)? 4: 6); + GB_SLEEP(gb, display, 19, 2); + gb->io_registers[GB_IO_LY] = 153; + GB_SLEEP(gb, display, 14, (gb->model > GB_MODEL_CGB_C)? 2: 4); - if (!GB_is_cgb(gb)) { + if (gb->model <= GB_MODEL_CGB_C && !gb->cgb_double_speed) { gb->io_registers[GB_IO_LY] = 0; } gb->ly_for_comparison = 153; @@ -1419,7 +2093,7 @@ void GB_draw_tileset(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette palette = gb->background_palettes_rgb + (4 * (palette_index & 7)); break; case GB_PALETTE_OAM: - palette = gb->sprite_palettes_rgb + (4 * (palette_index & 7)); + palette = gb->object_palettes_rgb + (4 * (palette_index & 7)); break; } @@ -1469,18 +2143,18 @@ void GB_draw_tilemap(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette palette = gb->background_palettes_rgb + (4 * (palette_index & 7)); break; case GB_PALETTE_OAM: - palette = gb->sprite_palettes_rgb + (4 * (palette_index & 7)); + palette = gb->object_palettes_rgb + (4 * (palette_index & 7)); break; case GB_PALETTE_AUTO: break; } - if (map_type == GB_MAP_9C00 || (map_type == GB_MAP_AUTO && gb->io_registers[GB_IO_LCDC] & 0x08)) { - map = 0x1c00; + if (map_type == GB_MAP_9C00 || (map_type == GB_MAP_AUTO && gb->io_registers[GB_IO_LCDC] & GB_LCDC_BG_MAP)) { + map = 0x1C00; } if (tileset_type == GB_TILESET_AUTO) { - tileset_type = (gb->io_registers[GB_IO_LCDC] & 0x10)? GB_TILESET_8800 : GB_TILESET_8000; + tileset_type = (gb->io_registers[GB_IO_LCDC] & GB_LCDC_TILE_SEL)? GB_TILESET_8800 : GB_TILESET_8000; } for (unsigned y = 0; y < 256; y++) { @@ -1521,31 +2195,31 @@ void GB_draw_tilemap(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette } } -uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *sprite_height) +uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *object_height) { uint8_t count = 0; - *sprite_height = (gb->io_registers[GB_IO_LCDC] & 4) ? 16:8; + *object_height = (gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_SIZE) ? 16:8; uint8_t oam_to_dest_index[40] = {0,}; for (signed y = 0; y < LINES; y++) { - GB_object_t *sprite = (GB_object_t *) &gb->oam; - uint8_t sprites_in_line = 0; - for (uint8_t i = 0; i < 40; i++, sprite++) { - signed sprite_y = sprite->y - 16; - bool obscured = false; - // Is sprite not in this line? - if (sprite_y > y || sprite_y + *sprite_height <= y) continue; - if (++sprites_in_line == 11) obscured = true; + object_t *object = (object_t *) &gb->oam; + uint8_t objects_in_line = 0; + bool obscured = false; + for (uint8_t i = 0; i < 40; i++, object++) { + signed object_y = object->y - 16; + // Is object not in this line? + if (object_y > y || object_y + *object_height <= y) continue; + if (++objects_in_line == 11) obscured = true; GB_oam_info_t *info = NULL; if (!oam_to_dest_index[i]) { info = dest + count; oam_to_dest_index[i] = ++count; - info->x = sprite->x; - info->y = sprite->y; - info->tile = *sprite_height == 16? sprite->tile & 0xFE : sprite->tile; - info->flags = sprite->flags; + info->x = object->x; + info->y = object->y; + info->tile = *object_height == 16? object->tile & 0xFE : object->tile; + info->flags = object->flags; info->obscured_by_line_limit = false; - info->oam_addr = 0xFE00 + i * sizeof(*sprite); + info->oam_addr = 0xFE00 + i * sizeof(*object); } else { info = dest + oam_to_dest_index[i] - 1; @@ -1562,7 +2236,7 @@ uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *sprite_h vram_address += 0x2000; } - for (unsigned y = 0; y < *sprite_height; y++) { + for (unsigned y = 0; y < *object_height; y++) { unrolled for (unsigned x = 0; x < 8; x++) { uint8_t color = (((gb->vram[vram_address ] >> ((~x)&7)) & 1 ) | ((gb->vram[vram_address + 1] >> ((~x)&7)) & 1) << 1 ); @@ -1570,7 +2244,7 @@ uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *sprite_h if (!gb->cgb_mode) { color = (gb->io_registers[palette? GB_IO_OBP1:GB_IO_OBP0] >> (color << 1)) & 3; } - dest[i].image[((flags & 0x20)?7-x:x) + ((flags & 0x40)?*sprite_height - 1 -y:y) * 8] = gb->sprite_palettes_rgb[palette * 4 + color]; + dest[i].image[((flags & 0x20)?7-x:x) + ((flags & 0x40)?*object_height - 1 -y:y) * 8] = gb->object_palettes_rgb[palette * 4 + color]; } vram_address += 2; } @@ -1583,3 +2257,24 @@ bool GB_is_odd_frame(GB_gameboy_t *gb) { return gb->is_odd_frame; } + +void GB_set_object_rendering_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->objects_disabled = disabled; +} + +void GB_set_background_rendering_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->background_disabled = disabled; +} + +bool GB_is_object_rendering_disabled(GB_gameboy_t *gb) +{ + return gb->objects_disabled; +} + +bool GB_is_background_rendering_disabled(GB_gameboy_t *gb) +{ + return gb->background_disabled; +} + diff --git a/thirdparty/SameBoy/Core/display.h b/thirdparty/SameBoy/Core/display.h index c9411dc85..38105bb3c 100644 --- a/thirdparty/SameBoy/Core/display.h +++ b/thirdparty/SameBoy/Core/display.h @@ -5,14 +5,22 @@ #include #include +typedef enum { + GB_VBLANK_TYPE_NORMAL_FRAME, // An actual Vblank-triggered frame + GB_VBLANK_TYPE_LCD_OFF, // An artificial frame pushed while the LCD was off + GB_VBLANK_TYPE_ARTIFICIAL, // An artificial frame pushed for some other reason + GB_VBLANK_TYPE_REPEAT, // A frame that would not render on actual hardware, but the screen should retain the previous frame +} GB_vblank_type_t; + #ifdef GB_INTERNAL -void GB_display_run(GB_gameboy_t *gb, uint8_t cycles); -void GB_palette_changed(GB_gameboy_t *gb, bool background_palette, uint8_t index); -void GB_STAT_update(GB_gameboy_t *gb); -void GB_lcd_off(GB_gameboy_t *gb); +internal void GB_display_run(GB_gameboy_t *gb, unsigned cycles, bool force); +internal void GB_palette_changed(GB_gameboy_t *gb, bool background_palette, uint8_t index); +internal void GB_STAT_update(GB_gameboy_t *gb); +internal void GB_lcd_off(GB_gameboy_t *gb); +internal void GB_display_vblank(GB_gameboy_t *gb, GB_vblank_type_t type); +#define GB_display_sync(gb) GB_display_run(gb, 0, true) enum { - GB_OBJECT_PRIORITY_UNDEFINED, // For save state compatibility GB_OBJECT_PRIORITY_X, GB_OBJECT_PRIORITY_INDEX, }; @@ -48,17 +56,28 @@ typedef struct { typedef enum { GB_COLOR_CORRECTION_DISABLED, GB_COLOR_CORRECTION_CORRECT_CURVES, - GB_COLOR_CORRECTION_EMULATE_HARDWARE, - GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS, + GB_COLOR_CORRECTION_MODERN_BALANCED, + GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST, GB_COLOR_CORRECTION_REDUCE_CONTRAST, GB_COLOR_CORRECTION_LOW_CONTRAST, + GB_COLOR_CORRECTION_MODERN_ACCURATE, } GB_color_correction_mode_t; +static const GB_color_correction_mode_t __attribute__((deprecated("Use GB_COLOR_CORRECTION_MODERN_BALANCED instead"))) GB_COLOR_CORRECTION_EMULATE_HARDWARE = GB_COLOR_CORRECTION_MODERN_BALANCED; +static const GB_color_correction_mode_t __attribute__((deprecated("Use GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST instead"))) GB_COLOR_CORRECTION_PRESERVE_BRIGHTNESS = GB_COLOR_CORRECTION_MODERN_BOOST_CONTRAST; + void GB_draw_tileset(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette_type, uint8_t palette_index); void GB_draw_tilemap(GB_gameboy_t *gb, uint32_t *dest, GB_palette_type_t palette_type, uint8_t palette_index, GB_map_type_t map_type, GB_tileset_type_t tileset_type); -uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *sprite_height); +uint8_t GB_get_oam_info(GB_gameboy_t *gb, GB_oam_info_t *dest, uint8_t *object_height); uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border); void GB_set_color_correction_mode(GB_gameboy_t *gb, GB_color_correction_mode_t mode); void GB_set_light_temperature(GB_gameboy_t *gb, double temperature); bool GB_is_odd_frame(GB_gameboy_t *gb); + +void GB_set_object_rendering_disabled(GB_gameboy_t *gb, bool disabled); +void GB_set_background_rendering_disabled(GB_gameboy_t *gb, bool disabled); +bool GB_is_object_rendering_disabled(GB_gameboy_t *gb); +bool GB_is_background_rendering_disabled(GB_gameboy_t *gb); + + #endif /* display_h */ diff --git a/thirdparty/SameBoy/Core/gb.c b/thirdparty/SameBoy/Core/gb.c index a845797a3..62cff3417 100644 --- a/thirdparty/SameBoy/Core/gb.c +++ b/thirdparty/SameBoy/Core/gb.c @@ -121,10 +121,21 @@ static void load_default_border(GB_gameboy_t *gb) } #endif - if (gb->model == GB_MODEL_AGB) { + if (gb->model > GB_MODEL_CGB_E) { #include "graphics/agb_border.inc" LOAD_BORDER(); } + else if (gb->model == GB_MODEL_MGB) { + #include "graphics/mgb_border.inc" + LOAD_BORDER(); + if (gb->dmg_palette && + gb->dmg_palette->colors[4].b > gb->dmg_palette->colors[4].r) { + for (unsigned i = 0; i < 7; i++) { + gb->borrowed_border.map[13 + 24 * 32 + i] = i + 1; + gb->borrowed_border.map[13 + 25 * 32 + i] = i + 8; + } + } + } else if (GB_is_cgb(gb)) { #include "graphics/cgb_border.inc" LOAD_BORDER(); @@ -135,7 +146,19 @@ static void load_default_border(GB_gameboy_t *gb) } } -void GB_init(GB_gameboy_t *gb, GB_model_t model) +size_t GB_allocation_size(void) +{ + return sizeof(GB_gameboy_t); +} + +GB_gameboy_t *GB_alloc(void) +{ + GB_gameboy_t *ret = malloc(sizeof(*ret)); + ret->magic = 0; + return ret; +} + +GB_gameboy_t *GB_init(GB_gameboy_t *gb, GB_model_t model) { memset(gb, 0, sizeof(*gb)); gb->model = model; @@ -162,6 +185,7 @@ void GB_init(GB_gameboy_t *gb, GB_model_t model) GB_reset(gb); load_default_border(gb); + return gb; } GB_model_t GB_get_model(GB_gameboy_t *gb) @@ -205,7 +229,16 @@ void GB_free(GB_gameboy_t *gb) GB_remove_cheat(gb, gb->cheats[0]); } #endif - memset(gb, 0, sizeof(*gb)); + GB_stop_audio_recording(gb); + memset(gb, 0, sizeof(*gb)); +} + +void GB_dealloc(GB_gameboy_t *gb) +{ + if (GB_is_inited(gb)) { + GB_free(gb); + } + free(gb); } int GB_load_boot_rom(GB_gameboy_t *gb, const char *path) @@ -327,7 +360,7 @@ static void generate_gbs_entry(GB_gameboy_t *gb, uint8_t *data) void GB_gbs_switch_track(GB_gameboy_t *gb, uint8_t track) { GB_reset(gb); - GB_write_memory(gb, 0xFF00 + GB_IO_LCDC, 0x80); + GB_write_memory(gb, 0xFF00 + GB_IO_LCDC, GB_LCDC_ENABLE); GB_write_memory(gb, 0xFF00 + GB_IO_TAC, gb->gbs_header.TAC); GB_write_memory(gb, 0xFF00 + GB_IO_TMA, gb->gbs_header.TMA); GB_write_memory(gb, 0xFF00 + GB_IO_NR52, 0x80); @@ -426,12 +459,12 @@ int GB_load_gbs_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size if (gb->gbs_header.load_address) { // Generate interrupt handlers for (unsigned i = 0; i <= (has_interrupts? 0x50 : 0x38); i += 8) { - gb->rom[i] = 0xc3; // jp $XXXX + gb->rom[i] = 0xC3; // jp $XXXX gb->rom[i + 1] = (LE16(gb->gbs_header.load_address) + i); gb->rom[i + 2] = (LE16(gb->gbs_header.load_address) + i) >> 8; } for (unsigned i = has_interrupts? 0x58 : 0x40; i <= 0x60; i += 8) { - gb->rom[i] = 0xc9; // ret + gb->rom[i] = 0xC9; // ret } // Generate entry @@ -485,11 +518,8 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) #define READ(x) if (fread(&x, sizeof(x), 1, f) != 1) goto error fread(magic, 1, sizeof(magic), f); -#ifdef GB_BIG_ENDIAN - bool extended = *(uint32_t *)&magic == 'ISX '; -#else - bool extended = *(uint32_t *)&magic == __builtin_bswap32('ISX '); -#endif + + bool extended = *(uint32_t *)&magic == BE32('ISX '); fseek(f, extended? 0x20 : 0, SEEK_SET); @@ -516,15 +546,11 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) } READ(address); -#ifdef GB_BIG_ENDIAN - address = __builtin_bswap16(address); -#endif + address = LE16(address); address &= 0x3FFF; READ(length); -#ifdef GB_BIG_ENDIAN - length = __builtin_bswap16(length); -#endif + length = LE16(length); size_t needed_size = bank * 0x4000 + address + length; if (needed_size > 1024 * 1024 * 32) goto error; @@ -545,14 +571,10 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) uint32_t length; READ(address); -#ifdef GB_BIG_ENDIAN - address = __builtin_bswap32(address); -#endif + address = LE32(address); READ(length); -#ifdef GB_BIG_ENDIAN - length = __builtin_bswap32(length); -#endif + length = LE32(length); size_t needed_size = address + length; if (needed_size > 1024 * 1024 * 32) goto error; @@ -576,9 +598,7 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) uint16_t address; uint8_t byte; READ(count); -#ifdef GB_BIG_ENDIAN - count = __builtin_bswap16(count); -#endif + count = LE16(count); while (count--) { READ(length); if (fread(name, length, 1, f) != 1) goto error; @@ -593,9 +613,7 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) } READ(address); -#ifdef GB_BIG_ENDIAN - address = __builtin_bswap16(address); -#endif + address = LE16(address); GB_debugger_add_symbol(gb, bank, address, name); } break; @@ -608,9 +626,7 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) uint8_t flag; uint32_t address; READ(count); -#ifdef GB_BIG_ENDIAN - count = __builtin_bswap16(count); -#endif + count = LE16(count); while (count--) { READ(length); if (fread(name, length + 1, 1, f) != 1) goto error; @@ -618,9 +634,7 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) READ(flag); // unused READ(address); -#ifdef GB_BIG_ENDIAN - address = __builtin_bswap32(address); -#endif + address = LE32(address); // TODO: How to convert 32-bit addresses to Bank:Address? Needs to tell RAM and ROM apart } break; @@ -711,7 +725,7 @@ done:; void GB_load_rom_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t size) { - gb->rom_size = (size + 0x3fff) & ~0x3fff; + gb->rom_size = (size + 0x3FFF) & ~0x3FFF; while (gb->rom_size & (gb->rom_size - 1)) { gb->rom_size |= gb->rom_size >> 1; gb->rom_size++; @@ -723,7 +737,7 @@ void GB_load_rom_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t siz free(gb->rom); } gb->rom = malloc(gb->rom_size); - memset(gb->rom, 0xff, gb->rom_size); + memset(gb->rom, 0xFF, gb->rom_size); memcpy(gb->rom, buffer, size); GB_configure_cart(gb); gb->tried_loading_sgb_border = false; @@ -742,7 +756,7 @@ typedef struct { uint8_t padding4[3]; uint8_t high; uint8_t padding5[3]; -} GB_vba_rtc_time_t; +} vba_rtc_time_t; typedef struct __attribute__((packed)) { uint32_t magic; @@ -751,7 +765,7 @@ typedef struct __attribute__((packed)) { uint8_t reserved; uint64_t last_rtc_second; uint8_t rtc_data[4]; -} GB_tpp1_rtc_save_t; +} tpp1_rtc_save_t; typedef union { struct __attribute__((packed)) { @@ -760,17 +774,17 @@ typedef union { } sameboy_legacy; struct { /* Used by VBA versions with 32-bit timestamp*/ - GB_vba_rtc_time_t rtc_real, rtc_latched; + vba_rtc_time_t rtc_real, rtc_latched; uint32_t last_rtc_second; /* Always little endian */ } vba32; struct { /* Used by BGB and VBA versions with 64-bit timestamp*/ - GB_vba_rtc_time_t rtc_real, rtc_latched; + vba_rtc_time_t rtc_real, rtc_latched; uint64_t last_rtc_second; /* Always little endian */ } vba64; -} GB_rtc_save_t; +} rtc_save_t; -static void GB_fill_tpp1_save_data(GB_gameboy_t *gb, GB_tpp1_rtc_save_t *data) +static void fill_tpp1_save_data(GB_gameboy_t *gb, tpp1_rtc_save_t *data) { data->magic = BE32('TPP1'); data->version = BE16(0x100); @@ -794,10 +808,10 @@ int GB_save_battery_size(GB_gameboy_t *gb) } if (gb->cartridge_type->mbc_type == GB_TPP1) { - return gb->mbc_ram_size + sizeof(GB_tpp1_rtc_save_t); + return gb->mbc_ram_size + sizeof(tpp1_rtc_save_t); } - GB_rtc_save_t rtc_save_size; + rtc_save_t rtc_save_size; return gb->mbc_ram_size + (gb->cartridge_type->has_rtc ? sizeof(rtc_save_size.vba64) : 0); } @@ -813,36 +827,25 @@ int GB_save_battery_to_buffer(GB_gameboy_t *gb, uint8_t *buffer, size_t size) if (gb->cartridge_type->mbc_type == GB_TPP1) { buffer += gb->mbc_ram_size; - GB_tpp1_rtc_save_t rtc_save; - GB_fill_tpp1_save_data(gb, &rtc_save); + tpp1_rtc_save_t rtc_save; + fill_tpp1_save_data(gb, &rtc_save); memcpy(buffer, &rtc_save, sizeof(rtc_save)); } else if (gb->cartridge_type->mbc_type == GB_HUC3) { buffer += gb->mbc_ram_size; -#ifdef GB_BIG_ENDIAN - GB_huc3_rtc_time_t rtc_save = { - __builtin_bswap64(gb->last_rtc_second), - __builtin_bswap16(gb->huc3_minutes), - __builtin_bswap16(gb->huc3_days), - __builtin_bswap16(gb->huc3_alarm_minutes), - __builtin_bswap16(gb->huc3_alarm_days), - gb->huc3_alarm_enabled, - }; -#else GB_huc3_rtc_time_t rtc_save = { - gb->last_rtc_second, - gb->huc3_minutes, - gb->huc3_days, - gb->huc3_alarm_minutes, - gb->huc3_alarm_days, - gb->huc3_alarm_enabled, + LE64(gb->last_rtc_second), + LE16(gb->huc3.minutes), + LE16(gb->huc3.days), + LE16(gb->huc3.alarm_minutes), + LE16(gb->huc3.alarm_days), + gb->huc3.alarm_enabled, }; -#endif memcpy(buffer, &rtc_save, sizeof(rtc_save)); } else if (gb->cartridge_type->has_rtc) { - GB_rtc_save_t rtc_save = {{{{0,}},},}; + rtc_save_t rtc_save = {{{{0,}},},}; rtc_save.vba64.rtc_real.seconds = gb->rtc_real.seconds; rtc_save.vba64.rtc_real.minutes = gb->rtc_real.minutes; rtc_save.vba64.rtc_real.hours = gb->rtc_real.hours; @@ -853,11 +856,7 @@ int GB_save_battery_to_buffer(GB_gameboy_t *gb, uint8_t *buffer, size_t size) rtc_save.vba64.rtc_latched.hours = gb->rtc_latched.hours; rtc_save.vba64.rtc_latched.days = gb->rtc_latched.days; rtc_save.vba64.rtc_latched.high = gb->rtc_latched.high; -#ifdef GB_BIG_ENDIAN - rtc_save.vba64.last_rtc_second = __builtin_bswap64(time(NULL)); -#else - rtc_save.vba64.last_rtc_second = time(NULL); -#endif + rtc_save.vba64.last_rtc_second = LE64(time(NULL)); memcpy(buffer + gb->mbc_ram_size, &rtc_save.vba64, sizeof(rtc_save.vba64)); } @@ -881,8 +880,8 @@ int GB_save_battery(GB_gameboy_t *gb, const char *path) return EIO; } if (gb->cartridge_type->mbc_type == GB_TPP1) { - GB_tpp1_rtc_save_t rtc_save; - GB_fill_tpp1_save_data(gb, &rtc_save); + tpp1_rtc_save_t rtc_save; + fill_tpp1_save_data(gb, &rtc_save); if (fwrite(&rtc_save, sizeof(rtc_save), 1, f) != 1) { fclose(f); @@ -890,25 +889,14 @@ int GB_save_battery(GB_gameboy_t *gb, const char *path) } } else if (gb->cartridge_type->mbc_type == GB_HUC3) { -#ifdef GB_BIG_ENDIAN - GB_huc3_rtc_time_t rtc_save = { - __builtin_bswap64(gb->last_rtc_second), - __builtin_bswap16(gb->huc3_minutes), - __builtin_bswap16(gb->huc3_days), - __builtin_bswap16(gb->huc3_alarm_minutes), - __builtin_bswap16(gb->huc3_alarm_days), - gb->huc3_alarm_enabled, - }; -#else GB_huc3_rtc_time_t rtc_save = { - gb->last_rtc_second, - gb->huc3_minutes, - gb->huc3_days, - gb->huc3_alarm_minutes, - gb->huc3_alarm_days, - gb->huc3_alarm_enabled, + LE64(gb->last_rtc_second), + LE16(gb->huc3.minutes), + LE16(gb->huc3.days), + LE16(gb->huc3.alarm_minutes), + LE16(gb->huc3.alarm_days), + gb->huc3.alarm_enabled, }; -#endif if (fwrite(&rtc_save, sizeof(rtc_save), 1, f) != 1) { fclose(f); @@ -916,7 +904,7 @@ int GB_save_battery(GB_gameboy_t *gb, const char *path) } } else if (gb->cartridge_type->has_rtc) { - GB_rtc_save_t rtc_save = {{{{0,}},},}; + rtc_save_t rtc_save = {{{{0,}},},}; rtc_save.vba64.rtc_real.seconds = gb->rtc_real.seconds; rtc_save.vba64.rtc_real.minutes = gb->rtc_real.minutes; rtc_save.vba64.rtc_real.hours = gb->rtc_real.hours; @@ -927,11 +915,7 @@ int GB_save_battery(GB_gameboy_t *gb, const char *path) rtc_save.vba64.rtc_latched.hours = gb->rtc_latched.hours; rtc_save.vba64.rtc_latched.days = gb->rtc_latched.days; rtc_save.vba64.rtc_latched.high = gb->rtc_latched.high; -#ifdef GB_BIG_ENDIAN - rtc_save.vba64.last_rtc_second = __builtin_bswap64(time(NULL)); -#else - rtc_save.vba64.last_rtc_second = time(NULL); -#endif + rtc_save.vba64.last_rtc_second = LE64(time(NULL)); if (fwrite(&rtc_save.vba64, 1, sizeof(rtc_save.vba64), f) != sizeof(rtc_save.vba64)) { fclose(f); return EIO; @@ -944,7 +928,7 @@ int GB_save_battery(GB_gameboy_t *gb, const char *path) return errno; } -static void GB_load_tpp1_save_data(GB_gameboy_t *gb, const GB_tpp1_rtc_save_t *data) +static void load_tpp1_save_data(GB_gameboy_t *gb, const tpp1_rtc_save_t *data) { gb->last_rtc_second = LE64(data->last_rtc_second); unrolled for (unsigned i = 4; i--;) { @@ -960,13 +944,13 @@ void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t } if (gb->cartridge_type->mbc_type == GB_TPP1) { - GB_tpp1_rtc_save_t rtc_save; + tpp1_rtc_save_t rtc_save; if (size - gb->mbc_ram_size < sizeof(rtc_save)) { goto reset_rtc; } memcpy(&rtc_save, buffer + gb->mbc_ram_size, sizeof(rtc_save)); - GB_load_tpp1_save_data(gb, &rtc_save); + load_tpp1_save_data(gb, &rtc_save); if (gb->last_rtc_second > time(NULL)) { /* We must reset RTC here, or it will not advance. */ @@ -981,21 +965,12 @@ void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t goto reset_rtc; } memcpy(&rtc_save, buffer + gb->mbc_ram_size, sizeof(rtc_save)); -#ifdef GB_BIG_ENDIAN - gb->last_rtc_second = __builtin_bswap64(rtc_save.last_rtc_second); - gb->huc3_minutes = __builtin_bswap16(rtc_save.minutes); - gb->huc3_days = __builtin_bswap16(rtc_save.days); - gb->huc3_alarm_minutes = __builtin_bswap16(rtc_save.alarm_minutes); - gb->huc3_alarm_days = __builtin_bswap16(rtc_save.alarm_days); - gb->huc3_alarm_enabled = rtc_save.alarm_enabled; -#else - gb->last_rtc_second = rtc_save.last_rtc_second; - gb->huc3_minutes = rtc_save.minutes; - gb->huc3_days = rtc_save.days; - gb->huc3_alarm_minutes = rtc_save.alarm_minutes; - gb->huc3_alarm_days = rtc_save.alarm_days; - gb->huc3_alarm_enabled = rtc_save.alarm_enabled; -#endif + gb->last_rtc_second = LE64(rtc_save.last_rtc_second); + gb->huc3.minutes = LE16(rtc_save.minutes); + gb->huc3.days = LE16(rtc_save.days); + gb->huc3.alarm_minutes = LE16(rtc_save.alarm_minutes); + gb->huc3.alarm_days = LE16(rtc_save.alarm_days); + gb->huc3.alarm_enabled = rtc_save.alarm_enabled; if (gb->last_rtc_second > time(NULL)) { /* We must reset RTC here, or it will not advance. */ goto reset_rtc; @@ -1003,7 +978,7 @@ void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t return; } - GB_rtc_save_t rtc_save; + rtc_save_t rtc_save; memcpy(&rtc_save, buffer + gb->mbc_ram_size, MIN(sizeof(rtc_save), size)); switch (size - gb->mbc_ram_size) { case sizeof(rtc_save.sameboy_legacy): @@ -1023,11 +998,7 @@ void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t gb->rtc_latched.hours = rtc_save.vba32.rtc_latched.hours; gb->rtc_latched.days = rtc_save.vba32.rtc_latched.days; gb->rtc_latched.high = rtc_save.vba32.rtc_latched.high; -#ifdef GB_BIG_ENDIAN - gb->last_rtc_second = __builtin_bswap32(rtc_save.vba32.last_rtc_second); -#else - gb->last_rtc_second = rtc_save.vba32.last_rtc_second; -#endif + gb->last_rtc_second = LE32(rtc_save.vba32.last_rtc_second); break; case sizeof(rtc_save.vba64): @@ -1041,11 +1012,7 @@ void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t gb->rtc_latched.hours = rtc_save.vba64.rtc_latched.hours; gb->rtc_latched.days = rtc_save.vba64.rtc_latched.days; gb->rtc_latched.high = rtc_save.vba64.rtc_latched.high; -#ifdef GB_BIG_ENDIAN - gb->last_rtc_second = __builtin_bswap64(rtc_save.vba64.last_rtc_second); -#else - gb->last_rtc_second = rtc_save.vba64.last_rtc_second; -#endif + gb->last_rtc_second = LE64(rtc_save.vba64.last_rtc_second); break; default: @@ -1065,9 +1032,11 @@ void GB_load_battery_from_buffer(GB_gameboy_t *gb, const uint8_t *buffer, size_t reset_rtc: gb->last_rtc_second = time(NULL); gb->rtc_real.high |= 0x80; /* This gives the game a hint that the clock should be reset. */ - gb->huc3_days = 0xFFFF; - gb->huc3_minutes = 0xFFF; - gb->huc3_alarm_enabled = false; + if (gb->cartridge_type->mbc_type == GB_HUC3) { + gb->huc3.days = 0xFFFF; + gb->huc3.minutes = 0xFFF; + gb->huc3.alarm_enabled = false; + } exit: return; } @@ -1085,12 +1054,12 @@ void GB_load_battery(GB_gameboy_t *gb, const char *path) } if (gb->cartridge_type->mbc_type == GB_TPP1) { - GB_tpp1_rtc_save_t rtc_save; + tpp1_rtc_save_t rtc_save; if (fread(&rtc_save, sizeof(rtc_save), 1, f) != 1) { goto reset_rtc; } - GB_load_tpp1_save_data(gb, &rtc_save); + load_tpp1_save_data(gb, &rtc_save); if (gb->last_rtc_second > time(NULL)) { /* We must reset RTC here, or it will not advance. */ @@ -1104,21 +1073,13 @@ void GB_load_battery(GB_gameboy_t *gb, const char *path) if (fread(&rtc_save, sizeof(rtc_save), 1, f) != 1) { goto reset_rtc; } -#ifdef GB_BIG_ENDIAN - gb->last_rtc_second = __builtin_bswap64(rtc_save.last_rtc_second); - gb->huc3_minutes = __builtin_bswap16(rtc_save.minutes); - gb->huc3_days = __builtin_bswap16(rtc_save.days); - gb->huc3_alarm_minutes = __builtin_bswap16(rtc_save.alarm_minutes); - gb->huc3_alarm_days = __builtin_bswap16(rtc_save.alarm_days); - gb->huc3_alarm_enabled = rtc_save.alarm_enabled; -#else - gb->last_rtc_second = rtc_save.last_rtc_second; - gb->huc3_minutes = rtc_save.minutes; - gb->huc3_days = rtc_save.days; - gb->huc3_alarm_minutes = rtc_save.alarm_minutes; - gb->huc3_alarm_days = rtc_save.alarm_days; - gb->huc3_alarm_enabled = rtc_save.alarm_enabled; -#endif + gb->last_rtc_second = LE64(rtc_save.last_rtc_second); + gb->huc3.minutes = LE16(rtc_save.minutes); + gb->huc3.days = LE16(rtc_save.days); + gb->huc3.alarm_minutes = LE16(rtc_save.alarm_minutes); + gb->huc3.alarm_days = LE16(rtc_save.alarm_days); + gb->huc3.alarm_enabled = rtc_save.alarm_enabled; + if (gb->last_rtc_second > time(NULL)) { /* We must reset RTC here, or it will not advance. */ goto reset_rtc; @@ -1126,7 +1087,7 @@ void GB_load_battery(GB_gameboy_t *gb, const char *path) return; } - GB_rtc_save_t rtc_save; + rtc_save_t rtc_save; switch (fread(&rtc_save, 1, sizeof(rtc_save), f)) { case sizeof(rtc_save.sameboy_legacy): memcpy(&gb->rtc_real, &rtc_save.sameboy_legacy.rtc_real, sizeof(gb->rtc_real)); @@ -1145,11 +1106,7 @@ void GB_load_battery(GB_gameboy_t *gb, const char *path) gb->rtc_latched.hours = rtc_save.vba32.rtc_latched.hours; gb->rtc_latched.days = rtc_save.vba32.rtc_latched.days; gb->rtc_latched.high = rtc_save.vba32.rtc_latched.high; -#ifdef GB_BIG_ENDIAN - gb->last_rtc_second = __builtin_bswap32(rtc_save.vba32.last_rtc_second); -#else - gb->last_rtc_second = rtc_save.vba32.last_rtc_second; -#endif + gb->last_rtc_second = LE32(rtc_save.vba32.last_rtc_second); break; case sizeof(rtc_save.vba64): @@ -1163,11 +1120,7 @@ void GB_load_battery(GB_gameboy_t *gb, const char *path) gb->rtc_latched.hours = rtc_save.vba64.rtc_latched.hours; gb->rtc_latched.days = rtc_save.vba64.rtc_latched.days; gb->rtc_latched.high = rtc_save.vba64.rtc_latched.high; -#ifdef GB_BIG_ENDIAN - gb->last_rtc_second = __builtin_bswap64(rtc_save.vba64.last_rtc_second); -#else - gb->last_rtc_second = rtc_save.vba64.last_rtc_second; -#endif + gb->last_rtc_second = LE64(rtc_save.vba64.last_rtc_second); break; default: @@ -1187,15 +1140,17 @@ void GB_load_battery(GB_gameboy_t *gb, const char *path) reset_rtc: gb->last_rtc_second = time(NULL); gb->rtc_real.high |= 0x80; /* This gives the game a hint that the clock should be reset. */ - gb->huc3_days = 0xFFFF; - gb->huc3_minutes = 0xFFF; - gb->huc3_alarm_enabled = false; + if (gb->cartridge_type->mbc_type == GB_HUC3) { + gb->huc3.days = 0xFFFF; + gb->huc3.minutes = 0xFFF; + gb->huc3.alarm_enabled = false; + } exit: fclose(f); return; } -uint8_t GB_run(GB_gameboy_t *gb) +unsigned GB_run(GB_gameboy_t *gb) { gb->vblank_just_occured = false; @@ -1206,7 +1161,7 @@ uint8_t GB_run(GB_gameboy_t *gb) we just halt the CPU (with hacky code) until the correct time. This ensures the Nintendo logo doesn't flash on screen, and the game does "run in background" while the animation is playing. */ - GB_display_run(gb, 228); + GB_display_run(gb, 228, true); gb->cycles_since_last_sync += 228; return 228; } @@ -1218,6 +1173,9 @@ uint8_t GB_run(GB_gameboy_t *gb) GB_debugger_handle_async_commands(gb); GB_rewind_push(gb); } + if (!(gb->io_registers[GB_IO_IF] & 0x10) && (gb->io_registers[GB_IO_JOYP] & 0x30) != 0x30) { + gb->joyp_accessed = true; + } return gb->cycles_since_run; } @@ -1246,6 +1204,11 @@ void GB_set_pixels_output(GB_gameboy_t *gb, uint32_t *output) gb->screen = output; } +uint32_t *GB_get_pixels_output(GB_gameboy_t *gb) +{ + return gb->screen; +} + void GB_set_vblank_callback(GB_gameboy_t *gb, GB_vblank_callback_t callback) { gb->vblank_callback = callback; @@ -1273,22 +1236,37 @@ void GB_set_async_input_callback(GB_gameboy_t *gb, GB_input_callback_t callback) #endif } -const GB_palette_t GB_PALETTE_GREY = {{{0x00, 0x00, 0x00}, {0x55, 0x55, 0x55}, {0xaa, 0xaa, 0xaa}, {0xff, 0xff, 0xff}, {0xff, 0xff, 0xff}}}; -const GB_palette_t GB_PALETTE_DMG = {{{0x08, 0x18, 0x10}, {0x39, 0x61, 0x39}, {0x84, 0xa5, 0x63}, {0xc6, 0xde, 0x8c}, {0xd2, 0xe6, 0xa6}}}; -const GB_palette_t GB_PALETTE_MGB = {{{0x07, 0x10, 0x0e}, {0x3a, 0x4c, 0x3a}, {0x81, 0x8d, 0x66}, {0xc2, 0xce, 0x93}, {0xcf, 0xda, 0xac}}}; -const GB_palette_t GB_PALETTE_GBL = {{{0x0a, 0x1c, 0x15}, {0x35, 0x78, 0x62}, {0x56, 0xb4, 0x95}, {0x7f, 0xe2, 0xc3}, {0x91, 0xea, 0xd0}}}; +void GB_set_execution_callback(GB_gameboy_t *gb, GB_execution_callback_t callback) +{ + gb->execution_callback = callback; +} + +void GB_set_lcd_line_callback(GB_gameboy_t *gb, GB_lcd_line_callback_t callback) +{ + gb->lcd_line_callback = callback; +} + +void GB_set_lcd_status_callback(GB_gameboy_t *gb, GB_lcd_status_callback_t callback) +{ + gb->lcd_status_callback = callback; +} + +const GB_palette_t GB_PALETTE_GREY = {{{0x00, 0x00, 0x00}, {0x55, 0x55, 0x55}, {0xAA, 0xAA, 0xAA}, {0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF}}}; +const GB_palette_t GB_PALETTE_DMG = {{{0x08, 0x18, 0x10}, {0x39, 0x61, 0x39}, {0x84, 0xA5, 0x63}, {0xC6, 0xDE, 0x8C}, {0xD2, 0xE6, 0xA6}}}; +const GB_palette_t GB_PALETTE_MGB = {{{0x07, 0x10, 0x0E}, {0x3A, 0x4C, 0x3A}, {0x81, 0x8D, 0x66}, {0xC2, 0xCE, 0x93}, {0xCF, 0xDA, 0xAC}}}; +const GB_palette_t GB_PALETTE_GBL = {{{0x0A, 0x1C, 0x15}, {0x35, 0x78, 0x62}, {0x56, 0xB4, 0x95}, {0x7F, 0xE2, 0xC3}, {0x91, 0xEA, 0xD0}}}; static void update_dmg_palette(GB_gameboy_t *gb) { const GB_palette_t *palette = gb->dmg_palette ?: &GB_PALETTE_GREY; if (gb->rgb_encode_callback && !GB_is_cgb(gb)) { - gb->sprite_palettes_rgb[4] = gb->sprite_palettes_rgb[0] = gb->background_palettes_rgb[0] = + gb->object_palettes_rgb[4] = gb->object_palettes_rgb[0] = gb->background_palettes_rgb[0] = gb->rgb_encode_callback(gb, palette->colors[3].r, palette->colors[3].g, palette->colors[3].b); - gb->sprite_palettes_rgb[5] = gb->sprite_palettes_rgb[1] = gb->background_palettes_rgb[1] = + gb->object_palettes_rgb[5] = gb->object_palettes_rgb[1] = gb->background_palettes_rgb[1] = gb->rgb_encode_callback(gb, palette->colors[2].r, palette->colors[2].g, palette->colors[2].b); - gb->sprite_palettes_rgb[6] = gb->sprite_palettes_rgb[2] = gb->background_palettes_rgb[2] = + gb->object_palettes_rgb[6] = gb->object_palettes_rgb[2] = gb->background_palettes_rgb[2] = gb->rgb_encode_callback(gb, palette->colors[1].r, palette->colors[1].g, palette->colors[1].b); - gb->sprite_palettes_rgb[7] = gb->sprite_palettes_rgb[3] = gb->background_palettes_rgb[3] = + gb->object_palettes_rgb[7] = gb->object_palettes_rgb[3] = gb->background_palettes_rgb[3] = gb->rgb_encode_callback(gb, palette->colors[0].r, palette->colors[0].g, palette->colors[0].b); // LCD off color @@ -1303,6 +1281,11 @@ void GB_set_palette(GB_gameboy_t *gb, const GB_palette_t *palette) update_dmg_palette(gb); } +const GB_palette_t *GB_get_palette(GB_gameboy_t *gb) +{ + return gb->dmg_palette; +} + void GB_set_rgb_encode_callback(GB_gameboy_t *gb, GB_rgb_encode_callback_t callback) { @@ -1342,26 +1325,38 @@ void GB_set_serial_transfer_bit_end_callback(GB_gameboy_t *gb, GB_serial_transfe bool GB_serial_get_data_bit(GB_gameboy_t *gb) { + if (!(gb->io_registers[GB_IO_SC] & 0x80)) { + /* Disabled serial returns 0 bits */ + return false; + } + if (gb->io_registers[GB_IO_SC] & 1) { /* Internal Clock */ GB_log(gb, "Serial read request while using internal clock. \n"); - return 0xFF; + return true; } return gb->io_registers[GB_IO_SB] & 0x80; } void GB_serial_set_data_bit(GB_gameboy_t *gb, bool data) { + if (!(gb->io_registers[GB_IO_SC] & 0x80)) { + /* Serial disabled */ + return; + } + if (gb->io_registers[GB_IO_SC] & 1) { /* Internal Clock */ GB_log(gb, "Serial write request while using internal clock. \n"); return; } + gb->io_registers[GB_IO_SB] <<= 1; gb->io_registers[GB_IO_SB] |= data; gb->serial_count++; if (gb->serial_count == 8) { gb->io_registers[GB_IO_IF] |= 8; + gb->io_registers[GB_IO_SC] &= ~0x80; gb->serial_count = 0; } } @@ -1381,9 +1376,14 @@ bool GB_is_inited(GB_gameboy_t *gb) return gb->magic == state_magic(); } -bool GB_is_cgb(GB_gameboy_t *gb) +bool GB_is_cgb(const GB_gameboy_t *gb) { - return (gb->model & GB_MODEL_FAMILY_MASK) == GB_MODEL_CGB_FAMILY; + return gb->model >= GB_MODEL_CGB_0; +} + +bool GB_is_cgb_in_cgb_mode(GB_gameboy_t *gb) +{ + return gb->cgb_mode; } bool GB_is_sgb(GB_gameboy_t *gb) @@ -1420,8 +1420,10 @@ void GB_set_user_data(GB_gameboy_t *gb, void *data) static void reset_ram(GB_gameboy_t *gb) { switch (gb->model) { + case GB_MODEL_MGB: case GB_MODEL_CGB_E: - case GB_MODEL_AGB: /* Unverified */ + case GB_MODEL_AGB_A: /* Unverified */ + case GB_MODEL_GBP_A: for (unsigned i = 0; i < gb->ram_size; i++) { gb->ram[i] = GB_random(); } @@ -1450,14 +1452,28 @@ static void reset_ram(GB_gameboy_t *gb) gb->ram[i] ^= GB_random() & GB_random() & GB_random(); } break; - + + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: for (unsigned i = 0; i < gb->ram_size; i++) { if ((i & 0x808) == 0x800 || (i & 0x808) == 0x008) { gb->ram[i] = 0; } else { - gb->ram[i] = GB_random() | GB_random() | GB_random() | GB_random(); + gb->ram[i] = GB_random() | GB_random() | GB_random() | GB_random() | GB_random(); + } + } + break; + case GB_MODEL_CGB_D: + for (unsigned i = 0; i < gb->ram_size; i++) { + gb->ram[i] = GB_random(); + if (i & 0x800) { + gb->ram[i] &= GB_random(); + } + else { + gb->ram[i] |= GB_random(); } } break; @@ -1465,16 +1481,21 @@ static void reset_ram(GB_gameboy_t *gb) /* HRAM */ switch (gb->model) { + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: - // case GB_MODEL_CGB_D: + case GB_MODEL_CGB_D: case GB_MODEL_CGB_E: - case GB_MODEL_AGB: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: for (unsigned i = 0; i < sizeof(gb->hram); i++) { gb->hram[i] = GB_random(); } break; case GB_MODEL_DMG_B: + case GB_MODEL_MGB: case GB_MODEL_SGB_NTSC: /* Unverified*/ case GB_MODEL_SGB_PAL: /* Unverified */ case GB_MODEL_SGB_NTSC_NO_SFC: /* Unverified */ @@ -1494,13 +1515,19 @@ static void reset_ram(GB_gameboy_t *gb) /* OAM */ switch (gb->model) { + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: + case GB_MODEL_CGB_D: case GB_MODEL_CGB_E: - case GB_MODEL_AGB: - /* Zero'd out by boot ROM anyway*/ + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + /* Zero'd out by boot ROM anyway */ break; case GB_MODEL_DMG_B: + case GB_MODEL_MGB: case GB_MODEL_SGB_NTSC: /* Unverified */ case GB_MODEL_SGB_PAL: /* Unverified */ case GB_MODEL_SGB_NTSC_NO_SFC: /* Unverified */ @@ -1523,12 +1550,27 @@ static void reset_ram(GB_gameboy_t *gb) /* Wave RAM */ switch (gb->model) { + case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: + case GB_MODEL_CGB_D: case GB_MODEL_CGB_E: - case GB_MODEL_AGB: - /* Initialized by CGB-A and newer, 0s in CGB-0*/ + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + /* Initialized by CGB-A and newer, 0s in CGB-0 */ break; - + case GB_MODEL_MGB: { + for (unsigned i = 0; i < GB_IO_WAV_END - GB_IO_WAV_START; i++) { + if (i & 1) { + gb->io_registers[GB_IO_WAV_START + i] = GB_random() & GB_random(); + } + else { + gb->io_registers[GB_IO_WAV_START + i] = GB_random() | GB_random(); + } + } + break; + } case GB_MODEL_DMG_B: case GB_MODEL_SGB_NTSC: /* Unverified*/ case GB_MODEL_SGB_PAL: /* Unverified */ @@ -1555,13 +1597,17 @@ static void reset_ram(GB_gameboy_t *gb) if (GB_is_cgb(gb)) { for (unsigned i = 0; i < 64; i++) { gb->background_palettes_data[i] = GB_random(); /* Doesn't really matter as the boot ROM overrides it anyway*/ - gb->sprite_palettes_data[i] = GB_random(); + gb->object_palettes_data[i] = GB_random(); } for (unsigned i = 0; i < 32; i++) { GB_palette_changed(gb, true, i * 2); GB_palette_changed(gb, false, i * 2); } } + + if (!gb->cartridge_type->has_battery) { + memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); + } } static void request_boot_rom(GB_gameboy_t *gb) @@ -1572,6 +1618,9 @@ static void request_boot_rom(GB_gameboy_t *gb) case GB_MODEL_DMG_B: type = GB_BOOT_ROM_DMG; break; + case GB_MODEL_MGB: + type = GB_BOOT_ROM_MGB; + break; case GB_MODEL_SGB_NTSC: case GB_MODEL_SGB_PAL: case GB_MODEL_SGB_NTSC_NO_SFC: @@ -1582,11 +1631,18 @@ static void request_boot_rom(GB_gameboy_t *gb) case GB_MODEL_SGB2_NO_SFC: type = GB_BOOT_ROM_SGB2; break; + case GB_MODEL_CGB_0: + type = GB_BOOT_ROM_CGB_0; + break; + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: + case GB_MODEL_CGB_D: case GB_MODEL_CGB_E: type = GB_BOOT_ROM_CGB; break; - case GB_MODEL_AGB: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: type = GB_BOOT_ROM_AGB; break; } @@ -1594,10 +1650,32 @@ static void request_boot_rom(GB_gameboy_t *gb) } } -void GB_reset(GB_gameboy_t *gb) +static void GB_reset_internal(GB_gameboy_t *gb, bool quick) { + struct { + uint8_t hram[sizeof(gb->hram)]; + uint8_t background_palettes_data[sizeof(gb->background_palettes_data)]; + uint8_t object_palettes_data[sizeof(gb->object_palettes_data)]; + uint8_t oam[sizeof(gb->oam)]; + uint8_t extra_oam[sizeof(gb->extra_oam)]; + uint8_t dma, obp0, obp1; + } *preserved_state = NULL; + + if (quick) { + preserved_state = alloca(sizeof(*preserved_state)); + memcpy(preserved_state->hram, gb->hram, sizeof(gb->hram)); + memcpy(preserved_state->background_palettes_data, gb->background_palettes_data, sizeof(gb->background_palettes_data)); + memcpy(preserved_state->object_palettes_data, gb->object_palettes_data, sizeof(gb->object_palettes_data)); + memcpy(preserved_state->oam, gb->oam, sizeof(gb->oam)); + memcpy(preserved_state->extra_oam, gb->extra_oam, sizeof(gb->extra_oam)); + preserved_state->dma = gb->io_registers[GB_IO_DMA]; + preserved_state->obp0 = gb->io_registers[GB_IO_OBP0]; + preserved_state->obp1 = gb->io_registers[GB_IO_OBP1]; + } + uint32_t mbc_ram_size = gb->mbc_ram_size; GB_model_t model = gb->model; + GB_update_clock_rate(gb); uint8_t rtc_section[GB_SECTION_SIZE(rtc)]; memcpy(rtc_section, GB_GET_SECTION(gb, rtc), sizeof(rtc_section)); memset(gb, 0, (size_t)GB_GET_SECTION((GB_gameboy_t *) 0, unsaved)); @@ -1605,7 +1683,8 @@ void GB_reset(GB_gameboy_t *gb) gb->model = model; gb->version = GB_STRUCT_VERSION; - gb->mbc_rom_bank = 1; + GB_reset_mbc(gb); + gb->last_rtc_second = time(NULL); gb->cgb_ram_bank = 1; gb->io_registers[GB_IO_JOYP] = 0xCF; @@ -1625,18 +1704,12 @@ void GB_reset(GB_gameboy_t *gb) update_dmg_palette(gb); } - reset_ram(gb); - /* The serial interrupt always occur on the 0xF7th cycle of every 0x100 cycle since boot. */ - gb->serial_cycles = 0x100-0xF7; + gb->serial_mask = 0x80; gb->io_registers[GB_IO_SC] = 0x7E; - - /* These are not deterministic, but 00 (CGB) and FF (DMG) are the most common initial values by far */ - gb->io_registers[GB_IO_DMA] = gb->io_registers[GB_IO_OBP0] = gb->io_registers[GB_IO_OBP1] = GB_is_cgb(gb)? 0x00 : 0xFF; - gb->accessed_oam_row = -1; - - + gb->dma_current_dest = 0xA1; + if (GB_is_hle_sgb(gb)) { if (!gb->sgb) { gb->sgb = malloc(sizeof(*gb->sgb)); @@ -1658,20 +1731,44 @@ void GB_reset(GB_gameboy_t *gb) } } - /* Todo: Ugly, fixme, see comment in the timer state machine */ - gb->div_state = 3; + GB_set_internal_div_counter(gb, 8); - GB_apu_update_cycles_per_sample(gb); - if (gb->nontrivial_jump_state) { free(gb->nontrivial_jump_state); gb->nontrivial_jump_state = NULL; } + if (!quick) { + reset_ram(gb); + /* These are not deterministic, but 00 (CGB) and FF (DMG) are the most common initial values by far. + The retain their previous values on quick resets */ + gb->io_registers[GB_IO_DMA] = gb->io_registers[GB_IO_OBP0] = gb->io_registers[GB_IO_OBP1] = GB_is_cgb(gb)? 0x00 : 0xFF; + } + else { + memcpy(gb->hram, preserved_state->hram, sizeof(gb->hram)); + memcpy(gb->background_palettes_data, preserved_state->background_palettes_data, sizeof(gb->background_palettes_data)); + memcpy(gb->object_palettes_data, preserved_state->object_palettes_data, sizeof(gb->object_palettes_data)); + memcpy(gb->oam, preserved_state->oam, sizeof(gb->oam)); + memcpy(gb->extra_oam, preserved_state->extra_oam, sizeof(gb->extra_oam)); + gb->io_registers[GB_IO_DMA] = preserved_state->dma; + gb->io_registers[GB_IO_OBP0] = preserved_state->obp0; + gb->io_registers[GB_IO_OBP1] = preserved_state->obp1; + } + gb->magic = state_magic(); request_boot_rom(gb); } +void GB_reset(GB_gameboy_t *gb) +{ + GB_reset_internal(gb, false); +} + +void GB_quick_reset(GB_gameboy_t *gb) +{ + GB_reset_internal(gb, true); +} + void GB_switch_model_and_reset(GB_gameboy_t *gb, GB_model_t model) { gb->model = model; @@ -1709,7 +1806,11 @@ void *GB_get_direct_access(GB_gameboy_t *gb, GB_direct_access_t access, size_t * switch (access) { case GB_DIRECT_ACCESS_ROM: *size = gb->rom_size; - *bank = gb->mbc_rom_bank; + *bank = gb->mbc_rom_bank & (gb->rom_size / 0x4000 - 1); + return gb->rom; + case GB_DIRECT_ACCESS_ROM0: + *size = gb->rom_size; + *bank = gb->mbc_rom0_bank & (gb->rom_size / 0x4000 - 1); return gb->rom; case GB_DIRECT_ACCESS_RAM: *size = gb->ram_size; @@ -1717,7 +1818,7 @@ void *GB_get_direct_access(GB_gameboy_t *gb, GB_direct_access_t access, size_t * return gb->ram; case GB_DIRECT_ACCESS_CART_RAM: *size = gb->mbc_ram_size; - *bank = gb->mbc_ram_bank; + *bank = gb->mbc_ram_bank & (gb->mbc_ram_size / 0x2000 - 1); return gb->mbc_ram; case GB_DIRECT_ACCESS_VRAM: *size = gb->vram_size; @@ -1744,9 +1845,9 @@ void *GB_get_direct_access(GB_gameboy_t *gb, GB_direct_access_t access, size_t * *bank = 0; return &gb->background_palettes_data; case GB_DIRECT_ACCESS_OBP: - *size = sizeof(gb->sprite_palettes_data); + *size = sizeof(gb->object_palettes_data); *bank = 0; - return &gb->sprite_palettes_data; + return &gb->object_palettes_data; case GB_DIRECT_ACCESS_IE: *size = sizeof(gb->interrupt_enable); *bank = 0; @@ -1758,28 +1859,42 @@ void *GB_get_direct_access(GB_gameboy_t *gb, GB_direct_access_t access, size_t * } } +GB_registers_t *GB_get_registers(GB_gameboy_t *gb) +{ + return (GB_registers_t *)&gb->registers; +} + void GB_set_clock_multiplier(GB_gameboy_t *gb, double multiplier) { gb->clock_multiplier = multiplier; - GB_apu_update_cycles_per_sample(gb); + GB_update_clock_rate(gb); } uint32_t GB_get_clock_rate(GB_gameboy_t *gb) { - return GB_get_unmultiplied_clock_rate(gb) * gb->clock_multiplier; + return gb->clock_rate; } - uint32_t GB_get_unmultiplied_clock_rate(GB_gameboy_t *gb) +{ + return gb->unmultiplied_clock_rate; +} + +void GB_update_clock_rate(GB_gameboy_t *gb) { if (gb->model & GB_MODEL_PAL_BIT) { - return SGB_PAL_FREQUENCY; + gb->unmultiplied_clock_rate = SGB_PAL_FREQUENCY; + } + else if ((gb->model & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB) { + gb->unmultiplied_clock_rate = SGB_NTSC_FREQUENCY; } - if ((gb->model & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB) { - return SGB_NTSC_FREQUENCY; + else { + gb->unmultiplied_clock_rate = CPU_FREQUENCY; } - return CPU_FREQUENCY; + + gb->clock_rate = gb->unmultiplied_clock_rate * gb->clock_multiplier; } + void GB_set_border_mode(GB_gameboy_t *gb, GB_border_mode_t border_mode) { if (gb->border_mode > GB_BORDER_ALWAYS) return; @@ -1857,21 +1972,23 @@ void GB_set_boot_rom_load_callback(GB_gameboy_t *gb, GB_boot_rom_load_callback_t unsigned GB_time_to_alarm(GB_gameboy_t *gb) { if (gb->cartridge_type->mbc_type != GB_HUC3) return 0; - if (!gb->huc3_alarm_enabled) return 0; - if (!(gb->huc3_alarm_days & 0x2000)) return 0; - unsigned current_time = (gb->huc3_days & 0x1FFF) * 24 * 60 * 60 + gb->huc3_minutes * 60 + (time(NULL) % 60); - unsigned alarm_time = (gb->huc3_alarm_days & 0x1FFF) * 24 * 60 * 60 + gb->huc3_alarm_minutes * 60; + if (!gb->huc3.alarm_enabled) return 0; + if (!(gb->huc3.alarm_days & 0x2000)) return 0; + unsigned current_time = (gb->huc3.days & 0x1FFF) * 24 * 60 * 60 + gb->huc3.minutes * 60 + (time(NULL) % 60); + unsigned alarm_time = (gb->huc3.alarm_days & 0x1FFF) * 24 * 60 * 60 + gb->huc3.alarm_minutes * 60; if (current_time > alarm_time) return 0; return alarm_time - current_time; } -void GB_set_rtc_mode(GB_gameboy_t *gb, GB_rtc_mode_t mode) +bool GB_has_accelerometer(GB_gameboy_t *gb) { - if (gb->rtc_mode != mode) { - gb->rtc_mode = mode; - gb->rtc_cycles = 0; - gb->last_rtc_second = time(NULL); - } + return gb->cartridge_type->mbc_type == GB_MBC7; +} + +void GB_set_accelerometer_values(GB_gameboy_t *gb, double x, double y) +{ + gb->accelerometer_x = x; + gb->accelerometer_y = y; } void GB_get_rom_title(GB_gameboy_t *gb, char *title) @@ -1888,49 +2005,49 @@ void GB_get_rom_title(GB_gameboy_t *gb, char *title) uint32_t GB_get_rom_crc32(GB_gameboy_t *gb) { static const uint32_t table[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, + 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, + 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, + 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, + 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, + 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, + 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, + 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, + 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, + 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, + 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, + 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, + 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, + 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, + 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, + 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, + 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, + 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, + 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, + 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; const uint8_t *byte = gb->rom; diff --git a/thirdparty/SameBoy/Core/gb.h b/thirdparty/SameBoy/Core/gb.h index 655346bf3..de4c331a3 100644 --- a/thirdparty/SameBoy/Core/gb.h +++ b/thirdparty/SameBoy/Core/gb.h @@ -3,9 +3,10 @@ #define typeof __typeof__ #include #include +#include #include -#include "gb_struct_def.h" +#include "defs.h" #include "save_state.h" #include "apu.h" @@ -26,28 +27,17 @@ #include "workboy.h" #include "random.h" -#define GB_STRUCT_VERSION 13 +#define GB_STRUCT_VERSION 14 #define GB_MODEL_FAMILY_MASK 0xF00 #define GB_MODEL_DMG_FAMILY 0x000 #define GB_MODEL_MGB_FAMILY 0x100 #define GB_MODEL_CGB_FAMILY 0x200 +#define GB_MODEL_GBP_BIT 0x20 #define GB_MODEL_PAL_BIT 0x40 #define GB_MODEL_NO_SFC_BIT 0x80 -#define GB_MODEL_PAL_BIT_OLD 0x1000 -#define GB_MODEL_NO_SFC_BIT_OLD 0x2000 - -#ifdef GB_INTERNAL -#if __clang__ -#define unrolled _Pragma("unroll") -#elif __GNUC__ >= 8 -#define unrolled _Pragma("GCC unroll 8") -#else -#define unrolled -#endif - -#endif +#define GB_REWIND_FRAMES_PER_KEY 255 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ #define GB_BIG_ENDIAN @@ -57,31 +47,20 @@ #error Unable to detect endianess #endif -#ifdef GB_INTERNAL -/* Todo: similar macros are everywhere, clean this up and remove direct calls to bswap */ #ifdef GB_BIG_ENDIAN -#define LE16(x) __builtin_bswap16(x) -#define LE32(x) __builtin_bswap32(x) -#define LE64(x) __builtin_bswap64(x) -#define BE16(x) (x) -#define BE32(x) (x) -#define BE64(x) (x) +#define GB_REGISTER_ORDER a, f, \ + b, c, \ + d, e, \ + h, l #else -#define LE16(x) (x) -#define LE32(x) (x) -#define LE64(x) (x) -#define BE16(x) __builtin_bswap16(x) -#define BE32(x) __builtin_bswap32(x) -#define BE64(x) __builtin_bswap64(x) -#endif -#endif - -#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) -#define __builtin_bswap16(x) ({ typeof(x) _x = (x); _x >> 8 | _x << 8; }) +#define GB_REGISTER_ORDER f, a, \ + c, b, \ + e, d, \ + l, h #endif typedef struct { - struct { + struct GB_color_s { uint8_t r, g, b; } colors[5]; } GB_palette_t; @@ -128,16 +107,23 @@ typedef enum { GB_MODEL_SGB_NTSC_NO_SFC = GB_MODEL_SGB | GB_MODEL_NO_SFC_BIT, GB_MODEL_SGB_NO_SFC = GB_MODEL_SGB_NTSC_NO_SFC, GB_MODEL_SGB_PAL_NO_SFC = GB_MODEL_SGB | GB_MODEL_NO_SFC_BIT | GB_MODEL_PAL_BIT, - // GB_MODEL_MGB = 0x100, + GB_MODEL_MGB = 0x100, GB_MODEL_SGB2 = 0x101, GB_MODEL_SGB2_NO_SFC = GB_MODEL_SGB2 | GB_MODEL_NO_SFC_BIT, - // GB_MODEL_CGB_0 = 0x200, - // GB_MODEL_CGB_A = 0x201, - // GB_MODEL_CGB_B = 0x202, + GB_MODEL_CGB_0 = 0x200, + GB_MODEL_CGB_A = 0x201, + GB_MODEL_CGB_B = 0x202, GB_MODEL_CGB_C = 0x203, - // GB_MODEL_CGB_D = 0x204, + GB_MODEL_CGB_D = 0x204, GB_MODEL_CGB_E = 0x205, - GB_MODEL_AGB = 0x206, + // GB_MODEL_AGB_0 = 0x206, + GB_MODEL_AGB_A = 0x207, + GB_MODEL_GBP_A = GB_MODEL_AGB_A | GB_MODEL_GBP_BIT, // AGB-A inside a Game Boy Player + GB_MODEL_AGB = GB_MODEL_AGB_A, + GB_MODEL_GBP = GB_MODEL_GBP_A, + //GB_MODEL_AGB_B = 0x208 + //GB_MODEL_AGB_E = 0x209 + //GB_MODEL_GBP_E = GB_MODEL_AGB_E | GB_MODEL_GBP_BIT, // AGB-E inside a Game Boy Player } GB_model_t; enum { @@ -146,15 +132,27 @@ enum { GB_REGISTER_DE, GB_REGISTER_HL, GB_REGISTER_SP, + GB_REGISTER_PC, GB_REGISTERS_16_BIT /* Count */ }; /* Todo: Actually use these! */ enum { - GB_CARRY_FLAG = 16, - GB_HALF_CARRY_FLAG = 32, - GB_SUBTRACT_FLAG = 64, - GB_ZERO_FLAG = 128, + GB_CARRY_FLAG = 0x10, + GB_HALF_CARRY_FLAG = 0x20, + GB_SUBTRACT_FLAG = 0x40, + GB_ZERO_FLAG = 0x80, +}; + +enum { + GB_LCDC_BG_EN = 1, + GB_LCDC_OBJ_EN = 2, + GB_LCDC_OBJ_SIZE = 4, + GB_LCDC_BG_MAP = 8, + GB_LCDC_TILE_SEL = 0x10, + GB_LCDC_WIN_ENABLE = 0x20, + GB_LCDC_WIN_MAP = 0x40, + GB_LCDC_ENABLE = 0x80, }; typedef enum { @@ -179,7 +177,7 @@ enum { /* Missing */ - GB_IO_IF = 0x0f, // Interrupt Flag (R/W) + GB_IO_IF = 0x0F, // Interrupt Flag (R/W) /* Sound */ GB_IO_NR10 = 0x10, // Channel 1 Sweep register (R/W) @@ -192,11 +190,11 @@ enum { GB_IO_NR22 = 0x17, // Channel 2 Volume Envelope (R/W) GB_IO_NR23 = 0x18, // Channel 2 Frequency lo data (W) GB_IO_NR24 = 0x19, // Channel 2 Frequency hi data (R/W) - GB_IO_NR30 = 0x1a, // Channel 3 Sound on/off (R/W) - GB_IO_NR31 = 0x1b, // Channel 3 Sound Length - GB_IO_NR32 = 0x1c, // Channel 3 Select output level (R/W) - GB_IO_NR33 = 0x1d, // Channel 3 Frequency's lower data (W) - GB_IO_NR34 = 0x1e, // Channel 3 Frequency's higher data (R/W) + GB_IO_NR30 = 0x1A, // Channel 3 Sound on/off (R/W) + GB_IO_NR31 = 0x1B, // Channel 3 Sound Length + GB_IO_NR32 = 0x1C, // Channel 3 Select output level (R/W) + GB_IO_NR33 = 0x1D, // Channel 3 Frequency's lower data (W) + GB_IO_NR34 = 0x1E, // Channel 3 Frequency's higher data (R/W) /* NR40 does not exist */ GB_IO_NR41 = 0x20, // Channel 4 Sound Length (R/W) GB_IO_NR42 = 0x21, // Channel 4 Volume Envelope (R/W) @@ -209,7 +207,7 @@ enum { /* Missing */ GB_IO_WAV_START = 0x30, // Wave pattern start - GB_IO_WAV_END = 0x3f, // Wave pattern end + GB_IO_WAV_END = 0x3F, // Wave pattern end /* Graphics */ GB_IO_LCDC = 0x40, // LCD Control (R/W) @@ -222,20 +220,17 @@ enum { GB_IO_BGP = 0x47, // BG Palette Data (R/W) - Non CGB Mode Only GB_IO_OBP0 = 0x48, // Object Palette 0 Data (R/W) - Non CGB Mode Only GB_IO_OBP1 = 0x49, // Object Palette 1 Data (R/W) - Non CGB Mode Only - GB_IO_WY = 0x4a, // Window Y Position (R/W) - GB_IO_WX = 0x4b, // Window X Position minus 7 (R/W) - // Has some undocumented compatibility flags written at boot. - // Unfortunately it is not readable or writable after boot has finished, so research of this - // register is quite limited. The value written to this register, however, can be controlled - // in some cases. - GB_IO_KEY0 = 0x4c, + GB_IO_WY = 0x4A, // Window Y Position (R/W) + GB_IO_WX = 0x4B, // Window X Position minus 7 (R/W) + // Controls DMG mode and PGB mode + GB_IO_KEY0 = 0x4C, /* General CGB features */ - GB_IO_KEY1 = 0x4d, // CGB Mode Only - Prepare Speed Switch + GB_IO_KEY1 = 0x4D, // CGB Mode Only - Prepare Speed Switch /* Missing */ - GB_IO_VBK = 0x4f, // CGB Mode Only - VRAM Bank + GB_IO_VBK = 0x4F, // CGB Mode Only - VRAM Bank GB_IO_BANK = 0x50, // Write to disable the BIOS mapping /* CGB DMA */ @@ -250,23 +245,23 @@ enum { /* Missing */ - /* CGB Paletts */ + /* CGB Palettes */ GB_IO_BGPI = 0x68, // CGB Mode Only - Background Palette Index GB_IO_BGPD = 0x69, // CGB Mode Only - Background Palette Data - GB_IO_OBPI = 0x6a, // CGB Mode Only - Sprite Palette Index - GB_IO_OBPD = 0x6b, // CGB Mode Only - Sprite Palette Data - GB_IO_OPRI = 0x6c, // Affects object priority (X based or index based) + GB_IO_OBPI = 0x6A, // CGB Mode Only - Object Palette Index + GB_IO_OBPD = 0x6B, // CGB Mode Only - Object Palette Data + GB_IO_OPRI = 0x6C, // Affects object priority (X based or index based) /* Missing */ GB_IO_SVBK = 0x70, // CGB Mode Only - WRAM Bank - GB_IO_UNKNOWN2 = 0x72, // (00h) - Bit 0-7 (Read/Write) - GB_IO_UNKNOWN3 = 0x73, // (00h) - Bit 0-7 (Read/Write) - GB_IO_UNKNOWN4 = 0x74, // (00h) - Bit 0-7 (Read/Write) - CGB Mode Only + GB_IO_PSM = 0x71, // Palette Selection Mode, controls the PSW and key combo + GB_IO_PSWX = 0x72, // X position of the palette switching window + GB_IO_PSWY = 0x73, // Y position of the palette switching window + GB_IO_PSW = 0x74, // Key combo to trigger the palette switching window GB_IO_UNKNOWN5 = 0x75, // (8Fh) - Bit 4-6 (Read/Write) - GB_IO_PCM_12 = 0x76, // Channels 1 and 2 amplitudes - GB_IO_PCM_34 = 0x77, // Channels 3 and 4 amplitudes - GB_IO_UNKNOWN8 = 0x7F, // Unknown, write only + GB_IO_PCM12 = 0x76, // Channels 1 and 2 amplitudes + GB_IO_PCM34 = 0x77, // Channels 3 and 4 amplitudes }; typedef enum { @@ -277,21 +272,16 @@ typedef enum { } GB_log_attributes; typedef enum { - GB_BOOT_ROM_DMG0, + GB_BOOT_ROM_DMG_0, GB_BOOT_ROM_DMG, GB_BOOT_ROM_MGB, GB_BOOT_ROM_SGB, GB_BOOT_ROM_SGB2, - GB_BOOT_ROM_CGB0, + GB_BOOT_ROM_CGB_0, GB_BOOT_ROM_CGB, GB_BOOT_ROM_AGB, } GB_boot_rom_t; -typedef enum { - GB_RTC_MODE_SYNC_TO_HOST, - GB_RTC_MODE_ACCURATE, -} GB_rtc_mode_t; - #ifdef GB_INTERNAL #define LCDC_PERIOD 70224 #define CPU_FREQUENCY 0x400000 @@ -308,7 +298,7 @@ typedef enum { #endif #endif -typedef void (*GB_vblank_callback_t)(GB_gameboy_t *gb); +typedef void (*GB_vblank_callback_t)(GB_gameboy_t *gb, GB_vblank_type_t type); typedef void (*GB_log_callback_t)(GB_gameboy_t *gb, const char *string, GB_log_attributes attributes); typedef char *(*GB_input_callback_t)(GB_gameboy_t *gb); typedef uint32_t (*GB_rgb_encode_callback_t)(GB_gameboy_t *gb, uint8_t r, uint8_t g, uint8_t b); @@ -323,21 +313,25 @@ typedef void (*GB_icd_hreset_callback_t)(GB_gameboy_t *gb); typedef void (*GB_icd_vreset_callback_t)(GB_gameboy_t *gb); typedef void (*GB_boot_rom_load_callback_t)(GB_gameboy_t *gb, GB_boot_rom_t type); +typedef void (*GB_execution_callback_t)(GB_gameboy_t *gb, uint16_t address, uint8_t opcode); +typedef void (*GB_lcd_line_callback_t)(GB_gameboy_t *gb, uint8_t line); +typedef void (*GB_lcd_status_callback_t)(GB_gameboy_t *gb, bool on); + struct GB_breakpoint_s; struct GB_watchpoint_s; typedef struct { uint8_t pixel; // Color, 0-3 uint8_t palette; // Palette, 0 - 7 (CGB); 0-1 in DMG (or just 0 for BG) - uint8_t priority; // Sprite priority – 0 in DMG, OAM index in CGB - bool bg_priority; // For sprite FIFO – the BG priority bit. For the BG FIFO – the CGB attributes priority bit + uint8_t priority; // Object priority – 0 in DMG, OAM index in CGB + bool bg_priority; // For object FIFO – the BG priority bit. For the BG FIFO – the CGB attributes priority bit } GB_fifo_item_t; -#define GB_FIFO_LENGTH 16 +#define GB_FIFO_LENGTH 8 typedef struct { GB_fifo_item_t fifo[GB_FIFO_LENGTH]; uint8_t read_end; - uint8_t write_end; + uint8_t size; } GB_fifo_t; typedef struct { @@ -363,6 +357,22 @@ typedef struct { char copyright[33]; } GB_gbs_info_t; +/* Duplicated so it can remain anonymous in GB_gameboy_t */ +typedef union { + uint16_t registers[GB_REGISTERS_16_BIT]; + struct { + uint16_t af, + bc, + de, + hl, + sp, + pc; + }; + struct { + uint8_t GB_REGISTER_ORDER; + }; +} GB_registers_t; + /* When state saving, each section is dumped independently of other sections. This allows adding data to the end of the section without worrying about future compatibility. Some other changes might be "safe" as well. @@ -382,35 +392,24 @@ struct GB_gameboy_internal_s { /* The version field makes sure we don't load save state files with a completely different structure. This happens when struct fields are removed/resized in an backward incompatible manner. */ uint32_t version; - ); + ) GB_SECTION(core_state, /* Registers */ - uint16_t pc; - union { - uint16_t registers[GB_REGISTERS_16_BIT]; - struct { - uint16_t af, - bc, - de, - hl, - sp; - }; - struct { -#ifdef GB_BIG_ENDIAN - uint8_t a, f, - b, c, - d, e, - h, l; -#else - uint8_t f, a, - c, b, - e, d, - l, h; -#endif - }; - - }; + union { + uint16_t registers[GB_REGISTERS_16_BIT]; + struct { + uint16_t af, + bc, + de, + hl, + sp, + pc; + }; + struct { + uint8_t GB_REGISTER_ORDER; + }; + }; uint8_t ime; uint8_t interrupt_enable; uint8_t cgb_ram_bank; @@ -429,35 +428,38 @@ struct GB_gameboy_internal_s { /* Misc state */ bool infrared_input; GB_printer_t printer; - uint8_t extra_oam[0xff00 - 0xfea0]; + uint8_t extra_oam[0xFF00 - 0xFEA0]; uint32_t ram_size; // Different between CGB and DMG GB_workboy_t workboy; int32_t ir_sensor; bool effective_ir_input; uint16_t address_bus; - ); + ) /* DMA and HDMA */ GB_SECTION(dma, bool hdma_on; bool hdma_on_hblank; uint8_t hdma_steps_left; - int16_t hdma_cycles; // in 8MHz units uint16_t hdma_current_src, hdma_current_dest; - uint8_t dma_steps_left; uint8_t dma_current_dest; + uint8_t last_dma_read; uint16_t dma_current_src; - int16_t dma_cycles; - bool is_dma_restarting; - uint8_t last_opcode_read; /* Required to emulte HDMA reads from Exxx */ - bool hdma_starting; - ); + uint16_t dma_cycles; + int8_t dma_cycles_modulo; + bool dma_ppu_vram_conflict; + uint16_t dma_ppu_vram_conflict_addr; + uint8_t hdma_open_bus; /* Required to emulate HDMA reads from Exxx */ + bool allow_hdma_on_wake; + bool dma_restarting; + ) /* MBC */ GB_SECTION(mbc, uint16_t mbc_rom_bank; + uint16_t mbc_rom0_bank; /* For multicart mappings . */ uint8_t mbc_ram_bank; uint32_t mbc_ram_size; bool mbc_ram_enable; @@ -475,53 +477,86 @@ struct GB_gameboy_internal_s { struct { uint8_t rom_bank:8; uint8_t ram_bank:3; + bool rtc_mapped:1; } mbc3; struct { uint8_t rom_bank_low; uint8_t rom_bank_high:1; uint8_t ram_bank:4; - } mbc5; + } mbc5; // Also used for GB_CAMERA + + struct { + uint8_t rom_bank; + uint16_t x_latch; + uint16_t y_latch; + bool latch_ready:1; + bool eeprom_do:1; + bool eeprom_di:1; + bool eeprom_clk:1; + bool eeprom_cs:1; + uint16_t eeprom_command:11; + uint16_t read_bits; + uint8_t argument_bits_left:5; + bool secondary_ram_enable:1; + bool eeprom_write_enabled:1; + } mbc7; + + struct { + uint8_t rom_bank_low:5; + uint8_t rom_bank_mid:2; + bool mbc1_mode:1; + + uint8_t rom_bank_mask:4; + uint8_t rom_bank_high:2; + uint8_t ram_bank_low:2; + + uint8_t ram_bank_high:2; + uint8_t ram_bank_mask:2; + + bool locked:1; + bool mbc1_mode_disable:1; + bool multiplex_mode:1; + } mmm01; struct { uint8_t bank_low:6; uint8_t bank_high:3; - bool mode:1; - bool ir_mode:1; + bool ir_mode; } huc1; struct { uint8_t rom_bank:7; uint8_t padding:1; uint8_t ram_bank:4; + uint8_t mode; + uint8_t access_index; + uint16_t minutes, days; + uint16_t alarm_minutes, alarm_days; + bool alarm_enabled; + uint8_t read; + uint8_t access_flags; } huc3; + + struct { + uint16_t rom_bank; + uint8_t ram_bank; + uint8_t mode; + } tpp1; }; - uint16_t mbc_rom0_bank; /* For some MBC1 wirings. */ bool camera_registers_mapped; uint8_t camera_registers[0x36]; uint8_t rumble_strength; bool cart_ir; - - // TODO: move to huc3/mbc3/tpp1 struct when breaking save compat - uint8_t huc3_mode; - uint8_t huc3_access_index; - uint16_t huc3_minutes, huc3_days; - uint16_t huc3_alarm_minutes, huc3_alarm_days; - bool huc3_alarm_enabled; - uint8_t huc3_read; - uint8_t huc3_access_flags; - bool mbc3_rtc_mapped; - uint16_t tpp1_rom_bank; - uint8_t tpp1_ram_bank; - uint8_t tpp1_mode; - ); - + uint8_t camera_alignment; + int32_t camera_countdown; + ) /* HRAM and HW Registers */ GB_SECTION(hram, uint8_t hram[0xFFFF - 0xFF80]; uint8_t io_registers[0x80]; - ); + ) /* Timing */ GB_SECTION(timing, @@ -529,28 +564,35 @@ struct GB_gameboy_internal_s { GB_UNIT(div); uint16_t div_counter; uint8_t tima_reload_state; /* After TIMA overflows, it becomes 0 for 4 cycles before actually reloading. */ - uint16_t serial_cycles; - uint16_t serial_length; + bool serial_master_clock; + uint8_t serial_mask; uint8_t double_speed_alignment; uint8_t serial_count; int32_t speed_switch_halt_countdown; uint8_t speed_switch_countdown; // To compensate for the lack of pipeline emulation uint8_t speed_switch_freeze; // Solely for realigning the PPU, should be removed when the odd modes are implemented - ); + /* For timing of the vblank callback */ + uint32_t cycles_since_vblank_callback; + bool lcd_disabled_outside_of_vblank; + int32_t allowed_pending_cycles; + uint16_t mode3_batching_length; + uint8_t joyp_switching_delay; + uint8_t joyp_switch_value; + uint16_t key_bounce_timing[GB_KEY_MAX]; + ) /* APU */ GB_SECTION(apu, GB_apu_t apu; - ); + ) /* RTC */ GB_SECTION(rtc, GB_rtc_time_t rtc_real, rtc_latched; uint64_t last_rtc_second; - GB_PADDING(bool, rtc_latch); uint32_t rtc_cycles; uint8_t tpp1_mr4; - ); + ) /* Video Display */ GB_SECTION(video, @@ -558,10 +600,9 @@ struct GB_gameboy_internal_s { bool cgb_vram_bank; uint8_t oam[0xA0]; uint8_t background_palettes_data[0x40]; - uint8_t sprite_palettes_data[0x40]; + uint8_t object_palettes_data[0x40]; uint8_t position_in_line; bool stat_interrupt_line; - uint8_t effective_scx; uint8_t window_y; /* The LCDC will skip the first frame it renders after turning it on. On the CGB, a frame is not skipped if the previous frame was skipped as well. @@ -572,18 +613,16 @@ struct GB_gameboy_internal_s { GB_FRAMESKIP_LCD_TURNED_ON, // On a DMG, the LCD renders a blank screen during this state, // on a CGB, the previous frame is repeated (which might be // blank if the LCD was off for more than a few cycles) - GB_FRAMESKIP_FIRST_FRAME_SKIPPED, // This state is 'skipped' when emulating a DMG - GB_FRAMESKIP_SECOND_FRAME_RENDERED, + GB_FRAMESKIP_FIRST_FRAME_SKIPPED__DEPRECATED, + GB_FRAMESKIP_FIRST_FRAME_RENDERED, } frame_skip_state; bool oam_read_blocked; bool vram_read_blocked; bool oam_write_blocked; bool vram_write_blocked; - bool fifo_insertion_glitch; uint8_t current_line; uint16_t ly_for_comparison; GB_fifo_t bg_fifo, oam_fifo; - GB_PADDING(uint8_t, fetcher_x); uint8_t fetcher_y; uint16_t cycles_for_line; uint8_t current_tile; @@ -594,16 +633,23 @@ struct GB_gameboy_internal_s { bool wx166_glitch; bool wx_triggered; uint8_t visible_objs[10]; - uint8_t obj_comparators[10]; + uint8_t objects_x[10]; + uint8_t objects_y[10]; + uint8_t object_tile_data[2]; + uint8_t mode2_y_bus; + // They're the same bus + union { + uint8_t mode2_x_bus; + uint8_t object_flags; + }; uint8_t n_visible_objs; + uint8_t orig_n_visible_objs; uint8_t oam_search_index; uint8_t accessed_oam_row; - uint8_t extra_penalty_for_sprite_at_0; uint8_t mode_for_interrupt; bool lyc_interrupt_line; bool cgb_palettes_blocked; uint8_t current_lcd_line; // The LCD can go out of sync since the vsync signal is skipped in some cases. - uint32_t cycles_in_stop_mode; uint8_t object_priority; bool oam_ppu_blocked; bool vram_ppu_blocked; @@ -617,9 +663,13 @@ struct GB_gameboy_internal_s { bool is_odd_frame; uint16_t last_tile_data_address; uint16_t last_tile_index_address; - bool cgb_repeated_a_frame; + GB_PADDING(bool, cgb_repeated_a_frame); uint8_t data_for_sel_glitch; - ); + bool delayed_glitch_hblank_interrupt; + uint32_t frame_repeat_countdown; + bool disable_window_pixel_insertion_glitch; + bool insert_bg_pixel; + ) /* Unsaved data. This includes all pointers, as well as everything that shouldn't be on a save state */ /* This data is reserved on reset and must come last in the struct */ @@ -644,20 +694,30 @@ struct GB_gameboy_internal_s { /* I/O */ uint32_t *screen; uint32_t background_palettes_rgb[0x20]; - uint32_t sprite_palettes_rgb[0x20]; + uint32_t object_palettes_rgb[0x20]; const GB_palette_t *dmg_palette; GB_color_correction_mode_t color_correction_mode; double light_temperature; bool keys[4][GB_KEY_MAX]; + double accelerometer_x, accelerometer_y; GB_border_mode_t border_mode; GB_sgb_border_t borrowed_border; bool tried_loading_sgb_border; bool has_sgb_border; - + bool objects_disabled; + bool background_disabled; + bool joyp_accessed; + bool illegal_inputs_allowed; + bool no_bouncing_emulation; + bool joypad_is_stable; + /* Timing */ uint64_t last_sync; uint64_t cycles_since_last_sync; // In 8MHz units GB_rtc_mode_t rtc_mode; + uint32_t rtc_second_length; + uint32_t clock_rate; + uint32_t unmultiplied_clock_rate; /* Audio */ GB_apu_output_t apu_output; @@ -681,14 +741,18 @@ struct GB_gameboy_internal_s { GB_icd_vreset_callback_t icd_hreset_callback; GB_icd_vreset_callback_t icd_vreset_callback; GB_read_memory_callback_t read_memory_callback; + GB_write_memory_callback_t write_memory_callback; GB_boot_rom_load_callback_t boot_rom_load_callback; GB_print_image_callback_t printer_callback; GB_workboy_set_time_callback workboy_set_time_callback; GB_workboy_get_time_callback workboy_get_time_callback; - + GB_execution_callback_t execution_callback; + GB_lcd_line_callback_t lcd_line_callback; + GB_lcd_status_callback_t lcd_status_callback; /*** Debugger ***/ volatile bool debug_stopped, debug_disable; bool debug_fin_command, debug_next_command; + bool help_shown; /* Breakpoints */ uint16_t n_breakpoints; @@ -697,8 +761,6 @@ struct GB_gameboy_internal_s { void *nontrivial_jump_state; bool non_trivial_jump_breakpoint_occured; - /* SLD (Todo: merge with backtrace) */ - bool stack_leak_detection; signed debug_call_depth; uint16_t sp_for_call_depth[0x200]; /* Should be much more than enough */ uint16_t addr_for_call_depth[0x200]; @@ -716,7 +778,8 @@ struct GB_gameboy_internal_s { struct GB_watchpoint_s *watchpoints; /* Symbol tables */ - GB_symbol_map_t *bank_symbols[0x200]; + GB_symbol_map_t **bank_symbols; + size_t n_symbol_maps; GB_reversed_symbol_map_t reversed_symbol_map; /* Ticks command */ @@ -728,7 +791,6 @@ struct GB_gameboy_internal_s { const char *undo_label; /* Rewind */ -#define GB_REWIND_FRAMES_PER_KEY 255 size_t rewind_buffer_length; struct { uint8_t *key_state; @@ -756,7 +818,7 @@ struct GB_gameboy_internal_s { bool disable_rendering; uint8_t boot_rom[0x900]; bool vblank_just_occured; // For slow operations involving syscalls; these should only run once per vblank - uint8_t cycles_since_run; // How many cycles have passed since the last call to GB_run(), in 8MHz units + unsigned cycles_since_run; // How many cycles have passed since the last call to GB_run(), in 8MHz units double clock_multiplier; GB_rumble_mode_t rumble_mode; uint32_t rumble_on_cycles; @@ -765,14 +827,18 @@ struct GB_gameboy_internal_s { /* Temporary state */ bool wx_just_changed; bool tile_sel_glitch; + bool disable_oam_corruption; // For safe memory reads + bool in_dma_read; + bool hdma_in_progress; + uint16_t addr_for_hdma_conflict; GB_gbs_header_t gbs_header; - ); + ) }; #ifndef GB_INTERNAL struct GB_gameboy_s { - char __internal[sizeof(struct GB_gameboy_internal_s)]; + alignas(struct GB_gameboy_internal_s) uint8_t __internal[sizeof(struct GB_gameboy_internal_s)]; }; #endif @@ -783,18 +849,43 @@ struct GB_gameboy_s { __attribute__((__format__ (__printf__, fmtarg, firstvararg))) #endif -void GB_init(GB_gameboy_t *gb, GB_model_t model); +/* + There are two instance allocation styles – one where you manage your + own instance allocation, and one where you use provided allocators. + + Managing allocations yourself: + GB_gameboy_t gb; + GB_init(&gb, model); + ... + GB_free(&gb); + + Using the provided allocators: + GB_gameboy_t *gb = GB_init(GB_alloc(), model); + ... + GB_free(gb); // optional + GB_dealloc(gb); + +*/ +GB_gameboy_t *GB_init(GB_gameboy_t *gb, GB_model_t model); +void GB_free(GB_gameboy_t *gb); +GB_gameboy_t *GB_alloc(void); +void GB_dealloc(GB_gameboy_t *gb); + +// For when you want to use your own malloc implementation without having to rely on the header struct +size_t GB_allocation_size(void); + bool GB_is_inited(GB_gameboy_t *gb); -bool GB_is_cgb(GB_gameboy_t *gb); +bool GB_is_cgb(const GB_gameboy_t *gb); +bool GB_is_cgb_in_cgb_mode(GB_gameboy_t *gb); bool GB_is_sgb(GB_gameboy_t *gb); // Returns true if the model is SGB or SGB2 bool GB_is_hle_sgb(GB_gameboy_t *gb); // Returns true if the model is SGB or SGB2 and the SFC/SNES side is HLE'd GB_model_t GB_get_model(GB_gameboy_t *gb); -void GB_free(GB_gameboy_t *gb); void GB_reset(GB_gameboy_t *gb); +void GB_quick_reset(GB_gameboy_t *gb); // Similar to the cart reset line void GB_switch_model_and_reset(GB_gameboy_t *gb, GB_model_t model); /* Returns the time passed, in 8MHz ticks. */ -uint8_t GB_run(GB_gameboy_t *gb); +unsigned GB_run(GB_gameboy_t *gb); /* Returns the time passed since the last frame, in nanoseconds */ uint64_t GB_run_frame(GB_gameboy_t *gb); @@ -810,11 +901,13 @@ typedef enum { GB_DIRECT_ACCESS_BGP, GB_DIRECT_ACCESS_OBP, GB_DIRECT_ACCESS_IE, + GB_DIRECT_ACCESS_ROM0, // Identical to ROM, but returns the correct rom0 bank in the bank output argument } GB_direct_access_t; /* Returns a mutable pointer to various hardware memories. If that memory is banked, the current bank is returned at *bank, even if only a portion of the memory is banked. */ void *GB_get_direct_access(GB_gameboy_t *gb, GB_direct_access_t access, size_t *size, uint16_t *bank); +GB_registers_t *GB_get_registers(GB_gameboy_t *gb); void *GB_get_user_data(GB_gameboy_t *gb); void GB_set_user_data(GB_gameboy_t *gb, void *data); @@ -842,6 +935,7 @@ void GB_log(GB_gameboy_t *gb, const char *fmt, ...) __printflike(2, 3); void GB_attributed_log(GB_gameboy_t *gb, GB_log_attributes attributes, const char *fmt, ...) __printflike(3, 4); void GB_set_pixels_output(GB_gameboy_t *gb, uint32_t *output); +uint32_t *GB_get_pixels_output(GB_gameboy_t *gb); void GB_set_border_mode(GB_gameboy_t *gb, GB_border_mode_t border_mode); void GB_set_infrared_input(GB_gameboy_t *gb, bool state); @@ -857,7 +951,12 @@ void GB_set_update_input_hint_callback(GB_gameboy_t *gb, GB_update_input_hint_ca /* Called when a new boot ROM is needed. The callback should call GB_load_boot_rom or GB_load_boot_rom_from_buffer */ void GB_set_boot_rom_load_callback(GB_gameboy_t *gb, GB_boot_rom_load_callback_t callback); +void GB_set_execution_callback(GB_gameboy_t *gb, GB_execution_callback_t callback); +void GB_set_lcd_line_callback(GB_gameboy_t *gb, GB_lcd_line_callback_t callback); +void GB_set_lcd_status_callback(GB_gameboy_t *gb, GB_lcd_status_callback_t callback); + void GB_set_palette(GB_gameboy_t *gb, const GB_palette_t *palette); +const GB_palette_t *GB_get_palette(GB_gameboy_t *gb); /* These APIs are used when using internal clock */ void GB_set_serial_transfer_bit_start_callback(GB_gameboy_t *gb, GB_serial_transfer_bit_start_callback_t callback); @@ -871,9 +970,12 @@ void GB_disconnect_serial(GB_gameboy_t *gb); /* For cartridges with an alarm clock */ unsigned GB_time_to_alarm(GB_gameboy_t *gb); // 0 if no alarm - -/* RTC emulation mode */ -void GB_set_rtc_mode(GB_gameboy_t *gb, GB_rtc_mode_t mode); + +/* For cartridges motion controls */ +bool GB_has_accelerometer(GB_gameboy_t *gb); +// In units of g (gravity's acceleration). +// Values within ±4 recommended +void GB_set_accelerometer_values(GB_gameboy_t *gb, double x, double y); /* For integration with SFC/SNES emulators */ void GB_set_joyp_write_callback(GB_gameboy_t *gb, GB_joyp_write_callback_t callback); @@ -896,7 +998,8 @@ void GB_get_rom_title(GB_gameboy_t *gb, char *title); uint32_t GB_get_rom_crc32(GB_gameboy_t *gb); #ifdef GB_INTERNAL -void GB_borrow_sgb_border(GB_gameboy_t *gb); +internal void GB_borrow_sgb_border(GB_gameboy_t *gb); +internal void GB_update_clock_rate(GB_gameboy_t *gb); #endif #endif /* GB_h */ diff --git a/thirdparty/SameBoy/Core/gb_struct_def.h b/thirdparty/SameBoy/Core/gb_struct_def.h deleted file mode 100644 index 0e0ebd12e..000000000 --- a/thirdparty/SameBoy/Core/gb_struct_def.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef gb_struct_def_h -#define gb_struct_def_h -struct GB_gameboy_s; -typedef struct GB_gameboy_s GB_gameboy_t; -#endif diff --git a/thirdparty/SameBoy/Core/graphics/mgb_border.inc b/thirdparty/SameBoy/Core/graphics/mgb_border.inc new file mode 100644 index 000000000..f19ed8a1b --- /dev/null +++ b/thirdparty/SameBoy/Core/graphics/mgb_border.inc @@ -0,0 +1,477 @@ +static const uint16_t palette[] = { + 0x0000, 0x0000, 0x0011, 0x001A, 0x39CE, 0x6B5A, 0x739C, 0x5265, + 0x3DC5, 0x2924, 0x18A4, 0x20E6, 0x2D49, 0x1484, 0x5694, 0x20EC, +}; + + +static const uint16_t tilemap[] = { + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x0010, 0x0011, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x4011, 0x4010, 0x000F, + 0x000F, 0x0013, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x4013, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0016, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, + 0x0017, 0x0017, 0x4016, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0019, 0x001A, 0x4019, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x8019, 0x001B, 0xC019, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x0018, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4018, 0x0014, 0x0014, 0x0014, 0x4015, 0x000F, + 0x000F, 0x0015, 0x0014, 0x0014, 0x0014, 0x001C, 0x001D, 0x001D, + 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, + 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, 0x001D, + 0x001D, 0x001D, 0x401C, 0x0014, 0x0014, 0x0014, 0x001E, 0x000F, + 0x000F, 0x0015, 0x0014, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, + 0x002C, 0x002D, 0x002E, 0x002F, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0030, 0x0031, 0x000F, + 0x000F, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, + 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, + 0x0041, 0x0042, 0x0043, 0x0044, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0045, 0x0046, 0x000F, 0x000F, + 0x000F, 0x0047, 0x0048, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x0049, 0x0049, 0x004A, 0x004B, 0x004C, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, + 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, +}; + + + +const uint8_t tiles[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x3D, + 0x42, 0x7F, 0x81, 0xFF, 0x01, 0xFD, 0x01, + 0xFD, 0x01, 0xFF, 0x03, 0xFF, 0x03, 0xFF, + 0xFF, 0xBC, 0x7F, 0xFD, 0xFE, 0xFD, 0xFE, + 0xFD, 0xFE, 0xFD, 0xFE, 0xFF, 0xFC, 0xFF, + 0xFC, 0xFF, 0x00, 0xBF, 0x41, 0xFE, 0xC0, + 0xBF, 0xC1, 0xFF, 0x81, 0x7D, 0x03, 0x7F, + 0x01, 0x7F, 0x01, 0xFF, 0xFF, 0x3E, 0xFF, + 0xBE, 0x7F, 0xBF, 0x7E, 0xFF, 0x7E, 0x7D, + 0xFE, 0x7D, 0xFE, 0x7D, 0xFE, 0xFF, 0x00, + 0xFF, 0x00, 0xBF, 0x83, 0xBF, 0x87, 0xFC, + 0x8D, 0xED, 0x8E, 0xDB, 0xF8, 0xBF, 0xD8, + 0xFF, 0xFF, 0x3E, 0xFF, 0xBB, 0x7C, 0xB7, + 0x78, 0xAC, 0x73, 0xAD, 0x73, 0x9B, 0x67, + 0x9B, 0x67, 0xFF, 0x00, 0xB7, 0x08, 0xFF, + 0xF8, 0x3F, 0x38, 0xFF, 0x08, 0xFE, 0x01, + 0x87, 0x00, 0xFB, 0x78, 0xFF, 0xFF, 0x07, + 0xFF, 0xFB, 0x07, 0x3B, 0xC7, 0xE7, 0xFF, + 0xFE, 0xFF, 0x82, 0xFF, 0xFA, 0x87, 0xFF, + 0x00, 0xFE, 0x81, 0x5F, 0x40, 0xDE, 0xC0, + 0xFE, 0xC0, 0xE0, 0xDE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x1E, 0xFF, 0x5E, 0xBF, + 0xDE, 0x3F, 0xDE, 0x3F, 0xC0, 0x3F, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xCF, 0x30, + 0xDF, 0xEF, 0xFF, 0xCF, 0xFF, 0xC1, 0xBD, + 0x81, 0xBD, 0x81, 0xFF, 0x83, 0xFF, 0xFF, + 0x00, 0xFF, 0xCF, 0x30, 0xEF, 0x30, 0xFD, + 0x3E, 0xBD, 0x7E, 0xBD, 0x7E, 0xBF, 0x7C, + 0xFF, 0x00, 0xFF, 0x08, 0xF7, 0xF0, 0xFF, + 0xF0, 0xBF, 0xC0, 0xFF, 0x80, 0x7F, 0x00, + 0x7F, 0x00, 0xFF, 0xFF, 0x07, 0xFF, 0xF7, + 0x0F, 0xF7, 0x0F, 0xBF, 0x7F, 0xFF, 0x7F, + 0x7F, 0xFF, 0x7F, 0xFF, 0xFB, 0x07, 0xFF, + 0x03, 0xFF, 0x03, 0xFB, 0x03, 0xFB, 0x03, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFB, + 0xFC, 0xFB, 0xFC, 0xFB, 0xFC, 0xFB, 0xFC, + 0xFB, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFD, 0x01, 0xFD, 0x81, 0xFF, 0x0B, + 0xF7, 0xF3, 0xFB, 0xF7, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0x7D, 0xFE, 0x7D, 0xFE, + 0x07, 0xFC, 0xF7, 0x0C, 0xF3, 0x0C, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x98, + 0x7B, 0x38, 0x7C, 0x1D, 0xFF, 0x0F, 0xFB, + 0x0B, 0xFD, 0x03, 0xFF, 0x00, 0xFF, 0x00, + 0xDB, 0x67, 0x5B, 0xE7, 0x7C, 0xE3, 0x6F, + 0xF0, 0x73, 0xFC, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x9E, 0x18, 0xFE, 0x3C, 0x5A, + 0xDC, 0xFF, 0xF9, 0xED, 0xE3, 0xBF, 0xC0, + 0xFF, 0x00, 0xFF, 0x00, 0x9A, 0xE7, 0xDA, + 0xE7, 0x1A, 0xE7, 0xFF, 0x06, 0xE5, 0x1E, + 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, + 0xFD, 0xBF, 0x81, 0xBF, 0x81, 0xBD, 0x81, + 0xFD, 0x81, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xC1, 0x3E, 0xBD, 0x7E, 0xBD, 0x7E, + 0xBD, 0x7E, 0xBD, 0x7E, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x83, 0xBB, 0xC7, + 0xFF, 0x83, 0xFF, 0x83, 0x7B, 0x03, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xBF, 0x7C, + 0xBB, 0x7C, 0xFB, 0x7C, 0xFB, 0x7C, 0x7B, + 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x7F, + 0x80, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xF9, 0x00, + 0xF7, 0x00, 0xEE, 0x00, 0xDD, 0x04, 0xDF, + 0x04, 0xBF, 0x08, 0xFF, 0x00, 0xFF, 0x01, + 0xFF, 0x07, 0xFF, 0x0F, 0xFF, 0x1F, 0xFB, + 0x3F, 0xFB, 0x3F, 0xF7, 0x7F, 0x80, 0x00, + 0x7F, 0x00, 0xFF, 0x00, 0x80, 0x00, 0x7F, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0x08, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, + 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, + 0x10, 0xF7, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, + 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, + 0x7F, 0xEF, 0x7F, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, + 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, + 0xFF, 0x10, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, + 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, + 0xEF, 0x7F, 0xEF, 0x7F, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFE, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, + 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xC3, 0x7E, + 0xBD, 0xFF, 0x66, 0xFF, 0x7E, 0xFF, 0x7E, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0x81, 0xC3, 0x18, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x7E, 0xFF, 0x3C, 0xFF, + 0x00, 0x7E, 0x81, 0xBD, 0xC3, 0x42, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x81, 0x00, 0xC3, 0x81, 0xFF, + 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x08, 0xFD, 0x12, 0xFD, 0x12, + 0xFD, 0x12, 0xFD, 0x12, 0xFB, 0x24, 0xFB, + 0x24, 0xFB, 0x24, 0xF7, 0xFE, 0xEF, 0xFC, + 0xEF, 0xFC, 0xEF, 0xFC, 0xEF, 0xFC, 0xDF, + 0xF8, 0xDF, 0xF8, 0xDF, 0xF8, 0xFF, 0x00, + 0xF0, 0x1E, 0xC0, 0x3F, 0x8D, 0x72, 0x0E, + 0xF3, 0x8F, 0xF0, 0x01, 0xFC, 0xA0, 0x1E, + 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xE0, 0xFF, + 0xC0, 0x7C, 0x9F, 0x7F, 0x9F, 0x7F, 0x87, + 0xFF, 0xC0, 0xFF, 0x00, 0xFC, 0x00, 0x78, + 0x87, 0x78, 0x87, 0xF0, 0x07, 0xF8, 0x07, + 0xE2, 0x0F, 0xE2, 0x1C, 0xFF, 0xFF, 0xFF, + 0xFE, 0xFB, 0xFC, 0x7F, 0xFC, 0xFF, 0xF8, + 0xFF, 0xF2, 0xFD, 0xF3, 0xFF, 0xE6, 0xFF, + 0x00, 0x7C, 0x02, 0xFC, 0x01, 0x3C, 0xC3, + 0x3C, 0x83, 0x3E, 0xC1, 0x3C, 0xC3, 0x18, + 0xC7, 0xFF, 0xFF, 0xFD, 0xFE, 0xFF, 0x7C, + 0xBF, 0x7E, 0xFF, 0x3E, 0xFF, 0x7C, 0xFF, + 0x3C, 0xFB, 0x3C, 0xFF, 0x00, 0x1E, 0x01, + 0x1E, 0xE1, 0x1E, 0xE3, 0x1C, 0xF3, 0x0C, + 0xE7, 0x08, 0xF7, 0x19, 0x6F, 0xFF, 0xFF, + 0xFE, 0x3F, 0xFF, 0x3F, 0xFD, 0x1E, 0xEF, + 0x1E, 0xFB, 0x8C, 0xFF, 0xDD, 0xF6, 0x49, + 0xFF, 0x00, 0x18, 0x14, 0x08, 0xE3, 0x08, + 0xE3, 0x18, 0xF7, 0x1D, 0xE2, 0x18, 0xE7, + 0xB8, 0x47, 0xFF, 0xFF, 0xEB, 0x1C, 0xFF, + 0x0C, 0xFF, 0x18, 0xEF, 0x1C, 0xFF, 0x98, + 0xFF, 0x98, 0xFF, 0x18, 0xFF, 0x00, 0x06, + 0x05, 0x02, 0xF8, 0x02, 0xF9, 0xFE, 0x01, + 0xFF, 0x00, 0x06, 0xF9, 0x04, 0xF3, 0xFF, + 0xFF, 0xFA, 0x07, 0xFF, 0x02, 0xFF, 0x07, + 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x0E, 0xFD, + 0x06, 0xFF, 0x00, 0x03, 0x00, 0x01, 0xFF, + 0x30, 0xCF, 0x70, 0x8F, 0x30, 0xC6, 0x21, + 0xDC, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFE, 0x01, 0xFF, 0x01, 0xF7, 0x39, 0xFF, + 0x79, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x00, + 0xF8, 0x01, 0xF0, 0x1F, 0xE1, 0x3E, 0x83, + 0x78, 0x87, 0x30, 0xCF, 0x30, 0x8F, 0x70, + 0xFF, 0xFF, 0xFF, 0xFD, 0xEF, 0xF8, 0xDF, + 0xE0, 0xBF, 0xC3, 0xFF, 0x87, 0xFF, 0x8F, + 0xFF, 0x9F, 0xFF, 0x00, 0x3C, 0xA0, 0x0C, + 0xE1, 0x07, 0xF0, 0x86, 0x38, 0xC7, 0x3C, + 0xC3, 0x18, 0xC7, 0x3C, 0xFF, 0xFF, 0xDF, + 0xBE, 0xFF, 0x0C, 0xFF, 0x06, 0xFF, 0x87, + 0xFB, 0xE7, 0xFF, 0xC7, 0xFB, 0xE7, 0xFF, + 0x00, 0x7C, 0x40, 0x78, 0x83, 0x39, 0xEE, + 0x19, 0xE7, 0x81, 0x7C, 0x03, 0x78, 0xC7, + 0x38, 0xFF, 0xFF, 0xBF, 0x7E, 0xFF, 0x38, + 0xD7, 0x38, 0xFE, 0x31, 0xFF, 0x13, 0xFF, + 0x83, 0xFF, 0x8F, 0xFF, 0x00, 0x3C, 0x43, + 0x7C, 0x83, 0xFC, 0x03, 0xFC, 0x03, 0xFC, + 0x03, 0xFD, 0x02, 0xFC, 0x03, 0xFF, 0xFF, + 0xBF, 0x7C, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, + 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFD, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x04, + 0xA3, 0xFD, 0xB6, 0x8C, 0x3A, 0x8B, 0x7C, + 0x99, 0x62, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0xF8, 0x4B, 0xFC, 0xF7, 0xCC, + 0xF3, 0xCD, 0xFF, 0xCB, 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x90, 0x3F, 0xD8, 0x46, + 0x09, 0xF6, 0x0D, 0xF1, 0x12, 0xF4, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xCF, 0x78, + 0xBF, 0xD9, 0x7F, 0x9F, 0xFE, 0x9B, 0xEF, + 0x9B, 0xFF, 0x00, 0x00, 0xFC, 0x02, 0xFC, + 0x46, 0x59, 0x13, 0xAC, 0x82, 0x68, 0x07, + 0xFC, 0x14, 0xE8, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0x02, 0xBF, 0x73, 0x5F, 0xB6, 0xFF, + 0x23, 0xFB, 0x07, 0xFF, 0x26, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x03, 0x9F, 0x21, + 0x55, 0x48, 0xB7, 0x8F, 0x60, 0x80, 0x6F, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFC, + 0x27, 0xBA, 0xCD, 0x7F, 0x9D, 0xFF, 0x8F, + 0xF7, 0xD8, 0xFF, 0x00, 0x00, 0xFF, 0x0C, + 0xF3, 0x18, 0xF3, 0xD8, 0x2F, 0x90, 0x67, + 0xB0, 0x4F, 0x10, 0xEF, 0xFF, 0xFF, 0xFF, + 0x08, 0xFF, 0x18, 0xEF, 0xBC, 0xF7, 0xBC, + 0xFF, 0xD0, 0xFF, 0xD8, 0xFF, 0x30, 0xFF, + 0x00, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, + 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFF, + 0x02, 0xFF, 0x04, 0xFF, 0x08, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, + 0xF7, 0x48, 0xF7, 0x48, 0xEF, 0x90, 0xEF, + 0x90, 0xDF, 0x20, 0xBF, 0x40, 0xBF, 0x40, + 0x7F, 0x80, 0xBF, 0xF0, 0xBF, 0xF0, 0x7F, + 0xE0, 0x7F, 0xE0, 0xFF, 0xC0, 0xFF, 0x80, + 0xFF, 0x80, 0xFF, 0x00, 0xFF, 0x10, 0xFF, + 0x10, 0xFF, 0x10, 0xFF, 0x10, 0xFF, 0x10, + 0xFF, 0x10, 0xFF, 0x10, 0xBF, 0x48, 0xEF, + 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, + 0xEF, 0x7F, 0xEF, 0x7F, 0xEF, 0x7F, 0xF7, + 0x3F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFE, 0x00, 0xFE, 0x01, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, + 0xF8, 0x07, 0x00, 0x57, 0x01, 0xFF, 0x05, + 0xF8, 0x87, 0x48, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xF8, 0xFF, 0xFC, 0xEF, 0x99, 0xFE, + 0x01, 0xFF, 0x83, 0xB7, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC0, 0x3F, 0x80, 0x7F, 0x80, + 0x7F, 0x0F, 0x70, 0x8F, 0x70, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xE7, 0xBF, + 0xC0, 0xFF, 0xCF, 0xFF, 0x9F, 0xEF, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, + 0xE3, 0x18, 0xE3, 0x98, 0x77, 0x08, 0x67, + 0x1D, 0xE2, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x3C, 0xFF, 0x18, 0xEF, 0x1C, + 0xFF, 0x0C, 0x7F, 0x88, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x01, 0x3E, 0xC2, 0xFF, + 0xC2, 0x3C, 0xE2, 0x18, 0xC6, 0x39, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x8B, + 0x3C, 0xC3, 0xFF, 0xC7, 0xFF, 0xC6, 0xFF, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x18, 0xEF, 0x10, 0xE6, 0x10, 0xC6, 0x30, + 0xEF, 0x30, 0xCF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xF7, 0x39, 0xFF, 0x39, 0xFF, + 0x10, 0xDF, 0x38, 0xFF, 0x38, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0x09, 0xFC, + 0x01, 0x0C, 0x0B, 0x04, 0xFB, 0x06, 0xF1, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xF7, + 0x0E, 0xFF, 0xFC, 0xF7, 0x0E, 0xFF, 0x0E, + 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xCE, 0x70, 0xCF, 0x70, 0xFE, + 0x01, 0xFE, 0x0B, 0xF0, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x69, 0xB7, 0x79, + 0x8F, 0x79, 0xFF, 0x03, 0xFF, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x70, + 0x87, 0x78, 0x88, 0x72, 0x80, 0x7F, 0xC0, + 0x3F, 0xFC, 0x05, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x9F, 0xF7, 0x8F, 0xFD, 0xC7, 0xBF, + 0xC0, 0xDF, 0xF0, 0xFA, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE7, 0x18, 0x87, 0x38, 0x17, + 0xE8, 0x1F, 0xF0, 0x3F, 0xC0, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xC7, 0xFF, + 0x8F, 0xF7, 0x8F, 0xEF, 0x1F, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, + 0x78, 0x8F, 0x70, 0xDF, 0x20, 0x8F, 0x70, + 0x8F, 0x70, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xF7, 0xCF, 0xFF, 0xCF, 0xFF, 0x8F, + 0xFF, 0x9F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0x02, 0xFD, 0x03, + 0xFD, 0x02, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFC, + 0xFE, 0xFD, 0xFF, 0xFD, 0xFF, 0xFD, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x9F, 0x30, 0xA0, 0x9E, 0x00, 0x7F, 0x00, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xEF, 0xF9, 0x6F, 0xF8, 0xFF, + 0x00, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x90, 0xCF, 0xE1, + 0x1E, 0x40, 0xBF, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7C, + 0xDB, 0xFF, 0xF3, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x82, 0x86, 0x79, 0x80, 0x7F, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0xA6, 0xBF, 0xEC, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, 0x27, + 0xD6, 0xA0, 0x00, 0xFF, 0x00, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFE, 0xDF, 0x7F, 0xCE, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x18, 0x47, 0x10, 0xC7, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0xFF, + 0x18, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x7F, 0x80, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xFF, + 0x02, 0xFF, 0x0C, 0xFF, 0x10, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFD, 0xFF, 0xF3, 0xFF, 0xEF, 0xFF, + 0xFE, 0x11, 0xFD, 0x22, 0xFB, 0x44, 0xF7, + 0x88, 0xEF, 0x10, 0xDF, 0x20, 0xBF, 0x40, + 0x7F, 0x80, 0xEF, 0xFE, 0xDF, 0xFC, 0xBF, + 0xF8, 0x7F, 0xF0, 0xFF, 0xE0, 0xFF, 0xC0, + 0xFF, 0x80, 0xFF, 0x00, 0xBF, 0x48, 0xDF, + 0x24, 0xDF, 0x22, 0xEF, 0x11, 0xF7, 0x08, + 0xF9, 0x06, 0xFE, 0x01, 0xFF, 0x00, 0xF7, + 0x3F, 0xFB, 0x1F, 0xFD, 0x1F, 0xFE, 0x0F, + 0xFF, 0x07, 0xFF, 0x01, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x80, 0xFF, 0x7F, 0xFF, 0x00, 0x7F, + 0x80, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x03, 0xFF, 0xFC, 0xFF, 0x00, + 0xFC, 0x03, 0x03, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x03, 0xFF, 0x1C, 0xFF, 0xE0, + 0xFC, 0x03, 0xE3, 0x1C, 0x1F, 0xE0, 0xFF, + 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xE3, 0xFF, + 0x1F, 0xFF, 0xFF, 0xFC, 0xFF, 0xE0, 0xFF, + 0x00, 0xFF, 0x00, 0xFC, 0xE3, 0xF3, 0x0C, + 0xEF, 0x10, 0x1F, 0xE0, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1F, 0xFC, + 0xFF, 0xF0, 0xFF, 0xE0, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, +}; diff --git a/thirdparty/SameBoy/Core/joypad.c b/thirdparty/SameBoy/Core/joypad.c index c0655f084..0d001ee78 100644 --- a/thirdparty/SameBoy/Core/joypad.c +++ b/thirdparty/SameBoy/Core/joypad.c @@ -1,6 +1,41 @@ #include "gb.h" #include +static inline bool should_bounce(GB_gameboy_t *gb) +{ + // Bouncing is super rare on an AGS, so don't emulate it on GB_MODEL_AGB_B (when addeed) + return !GB_is_sgb(gb) && !gb-> no_bouncing_emulation && !(gb->model & GB_MODEL_GBP_BIT) /*&& gb->model != GB_MODEL_AGB_B*/; +} + +static inline uint16_t bounce_for_key(GB_gameboy_t *gb, GB_key_t key) +{ + if (gb->model > GB_MODEL_CGB_E) { + // AGB are less bouncy + return 0xBFF; + } + if (key == GB_KEY_START || key == GB_KEY_SELECT) { + return 0x1FFF; + } + return 0xFFF; +} + +static inline bool get_input(GB_gameboy_t *gb, uint8_t player, GB_key_t key) +{ + if (player != 0) { + return gb->keys[player][key]; + } + bool ret = gb->keys[player][key]; + + if (likely(gb->key_bounce_timing[key] == 0)) return ret; + if (likely((gb->key_bounce_timing[key] & 0x3FF) > 0x300)) return ret; + uint16_t semi_random = ((((key << 5) + gb->div_counter) * 17) ^ ((gb->apu.apu_cycles + gb->display_cycles) * 13)); + semi_random >>= 3; + if (semi_random < gb->key_bounce_timing[key]) { + ret ^= true; + } + return ret; +} + void GB_update_joyp(GB_gameboy_t *gb) { if (gb->model & GB_MODEL_NO_SFC_BIT) return; @@ -27,39 +62,41 @@ void GB_update_joyp(GB_gameboy_t *gb) case 2: /* Direction keys */ for (uint8_t i = 0; i < 4; i++) { - gb->io_registers[GB_IO_JOYP] |= (!gb->keys[current_player][i]) << i; + gb->io_registers[GB_IO_JOYP] |= (!get_input(gb, current_player, i)) << i; } /* Forbid pressing two opposing keys, this breaks a lot of games; even if it's somewhat possible. */ - if (!(gb->io_registers[GB_IO_JOYP] & 1)) { - gb->io_registers[GB_IO_JOYP] |= 2; - } - if (!(gb->io_registers[GB_IO_JOYP] & 4)) { - gb->io_registers[GB_IO_JOYP] |= 8; + if (likely(!gb->illegal_inputs_allowed)) { + if (!(gb->io_registers[GB_IO_JOYP] & 1)) { + gb->io_registers[GB_IO_JOYP] |= 2; + } + if (!(gb->io_registers[GB_IO_JOYP] & 4)) { + gb->io_registers[GB_IO_JOYP] |= 8; + } } break; case 1: /* Other keys */ for (uint8_t i = 0; i < 4; i++) { - gb->io_registers[GB_IO_JOYP] |= (!gb->keys[current_player][i + 4]) << i; + gb->io_registers[GB_IO_JOYP] |= (!get_input(gb, current_player, i + 4)) << i; } break; case 0: for (uint8_t i = 0; i < 4; i++) { - gb->io_registers[GB_IO_JOYP] |= (!(gb->keys[current_player][i] || gb->keys[current_player][i + 4])) << i; + gb->io_registers[GB_IO_JOYP] |= (!(get_input(gb, current_player, i) || get_input(gb, current_player, i + 4))) << i; } break; - default: - __builtin_unreachable(); - break; + nodefault; } - /* Todo: This assumes the keys *always* bounce, which is incorrect when emulating an SGB */ - if (previous_state != (gb->io_registers[GB_IO_JOYP] & 0xF)) { - /* The joypad interrupt DOES occur on CGB (Tested on CGB-E), unlike what some documents say. */ - gb->io_registers[GB_IO_IF] |= 0x10; + // TODO: Implement the lame anti-debouncing mechanism as seen on the DMG schematics + if (previous_state & ~(gb->io_registers[GB_IO_JOYP] & 0xF)) { + if (!(gb->io_registers[GB_IO_IF] & 0x10)) { + gb->joyp_accessed = true; + gb->io_registers[GB_IO_IF] |= 0x10; + } } gb->io_registers[GB_IO_JOYP] |= 0xC0; @@ -72,7 +109,10 @@ void GB_icd_set_joyp(GB_gameboy_t *gb, uint8_t value) gb->io_registers[GB_IO_JOYP] |= value & 0xF; if (previous_state & ~(gb->io_registers[GB_IO_JOYP] & 0xF)) { - gb->io_registers[GB_IO_IF] |= 0x10; + if (!(gb->io_registers[GB_IO_IF] & 0x10)) { + gb->joyp_accessed = true; + gb->io_registers[GB_IO_IF] |= 0x10; + } } gb->io_registers[GB_IO_JOYP] |= 0xC0; } @@ -80,6 +120,10 @@ void GB_icd_set_joyp(GB_gameboy_t *gb, uint8_t value) void GB_set_key_state(GB_gameboy_t *gb, GB_key_t index, bool pressed) { assert(index >= 0 && index < GB_KEY_MAX); + if (should_bounce(gb) && pressed != gb->keys[0][index]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[index] = bounce_for_key(gb, index); + } gb->keys[0][index] = pressed; GB_update_joyp(gb); } @@ -88,6 +132,93 @@ void GB_set_key_state_for_player(GB_gameboy_t *gb, GB_key_t index, unsigned play { assert(index >= 0 && index < GB_KEY_MAX); assert(player < 4); + if (should_bounce(gb) && pressed != gb->keys[player][index]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[index] = bounce_for_key(gb, index); + } gb->keys[player][index] = pressed; GB_update_joyp(gb); } + +void GB_set_key_mask(GB_gameboy_t *gb, GB_key_mask_t mask) +{ + for (unsigned i = 0; i < GB_KEY_MAX; i++) { + bool pressed = mask & (1 << i); + if (should_bounce(gb) && pressed != gb->keys[0][i]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[i] = bounce_for_key(gb, i); + } + gb->keys[0][i] = pressed; + } + + GB_update_joyp(gb); +} + +void GB_set_key_mask_for_player(GB_gameboy_t *gb, GB_key_mask_t mask, unsigned player) +{ + for (unsigned i = 0; i < GB_KEY_MAX; i++) { + bool pressed = mask & (1 << i); + if (should_bounce(gb) && pressed != gb->keys[player][i]) { + gb->joypad_is_stable = false; + gb->key_bounce_timing[i] = bounce_for_key(gb, i); + } + gb->keys[player][i] = pressed; + } + + GB_update_joyp(gb); +} + +void GB_joypad_run(GB_gameboy_t *gb, unsigned cycles) +{ + if (gb->joypad_is_stable) return; + bool should_update_joyp = false; + gb->joypad_is_stable = true; + if (gb->joyp_switching_delay) { + gb->joypad_is_stable = false; + if (gb->joyp_switching_delay > cycles) { + gb->joyp_switching_delay -= cycles; + } + else { + gb->joyp_switching_delay = 0; + gb->io_registers[GB_IO_JOYP] = (gb->joyp_switch_value & 0xF0) | (gb->io_registers[GB_IO_JOYP] & 0x0F); + should_update_joyp = true; + } + } + + for (unsigned i = 0; i < GB_KEY_MAX; i++) { + if (gb->key_bounce_timing[i]) { + gb->joypad_is_stable = false; + should_update_joyp = true; + if (gb->key_bounce_timing[i] > cycles) { + gb->key_bounce_timing[i] -= cycles; + } + else { + gb->key_bounce_timing[i] = 0; + } + } + } + + if (should_update_joyp) { + GB_update_joyp(gb); + } +} + +bool GB_get_joyp_accessed(GB_gameboy_t *gb) +{ + return gb->joyp_accessed; +} + +void GB_clear_joyp_accessed(GB_gameboy_t *gb) +{ + gb->joyp_accessed = false; +} + +void GB_set_allow_illegal_inputs(GB_gameboy_t *gb, bool allow) +{ + gb->illegal_inputs_allowed = allow; +} + +void GB_set_emulate_joypad_bouncing(GB_gameboy_t *gb, bool emulate) +{ + gb->no_bouncing_emulation = !emulate; +} diff --git a/thirdparty/SameBoy/Core/joypad.h b/thirdparty/SameBoy/Core/joypad.h index 21fad5343..d39eff38d 100644 --- a/thirdparty/SameBoy/Core/joypad.h +++ b/thirdparty/SameBoy/Core/joypad.h @@ -1,6 +1,6 @@ #ifndef joypad_h #define joypad_h -#include "gb_struct_def.h" +#include "defs.h" #include typedef enum { @@ -15,11 +15,32 @@ typedef enum { GB_KEY_MAX } GB_key_t; +typedef enum { + GB_KEY_RIGHT_MASK = 1 << GB_KEY_RIGHT, + GB_KEY_LEFT_MASK = 1 << GB_KEY_LEFT, + GB_KEY_UP_MASK = 1 << GB_KEY_UP, + GB_KEY_DOWN_MASK = 1 << GB_KEY_DOWN, + GB_KEY_A_MASK = 1 << GB_KEY_A, + GB_KEY_B_MASK = 1 << GB_KEY_B, + GB_KEY_SELECT_MASK = 1 << GB_KEY_SELECT, + GB_KEY_START_MASK = 1 << GB_KEY_START, +} GB_key_mask_t; + +// For example, for player 2's (0-based; logical player 3) A button, use GB_MASK_FOR_PLAYER(GB_KEY_A_MASK, 2) +#define GB_MASK_FOR_PLAYER(mask, player) ((x) << (player * 8)) + void GB_set_key_state(GB_gameboy_t *gb, GB_key_t index, bool pressed); void GB_set_key_state_for_player(GB_gameboy_t *gb, GB_key_t index, unsigned player, bool pressed); +void GB_set_key_mask(GB_gameboy_t *gb, GB_key_mask_t mask); +void GB_set_key_mask_for_player(GB_gameboy_t *gb, GB_key_mask_t mask, unsigned player); void GB_icd_set_joyp(GB_gameboy_t *gb, uint8_t value); +bool GB_get_joyp_accessed(GB_gameboy_t *gb); +void GB_clear_joyp_accessed(GB_gameboy_t *gb); +void GB_set_allow_illegal_inputs(GB_gameboy_t *gb, bool allow); +void GB_set_emulate_joypad_bouncing(GB_gameboy_t *gb, bool emulate); #ifdef GB_INTERNAL -void GB_update_joyp(GB_gameboy_t *gb); +internal void GB_update_joyp(GB_gameboy_t *gb); +internal void GB_joypad_run(GB_gameboy_t *gb, unsigned cycles); #endif #endif /* joypad_h */ diff --git a/thirdparty/SameBoy/Core/mbc.c b/thirdparty/SameBoy/Core/mbc.c index a9e758ebe..5f9373f9c 100644 --- a/thirdparty/SameBoy/Core/mbc.c +++ b/thirdparty/SameBoy/Core/mbc.c @@ -5,40 +5,41 @@ const GB_cartridge_t GB_cart_defs[256] = { // From http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header#0147_-_Cartridge_Type - /* MBC SUBTYPE RAM BAT. RTC RUMB. */ - { GB_NO_MBC, GB_STANDARD_MBC, false, false, false, false}, // 00h ROM ONLY - { GB_MBC1 , GB_STANDARD_MBC, false, false, false, false}, // 01h MBC1 - { GB_MBC1 , GB_STANDARD_MBC, true , false, false, false}, // 02h MBC1+RAM - { GB_MBC1 , GB_STANDARD_MBC, true , true , false, false}, // 03h MBC1+RAM+BATTERY + /* MBC RAM BAT. RTC RUMB. */ + { GB_NO_MBC, false, false, false, false}, // 00h ROM ONLY + { GB_MBC1 , false, false, false, false}, // 01h MBC1 + { GB_MBC1 , true , false, false, false}, // 02h MBC1+RAM + { GB_MBC1 , true , true , false, false}, // 03h MBC1+RAM+BATTERY [5] = - { GB_MBC2 , GB_STANDARD_MBC, true , false, false, false}, // 05h MBC2 - { GB_MBC2 , GB_STANDARD_MBC, true , true , false, false}, // 06h MBC2+BATTERY + { GB_MBC2 , true , false, false, false}, // 05h MBC2 + { GB_MBC2 , true , true , false, false}, // 06h MBC2+BATTERY [8] = - { GB_NO_MBC, GB_STANDARD_MBC, true , false, false, false}, // 08h ROM+RAM - { GB_NO_MBC, GB_STANDARD_MBC, true , true , false, false}, // 09h ROM+RAM+BATTERY + { GB_NO_MBC, true , false, false, false}, // 08h ROM+RAM + { GB_NO_MBC, true , true , false, false}, // 09h ROM+RAM+BATTERY [0xB] = - /* Todo: Not supported yet */ - { GB_NO_MBC, GB_STANDARD_MBC, false, false, false, false}, // 0Bh MMM01 - { GB_NO_MBC, GB_STANDARD_MBC, false, false, false, false}, // 0Ch MMM01+RAM - { GB_NO_MBC, GB_STANDARD_MBC, false, false, false, false}, // 0Dh MMM01+RAM+BATTERY + { GB_MMM01 , false, false, false, false}, // 0Bh MMM01 + { GB_MMM01 , true , false, false, false}, // 0Ch MMM01+RAM + { GB_MMM01 , true , true , false, false}, // 0Dh MMM01+RAM+BATTERY [0xF] = - { GB_MBC3 , GB_STANDARD_MBC, false, true, true , false}, // 0Fh MBC3+TIMER+BATTERY - { GB_MBC3 , GB_STANDARD_MBC, true , true, true , false}, // 10h MBC3+TIMER+RAM+BATTERY - { GB_MBC3 , GB_STANDARD_MBC, false, false, false, false}, // 11h MBC3 - { GB_MBC3 , GB_STANDARD_MBC, true , false, false, false}, // 12h MBC3+RAM - { GB_MBC3 , GB_STANDARD_MBC, true , true , false, false}, // 13h MBC3+RAM+BATTERY + { GB_MBC3 , false, true, true , false}, // 0Fh MBC3+TIMER+BATTERY + { GB_MBC3 , true , true, true , false}, // 10h MBC3+TIMER+RAM+BATTERY + { GB_MBC3 , false, false, false, false}, // 11h MBC3 + { GB_MBC3 , true , false, false, false}, // 12h MBC3+RAM + { GB_MBC3 , true , true , false, false}, // 13h MBC3+RAM+BATTERY [0x19] = - { GB_MBC5 , GB_STANDARD_MBC, false, false, false, false}, // 19h MBC5 - { GB_MBC5 , GB_STANDARD_MBC, true , false, false, false}, // 1Ah MBC5+RAM - { GB_MBC5 , GB_STANDARD_MBC, true , true , false, false}, // 1Bh MBC5+RAM+BATTERY - { GB_MBC5 , GB_STANDARD_MBC, false, false, false, true }, // 1Ch MBC5+RUMBLE - { GB_MBC5 , GB_STANDARD_MBC, true , false, false, true }, // 1Dh MBC5+RUMBLE+RAM - { GB_MBC5 , GB_STANDARD_MBC, true , true , false, true }, // 1Eh MBC5+RUMBLE+RAM+BATTERY + { GB_MBC5 , false, false, false, false}, // 19h MBC5 + { GB_MBC5 , true , false, false, false}, // 1Ah MBC5+RAM + { GB_MBC5 , true , true , false, false}, // 1Bh MBC5+RAM+BATTERY + { GB_MBC5 , false, false, false, true }, // 1Ch MBC5+RUMBLE + { GB_MBC5 , true , false, false, true }, // 1Dh MBC5+RUMBLE+RAM + { GB_MBC5 , true , true , false, true }, // 1Eh MBC5+RUMBLE+RAM+BATTERY + [0x22] = + { GB_MBC7 , true, true, false, false}, // 22h MBC7+ACCEL+EEPROM [0xFC] = - { GB_MBC5 , GB_CAMERA , true , true , false, false}, // FCh POCKET CAMERA - { GB_NO_MBC, GB_STANDARD_MBC, false, false, false, false}, // FDh BANDAI TAMA5 (Todo: Not supported) - { GB_HUC3 , GB_STANDARD_MBC, true , true , true, false}, // FEh HuC3 - { GB_HUC1 , GB_STANDARD_MBC, true , true , false, false}, // FFh HuC1+RAM+BATTERY + { GB_CAMERA, true , true , false, false}, // FCh POCKET CAMERA + { GB_NO_MBC, false, false, false, false}, // FDh BANDAI TAMA5 (Todo: Not supported) + { GB_HUC3 , true , true , true, false}, // FEh HuC3 + { GB_HUC1 , true , true , false, false}, // FFh HuC1+RAM+BATTERY }; void GB_update_mbc_mappings(GB_gameboy_t *gb) @@ -75,6 +76,7 @@ void GB_update_mbc_mappings(GB_gameboy_t *gb) gb->mbc_rom_bank++; } break; + nodefault; } break; case GB_MBC2: @@ -94,60 +96,116 @@ void GB_update_mbc_mappings(GB_gameboy_t *gb) } break; case GB_MBC5: + case GB_CAMERA: gb->mbc_rom_bank = gb->mbc5.rom_bank_low | (gb->mbc5.rom_bank_high << 8); gb->mbc_ram_bank = gb->mbc5.ram_bank; break; - case GB_HUC1: - if (gb->huc1.mode == 0) { - gb->mbc_rom_bank = gb->huc1.bank_low | (gb->mbc1.bank_high << 6); - gb->mbc_ram_bank = 0; + case GB_MBC7: + gb->mbc_rom_bank = gb->mbc7.rom_bank; + break; + case GB_MMM01: + if (gb->mmm01.locked) { + if (gb->mmm01.multiplex_mode) { + gb->mbc_rom0_bank = (gb->mmm01.rom_bank_low & (gb->mmm01.rom_bank_mask << 1)) | + ((gb->mmm01.mbc1_mode? 0 : gb->mmm01.ram_bank_low) << 5) | + (gb->mmm01.rom_bank_high << 7); + gb->mbc_rom_bank = gb->mmm01.rom_bank_low | + (gb->mmm01.ram_bank_low << 5) | + (gb->mmm01.rom_bank_high << 7); + gb->mbc_ram_bank = gb->mmm01.rom_bank_mid | (gb->mmm01.ram_bank_high << 2); + } + else { + gb->mbc_rom0_bank = (gb->mmm01.rom_bank_low & (gb->mmm01.rom_bank_mask << 1)) | + (gb->mmm01.rom_bank_mid << 5) | + (gb->mmm01.rom_bank_high << 7); + gb->mbc_rom_bank = gb->mmm01.rom_bank_low | + (gb->mmm01.rom_bank_mid << 5) | + (gb->mmm01.rom_bank_high << 7); + if (gb->mmm01.mbc1_mode) { + gb->mbc_ram_bank = gb->mmm01.ram_bank_low | (gb->mmm01.ram_bank_high << 2); + } + else { + gb->mbc_ram_bank = gb->mmm01.ram_bank_low | (gb->mmm01.ram_bank_high << 2); + } + } + if (gb->mbc_rom_bank == gb->mbc_rom0_bank) { + gb->mbc_rom_bank++; + } } else { - gb->mbc_rom_bank = gb->huc1.bank_low; - gb->mbc_ram_bank = gb->huc1.bank_high; + gb->mbc_rom_bank = -1; + gb->mbc_rom0_bank = -2; } break; + case GB_HUC1: + gb->mbc_rom_bank = gb->huc1.bank_low; + gb->mbc_ram_bank = gb->huc1.bank_high; + break; case GB_HUC3: gb->mbc_rom_bank = gb->huc3.rom_bank; gb->mbc_ram_bank = gb->huc3.ram_bank; break; case GB_TPP1: - gb->mbc_rom_bank = gb->tpp1_rom_bank; - gb->mbc_ram_bank = gb->tpp1_ram_bank; - gb->mbc_ram_enable = (gb->tpp1_mode == 2) || (gb->tpp1_mode == 3); + gb->mbc_rom_bank = gb->tpp1.rom_bank; + gb->mbc_ram_bank = gb->tpp1.ram_bank; + gb->mbc_ram_enable = (gb->tpp1.mode == 2) || (gb->tpp1.mode == 3); break; + nodefault; } } void GB_configure_cart(GB_gameboy_t *gb) { + memset(GB_GET_SECTION(gb, mbc), 0, GB_SECTION_SIZE(mbc)); gb->cartridge_type = &GB_cart_defs[gb->rom[0x147]]; - if (gb->rom[0x147] == 0xbc && - gb->rom[0x149] == 0xc1 && - gb->rom[0x14a] == 0x65) { - static const GB_cartridge_t tpp1 = {GB_TPP1, GB_STANDARD_MBC, true, true, true, true}; - gb->cartridge_type = &tpp1; - gb->tpp1_rom_bank = 1; + if (gb->cartridge_type->mbc_type == GB_MMM01) { + uint8_t *temp = malloc(0x8000); + memcpy(temp, gb->rom, 0x8000); + memmove(gb->rom, gb->rom + 0x8000, gb->rom_size - 0x8000); + memcpy(gb->rom + gb->rom_size - 0x8000, temp, 0x8000); + free(temp); } - - if (gb->rom[0x147] == 0 && gb->rom_size > 0x8000) { - GB_log(gb, "ROM header reports no MBC, but file size is over 32Kb. Assuming cartridge uses MBC3.\n"); - gb->cartridge_type = &GB_cart_defs[0x11]; + else { + const GB_cartridge_t *maybe_mmm01_type = &GB_cart_defs[gb->rom[gb->rom_size - 0x8000 + 0x147]]; + if (memcmp(gb->rom + 0x104, gb->rom + gb->rom_size - 0x8000 + 0x104, 0x30) == 0) { + if (maybe_mmm01_type->mbc_type == GB_MMM01) { + gb->cartridge_type = maybe_mmm01_type; + } + else if(gb->rom[gb->rom_size - 0x8000 + 0x147] == 0x11) { + GB_log(gb, "ROM header reports MBC3, but it appears to be an MMM01 ROM. Assuming cartridge uses MMM01."); + gb->cartridge_type = &GB_cart_defs[0xB]; + } + } } - else if (gb->rom[0x147] != 0 && memcmp(gb->cartridge_type, &GB_cart_defs[0], sizeof(GB_cart_defs[0])) == 0) { - GB_log(gb, "Cartridge type %02x is not yet supported.\n", gb->rom[0x147]); + + if (gb->rom[0x147] == 0xBC && + gb->rom[0x149] == 0xC1 && + gb->rom[0x14A] == 0x65) { + static const GB_cartridge_t tpp1 = {GB_TPP1, true, true, true, true}; + gb->cartridge_type = &tpp1; + gb->tpp1.rom_bank = 1; } - if (gb->mbc_ram) { - free(gb->mbc_ram); - gb->mbc_ram = NULL; - gb->mbc_ram_size = 0; + if (gb->cartridge_type->mbc_type != GB_MMM01) { + if (gb->rom[0x147] == 0 && gb->rom_size > 0x8000) { + GB_log(gb, "ROM header reports no MBC, but file size is over 32Kb. Assuming cartridge uses MBC3.\n"); + gb->cartridge_type = &GB_cart_defs[0x11]; + } + else if (gb->rom[0x147] != 0 && memcmp(gb->cartridge_type, &GB_cart_defs[0], sizeof(GB_cart_defs[0])) == 0) { + GB_log(gb, "Cartridge type %02x is not yet supported.\n", gb->rom[0x147]); + } } - + + size_t old_mbc_ram_size = gb->mbc_ram_size; + gb->mbc_ram_size = 0; + if (gb->cartridge_type->has_ram) { if (gb->cartridge_type->mbc_type == GB_MBC2) { gb->mbc_ram_size = 0x200; } + else if (gb->cartridge_type->mbc_type == GB_MBC7) { + gb->mbc_ram_size = 0x100; + } else if (gb->cartridge_type->mbc_type == GB_TPP1) { if (gb->rom[0x152] >= 1 && gb->rom[0x152] <= 9) { gb->mbc_ram_size = 0x2000 << (gb->rom[0x152] - 1); @@ -155,15 +213,24 @@ void GB_configure_cart(GB_gameboy_t *gb) } else { static const unsigned ram_sizes[256] = {0, 0x800, 0x2000, 0x8000, 0x20000, 0x10000}; - gb->mbc_ram_size = ram_sizes[gb->rom[0x149]]; + if (gb->cartridge_type->mbc_type == GB_MMM01) { + gb->mbc_ram_size = ram_sizes[gb->rom[gb->rom_size - 0x8000 + 0x149]]; + } + else { + gb->mbc_ram_size = ram_sizes[gb->rom[0x149]]; + } + } + + if (gb->mbc_ram && old_mbc_ram_size != gb->mbc_ram_size) { + free(gb->mbc_ram); + gb->mbc_ram = NULL; } - if (gb->mbc_ram_size) { + if (gb->mbc_ram_size && !gb->mbc_ram) { gb->mbc_ram = malloc(gb->mbc_ram_size); + /* Todo: Some games assume unintialized MBC RAM is 0xFF. It this true for all cartridge types? */ + memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); } - - /* Todo: Some games assume unintialized MBC RAM is 0xFF. It this true for all cartridge types? */ - memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); } /* MBC1 has at least 3 types of wiring (We currently support two (Standard and 4bit-MBC1M) of these). @@ -183,8 +250,29 @@ void GB_configure_cart(GB_gameboy_t *gb) } } - /* Set MBC5's bank to 1 correctly */ - if (gb->cartridge_type->mbc_type == GB_MBC5) { + GB_reset_mbc(gb); +} + +void GB_reset_mbc(GB_gameboy_t *gb) +{ + gb->mbc_rom0_bank = 0; + if (gb->cartridge_type->mbc_type == GB_MMM01) { + gb->mbc_rom_bank = -1; + gb->mbc_rom0_bank = -2; + gb->mmm01.ram_bank_mask = -1; + } + else if (gb->cartridge_type->mbc_type == GB_MBC5 || + gb->cartridge_type->mbc_type == GB_CAMERA) { gb->mbc5.rom_bank_low = 1; + gb->mbc_rom_bank = 1; + } + else if (gb->cartridge_type->mbc_type == GB_MBC7) { + gb->mbc7.x_latch = gb->mbc7.y_latch = 0x8000; + gb->mbc7.latch_ready = true; + gb->mbc7.read_bits = -1; + gb->mbc7.eeprom_do = true; + } + else { + gb->mbc_rom_bank = 1; } } diff --git a/thirdparty/SameBoy/Core/mbc.h b/thirdparty/SameBoy/Core/mbc.h index 3bbe78277..8bdb07991 100644 --- a/thirdparty/SameBoy/Core/mbc.h +++ b/thirdparty/SameBoy/Core/mbc.h @@ -1,6 +1,6 @@ #ifndef MBC_h #define MBC_h -#include "gb_struct_def.h" +#include "defs.h" #include typedef struct { @@ -10,14 +10,13 @@ typedef struct { GB_MBC2, GB_MBC3, GB_MBC5, + GB_MBC7, + GB_MMM01, GB_HUC1, GB_HUC3, GB_TPP1, - } mbc_type; - enum { - GB_STANDARD_MBC, GB_CAMERA, - } mbc_subtype; + } mbc_type; bool has_ram; bool has_battery; bool has_rtc; @@ -25,9 +24,10 @@ typedef struct { } GB_cartridge_t; #ifdef GB_INTERNAL -extern const GB_cartridge_t GB_cart_defs[256]; -void GB_update_mbc_mappings(GB_gameboy_t *gb); -void GB_configure_cart(GB_gameboy_t *gb); +internal extern const GB_cartridge_t GB_cart_defs[256]; +internal void GB_update_mbc_mappings(GB_gameboy_t *gb); +internal void GB_configure_cart(GB_gameboy_t *gb); +internal void GB_reset_mbc(GB_gameboy_t *gb); #endif #endif /* MBC_h */ diff --git a/thirdparty/SameBoy/Core/memory.c b/thirdparty/SameBoy/Core/memory.c index 426e5d645..84456aa67 100644 --- a/thirdparty/SameBoy/Core/memory.c +++ b/thirdparty/SameBoy/Core/memory.c @@ -2,17 +2,16 @@ #include #include "gb.h" -typedef uint8_t GB_read_function_t(GB_gameboy_t *gb, uint16_t addr); -typedef void GB_write_function_t(GB_gameboy_t *gb, uint16_t addr, uint8_t value); +typedef uint8_t read_function_t(GB_gameboy_t *gb, uint16_t addr); +typedef void write_function_t(GB_gameboy_t *gb, uint16_t addr, uint8_t value); typedef enum { GB_BUS_MAIN, /* In DMG: Cart and RAM. In CGB: Cart only */ GB_BUS_RAM, /* In CGB only. */ GB_BUS_VRAM, - GB_BUS_INTERNAL, /* Anything in highram. Might not be the most correct name. */ -} GB_bus_t; +} bus_t; -static GB_bus_t bus_for_addr(GB_gameboy_t *gb, uint16_t addr) +static bus_t bus_for_addr(GB_gameboy_t *gb, uint16_t addr) { if (addr < 0x8000) { return GB_BUS_MAIN; @@ -23,10 +22,7 @@ static GB_bus_t bus_for_addr(GB_gameboy_t *gb, uint16_t addr) if (addr < 0xC000) { return GB_BUS_MAIN; } - if (addr < 0xFE00) { - return GB_is_cgb(gb)? GB_BUS_RAM : GB_BUS_MAIN; - } - return GB_BUS_INTERNAL; + return GB_is_cgb(gb)? GB_BUS_RAM : GB_BUS_MAIN; } static uint16_t bitwise_glitch(uint16_t a, uint16_t b, uint16_t c) @@ -98,7 +94,8 @@ void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address) if (GB_is_cgb(gb)) return; if (address >= 0xFE00 && address < 0xFF00) { - if (gb->accessed_oam_row != 0xff && gb->accessed_oam_row >= 8) { + GB_display_sync(gb); + if (gb->accessed_oam_row != 0xFF && gb->accessed_oam_row >= 8) { uint16_t *base = (uint16_t *)(gb->oam + gb->accessed_oam_row); base[0] = bitwise_glitch(base[0], base[-4], @@ -200,13 +197,17 @@ void GB_trigger_oam_bug_read(GB_gameboy_t *gb, uint16_t address) if (GB_is_cgb(gb)) return; if (address >= 0xFE00 && address < 0xFF00) { - if (gb->accessed_oam_row != 0xff && gb->accessed_oam_row >= 8) { + if (gb->accessed_oam_row != 0xFF && gb->accessed_oam_row >= 8) { if ((gb->accessed_oam_row & 0x18) == 0x10) { oam_bug_secondary_read_corruption(gb); } else if ((gb->accessed_oam_row & 0x18) == 0x00) { /* Everything in this specific case is *extremely* revision and instance specific. */ - if (gb->accessed_oam_row == 0x40) { + if (gb->model == GB_MODEL_MGB) { + /* TODO: This is rather simplified, research further */ + oam_bug_tertiary_read_corruption(gb, bitwise_glitch_tertiary_read_3); + } + else if (gb->accessed_oam_row == 0x40) { oam_bug_quaternary_read_corruption(gb, ((gb->model & ~GB_MODEL_NO_SFC_BIT) == GB_MODEL_SGB2)? bitwise_glitch_quaternary_read_sgb2: @@ -240,6 +241,9 @@ void GB_trigger_oam_bug_read(GB_gameboy_t *gb, uint16_t address) if (gb->accessed_oam_row == 0x80) { memcpy(gb->oam, gb->oam + gb->accessed_oam_row, 8); } + else if (gb->model == GB_MODEL_MGB && gb->accessed_oam_row == 0x40) { + memcpy(gb->oam, gb->oam + gb->accessed_oam_row, 8); + } } } } @@ -247,7 +251,19 @@ void GB_trigger_oam_bug_read(GB_gameboy_t *gb, uint16_t address) static bool is_addr_in_dma_use(GB_gameboy_t *gb, uint16_t addr) { - if (!gb->dma_steps_left || (gb->dma_cycles < 0 && !gb->is_dma_restarting) || addr >= 0xFE00) return false; + if (!GB_is_dma_active(gb) || addr >= 0xFE00 || gb->hdma_in_progress) return false; + if (gb->dma_current_dest == 0xFF || gb->dma_current_dest == 0x0) return false; // Warm up + if (addr >= 0xFE00) return false; + if (gb->dma_current_src == addr) return false; // Shortcut for DMA access flow + if (gb->dma_current_src >= 0xE000 && (gb->dma_current_src & ~0x2000) == addr) return false; + if (GB_is_cgb(gb)) { + if (addr >= 0xC000) { + return bus_for_addr(gb, gb->dma_current_src) != GB_BUS_VRAM; + } + if (gb->dma_current_src >= 0xE000) { + return bus_for_addr(gb, addr) != GB_BUS_VRAM; + } + } return bus_for_addr(gb, addr) == bus_for_addr(gb, gb->dma_current_src); } @@ -276,10 +292,21 @@ static uint8_t read_mbc_rom(GB_gameboy_t *gb, uint16_t addr) static uint8_t read_vram(GB_gameboy_t *gb, uint16_t addr) { - if (gb->vram_read_blocked) { + if (likely(!GB_is_dma_active(gb))) { + /* Prevent syncing from a DMA read. Batching doesn't happen during DMA anyway. */ + GB_display_sync(gb); + } + else { + if ((gb->dma_current_dest & 0xE000) == 0x8000) { + // TODO: verify conflict behavior + return gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)]; + } + } + + if (unlikely(gb->vram_read_blocked && !gb->in_dma_read)) { return 0xFF; } - if (gb->display_state == 22 && GB_is_cgb(gb) && !gb->cgb_double_speed) { + if (unlikely(gb->display_state == 22 && GB_is_cgb(gb) && !gb->cgb_double_speed)) { if (addr & 0x1000) { addr = gb->last_tile_index_address; } @@ -294,21 +321,41 @@ static uint8_t read_vram(GB_gameboy_t *gb, uint16_t addr) return gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)]; } +static uint8_t read_mbc7_ram(GB_gameboy_t *gb, uint16_t addr) +{ + if (!gb->mbc_ram_enable || !gb->mbc7.secondary_ram_enable) return 0xFF; + if (addr >= 0xB000) return 0xFF; + switch ((addr >> 4) & 0xF) { + case 2: return gb->mbc7.x_latch; + case 3: return gb->mbc7.x_latch >> 8; + case 4: return gb->mbc7.y_latch; + case 5: return gb->mbc7.y_latch >> 8; + case 6: return 0; + case 8: return gb->mbc7.eeprom_do | (gb->mbc7.eeprom_di << 1) | + (gb->mbc7.eeprom_clk << 6) | (gb->mbc7.eeprom_cs << 7); + } + return 0xFF; +} + static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) { + if (gb->cartridge_type->mbc_type == GB_MBC7) { + return read_mbc7_ram(gb, addr); + } + if (gb->cartridge_type->mbc_type == GB_HUC3) { - switch (gb->huc3_mode) { + switch (gb->huc3.mode) { case 0xC: // RTC read - if (gb->huc3_access_flags == 0x2) { + if (gb->huc3.access_flags == 0x2) { return 1; } - return gb->huc3_read; + return gb->huc3.read; case 0xD: // RTC status return 1; case 0xE: // IR mode return gb->effective_ir_input; // TODO: What are the other bits? default: - GB_log(gb, "Unsupported HuC-3 mode %x read: %04x\n", gb->huc3_mode, addr); + GB_log(gb, "Unsupported HuC-3 mode %x read: %04x\n", gb->huc3.mode, addr); return 1; // TODO: What happens in this case? case 0: // TODO: R/O RAM? (or is it disabled?) case 0xA: // RAM @@ -317,13 +364,14 @@ static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) } if (gb->cartridge_type->mbc_type == GB_TPP1) { - switch (gb->tpp1_mode) { + switch (gb->tpp1.mode) { case 0: switch (addr & 3) { - case 0: return gb->tpp1_rom_bank; - case 1: return gb->tpp1_rom_bank >> 8; - case 2: return gb->tpp1_ram_bank; + case 0: return gb->tpp1.rom_bank; + case 1: return gb->tpp1.rom_bank >> 8; + case 2: return gb->tpp1.ram_bank; case 3: return gb->rumble_strength | gb->tpp1_mr4; + nodefault; } case 2: case 3: @@ -335,18 +383,18 @@ static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) } } else if ((!gb->mbc_ram_enable) && - gb->cartridge_type->mbc_subtype != GB_CAMERA && + gb->cartridge_type->mbc_type != GB_CAMERA && gb->cartridge_type->mbc_type != GB_HUC1 && gb->cartridge_type->mbc_type != GB_HUC3) { return 0xFF; } if (gb->cartridge_type->mbc_type == GB_HUC1 && gb->huc1.ir_mode) { - return 0xc0 | gb->effective_ir_input; + return 0xC0 | gb->effective_ir_input; } if (gb->cartridge_type->has_rtc && gb->cartridge_type->mbc_type != GB_HUC3 && - gb->mbc3_rtc_mapped) { + gb->mbc3.rtc_mapped) { /* RTC read */ if (gb->mbc_ram_bank <= 4) { gb->rtc_latched.seconds &= 0x3F; @@ -366,8 +414,15 @@ static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) return 0xFF; } - if (gb->cartridge_type->mbc_subtype == GB_CAMERA && gb->mbc_ram_bank == 0 && addr >= 0xa100 && addr < 0xaf00) { - return GB_camera_read_image(gb, addr - 0xa100); + if (gb->cartridge_type->mbc_type == GB_CAMERA) { + /* Forbid reading RAM while the camera is busy. */ + if (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1) { + return 0; + } + + if (gb->mbc_ram_bank == 0 && addr >= 0xA100 && addr < 0xAF00) { + return GB_camera_read_image(gb, addr - 0xA100); + } } uint8_t effective_bank = gb->mbc_ram_bank; @@ -394,47 +449,114 @@ static uint8_t read_banked_ram(GB_gameboy_t *gb, uint16_t addr) return gb->ram[(addr & 0x0FFF) + gb->cgb_ram_bank * 0x1000]; } -static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) +static inline void sync_ppu_if_needed(GB_gameboy_t *gb, uint8_t register_accessed) { + switch (register_accessed) { + case GB_IO_IF: + case GB_IO_LCDC: + case GB_IO_STAT: + case GB_IO_SCY: + case GB_IO_SCX: + case GB_IO_LY: + case GB_IO_LYC: + case GB_IO_DMA: + case GB_IO_BGP: + case GB_IO_OBP0: + case GB_IO_OBP1: + case GB_IO_WY: + case GB_IO_WX: + case GB_IO_HDMA1: + case GB_IO_HDMA2: + case GB_IO_HDMA3: + case GB_IO_HDMA4: + case GB_IO_HDMA5: + case GB_IO_BGPI: + case GB_IO_BGPD: + case GB_IO_OBPI: + case GB_IO_OBPD: + case GB_IO_OPRI: + GB_display_sync(gb); + break; + } +} - if (gb->hdma_on) { - return gb->last_opcode_read; +internal uint8_t GB_read_oam(GB_gameboy_t *gb, uint8_t addr) +{ + if (addr < 0xA0) { + return gb->oam[addr]; } + switch (gb->model) { + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + return (addr & 0xF0) | (addr >> 4); + + case GB_MODEL_CGB_D: + if (addr >= 0xC0) { + addr |= 0xF0; + } + return gb->extra_oam[addr - 0xA0]; + + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_0: + addr &= ~0x18; + return gb->extra_oam[addr - 0xA0]; + + case GB_MODEL_DMG_B: + case GB_MODEL_MGB: + case GB_MODEL_SGB_NTSC: + case GB_MODEL_SGB_PAL: + case GB_MODEL_SGB_NTSC_NO_SFC: + case GB_MODEL_SGB_PAL_NO_SFC: + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + return 0; + } + unreachable(); +} + +static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) +{ if (addr < 0xFE00) { return read_banked_ram(gb, addr); } if (addr < 0xFF00) { + GB_display_sync(gb); if (gb->oam_write_blocked && !GB_is_cgb(gb)) { - GB_trigger_oam_bug_read(gb, addr); - return 0xff; + if (!gb->disable_oam_corruption) { + GB_trigger_oam_bug_read(gb, addr); + } + return 0xFF; } - if ((gb->dma_steps_left && (gb->dma_cycles > 0 || gb->is_dma_restarting))) { + if (GB_is_dma_active(gb) && (gb->dma_current_dest != 0 || gb->dma_restarting)) { /* Todo: Does reading from OAM during DMA causes the OAM bug? */ - return 0xff; + return 0xFF; } if (gb->oam_read_blocked) { - if (!GB_is_cgb(gb)) { + if (!GB_is_cgb(gb) && !gb->disable_oam_corruption) { if (addr < 0xFEA0) { uint16_t *oam = (uint16_t *)gb->oam; if (gb->accessed_oam_row == 0) { - oam[(addr & 0xf8) >> 1] = + oam[(addr & 0xF8) >> 1] = oam[0] = bitwise_glitch_read(oam[0], - oam[(addr & 0xf8) >> 1], - oam[(addr & 0xff) >> 1]); + oam[(addr & 0xF8) >> 1], + oam[(addr & 0xFF) >> 1]); for (unsigned i = 2; i < 8; i++) { - gb->oam[i] = gb->oam[(addr & 0xf8) + i]; + gb->oam[i] = gb->oam[(addr & 0xF8) + i]; } } - else if (gb->accessed_oam_row == 0xa0) { + else if (gb->accessed_oam_row == 0xA0) { uint8_t target = (addr & 7) | 0x98; - uint16_t a = oam[0x9c >> 1], + uint16_t a = oam[0x9C >> 1], b = oam[target >> 1], - c = oam[(addr & 0xf8) >> 1]; + c = oam[(addr & 0xF8) >> 1]; switch (addr & 7) { case 0: case 1: @@ -449,7 +571,7 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) case 2: case 3: { /* Probably instance specific */ - c = oam[(addr & 0xfe) >> 1]; + c = oam[(addr & 0xFE) >> 1]; // MGB only: oam[target >> 1] = bitwise_glitch_read(a, b, c); oam[target >> 1] = (a & b) | (a & c) | (b & c); @@ -463,65 +585,23 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) oam[target >> 1] = bitwise_glitch_read(a, b, c); break; - default: - __builtin_unreachable(); + nodefault; } for (unsigned i = 0; i < 8; i++) { - gb->oam[(addr & 0xf8) + i] = gb->oam[0x98 + i]; + gb->oam[(addr & 0xF8) + i] = gb->oam[0x98 + i]; } } } } - return 0xff; - } - - if (addr < 0xFEA0) { - return gb->oam[addr & 0xFF]; - } - - if (gb->oam_read_blocked) { return 0xFF; } - switch (gb->model) { - case GB_MODEL_CGB_E: - case GB_MODEL_AGB: - return (addr & 0xF0) | ((addr >> 4) & 0xF); - - /* - case GB_MODEL_CGB_D: - if (addr > 0xfec0) { - addr |= 0xf0; - } - return gb->extra_oam[addr - 0xfea0]; - */ - - case GB_MODEL_CGB_C: - /* - case GB_MODEL_CGB_B: - case GB_MODEL_CGB_A: - case GB_MODEL_CGB_0: - */ - addr &= ~0x18; - return gb->extra_oam[addr - 0xfea0]; - - case GB_MODEL_DMG_B: - case GB_MODEL_SGB_NTSC: - case GB_MODEL_SGB_PAL: - case GB_MODEL_SGB_NTSC_NO_SFC: - case GB_MODEL_SGB_PAL_NO_SFC: - case GB_MODEL_SGB2: - case GB_MODEL_SGB2_NO_SFC: - break; - } - } - - if (addr < 0xFF00) { - return 0; + return GB_read_oam(gb, addr); } if (addr < 0xFF80) { + sync_ppu_if_needed(gb, addr); switch (addr & 0xFF) { case GB_IO_IF: return gb->io_registers[GB_IO_IF] | 0xE0; @@ -535,16 +615,23 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) } return gb->io_registers[GB_IO_OPRI] | 0xFE; - case GB_IO_PCM_12: + case GB_IO_PCM12: if (!GB_is_cgb(gb)) return 0xFF; + GB_apu_run(gb, true); return ((gb->apu.is_active[GB_SQUARE_2] ? (gb->apu.samples[GB_SQUARE_2] << 4) : 0) | (gb->apu.is_active[GB_SQUARE_1] ? (gb->apu.samples[GB_SQUARE_1]) : 0)) & (gb->model <= GB_MODEL_CGB_C? gb->apu.pcm_mask[0] : 0xFF); - case GB_IO_PCM_34: + case GB_IO_PCM34: if (!GB_is_cgb(gb)) return 0xFF; + GB_apu_run(gb, true); return ((gb->apu.is_active[GB_NOISE] ? (gb->apu.samples[GB_NOISE] << 4) : 0) | (gb->apu.is_active[GB_WAVE] ? (gb->apu.samples[GB_WAVE]) : 0)) & (gb->model <= GB_MODEL_CGB_C? gb->apu.pcm_mask[1] : 0xFF); case GB_IO_JOYP: + gb->joyp_accessed = true; GB_timing_sync(gb); + if (unlikely(gb->joyp_switching_delay)) { + return (gb->io_registers[addr & 0xFF] & ~0x30) | (gb->joyp_switch_value & 0x30); + } + return gb->io_registers[addr & 0xFF]; case GB_IO_TMA: case GB_IO_LCDC: case GB_IO_SCY: @@ -601,7 +688,7 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) uint8_t index_reg = (addr & 0xFF) - 1; return ((addr & 0xFF) == GB_IO_BGPD? gb->background_palettes_data : - gb->sprite_palettes_data)[gb->io_registers[index_reg] & 0x3F]; + gb->object_palettes_data)[gb->io_registers[index_reg] & 0x3F]; } case GB_IO_KEY1: @@ -617,15 +704,15 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) if (gb->model != GB_MODEL_CGB_E) { ret |= 0x10; } - if (((gb->io_registers[GB_IO_RP] & 0xC0) == 0xC0 && gb->effective_ir_input) && gb->model != GB_MODEL_AGB) { + if (((gb->io_registers[GB_IO_RP] & 0xC0) == 0xC0 && gb->effective_ir_input) && gb->model <= GB_MODEL_CGB_E) { ret &= ~2; } return ret; } - case GB_IO_UNKNOWN2: - case GB_IO_UNKNOWN3: + case GB_IO_PSWX: + case GB_IO_PSWY: return GB_is_cgb(gb)? gb->io_registers[addr & 0xFF] : 0xFF; - case GB_IO_UNKNOWN4: + case GB_IO_PSW: return gb->cgb_mode? gb->io_registers[addr & 0xFF] : 0xFF; case GB_IO_UNKNOWN5: return GB_is_cgb(gb)? gb->io_registers[addr & 0xFF] | 0x8F : 0xFF; @@ -635,7 +722,7 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) } return 0xFF; } - __builtin_unreachable(); + unreachable(); } if (addr == 0xFFFF) { @@ -647,7 +734,7 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) return gb->hram[addr - 0xFF80]; } -static GB_read_function_t * const read_map[] = +static read_function_t *const read_map[] = { read_rom, read_rom, read_rom, read_rom, /* 0XXX, 1XXX, 2XXX, 3XXX */ read_mbc_rom, read_mbc_rom, read_mbc_rom, read_mbc_rom, /* 4XXX, 5XXX, 6XXX, 7XXX */ @@ -664,15 +751,45 @@ void GB_set_read_memory_callback(GB_gameboy_t *gb, GB_read_memory_callback_t cal uint8_t GB_read_memory(GB_gameboy_t *gb, uint16_t addr) { - if (gb->n_watchpoints) { + if (unlikely(gb->n_watchpoints)) { GB_debugger_test_read_watchpoint(gb, addr); } - if (is_addr_in_dma_use(gb, addr)) { - addr = gb->dma_current_src; + if (unlikely(is_addr_in_dma_use(gb, addr))) { + if (GB_is_cgb(gb) && bus_for_addr(gb, addr) == GB_BUS_MAIN && gb->dma_current_src >= 0xE000) { + /* This is cart specific! Everdrive 7X on a CGB-A or 0 behaves differently. */ + return 0xFF; + } + + if (GB_is_cgb(gb) && bus_for_addr(gb, gb->dma_current_src) != GB_BUS_RAM && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + } + else if (GB_is_cgb(gb) && gb->dma_current_src >= 0xE000 && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + } + else { + addr = (gb->dma_current_src - 1); + } } uint8_t data = read_map[addr >> 12](gb, addr); GB_apply_cheat(gb, addr, &data); - if (gb->read_memory_callback) { + if (unlikely(gb->read_memory_callback)) { + data = gb->read_memory_callback(gb, addr, data); + } + return data; +} + +uint8_t GB_safe_read_memory(GB_gameboy_t *gb, uint16_t addr) +{ + if (unlikely(addr == 0xFF00 + GB_IO_JOYP)) { + return gb->io_registers[GB_IO_JOYP]; + } + gb->disable_oam_corruption = true; + uint8_t data = read_map[addr >> 12](gb, addr); + gb->disable_oam_corruption = false; + GB_apply_cheat(gb, addr, &data); + if (unlikely(gb->read_memory_callback)) { data = gb->read_memory_callback(gb, addr, data); } return data; @@ -702,7 +819,7 @@ static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) case 0x2000: case 0x3000: gb->mbc3.rom_bank = value; break; case 0x4000: case 0x5000: gb->mbc3.ram_bank = value; - gb->mbc3_rtc_mapped = value & 8; + gb->mbc3.rtc_mapped = value & 8; break; case 0x6000: case 0x7000: memcpy(&gb->rtc_latched, &gb->rtc_real, sizeof(gb->rtc_real)); @@ -722,7 +839,58 @@ static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) value &= 7; } gb->mbc5.ram_bank = value; - gb->camera_registers_mapped = (value & 0x10) && gb->cartridge_type->mbc_subtype == GB_CAMERA; + break; + } + break; + case GB_CAMERA: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->mbc_ram_enable = (value & 0xF) == 0xA; break; + case 0x2000: case 0x3000: gb->mbc5.rom_bank_low = value; break; + case 0x4000: case 0x5000: + gb->mbc5.ram_bank = value; + gb->camera_registers_mapped = (value & 0x10); + break; + } + break; + case GB_MBC7: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: gb->mbc_ram_enable = value == 0x0A; break; + case 0x2000: case 0x3000: gb->mbc7.rom_bank = value; break; + case 0x4000: case 0x5000: gb->mbc7.secondary_ram_enable = value == 0x40; break; + } + break; + case GB_MMM01: + switch (addr & 0xF000) { + case 0x0000: case 0x1000: + gb->mbc_ram_enable = (value & 0xF) == 0xA; + if (!gb->mmm01.locked) { + gb->mmm01.ram_bank_mask = value >> 4; + gb->mmm01.locked = value & 0x40; + } + break; + case 0x2000: case 0x3000: + if (!gb->mmm01.locked) { + gb->mmm01.rom_bank_mid = value >> 5; + } + gb->mmm01.rom_bank_low &= (gb->mmm01.rom_bank_mask << 1); + gb->mmm01.rom_bank_low |= ~(gb->mmm01.rom_bank_mask << 1) & value; + break; + case 0x4000: case 0x5000: + gb->mmm01.ram_bank_low = value | ~gb->mmm01.ram_bank_mask; + if (!gb->mmm01.locked) { + gb->mmm01.ram_bank_high = value >> 2; + gb->mmm01.rom_bank_high = value >> 4; + gb->mmm01.mbc1_mode_disable = value & 0x40; + } + break; + case 0x6000: case 0x7000: + if (!gb->mmm01.mbc1_mode_disable) { + gb->mmm01.mbc1_mode = (value & 1); + } + if (!gb->mmm01.locked) { + gb->mmm01.rom_bank_mask = value >> 2; + gb->mmm01.multiplex_mode = value & 0x40; + } break; } break; @@ -731,14 +899,13 @@ static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) case 0x0000: case 0x1000: gb->huc1.ir_mode = (value & 0xF) == 0xE; break; case 0x2000: case 0x3000: gb->huc1.bank_low = value; break; case 0x4000: case 0x5000: gb->huc1.bank_high = value; break; - case 0x6000: case 0x7000: gb->huc1.mode = value; break; } break; case GB_HUC3: switch (addr & 0xF000) { case 0x0000: case 0x1000: - gb->huc3_mode = value & 0xF; - gb->mbc_ram_enable = gb->huc3_mode == 0xA; + gb->huc3.mode = value & 0xF; + gb->mbc_ram_enable = gb->huc3.mode == 0xA; break; case 0x2000: case 0x3000: gb->huc3.rom_bank = value; break; case 0x4000: case 0x5000: gb->huc3.ram_bank = value; break; @@ -747,15 +914,15 @@ static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) case GB_TPP1: switch (addr & 3) { case 0: - gb->tpp1_rom_bank &= 0xFF00; - gb->tpp1_rom_bank |= value; + gb->tpp1.rom_bank &= 0xFF00; + gb->tpp1.rom_bank |= value; break; case 1: - gb->tpp1_rom_bank &= 0xFF; - gb->tpp1_rom_bank |= value << 8; + gb->tpp1.rom_bank &= 0xFF; + gb->tpp1.rom_bank |= value << 8; break; case 2: - gb->tpp1_ram_bank = value; + gb->tpp1.ram_bank = value; break; case 3: switch (value) { @@ -763,7 +930,7 @@ static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) case 2: case 3: case 5: - gb->tpp1_mode = value; + gb->tpp1.mode = value; break; case 0x10: memcpy(&gb->rtc_latched, &gb->rtc_real, sizeof(gb->rtc_real)); @@ -791,87 +958,76 @@ static void write_mbc(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } } break; + nodefault; } GB_update_mbc_mappings(gb); } static void write_vram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) { - if (gb->vram_write_blocked) { + GB_display_sync(gb); + if (unlikely(gb->vram_write_blocked)) { //GB_log(gb, "Wrote %02x to %04x (VRAM) during mode 3\n", value, addr); return; } - /* TODO: not verified */ - if (gb->display_state == 22 && GB_is_cgb(gb) && !gb->cgb_double_speed) { - if (addr & 0x1000) { - addr = gb->last_tile_index_address; - } - else if (gb->last_tile_data_address & 0x1000) { - /* TODO: This is case is more complicated then the rest and differ between revisions - It's probably affected by how VRAM is layed out, might be easier after a decap is done */ - } - else { - addr = gb->last_tile_data_address; - } - } gb->vram[(addr & 0x1FFF) + (gb->cgb_vram_bank? 0x2000 : 0)] = value; } static bool huc3_write(GB_gameboy_t *gb, uint8_t value) { - switch (gb->huc3_mode) { + switch (gb->huc3.mode) { case 0xB: // RTC Write switch (value >> 4) { case 1: - if (gb->huc3_access_index < 3) { - gb->huc3_read = (gb->huc3_minutes >> (gb->huc3_access_index * 4)) & 0xF; + if (gb->huc3.access_index < 3) { + gb->huc3.read = (gb->huc3.minutes >> (gb->huc3.access_index * 4)) & 0xF; } - else if (gb->huc3_access_index < 7) { - gb->huc3_read = (gb->huc3_days >> ((gb->huc3_access_index - 3) * 4)) & 0xF; + else if (gb->huc3.access_index < 7) { + gb->huc3.read = (gb->huc3.days >> ((gb->huc3.access_index - 3) * 4)) & 0xF; } else { - // GB_log(gb, "Attempting to read from unsupported HuC-3 register: %03x\n", gb->huc3_access_index); + // GB_log(gb, "Attempting to read from unsupported HuC-3 register: %03x\n", gb->huc3.access_index); } - gb->huc3_access_index++; + gb->huc3.access_index++; break; case 2: case 3: - if (gb->huc3_access_index < 3) { - gb->huc3_minutes &= ~(0xF << (gb->huc3_access_index * 4)); - gb->huc3_minutes |= ((value & 0xF) << (gb->huc3_access_index * 4)); + if (gb->huc3.access_index < 3) { + gb->huc3.minutes &= ~(0xF << (gb->huc3.access_index * 4)); + gb->huc3.minutes |= ((value & 0xF) << (gb->huc3.access_index * 4)); } - else if (gb->huc3_access_index < 7) { - gb->huc3_days &= ~(0xF << ((gb->huc3_access_index - 3) * 4)); - gb->huc3_days |= ((value & 0xF) << ((gb->huc3_access_index - 3) * 4)); + else if (gb->huc3.access_index < 7) { + gb->huc3.days &= ~(0xF << ((gb->huc3.access_index - 3) * 4)); + gb->huc3.days |= ((value & 0xF) << ((gb->huc3.access_index - 3) * 4)); } - else if (gb->huc3_access_index >= 0x58 && gb->huc3_access_index <= 0x5a) { - gb->huc3_alarm_minutes &= ~(0xF << ((gb->huc3_access_index - 0x58) * 4)); - gb->huc3_alarm_minutes |= ((value & 0xF) << ((gb->huc3_access_index - 0x58) * 4)); + else if (gb->huc3.access_index >= 0x58 && gb->huc3.access_index <= 0x5A) { + gb->huc3.alarm_minutes &= ~(0xF << ((gb->huc3.access_index - 0x58) * 4)); + gb->huc3.alarm_minutes |= ((value & 0xF) << ((gb->huc3.access_index - 0x58) * 4)); } - else if (gb->huc3_access_index >= 0x5b && gb->huc3_access_index <= 0x5e) { - gb->huc3_alarm_days &= ~(0xF << ((gb->huc3_access_index - 0x5b) * 4)); - gb->huc3_alarm_days |= ((value & 0xF) << ((gb->huc3_access_index - 0x5b) * 4)); + else if (gb->huc3.access_index >= 0x5B && gb->huc3.access_index <= 0x5E) { + gb->huc3.alarm_days &= ~(0xF << ((gb->huc3.access_index - 0x5B) * 4)); + gb->huc3.alarm_days |= ((value & 0xF) << ((gb->huc3.access_index - 0x5B) * 4)); } - else if (gb->huc3_access_index == 0x5f) { - gb->huc3_alarm_enabled = value & 1; + else if (gb->huc3.access_index == 0x5F) { + gb->huc3.alarm_enabled = value & 1; } else { - // GB_log(gb, "Attempting to write %x to unsupported HuC-3 register: %03x\n", value & 0xF, gb->huc3_access_index); + // GB_log(gb, "Attempting to write %x to unsupported HuC-3 register: %03x\n", value & 0xF, gb->huc3.access_index); } if ((value >> 4) == 3) { - gb->huc3_access_index++; + gb->huc3.access_index++; } break; case 4: - gb->huc3_access_index &= 0xF0; - gb->huc3_access_index |= value & 0xF; + gb->huc3.access_index &= 0xF0; + gb->huc3.access_index |= value & 0xF; break; case 5: - gb->huc3_access_index &= 0x0F; - gb->huc3_access_index |= (value & 0xF) << 4; + gb->huc3.access_index &= 0x0F; + gb->huc3.access_index |= (value & 0xF) << 4; break; case 6: - gb->huc3_access_flags = (value & 0xF); + gb->huc3.access_flags = (value & 0xF); break; default: @@ -901,8 +1057,133 @@ static bool huc3_write(GB_gameboy_t *gb, uint8_t value) } } +static void write_mbc7_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) +{ + if (!gb->mbc_ram_enable || !gb->mbc7.secondary_ram_enable) return; + if (addr >= 0xB000) return; + switch ((addr >> 4) & 0xF) { + case 0: { + if (value == 0x55) { + gb->mbc7.latch_ready = true; + gb->mbc7.x_latch = gb->mbc7.y_latch = 0x8000; + } + } + case 1: { + if (value == 0xAA) { + gb->mbc7.latch_ready = false; + gb->mbc7.x_latch = 0x81D0 + 0x70 * gb->accelerometer_x; + gb->mbc7.y_latch = 0x81D0 + 0x70 * gb->accelerometer_y; + } + } + case 8: { + gb->mbc7.eeprom_cs = value & 0x80; + gb->mbc7.eeprom_di = value & 2; + if (gb->mbc7.eeprom_cs) { + if (!gb->mbc7.eeprom_clk && (value & 0x40)) { // Clocked + gb->mbc7.eeprom_do = gb->mbc7.read_bits >> 15; + gb->mbc7.read_bits <<= 1; + gb->mbc7.read_bits |= 1; + if (gb->mbc7.argument_bits_left == 0) { + /* Not transferring extra bits for a command*/ + gb->mbc7.eeprom_command <<= 1; + gb->mbc7.eeprom_command |= gb->mbc7.eeprom_di; + if (gb->mbc7.eeprom_command & 0x400) { + // Got full command + switch ((gb->mbc7.eeprom_command >> 6) & 0xF) { + case 0x8: + case 0x9: + case 0xA: + case 0xB: + // READ + gb->mbc7.read_bits = LE16(((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F]); + gb->mbc7.eeprom_command = 0; + break; + case 0x3: // EWEN (Eeprom Write ENable) + gb->mbc7.eeprom_write_enabled = true; + gb->mbc7.eeprom_command = 0; + break; + case 0x0: // EWDS (Eeprom Write DiSable) + gb->mbc7.eeprom_write_enabled = false; + gb->mbc7.eeprom_command = 0; + break; + case 0x4: + case 0x5: + case 0x6: + case 0x7: + // WRITE + if (gb->mbc7.eeprom_write_enabled) { + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] = 0; + } + gb->mbc7.argument_bits_left = 16; + // We still need to process this command, don't erase eeprom_command + break; + case 0xC: + case 0xD: + case 0xE: + case 0xF: + // ERASE + if (gb->mbc7.eeprom_write_enabled) { + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] = 0xFFFF; + gb->mbc7.read_bits = 0x3FFF; // Emulate some time to settle + } + gb->mbc7.eeprom_command = 0; + break; + case 0x2: + // ERAL (ERase ALl) + if (gb->mbc7.eeprom_write_enabled) { + memset(gb->mbc_ram, 0xFF, gb->mbc_ram_size); + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] = 0xFFFF; + gb->mbc7.read_bits = 0xFF; // Emulate some time to settle + } + gb->mbc7.eeprom_command = 0; + break; + case 0x1: + // WRAL (WRite ALl) + if (gb->mbc7.eeprom_write_enabled) { + memset(gb->mbc_ram, 0, gb->mbc_ram_size); + } + gb->mbc7.argument_bits_left = 16; + // We still need to process this command, don't erase eeprom_command + break; + } + } + } + else { + // We're shifting in extra bits for a WRITE/WRAL command + gb->mbc7.argument_bits_left--; + gb->mbc7.eeprom_do = true; + if (gb->mbc7.eeprom_di) { + uint16_t bit = LE16(1 << gb->mbc7.argument_bits_left); + if (gb->mbc7.eeprom_command & 0x100) { + // WRITE + ((uint16_t *)gb->mbc_ram)[gb->mbc7.eeprom_command & 0x7F] |= bit; + } + else { + // WRAL + for (unsigned i = 0; i < 0x7F; i++) { + ((uint16_t *)gb->mbc_ram)[i] |= bit; + } + } + } + if (gb->mbc7.argument_bits_left == 0) { // We're done + gb->mbc7.eeprom_command = 0; + gb->mbc7.read_bits = (gb->mbc7.eeprom_command & 0x100)? 0xFF : 0x3FFF; // Emulate some time to settle + } + } + } + } + gb->mbc7.eeprom_clk = value & 0x40; + } + } +} + static void write_mbc_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) { + if (gb->cartridge_type->mbc_type == GB_MBC7) { + write_mbc7_ram(gb, addr, value); + return; + } + if (gb->cartridge_type->mbc_type == GB_HUC3) { if (huc3_write(gb, value)) return; } @@ -913,7 +1194,7 @@ static void write_mbc_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } if (gb->cartridge_type->mbc_type == GB_TPP1) { - switch (gb->tpp1_mode) { + switch (gb->tpp1.mode) { case 3: break; case 5: @@ -937,7 +1218,7 @@ static void write_mbc_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) return; } - if (gb->cartridge_type->has_rtc && gb->mbc3_rtc_mapped) { + if (gb->cartridge_type->has_rtc && gb->mbc3.rtc_mapped) { if (gb->mbc_ram_bank <= 4) { if (gb->mbc_ram_bank == 0) { gb->rtc_cycles = 0; @@ -950,7 +1231,12 @@ static void write_mbc_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) if (!gb->mbc_ram || !gb->mbc_ram_size) { return; } - + + if (gb->cartridge_type->mbc_type == GB_CAMERA && (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1)) { + /* Forbid writing to RAM while the camera is busy. */ + return; + } + uint8_t effective_bank = gb->mbc_ram_bank; if (gb->cartridge_type->mbc_type == GB_MBC3 && !gb->is_mbc30) { if (gb->cartridge_type->has_rtc) { @@ -972,6 +1258,41 @@ static void write_banked_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) gb->ram[(addr & 0x0FFF) + gb->cgb_ram_bank * 0x1000] = value; } +static void write_oam(GB_gameboy_t *gb, uint8_t addr, uint8_t value) +{ + if (addr < 0xA0) { + gb->oam[addr] = value; + return; + } + switch (gb->model) { + case GB_MODEL_CGB_D: + if (addr >= 0xC0) { + addr |= 0xF0; + } + gb->extra_oam[addr - 0xA0] = value; + break; + case GB_MODEL_CGB_C: + case GB_MODEL_CGB_B: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_0: + addr &= ~0x18; + gb->extra_oam[addr - 0xA0] = value; + break; + case GB_MODEL_CGB_E: + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + case GB_MODEL_DMG_B: + case GB_MODEL_MGB: + case GB_MODEL_SGB_NTSC: + case GB_MODEL_SGB_PAL: + case GB_MODEL_SGB_NTSC_NO_SFC: + case GB_MODEL_SGB_PAL_NO_SFC: + case GB_MODEL_SGB2: + case GB_MODEL_SGB2_NO_SFC: + break; + } +} + static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) { if (addr < 0xFE00) { @@ -981,60 +1302,30 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } if (addr < 0xFF00) { + GB_display_sync(gb); if (gb->oam_write_blocked) { GB_trigger_oam_bug(gb, addr); return; } - if ((gb->dma_steps_left && (gb->dma_cycles > 0 || gb->is_dma_restarting))) { + if (GB_is_dma_active(gb)) { /* Todo: Does writing to OAM during DMA causes the OAM bug? */ return; } if (GB_is_cgb(gb)) { - if (addr < 0xFEA0) { - gb->oam[addr & 0xFF] = value; - } - switch (gb->model) { - /* - case GB_MODEL_CGB_D: - if (addr > 0xfec0) { - addr |= 0xf0; - } - gb->extra_oam[addr - 0xfea0] = value; - break; - */ - case GB_MODEL_CGB_C: - /* - case GB_MODEL_CGB_B: - case GB_MODEL_CGB_A: - case GB_MODEL_CGB_0: - */ - addr &= ~0x18; - gb->extra_oam[addr - 0xfea0] = value; - break; - case GB_MODEL_DMG_B: - case GB_MODEL_SGB_NTSC: - case GB_MODEL_SGB_PAL: - case GB_MODEL_SGB_NTSC_NO_SFC: - case GB_MODEL_SGB_PAL_NO_SFC: - case GB_MODEL_SGB2: - case GB_MODEL_SGB2_NO_SFC: - case GB_MODEL_CGB_E: - case GB_MODEL_AGB: - break; - } + write_oam(gb, addr, value); return; } if (addr < 0xFEA0) { - if (gb->accessed_oam_row == 0xa0) { + if (gb->accessed_oam_row == 0xA0) { for (unsigned i = 0; i < 8; i++) { if ((i & 6) != (addr & 6)) { - gb->oam[(addr & 0xf8) + i] = gb->oam[0x98 + i]; + gb->oam[(addr & 0xF8) + i] = gb->oam[0x98 + i]; } else { - gb->oam[(addr & 0xf8) + i] = bitwise_glitch(gb->oam[(addr & 0xf8) + i], gb->oam[0x9c], gb->oam[0x98 + i]); + gb->oam[(addr & 0xF8) + i] = bitwise_glitch(gb->oam[(addr & 0xF8) + i], gb->oam[0x9C], gb->oam[0x98 + i]); } } } @@ -1043,13 +1334,13 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) if (gb->accessed_oam_row == 0) { gb->oam[0] = bitwise_glitch(gb->oam[0], - gb->oam[(addr & 0xf8)], - gb->oam[(addr & 0xfe)]); + gb->oam[(addr & 0xF8)], + gb->oam[(addr & 0xFE)]); gb->oam[1] = bitwise_glitch(gb->oam[1], - gb->oam[(addr & 0xf8) + 1], - gb->oam[(addr & 0xfe) | 1]); + gb->oam[(addr & 0xF8) + 1], + gb->oam[(addr & 0xFE) | 1]); for (unsigned i = 2; i < 8; i++) { - gb->oam[i] = gb->oam[(addr & 0xf8) + i]; + gb->oam[i] = gb->oam[(addr & 0xF8) + i]; } } } @@ -1062,6 +1353,8 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) /* Todo: Clean this code up: use a function table and move relevant code to display.c and timing.c (APU read and writes are already at apu.c) */ if (addr < 0xFF80) { + sync_ppu_if_needed(gb, addr); + /* Hardware registers */ switch (addr & 0xFF) { case GB_IO_WY: @@ -1076,9 +1369,9 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) case GB_IO_OBP0: case GB_IO_OBP1: case GB_IO_SB: - case GB_IO_UNKNOWN2: - case GB_IO_UNKNOWN3: - case GB_IO_UNKNOWN4: + case GB_IO_PSWX: + case GB_IO_PSWY: + case GB_IO_PSW: case GB_IO_UNKNOWN5: gb->io_registers[addr & 0xFF] = value; return; @@ -1145,26 +1438,40 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) case GB_IO_LCDC: - if ((value & 0x80) && !(gb->io_registers[GB_IO_LCDC] & 0x80)) { + if ((value & GB_LCDC_ENABLE) && !(gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE)) { + // LCD turned on + if (gb->lcd_status_callback) { + gb->lcd_status_callback(gb, true); + } + if (!gb->lcd_disabled_outside_of_vblank && + (gb->cycles_since_vblank_callback > 10 * 456 || GB_is_sgb(gb))) { + // Trigger a vblank here so we don't exceed LCDC_PERIOD + GB_display_vblank(gb, GB_VBLANK_TYPE_ARTIFICIAL); + } + gb->display_cycles = 0; gb->display_state = 0; gb->double_speed_alignment = 0; + gb->cycles_for_line = 0; if (GB_is_sgb(gb)) { - gb->frame_skip_state = GB_FRAMESKIP_SECOND_FRAME_RENDERED; + gb->frame_skip_state = GB_FRAMESKIP_FIRST_FRAME_RENDERED; } - else if (gb->frame_skip_state == GB_FRAMESKIP_SECOND_FRAME_RENDERED) { + else { gb->frame_skip_state = GB_FRAMESKIP_LCD_TURNED_ON; } GB_timing_sync(gb); } - else if (!(value & 0x80) && (gb->io_registers[GB_IO_LCDC] & 0x80)) { + else if (!(value & GB_LCDC_ENABLE) && (gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE)) { /* Sync after turning off LCD */ + if (gb->lcd_status_callback) { + gb->lcd_status_callback(gb, false); + } gb->double_speed_alignment = 0; GB_timing_sync(gb); GB_lcd_off(gb); } /* Handle disabling objects while already fetching an object */ - if ((gb->io_registers[GB_IO_LCDC] & 2) && !(value & 2)) { + if ((gb->io_registers[GB_IO_LCDC] & GB_LCDC_OBJ_EN) && !(value & GB_LCDC_OBJ_EN)) { if (gb->during_object_fetch) { gb->cycles_for_line += gb->display_cycles; gb->display_cycles = 0; @@ -1172,7 +1479,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } } gb->io_registers[GB_IO_LCDC] = value; - if (!(value & 0x20)) { + if (!(value & GB_LCDC_WIN_ENABLE)) { gb->wx_triggered = false; gb->wx166_glitch = false; } @@ -1190,6 +1497,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) return; case GB_IO_DIV: + GB_set_internal_div_counter(gb, 0); /* Reset the div state machine */ gb->div_state = 0; gb->div_cycles = 0; @@ -1201,6 +1509,15 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_update_joyp(gb); } else if ((gb->io_registers[GB_IO_JOYP] & 0x30) != (value & 0x30)) { + if (gb->model < GB_MODEL_SGB) { // DMG only + if (gb->joyp_switching_delay) { + gb->io_registers[GB_IO_JOYP] = (gb->joyp_switch_value & 0xF0) | (gb->io_registers[GB_IO_JOYP] & 0x0F); + } + gb->joyp_switch_value = value; + gb->joyp_switching_delay = 24; + value &= gb->io_registers[GB_IO_JOYP]; + gb->joypad_is_stable = false; + } GB_sgb_write(gb, value); gb->io_registers[GB_IO_JOYP] = (value & 0xF0) | (gb->io_registers[GB_IO_JOYP] & 0x0F); GB_update_joyp(gb); @@ -1219,18 +1536,13 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) return; case GB_IO_DMA: - if (gb->dma_steps_left) { - /* This is not correct emulation, since we're not really delaying the second DMA. - One write that should have happened in the first DMA will not happen. However, - since that byte will be overwritten by the second DMA before it can actually be - read, it doesn't actually matter. */ - gb->is_dma_restarting = true; - } - gb->dma_cycles = -7; - gb->dma_current_dest = 0; + gb->dma_restarting = (gb->dma_current_dest != 0xA1 && gb->dma_current_dest != 0xA0); + gb->dma_cycles = 0; + gb->dma_cycles_modulo = 2; + gb->dma_current_dest = 0xFF; gb->dma_current_src = value << 8; - gb->dma_steps_left = 0xa0; gb->io_registers[GB_IO_DMA] = value; + GB_STAT_update(gb); return; case GB_IO_SVBK: if (gb->cgb_mode || (GB_is_cgb(gb) && !gb->boot_rom_finished)) { @@ -1272,7 +1584,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } ((addr & 0xFF) == GB_IO_BGPD? gb->background_palettes_data : - gb->sprite_palettes_data)[gb->io_registers[index_reg] & 0x3F] = value; + gb->object_palettes_data)[gb->io_registers[index_reg] & 0x3F] = value; GB_palette_changed(gb, (addr & 0xFF) == GB_IO_BGPD, gb->io_registers[index_reg] & 0x3F); if (gb->io_registers[index_reg] & 0x80) { gb->io_registers[index_reg]++; @@ -1290,6 +1602,10 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) gb->hdma_current_src &= 0xF0; gb->hdma_current_src |= value << 8; } + /* Range 0xE*** like 0xF*** and can't overflow (with 0x800 bytes) to anything meaningful */ + if (gb->hdma_current_src >= 0xE000) { + gb->hdma_current_src |= 0xF000; + } return; case GB_IO_HDMA2: if (gb->cgb_mode) { @@ -1305,7 +1621,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) return; case GB_IO_HDMA4: if (gb->cgb_mode) { - gb->hdma_current_dest &= 0x1F00; + gb->hdma_current_dest &= 0xFF00; gb->hdma_current_dest |= value & 0xF0; } return; @@ -1317,38 +1633,31 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } gb->hdma_on = (value & 0x80) == 0; gb->hdma_on_hblank = (value & 0x80) != 0; - if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0) { + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->display_state != 7) { gb->hdma_on = true; } gb->io_registers[GB_IO_HDMA5] = value; gb->hdma_steps_left = (gb->io_registers[GB_IO_HDMA5] & 0x7F) + 1; - /* Todo: Verify this. Gambatte's DMA tests require this. */ - if (gb->hdma_current_dest + (gb->hdma_steps_left << 4) > 0xFFFF) { - gb->hdma_steps_left = (0x10000 - gb->hdma_current_dest) >> 4; - } - gb->hdma_cycles = -12; return; - /* Todo: what happens when starting a transfer during a transfer? - What happens when starting a transfer during external clock? - */ + /* TODO: What happens when starting a transfer during external clock? + TODO: When a cable is connected, the clock of the other side affects "zombie" serial clocking */ case GB_IO_SC: + gb->serial_count = 0; if (!gb->cgb_mode) { value |= 2; } + if (gb->serial_master_clock) { + GB_serial_master_edge(gb); + } gb->io_registers[GB_IO_SC] = value | (~0x83); + gb->serial_mask = gb->cgb_mode && (value & 2)? 4 : 0x80; if ((value & 0x80) && (value & 0x1) ) { - gb->serial_length = gb->cgb_mode && (value & 2)? 16 : 512; - gb->serial_count = 0; - /* Todo: This is probably incorrect for CGB's faster clock mode. */ - gb->serial_cycles &= 0xFF; if (gb->serial_transfer_bit_start_callback) { gb->serial_transfer_bit_start_callback(gb, gb->io_registers[GB_IO_SB] & 0x80); } } - else { - gb->serial_length = 0; - } + return; case GB_IO_RP: { @@ -1376,6 +1685,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } if (addr == 0xFFFF) { + GB_display_sync(gb); /* Interrupt mask */ gb->interrupt_enable = value; return; @@ -1387,7 +1697,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) -static GB_write_function_t * const write_map[] = +static write_function_t *const write_map[] = { write_mbc, write_mbc, write_mbc, write_mbc, /* 0XXX, 1XXX, 2XXX, 3XXX */ write_mbc, write_mbc, write_mbc, write_mbc, /* 4XXX, 5XXX, 6XXX, 7XXX */ @@ -1397,62 +1707,166 @@ static GB_write_function_t * const write_map[] = write_ram, write_high_memory, /* EXXX FXXX */ }; +void GB_set_write_memory_callback(GB_gameboy_t *gb, GB_write_memory_callback_t callback) +{ + gb->write_memory_callback = callback; +} + void GB_write_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) { - if (gb->n_watchpoints) { + if (unlikely(gb->n_watchpoints)) { GB_debugger_test_write_watchpoint(gb, addr, value); } - if (is_addr_in_dma_use(gb, addr)) { - /* Todo: What should happen? Will this affect DMA? Will data be written? What and where? */ - return; + + if (unlikely(gb->write_memory_callback)) { + if (!gb->write_memory_callback(gb, addr, value)) return; } + + if (unlikely(is_addr_in_dma_use(gb, addr))) { + bool oam_write = addr >= 0xFE00; + if (GB_is_cgb(gb) && bus_for_addr(gb, addr) == GB_BUS_MAIN && gb->dma_current_src >= 0xE000) { + /* This is cart specific! Everdrive 7X on a CGB-A or 0 behaves differently. */ + return; + } + + if (GB_is_cgb(gb) && (gb->dma_current_src < 0xC000 || gb->dma_current_src >= 0xE000) && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + goto write; + } + else if (GB_is_cgb(gb) && gb->dma_current_src >= 0xE000 && addr >= 0xC000) { + // TODO: this should probably affect the DMA dest as well + addr = ((gb->dma_current_src - 1) & 0x1000) | (addr & 0xFFF) | 0xC000; + } + else { + addr = (gb->dma_current_src - 1); + } + if (GB_is_cgb(gb) || addr >= 0xA000) { + if (addr < 0xA000) { + gb->oam[gb->dma_current_dest - 1] = 0; + } + else if ((gb->model < GB_MODEL_CGB_0 || gb->model == GB_MODEL_CGB_B)) { + gb->oam[gb->dma_current_dest - 1] &= value; + } + else if ((gb->model < GB_MODEL_CGB_C || gb->model > GB_MODEL_CGB_E) && !oam_write) { + gb->oam[gb->dma_current_dest - 1] = value; + } + if (gb->model < GB_MODEL_CGB_E || addr >= 0xA000) return; + } + } +write: write_map[addr >> 12](gb, addr, value); } +bool GB_is_dma_active(GB_gameboy_t *gb) +{ + return gb->dma_current_dest != 0xA1; +} + void GB_dma_run(GB_gameboy_t *gb) { - while (gb->dma_cycles >= 4 && gb->dma_steps_left) { - /* Todo: measure this value */ - gb->dma_cycles -= 4; - gb->dma_steps_left--; - - if (gb->dma_current_src < 0xe000) { + if (gb->dma_current_dest == 0xA1) return; + if (unlikely(gb->halted || gb->stopped)) return; + signed cycles = gb->dma_cycles + gb->dma_cycles_modulo; + gb->in_dma_read = true; + while (unlikely(cycles >= 4)) { + cycles -= 4; + if (gb->dma_current_dest >= 0xA0) { + gb->dma_current_dest++; + if (gb->display_state == 8) { + gb->io_registers[GB_IO_STAT] |= 2; + GB_STAT_update(gb); + } + break; + } + if (unlikely(gb->hdma_in_progress && (gb->hdma_steps_left > 1 || (gb->hdma_current_dest & 0xF) != 0xF))) { + gb->dma_current_dest++; + } + else if (gb->dma_current_src < 0xE000) { gb->oam[gb->dma_current_dest++] = GB_read_memory(gb, gb->dma_current_src); } else { - /* Todo: Not correct on the CGB */ - gb->oam[gb->dma_current_dest++] = GB_read_memory(gb, gb->dma_current_src & ~0x2000); + if (GB_is_cgb(gb)) { + gb->oam[gb->dma_current_dest++] = 0xFF; + } + else { + gb->oam[gb->dma_current_dest++] = GB_read_memory(gb, gb->dma_current_src & ~0x2000); + } } /* dma_current_src must be the correct value during GB_read_memory */ gb->dma_current_src++; - if (!gb->dma_steps_left) { - gb->is_dma_restarting = false; - } + gb->dma_ppu_vram_conflict = false; } + gb->in_dma_read = false; + gb->dma_cycles_modulo = cycles; + gb->dma_cycles = 0; } void GB_hdma_run(GB_gameboy_t *gb) { - if (!gb->hdma_on) return; - - while (gb->hdma_cycles >= 0x4) { - gb->hdma_cycles -= 0x4; - - GB_write_memory(gb, 0x8000 | (gb->hdma_current_dest++ & 0x1FFF), GB_read_memory(gb, (gb->hdma_current_src++))); + unsigned cycles = gb->cgb_double_speed? 4 : 2; + /* This is a bit cart, revision and unit specific. TODO: what if PC is in cart RAM? */ + if (gb->model < GB_MODEL_CGB_D || gb->pc > 0x8000) { + gb->hdma_open_bus = 0xFF; + } + gb->addr_for_hdma_conflict = 0xFFFF; + uint16_t vram_base = gb->cgb_vram_bank? 0x2000 : 0; + gb->hdma_in_progress = true; + GB_advance_cycles(gb, cycles); + while (gb->hdma_on) { + uint8_t byte = gb->hdma_open_bus; + gb->addr_for_hdma_conflict = 0xFFFF; - if ((gb->hdma_current_dest & 0xf) == 0) { - if (--gb->hdma_steps_left == 0) { + if (gb->hdma_current_src < 0x8000 || + (gb->hdma_current_src & 0xE000) == 0xC000 || + (gb->hdma_current_src & 0xE000) == 0xA000) { + byte = GB_read_memory(gb, gb->hdma_current_src); + } + if (unlikely(GB_is_dma_active(gb)) && (gb->dma_cycles_modulo == 2 || gb->cgb_double_speed)) { + write_oam(gb, gb->hdma_current_src, byte); + } + gb->hdma_current_src++; + GB_advance_cycles(gb, cycles); + if (gb->addr_for_hdma_conflict == 0xFFFF /* || ((gb->model & ~GB_MODEL_GBP_BIT) >= GB_MODEL_AGB_B && gb->cgb_double_speed) */) { + uint16_t addr = (gb->hdma_current_dest++ & 0x1FFF); + gb->vram[vram_base + addr] = byte; + // TODO: vram_write_blocked might not be the correct timing + if (gb->vram_write_blocked /* && (gb->model & ~GB_MODEL_GBP_BIT) < GB_MODEL_AGB_B */) { + gb->vram[(vram_base ^ 0x2000) + addr] = byte; + } + } + else { + if (gb->model == GB_MODEL_CGB_E || gb->cgb_double_speed) { + /* + These corruptions revision (unit?) specific in single speed. They happen only on my CGB-E. + */ + gb->addr_for_hdma_conflict &= 0x1FFF; + // TODO: there are *some* scenarions in single speed mode where this write doesn't happen. What's the logic? + uint16_t addr = (gb->hdma_current_dest & gb->addr_for_hdma_conflict & 0x1FFF); + gb->vram[vram_base + addr] = byte; + // TODO: vram_write_blocked might not be the correct timing + if (gb->vram_write_blocked /* && (gb->model & ~GB_MODEL_GBP_BIT) < GB_MODEL_AGB_B */) { + gb->vram[(vram_base ^ 0x2000) + addr] = byte; + } + } + gb->hdma_current_dest++; + } + gb->hdma_open_bus = 0xFF; + + if ((gb->hdma_current_dest & 0xF) == 0) { + if (--gb->hdma_steps_left == 0 || gb->hdma_current_dest == 0) { gb->hdma_on = false; gb->hdma_on_hblank = false; - gb->hdma_starting = false; gb->io_registers[GB_IO_HDMA5] &= 0x7F; - break; } - if (gb->hdma_on_hblank) { + else if (gb->hdma_on_hblank) { gb->hdma_on = false; - break; } } } + gb->hdma_in_progress = false; // TODO: timing? (affects VRAM reads) + if (!gb->cgb_double_speed) { + GB_advance_cycles(gb, 2); + } } diff --git a/thirdparty/SameBoy/Core/memory.h b/thirdparty/SameBoy/Core/memory.h index 80020f176..9a5824d9b 100644 --- a/thirdparty/SameBoy/Core/memory.h +++ b/thirdparty/SameBoy/Core/memory.h @@ -1,17 +1,22 @@ #ifndef memory_h #define memory_h -#include "gb_struct_def.h" +#include "defs.h" #include typedef uint8_t (*GB_read_memory_callback_t)(GB_gameboy_t *gb, uint16_t addr, uint8_t data); +typedef bool (*GB_write_memory_callback_t)(GB_gameboy_t *gb, uint16_t addr, uint8_t data); // Return false to prevent the write void GB_set_read_memory_callback(GB_gameboy_t *gb, GB_read_memory_callback_t callback); +void GB_set_write_memory_callback(GB_gameboy_t *gb, GB_write_memory_callback_t callback); uint8_t GB_read_memory(GB_gameboy_t *gb, uint16_t addr); +uint8_t GB_safe_read_memory(GB_gameboy_t *gb, uint16_t addr); // Without side effects void GB_write_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value); #ifdef GB_INTERNAL -void GB_dma_run(GB_gameboy_t *gb); -void GB_hdma_run(GB_gameboy_t *gb); -void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address); +internal void GB_dma_run(GB_gameboy_t *gb); +internal bool GB_is_dma_active(GB_gameboy_t *gb); +internal void GB_hdma_run(GB_gameboy_t *gb); +internal void GB_trigger_oam_bug(GB_gameboy_t *gb, uint16_t address); +internal uint8_t GB_read_oam(GB_gameboy_t *gb, uint8_t addr); #endif #endif /* memory_h */ diff --git a/thirdparty/SameBoy/Core/printer.c b/thirdparty/SameBoy/Core/printer.c index c8514b410..1394a6a7e 100644 --- a/thirdparty/SameBoy/Core/printer.c +++ b/thirdparty/SameBoy/Core/printer.c @@ -22,8 +22,8 @@ static void handle_command(GB_gameboy_t *gb) gb->printer.status = 6; /* Printing */ uint32_t image[gb->printer.image_offset]; uint8_t palette = gb->printer.command_data[2]; - uint32_t colors[4] = {gb->rgb_encode_callback(gb, 0xff, 0xff, 0xff), - gb->rgb_encode_callback(gb, 0xaa, 0xaa, 0xaa), + uint32_t colors[4] = {gb->rgb_encode_callback(gb, 0xFF, 0xFF, 0xFF), + gb->rgb_encode_callback(gb, 0xAA, 0xAA, 0xAA), gb->rgb_encode_callback(gb, 0x55, 0x55, 0x55), gb->rgb_encode_callback(gb, 0x00, 0x00, 0x00)}; for (unsigned i = 0; i < gb->printer.image_offset; i++) { diff --git a/thirdparty/SameBoy/Core/printer.h b/thirdparty/SameBoy/Core/printer.h index f5c9b2777..f4ccfe47f 100644 --- a/thirdparty/SameBoy/Core/printer.h +++ b/thirdparty/SameBoy/Core/printer.h @@ -2,7 +2,7 @@ #define printer_h #include #include -#include "gb_struct_def.h" +#include "defs.h" #define GB_PRINTER_MAX_COMMAND_LENGTH 0x280 #define GB_PRINTER_DATA_SIZE 0x280 diff --git a/thirdparty/SameBoy/Core/rewind.c b/thirdparty/SameBoy/Core/rewind.c index d30552845..2be73a6b7 100644 --- a/thirdparty/SameBoy/Core/rewind.c +++ b/thirdparty/SameBoy/Core/rewind.c @@ -17,7 +17,7 @@ static uint8_t *state_compress(const uint8_t *prev, const uint8_t *data, size_t while (uncompressed_size) { if (prev_mode) { - if (*data == *prev && COUNTER != 0xffff) { + if (*data == *prev && COUNTER != 0xFFFF) { COUNTER++; data++; prev++; @@ -35,7 +35,7 @@ static uint8_t *state_compress(const uint8_t *prev, const uint8_t *data, size_t } } else { - if (*data != *prev && COUNTER != 0xffff) { + if (*data != *prev && COUNTER != 0xFFFF) { COUNTER++; DATA = *data; data_pos++; diff --git a/thirdparty/SameBoy/Core/rewind.h b/thirdparty/SameBoy/Core/rewind.h index ad5484108..3cc23ed90 100644 --- a/thirdparty/SameBoy/Core/rewind.h +++ b/thirdparty/SameBoy/Core/rewind.h @@ -2,11 +2,11 @@ #define rewind_h #include -#include "gb_struct_def.h" +#include "defs.h" #ifdef GB_INTERNAL -void GB_rewind_push(GB_gameboy_t *gb); -void GB_rewind_free(GB_gameboy_t *gb); +internal void GB_rewind_push(GB_gameboy_t *gb); +internal void GB_rewind_free(GB_gameboy_t *gb); #endif bool GB_rewind_pop(GB_gameboy_t *gb); void GB_set_rewind_length(GB_gameboy_t *gb, double seconds); diff --git a/thirdparty/SameBoy/Core/rumble.h b/thirdparty/SameBoy/Core/rumble.h index eae9f372b..ca3473781 100644 --- a/thirdparty/SameBoy/Core/rumble.h +++ b/thirdparty/SameBoy/Core/rumble.h @@ -1,7 +1,7 @@ #ifndef rumble_h #define rumble_h -#include "gb_struct_def.h" +#include "defs.h" typedef enum { GB_RUMBLE_DISABLED, @@ -10,7 +10,7 @@ typedef enum { } GB_rumble_mode_t; #ifdef GB_INTERNAL -void GB_handle_rumble(GB_gameboy_t *gb); +internal void GB_handle_rumble(GB_gameboy_t *gb); #endif void GB_set_rumble_mode(GB_gameboy_t *gb, GB_rumble_mode_t mode); diff --git a/thirdparty/SameBoy/Core/save_state.c b/thirdparty/SameBoy/Core/save_state.c index 17777505b..a4b316c3e 100644 --- a/thirdparty/SameBoy/Core/save_state.c +++ b/thirdparty/SameBoy/Core/save_state.c @@ -3,12 +3,10 @@ #include #include -#define str(x) #x -#define xstr(x) str(x) #ifdef GB_BIG_ENDIAN -#define BESS_NAME "SameBoy v" xstr(GB_VERSION) " (Big Endian)" +#define BESS_NAME "SameBoy v" GB_VERSION " (Big Endian)" #else -#define BESS_NAME "SameBoy v" xstr(GB_VERSION) +#define BESS_NAME "SameBoy v" GB_VERSION #endif _Static_assert((GB_SECTION_OFFSET(core_state) & 7) == 0, "Section core_state is not aligned"); @@ -69,7 +67,7 @@ typedef struct __attribute__((packed)) { BESS_buffer_t oam; BESS_buffer_t hram; BESS_buffer_t background_palettes; - BESS_buffer_t sprite_palettes; + BESS_buffer_t object_palettes; } BESS_CORE_t; typedef struct __attribute__((packed)) { @@ -121,6 +119,28 @@ typedef struct __attribute__((packed)){ GB_huc3_rtc_time_t data; } BESS_HUC3_t; +typedef struct __attribute__((packed)) { + BESS_block_t header; + + // Flags + bool latch_ready:1; + bool eeprom_do:1; + bool eeprom_di:1; + bool eeprom_clk:1; + bool eeprom_cs:1; + bool eeprom_write_enabled:1; + uint8_t padding:2; + + uint8_t argument_bits_left; + + uint16_t eeprom_command; + uint16_t read_bits; + + uint16_t x_latch; + uint16_t y_latch; + +} BESS_MBC7_t; + typedef struct __attribute__((packed)){ BESS_block_t header; uint64_t last_rtc_second; @@ -234,8 +254,14 @@ static size_t bess_size_for_cartridge(const GB_cartridge_t *cart) return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t) + (cart->has_rtc? sizeof(BESS_RTC_t) : 0); case GB_MBC5: return sizeof(BESS_block_t) + 4 * sizeof(BESS_MBC_pair_t); + case GB_CAMERA: + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t); + case GB_MBC7: + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t) + sizeof(BESS_MBC7_t); + case GB_MMM01: + return sizeof(BESS_block_t) + 8 * sizeof(BESS_MBC_pair_t); case GB_HUC1: - return sizeof(BESS_block_t) + 4 * sizeof(BESS_MBC_pair_t); + return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t); case GB_HUC3: return sizeof(BESS_block_t) + 3 * sizeof(BESS_MBC_pair_t) + sizeof(BESS_HUC3_t); case GB_TPP1: @@ -270,7 +296,7 @@ size_t GB_get_save_state_size(GB_gameboy_t *gb) + sizeof(BESS_CORE_t) + sizeof(BESS_XOAM_t) + (gb->sgb? sizeof(BESS_SGB_t) : 0) - + bess_size_for_cartridge(gb->cartridge_type) // MBC & RTC/HUC3/TPP1 block + + bess_size_for_cartridge(gb->cartridge_type) // MBC & RTC/HUC3/TPP1/MBC7 block + sizeof(BESS_block_t) // END block + sizeof(BESS_footer_t); } @@ -278,30 +304,6 @@ size_t GB_get_save_state_size(GB_gameboy_t *gb) static bool verify_and_update_state_compatibility(GB_gameboy_t *gb, GB_gameboy_t *save, bool *attempt_bess) { *attempt_bess = false; - if (save->ram_size == 0 && (&save->ram_size)[-1] == gb->ram_size) { - /* This is a save state with a bad printer struct from a 32-bit OS */ - memmove(save->extra_oam + 4, save->extra_oam, (uintptr_t)&save->ram_size - (uintptr_t)&save->extra_oam); - } - if (save->ram_size == 0) { - /* Save doesn't have ram size specified, it's a pre 0.12 save state with potentially - incorrect RAM amount if it's a CGB instance */ - if (GB_is_cgb(save)) { - save->ram_size = 0x2000 * 8; // Incorrect RAM size - } - else { - save->ram_size = gb->ram_size; - } - } - - if (save->model & GB_MODEL_PAL_BIT_OLD) { - save->model &= ~GB_MODEL_PAL_BIT_OLD; - save->model |= GB_MODEL_PAL_BIT; - } - - if (save->model & GB_MODEL_NO_SFC_BIT_OLD) { - save->model &= ~GB_MODEL_NO_SFC_BIT_OLD; - save->model |= GB_MODEL_NO_SFC_BIT; - } if (gb->version != save->version) { GB_log(gb, "The save state is for a different version of SameBoy.\n"); @@ -330,14 +332,8 @@ static bool verify_and_update_state_compatibility(GB_gameboy_t *gb, GB_gameboy_t } if (gb->ram_size != save->ram_size) { - if (gb->ram_size == 0x1000 * 8 && save->ram_size == 0x2000 * 8) { - /* A bug in versions prior to 0.12 made CGB instances allocate twice the ammount of RAM. - Ignore this issue to retain compatibility with older, 0.11, save states. */ - } - else { - GB_log(gb, "The save state has non-matching RAM size. Try changing the emulated model.\n"); - return false; - } + GB_log(gb, "The save state has non-matching RAM size. Try changing the emulated model.\n"); + return false; } switch (save->model) { @@ -346,11 +342,17 @@ static bool verify_and_update_state_compatibility(GB_gameboy_t *gb, GB_gameboy_t case GB_MODEL_SGB_PAL: return true; case GB_MODEL_SGB_NTSC_NO_SFC: return true; case GB_MODEL_SGB_PAL_NO_SFC: return true; + case GB_MODEL_MGB: return true; case GB_MODEL_SGB2: return true; case GB_MODEL_SGB2_NO_SFC: return true; + case GB_MODEL_CGB_0: return true; + case GB_MODEL_CGB_A: return true; + case GB_MODEL_CGB_B: return true; case GB_MODEL_CGB_C: return true; + case GB_MODEL_CGB_D: return true; case GB_MODEL_CGB_E: return true; - case GB_MODEL_AGB: return true; + case GB_MODEL_AGB_A: return true; + case GB_MODEL_GBP_A: return true; } if ((gb->model & GB_MODEL_FAMILY_MASK) == (save->model & GB_MODEL_FAMILY_MASK)) { save->model = gb->model; @@ -367,15 +369,13 @@ static void sanitize_state(GB_gameboy_t *gb) GB_palette_changed(gb, true, i * 2); } - gb->bg_fifo.read_end &= 0xF; - gb->bg_fifo.write_end &= 0xF; - gb->oam_fifo.read_end &= 0xF; - gb->oam_fifo.write_end &= 0xF; + gb->bg_fifo.read_end &= GB_FIFO_LENGTH - 1; + gb->oam_fifo.read_end &= GB_FIFO_LENGTH - 1; gb->last_tile_index_address &= 0x1FFF; gb->window_tile_x &= 0x1F; /* These are kind of DOS-ish if too large */ - if (abs(gb->display_cycles) > 0x8000) { + if (abs(gb->display_cycles) > 0x80000) { gb->display_cycles = 0; } @@ -405,62 +405,13 @@ static void sanitize_state(GB_gameboy_t *gb) gb->lcd_x = gb->position_in_line; } - if (gb->object_priority == GB_OBJECT_PRIORITY_UNDEFINED) { - gb->object_priority = gb->cgb_mode? GB_OBJECT_PRIORITY_INDEX : GB_OBJECT_PRIORITY_X; - } if (gb->sgb) { if (gb->sgb->player_count != 1 && gb->sgb->player_count != 2 && gb->sgb->player_count != 4) { gb->sgb->player_count = 1; } gb->sgb->current_player &= gb->sgb->player_count - 1; } - if (gb->sgb && !gb->sgb->v14_3) { -#ifdef GB_BIG_ENDIAN - for (unsigned i = 0; i < sizeof(gb->sgb->border.raw_data) / 2; i++) { - gb->sgb->border.raw_data[i] = LE16(gb->sgb->border.raw_data[i]); - } - - for (unsigned i = 0; i < sizeof(gb->sgb->pending_border.raw_data) / 2; i++) { - gb->sgb->pending_border.raw_data[i] = LE16(gb->sgb->pending_border.raw_data[i]); - } - - for (unsigned i = 0; i < sizeof(gb->sgb->effective_palettes) / 2; i++) { - gb->sgb->effective_palettes[i] = LE16(gb->sgb->effective_palettes[i]); - } - - for (unsigned i = 0; i < sizeof(gb->sgb->ram_palettes) / 2; i++) { - gb->sgb->ram_palettes[i] = LE16(gb->sgb->ram_palettes[i]); - } -#endif - uint8_t converted_tiles[sizeof(gb->sgb->border.tiles)] = {0,}; - for (unsigned tile = 0; tile < sizeof(gb->sgb->border.tiles_legacy) / 64; tile++) { - for (unsigned y = 0; y < 8; y++) { - unsigned base = tile * 32 + y * 2; - for (unsigned x = 0; x < 8; x++) { - uint8_t pixel = gb->sgb->border.tiles_legacy[tile * 8 * 8 + y * 8 + x]; - if (pixel & 1) converted_tiles[base] |= (1 << (7 ^ x)); - if (pixel & 2) converted_tiles[base + 1] |= (1 << (7 ^ x)); - if (pixel & 4) converted_tiles[base + 16] |= (1 << (7 ^ x)); - if (pixel & 8) converted_tiles[base + 17] |= (1 << (7 ^ x)); - } - } - } - memcpy(gb->sgb->border.tiles, converted_tiles, sizeof(converted_tiles)); - memset(converted_tiles, 0, sizeof(converted_tiles)); - for (unsigned tile = 0; tile < sizeof(gb->sgb->pending_border.tiles_legacy) / 64; tile++) { - for (unsigned y = 0; y < 8; y++) { - unsigned base = tile * 32 + y * 2; - for (unsigned x = 0; x < 8; x++) { - uint8_t pixel = gb->sgb->pending_border.tiles_legacy[tile * 8 * 8 + y * 8 + x]; - if (pixel & 1) converted_tiles[base] |= (1 << (7 ^ x)); - if (pixel & 2) converted_tiles[base + 1] |= (1 << (7 ^ x)); - if (pixel & 4) converted_tiles[base + 16] |= (1 << (7 ^ x)); - if (pixel & 8) converted_tiles[base + 17] |= (1 << (7 ^ x)); - } - } - } - memcpy(gb->sgb->pending_border.tiles, converted_tiles, sizeof(converted_tiles)); - } + GB_update_clock_rate(gb); } static bool dump_section(virtual_file_t *file, const void *src, uint32_t size) @@ -482,7 +433,7 @@ static int save_bess_mbc_block(GB_gameboy_t *gb, virtual_file_t *file) { BESS_block_t mbc_block = {BE32('MBC '), 0}; - BESS_MBC_pair_t pairs[4]; + BESS_MBC_pair_t pairs[8]; switch (gb->cartridge_type->mbc_type) { default: case GB_NO_MBC: return 0; @@ -501,7 +452,7 @@ static int save_bess_mbc_block(GB_gameboy_t *gb, virtual_file_t *file) case GB_MBC3: pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc3.rom_bank}; - pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc3.ram_bank | (gb->mbc3_rtc_mapped? 8 : 0)}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc3.ram_bank | (gb->mbc3.rtc_mapped? 8 : 0)}; mbc_block.size = 3 * sizeof(pairs[0]); break; case GB_MBC5: @@ -511,25 +462,46 @@ static int save_bess_mbc_block(GB_gameboy_t *gb, virtual_file_t *file) pairs[3] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc5.ram_bank}; mbc_block.size = 4 * sizeof(pairs[0]); break; + case GB_CAMERA: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc5.rom_bank_low}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc5.ram_bank}; + mbc_block.size = 3 * sizeof(pairs[0]); + break; + case GB_MBC7: + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->mbc_ram_enable? 0xA : 0x0}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->mbc7.rom_bank}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mbc7.secondary_ram_enable? 0x40 : 0}; + mbc_block.size = 3 * sizeof(pairs[0]); + break; + case GB_MMM01: + pairs[0] = (BESS_MBC_pair_t){LE16(0x2000), (gb->mmm01.rom_bank_low & (gb->mmm01.rom_bank_mask << 1)) | (gb->mmm01.rom_bank_mid << 5)}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x6000), gb->mmm01.mbc1_mode | (gb->mmm01.rom_bank_mask << 2) | (gb->mmm01.multiplex_mode << 6)}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->mmm01.ram_bank_low | (gb->mmm01.ram_bank_high << 2) | (gb->mmm01.rom_bank_high << 4) | (gb->mmm01.mbc1_mode_disable << 6)}; + pairs[3] = (BESS_MBC_pair_t){LE16(0x0000), (gb->mbc_ram_enable? 0xA : 0x0) | (gb->mmm01.ram_bank_mask << 4) | (gb->mmm01.locked << 6)}; + /* For compatibility with emulators that inaccurately emulate MMM01, and also require two writes per register */ + pairs[4] = (BESS_MBC_pair_t){LE16(0x2000), (gb->mmm01.rom_bank_low & ~(gb->mmm01.rom_bank_mask << 1))}; + pairs[5] = pairs[1]; + pairs[6] = pairs[2]; + pairs[7] = pairs[3]; + mbc_block.size = 8 * sizeof(pairs[0]); + break; case GB_HUC1: pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->huc1.ir_mode? 0xE : 0x0}; pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->huc1.bank_low}; pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->huc1.bank_high}; - pairs[3] = (BESS_MBC_pair_t){LE16(0x6000), gb->huc1.mode}; - mbc_block.size = 4 * sizeof(pairs[0]); - + mbc_block.size = 3 * sizeof(pairs[0]); case GB_HUC3: - pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->huc3_mode}; + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->huc3.mode}; pairs[1] = (BESS_MBC_pair_t){LE16(0x2000), gb->huc3.rom_bank}; pairs[2] = (BESS_MBC_pair_t){LE16(0x4000), gb->huc3.ram_bank}; mbc_block.size = 3 * sizeof(pairs[0]); break; - case GB_TPP1: - pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->tpp1_rom_bank}; - pairs[1] = (BESS_MBC_pair_t){LE16(0x0001), gb->tpp1_rom_bank >> 8}; - pairs[2] = (BESS_MBC_pair_t){LE16(0x0002), gb->tpp1_rom_bank}; - pairs[3] = (BESS_MBC_pair_t){LE16(0x0003), gb->tpp1_mode}; + pairs[0] = (BESS_MBC_pair_t){LE16(0x0000), gb->tpp1.rom_bank}; + pairs[1] = (BESS_MBC_pair_t){LE16(0x0001), gb->tpp1.rom_bank >> 8}; + pairs[2] = (BESS_MBC_pair_t){LE16(0x0002), gb->tpp1.rom_bank}; + pairs[3] = (BESS_MBC_pair_t){LE16(0x0003), gb->tpp1.mode}; mbc_block.size = 4 * sizeof(pairs[0]); break; } @@ -547,6 +519,14 @@ static int save_bess_mbc_block(GB_gameboy_t *gb, virtual_file_t *file) return 0; } +static const uint8_t *get_header_bank(GB_gameboy_t *gb) +{ + if (gb->cartridge_type->mbc_type == GB_MMM01) { + return gb->rom + gb->rom_size - 0x8000; + } + return gb->rom; +} + static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool append_bess) { if (file->write(file, GB_GET_SECTION(gb, header), GB_SECTION_SIZE(header)) != GB_SECTION_SIZE(header)) goto error; @@ -564,7 +544,6 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe uint32_t sgb_offset = 0; if (GB_is_hle_sgb(gb)) { - gb->sgb->v14_3 = true; sgb_offset = file->tell(file) + 4; if (!dump_section(file, gb->sgb, sizeof(*gb->sgb))) goto error; } @@ -617,11 +596,13 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe goto error; } - if (file->write(file, gb->rom + 0x134, 0x10) != 0x10) { + const uint8_t *bank = get_header_bank(gb); + + if (file->write(file, bank + 0x134, 0x10) != 0x10) { goto error; } - if (file->write(file, gb->rom + 0x14e, 2) != 2) { + if (file->write(file, bank + 0x14E, 2) != 2) { goto error; } @@ -633,6 +614,7 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe switch (gb->model) { case GB_MODEL_DMG_B: bess_core.full_model = BE32('GDB '); break; + case GB_MODEL_MGB: bess_core.full_model = BE32('GM '); break; case GB_MODEL_SGB_NTSC: case GB_MODEL_SGB_NTSC_NO_SFC: @@ -646,10 +628,15 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe case GB_MODEL_SGB2: bess_core.full_model = BE32('S2 '); break; - + case GB_MODEL_CGB_0: bess_core.full_model = BE32('CC0 '); break; + case GB_MODEL_CGB_A: bess_core.full_model = BE32('CCA '); break; + case GB_MODEL_CGB_B: bess_core.full_model = BE32('CCB '); break; case GB_MODEL_CGB_C: bess_core.full_model = BE32('CCC '); break; + case GB_MODEL_CGB_D: bess_core.full_model = BE32('CCD '); break; case GB_MODEL_CGB_E: bess_core.full_model = BE32('CCE '); break; - case GB_MODEL_AGB: bess_core.full_model = BE32('CA '); break; // SameBoy doesn't emulate a specific AGB revision yet + case GB_MODEL_AGB_A: + case GB_MODEL_GBP_A: + bess_core.full_model = BE32('CAA '); break; } bess_core.pc = LE16(gb->pc); @@ -680,8 +667,8 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe if (GB_is_cgb(gb)) { bess_core.background_palettes.size = LE32(sizeof(gb->background_palettes_data)); bess_core.background_palettes.offset = LE32(video_offset + offsetof(GB_gameboy_t, background_palettes_data) - GB_SECTION_OFFSET(video)); - bess_core.sprite_palettes.size = LE32(sizeof(gb->sprite_palettes_data)); - bess_core.sprite_palettes.offset = LE32(video_offset + offsetof(GB_gameboy_t, sprite_palettes_data) - GB_SECTION_OFFSET(video)); + bess_core.object_palettes.size = LE32(sizeof(gb->object_palettes_data)); + bess_core.object_palettes.offset = LE32(video_offset + offsetof(GB_gameboy_t, object_palettes_data) - GB_SECTION_OFFSET(video)); } if (file->write(file, &bess_core, sizeof(bess_core)) != sizeof(bess_core)) { @@ -741,11 +728,11 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe bess_huc3.data = (GB_huc3_rtc_time_t) { LE64(gb->last_rtc_second), - LE16(gb->huc3_minutes), - LE16(gb->huc3_days), - LE16(gb->huc3_alarm_minutes), - LE16(gb->huc3_alarm_days), - gb->huc3_alarm_enabled, + LE16(gb->huc3.minutes), + LE16(gb->huc3.days), + LE16(gb->huc3.alarm_minutes), + LE16(gb->huc3.alarm_days), + gb->huc3.alarm_enabled, }; if (file->write(file, &bess_huc3, sizeof(bess_huc3)) != sizeof(bess_huc3)) { goto error; @@ -753,6 +740,30 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe } } + if (gb->cartridge_type ->mbc_type == GB_MBC7) { + BESS_MBC7_t bess_mbc7 = { + .latch_ready = gb->mbc7.latch_ready, + .eeprom_do = gb->mbc7.eeprom_do, + .eeprom_di = gb->mbc7.eeprom_di, + .eeprom_clk = gb->mbc7.eeprom_clk, + .eeprom_cs = gb->mbc7.eeprom_cs, + .eeprom_write_enabled = gb->mbc7.eeprom_write_enabled, + + .argument_bits_left = gb->mbc7.argument_bits_left, + + .eeprom_command = LE16(gb->mbc7.eeprom_command), + .read_bits = LE16(gb->mbc7.read_bits), + + .x_latch = LE16(gb->mbc7.x_latch), + .y_latch = LE16(gb->mbc7.y_latch), + }; + bess_mbc7.header = (BESS_block_t){BE32('MBC7'), LE32(sizeof(bess_mbc7) - sizeof(bess_mbc7.header))}; + + if (file->write(file, &bess_mbc7, sizeof(bess_mbc7)) != sizeof(bess_mbc7)) { + goto error; + } + } + bool needs_sgb_padding = false; if (gb->sgb) { /* BESS SGB */ @@ -1038,6 +1049,11 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo // Interrupts GB_write_memory(&save, 0xFF00 + GB_IO_IF, core.io_registers[GB_IO_IF]); + /* Required to be compatible with both SameBoy 0.14.x AND BGB */ + if (GB_is_cgb(&save) && !save.cgb_mode && save.cgb_ram_bank == 7) { + save.cgb_ram_bank = 1; + } + break; case BE32('NAME'): if (LE32(block.size) > sizeof(emulator_name) - 1) { @@ -1051,7 +1067,8 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo BESS_INFO_t bess_info = {0,}; if (LE32(block.size) != sizeof(bess_info) - sizeof(block)) goto parse_error; if (file->read(file, &bess_info.header + 1, LE32(block.size)) != LE32(block.size)) goto error; - if (memcmp(bess_info.title, gb->rom + 0x134, sizeof(bess_info.title))) { + const uint8_t *bank = get_header_bank(gb); + if (memcmp(bess_info.title, bank + 0x134, sizeof(bess_info.title))) { char ascii_title[0x11] = {0,}; for (unsigned i = 0; i < 0x10; i++) { if (bess_info.title[i] < 0x20 || bess_info.title[i] > 0x7E) break; @@ -1059,7 +1076,7 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo } GB_log(gb, "Save state was made on another ROM: '%s'\n", ascii_title); } - else if (memcmp(bess_info.checksum, gb->rom + 0x14E, 2)) { + else if (memcmp(bess_info.checksum, bank + 0x14E, 2)) { GB_log(gb, "Save state was potentially made on another revision of the same ROM.\n"); } break; @@ -1072,7 +1089,12 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo case BE32('MBC '): if (!found_core) goto parse_error; if (LE32(block.size) % 3 != 0) goto parse_error; - if (LE32(block.size) > 0x1000) goto parse_error; + if (LE32(block.size) > 0x1000) goto parse_error; + /* Inject some default writes, as some emulators omit them */ + if (gb->cartridge_type->mbc_type == GB_MMM01) { + GB_write_memory(&save, 0x6000, 0x30); + GB_write_memory(&save, 0x4000, 0x70); + } for (unsigned i = LE32(block.size); i > 0; i -= 3) { BESS_MBC_pair_t pair; file->read(file, &pair, sizeof(pair)); @@ -1111,11 +1133,11 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo if (gb->rtc_mode == GB_RTC_MODE_SYNC_TO_HOST) { save.last_rtc_second = MIN(LE64(bess_huc3.data.last_rtc_second), time(NULL)); } - save.huc3_minutes = LE16(bess_huc3.data.minutes); - save.huc3_days = LE16(bess_huc3.data.days); - save.huc3_alarm_minutes = LE16(bess_huc3.data.alarm_minutes); - save.huc3_alarm_days = LE16(bess_huc3.data.alarm_days); - save.huc3_alarm_enabled = bess_huc3.data.alarm_enabled; + save.huc3.minutes = LE16(bess_huc3.data.minutes); + save.huc3.days = LE16(bess_huc3.data.days); + save.huc3.alarm_minutes = LE16(bess_huc3.data.alarm_minutes); + save.huc3.alarm_days = LE16(bess_huc3.data.alarm_days); + save.huc3.alarm_enabled = bess_huc3.data.alarm_enabled; break; case BE32('TPP1'): if (!found_core) goto parse_error; @@ -1131,6 +1153,29 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo save.rtc_latched.data[i ^ 3] = bess_tpp1.latched_rtc_data[i]; } save.tpp1_mr4 = bess_tpp1.mr4; + break; + case BE32('MBC7'): + if (!found_core) goto parse_error; + BESS_MBC7_t bess_mbc7; + if (LE32(block.size) != sizeof(bess_mbc7) - sizeof(block)) goto parse_error; + if (file->read(file, &bess_mbc7.header + 1, LE32(block.size)) != LE32(block.size)) goto error; + if (gb->cartridge_type->mbc_type != GB_MBC7) break; + + save.mbc7.latch_ready = bess_mbc7.latch_ready; + save.mbc7.eeprom_do = bess_mbc7.eeprom_do; + save.mbc7.eeprom_di = bess_mbc7.eeprom_di; + save.mbc7.eeprom_clk = bess_mbc7.eeprom_clk; + save.mbc7.eeprom_cs = bess_mbc7.eeprom_cs; + save.mbc7.eeprom_write_enabled = bess_mbc7.eeprom_write_enabled; + + save.mbc7.argument_bits_left = bess_mbc7.argument_bits_left; + + save.mbc7.eeprom_command = LE16(bess_mbc7.eeprom_command); + save.mbc7.read_bits = LE16(bess_mbc7.read_bits); + + save.mbc7.x_latch = LE16(bess_mbc7.x_latch); + save.mbc7.y_latch = LE16(bess_mbc7.y_latch); + break; case BE32('SGB '): if (!found_core) goto parse_error; @@ -1164,7 +1209,7 @@ static int load_bess_save(GB_gameboy_t *gb, virtual_file_t *file, bool is_samebo read_bess_buffer(&core.oam, file, gb->oam, sizeof(gb->oam)); read_bess_buffer(&core.hram, file, gb->hram, sizeof(gb->hram)); read_bess_buffer(&core.background_palettes, file, gb->background_palettes_data, sizeof(gb->background_palettes_data)); - read_bess_buffer(&core.sprite_palettes, file, gb->sprite_palettes_data, sizeof(gb->sprite_palettes_data)); + read_bess_buffer(&core.object_palettes, file, gb->object_palettes_data, sizeof(gb->object_palettes_data)); if (gb->sgb) { memset(gb->sgb, 0, sizeof(*gb->sgb)); GB_sgb_load_default_data(gb); diff --git a/thirdparty/SameBoy/Core/save_state.h b/thirdparty/SameBoy/Core/save_state.h index bf43a65ca..acb6b89bd 100644 --- a/thirdparty/SameBoy/Core/save_state.h +++ b/thirdparty/SameBoy/Core/save_state.h @@ -8,9 +8,14 @@ #ifdef __cplusplus /* For bsnes integration. C++ code does not need section information, and throws a fit over certain types such as anonymous enums inside unions */ +#if __clang__ #define GB_SECTION(name, ...) __attribute__ ((aligned (8))) __VA_ARGS__ #else -#define GB_SECTION(name, ...) union __attribute__ ((aligned (8))) {uint8_t name##_section_start; struct {__VA_ARGS__};}; uint8_t name##_section_end[0] +// GCC's handling of attributes is so awfully bad, that it is alone a good enough reason to never use that compiler +#define GB_SECTION(name, ...) _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wpedantic\"") alignas(8) char _align_##name[0]; __VA_ARGS__ _Pragma("GCC diagnostic pop") +#endif +#else +#define GB_SECTION(name, ...) union __attribute__ ((aligned (8))) {uint8_t name##_section_start; struct {__VA_ARGS__};}; uint8_t name##_section_end[0]; #define GB_SECTION_OFFSET(name) (offsetof(GB_gameboy_t, name##_section_start)) #define GB_SECTION_SIZE(name) (offsetof(GB_gameboy_t, name##_section_end) - offsetof(GB_gameboy_t, name##_section_start)) #define GB_GET_SECTION(gb, name) ((void*)&((gb)->name##_section_start)) @@ -36,8 +41,8 @@ static inline uint32_t state_magic(void) } /* For internal in-memory save states (rewind, debugger) that do not need BESS */ -size_t GB_get_save_state_size_no_bess(GB_gameboy_t *gb); -void GB_save_state_to_buffer_no_bess(GB_gameboy_t *gb, uint8_t *buffer); +internal size_t GB_get_save_state_size_no_bess(GB_gameboy_t *gb); +internal void GB_save_state_to_buffer_no_bess(GB_gameboy_t *gb, uint8_t *buffer); #endif #endif /* save_state_h */ diff --git a/thirdparty/SameBoy/Core/sgb.c b/thirdparty/SameBoy/Core/sgb.c index 0e5326686..891a27dd9 100644 --- a/thirdparty/SameBoy/Core/sgb.c +++ b/thirdparty/SameBoy/Core/sgb.c @@ -165,7 +165,7 @@ static void command_ready(GB_gameboy_t *gb) return; } memcpy(&gb->sgb->received_header[index * 14], &gb->sgb->command[2], 14); - if (gb->sgb->command[0] == 0xfb) { + if (gb->sgb->command[0] == 0xFB) { if (gb->sgb->received_header[0x42] != 3 || gb->sgb->received_header[0x47] != 0x33) { gb->sgb->disable_commands = true; for (unsigned i = 0; i < sizeof(palette_assignments) / sizeof(palette_assignments[0]); i++) { @@ -262,9 +262,7 @@ static void command_ready(GB_gameboy_t *gb) } *command = (void *)(gb->sgb->command + 1); uint16_t count = command->length; -#ifdef GB_BIG_ENDIAN - count = __builtin_bswap16(count); -#endif + count = LE16(count); uint8_t x = command->x; uint8_t y = command->y; if (x >= 20 || y >= 18) { @@ -641,9 +639,7 @@ void GB_sgb_render(GB_gameboy_t *gb) for (unsigned x = 0; x < 8; x++) { *data |= pixel_to_bits[gb->sgb->screen_buffer[(tile_x + x) + (tile_y + y) * 160] & 3] >> x; } -#ifdef GB_BIG_ENDIAN - *data = __builtin_bswap16(*data); -#endif + *data = LE16(*data); data++; } } diff --git a/thirdparty/SameBoy/Core/sgb.h b/thirdparty/SameBoy/Core/sgb.h index 1e1a5c28b..3069c368e 100644 --- a/thirdparty/SameBoy/Core/sgb.h +++ b/thirdparty/SameBoy/Core/sgb.h @@ -1,15 +1,13 @@ #ifndef sgb_h #define sgb_h -#include "gb_struct_def.h" +#include "defs.h" #include #include typedef struct GB_sgb_s GB_sgb_t; typedef struct { - union { - uint8_t tiles[0x100 * 8 * 4]; - uint8_t tiles_legacy[0x100 * 8 * 8]; /* High nibble not used; TODO: Remove when breaking save-state compatibility! */ - }; + uint8_t tiles[0x100 * 8 * 4]; +#ifdef GB_INTERNAL union { struct { uint16_t map[32 * 32]; @@ -17,6 +15,9 @@ typedef struct { }; uint16_t raw_data[0x440]; }; +#else + uint16_t raw_data[0x440]; +#endif } GB_sgb_border_t; #ifdef GB_INTERNAL @@ -59,16 +60,11 @@ struct GB_sgb_s { /* GB Header */ uint8_t received_header[0x54]; - - /* Multiplayer (cont) */ - GB_PADDING(bool, mlt_lock); - - bool v14_3; // True on save states created on 0.14.3 or newer; Remove when breaking save state compatibility! }; -void GB_sgb_write(GB_gameboy_t *gb, uint8_t value); -void GB_sgb_render(GB_gameboy_t *gb); -void GB_sgb_load_default_data(GB_gameboy_t *gb); +internal void GB_sgb_write(GB_gameboy_t *gb, uint8_t value); +internal void GB_sgb_render(GB_gameboy_t *gb); +internal void GB_sgb_load_default_data(GB_gameboy_t *gb); #endif diff --git a/thirdparty/SameBoy/Core/sm83_cpu.c b/thirdparty/SameBoy/Core/sm83_cpu.c index d4829d586..f2f704723 100644 --- a/thirdparty/SameBoy/Core/sm83_cpu.c +++ b/thirdparty/SameBoy/Core/sm83_cpu.c @@ -4,7 +4,7 @@ #include "gb.h" -typedef void GB_opcode_t(GB_gameboy_t *gb, uint8_t opcode); +typedef void opcode_t(GB_gameboy_t *gb, uint8_t opcode); typedef enum { /* Default behavior. If the CPU writes while another component reads, it reads the old value */ @@ -23,10 +23,11 @@ typedef enum { GB_CONFLICT_WX, GB_CONFLICT_CGB_LCDC, GB_CONFLICT_NR10, -} GB_conflict_t; + GB_CONFLICT_CGB_SCX, +} conflict_t; /* Todo: How does double speed mode affect these? */ -static const GB_conflict_t cgb_conflict_map[0x80] = { +static const conflict_t cgb_conflict_map[0x80] = { [GB_IO_LCDC] = GB_CONFLICT_CGB_LCDC, [GB_IO_IF] = GB_CONFLICT_WRITE_CPU, [GB_IO_LYC] = GB_CONFLICT_WRITE_CPU, @@ -35,13 +36,11 @@ static const GB_conflict_t cgb_conflict_map[0x80] = { [GB_IO_OBP0] = GB_CONFLICT_PALETTE_CGB, [GB_IO_OBP1] = GB_CONFLICT_PALETTE_CGB, [GB_IO_NR10] = GB_CONFLICT_NR10, - [GB_IO_SCX] = GB_CONFLICT_WRITE_CPU, // TODO: Similar to BGP, there's some time travelling involved - - /* Todo: most values not verified, and probably differ between revisions */ + [GB_IO_SCX] = GB_CONFLICT_CGB_SCX, }; /* Todo: verify on an MGB */ -static const GB_conflict_t dmg_conflict_map[0x80] = { +static const conflict_t dmg_conflict_map[0x80] = { [GB_IO_IF] = GB_CONFLICT_WRITE_CPU, [GB_IO_LYC] = GB_CONFLICT_READ_OLD, [GB_IO_LCDC] = GB_CONFLICT_DMG_LCDC, @@ -60,7 +59,7 @@ static const GB_conflict_t dmg_conflict_map[0x80] = { }; /* Todo: Verify on an SGB1 */ -static const GB_conflict_t sgb_conflict_map[0x80] = { +static const conflict_t sgb_conflict_map[0x80] = { [GB_IO_IF] = GB_CONFLICT_WRITE_CPU, [GB_IO_LYC] = GB_CONFLICT_READ_OLD, [GB_IO_LCDC] = GB_CONFLICT_SGB_LCDC, @@ -109,9 +108,9 @@ static uint8_t cycle_write_if(GB_gameboy_t *gb, uint8_t value) static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) { assert(gb->pending_cycles); - GB_conflict_t conflict = GB_CONFLICT_READ_OLD; + conflict_t conflict = GB_CONFLICT_READ_OLD; if ((addr & 0xFF80) == 0xFF00) { - const GB_conflict_t *map = NULL; + const conflict_t *map = NULL; if (GB_is_cgb(gb)) { map = cgb_conflict_map; } @@ -145,6 +144,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) /* The DMG STAT-write bug is basically the STAT register being read as FF for a single T-cycle */ case GB_CONFLICT_STAT_DMG: GB_advance_cycles(gb, gb->pending_cycles); + GB_display_sync(gb); /* State 7 is the edge between HBlank and OAM mode, and it behaves a bit weird. The OAM interrupt seems to be blocked by HBlank interrupts in that case, despite the timing not making much sense for that. @@ -198,7 +198,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) /* Similar to the palette registers, these interact directly with the LCD, so they appear to be affected by it. Both my DMG (B, blob) and Game Boy Light behave this way though. Additionally, LCDC.1 is very nasty because on the it is read both by the FIFO when popping pixels, - and the sprite-fetching state machine, and both behave differently when it comes to access conflicts. + and the object-fetching state machine, and both behave differently when it comes to access conflicts. Hacks ahead. */ @@ -206,14 +206,18 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) uint8_t old_value = GB_read_memory(gb, addr); GB_advance_cycles(gb, gb->pending_cycles - 2); - - if (/* gb->model != GB_MODEL_MGB && */ gb->position_in_line == 0 && (old_value & 2) && !(value & 2)) { - old_value &= ~2; + GB_display_sync(gb); + if (gb->model != GB_MODEL_MGB && gb->position_in_line == 0 && (old_value & GB_LCDC_OBJ_EN) && !(value & GB_LCDC_OBJ_EN)) { + old_value &= ~GB_LCDC_OBJ_EN; } - GB_write_memory(gb, addr, old_value | (value & 1)); + GB_write_memory(gb, addr, old_value | (value & GB_LCDC_BG_EN)); GB_advance_cycles(gb, 1); GB_write_memory(gb, addr, value); + + if ((old_value & GB_LCDC_WIN_ENABLE) && !(value & GB_LCDC_WIN_ENABLE) && gb->window_is_being_fetched) { + gb->disable_window_pixel_insertion_glitch = true; + } gb->pending_cycles = 5; break; } @@ -242,11 +246,11 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) break; case GB_CONFLICT_CGB_LCDC: - if ((value ^ gb->io_registers[GB_IO_LCDC]) & 0x10) { + if ((~value & gb->io_registers[GB_IO_LCDC]) & GB_LCDC_TILE_SEL) { // Todo: This is difference is because my timing is off in one of the models if (gb->model > GB_MODEL_CGB_C) { GB_advance_cycles(gb, gb->pending_cycles); - GB_write_memory(gb, addr, value ^ 0x10); // Write with the old TILE_SET first + GB_write_memory(gb, addr, value ^ GB_LCDC_TILE_SEL); // Write with the old TILE_SET first gb->tile_sel_glitch = true; GB_advance_cycles(gb, 1); gb->tile_sel_glitch = false; @@ -255,7 +259,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } else { GB_advance_cycles(gb, gb->pending_cycles - 1); - GB_write_memory(gb, addr, value ^ 0x10); // Write with the old TILE_SET first + GB_write_memory(gb, addr, value ^ GB_LCDC_TILE_SEL); // Write with the old TILE_SET first gb->tile_sel_glitch = true; GB_advance_cycles(gb, 1); gb->tile_sel_glitch = false; @@ -277,6 +281,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_advance_cycles(gb, gb->pending_cycles); if (gb->model <= GB_MODEL_CGB_C) { // TODO: Double speed mode? This logic is also a bit weird, it needs more tests + GB_apu_run(gb, true); if (gb->apu.square_sweep_calculate_countdown > 3 && gb->apu.enable_zombie_calculate_stepping) { gb->apu.square_sweep_calculate_countdown -= 2; } @@ -289,6 +294,19 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_write_memory(gb, addr, value); gb->pending_cycles = 4; break; + + case GB_CONFLICT_CGB_SCX: + if (gb->cgb_double_speed) { + GB_advance_cycles(gb, gb->pending_cycles - 2); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 6; + } + else { + GB_advance_cycles(gb, gb->pending_cycles); + GB_write_memory(gb, addr, value); + gb->pending_cycles = 4; + } + break; } gb->address_bus = addr; } @@ -346,6 +364,7 @@ static void enter_stop_mode(GB_gameboy_t *gb) gb->div_cycles = -4; // Emulate the CPU-side DIV-reset signal being held } gb->stopped = true; + gb->allow_hdma_on_wake = (gb->io_registers[GB_IO_STAT] & 3); gb->oam_ppu_blocked = !gb->oam_read_blocked; gb->vram_ppu_blocked = !gb->vram_read_blocked; gb->cgb_palettes_ppu_blocked = !gb->cgb_palettes_blocked; @@ -354,6 +373,12 @@ static void enter_stop_mode(GB_gameboy_t *gb) static void leave_stop_mode(GB_gameboy_t *gb) { gb->stopped = false; + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->allow_hdma_on_wake) { + gb->hdma_on = true; + } + // TODO: verify this + gb->dma_cycles = 4; + GB_dma_run(gb); gb->oam_ppu_blocked = false; gb->vram_ppu_blocked = false; gb->cgb_palettes_ppu_blocked = false; @@ -363,12 +388,18 @@ static void leave_stop_mode(GB_gameboy_t *gb) static void stop(GB_gameboy_t *gb, uint8_t opcode) { flush_pending_cycles(gb); + if ((gb->io_registers[GB_IO_JOYP] & 0x30) != 0x30) { + gb->joyp_accessed = true; + } bool exit_by_joyp = ((gb->io_registers[GB_IO_JOYP] & 0xF) != 0xF); bool speed_switch = (gb->io_registers[GB_IO_KEY1] & 0x1) && !exit_by_joyp; bool immediate_exit = speed_switch || exit_by_joyp; bool interrupt_pending = (gb->interrupt_enable & gb->io_registers[GB_IO_IF] & 0x1F); // When entering with IF&IE, the 2nd byte of STOP is actually executed if (!exit_by_joyp) { + if (!immediate_exit) { + GB_dma_run(gb); + } enter_stop_mode(gb); } @@ -380,7 +411,7 @@ static void stop(GB_gameboy_t *gb, uint8_t opcode) if (speed_switch) { flush_pending_cycles(gb); - if (gb->io_registers[GB_IO_LCDC] & 0x80 && gb->cgb_double_speed) { + if (gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE && gb->cgb_double_speed) { GB_log(gb, "ROM triggered a PPU odd mode, which is currently not supported. Reverting to even-mode.\n"); if (gb->double_speed_alignment & 7) { gb->speed_switch_freeze = 2; @@ -389,6 +420,9 @@ static void stop(GB_gameboy_t *gb, uint8_t opcode) if (gb->apu.global_enable && gb->cgb_double_speed) { GB_log(gb, "ROM triggered an APU odd mode, which is currently not tested.\n"); } + if (gb->cartridge_type->mbc_type == GB_CAMERA && (gb->camera_registers[GB_CAMERA_SHOOT_AND_1D_FLAGS] & 1) && !gb->cgb_double_speed) { + GB_log(gb, "ROM entered double speed mode with a camera cartridge, this could damage a real cartridge's camera.\n"); + } if (gb->cgb_double_speed) { gb->cgb_double_speed = false; @@ -411,8 +445,10 @@ static void stop(GB_gameboy_t *gb, uint8_t opcode) if (immediate_exit) { leave_stop_mode(gb); if (!interrupt_pending) { + GB_dma_run(gb); gb->halted = true; gb->just_halted = true; + gb->allow_hdma_on_wake = (gb->io_registers[GB_IO_STAT] & 3); } else { gb->speed_switch_halt_countdown = 0; @@ -655,8 +691,8 @@ static bool condition_code(GB_gameboy_t *gb, uint8_t opcode) return !(gb->af & GB_CARRY_FLAG); case 3: return (gb->af & GB_CARRY_FLAG); + nodefault; } - __builtin_unreachable(); return false; } @@ -855,7 +891,7 @@ static void ld_##dhl##_##y(GB_gameboy_t *gb, uint8_t opcode) \ cycle_write(gb, gb->hl, gb->y); \ } -LD_X_Y(b,c) LD_X_Y(b,d) LD_X_Y(b,e) LD_X_Y(b,h) LD_X_Y(b,l) LD_X_DHL(b) LD_X_Y(b,a) + LD_X_Y(b,c) LD_X_Y(b,d) LD_X_Y(b,e) LD_X_Y(b,h) LD_X_Y(b,l) LD_X_DHL(b) LD_X_Y(b,a) LD_X_Y(c,b) LD_X_Y(c,d) LD_X_Y(c,e) LD_X_Y(c,h) LD_X_Y(c,l) LD_X_DHL(c) LD_X_Y(c,a) LD_X_Y(d,b) LD_X_Y(d,c) LD_X_Y(d,e) LD_X_Y(d,h) LD_X_Y(d,l) LD_X_DHL(d) LD_X_Y(d,a) LD_X_Y(e,b) LD_X_Y(e,c) LD_X_Y(e,d) LD_X_Y(e,h) LD_X_Y(e,l) LD_X_DHL(e) LD_X_Y(e,a) @@ -931,7 +967,7 @@ static void sbc_a_r(GB_gameboy_t *gb, uint8_t opcode) value = get_src_value(gb, opcode); a = gb->af >> 8; carry = (gb->af & GB_CARRY_FLAG) != 0; - gb->af = ((a - value - carry) << 8) | GB_SUBTRACT_FLAG; + gb->af = (((uint8_t)(a - value - carry)) << 8) | GB_SUBTRACT_FLAG; if ((uint8_t) (a - value - carry) == 0) { gb->af |= GB_ZERO_FLAG; @@ -1001,7 +1037,6 @@ static void halt(GB_gameboy_t *gb, uint8_t opcode) gb->pending_cycles = 0; GB_advance_cycles(gb, 4); - gb->halted = true; /* Despite what some online documentations say, the HALT bug also happens on a CGB, in both CGB and DMG modes. */ if (((gb->interrupt_enable & gb->io_registers[GB_IO_IF] & 0x1F) != 0)) { if (gb->ime) { @@ -1013,6 +1048,10 @@ static void halt(GB_gameboy_t *gb, uint8_t opcode) gb->halt_bug = true; } } + else { + gb->halted = true; + gb->allow_hdma_on_wake = (gb->io_registers[GB_IO_STAT] & 3); + } gb->just_halted = true; } @@ -1354,7 +1393,7 @@ static void rlc_r(GB_gameboy_t *gb, uint8_t opcode) if (carry) { gb->af |= GB_CARRY_FLAG; } - if (!(value << 1)) { + if (value == 0) { gb->af |= GB_ZERO_FLAG; } } @@ -1530,7 +1569,7 @@ static void cb_prefix(GB_gameboy_t *gb, uint8_t opcode) } } -static GB_opcode_t *opcodes[256] = { +static opcode_t *opcodes[256] = { /* X0 X1 X2 X3 X4 X5 X6 X7 */ /* X8 X9 Xa Xb Xc Xd Xe Xf */ nop, ld_rr_d16, ld_drr_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, rlca, /* 0X */ @@ -1568,13 +1607,12 @@ static GB_opcode_t *opcodes[256] = { }; void GB_cpu_run(GB_gameboy_t *gb) { - if (gb->hdma_on) { - GB_advance_cycles(gb, 4); - return; - } if (gb->stopped) { GB_timing_sync(gb); GB_advance_cycles(gb, 4); + if ((gb->io_registers[GB_IO_JOYP] & 0x30) != 0x30) { + gb->joyp_accessed = true; + } if ((gb->io_registers[GB_IO_JOYP] & 0xF) != 0xF) { leave_stop_mode(gb); GB_advance_cycles(gb, 8); @@ -1606,16 +1644,27 @@ void GB_cpu_run(GB_gameboy_t *gb) /* Wake up from HALT mode without calling interrupt code. */ if (gb->halted && !effective_ime && interrupt_queue) { gb->halted = false; + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->allow_hdma_on_wake) { + gb->hdma_on = true; + } + gb->dma_cycles = 4; + GB_dma_run(gb); gb->speed_switch_halt_countdown = 0; } /* Call interrupt */ else if (effective_ime && interrupt_queue) { gb->halted = false; + if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0 && gb->allow_hdma_on_wake) { + gb->hdma_on = true; + } + // TODO: verify the timing! + gb->dma_cycles = 4; + GB_dma_run(gb); gb->speed_switch_halt_countdown = 0; uint16_t call_addr = gb->pc; - gb->last_opcode_read = cycle_read(gb, gb->pc++); + cycle_read(gb, gb->pc++); cycle_oam_bug_pc(gb); gb->pc--; GB_trigger_oam_bug(gb, gb->sp); /* Todo: test T-cycle timing */ @@ -1639,6 +1688,10 @@ void GB_cpu_run(GB_gameboy_t *gb) interrupt_queue >>= 1; interrupt_bit++; } + assert(gb->pending_cycles > 2); + gb->pending_cycles -= 2; + flush_pending_cycles(gb); + gb->pending_cycles = 2; gb->io_registers[GB_IO_IF] &= ~(1 << interrupt_bit); gb->pc = interrupt_bit * 8 + 0x40; } @@ -1650,19 +1703,19 @@ void GB_cpu_run(GB_gameboy_t *gb) } /* Run mode */ else if (!gb->halted) { - gb->last_opcode_read = cycle_read(gb, gb->pc++); - if (gb->halt_bug) { + uint8_t opcode = gb->hdma_open_bus = cycle_read(gb, gb->pc++); + if (unlikely(gb->hdma_on)) { + GB_hdma_run(gb); + } + if (unlikely(gb->execution_callback)) { + gb->execution_callback(gb, gb->pc - 1, opcode); + } + if (unlikely(gb->halt_bug)) { gb->pc--; gb->halt_bug = false; } - opcodes[gb->last_opcode_read](gb, gb->last_opcode_read); + opcodes[opcode](gb, opcode); } flush_pending_cycles(gb); - - if (gb->hdma_starting) { - gb->hdma_starting = false; - gb->hdma_on = true; - gb->hdma_cycles = -8; - } } diff --git a/thirdparty/SameBoy/Core/sm83_cpu.h b/thirdparty/SameBoy/Core/sm83_cpu.h index 49fa80b5a..1221fd763 100644 --- a/thirdparty/SameBoy/Core/sm83_cpu.h +++ b/thirdparty/SameBoy/Core/sm83_cpu.h @@ -1,11 +1,11 @@ #ifndef sm83_cpu_h #define sm83_cpu_h -#include "gb_struct_def.h" +#include "defs.h" #include void GB_cpu_disassemble(GB_gameboy_t *gb, uint16_t pc, uint16_t count); #ifdef GB_INTERNAL -void GB_cpu_run(GB_gameboy_t *gb); +internal void GB_cpu_run(GB_gameboy_t *gb); #endif #endif /* sm83_cpu_h */ diff --git a/thirdparty/SameBoy/Core/sm83_disassembler.c b/thirdparty/SameBoy/Core/sm83_disassembler.c index 7dacd9ebc..b3d583630 100644 --- a/thirdparty/SameBoy/Core/sm83_disassembler.c +++ b/thirdparty/SameBoy/Core/sm83_disassembler.c @@ -2,8 +2,9 @@ #include #include "gb.h" +#define GB_read_memory GB_safe_read_memory -typedef void GB_opcode_t(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc); +typedef void opcode_t(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc); static void ill(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) { @@ -518,7 +519,7 @@ static void ld_da8_a(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) { (*pc)++; uint8_t addr = GB_read_memory(gb, (*pc)++); - const char *symbol = GB_debugger_name_for_address(gb, 0xff00 + addr); + const char *symbol = GB_debugger_name_for_address(gb, 0xFF00 + addr); if (symbol) { GB_log(gb, "LDH [%s & $FF], a ; =$%02x\n", symbol, addr); } @@ -531,7 +532,7 @@ static void ld_a_da8(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) { (*pc)++; uint8_t addr = GB_read_memory(gb, (*pc)++); - const char *symbol = GB_debugger_name_for_address(gb, 0xff00 + addr); + const char *symbol = GB_debugger_name_for_address(gb, 0xFF00 + addr); if (symbol) { GB_log(gb, "LDH a, [%s & $FF] ; =$%02x\n", symbol, addr); } @@ -716,7 +717,7 @@ static void cb_prefix(GB_gameboy_t *gb, uint8_t opcode, uint16_t *pc) } } -static GB_opcode_t *opcodes[256] = { +static opcode_t *opcodes[256] = { /* X0 X1 X2 X3 X4 X5 X6 X7 */ /* X8 X9 Xa Xb Xc Xd Xe Xf */ nop, ld_rr_d16, ld_drr_a, inc_rr, inc_hr, dec_hr, ld_hr_d8, rlca, /* 0X */ diff --git a/thirdparty/SameBoy/Core/symbol_hash.c b/thirdparty/SameBoy/Core/symbol_hash.c index a3718b830..2b2758f80 100644 --- a/thirdparty/SameBoy/Core/symbol_hash.c +++ b/thirdparty/SameBoy/Core/symbol_hash.c @@ -4,7 +4,7 @@ #include #include -static size_t GB_map_find_symbol_index(GB_symbol_map_t *map, uint16_t addr) +static size_t map_find_symbol_index(GB_symbol_map_t *map, uint16_t addr) { if (!map->symbols) { return 0; @@ -26,7 +26,7 @@ static size_t GB_map_find_symbol_index(GB_symbol_map_t *map, uint16_t addr) GB_bank_symbol_t *GB_map_add_symbol(GB_symbol_map_t *map, uint16_t addr, const char *name) { - size_t index = GB_map_find_symbol_index(map, addr); + size_t index = map_find_symbol_index(map, addr); map->symbols = realloc(map->symbols, (map->n_symbols + 1) * sizeof(map->symbols[0])); memmove(&map->symbols[index + 1], &map->symbols[index], (map->n_symbols - index) * sizeof(map->symbols[0])); @@ -39,11 +39,14 @@ GB_bank_symbol_t *GB_map_add_symbol(GB_symbol_map_t *map, uint16_t addr, const c const GB_bank_symbol_t *GB_map_find_symbol(GB_symbol_map_t *map, uint16_t addr) { if (!map) return NULL; - size_t index = GB_map_find_symbol_index(map, addr); + size_t index = map_find_symbol_index(map, addr); if (index >= map->n_symbols || map->symbols[index].addr != addr) { index--; } if (index < map->n_symbols) { + while (index && map->symbols[index].addr == map->symbols[index - 1].addr) { + index--; + } return &map->symbols[index]; } return NULL; @@ -74,13 +77,13 @@ static unsigned hash_name(const char *name) unsigned r = 0; while (*name) { r <<= 1; - if (r & 0x400) { - r ^= 0x401; + if (r & 0x2000) { + r ^= 0x2001; } - r += (unsigned char)*(name++); + r ^= (unsigned char)*(name++); } - return r & 0x3FF; + return r; } void GB_reversed_map_add_symbol(GB_reversed_symbol_map_t *map, uint16_t bank, GB_bank_symbol_t *bank_symbol) diff --git a/thirdparty/SameBoy/Core/symbol_hash.h b/thirdparty/SameBoy/Core/symbol_hash.h index 2a03c96bb..47d488424 100644 --- a/thirdparty/SameBoy/Core/symbol_hash.h +++ b/thirdparty/SameBoy/Core/symbol_hash.h @@ -23,16 +23,16 @@ typedef struct { } GB_symbol_map_t; typedef struct { - GB_symbol_t *buckets[0x400]; + GB_symbol_t *buckets[0x2000]; } GB_reversed_symbol_map_t; #ifdef GB_INTERNAL -void GB_reversed_map_add_symbol(GB_reversed_symbol_map_t *map, uint16_t bank, GB_bank_symbol_t *symbol); -const GB_symbol_t *GB_reversed_map_find_symbol(GB_reversed_symbol_map_t *map, const char *name); -GB_bank_symbol_t *GB_map_add_symbol(GB_symbol_map_t *map, uint16_t addr, const char *name); -const GB_bank_symbol_t *GB_map_find_symbol(GB_symbol_map_t *map, uint16_t addr); -GB_symbol_map_t *GB_map_alloc(void); -void GB_map_free(GB_symbol_map_t *map); +internal void GB_reversed_map_add_symbol(GB_reversed_symbol_map_t *map, uint16_t bank, GB_bank_symbol_t *symbol); +internal const GB_symbol_t *GB_reversed_map_find_symbol(GB_reversed_symbol_map_t *map, const char *name); +internal GB_bank_symbol_t *GB_map_add_symbol(GB_symbol_map_t *map, uint16_t addr, const char *name); +internal const GB_bank_symbol_t *GB_map_find_symbol(GB_symbol_map_t *map, uint16_t addr); +internal GB_symbol_map_t *GB_map_alloc(void); +internal void GB_map_free(GB_symbol_map_t *map); #endif #endif /* symbol_hash_h */ diff --git a/thirdparty/SameBoy/Core/timing.c b/thirdparty/SameBoy/Core/timing.c index 786dbc9bc..041b4d226 100644 --- a/thirdparty/SameBoy/Core/timing.c +++ b/thirdparty/SameBoy/Core/timing.c @@ -8,7 +8,7 @@ #include #endif -static const unsigned GB_TAC_TRIGGER_BITS[] = {512, 8, 32, 128}; +static const unsigned TAC_TRIGGER_BITS[] = {512, 8, 32, 128}; #ifndef GB_DISABLE_TIMEKEEPING static int64_t get_nanoseconds(void) @@ -54,13 +54,17 @@ bool GB_timing_sync_turbo(GB_gameboy_t *gb) void GB_timing_sync(GB_gameboy_t *gb) { + /* Prevent syncing if not enough time has passed.*/ + if (gb->cycles_since_last_sync < LCDC_PERIOD / 3) return; + if (gb->turbo) { gb->cycles_since_last_sync = 0; + if (gb->update_input_hint_callback) { + gb->update_input_hint_callback(gb); + } return; } - /* Prevent syncing if not enough time has passed.*/ - if (gb->cycles_since_last_sync < LCDC_PERIOD / 3) return; - + uint64_t target_nanoseconds = gb->cycles_since_last_sync * 1000000000LL / 2 / GB_get_clock_rate(gb); /* / 2 because we use 8MHz units */ int64_t nanoseconds = get_nanoseconds(); int64_t time_to_sleep = target_nanoseconds + gb->last_sync - nanoseconds; @@ -91,28 +95,45 @@ bool GB_timing_sync_turbo(GB_gameboy_t *gb) void GB_timing_sync(GB_gameboy_t *gb) { + if (gb->cycles_since_last_sync < LCDC_PERIOD / 3) return; + gb->cycles_since_last_sync = 0; + + gb->cycles_since_last_sync = 0; + if (gb->update_input_hint_callback) { + gb->update_input_hint_callback(gb); + } + return; } #endif #define IR_DECAY 31500 -#define IR_THRESHOLD 19900 -#define IR_MAX IR_THRESHOLD * 2 + IR_DECAY +#define IR_WARMUP 19900 +#define IR_THRESHOLD 240 +#define IR_MAX IR_THRESHOLD * 2 + IR_DECAY + 268 -static void GB_ir_run(GB_gameboy_t *gb, uint32_t cycles) +static void ir_run(GB_gameboy_t *gb, uint32_t cycles) { - if (gb->model == GB_MODEL_AGB) return; - if (gb->infrared_input || gb->cart_ir || (gb->io_registers[GB_IO_RP] & 1)) { + /* TODO: the way this thing works makes the CGB IR port behave inaccurately when used together with HUC1/3 IR ports*/ + if ((gb->model > GB_MODEL_CGB_E || !gb->cgb_mode) && gb->cartridge_type->mbc_type != GB_HUC1 && gb->cartridge_type->mbc_type != GB_HUC3) return; + bool is_sensing = (gb->io_registers[GB_IO_RP] & 0xC0) == 0xC0 || + (gb->cartridge_type->mbc_type == GB_HUC1 && gb->huc1.ir_mode) || + (gb->cartridge_type->mbc_type == GB_HUC3 && gb->huc3.mode == 0xE); + if (is_sensing && (gb->infrared_input || gb->cart_ir || (gb->io_registers[GB_IO_RP] & 1))) { gb->ir_sensor += cycles; if (gb->ir_sensor > IR_MAX) { gb->ir_sensor = IR_MAX; } - gb->effective_ir_input = gb->ir_sensor >= IR_THRESHOLD && gb->ir_sensor <= IR_THRESHOLD + IR_DECAY; + gb->effective_ir_input = gb->ir_sensor >= IR_WARMUP + IR_THRESHOLD && gb->ir_sensor <= IR_WARMUP + IR_THRESHOLD + IR_DECAY; } else { - if (gb->ir_sensor <= cycles) { - gb->ir_sensor = 0; + unsigned target = is_sensing? IR_WARMUP : 0; + if (gb->ir_sensor < target) { + gb->ir_sensor += cycles; + } + else if (gb->ir_sensor <= target + cycles) { + gb->ir_sensor = target; } else { gb->ir_sensor -= cycles; @@ -142,31 +163,69 @@ static void increase_tima(GB_gameboy_t *gb) } } -static void GB_set_internal_div_counter(GB_gameboy_t *gb, uint16_t value) +void GB_serial_master_edge(GB_gameboy_t *gb) +{ + if (unlikely(gb->printer_callback && (gb->printer.command_state || gb->printer.bits_received))) { + gb->printer.idle_time += 1 << gb->serial_mask; + } + + gb->serial_master_clock ^= true; + + if (!gb->serial_master_clock && (gb->io_registers[GB_IO_SC] & 0x81) == 0x81) { + gb->serial_count++; + if (gb->serial_count == 8) { + gb->serial_count = 0; + gb->io_registers[GB_IO_SC] &= ~0x80; + gb->io_registers[GB_IO_IF] |= 8; + } + + gb->io_registers[GB_IO_SB] <<= 1; + + if (gb->serial_transfer_bit_end_callback) { + gb->io_registers[GB_IO_SB] |= gb->serial_transfer_bit_end_callback(gb); + } + else { + gb->io_registers[GB_IO_SB] |= 1; + } + + if (gb->serial_count) { + /* Still more bits to send */ + if (gb->serial_transfer_bit_start_callback) { + gb->serial_transfer_bit_start_callback(gb, gb->io_registers[GB_IO_SB] & 0x80); + } + } + + } +} + + +void GB_set_internal_div_counter(GB_gameboy_t *gb, uint16_t value) { /* TIMA increases when a specific high-bit becomes a low-bit. */ uint16_t triggers = gb->div_counter & ~value; - if ((gb->io_registers[GB_IO_TAC] & 4) && (triggers & GB_TAC_TRIGGER_BITS[gb->io_registers[GB_IO_TAC] & 3])) { + if ((gb->io_registers[GB_IO_TAC] & 4) && (triggers & TAC_TRIGGER_BITS[gb->io_registers[GB_IO_TAC] & 3])) { increase_tima(gb); } + if (triggers & gb->serial_mask) { + GB_serial_master_edge(gb); + } + /* TODO: Can switching to double speed mode trigger an event? */ uint16_t apu_bit = gb->cgb_double_speed? 0x2000 : 0x1000; if (triggers & apu_bit) { - GB_apu_run(gb); GB_apu_div_event(gb); } else { uint16_t secondary_triggers = ~gb->div_counter & value; if (secondary_triggers & apu_bit) { - GB_apu_run(gb); GB_apu_div_secondary_event(gb); } } gb->div_counter = value; } -static void GB_timers_run(GB_gameboy_t *gb, uint8_t cycles) +static void timers_run(GB_gameboy_t *gb, uint8_t cycles) { if (gb->stopped) { if (GB_is_cgb(gb)) { @@ -178,11 +237,8 @@ static void GB_timers_run(GB_gameboy_t *gb, uint8_t cycles) GB_STATE_MACHINE(gb, div, cycles, 1) { GB_STATE(gb, div, 1); GB_STATE(gb, div, 2); - GB_STATE(gb, div, 3); } - GB_set_internal_div_counter(gb, 0); -main: GB_SLEEP(gb, div, 1, 3); while (true) { advance_tima_state_machine(gb); @@ -190,68 +246,34 @@ static void GB_timers_run(GB_gameboy_t *gb, uint8_t cycles) gb->apu.apu_cycles += 4 << !gb->cgb_double_speed; GB_SLEEP(gb, div, 2, 4); } - - /* Todo: This is ugly to allow compatibility with 0.11 save states. Fix me when breaking save compatibility */ - { - div3: - /* Compensate for lack of prefetch emulation, as well as DIV's internal initial value */ - GB_set_internal_div_counter(gb, 8); - goto main; - } } -static void advance_serial(GB_gameboy_t *gb, uint8_t cycles) +void GB_set_rtc_mode(GB_gameboy_t *gb, GB_rtc_mode_t mode) { - if (gb->printer.command_state || gb->printer.bits_received) { - gb->printer.idle_time += cycles; + if (gb->rtc_mode != mode) { + gb->rtc_mode = mode; + gb->rtc_cycles = 0; + gb->last_rtc_second = time(NULL); } - if (gb->serial_length == 0) { - gb->serial_cycles += cycles; +} + + +void GB_set_rtc_multiplier(GB_gameboy_t *gb, double multiplier) +{ + if (multiplier == 1) { + gb->rtc_second_length = 0; return; } - while (cycles > gb->serial_length) { - advance_serial(gb, gb->serial_length); - cycles -= gb->serial_length; - } - - uint16_t previous_serial_cycles = gb->serial_cycles; - gb->serial_cycles += cycles; - if ((gb->serial_cycles & gb->serial_length) != (previous_serial_cycles & gb->serial_length)) { - gb->serial_count++; - if (gb->serial_count == 8) { - gb->serial_length = 0; - gb->serial_count = 0; - gb->io_registers[GB_IO_SC] &= ~0x80; - gb->io_registers[GB_IO_IF] |= 8; - } - - gb->io_registers[GB_IO_SB] <<= 1; - - if (gb->serial_transfer_bit_end_callback) { - gb->io_registers[GB_IO_SB] |= gb->serial_transfer_bit_end_callback(gb); - } - else { - gb->io_registers[GB_IO_SB] |= 1; - } - - if (gb->serial_length) { - /* Still more bits to send */ - if (gb->serial_transfer_bit_start_callback) { - gb->serial_transfer_bit_start_callback(gb, gb->io_registers[GB_IO_SB] & 0x80); - } - } - - } - return; - + gb->rtc_second_length = GB_get_unmultiplied_clock_rate(gb) * 2 * multiplier; } -static void GB_rtc_run(GB_gameboy_t *gb, uint8_t cycles) +static void rtc_run(GB_gameboy_t *gb, uint8_t cycles) { - if (gb->cartridge_type->mbc_type != GB_HUC3 && !gb->cartridge_type->has_rtc) return; + if (likely(gb->cartridge_type->mbc_type != GB_HUC3 && !gb->cartridge_type->has_rtc)) return; gb->rtc_cycles += cycles; time_t current_time = 0; + uint32_t rtc_second_length = unlikely(gb->rtc_second_length)? gb->rtc_second_length : GB_get_unmultiplied_clock_rate(gb) * 2; switch (gb->rtc_mode) { case GB_RTC_MODE_SYNC_TO_HOST: @@ -265,8 +287,8 @@ static void GB_rtc_run(GB_gameboy_t *gb, uint8_t cycles) gb->rtc_cycles -= cycles; return; } - if (gb->rtc_cycles < GB_get_unmultiplied_clock_rate(gb) * 2) return; - gb->rtc_cycles -= GB_get_unmultiplied_clock_rate(gb) * 2; + if (gb->rtc_cycles < rtc_second_length) return; + gb->rtc_cycles -= rtc_second_length; current_time = gb->last_rtc_second + 1; break; } @@ -274,10 +296,10 @@ static void GB_rtc_run(GB_gameboy_t *gb, uint8_t cycles) if (gb->cartridge_type->mbc_type == GB_HUC3) { while (gb->last_rtc_second / 60 < current_time / 60) { gb->last_rtc_second += 60; - gb->huc3_minutes++; - if (gb->huc3_minutes == 60 * 24) { - gb->huc3_days++; - gb->huc3_minutes = 0; + gb->huc3.minutes++; + if (gb->huc3.minutes == 60 * 24) { + gb->huc3.days++; + gb->huc3.minutes = 0; } } return; @@ -343,10 +365,33 @@ static void GB_rtc_run(GB_gameboy_t *gb, uint8_t cycles) } } +static void camera_run(GB_gameboy_t *gb, uint8_t cycles) +{ + /* Do we have a camera? */ + if (likely(gb->cartridge_type->mbc_type != GB_CAMERA)) return; + + /* The camera mapper uses the PHI pin to clock itself */ + + /* PHI does not run in halt nor stop mode */ + if (unlikely(gb->halted || gb->stopped)) return; + + /* Only every other PHI is used (as the camera wants a 512KiHz clock) */ + gb->camera_alignment += cycles; + + /* Is the camera processing an image? */ + if (likely(gb->camera_countdown == 0)) return; + + gb->camera_countdown -= cycles; + if (gb->camera_countdown <= 0) { + gb->camera_countdown = 0; + GB_camera_updated(gb); + } +} + void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles) { - if (gb->speed_switch_countdown) { + if (unlikely(gb->speed_switch_countdown)) { if (gb->speed_switch_countdown == cycles) { gb->cgb_double_speed ^= true; gb->speed_switch_countdown = 0; @@ -364,14 +409,12 @@ void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles) } gb->apu.pcm_mask[0] = gb->apu.pcm_mask[1] = 0xFF; // Sort of hacky, but too many cross-component interactions to do it right // Affected by speed boost - gb->dma_cycles += cycles; + gb->dma_cycles = cycles; - GB_timers_run(gb, cycles); - if (!gb->stopped) { - advance_serial(gb, cycles); // TODO: Verify what happens in STOP mode - } + timers_run(gb, cycles); + camera_run(gb, cycles); - if (gb->speed_switch_halt_countdown) { + if (unlikely(gb->speed_switch_halt_countdown)) { gb->speed_switch_halt_countdown -= cycles; if (gb->speed_switch_halt_countdown <= 0) { gb->speed_switch_halt_countdown = 0; @@ -390,32 +433,31 @@ void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles) gb->speed_switch_freeze = 0; } - if (!gb->cgb_double_speed) { + if (unlikely(!gb->cgb_double_speed)) { cycles <<= 1; } gb->absolute_debugger_ticks += cycles; // Not affected by speed boost - if (gb->io_registers[GB_IO_LCDC] & 0x80) { + if (likely(gb->io_registers[GB_IO_LCDC] & GB_LCDC_ENABLE)) { gb->double_speed_alignment += cycles; } - gb->hdma_cycles += cycles; - gb->apu_output.sample_cycles += cycles; + gb->apu_output.sample_cycles += cycles * gb->apu_output.sample_rate; gb->cycles_since_last_sync += cycles; gb->cycles_since_run += cycles; gb->rumble_on_cycles += gb->rumble_strength & 3; gb->rumble_off_cycles += (gb->rumble_strength & 3) ^ 3; - - if (!gb->stopped) { // TODO: Verify what happens in STOP mode + + GB_joypad_run(gb, cycles); + GB_apu_run(gb, false); + GB_display_run(gb, cycles, false); + if (unlikely(!gb->stopped)) { // TODO: Verify what happens in STOP mode GB_dma_run(gb); - GB_hdma_run(gb); } - GB_apu_run(gb); - GB_display_run(gb, cycles); - GB_ir_run(gb, cycles); - GB_rtc_run(gb, cycles); + ir_run(gb, cycles); + rtc_run(gb, cycles); } /* @@ -428,8 +470,8 @@ void GB_emulate_timer_glitch(GB_gameboy_t *gb, uint8_t old_tac, uint8_t new_tac) /* Glitch only happens when old_tac is enabled. */ if (!(old_tac & 4)) return; - unsigned old_clocks = GB_TAC_TRIGGER_BITS[old_tac & 3]; - unsigned new_clocks = GB_TAC_TRIGGER_BITS[new_tac & 3]; + unsigned old_clocks = TAC_TRIGGER_BITS[old_tac & 3]; + unsigned new_clocks = TAC_TRIGGER_BITS[new_tac & 3]; /* The bit used for overflow testing must have been 1 */ if (gb->div_counter & old_clocks) { diff --git a/thirdparty/SameBoy/Core/timing.h b/thirdparty/SameBoy/Core/timing.h index 07e04734b..8cc82e322 100644 --- a/thirdparty/SameBoy/Core/timing.h +++ b/thirdparty/SameBoy/Core/timing.h @@ -1,13 +1,25 @@ #ifndef timing_h #define timing_h -#include "gb_struct_def.h" +#include "defs.h" -#ifdef GB_INTERNAL -void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles); -void GB_emulate_timer_glitch(GB_gameboy_t *gb, uint8_t old_tac, uint8_t new_tac); -bool GB_timing_sync_turbo(GB_gameboy_t *gb); /* Returns true if should skip frame */ -void GB_timing_sync(GB_gameboy_t *gb); +typedef enum { + GB_RTC_MODE_SYNC_TO_HOST, + GB_RTC_MODE_ACCURATE, +} GB_rtc_mode_t; + +/* RTC emulation mode */ +void GB_set_rtc_mode(GB_gameboy_t *gb, GB_rtc_mode_t mode); + +/* Speed multiplier for the RTC, mostly for TAS syncing */ +void GB_set_rtc_multiplier(GB_gameboy_t *gb, double multiplier); +#ifdef GB_INTERNAL +internal void GB_advance_cycles(GB_gameboy_t *gb, uint8_t cycles); +internal void GB_emulate_timer_glitch(GB_gameboy_t *gb, uint8_t old_tac, uint8_t new_tac); +internal bool GB_timing_sync_turbo(GB_gameboy_t *gb); /* Returns true if should skip frame */ +internal void GB_timing_sync(GB_gameboy_t *gb); +internal void GB_set_internal_div_counter(GB_gameboy_t *gb, uint16_t value); +internal void GB_serial_master_edge(GB_gameboy_t *gb); enum { GB_TIMA_RUNNING = 0, GB_TIMA_RELOADING = 1, @@ -17,13 +29,23 @@ enum { #define GB_SLEEP(gb, unit, state, cycles) do {\ (gb)->unit##_cycles -= (cycles) * __state_machine_divisor; \ - if ((gb)->unit##_cycles <= 0) {\ + if (unlikely((gb)->unit##_cycles <= 0)) {\ (gb)->unit##_state = state;\ return;\ unit##state:; \ }\ } while (0) +#define GB_BATCHPOINT(gb, unit, state, cycles) do {\ +unit##state:; \ +if (likely(__state_machine_allow_batching && (gb)->unit##_cycles < (cycles * 2))) {\ + (gb)->unit##_state = state;\ + return;\ +}\ +} while (0) + +#define GB_BATCHED_CYCLES(gb, unit) ((gb)->unit##_cycles / __state_machine_divisor) + #define GB_STATE_MACHINE(gb, unit, cycles, divisor) \ static const int __state_machine_divisor = divisor;\ (gb)->unit##_cycles += cycles; \ @@ -33,6 +55,10 @@ if ((gb)->unit##_cycles <= 0) {\ switch ((gb)->unit##_state) #endif +#define GB_BATCHABLE_STATE_MACHINE(gb, unit, cycles, divisor, allow_batching) \ +const bool __state_machine_allow_batching = (allow_batching); \ +GB_STATE_MACHINE(gb, unit, cycles, divisor) + #define GB_STATE(gb, unit, state) case state: goto unit##state #define GB_UNIT(unit) int32_t unit##_cycles, unit##_state diff --git a/thirdparty/SameBoy/Core/workboy.h b/thirdparty/SameBoy/Core/workboy.h index d21f27316..c99c27242 100644 --- a/thirdparty/SameBoy/Core/workboy.h +++ b/thirdparty/SameBoy/Core/workboy.h @@ -3,7 +3,7 @@ #include #include #include -#include "gb_struct_def.h" +#include "defs.h" typedef struct { diff --git a/thirdparty/SameBoy/FreeDesktop/AppIcon/128x128.png b/thirdparty/SameBoy/FreeDesktop/AppIcon/128x128.png index 6303f2373c93c75f2c29db62630022ff208aa853..b3259ed2adce1a540d8cd41d1338cdc8b0a3fd25 100644 GIT binary patch literal 9515 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 literal 26046 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 OtQhL<(8BoHW!WtN diff --git a/thirdparty/SameBoy/FreeDesktop/AppIcon/16x16.png b/thirdparty/SameBoy/FreeDesktop/AppIcon/16x16.png index 6c3f81d08375d3e3869008571d3482f8e8f1b4d3..335107ec7f9fd74b8eecdd20ddde8545dd1d18a3 100644 GIT binary patch delta 365 zcmV-z0h0don*o~xkT`zv;v)9HZ6YXzhOB8&w2N;sx z?F!4blU~6|uYmnVSD>&|Rn4I&3U1#Lea0IIyfF?3<3}*ZE>;)Jb6IEDXH7ET(WlrP zU@e0B^&w&gWI1KC&tpj>OmwqZh%`(h+14N>Q)NvY zm`rcs-4Ck;X7h!7IQWR>%MXM+PjBwv-hF|~tLtx^Ta^j?`#JvrM)7YT?!p(h00000 LNkvXXu0mjfs_~}N literal 19956 zcmeI44{RG(8Njclv>{NDtR1C@sm2vj|Lk&qeCP8WjLC<&ZlB2fI zoG-D{wNM!97EP(UWTI!Cr&-uu4qz3=zl`|jO$lBfFCe{ym2N18DVTin}|=!f4e=DTSj{9N&m zOCtPwU%qFgfMM@nV!r2L-`M+M47>Rk>fo?3oLVPHTDDD;wKQleW%E!P!=fFfyeMq} zMj#DF)m(eO#X?b)h>fvxKYrL9{eUJiD|nxiEF8pr}e43x5& zTtO(c2Q9k-ESuFtFkp!oTiS!2W`}{{R9_&j=^((ivA9IiRDk2#D3;|o`o;iFQVc;- z1Qo(5USJr3Bm^&rZ>U->VA>Va+PKjk44NIGSH-VvK9xdU zJVYvCkq4A0v#f2}p+3X(23>_)Sj;$lAxSpT8K>iXJf0vqhKxtxUoyloiLPXXj3jNd zbyR1V?@qP)M($q|W4;=6OJeIe>!*BjXGw!zoL%6i%`fC#M;jrxax0q29QU;uy%q zV60-{{Np4yNQVT96KHlVNyCU`57m-tY^0zmMp4v3=O|omv2t+ivo}~E9=C#FU{y+# z)SS8NR@-)K6&rUTjfuHYAjb$>(XMc-LW-%`&WL{yF2+s0y z2xlT7gr{i+;H&~f4z`Gj2(MV>$bD6F7skmDyzUK>q!3~Snp#VS{K#5!1w;|U=3BX1 zy5n8-a_R^-R*<TG+JntLQAO;S zu&68vil%2pBjyNI)k=pQbVd~7T1L}Tnhav0C{eGvuGSzZ8SBJJ^ITeOH-oD=;a%cr zZLQsKwU_7WaIC)8!=rF)pflCowPD0L)@ozTSjvZksLO~s@`gsNMz@h`8_He7v3%;= zFx1^YJCEv{m?M8WXXndI^*QpRYj%FjRG%Y12D;aE#|LNUOamKp<smiod(MWyk@G(q-~?oEt+Y=A?daO9}38#A$qdnly%v${L%D5P0M)8 zogvpMN)CHw8d>Ny^GrjkY>dSiGl%D{tSi3`TCII%vJ$51bXDrj!Gv92hx27+Z0QQV#u9EeFz*br zpk-~UqV246%a+#Zm3n zu<#8hRQSxp>d4HsSvu~9x{4!>6der}#qu(9JaV&kK)Dt^(1Xts3G^_rc5{?Zwb%Z$ z>e02gjV$_|AQWB-J}xhmkc^KDq3}}hae1MHWPDr*g_nYl%L^qWC?Odi7ee8s;N$W_3CZ}l z5DG5^AD0(ONXEy7PNUGlmI!Fl?E2&*z>_V%WUz^d>q7OE2I1wS&1Ooh>`3|2TeP z_lDj(7U+G~y>MXP$>l9SW1A0jHI2M7}!eD~EcUURigjuq(O$m0j20a?@LzcFbGz zF><@q`cV7PJDbjZ>qO7S33AW;^XIlduy^&yJ$G+=Hy&OCF(^pUZ<^1yZoc-4~FD)!R z`dD)9`NE#&Bj3Ii`^=}mr;k6`^@nro7k)MRYFeIpZuiT-`~Y@$ap|3fho?H{KXUkR z>CmBHWu7L7aB2t_kDiH6vUw6N3KTY3yq`2*_?>>0x)ZXiVyCA${;)yjlbzT*>TVKcwE?x9&e=s7r%@ZoYQ(E@L z@R!&zNgN8t7tgA4>mk=g?qdm@2Ay&Xt<>e($uVlkLx94G%YGPJF1>ei>2nDCnTABE_Oe8iU7=)>G4+ zYsdE+ycUN|>Fw`*^gX^=O@!0wt#Qo-$Rh zZ7pENi*a}*q4ZMrr}YDkM!!$g?7qe4vsT#MZFCkN1cSJX~f8 z;%G>m-P`pFD*d`rbk-s(aN3u8$n~{k!=t|F0n2jLdSQdU|3QDaPrk)#-!4l2IQ|E> z#mY+QQsGwE#fa(5{h95lq=wz}ow+`XXcnb|>x&5i2oA)?)6~T?-L~~OLcGW1VQ;dz z3w2>@c|7j*4EIXVMuCH?Xr})b-`adh5Vxo3$vt{-aB6S=WzdtrW*>Wc_l}C$N;3oS ztn=R{^wYBcN7Fy-U!{6#OF)-Jdp}?0^h(+7L!Qc0;|yf{bMk@3f%d7exVsIo((x2H zK42z6VR>(!Ld1WS#M$ryP}i`xmG)0R$x*k=} zfx5p~FjNUxO-PhSnf`h7?i_D4oHv!sLiQWzgZd6bbAl4&SNSc{JNK0iI^MV_*LW%y z9IE9jE$~wZ+h_bP&(?IcjkyJxJQ@#l%2=pttI6Cf#0TB`WaPcvzUM}4tlaxmPWj{9 zU99qSY5$wWy9G+pKIlM-3uL(v_q%WU+GP6pb%x|;vm9gp3{7-Hz^=3*{&xx2In%O| zVV>(u%uJsa(zjon)r1JBV2fut5VRdcQ22(ura;U$Y*0RsUi?*xKVZ>zeX=~=)fkXj z<`MXKlgFdSdTZTepqm=MkAFt(c8l=~yu3n9`FF?o(*4_8mz3SQ_UDWi{JQ0p)_?A2 zuXT<}U8ZbU4+s9K8mjM}p$AH|4Bw+CApk4+!JJgLR~E~B{l+XU*37^vr)hnqP3xaS zp3zDp4>s4m#ays@WPUFKGtdykYtPrs(QP^*KV3E6yFaS57c=mwfii5%oflZkY{u<1 zPNjYiSlrB*9pQFcQqmvGlB?Su>x2*JS~8Z zu@NtQYdrL&V0+5us{M+0bwBl1cf~4_>f9T){TJ@c{98U)P5yBH?Si%Sw}x*bzf4~_ zF4?X-kF9V7#BD2j@T@o}R~c=$Tk_Q(KK+t2ekghxn7As5hK;QR5-L{$^*4{qanqiC zqS7AXV)biD?jp?vK>aGErK*6lD2y&xzs&A3Qg1ELx+oqmR1k zUdx_+U6=Pl-u%))V8)~(yVv(|q<`Y%C)+b!%N55eCD7~wM=$rWhT$Qw`ve0Exm)Z$ zq}3#5z@JwzVt6$e`rL*pB3ReG4Gyh7eB|`VmpeMUN9k`{*|wyFj~|}?POry|guuvn zRc0L3I{l;f!uDd?-mWv}A0j9{gz{jsfHFNwdbqrTbS$3K|R zRi3;b`U#%!f5AfFY^fYuIZYa@bUTkA8-6@5kVyN8Xb^P%TMqyu9Kb&ZfTOaS2R@Yf zo%+9>RF%It&|d5nia1n^|ckNF;Fi-csin^%wS zGWI-JIBHGJelUK2RuC`0!mBi*fG=(L^jUVa=-MA|Jy`iUU77tQq$&6KW?JypqyH7X zC`rgz6v&!wzvc(b5@6?}Si4vcBQOYBDE2~dW$8k8-lCqf4Du2G`24Y7BdcYqF=>%= z*BK9QQr&&phnG*z&IQ!E3)H49Y=v)27SBdKpahKXZ%I8erw*+JZ0%;mC@Iu=X1a}f zD=#RNQ95p(-(PN%dba(c^OZ91l<_2a%qg_Qnd&BSl5g*6N<8&$K9tL}Bse|y5r{s}io+bgv9q>SFo&!^d294e!+B5|>O3 zmgtv8o-ch0@ao>`#+O=<48N*M!mYG_xeGuHk0clyG%xLWdPI{j_};q2E-4*Z(e}ph zrjJ6uscrg;kLw>EE@xk34)^+dY5L8(;%iF`1o0DSMGpUuW1D(eVm6tkpZsqygCPix zV|-3IUiWG8@O@9PU`WHn+jr`I3I?}k^@Vs$5h(v8BY^w@2Mthnbw!EkGuC&I*3TPqcn} z2tK2LQx7A-=~rpvs|bs7OSc^Gy60l0=hb&9W@v7`1VJaiQLoHUCc9f>MQJ1SJXWT! zAmWF^txM{Z&k#Wklxki)EARsJSWx?AGan(oV&n_*B0zy=b+(TOF%>Yto5x zuy@(zN1J}L$($EY>>(MGbYVe8W8boNh?`&}j)gk_S^F+x@d}7X-^1p_upE}$X{foY z%O>(htB{~K^14VwEQ3NtRGc5O=n!9#>=Z^xXVIfrbyeuH=jn4E@4 zFEOCEdvI{aZ}X$>9p{7-n)YEiH;PgsJgcnYs*a}>NoL8?XXe(J*R&0svmb6#!UD=N z%b*B{`SW#%NTES8c2H^r0p~dtyB+7+<|YYPx=AoUpwB_tqTK~;@=Pa6*3#j(TyL_P z*34Je&h1NAhrLR-i+(Z^78$}Ia&>STWYdEx4HNtZBVgSE0SkMDyVta?MkXu=5j=7? zbz4$S*sC1>?k3W6Aib^adkDbAr(2Y}8(1`WXhGXp8jgJmeO7O6%R}=8{P-ACCQ!zS zwRmQ%-8*a_rWCXK8l9iJegEY9rx?^!g~!oMb+a}O>}k^9o&zw9ry>z#Rk_EaSeOxj zjulLdJn7g0*_a9SuvXjiv9a`RvqqhV&pw>)x1aNUr*op9*!Y5vS)<-`lHI0UUnRCe zrZND9YV?e|#--5OMEf8RFn-)vgaenU-y&9$sGK-EARFH~5JkveA{ULG*BulqC=NyQ z+mBy}*%G|3Wql1yhX!^x{J0zD=LSCW00MIGtzqC91QCTeGjQL@l-O(6IwErG%zeI~ znA25p4Hrkp^|l)2dW=`9ikltn8~6Xn-(EGdR<1iQH+yk`H^*_z)^!|OQR)1U8Cn~$ zPw@_V|Kj&LNdW>**PP?RLx`V2;xA$1Js!{jLd_a7amrkHz;CC)C$r}JU_19^>rNAo z#KEMw4KMpX^Y+?ZM8>O5KDEFF-|B_cTPqS>2dYtyi+=h3EC)5ozF)ZNhpHn71mgd( z(E#xX1d4b#fYVqC6}+cyN+JM@1~J-vpMs)mbP@0**WBkgo%*Ya`+qN&>!gTgq&_Su z>)Oc_%(UX9T#%p+=Bxy_R*%;Qc|QrdPxUQq_KLlIK0rox<>?n?PA}b$^KSMDw5?Cx zw{*1O!hljWvCq6jE2X-Bo z>=1L9n@uHE2F9#_-1%$a`e-1fh92C>u%pvGYN;hMhc%{m8oM&B6dp$9ytY)eAgU)* zb>3|I1|aA{dzD+;x(uJ|*Ex^`KnwEr?T^ixZ@Q8;?<)oj?-Ya zjfgs!kX~>NtI@zG}b_3$LlBsv~Q` zB(-7iIP1ysXR3-)$(`bCH7xbKXt;u+#1zT^0SmIS=;FL& z9t@?cdS|FDSqEpwf5vbCJ9a`*cfKXvjxqon&<~c!lCV;U677tToI;_bv9wdd*X|L7 zifLTJfE{@*G{nbR-8s7pm?P*6G*K8n1E<=0+3#MX?efo-jqE0C`UKQ4WV*^RVJ&Ae zBwHbqj{_j91n#BPS|P?P3n_4V$Aq|p1SajCc_&oj7Lsv*)Fs?AXT^X>%DoXSNYH#J z%ViEy-1WYxGKi58@TqfP2c=lRRDBT%=K7rRA+RxPZ3PSIVCpXIRQ=0Hde8!nqSl@s zs9@*#M)Tw^A7$!Vnyt{mffl-C4*GRNugttaiHKgejr!!?yz}p~8xW2T)%6SwEIG*& z>{;7Y0l@xLAirog<=f37hH!jk1&yoPX8w^{cf-U(7{bj^LnTndaoukH$aj5+JkaB> zcaoW37Be9O?FnvAm8u4=sZy;@7iIE$X!3oVh2JDgYQU*Liy~W;LhQl<*i!>!jgT!W zZWo<+jwGt<027AT;XTnElf*B~M+P4F3!E!(WhC6Gt(v)gGxp zrN}JDwUO_wgHBD-DSnFS+yB_o(t_uY5I!`SRgWSa5EZ-oeL!Z%pAirUtO(-re@VcI zW&{xI5QswX0cPVhBr*GBi5&O&ZKHivtK95l9*j=H@iY{()-k;Xx>sp%xJ2gFmncS3 z(Hj;gCJ07AJ7D)w|}@Q)RPQhtFB5N)yh zJ!yD%++VbG$h(#6FRR%Xb4{6UQKeH~0&Sllc2I-Z&-N;OJQm=fo8>qr3y@qUP-#g> z;zfU;YlR?ueZ)vidY#Auvmdzq+LAO?|4Nx<7nf~DVhpM$$$F|C8^%+A(S64TtlpG< z;GjtBH8hDgy$o;hn{p*(PPkEapYRw|c3r{11lCkYE%-gH>gT1wBSP#XSH5rH4Ga8g zefIOiXfc=l2@}Ihn>-IF1^H17Vqn6A>^+6lOkdADeL?mPJ2!jX-*8K2#nU{6uU>pn zHG|@$8Oixe39*lq;DaK)6Im|*!752$zOy6>4`ho}aerCj(-1s0PJL7o8B{ajT{g8~ z!TpLClq!fSa*d`2YG01+aLkt8mO z3@PkUWFfo+WLXG_DQ%-zN`p^6Ek~>llN!VhM3qNU8xH**e84=a)|-uh%=x(ZGD9uw ze4ePJx{v1AKB=dSisovv-#@F?eGfc%u3QvH7Ke=08DV+kDe%h>7P|uF+9tIHFyVIc!~n1Bp1SPJR| zL^GNyXs|%B+CaX9e(8~Q#NpRDa(42N^W-dm&j{JnTu(f6SB_==a6Z5NPUt!`7%A7B zPF`>2n%XSjQU8+?+S_Gn;MCJHVS)x^R2$aSw`p6?Jdur^uz?-~rQ)_A1;B(ObC-k= zSsh?(=fh0mfAezka}l-#;VNKuv$JC4%Qv-`TC?q37gISC0S5eM&;TDQVL2K zwyuUrvXGW2t2Q&>wE+rSpV~Em7(0-EUSc#E=$p1YU2Nor@V$pV*XBFO5Sg)I6%DRA z4PDkuARB4AlJZ_IhDkxPv|~bP;G7mHyZ#bY2>!%|PU#S;Zzm#z?rcTN}k7O4)n$Aq) zaG==ODIi|wmbc5!%$0>`-D&u_UA;KQSMo+hbbNKUVD4%xz!DKz1At{oQ3g|FXmZ#tz2xPV4f^h#KEPAAg)egv6rEuNIV!!@UO$=#=2L9m|yl=$C z{Avb6_A|~MHgx~pkBWSU&KJ;+7v|jIO6;r}796d)iUWi9h=S2`)NYGG%KS0!SlmBSqLw156BLTo? z)p4v}pP_*4QbnKHACh;V4T8h$^Ngd1pz`7K+x5YhBNL+aluag^C$AiT1}2En4-pru zN{3)tbf1wzRLw9F6aZ_MJk$OaQ&{b-0cL{T(@*&Tk7b_u2+$=-%1iFITSK4C-?Xzg zFnE{UAWf%zYlh%)Z_18rtRlChBn{cAunv|{Z@-qFnE~;~KzxjY!KG$8*<5*)$b@_5 z{s;yXzZzPHa`9D}ia#5YA7<=VL+Y&@ZrI%K1TkOXv-Sa|?>}SXjk6M9o)Ly<1e}Kk z$RhwC|DVRDBLFYb;07a^_9TtTgYER$b!hb!l#u>l&D1@d<4Ewvu}|)9j2saXqq06* z_|C9K`^HDsQ4c1Z@C*TJV?&+IC(L^@ue3cf!+r zXZToT*-*PGd)9mi(FP$#D++GH@C$JH6{zo=K}O`dIpK*Cp4CoiT<3Gmx~*kHqkCJH zqtEKzGSf`inYNVg`zKCfV|V;8s05csvG zgu#o!!yj!1$B{he6nI=1F;kN3^k;E*EeD0D{(XMj>ERlSr`pZZy-K?uwjE2_31cKM zd-tU}Dq#$+G*??+Wi4ysY6K+Vj&7cMG zc`$ydmhvSXHbue${d9J8L9Zp=(=bw6u=)U9st5EeR`rh#Ya_7^C{k*D;6)LyUc83 zwrRO5bkfIC_!ma$ePxi`~iJvgcIEF&O^7XIW6w7sX&jE1jZN15sbWlyprA z)3ad=58gTGE2v!1A=8ApCV;8rF$8@73h2o8>=tWK#23(3Y6zRG?9yP_?AcDvcv(5y z;0t&&t*hq*Q3kZiElp9}DG1nWkd@$$K!Hq*)-d-h z`zlQd@>FivnOV(acTCsfV5@M?-joB^u7Hk7a*;o^+Rf=At0XMk4jzh-+5j;X)Q(HA z1=-3`6|M4lI4tXBvGC|{%57jYZMTF zBLwB)!LGIi4HmCKV#YCAuR!I##XO%56OE%@3{--fN)x-z`9|RKEjr34T1KLqQMp!4 zqu~XQL_`Xi`L~xI3DF4Bjt+e9IhK|v#%XXW)E%L|q^}Eyeg|*p44fVmEV~y}&NoH1 zCaSNTJU@Lyk$kMlp6iMVCVnG8U+y=@mX|yRW_0bw(P4yXd_2XHMl_vAHe;WnI3!>d zA$D>Bu5U~X~oIrqn3r-UFW?Y6y%S)KNF#6%(MR2eEs@1on)Jc=`fy0rS z=C4=g+gUl-Ov6&yoV0Ba6^MGRcGq_~ARtsv2`3IaxpnKse1glVN4EYYQDOD8&&er(uQt5Ygh zr*)Ol-Vb>GVOqKJ@a?Y~r^1wqO5FwsNSr`$HVa8}^MxXP{1rSL3rMf9P0CrXz&q3I zxCN72v*p{gXGv_5c}BS6%q3(`(RcreQflRxBp&AGbd*x&o3X;FSaN_DUNhek1A#(G z9pYC6f}QX`2s*URt%aebbNXKB>zg6u<6nTkyK?6j?g8GXP;LrGMY47R*R^w%DV;6` zPL?XqxXr(kbebP39>mPwh!J2^|2TXma z#|zife(L{8rUyKDI4I5kSgTc9_;m)a3N~Y%*b_S%$MWus+4=ecF*6_VfI=C-XgQ;w zl-w+92rk8Ev4CBAQ6>XH+7gC9c7Tu)bfbu-5uHM6{{55xfU$SlU5r@vTk$~k&zB2R z1wLt|?Prl0_qEEn^IuyilN+q!=QS&uVWmmE5oUM%Ii{bEbjpd&wObe^coapW+cexZ zw^u%=3=`Qv?ohkOWjFD7+s;pk#@$+aqo?vT8IQ)63Tp_OAuDAsTD}Ai#Lg@Qip{1; zsfw9@=v;*i2nKq@0_l6RAYKC4F^5~?`}f}VPxBH}^?ti)rbr=L8LWB)pAJ|>Sg?K9 zL$bBD&?!dnT@h_*+mFtmQ|S#{H~xBs+d|B^c#Nkq=oc3EEaZQ?G9(E}BZ)8ZRfIjx zHahQ8dI84k8_chDQ|ac&dAO@GF|x|KCTHebTe$|+*nY=0ok;k@mSoub-hCz(#rok~;CH-z9By~W#g94iCr*nJC*t@LtQ_j%KUwYg?*Q;~3Aoa%0rW6ISI zWC`BC%0w>vd6ifN%z;Xy5H&zM!f5)yrtn>Wj96!(cgHY;sW}mm#roKz?SlUBvtMC4 zuXyE1+P?MGvoY^Pn6Cbv7D)IUGY$u}+a;uS2#hLGujG9(|Tsd@Afj z!E*Kbvrd;6Wjpoy!!Ad$k~GaZ@9+9Xf9_UE&2T0{MG(`$3OZ7&#Oaa4fT#nQLGQKs z6PCKKZugCzaSpIwNoq?;R3}W2D}1jNzMa$}`;17xb&1v+%XxMEMn<6B3P54R*a;xG zNMY+2Bf*>|C7|Ft%_y8a;yJCQnAa<7FYWitSWquN&dvX%{kU|<(CKweB&Hc1W_+M; zUH^n%PFwiEJ-X4k7BMM;{!SJ@K|@!597yo{DU!&Q29ts3qUCY0pMBB9hIS@>FgPQi z9Ltvf4zx?_%e?|A5|Fzv z0YMzgJ;42ED4HPA{SJx%`9G$bYb=gdKHpHnT3u@i?JBVP^Ume*vUXt(V!?q zbE(K-q3B271uMq8&?1RY+8{PisQHV zfWa%VEM9fEqhbOoyZZ5-n#Pfx9hWZu_;=X|iId4jYPd;Ylb zKkg0`q%_tGUh~iNo$)#OnX3Fx2SL^|e5M+Q4il`ZJfAf{f`(BB;J;Nu0X6y`X9AEd z>wE-d&oEk0wd{URpNcx8As-^35o-U>s5ChA?319=>d%a$tFCp%yB`K)@oap}%JlH_ zoT!VfKy0FO_^AqnXeH@&js8252O%(ca{L>Hp*FVXrp2o?fAa7+b;5eBQ6p3PYlB)P z#aJ#@8Nh<4_c(yVIk3?itl|OSG1{3(2OK18uRE2}>iaVJy7y(d zZIb9pvDa2)&|WkChWUluqBzw!a};Prl*$GIK9J)&@l)Xc$?1oCDA14O_r#siK?zLA zG*IgXspHrvP9heugg~=tyYlUgvk8V$O80mKU$xd7JFkuA)nxv3v1tBjo$i?VsB7lk zquTs{mFp{g`1NI7s{H!+j0{s4kJG=~e%q08xwj7=DIY|iuBG@WcW;?>ubG|PvsoBE zOyniWB40*4gzK+;g9z4oL^L>ojBg1oQ|s1aw~JT0F;O+v)5QEZJ^ucZwdb++C%gWe z8!nrf?Av1dGXbhhyz7eYnQjN5oI?9UqAT<2A@$GSK-=Yg%qTUfbl*gS)a;HqI*m91 zoG9r?;!jDav6vw}NOb2y-x-}tt#2-r3cX%lMM{KligaZCn+j9DA@C)nk?y10O7(7? zN5#%EQlbm*RlMJku^okKu-wagt+P*yTAJQXtDoPor2$o(yHW)~EIn+*e?pk<$2u?+ zBvSHEKKH;GUn0RVct(8RSirt>TRd)1-i$;4);c(F!hb-P^q_u{XroT>J5vU_ zPjr&){DC||f_`;t6iw^E{Gs_8OdJ^>AEN{At8praj=DzH-LXbJj9JQe9EUDe3)$J= z&j31s;Un^D$yGb(v|5*-DBG$`ks04&r7Z=Cp?xO>8t$q3z2Y)rSJfs7MpRI^S za^T7T!sH`gv;^y#b-ynOJpzw?o{(iFOz1;Edl}V10F3tRAU){%j-S(#MVTovvr0{v zE-B7|T5R6a!)k4D>-;%i_t!l89Y@!O-@oshpDlbBxmI$YEv|D;90e7p6SmcY7v?VA zNgg=6?PAQg*$t2;-KuV4in@O#nk)%c#f{)U zSY%GKlnR7S&Jn*eW|zPeQ5r~pfWTy@zn=!~>#Z@J2I3__f;9Op!{A|D)19_62qf74ZuLGc7;1|DAXi5p+Nv&8A+ z6zIzM2f0f26Z9H5{+;;N^0sv}A4e83fUx)H-)}$iI&p0EQ0N)�B8`nOL2MyHmaY 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 M$MAO9Ep){H0jb9J;{X5v literal 16633 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 QCjbBd07*qoM6N<$f($UlX8-^I literal 20600 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 diff --git a/thirdparty/SameBoy/FreeDesktop/AppIcon/64x64.png b/thirdparty/SameBoy/FreeDesktop/AppIcon/64x64.png index 4a54e94eb23e76bee1e09ecd205e1d6c294b2df3..a5675ca2c3d4f0ccc34e4ffbdccba45593646c50 100644 GIT binary patch delta 3132 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 WD@@&Od}-$Z0000^pW5y7e`ttg;X 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 X1U~XzwCNnx^9i}GUM_h~%hvo0$rggL diff --git a/thirdparty/SameBoy/FreeDesktop/Cartridge/128x128.png b/thirdparty/SameBoy/FreeDesktop/Cartridge/128x128.png index bc14d7922d2af25b6572653031447008d4b0c2a7..e64a3bb771f6b8bf1cecdfb6493a09de3c7a8404 100644 GIT binary patch delta 4813 zcmYLNcR1WlwEpc{tdLk;NYv<}*JvvUQKNTRSp-S+-d2keLK3|bAqYZzJ_NCPh#ECY zcJ;D)TVlyw_xbK~Xa1Wx^PDs1IrF~nnUzt{1<#v1DNFi7Z@C#zv{4V$RZRkBw(~3# z8M;||*CLjc_Yp1PO`q}Inu+SK@$KqOoZ2RduY&0vX&6Y;Xk=k98W{OoUkgX(=$oGE z5W`rgTjT5ZjS`)WyAS5v?!2;U2;=!%yS`DU>%BU#p={chp*(MEYkU0n@;LOdsX4w} zyk{IzZYPjiR9aeqO5?7&^};bc4H=ngOLnV^UFj%C@~QsdVt2wb#=BM~DWYkwfQw

5%uB8`hO3X(h!Uy@Q`;6h6gZ^}<7+O_|$b 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�u^I{tlE9e}E|>UZ^RiA>mK>Z-1ZoqG6%m{{ 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

?(dx6j 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 NUmZ^S=v5gJQB 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 S5x)Y!KUGC7g?INXga02Nl2R-H literal 0 HcmV?d00001 diff --git a/thirdparty/SameBoy-old/QuickLook/ColorCartridgeTemplate.png b/thirdparty/SameBoy-old/QuickLook/ColorCartridgeTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..356e45d29e1a2a4ee3d54660e3869a9703915091 GIT binary patch literal 1097768 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

5%uB8`hO3X(h!Uy@Q`;6h6gZ^}<7+O_|$b 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�u^I{tlE9e}E|>UZ^RiA>mK>Z-1ZoqG6%m{{ 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