Платежный терминал OMNI-395 изнутри

    Мое реальное знакомство с «недо» PC случилось (случайно) в начале 2000-х, когда я устроился в отдел процессинга пластиковых карточек одного банка. А конкретнее, в разработку софта для платежных терминалов, POS-ов. ПОС для приема платежей пластиковыми карточками — это обычно законченный девайс, мини- или микро- компьютер, с экраном, клавиатурой, с читалкой магнитной полосы с карты, часто с принтером, а сейчас еще и ридером для чиповых карт.

    Я начал с OMNI-395. Построен на Zilog Z180, имеет до 1М non-volatile памяти для хранения данных (журналов операций, например), AT-модем на 2400 (даже с какой-то коррекцией), двенадцативольтовые порты RS232 для PIN-клавиатуры, принтера и просто порт общего назначения (мы его использовали для подключения к мультипортовому шлюзу в TCP/IP) (увы, не все порты имеют полный набор линий RS232, что вынуждает изобретать программные велосипеды), ну и LCD экран.



    Архитектура, кстати, интересная. Для выполнения пользовательского кода применялась виртуальная машина (видимо, так обходились ограничения в адресации, страницы и прочее). Это позволяло использовать для данных много памяти, но вот размер и скорость кода была весьма скромная. Приходилось, например, не использовать родной sprintf, а писать свой, чтобы избежать переполнение локального стека и т.д. Расчет табличного CRC по 5-10КБ данных работал видимые секунды.



    Хотя, положа руку на сердце, по сравнению с терминалами других фирм в то время (Injenico, Nurit и т.д.), где часто надо было заниматься ерундой типа ручного переключения страниц памяти и там хранить журналы, среда VeriFone (TXO) давала почти стандартную библиотеку C, где с портами и файлами можно было работать через read/write/ioctl и т.д. А то, что шаловливые умы разработчиков обычно хотят запихнуть в несчастный девайс слона — и вызывало проблемы. Когда со временем ограничения были более менее освоены, разработка стала почти беспроблемной.

    Компилятор С поддерживал почти всю стандартную библиотеку и раздельную компиляцию модулей. Загрузочные же модули (R-модули), можно было динамически запускать прямо из пользователького кода (типа механизма оверлеев или CHAIN в классических бейсиках).

    И тут дед мороз принес списанный старенький OMNI-395, и радости моей не было предела. Откупоривать будем? Конечно!

    Включаем, на всякий случай, и, о чудо, там еще загружена одна из моих прошивок.



    Итак, вид изнутри.



    Два платы — верхняя, под клавиатурой, и нижняя, с разъемам.





    Раскопаю компилятор и загрузчик в сусеках, попробую написать что-нибудь.

    Увы, описания деталей аппаратной части я не нашел, а официальная документация описывает только стандартную библиотеку и немного виртуальную машину, в коды которой компилируется пользовательский код.

    Конечно, OMNI-395 можно спокойно использовать в качестве НЕДО-PC как он есть. Например, как контроллер чего-либо. Если нужны порты общего назначения, то подходит RS-232 (DTR/RTS — вывод, CTS/DSR — ввод).

    А идеале можно диассемблировать прошивку (там всего 64КБ), и поняв архитектуру, уже писать чисто на Z80, и тогда работать будет гораздо быстрее.

    P.S.


    Надо сказать, что, несмотря на смену аппаратной платформы и компилятора (не один раз), у VefiFone отличная приемственность интерфейса библиотек, что позволяет портировать прошивки на последующие модели с минимальным изменениями. После 395-го я еще поработал с OMNI-3350, 3750, VX510, VX610.

    Кстати, по тэгу #cardpayments в Твиттере я выкладываю фотографии ПОСов, пинпадов и прочих устройств приема банковских карточек, которые встречаю по жизни, если кому интересно.
    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 19
    • –2
      У вас в тексте множество ошибок типа: «что позволяет портировать прошивка на последующие модели, с минимальным изменениями». Это забавно, но чувствуешь себя как на рынке :)
      Может исправите? :)
      • 0
        Исправлено, спасибо.
      • +1
        Ух, ты здорово!
        Скажите, а RS232 там скольковольтовый? Просто у меня есть кроме самого аппарата ещё и термопринтер к нему (printpak 350) — хочу детям игрушку сделать — картинки на термобумаге распечатывать. Возможно ли ниёти где-то даташит?
        • 0
          RS232 там на 12В. Принтер у меня тоже есть (трещалка 250 и термо 350). Увы, у меня были только бумажные копии книг про 395-й. На последущие модели уже были PDFки. Даташита будет мало. Нужен компилятор и разрузчик. Если, конечно, как я писал, расхакать прошивку, то можно свой компилятор затащить, но это будет длинный, но очень интересный проект игрушки для отпрысков. ;-)
          • 0
            Не, не я печатать-то собираюсь с десктопа. Интересует — протокол принтера — он стандартный? С графикой как?
            • 0
              Это просто принтер с последовательным интерфейсом. Поддерживает определенные escape-последовательности, в том числе и для графики в виде битмэпов.
              • 0
                Спасибки, распайку выводов ещё можно обнаглеть и попросить?
                Кстати если нужен сам терминал (для опытов?), могу выслать (за расходы по пересылке) — выкидывать то жалко…
                • 0
                  Попробую найти доки.
        • НЛО прилетело и опубликовало эту надпись здесь
          • +2
            В OMNI-395 нет правильного хранилища для ключей, поэтому надо использовать нормальный пинпад, например, хотя серию SC-xxxxx. В последующих моделях 3350 и выше уже можно было «по-взрослому» персонализировать ПОС ключами.
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Обычно был PP100 и PP1000. Вообще, ностальгия, конечно. Помню как SRAM скидывал скрепкой. (И это был официальный совет! от дилера). Это кстати очень поздняя модель 350го. В ранних был другой модем.
                • 0
                  У нас это называлось «сделать терминалу козу» ;-)
            • +1
              Спасибо, поностальгировал. Лет 5-7 назад поднимал на OMNI395 сеть по приему топливных карт на АЗС одной крупной сети.
              • 0
                Разве подобные девайсы обычно не сконструированы так, чтобы, однажды их разобрав, они больше не работали? Или это только недавно так начали делать?
                • 0
                  Это больше относится к пинпадам, если в них есть модуль для хранения ключей, или к современным посам. Так как OMNI-395 не имеет аппаратного модуля для хранения ключей, то и защиты от вскрытия у него тоже нет.
                • 0
                  Да уж… Про 395й у меня осталось только масса инструкций после работы в Ликард. Живьём, к сожалению, не видел, а вот с эксплуатацией Verifone Omni3750 гораздо ближе знаком. Отличный терминал, пришедшие им на смену Nurit 8210 и 8020 никуда не годились…
                  • 0
                    Имею Verifone Omni 3750 чи возможний запуск своєй микропрограми для использования LCD, клавиатури, термопринтера, RS-232 порта?
                    • 0
                      Да. Для этого вам нужен SDK: компилятор, библиотеки и загрузчик.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.