Encoding/Decoding DOS (Windows) Firmware images

Name of encoded file: DXM06B0Q.enc

uint8_t encode(uint8_t v) {
  return (v & 0x80)
    ? (~(v<<1) & 0xE0) | (v & 0x0F)
    : (v<<1 & 0xE0) | 0x10 | (v & 0x0F);
}

uint8_t decode(uint8_t v) {
  return (v & 0x10)
    ? (v>>1 & 0x70) | (v & 0x0F)
    : (~(v>>1) & 0x70) | 0x80 | (v & 0x0F);
}

ARM little endian

Sections:

Five tiny data sections:

00000000-0000004c
00001000-00001a9e
00002000-000020e5
00003000-00003062
00003800-00003809

Four code sections

00004000 low0 (mapped to 00000000)
0000C000 low1 (mapped to 00000000)
00028000 low2 (mapped to 00000000)
00044000 low3 (mapped to 00000000)

And two more code sections

0006C000 high0 (mapped at 80000000)
000A4000 high1 (not sure where)

there are calls in high0 into the lower area that only make sense when low1 is mapped.

    but it doesn't look like code to me since it disassembles into a sequence of garbage ANDEQ instructions

some of the code is thumb, some is arm, so you have to check both possibilities

    are we looking at the same file?

probably not, mine is named "DXT09B0Q"