Proton #18
27 января 1998

Кодинг - Разбор опечаток из предыдущей статьи...

<b>Кодинг</b> - Разбор опечаток из предыдущей статьи...
╔══════════════════════════════════════════════════════════════╗
║            Кодинг.             ║
╙──────────────────────────────────────────────────────────────╜
From : Jason Frost
To   : PROTON

 PR>
 PR>             Определение наличия Kempston Joystick.
 PR>
 PR>    На зарубежном спектруме Kempston джойстик выбирается
 PR> путём  сброса A5 на шине адреса, таким образом его порт
 PR> #DF  (223), но на росийских спектрумах стандартным пор-
 PR> том  Kempston  джойстика  стал  порт  #1F(31).  При от-
 PR> сутствии  Kempston  мыши это не важно, и если какая ни-
 PR> будь прога будет обращаться к джойстику через #DF то он
 PR> будет нормально работать.

Здесь, скорее всего, опечатка. NAVY MOVES ведь не работает. Зато
адаптированные проги работают и на наших и на фирменных машинах.
Наш кемстон выбирается при нулях на А5,А6,А7, а адрес #DF этого
не обеспечивает.

 PR>
 PR>
 PR> сброшены в 0. Например:
 PR>
 PR>         XOR     A
 PR>         IN      A,(#1F)

!???????
вообще-то _полный адрес_ порта kempston'a - #FF1F.
    По общепринятой спецификации выборка порта осуществляется
нулями на одной или нескольких адресных линиях, и чистая
адресная шина имеет вид #FFFF. Размер шины адреса в Z80 (Z8400)
16 бит, и при работе по укороченнын 8 - битным адресам на
старшую часть попадает случайное значение, что может повлечь
несовместимость с разными версиями аппаратуры.
    Но это уже из области профессионального программирования. В
профессиональных системах (IS'DOS например) требование всегда и
везде указывать полный 16-битный адрес порта является
обязательным, и его несоблюдение считается серьезной ошибкой.

 PR>
 PR>    Однако,   эти   способы   не   работают   на  многих
 PR> спектрум-совместимых  машинах, например Scorpion'ы, не-

на всех скорпах кемпстон имеется изначально. Причем разведен
он 100% правильно. Правильнее сказать: эти способы не работают
на машинах имеющих порт #FF и/или криво подключеный джойстик.

 PR> которые  Pentagon'ы  и многие другие. Причин несколько:
 PR> во-первых  на  многих  платах не все старшие биты порта
 PR> Kempston  джойстика  сброшены  в 0, бывает, что они все
 PR> (или  некоторые  из  них) установлены в 1; во-вторых на
 PR> фирменных  спектрумах  и на Scorpion'ах при обращении к
 PR> какому-нибудь  отсутствующему порту из него считывается
 PR> содержимое порта атрибутов ("порт #FF") - именно с этим
 PR> связаны сложности при подключении CDOS-модема к Scorpi-

у скорпа на системной шине имеется специальный вход IORQGE,
который отключает порт #FF и вообще _все_ остальные порты,
имеющиеся на материнской плате. Никаких проблем.
Порт #FF и модем вполне уживаются вместе. Доделка состоит
из микрухи ЛП8 и кусочка провода.

 PR>
 PR>    Чтобы  устранить  вторую  причину, надо разобраться,
 PR> как  работает порт атрибутов. Вывод на экран начинается
 PR> сразу  после  прихода  сигнала  INT, точнее сразу после
 PR> INT'а рисуется верхняя часть бордюра и в это время порт
 PR> атрибутов отключается. Когда-же начинает рисоваться эк-

порт #FF- это порт атрибутов _экрана_, а не бордюра, и он _не
отключается_, просто из него в течение около 12000 тактов после
инта (пока рисуется верхняя часть бордюра), гарантированно
приходят только байты #FF, т.е. пустая шина данных.

 PR> ран,  то  из  порта атрибутов приходят байты атрибутов,
 PR> которые в данный момент выводятся на монитор (однако, в
 PR> те  моменты, когда рисуются боковые части бордюра, порт
 PR> атрибутов  снова  отключается)  - это явление позволяет
                ^^^^^^^^^^^^^^^^^^
он не отключается !!! Он просто пуст, т.е. содержит #FF!

 PR> синхронизировать бордюрные эффекты. Итак, для определе-
 PR> ния наличия Kempston джойстика (а так-же это касается и
 PR> Kempston  мыши)  его  порт надо опрашивать только сразу
 PR> после  INT'а,  пока порт атрибутов выключен, т.к. потом

почему сразу? Это надо делать в течение первых 12000 тактов
после инта, когда гарантированно исключен конфликт с портом
#FF. Почему 12000? Фирменный размер верхнего бордюрного поля
65 линий (на пентагоне 80), линия рисуется за 224 такта,
224*65=14560 тактов, но на wait'овых двухполевых машинах (в
частности фирменных) обычно меньше, 12000 как раз хватит.

 PR>
 PR>    Ну  а  для устранения первой причины надо определять
 PR> наличие Kempston джойстика по младшим 5 битам, но прав-
 PR> да  в  этом есть один недостаток, а именно, если, когда
 PR> прога  проверяет наличие Kempston джойстика его удержи-
 PR> вать - то программа не определит его присутствие.
 PR>
 PR>    Итак,   оптимальный   способ   определения  Kempston
 PR> джойстика,  работает  абсолютно на всех машинах со 100%
 PR> надёжностью:
 PR>
 PR> ;
 PR> ; (C) EVP-SOFT
 PR> ;
 PR> ; на время определения наличия Kempston
 PR> ; джойстика желательно установить режим
 PR> ; IM 2 и программу обработки прерываний

зачем с IM2 огород городить? Для тачек с нестабильной шиной
(которых немало), такой подход слишком громоздок: надо
расписывать табличку и т.д. При IM1 подпрограмма (ISR) опроса
клавиатуры (в зависимости от количества нажатых клавиш) занимает
около 1-2 тыс. тактов, что с лихвой укладывается в пресловутые
12 тыс. Так что при IM1 вполне достаточно тривиального

       EI
       HALT
       LD    A,#FF
       IN    A,(#1F)
       AND   #E0
       JR    Z,PRESENT
       JR    NOT PRESENT

В случае с мышой - аналогично.
Для машин с криво подключенным джойстиком логично поступить так:
если порт #FF1F обнаружен, но приходит из него не совсем то, что
надо (старшие три бита не в нуле), то джойстик все-таки есть,
и имеет смысл его опрашивать.

 PR> ; сделать короткой:

см. выше про 12000 тактов.

 PR>
 PR>                Определение наличия Kempston Mouse
 PR>
 PR>    Название  мыши "Kempston" вовсе не означает, что она
 PR> подключается  вместо Kempston джойстика. Для подключния

В Англии есть город Кемпстон, в котором есть одноименная
лаборатория, и в ней разные люди в разное время разработали
интерфейсы джойстика, мыши и принтера. Кста, принтерный -
почти точная копия нашего на KPS8OBB55.

 PR> Kempston  мыши нужен специальный контроллер, т.к. коор-
 PR> динаты Kempston мыши (в отличии от AY-мыши) вычисляются
 PR> аппаратно,  а  не программно. Связь с контроллером осу-

хм...  смотря  какая мышь. Если последовательная (microsoft mou-
se),  то  все  так  и есть. И не вычисляются, а преобразуются из
последовательного кода в параллельный.
 А  если параллельная, (стандарт для amiga & macintosh) то коор-
динаты  она  уже в готовом виде подает, и нужды в преобразовании
нет.

 PR> её отсутствии из всех трёх "мышиных" портов считывается
 PR> #FF, разумеется, когда выключается порт атрибутов. Если

еще раз: порт атрибутов _не выключается_! Он просто _ничего не
содержит_!

 PR> хотя-бы  из  одного  порта  пришло  не #FF, значит мышь
 PR> есть. Однако, если после включения компа не прикасаться
 PR> к  мыши,  то  из  портов координат тоже будет приходить
 PR> #FF, и наличие мыши будет не определить - поэтому после

неправильно. После reset порты координат содержат нули, а не
#FF. Так что наличие мыши можно определить всегда.

 PR> включения  компа  всегда  сдвигайте мышь, иначе ни одна
 PR> прога её не найдёт. Вобщем, наличие Kempston мыши можно

после аппаратного reset - аналогично, т.к. в контроллере
(не в каждом, но во многих) после reset происходят те же
процессы, что и при включении питания.

 PR> ;
 PR> ; на время определения наличия Kempston
 PR> ; мыши желательно установить режим IM 2

зачем IM2? См. выше.

 PR> ; и программу обработки прерываний сде-
 PR> ; лать короткой:

см. выше про 12000 тактов.

Мораль: не надо возиться с IM2. Искать мышу или джойстик можно
и при IM1, но в любом случае делать это после EI : HALT, при
условии, что прерывающая процедура не длиннее 12000 тактов.

Для справки, ориентировочные значения длин некоторых ISR:
стандартная процедура опроса клавиатуры - 1-2 тыс. тактов
проигрыватель Pro tracker'a             - 4-6 т. тактов
        -"-     ST pro                  - около 3,5 т.тактов
        -"-     ASC Sound Master        - 6-12 т. тактов.

ISR - Interrupt Service Routine.



Другие статьи номера:

Список BBS - Обзор сетевых новостей.

Астрология - Астрологический прогноз на предстоящую неделю.

Психология - Является ли число секретным кодом судьбы ?

IS-DOS - Способ исправить глюк в терминалке под CDOS модем и способ сильно ускорить дисковые операции с дисководом.

Кодинг - Разбор опечаток из предыдущей статьи...

Реклама - Реклама и объявления.

От авторов - Редакция.


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

Похожие статьи:
Релизъ - понравилась мне буква "Ъ".
Demoscene - рассказ zOOm'a о Ческогом пати ShuCon'2004.
Scene - IRCmania: "IRC что же это такое? Первый раз попадая сюда, ты с трудом понимаешь, что твориться вокруг".
От авторов - Редакция.
Info - Анкета ZX-CLUB.

В этот день...   21 ноября