/* * Enter debugging state */ static uae_u32 emulib_Debug (void) { #ifdef DEBUGGER activate_debugger (); return 1; #else return 0; #endif }
static int DEBUG (void) { #ifdef DEBUGGER activate_debugger (); return RC_OK; #else return RC_ERROR; #endif }
static RETSIGTYPE sigbrkhandler (int foo) #endif { #ifdef DEBUGGER activate_debugger (); #endif #if !defined(__unix) || defined(__NeXT__) signal (SIGINT, sigbrkhandler); #endif }
static RETSIGTYPE sigbrkhandler (int foo) #endif { #ifdef DEBUGGER activate_debugger (); #endif #ifndef HAVE_SIGACTION signal (SIGINT, sigbrkhandler); #endif }
int ui_debugger_activate( void ) { int error; fuse_emulation_pause(); /* Create the dialog box if it doesn't already exist */ if( !dialog_created ) if( create_dialog() ) return 1; gtk_widget_show_all( dialog ); error = hide_hidden_panes(); if( error ) return error; gtk_widget_set_sensitive( continue_button, 1 ); gtk_widget_set_sensitive( break_button, 0 ); if( !debugger_active ) activate_debugger(); return 0; }
int uade_main (int argc, char **argv) { quit_program = 0; default_prefs (&currprefs); uade_option (argc, argv); machdep_init (); if (! setup_sound ()) { __android_log_print(ANDROID_LOG_VERBOSE, "UADE", "Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; exit(1); } init_sound(); fix_options (); changed_prefs = currprefs; check_prefs_changed_cpu(); memory_init (); custom_init (); /* Must come after memory_init */ reset_frame_rate_hack (); init_m68k(); /* must come after reset_frame_rate_hack (); */ /* compiler_init (); */ if (currprefs.start_debugger) activate_debugger (); m68k_go(); close_sound (); dump_counts (); return 0; }
int my_kbd_handler (int keycode, int scancode, int newstate) { int akey = scancode2amiga (keycode, scancode); #ifdef DEBUG_KBD write_log ( "kbd_handler: keycode 0x%x, scancode 0x%x, newstate %d\n", keycode, scancode, newstate ); #endif if (akey < 0) { switch (akey) { #ifndef _WIN32_WCE case -2: if (newstate) { clearallkeys(); WIN32GUI_DisplayGUI(-1); } return 0; case -3: if (newstate) toggle_sound = 1; return 0; case -4: if (newstate) { akey = 0x62; newstate = getcapslock (); } break; case -5: if( newstate ) { // Bring up GUI-based debugger here if(currprefs.illegal_mem) { if(picasso_on)changed_prefs.gfx_pfullscreen=0; else changed_prefs.gfx_afullscreen=0; check_prefs_changed_gfx(); activate_debugger(); } } return 0; break; case -6: if(newstate) { if(picasso_on)changed_prefs.gfx_pfullscreen=!changed_prefs.gfx_pfullscreen; else changed_prefs.gfx_afullscreen=!changed_prefs.gfx_afullscreen; return 0; } break; default: if (newstate && akey >= -17 && akey <= -10) { akey = -10 - akey; if (akey & 1) { akey >>= 1; disk_eject (akey); return 0; } akey >>= 1; WIN32GUI_DisplayGUI( akey ); } return 0; #endif }
static void real_main2 (int argc, char **argv) { #if defined (NATMEM_OFFSET) && defined( _WIN32 ) && !defined( NO_WIN32_EXCEPTION_HANDLER ) extern int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ); __try #endif { if (! graphics_setup ()) { exit (1); } if (restart_config[0]) { #ifdef FILESYS free_mountinfo (currprefs.mountinfo); currprefs.mountinfo = alloc_mountinfo (); #endif default_prefs (&currprefs, 0); fix_options (); } #ifdef NATMEM_OFFSET init_shm (); #endif #ifdef FILESYS rtarea_init (); hardfile_install (); #endif if (restart_config[0]) parse_cmdline_and_init_file (argc, argv); else currprefs = changed_prefs; uae_inithrtimer (); sleep_test (); machdep_init (); if (! setup_sound ()) { write_log ("Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; } inputdevice_init (); changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (restart_program == 2) no_gui = 1; else if (restart_program == 3) no_gui = 0; if (! no_gui) { int err = gui_init (); struct uaedev_mount_info *mi = currprefs.mountinfo; currprefs = changed_prefs; currprefs.mountinfo = mi; if (err == -1) { write_log ("Failed to initialize the GUI\n"); if (restart_program == 3) { restart_program = 0; return; } } else if (err == -2) { restart_program = 0; return; } } restart_program = 0; #ifdef JIT if (!(( currprefs.cpu_level >= 2 ) && ( currprefs.address_space_24 == 0 ) && ( currprefs.cachesize ))) canbang = 0; #endif #ifdef _WIN32 logging_init(); /* Yes, we call this twice - the first case handles when the user has loaded a config using the cmd-line. This case handles loads through the GUI. */ #endif fix_options (); changed_prefs = currprefs; #ifdef SAVESTATE savestate_init (); #endif #ifdef SCSIEMU scsidev_install (); #endif #ifdef AUTOCONFIG /* Install resident module to get 8MB chipmem, if requested */ rtarea_setup (); #endif keybuf_init (); /* Must come after init_joystick */ #ifdef AUTOCONFIG expansion_init (); #endif memory_init (); memory_reset (); #ifdef FILESYS filesys_install (); #endif #ifdef AUTOCONFIG bsdlib_install (); emulib_install (); uaeexe_install (); native2amiga_install (); #endif if (custom_init ()) { /* Must come after memory_init */ #ifdef SERIAL_PORT serial_init (); #endif DISK_init (); reset_frame_rate_hack (); init_m68k(); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init ()) { #ifdef DEBUGGER setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); #endif #ifdef WIN32 #ifdef FILESYS filesys_init (); /* New function, to do 'add_filesys_unit()' calls at start-up */ #endif #endif if (sound_available && currprefs.produce_sound > 1 && ! init_audio ()) { write_log ("Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; } start_program (); } } } #if defined (NATMEM_OFFSET) && defined( _WIN32 ) && !defined( NO_WIN32_EXCEPTION_HANDLER ) __except( EvalException( GetExceptionInformation(), GetExceptionCode() ) ) { // EvalException does the good stuff... } #endif }
static int real_main2 (int argc, TCHAR **argv) { #ifdef USE_SDL int result = (SDL_Init (SDL_INIT_TIMER | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE) == 0); if (result) atexit (SDL_Quit); #endif set_config_changed (); if (restart_config[0]) { default_prefs (&currprefs, 0); fixup_prefs (&currprefs); } if (! graphics_setup ()) { write_log (_T("Graphics Setup Failed\n")); exit (1); } if (restart_config[0]) parse_cmdline_and_init_file (argc, argv); else currprefs = changed_prefs; // uae_inithrtimer (); if (!machdep_init ()) { write_log (_T("Machine Init Failed.\n")); restart_program = 0; return -1; } if (console_emulation) { consolehook_config (&currprefs); fixup_prefs (&currprefs); } if (! setup_sound ()) { write_log (_T("Sound driver unavailable: Sound output disabled\n")); currprefs.produce_sound = 0; } inputdevice_init (); changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (restart_program == 2) no_gui = 1; else if (restart_program == 3) no_gui = 0; restart_program = 0; if (! no_gui && currprefs.start_gui) { int err = gui_init (); currprefs = changed_prefs; set_config_changed (); if (err == -1) { write_log (_T("Failed to initialize the GUI\n")); return -1; } else if (err == -2) { return 1; } } memset (&gui_data, 0, sizeof gui_data); gui_data.cd = -1; gui_data.hd = -1; gui_data.md = -1; #ifdef NATMEM_OFFSET init_shm (); #endif #ifdef PICASSO96 picasso_reset (); #endif fixup_prefs (&currprefs); #ifdef RETROPLATFORM rp_fixup_options (&currprefs); #endif changed_prefs = currprefs; target_run (); /* force sound settings change */ currprefs.produce_sound = 0; savestate_init (); keybuf_init (); /* Must come after init_joystick */ memory_hardreset (2); memory_reset (); #ifdef AUTOCONFIG native2amiga_install (); #endif custom_init (); /* Must come after memory_init */ #ifdef SERIAL_PORT serial_init (); #endif DISK_init (); reset_frame_rate_hack (); init_m68k (); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init ()) { #ifdef DEBUGGER setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); #endif if (!init_audio ()) { if (sound_available && currprefs.produce_sound > 1) { write_log (_T("Sound driver unavailable: Sound output disabled\n")); } currprefs.produce_sound = 0; } start_program (); } return 0; }
/* * Initialization of emulator proper */ static int do_init_machine (void) { #ifdef JIT if (!(( currprefs.cpu_level >= 2 ) && ( currprefs.address_space_24 == 0 ) && ( currprefs.cachesize ))) canbang = 0; #endif #ifdef _WIN32 logging_init(); /* Yes, we call this twice - the first case handles when the user has loaded a config using the cmd-line. This case handles loads through the GUI. */ #endif #ifdef SAVESTATE savestate_init (); #endif #ifdef SCSIEMU scsidev_install (); #endif #ifdef AUTOCONFIG /* Install resident module to get 8MB chipmem, if requested */ rtarea_setup (); #endif keybuf_init (); /* Must come after init_joystick */ #ifdef AUTOCONFIG expansion_init (); #endif memory_init (); memory_reset (); #ifdef FILESYS filesys_install (); #endif #ifdef AUTOCONFIG bsdlib_install (); emulib_install (); uaeexe_install (); native2amiga_install (); #endif if (custom_init ()) { /* Must come after memory_init */ #ifdef SERIAL_PORT serial_init (); #endif DISK_init (); reset_frame_rate_hack (); init_m68k(); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init ()) { #ifdef DEBUGGER setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); #endif #ifdef WIN32 #ifdef FILESYS filesys_init (); /* New function, to do 'add_filesys_unit()' calls at start-up */ #endif #endif if (sound_available && currprefs.produce_sound > 1 && ! audio_init ()) { write_log ("Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; } return 1; } } return 0; }
static int real_main2 (int argc, TCHAR **argv) { #if (defined (_WIN32) || defined (_WIN64)) && !defined (NO_WIN32_EXCEPTION_HANDLER) extern int EvalException (LPEXCEPTION_POINTERS blah, int n_except); __try #endif { #ifdef USE_SDL int result = (SDL_Init (SDL_INIT_TIMER | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE) == 0); if (result) atexit (SDL_Quit); #endif config_changed = 1; if (restart_config[0]) { default_prefs (&currprefs, 0); fixup_prefs (&currprefs); } if (! graphics_setup ()) { write_log ("Graphics Setup Failed\n"); exit (1); } #ifdef NATMEM_OFFSET preinit_shm (); #endif if (restart_config[0]) parse_cmdline_and_init_file (argc, argv); else currprefs = changed_prefs; uae_inithrtimer (); if (!machdep_init ()) { write_log ("Machine Init Failed.\n"); restart_program = 0; return -1; } if (console_emulation) { consolehook_config (&currprefs); fixup_prefs (&currprefs); } if (! setup_sound ()) { write_log ("Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; } inputdevice_init (); changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (restart_program == 2) no_gui = 1; else if (restart_program == 3) no_gui = 0; restart_program = 0; if (! no_gui) { int err = gui_init (); currprefs = changed_prefs; config_changed = 1; if (err == -1) { write_log ("Failed to initialize the GUI\n"); return -1; } else if (err == -2) { return 1; } } #ifdef NATMEM_OFFSET init_shm (); #endif #ifdef JIT if (!(currprefs.cpu_model >= 68020 && currprefs.address_space_24 == 0 && currprefs.cachesize)) canbang = 0; #endif fixup_prefs (&currprefs); changed_prefs = currprefs; target_run (); /* force sound settings change */ currprefs.produce_sound = 0; #ifdef AUTOCONFIG /* Install resident module to get 8MB chipmem, if requested */ rtarea_setup (); #endif #ifdef FILESYS rtarea_init (); uaeres_install (); hardfile_install (); #endif savestate_init (); #ifdef SCSIEMU scsi_reset (); scsidev_install (); #endif #ifdef SANA2 netdev_install (); #endif #ifdef UAESERIAL uaeserialdev_install (); #endif keybuf_init (); /* Must come after init_joystick */ #ifdef AUTOCONFIG expansion_init (); #endif #ifdef FILESYS filesys_install (); #endif target_startup_sequence (&currprefs); memory_init (); memory_reset (); #ifdef AUTOCONFIG #if defined (BSDSOCKET) bsdlib_install (); #endif emulib_install (); uaeexe_install (); native2amiga_install (); #endif custom_init (); /* Must come after memory_init */ #ifdef SERIAL_PORT serial_init (); #endif DISK_init (); reset_frame_rate_hack (); init_m68k (); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init ()) { #ifdef DEBUGGER setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); #endif if (!init_audio ()) { if (sound_available && currprefs.produce_sound > 1) { write_log ("Sound driver unavailable: Sound output disabled\n"); } currprefs.produce_sound = 0; } start_program (); } } #if (defined (_WIN32) || defined (_WIN64)) && !defined (NO_WIN32_EXCEPTION_HANDLER) #ifdef JIT __except( EvalException( GetExceptionInformation(), GetExceptionCode() ) ) #else __except (DummyException (GetExceptionInformation (), GetExceptionCode ())) #endif { // EvalException does the good stuff... } #endif return 0; }
static int real_main2 (int argc, TCHAR **argv) { #ifdef USE_SDL SDL_Init (SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE); #endif set_config_changed (); if (restart_config[0]) { default_prefs (&currprefs, true, 0); fixup_prefs (&currprefs, true); } if (! graphics_setup ()) { exit (1); } #ifdef NATMEM_OFFSET //preinit_shm (); #endif if (restart_config[0]) parse_cmdline_and_init_file (argc, argv); else currprefs = changed_prefs; if (!machdep_init ()) { restart_program = 0; return -1; } if (console_emulation) { consolehook_config (&currprefs); fixup_prefs (&currprefs, true); } if (! setup_sound ()) { write_log (_T("Sound driver unavailable: Sound output disabled\n")); currprefs.produce_sound = 0; } inputdevice_init (); changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (restart_program == 2) no_gui = 1; else if (restart_program == 3) no_gui = 0; restart_program = 0; if (! no_gui) { int err = gui_init (); currprefs = changed_prefs; set_config_changed (); if (err == -1) { write_log (_T("Failed to initialize the GUI\n")); return -1; } else if (err == -2) { return 1; } } memset (&gui_data, 0, sizeof gui_data); gui_data.cd = -1; gui_data.hd = -1; gui_data.md = (currprefs.cs_cd32nvram || currprefs.cs_cdtvram) ? 0 : -1; logging_init (); /* Yes, we call this twice - the first case handles when the user has loaded a config using the cmd-line. This case handles loads through the GUI. */ #ifdef NATMEM_OFFSET init_shm (); #endif #ifdef WITH_LUA uae_lua_init (); #endif #ifdef PICASSO96 picasso_reset (); #endif #if 0 #ifdef JIT if (!(currprefs.cpu_model >= 68020 && currprefs.address_space_24 == 0 && currprefs.cachesize)) canbang = 0; #endif #endif fixup_prefs (&currprefs, true); #ifdef RETROPLATFORM rp_fixup_options (&currprefs); #endif changed_prefs = currprefs; target_run (); /* force sound settings change */ currprefs.produce_sound = 0; savestate_init (); keybuf_init (); /* Must come after init_joystick */ memory_hardreset (2); memory_reset (); #ifdef AUTOCONFIG native2amiga_install (); #endif custom_init (); /* Must come after memory_init */ #ifdef SERIAL_PORT serial_init (); #endif DISK_init (); #ifdef WITH_PPC uae_ppc_reset(true); #endif reset_frame_rate_hack (); init_m68k (); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init (true)) { setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); if (!init_audio ()) { if (sound_available && currprefs.produce_sound > 1) { write_log (_T("Sound driver unavailable: Sound output disabled\n")); } currprefs.produce_sound = 0; } start_program (); } return 0; }
/* * Handle CTRL-C signals */ static RETSIGTYPE sigbrkhandler(int foo) { #ifdef DEBUGGER activate_debugger (); #endif }
static int real_main2 (int argc, TCHAR **argv) { #ifdef USE_SDL SDL_Init (SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE); #endif config_changed = 1; if (restart_config[0]) { default_prefs (&currprefs, 0); fixup_prefs (&currprefs); } if (! graphics_setup ()) { exit (1); } #ifdef NATMEM_OFFSET preinit_shm (); #endif if (restart_config[0]) parse_cmdline_and_init_file (argc, argv); else currprefs = changed_prefs; if (!machdep_init ()) { restart_program = 0; return -1; } if (console_emulation) { consolehook_config (&currprefs); fixup_prefs (&currprefs); } if (! setup_sound ()) { write_log (L"Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; } inputdevice_init (); changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (restart_program == 2) no_gui = 1; else if (restart_program == 3) no_gui = 0; restart_program = 0; if (! no_gui) { int err = gui_init (); currprefs = changed_prefs; config_changed = 1; if (err == -1) { write_log (L"Failed to initialize the GUI\n"); return -1; } else if (err == -2) { return 1; } } logging_init (); /* Yes, we call this twice - the first case handles when the user has loaded a config using the cmd-line. This case handles loads through the GUI. */ #ifdef NATMEM_OFFSET init_shm (); #endif #ifdef JIT if (!(currprefs.cpu_model >= 68020 && currprefs.address_space_24 == 0 && currprefs.cachesize)) canbang = 0; #endif fixup_prefs (&currprefs); changed_prefs = currprefs; target_run (); /* force sound settings change */ currprefs.produce_sound = 0; #ifdef AUTOCONFIG rtarea_setup (); #endif #ifdef FILESYS rtarea_init (); uaeres_install (); hardfile_install (); #endif savestate_init (); #ifdef SCSIEMU scsi_reset (); scsidev_install (); #endif #ifdef SANA2 netdev_install (); #endif #ifdef UAESERIAL uaeserialdev_install (); #endif keybuf_init (); /* Must come after init_joystick */ #ifdef AUTOCONFIG expansion_init (); #endif #ifdef FILESYS filesys_install (); #endif memory_init (); memory_reset (); #ifdef AUTOCONFIG #if defined (BSDSOCKET) bsdlib_install (); #endif emulib_install (); uaeexe_install (); native2amiga_install (); #endif custom_init (); /* Must come after memory_init */ #ifdef SERIAL_PORT serial_init (); #endif DISK_init (); reset_frame_rate_hack (); init_m68k (); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init ()) { setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); if (!init_audio ()) { if (sound_available && currprefs.produce_sound > 1) { write_log (L"Sound driver unavailable: Sound output disabled\n"); } currprefs.produce_sound = 0; } start_program (); } return 0; }
void uadecore_get_amiga_message(void) { uae_u8 *ptr; uae_u8 *nameptr; int x; unsigned int mins, maxs, curs; int status; int src, dst, len; size_t off; char tmpstr[256]; char *srcstr, *dststr; struct uade_file *f; uint32_t *u32ptr; uint8_t space[256]; struct uade_msg *um = (struct uade_msg *) space; x = amiga_get_u32(SCORE_INPUT_MSG); /* message type from amiga */ switch (x) { case AMIGAMSG_SONG_END: uadecore_song_end("player", 0); break; case AMIGAMSG_SUBSINFO: mins = amiga_get_u32(SCORE_MIN_SUBSONG); maxs = amiga_get_u32(SCORE_MAX_SUBSONG); curs = amiga_get_u32(SCORE_CUR_SUBSONG); /* Brain damage in TFMX BC Kid Despair */ if (maxs < mins) { uadecore_send_debug("Odd subsongs. Eagleplayer reported (min, cur, max) == (%u, %u, %u)", mins, curs, maxs); maxs = mins; } /* Brain damage in Bubble bobble custom */ if (curs > maxs) { uadecore_send_debug("Odd subsongs. Eagleplayer reported (min, cur, max) == (%u, %u, %u)", mins, curs, maxs); maxs = curs; } um->msgtype = UADE_REPLY_SUBSONG_INFO; um->size = 12; u32ptr = (uint32_t *) um->data; u32ptr[0] = htonl(mins); u32ptr[1] = htonl(maxs); u32ptr[2] = htonl(curs); if (uade_send_message(um, &uadecore_ipc)) { fprintf(stderr, "uadecore: Could not send subsong info message.\n"); exit(1); } break; case AMIGAMSG_PLAYERNAME: strlcpy(tmpstr, (char *) get_real_address(0x204), sizeof tmpstr); uade_send_string(UADE_REPLY_PLAYERNAME, tmpstr, &uadecore_ipc); break; case AMIGAMSG_MODULENAME: strlcpy(tmpstr, (char *) get_real_address(0x204), sizeof tmpstr); uade_send_string(UADE_REPLY_MODULENAME, tmpstr, &uadecore_ipc); break; case AMIGAMSG_FORMATNAME: strlcpy(tmpstr, (char *) get_real_address(0x204), sizeof tmpstr); uade_send_string(UADE_REPLY_FORMATNAME, tmpstr, &uadecore_ipc); break; case AMIGAMSG_GENERALMSG: uadecore_send_debug((char *) get_real_address(0x204)); break; case AMIGAMSG_CHECKERROR: uadecore_song_end("module check failed", 1); break; case AMIGAMSG_SCORECRASH: if (uadecore_debug) { fprintf(stderr, "uadecore: Score crashed.\n"); activate_debugger(); break; } uadecore_song_end("score crashed", 1); break; case AMIGAMSG_SCOREDEAD: if (uadecore_debug) { fprintf(stderr, "uadecore: Score is dead.\n"); activate_debugger(); break; } uadecore_song_end("score died", 1); break; case AMIGAMSG_LOADFILE: /* * Load a file named at 0x204 (name pointer) to address pointed by * 0x208 and insert the length to 0x20C. * For example, R-Type (TFMX format) uses this. */ src = amiga_get_u32(0x204); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: Load name in invalid address range.\n"); break; } nameptr = get_real_address(src); f = lookup_amiga_file_cache((const char *) nameptr); if (f == NULL) { uadecore_send_debug("load: request error: %s", nameptr); exit(1); } if (f->data == NULL) { /* File not found */ uadecore_send_debug("load: file not found: %s", nameptr); break; } dst = amiga_get_u32(0x208); len = uade_safe_copy(dst, f->data, f->size); if (len == 0 && f->size > 0) uadecore_send_debug("load: too long a file to copy"); uade_put_long(0x20C, len); uadecore_send_debug("load: %s ptr 0x%x size 0x%x", nameptr, dst, len); break; case AMIGAMSG_READ: /* Used by "mdat.Crystal_Palace-1", for example */ src = amiga_get_u32(0x204); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: Read name in invalid address range.\n"); break; } nameptr = get_real_address(src); f = lookup_amiga_file_cache((const char *) nameptr); if (f == NULL) { uadecore_send_debug("read: request error: %s", nameptr); exit(1); } x = 0; if (f->data != NULL) { dst = amiga_get_u32(0x208); off = amiga_get_u32(0x20C); len = amiga_get_u32(0x210); if (off >= f->size) { uadecore_send_debug("read: file offset over the file end"); } else { size_t endpos = off + ((size_t) len); size_t tocopy = len; if (endpos > f->size) tocopy = f->size - off; x = uade_safe_copy(dst, f->data + off, tocopy); } uadecore_send_debug("read: %s dst 0x%x off 0x%x len 0x%x bytesread 0x%x", nameptr, dst, off, len, x); } else { uadecore_send_debug("read: file not found: %s", nameptr); } uade_put_long(0x214, x); break; case AMIGAMSG_FILESIZE: /* Used by "mdat.Crystal_Palace-1", for example */ src = amiga_get_u32(0x204); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: Filesize name in invalid address range.\n"); break; } nameptr = get_real_address(src); f = lookup_amiga_file_cache((const char *) nameptr); if (f == NULL) { uadecore_send_debug("filesize: request error: %s", nameptr); exit(1); } len = 0; x = 0; if (f->data != NULL) { len = f->size; x = -1; uadecore_send_debug("filesize: file %s res 0x%x", nameptr, len); } else { /* Note, f->size == -1 if file does not exist */ uadecore_send_debug("filesize: file not found: %s", nameptr); } uade_put_long(0x208, len); uade_put_long(0x20C, x); break; case AMIGAMSG_TIME_CRITICAL: uadecore_time_critical = amiga_get_u32(0x204) ? 1 : 0; if (speed_hack < 0) { /* a negative value forbids use of speed hack */ uadecore_time_critical = 0; } break; case AMIGAMSG_GET_INFO: src = amiga_get_u32(0x204); dst = amiga_get_u32(0x208); len = amiga_get_u32(0x20C); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: get info: Invalid src: 0x%x\n", src); break; } if (len <= 0) { fprintf(stderr, "uadecore: get info: len = %d\n", len); break; } if (!valid_address(dst, len)) { fprintf(stderr, "uadecore: get info: Invalid dst: 0x%x\n", dst); break; } srcstr = (char *) get_real_address(src); dststr = (char *) get_real_address(dst); uadecore_send_debug("score issued an info request: %s (maxlen %d)", srcstr, len); len = get_info_for_ep(dststr, srcstr, len); /* Send printable debug */ do { size_t i; size_t maxspace = sizeof space; if (len <= 0) { maxspace = 1; } else { if (len < maxspace) maxspace = len; } for (i = 0; i < maxspace; i++) { space[i] = dststr[i]; if (space[i] == 0) space[i] = ' '; } if (i < maxspace) { space[i] = 0; } else { space[maxspace - 1] = 0; } uadecore_send_debug("reply to score: %s (total len %d)", space, len); } while (0); uade_put_long(0x20C, len); break; case AMIGAMSG_START_OUTPUT: uadecore_audio_output = 1; break; default: fprintf(stderr,"uadecore: Unknown message from score (%d)\n", x); break; } }
void uade_get_amiga_message(void) { uae_u8 *ptr; uae_u8 *nameptr; FILE *file; int x; unsigned int mins, maxs, curs; int status; int src, dst, off, len; char tmpstr[256]; char *srcstr, *dststr; uint32_t *u32ptr; uint8_t space[256]; struct uade_msg *um = (struct uade_msg *) space; x = uade_get_u32(SCORE_INPUT_MSG); /* message type from amiga */ switch (x) { case AMIGAMSG_SONG_END: uade_song_end("player", 0); break; case AMIGAMSG_SUBSINFO: mins = uade_get_u32(SCORE_MIN_SUBSONG); maxs = uade_get_u32(SCORE_MAX_SUBSONG); curs = uade_get_u32(SCORE_CUR_SUBSONG); /* Brain damage in TFMX BC Kid Despair */ if (maxs < mins) { uade_send_debug("Odd subsongs. Eagleplayer reported (min, cur, max) == (%u, %u, %u)", mins, curs, maxs); maxs = mins; } /* Brain damage in Bubble bobble custom */ if (curs > maxs) { uade_send_debug("Odd subsongs. Eagleplayer reported (min, cur, max) == (%u, %u, %u)", mins, curs, maxs); maxs = curs; } um->msgtype = UADE_REPLY_SUBSONG_INFO; um->size = 12; u32ptr = (uint32_t *) um->data; u32ptr[0] = htonl(mins); u32ptr[1] = htonl(maxs); u32ptr[2] = htonl(curs); if (uade_send_message(um, &uadeipc)) { fprintf(stderr, "uadecore: Could not send subsong info message.\n"); exit(-1); } break; case AMIGAMSG_PLAYERNAME: strlcpy(tmpstr, (char *) get_real_address(0x204), sizeof tmpstr); uade_send_string(UADE_REPLY_PLAYERNAME, tmpstr, &uadeipc); break; case AMIGAMSG_MODULENAME: strlcpy(tmpstr, (char *) get_real_address(0x204), sizeof tmpstr); uade_send_string(UADE_REPLY_MODULENAME, tmpstr, &uadeipc); break; case AMIGAMSG_FORMATNAME: strlcpy(tmpstr, (char *) get_real_address(0x204), sizeof tmpstr); uade_send_string(UADE_REPLY_FORMATNAME, tmpstr, &uadeipc); break; case AMIGAMSG_GENERALMSG: uade_send_debug((char *) get_real_address(0x204)); break; case AMIGAMSG_CHECKERROR: uade_song_end("module check failed", 1); break; case AMIGAMSG_SCORECRASH: if (uade_debug) { fprintf(stderr, "uadecore: Score crashed.\n"); activate_debugger(); break; } uade_song_end("score crashed", 1); break; case AMIGAMSG_SCOREDEAD: if (uade_debug) { fprintf(stderr, "uadecore: Score is dead.\n"); activate_debugger(); break; } uade_song_end("score died", 1); break; case AMIGAMSG_LOADFILE: /* load a file named at 0x204 (name pointer) to address pointed by 0x208 and insert the length to 0x20C */ src = uade_get_u32(0x204); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: Load name in invalid address range.\n"); break; } nameptr = get_real_address(src); if ((file = uade_open_amiga_file((char *) nameptr, uade_player_dir))) { dst = uade_get_u32(0x208); len = uade_safe_load(dst, file, uade_highmem - dst); fclose(file); file = NULL; uade_put_long(0x20C, len); uade_send_debug("load success: %s ptr 0x%x size 0x%x", nameptr, dst, len); } else { uade_send_debug("load: file not found: %s", nameptr); } break; case AMIGAMSG_READ: src = uade_get_u32(0x204); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: Read name in invalid address range.\n"); break; } nameptr = get_real_address(src); dst = uade_get_u32(0x208); off = uade_get_u32(0x20C); len = uade_get_u32(0x210); if ((file = uade_open_amiga_file((char *) nameptr, uade_player_dir))) { if (fseek(file, off, SEEK_SET)) { perror("can not fseek to position"); x = 0; } else { x = uade_safe_load(dst, file, len); if (x > len) x = len; } fclose(file); uade_send_debug("read %s dst 0x%x off 0x%x len 0x%x res 0x%x", nameptr, dst, off, len, x); uade_put_long(0x214, x); } else { uade_send_debug("read: file not found: %s", nameptr); uade_put_long(0x214, 0); } break; case AMIGAMSG_FILESIZE: src = uade_get_u32(0x204); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: Filesize name in invalid address range.\n"); break; } nameptr = get_real_address(src); if ((file = uade_open_amiga_file((char *) nameptr, uade_player_dir))) { fseek(file, 0, SEEK_END); len = ftell(file); fclose(file); uade_put_long(0x208, len); uade_put_long(0x20C, -1); uade_send_debug("filesize: file %s res 0x%x", nameptr, len); } else { uade_put_long(0x208, 0); uade_put_long(0x20C, 0); uade_send_debug("filesize: file not found: %s", nameptr); } break; case AMIGAMSG_TIME_CRITICAL: uade_time_critical = uade_get_u32(0x204) ? 1 : 0; if (uade_speed_hack < 0) { /* a negative value forbids use of speed hack */ uade_time_critical = 0; } break; case AMIGAMSG_GET_INFO: src = uade_get_u32(0x204); dst = uade_get_u32(0x208); len = uade_get_u32(0x20C); if (!uade_valid_string(src)) { fprintf(stderr, "uadecore: get info: Invalid src: 0x%x\n", src); break; } if (len <= 0) { fprintf(stderr, "uadecore: get info: len = %d\n", len); break; } if (!valid_address(dst, len)) { fprintf(stderr, "uadecore: get info: Invalid dst: 0x%x\n", dst); break; } srcstr = (char *) get_real_address(src); dststr = (char *) get_real_address(dst); uade_send_debug("score issued an info request: %s (maxlen %d)\n", srcstr, len); len = get_info_for_ep(dststr, srcstr, len); /* Send printable debug */ do { size_t i; size_t maxspace = sizeof space; if (len <= 0) { maxspace = 1; } else { if (len < maxspace) maxspace = len; } for (i = 0; i < maxspace; i++) { space[i] = dststr[i]; if (space[i] == 0) space[i] = ' '; } if (i < maxspace) { space[i] = 0; } else { space[maxspace - 1] = 0; } uade_send_debug("reply to score: %s (total len %d)\n", space, len); } while (0); uade_put_long(0x20C, len); break; case AMIGAMSG_START_OUTPUT: uade_audio_output = 1; uade_send_debug("Starting audio output at %d", uade_audio_skip); break; default: fprintf(stderr,"uadecore: Unknown message from score (%d)\n", x); break; } }
void uade_handle_r_state(void) { uint8_t space[UADE_MAX_MESSAGE_SIZE]; struct uade_msg *um = (struct uade_msg *) space; int ret; uint32_t x, y; while (1) { ret = uade_receive_message(um, sizeof(space), &uadeipc); if (ret == 0) { fprintf(stderr, "uadecore: No more input. Exiting succesfully.\n"); exit(0); } else if (ret < 0) { fprintf(stderr, "uadecore: Error on input. Exiting with error.\n"); exit(-1); } if (um->msgtype == UADE_COMMAND_TOKEN)break; switch (um->msgtype) { case UADE_EXIT: //uade_reboot = 1; quit_program=1; break; case UADE_COMMAND_ACTIVATE_DEBUGGER: fprintf(stderr, "uadecore: Received activate debugger message.\n"); activate_debugger(); uade_debug = 1; break; case UADE_COMMAND_CHANGE_SUBSONG: if (uade_parse_u32_message(&x, um)) { fprintf(stderr, "uadecore: Invalid size with change subsong.\n"); exit(-1); } change_subsong(x); break; case UADE_COMMAND_FILTER: if (uade_parse_two_u32s_message(&x, &y, um)) { fprintf(stderr, "uadecore: Invalid size with filter command\n"); exit(-1); } audio_set_filter(x, y); break; case UADE_COMMAND_IGNORE_CHECK: /* override bit for sound format checking */ uade_put_long(SCORE_FORCE, 1); break; case UADE_COMMAND_SET_FREQUENCY: if (uade_parse_u32_message(&x, um)) { fprintf(stderr, "Invalid frequency message size: %u\n", um->size); exit(-1); } set_sound_freq(x); break; case UADE_COMMAND_SET_PLAYER_OPTION: uade_check_fix_string(um, 256); add_ep_option((char *) um->data); break; case UADE_COMMAND_SET_RESAMPLING_MODE: uade_check_fix_string(um, 16); audio_set_resampler((char *) um->data); break; case UADE_COMMAND_SPEED_HACK: uade_time_critical = 1; break; case UADE_COMMAND_READ: if (uade_read_size != 0) { fprintf(stderr, "uadecore: Read not allowed when uade_read_size > 0.\n"); exit(-1); } if (uade_parse_u32_message(&x, um)) { fprintf(stderr, "uadecore: Invalid size on read command.\n"); exit(-1); } uade_read_size = x; if (uade_read_size == 0 || uade_read_size > MAX_SOUND_BUF_SIZE || (uade_read_size & 3) != 0) { fprintf(stderr, "uadecore: Invalid read size: %d\n", uade_read_size); exit(-1); } break; case UADE_COMMAND_REBOOT: uade_reboot = 1; break; case UADE_COMMAND_SET_NTSC: fprintf(stderr, "\nuadecore: Changing to NTSC mode.\n"); uade_set_ntsc(1); break; case UADE_COMMAND_SONG_END_NOT_POSSIBLE: uade_set_automatic_song_end(0); break; case UADE_COMMAND_SET_SUBSONG: if (uade_parse_u32_message(&x, um)) { fprintf(stderr, "uadecore: Invalid size on set subsong command.\n"); exit(-1); } uade_put_long(SCORE_SET_SUBSONG, 1); uade_put_long(SCORE_SUBSONG, x); break; case UADE_COMMAND_USE_TEXT_SCOPE: audio_use_text_scope(); break; default: fprintf(stderr, "uadecore: Received invalid command %d\n", um->msgtype); exit(-1); } } }
void real_main (int argc, char **argv) { FILE *hf; #ifdef USE_SDL SDL_Init (SDL_INIT_EVERYTHING | SDL_INIT_NOPARACHUTE); #endif default_prefs (&currprefs); #ifdef SYSTEM_CFGDIR scan_configs (SYSTEM_CFGDIR); #endif /* Can be overriden in graphics_setup, although there's not much of a point. Fullscreen modes are filled in by graphics_setup. */ gfx_windowed_modes = default_windowed_modes; n_windowed_modes = sizeof default_windowed_modes / sizeof *default_windowed_modes; if (! graphics_setup ()) { exit (1); } rtarea_init (); hardfile_install (); scsidev_install (); parse_cmdline_and_init_file (argc, argv); machdep_init (); init_gtod (); if (! setup_sound ()) { write_log ("Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; } inputdevice_init (); changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (! no_gui) { int err = gui_init (1); currprefs = changed_prefs; if (err == -1) { write_log ("Failed to initialize the GUI\n"); } else if (err == -2) { exit (0); } } if (sound_available && currprefs.produce_sound > 1 && ! init_audio ()) { write_log ("Sound driver unavailable: Sound output disabled\n"); currprefs.produce_sound = 0; } fixup_prefs (&currprefs); changed_prefs = currprefs; #ifdef SYSTEM_ROMDIR scan_roms (SYSTEM_ROMDIR, ROMLOC_SYSTEM); #endif scan_roms (currprefs.path_rom, ROMLOC_USER); /* Install resident module to get 8MB chipmem, if requested */ rtarea_setup (); keybuf_init (); /* Must come after init_joystick */ expansion_init (); memory_init (); filesys_install (); bsdlib_install (); emulib_install (); uaeexe_install (); native2amiga_install (); custom_init (); /* Must come after memory_init */ serial_init (); DISK_init (); reset_frame_rate_hack (); init_m68k(); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init ()) { reset_drawing (); setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); start_program (); } leave_program (); }