Lorigraph
File-név: LORIGRAP.BAS Program neve: Lorigraph | Loriciels - 1985 Rajzoló, karakter-tervező |
Sajnos az Enterprise software-parkjából mindig is nagyon hiányzott egy "tisztességes" rajzoló program. Bár történtek próbálkozások, átütő eredményt egyik programnak sem sikerül elérnie. A Lorigraph az első próbálkozás e téren, mérsékelt sikerrel... A program még a Centrum áruházakban is kapható volt, részint ezért, másrészt mert akkoriban ez az egy program jelentette a "választékot", szinte minden géptulajdonos ismerte. Sajnos sokra senki nem tudott vele jutni (ennek okai a későbbiekben kiderülnek).
A programot egy BASIC betöltővel indul, tehát a programot BASIC-ből tudjuk indítani. Indulás után választhatunk az angol és a francia nyelvek között, majd elénk tárul a menü, A készítők megpróbálták "grafikus" ikon-vezérlést megvalósítani a menüben (több kevesebb sikerrel), ennek köszönhetően a program gyorsan megtanulható. A kurzor irányítása a beépített botkormánnyal történik, de időnként a billentyűzethez is hozzá kell nyúlnunk. A program kezelőfelülete három elkülönített részre osztható: a menü, a "rajzasztal", és a karaktertervező képernyő.
Az érdemi munka a rajzasztalon történik, ezért tekintsük át az elérhető funkciókat:
A rajzunk felett, a kiválasztott funkció nevét, és a kurzor koordinátáit követhetjük nyomon.
Sajnos a kurzor sebessége (pontosabban annak lassúsága) egy idő után már zavaró, de szerencsére könnyen segíthetünk rajta! Mivel a program a billentyűzetet az EDITOR: eszközön keresztül kezeli, így a kurzor sebességét a program indítása előtt a SET KEY DELAY, és a SET KEY RATE parancsokkal könnyedén beállíthatjuk. (Javasolt a 5-3 érték használata). Ezt a két utasítást akár a BASIC betöltőbe is beírhatjuk.
-
POINT - pont rajzolása: a kurzor pozíciójába a SPACE megnyomásával egy pontot rajzolunk.
-
DRAW - nevével ellentétben nem elsősorban vonal rajzolására szolgál, sokkal inkább görbéket tudunk rajzolni. A SPACE megnyomásától az ESC megnyomásáig vonalat (görbét) rajzolunk, amerre mozgatjuk a kurzort.
-
LINE - vonal rajzolása: a vonal kezdő- és végpontját kell beállítanunk. A két pontot a program egy egyenessel köti össze.
-
LINES - vonalakat tudunk vele egymás után rajzolni. Az újabb vonal kezdőpontja az előző vonal végpontjában lesz. A funkcióból az ESC megnyomásával léphetünk ki.
- RAYS - szintén több vonalat tudunk rajzolni, de az összes vonal kezdőpontja ugyanaz (az összes vonal egy pontban fut össze). Addig rajzolhatjuk a tetszőleges számú vonalakat, amíg az ESC megnyomásával be nem fejezzük.
- TRIANGLE - háromszöget rajzolhatunk, annak három pontjának megadásával.
-
RECTANGLE - négyszöget (téglalapot, vagy négyzetet) rajzolhatunk, annak bal felső, és jobb alsó sarkának megadásával. A négyszög oldalai vízszintesek, és függőlegesek.
-
TRAPEZE - trapézt rajzolhatunk. Először a trapéz alapját kell megadnunk, majd a magasságát is. Lényeges különbség az előző funkcióhoz képest, hogy az egyes oldalak nem csak vízszintesek, és függőlegesek lehetnek, de az átellenes oldalak párhuzamosak egymással.
-
LOZENGE - sarkára állított négyszöget rajzolhatunk. Miután kiválasztottuk a négyszög középpontját, meg kell adnunk annak magasságát, és szélességét (jobbra-balra irány).
-
CIRCLE - kört rajzolhatunk annak középpontjának megadásával. A sugarat az előző funkcióhoz hasonlóan a jobbra-balra iránnyal tudjuk beállítani.
-
ELLIPSE - ellipszist rajzolhatunk. Most is az ellipszis középpontját kell megadnunk, de a két sugarat külön-külön állíthatjuk (fel-le, jobbra-balra)
-
PAINT - kifestés. Zárt alakzatokat színezhetünk ki. A BASIC rutint használja, tehát működése azonos a PLOT PAINT parancséval. Meg kell adni, melyik pontból kiindulva akarjuk kiszínezni a kívánt alakzatot, majd a SPACE megnyomásával akkurátusan munkához lát a gép. Értelemszerűen, ha az alakzat nem teljesen zárt, kiszínezzük az egész képernyőt (a tinta "kifolyik" a résen). Természetesen az üres képernyőn is használhatjuk a papír színének megváltoztatásához.
-
ERASER - A kép tetszőleges részéből kitörölhetünk egy négyszögnyi területet. (Papír színű lesz a terület). A terület megadása azonos módon történik a RECTANGLE funkció használatához.
-
WRITE - szöveg írása. A kurzor pozíciójától kezdve szöveget illeszthetünk a grafikus képernyőre. A funkciót nem kell a SPACE megnyomásával aktivizálni, ha a kurzort a kívánt pozícióba visszük, kezdhetjük a gépelést. A karakterek mérete függ a grafikus képernyő paramétereitől (színek száma, magas-alacsony felbontás). Vigyázzunk a sorok végén! A kurzor elérve a képernyő szélét a következő sor elejére ugrik, de a sor végi szóátvitel és a szerkesztőbillentyűk nem működnek.
-
MAGNIFY - a kurzor helyett egy négyszöget mozgathatunk a képernyőn. A SPACE megnyomásával kinagyíthatjuk a négyszög által kijelölt területet, majd a kinagyított képen pontokat rajzolhatunk. Sajnos az ESC megnyomásával azonnal a menübe ugrunk vissza.
-
COPY - a kép tetszőleges területét másolhatjuk át egy másik területre. A SPACE megnyomása után kijelölhetjük a másolni kívánt részt (a bal felső, és a jobb alsó sarok megadásával), majd újból beilleszthetjük azt.
-
MOVE - A kiválasztott részt itt nem másoljuk, hanem átmozgatjuk a kívánt helyre. A program írója (itt sem) volt következetes, ha a kivágott területet a megfelelő pozícióba mozgattuk, az ESC-et kell megnyomni!
-
TURN OVER - a kiválasztott részt vízszintesen és függőlegesen tükrözhetjük a jobbra-balra, és fel-le irányok használatával. (kilépés ESC-el.)
-
PALETTE - a paletta színeinek kiválasztása. Felül látható az aktuális paletta, először itt kell kiválasztani a megváltoztatni kívánt színt, majd a SPACE megnyomásából a lehetséges 256 színből kell beállítani a nekünk tetszőt. Rendkívül zavaró, hogy miután kiválasztottunk egy színt, visszalépünk a menübe.
- Vízszintes tükrözés
-
Függőleges tükrözés: a két funkciót kiválasztva egy csillag jelenik meg az ikonok jobb felső sarkában, mely a funkció bekapcsolt állapotát jelzi. Ezután bármit rajzolunk, az vízszintesen-függőlegesen tükrözve is megjelenik a képernyőn. Akár mindkét funkciót egyszerre is bekapcsolhatjuk. Ezen funkcióval egyszerűen készíthetünk látványos, szimetrikus rajzokat.
-
PATTERN - a vonal típusát állíthatjuk be, 14 lehetséges változat közül. A beállított vonal nem vonatkozik az ellipszis, és a kör rajzolására.
-
CREATE CHARACTERS - karakter-tervező modul indítása. A karakterkészlet tetszőleges karakterét kiválasztva átdefiniálhatjuk azt. A karakterkészlet elemeit az alul elhelyezkedő listából választhatjuk ki. Miután kiválasztottunk egy karakter, az megjelenik a felső szerkesztő mezőben, ahol pontonként átrajzolhatjuk azt. Karakter képét eredeti méretben folyamatosan nyomon követhetjük a szerkesztő mezőtől jobbra, illetve az alsó listában is. Sajnos a pontok rajzolásán kívül semmilyen lehetőségünk nincs (pl. tükrözés, forgatás). Ha befejeztük a karakter átrajzolását az ESC megnyomásával visszajutunk az alsó karakter-kiválasztó listába. Az ESC újbóli megnyomásával visszatérhetünk a menübe. Az áttervezett karakterek új alakja ilyenkor is megmarad.
-
CREATE SCREEN - a grafikus képernyő paramétereinek beállítása. Mivel a képernyő újradefiniálása törli eddigi munkánkat, először megkérdezi, hogy valóban törölni kívánjuk eddigi munkánkat. Ha a 'Y' megnyomásával válaszolunk, egy menüből kiválaszthatjuk a színmódot (2 / 4 / 16 / 256 szín), a felbontást (HIGH / LOW RESOLUTION), valamint a képernyő méretét. Az egyes értékek között a beépített botkormánnyal mozoghatunk, a SPACE megnyomásával továbbléphetünk.
-
Grafikus képernyő mentése - az ikonra kattintva a mentés automatikusan megtörténik, bármiféle kérdés nélkül. Valószínűleg a számítástechnika történelmének legsutább megoldását láthatjuk ebben a programban: a kimentendő file neve LORI3, vagyis a program kérdés és figyelmeztetés nélkül felülírja saját maga 3. file-ját!!! Az egyetlen megoldás, ha a program betöltése után azonnal lemezt cserélünk, és egy másik lemezre dolozunk.
-
Grafikus képernyő betöltése - a program rákérdez, hogy az eddig szerkesztett munkánkat törölhetjük-e. 'Y' válasz esetén a program betölti a LORI3 nevű állományt.
-
PARTIAL SAVE - A szerkesztett kép egy kijelölt részének kimentése. Az előző funkciónál leírt "csemege" itt is aktuális, LORI3 névvel a program megsemmisíti önmagát...
-
PARTIAL LOAD - Az előző funkcióval elmentett képrészlet beillesztése a szerkesztett képernyőre.
-
CHARACTER SET - a karakterkészlet kimentése / betöltése. Talán mondani sem kell, hogy a file neve LORI3 lesz...
-
CLEAR SCREEN - amennyiben műalkotásunkat nem kívánjuk megőrizni az utókor számára, ezzel a funkcióval törölhetjük a grafikus lapot, és új kép szerkesztésébe kezdhetünk.
Bár a programban van néhány ötletes megvalósítás, igen súlyos hiányosságokkal kell szembenézniük azoknak, akik a programmal rajzolni szeretnének. A legsúlyosabb hiányosság, hogy a programnak saját file-formátuma van, tehát az elmentett képet nem tudjuk sehol felhasználni. (Úgy árulták a programot, hogy nem mellékeltek hozzá betöltő rutint, sem leírást a file-formátumról!!!) Ez érthetetlen, hiszen kézenfekvő lett volna a VLOAD funkcióval betölthető formátum. A mentés körüli bonyodalmakról már volt szó, ekkora hmmm... "butaságot" (finom voltam?) a Rekordok Könyvébe is be kellene jegyezni. Mindemellett a program használhatóságát drasztikusan csorbítja, hogy nincs benne UNDO funkció (vagyis nem tudjuk visszavonni az utolsó műveletet), így, ha a képpel valami "baleset" történik, nincs más hátra, mint a legutolsó mentés visszatöltése. Ez a megoldás rendkívül nehézkes, ráadásul javasolt a gyakori mentés, ami hosszadalmassá teszi a munkánkat.
E rövid ismertető után lássuk a program működését: - 30 - Lefoglaljuk a gépi kódú rutinok számára a tárban a helyet
-
40 - Tartalmazza azt a rutint, ami a rajz adatait fogja beolvasni. Az Assembler megfelelője az 1. listán látható. -
50-70 A rajzot ténylegesen betöltő rész. Az Assembler megfelelője a 2. listán látható. - 80 - Az adatoknak definiál egy tömböt.
- 90-140 - A file nevét adjuk át a betöltő gépi kódú részének. Az első bájt a név hosszát adja meg, a többi a név ASCII kódja. LORI3 néven keresi a képállományt, mert a LORIGRAPH ezen a néven menti el a rajzokat. Ez természetesen megváltoztatható, de gondoskodni kell arról, hogy a file nevével egyezzen. A file neve maximum 7 karakter lehet ebben az esetben, mert a 8-as tárcímet a rendszer használja, s ide nem szabad írnunk!
-
150 - Aktivizálja a típust meghatározó rutint. Ez a rutin a 16000-es tárcímtől kezdve helyezi el a beolvasott adatokat. -
160-240 - Az előbbiekben beolvasott adatoknak megfelelően állítja be a videofeltételeket. -
250 - Megnyitjuk a videocsatornát. Azért 100 fölötti számmal, hogy a program végén lévő RUN parancs ne zárja be. - 260-270 - A színeket álltja be az eredeti adatok alapján.
- 280 - Megjelenítjük a videolapot.
-
290-340 - Kiszámítja a videolapunk által elfoglalt RAM-terület nagyságát, s elhelyezi a gépi kódú rutinunk számára is hozzáférhető helyen. - 350 - Aktivizálja a betöltő rutint, s betölti a rajzot.
- 360 - Betölti és futtatja a megadott BASIC programot
Futtatandó programunkat a következőképpen érdemes kezdeni:
10 CLOSE £120
20 TEXT
Ennek köszönhetően felszabadul a rajz által lefoglalt videomemória. A programmal betölthető rajz mérete a teljes képernyő (X = 42; Y = 27) méretig terjed. Ennél nagyobb Y-méretet nem fogad el, a 280-as sorban hibát jelezne.
Magnetofonos rendszer esetén a szalagon a file-ok sorrendjének a következőnek kell lennie: a képbetöltő rutin, a kép, a futtatandó program. |
1. lista
LD A,106
LD DE,0
EXOS 1
LD A,106
LD BC,13
LD DE,16000
EXOS 6
RET |
;a csatorna száma ;mutató a file nevére ;csatorna megnyitása funkció ;a csatorna száma
;a beolvasott byte-ok száma ;tárolási cím
;blokk olvasása funkció ;visszatérés a BASIC-hez |
2. lista
DI
IN A,(0B1h)
PUSH AF
IN A,(0B2h)
PUSH AF
IN A,(0B3h)
PUSH AF
EI
LD A,120
LD B,3
EXOS 11
DI
LD A,0FFh
OUT (0B3h),A
DEC A
OUT (0B2h),A
DEC A
OUT (0B1h),A
EI
PUSH BC
POP DE
LD BC,(0)
LD A,106
EXOS 6
LD A,106
EXOS 3
DI
POP AF
OUT (0B3H),A
POP AF
OUT (0B2h),A
POP AF
OUT (0B1h)
EI
RET |
;letiltja a megszakítást
;Z80-as 1- lap értékét
;menti el a verembe
;Z80-as 2-es lap értékét
;Z80-as 3-as lap
;újra engedélyezi a megszakítást
;a BASIC-ben VIDEO cs.
;speciális funkció hívás, ami
;visszaadja a VIDEO cs. RAM-ját
;lapozás előtt mindig célszerű
;a VIDEO RAM-ok belapozása
;a megfelelő Z80-as szegmensekre
;BC és DE felcserélése
;BASIC-ből megadott érték olvasása
;blokk olvasási funkció
;a csatorna lezárása
;az eredeti Z80-as szegmensek
; visszaállítása
;visszatérés a BASIC-hez |
A LORIGRAPH karaktertervező részével készített karakterek háttértárolóra menthetők. A CHRTOLT.BAS program az így kimentett karakterek betöltését végzi, és átállítja a karakterkészletet a tervezettnek megfelelően. Ez akkor gyorsabb, ha sok karaktert kell átdefiniálni, és az BASIC módszerrel már lassan menne. A felhasználó is jobban elviseli a hosszabb töltési időt, mint ha percekig kell várnia, mire a program életjelt ad magáról.
A programban a beolvasó csatorna megnyitása és lezárása nem gépi kódban íródott, hanem BASIC-ből történik. Így könnyebb a fájl nevének megváltoztatása. A képbetöltő programnál is megváltoztathatjuk ilyenre a csatornamegnyitásokat. Abban a programban azért alkalmaztam a gépi kódú megnyitási formát, hogy megismerjék, de jó példának mutatkozott arra is, hogy bemutathassam, hogyan lehet több adatot átadni a gépi kódú rutinjainknak. A program átalakítása nem okozhat gondot, ha a leírást megfelelően tanulmányozzák.
A 3. lista a program gépi kódú részének assembly listája, ami tulajdonképpen megfelel a 40-es sor hexadecimális számsorozatának. A programot a 80-as sortól tovább írhatjuk, illetve a meglévő programjainkat MERGE-lhetjük. Ha szalagos rendszerrel dolgozunk, akkor a karakterkészletet a kimentett program mögé vegyük fel. |
3. lista
DI
IN A,(0B2h)
PUSH AF
LD A,0FFh
OUT (0B2h),
EI
LD A,106
LD BC,1152
LD DE,0B480
EXOS 6
DI
POP AF
OUT (OB2h),A
EI
RET |
;megszakítás letiltás ;A Z-80-as 2-es lap ;tartalmának elmentése ;A 2-es lapra a rendszer- ;szegmens belapozása ;megszakítás engedélyezés ;Csatorna szám ;A file hossza ;A karakter terület RAM-ja ;Blokk olvasása funkció
;A Z-80-as 2-es lap ;tartalmának eredeti állapota
;Vissza a BASIC-hez |