I'm sorry, I am away from my computer. I think the issue is with the chr$ function. In my sample code it looked at all 16 bits of dm[116] and treated it as a Unicode character rather than looking at the lower 8 bits of dm[116]. This got you the chinese charater. The chr$ then correctly isolated the most significant byte of dm[116] and converted it to an "E". "E" is absolutely correct for the value of in dm[116].
a$ = ""
for i = 116 to 125
a = dm[i] & &hff ' isolate lsb in a
If a = 0
Exit
Endif
a$ = a$ + chr$(a)
a = (dm[i] / 256) & &hff ' isolate msb in a
if a = 0
exit ' end of string encountered
endif
a$ = a$ + chr$(a)
next
Sorry for not remembering that chr$ handles Unicode. Remember that the "A" in ASCII is for "American" and I am still working with 7-bit ASCII. I just used your example, "A$=CHR$(DM[116])" and made the assumption that this code would actually return only the lower 8-bits of the value in DM[116] and assign it to the string, A$. Sorry for assuming.
The values you provided should build a string of "HELLO". Be aware that your sample is not a 20 character string because the msb of DM[118] is 0x00 this is a non-printable ASCII character and perhaps you should use this value as an hint that you have reached the end of string.
Gary D*ckinson