X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Femu.c;h=38fea460a56c68a312a48e812b0266d743d60edb;hp=d142611268b69d10469ad3e84b7512f0ebb6e09a;hb=7868435641e4209e956a591ff0844afc14f83f16;hpb=b4f4cb40a6f3f4ecc05c7b6c8f2e852282234519 diff --git a/loader/emu.c b/loader/emu.c index d142611..38fea46 100644 --- a/loader/emu.c +++ b/loader/emu.c @@ -643,10 +643,10 @@ static void xwrite16(u32 a, u32 d) } mmsp2.old_mlc_stl_adr = mmsp2.mlc_stl_adr; return; - case 0x2958: + case 0x2958: // MLC_STL_PALLT_A mmsp2.mlc_stl_pallt_a = d & 0x1ff; return; - case 0x295a: + case 0x295a: // MLC_STL_PALLT_D mmsp2.mlc_stl_pallt_d[mmsp2.mlc_stl_pallt_a++] = d; mmsp2.mlc_stl_pallt_a &= 0x1ff; mmsp2.v.dirty_pal = DIRTY_PAL_MMSP2; @@ -663,6 +663,14 @@ static void xwrite32(u32 a, u32 d) if ((a & 0xfff00000) == 0x7f000000) { u32 a_ = a & 0xffff; switch (a_) { + // GP2X + case 0x295a: // MLC_STL_PALLT_D + // special unaligned 32bit write, allegro seems to rely on it + mmsp2.mlc_stl_pallt_d[mmsp2.mlc_stl_pallt_a++ & 0x1ff] = d; + mmsp2.mlc_stl_pallt_d[mmsp2.mlc_stl_pallt_a++ & 0x1ff] = d >> 16; + mmsp2.mlc_stl_pallt_a &= 0x1ff; + mmsp2.v.dirty_pal = DIRTY_PAL_MMSP2; + return; // Wiz case 0x4024: // MLCCONTROL0 case 0x4058: // MLCCONTROL1 @@ -1363,17 +1371,19 @@ int emu_do_system(const char *command) return ret; } -int emu_do_execve(const char *filename, char *const argv[], char *const envp[]) +long emu_do_execve(const char *filename, char * const argv[], + char * const envp[]) { const char **new_argv; char *prep_path; - int i, ret, argc; + int i, argc; + long ret; if (filename == NULL) return -1; - if (strstr(filename, "/gp2xmenu") != NULL) - exit(0); + if (strstr(filename, "gp2xmenu") != NULL) + host_forced_exit(0); for (i = 0; argv[i] != NULL; i++) ; @@ -1398,7 +1408,7 @@ int emu_do_execve(const char *filename, char *const argv[], char *const envp[]) dbg("execve \"%s\" %s \"%s\"\n", new_argv[0], new_argv[1], new_argv[2]); ret = execve(new_argv[0], (char **)new_argv, envp); - perror("execve"); + err("execve(%s): %ld\n", new_argv[0], ret); return ret; }