forum speccy.pl

ZX Spectrum => HARDWARE => Wątek zaczęty przez: pear w 2015.12.19, 14:06:06

Tytuł: Moustick
Wiadomość wysłana przez: pear w 2015.12.19, 14:06:06
Podczas prac nad interfejsem myszki i joysticków do Enterprise powstał całkiem udany firmware emulujący joystick.
Emulacja miała służyć jako tryb przejściowy zanim powstanie oprogramowanie obsługujące mysz w bezpośredni sposób.
Ponoć algorytm jest na tyle dobry, że w niektóre gry wygodniej grać myszką niż joystickiem.

Po niewielkich przeróbkach i miniaturyzacji nadaje się do zastosowania w innych komputerach.
Obsługiwany standard joysticka to Atari/Kempston. Z drugiej strony podłącza się mysz PS/2.
Każdy ruch myszy "tłumaczony" jest na odpowiednią kombinację styków w gnieździe joysticka.
Poniżej wizualizacja jak taki adapter miałby wyglądać.
Tylko czy pomysł się przyjmie ?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2015.12.19, 21:41:29
Rozumiem, że całość wpina się do gniazda interface-a Kempston i w grach mam zamiast joystick-a myszkę ?.
Myślę,że dla strzelanek z widokiem z góry, jak znalazł. Całość miała by pracować a'la Kempston Mouse z każdą grą, która ma w obsłudze Kempstona ?.

Idea ciekawa, zastanawiam się, jak by to działało np. w Art-Studio ?.

No i zamiast kupować interface "myszowy" do ZX-a, wystarczyło by mieć tylko Kempstona.
Problem byłby pewnie z nie przerobionymi Kempstonami w TIMEX-ach.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2015.12.20, 09:01:01
Możesz traktować adapter jako przelotkę, która umożliwia wetknięcie wtyczki PS/2 w gniazdo DB9.
Z punktu widzenia użytkownika nic więcej nie potrzeba wiedzieć. Wpinasz i działa.
Mysz PS/2 można podłączyć nawet później, tzn. najpierw wpinasz adapter do komputera, załączasz komputer, a dopiero później podłączasz myszkę.
Z wyjątkiem jak na razie jednej myszki Microsoft Optical Mouse, w przypadku pozostałych jest obsługa plug & play (ciekawe dlaczego w PC się nie dało ?  :o).

To nie jest Kempston Mouse. Tam masz możliwość odczytu wartości X i Y.
W moim adapterze są impulsy na stykach kierunków zależne od ruchów myszy. Odczytuje się status tak samo jak joystick.
Nie trzeba niczego przerabiać w oprogramowaniu.

Adapter jest multiplatformowy. Będzie działał z C64/C128, małymi Atari, interfejsami Kempston, Cursor i Sinclair 1/2 dla ZX Spectrum, ale pod warunkiem, że zachowane zostanie standardowe rozmieszczenie sygnałów w gnieździe (http://speccy.pl/forum/index.php/topic,1410.0.html) (+5V na pinie 7 i masa na pinie 8 ) .

Niestety nie będzie działać z CPC, Timex i wbudowanymi portami w ZX +2/+3. W tych komputerach nie jest wyprowadzone zasilanie na port joysticka.
W przypadku SAM Coupe musiałbym zrobić testy (zasilanie jest, ale masa jest na innym pinie).
Port Kempston w Timex TC2048 wymaga niestety dostosowania do standardu (odwrócona polaryzacja).

A, jeszcze te MSX, zakała Z80 :) Też będzie działać jak mu się w piny trafi, bo tam zasilanie jest zupełnie gdzie indziej.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2015.12.20, 10:37:50
Czy projekt jest na razie teorią ?, czy też już wszedł w fazę fizyczną ?.
Ja chętnie bym przetestował. Chętnie zamówię wersję "zrób to sam" żeby nie męczyć Twoich oczu :)
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2015.12.20, 10:58:26
Firmware jest gotowy. W zasadzie można sobie zrobić zestaw na próbę na płytce stykowej.
Zminiaturyzowana wersja wtyczkowa to świeży pomysł.
Nie ma dużo elementów, a mikrokontroler jest w wersji z interfejsem SPI, więc można go programować już po zamontowaniu.
Zasilanie i sygnały SCLK, MISO, MOSI są we wtyczce joysticka, a XTAL1 i RST na dodatkowym złączu pin-header.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Tygrys w 2015.12.20, 11:57:10
Pomysł ciekawy, a czy się przyjmie - fajnie by było. Mysz w roli joya - nigdy tak nie grałem, choć pewnie w grach typu Flying Shark to by się sprawdziło. Trzymam kciuki ;-)

Czy wielkim problemem byłoby zrobienie wersji USB?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2015.12.20, 12:04:31
No, musiałbym nowy firmware napisać  :P

