+#if FLASHEND > 65535
+# define FULLCORRECTFLASHADDRESS(addr) (((mypgm_addr_t)(addr)) | (((mypgm_addr_t)FLASHADDRESS) & ((mypgm_addr_t)0xffff0000)))
+# define mymemcpy_PF mymemcpy_PF_far
+void *mymemcpy_PF_far (void *dest, mypgm_addr_t src, size_t n) {
+ uint8_t *pagedata = (void*)dest;
+ mypgm_addr_t pageaddr = src;
+ size_t i;
+
+ for (i=0;i<n;i+=1) {
+ pagedata[i]=pgm_read_byte_far(pageaddr);
+ pageaddr+=1;
+ }
+
+ return dest;
+}
+#else
+# define FULLCORRECTFLASHADDRESS(addr) (addr)
+# define mymemcpy_PF memcpy_PF
+#endif