Tajemnice ATARI

Pilot


    ATARI mierzył już temperaturę, sterował oświetleniem, odbierał obrazy z radia, sprawdzał prawa fizyki. Nie miał jednak okazji pracować jako... wielofunkcyjny pilot do sprzętu RTV.

   Możliwe jest to dzięki prostemu interfejsowi podłączanemu do gniazda joysticka. Jeśli myślisz, że zapowiada się wielka konstrukcja z układami scalonymi, to jesteś w błędzie. Całą "czarną" robotę wykona bowiem niezmordowany ATARI. Aby wykonać rzeczony interfejs należy zdobyć wtyczkę z kablem od joysticka, ale takiego z autofire, ponieważ potrzebne będzie zasilanie. Samą wtyczkę można również kupić w sklepie z częściami elektronicznymi. Gdy już mamy odpowiedni kabel, to teraz znaleźć należy interesujące nas przewody. W tym celu odszukaj przewód "masę" - jest on przeważnie koloru czarnego. Dalej pomocny będzie programik w BASICu

1 ? STICK(0):G.1

   Oddziel jeszcze przewód +5V (prawdopodobnie czerwony) i zwieraj pojedynczo wszystkie pozostałe przewody do masy, obserwując wyświetlane na ekranie liczby. Potrzebne będą kabelki, którym odpowiadają liczby 13 i 14, (oznaczmy je "13" i "14"). Potrzebne są jeszcze następujące części: tranzystory BC211 i BC313, dowolna dioda LED, podczerwona dioda nadawcza CQYP23 lub podobna oraz podczerwona dioda odbiorcza BPYP44 lub podobna.

   Czas teraz na wykonanie połączeń według schematu:


   Opis schematu:

