2

Контрольная сумма кассы

 

hello-worldЛежит передо мной кассовый аппарат ЭКР2102Ф, снятый с учета в ИМНС. К сожалению, в повторной регистрации его (без ЭКЛЗ) на другое предприятие, мне отказано. Буду делать из него печатающий градусник.
В предыдущей статье я сумел деассемблировать программу кассового аппарата, а вот что-либо изменить в ней, мне не позволяет проверка зашиты сохранности данных ПЗУ.
Дело в том, что в кассовом аппарате используется внешний носитель программы. Исполнен он в виде микросхемы — постоянно запоминающего устройства ПЗУ. А вот гарантировать, что биты данных программы не сбросятся в единицу, невозможно. Так же возможно и окисление контакта. Чтобы облегчить работу сервисным центрам в поиске неисправности кассы, в программе реализована проверка программы самой себя путем подсчета контрольной суммы.
Рассмотрим ее внимательно.

37B3 : 90 00 00 MOV DPTR,#0000H // обнуление счетчика
37B6 : 75 F0 00 MOV B,#00H // обнуление контрольной суммы
37B9 : E4 CLR A // сброс регистра А
37BA : 93 MOVC A,@A+DPTR // запрос байта программы по адресу DPTR
37BB : 25 F0 ADD A,B // суммирование
37BD : 85 E0 F0 MOV B,ACC // сохранение результата в регистре В
37C0 : A3 INC DPTR // увеличение на единицу адреса программы
37C1 : C0 83 PUSH DPH // сохранение в стеке старшего регистра DPTR
37C3 : C0 82 PUSH DPL // сохранение в стеке младшего регистра DPTR
37C5 : 90 FE 91 MOV DPTR,#0FE91H // загрузка окончательного адреса программы
37C8 : E5 82 MOV A,DPL // загрузка младшего адреса окончания программы
37CA : D0 82 POP DPL // вынимаем из стека младший перебираемый адрес программы
37CC : B5 82 15 CJNE A,DPL,37E4H // сравниваем, не равен он окончательному
37CF : E5 83 MOV A,DPH // загрузка старшего адреса окончания программы
37D1 : D0 83 POP DPH // вынимаем из стека старший перебираемый адрес программы
37D3 : B5 83 E3 CJNE A,DPH,37B9H // сравниваем, не равен он окончательному
37D6 : 85 F0 30 MOV 30H,B
37D9 : E4 CLR A
37DA : 93 MOVC A,@A+DPTR // загрузка ожидаемой контрольной суммы
37DB : B5 F0 12 CJNE A,B,37F0H // если контрольная сумма не равна ожидаемой — переход на 37F0
37DE : 12 85 15 LCALL 8515H
37E1 : 02 38 05 LJMP 3805H
37E4 : D0 83 POP DPH // вынимаем из стека старший перебираемый адрес программы
37E6 : 80 D1 SJMP 37B9H // короткий безусловный переход по адресу

Теперь попробуем в НЕХ-редакторе по адресу 4F02 заменить текст ТАБЛИЦА КОДОВ СИМВОЛОВ на ТАБЛИЦА ЗАМЕРОВ ТЕМПЕРАТУР.
Рекомендую, по адресу 37DB заменить временно B5 F0 12 на 00 00 00. Или, после каждого изменения программы, подгонять контрольную сумму.
Сохраняем результат, и в режиме распечатки таблицы кодов смотрим результат: свой первый кассовый «HELLO WORLD».

<— Предыдущий урок


Метки:

2 комментария к “Контрольная сумма кассы”

  1. Пупкин : 27th Май 2009 | 14:53

    Надо найти фразу проведите Т.О и переделать на заплатите за Т.О

  2. Kassovik : 28th Май 2009 | 10:47

    Эти уроки для понимания работы кассового аппарата. Надеюсь Вы понимаете что измененная прошивка не может работать у клиента.

Оставить комментарий или отзыв к статье Контрольная сумма кассы

XHTML: Вы можете использовать эти тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>