ZX Hard #00
31 августа 1998
  Железо  

Тонкости опроса кемпстон-крыс - о глюках Kepston Mouse.

<b>Тонкости опроса кемпстон-крыс</b> - о глюках Kepston Mouse.
┌──────────────────────────────────────┐
│   Тонкости опроса кемпстон-крыс ;)   │
└──────────────────────────────────────┘

(c)VTS'98

                 mouse включен - хорошо,
                 а не включен - плохо.

                 (c)В.Маяковский,
                 Demon, VTS.


                 WELCOME TO THE HELL,
                 DEAR USER without
                 KeMpStOnE-mouse.

                 (c)Demon(ZX-Element#1),
                    VTS.


Хочу  вам  поведать  об  одном печальном
факте - у меня нет kempstone-joystick'а.

-Ну и что, а у меня нет kempstone-mouse,
 -отвечу я (VTS)...

Примерно так началась поучительная стат-
ья  в ZX-Elemement #1 о том, как опраши-
вать   кемпстон-джойстик.  Видимо,  мыши
встречаются  намного  чаще  джойстиков и
должны быть у каждого, т.к. именно из-за
отсутствия  мыши  (на  любой  тачке, где
k.joys. дешифрован по #FD) журнал немно-
го (мягко говоря) глючил.

Только,  plzzz, не принимайте это за на-
езд!  Просто мне очень хотелось почитать
журнал  (каково,  вам, например ехать за
20км  в город до друга, чтобы читать его
половину  'мельком', а вторую с нажатыми
на  джойстике 'влево' и 'вправо' [позже,
правда, при помощи паяльника ;-) ]).

Я также уверен, что этот глюк уже пойман
и пишу этот бред для устранения дальней-
ших недоразумений.
Справедливости  ради,  надо сказать, что
этим грешили не только вы.

Итак, перейдем к делу.

На машинах с 'фирменной' неполной дешиф-
рацией  по  #DF, а не #1F при отсутствии
мыши (ее порты имеют в младшем байте ад-
реса  #DF)  вместо  'мышиной' инфы будет
прочитан  джойстик.  Ну, если при чтении
координат  глюков  не происходит (sorry,
из-за  отсутствия ентого девайса не зна-
ком с его подробным опросом, да разговор
не  об этом вовсе), то при чтении кнопок
начинается самое интересное.
А  именно: у мыши кнопки пассивны в 1, а
активны  в  0; у джойстика же все наобо-
рот!!!  Посему при валяющемся под столом
джойстике прога слежения за несуществую-
щей  крысой  ловит  идиотское  намерение
юзера  найти 'any key' методом пианиста,
то бишь нажатием всего нажимающегося :-)

В  результате  получаем  навечно нажатые
'огонь' и 'отмену' (благо, средняя кноп-
ка не используется для 'смертельных' ;-)
функций).   Эффект,   конечно,   занима-
тельный, однако я журнал взял, а не дему
какую-ньдь.
После того, как до меня дошло все это, я
сразу понял метод лечения: нажать кнопки
'влево'  и 'вправо' на джойстике (благо,
он у меня не рычажковый ;) ); после чего
я  довесил  пару перемычек и пересмотрел
все глючные проги ;). Невъехавшим об'яс-
няю: влево и вправо - биты 0,1 джойстика
-  соответствуют  левой и правой кнопкам
мыши (вниз - бит 2 - средней).
Только  не забудьте потом убрать эти пе-
ремычки :-).

Железячный метод решения - добавить пару
элементов ЛЛ1 либо диодов для дешифрации
по  #1F - не рекомендую, т.к. таких про-
гов  не так уж и много, да и вообще, это
проблема кодеров, а не юзеров.

Кстати сказать, эта проблема проявляется
на KAY'е и Scorp'е. Посему основная мас-
са мышиных прогов - из Питера - работает
корректно.

Ну  а  теперь перейдем к десерту - тому,
ради  чего  вы и читали весь этот калам-
бур,  то бишь _КАК_правильно_избавиться_
_от_этого_принеприятнейшего_известия_.

