|
ZX Hard
#00
31 августа 1998 |
|
Тонкости опроса кемпстон-крыс - о глюках 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
Другие статьи номера:
Похожие статьи:
Введемся - повальная компьютеризация по-прежнему сосала деньги из наивных ламеров, новое в листалке.
В этот день... 17 ноября