Важная информация

User Tag List

Страница 4 из 12 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 111

Тема: Super Joystick Port

  1. #31
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для любителей периферии от Сега добавлю некоторую инфу, которая позволит оптимизировать процедуру опроса. Типичный код опроса 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.

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #32
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Для любителей периферии от Сега добавлю некоторую инфу, которая позволит оптимизировать процедуру опроса. Типичный код опроса 6ти кнопочного джойстика:
    ...
    Т.е., пульс длинной в чтение 5ти слов (2 NOPа и 1 move.b с длинным EA). На 7,6МГц это будет примерно 6мкс.
    ...
    TH = 1 : ?1CBRLDU
    TH = 0 : ?0SAIIII
    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'
    Спасибо, интересно было узнать, в какие моменты читается джойстик в SEGЕ.
    Интервал 6 мкс * 7 интервалов - это около 464 такта AVR на частоте 11.0592 МГц. Жалко это время тратить впустую. Лучше прерывания сделать через 50 мкс.

    Моя диаграмма в принципе соответствует этому, но лучше скорректировать, как в оригинале.

    Тогда получается следующая картина.

    1. 0 50 мкс
    2. 1 50 мкс
    3. 0 50 мкс
    4. 1 50 мкс
    5. 0 50 мкс
    6. 1 50 мкс
    7. 0 50 мкс
    8. 1 2000 мкс

    1 прерывание: читаем B, C, UP, DOWN, LEFT, RIGHT. Затем делаем SYN=0.
    2 прерывание: читаем A, START. Затем делаем SYN=1.
    3-6 прерывания: меняем SYN на противоположный без чтения из джойстика.
    7 прерывание: читаем X, Y, Z, SELECT. Затем делаем SYN=0.
    8 прерывание: делаем SYN=1.
    9-47 прерывание: просто увеличиваем счетчик прерываний.
    48 прерывание: обнуляем счетчик прерываний.

    Как только считаются все 12 кнопок (в 8 прерывании) нужно будет записать во флаг SEGA_state значение READY. В основном цикле программа будет опрашивать состояния трех источников данных. Как только появится данное состояние SEGA джойстика - запустится подпрограмма обработки кнопок джойстика. После этого флаг SEGA_state установить в значение PROCESS и записать 11 во все биты входного буфера данных с джойстика. Затем цикл повторяется.
    Последний раз редактировалось zx-kit; 13.02.2015 в 19:01.
    "L-256"

  4. #33
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вся соль там во времени таймаута. Из-за того, что 6ти кнопочный джойстик есть расширение 3х кнопочного и они должны быть совместимы. Но как сделать чтение дополнительных кнопок не добавляя сигналов управления? Вот тут то и добавили схему переключения альтернативного состояния. А так как джойстики опрашиваются во время VBlank'а, то время для таймаута вполне предостаточно. При этом, есть норматив только на минимальную длительность сигнала SYN, обусловенную задержкой в проводе, логике самого джойстика и быстродействием порта ввода-вывода. Таким образом, опрашивая по 50мкс за состояние с перерывом в 2мс вполне укладывается в рамки. Просто следует ввести код определения типа подключенного джойстика да и сам факт подключения. 6ти кнопочной джой может притвориться 3х кнопочным, если зажать MODE при поверапе.

  5. #34
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Вся соль там во времени таймаута. Из-за того, что 6ти кнопочный джойстик есть расширение 3х кнопочного и они должны быть совместимы. Но как сделать чтение дополнительных кнопок не добавляя сигналов управления? Вот тут то и добавили схему переключения альтернативного состояния. А так как джойстики опрашиваются во время VBlank'а, то время для таймаута вполне предостаточно. При этом, есть норматив только на минимальную длительность сигнала SYN, обусловенную задержкой в проводе, логике самого джойстика и быстродействием порта ввода-вывода. Таким образом, опрашивая по 50мкс за состояние с перерывом в 2мс вполне укладывается в рамки. Просто следует ввести код определения типа подключенного джойстика да и сам факт подключения. 6ти кнопочной джой может притвориться 3х кнопочным, если зажать MODE при поверапе.
    С платой SUPER JOYSTICK PORT 2 будут работать только шестикнопочные SEGA джойстики (у которых справа кнопки X,Y,Z в верхнем ряду и A,B,C - в нижнем).



    Используются все 12 кнопок. А если джойстик не подключен, то с разъема будут читаться все единицы, как будто ни одна кнопка на нем не нажата.

    Добавил в программу формирование сигнала SYN по прерываниям. Поке без чтения данных из джойстиков.
    Вложения Вложения
    Последний раз редактировалось zx-kit; 14.02.2015 в 07:18.
    "L-256"

  6. #35
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Периодически добавляю новые функции в прошивку.
    Дописаны чтение данных с SEGA джойстика и проверено реагирование на нажатие кнопок. Сразу не заработало. Закомментировал некоторые команды для отладки. Найду время - найду ошибки и доработаю. Может кто увидит ошибку и подскажет ?
    Вложения Вложения
    "L-256"

  7. #36
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Чтение из SEGA джойстика заработало. В макросах чтения вместо надписей типа PINB были PORTB. Сейчас джойстик нажимает кнопки 1,2,3,4,5,6,7,8,9,0,Q,A.

    Следующее, что надо закодировать: 10 раскладок по 10 байтов. Каждый байт в раскладках будет кодироваться как KEY_1 или KEY8+CS. Это позволит легко корректировать раскладки.
    Вложения Вложения
    "L-256"

  8. #37
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Реализовано переключение между 10 раскладками SEGA джойстика при нажатии кнопки SELECT.
    Вложения Вложения
    "L-256"

  9. #38
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Начал писать поддержку PS/2 клавиатуры. Добавил раскладку PS/2 клавиатуры в область FLASH_DATA. Клавиатура будет работать по умолчанию в режиме Scan Code Set 2. Первые 128 байтов для кодов без префикса E0, вторые 128 байтов для кодов с префиксами E0 и E1.

    Пока в таблице задействованы кнопки букв, цифр, пробела и ENTERa. Также L SHIFT как CS, R SHIFT как SS. Стрелки пока не задействованы. Можно подумать над переключением их раскладок для эмуляции джойстиков. Например, F1 = SINCLAIR1, F2 = SINCLAIR2, F3 = KEMPSTON...

    Осталось спроектировать и закодировать прием байта, обработка байта, добавление кнопок клавиатуры в выходной буфер с данными от SEGA джойстика.
    Вложения Вложения
    "L-256"

  10. #39
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Всех с праздником !

    В прошивке добавлена обработка кнопок с CS и SS для SEGA джойстика и PS/2 клавиатуры. Они нажимаются за 72 мс до нажатия цифры или буквы. Работа проверена с SEGA джойстиком в режиме CURSOR на Ленинграде-2012 c Open SE BASIC-ом.

    Добавлен текстовой файл с описанием раскладки PS/2 клавиатуры.
    Вложения Вложения
    "L-256"

  11. #40
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Добавлено:
    • прием байта с PS/2 клавиатуры
    • контроль четности
    • таймаут приема 1,5 мс
    Вложения Вложения
    "L-256"

Страница 4 из 12 ПерваяПервая 12345678 ... ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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