RFC 4042:UTF-9 and UTF-18 Efficient Transformation...
RFC-Ref

T1


Click on the red underlined text to get to the source

... ; Accepts: P1/ 9-bit byte pointer to UTF-9 string ; Returns +1: Always, T1/ UCS-4 value, P1/ updated byte pointer ; Clobbers T2 ...
... T2 UT92U4: TDZA T1,T1 ; start with zero ...
... UT92U4: TDZA T1,T1 ; start with zero U92U41: XOR ...
... start with zero U92U41: XOR T1,T2 ; insert octet into UCS-4 value ...
... T2 ; insert octet into UCS-4 value LSH T1,^D8 ; shift UCS-4 value ILDB T2 ...
... JRST U92U41 ; yes, continue XOR T1,T2 ; insert final octet POPJ P, ...
... ; Accepts: P1/ 9-bit byte pointer to UTF-9 string ; T1/ UCS-4 character to write ; Returns +1: Always, P1/ updated byte pointer ...
... UCS-4 character to write ; Returns +1: Always, P1/ updated byte pointer ; Clobbers T1, T2; (T1, T2 ...
... ; Clobbers T1, T2; (T1, T2) must be an accumulator pair ...
... T2, ; we'll need some of these 1-bits later ASHC T1,-^D8 ; low octet becomes nonet with high 0-bit U32U91: JUMPE T1 ...
... T1,-^D8 ; low octet becomes nonet with high 0-bit U32U91: JUMPE T1,U42U9X ; done if no more octets LSHC T1,-^D8 ; shift next octet into T2 ...
... U32U91: JUMPE T1,U42U9X ; done if no more octets LSHC T1,-^D8 ; shift next octet into T2 ROT T2 ...
... bit PUSHJ P,U42U91 ; recurse for remainder U42U9X: LSHC T1,^D9 ; get next nonet back from T2 IDPB T1 ...
... T1,^D9 ; get next nonet back from T2 IDPB T1,P1 ; write nonet POPJ P, ...



Google
Web
RFC-Ref