| 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. Support Plus/4 World on Patreon |