Tajemnice ATARI

MAPA PAMIĘCI


    W kolejnych kilkudziesięciu komórkach pamięci naszego ATARI znaleźć można informacje szczególnie interesujące dla miłośników (lub może raczej dla twórców?) gier. Korzystanie z komputera w celach rozrywkowych możliwe jest dzięki temu, że potrafi on odbierać informacje od szczególnych urządzeń zewnętrznych, jakimi są manipulatory. Urządzenia te podłącza się do znajdujących się z boku komputera gniazd i już można siadać przed monitorem, aby kolejny raz strzelać do wszystkiego, co się rusza.

   Oprócz najbardziej znanego joysticka, do komputerów ATARI można podłączyć także tzw. paddle, nazwany po polsku wiosełkiem, choć może lepiej byłoby mówić po prostu potencjometr, bo ten manipulator działa właśnie na zasadzie potencjometru. Tworzy pomiędzy odpowiednimi bolcami w gnieździe połączenie o pewnej oporności. Ponieważ tę oporność można regulować, kręcąc gałką w lewo i w prawo, to łatwo jest na podstawie wskazań paddle sterować ruchomymi obiektami na ekranie. Oczywiście wartość oporności odczytuje się za pomocą pewnych komórek pamięci, podłączonych do układów wejścia/wyjścia, w których znajduje ona swoje odzwierciedlenie liczbowe.

624, $0270 PADDL0
    Umowna wartość potencjometru 0. Cień komórki o adresie $d200 (53767), której zawartość jest tutaj przepisywana w każdym przerwaniu VBLANK. Jeśli zależy nam na użyciu trybu szybkiego odczytu potencjometrów, o którym wspomniałem w poprzednim odcinku, to musimy odwoływać się właśnie do adresu $d200.

   Ta komórka zawiera wartość pomiędzy 0 a 228, zależną od położenia potencjometru.

   Do starych modeli ATARI, które były przeznaczone głównie do gier można było podłączyć do ośmiu wiosełek. Do komputerów serii XL/XE można przyłączyć jedynie cztery potencjometry, a i tak grupuje się je, używając po jednym gniazdku dla każdych dwóch z nich. Z tego wynika, że pierwsze gniazdko joysticka służy do podłączenia wiosełek 0 i 1.

    Poniżej znajduje się krótki program, który odczytuje wartość komórki PADDL0. Po podłączeniu potencjometru można obserwować, jak zmienia się wartość w tej komórce w zależności od położenia gałki paddle. Osoby, które nie mają tego urządzenia mogą obejrzeć program w działaniu, dotykając poślinionym palcem bolców w gnieździe joysticka. Ponieważ powierzchnia ludzkiej skóry także ma jakiś opór elektryczny, program odczyta zmieniającą się wartość wskazywaną przez komórkę PADDL0. Tego samego programu można użyć dla skontrolowania pozostałych potencjometrów - trzeba tylko zamiast 624 wpisać w wierszu 20 adres komórki, która odpowiada za interesujący nas potencjometr.
10 GRAPHICS 0:POKE 752,1
20 ? PEEK(624);" "
30 IF PEEK(764)<>255 THEN 50
40 ? CHR$(28);:GOTO 20
50 POKE 764,255:POKE 752,0:END


625-627, $0271-$0273 PADDL1-PADDL3
    Umowna wartość potencjometrów 1-3.

628, $0274 PADDL4
   Umowna wartość potencjometru 4. Jak już pisałem, współczesne komputery ATARI nie są przystosowane do obsługi więcej niż czterech potencjometrów, stąd ta i następne trzy komórki pamięci zawierają informacje o położeniu jednego z tych wiosełek, którego przyłączenie jest możliwe. Lokacje te zachowano jedynie dla zapewnienia kompatybilności ze starszymi modelami ATARI.

629-632, $0275-0278 PADDL5-PADDL7
    Umowna wartość potencjometrów 5-7.

