Собственно UART - невеликий и не особо ужастный - спасибо
Только у меня компилятор - gcc (не хочу собирать чем-то отдельным, потом и для stm и для всего можно будет в некоторой степени переиспользовать), только кристалл - Atmega168, и провод UART - ёк, как оказалось!
Итого - другой ассемблер, другие имена портов и бит, порт в out не лезет, еле-еле собралось.
Собрался и молчит. Методом вдумчивого чтения обнаружил пропущенные строки. Вставил - не собирается.
"Error: invalid operands (*ABS* and *UND* sections) for `<<'"
Вот совершенно неочевидно с наскоку, что такая ошибка означает, что в строке
LDI R16, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)
ассемблеру неизвестно было, что такое RXEN (а так же TXEN и так далее), а нужно RXEN0, TXEN0 и т.д.
Собрал - выводит EE и всё... потом нашёл, что по запарке вместо RJMP LOOP оставил NOP - а там ниже как раз функция вывола - она ещё раз и выводит... напоследок.
Добавил чтение и залип на том, что терминал ничего не передаёт контроллеру. Попробовал сделать тупо loop как раньше - а нету! Оказывается, выход не выход, а какая-то фигня, зато я фигню подтягивал не к плюсу, оказывается, а к настоящему выводу - то-то у меня тогда получилось. Перекоммутирую.
В процессе пару раз завесил usb-uart, переполюснул usbasp и несколько раз матюгнулся.
Подолбив по клавиатуре и узрев "E0E0E9E9E9EEEuEuEuE8E9E9E0E" иду праздновать в бар!
Завтра можно понимать и переосмысливать.
(А вот RGB-лента, которую я купил, оказалась нифига не цифровая, значит и светодиодик характерный, по которому я её распознал, тоже тупой с шансами).