Arduino вместо джойстика Денди: ковыряния
Подготовив стенд, я начал ковырять трансляцию нажатий джойстика Сеги на Денди.

Сначала сделал схему с двумя прерываниями, для Latch и Clock, и записью данных через digitalWrite. В принципе оно как-то даже заработало, но со сдвигом на бит. И что бы я не делал, оно, во-первых, работало неправильно, а во-вторых, нестабильно.
Я подумал, что не хватает скорости digitalWrite и переделал на прямую работу с портом. Стало очень значительно хуже! Если раньше работало хоть как-то почти адекватно, теперь оно стало как будто едва нажиматься. Почему — я так и не понял.
Я предположил, что не хватает скорости реакции на прерывание от линии Clock. Сделал трюк: по срабатыванию прерывания Latch начинается глухой цикл на 8 итераций с ожиданием импульсов Clock через while и таймаутом на случай, что что-то пойдёт не так.
Это сработало! Но… не очень стабильно. Раз в секунду или около того последовательность бит как бы сбивалась, и если танк в Battle City ехал вверх, он на один кадр дёргался вниз. Сколько бы я не бился, и не улучшал этот код, решить проблему я не смог. Удалось добиться почти стабильной работы, когда этот сбой случается редко, но осталось это самое почти. А мне нужен идеально надёжный результат.