*********************************
* Zoom4 Irq routines for Plus/4 *
*                               *
*        by bubis/RSC           *
*********************************


Mi ez?
^^^^^^
A zoom4 egy lebututott fli mod, ami grafikus modban lehetove teszi, hogy a kepernyot egy 80x50-es pixel matrixra bontsuk fel, aminek pixeleit szabadon szinezhetjuk a 121 szinnel.
Letezik zoom4 karakteres uzemmodban is, de itt most csak a grafikus moddal foglalkozunk.

Fileok:
^^^^^^^
example/*	Egy pelda effekt.
src/*		A zoom4 rutinok es segedrutinok
readme.txt	Ez a leiras.

Hogyan mukodik?
^^^^^^^^^^^^^^^
Ha mondjuk hires modban a bitmap $f0-val van kitoltve, akkor a karakter bal es jobb oldalat szabadon szinezhetjuk, ez egy 80x25-os pixel matrix. Ha a karakter sorok kozepen ki tudnak cserelni a szinramot, akkor fuggolegesen is kette tudnak osztani a karaktereket, es egy 80x50-es matrixot kapnank. Pont ezt csinalja a zoom4 irq.

Mit tartalmaz ez a csomag?
^^^^^^^^^^^^^^^^^^^^^^^^^^
Az src konyvtarban ket zoom4 irq rutin talalhato. A "zoom4irq_gr.s" egy sima zoom4 rutin, a "zoom4irq_grp.s" pedig egy olyan, amelyik a karaktersorok kozepen nem csereli ki teljesen a szineket, hanem csak a fenyero ertekeiket. Ez hasznos lehet, ha egyebbkent az alatta futo effekt csak a fenyero ertekekkel dolgozik, vagy nem fontos, hogy a szin ertekek mindem zoom4-es pixel sorban frissuljenek.

Hogyan kell hasznalni?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A zoom4 rutint az initIrq szubrutin meghivasaval lehet mukodokepes allapotba hozni. Ezutan a megszakitas engedelyesesevel automatikusan elindul. Az initIrq meghivasa elott az X illetve Y regiszterbe kell tolteni a paros illetve paratlan sorok szin ertekeit meghatarozo szinram cimenek felso byte-jat (lasd $ff14).

Segedrutinok
^^^^^^^^^^^^
A "zoom4prep.s" tartalmaz ket segedrutint.
Az initBitmap a bitmap cimkenek megfeleloen feleltolti a bitmap elso 640 bytejat a $f0 ertekkel. Azert nem az egeszet, mert mindket zoom4 rutin folyamatosan lenullaza $ff1b erteket, es igy nem hasznal tobbet a bitmapbol mint az elso ket karaktersornak megfelelo reszt. Ha nem $f0-al akarunk fillezni, akkor toltsuk A-ba amit akarunk es hivjuk meg initBitmap+2-ot. :)
A setGrMode rutin grafikus modba kapcsol, es a grafikus kepernyo helyet beallitja ($ff12) a bitmap cimkenek megfelelo ertektre.

Extrak: 
^^^^^^^
1) Frame buffering
^^^^^^^^^^^^^^^^^^
Amennyiben a colorBufferChange cimkenek megfelelo memoriacimre nullatol kulonbozo erteket irunk, jelezzuk a rutinnak, hogy a kovetkezo frameben mar mas szinramokat kell hasznalnia. Az uj ertekeket a newColorRam0, newColorRam1 memoriacimekre kell irni. Ezzel a modszerrel elkerulhetjuk, hogy felkesz allapotban lehessen latni az effektunket, persze ez egy kicsit tobb munkat igenyel.

2) Effect in Irq
^^^^^^^^^^^^^^^^
Amennyiben az effectInIrq cimke erteke definialva van, a kovetkezo tortenik:
A 2-es rasztersorban az zoom4 irq elinditasa utan rendszeresen meghivodo megszakitas elinditja az effectInIrq cimen kezdodo subrutint es csak akkor ter vissza a megszakitasbol, ha ez a rutin vegrehajtodott. Kozben engedelyezi a megszakitasokat, tehat minden ugyanugy mukodik tovabb, de figyel arra, hogy amig nem futott le az effekt rutinja, addig ne inditsa el ujra. Ha viszont mar lefutott, akkor 2-es rasztersorban ismet elinditja.
Ennek az az eredmenye, hogy ha mondjuk egy effekt 0,7 vagy pl. 1,3 frame alatt szamol is ki egy ujabb fazist, akkor is 1 illetve 2 frame-enkent fog ujra vegrehajtodni, es a hatramaradt idoben a nem megszakitasban futo "foprogram" azt csinal amit akar. Tehat futhat alatta mondjuk egy decruncher vagy eppen megfelelo loaderrel tolthetunk a lemezrol.

3) Music Player
^^^^^^^^^^^^^^^
Amennyiben a player cimke definialva van, a zoom4 rutin valahol a screen aljan minden raszterlefutasnal meghivja a player cimke altal definialt rutint.
