Upload failed. Maybe wrong permissions?

User Tools

Site Tools



14. Grafika a Commodore-on

14-0.jpg
  

26:28
1985. április 17.
MTV 2. csatorna, 19:30

Bevezető

14-1.jpgPinkert László
  0:46 Köszöntöm nézőinket. Utóbbi adásainkban már nem adtunk házi feladatot. Úgy gondoltuk, hogy miután megismertük a BASIC nyelv szorosan vett utasításkészletét, mindenki gyakorolja azokat a részleteket, amelyekre, úgy érzi, leginkább szüksége van. Megemlíteném azonban, hogy a felkészülésnek mindenképpen két részből kell állnia. Az egyik az, hogy valamelyik mikroszámítógép-típusnak az utasításait megismerjük és helyesen tudjuk használni, a másik: szükséges, hogy mindenki gyakorolja a programtervezés menetét, logikáját. Nem tartozik szorosan a BASIC nyelvhez a grafikai utasításkészlet. Például a Commodore számítógépen egyetlen ilyen grafikai utasítás sincs, ezért az előző adásunkban nem is foglalkoztunk vele. Azonban ebbe a számítógépbe olyan áramköröket építettek bele, amelyek lehetővé teszik a színes és hanggal ellátott játékok készítését. Azonban ezek gépi kódú programok. A BASIC nyelvnek egyetlen, viszonylag kényelmetlen és lassú lehetősége van ezeknek az áramköröknek a kihasználására, ez a POKE, illetve a PEEK utasítás.

POKE-ok

14-2.jpgHerneczki Katalin Commodore 64
  2:03 Egyik korábbi adásunkban már megismerkedtünk a POKE utasítással. Commodore gépeknél ezt nagyon jól tudtuk használni, hiszen ennek segítségével lehet a képernyő, illetve a keret színét beállítani vagy megváltoztatni. Változtassuk most meg a képernyő színét mondjuk sötétszürkére. Tehát POKE utasítás, ezután egy címnek kell következnie, ez az 53 281, aztán egy vessző következik, és 11.
  

14-3.jpg14-4.jpg

  Valóban, a képernyő színe sötétszürkére változott. Meg kell azonban magyaráznunk azt, hogy mért éppen 53 281 volt a cím, és a tartalom miért 11. Nos, a cím azért ennyi, mert ebben a című byte-ban van az az információ, amelynek segítségével a képernyő színét változtathatjuk. Tehát ez erre a célra van fenntartva. A 11 az pedig a sötétszürke szín kódja. Egyébként tizenhatféle különböző színt állíthatunk be a Commodore gépnél, tehát nullától tizenötig terjedő számok valamelyikét írhatjuk ide.
  14-5.jpgMost állítsuk be a keret színét is, szintén sötétszürkére. Természetesen ezt is POKE utasítással tehetjük meg. Ötvenháromezer-kettőszáz… nyolcvanegy helyett nyolcvanat írunk, mert most a keret színét állítjuk, és természetesen 11-et írunk, hiszen ez a sötétszürke kódja volt. Ez sikerült is. Nézzünk most meg egy másik POKE utasítást, más címmel, más tartalommal. Tehát POKE, a cím legyen 1235, és a tartalom pedig 102.
  14-6.jpg
  A képernyőn megjelent egy kis pepita kocka. Nos, ebből arra lehet következtetni, hogy a gép a memória egy részét a képernyő karaktereinek tárolására használja fel. És ez az 1235-ös cím beleesett abba a mezőbe, abba az intervallumba, mert 1024-től 2023-ig terjedő címekben a képernyő karakterei kerülnek tárolásra. A 102 pedig természetesen ennek a kis pepita kockának a kódja. Nézzünk meg most egy meglehetősen érdekes POKE utasítást.
  POKE… a cím legyen 53 269, és a tartalom pedig 255.
  14-7.jpg
  A képernyőn egy szép színes alakzat jelent meg, sőt ezt még mozgatni is tudjuk. Nos, ez a Commodore gép egy speciális lehetősége, és ezt bizony részletesebben is elemezni kell.
  (A színes rombuszok körbesétálnak a képernyőn, közben a sorozat főcímzenéje szól – L. A. D.)
  
14-9.jpg14-10.jpg

  
14-11.jpg14-12.jpg

  
14-13.jpg14-14.jpg

  
14-15.jpg14-16.jpg

  
14-17.jpg14-18.jpg

  
14-19.jpg14-20.jpg

  
14-21.jpg14-22.jpg

