What I did a few years ago with 16C73's was:- At the start location 0x00 place a "jmp start" and at the interrupt vector 0x04 place a "jmp serv_int". where "start" is placed in memory at location 0x10 or so and "serv_int" is placed at 0x20 or so (work out the details for your own needs) Then at "start" I have another "jmp main" with nothing in the following locations until the "serv_int" label. The "serv_int" label then has a "jmp Interrupt" & is followed by another run of unprogrammed locations until the start of my acutal program at, say 0x30. The amount of unprogrammed space you leave for additional trys will depend on your program size & available space The first try then can use the program space from 0x30 to the end of the program area. For subsequent reprogramming the location at "start" is changed to nop (0x00) and the "jmp main" then follows (assuming this is a new location for "main"). Also, it may be neccessary to insert 2 or 3? nops if page setting bits are set - eg "ljmp main")). The same procedure can be used for the interrupt handler. I like the idea of the xor statement(s) already mentioned for subroutine calls also. Note, however, if timing is critical the additional statements will effect this - especially wrt the interrupt latency & subroutine calls. Hope the above is reasonably clear - I haven't used it for a while(thanks mainly to using Atmel & flash parts lately !) so there may be detail errors but did find it useful in the past. It sounds complicated but works out easy enough in practice. (Am now about to update the previous 16C73 project to 16F73 - so won't need to use this in the future.) Richard P ....snip On that topic, does anyone care to describe techniques they use to get more than one try out of an OTP device? snip.......... -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details.