Utopia GBC demo

Gyerekkoromban elhatároztam, hogy C64 democoder leszek. Sokszor vizualizáltam magam előtt mindenféle effektusokat, balról bejön a szöveg, megnyúlik, pörög-forog. Természetesen kisgyerek fejjel nem tudtam, hogy mi fán terem a democoding, éppen ezért megrekedtem a játékprogramok mellett, de mindig is nagyon vágytam a tudásra.

1992-ben vettem valami Peter Norton féle bit-buzerátor Assembly könyvet PC-re, és akkor már igen közel kerültem a nirvánához, megtanultam a bit operációs mnemonic-okat, ismerkedtem hozzám hasonló érdeklődési körű “fiatalokkal”, MCGA-ra assemblyben én magam is írtam mindenféle demo rutint, sőt, még kiadott munkánk is volt (!).

Nem voltam különösebben tehetséges ezen a területen, nem lett belőlem egy jegyzett coder (ha-ha), a fill-vektor körül vesztettem el érdeklődésemet a téma iránt. De teljesen mindegy is igazából.

Volt még egy fellángolásom, jóval később. Az Indexes éveim alatt történt 2003-2004 körül, amikor megjelent a vízió előttem, hogy az 1998-ban megjelent Gameboy Color (GBC) platform lesz az én utam a democoding felé. Hasonló limitált hardver, pixel-mágia, prüntyögő zene.

Nem akarom bő lére ereszteni a sztorit, Enok a pixel-vető és Credo (code), voltak azok, akikkel összehoztunk és kiadtunk (!) egy intro-t. (Illetőleg a zenét és a scroll rutin fontját valaki mások készítették, amit Credo linkelt bele.) Igen fáradtságos és hosszadalmas küzdés volt a végeredményhez képest, mindenesetre örömmel emlékszem vissza minderre. (Kardos Gábornak most már el merem mondani, hogy volt egy teljes 8 órás nap, amikor csak ezzel foglalkoztam az Indexes melók helyett. Uhh.)

Az intro egy 8 színű sárkányból, zenéből és egy egyszerű scroll rutinból állt. A sárkány specialitása volt, hogy a Gameboy limitált grafikáján felül tartalmazott 180 sprite-ot, amik ugye több egymás melletti szín használatát engedték meg végeredményben. Én most bele nem mennék abba, hogy pontosan hogyan is nézett ki a GBC grafikus módja, de a lényeg valami olyasmi, hogy 4 szín lehetett egyszerre egy 8×8 pixeles mezőn, és akkor erre overlay-olt Credo extra sprite-okat a grafika alapján.

Az én szerepem a projektben az volt, hogy A) meggyőzzem Enok-ot, hogy rajzoljon egy sárkányt 8 színben (vettem neki fagyit, vagy valami ilyesmi, nem vicc), B) meggyőzzem Enok-ot, hogy rajzoljon egy “Utopia” logót, C) átalakítsam a logót olyan formára, ami megfelel a limiteknek (sajnos még úgy is, hogy csak 8 színből állt a logó rengeteg kötöttség volt vele), D) Credo-nak átadjam az egyes sprite layereket.

A gyakorlatban mindez úgy nézett ki, hogy a 160×144 pixeles grafikát pixelenként át kellett vizsgálni, a limiteknek megfelelően módosítani (nem volt erre editor ugye, kézzel kellett), így talán érthető, hogy miért is volt egy teljes nap az Indexben, amikor ezzel foglalatoskodtam.

A kép eredetileg így nézett ki (kétszeres nagyításban):

utopia_original.gif

A limiteknek megfelelő verzió megértéséhez animgifet készítettem, ami a két változat között ugrál. Ezen jobban látni, mennyi a különbség:

utopia_animgif.gif

Ezen az ábrán bemutatom az egyes sprite rétegeket, majd azt, hogyan épülnek egybe és rakják ki végül a képet:

utopia_retegek.gif

Itt pedig megtekinthetjük, hogyan néznek ki az “egyforma” típusú 8×8-as blokkok (karakterek):

utopia_colors.gif

Nem is gondolná az ember, mennyi meló van egy ilyen szarral, nem igaz? A végeredmény megtekintéséhez GBC emulátor szükséges (NO$GBM, fogalmam sincs, honnan tölthető), a hivatalos release lap erre. Online megtekintéshez meg kell elégednünk a Youtube verzióval, amit én raktam össze az imént. (A fix formátum miatt a képernyő bal és jobb szélén fekete csíkok láthatók, ez nem része a produkciónak.)

Hát itt ért véget a demo karrierem, aminek szerettem volna emléket állítani ezzel az összefoglalóval. Credonak külön köszenet, hogy megőrizte az eredeti anyagokat, amikből el tudtam készíteni az összeállítást.

27 hozzászólás

DnP

En is suerettem volna anno nagy coder lenni,de nem lettbelole semmi. Sokmindnet meg tudtam irni asm-ben, igaz fokent raster magus voltam 🙂 De ez mar a multe.. Mar az IRQ atiranyitasi cimeire sem emlekszem.. 0e14 es 0e15? Ehh..

