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 Responses to “Utopia GBC demo”

  1. Gravatar Icon 0 flynn

    ez tök jó.

  2. Gravatar Icon 1 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.

  3. Gravatar Icon 2 angelday

    Végén mit csinál a JSR? Gondolom jump subrutine, de mi van EA31-en?

    És ez mi? INC D019? Gondolom nem increment (add +1).

    A szín tömböt értem, abban van a raszterhurka színe, de mire jó a var?

  4. Gravatar Icon 3 phnb

    Nebazz, Enokot ismertem. :o

  5. Gravatar Icon 4 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.

  6. Gravatar Icon 5 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.

  7. Gravatar Icon 6 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.

  8. Gravatar Icon 7 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.

  9. Gravatar Icon 8 angelday

    dmx, a vizuális kód optimalizálás nekem is abszolút megvolt. Rutin elején az ember áttette mondjuk kékre a keretet, a rutin végén meg visszaállította feketére, aztán ezt mindig a képfrissítéshez kellett igazítani, és meg is volt a benchmarking tool.

    Volt olyan is, hogy a vektor lassabb gépeken is ugyanúgy elfutott, csak éppen kihagyott frame-eket. Na, én ilyet már nem tudtam csinálni, nálam lassú gépen elkezdett lassulni az egész. Pedig az a korrekt, ha frame-eket skippel.

    Gondolom nem kell belemennünk ebbe az egészbe, mert ez is egy szakma.

    edhellon, mi az az irq? És mi annak a vétele? Miért kell nyugtázni? :) Vagy ezt most így ne firtassam?

  10. Gravatar Icon 9 angelday

    .A2000 INC $D020
    .A2003 JMP $2000

  11. Gravatar Icon 10 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.

  12. Gravatar Icon 11 angelday

    Engem borzasztóan érdekel ez az egész. Milyen leírás alapján érdemes elkezdeni a C64 programminget? Van valami best website to start with?

  13. Gravatar Icon 12 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.

  14. Gravatar Icon 13 Takoca

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

  15. Gravatar Icon 14 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.

  16. Gravatar Icon 15 MoT

    1 sor nem 8 hanem 64 ciklus volt ha jol emlexem, bar mar 15 eve nem lattam c64-et :) ez is már ugy lett releaselve, hogy reg nem is volt [3]:

    http://noname.c64.org/csdb/release/?id=789

    udv,
    Poacher/Triumwyrate

  17. Gravatar Icon 16 MoT

    -e :) )))))

  18. Gravatar Icon 17 angelday

    MoT, megnéztem a demót, nem rossz, de nem nyomja le ezt: http://www.youtube.com/watch?v=NVVtOOZPuGM

    :P

  19. Gravatar Icon 18 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. :)

  20. Gravatar Icon 19 rog

    :) én meg pont két napja láttam ezt a verizót, hátha valaki másnaik is kimaradt eddig: http://www.youtube.com/watch?v=zVPW40ygds4
    elképesztő.

    (ha nem lenne meg fejben az eredeti: http://www.youtube.com/watch?v=8G_aUxbbqWU)
    (ezt meg egyszerűen muszály: http://www.youtube.com/watch?v=-Da6e-BjhWM :D :D:D)

  21. Gravatar Icon 20 angelday

    edhellon, megnéztem a linkelt demót, az időzítések nekem nem triviálisak, de én nem is értek hozzá. :)

  22. Gravatar Icon 21 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!

  23. Gravatar Icon 22 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

  24. Gravatar Icon 23 angelday

    Nem tudom, látszik-e rajta, de az “új” fejléc grafika is Project One konverzió. :) Sajnos 320×200-ba nem fért bele a teljes 1500×1000 pixel, így kézzel kellett összevagdosnom, szép kis meló volt, ha-ha.

    Note to devs: you may allow bigger canvas sizes. :)

  25. Gravatar Icon 24 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.

  26. Gravatar Icon 25 angelday

    Bitmagic, bitmagic, bitmagic.

  27. Gravatar Icon 26 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.

Leave a Reply