Генерация матрицы клавиатуры
Занимался я как-то (года 4 назад) созданием контроллера PS/2 клавиатуры на базе второго спека ;-). Контроллер был без-wait-овый за счет чтения кода клавиши основным спеком прямо из памяти спека-контроллера (да,я, наверное, извращенец :) ). Следовательно, стояла задача генерации 256-байтной таблицы клавиатуры. Т.е., 0й байт - то что основной спек получит при чтении из порта #00FE, 1й - #01FE... И т.д..
Если кто не знает, каждый байт в этой таблице рассчитывается как AND тех рядов клавиатуры, номера которых в номере данного байта нулевые.
Т.е значение ячейки с номером #D6= %11010110 равняется ANDу 0го,3го и 5го рядов клавиатуры. Значение последней ячейки - порта #FFFE, есс-но = #FF
Так вот, предлагаю (в качестве этюда, чтоли), написать процедуру для рассчета такой таблицы. Естесственно хочется, чтобы процедура была как можно быстрее. Входные данные - 8 байт (ряды клавы, имеют значения только 5 младших бит, но это вроде как побоку), выход - 256 байт. Больше ограничений - никаких.
P.S. Помнится у меня получился результат около 7000 тактов. Сегодняшние раздумия позволяют вроде как бы сократить это число до ~4500 тактов (хотя я точно считал и вообще не проверял свои мысли).
Дерзайте,ежели кому интересно :-)