How to declare and assign variables in ROM to an specific address
Keil already has this feature in the '167 toolset. The command line 'ASSIGN' function to the linker creates a public symbol with a numeric value which can be used to fill an unresolved symbol. Maybe the problem is that nobody uses the '51 (just joking). Best luck
LX51 (but not BL51) has this option but, from the description in the manual, I don't think it's quite what this question is after: it assigns an address to an unresolved symbol. The question, if I understand correctly, wants to assign a specific value and a specific address to a symbol? Standard 'C' initialisation can do the value, and Keil's _at_ extension can do the address, but C51 - for some unknown reason - won't let you use the two together :-( We await a reply from Keil to tell us why this is so... (as Graham noted, we've been waiting some time...)