Код:
ktest  ld c,a              ; код клавиши помещаем в c.
       and 7               ; оставляем только биты d0-d2 для получения номера ряда.
       inc a               ; прибавляем единицу, чтобы значение стало от 1 до 8.
       ld b,a              ; помещаем в b.
       srl c               ; делим c на 8,
       srl c               ; для того, чтобы найти позицию внутри ряда.
       srl c
       ld a,5              ; в ряду 5 клавиш.
       sub c               ; вычитаем из кода значение позиции.
       ld c,a              ; результат помещаем в c.
       ld a,254            ; старший байт номера порта из которого будем читать.
ktest0 rrca                ; с помощью сдвига вычисляем старший байт адреса порта.
       djnz ktest0         ; повтор, пока не найдем соответствующий ряд.
       in a,(254)          ; читаем порт (a=старший байт, 254=младший).
ktest1 rra                 ; сдвигаем биты в прочитанном результате.
       dec c               ; счетчик цикла.
       jp nz,ktest1        ; повторять пока нужный нам бит не окажется в флаге переноса.
       ret