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.

Most nézzük át, milyen funkciókat választhatunk ki a menüből! Az ikonokat a bal felső saroktól a jobb alsó sarok felé haladva veszem sorra:

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.

A LORIGRAPH rajzolóprogram hasznosítása

A letölthető állományban található LORITOLT.BAS program a képek betöltését végzi el. Így színesebbé, látványosabbá tehetjük akár BASIC programjainkat is. Ahhoz, hogy a program működését megértsük, meg kell ismernünk a LORIGRAPH-al kimentet kép felépítését. Mivel a rajzprogram megengedi a színmód, felbontás, képernyőméret és színek módosítását, s újbóli betöltésnél ezek beállításáról automatikusan gondoskodik, joggal gondolhatjuk, hogy a képpontadatokon kívül ezeket is kimenti háttértárolóra. Ez valóban igaz, a kimentett rajz első 13 bájtja tartalmazza ezeket az adatokat, a következő sorrendben:
0. bájt - videomód (HIRES, LORES)
1. bájt - színmód (2, 4, 16, 256 szín)
2. bájt - a rajzlap vízszintes mérete
3. bájt - a rajzlap függőleges mérete
4-11. bájt - a nyolc palettaszín értékét
12. bájt - a fixbias értéke.
Ezek az adatok akkor is kiíródnak, ha csak kétszínű rajzot készítettünk, s a többi színre nem is lenne szükség! Ez valójában megkönnyíti a rugalmas alkalmazást.

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