Proton
#13
23 декабря 1997 |
|
Кодинг - Определение наличия Kempston Joystick и Kempston Mouse.
╔══════════════════════════════════════════════════════════════╗ ║ Кодинг. ║ ╙──────────────────────────────────────────────────────────────╜ (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 мыши нет
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября