Autor Wątek: 128K, RS232 i... myszka  (Przeczytany 946 razy)

trojacek

  • *****
  • Wiadomości: 4407
  • Miejsce pobytu:
    Warszawa
128K, RS232 i... myszka
« dnia: 2018.09.18, 07:10:51 »
Tak sobie siedzę i myślę, że skoro 128-mki mają port RS232, to nie powinno być problemu z wpięciem myszki PS/2 przez adapter PS/2-RS232. Próbował ktoś? A może jest jakiś soft do tego?

pear

  • Administrator
  • *****
  • Wiadomości: 4915
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: 128K, RS232 i... myszka
« Odpowiedź #1 dnia: 2018.09.18, 08:07:11 »
W ZX 128 ten port RS-232 to w zasadzie jest tylko konwerter poziomów. Całą transmisję odwala "na piechotę" CPU :(
ZX/Enterprise/CPC/Robotron/C128D

Tygrys

  • Administrator
  • *****
  • Wiadomości: 3834
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: 128K, RS232 i... myszka
« Odpowiedź #2 dnia: 2018.09.18, 09:28:22 »
.. a to tego to nie DB9 tylko 'brytyjski zapomniany standard wtyczek telefonicznych'.
Cieżko coś sensownego na tym zrobić, niestety. Jest to podpięte do AY który robi jako I/O.

trojacek

  • *****
  • Wiadomości: 4407
  • Miejsce pobytu:
    Warszawa
Odp: 128K, RS232 i... myszka
« Odpowiedź #3 dnia: 2018.09.18, 11:30:03 »
W ZX 128 ten port RS-232 to w zasadzie jest tylko konwerter poziomów. Całą transmisję odwala "na piechotę" CPU :(

Owszem, ale ma wsparcie w Basicu 128, więc gotowce w ROM są. Mniejsza o to, że robi bit banging.

.. a to tego to nie DB9 tylko 'brytyjski zapomniany standard wtyczek telefonicznych'.
Cieżko coś sensownego na tym zrobić, niestety. Jest to podpięte do AY który robi jako I/O.

To mnie naprowadziło na temat - patrzyłem na spiderową płytkę, którą zrobił skoti, i w sumie nic by nie kosztowało, by z portu AY zrobić od razu wyjście na PS/2 - czyli bez konwersji napięć.
BTW, niektóre toastracki jako RS232 mają DB9 zamiast złącza BT.

steev

  • *****
  • Wiadomości: 834
  • Miejsce pobytu:
    inode 42
Odp: 128K, RS232 i... myszka
« Odpowiedź #4 dnia: 2018.09.18, 12:24:20 »
Według specyfikacji, PS/2 nadaje z częstotliwością 10 - 16.7 kHz.
Czyli gdzieś pomiędzy dwoma standardowymi prędkościami.
Pytanie, czy te basicowe procedury są na tyle elastyczne, by to załapać.
Machines should work. People should think.

trojacek

  • *****
  • Wiadomości: 4407
  • Miejsce pobytu:
    Warszawa
Odp: 128K, RS232 i... myszka
« Odpowiedź #5 dnia: 2018.09.18, 14:04:49 »
Pecetom jakoś się to udaje, choć tradycyjny UART ma bardzo ściśle określone częstotliwości zegara.

pear

  • Administrator
  • *****
  • Wiadomości: 4915
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: 128K, RS232 i... myszka
« Odpowiedź #6 dnia: 2018.09.18, 14:50:20 »
Czy to nie było przypadkiem tak, że część myszy w "okresie przejściowym" obsługiwała dwa protokoły RS-232 i PS/2 ?
Przelotka z jednego gniazda na drugie niczego poza połączeniami elektrycznymi nie wnosi, a protokoły jednak się trochę różnią.
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 4407
  • Miejsce pobytu:
    Warszawa
Odp: 128K, RS232 i... myszka
« Odpowiedź #7 dnia: 2018.09.18, 15:20:57 »
Raczej nie, nie spotkałem się, by któraś mysz PS/2 nie chciała działać ze starym kompem przez przejściówkę z RS232. To musi być protokół całkowicie zgodny z RS-232.

I niby jest to osiągalne, bo nawet stare kompy (od 386SX w górę, a może i wcześniejsze) miały tryb 115.2 kbps, czyli ich UART potrafił wystarczająco szybko pracować. To pewnie tylko kwestia dobrania dzielnika zegara (standardowo kwarc 1.8432 MHz, najmniejszy podzielnik wynosi 16).

Zadeklarowana dla PS/2 częstotliwość zegara 10.0–16.7 kHz odpowiada prędkościom z przedziału 7–12 kbit/s, czyli dość typowa prędkość 9600 bps wystarczy. 128K potrafi pracować z przepływnością do 19200 kbps i zapewne akceptuje też rozmaite wartości pośrednie między 9600 a 19200 (ale to jest do sprawdzenia).

Zastanawia mnie, jak jest dokonywana konwersja między RS232 pod względem napięć (+/-12V) a PS/2 (0/5V) i organizacji (RX/TX vs pojedyncza linia DATA). Czy po prostu myszki "wytrzymują" wyższe napięcia?

steev

  • *****
  • Wiadomości: 834
  • Miejsce pobytu:
    inode 42
Odp: 128K, RS232 i... myszka
« Odpowiedź #8 dnia: 2018.09.18, 15:32:50 »
PS/2 To jest protokół częściowo zgodny z RS232 (8-1-1 w kierunku urządzenie -> komputer)
Co o niczym nie świadczy - mam w szufladzie klawiaturę USB której sterownik po podpięciu na linie danych pullupów przełącza się wewnętrznie w tryb PS/2.
Nie widzę powodów dla których kontroler myszki też nie mógłby się przełączać :)
Tak czy inaczej, mysz iklawisze PS/2 działają jako master i to one dyktują warunki.
Biedny Z80 musiałby cały czas siedzieć w pętli i sprawdzać czy myszka nie ma ochoty przypadkiem porozmawiać :)
Machines should work. People should think.

