De nada Luis.
Si he entendido bien puedo definir un bloque de variables unbanked comenzando en 60 hexadecimal. Si no caben en la zona unbanked, pues las defino en otro banco y cuando haga referencia a ellas, indico siempre el banco en que están ¿no?
Asi es, tan simple como eso. Pero porque en 60hexa? las unbanked las puedes comenzar en 0x00 directamente
Y para las banked, igual qeu siempre, indicas el banco en el que están si es que no estás en ese banco en ese momento. Fijate que las instrucciones del ensamblador te permiten indicar si la referencia al registro está en el banco 'unbanked' o si está en el banco que estás actualmente apuntando. Entonces nunca necesitas apuntar a las unbanked, esa es la ventaja.
Puedes usar el banco1 y el unbanked al mismo tiempo sin cambiar nada de nada.
Con el linker no he trabajado nunca. ¿Qué ventaja tendría?
La ventaja es la de que tu código puede armarse en forma diferente, en el sentido que tu diseñas subrutinas sin importarte en donde irán ubicadas y luego con el linker indicas en que banco de memoria de programa iran ubicadas.
El inconveniente es que no es tan fácil de hacer o de entender. En los 18F es algo mucho más simple porque no tienes bancos de memoria de programa, en los 16F no es tan simple porque los bancos de memoria de programa estan siempre ahi y si quieres llamar una subrutina debes saber en que página estaba, por eso mover código de una página a otra (que se hace con solo indicar que dicha subrutina irá ubicada en dicho banco) no es tan obvio a la hora de ejecutar el código.
A lo que voy es por ejemplo si tienes una subrutina en pagina1, y la mueves a página 2. El código que llama a esa subrutina no cambia automáticamente, sino que debe saber que se movió el código. Para eso es muy cómun y cómodo usar los macros pagesel y banksel (para memoria de datos).
Saludos