X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=drivers%2Fgp2x%2Fsquidgehack.c;h=67f21b01b1ef1cf8ba73f47b2bdb9a13dbfc5960;hp=f831bd4f59a82f4ac960c6d7df6b3fca03449386;hb=890deff8bad82ef88678ac9c9cb7373677faf77a;hpb=937bf65b1c80e9394547e5f105664bd26f3671de diff --git a/drivers/gp2x/squidgehack.c b/drivers/gp2x/squidgehack.c index f831bd4..67f21b0 100644 --- a/drivers/gp2x/squidgehack.c +++ b/drivers/gp2x/squidgehack.c @@ -12,25 +12,28 @@ extern char **g_argv; int mmuhack(void) { char kocmd[1024]; - int i, mmufd = open("/dev/mmuhack", O_RDWR); - - if(mmufd < 0) { - strcpy(kocmd, "/sbin/insmod "); - strncpy(kocmd+13, g_argv[0], 1023-13); - kocmd[1023] = 0; - for (i = strlen(kocmd); i > 0; i--) - if (kocmd[i] == '/') { kocmd[i] = 0; break; } - strcat(kocmd, "/mmuhack.o"); - - printf("Installing NK's kernel module for Squidge MMU Hack (%s)...\n", kocmd); - system(kocmd); - mmufd = open("/dev/mmuhack", O_RDWR); - } + int i, mmufd; + + /* some programs like some versions of gpSP use some weird version of mmuhack.o + * which doesn't seem to work. What's even worse they leave their mmuhack loaded on exit. + * So we must remove whatever may be left and always reload _our_ mmuhack.o */ + system("/sbin/rmmod mmuhack"); + + strcpy(kocmd, "/sbin/insmod "); + strncpy(kocmd+13, g_argv[0], 1023-13); + kocmd[1023] = 0; + for (i = strlen(kocmd); i > 0; i--) + if (kocmd[i] == '/') { kocmd[i] = 0; break; } + strcat(kocmd, "/mmuhack.o"); + + printf("Installing NK's kernel module for Squidge MMU Hack (%s)...\n", kocmd); + system(kocmd); + mmufd = open("/dev/mmuhack", O_RDWR); if(mmufd < 0) return 0; - + close(mmufd); return 1; -} +} /* Unload MMU Hack kernel module after closing all memory devices*/