pear

  • Administrator
  • *****
  • Wiadomości: 4915
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: 128K, RS232 i... myszka
« Odpowiedź #9 dnia: 2018.09.18, 15:47:20 »
Aż tak źle nie jest. Transmisję w PS/2 inicjuje slave, więc musi czekać tylko na odpowiedź.
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 4407
  • Miejsce pobytu:
    Warszawa
Odp: 128K, RS232 i... myszka
« Odpowiedź #10 dnia: 2018.09.18, 16:05:31 »
Tak czy inaczej, mysz iklawisze PS/2 działają jako master i to one dyktują warunki.

Nie do końca. Szyna jest tak pomyślana, by zarówno urządzenie, jak i host mogły rozpocząć transmisję.
Ale to host zarządza pracą urządzenia, ustawia tryb pracy i pozwala/zakazuje transmisji.
Ciekawostką natomiast jest, że to urządzenie generuje sygnał zegarowy.

Cytuj
Biedny Z80 musiałby cały czas siedzieć w pętli i sprawdzać czy myszka nie ma ochoty przypadkiem porozmawiać :)

No i właśnie wcale nie. Wystarczy wyłączyć Stream Mode, czyli włączyć Remote Mode (kod #F0) i mysz przestaje "śmiecić", podając współrzędne tylko wtedy, gdy host się o nie zapyta komendą Read Data (kod #EB).
Tak więc dane można odczytywać nawet na przerwaniach, choć może się to okazać nieco "ciężkie". Ale 10 razy na sekundę powinno całkowicie wystarczyć.

Nadal mnie nurtuje konwersja elektryczna. Z opisu PS/2 wynika, że linie DATA i CLOCK są dwukierunkowe (open collector + pullup), dlatego każda strona może zainicjować tranmisję. Widzi mi się to mocno inne od linii RX i TX. Nie bardzo też rozumiem, jak linia RTS staje się źródłem napięcia 5V (co wynika ze schematów, jakie znalazłem w sieci).

steev

  • *****
  • Wiadomości: 834
  • Miejsce pobytu:
    inode 42
Odp: 128K, RS232 i... myszka
« Odpowiedź #11 dnia: 2018.09.18, 16:35:08 »

<ciach nieistotne w sumie szczegóły techniczne>

Cytuj
Biedny Z80 musiałby cały czas siedzieć w pętli i sprawdzać czy myszka nie ma ochoty przypadkiem porozmawiać :)
No i właśnie wcale nie. Wystarczy wyłączyć Stream Mode, czyli włączyć Remote Mode (kod #F0) i mysz przestaje "śmiecić", podając współrzędne tylko wtedy, gdy host się o nie zapyta komendą Read Data (kod #EB).
Tak więc dane można odczytywać nawet na przerwaniach, choć może się to okazać nieco "ciężkie". Ale 10 razy na sekundę powinno całkowicie wystarczyć.
Tak.
Ale to już nie podpada pod 'podłączam myszkę pod ZX i używam poleceń BASIC'...
Pisząc własne procedury w asm dało by pewnie radę (plus tranzystorek w przelotce powalający 'uziemić' zegar myszy)
Choć osobiście już bym wolał dorobić na małym CPLD przelotkę pozwalającą odczytywać pozycję myszy via zwykły RS...
Co mi uświadomiło, że sygnały w gniazdku speca mają poziomy rzędu 12V więc i CPLD, i tranzystorek dopiero po dodatkowym konwerterze napięć... meh... :/

Nadal mnie nurtuje konwersja elektryczna. Z opisu PS/2 wynika, że linie DATA i CLOCK są dwukierunkowe (open collector + pullup), dlatego każda strona może zainicjować tranmisję. Widzi mi się to mocno inne od linii RX i TX. Nie bardzo też rozumiem, jak linia RTS staje się źródłem napięcia 5V (co wynika ze schematów, jakie znalazłem w sieci).
Dane dwukierunkowe, zegar jednokierunkowy (choć host musi nim manipulować jeśli chce zmienić kierunek transmisji)
Osobiście uważam, że mysz po prostu przełącza się z trybu PS/2 na RS232 po wykryciu wysokich napięć na liniach danych.
A co do źródła napięcia, to pewnie jakoś tak...
« Ostatnia zmiana: 2018.09.18, 17:18:38 wysłana przez steev »
Machines should work. People should think.

trojacek

  • *****
  • Wiadomości: 4407
  • Miejsce pobytu:
    Warszawa
Odp: 128K, RS232 i... myszka
« Odpowiedź #12 dnia: 2018.09.18, 16:59:51 »
Ale to już nie podpada pod 'podłączam myszkę pod ZX i używam poleceń BASIC'...

Z myszą i tak by się to nie udało (przerwania...), chyba że w Megabasicu :)
Chodziło mi o to, że skoro Basic obsługuje RS232, to odpowiednie procedury są w ROM 128K. Czyli z poziomu assemblera można robić calle do ROM-u i sprawa załatwiona.

Cytuj
(plus tranzystorek w przelotce powalający 'uziemić' zegar myszy)

Dlaczego? Czy pecet ma taki tranzystorek? Nie, robi to którąś z istniejących linii RS232.
Fakt, że port szeregowy 128K to nie full standard, a jedynie 4 linie (RX, TX, DTR, CTS) - ale każdą można sterować niezależnie, więc w czym problem? Wystarczy robić to tak samo, jak pecet.

Cytuj
Choć osobiście już bym wolał dorobić na małym CPLD przelotkę pozwalającą odczytywać pozycję myszy via zwykły RS...

...albo jako Kempston (ewentualnie AMX) Mouse, i sprawa się rypła (bo nie o to chodziło, a te interfejsy już istnieją).

Cytuj
Co mi uświadomiło, że sygnały w gniazdku speca mają poziomy rzędu 12V więc i CPLD, i tranzystorek dopiero po dodatkowym konwerterze napięć... meh... :/

Owszem. Ale ja bardziej myślałem o dodaniu gniazdka PS/2 do ZX Max 48/128 lub podobnej konstrukcji.
Co jest równie łatwe do zrobienia w oryginalnych 128K - kwestia gniazdka i paru kabelków.

Cytuj
Dane dwukierunkowe, zegar jednokierunkowy (choć host musi nim manipulować jeśli chce zmienić kierunek transmisji)

...czyli *linia* zegara jest również dwukierunkowa. Po prostu nie zawsze jest zegarem :)

Cytuj
Osobiście uważam, że mysz po prostu przełącza się z trybu PS/2 na RS232 po wykryciu wysokich napięć na liniach danych.

