Forth
http://fforum.winglion.ru/

Форт-система для смарт-карт AtMega163+24c256
http://fforum.winglion.ru/viewtopic.php?f=39&t=2868
Страница 1 из 1

Автор:  Ethereal [ Сб авг 18, 2012 05:41 ]
Заголовок сообщения:  Форт-система для смарт-карт AtMega163+24c256

Форт-система для смарт-карт AtMega163+24c256


Выложил ее на сайте Пирамида, посвященном спутниковому телевидению. Здесь :
http://viaccessfree.biz/forum/showthrea ... post718924

Итак, Форт-система для смарт-карт. Зашивается в смарт-карту, там и работает.
Общение с ней происходит через терминал. Через принятый для работы со
смарт-картами Phoenix-интерфейс, который подключается к COM-порту.

Терминальные программки для MS-DOS..Win-98 прилагаются. Для более поздних
Windows надо бы написать оконную терминальную программу, да у меня руки не
дошли. Одна из терминальных програмок предназначена для общения с картой,
а вторая для сбрасывания ей на компиляцию текстовых файлов. Исходники
прилагаются.

В Форт-системе используется механизм самоперешивания флеш кодом из флеш
(бутлоадера), который имеется у процессоров AtMega. Т.е. если вы при
работе с данной Форт-системой наберете в терминале
: HELLO ." Hello, world !" ;
то это слово сразу же скомпилируется во флеш.
Откат скомпилированного производится словом MARKER

Форт-система 16-разрядная. Соответствует стандарту ANS-Forth, за исключением
словарей. Я не стал делать стек словарей, поскольку у процессора на борту итак
совсем мало ОЗУ и реализовал некий гибрид словарей из Forth-79 и FIG-Forth.
А точнее сделал так, как прочел в книге Баранова и Ноздрунова.
Шитый код в Форт-системе подпрограммный. Оптимизатор кода ограничивается
вставкой однословного rcall там где это возможно вместо двухсловного call.

Словарь Форт-системы ведется во встроенной в карту 24c256, в самом ее хвосте.
Поэтому после написания приложения он отсекается автоматически. Его можно
стереть, а можно про него просто забыть.

Форт-система состоит из двух частей. Первая часть написана на ассемблере.
Она содержит все примитивы, которые определяют быстродействие системы и
минимальный набор слов, обеспечивающих Форту возможность самораскрутки.
Вторая часть Форт-системы написана на Форте. В ней все слова расставлены в
таком порядке, чтобы каждое последующее слово требовало для своего определения
только слова из предыдущих. Т.е Форт-слова выстроены в порядке самораскручивания.
Для сборки полной Форт-системы вторая часть должна быть скормлена через
терминал на компиляцию первой.

Форт-система проиллюстрирована конкретным приложением для смарт-карты.
А именно - пиратской прошивкой, которая открывает канал MEZZO со спутника
HotBird 12245H идент 007400 системы условного доступа Виаксесс.

Форт-система содержит массу программистской шизы. Например
- Перешивание флеш кодом из флеш идет страницами. Т.е. страница в 128 байт
целиком стирается, а потом в нее прошиваются новые данные. Но менять-то мне
нужно, как правило, только один байт. Программист, начитавшийся Дейкстры,
обязательно задействовал бы для этого дела буфер в ОЗУ 128 байт длиной. Тем
более, что и документация на AtMega163 о том недвусмысленно говорит.
Мной же используется безбуферный метод перешивания единственного байта, пусть
и посредством перезаписи целого блока. Метод шизовый, я его лично придумал.
Буфер я выстроил не в ОЗУ, а на защелках внутренних регистров карты, отвечающих
за запись. Благодаря интуитивному пониманию процессов, что при этом происходят.
- В коде Форт-системы используются rjmp-ы с заворотом по адресному
пространству. rjmp из самых младших адресов до самых старших не дотягивается.
Ну так и не надо дотягиваться. Чтобы попасть в самый старшие адреса из
самых младших нужно прыгать в отрицательные адреса. До них-то рукой подать.
Адресное пространство ведь сложено гармошкой.
- Ассемблерный код написан так, что получающийся после его компиляции HEX
двойного назначения. Он - есть прошивка и для флеш AtMega163 и для 24c256.
- Ассемблерный код всюду оптимизирован самым жесточайшим образом. Повсеместно
код использует побочные эффекты предыдущего кода ради экономии такта и байта. В
результате код с трудом читаем и почти не модифицируем. Все переплетено так,
что тронь и рассыплется. Дейкстра сразу идет лесом.
- В той части системы, что написана на Форте, в одном месте используется вызов
не слова, а части слова. Вот здесь слово S> вызывает часть слова C> :
Код:
: C>
  [F]COUNT [ [F]HERE ] HERE 21 + 2DUP C! TUCK >R
  FOR CHAR+ OVER [F]C@ OVER C! SWAP CHAR+ SWAP NEXT
  2DROP R>
;
: S>  [ COMPILE, ] COUNT  ;
- В той-же части Форт-системы порой используются самые феерические
управляющие конструкции. Но они тщательно подобраны так, чтобы порождать
самый лаконичный шитый код.
Как вам, например, такие архитектурные построения :
Код:
: >NAME
  >R VOC-LINK
  BEGIN
    BEGIN
      [F]@ DUP
      WHILE [ ROT ]
        DUP CELL- [F]@ ?DUP
    UNTIL
    BEGIN
      DUP NAME> R@ <>
    WHILE [ ROT ]
      N>LINK [EE]@ ?DUP
  UNTIL
    REPEAT
        NIP
      THEN RDROP
;
Но все работает. И упомянутая прошивка для канала классическй музыки Mezzo этот Mezzo открывает.

Вот это карта для которой Форт :
Изображение
А вот ее схема :
Изображение

Download embedded Ethereal Forth V01.04 for AtMega163+24c256 smart-cards with sources :
http://www.karelmasters.com/download/viaforth_v0104.rar

Автор:  oco [ Вс авг 19, 2012 15:43 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Цитата:
Выложил ее на сайте Пирамида, посвященном спутниковому телевидению.

А можно еще куда-нибудь? Влом регистрироваться.

Автор:  Ethereal [ Ср авг 22, 2012 15:55 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

А, пожалуйста ! Вставил ссылку в самый конец своего сообщения выше.

Автор:  Ethereal [ Сб авг 25, 2012 15:54 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Обновил версию в связи с исправлением ошибок в документации и оптимизацией кода.
Ссылка на новую версию в первом сообщении топика.

Автор:  paskal [ Пн авг 27, 2012 22:27 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Ethereal писал(а):
Итак, Форт-система для смарт-карт. Зашивается в смарт-карту, там и работает.
Общение с ней происходит через терминал. Через принятый для работы со
смарт-картами Phoenix-интерфейс, который подключается к COM-порту.

А можно схему этого феникс-интерфейса показать?

Автор:  Ethereal [ Вт авг 28, 2012 03:02 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Вот простой его вариант : http://killall.net.ru/wp-content/upload ... oenixs.bmp
Взял отсюда : http://killall.net.ru/phoenix-interface ... to-feniks/

Автор:  paskal [ Вт авг 28, 2012 19:19 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Ethereal писал(а):
Вот простой его вариант : http://killall.net.ru/wp-content/upload ... oenixs.bmp

Что то я не въезжаю как это будет работать.
По-моему такая схема феникса не стыкуется со схемой карты выложенной в первом посте. В карте контакты 4 и 8 подключены к mosi и sck соответственно. А на схеме феникса на них ничего не идет. Получается на карту поступает резет, тактовая частота процессора и одна линия данных к порту. Но IMHO этого недостаточно для обмена. Что я не так понял?

Автор:  Ethereal [ Вт авг 28, 2012 20:05 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Контакты оригинальной смарт-карты, если карту положить контактными площадками вверх и чипом влево :
Изображение
Контактный пятак Vpp использовался только на самых древних оригиналках на чипе Mc68hc05sc21 от Моторолы.
paskal писал(а):
В карте контакты 4 и 8 подключены к mosi и sck соответственно. А на схеме феникса на них ничего не идет.
Контактные пятаки mosi и sck используются только для прошивания процессора в пиратской карте AtMega.
Но не для работы с готовой (прошитой) пираткой или c оригиналкой.
Они используются в программаторе, но не в Фениксе.
paskal писал(а):
Получается на карту поступает резет, тактовая частота процессора и одна линия данных к порту. Но IMHO этого недостаточно для обмена.
Почему недостаточно ?
Если все без исключения смарт-карты именно так и работают.
Через сброс, клок и единственный пятак для обмена данными.
paskal писал(а):
Что я не так понял?
Контактный пятак для обмена данными - есть выход с открытым коллектором стоком. Он должен быть подтянут к питанию через сопротивление. И карта и устройство с которым она общается пользуются этим пятаком по очереди, вырабатывая импульсы для передачи данных коммутацией этого пятака на землю.

Автор:  paskal [ Ср авг 29, 2012 21:44 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Разобрался. Я не знал что карты по UARTу обмениваются. А то что контакты идут на MISO, MOSI, SCK сбило с толку - подумал что обмен по SPI.
Но есть другая неясность - на чем бы этот форт попробовать.
Такой карты у меня нет, да и процессор давно снят с производства. Однозначно, надо пробовать в Протеусе. Но и тут засада. В Протеусе тоже нет модели ATmega163. Ближайший аналог который есть - ATmega16. Поэтому вопрос: а будет ли этот форт работать на ATmega16?

Автор:  Ethereal [ Ср авг 29, 2012 22:28 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

Не могу сказать уверенно, но похоже он будет работать и на AtMega16.

Назови мне все отличия AtMega163 и AtMega16 и тогда я скажу точно.
Ну не сравнивать же мне по буквам два даташита.
По ключевым местам в даташитах, разницы между ними я не увидел.

Автор:  WingLion [ Чт авг 30, 2012 15:56 ]
Заголовок сообщения:  Re: Форт-система для смарт-карт AtMega163+24c256

paskal писал(а):
одна линия данных к порту

линия данных то явно двунаправленная

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/