Программирование на Ассемблере
Вы увидите, что
D6 содержит величину перемещения мыши с момента последней проверки (старший
байт содержит перемещение по вертикали, младший - по горизонтали). Можно
отслеживать и абсолютное положение указателя мыши - надо просто
периодически проверять порты и прибавлять текущее перемещение к его
координатам.
Теперь рассмотрим влияние джойстика на значения регистров портов.
Предположим, что у Вас есть джойстик, присоединенный ко второму порту.
Измените адрес joy на $DFF00C и запустите предыдущую программу в режиме
\"Breakable\". Наблюдая за D6 Вы увидите, что этот регистр содержит либо
ноль, либо копию D7 (при использовании SEKA Вам придется запустить
программу два раза).
Переведите джойстик в положение \"вверх\" - содержимое D6 будет теперь равно
$FF00. Если Вы отпустите джойстик, то значение D6 изменится и станет равным
$100. Это означает, что при \"движении\" вверх из старшего байта порта
вычитается единица, а при возвращении джойстика в исходное положение -
прибавляется. То же самое происходит и при \"движении\" влево, только в этом
случае изменяется младший байт порта. В следующей таблице показано изменение значений регистра порта при
различных положениях джойстика: вверх $FF00 старший байт минус 1
вниз $00FF младший байт минус 1
влево $0100 старший байт плюс 1
вправо $0001 младший байт плюс 1 Эти значения тем не менее не являются абсолютно надежными: если Вы
достаточно быстро \"прокрутите\" джойстик, то регистр D6 будет содержать
бессмыслицу (это происходит из-за того, что контроллер начинает
воспринимать джойстик как мышь). Несмотря на это, описанный способ
получения сигналов от джойстика является наиболее быстрым.
Теперь нам осталось выяснить, как получать информацию о кнопках мыши или
джойстика. Для этого существуют два специальных бита в регистре $BFE001:
бит 6 отражает состояние левой кнопки мыши (порт 1), а бит 7 - джойстика
(порт 2): если один из этих битов установлен, то соответствующая кнопка не
нажата.
|