19.12.2008, 19:09
общий
это ответ
Здравствуйте, Соболев Сергей Владимирович!
Решение с прерываниями.
Приложение:
RD #27 ; адрес обработчика прерывания клавиатуры
WR 100 ; запишем по адресу обработчика IRQ0
RD #0 ;начальный адрес куда будем писать русские символы
wr R0 ;сохраним
rd #64 ;начальный адрес куда будем писать цифры
wr R1 ;сохраним
RDI #101 ;команда очистки буфера
out 1 ; для клавиатуры
out 11 ; и дисплея
RDI #102 ; команда сброса ошибки
out 1 ; для клавиатуры
out 11 ; и для дисплея
RDI #11 ; команда разрешения МВУ и работы по прерыванию
OUT 1 ; для клавиатуры
RDI #10 ; команда разрешения МВУ
out 11 ; для монитора без автоувеличения адреса
RDI #103 ; команда установки посимвольного ввода
out 1 ; для клавиатуры
EI ; разрешаем прерывания от устройств (клавиатуры)
LOOP: ; пустой цикл
NOP ; вся работа в прерывании
NOP
JMP LOOP
INT0:IN 0 ; считываем код с клавиатуры
wr R2 ; сохраним
sbi #48 ; <'0'
js RESET ; игнорируем, на сброс клавиатуры
rd R2 ; код
sbi #58 ; >'9'
jns CMPRUS ; проверим на русские буквы
RD R1 ; цифру выводим в нижней части экрана, в R1 адрес, куда писать
out 13 ; в регистр адреса
adi #1 ; инкремент адреса
wr R1 ; сохраним
rd R2 ; код
out 10 ; на дисплей!
jmp RESET ; на сброс клавиатуры
CMPRUS:RD R2 ; код, проверим на > 128 - там русские буквы
SBI #128 ; сравним со 128
JS RESET ; < 128 игнорируем
RD R0 ; русские буковки выводим в верхней части экрана, в R0 адрес, куда писать
out 13 ; в регистр адреса
adi #1 ; инкремент адреса
wr R0 ; сохраним
rd R2 ; код
out 10 ; на дисплей!
RESET:RDI #101 ; команда сброса
out 1 ; в клавиатуру
RDI #103 ; команда установки посимвольного ввода (сбрасывается при сбросе)
out 1 ; в клавиатуру
IRET ; возврат из прерывания
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен