>so I don't know why they are at different pages and now,
>instead of JSR I found CALL[xxxx,Y] but again, there was no page reference
The two cases are different. For the switch, the compiler want to call the runtime routine which should be allocated non banked, and therefore the compiler uses JSR. Note that the table entries just contain addresses inside of the calling function, and therefore the table only contain 2 byte addresses (or even 1 byte offsets as optimization).
For the manually defined function pointer table, the compiler wants to call the functions the pointers refer too. Unqualified function pointers are far functions in the banked memory model, therefore the compiler uses the CALL instruction. The page number is encode as part of the 3 byte function pointers, its not part of the call instruction.
Daniel