Deja Vu #0A
30 сентября 2000
  Железо  

__________________________________________

(C) Cardinal/PGC/BDA
__________________________________________


      Телефонные карточки.
      Что это такое и с чем их едят.


   Приветик  всем, кто  еще  не забыл, как
правильно держать паяльник! Ну, наконец-то
я  снова  добрался к IBM-клавиатуре, чтобы
удобно набить данный текст в ZXWORD'e. Как
я  и  обещал в прошлом номере в статье "От
авторов", речь  сейчас пойдет о телефонных
карточках (таксофонные  карты  или  просто
SMART CARDS).
   В  некоторых  электронных  журналах уже
была  информация по этому делу, но то, что
там говорилось  подходило только к пЦ, по-
тому  что все было скачено с Интернета без
всякой  конверсии  на  Спектрум. Далее  вы
поймете, почему  так. Я  вам буду излагать
материал только так, как  понял его сам, и
говорить только те вещи, которые были лич-
но мной проверены.
   Итак...

   В нашем славном городе Кемерово еще год
назад можно было совершенно бесплатно поз-
вонить с телефонного автомата (таксофона),
но потом пришли полутрезвые дядьки Злобыни
Никитичи и заменили все таксофоны на плат-
ные. А  в киосках стали продавать красивые
с виду пластиковые карточки, ибо последние
без  них  не работали. Но честный народ не
желал покупать дорогие карточки, и в мест-
ных передачах новостей иногда проскакивали
сообщения, что  там-то  и там-то таксофоны
безнадежно  испорчены  тем, что в прорезях
под  карточки содержались инородные тела в
виде  булавок,  шпилек,  кусочков фольги и
др.  черного  и  цветмета. Те, кто пихал в
таксофоны  всякую  фольгу  и шпильки, были
явными  лохами, ни  черта не смыслившими в
электронике.
   Мы с Максом тоже не сидели на месте, но
действовали  другими способами. В кратчай-
шие сроки из разных источников, но в боль-
шинстве  своем  посредством многочисленных
экспериментов, мы  разузнали следующую ин-
формацию о картах, которые юзаются в нашем
городе.

  Общие теоретические сведения.

   В  нашем городе продаются карточки сле-
дующих  объемов:  5,10,15,20,30,40,60,90 и
120 минут. Естественно, и цены на них раз-
ные. По  этим  карточкам  можно звонить не
только по городу, но и по межгороду и даже
за пределы России! Только  минуты, естест-
венно, бегут быстрее.
   Внешне  карточка представляет собой ку-
