Here are some things I’d look into changing or using now that I look at it again. First, some easier changes:

- Not so much a change to the routines, but in how they are called. Use the new (ish) ARRAYWRITE command to load the array buffer, and the ARRAYREAD command to read the array buffer. The nice thing about these is that they use the modifiers for formatting strings, like DEC and HEX
- The routines use 2 array buffers, one for input (I2CRDBuff) and one for output (I2CWRBuff). I think this could be reduced to only one array buffer pretty easily. It would save on RAM (may not be an issue) and likely simplify things a little.

Much bigger changes which would require a more significant amount work:

- Implement interrupts (via DT’s Instant Interrupts) to do the sending/receive of data ‘behind the scenes’. Basically, load up the array, point the I2C to the correct address, and pull the trigger. The rest will take care of itself while your main program goes on its way doing something else.
- Implement an assembly macro to execute the routines (similar to how the LCD bar graph macro works). This would simplify coding in the main program module.

Who knows, maybe I may look into it as well if time permits. Gives me something to stay out of trouble.