Sprite-ok

14-23.jpgPinkert László Commodore 64
  5:19 A Commodore számítógépnek ez a lehetősége a sprite-ok használata. Sprite magyarul szellemet jelent, mi inkább foltnak fogjuk hívni. (A korabeli magyar szaknyelvben számos elnevezés élt: angyal, szellem, alakzat, ábra, MOB [Movable Object Block] és bizonyára továbbiak is, de végül az eredeti angol sprite lett a leggyakoribb, már ebben a sorozatban is – L. A. D.) Egy ilyen folt tulajdonképpen egy nagyméretű karakter. Vízszintesen huszonnégy, függőlegesen huszonegy pontból áll, úgy, ahogyan ezt most itt a T betűn látják. Jobb oldalon van a valóságos mérete, vagyis a 24·21 képpont, bal oldalon pedig egy eszközt látunk, egy segítséget arra, hogy ilyen T betűt – és természetesen más figurákat is – könnyen ki tudjunk rajzolni, el tudjunk készíteni. 504 pontnak a kódolása ugyanis elég fáradságos dolog, mindegyikről meg kell határozni, hogy bekapcsolva legyen vagy kikapcsolva.
  A sprite-oknak azonban van egy borzasztó nagy előnye. Az, hogy ha egyszer ezt a kódolást elvégeztük, akkor ez a sprite a továbbiakban néhány byte beállításának segítségével már tetszőlegesen mozgatható a képernyőn. Például ahogy itt látjuk.
  

14-24.jpg14-25.jpg

  Valamint szintén néhány byte átállításával változtatható a színe.
  
14-26.jpg14-27.jpg

  Természetesen fáradságos dolog lenne ezt a kódolást valóban kézzel és esetleg POKE utasítások segítségével elvégezni. Ezért van olyan programozási eszköz – ez a Sprite Editor –, amely megkönnyíti a programozó munkáját. Lehetővé teszi, amint láttuk, hogy kipróbáljuk mozgásban a sprite-ot, beállítsuk a színét, de ezen kívül lehet a sprite-ot mozgatni a mezőn belül – fölfelé vagy lefelé lépegetni –, el lehet fordítani, meg lehet nézni, hogy hogy néz ki az inverze, és egyéb trükköket is lehet vele csinálni.
  
14-28.jpg14-29.jpg

  
14-30.jpg14-31.jpg

  
14-32.jpg14-33.jpg

  A további trükkökhöz az tartozik hozzá, hogy nem egy ilyen sprite-ot tud a képernyő kezelni, hanem összesen nyolcat, vagyis nyolc lehet egyszerre a képernyőn. Ezek egymástól teljesen függetlenül mozgathatók… talán még megmutatnám azt a lehetőséget, hogy nagyíthatók is, x és y irányban egyaránt.
  
14-34.jpg14-35.jpg

  14-36.jpg
  Ezeket a lehetőségeket használtuk ki ennek a rövid kis TV-BASIC feliratnak a mozgatásához is. Néhány byte átállításával ezek a sprite-ok például egyenként mozgathatók a képernyőn, akár tetszőleges nagy sebességgel is, függőlegesen duplájára nagyíthatók, és duplára nagyíthatók vízszintesen is. Végül a betűket szép sorjában kivisszük a képernyőn kívülre.
  
14-37.jpg14-38.jpg

  
14-39.jpg14-40.jpg

  
14-41.jpg14-42.jpg

  14-43.jpg
  Ezen kívül olyan lehetősége is van még a sprite-ok használatának, hogy a beépített áramkörök figyelik, hogy két sprite a képernyőn összeér-e vagy nem. Amennyiben összeér, akkor bizonyos bitek megváltoznak a számítógépben, ezeknek a figyelésével dolgoznak az olyan játékok, amelyek például két autó vagy két egyéb játékos összeütközését figyelik.
  8:50 (Videóbejátszás a 6. adásban már látott Loco játékprogramból – L. A. D.)

Adatállományok