Źródła są w assemblerze, bo w oryginalnym zastosowaniu całość była optymalizowana na wydajność.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: andy w 2015.12.20, 14:45:33
Mysz USB można podłączyć przez przejściówkę do gniazda ps/2 - w czym problem?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2015.12.20, 14:52:38
W tym, że nie każda mysz USB obsługuje protokół PS/2.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2015.12.20, 18:13:33
Myślę, że myszka PS2 będzie nawet lepiej działać, ze względu na jej "analogowość" (kulka i rolki).
Nie wiadomo, czy wyrobiło by się firmware w przypadku myszki USB - bezkulkowej.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: kasztelan w 2015.12.20, 18:16:44
Jaki mikrokontroler to obsługuje?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2015.12.20, 18:36:28
W oryginale jest Atmel AT89C4051, w wersji miniaturowej będzie AT89S2051.

Myszki PS/2 są nie tylko mechaniczne. Optyczne są równie popularne.

Do hosta USB trzeba by użyć kontrolera ze sprzętową obsługą.
Teoretycznie programowo dałoby się to zrobić, ale pamięci Flash w kontrolerze by nie starczyło :)
Tytuł: Odp: Moustick
Wiadomość wysłana przez: trojacek w 2015.12.20, 19:27:44
Pomysł ciekawy, a czy się przyjmie - fajnie by było. Mysz w roli joya - nigdy tak nie grałem, choć pewnie w grach typu Flying Shark to by się sprawdziło. Trzymam kciuki ;-)

Hmm, na nico odmiennej zasadzie, ale grałem myszką w gry na timexie ponad 20 lat temu. Używałem myszy GEOS Mouse (od Commodore). Timex miał oczywiście "wyprostowanego" kempstona.
Niemniej pomysł peara uważam za superciekawy, choć przeczuwam trochę problemów z używalnością. Myszka będzie się zachowywać nico inaczej, niż nas Windows przyzwyczaiło.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2015.12.20, 19:38:25
Algorytm uwzględnia różnicę przesunięć w zależności od kąta.
Oczywiście w przybliżeniu, bo trygonometria zarżnęłaby całość czasowo :)
Da się odwzorować kolistym ruchem myszy w miarę równe koło na ekranie.
Nie jest tylko uwzględniony współczynnik proporcji ekranu. Na sztywno jest 1:1.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: trojacek w 2015.12.20, 19:52:58
To miło. Ale nadal nie rozwiązuje to problemu maksymalnej prędkości ruchu kursora (w istniejących grach) ani przerw w odczycie, gdy Z80 musi robić coś innego. Rozumiem, że ATTiny aktualizuje na bieżąco pozycję, ale musi to przeliczyć na jednostkę czasu użycia joysticka, a nie ma mechanizmu potwierdzenia, że przez cały ten okres komputer odczytywał stan portu. Innymi słowy, z upływem czasu położenie myszy się będzie rozkalibrowywać.
Ale w sumie można by zaimplementować szeregowy protokół przesyłania pozycji po wybranych pinach portu - wtedy precyzja byłaby idealna, ale oczywiście żaden istniejący soft tego nie obsłuży.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2015.12.20, 20:05:49
Pojedynczy impuls trwa 30ms. Ilość impulsów zależy od przesunięcia i przyspieszenia.
Inercja jest korygowana zmianą kierunku ruchu myszki.
Prawdę mówiąc to pomysł nie jest mój. Ja tą funkcjonalność chciałem olać ;)
Moja jest realizacja, a rozbudowany algorytm jest zasługą kolegów z EnterpriseForever.com, którzy go testowali w praktyce :) Aktualnie to jest 9. wersja.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.02.18, 17:24:02
Chińczycy już poświętowali.
Płytki ruszyły w drogę.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2016.02.18, 21:06:11
Czekam, czekam ...  :D
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.15, 12:00:10
Zrobiłem sobie ostatnio listę rozpoczętych projektów, które wypadałoby dokończyć.
Wziąłem się i dokończyłem program. Na emulatorze działa.
Po obiedzie poskładam płytkę i zobaczę jak to wygląda.
Napisałem prosty program w BASIC do testów, ale bardzo powolny jest i za bardzo się do rysowania nie nadaje ;)
Na zdjęciu jest Timex TC2048 ze zmodyfikowanym portem joysticka. Z oryginałem niestety nie zadziała, bo Timex nie trzyma standardu.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: trojacek w 2016.10.15, 12:07:58
Niestety nie będzie działać z CPC, Timex i wbudowanymi portami w ZX +2/+3. W tych komputerach nie jest wyprowadzone zasilanie na port joysticka.

A, jeszcze te MSX, zakała Z80 :) Też będzie działać jak mu się w piny trafi, bo tam zasilanie jest zupełnie gdzie indziej.

