I've been trying to write a PDI programmer with moderate success. That is, smoke is not actually emerging from the part.
I'm wondering what is the meaning of the diagonal hatched box (circled) here ...
According to the datasheet (XMEGA A MANUAL Preliminary):
ST - Store data to PDIBUS Data Space using indirect addressing
The ST instruction is used to store data that is serially shifted into the physical layer shift-register to locations within the PDIBUS Data Space. The ST instruction is based on indirect addressing (pointer access), which means that the address must be stored into the Pointer register prior to the data access. Indirect addressing can be combined with pointer increment. In addition to write data to the PDIBUS Data Space, the Pointer register can be written by the ST instruction. Even though the protocol is based on byte-wise communication, the ST instruction supports multiple- bytes address - and data access. Four different address/data sizes are supported; byte, word, 3 bytes, and long (4 bytes). It should be noted that multiple-bytes access is internally broken down to repeated single-byte accesses. The main advantage with the multiple-bytes access is that it gives a way to reduce the protocol overhead.
Well, fair enough, it sounds like the "Size A/B" (RH two bits) might be both the address and the pointer (somehow), but then they give an example:
Write a value to a address with *(ptr++) instruction through the PDI Controller
Pseudo Directive: ST *(ptr++) 0xFF
PDIBUS hex code: 0x67 0xFF
Now the instruction was 1100 0111
So the "data size" was 4 bytes. But the example only stores one byte!
I can't quite get my head around the example, compared to what the other stuff says. Do they mean, it stores one byte but the pointer advances four? What use is that?