hola,mira lo que yo hago es utilizar macros.
dentro las direcciones comprendidas entre los valores FF,utilizo las siguientes lineas.
por ejemplo:
org 0x000
goto inicio
inicio org 0x005
PAGINA_0
call 1
call 2
call 3
goto inicio
.
.
.
.
org 0x100
1 PAGINA_1
codigo
return
.
.
.
2 org 0x200
PAGINA_2
return
.
.
.
3 org 0x300
include "otro_programa.inc"
PAGINA_3
return
abajo pongo tambien los macros para la conmutacion de los bancos de ram.
BANK0 MACRO ;CONMUTACION DE BANCOS
BCF STATUS,IRP
bcf STATUS,RP0
bcf STATUS,RP1
ENDM
BANK1 MACRO
BCF STATUS,IRP
bsf STATUS,RP0
bcf STATUS,RP1
ENDM
BANK2 MACRO
BSF STATUS,IRP
bcf STATUS,RP0
bsf STATUS,RP1
ENDM
BANK3 MACRO
BSF STATUS,IRP
bsf STATUS,RP0
bsf STATUS,RP1
ENDM
PAGINA_0 MACRO ;CONMUTACION DE PAGINAS
BCF PCLATH,3
BCF PCLATH,4
ENDM
PAGINA_1 MACRO
BSF PCLATH,3
BCF PCLATH,4
ENDM
PAGINA_2 MACRO
BCF PCLATH,3
BSF PCLATH,4
ENDM
PAGINA_3 MACRO
BSF PCLATH,3
BSF PCLATH,4
ENDM
lo que en definitiva quiero decir.es que no se puede saltar de un banco a otro si no conmutamos las paginas.
por eso si saltamos de un banco a otro.hay que reflejarlo poniendo la conmutacion en la primera instruccion
ya hace tiempo que no he hecho programas tan largos y no se si se me ha saltado algun detalle.
o estoy equivocado en algo.pero el camino es este.