We try to use LX51 instead of BL51 with new PK51 package (C51 7.0.1 etc). If we define the linker option for BL51 DA(30H) ID(80H) ST(?STACK) XDATA(3000H), what is equivelant define in LX51. In the other way to say what is the syntax for telling the starting address to locate segment for a memory class?
We still try to understand the nature of your problem here. With RESERVE (B0:0x8000-B0:0x8FFF) you can for example prevent that the linker locates any variables to the memory space 0x8000 - 0x8FFF in Bank 0. So why does RESERVE not do what you want? In a similar way you can reserve any space in xdata space. BL51 does not handle xdata banking, but with your example you refer always to xdata memory. So, if you have not solved your problem, please explain it again to us. In this way we can improve our products.