Piszemy i umieszczamy w liniach DATA procedurę przerwania VBLK,która sprawdza położenie joysticka i odpowiednio przenosi rysunek strzałki. Na początku procedury umieszczamy dodatkowe instrukcje ustawiające przerwanie użytkownika po VBLK i parametry początkowe grafiki graczy i pocisków.
SETVBLK = $E45C
EXITVBLK = $E462
GTIACNTL = $026F
PMCNTL = $D01D
DNACNTL = $022F
RAMTOP = $6A
PMBASE = $D407
HPOSP1 = $D001
JOYO = $0278
TRIBO = $0284
HPOS = $CB
VPOS = $CC
*= $0600
PLA
LDY # <START
LDX # >START
LDA #$07
JMP SETVBLK ;inicjowanie procedury
;VBLK uzytkownika
ENTRY PLA ;wejscie z BASIC-u
LDA #$01 ;priorytet graczy
STA GTIACNTL
LDA #$02 ;wlaczenie graczy
STA PMCNTL
LDA #$3E ;obraz norialny, DMA
;dla graczy i ANTIC-a,
;rozdzielczosc jednowierszowa
STA DMACNTL
LDA #$9C
STA RAMTOP
STA PMBASE
LDA #$78 ;poczatkowe polozenie
;gracza
STA D1+1
STA D2+1
LDA #$9D
STA D1+2
CLC
RTS ;powrot do BASIC-u
;poczatek przerwania
START LDA JOYO ;polozenie joysticka
AND #$0F
EOR #$OF
BEQ SHAPE ;jezli joystick w
;polozeniu neutralnym,
;to skok
HOR TAX ;ruch poziomy
AND #$0C
BEQ VERT
LDY D2+1 ;polozenie
AND #$08
BEQ LEFT
RIGHT INY ;ruch w prawo
JMP HEND
LEFT DEY ;ruch w lewo
HEND STY HPOSP1
STY D2+1
VERT TXA ;ruch pionowy
AND #$03
BEQ SHAPE
AND #$01
BEQ DOWN
UP DEC D1+1 ;ruch u gore
JMP SHAPE
DOWN INC D1+1 ;ruch w doi
SHAPE LDX #$00 ;przeniesienie wzoru
;do obszaru P/MG
LOOP LDA PATTERN,X
D1 STA $9D78,X
INX
CPX #$10
BNE LOOP
LDA TRIGO ;stan przycisku
BNE EXIT ;jezeli nie nacisniety,
;to skok
D2 LDA #$78
STA HPOS ;pozycja pozioma
LDA D1+1
STA VPOS ;pozycja pionowa
EXIT JMP EXITVBLK ;koniec
PATTERN .BYTE 0,64,96,112,120,120,112,112,
;80,16,8,8,8,4,4,0
Pierwsze pięć instrukcji inicjuje przerwanie VBLK — opis tej operacji był w trzecim odcinku naszego cyklu. Kolejny blok instrukcji od etykiety ENTRY do START ma za zadanie wprowadzenie odpowiednich wartości dorejestrów grafiki graczy i pocisków (dokładny opis w „Bajtku" 3/87).
Właściwa procedura przerwania rozpoczyna się od etykiety START. Sprawdza ona położenie joysticka i odpowiednio do tego modyfikuje położenie duszka na ekranie monitora. Następnie sprawdza rejestr przycisku i jeżeli przycisk jest wciśnięty, to współrzędne aktualnego położenia duszka zapisywane są w komórkach 203 i 204. Jednostką miary w pionie jest numer linii ekranu, zaś w poziomie numer cyklu koloru. Wartości z komórek 203 i 204 mogą być już bezpośrednio wykorzystane przez program w BASIC-u.
Gotową procedurę przenosimy przypomocy pętli FOR/NEXT na stronę 6 pamięci (od adresu 1536).
Pamięć grafiki graczy i pocisków będzie znajdować się w miejscu, w którym obecnie mieści się pamięć obrazu. Dlatego też najprostszym sposobem oczyszczenia tego obszaru przed zainicjowaniem jest wykonanie instrukcji GRAPHICS. Teraz już można ustalić parametry PM/G (I = USR(1546)) i ustawić przerwanie użytkownika (I = USR (1536)).
Ostatnią czynnością powinno być przesunięcie na nowe miejsce pamięci obrazu — zrobi to instrukcja GRAPHICS. Powoduje ona jednak także wyłączenie PM/G konieczne jest więc ponowne uruchomienie przez I = USR(1546) — czynność ta musi być powtarzana po każdej instrukcji GRAPHICS.
Zamieszczony obok wydruk w BASIC-u realizuje cały opisany wyżej przykład. Można dołączyć go do dowolnego własnego programu, aby umożliwić użytkownikowi wybór opcji przez wykorzystanie joysticka. Oczywiście wybór ten musi być uzależniony od zawartości komórek 203 i 204.
Od następnego numeru naszego pisma będziemy zamieszczać nadesłane przez Czytelników krótkie procedury wykorzystujące dostępne w Atari przerwania.
10 FOR I=0 TO 143:READ A:POKE 1536+I,A:NEXT I
20 GRAPHICS 0:I=USR(1536):I=USR(1546)
30 GRAPHICS 0:I=USR(1546)
40 DATA 104,160,48,162,6,169,7,76,92,228,104,169,1,141,111,2,169,2,141,29,208,169,62,141,47,2,169
30 DATA 156,133,106,141,7,212,169,120,141,104,6,141,117,6,169,157,141,105,6,24,96,173,120,2,41,15
60 DATA 73,15,240,41,170,41,12,240,18,172,117,6,41,8,240,4,200,76,74,6,136,140,1,208,140,117,6,138
70 DATA 41,3,240,13,41,1,240,6,206,104,6,76,98,6,238,104,6,162,0,189,128,6,157,120,157,232,224,16
80 DATA 208,245,173,132,2,208,9,169,120,133,203,173,104,6,133,204,76,98,228,0,64,96,112,120,120,112
90 DATA 112,80,16,8,8,8,4,4,0
(ziew)