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
|