Es bien fácil, yo hago eso de hecho:
Lo que yo hago es que divido el programa en 2:
La parte que normalmente voy a actualizar y la parte que no (tablas de datos, strings) etc...
Obvio la 1ra vez programo TODO tal cual, y una vez que tengo el pic programado, pongo END entre la parte 1 y la parte 2 y recompilo.
Lo que va a pasar, es que la nueva compilación unicamente va a abarcar hasta adonde finalice el programa con end, y luego, cuando lo reprograme con el tiny, pues este solo reescribirá lo nuevo que le llegue, lo anterior lo va a dejar intacto...
Obvio hay algunas cosas a considerar, por ejemplo:
Si la parte que ya no vas a actualizar son tablas, y tu programa hace referencia a ellas, debes declarar los ORG y las etiquetas de las localidades de memoria antes del END o si no el compilador te generará errores.
Eso es muy fácil de hacer en ensamblador y lo de las tablas en las series 18, pero no sabría decirte si te va a funcionar en otro lenguaje como C o basic.
Algo relativamente sencillo que puedes hacer, es poner en la parte que vas a "ocultar", alguna cadena de verificación de firmware o alguna rutina dummy que haga un goto inicio por ejemplo, así, aunque tu entregues una actualización, si tu cliente decidiera "copiarla" en un pic nuevecito, pues si va a poder pero el pic nuevo, al carecer de ese codigo faltante, pues nomas no va a correr.
Aunque pensandolo un poco más, fijate que no intrinsecamente ya está protegido, checa el porque:
1.- El tiny bootloader normalmente se guarda en las últimas localidades de la flash del PIC, algo así como Max Flash - 250 bytes...
2.- Cuando grabas el tiny en el micro, es cuando proteges al pic contra lectura, en este paso es cuando se hace, no después porque los settings ya no los puede cambiar el bootloader.
3.- Cuando el tiny programa tu archivo HEX, reescribe la primera instrucción del vector de reset que normalmente es GOTO MAIN y la cambia por GOTO MAX_Flash - 250 automaticamente (Eso lo he más que comprobado, si quitas la protección de lectura, y lees tu micro despues de programarlo con el tiny, veras que la primera instrucción fue modificada...
4.- De hecho en el punto anterior no esta de más que tu mismo le des la localidad de origen del tiny aunque el compilador se ponga nena y te diga que en tu programa "ahí" no hay "nada"
5.- Si el usuario quiere copiar tu programa en un pic nuevo, este nuevo pic, al carecer del tiny, pues se irá a la localidad Max Flash - 250 y encontrará puro NOP y no hará nada....
Bueno, espero te sirvan estos tips, a mi me han servido mucho para proteger mis códigos entregando solo las partes que pudieran ser actualizadas.
Saludos