Niektóre joysticki mają przełączniki Atari/Amstrad/MSX. Zmieniają one mapowanie pinów tak, by działał autofire. Może też by się tak dało zrobić w tym adapterze? Może być w wersji 2.0 albo premium ;)
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.15, 13:11:34
Jakby nie przełączać, to w Timexie nie ma na złączu joysticka masy :(
Tytuł: Odp: Moustick
Wiadomość wysłana przez: trojacek w 2016.10.15, 14:01:26
Timexa trzeba po prostu poprawić, wiadomiks.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2016.10.15, 14:13:20
Widzę, że coś "drgnęło" w projekcie. Czekam na rezultaty, bo pomysł jest ciekawy, nawet bardzo.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.15, 17:44:49
W uzupełnieniu do poprzednich testów wideo https://youtu.be/9Dxqp4X_8b0 (https://youtu.be/9Dxqp4X_8b0)
I pierwsza próba zagrania myszką ;) https://youtu.be/GwUlkxsWRRc (https://youtu.be/GwUlkxsWRRc)
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2016.10.15, 18:11:55
Działa :)
To się już zapisuję na sztukę - nawet do testów w wersji Beta :)
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.15, 18:20:33
A co ma nie działać ? 8)
Są dwa problemy:
1) niewielkie opóźnienie,
2) w jednych zastosowaniach, tak jak na przykład w grze Krakout, działa zbyt wolno, w innych zbyt szybko.
Pierwszego problemu już bardziej nie dam rady zniwelować, bo odczyt myszki trwa jednak kilka do kilkunastu milisekund.
Drugi problem być może dałoby się rozwiązać jakimś DIP switchem, ale od razu płytka zrobi się większa, a chciałem zachować rozmiar "wtyczkowy".
Tytuł: Odp: Moustick
Wiadomość wysłana przez: trojacek w 2016.10.15, 18:28:21
A czy ten firmware jest modyfikowalny? Może dałoby się dodać funkcję zmiany czułości z wykorzystaniem nieużywanego przycisku/rolki?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.15, 18:30:59
Firmware sam pisałem od podstaw.
Hm, w sumie rolki są niewykorzystane. Mogę pomyśleć. Tylko jakoś by trzeba sygnalizować jaka jest aktualna czułość.
No i nie każda myszka ma rolkę. Wtedy czułość domyślna na sztywno.
Prawy przycisk myszy robi za drugi Fire na pinie 9.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: trojacek w 2016.10.15, 18:33:14
To może oba przyciski naraz?
Albo jakiś magiczny ruch myszką? ;)
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2016.10.15, 22:17:13
Może by dało radę, zastosować jakąś diodę, żeby np. mrugnięciem sygnalizowała aktualną czułości ?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.16, 13:24:04
W opakowaniu :)
Jeszcze parę poprawek trzeba zrobić.
Niewielka obudowa ma dużą zaletę. Wydruk trwa tylko 30 minut.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Maryjan w 2016.10.16, 15:11:43
Fajna, na zatrzaski, czy skręcana ?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.16, 15:20:08
Właśnie te zatrzaski trzeba dopracować.
Za bardzo nie ma co skręcać.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: zaxon w 2016.10.16, 15:24:55
Hmm, ja drukuje gore/dol na zakladki i sklejam . Dol ma scianki grubosci 3 mm i 1mm wciecia,  gora odwrotnie.
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.16, 16:53:39
Nie chcę sklejać, bo wewnątrz są dwa piny potrzebne do przeprogramowania procesora. Pozostałe są na wtyczce joya :)
Tytuł: Odp: Moustick
Wiadomość wysłana przez: Tygrys w 2016.10.16, 19:12:42
Fajne!

Próbowałeś używać myszki jako joya w już istniejących programach? Jak wrażenia z użytkowania?
Tytuł: Odp: Moustick
Wiadomość wysłana przez: pear w 2016.10.16, 19:20:19
Tak, próbowałem :)
A co ma nie działać ? 8)
Są dwa problemy:
1) niewielkie opóźnienie,
2) w jednych zastosowaniach, tak jak na przykład w grze Krakout, działa zbyt wolno, w innych zbyt szybko.
Pierwszego problemu już bardziej nie dam rady zniwelować, bo odczyt myszki trwa jednak kilka do kilkunastu milisekund.
Drugi problem być może dałoby się rozwiązać jakimś DIP switchem, ale od razu płytka zrobi się większa, a chciałem zachować rozmiar "wtyczkowy".
Przy następnym wolnym dniu (wziąłem w piątek urlop, żeby mieć spokój przy pisaniu) zrobię zmiany.
Wykorzystam kółko do modyfikacji parametrów czułości i akceleracji.