+/** Sends the given pointer address to the target's TPI pointer register */\r
+static void TINYNVM_SendPointerAddress(const uint16_t AbsoluteAddress)\r
+{\r
+ /* Send the given 16-bit address to the target, LSB first */\r
+ XPROGTarget_SendByte(TPI_CMD_SSTPR | 0);\r
+ XPROGTarget_SendByte(((uint8_t*)&AbsoluteAddress)[0]);\r
+ XPROGTarget_SendByte(TPI_CMD_SSTPR | 1);\r
+ XPROGTarget_SendByte(((uint8_t*)&AbsoluteAddress)[1]);\r
+}\r
+\r
+/** Sends a SIN command to the target with the specified I/O address, ready for the data byte to be written.\r
+ *\r
+ * \param[in] Address 6-bit I/O address to write to in the target's I/O memory space\r
+ */\r
+static void TINYNVM_SendReadNVMRegister(uint8_t Address)\r
+{\r
+ /* The TPI command for reading from the I/O space uses strange addressing, where the I/O address's upper\r
+ * two bits of the 6-bit address are shifted left once */\r
+ XPROGTarget_SendByte(TPI_CMD_SIN | ((Address & 0x30) << 1) | (Address & 0x0F));\r
+}\r
+\r
+/** Sends a SOUT command to the target with the specified I/O address, ready for the data byte to be read.\r
+ *\r
+ * \param[in] Address 6-bit I/O address to read from in the target's I/O memory space\r
+ */\r
+static void TINYNVM_SendWriteNVMRegister(uint8_t Address)\r
+{\r
+ /* The TPI command for writing to the I/O space uses wierd addressing, where the I/O address's upper\r
+ * two bits of the 6-bit address are shifted left once */\r
+ XPROGTarget_SendByte(TPI_CMD_SOUT | ((Address & 0x30) << 1) | (Address & 0x0F));\r
+}\r
+\r