Опросить клавиатуру через порты достаточно легко. Записывая поочерёдно 0 в один из разрядов порта А контроллера ВВ55, из порта В можно читать состояние одного ряда клавиш.
Если ничего не нажато, то возвращаются единицы. Если нажато, то на этих битах будут нули.
Например записав 0xFE по адресу 0x8000 опрашиваться будет ряд номер ноль. Прочитав байт из адреса 0x8001 получим состояние всех клавиш в этом ряду. В принципе, на Спектруме опрос происходит так же, только там порты не в памяти.
Записав в порт А 0x00 можно опросить сразу все линии и узнать нажата ли хоть какая-то клавиша.
Код:
порт А вход
0x7F 0xBF 0xDF 0xEF 0xF7 0xFB 0xFD 0xFE
7 6 5 4 3 2 1 0
SPACE ВW ОO ГG ?/ 7' DOWN 7
Ч^ ЖV НN ФF .> 6& RIGHT F4 6
Щ] УU МM ЕE -= 5% UP F3 5
Э\ ТT ЛL ДD ,< 4$ LEFT F2 4 порт В выход
Ш[ СS КK ЦC ;+ 3# ЗБ F1 3
ЗZ РR ЙJ БB :* 2" ВК АР2 2
ЫY ЯQ ИI АA 9) 1/ ПС СТР 1
ЬX ПP ХH Ю@ 8( 0 ТАБ \ 0
- - - Добавлено - - -
Если порт А клавиатуры перепрограммировать на ввод, то с него будут читаться нули, если клавиши не нажаты. При нажатии на клавишу появятся единица в каком-то разряде, но программно можно будет определить только в каком ряду эта клавиша. И, в принципе, больше ничего страшного не случится.
Хуже будет если порт В перепрограммировать на вывод.