AT-Клавиатура

При программировании AT-клавиатуры следует помнить, что последовательный порт имеет FIFO буфер на 3 байта. После того, как принят и обработан один байт, стоит проверить нет ли еще принятых байтов и возвращаться из программы обработки клавиатуры только если этих байтов нет.

Программа инициализации клавиатуры и считывания байта.

Процедура инициализации клавиатуры:

COM_A   EQU     19h
DAT_A   EQU     18h
KBD_INIT:
        LD A,0          ; установка портов режима
        OUT (COM_A),A   ; в соответствии с описанием
        LD A,1          ; последовательного порта Z84C15
        OUT (COM_A),A
        LD A,0
        OUT (COM_A),A
        LD A,3
        OUT (COM_A),A
        LD A,0C1h
        OUT (COM_A),A
        LD A,4
        OUT (COM_A),A
        LD A,5h
        OUT (COM_A),A
        LD A,5
        OUT (COM_A),A
        LD A,062H
        OUT (COM_A),A
        RET

Процедура считывания байта с клавиатуры:

READ_KBD:              ; считывание с клавиатуры
        IN A,(COM_A)
        BIT 0,A        ; проверить наличие байта
        SCF            ; установить флаг C
        RET Z          ; и вернуться, если не было байта
        IN A,(DAT_A)   ; считать байт
        AND A          ; сбросить C
        RET            ; и вернуться

Особенности спектрумовской реализации (доп бит для F1..F10)