Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: AMX Mouse

  1. #1
    Veteran
    Регистрация
    22.02.2005
    Адрес
    Украина, Харьков
    Сообщений
    1,523
    Благодарностей: 107
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию AMX Mouse

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

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Благодарностей: 29
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчет изменяющегося - не уверен. Я могу порыться как он у меня реализован в эмуле, схемы у меня нет, да и не знаю я ничего по схемам. Там действительно так замутено...
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  4. #3
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Благодарностей: 29
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну так надо или нет? А то забиваю на эту ветку и до свиданья.
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  5. #4
    Veteran
    Регистрация
    22.02.2005
    Адрес
    Украина, Харьков
    Сообщений
    1,523
    Благодарностей: 107
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    ну так надо или нет? А то забиваю на эту ветку и до свиданья.
    Если спрашивал, значит надо! Ну не мог я раньше на форуме объявиться

  6. #5
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Благодарностей: 29
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Значит, так: по координатам 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 }

    ---------------------------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    софтом.

    Вроде все.
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  7. #6
    Veteran
    Регистрация
    22.02.2005
    Адрес
    Украина, Харьков
    Сообщений
    1,523
    Благодарностей: 107
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  8. #7
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,481
    Благодарностей: 776
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от spensor
    Правда пока понятно мало В частности, причем тут PIO-режим, а тем более с модификациями?
    Может быть кто-то сможет описанное перевести на "железный язык"?
    Более доходчиво AMX mouse описана здесь:

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

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

  9. #8
    Veteran
    Регистрация
    22.02.2005
    Адрес
    Украина, Харьков
    Сообщений
    1,523
    Благодарностей: 107
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro
    Более доходчиво AMX mouse описана здесь:
    http://www.breezer.demon.co.uk/spec/tech/hware.html#amx
    AMX интерфейс использует микросхему Z80-PIO (programmable In/Out Interface).
    Вот это "ближе к телу", спасибо!

  10. #9
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Благодарностей: 29
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  11. #10
    Veteran
    Регистрация
    22.02.2005
    Адрес
    Украина, Харьков
    Сообщений
    1,523
    Благодарностей: 107
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    Собственно, вообще не вижу, что же там более доходчиво, ну ладно.
    Ну в сумме Ваша и Caro информация дает полную картину. А без описания железа, понять все очень трудно, а может и невозможно.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Mouse autodetect
    от Sinus в разделе Программирование
    Ответов: 22
    Последнее: 14.04.2006, 09:32
  2. Speccy mouse
    от Splinter в разделе Устройства ввода
    Ответов: 44
    Последнее: 30.01.2006, 21:05
  3. игра Their finest hour; игры и kempston mouse
    от mRax в разделе Игры
    Ответов: 3
    Последнее: 23.09.2005, 14:55
  4. mouse driver
    от tasman в разделе Программирование
    Ответов: 25
    Последнее: 15.06.2005, 14:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •