О прошивках BOSCH M3.1 часть 3 - Вин
Вин в прошивках M3.1 а также М3.3 и М3.3.1 записан в кодировке Base36 (используется только последние 6 бит).
Зачем непонятно, может попытка сэкономить место (всетаки год был 1989) может из каких либо других соображений, в мотрониках MS42/43 МЕ7 он записан также только байты старший и младший поменяны местами, в более поздних мозгах он записан в явном виде в формате ASCII.
Как уже писал вин в мозгах М3.1 лежит по адресу 7EBA и занимает 13 байт. Как же так получилось знаков 17, а байт 13?
Поскольку для записи вина мы используем только цифры и алфавит то символов получается всего 36, для кодирования такого количества знаков достаточно 6 бит, всего при использовании 6 бит можно закодировать 64 знака.
Берем последовательность цифр от 0 до 9, символов от A до Z и нумеруем их по порядку от 0 до 35.
Затем записываем номер присвоенный нами сиволу в бинарном виде - получаем для каждого символа или цифры бинарный код в 6 бит (специально приложил табличку из эксела с кодами).

Теперь к записи в прошивке. Если взять 17 знаков то если помножить на 6 (бит) получится 102 бита, но это не кратно 8 битам как быть с недостающими битами?
Дописываем в начало 2 нуля, получится 104 бита, на 8 делится ровно - получаем 13 полноценных байт - можно записать.
Итак берем файл прошивки в приложении, для простоты я приложил скриншот где вин выделен.

В нашем случае будет такая строка - 202СA0420C41461CA281083105 - попробуем расшифровать.
Сначала запишем в бинарном виде.
20 - 00100000
2C - 00101100
A0 - 10100000
42 - 01000010
0C - 00001100
41 - 01000001
46 - 01000110
1C - 00011100
A2 - 10100010
81 - 10000001
08 - 00001000
31 - 00110001
05 - 00000101
Затем запишем в одну строку.
00100000001011001010000001000010000011000100000101000110000111001010001010000001000010000011000100000101
Откусим лишние 2 бита в начале.
100000001011001010000001000010000011000100000101000110000111001010001010000001000010000011000100000101
Разобьем на куски по 6 бит - должно получиться 17 кусков.
100000 001011 001010 000001 000010 000011 000100 000101 000110 000111 001010 001010 000001 000010 000011 000100 000101
Смотрим табличку которую составляли в экселе и сопоставляем.
Должно получится WBA1234567AA12345
Собственно все :), я давно хотел разобраться, и даже кто-то лет 10 назад уже выкладывал подобное описание на моем старом форуме, но информация потерялась а повода посидеть разобрать заново не находилось...
-
5

0 Комментариев
Рекомендуемые комментарии
Комментариев нет