Does the Cx51 compiler support I2C operations such as addressing external RAM for XDATA fetches? Or, do you still have to have the standard RAM (address lines) if you require excess XDATA space (more than 2K in the case of the 89C669)?
Not exactly my question. I understand how I2C works. The serial procedure is fine if I request or store data (such as user paramater data) from serial RAM via the I2C protocol. However, if I have runtime variables declared as XDATA, can that XDATA reside in the serial RAM? My guess is NO, since that would require that the compiler generate code that supports an I2C interface. That's why I asked if Keil CX51 compiler supports the I2C interface.
"My guess is NO, since that would require that the compiler generate code that supports an I2C interface." As you say, the compiler itself doesn't do this. However, it does provide a generic means for accessing "special" memory - typically used where the conventional XDATA space is Banked (paged) to enlarge it above 64K. You can use this facility to write a "driver" for accessing serial memory that will then allow the compiler to use variables placed in the serial memory - see above. Alternatively, you could just use the conventional approach and write your own write_i2c() and read_i2c() etc functions, and have your application access the EEPROM via these.