Samego programu MicroCap nie znam. Ale myślę, że mogę trochę doradzić odnośnie samej logiki rozwiązania.
Wejście x nie wchodzi na rejestr przesuwny. To jest osobne wejście sterujące. Na dalszych schematach wejście rejestru oznaczę jako d_in.
Mamy zmieniać kierunek, więc musimy mieć wybór czy na wejście danego rejestru wchodzi wartość z rejestru lewego, czy prawego. Logiką która to robi jest tak zwany multiplekser. Na podstawie wejścia sterującego x wybiera czy na wyjściu będzie wejście a, czy b (nam wystarczy z dwoma wejściami "danych" i jednym sterującym).
Mimo, że na pierwszy rzut oka nie wygląda, multiplekser jest tak naprawdę zwykłą funkcją logiczną i można go złożyć z bramek. Jako podpowiedź załączam jego tablicę prawdy:
A jak już mamy multiplekser, to możemy stworzyć rejestr przesuwający w obie strony. Dla mnie bardziej intuicyjne było narysowanie przerzutników odwróconych o 90 stopni w kierunku przeciwnym do ruchu wskazówek zegara:
Pozostaje zamienienie multiplekserów na bramki logiczne realizujące tą samą funkcję, oraz ustalenie gdzie jest prawo, a gdzie lewo 🙂