diff -Naurp libc/misc/eerd_block.S libc/misc/eerd_block.S --- libc/misc/eerd_block.S 2011-12-29 14:21:55.000000000 +0530 +++ libc/misc/eerd_block.S 2012-10-16 15:55:45.000000000 +0530 @@ -62,6 +62,7 @@ ENTRY eeprom_read_block #if __AVR_XMEGA__ /* -------------------------------------------- */ +#if defined (NVM_EEMAPEN_bm) ; Load base address of NVM. ldi ZL, lo8(NVM_BASE) ldi ZH, hi8(NVM_BASE) @@ -75,6 +76,7 @@ ENTRY eeprom_read_block ldd XL, Z + NVM_CTRLB - NVM_BASE ori XL, NVM_EEMAPEN_bm std Z + NVM_CTRLB - NVM_BASE, XL +#endif ; Correct EEPROM address to read from data space. subi eepr_lo, lo8(-MAPPED_EEPROM_START) diff -Naurp libc/misc/eerd_byte.S libc/misc/eerd_byte.S --- libc/misc/eerd_byte.S 2011-12-29 14:21:55.000000000 +0530 +++ libc/misc/eerd_byte.S 2012-10-16 15:55:45.000000000 +0530 @@ -55,6 +55,7 @@ ENTRY eeprom_read_byte ENTRY eeprom_mapen +#if defined (NVM_EEMAPEN_bm) ; Load base address of NVM. ldi ZL, lo8(NVM_BASE) ldi ZH, hi8(NVM_BASE) @@ -68,6 +69,7 @@ ENTRY eeprom_mapen ldd r19, Z + NVM_CTRLB - NVM_BASE ori r19, NVM_EEMAPEN_bm std Z + NVM_CTRLB - NVM_BASE, r19 +#endif ; Load Z with correct EEPROM address to read from data space. movw ZL, addr_lo diff -Naurp libc/misc/eewr_byte.S libc/misc/eewr_byte.S --- libc/misc/eewr_byte.S 2011-12-29 14:21:55.000000000 +0530 +++ libc/misc/eewr_byte.S 2012-10-16 16:27:09.000000000 +0530 @@ -70,6 +70,7 @@ ENTRY eeprom_write_r18 sbrc r19, NVM_NVMBUSY_bp rjmp 1b +#if defined (NVM_EEMAPEN_bm) ; Disable EEPROM mapping into data space. ldd r19, Z + NVM_CTRLB - NVM_BASE andi r19, ~NVM_EEMAPEN_bm @@ -103,10 +104,18 @@ ENTRY eeprom_write_r18 ; Issue EEPROM Buffer Load command. 3: ldi r19, NVM_CMD_LOAD_EEPROM_BUFFER_gc std Z + NVM_CMD - NVM_BASE, r19 +#endif std Z + NVM_ADDR0 - NVM_BASE, addr_lo std Z + NVM_ADDR1 - NVM_BASE, addr_hi std Z + NVM_ADDR2 - NVM_BASE, __zero_reg__ +#if defined (NVM_EEMAPEN_bm) std Z + NVM_DATA0 - NVM_BASE, r18 +#else + movw XL, addr_lo + subi XL, lo8(-MAPPED_EEPROM_START) + sbci XH, hi8(-MAPPED_EEPROM_START) + st X, r18 +#endif ; Issue EEPROM Erase & Write command. ldi r18, NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc