sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
exit.c
Go to the documentation of this file.
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Licenced under Academic Free License version 2.0
7# Review ps2sdk README & LICENSE files for further details.
8*/
9
14
15#include "kernel.h"
16#include "string.h"
17
18extern char **_kExecArg;
19const char *SetArg(const char *filename, int argc, char *argv[]);
20
21char **_kExecArg;
22
23struct SyscallData
24{
25 int syscall;
26 void *function;
27};
28
29static const struct SyscallData SysEntry = {
30 0x5A,
31 &kCopyBytes};
32
33#define SETARG_MAX_ARGS 15
34
35const char *SetArg(const char *filename, int argc, char *argv[])
36{
37 const char *filenameOut;
38 char *ptr;
39 int len, i;
40
41 ptr = (char *)(_kExecArg + 16);
42 filenameOut = ptr;
43 setup(SysEntry.syscall, SysEntry.function);
44 argc = (argc > SETARG_MAX_ARGS) ? SETARG_MAX_ARGS : argc;
45 Copy(&_kExecArg[0], &ptr, 4);
46 len = strlen(filename) + 1;
47 Copy(ptr, filename, len);
48 ptr += len;
49
50 for (i = 0; i < argc; i++) {
51 Copy(&_kExecArg[1 + i], &ptr, 4);
52 len = strlen(argv[i]) + 1;
53 Copy(ptr, argv[i], len);
54 ptr += len;
55 }
56
57 return filenameOut;
58}
59
60__attribute__((weak))
61void Exit(s32 exit_code)
62{
63 TerminateLibrary();
64 KExit(exit_code);
65}
66
67__attribute__((weak))
68s32 ExecPS2(void *entry, void *gp, int num_args, char *args[])
69{
70 SetArg("", num_args, args);
71 TerminateLibrary();
72 return _ExecPS2(entry, gp, num_args, &_kExecArg[1]);
73}
74
75__attribute__((weak))
76void LoadExecPS2(const char *filename, s32 num_args, char *args[])
77{
78 const char *pFilename;
79
80 pFilename = SetArg(filename, num_args, args);
81 TerminateLibrary();
82 _LoadExecPS2(pFilename, num_args, &_kExecArg[1]);
83}
84
85__attribute__((weak))
86void ExecOSD(int num_args, char *args[])
87{
88 SetArg("", num_args, args);
89 TerminateLibrary();
90 _ExecOSD(num_args, &_kExecArg[1]);
91}