diff --git a/flash_rom.c b/flash_rom.c
index 9274291..b8ffeb0 100644
--- a/flash_rom.c
+++ b/flash_rom.c
@@ -116,7 +116,7 @@
 		}
 		bios = mmap (0, size, PROT_WRITE | PROT_READ, MAP_SHARED,
 			     //fd_mem, (off_t) (0x100000000-size));
-			     fd_mem, (off_t) (0x0-size));
+			     fd_mem, (off_t) (0xffffffff-size+1));
 		if (bios == MAP_FAILED) {
 			perror("Error MMAP /dev/mem");
 			exit(1);
diff --git a/sst49lf040.c b/sst49lf040.c
index 9899e44..5f2503d 100644
--- a/sst49lf040.c
+++ b/sst49lf040.c
@@ -23,8 +23,6 @@
  *
  * $Id$
  */
-			 
-
 #include <stdio.h>
 #include "flash.h"
 #include "jedec.h"
@@ -37,35 +35,7 @@
 #define RESET			0xFF
 #define READ_ID			0x90
 
-static __inline__ void protect_49lf040 (volatile char * bios)
-{
-	/* ask compiler not to optimize this */
-	volatile unsigned char tmp;
-
-	tmp = *(volatile unsigned char *) (bios + 0x1823);
-	tmp = *(volatile unsigned char *) (bios + 0x1820);
-	tmp = *(volatile unsigned char *) (bios + 0x1822);
-	tmp = *(volatile unsigned char *) (bios + 0x0418);
-	tmp = *(volatile unsigned char *) (bios + 0x041B);
-	tmp = *(volatile unsigned char *) (bios + 0x0419);
-	tmp = *(volatile unsigned char *) (bios + 0x040A);
-}
-
-static __inline__ void unprotect_49lf040 (volatile char * bios)
-{
-	/* ask compiler not to optimize this */
-	volatile unsigned char tmp;
-
-	tmp = *(volatile unsigned char *) (bios + 0x1823);
-	tmp = *(volatile unsigned char *) (bios + 0x1820);
-	tmp = *(volatile unsigned char *) (bios + 0x1822);
-	tmp = *(volatile unsigned char *) (bios + 0x0418);
-	tmp = *(volatile unsigned char *) (bios + 0x041B);
-	tmp = *(volatile unsigned char *) (bios + 0x0419);
-	tmp = *(volatile unsigned char *) (bios + 0x041A);
-}
-
-int erase_sector_49lf040 (volatile char * bios, unsigned int page)
+static int erase_sector_49lf040 (volatile char * bios, unsigned int page)
 {
 	/* Chip erase function does not exist for LPC mode on 49lf040.
 	 * Erase sector-by-sector instead. */
@@ -99,9 +69,9 @@
 }
 
 static __inline__ int write_sector_49lf040(volatile char * bios, 
-				       unsigned char * src,
-				       volatile unsigned char * dst, 
-				       unsigned int page_size)
+					   unsigned char * src,
+					   volatile unsigned char * dst, 
+					   unsigned int page_size)
 {
 	int i;
 	volatile char *Temp;
@@ -146,7 +116,6 @@
         *(volatile char *) (bios + 0x2AAA) = 0x55;
         myusec_delay(10);
         *(volatile char *) (bios + 0x5555) = 0x90;
-
         myusec_delay(10);
 
         id1 = *(volatile unsigned char *) bios;
@@ -165,6 +134,7 @@
 
         return 0;
 }
+
 /* Chip erase only works in parallel programming mode for the 49lf040.
  * Use sector-erase instead */
 int erase_49lf040 (struct flashchip * flash)
@@ -190,7 +160,6 @@
 	myusec_delay(10);
         Temp  = bios + 0x5555; /* set up address to be C000:5555h      */
         *Temp = 0x10;       /* write data 0x55 to the address       */
-	
 	myusec_delay(50000);
 
 	return(0);
@@ -202,8 +171,6 @@
 	int total_size = flash->total_size * 1024, page_size = flash->page_size;
 	volatile char * bios = flash->virt_addr;
 
-//	unprotect_49lf040 (bios);
-//	erase_49lf040(flash); /* Must be done sector-by-sector in LPC mode */
 	printf ("Programming Page: ");
 	for (i = 0; i < total_size/page_size; i++) {
 		/* erase the page before programming */
@@ -218,7 +185,5 @@
 	}
 	printf("\n");
 
-//	protect_49lf040 (bios);
-
 	return(0);
 }
diff --git a/udelay.c b/udelay.c
index 9674bbe..a6597e5 100644
--- a/udelay.c
+++ b/udelay.c
@@ -7,7 +7,7 @@
 void myusec_delay(int time)
 {
 	volatile unsigned long i;
-	for(i = 0; i < time * micro; i++)
+	for (i = 0; i < time * micro; i++)
 		;
 }
 
@@ -38,6 +38,4 @@
 	micro = count / timeusec;
 
 	fprintf(stderr, "%ldM loops per second\n", (unsigned long)micro);
-
-
 }
diff --git a/w49f002u.c b/w49f002u.c
index b7c57eb..4d5d16b 100644
--- a/w49f002u.c
+++ b/w49f002u.c
@@ -22,7 +22,7 @@
  * Reference:
  *	W49F002U data sheet
  *
- * $Id
+ * $Id$
  */
 
 #include <stdio.h>
@@ -35,14 +35,16 @@
 	volatile char * bios = flash->virt_addr;
 	unsigned char id1, id2;
 
-	*(bios + 0x5555) = 0xAA;
-	*(bios + 0x2AAA) = 0x55;
-	*(bios + 0x5555) = 0x90;
+	*(volatile char *) (bios + 0x5555) = 0xAA;
+	*(volatile char *) (bios + 0x2AAA) = 0x55;
+	*(volatile char *) (bios + 0x5555) = 0x90;
     
 	id1 = *(volatile unsigned char *) bios;
 	id2 = *(volatile unsigned char *) (bios + 0x01);
- 
-	*bios = 0xF0;
+
+	*(volatile char *) (bios + 0x5555) = 0xAA;
+        *(volatile char *) (bios + 0x2AAA) = 0x55;
+	*(volatile char *) (bios + 0x5555) = 0xF0;
 
 	myusec_delay(10);
 
@@ -68,52 +70,36 @@
 	myusec_delay(100);
 	toggle_ready_jedec(bios);
 
-	//   while ((*bios & 0x40) != 0x40)
-	//;
-
-#if 0
-	toggle_ready_jedec(bios);
-	*(bios + 0x0ffff) = 0x30;
-	*(bios + 0x1ffff) = 0x30;
-	*(bios + 0x2ffff) = 0x30;
-	*(bios + 0x37fff) = 0x30;
-	*(bios + 0x39fff) = 0x30;
-	*(bios + 0x3bfff) = 0x30;
-#endif
-
 	return(0);
 }
 
 int write_49f002 (struct flashchip * flash, unsigned char * buf)
 {
-    int i;
-    int total_size = flash->total_size * 1024;
-    volatile char * bios = flash->virt_addr;
-    volatile char * dst = bios;
+	int i;
+	int total_size = flash->total_size * 1024;
+	volatile char * bios = flash->virt_addr;
+	volatile char * dst = bios;
 
-    *bios = 0xF0;
-    myusec_delay(10);
-    erase_49f002(flash);
-    //*bios = 0xF0;
-#if 1
-   printf ("Programming Page: ");
-    for (i = 0; i < total_size; i++) {
-	/* write to the sector */
-	if ((i & 0xfff) == 0)
-	    printf ("address: 0x%08lx", (unsigned long)i);
-	*(bios + 0x5555) = 0xAA;
-	*(bios + 0x2AAA) = 0x55;
-	*(bios + 0x5555) = 0xA0;
-	*dst++ = *buf++;
+	myusec_delay(10);
+	erase_49f002(flash);
 
-	/* wait for Toggle bit ready */
-	toggle_ready_jedec(dst);
+	printf ("Programming Page: ");
+	for (i = 0; i < total_size; i++) {
+		/* write to the sector */
+		if ((i & 0xfff) == 0)
+			printf ("address: 0x%08lx", (unsigned long)i);
+		*(bios + 0x5555) = 0xAA;
+		*(bios + 0x2AAA) = 0x55;
+		*(bios + 0x5555) = 0xA0;
+		*dst++ = *buf++;
 
-	if ((i & 0xfff) == 0)
-	    printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
-    }
-#endif
-    printf("\n");
+		/* wait for Toggle bit ready */
+		toggle_ready_jedec(dst);
 
-    return(0);
+		if ((i & 0xfff) == 0)
+			printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
+	}
+	printf("\n");
+
+	return(0);
 }