14-44.jpgDr. Kocsis András Commodore 64
  10:13 Most pedig váltsunk témát. Ezt az adást döntően a Commodore grafikai lehetőségeinek bemutatására szenteltük, a következőt pedig az adatállományok kezelésére. Ez azonban elég nagy téma ahhoz, hogy csupán csak egy adásban foglalkozzunk vele, ezért már ebben az adásban elkezdünk ezzel a témával ismerkedni.
  Nézzünk egy feladatot. Itt a stúdióban nagyon sokféle anyag van körülöttünk, és készítsünk egy olyan programot, amely mindig képes megmondani azt, hogy melyik anyagból hány darab van, és milyen értékben van itt a stúdióban. Ez, ha itt körülbelül kétszáz adat van, azt jelenti, hogy tízezer byte-nyi adattárolási kapacitásra lenne szükségünk, ez túl nagy ahhoz, hogy a számítógép memóriájában oldjuk meg, programon belül ilyen nagy adatmennyiséget nem tudunk tárolni, ezért ezt az adatmennyiséget mágneslemezen fogjuk a programtól elkülönítve tárolni. Milyen problémákat vet ez fel? Amíg mágneslemezen egy adathalmazt, egy adatállományt elhelyezünk, akkor annak valamilyen nevet kell adni, hogy megkülönböztessük az ott tárolt programoktól és más adatállományoktól. A másik kérdés az, hogyan tudjuk megmondani, hogy az adatállományban hol található meg az az adat, amely megmondja, hogy ebből az asztalból hány darab van. Ezt úgy lehetne például megoldani, hogy minden adat mellé tároljuk az adat nevét is, és ebből meg tudnánk mondani az asztaloknak a darabszámát. De ehelyett egy egyszerűbb megoldást választunk, amely kevesebb tárt igényel, nevezetesen azt, hogy az adatokat valamilyen rendszerben tároljuk. Az adatokat az adatállományban úgy tároljuk, mint ahogy a tömbökben. Itt is vannak sorok és oszlopok, itt azonban a sort rekordnak nevezzük. Általában az a gyakorlat alakult ki, hogy egy rekordban egy valaminek, egy egyednek az adatait tároljuk. Ezek az adatok pedig a rekord mezői. Tehát az adatállomány rekordokból, a rekordok pedig mezőkből állnak.
  Hogyan tudjuk használni az adatállományokat? Hát ahhoz, hogy egyáltalán használni tudjuk, az adatállományokat létre kell hozni, tehát föl kell írni az adatokat a mágneslemezre. A másik lépés akkor már végeredményben a célunk, az, hogy különböző kimutatásokat, összesítéseket tudjunk készíteni, ez a feldolgozás.14-45.jpg Az adatok azonban rendszerint változnak, innen kivisznek egy asztalt, behoznak egy új számítógépet, ezt az adatállománynak is követnie kell, tehát az adatállományt módosítani kell. Most nézzük meg azt, hogy program szintjén milyen műveleteket kell elvégezni akár a létrehozás, akár a feldolgozás vagy a módosítás esetében.
  14-46.jpgElőször is a program és az adatállomány között egy kapcsolatot kell létrehozni. Ezt úgy is nevezzük, hogy megnyitjuk az adatállományt a program számára, ezután tudunk az adatállománnyal műveleteket elvégezni. A műveleteket mindig rekordonként tudjuk elvégezni, tehát vagy egy rekordot felírunk az adatállományra, vagy egy rekordot beolvasunk, de minden esetben rekordonként. Azt is hozzátesszük, hogy a mi esetünkben az adatállomány kezdetétől a végéig minden egyes rekordot be fogunk olvasni, illetve minden egyes rekordhoz hozzá kell férni a műveleteknek.14-47.jpg Ha befejeztük a műveleteket, akkor le kell zárnunk az adatállományt.
  Most kanyarodjunk vissza a feladathoz, és nézzük meg a létrehozást. Ahhoz, hogy mi ezt a készletjelentést el tudjuk készíteni, ahhoz anyagonként tárolni kell az azonosítót, megnevezést, a mennyiségi egységet, a mennyiséget és az értéket. Tehát rekordonként ennyi adatot kell bevinnünk. Hozzuk létre ezt az adatállományt. 14-48.jpgMilyen lépésekben tudjuk ezt megtenni? Legegyszerűbb az, hogyha a billentyűzetről beírjuk az adatokat, és a program pedig fölírja az adatállományba. Tehát begépelünk egy rekordot, utána a program fölírja. Ez nyilván egy ciklusos művelet lesz, és a ciklus akkor fog befejeződni, amikor azt mondjuk, hogy nincs több adat. Hogy ezt részletesen hogy kell elvégezni, ezt Pinkert László fogja önöknek elmondani.
  14:49
  

14-49.jpg14-50.jpg

  14-51.jpg

Adatállomány létrehozása

