╔══════════════════════════════════════════════════════════════╗
║ Кодинг. ║
╙──────────────────────────────────────────────────────────────╜
(C) EVP-SOFT
Определение наличия Kempston Joystick.
На зарубежном спектруме Kempston джойстик выбирается путём
сброса A5 на шине адреса, таким образом его порт #DF (223), но
на росийских спектрумах стандартным портом Kempston джойстика
стал порт #1F(31). При отсутствии Kempston мыши это не важно, и
если какая нибудь прога будет обращаться к джойстику через #DF
то он будет нормально работать.
Раскладка битов Kempston джойстика такая: D0 - вправо; D1 -
влево; D2 - вниз; D3 - вверх; D4 - огонь, активизированный бит в
отличии от клавиатуры устанавливается в 1. В некоторых игрушках
встречается "перевёрнутая" раскладка битов (например, в Subway
Vigilante).
Традиционный способ определения наличия Kempston джойстика
основан на том, что три старших бита(D5,D6,D7) при его наличии
сброшены в 0. Например:
XOR A
IN A,(#1F)
AND #E0 ;#E0 = %11100000
JR Z,джойстик есть
JR джойстика нет
или ещё вот так:
XOR A
IN A,(#1F)
RLA
JR NC,джойстик есть
JR джойстика нет
Однако, эти способы не работают на многих спектрум-совмести-
мых машинах, например Scorpion'ы, некоторые Pentagon'ы и многие
другие. Причин несколько: во-первых на многих платах не все
старшие биты порта Kempston джойстика сброшены в 0, бывает, что
они все (или некоторые из них) установлены в 1; во-вторых на
фирменных спектрумах и на Scorpion'ах при обращении к какому-ни-
будь отсутствующему порту из него считывается содержимое порта
атрибутов ("порт #FF") - именно с этим связаны сложности при
подключении CDOS-модема к Scorpion'у или GRM'у, т.к. на плате
нет такого порта.
Чтобы устранить вторую причину, надо разобраться, как работа-
ет порт атрибутов. Вывод на экран начинается сразу после прихода
сигнала INT, точнее сразу после INT'а рисуется верхняя часть
бордюра и в это время порт атрибутов отключается. Когда-же начи-
нает рисоваться экран, то из порта атрибутов приходят байты ат-
рибутов, которые в данный момент выводятся на монитор (однако, в
те моменты, когда рисуются боковые части бордюра, порт атрибутов
снова отключается) - это явление позволяет синхронизировать бор-
дюрные эффекты. Итак, для определения наличия Kempston джойстика
(а так-же это касается и Kempston мыши) его порт надо опрашивать
только сразу после INT'а, пока порт атрибутов выключен, т.к. по-
том если джойстика нет - из его порта может приходить разный му-
сор порта атрибутов.
Ну а для устранения первой причины надо определять наличие
Kempston джойстика по младшим 5 битам, но правда в этом есть
один недостаток, а именно, если, когда прога проверяет наличие
Kempston джойстика его удерживать - то программа не определит
его присутствие.
Итак, оптимальный способ определения Kempston джойстика, ра-
ботает абсолютно на всех машинах со 100% надёжностью:
;
; (C) EVP-SOFT
;
; на время определения наличия Kempston
; джойстика желательно установить режим
; IM 2 и программу обработки прерываний
; сделать короткой:
;I_ADDR EI
; RETI
;
TEST_J HALT ; сразу после HLT порт атрибутов выключ.
XOR A
IN A,(#1F)
AND #1F ;#1F = %00011111
JR Z,джойстик есть
JR джойстика нет
Определение наличия Kempston Mouse
Название мыши "Kempston" вовсе не означает, что она подключа-
ется вместо Kempston джойстика. Для подключния Kempston мыши ну-
жен специальный контроллер, т.к. координаты Kempston мыши (в от-
личии от AY-мыши) вычисляются аппаратно, а не программно. Связь
с контроллером осуществляется через три порта:
#FADF - кнопки, используются только три младших бита, если бит
сброшен в 0, значит кнопка нажата: D0-правая, D1-левая,
D2-средняя.
#FBDF - горизонтальные координаты
#FFDF - вертикальные координаты
Координаты мыши могут переходить через 0 или #FF. Определить
наличие Kempston мыши можно по тому, что при её отсутствии из
всех трёх "мышиных" портов считывается #FF, разумеется, когда
выключается порт атрибутов. Если хотя-бы из одного порта пришло
не #FF, значит мышь есть. Однако, если после включения компа не
прикасаться к мыши, то из портов координат тоже будет приходить
#FF, и наличие мыши будет не определить - поэтому после включе-
ния компа всегда сдвигайте мышь, иначе ни одна прога её не
найдёт. Вобщем, наличие Kempston мыши можно определить например,
вот так:
;
; (C) EVP-SOFT
;
; на время определения наличия Kempston
; мыши желательно установить режим IM 2
; и программу обработки прерываний сде-
; лать короткой:
;I_ADDR EI
; RETI
;
TEST_M LD BC,#FADF
HALT ; сразу после HLT порт атрибутов выключ.
IN A,(C)
CPL
LD E,A
INC B
HALT ; этот HLT можно убрать
IN A,(C)
CPL
OR E
LD E,A
LD B,#FF
HALT ; а этот HLT желательно оставить
IN A,(C)
CPL
OR E
JR NZ,мышь есть
JR мыши нет
Other articles: