Вход

Просмотр полной версии : Процедура против залипания клавиатуры



Black Cat / Era CG
05.12.2017, 23:26
Суть такая. Хочется написать такую процедурку, которая будет вызываться сразу после нажатия любой клавиши, и будет крутить цикл, пока клавиша не будет отпущена. Вроде просто, но чета не выходит...
Подскажите?

goodboy
05.12.2017, 23:47
делай два вызова, один крутится пока что-то ненажалось, второй крутится когда что-то нажато


loop1 call keys
jr nz,loop1
loop2 call keys
jr z,loop2

надеюсь про xor a; in a,(#fe) + отброс ненужных битов ты знаешь

иногда отсутствие такого варианта реально бесит.
например в R-TYPE для выбора клавиш управления надо нажать в меню ENTER,
если последняя выбранная кнопка (смена оружия) будет ENTER
игра её назначит, быстро выйдет в меню и снова будет переход в режим выбора клавиш

DenisGrachev
06.12.2017, 04:17
Все эти беды от "дребезга" клавиатуры, нужен "антидребезг" или deBounce по буржуйски, типо того что в ПЗУ :) Я пользуюсь таким, из z88dk 63248
Нужно только настроить параметры под себя KeyDebounce, KeyStartRepeat, KeyRepeatPeriod

SfS
06.12.2017, 06:41
Полноценный обработчик клавиш с антидребезгом.

Для ZX-клавиатуры. https://github.com/salextpuru/sdcc-noinit/blob/master/libsrc/libzxkbd/
Для PS/2-клавиатуры. https://github.com/salextpuru/sdcc-noinit/tree/master/libsrc/libps2


там все на АСМе в основном, но фронтенд на С.

Если подойдёт, конечно. Там нет обработки одновременного нажатия нескольких клавиш. Только капсы и шифты.

Раскладка KOI8-R. Таблички легко поменять.

Примеры-тесты рядом:
https://github.com/salextpuru/sdcc-noinit/blob/master/apps/test-zxkbd
https://github.com/salextpuru/sdcc-noinit/tree/master/apps/test-ps2kbd