Цитата Сообщение от freddy Посмотреть сообщение
А при этом еще экран VGA програмно сможет перерисовывать 60 раз в секунду?
И не просто, а осмысленно из видеобуфера и памяти знакогенератора... И еще с клавы принимать символы...
Для Xmega минимальный код выдающий на 8 ног атрибуты и на другие 8 ног данные для сдвигового регистра(еще требуется буферный регистр для синхронизации изменения атрибутов и начала сдвига) требует 8 тактов на символ:
LD ATTR,[PTR++]
LD CHAR,[PTR++]
LD BITS,FONT_LINE_N[CHAR]
OUT VPORTA,ATTR
OUT VPORTC,BITS
при этом символы с атрибутами и шрифт должны сидеть в памяти. Если хочется использовать шрифт из flash, то потребуется тормозная команда LPM и вместо 8 тактов мы будем тратить 9. Чтобы вернуться к 8 тактам, можно вывод атрибутов поручить DMA, при этом сделать пересылку DMA сможет параллельно с LPM(если верить документации, но нужно проверять!) Огранизовав код следующим образом(таймер программируется так, чтобы пересылка через DMA шла параллельно с LPM):
LD CHAR,[PTR++]
LPM BITS,FONT_LINE_N[CHAR]
LD CHAR,[PTR++]
OUT VPORTC,BITS
LPM BITS,FONT_LINE_N[CHAR]
FREE 4 TICK
OUT VPORTC,BITS
мы получим на каждые 2 символа дыру в 4 такта, в которую вполне влезет код, принимающий данные по UART и складывющий в циклический буфер, при этом потерь не будет даже на скорости 4Mbps, хотя на обработку времени конечно не останется.
Что касается PS/2, то если частота меньше строчной(<31кГц к примеру), момент изменения CLK и DATA вполне можно захватить таймером, а в конце строки разбираться чего там произошло.

Цитата Сообщение от freddy Посмотреть сообщение
И еще терминал эмулировать...
Соберите схемку сами, пощупайте ее, там три детальки всего... Потом нам расскажите Ваши впечатления от ее работы.
Если вернуться к более реальным скоростям, то читая по одному байту из UART в конце каждой строки можно не напрягаясь принимать по 20-30КБайт/с и складывать в буфер. Если полная длина строки 800 точек при 640 видимых, то у нас вполне достаточно времени для обработки большей части команд "на лету", а сложности будут только с командами выполняющими очистку или заполнение больших областей, для них всё равно нужно иметь какой-то механизм чтобы сообщить о том, что терминал пока не готов принимать новых команд.