User Tag List

Показано с 1 по 10 из 111

Тема: Super Joystick Port

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    HardWareMan
    Гость

    По умолчанию

    Для любителей периферии от Сега добавлю некоторую инфу, которая позволит оптимизировать процедуру опроса. Типичный код опроса 6ти кнопочного джойстика:
    Код:
    clr.l  d0           *Очищаем d0
    clr.l  d1           *Очищаем d1
    move.b #$40,$A10003 *Сигнал SYN джойстика в 1
    nop                 *Задержка
    nop                 *Задержка
    move.b $A10003,d1   *Считаем первые 6 кнопок
    andi.b #$3F,d1      *Выделим их
    move.b #$00,$A10003 *Сигнал SYN джойстика в 0
    nop                 *Задержка
    nop                 *Задержка
    move.b $A10003,d0   *Считаем вторые 2 кнопки
    and.b  #$30,d0      *Выделим их
    rol.b  #2,d0        *Сдвинем на 2 разряда
    or.b   d0,d1        *И совместим все 8 основных кнопок и сохраним в d1
    move.b #$40,$A10003 *Сигнал SYN джойстика в 1
    nop                 *Задержка
    nop                 *Задержка
    move.b #$00,$A10003 *Сигнал SYN джойстика в 1
    nop                 *Задержка
    nop                 *Задержка
    move.b #$40,$A10003 *Сигнал SYN джойстика в 1
    nop                 *Задержка
    nop                 *Задержка
    move.b #$00,$A10003 *Сигнал SYN джойстика в 1
    nop                 *Задержка
    nop                 *Задержка
    move.b #$40,$A10003 *Сигнал SYN джойстика в 1
    nop                 *Задержка
    nop                 *Задержка - этот 'мутор' нужен для активации дополнительных четырех кнопок джойстика (XYZM)
    move.b $A10003,d0   *Считаем дополнительные кнопки
    andi.b #$0F,d0      *Выделим их
    eor.b  #$0F,d0      *Проинвертируем их
    rol.l  #8,d0        *Сдвинем на 8 бит
    or.w   d1,d0        *И совместим их с основными 8ми
    not.b  d0           *Инвертируем основные кнопки
    move.b #$40,$A10003 *Сигнал SYN джойстика в 1
    move.w d0,KeyState  *И сохраним состояние джойстика
    Т.е., пульс длинной в чтение 5ти слов (2 NOPа и 1 move.b с длинным EA). На 7,6МГц это будет примерно 6мкс. Далее, периферия у Сеги разнообразная. И она имеет некий аналог PnP. Вот известные коды:

    Дока была издана до выхода расширенного 6ти кнопочного джойстика, который имеет ID = 0110 или 6. Теперь об опросе. Кнопки D-pad'а (крестовины) мультиплексированы с ID (3х кнопочный джойстик) и с расширенными кнопками XYZM (6ти кнопочный джойстик).
    Код:
    3.2) Специфика геймпада
    
    Геймпад использует 4 пина для направления (влево, вправо, вверх, вниз) и
    мультиплексирует 4 кнопки (A, B, C, Start) через пины TL и TR.
    
    Пин TH управляет мультиплексором при выборе кнопок (A и Start или C и
    B) через пины TL и TR.
    
    Чтобы прочитат все кнопки программа должна установить TH=1, считать
    порт, установить TH=0 и еще раз считать порт. Считанные данные будут
    в следующем формате:
    
     TH = 0 : ?0SAIIII
     TH = 1 : ?1CBRLDU
    
     ? = То, что было ранее записано в бит 7.
     I = ID
     S = Start
     A = Кнопка A
     B = Кнопка B
     C = Кнопка C
     U = Вверх
     D = Вниз
     L = Влево
     R = Вправо
    
    6ти кнопочный пад позволяет получить дополнительные кнопки, которое
    основано на том, сколько раз пин TH был переключен с 1 на 0 (но не
    наоборот с 0 на 1). Посмотрите на следующую последовательность:
    
     TH = 1 : ?1CBRLDU    Кнопки 3х кнопочного пада
     TH = 0 : ?0SAIIII    Кнопки 3х кнопочного пада
     TH = 1 : ?1CBRLDU    Кнопки 3х кнопочного пада
     TH = 0 : ?0SA0000    D3-D0 сброшены в '0'
     TH = 1 : ?1CBMXYZ    Дополнительные кнопки могут быть считаны через D3-D0
     TH = 0 : ?0SA1111    D3-D0 установлены в '1'
    
     M = Mode
     X = Кнопка X
     Y = Кнопка Y
     Z = Кнопка Z
    
    Далее будут возвращаться данные стандартного 3х кнопочного
    джойстика при любых переключениях пина TH.
    
    Если пин TH не изменялся около 8192 (а может и меньше) цикла 68000
    происходит таймаут и дополнительные кнопки могут быть считаны еще
    раз. Игры обычно опрашивают джойстик один раз за телевизионный кадр,
    поэтому времени достаточно чтобы произошл таймаут.
    
    Я думаю, что проверка D3-D0 на сброс в '0' или установку в '1' может
    быть еще одним методом проверки типа подключенного пада: 6ти или 3х
    кнопочный.
    
    Некоторые игры используют такой опрос пада, что считываются данные
    6ти кнопочного пада, хотя ожидаются от 3х кнопочного. Чтобы исправить
    это, нужно зажать кнопку MODE при включении и 6ти кнопочный пад
    будет работать как 3х кнопочный.
    Последний раз редактировалось HardWareMan; 13.02.2015 в 18:34.

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

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

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

Похожие темы

  1. Не сбрасываемый порт 254 (Non reset port #FE)
    от Black_Cat в разделе Разный софт
    Ответов: 31
    Последнее: 01.03.2012, 10:42
  2. Profi3.2-Incorrect Port #BFFD
    от solegstar в разделе Profi
    Ответов: 4
    Последнее: 18.01.2012, 18:35
  3. artyllery c64 demo music port to TSFM?
    от Renegade в разделе Музыка
    Ответов: 5
    Последнее: 25.05.2011, 22:29
  4. Модем на serial port
    от rw6hrm в разделе Несортированное железо
    Ответов: 20
    Последнее: 16.09.2005, 14:30

Ваши права

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