User Tag List

Страница 102 из 113 ПерваяПервая ... 9899100101102103104105106 ... ПоследняяПоследняя
Показано с 1,011 по 1,020 из 1128

Тема: ЭТЮДЫ

  1. #1011

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, надо опросить одновременно три клавиши.
    A+K+J
    И вторая комбинация
    D+K+J

    А эта прога не детектит, если A (D) +K нажаты, то нажатие J игнорит.

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

  2. #1012

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    А эта прога не детектит, если A (D) +K нажаты, то нажатие J игнорит.
    На реале всегда так, если зажать некоторые комбинации клавиш - будет читатся что зажат например весь полуряд.
    Это из-за буферизации что-ли (или её отсутствия).
    Электронщики объясняли как-то почему такой баг и даже как-то пытались фиксить.
    Но как всегда говорили непонятно простому смерду, так что лезь в раздел "Железо" и там где про клавиатуры - поройся или запости вопрос.

  3. #1013

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    На реале всегда так, если зажать некоторые комбинации клавиш - будет читатся что зажат например весь полуряд.
    Это из-за буферизации что-ли (или её отсутствия).
    Электронщики объясняли как-то почему такой баг и даже как-то пытались фиксить.
    SpeccyWiki:
    Аппаратно кнопки клавиатуры представляют собой матрицу восемь на пять линий — восемь полурядов по пять кнопок. В зависимости от адреса, использованного при обращении к порту клавиатуры, в младших пяти битах возвращается состояние клавиш одного из восьми полурядов. Такая схема создаёт "эффект матрицы" (matrix effect) — при нажатии двух клавиш (одного полуряда) одновременно с третьей клавишей (в одном столбце с первой) возникает паразитное нажатие в полуряду третьей клавиши, соответствующее столбцу второй. Этот эффект можно ликвидировать размещением диода на каждой клавише.

    Цитата Сообщение от ALKO Посмотреть сообщение
    Да, надо опросить одновременно три клавиши.
    A+K+J
    И вторая комбинация
    D+K+J

    А эта прога не детектит, если A (D) +K нажаты, то нажатие J игнорит.
    Понять как работает прога по приведённому огрызку вообще нереально. Я удивлён что вообще как-то работает ))
    Прежде всего неясно почему таблица берётся со стека, но это ладно может там всё продумано, а дальше ...
    По (hl) вначале читается старший байт порта, затем читается порт, а следующий байт по (hl) инверсное выделение бита клавиатуры. Затем вы кидаете в (_KEYPRESSED) : 0 - не нажата, 1 - нажата, и уходите на адрес обработки который тоже берётся из таблицы.
    Что и как у вас прописано по таблице фиг его знает.
    Показанный элемент может работать корректно только с одной кнопкой, как вы обрабатываете несколько этим куском кода не описывается ))

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

    А пардон ступил, не из таблицы, у вас вызов проги с указанием за вызовом старшего байта порта и выделения бита )))
    Не понятно только почему используется паразитный inc hl за съёмом адреса со стека
    Но то же самое, это только для одной клавиши

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

    Наваял на вскидку, за отсутствие ляпов не поручусь ))

    Код:
    KEYTEST3     pop hl      ; проверка 3-х портов клавиатуры;
                 call KEYTEST_
                jr z,1F
                 inc hl
                 inc hl
                jr 2F
    
    KEYTEST2     pop hl       ; проверка 2-х портов клавиатуры
    1            call KEYTEST_
                jr z,1F
    2            inc hl
                 inc hl
                jr 2F
                 
    KEYTEST      pop hl         ; проверка порта клавиатуры
    1            call KEYTEST_
    2            ld (_KEYPRESSED),a
                jp (hl)
    
    KEYTEST_
                 ld a,(hl)  ; старший байт порта 
                 inc hl
                 in a,(#FE)
                 or #E0
                 cp (hl)    ; проверка нажатия одной или нескольких клавиш в одном полуряде
                 inc hl
                 ld a,1
                ret z
                 xor a
                ret
     
    _KEYPRESSED defw 0
    Применение:

    Код:
          call KEYTEST3
             DB #XX , # YY  ; #XX - старший байт адреса порта, #YY - код одной или нескольких клавиш в полуряде ( бит 0 - клавиша нажата бит 1 -нет )
             DB #XX , # YY
             DB #XX , # YY
          ; дальнейшие инструкции
    
           call KEYTEST2
             DB #XX , # YY
             DB #XX , # YY
         ; дальнейшие инструкции
    
           call KEYTEST
             DB #XX , # YY
        ; дальнейшие инструкции

    Для вашего случая KEYTEST3 не нужен, у вас две клавиши в одном полуряде, только соответственный параметр нужен.

    Да ещё момент, при опросе не стоит в старшем байте порта использовать больше одного нуля. Есть контроллеры PC клавы такие (по крайней мере у меня был) которые понимают либо 0 во всех разрядах сразу, либо только в одном. Поэтому у меня на профике некоторые игры не слушались управления ))
    Последний раз редактировалось Dart Alver; 21.06.2020 в 16:03.

  4. #1014

    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,811
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    386
    Спасибо Благодарностей получено 
    339
    Поблагодарили
    244 сообщений
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    mloop
    
    
        ld bc,49150         ; keyboard row H, J, K, L, Enter
        in a,(c)            ; see what keys are pressed.
        and 31
        ld (storage),a
        
        ld bc,65022         ; keyboard row G, F, D, S, A
        in a,(c)            ; see what keys are pressed.
        and 31
        ld (storage+1),a
        
        ...
        
        jp mloop
        
    storage
        defb 1,2
    чисто три строчки, для примера. В цикле сканируем полурядЫ и результат в буфер заносим, а хоть все 40 кнопок. Потом парсим буфер, че туда упало. Не ?
    Profi v3.2 -=- Speccy2010,r2

  5. #1015

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Потом парсим буфер, че туда упало. Не ?
    для сипаскальщиков это разрыв шаблона

    не понимаю что мешает открыть
    https://worldofspectrum.org/faq/refe...kreference.htm
    и делать тупое in, and, jp z
    Последний раз редактировалось NEO SPECTRUMAN; 21.06.2020 в 17:37.

  6. #1016

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    не понимаю что мешает ... делать тупое in, and, jp z
    Кстати да, в конце-концов если от пп не требуется особой универсальности то достаточно:
    Код:
    LD A,#FD
    IN A,(#FE)
    AND 1		; A
    RET NZ
    LD A,#BF
    IN A,(#FE)
    AND %1100	; K и J
    RET
    На выходе - флаг Z будет установлен если нажаты AKJ

  7. #1017

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    asm rulezz )

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

    NEO SPECTRUMAN(22.06.2020)

  8. #1018

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    asm rulezz )
    именно так

  9. #1019

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Йпн"№К№"Кй пипец

    нашел у себя ошибку
    которая успешно скопипастилась раз 30
    если не больше по одноподобному коду

    которая выглядела вот так

    and $00000010

    вместо

    and %00000010


    ИЧСХ изза каких то уродов которые по привыкали писать цифры в виде 0х000000000000000000000000000000001
    компилятору совершенно пофиг что в 1 байт пытаются засунуть 4

    и он молча молчит
    а код не работает...

    а нашлось чисто случайно



    не совсем этюды конечно...

    но как напоминание возможных граблей вполне может кому нить пригодитсо
    Последний раз редактировалось NEO SPECTRUMAN; 04.07.2020 в 15:27.

  10. #1020

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    писать цифры в виде 0х000000000000000000000000000000001
    Эти ноги растут из Си вроде как. Постоянно натыкаюсь, даже в более-менее внятных сорцах.
    Время было такое, все программеры волей-неволей были такими уродами, только не совсем ясно откуда такой синтаксис взялся, это (как и всё на сях) обусловлено какими-то дремучими аппаратными фичами, которые давным-давно уже не используются (а в то время казалось что навечно и во веки веков будут основой, ну как например двоичная система - давно уже 1 ячейка памяти может хранить не только 0 или 1, а до четырёх состояний, в зависимости от заряда на затворе полевика, но всё равно всё это преобразуется сперва в двоичный вид и уж потом по возрастающей - вплоть до чисел с плавающей точкой...)

Страница 102 из 113 ПерваяПервая ... 9899100101102103104105106 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

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