Mike, here's code I use in a product. Pre-set names are supplied in Flash, which the user can substitute with their own. The tangle below copies the target 64-byte block from Flash to RAM and replaces the old with the new (you can skip that bit), erases the target, then writes the RAM, now including the new name, back to it To answer your question, my comments - ;Block command can resolve to 8 bytes ;Erase command can resolve to 64 bytes (x00,x40,x80,xc0 starts) read lfsr fsr1,scratch ;scratch RAM mov .64,temp1 ;get 64 bytes from Flash read641 tblrd*+ movff tablat,postinc1 ;store in scratch buffer decfsz temp1 bra read641 mov .4,temp1 ;replace old with new lfsr fsr2,dg1 lfsr fsr1,scratch movfw temp3 ;add offset addwf fsr1l new_usr movff postinc2,postinc1 decfsz temp1 bra new_usr ;Erase block er641 clrf tblptru ;0x003900 base mov 0x39,tblptrh movff prodl,tblptrl ;add any 64-byte offset bsf eecon1,eepgd ;erase bcf eecon1,cfgs bsf eecon1,wren bsf eecon1,free bcf intcon,gie mov 0x55,eecon2 mov 0xaa,eecon2 bsf eecon1,wr tblrd*- ;write user name to Flash as part of 64-byte block mov .8,temp1 ;outside loop counter lfsr fsr1,scratch ;RAM buffer wr_usr mov .8,temp2 ;inside loop counter ld_buff movff postinc1,tablat ;copy 8 bytes to write buffer tblwt+* decfsz temp2 bra ld_buff bsf eecon1,eepgd ;write buffer to Flash bcf eecon1,cfgs bsf eecon1,wren bcf intcon,gie mov 0x55,eecon2 mov 0xaa,eecon2 bsf eecon1,wr decfsz temp1 ;bump outside counter bra wr_usr bcf eecon1,wren -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist