AT91C_BASE_EFC0->EFC_FMR =
                AT91C_MC_FWS_1FWS |
                MC_FLASH_MODE_MASTER_CLK_IN_MHZ(48);
-
+#ifdef HAS_512_FLASH
+       AT91C_BASE_EFC1->EFC_FMR =
+               AT91C_MC_FWS_1FWS |
+               MC_FLASH_MODE_MASTER_CLK_IN_MHZ(48);
+#endif 
     // Initialize all system clocks
     ConfigClocks();
 
 
 unsigned int current_command = CMD_UNKNOWN;
 
 #define FLASH_START            0x100000
-#define FLASH_SIZE             (256*1024)
+
+#ifdef HAS_512_FLASH
+# define FLASH_SIZE             (512*1024)
+#else
+# define FLASH_SIZE             (256*1024)
+#endif
+
 #define FLASH_END              (FLASH_START + FLASH_SIZE)
 #define BOOTLOADER_SIZE        0x2000
 #define BOOTLOADER_END         (FLASH_START + BOOTLOADER_SIZE)
 
 
 endif
 
+APP_CFLAGS += -DHAS_512_FLASH
 
 # Also search prerequisites in the common directory (for usb.c), the fpga directory (for fpga.bit), and the zlib directory
 VPATH = . ../common ../fpga ../zlib
 
 */
 
 /* AT91SAM7S256 has 256k Flash and 64k RAM */
+/* AT91SAM7S512 has 512k Flash and 64k RAM */
 MEMORY 
 {
        bootphase1 : ORIGIN = 0x00100000, LENGTH = 0x200             /* Phase 1 bootloader: Copies real bootloader to RAM */
        bootphase2 : ORIGIN = 0x00100200, LENGTH = 0x2000 - 0x200    /* Main bootloader code, stored in Flash, executed from RAM */
-       osimage    : ORIGIN = 0x00102000, LENGTH = 256K - 0x2000     /* Place where the main OS will end up */
+       osimage    : ORIGIN = 0x00102000, LENGTH = 512K - 0x2000     /* Place where the main OS will end up */
        ram        : ORIGIN = 0x00200000, LENGTH = 64K - 0x20        /* RAM, minus small common area */
        commonarea : ORIGIN = 0x00200000 + 64K - 0x20, LENGTH = 0x20 /* Communication between bootloader and main OS */
 }