The example program msc1200_adc works in the simulator, but does not appear to run on the msc1200evm hardware. If the Ouput -> Run User Program box is checked and the name of the download is corrected to match the name of the executable, the program downloads and starts to run, but the characters in the terminal window are gibberish. The code appears to use 2400 & 8bits, but setting the terminal to these values does not fix it. Does this example work on the real hardware or just the simulator?
"I'll look at the SFR as you suggest, but I've found a curious result that makes me suspect the compiler has issues with xdata arrays." It's always tempting to blame the compiler but I'm afraid to say the Keil tools are rather good. It's rare to discover it isn't your own mistake... "The following prints '8' in both printf statements as expected." I think the optimiser has cheated you out of the read from the array. I suspect that if you change the first line to: int volatile xdata dd[10]; the first code snippet will also fail.