ZXNet эхоконференция «hardware.zx»


тема: AMX Mouse



от: Vlad Semchenko
кому: All
дата: 06 Mar 2006
Hello, All

О такой разновидности Spectrum-мышей слышали многие. Известно, что УизюминкойФ
устройства является передача параметров (координат), через изменяющийся вектор
прерывания. А никто не может дать ссылку на схему девайса?

от: Владимир Кладов
кому: All
дата: 06 Mar 2006
Hello, spensor

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

от: Владимир Кладов
кому: All
дата: 08 Mar 2006
Hello, Vladimir Kladov

ну так надо или нет? А то забиваю на эту ветку и до свиданья.

от: Vlad Semchenko
кому: All
дата: 13 Mar 2006
Hello, Vladimir Kladov

Vla> ну так надо или нет? А то забиваю на эту ветку и до свиданья.

Если спрашивал, значит надо! Hу не мог я раньше на форуме объявиться:(

от: Владимир Кладов
кому: All
дата: 13 Mar 2006
Hello, spensor

Тогда поковыряю сейчас. А иначе - какой резон ковырять. Это же тоде время надо.

Значит, так: по координатам X, Y имеются два раздельных вектора прерывания,
называемые A

и B соответственно.

-+-------------------------------

out 7F - установка вектора B, IE и PIO-mode (т.е. для смещения мыши по
вертикали -

координата Y).

if Value and 1 = 0 then
AMX_IntVectorB := Value { вектор B устанавливается, если выводимое в
порт

значение - четное (соответственно, установить можно только четное значение)}
else
if Value and 9 = 1 then
AMX_IE_B := Value and $80 <> 0 {если значение нечетное и бит 3 = 0, то
бит 7

задает новое значение флажка IE}
else
if Value and $B = $B then { если биты 0,1,3 все = 1, то старшие 2 бита
задают

PIO-mode 0..3}
AMX_PIOmode_B := Value shr 6;

-+-------------------
out 5f - примерно так же задает вектор A, IE и PIO-режим для него (координата
X):

if Value and 1 = 0 then
AMX_IntVectorA := Value { если четное, то устанавливает новый вектор A}
else
if Value and 9 = 1 then
AMX_IE_A := Value and $80 <> 0 { если нечетное, и бит 3 = 0, то старшие
бит

задает IE }
else
if Value and $B = $B then
AMX_PIOmode_A := Value shr 6; { если биты 0,1,3 все = 1, то старшие 2
бита задают

PIO }

-+-------------------------

Hе знаю, почему, но PIO надо выставлять всегда в 01, и IE в 1. Иначе ввод из
портов 1F и

3F ничего не даст про AMX. (У меня будут другие порты на этих номерах читаться,
Kemston

Joy по 1F, по крайней мере).

Внутри одного кадра прерывание по каждому вектору происходит не более 32 раз.
Для изменения любой координаты на 1 пиксел происходит 1 прерывание в режиме IM2
-

аппаратно (т.е. независимо от текущего режима IM в CPU), при этом на шину
выставляется

соответствующий вектор A - для X, B - для Y. Если прерывание разрешено, CPU его
кушает, и

передает управление куда нам надо. Да, в качестве младшего байта адреса на
шине, похоже,

копия старшего байта, т.е. само значение вектора. Соответственно, если задать
A=FE, то

адрес подпрограммы будет выбираться по адресу FEFE. (Hе уверен, что 100% так).

При перемещении вправо и вниз бит DATA=0, в другую сторону, соответственно, 1.
Значение

DATA считывается из портов 1F - для X, и 3F - для Y.
Hажатие клавиши: IN DF - дает 0 в младшем бите считанного байта - левая мышь, в
бите 1 -

правая, в бите 2 - средняя. Т.е. если кнопка не нажата, в соответствующем бите
1. Еще

предполагалось считывать порт N раз, объединяя серию результатов по OR - во
избежание

дребезга (т.е. настолько убогая реализация, что она могла вроде как дренькать,
если на

нее не нажимали). Hу, в эмуляторе-то достаточно и одного раза, конечно.

Сброс всех счетчиков (и похоже - текущей координаты) происходит у меня по:
- команде DI,
- по ресету CPU,
и по командам в эмуляторе для отключения/включения слежки за мышью (например,
по

одиночному Alt). В том числе когда эмулятор входит в паузу.

При сбросе для обоих векторов устанавливается PIO=0, IE=0. Может и неправильно,
но для

тестировавшего софта это было нормально. Видимо, предполагается, что софт

ре-инициализирует мышь на каждом обычном прерывании, в начале каждого кадра
1/50 sec. Видимо, я работал с "правильным"

софтом.

Вроде все.

от: Vlad Semchenko
кому: All
дата: 14 Mar 2006
Hello, Vladimir Kladov

Благодарю за проведенные исследования! Правда пока понятно мало:( В частности,
причем тут PIO-режим, а тем более с модификациями?
Может быть кто-то сможет описанное перевести на "железный язык"?

от: Vlad Semchenko
кому: All
дата: 14 Mar 2006
Hello, caro

car> Более доходчиво AMX mouse описана здесь:
car> http://www.breezer.demon.co.uk/spec/tech/hware.html#amx
car> AMX интерфейс использует микросхему Z80-PIO (programmable In/Out
car> Interface).

Вот это "ближе к телу", спасибо!

от: Камиль Каримов
кому: All
дата: 14 Mar 2006
Hello, spensor

spe> Правда пока понятно мало:( В частности, причем тут PIO-режим, а тем
spe> более с модификациями?
spe> Может быть кто-то сможет описанное перевести на "железный язык"?

Более доходчиво AMX mouse описана здесь:

http://www.breezer.demon.co.uk/spec/tech/hware.html#amx

AMX интерфейс использует микросхему Z80-PIO (programmable In/Out Interface).
Это два программируемых 8 разрядных порта ввода/вывода.
В режиме IM2 эта микросхема умеет (как и все интерфейсные микросхемы из
комплекта Z80)
по прерыванию выставлять на шину данных адрес в векторе прерывания.
Hу а остальное читай в приведенном выше документе и
в datasheet на Z80-PIO

от: Владимир Кладов
кому: All
дата: 14 Mar 2006
Hello, spensor

Вот если верить этой доке, то
One additional port, IN port #DF, reads out the mouse button status.
It returns #FF or #00.
Видимо она мне и попалась первый раз, "спасибо" ей. А на картинке в списке
хардвары нарисована все-таки трехнопочная мыша, а не 1. Во всем остальном
никакой разницы, кроме мелких мелочей. Собственно, вообще не вижу, что же там
более доходчиво, ну ладно.




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

Похожие статьи:
Реклама - Товарищи распространители,разве вам так трудно купить лицензию журнала за 15$?
Вступление - Oб авторах журнала и о журнале.
Анекдоты - По традиции - сразy к делy!
От редакции - Мнение газеты является НЕЗАВИCИМЫМ.
Demoscene - отчет с Chaos Constructions 2004 от C-jeff'a.

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