ええと、単に大きなデータ(=コードでない)なんだよね?

ならばコンパイラ関係なしにHEXファイルはバンク切替前の 実アドレスで作って、
バンク内は自分でアドレス指定すればいいでしょう?

C言語から書くなら直接 char *BANK1=(char *)0x4000 とか指定すればいいでしょう?
あるいは アセンブラで _BANK1 .equ 4000h をグローバルにすればいいだけでしょう?