forum speccy.pl

ZX Spectrum => HARDWARE => Wątek zaczęty przez: trojacek w 2018.09.18, 07:10:51

Tytuł: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 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?
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: pear w 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 :(
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: Tygrys w 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.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 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.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: steev w 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ć.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 2018.09.18, 14:04:49
Pecetom jakoś się to udaje, choć tradycyjny UART ma bardzo ściśle określone częstotliwości zegara.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: pear w 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ą.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 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?
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: steev w 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ć :)
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: pear w 2018.09.18, 15:47:20
Aż tak źle nie jest. Transmisję w PS/2 inicjuje slave, więc musi czekać tylko na odpowiedź.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 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).
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: steev w 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...(http://uphotos.eepw.com.cn/Lamborghini/pics/1253515352_0.jpg)
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 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.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 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.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: steev w 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 (http://www.pa0qy.nl/pdf/MTA41300.pdf)

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 :/
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 2018.09.18, 18:02:04
No, w CPLD Maxów 48/128 to się już raczej nie zmieści. Można ewentualnie dodać rejestr szeregowo-równoległy do szybszego czytania bajtów z myszy (i, aż się prosi, przerwanie do CPU po zapełnieniu 8 bitów).

Odnośnie punktu 1) - nie spotkałem się jeszcze z myszą mającą port PS/2, która by nie była dwusystemowa i odmówiła współpracy przez adapter.
Odnośnie punktu 2) - o, ciekawy dokument! I jak wół stoi, że tryb RS232 ustawia się napięciem -12V, co do czego miałem wątpliwości :)

Ergo - punkt 3) wychodzi najprościej. Niestety podłączenie do oryginalnych 128K nie będzie banalne, bo de facto trzeba zrobić kabelek-adapter lub dorobić sobie standardowe złącze.

Cytuj
1 Co za głupoty, przecież ta mysz jest już 12 woltowa :/

Tak, ale klony nie mają +/-12V, więc potrzebują MAX232.


EDIT: z zalinkowanego dokumentu właśnie wyczytałem, że tryb Remote Mode jest dostępny dla PS/2, ale nie RS232 :(
Ciągle ten wiatr  oczy...
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: steev w 2018.09.18, 18:17:31
Słowem, najlepszym rozwiązaniem pozostaje : mieć Interface I lub FDD3000
(lub dowolny inny interfejs ze standardowym portem szeregowym :) )
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 2018.09.18, 18:27:52
Nie do końca, bo będzie ten sam problem - używając portu RS232 trzeba na okrągło słuchać, co myszka nadaje.
Sprawę można oczywiście załatwić jakimś małym jednoukładowcem, ale miałem nadzieję, że da się to prosto ogarnąć, co najwyżej troszkę drutując.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: pear w 2018.09.18, 18:32:48
No i tak powstał Moustick (https://www.speccy.pl/forum/index.php?topic=2310.0) ;)
Motywacji mi tylko trochę zabrakło, żeby dorobić regulację prędkości emulacji kółkiem myszki.

Ewentualnie można projekt przebudować na konwerter do RS-232. Wtedy byłby możliwy odczyt stanu myszki na żądanie.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 2018.09.18, 18:37:16
Pear, mysz udającą joystick załatwia niemal dowolna commodorowska mysz :) Ja przez lata używałem Turbo GEOS Mouse, działają też ponoć myszki amigowe (w jednym z trybów), żadnego cudowania, wpina się i już (port joysticka musi mieć podciągnięte zasilanie!). Ale to działa... jak działa, strasznie słaba dynamika, precyzja też taka sobie.

Za to ten konwerter na RS232 brzmi ciekawie, zwłaszcza, że można by go zrobić na 5V i 12V, co kto potrzebuje.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: pear w 2018.09.18, 18:40:32
Rozpracuj najpierw te procedury z ROM, czy w ogóle warto o tym myśleć.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: trojacek w 2018.09.18, 18:46:06
To by była robota od ogona :)
Pytanie, czy w miarę prosty adapter zamieni transmisję PS/2 na RS232 z jakimś w miarę standardowym baud rate.

No i pytanie za 1000 punktów, czy może są myszki, które w trybie RS232 dopuszczają komendy trybu PS/2, by można było włączyć Remote Mode po RS232. To by bardzo ułatwiło temat.
Tytuł: Odp: 128K, RS232 i... myszka
Wiadomość wysłana przez: pear w 2018.09.18, 18:53:30
Port RS mam w mikrokontrolerze niewykorzystany. Pamięci też wystarczy. Obsługa PS/2 i konwersja na joystick zajmuje ledwie kilobajt (całość jest napisana w assemblerze).
Łatwiej będzie zmodyfikować konwerter niż znaleźć dzisiaj taką myszkę jak Ci się marzy.