fxpal1
22-02-2003, 06:07 PM
The text in 6210 (and 6250, 7110) is NOT encrypted, it is just compressed to save space
if someone would like to have a go here is how to decompress:
The compressed text-chunk is preseed by a 512 bytes compression key (after the flag A8000000) . this key is made up of 256 2byte pairs describing the most frequently used pairs-of-bytes.
00 = 00 00
01 = 00 65
02 = 00 20
03 = 02 00
04 = 01 00
etc.
some entries contains the same hex value all over :
6E = 6E 6E (means "dont translate")
after this the table of lengths follows (as in unicode charsets) tells the number og 2byte pairs
then follows the actual text packed with pointers to the compression key
as an example, in 6210 any language pack, use the first text unit after ENGLISH¤
the length is 3 which means 3 byte-pairs (6 bytes)
content is: 88 01 04 AF 00 3A
using compression key you get:
88 = 00 4D
01 = 00 65
04 = 01 00
AF = 1A 19
00 = 00 00 = 00
3A = 3A 3A = 3A
Result: 00 4D 00 65 01 00 1A 19 00 3A
Using compression key you get:
00 = 00 00 = 00
4D = 4D 4D = 4D
00 = 00 00 = 00
65 = 65 65 = 65
01 = 00 65
00 = 00 00 = 00
1A = 74 0E
19 = 0F 67
00 = 00
3A = 3A
Result: 00 4D 00 65 00 65 00 74 0E 0F 67 00 3A
Using compression key you get:
00 = 00
4D = 4D
00 = 00
65 = 65
00 = 00
65 = 65
74 = 74
0E = 00 09
0F = 6E 00
67 = 67
00 = 00
3A = 3A
Result: 00 4D 00 65 00 65 00 74 00 09 6E 00 67 00 3A
Using compression key you get:
00 = 00
4D = 4D
00 = 00
65 = 65
00 = 00
65 = 65
74 = 74
00 = 00
09 = 69 00
6E = 6E
00 = 00
67 = 67
00 = 00
3A = 3A
Result: 004D 0065 0065 0074 0069 006E 0067 003A = Meeting:
so a text of 8 unicode characters = 16 bytes is compressed into 6 bytes using the compression key
if someone would like to have a go here is how to decompress:
The compressed text-chunk is preseed by a 512 bytes compression key (after the flag A8000000) . this key is made up of 256 2byte pairs describing the most frequently used pairs-of-bytes.
00 = 00 00
01 = 00 65
02 = 00 20
03 = 02 00
04 = 01 00
etc.
some entries contains the same hex value all over :
6E = 6E 6E (means "dont translate")
after this the table of lengths follows (as in unicode charsets) tells the number og 2byte pairs
then follows the actual text packed with pointers to the compression key
as an example, in 6210 any language pack, use the first text unit after ENGLISH¤
the length is 3 which means 3 byte-pairs (6 bytes)
content is: 88 01 04 AF 00 3A
using compression key you get:
88 = 00 4D
01 = 00 65
04 = 01 00
AF = 1A 19
00 = 00 00 = 00
3A = 3A 3A = 3A
Result: 00 4D 00 65 01 00 1A 19 00 3A
Using compression key you get:
00 = 00 00 = 00
4D = 4D 4D = 4D
00 = 00 00 = 00
65 = 65 65 = 65
01 = 00 65
00 = 00 00 = 00
1A = 74 0E
19 = 0F 67
00 = 00
3A = 3A
Result: 00 4D 00 65 00 65 00 74 0E 0F 67 00 3A
Using compression key you get:
00 = 00
4D = 4D
00 = 00
65 = 65
00 = 00
65 = 65
74 = 74
0E = 00 09
0F = 6E 00
67 = 67
00 = 00
3A = 3A
Result: 00 4D 00 65 00 65 00 74 00 09 6E 00 67 00 3A
Using compression key you get:
00 = 00
4D = 4D
00 = 00
65 = 65
00 = 00
65 = 65
74 = 74
00 = 00
09 = 69 00
6E = 6E
00 = 00
67 = 67
00 = 00
3A = 3A
Result: 004D 0065 0065 0074 0069 006E 0067 003A = Meeting:
so a text of 8 unicode characters = 16 bytes is compressed into 6 bytes using the compression key