The following may already have been previously addresssed elswhere, but in case it has not, then here is a description of a trap that may catch someone unawre.
I believe there is an error in the Propeller Manual V1.2 regarding the state of the Z flag in the WrLong/WrWord/WrByte instructions. The previous manual version was more correct albeit not totally clear.
For the cited assembly instructions, the current manual indicates (pages 374/375/376) in their respective improved "Opcode Table" that the Z flag is unaffected (by means of a dash unde Z Result) and in footnote2 under the "Concise Truth Table" that "The Z flag is set (1) unless the main memory address is on a long boundary" My tests indicate the Z flag results (when enabled) are not impacted at all by the location of the hub address. Instead, the Z flag is ONLY determined by the content of the register's associated LONG, WORD, or BYTE segments being written.to hub.
For example considering a cog register with the following contents, and writing to any arbitrary location in hub:
Register = $0000_0000 : with WrLong Z=1; with WrWord Z=1; WrByte Z=1;
Register = $8000_0000 : with WrLong Z=0; with WrWord Z=1; WrByte Z=1;
Register = $0000_8000 : with WrLong Z=0; with WrWord Z=0; WrByte Z=1;
Register = $0000_0080 : with WrLong Z=0; with WrWord Z=0; WrByte Z=0;
Perhaps most assemby programmers were already aware of this, but it was news to me! So hope this helps, and happy Propping.