ZX-Ревю 1995 №1 1994 г.

Читатель-читателю - Kempston mouse.


KEMPSTON-MOUSE

(С) М.Свечков (схема),

К.Мехедов (программа),

респ. Крым, 1995.

За рубежом наибольшее распространение получили мыши двух типов: АМХ и KEMPSTON. Нам удалось эмулировать конструкцию KEMPSTON-MOUSE, опираясь на работу драйвера мыши из программы AR-TIST-2.

Предлагаемое устройство собрано на базе "МАНИПУЛЯТОРа ММ 8031" для компьютера "КОРВЕТ". В крайнем случае, можно взять мышь пассивного типа, имеющую только оп-топары и триггеры Шмитта (Dl), а остальную схему собрать отдельно.

Ассемблировать программу лучше всего под адрес 47793. При этом на 213 байтов (длина программы) сокращается адресное пространство, отводимое под редактируемый текст, поэтому не забудьте внести новый адрес вершины текстового файла в адреса 65193 (#FEA9) и 65252 (#FEE4). До изменения там

должно быть число 48000 (#ВВ80). * * *

Схема интерфейса мыши показана на следующей странице. Микросхема 01-04, D7, оптопары и дискретные элементы входят в состав "ММ 8031". D5, D6, D8 - это новые элементы, которые подключаются навесным монтажом к имеющейся плате и располагаются внутри корпуса мыши. Нумерация выводов разъема - для вилки РП15-9Ш. Линии PD0-PD4 подключаются к порту с адресом 223 DEC (#DF). В крайнем случае можно использовать порт KEMPSTON-джойстикa (#1F), но тогда при работе с программами, которые управляются KEMPSTON -джойстиком, мышь надо будет отключать. Чтобы отключение происходило безболезненно, сигналы А8, А10 лучше снимать не прямо с шины адреса, а через буфер. Микросхема К555КП14 (D8) используется в случае, если порт инвертирует принимаемый сигнал (КЕМР-STON-порт в 1-м "Ленинграде"). В противном случае она заменяется на К555КП11 (или К555КП16), узел инвертора на 02.4 исключается и сигнал на PD4 идет прямо с вывода 4 микросхемы Об.

Программно мышь опрашивается по трем портам:

1. 64229 (#FADF) - КНОПКИ.

2. 64479 (#FBDF) - коорд. X.

3. 65503 (#FFDF) - коорд. Y.

Для схемы младший байт (#DF) -это уже упомянутый адрес порта, а старший определяет снимаемую информацию с мыши. Мультиплексор 08 управляетея с шины адреса линией А8 - кнопки/координаты: при А8»0 (#FADF) опрашиваются кнопки (SB1 - ВВОД, SB2 - ОТМЕНА). При А8=1 подключаются порты координат, которые, в свою очередь, выбирается линией А10 (мультиплексоры 06, D7):

А10«0 - порт X (счетчик D3, триггер 05.1);

А10=1 - порт Y 4D4, 05.2 соответственно ).

Как иллюстрация предлагается драйвер для обслуживания КЕМР-STON-MOUSE. Он представляет собой своеобразный гибрид: работая с мышью, выдает информацию аналогично джойстику - какие кнопки нажаты и в какую сторону производится движение. Вычислением же текущих координат курсора должна заниматься вызывающая программа. При вызове этого драйвера компьютер зацикливается до тех пор, пока не будет произведено движение мыши либо изменено состояние ее кнопок. Выход по изменению состояния кнопок (а не просто по факту их нажатия) позволяет использовать драйвер в программах типа графического редактора: Вы постоянно удерживаете какую-нибудь кнопку мыши (например, функцию "рисовать") и выход из драйвера происходит только когда Вы изменяете положение мыши. Если такой вариант Вам не нужен, то перед использованием драйвера нужно просто проверить состояние кнопок и продолжать работу только если они не нажаты. В своей работе драйвер использует три расположенных подряд ячейки памяти, которые одновременно дают информацию по выходе из него:

ЧИТАТЕЛЬ-ЧИТАТЕЛЮ

Принципиальная схема интерфейса KEMPSTON-MOUSE.

1-я (состояние кнопок):

0 - не нажаты;

1 - нажата кнопка ВВОД;

2 - нажата кнопка ОТМЕНА;

3 - нажаты обе кнопки.

2-я (координата X):

0 - движение по X влево;

1 - движение по X вправо.

3-я (координата У):

0 - движение по Y вниз;

1 - движение по Y вверх.

Ячейки 2 и 3 используются как счетчики срабатываний датчиков мыши по соответствующим координатам. Движение считается произведенным, если датчик сработал определенное количество раз. Чувствительность драйвера можно регулировать в пределах 1-126 срабатываний датчика.

Если по выходе из драйвера в ячейках 2 или 3 число не 0 и не 1, то значит в данном цикле работы движения по координатам не было . Перед самым первым вызовом драйвера в ячейки 2 и 3 следует занести число 128.

Ниже приведен текст драйвера.

ЧИТАТЕЛЬ-ЧИТАТЕЛЮ

ORG

30000

LD

HL,31000

Адрес первой используемой ячейки памяти.

LD

ВС,64223

В ВС адрес порта состояния кнопок.

IN

А,(С)

CPL

Инвертируем полученный байт, потому что нажатой кнопке соответствует 0, ; а отпущенной - 1.

AND

3

Выделяем 2 младших бита.

LD

(HL),A

Запоминаем в 1-й яч. начальное состояние кнопок.

LD

ВС,64479

В ВС адрес порта координаты X.

IN

А,(С)

LD

D,A

Запоминаем в D текущее состояние порта X.

LD

ВС,65503

В ВС адрес порта координаты Y.

IN

А,(С)

LD

E,A

Запоминаем в Е текущее состояние порта Y.

CALL

NEW

Вызываем подпрограмму начальной установки

CALL

NEW

ячеек 2 и 3.

DEC

HL

Возвращаем HL к ячейке 1.

REP DEC

HL

LD

ВС,64223

Повторяем опрос кнопок.

IN

А, (С)

CPL

AND

3

CP

(HL)

Сравниваем новое состояние с запомненным в яч.1.

JR

Z,CONT

Продолжение работы, если состояние не изменилось

LD

(HL),A

Иначе - запоминаем новое состояние

RET

и возврат.

CONT LD

ВС,64479

Опрос порта X.

IN

А,(С)

LD

B,D

LD

D,A

CALL

MOVE

Вызов подпрограммы анализа портов координат; в В - предыдущее состояние порта, в А - текущее.

LD

ВС,65503

Опрос порта Y.

IN

А,(С)

ЧИТАТЕЛЬ-ЧИТАТЕЛЮ

NEW

LD

B,E

LD

E,A

CALL

MOVE

LD

A,(HL)

AND

#FE

RET

Z

DEC

HL

LD

A, #FE

AND

(HL)

RET

Z

OR

REP

INC

HL

LD

A, #FE

AND

(HL)

RET

NZ

LD

A,128

LD

(HL),A

RET

INC

HL

CP

В

RET

Z

SUB

В

JR

C,SMAL

AND

16

OR

NZ,MIN1

PLUS INC (HL) LD A,132 CP (HL)

RET

NZ

LD

A, 1

LD

(HL),A

RET

SMAL

CPL

INC

A

AND

16

OR

NZ,PLUS

MINUS

DEC

(HL)

LD

A,124

CP

(HL)

RET

NZ

XOR

A

LD

(HL),A

Проверка ячейки 3. Отбрасываем 0-й бит. Возврат, если в ячейке о или 1. В HL - адрес ячейки 2.

Возврат, если в ней О или 1.

Повторение цикла опроса состояния мыши.

Подпрограмма начальной установки ячеек 2 и 3; если в ячейке о или 1, значит при предыдущем вызове драйвера происходило движение по данной координате и теперь в соответствующую ячейку нужно занести исходное значение счетчика перемещений - 128.

Подпрограмма сравнения текущего (А) и предыдущего (В) состояния портов координат.

Возврат, если состояние не изменилось.

Определяем, увеличилось или уменьшилось число, читаемое из порта.

Переход на SMALL, если число уменьшилось.

Проверяем значение 4-го бита разности.

Если включен, значит произошло переключение с

0 на 31 (т.е. число увеличилось, но движение идет в сторону уменьшения - переход на MINUS.

Увеличиваем значение счетчика.

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

Возврат, если не достигло.

Иначе - в соответствующую яч. записываем число

1 (произошло движение в сторону увеличения) и возврат.

Если текущее значение порта меньше предыдущего, то получим значение разности по модулю и действуем аналогично варианту увеличения значения порта.

Число 124 - аналогично числу 132 у метки PLUS определяет чувствительность при уменьшении координаты.

Длина драйвера ■ 118 байтов.

Те, у кого появились вопросы по предложенному интерфейсу, могут обратиться к автору по следующему адресу:

334370, Республика Крым, пгт.Раздольное, пр-т 30 лет Победы, д.7, кв.5. Свечкову Михаилу.

* * *




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Полезные советы - Электронная спичка.
Обзор новинок - 12 тайных книг (demo).
Фенечки - говорят дети.
Навины - новости, старости, слухи, приколы: "рано или позно вернемся всеравно на любимый Спекки!"
Календарь - Календарик юного любителя слушать что попало.

В этот день...   26 апреля