--- BasiliskII/src/MacOSX/main_macosx.mm 2008/01/01 09:40:32 1.19 +++ BasiliskII/src/MacOSX/main_macosx.mm 2011/03/11 16:43:09 1.23 @@ -1,5 +1,5 @@ /* - * $Id: main_macosx.mm,v 1.19 2008/01/01 09:40:32 gbeauche Exp $ + * $Id: main_macosx.mm,v 1.23 2011/03/11 16:43:09 asvitkine Exp $ * * main_macosx.mm - Startup code for MacOS X * Based (in a small way) on the default main.m, @@ -40,21 +40,21 @@ using std::string; #include "cpu_emulation.h" -#include "macos_util_macosx.h" -#include "main.h" +#include "sys.h" +#include "rom_patches.h" +#include "xpram.h" +#include "video.h" #include "prefs.h" #include "prefs_editor.h" -#include "rom_patches.h" -#include "sigsegv.h" -#include "sys.h" +#include "macos_util_macosx.h" #include "user_strings.h" #include "version.h" -#include "video.h" +#include "main.h" #include "vm_alloc.h" -#include "xpram.h" +#include "sigsegv.h" #if USE_JIT -extern void flush_icache_range(uint8 *start, uint32 size); // from compemu_support.cpp +extern void flush_icache_range(uint8 *start, uint32 size); // from compemu_support.cpp #endif #ifdef ENABLE_MON @@ -73,6 +73,9 @@ const char ROM_FILE_NAME[] = "ROM"; const int SCRATCH_MEM_SIZE = 0x10000; // Size of scratch memory area +static char *bundle = NULL; // If in an OS X application bundle, its path + + // CPU and FPU type, addressing mode int CPUType; bool CPUIs68060; @@ -152,7 +155,6 @@ static sigsegv_return_t sigsegv_handler( return SIGSEGV_RETURN_FAILURE; } - /* * Dump state when everything went wrong after a SEGV */ @@ -182,24 +184,38 @@ static void sigsegv_dump_state(sigsegv_i /* + * Screen fault handler + */ + +bool Screen_fault_handler(sigsegv_info_t *sip) +{ + return true; +} + + +/* * Main program */ static void usage(const char *prg_name) { - printf("Usage: %s [OPTION...]\n", prg_name); - printf("\nUnix options:\n"); - printf(" --help\n display this usage message\n"); - printf(" --config FILE\n read/write configuration from/to FILE\n"); - printf(" --break ADDRESS\n set ROM breakpoint\n"); - printf(" --rominfo\n dump ROM information\n"); - LoadPrefs(); // read the prefs file so PrefsPrintUsage() will print the correct default values + printf( + "Usage: %s [OPTION...]\n" + "\nUnix options:\n" + " --config FILE\n read/write configuration from/to FILE\n" + " --break ADDRESS\n set ROM breakpoint\n" + " --rominfo\n dump ROM information\n", prg_name + ); + LoadPrefs(NULL); // read the prefs file so PrefsPrintUsage() will print the correct default values PrefsPrintUsage(); exit(0); } int main(int argc, char **argv) { + const char *vmdir = NULL; + char str[256]; + // Initialize variables RAMBaseHost = NULL; ROMBaseHost = NULL; @@ -215,11 +231,13 @@ int main(int argc, char **argv) if (strcmp(argv[i], "--help") == 0) { usage(argv[0]); } else if (strncmp(argv[i], "-psn_", 5) == 0) {// OS X process identifier - i++; + argv[i++] = NULL; } else if (strcmp(argv[i], "--break") == 0) { - i++; - if (i < argc) + argv[i++] = NULL; + if (i < argc) { ROMBreakpoint = strtol(argv[i], NULL, 0); + argv[i] = NULL; + } } else if (strcmp(argv[i], "--config") == 0) { argv[i++] = NULL; if (i < argc) { @@ -228,19 +246,53 @@ int main(int argc, char **argv) argv[i] = NULL; } } else if (strcmp(argv[i], "--rominfo") == 0) { + argv[i] = NULL; PrintROMInfo = true; - } else if (argv[i][0] == '-') { - fprintf(stderr, "Unrecognized option '%s'\n", argv[i]); - usage(argv[0]); + } + } + + // Remove processed arguments + for (int i=1; i i) { + k -= i; + for (int j=i+k; j