--- /usr/ports/palm/xcopilot/work/xcopilot-0.6.6/mc68k/memory.c	Tue Aug 25 05:52:56 1998
+++ mc68k/memory.c	Fri Apr 28 19:04:02 2000
@@ -379,6 +379,7 @@
   char *resetv;
   int f;
   struct stat st;
+  UWORD *p;
   
   if (romfile[0] != '/' && dir) {
     rombuf = alloca(strlen(dir)+strlen(romfile)+2);
@@ -405,12 +406,10 @@
     rom_size = pow_of_2;
   }
   
-  rommemory = (UWORD*)mmap(0, rom_size, PROT_READ|PROT_WRITE, 
-			   MAP_FILE|MAP_PRIVATE, f, 0);
-  if (rommemory == (UWORD *)-1) {
-    return PILOTCPU_ERROR_LOADING_ROM;
-  }
-  
+  /* Modified to use malloc/read rather than mmap. azz@gnu.org */
+  rommemory = malloc(rom_size);
+  read(f, rommemory, st.st_size);
+
   if (!nocheck) {
   /* Check if the reset vector looks plausible */
     resetv = (char *)rommemory +
@@ -418,7 +417,6 @@
   
     if (!verify_entrypoint(resetv)) {
       int offset;
-      int pageoffset;
       void *newrom;
 
       /* It didn't - we need to find it */
@@ -432,18 +430,14 @@
 
       /* Did we find it? If not, lets go with the original. */
       if ((char *)offset != resetv) {
-	/* It may not always be page aligned... */
-	pageoffset = ((offset-1) & ~(getpagesize() - 1)) + getpagesize();
 
 	if ((st.st_size + offset) > rom_size)
           rom_size <<= 1;
 
-	rommemory = (UWORD *)mmap((void*)(rommemory + pageoffset),
-                                  rom_size - pageoffset,
-				  PROT_READ | PROT_WRITE,
-				  MAP_FILE | MAP_PRIVATE | MAP_FIXED, f, 0);
-	if (rommemory == (UWORD *)-1)
-	  return PILOTCPU_ERROR_LOADING_ROM;
+	/* Modified to use malloc/read rather than mmap. azz@gnu.org */
+        ((char *)rommemory) += offset;
+	lseek(f, 0, SEEK_SET);
+	read(f, rommemory, st.st_size);
 
 	memcpy(((char *)rommemory) - offset, rommemory, 256);
 	((char *)rommemory) -= offset;