14-52.jpgPinkert László Commodore 64
  15:11 Nézzük meg most azt a programot, amely képes a bebillentyűzött adatokat mágneslemezre írni. Létre, vagyis adatállomány-létrehozás a program címe. Az első végrehajtandó funkció pedig az állomány megnyitása. Az állományt megnyitó utasítás az OPEN utasítás, amelyet egy paraméterlista követ, a paramétereket most nézzük meg egyenként. A nulla és a kettőspont nem lényeges a paraméterek szempontjából, viszont az ANYAG név már igen. Ugyanis ez a név rákerül a lemezre, ahol, amint majd látni fogjuk, több adatállomány is elhelyezhető egymás mellett vagy egymás után – mindegy, hogy hogy képzeljük el –, lényeg az, hogy ezeket a névvel különböztetjük meg egymástól, vagyis ezen a lemezen ennek az adatállománynak a neve ANYAG lesz. 14-53.jpgEz fölkerül a lemezre. Ezek után egy rövidítés, az S betű, a szekvenciális adatállománynak a rövidítése. Erről bővebben most nem beszélünk, mi az adásban csak ilyen, szekvenciális állományokkal foglalkozunk. A W-t már érdemes közelebbről megnézni, ez ugyanis a write angol szó rövidítése, és azt jelzi az OPEN utasításnak, hogy itt az adatállományt írás céljából nyitjuk meg, vagyis ezek után író utasítások következnek, amelyeket ebbe az adatállományba kell beleírni.
  

