## Seans spirytystyczny - czyli wywoływanie duchów na Atari XL/XE (1)

Procedura inicjalizacji grafiki P/MG. Należy ją zapisać instrukcją `LIST` Basica do wykorzystania we własnych programach.

Kolejność postępowania:

1. Zaprojektować kształty duszków. Szerokość 8 punktów, wysokość nawet do 255 punktów. Przeliczyć na bajty danych.
2. Wpisać dane duszków w wiersze `DATA` od 32100 do 32130.
3. W wierszach od 31070 do 31100 w miejsce liczby 16 wpisać wysokość zaprojektowanych duszków.
4. W wierszu 31110 ustalić kolory. Wzór: `POKE 704,n` gdzie `n=16*k+l`; k - nr koloru (0-15), l - jasność (0-15).

Kolejność wykonywania procedur we własnych programach:

1. Uruchomić procedurę P/MG (`GOSUB 31000`).
2. Narysować planszę (w przykładzie wiersze od 15 do 20).
3. Ustalić parametry duszków (wiersze od 30 do 70).

Dalej następuje właściwy program. W przykładzie zastępują go wiersze od 90 do 130 realizujące przypadkowy ruch duszków. Duszkami poruszamy wpisując instrukcją `POKE` odpowiednie wartości do komórek `PLX+n` i `PLY+n`, gdzie n - nr duszka (0-3). Wartości te dla duszka na ekranie wynoszą: `PLX` od 48 do 200, `PLY` od 28 do 215.

UWAGI:
  Procedura nie pozwala na użycie pocisków. Każdy duszek może być innej wysokości. Jeżeli nie wykorzystujemy wszystkich duszków, usuwamy z programu odpowiednie wiersze (np. dla duszka nr 3 są to 31100 i 32130) i umieszczamy go poza ekranem wpisując w wierszu 70 wartości 0,0.
BHP:
  Każdorazowo po użyciu instrukcji `GRAPHICS` należy wykonać `POKE 559,62` (patrz wiersze 15 i 31040). Przy testowaniu własnych programów po naciśnięciu klawisza Break, a przed `RUN` należy zresetować komputer lub zamiast `RUN` wykonać `GOTO` do pierwszego wiersza po `GOSUB 31000` (w przykładzie `GOTO 20`).

W następnym numerze: priorytety i kolizje. Program maszynowy: Tom Sak i Sid Meier.

Marek Turowski

    10 GOSUB 31000
    15 GRAPHICS 2+16:POKE 559,62
    20 FOR I=0 TO 239:? #6;"."5:NEXT I
    30 POKE PLL,16:POKE PLL+1,16:POKE PLL+2,16:POKE PLL+3,16:REM WYSOKOSC GRACZY
    60 POKE PLX,100:POKE PLY,100:REM POZYCJA WYJSCIOWA GRACZA 0
    50 POKE PLX+1,110:POKE PLY+1,100:REM POZYCJA WYJSCIOWA GRACZA 1
    60 POKE PLX+2,150:POKE PLY+2,150:REM POZYCJA WYJSCIOWA GRACZA 2
    70 POKE PLX+3,160:POKE PLY+3,150:REM POZYCJA WYJSCIOWA GRACZA 3
    80 REM TANIEC GRACZY
    90 FOR I=0 TO 3
    100 POKE PLX+I,RND(0)*150+50:POKE PLY+I,RND(0)*180+30
    110 NEXT I:FOR I=0 TO 100:NEXT I:GOTO 80
    31000 RME INICJALIZACJA P/MG
    31010 FOR I=1536 TO 1706:READ D:POKE I,D:NEXT I
    31020 FOR I=1776 TO 1787:POKE I,0:NEXT I
    31040 PMBASE=PEEK(106)-16:POKE 106,PMBASE:GRAPHICS 0:POKE 553,62
    31050 PM=PMBASE*256
    31060 FOR I=PM+1024 TO PM+2048:POKE I,0:NEXT I
    31070 RESTORE 32100:PL0=PM+1024:FOR J=PL0+1 TO PL0+16:READ A:POKE J,0:NEXT J
    31080 RESTORE 32110:PL1=PM+1280:FOR J=PL1+1 TO PL1+16:READ A:POKE 1,0:NEXT J
    31090 RESTORE 32120:PL2=PM+1536:FOR J=PL2+1 TO PL2+16:READ A:POKE 1,0:NEXT J
    31100 RESTORE 32130:PL3=PM+1792:FOR J=PL3+1 TO PL3+16:READ A:POKE 1,0:NEXT J
    31110 POKE 706,30:POKE 765,86:POKE 706,126:POKE 707,170
    31120 PLX=53248:PLY=1780:PLL=1786
    31130 POKE 623,1:POKE 54279,PMBASE:POKE 53277,3:POKE 1788,PMBASE+4
    31160 X=USR(1696)
    31150 RETURN
    32000 DATA 162,3,189,266,6,260,89,56,221,260,6,260,83,141,254,6,106,161
    32010 DATA 255,6,142,253,6,26,163,0,103,253,6,26,109,252,6,133,204,133
    32020 DATA 206,189,260,6,133,203,173,254,6,133,205,183,268,6,170,232,46,255
    32030 DATA 6,164,16,168,177,203,165,205,169,0,165,203,136,202,208,244,76,87
    32040 DATA 6,160,6,177,203,145,205,169,0,145,203,200,202,208,244,174,253,6
    32050 DATA 173,254,6,157,240,6,189,236,6,240,48,133,203,24,138,141,253,6
    32060 DATA 109,235,6,133,204,24,173,253,6,109,252,6,133,206,139,240,6,133
    32070 DATA 205,183,248,6,170,160,0,177,203,145,265,260,202,203,268,174,253,6
    32080 DATA 163,6,157,236,6,262,48,3,76,2,6,76,38,228,0,0,164,163
    32090 DATA 7,162,6,160,6,32,92,228,96
    32095 REM DANE DLA GRACZY 0-3
    32100 DATA 6,6,8,126,195,195,195,195,135,195,195,195,195,195,195,126
    32110 DATA 24,66,126,26,255,255,219,219,255,189,213,135,162,126,66,24
    32120 DATA 24,96,96,66,66,153,126,24,60,90,153,165,36,66,66,66
    32130 DATA 6,66,36,24,6,255,123,129,129,129,123,123,129,255,36,66