1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
нажатие кнопок..., считывание нажатия в цикле без его ост.
я хотел бы знать как в цикле фиксировать нажатие кнопки не останавливая при этом цикл ... т.е. например в теле цикла х имзеняется по форуле x:=x+1; ... нажал что нада а цикл всё идёт и ёдет ... но уже x:=x+2; ... вот так вот ...
procedure KbdHandler; interrupt; begin {Если пришли сюда, то была нажата клавиша. Здесь определяется нажатие на клавишу и ее скэн-код записывается в какую-либо глобальную переменную, после чего вызывается "настоящее" прерывание 9Н} end;
Дополню: 1) скэн-код и флаг нажатия-отпускания можно получить из порта $60 (как значение элемента псевдомассива Port, e. g. x := Port[$60]). Младшие 7 бит полученного значения будут разны скэн-коду, а старший 7-й бит равен 0, если клавиша нажата и 1 - если отпущена; 2) вызывать "настоящий" обработчик Int 9 не всегда имеет смысл - например, в том случае, когда мы сами хотим организовать буферизацию событий клавиатуры (в этом случае необходимо перед выходом из обработчика сбрасывать контроллер прерываний: Port[$20] := $20).
Цитата
P.S. А для чего это нужно, более конкретно можно описать? Возможно есть другой, более безопасный способ...
Да, это важно. Во многих случаях можно обойтись без подобных "махинаций" c IRQ1, используя, например, службы BIOS.