14-54.jpg14-55.jpg

  Nézzük meg most a három számot. A legegyszerűbb a jelentése a középsőnek, amelyik nyolcas. A számítógéphez ugyanis többféle periféria, többféle eszköz csatlakozhat. Itt például használjuk a mágneslemezegységet, sornyomtatót, a képernyőt, ezek mind perifériák, vagyis kommunikációs egységek. Ezek közül nevezi meg vagy választja ki ez a nyolcas a mágneslemez-meghajtót. Lehetne ezen kívül még több mágneslemez-meghajtót is csatlakoztatni a géphez, tehát mondjuk föltornyozni egymás fölé akár hat-hét darabot is, akkor ezeknek mindegyiknek meglenne az azonosítószáma, 9, 10, 11, és így tovább, 15-ig.
  Az OPEN utasítást közvetlenül követő kettes szám az állománynak a logikai hivatkozási száma. A későbbiekben ugyanis az író utasításoknál már nem kell leírni ezt az egész hosszú paraméterlistát az állomány nevével, jelzésével s egyebekkel, hanem csak ezt a kettes számot, ami az OPEN utasítást követi. Találunk ebben a paraméterlistában még egy számot, ezzel most egyáltalán nem foglalkozunk, talán annyit érdemes megjegyezni, hogy célszerű ezt a számot ugyanannyinak választani, mint a logikai hivatkozási számot.
  A logikai hivatkozási számnál maradva, nézzük meg most, hogy melyik az az utasítás, amelyik valójában ír a mágneslemezre. Egy PRINT utasítást fogunk találni a későbbiekben, amely után ez a kettes ugyanaz a kettes, amiről mostanáig beszéltünk. Vagyis ez a kettes jelenti azt, hogy most mágneslemezről van szó, és az ANYAG nevű állományba írunk. A PRINT utasítást megkülönböztetjük ezzel a kettőskereszttel, attól a PRINT utasítástól, amelyet eddig a képernyőre írásra használtunk. (A Commodore nyelvében ezek valójában teljesen különböző utasítások – L. A. D.) A PRINT utasítás végrehajtása előtt azonban szükség van arra, hogy bebillentyűzzük ezeket az adatokat a gépbe, vagyis teljesen közönséges INPUT utasítással a rekordnak az azonosítóját, utána az anyagnak, a tárgynak a megnevezését, a mennyiség egységét, a mennyiséget magát, és az elszámolási árat… láthatjuk, hogy az INPUT utasításokkal ezek belekerülnek egyszerű változókba, tehát az azonosító egy numerikus változó, a név egy szöveges változó… itt van… (120. sor – L. A. D.) és így tovább. Ezeket a változókat találjuk meg a PRINT utasítás után, vagyis a változóból írunk a lemezre. Egy érdekes különbség megfigyelhető ahhoz a PRINT utasításhoz képest, amelyet eddig használtunk képernyőre írásra. Itt ugyanis az egyes mezők között – ugye beszéltünk róla, hogy a rekord mezőkből áll, vagyis az egyes adatok egy-egy mezőt alkotnak –, a mezők között kiírunk még a mágneslemezre egy-egy vesszőt. 14-56.jpgEnnek a vesszőnek a szerepe nagyon lényeges. Ugyanis az az utasítás – amely az INPUT utasításhoz hasonló –, amely olvasni fogja a lemezegységet, amennyiben szükség lesz ezeknek az adatoknak a visszaolvasására, ezeket a vesszőket a mezők elválasztójaként fogja kezelni. Tehát minden mező addig tart, amíg a gép egy vesszőt nem talál a végén.
  A programunk ezek után egy soremeléssel folytatódik, és egy kérdéssel, hogy óhajtunk-e még újabb rekordot írni a lemezre vagy nem. Amennyiben igen, akkor az INPUT utasítások újra végrehajtásra kerülnek, és újabb PRINT# 2-es utasítás ír a mágneslemezre. Amennyiben nem kívánunk több adatot lemezre írni, akkor még egy utasítást kell végrehajtani, ez az állományt lezáró utasítás: CLOSE. Itt is megtaláljuk a 2-es jelzést, annak a jelzésére, hogy itt most ezt a bizonyos ANYAG nevű állományt kell lezárni.
  Az állománylezáró utasítás nem tűnik túl lényegesnek, azonban soha nem szabad elfelejteni. Ugyanis ha ezt az utasítást nem hajtjuk végre, akkor a későbbiekben ez az állomány olyan, mintha nem is lenne a lemezen. A lemezen ezek után azt fogjuk találni, hogy van egy ANYAG nevű állományunk, amelyiknek tartalma nincs. Csak akkor kerül ez a tartalom valójában a lemezen elérhetővé, hogyha a végét lezártuk ezzel a CLOSE utasítással.
  Ezek után a programrésznek a végére értünk, próbáljuk ki ezt a programot. A meghajtóban van egy lemez… a programot pedig elindítom. Kérdezi a tárgynak az azonosítóját. Arról volt szó, hogy valamilyen leltározást fogunk itt végrehajtani, a stúdióban található anyagokat próbáljuk meg leltározni. Található itt egy számítógép… az egyszerűség kedvéért most egy folytonos számozást alkalmazunk, vagyis ennek az azonosítója legyen egyes. 14-57.jpgA neve most egyszerűen csak számítógép lesz. Érdekes egyébként, nem említettem a program során, hogy itt egy húsz karakternyi jelzés íródott a képernyőre – ez egyszerűen egy segítség, azt jelzi, hogy ez a mező, vagyis a név legfeljebb húsz karakter hosszú lehet, így könnyebb a karaktereknek a megszámlálása. A mennyiségi egység természetesen darab, a mennyiség egy darab – amin éppen billentyűzök. Elszámoló ár, vagyis ár, hát ez tulajdonképpen teljesen mindegy lenne, de pillanatnyilag ez nagyon drága…
  14-58.jpg
  Folytatjuk, hát azért legalább néhány adatot érdemes fölvinni… azonosító… kettes következik… név… azt mondja, lemezmeghajtó, mennyiségi egység természetesen darab, mennyiség… egy darab van, ha jól látom… az ára… hát legyen hatvan, már csak azért, hogy ne legyenek egyformák… Még egyet. Azonosító, azt mondja, hármas. Név… mit leltározzunk be? Papírunk nincsen. Ez nagyon jó. Azt mondja, papír a nyomtatóba, ezt ugye már nem darabban szokás számolni, hanem mondjuk lap, a mennyiség… pillanatnyilag nulla van belőle. Az elszámolás ár… hát mondjuk laponként ez valami egészen minimális lehet, valami fél fillér. Folytatjuk? Nem folytatjuk.
  
14-59.jpg14-60.jpg

  Ekkor kerül sor tehát az állománynak a lezárására, amit észre is vehetünk – már persze az, aki otthon használja a lemezmeghajtót –, hogy ilyenkor a lemezmeghajtó elindul és befejezi az adatoknak az írását, illetőleg fölírja ezt a bizonyos állomány vége jelet a meghajtóra.
  Természetesen a stúdióban még nagyon sok egyéb tárgy is van, ennek a leltározását a következő adásig fogjuk elvégezni, ott pedig már komoly, adatállománnyal kapcsolatos további műveletekkel fogunk megismerkedni. Viszontlátásra.
  24:40