+#else
+size_t mypgm_WRITEpage(const mypgm_addr_t byteaddress,const void* buffer, const size_t bufferbytesize, mypgm_spminterface spmfunc) {
+ size_t result = (bufferbytesize < SPM_PAGESIZE)?bufferbytesize:SPM_PAGESIZE;
+ size_t pagesize = result >> 1;
+ uint16_t *pagedata = (void*)buffer;
+ mypgm_addr_t pageaddr_bakup = byteaddress - (byteaddress % SPM_PAGESIZE);
+ mypgm_addr_t pageaddr = pageaddr_bakup;
+
+ size_t i;
+
+ //do a page-erase, ATTANTION: flash only can be erased a limited number of times !
+ spmfunc(pageaddr_bakup, 0x3, 0);
+
+ // from now on, the page is assumed empty !! (hopefully our code is located somewhere else!)
+ // now, fill the tempoary buffer
+ // ATTANTION: see comment on "do_spm" !
+ pageaddr = pageaddr_bakup;
+ for (i=0;i<pagesize;i+=1) {
+ spmfunc(pageaddr, 0x1, pagedata[i]);
+ pageaddr+=2;
+ }
+
+ // so, now finally write the page to the FLASH
+ spmfunc(pageaddr_bakup, 0x5, 0);
+
+ return result;
+}
+#endif