Hi I've been looking at the table command of the 18F, and am trying to figure out the syntax. On the 16F, it was simply.... d_user ;default code addwf PCL,f dt "6781234",0D readit call d_user ;get table value of user code movwf gotit ;stick it in return ---------------------- The 16F to 18F migration example shows.... RdStr movlw HIGH(string) movwf TBLPTRH ; load high byte of pointer (0x12) movlw LOW(string) movwf TBLPTRL ; load low byte of pointer (0x34) read tblrd*+ ; read byte from program memory, ; and increment pointer one byte movff TABLAT,PORTB ; move byte from table latch to output port B tstfsz TABLAT ; was retrieved byte a null? goto read ; no, do loop again return ORG 0x1234 String DW "This is a test.",0x00 ; text string _________________ So do I simply write; d_user ;default code dw "6781234",0D readit movlw HIGH(d_user) movwf TBLPTRH ; load high byte of pointer movlw LOW(d_user) movwf TBLPTRL ; load low byte of pointer tblrd* ; read byte from program memory, movff TABLAT,gotit ; move byte from table -The above does work, just not sure how correct it is. -Is it necessary to ORG each string? -If so, must it be on an even boundry? -I suppose I can just 'clrf TBLPTRU' initially instead of setting it each time? Regards Roland Jollivet -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist