(uint32_t)®S_PTR[REG_USB_DAT] + (512 - len) is needed when reading or writing to PI with a smaller buffer, because it is techncially the same buffer, just the data is stored closer to the end.
Important to note that the buffer retains the data through multiple uses, so you may occasionally need to clear the buffer if the size of what you're putting on it ends up awkward.
I believe the NOP actions put the FPGA in a state where it will keep a port connected even though there is no activity. It was required to get the write of "OoTR" to not timeout while writing to the buffer in PI.
The important things
(uint32_t)®S_PTR[REG_USB_DAT] + (512 - len)
is needed when reading or writing to PI with a smaller buffer, because it is techncially the same buffer, just the data is stored closer to the end.Important to note that the buffer retains the data through multiple uses, so you may occasionally need to clear the buffer if the size of what you're putting on it ends up awkward.
I believe the
NOP
actions put the FPGA in a state where it will keep a port connected even though there is no activity. It was required to get the write of "OoTR" to not timeout while writing to the buffer in PI.