3 * - Acess kernel emulation on another OS using SDL and UDP
12 #include <sys/prctl.h>
18 extern int UI_Initialise(int Width, int Height);
19 extern void UI_MainLoop(void);
20 extern int VFS_Init(void);
21 extern int Video_Install(char **Arguments);
22 extern int NativeKeyboard_Install(char **Arguments);
23 extern int NativeFS_Install(char **Arguments);
24 extern void Debug_SetKTerminal(char *Path);
25 extern int VT_Install(char **Arguments);
26 extern int VFS_Mount(const char *Device, const char *MountPoint, const char *Filesystem, const char *Options);
27 extern int VFS_MkDir(const char *Path);
28 extern int SyscallServer(void);
29 extern const char gsKernelVersion[];
30 extern const char gsGitHash[];
31 extern int giBuildNumber;
34 const char *gsAcessDir = "../Usermode/Output/x86";
37 int main(int argc, char *argv[])
39 char **rootapp = NULL;
41 // Parse command line settings
42 for( i = 1; i < argc; i ++ )
44 if( strcmp(argv[i], "--distroot") == 0 ) {
45 gsAcessDir = argv[++i];
47 else if( strcmp(argv[i], "--rootapp") == 0 ) {
49 rootapp_argc = argc - i;
53 fprintf(stderr, "Unknown command line option '%s'\n", argv[i]);
58 // Kernel build information
59 printf("Acess2 Native v%s\n", gsKernelVersion);
60 printf(" Build %i, Git Hash %s\n", giBuildNumber, gsGitHash);
63 UI_Initialise(800, 480);
65 // - Ignore SIGUSR1 (used to wake threads)
66 signal(SIGUSR1, SIG_IGN);
72 NativeKeyboard_Install(NULL);
73 NativeFS_Install(NULL);
78 "Input=NativeKeyboard",
85 VFS_Mount(gsAcessDir, "/Acess", "nativefs", "");
87 Debug_SetKTerminal("/Devices/VTerm/8");
89 // Start syscall server
92 // Spawn root application
96 char *args[7+rootapp_argc+1];
99 args[1] = "--open"; args[2] = "/Devices/VTerm/0";
100 args[3] = "--open"; args[4] = "/Devices/VTerm/0";
101 args[5] = "--open"; args[6] = "/Devices/VTerm/0";
102 for( i = 0; i < rootapp_argc; i ++ )
103 args[7+i] = rootapp[i];
104 args[7+rootapp_argc] = NULL;
108 perror("Starting root application [fork(2)]");
114 prctl(PR_SET_PDEATHSIG, SIGHUP); // LINUX ONLY!
116 execv("./ld-acess", args);
118 printf("Root application running as PID %i\n", pid);
126 void AcessNative_Exit(void)
128 // TODO: Close client applications too
132 uint64_t DivMod64U(uint64_t Num, uint64_t Den, uint64_t *Rem)
134 if(Rem) *Rem = Num % Den;
138 int Module_EnsureLoaded(const char *Name)