c000:
inc d019;
ldx #00
kezd:
lda szin,x
sta d020
sta d021
loop:
ldy var,x
dey
bne loop
inx
cpx #08
bne kezd
jsr ea31

szin: 01,02,03,04,05,06,07,08
var: 01,08,08,08,08,08,08,08

ez elvileg kirkna egy 8 pixel magas rasztercsikot… de nemtom rairanyitani az IRQ-t 🙂 valamint a bne lehet hogy beq.. regen volt mar.. vagy 10 eve, hogy utoljara irtam valamit c64 asm-ben.

hzx

GBA -re könnyebb programozni és grafikát készíteni, lehet hogy ott nem tántorított volna el a sok pepecselés és szenvedés.

DnP

Angelday: A vegen visszaugrana az alap IRQ-ra, igy olyan mintha multitask futna, kozben tudsz mast csinalni 🙂

Az inc d019 lehet hogy inc d011 🙂 valamiert mindig kellett az elejen.. mar nem emlekszem.

A var azert kell, mert a 8 pixeles karaktersoron belul az elektronsugar mig visszaer a 0-as pos-ba idobe telik. Felso sorban 1, a tobbiben 8 ciklus alatt er vissza 🙂
Ez fapados megvalositas, a nagyok siman lekerdezik a poziciot, ugy nem kell VARakozni.

dmx

Én Amiga-n szerettem volna democode lenni. Stencil vektorokig, hi-res sinus scrollerig, meg copper-es plazma effectig jutottam, SEKA assembler segítségével 🙂 Az egészből ami érdekes, az talán a vizuális “kód optimalizálás”. Ez úgy történt, hogy a kérdéses kódrészletet egy háttérszín váltással kegészítve a vertical blanking interruptba berakva lehetett “sebességet mérni”. A monitor szélén különböző színű szigszalagokkal jelöltem, hogy melyik verzió milyen “hosszan” futott.

edhellon

Dnp, a vegen JMP $EA31 kell, es az irq vektora a $0314, igy szerintem mukodnie kene de nem probaltam ki. 🙂

Angelday: az INC $D019 az pedig increment, es azert van ra szukseg hogy nyugtazzuk az irq vetelet a hw fele.

Credo

Angelday: Jó kis összeállítás. Hozzáteszem (jó öreg TV Torna szlogen): “Idősebbek is elkezdhetik” – sosem késő belevágni a demózásba, és mindig egyszerűbb (több a tutorial, opensource cucc satöbbi).

A sztorihoz még hozzátartozik, hogy az Utopia csapatnak (Dreamcast bootloader fame) készült eredetileg az intro, de miután megszűntek, mi meg komplett demót raktunk össze néhány elfogadhatóbb oldskool partból, az Utopia logó megléte miatt, jobb ötlet híján az egész demót neveztük el így. A teljes demó az említett Pouet linkről szedhető le, ez csak egy nagyon egyszerű (oké, sokat szívtam a sprite multiplexerrel, mert még a legizmosabb emulátorban, a NO$GBM-ben futó módszer sem volt jó valódi gépen pár órával a party előtt), de jó grafikájú partja.

A posztba nem került be, de levélben még hozzáfűztem, hogy bár ez a part fut Visualboy Advance alatt (azt hiszem, azzal rögzítetted a mozit, kicsit lassabb a zene, mint a valódi gépen), az egész demó nem, aki tehát megnézné, a NO$GBM-et itt találja: http://nocash.emubase.de/

DnP: Valószínűleg a $0314-$0315-re gondoltál. Igazán hardverből az $fffe-$ffff vektort érdemes használni (meg jsr $ea31, vagyis jmp $ea31 helyett rti-t), az általad idézett módszer használja a ROM-ot, és ebből következően limitálja a RAM-ot, plusz pár órajelciklussal is lassabb, és kevésbé stabil.

Angelday: $ea31-nél van a ROM-ban a megszakítás visszatérő rutinja (ha az ember a ROM rutinokra hagyatkozik), bár lehet, hogy pongyolán fogalmaztam, talán Edhellon, aki szintén gyakran előfordul itt, pontosít. $d019-nél van a VIC megszakítást kérő regisztere, ha jól emlékszem, nullázni kell a nulladik bitjét. Amikor belép a megszakítás rutinba a program, akkor 1-es, és újabb megszakítás csak akkor generálódik, ha ezt nullázza az ember. Sokan használnak inc helyett más utasítást is, tehát nem kulcsfontosságú az inc, csak az a lényeg, hogy a nulladik bit nullázódjon, és mivel mindig 1-es a belépéskor, a bit más módszeres megváltoztatása is nullázza.

Credo

Edhellon: Látom be is kapcsolódtál, mint szintén törzsolvasó. Üdv és BÚÉK!

