What are special function registers (SFRs) 0x9C and 0x9F that are not defined in the TRM?
SFRs 0x9C and 0x9F are the same as data registers, XAUTODAT1 and XAUTODAT2, which are at external RAM locations 0xE67B and 0xE67C.
The declarations of XAUTODAT1 and XAUTODAT2 in firmware examples are as follows:
EXTERN xdata volatile BYTE XAUTODAT1 _AT_ 0xE67B;
EXTERN xdata volatile BYTE XAUTODAT2 _AT_ 0xE67C;
When using the auto pointers as XAUTODAT2 = XTAUTODAT1; the corresponding assembly instructions are:
MOV DPTR, #XAUTODAT1(0XE67B)
MOV DPTR, #XAUTODAT2(0XE67C)
However, the execution is faster when using SFRs 0x9C and 0x9F. To use these SFRs, add the following two definitions in the fx2regs.h, if not present:
sfr AUTOPTR_INTDATA1 = 0x9C;
sfr AUTOPTR_INTDATA2 = 0x9F;
When using the auto pointers as AUTOPTR_INTDATA2 = AUTOPTR_INTDATA1; the corresponding assembly instructions are:
MOV AUTOPTR_INT_DATA2, AUTOPTR_INT_DATA1 which is more efficient.