Как читают телефонные карты, или научись цеплять к своему компу девайсы

Спецвыпуск Xakep, номер #011, стр. 011-088-3

Процедурки, которые здесь тусуются, научат тебя подключать и отключать ногу порта. На каждую ногу по две процедуры: одна выдает на ножку единицу, другая - ноль. Единица - это +5 вольт, а ноль - это почти 0 вольт. Вот и вся хреноматика. На одной ноге проводок Reset, на другой - Clk. Этими двумя проводками мы управляем режимами карты.

Вторая нога порта (d0) у нас заведена на reset карты. Эта процедура выполняет установку d0 в 1 (set reset). Не забывай, что установленное значение не изменится до тех пор, пока мы не запишем новое. Порт здесь - стандартный LPT1, его адрес в шестнадцатиричной записи: 378h. Просто с перепою RMaster забыл о всяких шестнадцатиричностях и пишет три десятичных восьмерки. Имеет право, 378h=888d.

Устанавливаем Reset в единицу:

procedure s_reset;

begin

s:=port[888]; {Порт данных LPT1}

asm

mov al,1 {В регистр AL загружаем маску 00000001}

mov bl,s {В BL загружаем данные из LPT1}

or bl,al {Устанавливаем младший разряд в единицу, остальные не меняем, результат в BL}

mov s,bl {Результат сохраняем в s}

end;

port[888]:=s {Выдаем в порт байт из s}

end;

Устанавливаем проводок Reset в ноль. Процедура сброса второй ноги порта в 0 (clear reset):

procedure c_reset;

begin

s:=port[888];

asm

mov al,254 {Маска 11111110}

mov bl,s

and bl,al {Устанавливаем младший разряд в ноль, остальные не меняем}

mov s,bl

end;

port[888]:=s

end;

Ну, а теперь для проводка Clk. Те же самые процедуры сброса и установки, только для третьей ноги порта. d1 соединена с Clk карты. Установка Clk в 1 (set Clk):

procedure s_clk;

begin

s:=port[888];

asm

mov al,2 {Маска 00000010}

mov bl,s

or bl,al

mov s,bl

end;

port[888]:=s

end;

Сброс Clk в 0 (clear Clk):

procedure c_clk;

begin

s:=port[888];

asm

mov al,253 {Маска 11111101}

mov bl,s

and bl,al

mov s,bl

end;

port[888]:=s;

end;

Проводок i/o предназначен для чтения. Пишем функцию, которая может проверить, что у нас творится на выходе телефонной карточки. Через эту функцию мы засасываем в компьютер инфу, которая хранится на карте. А через Reset и Clk мы просим карту дать нам эту инфу.

Функция при запуске выдает инвертированное значение 8 бита по адресу 379h. Этот бит равен 1, если на 11 ноге порта (busy) НИЗКИЙ уровень сигнала, и 0 - если уровень сигнала ВЫСОКИЙ. 11 нога соединена с i/o карты.

function io:byte;

begin

s:=port[889]; {LPT1}

asm

mov al,128 {10000000}

mov bl,s

and bl,al

mov s,bl

end;

s:=s shr 7; {Сдвиг вправо на 7 разрядов, младшие 7 разрядов выбрасываются}

if s=1 then io:=0 else io:=1;

end;

И еще раз для тех, кто с пропеллером. Если язык ассемблера ты не понимаешь, не обращай внимания на внутренности процедур. Достаточно знать, что данная процедура устанавливает 0 или 1 на некоторой ноге, при этом никак не влияя на другие. Функция io считывает 0 или 1 с 11 вывода порта.

Пауза

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

Назад на стр. 011-088-2  Содержание  Вперед на стр. 011-088-4

загрузка...
Cпец Хакер #075Cпец Хакер #074Cпец Хакер #073Cпец Хакер #072Cпец Хакер #071Cпец Хакер #070Cпец Хакер #069Cпец Хакер #068Cпец Хакер #067Cпец Хакер #066Cпец Хакер #065Cпец Хакер #064Cпец Хакер #063Cпец Хакер #062Cпец Хакер #061Cпец Хакер #060Cпец Хакер #059Cпец Хакер #058Cпец Хакер #057Cпец Хакер #056Cпец Хакер #055Cпец Хакер #054Cпец Хакер #053Cпец Хакер #052Cпец Хакер #051Cпец Хакер #050Cпец Хакер #049Cпец Хакер #048Cпец Хакер #047Cпец Хакер #046Cпец Хакер #045Cпец Хакер #044Cпец Хакер #043Cпец Хакер #042Cпец Хакер #041Cпец Хакер #040Cпец Хакер #039Cпец Хакер #038Cпец Хакер #037Cпец Хакер #036Cпец Хакер #035Cпец Хакер #034Cпец Хакер #033Cпец Хакер #032Cпец Хакер #031Cпец Хакер #030Cпец Хакер #029Cпец Хакер #028Cпец Хакер #027Cпец Хакер #026Cпец Хакер #025Cпец Хакер #024Cпец Хакер #023Cпец Хакер #022Cпец Хакер #021Cпец Хакер #020Cпец Хакер #019Cпец Хакер #018Cпец Хакер #017Cпец Хакер #016Cпец Хакер #015Cпец Хакер #014Cпец Хакер #013Cпец Хакер #012Cпец Хакер #011Cпец Хакер #010Cпец Хакер #009Cпец Хакер #008Cпец Хакер #007Cпец Хакер #006Cпец Хакер #005Cпец Хакер #004Cпец Хакер #003Cпец Хакер #002Cпец Хакер #001