сок  пластика  с  впаяным туда микрочипом.
Микрочип, как выяснилось позже, соответст-
вует стандартам ISO7816-2.В чипе содержит-
ся  ПЗУ  и ОЗУ объемом 64 байта (512 бит).
Из них ОЗУ составляет только 8 байтов. Вот
раскладка памяти целой карточки на 120 ми-
нут разговорного времени:

    адрес       значение

   000 #00  %10000010 130 #82
   001 #01  %11001011 203 #CB
   002 #02  %00011001 025 #19
   003 #03  %00011101 029 #1D
   004 #04  %01010111 087 #57
   005 #05  %10101101 173 #AD
   006 #06  %11100101 229 #E5
   007 #07  %00101001 041 #29
   008 #08  %01111111 127 #7F
   009 #09  %01111111 127 #7F
   010 #0A  %01111111 127 #7F
   011 #0B  %01111111 127 #7F
   012 #0C  %01111111 127 #7F
   013 #0D  %11111111 255 #FF
   014 #0E  %11111111 255 #FF
   015 #0F  %11111111 255 #FF
   016 #10  %10010101 149 #95
   017 #11  %00011111 031 #1F
   018 #12  %11101111 239 #EF
   019 #13  %00101011 043 #2B
   020 #14  %11011100 220 #DC
   021 #15  %00001111 015 #0F
   022 #16  %10111111 191 #BF
   023 #17  %11010010 210 #D2

   Байты  по адресам 24(#18) - 63(#3F) за-
биты всякой шнягой (0 и #FF) и, походу, не
используются. А  сейчас  подробнее о раск-
ладке памяти.
   Байты  0 - 3 на всех карточках содержат
значения:  #82,#CB,#19,#1D, по  всей види-
мости, это  идентификационный номер карты,
в разных городах он разный.
   Байты  4 - 7 на всех карточках содержат
различные значения. Есть подозрение, что в
них  каким-то  образом  закодирован  номер
карты  (он написан на самой карте) и коли-
чество минут.
   Байты  8 - 12 это ОЗУ карты, туда можно
записывать информацию, а точнее,стирать ее
нулями. Это  самое интересное место в кар-
те. Здесь  хранятся оставшиеся минуты раз-
говора. Формат  этих  5-ти байт таков: как
видите, каждый  из них содержит по 7 вклю-
ченных  битов. И если посчитать количества
битов  в  каждом  байте, то  получим число
77777  в  восьмеричной  системе  счисления
(32767  в  десятичной). Таксофон вычисляет
количество оставшихся минут в обратном по-
рядке. Т.е., байты  уменьшаются до опреде-
ленного  предела  и  больше  уменьшения не
происходит. Из  этого  следует  вывод, что
маскимальное  количество  минут может быть
32767. Если  по адресу 12 забить все вклю-
ченные биты нулями, то у вас автоматически
исчезнут  7  минут. А  если затереть бит 0
байта  по  адресу 11, то исчезнет еще одна
минута  разговора, а байт адреса 12 примет
значение %11111111.Т.е. автоматически вос-
становится, но почему-то  включится и 7-ой
бит. Но таксофон сам стирает  0-ой бит  по
адресу 12,чтобы составить необходимое чис-
ло, поэтому  глюков не происходит. Тем бо-
лее, что считаются только  количества еди-
ничных битов в байтах, и не важно, как они
расположены. Итак, 120-ти минутная карта с
истраченными 8-ю минутами будет  выглядеть
так:

    адрес       значение

   008 #08  %01111111 127 #7F
   009 #09  %01111111 127 #7F
   010 #0A  %01111111 127 #7F
   011 #0B  %01111110 126 #7E
   012 #0C  %11111110 254 #FE

   А пустая 120-ти минутная карта выглядит
вот так:

    адрес       значение

   008 #08  %01111111 127 #7F
   009 #09  %01111111 127 #7F
   010 #0A  %01111110 126 #7E
   011 #0B  %00000000 000 #00
   012 #0C  %11111110 254 #FE

   По  правде  говоря, если  стереть любой
бит в байте по адресу 11, то байт по адре-
су  12 автоматически восстанавливается. То
же  относится  и к байтам по адресам ниже,
если их покоцать, то автоматически восста-
навливаются байты по адресам выше.
   Скажу  еще, что  записать единицы в эти
адреса нельзя, а только стереть.
   На  карточках  других городов алгоритмы
вычитания минут обычно отличаются, причем,
очень сильно.
   Байт  по  адресу 13 содержит #FF и сте-
реть его почему-то нельзя.
   По  адресам  14 и 15 содержаться байты,
которые, по  моему мнению, зарезервированы
под  секунды. Таксофоном они не трогаются,
но стереть их можно.
   По  адресам  16  - 23 на всех карточках
содержатся  разные значения. Есть подозре-
ние, что в них может содержаться закодиро-
ванная  контрольная  сумма, или количество
минут, или номер карточки, или все вместе.
Этот вопрос пока остается открытым.

      Диаграммы сигналов.

   Таксофон с карточкой общается посредст-
вом  электрических импульсов, определенной
последовательности. Вот так выглядит  кон-
тактная площадка микрочипа карточки.

┌──────────┬──────────┐
      1   5       1 : Vcc = +5V
├─────┐    │    ┌─────┤   2 : RESET
 2  ├────┘     6    3 : CLK
│     │         │     │   4 : ---
├─────┤         ├─────┤   5 : GND
 3           7    6 : ---
│     ├────┬────┤     │   7 : DATA
├─────┘    │    └─────┤   8 : ---
      4   8       └──────────┴──────────┘

   Контакты 4, 6 и 8 не задействованы, по-
этому  карточки  вашего города могут иметь
всего  6 контактов вместо 8-ми, но по раз-
мерам  и  расположению  должны совпадать с
нашими картами.
   Таксофон  читает карточку побитно, т.е.
по  одному биту по порядку. Всего на карте
512 битов, когда будет прочитан последний,
автоматически   читается  0-ой.  Диаграмма
сигналов  приведена  ниже. Чтобы прочитать
0-ой бит, необходимо установить адрес кар-
точки  в 0. Это делается следующими сигна-
лами.

     Диаграмма установки адреса в 0.

          ┌──────────┐           лог 1
          │          │
RESET  ───┘          └────────── лог 0

             ┌────┐              лог 1
             │    │
CLK    ──────┘    └───────────── лог 0
             <---->
              time

   Естественно,на карточку должно быть по-
дано  питание  +5в  и  общий. Время (time)
удержания  импульса  не  критично  и может
быть  любым, но не слишком коротким, а то
карточка  не  успеет обработать сигнал. По
времени длина импульса может быть в преде-
лах  от нескольких тактов Z80 до хоть нес-
кольких дней:)
   После  того, как вы сбросили адрес кар-
точки  в 0, то на контакте DATA сразу поя-
вится  значение самого начального бита па-
мяти  карты. Если бит = 0, то на DATA выс-
тавляется 0 - 0.2 вольта (лог.0), если бит
=  1, то  на DATA выставляется высокоимпе-
дансное  состояние, т.е. оторванное, а  не
лог.1, как вы можете заметить.
   Чтобы  увеличить адрес на 1 и прочитать
следующий бит, необходимо всего лишь крат-
ковременно  выставить  CLK  в  1  и тут же
сбросить его.

  Диаграмма смещения адреса карты на +1.

                                 лог 1

RESET  ───────────────────────── лог 0

             ┌────┐              лог 1
             │    │
CLK    ──────┘    └───────────── лог 0


   После  такой  операции на контакте DATA
выставляется   значение   бита  по  адресу
adr0+1. Если  это  действие  повторить, то
выставляется   значение   бита  по  адресу
adr0+2 и так далее...

   Как стереть какой-либо бит? Тут немного
сложнее. Как я уже говорил, нельзя на кар-
ту  записать  бит=1,  можно  только бит=0,
т.е.  стереть  текущий  бит. Чтобы стереть
какой-нибудь бит,необходимо установить ад-
рес карточки в 0, затем столько раз "щелк-
нуть"  сигналом CLK, чтобы адрес  карточки
установился  прямо на нужный бит. И только
затем выдать необходимый импульс стирания.

       Диаграмма импульса стирания.

          ┌─────┐                лог 1
          │     │
RESET  ───┘     └─────────────── лог 0

                    ┌────┐       лог 1
                    │    │
CLK    ─────────────┘    └────── лог 0

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

     Практические сведения.

   Покончим на некоторое время с теорией и
перейдем  к  практике.  Сейчас я научу вас
читать информацию с карточек на Спектруме.
Для этого необходимо, чтобы в вашем компь-
ютере был  интерфейс  принтера (Centronics
(LPT на ПЦ) или любой другой).От интерфей-
са принтера нам понадобятся следующие сиг-
налы:  data_0, data_1, busy, gnd (общий) и
+5v от блока питания.
   Чтобы не припаивать все это дело к кар-
точке, сделайте  планшет, в который будете
вставлять  карточку. У  меня такой планшет
изготовлен  из  кусочков оргстекла от под-
кассетников  и загнутых канцелярских скре-
пок в качестве контактов.
   Сигналы   data_0  и  data_1  интерфейса
Centronics  (LPT на ПЦ) выходные, а сигнал
busy - входной с точки зрения компьютера.

            Схема соединения.

      data_0 - CLK (3 pin карты)
      data_1 - RESET (2 pin карты)
      busy   - DATA (7 pin карты)
      GND    - GND (5 pin карты)
      +5V    - +5V (1 pin карты)

   Для  тех, кто не знает, GND - это общий
или по другому земля. В паспорте  от Scor-
pion'а сигналы data_0 и data_1  обозначены
как Centr_0 и Centr_1, на схеме Pentagon'а
они CTS0 и CTS1.В вашем компьютере они мо-
гут иметь другое обозначение, но смысл тот
же. К сигналу busy необходимо припаять ре-
зистор на пару-другую КОм, один  конец ре-
зистора на busy,другой на +5V. Посмотрите,
возможно,на схеме вашего компьютера он уже
есть, тогда припаивать его  не  нужно. Это
относится к владельцам Scorpion'ов  и Pen-
tagon'ов.
   Чтобы   управлять  сигналами  data_0  и
data_1, необходимо  выдавать  в порт #FFDD
на Скорпионе или #00FB на Пентагоне байт с
включенными  или  выключенными 0-ым и 1-ым
битами. На вашем компе порт принтера может
быть другим.

LD BC,#FFDD    ;на Пентагоне #00FB
LD A,%00000001 ;
OUT (C),A      ;сигнал CLK = лог.1
...
LD BC,#FFDD    ;на Пентагоне #00FB
LD A,%00000010 ;
OUT (C),A      ;сигнал RESET = лог.1
...
LD BC,#FFDD    ;на Пентагоне #00FB
LD A,%00000011 ;
OUT (C),A      ;сигнал CLK и RESET = лог.1
...

   Чтобы  проанализировать  сигнал DATA на
карточке, который  показывает значение те-
кущего бита (0 или 1), необходимо на Scor-
pion'е сделать так:

IN A,(#FE)
RLA
JR C,...

   Где флаг CF показывает состояние сигна-
ла DATA (busy в интерфейсе принтера). Если
CF=1,  то  DATA=1  (бит=1),  если CF=0, то
DATA=0  (бит=0). Другими словами, 7-ой бит
порта  #FE  на чтении показывает состояние
сигнала DATA (busy).
   На  Пентагоне, судя  по  схеме, которая
сейчас  лежит  передо  мной (схему любезно
предоставил  уважаемый  CAV/AURYN/CPU), за
сигнал busy (у Пентагона CT_BUSY) отвечает
тоже  7-ой бит, только не ясно какого пор-
та. К сожалению, книжки от самого Пентаго-
на  у меня нет, поэтому его порты принтера
я не знаю, а по схеме разбираться влом.
   Самое  главное, чтобы  вам  не пришлось
пыхтеть  над созданием хорошей программной
поддержки  сего  девайса, в  Приложении вы
найдете  исходник  в Alasm4.2 с подробными
комментариями, который  умеет  читать кар-
точки  и выводить на экран всю необходимую
информацию. Кому надо, тот несомненно раз-
берется. Исходник  будет без проблем рабо-
тать на Scorpion'е, для другого компьютера
необходимо  поменять  EQU  с номером порта
принтера на нужный.

                Cardinal/PGC/BDA



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
System - program management of the "upper" memory.
Monologue - On the electronic media ...
BBS - list of stations BBS ZXNet.

В этот день...   29 April