elmasvital, recién leo el hilo, pudiste avanzar con el tema de la escritura?
Para guardar datos en 'flash' como si de datos se tratase, yo no usaría el retlw .xx , te explico porqué, porque sencillamente pierdes los bits que ocupa el microcódigo de la instrucción retlw.
Otra cuestión a tener en cuenta es que grabaras datos de a 14 bits. Es muy útil si guardas 2 caracteres ASCII estándar (que ocupan 7 bits cada uno) pero si quieres guardar datos binarios planos ya tendrás que o bien ingeniartelas para ir leyendo y corriendo bits o bien desperdiciar los 6 bits restantes de la instrucción.
Para inicializar tu código, recomiendo usar alguna directiva db o dt apuntando a la memoria flash, osea con el ORG que apunte a una dirección de memoria de programa.
La flash tiene una vida de escritura/lectura bastante más alta que la eeprom y es para unos datos que van a necesitarse grabar y leer con bastante frecuencia.
Cuidado con esto, la eeprom es la que se puede grabar 10 o 100 veces más seguido que la flash. Es más, si mal no recuerdo en los 16F877 (sin la A) solo permiten 10 mil grabaciones con lo cual si tu aplicación hace un uso muy intensivo de la grabación de la flash en pocas horas/días te quedarás sin programa.
La flash es mas robusta en cuanto a las variaciones eléctricas de la alimentación , picos de voltaje, ruido , etc (la eeprom es más tendenciosa a borrarse) pero no son muy adecuadas para grabaciones constantes.
Espero lo tengas en cuenta. Saludos