I have a "classic" bank-switched project using LX51 that needs to reserve some address ranges to prevent code from being assigned to those areas. I have a linker directive thus: RESERVE (0xf000-0xffff,0x1fff8-0x1ffff) yet the linker will happily locate code in the reserved addresses: 00EFF5H 00EFFDH 000009H BYTE UNIT CODE/B1 ?L?COM00F0 00EFFEH 00F00CH 00000FH BYTE UNIT CODE/B1 ?L?COM038F 00F00DH 00F015H 000009H BYTE UNIT CODE/B1 ?L?COM0290 00F016H 00F022H 00000DH BYTE UNIT CODE/B1 ?L?COM0298 00F023H 00F02FH 00000DH BYTE UNIT CODE/B1 ?L?COM030C 00F030H 00F03FH 000010H BYTE UNIT CODE/B1 ?L?COM0374 00F040H 00F049H 00000AH BYTE UNIT CODE/B1 ?L?COM04B5 00F04AH 00F051H 000008H BYTE UNIT CODE/B1 ?L?COM0574 I noticed on review of the manual that the description of the RESERVE directive just says "address ranges of the physical memory", but doesn't make a distinction between code and data space. Perhaps the correct thing to do is use CLASSES to limit the address map, e.g. CLASSES (CODE (0 - 0xf000, 0x10000 - 0x1fff8)) I have "Use Memory Layout from Target Dialog" checked, so the default CLASSES is XDATA (X:0x0-X:0x7FFF), HDATA (X:0x0-X:0x7FFF), CODE (C:0x0-C:0x7FFF), ECODE (C:0x0-C:0x7FFF), HCONST (C:0x0-C:0x7FFF)) I've found in the past that if CODE is allowed to grow beyond 0x7fff, then code that should be limited to the common bank (0 - 0x7fff) can be located in the high end of the bank area (0x8000 - 0xffff) if such space happens to be unused by the code for that bank. That layout is bugged, since there's no guarantee that the upper bank with necessary code will happen to be switched in. How do I keep the linker from placing code into certain address ranges?