Efekciarskie efekciki 2 [Soused Teat/Slight], Wiosna 1995
Dzisiaj chcę przedstawić wam scroll nr 2 - czyli zoomer (można go zobaczyć w moim starym demie "JUST FANCY"). Do dzisiaj niewiele osób wie (nawet widząc kod), w jaki sposób się go uzyskuje. Na początek wyjaśnię, jak każdy by chciał taki scroll zrobić. Pierwszym problemem, jaki napotyka jest jak rozciągnąć znaki w poziomie i zaraz zaczyna kombinować z LSR-owaniem lub ASL-owaniem. Ja też w ten sposób myślałem i nawet coraz lepiej mi szło, ale wciąż nie było mowy o scrollu w jednej ramce. Pewnego dnia przyszło niespodziewane olśnienie, a gdyby tak trzymać w pamięci scrolla bokiem???. Z wolna zaczął się pojawiać coraz bardziej klarowny obraz późniejszej procedury, aż w końcu zjawił się na skrawku kartki (jak większość moich programów) pełny obraz tego jakże prostego do uzyskania efektu.
Teraz pora, żebym Ci wyjaśnił na czym polega owo "trzymanie" scrolla bokiem. Załóżmy, że zwykłego scrolla chcemy zrobić graficznie, czyli litery z rolowanego bufora będziemy przepisywać na ekran, uzyskując efekt "przesuwu poziomego". I teraz... jak wygląda litera "A" w takim scrollu rozpisana na bity, każdy chyba wie:
........ bajt nr 0
...**... bajt nr 1
..****.. bajt nr 2
.**..**. bajt nr 3
.**..**. bajt nr 4
.******. bajt nr 5
.**..**. bajt nr 6
........ bajt nr 7
...co dla tekstu, np. "ALA" będzie wyglądać tak:
bajt bajt bajt
........ $00 ........ $08 ........ $10
...**... $01 .**..... $09 ...**... $11
..****.. $02 .**..... $0A ..****.. $12
.**..**. $03 .**..... $0B .**..**. $13
.**..**. $04 .**..... $0C .**..**. $14
.******. $05 .**..... $0D .******. $15
.**..**. $06 .******. $0E .**..**. $16
........ $07 ........ $0F ........ $17
W zoomscrollerze musimy zmienić nieco nasze przyzwyczajenie i zorganizować bufor tak, aby litera "A" wyglądała następująco:
........ bajt nr 0
.****... bajt nr 1
.*****.. bajt nr 2
..*..**. bajt nr 3
..*..**. bajt nr 4
.*****.. bajt nr 5
.****... bajt nr 6
........ bajt nr 7
...czyli tekst "ALA" będzie teraz wyglądał tak:
bajt bajt bajt
........ $00 ........ $08 ........ $10
.****... $01 .******. $09 .****... $11
.*****.. $02 .******. $0A .*****.. $12
..*..**. $03 .*...... $0B ..*..**. $13
..*..**. $04 .*...... $0C ..*..**. $14
.*****.. $05 .*...... $0D .*****.. $15
.****... $06 .*...... $0E .****... $16
........ $07 ........ $0F ........ $17
Taki bufor oczywiście trzeba odpowiednio przepisać na ekran, co załatwi taka oto procedurka:
LDA BUFOR+$00
ASL A
ROL ZERO_PAGE+$00
ASL A
ROL ZERO_PAGE+$01 ...
...i tak dalej, żeby wyszedł jeden słupek bitów na ekranie, np.
0xxxxxxx
1xxxxxxx
1xxxxxxx
1xxxxxxx
0xxxxxxx
1xxxxxxx
0xxxxxxx
0xxxxxxx
Następnie:
I tak powtarzamy to dla ośmiu bajtów bufora. Na końcu przepisujemy komórki ZERO_PAGE na ekran. W ten sposób przepisujemy 8 linii po 256 punktów. Oczywiście takim przepisywaniem nie uzyskamy efektu zoomera, więc musimy wcześniej przygotować tablicę, w której indeksem jest numer kolumny punktów na ekranie, a wartością w tablicy jest odpowiadający jej numer bajtu w buforze. Do naszej procedury dopisujemy przed każdym "LDA" LDX TABLICA:
LDX TABLICA
LDA BUFOR,X
ASL A ...
...a całość smarujemy hektarem kodu, który będzie rysował odpowiednio na ekranie. Ponieważ mamy do czynienia z komputerem posiadającym coś takiego, jak DList, to "rozciąganie" w pionie uzyskujemy właśnie na nim. Ponieważ, jak już wcześniej zaznaczyłem, artykuł ten jest dla BnŚZ (Bardziej niż Średnio Zaawansowanych), nie muszę tłumaczyć w jaki sposób wyliczać TABLICĘ (chociaż muszę powiedzieć od razu, że w "JUST FANCY" nie wykorzystałem dzielenia, przez co uprościłem sobie procedurę).
Pisał rozdrażniony Soused Teat,
któremu spalił się DX2/66.
BRAYMAG #2