Czyli każda mysz PS/2 musi być "odporna" na +/-12V? Hmm, technicznie do zrobienia.
Ciekawy jest ten schemat, który załączyłeś, dzięki.
« Ostatnia zmiana: 2018.09.18, 17:25:37 wysłana przez trojacek »

trojacek

  • *****
  • Wiadomości: 4407
  • Miejsce pobytu:
    Warszawa
Odp: 128K, RS232 i... myszka
« Odpowiedź #13 dnia: 2018.09.18, 17:41:44 »
OK, już mniej więcej wiem, jak to działa :)
Otóż do trybu PS/2 są używane inne linie, niż do trybu RS232 (zakładając, że mysz obsługuje oba protokoły).

Najpierw pełen pinout portu myszy PS/2:
• 1 - linia DATA (tylko tryb PS/2)
• 2 - linia RXD (tylko tryb RS232)
• 3 - GND (w obu trybach...)
• 4 - wybór trybu (5V - PS/2, 12V - RS232)
• 5 - linia CLOCK (tylko tryb PS/2)
• 6 - linia TXD  (tylko tryb RS232)

Tak więc zależnie od napięcia na pinie 4, mysz włącza się w tryb komunikacji PS/2 z zegarem i jedną linią danych (+5V), albo pracuje jak typowy RS232 z liniami RXD i TXD, jeśli napięcie to wynosi 12V (tylko nie mam pewności, czy +, czy jednak -, bp logika podpowiada "plus", a zasada działania RS232 sugeruje stan nieaktywny - czyli "minus").

W trybie PS/2 mamy więc komunikację, o jakiej wcześniej dyskutowaliśmy (1 linia danych, linia zegara z funkcją wymuszania transmisji w drugą stronę, zegar 10-16.7 kHz).
W trybie RS232 mamy najzwyklejszą na świecie transmisję po eresie, z defaultowymi ustawieniami 1200/8/n/1 czy jakoś tak.

Wracając do 128K, port szeregowy nie ma linii RTS, za to ma linię +12V. Ma też pomocnicze linie RS232, które w stanie nieaktywnym mają -12V, w razie potrzeby. Tak więc podłączenie myszy jest możliwe, jednak raczej  trybie RS232, by nie kombinować z zerowaniem zegara i dwukierunkowością linii danych.
Bit banging w rybie PS/2 wyglądałby dość skomplikowanie.
« Ostatnia zmiana: 2018.09.18, 17:55:32 wysłana przez trojacek »

steev

  • *****
  • Wiadomości: 834
  • Miejsce pobytu:
    inode 42
Odp: 128K, RS232 i... myszka
« Odpowiedź #14 dnia: 2018.09.18, 17:54:45 »
No dobra, pora na małe podsumowanie ;)

1) rozmawiamy o myszce typu 'combo', dwusystemowej (RS+PS/2)
2) mysz po podłączeniu rozpoznaje rodzaj interfejsu i przełącza się w ten własciwy
Punkt 8.3 i rysunek 8-3

ergo:

3) Albo podłączamy mysz via MAX2321 i czytamy z BASICa / asemblera / czegokolwiek standardowym protokołem RS (tutaj: 1200, N,7,1)
4) Albo podłączamy ją jako PS/2 i jesteśmy w czarnej pięciowoltowej dziurze ;)

Poważniej - można się faktycznie podpiąć pod AY (plus wspomniany wcześniej tranzystorek :) ) ale trzeba się potem trochę nadłubać programistycznie.
Jeśli odpuścić sobie rekonfigurację myszy i tylko czytać sygnały - oznacza to ciągły polling sygnału zegarowego (ewentualne podpięcie go pod przerwanie)
Próbowałem czytać klawiaturę PS asynchronicznie, via zwykły UART. Działało ale niestabilnie. Nie polecam :)

Jeśli to ma być do klona, to (jako leń) sprawdziłbym ile zostało w CPLD wolnych zasobów i spróbował wydłubać dodatkowe porty przechowujące położenie myszki (czyli de facto kempston mouse) lub przynajmniej jeden, zwracający odebrany bajt - można by wtedy podłączyć mysz lub klawiaturę (i napisać drivery do obu... life is brutal :) )

1 Co za głupoty, przecież ta mysz jest już 12 woltowa :/
Machines should work. People should think.