Autor Wątek: Moustick  (Przeczytany 13024 razy)

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Moustick
« dnia: 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 ?
« Ostatnia zmiana: 2015.12.19, 15:00:05 wysłana przez pear »
ZX/Enterprise/CPC/Robotron/C128D

Maryjan

  • *****
  • Wiadomości: 6650
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: Moustick
« Odpowiedź #1 dnia: 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.
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Moustick
« Odpowiedź #2 dnia: 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 (+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.
ZX/Enterprise/CPC/Robotron/C128D

Maryjan

  • *****
  • Wiadomości: 6650
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: Moustick
« Odpowiedź #3 dnia: 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 :)
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Moustick
« Odpowiedź #4 dnia: 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.
ZX/Enterprise/CPC/Robotron/C128D

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Moustick
« Odpowiedź #5 dnia: 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?

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Moustick
« Odpowiedź #6 dnia: 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ść.
ZX/Enterprise/CPC/Robotron/C128D

andy

  • *****
  • Wiadomości: 1065
  • Miejsce pobytu:
    Kielce Wsch.
Odp: Moustick
« Odpowiedź #7 dnia: 2015.12.20, 14:45:33 »
Mysz USB można podłączyć przez przejściówkę do gniazda ps/2 - w czym problem?
pzdr
a.
POKE 35899,0  ZX 81, ZX Spectrum +, +2, Harlequin, ZX Max 48 & 128, Spider 48, Chrome 128, TC 2048, divIDE, CPC 464

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Moustick
« Odpowiedź #8 dnia: 2015.12.20, 14:52:38 »
W tym, że nie każda mysz USB obsługuje protokół PS/2.
ZX/Enterprise/CPC/Robotron/C128D

Maryjan

  • *****
  • Wiadomości: 6650
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: Moustick
« Odpowiedź #9 dnia: 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.
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

kasztelan

  • ***
  • Wiadomości: 101
  • Miejsce pobytu:
    pl
Odp: Moustick
« Odpowiedź #10 dnia: 2015.12.20, 18:16:44 »
Jaki mikrokontroler to obsługuje?
UPS - dostarczamy awizo, paczka do odbioru w mięsnym!

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Moustick
« Odpowiedź #11 dnia: 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 :)
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: Moustick
« Odpowiedź #12 dnia: 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.

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Moustick
« Odpowiedź #13 dnia: 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.
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: Moustick
« Odpowiedź #14 dnia: 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.