632, $0278 STICK0
Położenie joysticka 0. Cień komórki o adresie $d300 (54016). STICK0 zawiera zawsze jedną z dziewięciu możliwych liczb. Informując nas o aktualnym położeniu joysticka włączonego do pierwszego gniazda. Szczerze mówiąc, w tej komórce są wykorzystywane jedynie cztery mniej znaczące bity, i to w taki sposób, że normalnie są ustawione, a każdy ruch joystickiem powoduje skasowanie jednego z nich.

0 góra
1 dół
2 lewo
3 prawo

   Na rysunku zestawiono wartości zapisywane w komórce STICK0 w zależności od położenia joysticka.

   Oczywiście każdy ruch po skosie powoduje skasowanie dwóch spośród wymienionych bitów. I tak np. o ile w stanie spoczynku joystick "generuje" liczbę 15 (%1111), to poruszenie nim w lewo w górę daje wartość 10 (%1010), wynikającą ze skasowania bitów 0 i 2.

    Do skontrolowania położenia joysticka można także użyć programu przeznaczonego dla potencjometru (patrz powyżej). Wystarczy w tym celu zmienić w wierszu 20 liczbę 624 na 632 i już można sprawdzić, jak komputer "widzi" joystick. Gdyby zdarzyło się, że program pokazuje jakąś inną, niż pokazane na rysunku, wartość, to nie należy się zdumiewać. Napisałem wprawdzie o dziewięciu liczbach, ale napisałem także o czterech bitach. Jak łatwo policzyć, z czterech bitów można złożyć liczby od 0 do 15. Teoretycznie więc, w przypadku np. uszkodzenia joysticka, program odczytujący jego położenie może wykryć pewne, nazwijmy to niedozwolone, wartości. Z drugiej strony można sobie wyobrazić nieco inny joystick, np. taki, jakie stosuje się w modnych ostatnio maleńkich grach elektronicznych. Nie ma tam drążka, a jedynie przyciski symbolizujące cztery możliwe kierunki (osiem, jeśli weźmie się pod uwagę kierunki pośrednie). Nic nie stoi na przeszkodzie temu, by samodzielnie zrobić tego rodzaju manipulator. Można by pomyśleć także o czymś bardziej skomplikowanym, np. o specjalnej klawiaturze podłączanej do gniazda z boku komputera, której można by używać tylko jedną ręką...

    Przy okazji przypomniało mi się pewne wydarzenie. Otóż kiedyś siedzieliśmy z pewnym kolegą przed komputerem i bardzo się nudziliśmy. Mieliśmy ochotę zagrać w grę "Boulder Dash", lecz niestety nie mieliśmy joysticka. Po prostu pech! Problem jednak dał się rozwiązać. Napisaliśmy wtedy maleńki programik - coś w rodząju emulatora joysticka na klawiaturze. Troszkę oszukaliśmy komputer, ale zabawa była wspaniała. Nikomu nie mogę obiecać, że ten programik będzie działał z każdą grą (zazwyczaj wykonują one przed uruchomieniem gorący start, który zabija istniejące przerwania), lecz może się komuś przydać. Listing programu, zamieszczony na stronie 25, należy zasemblować na dysk lub kasetę przy pomocy QA, uzyskując w ten sposób samodzielny program zdatny do wykonania pod kontrolą DOS-u lub COSu.

633, $0279 STICK1
   Położenie joysticka 1. I tutaj, mimo, że nie ma już możliwości podłączenia czterech joysticków, zachowano aż cztery rejestry dla nich.

634-635, $027a-$027b STICK2-STICK3
   Położenie joysticków 2-3.

636, $027c PTRIG0
   Wskaźnik naciśnięcia przycisku na potencjometrze 0. Cień komórki $d300 (54016). Normalnie zawiera liczbę jeden, a w przypadku naciśnięcia przycisku do tej komórki wpisywane jest zero.

   Jak można zauważyć, jest to komórka związana z tym samym rejestrem, co joystick. Można więc, badając PTRIG0 i PTRIG1 zorientować się, czy drążek został wychylony w prawo lub w lewo. Niestety nie można w ten sposób dowiedzieć się niczego na temat ruchów joystickiem w pionie. Maleńki programik poniżej drukuje znak < po wychyleniu pierwszego joysticka w lewo, natomiast znak > po wychyleniu go w prawo.

    Oczywiście odpowiednia zmiana numerów komórek w wierszu 30 da nam informacje o drugim joysticku.
