User Tag List

Страница 10 из 11 ПерваяПервая ... 67891011 ПоследняяПоследняя
Показано с 91 по 100 из 105

Тема: Джойстики на Векторе-06ц

  1. #91

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,371
    Спасибо Благодарностей отдано 
    404
    Спасибо Благодарностей получено 
    647
    Поблагодарили
    255 сообщений
    Mentioned
    27 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня тоже руки не дошли пока прикрутить к Emu80 поддержку реального джойстика (геймпада)...

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

  3. #92

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,051
    Спасибо Благодарностей отдано 
    1,142
    Спасибо Благодарностей получено 
    1,473
    Поблагодарили
    525 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от parallelno Посмотреть сообщение
    nzeemin опубликовал инициализацию джойстиков П1 и П2
    Код:
        mvi a, 60h      ; биты для опроса обоих джойстиков-П
        out 5           ; инициализация для джойстик-П
        mvi a, 92h      ; управляющее слово ВВ55
        out 4           ; инициализация ВВ55
    Я потом переделывал, потому что не работало на реале.
    То как сейчас можно посмотреть тут: https://github.com/nzeemin/vector06c.../asteroid0.asm
    Инициализация:
    Код:
    ; Joystick init
    	mvi	a, 83h		; control byte
    	out	4		; initialize the I/O controller
    	mvi	a, 9Fh		; bits to check Joystick-P, both P1 and P2
    	out	5		; set Joystick-P query bits
    	in	6		; read Joystick-P initial value
    	sta	KEYINT_J+1	; store as xra instruction parameter
    В прерывании:
    Код:
    ; Joystick scan
    	in	6		; read Joystick-P
    KEYINT_J:
    	xri	0		; XOR with initial value - mutable param!
    	cma
    	sta	JoystickP	; save to analyze later
    Затем вот тут уже можно посмотреть как биты джойстика анализируются вместе с клавиатурой: https://github.com/nzeemin/vector06c...oid1.asm#L1648

    Эти 2 пользователя(ей) поблагодарили nzeemin за это полезное сообщение:

    aGGreSSor(15.08.2025), parallelno(05.06.2023)

  4. #93

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    nzeemin, супер спасибо!!!

    - - - Добавлено - - -

    nzeemin,
    Код:
    	in	6		; read Joystick-P initial value
    	sta	KEYINT_J+1	; store as xra instruction parameter
    	...
    	in	6		; read Joystick-P
    KEYINT_J:
    	xri	0		; XOR with initial value - mutable param!
    Поясни пожалуйста этот кусочек кода. В инициализации ты считываешь код клавиш джойстика. В опросе ты считываешь код снова и делаешь XOR с кодом который ты считал в инициализации. Что это дает?

  5. #94

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,051
    Спасибо Благодарностей отдано 
    1,142
    Спасибо Благодарностей получено 
    1,473
    Поблагодарили
    525 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от parallelno Посмотреть сообщение
    nzeemin,
    Код:
    	in	6		; read Joystick-P initial value
    	sta	KEYINT_J+1	; store as xra instruction parameter
    	...
    	in	6		; read Joystick-P
    KEYINT_J:
    	xri	0		; XOR with initial value - mutable param!
    Поясни пожалуйста этот кусочек кода. В инициализации ты считываешь код клавиш джойстика. В опросе ты считываешь код снова и делаешь XOR с кодом который ты считал в инициализации. Что это дает?
    А это я у кого-то подсмотрел, наверное у @svofski -- так ты фиксируешь "свободное" состояние битов, а потом смотришь только на их изменение.
    То есть, тебе не важно, какое состояние является "нажато" - 0 или 1.
    Плюс, видимо ещё -- если джойстика там вообще нет, ты опять же не будешь реагировать, какие бы битики там не стояли.
    Последний раз редактировалось nzeemin; 05.06.2023 в 21:42.

    Этот пользователь поблагодарил nzeemin за это полезное сообщение:

    parallelno(05.06.2023)

  6. #95

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    nzeemin, правильно ли я понимаю что в случае если джойстик есть, то после инициализации в KEYINT_J будет FFh. Затем в опросе с помощью xri мы получим инвертированное значение, а потом ты еще раз инвертируешь значение. Скажи пожалуйста зачем это нужно?

    Если джойстика нет, то что будет в KEYINT_J?

    Твой код какие джойстики поддерживает?
    Последний раз редактировалось parallelno; 05.06.2023 в 22:32.

  7. #96

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,051
    Спасибо Благодарностей отдано 
    1,142
    Спасибо Благодарностей получено 
    1,473
    Поблагодарили
    525 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от parallelno Посмотреть сообщение
    nzeemin, правильно ли я понимаю что в случае если джойстик есть, то после инициализации в KEYINT_J будет FFh. Затем в опросе с помощью xri мы получим инвертированное значение, а потом ты еще раз инвертируешь значение. Скажи пожалуйста зачем это нужно?

    Если джойстика нет, то что будет в KEYINT_J?

    Твой код какие джойстики поддерживает?
    Этот код рассчитан только на Джойстик П, любой из двух.
    При инициализации в KEYINT_J+1 кладём значение из порта без инверсии -- т.е. то что там есть без всяких нажатий (предполагаем что при загрузке игры джойстик не трогают). Судя по описанию, это будет FFh.
    Потом при опросе мы делаем xor с этим начальным значением - получаем биты в 1 которые отличаются от начального значения.
    Ещё одно инвертирование (cma) сделано для того чтобы в процедуре ReadKeyboard биты джойстика обрабатывались так же как биты клавиатуры -- а там 1 это отжато, 0 нажато.

    > Если джойстика нет, то что будет в KEYINT_J?
    Там будет то что отдаёт порт, не важно что, лишь бы оно не менялось.

    Проверял этот код на Векторе в MiSTer FPGA, и кто-то ещё проверял на реале, везде работает.
    Последний раз редактировалось nzeemin; 05.06.2023 в 23:44.

    Этот пользователь поблагодарил nzeemin за это полезное сообщение:

    parallelno(06.06.2023)

  8. #97

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Ещё одно инвертирование (cma) сделано для того чтобы в процедуре ReadKeyboard биты джойстика обрабатывались так же как биты клавиатуры -- а там 1 это отжато, 0 нажато.
    Занудное (и наверное лишнее) замечание, но все же - чтобы изменившиеся биты джойстика обрабатывались так же как биты клавиатуры. Если брать исходные значения опроса -П (и -С), то они как и у клавиатуры - 1 отжато, 0 нажато. "Позитивный" джойстик только ПУ/УСПИД, насколько я помню.

  9. #98

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все понял. Спасибо!

    nzeemin, кстати если организовать не по байту на бит каждой линии, а по три байта на экшен клавишу где каждый байт это маска чтобы проверить что в линии нажат экшен, то возможно будет быстрее, так как не придется проверять неиспользуемые биты и плюс можно проверять одним ксором сразу несколько бит ответственных за экшен таких так выстрел.

    - - - Updated - - -
    Вот пример чтобы объяснить что я имею в виду. Это при условии что бит 1 если клавишу нажали. Извини заранее если это сильно не в тему и если код с ошибками.

    Lda key_code_joy
    Mov c, a
    Lhld key_code_line1_line2
    Mvi d, 0 ; key_code to return

    Check_action_fire:
    Mvi a, fire_mask_line1
    Xra l
    Mov b, a
    Mvi a, fire_mask_line2
    Xra h
    Ora b
    Mov b, a
    Mvi a, fire_mask_joy
    Xra c
    Ora b
    Jz check _next_action
    Mvi d, key_code_fire ; for next key actions use mvi a, key_code_* / or d / mov d, a
    Check_next_action:

    - - - Updated - - -

    Для экшенов не относящихся к выстрелу можно не проверять fire_mask_line2 так как там только битики для выстрела. С учётом того что массив масок не нужен то возможно будет не сильно больше чем твое решение. Но конечно нужно проверять.

    - - - Updated - - -

    Примерно получается 104 байта
    Твой код 42+30=72
    У тебя получается короче плюс хорошее преимущество в том что его можно легко масштабировать до большего числа опрашиваемых линий!
    Последний раз редактировалось parallelno; 06.06.2023 в 12:23.

  10. #99

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,051
    Спасибо Благодарностей отдано 
    1,142
    Спасибо Благодарностей получено 
    1,473
    Поблагодарили
    525 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    parallelno, возможность для оптимизации конечно есть. Но для вас сейчас наверное важнее возможность реконфигурирования опроса -- разные джои, переопределяемые клавиши.

    А насчёт "У тебя получается короче" -- тут как на том меме, где два программиста:
    -- Я украл твой код.
    -- Это не мой.

    Этот пользователь поблагодарил nzeemin за это полезное сообщение:

    parallelno(06.06.2023)

  11. #100

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Я потом переделывал, потому что не работало на реале.
    То как сейчас можно посмотреть тут: https://github.com/nzeemin/vector06c.../asteroid0.asm
    Инициализация:
    Код:
    ; Joystick init
    	mvi	a, 83h		; control byte
    	out	4		; initialize the I/O controller
    	mvi	a, 9Fh		; bits to check Joystick-P, both P1 and P2
    	out	5		; set Joystick-P query bits
    	in	6		; read Joystick-P initial value
    	sta	KEYINT_J+1	; store as xra instruction parameter
    В прерывании:
    Код:
    ; Joystick scan
    	in	6		; read Joystick-P
    KEYINT_J:
    	xri	0		; XOR with initial value - mutable param!
    	cma
    	sta	JoystickP	; save to analyze later
    Затем вот тут уже можно посмотреть как биты джойстика анализируются вместе с клавиатурой: https://github.com/nzeemin/vector06c...oid1.asm#L1648
    я правильно понимаю что ты инициализируешь оба джойстика в Joystick init, но опрашиваешь только один? Если да, то зачем инициализировать два джойстика?

    - - - Добавлено - - -

    Цитата Сообщение от nzeemin Посмотреть сообщение
    parallelno, возможность для оптимизации конечно есть. Но для вас сейчас наверное важнее возможность реконфигурирования опроса -- разные джои, переопределяемые клавиши.

    А насчёт "У тебя получается короче" -- тут как на том меме, где два программиста:
    -- Я украл твой код.
    -- Это не мой.
    Я кстати до сих пор не могу решить есть ли смысл давать пользователю переопределять клавиши перемещения. Это кажется сильно не нужной опцие так как на Векторе есть клавиши стрелок и на джойстике они тоже есть.

Страница 10 из 11 ПерваяПервая ... 67891011 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Биперная музыка на Векторе-06Ц
    от ivagor в разделе Вектор
    Ответов: 352
    Последнее: 29.07.2025, 19:04
  2. Эмулятор "ZX Spectrum 48" на "Векторе-06Ц"
    от Tim0xA в разделе Вектор
    Ответов: 31
    Последнее: 27.12.2022, 21:40
  3. Ответов: 18
    Последнее: 11.04.2021, 10:54
  4. Картинки демок Amstrad на векторе
    от yur в разделе Вектор
    Ответов: 13
    Последнее: 14.03.2016, 08:25
  5. Катинки С64 на Векторе
    от yur в разделе Вектор
    Ответов: 6
    Последнее: 13.03.2016, 15:40

Ваши права

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