T1 BC211
T2 BC313
D1 dioda świecąca LED
D2 dioda podczerwona nadawcza
D3 dioda podczerwona odbiorcza
+5V joystlckowy przewód z +5V
M joystickowy przewód "masa"
13, 14 patrz opis wyżej

   Anoda diody ma postać "szpileczki" i jej wyprowadzenie jest przeważnie dłuższe od wyprowadzenia katody. Na schemacie anody są niżej niż katody.

   Należy uważać, aby nie pomylić diód, mogą one być bardzo do siebie podobne, ale spełniają różne funkcje.

   Dioda świecąca służy do kontroli "wysterowania" pilota. Poprawność montażu układu można sprawdzić kierując diodę odbiorczą do światła, LED powinien wówczas świecić. Urządzenie można zmontować na płytce lub też bez niej, ale wskazane jest umieścić je w jakiejś obudowie, wyprowadzając "główki" wszystkich diod na zewnątrz. Interfejs podłącza się do pierwszego portu joysticka.

   Czas teraz na program obsługujący tego nietypowego pilota. Należy zgrać go w formacie DOS-a przy pomocy Zgrywusa+.

   Po uruchomieniu pojawia się menu. Aby wprowadzać sygnały z oryginalnego pilota należy wybrać kombinację Control Tab. Wówczas program prosi o wciśnięcie klawisza, pod którym kryć się ma określona funkcja.

   Należy odnaleźć w pilocie "źródłowym" miejsce, w którym znajduje się dioda nadawcza i przystawić ją bezpośrednio do diody odbiorczej Twojego interfejsu. Wciśnij wybrany przycisk w swoim pilocie, a następnie, trzymając go, klawisz w komputerze. Po chwili sygnał zostanie zapamiętany w pamięci komputera. Czynność tę możesz powtarzać do czasu, gdy pojawi się informacja END OF MEMORY.

   Należy uważać, aby podczas transmisji na diodę nie padał silny strumień światła. Pilota należy przystawić tak, aby podczas wprowadzania sygnałów dioda LED migała jak najmocniej.

   W celu wysyłania wprowadzonych wcześniej sygnałów należy diodę nadawczą interfejsu skierować w kierunku używanego sprzętu RTV (tak, jak normalny pilot) i nacisnąć wybrany klawisz w ATARI. Wprowadzona funkcja powinna się wykonać, jeśli tak się nie stało, to najprawdopodobniej komputer wraz z interfejsem jest zbyt daleko od urządzenia RTV albo sygnał został źle wprowadzony, wówczas trzeba powtórzyć wprowadzanie.

   Oto opis komunikatów, jakie można ujrzeć na ekranie podczas używania programu:

  • Key busy, enter new data? (Y/N) - pod wciśnięty klawisz już wcześniej wprowadzono sygnał. Istnieje możliwość wprowadzenia nowego (Y) lub rezygnacji (N).
  • Key empty - pod wciśnięty klawisz nie wprowadzono dotychczas żadnego sygnału. Należy go tam najpierw wprowadzić.
  • Input data - wprowadzanie danych.

    Drobne uwagi:

       Funkcje można wprowadzać pod poszczególne klawisze lub ich połączenie z SHIFT-em. Program korzysta z pamięci pod ROM-em, więc nie należy używać z nim innych programów wykorzystujących tą pamięć.

       Teraz kilka informacji o budowie i działaniu programu. Tę część opisu dedykuję przede wszystkim osobom, które zechcą wykorzystać opisany interfejs we własnych programach. Omówiony zostanie sposób odbioru i wysyłania danych. Mniej zaawansowani mogą przerwać czytanie w tym miejscu.

       Nadajnik zdalnego sterowania wysyła kod wybranej funkcji cyklicznie, w postaci kombinacji zer i jedynek, przy czym odbywa się to z częstotliwością, jak na nasz komputer, dość dużą. Mimo to nic nie stoi na przeszkodzie, aby taki sygnał odebrać i zapamiętać. A robi się to tak:

    na wstępie należy wyłączyć przerwania:

         lda #0
         sta $d400
         sta $d40e
         sei
    
    i ustawić port O na wprowadzanie danych:

         lda #$38
         sta $d302
         lda #0           
         sta $d300
         lda #$3c            
         sta $d302
    
    teraz należy poczekać na najbliższy sygnał z pilota (aby nie marnować pamięci):

    w1   lda $d300
         cmp #$ff
         beq w1
    
    wreszcie można przyjmować dane (10KB jest ilością wystarczającą, aby zapamiętać całą "serię" z pilota, można wykorzystać tu pamięć pod ROM-em po uprzednim jego wyłączeniu):
         lda #254 	
         sta $d301 	
    
         lda #$00 	
         sta $fe 	
         lda #$d8 	
         sta $ff 	
    
         ldy #0 	
    b2   lda $d300 	
         sta ($fe),y 	
         inc $fe 	
         bne b1 	
         inc $ff 	
    b1   lda $ff 	
         bne b2 	
    

    odebrane dane można teraz zagęścić (odebrano tylko dwa rodzaje bajtów - odpowiadające zerom i jedynkom, wskazana jest więc zamiana całych bajtów na bity). Ten fragment procedury pozostawiam Twojej, Czytelniku, inwencji twórczej. Jeśli dobrze pójdzie, to skompresowany sygnał będzie zajmował nie więcej niż 1 KB. Nie można zagęszczać sygnału podczas odbierania, gdyż brakłoby na to czasu. Na koniec należy włączyć ROM i przerwania:

         lda #255
         sta $d301
         
         lda 559
         sta $d400
         lda #255
         sta $d40e
         cli
         rts
    

       Wysyłanie sygnałów odbywa się w odwrotnej kolejności. Tak więc, jeśli używana będzie pamięć pod ROM-em, trzeba odłączyć ROM, a co się z tym wiąże - wcześniej wyłączyć przerwania (patrz wyżej), zmienia się także kierunek transmisji przez PIA:

         lda #$38
         sta $d302
         lda #255
         sta $d300
         lda #$3c
         sta $d302
    
       Następnie, przenosząc dane ze zwykłej pamięci pod ROM, należy przy okazji je rozpakować. To Ty wiesz jak. Dodam tylko, że najlepiej, aby odebranemu bajtowi $ff odpowiadał wysłany $ff odebranemu $fd - wysłany $fa

       Nadszedł czas na emisję sygnału:

    rpt  lda #$00 
         sta $fe
         lda #$d8
         sta $ff
    
         ldy #0
    c2   lda ($fe),y
         sta $d300
         inc $fe
         bne c1 
         inc $ff
    c1   lda $ff
         bne c2 	
    

       Tu można sprawdzić, czy przerwać emisję. Jeśli steruje się tym z klawiatury, to nie można odczytywać rejestru KBCODES ($02fc), ponieważ wyłączone są przerwania. Użyć trzeba np. rejestru SKSTAT ($d20f).

         lda $d20f
         and #%00000100
         beq rpt
    

       Koniec wysyłania wiąże się z włączeniem przerwań i ROM-u oraz z normalnym ustawieniem kierunku transmisji przez PIA.

       To wszystko. Chyba nic trudnego. Uwaga: Powyżej przedstawione są tylko fragmenty programu w asemblerze. Mają one za zadanie wyjaśnić zasadę obróbki sygnałów z pilota.

    1000 REM *--------------------------*
    1002 REM : Pilot                    :
    1004 REM :  autor: Konrad Machowski :
    1006 REM : (c) 1993 Tajemnice ATARI :
    1008 REM *--------------------------*
    1010 DATA ffff0030b133a2008a9dba33e8
    1020 DATA d0faa9078552a91c8553a2eba0
    1030 DATA 322042c6a26aa033208432a900
    1040 DATA 8db8338db633206d32c9acf015
    1050 DATA c99cd00ba9028552a92785536c
    1060 DATA 0a008db7334c2831a25ea03320
    1070 DATA 8432206d320a8db43320ca32a9
    1080 DATA 388d02d3a9008d00d3a93c8d02
    1090 DATA d3a9d885ffa90085fead00d3c9
    1100 DATA fff0f9a000ad00d391fee6fed0
    1110 DATA 02e6ffa5ffd0f1aeb433bdbb33
    1120 DATA d0034caa304cfe31202a324cf6
    1130 DATA 30202a324cc930eeb833adb833
    1140 DATA c9fef0f04cc930adb13385fdad
    1150 DATA b03385fcaeb433a5fc9dba33a5
    1160 DATA fd9dbb33a9d885ffa90085fea0
    1170 DATA 00a207a9008db533b1fec9fff0
    1180 DATA 07382eb5334ce330182eb533e6
    1190 DATA fed002e6ffca10e6adb533f0ac
    1200 DATA adb833d09badb53391fc20ba32
    1210 DATA a5fdc9bcf01ba5ffd0c3adb633
    1220 DATA c90af00aa5fc8db033a5fd8db1
    1230 DATA 3320d9324c18304cde314cf131
    1240 DATA 4c3e320a8db433aeb433bdba33
    1250 DATA 8db233bdbb338db333f0e5ad02
    1260 DATA d329fb8d02d3a9ff8d00d3ad02
    1270 DATA d309048d02d320ca32a000adb2
    1280 DATA 3385fcadb33385fda90085fea9
    1290 DATA d885ffa20768a000b1fcf0b348
    1300 DATA 682a489017a9fa91fee6fed002
    1310 DATA e6ffa5fff010ca10ea20ba324c
    1320 DATA 6931a9ff91fe4c7c31a90085fe
    1330 DATA a9d885ffa000b1fe8d00d3e6fe
    1340 DATA d002e6ffa5ffd0f1a032a2ffca
    1350 DATA ad0fd22904d008d0f688d0f14c
    1360 DATA 963120d932ad06d329fb8d02d3
    1370 DATA a9008d00d3ad02d309048d02d3
    1380 DATA 4c183020d932a275a033208432
    1390 DATA 2056f520c1324c1830a284a033
    1400 DATA 20843220c1324c1830aeb433bd
    1410 DATA ba3385fcbdbb3385fda90a8db6
    1420 DATA 3320d932a28fa033208432206d
    1430 DATA 32c92bd00620ca324cc1304c18
    1440 DATA 30a900a891fc20ba32adb83391
    1450 DATA fc20ba328cb833604820ba32a0
    1460 DATA 00b1fc20ba32a89848a000a207
    1470 DATA a9ff91fee6fed002e6ffa5fff0
    1480 DATA 0bca10ef68a888d0e44c693168
    1490 DATA 4c9631a9ff8dfc02adfc02c9ff
    1500 DATA f0f9a2ff8efc02482083f96860
    1510 DATA 8ead328cae32a55818690f8db4
    1520 DATA 328da532a5591869028db5328d
    1530 DATA a632a221a9009da432ca10faa2
    1540 DATA 00bdac32c99bf0069db332e810
    1550 DATA f360e6fcd002e6fd60a5146914
    1560 DATA c514d0fc60a9008d00d48d0ed4
    1570 DATA 78a9fe8d01d360a9ff8d01d3ad
    1580 DATA 2f028d00d4a9ff8d0ed458607d
    1590 DATA 1d1d1d2050696c6f7420436f6d
    1600 DATA 616e64657220762e322e30202d
    1610 DATA 2d2d2d2d2d2d2d2d2d2d2d2d2d
    1620 DATA 2d2d2d2d2d2d2d2dc3d4d2cc2b
    1630 DATA d4c1c2202d20696e7075742064
    1640 DATA 6174612020a0cbc5d9a0202020
    1650 DATA 2d206f75747075742064617461
    1660 DATA c3d4d2cc2bc5d3c3202d207175
    1670 DATA 697420746f20444f539b296e70
    1680 DATA 757400646174610c0030726573
    1690 DATA 73006b65790e9b256e64006f66
    1700 DATA 006d656d6f72790e9b2b657900
    1710 DATA 656d7074790e9b2b6579006275
    1720 DATA 73790c00656e746572006e6577
    1730 DATA 0064617461001f0008390f2e09
    1740 DATA 9bba34e002e1020030
    


    Konrad Machowski

  • Powrót na start | Powrót do spisu treści | Powrót na stronę główną

    Pixel 2001