Возьмем  какой-ньдь  питерский мышининый
прог и запустим его (напр., ZX-Format).
Теперь обратим внимание на вроде бы бес-
полезный  прибамбас  -  тест джойстика и
мыши.  Хотя давно следовало спросить се-
бя: а где же тесты ОЗУ, турб и тормозов,
псевдо-ПЗУ  и теневых мониторов ;-). Со-
поставим    этот    факт    с   наличием
кемпстон-теста, например, и в MMD. ВСЕ!
Теперь можете кричать "эврика!"
Если же вы не Архимед, читайте дальше.

Короче, НУЖНО ТЕСТИРОВАТЬ наличие мыши !

И если мыши нет, то ОТКЛЮЧАТЬ ее опрос.

А сделать это не просто, а очень просто.

Может  быть два варианта: простой и неп-
равильный.
Для начала разберем неправильный.

         LD   A,#FA       ;читаем
         IN   A,(#DF)     ;   кнопки.
         AND  %00000111   ;маскируем их.
         INC  A           ; #FF+1=0
         JP   NZ,mouse_off;     ...
mouse_on ...

Принцип:  если это мышь, то ее порт кно-
пок будет содержать 1 в разрядах 3...7;
после   установки   младших  битов  в  1
(AND  %00000111)  в  акк. получим #FF, а
после INC A - 0 и установленный флаг Z.
Если джойстик, то биты 3...7 сброшены !

Почему неправильный ?

а).Есть мышь, нестабильная шина данных и
в  результате где-ньдь в битах 3...7 на-
поремся хотя бы на один 0.
Результат - мышь отдыхает.

б).Нет  мыши, кемпстон (джойстик) непра-
вильный  (установлены  биты 5...7), юзер
давит  на  все  (или  хотя  б  'огонь' и
'вверх') кнопки джойстика (назло...:*) )
Результат - наличие мыши (+глюки...).

Во втором способе надо прочитать 3 мыши-
ных байта и если все они равны, то с ве-
роятностью 99.(9)% мыши нет:

а).Читали все 3 байта из джойстика.
б).Читали нестабильную шину.
в).Читали стабильную шину.

Остальная  (мизерная) вероятность непра-
вильного определения:

а).Нестабильная  шина  успела измениться
между чтениями.
б).Шустрый юзер успел изменить состояние
джойстика между чтениями :-О.
в).Юзер  умудрился  :*))  поставить мышу
так, что x=y=keys !!!...

Ну а вот и асм:

          LD   BC,#FADF
          IN   A,(C)
          INC  B         ;B=#FA+1=#FB
          IN   D,(C)
          LD   B,#FF
          IN   E,(C)
;прочитали все 3 байта.

          CP   D
          JP   NZ,mouse_on
          CP   E
          JP   NZ,mouse_on
mouse_off ...


Ну вот и все :-).

P.S.: Хотя не помешает добавить ручную
коррекцию теста - как в том же ZF.

12.08.98  22:19msk  is-dos




Другие статьи номера:

Introduction - вступление: цель газеты - помочь межрегиональному объединению железячников.

Krasnodar Hard Corp - группа Краснодарских железячников.

Железо - начинающим: уроки пайки.

Советы мастера - о том, как обpащаться с печатнoй платой и её элементами.

Измерения - очень полезная схемка для проверки печатных плат.

Тонкости опроса кемпстон-крыс - о глюках Kepston Mouse.

Прерывания в Spectrum'е - схема для использования IM2 прерываний.

Тонкости работы с IORQGE/ - что это за сигнал и с чем его вообще едят.

ZX+Dendy - возвращение к напечатанному.

Авора - об авторах газеты.


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

Похожие статьи:
ZX Spectrum и винчестер — статья Влада Сотникова/Vega о работе и программировании жесткого диска (HDD) на Спектруме.
Программистам - Basic для некоторых: Прелести бейсика.
Potoki - Поток сознания Валерии "Не обижай меня".
Инфо - в нашей газете тоже будут Спрятанные части, начиная с этого номера, так что дерзайте, ищите.
Программирование - калькулятор бейсика (продолжение).

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