diff --git a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorDiskController.m b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorDiskController.m index 1af75d2a..ed0c74db 100644 --- a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorDiskController.m +++ b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorDiskController.m @@ -59,7 +59,7 @@ BOOL readOnlyA = [defaults boolForKey:kApple2PrefStartupDiskAProtected]; if (startupDiskA) { - const char *err = c_new_diskette_6(0, [[NSString stringWithFormat:@"%@.gz", startupDiskA] UTF8String], readOnlyA); + const char *err = disk6_insert(0, [[NSString stringWithFormat:@"%@.gz", startupDiskA] UTF8String], readOnlyA); if (!err) { [self.diskInA setStringValue:[[startupDiskA pathComponents] lastObject]]; @@ -73,7 +73,7 @@ BOOL readOnlyB = [defaults boolForKey:kApple2PrefStartupDiskBProtected]; if (startupDiskB) { - const char *err = c_new_diskette_6(1, [[NSString stringWithFormat:@"%@.gz", startupDiskB] UTF8String], readOnlyB); + const char *err = disk6_insert(1, [[NSString stringWithFormat:@"%@.gz", startupDiskB] UTF8String], readOnlyB); if (!err) { [self.diskInB setStringValue:[[startupDiskB pathComponents] lastObject]]; @@ -95,22 +95,22 @@ if ([self.startupLoadDiskA state] == NSOnState) { - if (disk6.disk[0].fp) + if (disk6.disk[0].fd >= 0) { NSString *diskA = [NSString stringWithUTF8String:disk6.disk[0].file_name]; [defaults setObject:diskA forKey:kApple2PrefStartupDiskA]; - NSButtonCell *readOnlyChoice = [[[self diskAProtection] cells] firstObject]; + NSButtonCell *readOnlyChoice = (NSButtonCell *)[[[self diskAProtection] cells] firstObject]; [defaults setBool:([readOnlyChoice state] == NSOnState) forKey:kApple2PrefStartupDiskAProtected]; } } if ([self.startupLoadDiskB state] == NSOnState) { - if (disk6.disk[1].fp) + if (disk6.disk[1].fd >= 0) { NSString *diskB = [NSString stringWithUTF8String:disk6.disk[1].file_name]; [defaults setObject:diskB forKey:kApple2PrefStartupDiskB]; - NSButtonCell *readOnlyChoice = [[[self diskBProtection] cells] firstObject]; + NSButtonCell *readOnlyChoice = (NSButtonCell *)[[[self diskBProtection] cells] firstObject]; [defaults setBool:([readOnlyChoice state] == NSOnState) forKey:kApple2PrefStartupDiskBProtected]; } } @@ -118,13 +118,13 @@ - (void)_protectionChangedForDrive:(int)drive { - if (disk6.disk[drive].fp == NULL) + if (disk6.disk[drive].fd < 0) { return; } // HACK NOTE : dispatch so that state of outlet property is set properly dispatch_async(dispatch_get_main_queue(), ^{ - NSButtonCell *readOnlyChoice = [[(drive == 0 ? [self diskAProtection] : [self diskBProtection]) cells] firstObject]; + NSButtonCell *readOnlyChoice = (NSButtonCell *)[[(drive == 0 ? [self diskAProtection] : [self diskBProtection]) cells] firstObject]; NSString *path = [NSString stringWithUTF8String:disk6.disk[drive].file_name]; [self _insertDisketteInDrive:drive path:path type:[EmulatorDiskController extensionForPath:path] readOnly:([readOnlyChoice state] == NSOnState)]; [self _savePrefs]; @@ -143,13 +143,13 @@ - (BOOL)_insertDisketteInDrive:(int)drive path:(NSString *)path type:(NSString *)type readOnly:(BOOL)readOnly { - c_eject_6(drive); + disk6_eject(drive); - const char *errMsg = c_new_diskette_6(drive, [path UTF8String], readOnly); + const char *errMsg = disk6_insert(drive, [path UTF8String], readOnly); if (errMsg) { path = [NSString stringWithFormat:@"%@.gz", path]; - errMsg = c_new_diskette_6(drive, [path UTF8String], readOnly); + errMsg = disk6_insert(drive, [path UTF8String], readOnly); if (errMsg) { NSAlert *alert = [NSAlert alertWithError:[NSError errorWithDomain:[NSString stringWithUTF8String:errMsg] code:-1 userInfo:nil]]; @@ -296,13 +296,13 @@ - (IBAction)chooseDriveA:(id)sender { - NSButtonCell *readOnlyChoice = [[[self diskAProtection] cells] firstObject]; + NSButtonCell *readOnlyChoice = (NSButtonCell *)[[[self diskAProtection] cells] firstObject]; [self _chooseDisk:0 readOnly:([readOnlyChoice state] == NSOnState)]; } - (IBAction)chooseDriveB:(id)sender { - NSButtonCell *readOnlyChoice = [[[self diskBProtection] cells] firstObject]; + NSButtonCell *readOnlyChoice = (NSButtonCell *)[[[self diskBProtection] cells] firstObject]; [self _chooseDisk:1 readOnly:([readOnlyChoice state] == NSOnState)]; } diff --git a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorGLView.m b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorGLView.m index 11ac5237..36d83057 100644 --- a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorGLView.m +++ b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorGLView.m @@ -189,7 +189,7 @@ static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt // to [self openGLContext]) [[self openGLContext] makeCurrentContext]; - timing_startCPU(); + emulator_start(); // Synchronize buffer swaps with vertical refresh rate GLint swapInt = 1; @@ -313,8 +313,8 @@ static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)application { - c_eject_6(0); - c_eject_6(1); + disk6_eject(0); + disk6_eject(1); return NSTerminateNow; } diff --git a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.m b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.m index 7af48d1e..8d31c517 100644 --- a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.m +++ b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.m @@ -215,7 +215,7 @@ [self _savePrefs]; #warning HACK TODO FIXME need to refactor video resetting procedure - video_set(0); + video_reset(); video_setpage(!!(softswitches & SS_SCREEN)); video_redraw(); } diff --git a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorWindowController.m b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorWindowController.m index 681ac20d..e80169a3 100644 --- a/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorWindowController.m +++ b/Apple2Mac/Apple2Mac/Classes/OSX/EmulatorWindowController.m @@ -123,16 +123,10 @@ { [[self pauseMenuItem] setTitle:@"Resume Emulation"]; cpu_pause(); -#ifdef AUDIO_ENABLED - SoundSystemPause(); -#endif } else { [[self pauseMenuItem] setTitle:@"Pause Emulation"]; -#ifdef AUDIO_ENABLED - SoundSystemUnpause(); -#endif cpu_resume(); } } diff --git a/src/common.h b/src/common.h index af59fb13..fbd0171d 100644 --- a/src/common.h +++ b/src/common.h @@ -13,7 +13,22 @@ #define _COMMON_H_ #if defined(__GNUC__) && !defined(_GNU_SOURCE) -# define _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#if !defined(TEMP_FAILURE_RETRY) +# warning DEFINING CUSTOM TEMP_FAILURE_RETRY(x) macro +# define TEMP_FAILURE_RETRY(exp) ({ \ + typeof (exp) _rc; \ + do { \ + _rc = (exp); \ + if (_rc == -1 && (errno == EINTR || errno == EAGAIN) ) { \ + usleep(10); \ + } else { \ + break; \ + } \ + } while (1); \ + _rc; }) #endif // custom annotations @@ -158,7 +173,13 @@ static const char *log_end = ""; extern FILE *error_log; static const char *log_end = "\n"; # define QUIT_FUNCTION(x) exit(x) -# define _LOG_CMD(str) fprintf(error_log, "%s", str) +# define _LOG_CMD(str) \ + do { \ + if (UNLIKELY(!error_log)) { \ + error_log = stderr; \ + } \ + fprintf(error_log, "%s", str); \ + } while (0); #endif #define _MYFILE_ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) diff --git a/src/disk.c b/src/disk.c index bfb21af8..23e2e49a 100644 --- a/src/disk.c +++ b/src/disk.c @@ -449,7 +449,7 @@ static size_t load_track_data(int drive) { return expected; } -static bool save_track_data(int drive) { +static void save_track_data(int drive) { SCOPE_TRACE_DISK("save_track_data"); unsigned int trk = (disk6.disk[drive].phase >> 1); diff --git a/src/misc.c b/src/misc.c index 4562d9a6..ddb72393 100644 --- a/src/misc.c +++ b/src/misc.c @@ -25,8 +25,7 @@ int argc = 0; CrashHandler_s *crashHandler = NULL; __attribute__((constructor(CTOR_PRIORITY_FIRST))) -static void _init_common() { - error_log = stderr; +static void _init_common(void) { #if defined(CONFIG_DATADIR) data_dir = strdup(CONFIG_DATADIR PATH_SEPARATOR PACKAGE_NAME); #elif defined(ANDROID) @@ -69,8 +68,8 @@ static void _shutdown_threads(void) { static struct timespec ts = { .tv_sec=0, .tv_nsec=33333333 }; nanosleep(&ts, NULL); // 30Hz framerate } while (1); -# elif defined(__APPLE__) -# error TODO FIXME ... verify leaks-n-things with instruments on Darwin +# elif !defined(__APPLE__) +# error TODO FIXME ... verify leaks-n-things with Valgrind on unknown platform # endif #endif } diff --git a/src/rom-shim.c b/src/rom-shim.c index 6f1267ad..2f9a889c 100644 --- a/src/rom-shim.c +++ b/src/rom-shim.c @@ -1,4 +1,4 @@ #ifdef __APPLE__ // include non-free components generated by genrom -#include "rom/rom.c" +#include "rom.c" #endif diff --git a/src/video/glnode.c b/src/video/glnode.c index ffcbf599..20bd426e 100644 --- a/src/video/glnode.c +++ b/src/video/glnode.c @@ -119,7 +119,7 @@ int64_t glnode_onTouchEvent(interface_touch_event_t action, int pointer_count, i #endif __attribute__((destructor(255))) -static void *_destroy_glnodes(void) { +static void _destroy_glnodes(void) { LOG("..."); glnode_array_node_s *p = head;