Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 23 ноя 2017, 18:55

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Буферизованный опрос клавиатуры
СообщениеДобавлено: 26 ноя 2014, 12:15 
Не в сети
Аватара пользователя

Сообщения: 843
Откуда: Днепропетровская обл.
Реализовал для игры Dark Woods (и, соответственно, для ZXDev) буферизованный опрос клавиатуры на прерываниях (в режиме IM 2). Обработчик прерываний заносит коды нажатых клавиш в кольцевой буфер, а процедура опроса их извлекает. Переполнение буфера обрабатывается таким способом, что нажатые ранее клавиши теряются. Здесь закономерно считаем, что более актуальны клавиши, нажатые позднее. Эта стратегия кажется более удачной, чем игнорирование всех клавиш, нажатых после переполнения буфера (как в контроллере клавиатуры IBM PC).

Идея кольцевого буфера с двумя указателями на чтение и запись взята из книги Никлауса Вирта «Проект Оберон. Разработка операционной системы и компилятора» и использована мною также в обработчике нажатий клавиш для Java ME (там коды заносятся в буфер и извлекаются из него в разных потоках исполнения).
Код: "OBERON"
  1. MODULE TestInpBuf; (*$MAIN*)
  2. IMPORT B := Basic, Input, Timer;
  3.  
  4. VAR
  5. key: Input.Key; av: SHORTINT;
  6.  
  7. BEGIN
  8. B.Init; B.CLS; B.IM2PROC(Input.RunMe50Hz);
  9. B.PRSTR("PRESS KEYS SO MANY AS POSSIBLE!"); B.PRLN;
  10. Timer.Delay(500); (* 1/50 сек. тиков, а не мс *)
  11. B.AT(0, 0); B.PRINT(Input.Available()); B.PRLN;
  12. WHILE Input.Available() > 0 DO B.PRCHAR(Input.Read()) END;
  13. B.PRLN;
  14. REPEAT
  15. av := Input.Available();
  16. B.AT(0, 0); B.PRINT(av); B.PRSTR(" ");
  17. UNTIL av = 8;
  18. B.AT(10, 10);
  19. WHILE Input.Available() > 0 DO B.PRCHAR(Input.Read()) END;
  20. LOOP END;
  21. END TestInpBuf.
Первый цикл опроса показывает как обрабатываются клавиши, нажатые уже при полном буфере. Второй просто до заполнения.

Тема «Процедура опроса клавиатуры» на zx.pk.ru


Вложения:
TestInpBuf.tap [966 байт]
Скачиваний: 603
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB