Sunday, 22 January 2023

Basic programok átírása TVC-ről Enterprise-ra

Képernyők és videolapok fajtái Enterprise-on és TVC-n

Alapesetben az Enterprise szöveges képernyőt nyit meg, melyre rajzolni nem lehet, csak írni, de a színeket itt is változtathatjuk bizonyos határok között. Az Enterprise ugyanis külön kezel szöveges és grafikus videolapokat, és a grafikus lapokra is lehet írni szöveget, de ott nem jelenhet meg a kurzor, tehát editor képernyőként nem lehet használni, valamint grafikus lapon a karakterek nem felülíródnak, hanem egyik karakterre ráíródik a másik. Alapesetben egy 42x24 karakterből álló videolap nyílik meg Enterprise-on, de megnyithatunk ennél tetszőlegesen kisebb lapot is, vagy még egy picivel nagyobbat is, és azt szabadon pozicionálhatjuk a képernyőn. A pozicionálásnál a videolap mindenképpen az egész képernyősort elfoglalja, akkor is, ha kisebb a szélessége jóval, mint a képernyőé. Ilyenkor a képernyő közepére kerül vízszintesen a videolap maga, és a körülötte üresen maradt részek a kerethez fognak tartozni. Többféle szöveges és karakteres videomód létezik Enterprise-ra, valamint attribútum mód is, ezekről később lesz szó. Egyszerre a képernyőn többféle videomódú videolap (ablak) is megnyitható, akár soronként eltérő tulajdonságokkal rendelkező videolapok is.

TVC-n gyakorlatilag csak grafikus üzemmódok vannak, ezek nagyjából egyesítik az Enterprise-os grafikus és szöveges lapok tulajdonságait: megjelenik rajtuk a kurzor, editálható a szöveg, ugyanakkor rajzolni is lehet ezekre a lapokra, és a karakterek nem egymásra íródnak, hanem felülírják egymást alapesetben. Egy előnye az Enterprise-os szöveges lapnak, hogy ha átdefiniálunk egy karaktert, akkor a képernyőn lévő összes ilyen karakter alakja megváltozik, ami például játékokban a háttéranimációhoz jól kihasználható.

Csatornák

Mivel Enterprise-on többféle videolap létezik, ezekre különböző csatornaszámokkal lehet hivatkozni. Alapértelmezése is van ennek, így a PRINT utasítás mindig az alapból megnyitott képernyőre nyomtat, ami a 0-ás csatorna. A PRINT "hello" tehát ugyanaz, mint a PRINT #0:"hello". Mivel a szöveges képernyőre nem lehet rajzolni, a rajzolással kapcsolatos utasítások nem a 0-ás csatornát használják alapértelmezettként, hanem a 101-es csatornát. Egy GRAPHICS utasítással egy négyszínű videolap nyílik meg a képernyő felső 20 sorában, a szöveges képernyő pedig a képernyő alsó 4 sorára korlátozódik. Ha ilyenkor a PLOT utasítással rajzolunk, akkor az a 101-es, GRAPHICS utasítással megnyitott csatornán fog megjelenni. Tehát például a PLOT 30,80 az ugyanaz, mint a PLOT #101:30,80. A SET INK, SET PAPER utasítások is a 101-es csatornát használják alapértelmezettként. Mivel TVC-n ez nem így van, és a PRINT és SET PAPER utasítások ugyanarra a képernyőre vonatkoznak, átírásnál külön meg kell adni a csatornaszámot, ha a szöveges képernyőn a szín megváltozik. Ezért, ha csak szöveg van a TVC-s programban, akkor a szöveges képernyőt használjuk EP-n, és ilyenkor mindig SET #102:INK és SET #102:PAPER kell a puszta SET INK és SET PAPER helyett! A 102-es csatorna az alapértelmezett szöveges videolapra vonatkozik. (A 0-ás csatorna az editor csatorna.) Programtól függően persze olykor az Enterprise-on a grafikus képernyőt célszerű használni a szöveges helyett, ilyenkor viszont a PRINT után kell csatornaszámot megadni.

Az Escape játékban a szörnyek szeme külön színű volt. TVC-n ezt úgy oldották meg, hogy átállítottak valamit, ami miatt nem felülírták egymást a karakterek, hanem egymásra kerültek. Mivel ez EP-n csak grafikus képernyőn lehetséges, célszerű volt grafikus képernyősre írni át a játékot. Emiatt a karakterek letörlése volt probléma, ilyenkor egy háttérszínű, mindent betöltő négyzet alakú karakterrel kellett felülírni azt a karaktert, melynek helyére írni akartunk valamit, és utána visszaállítani a tinta színét a korábbira. Ha a Bányász vagy a Létra című játékot akarnánk átírni Enterprise-ra, akkor is ez lenne a helyzet, ha a nagy karaktereket akarnánk használni, hiszen nagy karakteres videomód nincs.

Ha TVC-n a GRAPHICS 2-vel megnyitott képernyőhöz hasonlót akarunk EP-n, azt a TEXT 80 paranccsal érhetjük el, ilyenkor 80 karakter fér egy sorba. Tetszőlegesen paraméterezhető videolap megnyitásával akár teljesen lehetne emulálni a TVC 64 karakter szélességű üzemmódját, így ha ez a cél, ez is megvalósítható, de erre általában nincs szükség, csak speciálisabb esetekben. Mivel a GRAPHICS 2-vel megnyitott képernyőre rajzolni is lehet, a TEXT 80-nal megnyitott képernyőre pedig nem, így a programtól függően nyithatunk EP-n kétszínű videolapot inkább (szintén GRAPHICS 2 vagy GRAPHICS HIRES 2), ha ez tűnik célszerűbbnek.

TVC-n a GRAPHICS 4-gyel megnyitott képernyőhöz hasonlót EP-n a TEXT 40 (vagy simán csak TEXT, mivel alapértelmezése 40) paranccsal nyithatunk. Ha rajzolni is kell a képernyőre, akkor GRAPHICS HIRES 4 vagy akár GRAPHICS 4 utasítással megnyitható grafikus videolap is.

Egy kis bökkenő van a GRAPHICS 16-ot használó TVC-s basic programokkal, ugyanis az Enterprise-on a GRAPHICS 16 vagy GRAPHICS HIRES 16 utasítással megnyitható videolapra 6 karakterrel kevesebb fér ki, mint TVC-n. Ilyenkor, ha fontos, hogy meglegyen egy sorban a 16 karakter, a legegyszerűbb 40 karakteres módot használni. Ilyenkor a karakterek kisebbek lesznek, és a képernyő szélein 12-12 karakternyi hely üresen fog maradni. Egy másik lehetséges megoldás ilyenkor újraírni úgy a programot, hogy egy karakternek 2x2 karakter feleljen meg, és így szebben néz ki 40 karakteres szöveges lapon,  bár így meg függőlegesen nem fog kiférni az ugyanúgy 24 sorba. Gépi kódú programozással esetleg létre lehet hozni a TVC-éhez hasonló képernyőt.

Lehetséges, hogy valamiért pont akkora képernyőt akarunk EP-n, mint TVC-n. Erre az esetre jó félretenni egy programrészt, amely pontosan 32 vagy 64 karakter széles képernyőt hoz létre EP-n. A Multetris átírásakor előnyös volt ugyanakkora képernyő.

Eltérés még, hogy ha PLOT-tal adjuk meg a PRINT-elendő szöveg koordinátáit, TVC-n nem kell vessző a PLOT végére, EP-n igen, mert EP-n akkor a pontot is odateszi, ami nem szép, pl.

TVC: PLOT 300,300:PRINT #0:"text"
EP: PLOT 300,300,:PRINT "text"

Feltételek és ciklusok

A Enterprise basicjének fontos tulajdonsága a strukturáltság, így egy sorban csak egy olyan utasítás lehet, mely a feltételek és a ciklusok kezelését végzi. Így a FOR és NEXT utasításokon kívül az adott sorban nem lehet más utasítás. Két IF sem kerülhet egyetlen sorba. Az ELSE csak egyetlen utasítás lehet a sorban. Az ON x GOTO és az ON x GOSUB utáni sorszámfelsorolás végére sem kerülhet újabb utasítás, ennek új sorba kell mennie.

TVC-n így fest egy bonyolult, feltételekkel teli rész, az Escape című játékból:

930 IF EL=1 THEN PRINT#0,AT EX,EY:MONSTER$:IF MOVE=1 THEN IF MAP(EX,EY)<>0 THEN EL=0:GOSUB3100:IF ENEMYLIVE(MAP(EX,EY))=1 THEN ENEMYLIVE(MAP(EX,EY))=0:GOSUB3120

Ezt EP-n így kell megcsinálni:

 930 IF EL=1 THEN
 931   PRINT #10,AT EX,EY:MONSTER$
 932   IF MOVE=1 THEN
 933     IF MAP(EX,EY)<>0 THEN
 934       EL=0:GOSUB 3100
 935       IF ENEMYLIVE(MAP(EX,EY))=1 THEN ENEMYLIVE(MAP(EX,EY))=0:GOSUB 3120
 936     END IF
 937   END IF
 938 END IF
 
Még egy eltérés az IF utasítással:

TVC-n: IF NOT A$="3" THEN
EP-n: IF A$<>"3" THEN 

A SET utasítás kezelése:

TVC-n: SET PAPER0;INK1
EP-n: SET PAPER 0:SET INK 1

SET STYLE nincs EP-n, helyette SET LINE STYLE van, ami talán hasonlóan működik (ellenőrizni kell). SET MODE sincs ebben a formában EP-n, de valami biztos van helyette.

EP-n a SET után közvetlenül eléggé általános a csatornaszám megadása, pl. SET #101:PALETTE 2,5,20... 

TVC: SET RATE és SET DELAY - EP: SET KEY RATE, SET KEY DELAY.

Változók:

TVC-n minden változó értéke alapból 0. Enterprise-on azonban, ha egy változónak nem adunk értéket és így kérdezzük le vagy hivatkozunk rá pl. IF után, akkor hibaüzenetet kapunk, hogy nincs ilyen változó. Az Escape vagy a Multetris játék átírásánál volt probléma, hogy nem voltak alapból megadva a változóknak az értékek, így ezeket pótolni kellett.

Egy string lehetséges maximális hosszát beállíthatjuk TVC-n a DIM M$*100 utasítással. Enterprise-on ezt a STRING *100 M$ utasítással oldhatjuk meg.

Eltérő vagy eltérően működő utasítások:

TVC: CLS - Enterprise: CLEAR SCREEN (képernyő törlése). Ez a 102-es videolapot törli, más videolap törlésénél a CLEAR #x-re lehet szükség, ahol x a csatorna száma. Programtól függ, milyen képernyő van, milyen csatornaszámmal.

Ha billentyűleütésre megy tovább a program, TVC-n a GET A$ önmagában billentyűleütésre vár és nem is megy tovább, amíg nem ütünk le billentyűt. Ehhez EP-n 3 utasítás kell 3 külön sorban (ha nem akarjuk a GOTO-t használni):

DO
  GET A$
LOOP UNTIL A$<>""

TVC-n erre egyetlen GET A$ elég.

 

SET CHARACTER - mindkét gépen ugyanaz, csak TVC-n eggyel több pixelsor van. EP-re átírásnál egy számot törölni kell innen és figyelni kell, hogy melyiket. Az Escape átírásakor emiatt egy pixellel feljebb vagy lejjebb volt a szörnyek szeme, amit az eredeti program írója vett csak észre. 

Az OPEN és CLOSE utasítás mindkét gépen létezik, de a szintaxisuk eltér.

Az EXT utasítás létezik EP-n, de teljesen más a funkciója, mint TVC-n.

LOMEM: Nem létező utasítás EP-n.

Az OUT és POKE létezik mindkét gépen, de eltérő hatásuk lehet.

A függvények között is lehetnek eltérések, pl. a STRING$, VARPTR függvényt az EP nem ismeri. A VERNUM létezik EP-n, de valószínű eltérő értéket ad.

A színkódok eltérnek! Ezeket ki kéne kísérletezni, mi felel meg EP-n az adott TVC-s színeknek.

Gép nyelve:

Enterprise-ból létezik angol és német nyelvű gép. Az angol nyelvű képen a T billentyű után az Y jön, a német nyelvű gépen a Z, illetve az X mellett balra van géptípustól függően az Y vagy a Z. Az Escape játék átírásakor ennek pont nagy jelentősége volt, ugyanis az irányítógombok közé tartozott a Z is, és nem minden Enterprise-on lehetett emiatt jól játszani. Bár ez Enterprise specifikus kérdés, talán átírásnál is érdemes lehet erre felkészülni, bár túl gyakran nem lehet erre szükség.

Szintaxis:

Enterprise-on illik mindent külön írni, ami nem egy szó. Bizonyos esetekben egybeírva is elfogadja az EP basic interpreter, de valamikor nem. Példák:

TVC: SET INK0 - EP: SET INK 0

TVC: FORA=1TO20 - EP: FOR A=1 TO 20

TVC: NEXTI - EP: NEXT I 

TVC: DATA0,2,2 - EP: DATA 0,2,2

A változóneveket mindenképpen írjuk külön attól, ami előtte van!

A csatornaszámokat # jellel jelöljük például txt fájlban. EP basicben ez font jelként fog megjelenni.

Hang:

A SOUND DURATION paraméterezése gyakorlatilag megegyezik. A PITCH-é eléggé eltér, ennek átszámítása bonyolult lehet. A VOLUME paramétert teljesen törölni kell, helyette LEFT és RIGHT kell, és ennek paraméterezése más. A VOLUME 0 és 15 közötti érték lehet, a LEFT és RIGHT pedig 0 és 255 közötti. Így ha pont ugyanazt a hangerőt akarjuk elérni, akkor a 0-15 közötti számot át kell számolni 0-255 közötti számra, és a LEFT és a RIGHT után is azt kell beírni.

Ha a TVC-s SOUND-ban nincs ; (pontosvessző), akkor az INTERRPUT paramétert meg kell adni EP-n. Ha van pontosvessző, akkor csak simán törölni kell a pontosvesszőt.

Példa:

TVC: SOUND;PITCH 3349,DURATION 100,VOLUME 15
EP: SOUND PITCH 37,DURATION 100,LEFT 255,RIGHT 255

TVC: SOUND PITCH 3349,DURATION 100,VOLUME 15
EP: SOUND PITCH 37,DURATION 100,LEFT 255,RIGHT 255,INTERRUPT

Egyéb EP specifikus dolgok:

Szükség lehet bizonyos programoknál, pl. játékoknál a billentyűhang kikapcsolására, ami TVC-n nincs. Játékok irányításakor zavaró lehet a billentyűk megnyomásával járó kattogás, így EP-n ki kell adni: SET KEY CLICK OFF.

EP-n a komolyabb programok eltüntetik a status sort felülről, mert irreleváns: SET STATUS OFF. TVC-n ilyen nincs.

EP-n célszerű a legelső sornak így kinéznie: PROGRAM "név.kit" ahol a név max. 8 karakter, melyet max. 3 karakterből álló kiterjesztés követhet, ez többnyire .bas, ami arra utal, hogy ez egy basic program. Például:

100 PROGRAM "escape.bas"

Ha egy puszta SAVE parancsot adunk ki basicben, akkor a PROGRAM utasítás után megadott névvel menti ki a programot.

Kezdődhet egy átlagos TVC-ről EP-re konvertált program így:

100 PROGRAM "név.bas"
110 SET STATUS OFF:SET KEY CLICK OFF:TEXT

No comments:

Post a Comment