Мышь является устройством, предназначенным для ввода координат и подачи команд. Интерфейс мыши применим для любого физического воплощения устройства (мышь, трекбол). По интерфейсу с компьютером различают три основных вида мышей: Bus Mouse, Serial Mouse и PS/2-Mouse. Появились мыши с интерфейсом USB, но они пока не получили широкого распространения (как и клавиатура USB, к порту которой удобно подключить мышь USB).
С интерфейсами Serial Mouse и PS/2-Mouse иногда возникают недоразумения. Хотя оба они последовательные, но имеют существенные принципиальные различия в уровнях сигналов, способе синхронизации, частоте и формате посылок.
♦ Интерфейс PS/2 использует однополярный сигнал с уровнями ТТЛ, питание мыши — однополярное с напряжением +5 В относительно шины GND. Интерфейс RS-232C, применяемый в Serial Mouse, использует двуполярный сигнал (см. п. 2.1) с уровнями срабатывания +3 В и -3 В, и для него требуется двуполярное (относительно шины GND) питание мыши.
♦ Интерфейс PS/2 использует две раздельные сигнальные линии, одну для передачи данных, другую — для сигналов синхронизации. Serial Mouse использует асинхронный способ передачи данных всего по одной линии.
Даже не рассматривая частоты и форматы посылок, становится ясно, что прямой совместимости между этими интерфейсами быть не может. Тем не менее выпускаются и продаются переходники (пассивные!), позволяющие выбирать способ подключения мыши. Эти переходники предназначены только для универсальных мышей, у которых встроенный контроллер по напряжению питания способен распознать, к какому интерфейсу его подключили, и установить соответствующий тип своего выходного интерфейса. Универсальные мыши не особо распространены, поэтому часто приходится слышать о неудачных попытках применения таких переходников к обычной мыши Serial Mouse или PS/2-Mouse.
Дополнительную путаницу вносят мыши для компьютера Macintosh, которые имеют разъем, с виду напоминающий разъем PS/2. Однако при ближайшем рассмотрении и неудачной попытке включения его в PC становится ясно, что разъемы эти разные, да и интерфейс совершенно иной.
8.2.1. Последовательные мыши — MS Mouse и PC Mouse
Serial Mouse — мышь с последовательным интерфейсом, подключаемая через 9- или 25-контактный разъем СОМ-порта (табл. 8.2). Эта мышь имеет встроенный микроконтроллер, который обрабатывает сигналы от координатных датчиков и кнопок. Каждое событие — перемещение мыши или нажатие- отпускание кнопки кодируется двоичной посылкой по интерфейсу RS-232C. Для передачи информации применяется асинхронная передача, а двуполярное питание, требуемое по протоколу RS-232, обеспечивается от управляющих линий интерфейса. Недостатком Serial Mouse является то, что она занимает СОМ-порт и требует монопольного владения его штатной линии прерывания (
IRQ4
для COM1 и IRQ3
для COM2). Конечно, то, что для использования мыши порту COM1 требуется именно прерывание IRQ4
, является недостатком не самой мыши, а ее программного драйвера, но для пользователя, не увлекающегося написанием «мышиных» драйверов, важен только факт этого ограничения. Две основные разновидности — MS Mouse (Microsoft Mouse) и PC Mouse (Mouse Systems Mouse) — требуют разных драйверов, многие мыши имеют переключатель MS/PC. Эти два типа «мышей» при одинаковой скорости 1200 бит/с, одном стоп-бите и отсутствии контроля паритета используют различные форматы посылок.♦MS Mouse: 1 бит данных, трехбайтный пакет (в «классическом» варианте), положительным значениям соответствует перемещение по координате X вправо, а по координате Y вниз. Для трехкнопочных мышей добавляется четвертый байт, передаваемый только при изменении состояния средней кнопки. Для 3D-мыши четвертый байт имеет иное назначение.
♦PC Mouse: 8 бит данных, пятибайтный пакет, положительным значениям соответствует перемещение по координате X вправо, а по координате Y вверх.
Таблица 8.2. Разъемы Serial Mouse
Сигнал Контакт DB9 Контакт DB25 Цепь COM-порта Data 2 3 RxD GND 5 7 GND +V(питание) 7,(4) 4, (20) RTS, (DTR) -V (питание) 3 2 TxD
Из рассмотрения данных форматов становятся понятными беспорядочные перемещения указателя мыши на экране при несоответствии драйвера типу мыши. Несовместимость может проявляться и более неприятным образом: к примеру, ОС Windows 95 при загрузке (и установке) вообще не воспринимает мышь, работающую в режиме PC Mouse (ей «не нравится» идентификатор, сообщаемый мышью при инициализации). При загруженной ОС переключение режима приводит «только» к непредсказуемым прыжкам указателя мыши и ложным срабатываниям кнопок.
Системная поддержка последовательной мыши осуществляется только на уровне ОС (сервисы вызываются через
Int 33h
), драйвер мыши — загружаемый или встроенный в ОС. BIOS мышь не поддерживает, даже если и пользуется ею для навигации в BIOS Setup. Еще раз подчеркнем, что для работы мыши обязательно требуется линия аппаратного прерывания — IRQ4
или IRQ3
для последовательных мышей на портах COM1 или COM2 соответственно.8.2.2. Мышь PS/2
PS/2-Mouse — мышь, появившаяся с компьютерами PS/2. Ее интерфейс и разъем 6-pin mini-DIN аналогичен клавиатурному (см. рис. 8.1) и, как правило, реализуется тем же контроллером клавиатуры 8242 (см. п. 8.1.2). Адаптер и разъем PS/2-Mouse устанавливаются на многих современных системных платах (рис. 8.3). Контроллер мыши PS/2 может быть также на карте расширения (ISA) и занимать дополнительные адреса в пространстве ввода-вывода. С мышью PS/2 связь двусторонняя: процессор может посылать контроллеру 8242 специальные команды, но, в отличие от интерфейса клавиатуры, перед записью в порт 60h каждого «мышиного» байта (и команды, и ее параметра) в порт 64h должен записываться код D4h.
Рис. 8.3. Разъем PS/2-Mouse
Мышь может работать в одном из двух режимов. В потоковом режиме (stream mode) мышь посылает данные по любому изменению состояния; в режиме опроса (remote mode) мышь передает данные только по запросу процессора. Есть еще диагностический режим (wrap mode), в котором мышь возвращает эхом данные, посылаемые ей контроллером. По приему пакета от мыши контроллер устанавливает флаг
Mouse_OBF
и вырабатывает прерывание IRQ12
, если оно не запрещено командным байтом 8242.Устройства-указатели с интерфейсом PS/2 (мышь PS/2) имеют поддержку BIOS, обеспечивающую настройку параметров мыши (посылку вышеперечисленных команд). Собственно драйвер мыши (обработчик прерывания по вектору 74h от запроса
IRQ12
), обрабатывающий ее информационные посылки, входит лишь в состав ОС или загружается отдельно. Поддержка мыши вызывается через BIOS Int 15h
с кодами функций C200
-C209h
.8.2.3. Мышь Bus Mouse
Bus Mouse (шинная мышь) — вариант, применявшийся в первых мышах. Здесь мышь содержит только датчики и кнопки, а обработка их сигналов производится на специализированной плате адаптера (обычно ISA). Кабель 9- проводный, разъем специальный (рис. 8.4), хотя на первый взгляд и напоминающий разъем PS/2-Mouse. Главный недостаток такой системы заключается в том, что адаптер занимает слот системной шины, адреса ввода- вывода и линию запроса прерывания. Иногда встречались мультипортовые карты ISA (COM-, LPT- и GAME-порты), на которых установлен и адаптер Bus Mouse. Поскольку компания Microsoft одна из первых выпустила такую мышь, снабдив ее своим логотипом, с понятием Bus Mouse иногда отождествляют и MS-Mouse, хотя последние могут иметь любой из трех видов интерфейсов.
Рис. 8.4. Разъем Bus Mouse
8.3. Интерфейсы принтеров и плоттеров
Современные принтеры, печатающие графические изображения (в том числе и текст в графическом режиме) с высоким разрешением, требуют высокоскоростной передачи данных по внешнему интерфейсу. Большинство принтеров имеют традиционный параллельный интерфейс Centronics или более производительный IEEE 1284, что позволяет достигать скоростей передачи 0,15-2 Мбайт/с, в зависимости от производительности компьютера и выбранного режима передачи (см. ниже). Эти же интерфейсы используются и в плоттерах.
Для подключения принтера с параллельным интерфейсом используется LPT-порт в различных модификациях, от традиционного SPP-порта до теперь уже стандартного и эффективного IEEE 1284 (см. п. 1.3).
Поначалу все принтеры с параллельным интерфейсом обязательно поддерживали протокол Centronics, а более «продвинутые» вдобавок могли работать и в режиме ECP, поддерживая согласование режимов по IEEE 1284. Их инсталляционные программы старались установить драйверы «продвинутых» режимов, если того позволяла ОС и возможности LPT-порта. Теперь ситуация изменилась, и появились принтеры с параллельным интерфейсом, не поддерживающие Centronics. При инсталляции они требуют подключения по «двунаправленному интерфейсу» IEEE 1284 (обычно режим ECP), и через LPT-порт в режиме SPP они работать отказываются. С такими принтерами в среде MS DOS без специальных драйверов работать невозможно.
В некоторых принтерах используется последовательный интерфейс RS-232C, RS-422 или «токовая петля», но здесь теоретический предел скорости около 11 Кбайт/с (115 Кбит/с), а практически она едва достигает 1 Кбайт/с (9600 бит/с). Эти принтеры можно подключать к СОМ-порту непосредственно или через адаптер — преобразователь уровня сигналов.
В последнее время стали чаще применять шину USB, однако этот переход не так уж безоблачен: шина USB поддерживается не всеми ОС. Старые приложения (ведь не всегда есть необходимость и возможность перехода на новые), работающие с принтером через функции BIOS
Int 17h
или непосредственно с регистрами LPT-порта, например для приглашения к подаче бланков, не могут работать с принтером USB даже в среде ОС, поддерживающих USB в полном объеме. Что касается скорости передачи данных, то у USB 1.0 со скоростью 12 Мбит/с скорость передачи данных отнюдь не достигает 1,5 Мбайт/с (12:8) хотя бы из-за накладных расходов шины. В USB 2.0, которая сейчас выходит на рынок, пиковая скорость может достигать 50 Кбайт/с (скорость в шине — 480 Мбит/с), что для принтера пока что более чем достаточно. Однако для этого и принтер, и компьютер должны поддерживать USB 2.0, и между ними не должно быть старых (USB 1.0) хабов.Принтеры могут иметь интерфейс SCSI (редкий вариант), а также подключаться не к компьютеру, а к локальной сети по интерфейсу Ethernet (10 или 100 Мбит/с). Такое подключение удобно для принтеров коллективного пользования, и при грамотно построенной сети оно не доставляет забот пользователям. Шина Fire Wire для принтеров применяется пока очень сдержанно.
8.3.1. Параллельные интерфейсы — Centronics, IEEE 1284, ИРПР
Параллельный интерфейс Centronics ориентирован на передачу потока байт данных к принтеру и прием сигналов состояния принтера. Этот интерфейс поддерживается всеми LPT-портами компьютеров. Его отечественным аналогом является интерфейс ИРПР-М. Понятие «Centronics» относится как к набору сигналов и протоколу взаимодействия, так и к 36-контактному разъему на принтерах. Назначение сигналов интерфейса приведено в табл. 8.3, а временные диаграммы обмена с принтером показаны на рис. 8.5.
Таблица 8.3. Сигналы интерфейса Centronics
Сигнал I/O¹ Контакт Назначение Strobe# I 1 Строб данных. Данные фиксируются по низкому уровню сигнала Data [0:7] I 2-9 Линии данных. Data 0 (контакт 2) — младший бит Ack# O 10 Acknowledge — импульс подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования запроса прерывания Busy O 11 Занято. Прием данных возможен только при низком уровне сигнала PaperEnd O 12 Высокий уровень сигнализирует о конце бумаги Select O 13 Сигнализирует о включении принтера (обычно в принтере соединяется резистором с цепью + 5 В) Auto LF# I 14 Автоматический перевод строки. При низком уровне принтер, получив символ CR (Carriage Return — возврат каретки), автоматически выполняет и функцию LF (Line Feed — перевод строки) Error# O 32 Ошибка: конец бумаги, состояние OFF-Line или внутренняя ошибка принтера Init# I 31 Инициализация: сброс в режим параметров умолчания, возврат к началу строки и страницы Select In# I 36 Выбор принтера (низким уровнем). При высоком уровне принтер не воспринимает остальные сигналы интерфейса GND - 19-30, 33 Общий провод интерфейса
¹ I/O задает направление (вход или выход) применительно к принтеру.
Рис. 8.5. Передача данных по протоколу Centronics
Передача данных начинается с проверки готовности принтера — состояния линии
Busy
. Строб данных может быть коротким — доли микросекунды, и порт заканчивает его формирование, не обращая внимания на сигнал Busy
. Во время строба данные должны быть действительными. Подтверждением приема байта (символа) является сигнал Ack#
, который вырабатывается после приема строба через неопределенное время (за это время принтер может выполнять какую-либо длительную операцию, например прогон бумаги). Импульс Ack#
является запросом принтера на прием следующего байта, его задействуют для формирования сигнала прерывания от порта принтера. Если прерывания не используются, то сигнал Ack#
игнорируется и весь обмен управляется парой сигналов Strobe#
и Busy
. Свое состояние принтер может сообщить порту по линиям Select
, Error#
, PaperEnd
— по ним можно определить, включен ли принтер, исправен ли он и есть ли бумага. Формированием импульса на линии Init#
принтер можно проинициализировать (при этом он очистит и весь свой буфер данных). Режимом автоматического перевода строки, как правило, не пользуются, и сигнал AutoLF#
имеет высокий уровень. Сигнал SelectIn#
позволяет логически отключать принтер от интерфейса.Через параллельный порт (LPT) протокол Centronics может быть реализован чисто программно, используя стандартный режим порта (SPP), достигая скорости передачи до 150 Кбайт/с при полной загрузке процессора. Благодаря «продвинутым» режимам порта протокол может быть реализован и аппаратно (Fast Centronics), при этом скорость до 2 Мбайт/с достигается при меньшей загрузке процессора.
Большинство современных принтеров с параллельным интерфейсом поддерживают и стандарт IEEE 1284, в котором оптимальным режимом передачи является ECP (см. п. 1.3.4).
Для подключения принтера требуется кабель Centronics, пригодный для любых режимов параллельного интерфейса. Простейший вариант кабеля — 18-проводный с неперевитыми проводами — может использоваться для работы в режиме SPP. При длине более 2 м желательно, чтобы хотя бы линии
Strobe#
и Busy
были перевиты с отдельными общими проводами. Для скоростных режимов (Fast Centronics, ECP) такой кабель может оказаться непригодным — возможны нерегулярные ошибки передачи, возникающие лишь при определенных последовательностях передаваемых кодов. Встречаются кабели Centronics, у которых отсутствует связь контакта 17 разъема PC с контактом 36 разъема принтера. При попытке подключения таким кабелем принтера, работающего в стандарте 1284, появится сообщение о необходимости применения «двунаправленного кабеля». Принтер не может сообщить системе о поддержке расширенных режимов, на что рассчитывает драйвер принтера. Другое проявление отсутствующей связи — «зависание» принтера по окончании печати задания из Windows. Эту связь можно организовать подпайкой дополнительного провода или же просто заменить кабель.Неплохие электрические свойства имеют ленточные кабели, у которых сигнальные цепи (управляющих сигналов) чередуются с общими проводами. Но их применение в качестве внешнего интерфейса непрактично (нет второго защитного слоя изоляции, высокая уязвимость) и неэстетично (круглые кабели смотрятся лучше).
Идеальным вариантом являются кабели, в которых все сигнальные линии перевиты с общими проводами и заключены в общий экран — то, что требует IEEE 1248. Такие кабели гарантированно работают на скоростях до 2 Мбайт/с при длине до 10 м.
В табл. 8.4 приводится распайка кабеля подключения принтера с разъемом X1 типа А (DB25-P) со стороны PC и X2 типа В (Centronics-36) или типа С (миниатюрный) со стороны принтера. Использование общих проводов (
GND
) зависит от качества кабеля (см. выше). В простейшем случае (18-проводный кабель) все сигналы GND
объединяются в один провод. Качественные кабели требуют отдельного обратного провода для каждой сигнальной линии, однако в разъемах типа А и В для этого недостаточно контактов (в табл. 8.4 в скобках указаны номера контактов разъема PC типа А, которым соответствуют обратные провода). В разъеме типа С обратный провод (GND
) имеется для каждой сигнальной цепи; сигнальным контактам 1-17 этого разъема соответствуют контакты GND 19–35.
Таблица 8.4. Кабель подключения принтера
X1, разъем PC типа А Сигнал X2, разъем PRN типа В X2, разъем PRN типа С 1 Strobe# 1 15 2 Data0 2 6 3 Data1 3 7 4 Data2 4 8 5 Data3 5 9 6 Data4 6 10 7 Data5 7 11 8 Data6 8 12 9 Data7 9 13 10 Ack# 10 3 11 Busy 11 1 12 PaperEnd 12 5 13 Select 13 2 14 Auto LF# 14 17 15 Error# 32 4 16 Init# 31 14 17 Select In# 36 16 18 GND(1) 19 33 19 GND(2 3) 20 21 24 25 20 GND(4 5) 22 23 26 27 21 GND(6 7) 24 25 28 29 22 GND(8 9) 26 27 30 31 23 GND(11 15) 29 19 22 24 GND(10 12 13) 28 20 21 23 25 GND(14 16 17) 30 32 34 35
Ряд отечественных (и стран бывшего СЭВ) принтеров имеет интерфейс ИРПР (IFSP в документации на принтеры ROBOTRON). Он является близким родственником интерфейса Centronics, а отличия перечислены ниже.
♦ Линии данных инвертированы.
♦ Протокол квитирования несколько иной.
♦ Ко всем входным линиям (на принтере) подключены пары согласующих резисторов: 220 Ом к питанию +5 В и 330 Ом к общему проводу. Это позволяет использовать длинные кабели, но перегружает большинство интерфейсных адаптеров PC.
♦ Сигналы ошибки и конца бумаги отсутствуют.
Интерфейс ИРПР может быть программно реализован через обычный LPT-порт, но для устранения перегрузки выходных линий согласующие резисторы из принтера желательно удалить. Порт, перегруженный по выходу, может преподносить всякого рода сюрпризы (естественно, неприятные и трудно диагностируемые).
8.3.2. Последовательные интерфейсы
Из последовательных интерфейсов в принтерах чаще всего используется RS-232C для подключения к СОМ-порту. Встречаются принтеры с последовательными интерфейсами «токовая петля» или RS-422, которые подключаются к СОМ-порту через специальные переходники. Принтеры работают всегда по асинхронному протоколу передачи и, как правило, позволяют настраивать конфигурацию последовательного интерфейса. Задается частота передачи, формат посылки (число информационных, старт- и стоп-битов, контроль паритета) и протокол управления потоком: программный
XON
/XOFF
или аппаратный RTS
/CTS
. Подключение принтеров и плоттеров к СОМ-порту требует применения кабеля, соответствующего выбранному протоколу, схемы кабелей приведены на рис. 8.6 и 8.7. Аппаратный протокол предпочтительнее — стандартный драйвер СОМ-порта пользуется именно им. Естественно, параметры интерфейса принтера должны соответствовать параметрам, заданным для задействованного СОМ-порта. Порт конфигурируется, например, DOS-командой MODE
. Заметим, что при печати средствами DOS (командами COPY
или PRINT
) прерывания от порта не используются.Рис. 8.6. Кабель подключения принтера с протоколом RTS-CTS
Рис. 8.7. Кабель подключения принтера по протоколу XON/XOFF
Если принтер имеет интерфейс «токовая петля», то для него потребуется преобразователь сигналов, простейшая схема которого приведена на рис. 8.8. Здесь принтер подключается по токовой петле к СОМ-порту с аппаратным управлением потоком. Для получения двуполярного сигнала, требуемого для входных сигналов СОМ-порта, применяется питание от интерфейса.
Рис. 8.8. Подключение принтера с интерфейсом «токовая петля 20 мА» к СОМ-порту
8.3.3. Системная поддержка принтера
Вывод на принтер через порт LPT в стандартном режиме (SPP) по интерфейсу Centronics имеет поддержку на уровне BIOS. Поддержка всех других режимов работы порта (Fast Centronics, ECP) осуществляется только дополнительными драйверами или средствами ОС. Сервисы BIOS
Int 17h
обеспечивают инициализацию, вывод байта данных и опрос состояния принтера. Перехват прерывания Int 17h
является удобным способом внедрения собственных драйверов принтера. Потребность в них может возникать при подключении к порту принтера с интерфейсом ИРПР или необходимости перекодировки символов.Печать содержимого экрана (Print Screen) поддерживается прерыванием BIOS
Int 05h
. Обработчик этого прерывания посимвольно выводит содержимое видеопамяти (в текстовом режиме) на порт LPT1. Обработчик пользуется ячейкой 0050:0000 для отражения своего текущего состояния: 00 — неактивен, 01 — выполняется печать, FF — во время последнего вызова произошла ошибка ввода-вывода. Прерывание Int 05h
вызывается обработчиком аппаратного прерывания от клавиатуры (Int 09h
), когда обнаруживается нажатие клавиши PrintScreen
(PrtSc
).8.4. Интерфейсы графических адаптеров