ATARI INACZEJ: MYSZ DO ATARI XL/XEArtykuł ten nie będzie, wbrew pozorom, traktować o firmowej myszy do ATARI XL/XE - "ZOBIAN RAT", praktycznie w Polsce nie spotykanej, lecz o dołączeniu do naszej ulubionej maszynki myszy od AMIGI bądź ATARI ST. Nie jest to trudne ani pracochłonne, lecz wymaga pewnych umiejętności lutowniczych, choć rozwiązanie połowiczne obywa się bez jakichkolwiek ingerencji sprzętowych. Jak to działa?Myszy AMIGI i ATARI ST podłączane są do portu joysticka. Wysyłają do komputera sygnały na 7 liniach: Uwagi wymagają głównie potencjometry: przyciski myszy po uaktywnieniu zwierają zawsze odpowiedni sygnał z masą. W przypadku lewego FIRE wszystko jest w porządku, problemy zaczynają się jednak w momencie próby odczytania stanu FIRE: prawego i środkowego. Niestety, POKEY nie sygnalizuje faktu zwarcia z masą linii próbkującej potencjometru. Aby to czynił, należy zamienić sygnał masy z linią zasilania +5V. Dokonać tego można w dwojaki sposób: Sam zastosowałem pierwszą metodę - wykonanie interfejsu w moich warunkach jest niecelowe: myszkę używam wyłącznie do ATARI. Ci jednak, którzy chcą zbudować interfejs, muszą zgromadzić: wtyk i gniazdo joysticka, jakieś małe pudełeczko oraz jakiś inwerter sygnałów TTL (np. UCY 74LS04). Całe działanie interfejsu polega na "odwróceniu" sygnałów 9 i 5 (potencjometry A i B), lub tylko 9 (dla myszy dwuprzyciskowej). Tak wykonany interfejs należy podłączać między port joysticka, a złącze myszy (bez użycia przedłużaczy do joysticków!). Wykorzystanie myszy.Sygnały myszy można podzielić na 3 grupy: Należy utworzyć tablice wartości liczbowych. Zróbmy to np. dla myszy AMIGI: POZTAB = 0, 2, 10, 8 PIONTAB = 0, 1, 5, 4 Zauważmy, że są to liczby, utworzone z kombinacji odpowiednich bitów (1,3) oraz (0,2). W zasadzie są to kolejne liczby, poza przestawieniem 2 ostatnich (dla ST tak samo!). Zainicjujmy indeksy w obu tablicach (wstępne położenia myszy w tablicy): XIND = 0 YIND = 0 Ustalmy też pierwotne położenie kursora myszki (na środku ekranu): XKUR = $80 YKUR = $80 Teraz pozostało już tylko cyklicznie odczytywać stan PORTU A (cały czas mowa o jego 4 młodszych bitach - porcie 1), porównywać (po zastosowaniu odpowiedniej maski bitowej) ze stanem dotychczasowym i odpowiednio modyfikować położenie kursora.
LDA $D300 ; pobierzmy stan PORTU A Czułość myszy zależy od tego, w którym miejscu zmodyfikujemy współrzędne kursora. Można np. dodatkowo, przed zmodyfikowaniem ich zawartości, sprawdzać, czy wartość odpowiedniego indeksu = 0 - wprowadzi to pewne opóźnienie, czyli zmniejszy dynamikę ruchu kursora. W powyższym przykładzie brak też ograniczeń w ruchu kursora - "wyjeżdża" on poza ekran, pojawiając się z jego przeciwległej strony. Możliwe jest poza tym uogólnienie pokazanej procedury tak, aby obsługiwała ona zarówno myszkę AMIGI, jak i ST. Wystarczy w tym celu odpowiednio zmodyfikować zawartość tablic POZTAB i PIONTAB - może to oczywiście robić sam program - wpisując w tablice dane z pomocniczych tablic dla AMIGI i ST, zależnie od wyboru, dokonanego przez użytkownika. Można wreszcie zautomatyzować proces rozpoznawania myszki (czy w ogóle urządzenia zewnętrznego), zmuszając na wstępie programu jego użytkownika do wskazania kursorem określonego miejsca na ekranie i odpowiednio analizując dane, pochodzące z peryferiów (mysz AMIGI czy ST, joystick czy też paddle). Powyższa procedura ma też niewątpliwą wadę: musi być wykonywana w czasie rzeczywistym ze sporą regularnością. Nie jest to jednak dziwne: na odcinku 20cm myszka generuje ok. 1700 impulsów, a taki ruch myszą wykonuje się w 0.25 - 0.5 sekundy. Częstotliwość próbkowania winna więc wynosić co najmniej 3 kHz, a jeśli przy myszy siedzi bardzo nerwowy osobnik - to i 5 kHZ może być za mało! Z własnego doświadczenia wiem, że wykonywane (w czasie rzeczywistym skoki na przemian do procedur: obsługi myszy i jakiejś własnej (byle krótkiej) pozwalają zachować jeszcze znośną czułość i szybkość myszy. Własną procedurą może być np. procedura odgrywająca jakiegoś sampla o niskiej częstotliwości odtwarzania (po 1 bajcie). Dodatkowa, nie wolno zapomnieć o obowiązkowym w tej sytuacji, usuwaniu ze starej pozycji kursora i ponownym rysowaniu go na nowej pozycji na początku każdego przerwania VBL- początku wyświetlania ekranu (jeśli jest to sprite, należy wyzerować całą stronę pamięci, należącą do tego obiektu), nie wiadomo bowiem, jak dalece, od ostatniego przerwania, zdążyły się mienić jego (kursora) współrzędne. Bezpośrednia przeróbka wewnątrz myszy wygląda następująco: jeden ze styków mikroprzełącznika prawego (i środkowej) FIRE myszki jest połączony z masą. Należy przeciąć na płytce dotychczasowe połączenie, a do wyżej wymienionego styku doprowadzić +5V. Można również wbudować w mysz przełącznik 2-pozycyjny, zwierający styk z masą i +5V. Jego położenia można opisać: XL/XE i ST (lub AMIGA). Pomysłu nie zamierzam opatentowywać: wszyscy zainteresowani mogą sobie wykonać dowolną liczbę egzemplarzy (również w celach handlowych). Artur Miarecki
|