Login
Page 22
22 Fényújság C16, Plus/4
Jónéhány PLUS4-játék cracker-ek által feltört változatában találkozhatunk
olyan effektussal, amikor a képernyô valamelyik részén fényújság-szerûen
scrollozódik valamilyen szöveg, ami a cracker (ál)nevét, üdvözleteit
(GREETINGS TO...), kevésbé barátságos üzeneteit (...AND A LITTLE FUCK TO MY
DEAR FRIEND...), és ehhez hasonló marhaságokat láthatunk. Az alábiakban
bemutatásra kerülô rutin segítségével hasonló effektust produkálhatunk: a
karakteres képernyô utolsó sorában görgethetünk bármilyen, 39 karakternél nem
hosszabb szöveget.

A forráslistát nem kommenteztük be, inkább szóban ismertetjük a mûködését:

Amint az a címekbôl is látszik, az egész programot a processzorveremben
helyeztük el. Erre azért volt szükség, hogy az esetleg mellette használni
kívánt BASIC-programunk nehogy felülírja. A rutin mûködtetését a gép
megszakítás-rendszerére bíztuk rá, hogy - amint a megfelelô POKE
utasításokat kiadtuk - külön beavatkozás nélkül is minden egyes
megszakítás-ciklusban végrehajtódjon. Ez tette lehetôvé, hogy BASIC
programokban is tökéletesen - gyakorlatilag BASIC-program lassulása nélkül
is - felhasználható legyen.

A rutin az elsô két sorában letiltja a legalsó sor használatát, hogy a
szöveget ne tudjuk felülírni, csak POKE utasításokkal. A következô három sor
a megszakítás nyugtázása, majd a raszter-regiszter lekérdezése. E regiszter
felülírásával tudjuk beállítani, hogy melyik videósornál kérjen
megszakítást. A 0131-es címen található összehasonlítással egy elágazást
hozunk létre: ha az interrupt a $B0-ás sornál történt, akkor a sor görgetése
végrehajtódik, és új értéket adva a raszter regiszternek ($CC) befejezôdik
az interrupt. Ha valaki járatos a megszakítás-rendszerben, az tudja, hogy az
utolsó sor a $C3-as raszter-sortól kezdve látható a képernyôn. Mi mégis a
$B0-tól kérünk megszakítást. Ennek az oka, hogy a karakterek egy hellyel
való balra tolása ($0174-$018C) körülbelül annyi idôt vesz igénybe, hogy
mire befejezôdik, a videósor kirajzolása is odaér a $C3-as rasztersorba. Ha
viszont nem átpakolni kell a karaktereket, hanem csak egy pixellel eltolni
ôket ($FF07), akkor meg kell várni, amíg a videósor kirajzolása a $C3-as
sorig elér ($015F-$0164). Ezzel az idôzítéssel érhetjük el a törésmentes
görgetést.

A rutin BASIC-ben való felhasználását az alábbi egyszerû példaprogrammal
kívánjuk bemutatni.

A 10. sorban egy képernyôtörlést hajtunk végre, hogy a képernyô 25 sora
biztosan üres legyen.

A 20. sork ciklusa a kurzor 25. sorba való mozgatását végzi.

A 30. sorban sorban kiíratjuk a scrollozni kívánt szöveget. Itt két dologra
kell vigyáznunk:

39 karakternél ne legyen hosszabb a szöveg.

A pontosvesszôt ne felejtsük le a PRINT utasítás végérôl. Ha ez megtörténik,
akkor a rutin egy üres sort fog görgetni, mivel a képernyôre kiiktatott
sorunk egy sorral feljebb csúszik a képernyô-scroll miatt.

A 40. sorban a számlálórekeszt feltöltjük az alapul szolgáló 7-es értékkel
(ez tárolja a képernyô bitenkénti eltolásához szükséges alapértéket).

Az 50. sorban a megszakítás-rendszerre léptetjük rutinunkat, azaz megadjuk
az IRQ-vektornak a rutin kezdôcímét. Innen kezdve fog mûködni a fényújságunk.

A 60. sorban egy újbóli képernyôtörléssel a kurzort a képernyô bal felsô
sarkába pozícionáljuk. Erre csak azért van szükség, hogy a 25. sorból
elmozdítsuk a kurzor mutatóját és így az 1-tôl a 24. sorig tartó
képernyô-ablakunk zavartalanul mûködhessen.

Amennyiben valahol le akarjuk állítani a görgetést, írjuk be programunk
megfelelô részére a következô utasításokat:

XXX POKE 788,14: POKE 789,206: POKE 2021,24

Copyright © Plus/4 World Team, 2001-2024