__________________________________________
(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: