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