# HG changeset patch # User nkeynes # Date 1152175653 0 # Node ID e3b513538548558e6373feb878627df2f5ecd755 # Parent bc28fd93e233b648b7fa8b591d0e9c7f492909c0 Add -q command line argument to allow dcload_exit() to actually exit lxdream altogether (useful for test cases) --- a/src/dcload.c Thu Jul 06 08:46:41 2006 +0000 +++ b/src/dcload.c Thu Jul 06 08:47:33 2006 +0000 @@ -1,5 +1,5 @@ /** - * $Id: dcload.c,v 1.3 2006-03-20 11:59:57 nkeynes Exp $ + * $Id: dcload.c,v 1.4 2006-07-06 08:47:33 nkeynes Exp $ * * DC-load syscall implementation. * @@ -18,6 +18,7 @@ #include #include "dream.h" +#include "dreamcast.h" #include "mem.h" #include "syscall.h" #include "sh4/sh4core.h" @@ -47,6 +48,13 @@ #define SYS_MAGIC_ADDR 0x8c004004 #define SYSCALL_ADDR 0x8c004008 +static gboolean dcload_allow_exit = FALSE; + +void dcload_set_allow_exit( gboolean allow ) +{ + dcload_allow_exit = allow; +} + void dcload_syscall( uint32_t syscall_id ) { uint32_t syscall = sh4r.r[4]; @@ -70,8 +78,10 @@ } break; case SYS_EXIT: - /* exit( sh4r.r[4] ); */ - dreamcast_stop(); + if( dcload_allow_exit ) + exit( sh4r.r[4] ); + else + dreamcast_stop(); default: sh4r.r[0] = -1; } --- a/src/main.c Thu Jul 06 08:46:41 2006 +0000 +++ b/src/main.c Thu Jul 06 08:47:33 2006 +0000 @@ -1,5 +1,5 @@ /** - * $Id: main.c,v 1.18 2006-07-02 04:59:00 nkeynes Exp $ + * $Id: main.c,v 1.19 2006-07-06 08:47:33 nkeynes Exp $ * * Main program, initializes dreamcast and gui, then passes control off to * the gtk main loop (currently). @@ -35,7 +35,7 @@ #define S3M_PLAYER "s3mplay.bin" -char *option_list = "a:s:A:V:phbd:c:"; +char *option_list = "a:s:A:V:pqhbd:c:"; struct option longopts[1] = { { NULL, 0, 0, 0 } }; char *aica_program = NULL; char *s3m_file = NULL; @@ -87,6 +87,9 @@ case 'p': /* Start immediately */ start_immediately = TRUE; break; + case 'q': /* Quit on DC program exit */ + dcload_set_allow_exit(TRUE); + break; case 'b': /* No BIOS */ without_bios = TRUE; break; --- a/src/syscall.h Thu Jul 06 08:46:41 2006 +0000 +++ b/src/syscall.h Thu Jul 06 08:47:33 2006 +0000 @@ -1,5 +1,5 @@ /** - * $Id: syscall.h,v 1.1 2006-03-13 12:38:34 nkeynes Exp $ + * $Id: syscall.h,v 1.2 2006-07-06 08:47:33 nkeynes Exp $ * * Generic syscall support - ability to add hooks into SH4 code to call out * to the emu. @@ -65,6 +65,12 @@ */ void dcload_install( void ); +/** + * Set the flag that indicates whether the dcload exit() syscall will be + * honoured by exiting the VM. + */ +void dcload_set_allow_exit( gboolean allow ); + #ifdef __cplusplus } #endif