UART w Z180.

  Z180 ma UART i nie trzeba budować dodatkowego modułu. Wystarczy wpisać odpowiednie wartości do kilku rejestrów SFR.

UART na złączu DIN5
Przygotowanie do transmisji danych.


Opis rejestrów i wszystkich komponentów procesora znajdziemy w dokumentacji.  Najtrudniej jest ustawić właściwą szybkość transmisji, bo zależy ona od CLK, a właściwie od PHI. Z180 po resecie dzieli CLK przez dwa, ale można to zmienić ustawiając najstarszy bit rejestru CCR. Można też podwoić CLK, ale tylko w niektórych wersjach Z180. Jeżeli sami programujemy nasz komputer, to prawdopodobnie wiemy, co się w nim dzieje, ale różnie z tym bywa. Najlepiej zmierzyć PHI częstościomierzem, analizatorem logicznym lub oscyloskopem.

Obliczenia BRG
Obliczenia warto zlecić komuś innemu.


Na podstawie zmierzonej częstotliwości taktowania możemy wyliczyć potrzebne stałe. Tu znowu możemy napotkać problem, bo nie wszystkie procesory mają BRG. Jest on niezbędny żeby uzyskać jakąś standardową szybkość transmisji z 4 MHz. Jeżeli nasz procesor nie ma litery "S" lub "L", to możemy użyć dodatkowy generator (np. 6.144 MHz. str. 143), albo wybrać niestandardową wartość baud rate. Drugie urządzenie trzeba również tak zaprogramować.

CA80-boot też się zmieścił.
Moduł RTC był zbyt gruby.


Udało mi się kupić Z8S180, więc wystarczyło policzyć korzystając z wzoru (str. 144). Pierwsze próby transmisji robiłem już w 2019 roku i opisałem je na Elektrodzie. Odkrywałem wtedy "Amerykę", bo wracałem do elektroniki po ponad dwudziestu latach. Budowałem różne "pajęczyny", potem korzystałem z płytek innych konstruktorów, aż zaprojektowałem CA180-mini. Nie przewidziałem tam miejsca na dodatkowy generator i ledwie zmieściłem złącza UART, ale udało się. W połączeniu z bootloaderem "CA80-boot" zmieściło się w obudowie Elwro144. Wtedy wpadł mi do głowy pomysł na wykorzystanie UART-u. Opracowałem w tamtym czasie również "magnetofon", czyli przystawkę CA80-flash. Znacznie dłużej niż projekt sprzętu trwało pisanie programu. (Właściwie trwa nadal.) Kiedy kolega @nadolic (na Elektrodzie znany jako @Roman98) podpowiedział mi zastosowanie wyświetlacza LCD do wyszukiwania zapisanych programów, umieściłem CA80-mini w obudowie magnetofonu. Miejsca w środku było dużo, więc zmieścił się zestaw z bootloaderem i flash, a zamiast kasety - LCD. Na wyświetlacz i klawiaturę zabrakło miejsca... Dodałem więc ekspander i bootloader przetwarzał sygnały z ZW na kody ASCII i wysyłał je do terminala przez UART. Obsługa klawiatury wirtualnej już tam była. Żeby wszystko wyglądało zgodnie ze stanem końca lat osiemdziesiątych, urządzenia połączyłem przewodem magnetofonowym z wtykami DIN. Tylko Rx, Tx, GND i +5V. Kiedy wszystko razem zadziałało, nagrałem film. 


Program dla Z180 ma około 100 linii (z komentarzami 140). Składa się z ustawienia parametrów UART i pętli głównej, która odbiera zawartość wyświetlacza i wysyła kody klawiszy. Cała magia dzieje się w magnetofonie. 

Fragment programu terminala.
Dane z bufora UART przepisywane do BWYS CA80.

Program jest prosty z wyjątkiem procedury dispRefresh, a właściwie jej podprogramu pobierzByte. Zastosowałem tam sztuczkę z wywołaniem jej fragmentu half. Nie jest to mój wynalazek, bo podobne konstrukcje można znaleźć w monitorze CA80 i innych programach z tamtych czasów. Taki sposób pisania programu jest niezgodny z dzisiejszymi standardami, które zalecają kodowanie jak najczytelniejsze dla wszystkich. Zwłaszcza w językach wyższego poziomu (np. C) lepiej jest każdą operację zapisać w nowej linii, a każdą złożoną funkcję podzielić na prostsze. Kompilator i tak zoptymalizuje kod i być może zastosuje jakieś "sztuczki", ale nie musimy się tym martwić. Czterdzieści lat temu były inne priorytety - każdy bajt był na wagę złota. Zwłaszcza kiedy trzeba było zmieścić się w dwóch kilobajtach. CALL do części podprogramu oszczędza cztery bajty - drugi CALL i RET. Czasem zamiast drugiego CALL stosowało się JP (lub JR), co powodowało zaoszczędzenie jednego bajta (RET) lub dwóch w przypadku skoku relatywnego. 

Komentarze

Popularne posty z tego bloga

Uruchamiamy CA80 na RCbus.

Magnetofon CA80.