Цитата Сообщение от S_V_B Посмотреть сообщение
На реале все правильно работает, с него и считывал..

Код:
; Подпрограмма: Опрос клавиатуры; клавиша есть: Z=0, клавиши нет: R0=0 и Z=1
    MOV    #PKEY/2,@#177010           ;ячейка PKEY в памяим ЦП для кода клавиши
    TSTB    @#177700 ; тестировать регистр состояния клавиатуры
    BPL    77$ ; нет символа => выходим

    TSTB    @#177702
    BMI    777$
    MOVB    @#177702,R0 ; поместить полученный скэн-код в R0
Ну кто же так делает. Контроллер клавиатуры сканирует матрицу клавиш каждые 64 мкс. И счетчик прокручивается в регистре 0177702. Как только зарегистрировано событие нажатия или отжатия клавиши, то значение в регистре 0177702 замораживается, а в регистре 0177700 устанавливается признак готовности (бит 7). Как только регистр 0177702 считан, то в регистре 0177700 сбрасывается признак готовности и счетчик начинает считать дальше. Поэтому если сразу же после этого прочесть регистр 0177702, то там оказывается уже значение на один больше. Командой TSTB @#177702 вы уже прочитываете регистр данных клавиатуры, потому следующая команда MOVB @#177702,R0 уже читает неверные данные.
Так что надо делать так:
Код:
; Подпрограмма: Опрос клавиатуры; клавиша есть: Z=0, клавиши нет: R0=0 и Z=1
    MOV    #PKEY/2,@#177010           ;ячейка PKEY в памяим ЦП для кода клавиши
    TSTB    @#177700 ; тестировать регистр состояния клавиатуры
    BPL    77$ ; нет символа => выходим

    MOVB    @#177702,R0 ; поместить полученный скэн-код в R0
    BMI    777$
Ну и если вы таким образом опрашиваете клавиатуру, то флаг разрешения прерывания должен быть сброшен, ну а при завершении программы установлен.

В UKNCBTL работает, потому что там эмуляция клавиатуры максимально приближена к оригиналу.