Приключения с прошивкой мотороллы достигают невиданного размаха.
— Перекомпилирован dosbox с поддержкой отладочного вывода последовательно порта. Увидел, какие байты пытается отослать программа. С тем, что я вижу на логическом анализаторе, не соотносится никак. Следовательно проблема в нестандартном битрейте.
— Изучены внутренности досбокса, на предмет того как он инициализирует порты. Стало понятно, что досбокс инициализирует порты используя только стандартные битрейты, используя классические функции tc*. В недрах интернета я нашел упоминание что нестандартный битрейт может быть применен классическими функциями лишь для FTDI чипов. Что конечно странно. Ибо нестандартная скорость не применяется даже для аппаратного RS-232. Плюс у людей шьется через аппаратный последовательный порт, а у меня нет. По итогу я принял решение переписать код досбокса, на использование расширенного интерфейса конфигурации порта, используя ioctl запросы TCGETS2 и TCSETS2 для termios2.
В процессе переписывания натолкнулся на дичь. Запрашиваю конфигурацию порта с помощью TCGETS2 в dosbox — получаю в ответ ошибку. Делаю то же запрос в своем приложении — все отлично читается. По итогу ковыряния с gdb, выяснилось что при запросах из досбокс и моего приложения, адреса регистра TCGETS2 разные! Что это за ересь я пока не понимаю.