Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | Atari Zines | YouTube http://madteam.atari8.info  
MEMBERS
PRODUCTIONS
S C E N E
G A M E S
T O O L S
V B X E
GRAPHICS
WORK IN PROGRESS
Bubble Shooter
HARDWARE
Snes2Joy / Pad4Aatari / TOM rev2
Sio2SD / Pajero
Sio2SD / Rocky
Stereo / Pajero
GTIA / Psychol
ANTIC + VBXE test
ARTICLES / MAGAZINES
DEMO EFFECTS
LINKS
   

Murzyn
Assembler tricks
Syzygy #1

Na samym początku tego artykułu pragnę powiedzieć, że nie będzie w tym cyklu nauki assemblera od podstaw. Jeśli ktoś chce się go nauczyć niech sięgnie np. po "Tajemnice ATARI", lub inną literaturę tego typu. Nie będzie także skomplikowanych procedur wykonujących zniewalające efekty. Będą natomiast proste procedurki (=krótkie), które można zwięźle nazwać trickami. Wszystkie procedury drukowane w tym cyklu będą oczywiście w QUICKU, ale na pewno każdy programujący w innym assemblerze będzie mógł bez problemu przełożyć je na posiadany przez siebie assembler.

Na początek pokażę jak uzyskać efekt odwróconego "do góry nogami" obrazu. W zasadzie odwracane są tylko znaki poprzez odpowiednią zmianę zmwartości komórki CHACT ($02F3). Wbrew pozorom jest to zadanie bardzo proste, trzeba tylko wiedzieć co, gdzie, jak umieścić w pamięci. A więc zaczynamy. Efekt odwracania liter uzyskuje przez ustawienie drugiego bitu CHACT. Nasza procedurka najpierw odwróci obraz "do góry nogami", następnie poczeka na naciśnięcie dowolnego klawisza i powróci do DOS'u. Na początek zadeklarujmy etykiety używane przez procedurę:

        chact   equ     $02F3
        start   equ     $0700
        klawisz equ     764
        nic     equ     #255
        bit2    equ     %00000100

Teraz trochę wyjaśnień. Znaczenia etykiety CHACT nie trzeba chyba wyjaśniać. Etykieta START to rejestr zawierający początkowy adres DOS'u w pamięci. Etykieta KLAWISZ to oczywiście rejestr zawierający kod ostatnio naciśniętego klawisza. Etykieta NIC to zwyczjna liczba dziesiętna. Etykieta BIT2 po załadowaniu do komórki CHACT ustawi nam drugi bit tego bajtu, a tym sposobem spowoduje odwrócenie wszystkich znaków. A więc zacznijmy nasz program.

                org     $0600

Kolejna ważna sprawa, a mianowicie umieszczenie programu w pamięci. W tym przypadku na szóstej stronie pamięci. Teraz obróćmy znaki:

        main    lda     bit2
                sta     chact

Dzieje się tak po ustawieniu bitu drugiego komórki CHACT. Teraz trzeba poczekać na naciśnięcie dowolnego klawisza.

        czekaj  lda     klawisz
                cmp     nic
                beq     czekaj

Pozostaje tylko powrócić do DOS'u wykonując skok na adres $0700:

                jmp     start

Po powrocie do DOS'u ekran pozostanie odwrócony (i o to nam chodziło). Można temu zaradzić ładując liczbę 0 do komórki 755 ($02F3), ale trzeba pamiętać, że musi to być przed skokiem do $700. Na koniec trzeba podać DOS'owi adres i miejsce, od którego ma uruchomić naszą procedurę. A robi się to tak:

                run     main

Oczywiście każdy program powinien kończyć się rozkazem END, aby assembler wiedział kiedy zakończyć assemblację.

                end     of nasz programik

Po uruchomieniu w/w programiku obraz powinien się odwrócić, a po naciśnięciu klawisza powinien powrócić do DOS'u.

MURZYN

 

madteam.atari8.info © MadTeam, hosted: www.atari8.info