Made by Vasiliy Pupkin, или паяем девайс для компа

Спецвыпуск Xakep, номер #012, стр. 012-125-1


Иван Иваныч aka Mr. False (mr_false@xakep.ru)

Дарова, помидорчик (перец уже приелся как-то ;))! Эх, девайсы, девайсы... Целый спец забит оными творениями мозгов человеческих. А ты не пробовал сам спаять свой собственный? И не надо в меня тяпками кидаться, создание девайсов - занятие не такое уж и геморное, особенно для таких заслуженных работников паяльника и канифоли, как ты. Не веришь? Доказать? Ну, бери Хспез в руки, комп - под мышку, паяльник - в зубы, и - вперед! Задавим рынок своими поделками! =)))

Лет зе девелопинг бегин

Сперва... А сперва - не совсем интересная, хотя и обязательная вещь. Теория. Во-первых - разберемся, что же будем паять. А паять мы будем простенький девайс для ISA-слота, который будет мигать светодиодами под управлением написанной нами же проги. Ну, что приуныл? Мне просто места не хватит объяснить схемы посложнее, да и сначала нужно сварганить нечто совсем простенькое. И еще надо изучить кучу инфы по самому слоту.

ISA - аббревиатура от Industry Standard Architecture (промышленный стандарт архитектуры). Шина впервые применена в самых первых моделях PC и, по совместительству, является первой шиной расширения (т.е. такой шиной, в которую можно пихать всякие левые девайсы типа аудиоплат и прочей фигни). В XT-шках применена восьмибитная шина (с разрядностью данных 8 бит - отсюда она получила название ISA8) и разрядностью адреса 20 бит. В более поздних моделях, начиная с AT, применена модель ISA16, которая имела разрядность данных 16 бит и адреса - 24 бит. За ней следуют различные зверушки типа EISA (Extended ISA), ISA PnP (прегеморройнейшая вещь, надо заметить, хотя до геморроя PCI ей далеко)... Про PCI и VLB молчу сознательно - это штуковины из другой оперы. Инфа для общего развития: шина работает на частоте 8 Мгц, поэтому пиковая пропускная способность шины достигает для ISA8 - 4 мб/с, а для ISA16 - 8 мб/с. Также нам с тобой не обойтись без описания разъемов шин. Здесь я оные и привожу:

Вот что значат эти контакты:

+12в, +5в, -12в, -5в - питание

GND - земля

Data[7:0] - шина данных

Addr[19:0] - шина адреса

AEN - разрешение адресации портов

IOWR# - запись в порт

IORD# - чтение порта

SmemWR# - запись в память

SmemRD# - чтение памяти

IRQ9, IRQ[3:7] - запросы аппаратных прерываний (в смысл можно не врубаться =))

DRQ[1:3] - запросы каналов DMA (аналогично)

DACK[1:3]# - подтверждение запросов DMA

TC - признак завершения счетчика циклов DMA

IOCHRDY - готовность устройства

BALE - разрешение защелки адреса

Refr# - цикл регенерации памяти

IOCHK - контроль канала

Reset - сигнал аппаратного сброса

Bclock - синхронизация шины ~8Mhz

OSC - несинхронизированная частота ~14,431818 Mhz

Недвусмысленно с исподвыдпорпердом

Вот так вот, незамысловато. Как это все фурычит? Хехст, да очень просто! Есть такая инструкция процессора: "out dx, al". Именно через нее осуществляется работа с внешними устройствами. После выполнения инструкции на шине адреса появляется число, которое выставлено в регистре dx, а на шине данных - что лежит в al. Просто? Просто! Эту фиговину, как предвидится, мы вставим в свою программу (драйвер девайса, екерны бабай! =)). Что у нас виднеется на других выходах, нам не важно, не так ли ;))?

Содержание  Вперед на стр. 012-125-2