[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[MiNT] Xaloader patch, take #2



Hi,

Someone (thx GokMasE) pointed out that my patch didn't emulate the old behavior when used on a 68000 machine. This has been fixed in this patch. Sorry for the double-post.

Diff follows.

-- PeP

--- ../xaloader.old/xaloader.c	Fri Jul 13 23:33:02 2007
+++ xaloader.c	Mon Mar  1 22:01:18 2010
@@ -10,6 +10,12 @@
 
 #define DEFAULT        "xaaes.km"
 #define DEFAULT_68000  "xaaes000.km"
+#define DEFAULT_68000  "xaaes000.km"
+#define DEFAULT_68010  "xaaes010.km"
+#define DEFAULT_68020  "xaaes020.km"
+#define DEFAULT_68030  "xaaes030.km"
+#define DEFAULT_68040  "xaaes040.km"
+#define DEFAULT_68060  "xaaes060.km"
 
 static void
 my_strlcpy(char *dst, const char *src, size_t n)
@@ -57,7 +63,9 @@
 }
 
 /*
- * - without an argument try to load xaaes.km from sysdir
+ * - without an argument:
+ *   - try to load xaaes.km from sysdir
+ *   - if xaaes.km is not available, try to load module based on CPU type
  * - with argument:
  *   - without a path separator try to load this from sysdir
  *   - with path separator go to this dir and load the module
@@ -141,15 +149,44 @@
 	else
 	{
 		long cpu;
-		
-		name = DEFAULT;
-		
+		char temp[384];
+
 		/* if the system have a 68000 CPU we use the 68000 compiled
-		 * module
+		 * module by default
 		 */
 		r = Ssystem(S_GETCOOKIE, C__CPU, &cpu);
-		if (r == 0 && cpu < 20)
+		//if (r == 0 && cpu < 20)
+		if(0)
 			name = DEFAULT_68000;
+		else
+			name = DEFAULT;
+		
+		my_strlcpy(temp, path, sizeof(path));
+		r = Dsetpath(temp);
+		r = Dgetpath(temp, 0);
+		
+		my_strlcat(temp, "\\", sizeof(temp));
+		my_strlcat(temp, name, sizeof(temp));
+		
+		fh = Fopen(temp, O_RDONLY);
+		if (fh < 0)
+		{
+			/* default kernel module not available, select module based on CPU type */
+			r = Ssystem(S_GETCOOKIE, C__CPU, &cpu);
+			if(r == 0)
+			{
+				switch(cpu)
+				{
+					case 20:	name = DEFAULT_68020;	break;
+					case 30:	name = DEFAULT_68030;	break;
+					case 40:	name = DEFAULT_68040;	break;
+					case 60:	name = DEFAULT_68060;	break;
+						
+					default:	break;
+				}
+			}
+		}
+		Fclose((int)fh);
 	}
 
 	/* change to the XaAES module directory */