Angelday: Az IRQ az megszakítás, Interrupt ReQuest. Amit DnP írt, az csak maga a megszakítás rutin, önmagában (mondjuk $c000-tól futtatva) nem működik, rá kell “akasztani” a megszakítás vektorra (az említett $0314-$0315 vagy alacsonyabb szinten $fffe-$ffff), és be kell lőni a megszakítás rendszert (a szintén említett $d012 és a $d011 egy bitje adja meg a sort, plusz, ha jól emlékszem, $d01a-nál van megfelelő megszakítást engedélyező bitmaszk, de már jó régen C64-eztem én is), hogy az adott sorban automatikusan megszakítsa a főprogramot, és belépjen az idézett rutinba.

A két (szerintem) legjobb kiindulópont ma a VIC Article: http://www.ffd2.com/fridge/docs/VIC-Article.gz (minden benne van a badline-okról és más időzítésekről) és az AAY64: http://www.the-dreams.de/aay.html (ebben elég sok grafikus formátum is szerepel, korábban céloztam rá, de nem minden). Majd még összeszedek pár linket, ha nem felejtem el.

A végére csak összerakunk egy C64-es rasztert. 🙂 Mások számára hozzáteszem, hogy itt főleg C64 programozásról folyik a diskurzus, köze nincs a posztban vesézett GameBoy Color demoparthoz.

Takoca

beszarás hogy miket tudtok 🙂
beszarás hogy én meg csak annyit tudtam c64-en hogy “load “*”,8,1″ vagy valam ilyesmi 🙂

Dob

Én a könnyű utat választottam, és nem kóder, hanem grafikus (Raytracer) scener voltam (elég túlzóan hangzik). Mindig is csodáltam a kódereket, ritka unalmas dolog tud lenni a programozás néha. Igaz abban van sikerélmény.

edhellon

Credo, BUEK szinten, meg mindenkinek ugy altalaban. 🙂

Angelday, “idosebbek is elkezdhetik”: jackasser, Pernod/Horizon (osregi scener) occse 2004-ben kezdett el(!) C-64-re programozni tanulni, es mara az egyik legismertebb koder. Egyebkent iszonyu tehetseges a srac, mar a masodik release-ben (Phanta Rei, http://noname.c64.org/csdb/release/?id=15745 ) olyan idoziteseket csinalt hogy beszaras.
Credo linkjei jok kezdesnek, meg vmi doksit szedj ossze a 6510 programozasarol es hajra! 🙂 Ja, es eszedbe ne jusson nem crossassemblerrel tolni, ma mar nagyon jok vannak (pld. a Soci/Singular fele), egy jol scriptelheto editorral nagyon tuti IDE-ket lehet osszerakni. 🙂

vinczepeti

Valóságos Retro ez itt kéremszépen!
Nekem az ilyesfajta ambícióim végetértek a basic-ben való hóember, és ellipszisrajzolásoknál!
Azóta tudom hogy ez nem az én világom, de kellemesen gondolok vissza azokra az időkre!

Credo

Angelday: Még a kezdéshez ajánlom az eredeti C64 programozói doksit: http://project64.c64.org/hw/c64prg10.zip meg ahogy Edhellon írta, a processzort is érdemes megismerni, mondjuk a http://www.6502.org/ oldal segítségével (rengeteg példa meg minden van rajta, igaz nem C64 specifikusak, és a 6510 illegális opcode-jaiba azt hiszem nem mennek bele), plusz lehet találni a Google-val és a CSDb-n nyílt forráskódú C64 cuccokat is, amikből még tanulhatsz.

Khm, “valakik” újraírták az Amigás Desert Dreamet is C64-re, nagyon ajánlom: http://noname.c64.org/csdb/release/?id=48039 és http://www.youtube.com/watch?v=g9TT55hrz90 meg http://www.youtube.com/watch?v=wcTMOkwkFt0

hzx

Angel, ha a közvetlen bitmagic köt le, akkor iszonyat nagy poén és szórakozás a régi gépeket programozni. De ha a demo programozás érdekel, talán érdemesebb ma már egy crossplatform grafikus könyvtárral (pl. SDL vagy OpenGL) C/C++ -ba beletanulni, mert akkor ott a DreamCast, a PS2, az Xbox, a GameCube, vagy a PlayStation3, amikre baromi könnyű ma már szép dolgokat csinálni. Szerintem.

Profi1

Nagyon tetszik ez a kis visszaemlékezésetek, ki mit “ért el”
Én Commodore 16-oson kezdtem, majd C64-re is kódoltam Larry és Profi1 néven. A ’90-es évek közepén volt pár jó esztendőm a Profik csapatban és a +4-eseknél a Wilds-ben.
Nekem mindkét csapatban a közös munka tetszett, vagyis önzetlenül feláldoztunk a nagy produkció kedvéért több napot, hetet…
Érdekes, hogy még a mai napig vannak arcok, akik döbbenetes újításokat tudnak hozni ezekre a régi gépekre. (persze ezek a nagy dobások csak annak jelentenek valamit, aki ismeri aplatformot…)
Legutóbbi Commodore+4-re kiadott demónk:
http://youtube.com/watch?v=1vOgXf1GnO0

Én is terveztem GBC-n a kódolást, de a Z80 alapú rendszer nem fekszik egy 6502 cpu-hoz edződött logikához.