5 DIM LT$(1):LT$=CHR$(30)
10 GRAPHICS 0:POKE 752,1
20 ? CHR$(20);LT$;
30 LR=PEEK(637)-PEEK(636)
40 IF LR=1 THEN ? "<";LT$;:GOTO 30
50 IF LR=-1 THEN ? ">";LT$;:GOTO 30
60 IF PEEK(764)=255 THEN 20
70 POKE 764,255:POKE 752,0:END


637-643, $027d-$0283 PTRIG1-PTRIG7
   Wskaźniki naciśnięcia przycisków na potencjometrach 1-7.

644, $0284 STRIG0
   Wskaźnik naciśnięcia przycisku na joysticku 0. Cień komórki $d010 (53264). Normalnie zawiera jeden, naciśnięcie tzw. fire na joysticku powoduje wpisanie tutaj zera. Modyfikując wiersz 20 pierwszego programiku przykładowego można sprawdzić stan tej komórki.

645-647, $0285-$0287 STRIG1-STRIG3
   Wskaźniki naciśnięcia przycisków na joystickach 1-3.

   Kilku następnych komórek pamięci używa do różnych celów system operacyjny.

648, $288 CSTAT
   Rejestr stanu magnetofonu.

649, $289 WMODE
    W tej komórce przechowywana jest informacja o tym, czy magnetofon wykonuje operację odczytu (komórka zawiera 0), czy zapisu (komórka zawiera 128).

650, $28a BLIM
    Wielkość bufora danych dla magnetofonu. Ta komórka zawiera liczbę bajtów danych dla odczytywanego lub zapisywanego rekordu, który znajduje się pod adresem 1021 ($03fd). Przybiera wartość od 0 do 128 (taka jest długość normalnego rekordu taśmowego). Komórkę tę zapisuje OS na podstawie bajtów kontrolnych, poprzedzających każdy rekord na taśmie.

651, $028b ...
    Nieużywana komórka pamięci.

652-653, $028c-$028d NIOPTR
   Niegdyś nieużywane, obecnie zawierają adres procedury obsługi operacji wejścia/wyjścia dla tzw. nowych urządzeń, dołączanych do szyny równoległej.

654-655, $028c-$028f NADLOD
   Niegdyś nieużywane, obecnie zawierają adres ładowania dla operacji wejścia/wyjścia nowych urządzeń.

   Informacje zawarte w "Mapie pamięci" z TA 3/92 są nieścisłe. Tryby graficzne ANTIC-u 4, 5, 12, 14 mają swoje odpowiedniki w BASIC-owych trybach 12, 13, 14, 15. Za popełnioną pomyłkę bardzo przepraszam.

Jarosław Syrylak

       opt %010101

*----- system ------------------
dosvec equ $0a
pokmsk equ $10
vtimr1 equ $0210
stick0 equ $0278
strig0 equ $0284
audf1  equ $d200
kbcode equ $d209
stimer equ $d209
irqen  equ $d20e
skstat equ $d20f

frq    equ 127

       org $600

*----- main --------------------
main   lda myint
       sta vtimr1+1
       lda #frq
       sta audf1
       lda pokmsk
       ora #1
       sta pokmsk
       sta irqen
       sta stimer
       jmp (dosvec)

*----- my pokey interrupt ------
myint  txa
       pha

jmove  ldx #15
       lda skstat
       and #%00000100
       bne jfire

       lda kbcode
       ldx #3
chkkey cmp keytab,x
       beq setjoy
       dex
       bpl chkkey
       bmi jfire
setjoy lda joytab,x
       tax

jfire  txa
       and #15
       sta stick0
       lda skstat
       and #%00001000
       bne myintx
       sta strig0

myintx pla
       tax
       pla
       rti

*----- data --------------------
keytab dta b(14)
       dta b(15)
       dta b(6)
       dta b(7)
joytab dta b(14)
       dta b(13)
       dta b(11)
       dta b(7)

       org $2e0
       dta a(main)

       end




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

Pixel 2001