Ich weiß ja nicht, was dein Compiler da anstellt, aber XPOS und YPOS sind doch immer Integer variablen mit 16Bit.
Wärs nicht möglich, das da immer 2 Bytes übertragen werden?
Dann könnte ich mir das Fehlverhalten erklären.

Versuch mal die Integer zu teilen, die Teilergebnisse in Chars zu puffern und diese Chars dann zu übertragen.