(С) SERGIUS PUZZLER / PROXIMA
special for ZX-Club magazine
- KEMPSTON MOUSE -
Или попросту мышь. Это очень удобное в
использовании устройство управления
курсором, в отличии от джойстиков и просто
клавиш. Может в будущем чей-то пытливый
ум и придумает более совершенный
манипулятор, но сейчас давайте
довольствоваться тем что есть.
Данное изделие позволяет простым
движением руки, держащей мышь, перемещать
курсор по экрану так скоро, как этого
требует ситуация, одновременно щелкая
двумя или тремя кнопками (у кого сколько
есть).
Немного так называемой теории. Имеются
три порта. Это:
64223 (#FADF) - состояние кнопок;
64479 (#FBDF) - координата X;
65503 (#FFDF) - координата У.
Кнопки имеют следующую раскладку и
назначение: левая - FIRE, главная кнопка -
за ее состояние отвечает 0-й бит; правая
кнопка - CANCEL, SELECT или MARK, 1-й бит
порта кнопок; средняя - для прочих
дополнительных функций, соответственно 3-й
бит.
Значения координат лежат в диапазоне от
0 до 255. При этом перемещение мыши вправо
увеличивает координату X, а вперед (от
себя или вверх, как вам привычней) -
координату У. Естественно обратные
движения приводят к уменьшению значений
координат.
Есть вариант иного подключения левой и
правой кнопок - наоборот. Левая - 1-й бит,
а правая - 0-й. Лично у меня за левую
кнопку отвечает 0-й бит, т.к. по логике он
первый, а значит более главный (хотя и
самый младший). Но большинство программ, с
которыми я имел дело, поддерживают
вариант, где за главную левую кнопку
отвечает 1-й бит (по порядку второй,
следовательно он просто не может быть
главным).
Вот, например, Вячеслав Медноногов в
своих последних программах UFO-2 и ЧЕРНЫЙ
ВОРОН поддерживает вариант с главным 0-м
битом, что я и считаю более верным
решением. Более же совремменые драйверы
kemston mouse имеют автоконфигурацию.
Первая нажатая кнопка после начала работы
данной программы становится главной. Если
Вам требуется этот драйвер, то Вы его
найдете в конце этой статьи.
Теперь перейдем к схеме самого контрол-
лера. Привожу список необходимых деталей:
DD1-DD2 - К 561 ИЕ 11 (4 шт.);
DDЗ - К 555 АП 5 (2 шт.);
DDЧ,DD7 - К 155 ЛП 8 (1 шт.);
DDS - К 555 ИД 7 (1 шт.);
DDб - К 561 ТЛ 1 (1 шт.);
R1-R3 - 1 кОм, 0.125 Вт (3 шт.);
R4* - 150 Ом,0.125 Вт (1 шт.);
R5-R8 - 6 кОм, 0.125 Вт (4 шт.).
Здесь мы имеем два основных узла.
Первый - триггеры, находится в корпусе
мыши, а второй и более главный - сам
непосредственно контроллер, состоящий из
двух счетчиков координат и дешифратора
вышеуказанных портов.
Для тех у кого есть желание и хоть
немного опыта без труда по приведенной
схеме соберут этот девайс. Иначе придется
кого-то просить об этом.
Немного коментариев по схеме и сборке.
Микросхемы серий 155, 555 и 1355
взаимозаменяемы, отличаются они в основном
только быстродействием и еще может быть
потребляемой мощностью. Более
предпочтительна серия 1355. Все резисторы
0.125 Вт, но можно поставить и более
мощные, хотя они по размерам несколько
крупнее.
Модуль А изготавливается в двух
экземплярах. Сигналы "Ха", "ХЬ" и "/XCS"
на втором экземпляре называются "Уа", "УЬ"
и "/YCS" и все они подключаются к
соответствующим на модуле В. Оставшиеся
сигналы подключаются к системной шине.
Питание микросхем подводится так: к ножке
с наибольшим номером - плюс, а с номером
вдвое меньшим - минус ("земля"). Все это
размещается на одной плате.
Теперь сделайте следующее. Из BASIC'а
опросите в цикле, например, порт 64223.
Если Вы получаете устойчивое значение 255,
то все нормально, можете пропустить
несколько абзацев. Иначе, вам потребуется
сделать блокировку внутренних портов
вашего компьютера. Для владельцев
SCORPION'ов она просто обязательна.
Для этого нужно собрать модуль D, все
на той же плате. И соединить одноименные
сигналы модулей D и В. А именно "/BCS",
"/XCS" и "/YCS". Зетем сигнал "/IORQGE" с
одноименным на плате компьютера (на
SCORP'е он есть). Если такового не
нашлось, то его необходимо организовать.
Берем резистор сопротивлением 560 Ом,
подсоединяем его одной стороной к сигналу
"/IORQGE" от модуля D, а другой к "/IORQ"
от модуля В или же с платы компьютера. Вот
и все.
Конечно не совсем все. Надо еще
адаптировать саму мышь. Открываем ее.
Смотрим, что же нам из нее можно выкинуть,
а что и оставить. Шнур понадобится другой,
девятипроводный, а этот отложите, может
апосля в хозяйстве сгодится. Вынимаем
платочку из мышки. Демонтируем с нее
колодку шнура, микросхему, резисторы,
конденсатор и, если есть, диод (может и не
один). Но пока, оставьте те из резисторов,
которые подходят к светодиодам, может и с
ними будет работать, проверим позже.
Теперь по обозначению на платочке
(ударение на первый слог) плюса
электролитического конденсатора, который
мы удалили, определяем плюс светодиодов.
Или, если умеете, определите это с помощью
тестора. Это необходимо для правильной
подводки питания к светодиодам. Впаиваем
микросхему DDб согласно схеме модуля С.
Анализируем разводку дорожек на платочке.
Полезные оставляем, ненужные перерезаем
или вообще удаляем, чтоб не смущали.
Добавляем недостающие соединения с помощью
тонких проводков, навешиваем резисторы
R5-8 прямо на м/схему. Заводим их на
"землю". Подпаиваем средние контакты
мк/переключателей к сигналам В1-3 модуля
В. В1 - левый, В2 - правый, В3 - средний.
Нормальноразомкнутые контакты заводим на
"землю".
Еще раз как следует проверяем
правильность соединений. И не только на
платочке мышки. Потому что схема будет
работать сразу, если монтаж верен.
Откажется только в двух случаях. Первый -
неправильная сборка. Второй - неверно
подобранный резистор питания светодиодов.
Но мы его и не подбирали. По этому, снача-
ла проверьте, может у вас уже все работа-
ет. Для этого запустите, например,
ZX-FORMAT, один из последних. Если все
о'кей, то я только рад за Вас.
Иначе надо подобрать резистор R4 модуля
С. Ставим вместо него переменник в 5 кОм.
И, двигая мышь, уменьшаем его сопротивле-
ние, ловя момент уверенного перемещения
курсора. Затем замеряем текущее
сопротивление переменника, предварительно
выпаяв его. И ставим R4 соответствующего
значения.
Может оказаться, что курсор движется не
в том направлении, а в обратном. Просто
берете и меняете местами сигналы "Ха" и
"ХЬ" для горизонтального перемещения или
"Уа" и "УЬ" для вертикального. Если курсор
хаотично скачет по экрану, то, возможно,
помогут конденсаторы емкостью по 10 нФ,
припаянные параллельно с питанием микро-
схем ИЕ11 модуля A.
Наверное, это и все. Возможно, я что-
нибудь и забыл написать, сейчас уже не
помню всего того, с чем столкнулся в
процессе изготовления этого устройства.
Так что если с чем есть трудности, не
поленитесь, напишите мне, и я в свою
очередь не поленюсь ответить вам.
601909, Владимирская одл., г. Ковров,
ул. Куйбышева, д. 4/1, кв. 43, Горелкин
Сергей.
До встречи в межсекторном пространстве.
SP 15.09.98
;MOUSE DRIVER WITH FIRE*BUTTON AUTOCONFIG
;(С) Andrey Rachkin'95
ORG 30000
JR MDRV
DIRECTZ DEFB 0 ;FIRE
DEFB 0 ;UP
DEFB 0 ;DOWN
DEFB 0 ;RIGHT
DEFB 0 ;LEFT
DEFB 0 ;CANCEL
MCOORD DEFW 0 ;LAST CURSOR COORDS
;IN PIXELZ
MPORTS DEFW 0 ;LAST READED MAUSY COORDS
NONDEF AND 3 ;HERE COMEZ BUTTONZ
;CONTROL IF FIRE BUTON
;NOT DEFINED
JR Z,MDRVЧ ;IF NONE BUTTON
;PUSHED
СР 1
JR Z,NONDEF_
XOR A
LD (MDRVЗ+2),A
LD A,5
LD (MDRV2+2),A
NONDEF_ LD HL,0
LD (MDRV1),HL
POP IX
; *****MAIN PROC OF MOUSEDRIVER *****
MDRV PUSH IX
LD HL,DIRECTZ
PUSH HL
POP IX
XOR A
LD (HL),A ;CLEARING
INC HL ;OF
LD (HL),A ;DIRECTZ
INC HL ;BUFER
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
INC HL
LD ВС,#FADF ;BUTTONZ CONTROL
IN A,(С) ;READING FROM PORT
;OF BUTTONS
CPL
MDRV1 JR NONDEF ;JR UNTIL FIRE
;BUTTON NOT DEFINED
RRA
MDRV2 RL (IX+0) ;FIRE
RRA
MDRVЗ RL (IX+5) ;CANCEL
; *****COORDS CONTROL *****
MDRVЧ LD HL,(MCOORD) ;FORM LAST
;CURSOR COORDS
LD DE,(MPORTS) ;FROM LAST
;READED MOUSE
;COORDS
LD ВС,#FBDF
IN A,(С) ;READING FROM
;PORT X-COORD (0-#FF)
LD (MPORTS),A
SUB E
JR Z,MDRV9
JP Р,MDRVб
LD (IX+4),1 ;MOVE LEFT
ADD A,L
JR С,MDRVS
XOR A ;MIN X-COORD
MDRVS LD L,A
JR MDRV9
MDRVб ADD A,L
LD (IX+3),1 ;MOVE RIGHT
JR С,MDRV7
СР #FE ;MAX X-COORD
JR С,MDRV8
MDRV7 LD A,#FE ;MAX X-COORD
MDRV8 LD L,A
MDRV9 LD В,#FF
IN A,(С) ;READING FROM
;PORT У-COORD (0-#FF)
LD (MPORTS+1),A
SUB D
JR Z,MDRV14
NEG
JP Р,MDRV11
LD (IX+1),1 ;MOVE UP
ADD A,Н
JR С,MDRV10
XOR A ;MIN У-COORD
MDRV10 LD Н,A
JR MDRV14
MDRV11 ADD A,Н
LD (IX+2),1 ;MOVE DOWN
JR С,MDRV12
СР #BF ;MAX У-COORD
JR С,MDRV13
MDRV12 LD A,#BF ;MAX У-COORD
MDRV13 LD Н,A
MDRV14 LD (MCOORD),HL ;NEW CURSOR
;POSITION
;IN PIXELZ
POP IX
RET
; *****DRIVER END *****
Other articles: