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)?
"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.