@@ -90,22 +90,26 @@ int main(int argc, char *argv[])
9090 SET_GS_BGCOLOUR (WHITE_BG );
9191 // arg[0] partition if exists, otherwise is ""
9292 // arg[1]=path to ELF
93- if (argc < 2 ) {
93+ // arg[2]=reset flag ("0" = keep IOP, otherwise reset)
94+ if (argc < 3 ) {
9495 SET_GS_BGCOLOUR (RED_BG );
9596 return - EINVAL ;
9697 }
9798
98- char * new_argv [argc - 1 ];
99+ int reset = (argv [2 ][0 ] != '0' );
100+
101+ char * new_argv [argc - 2 ];
99102 int argv0_len = strlen (argv [0 ]);
100103 int argv1_len = strlen (argv [1 ]);
101104 char fullPath [argv0_len + argv1_len + 1 ];
105+
102106 memcpy (& fullPath [0 ], argv [0 ], argv0_len );
103107 memcpy (& fullPath [argv0_len ], argv [1 ], argv1_len );
104108 fullPath [argv0_len + argv1_len ] = 0 ;
105109 // final new_argv[0] is partition + path to elf
106110 new_argv [0 ] = fullPath ;
107- for (i = 2 ; i < argc ; i ++ ) {
108- new_argv [i - 1 ] = argv [i ];
111+ for (i = 3 ; i < argc ; i ++ ) {
112+ new_argv [i - 2 ] = argv [i ];
109113 }
110114
111115 SET_GS_BGCOLOUR (CYAN_BG );
@@ -124,29 +128,31 @@ int main(int argc, char *argv[])
124128 if (ret == 0 && elfdata .epc != 0 ) {
125129 SET_GS_BGCOLOUR (YELLOW_BG );
126130
127- // Let's reset IOP because ELF was already loaded in memory
128- while (!SifIopReset (NULL , 0 )){};
129- while (!SifIopSync ()) {};
131+ if (reset ) {
132+ // Let's reset IOP because ELF was already loaded in memory
133+ while (!SifIopReset (NULL , 0 )){};
134+ while (!SifIopSync ()) {};
130135
131- SET_GS_BGCOLOUR (ORANGE_BG );
136+ SET_GS_BGCOLOUR (ORANGE_BG );
132137
133- sceSifInitRpc (0 );
134- // Load modules.
135- SifLoadFileInit ();
136- SifLoadModule ("rom0:SIO2MAN" , 0 , NULL );
137- SifLoadModule ("rom0:MCMAN" , 0 , NULL );
138- SifLoadModule ("rom0:MCSERV" , 0 , NULL );
139- SifLoadFileExit ();
140- sceSifExitRpc ();
138+ sceSifInitRpc (0 );
139+ // Load modules.
140+ SifLoadFileInit ();
141+ SifLoadModule ("rom0:SIO2MAN" , 0 , NULL );
142+ SifLoadModule ("rom0:MCMAN" , 0 , NULL );
143+ SifLoadModule ("rom0:MCSERV" , 0 , NULL );
144+ SifLoadFileExit ();
145+ sceSifExitRpc ();
146+ }
141147
142148 SET_GS_BGCOLOUR (BROWN_BG );
143149
144150 FlushCache (0 );
145151 FlushCache (2 );
146152
147153 SET_GS_BGCOLOUR (PURPBLE_BG );
148-
149- return ExecPS2 ((void * )elfdata .epc , (void * )elfdata .gp , argc - 1 , new_argv );
154+
155+ return ExecPS2 ((void * )elfdata .epc , (void * )elfdata .gp , argc - 2 , new_argv );
150156 } else {
151157 SET_GS_BGCOLOUR (MAGENTA_BG );
152158 sceSifExitRpc ();
0 commit comments