Es OTP (programable una sola vez), aunque existe la versión 12C508-JW con ventanita para borrar por ultravioleta. De todas formas, si el programa lo estás haciendo tú, te aconsejo que te pases al 12F629 ó 12F675.
Si te empeñas en usar el 12C508 y el programa es corto, es decir, que te sobra memoria, existe un truquito para reutilizarlo varias veces. Sólo hay que saber que en una PROM, de origen, vienen todos los bits a 1. Una vez que pones un bit a 0, ya no puedes modificarlo, pero siempre puedes convertir en
0 un bit que estuviera a 1. Y ahora date cuenta de un detalle, la instrucción NOP equivale al código h000, es decir, todos los bits a 0. En definitiva, siempre puedes escribir un NOP donde había otra instrucción.
Imagina por ejemplo que tu programa ocupa 50 direcciones, y ya está grabado en las 50 primeras direcciones del PIC. Si ahora quieres modificarlo, podrías insertar en el fuente 50 NOPs y a continuación escribir el nuevo programa. Así, al grabar el PIC, convertirías el programa antiguo en 50 NOPs, y a continuación quedaría grabado tu nuevo programa, que funcionaría perfectamente, salvo que en el reset perdería 50 ciclos de programa en ejecutar esos 50 NOPs.
Una variante un poco más... limpia, es empezar tu programa con un salto, por ejemplo GOTO 8, y colocar el cuerpo del programa a partir de la dirección 8 (usando un ORG), de forma que ocupará las direcciones 8 a 57. Si tienes que cargar un nuevo programa, ahora empezaría con NOP y a continuación un GOTO
58, y situarías el cuerpo del nuevo programa a partir de la dirección 58.