Да форум глючит.Тут во нашёл ошибку в драйвере клавиатуры. Во втором методе при опросе порта В возвращается код с портов А и С. Подчёркиваю и. Значит код ответа должен состоять из 8 + 4 битов. А у тебя стоит scan_out (7 downto 0) и scan_out (3 downto 0) соответственно записываются в порты А и С. Должно быть во втором случае быть такое:
Код:
dataI <= "0000" & scan_out (11 downto 8);

Т.е. порту а присваиваются младшие 8 бит, порту с - старшие 4 бита переменной scan_out. По крайней мере в драйвере клавиатуры вырабатываются 12 бит кода ответа.