tr-demoscene

the scene => coding => console => Konuyu başlatan: jimqode - 12.03.2007 17:40:37

Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 12.03.2007 17:40:37
şu alette hardware'e biraz daha yakınlaşmanın vakti geldi gibi. Bu minimal library'yi kullanan varsa forumda kullandığınız versiyon nedir? rlyeh'in forumda byi çıkarttım diyor ama download linki bulamadım. Nerden indirelebilir.
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 12.03.2007 23:22:48
stable:
http://www.emulnation.info/retrodev/forum/files/rlyeh's-minimal-library-v0.A.zip
preview:
 http://www.emulnation.info/retrodev/forum/files/rlyeh's-minimal-library-v0.B-preview.zip

7d6'da 0.c'nin betasini rlyeh'in bilgisi dahilinde isteyenlere vermistim, ama su anki betayi rlyeh'den istedigin takdirde gonderecektir.

bu arada, YUV sorunlari var 0.c'nin ancak rlyeh (ve ben) bir suredir yogun olmamizdan dolayi 2-3 aydir source uzerinde bir degisiklik olmadi..
Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 13.03.2007 01:14:01
Bir de mod calabilen bir kutuphane bilen var mi? Ben bulamadim da. Bendeki sdl "bilmiyorum bu formati" diyor.

Bu arada partiden beri ugrastigim gp2x portunun ilk oynanabilir halini caktirmadan bu threadin altina gizliyorum. Ahanda bunun icin lazim mod calmak. ;) Bu oyunu amigadan hatirlayanlar da olacaktir eminim. Grafik hatalarini simdilik gormezden gelin. Bir gecede o kadar cok grafigi yari boyuna kucultup piksel piksel uzerinden duzeltmem gerekti ki beynim hosafa dondu. Bi de 8 bite indirmek varki ooof of. Arkaplanin durumu hala cok kotu.

Sag tetik spinnerlari ceviriyor. ABXY butonlari ilgili pozisyondaki topu saliyor. Deneyenler kontroller hakkinda ne dusundugunu belirtebilirlerse cok sevinirim. Cunku bu oyunun orjinali mouse ile oynaniyor.

ahanda link:
http://www.symbolengine.com/download-manager.php?id=6
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 13.03.2007 01:39:17
mikmod :)
guyfawkes'in ve ragnor'un konuyla ilgili dokuman/ornegi vardi diye hatirliyorum.

Alıntı yapılan: jimqode;13016
Bir de mod calabilen bir kutuphane bilen var mi? Ben bulamadim da. Bendeki sdl "bilmiyorum bu formati" diyor.
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 13.03.2007 01:41:04
bu arada konuyla alakali olarak bir aciklama (bu paketlerin icinden cikmiyor)

how does minilib handle memory
Alıntı
GP2X memory is 64 Mb (0x0000000-0x3FFFFFF)

Linux uses the first 32MB, and the upper 32MB is up to you.
However, not all the memory in the upper 32MB is free to use. Some parts are used as followed:

0x03000000 Video decoding firmware (currently 342812 bytes, but may change in size with various firmware releases)
0x03101000 Primary frame buffer (153600 bytes)
0x03381000 Secondary frame buffer (153600 bytes)
0x03600000 Sound buffer, atleast in SDL. Size depents on multiple factors. 16384 bytes should always be enough.
0x03D00000 ~ 0x03FFFFFF is reserved for internal buffers of MPEG H/W decoder.

It's insane trying to respect these protected areas at middle of the upper memory.
Minimal library does not support these reserved areas and sets a more efficent memory handling,
which gives you about 31 Mb of free RAM in a single block.

The new memory mapping follows:

RAM, TOP = 64 Mb
,----------------------------------
| 0x4000000 |
|           |   0x008000 (32,768 bytes)
|           |
|           |   reserved for 940t stack
| 0x3FF8000 |
|-----------+----------------------
| 0x3FF7FFF |
|           |   0x001000 (4,096 bytes)
|           |   940t/920t exchange area, non-cached
|           |   reserved for variables exchange (up to 1024 variables, 4 bytes long each).
| 0x3FF7000 |
|-----------+----------------------
| 0x3FF6FFF |
|           |   0x001000 (4,096 bytes)
|           |   dualcore FIFO buffers, non-cached
|           |   reserved for 1000 FIFO commands (4 bytes each long)+96 bytes buffer
| 0x3FF6000 |
|-----------+----------------------
| 0x3FF5FFF |  
|           |   0x006000 (24,576 bytes)
|           |   reserved for further usage, non-cached
| 0x3FF0000 |  
|-----------+----------------------
| 0x3FEFFFF |
|           |   0x004000 (16,384 bytes)
|           |   CURSOR layer, reserved
| 0x3FEC000 |
|-----------+----------------------
| 0x3FEBFFF |
|           |   0x072000 (466,944 bytes)
|           |   RGB layer, reserved
|           |   supports:
|           |   - 3 pages @ 320x240x16bits or,
|           |   - 6 pages @ 320x240x8bits or,
| 0x3F7A000 |
|-----------+----------------------
| 0x3F79FFF |
|           |   0x258000 (2,457,600 bytes) =
|           |   8 YUV layers * 1 YUV layer (0x4B000 bytes/layer)
|           |
|           |   optional YUV area, overwriteable for your own usage when not using YUV functions
| 0x3D22000 |
|-----------+----------------------
| 0x3F79FFF |
|   or...   |
| 0x3D27FFF |
|           |   variable size (depending if you override above YUV area)
|           |   usage: void *gp2x_dualcore_ram;
|           |
|           |   free memory
| 0x2000000 |
|-----------+----------------------
| ......... |
|           |   variable size
|           |
|           |   940t dualcore code (if using any) (optional)
| 0x2000000 |
|-----------+----------------------
| 0x1FFFFFF |
|            |    first 32 mbytes
|            |
|             |    usage: malloc()/free() from linux
| 0x0000000 |
`-----------+------------------------
RAM, BOTTOM = 0 Mb
Başlık: gp2x rlyeh's minimal lib
Gönderen: Ragnor - 13.03.2007 03:58:47
Sdl_mixer ve gp2x'te derleme ortamı oluşturmak üzerine yazılarım ama ne yazık ki gp2x yazım şu anda windows için geçersiz durumda, yine de gp2xtr.com'un wikisine bakarsan orada bir takım düzeltmeler yaptım, gerçi sen derleme ortamını kurmuşsun. Sdl_mixer yazımı plazma #2 (emin değilm 1'de olabilir) ve blogumda bulabilirsin. Ama sdl kullanmayacaksan tercihin mikmod olsun, yanlış hatırlamıyorsam. Ama yanlış hatırlıyorsam sdl_mixer kullanmış demektir, kodda şu anda elimin altında değil bakamıyorum, indirmeyede üşeniyorum :). Neyse bende pes ettim şu ryleh'in lib'ini bir deneyeceğim.
Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 14.03.2007 16:05:07
Çıldırıcam. Minimal library'de aşağıdaki basit kod ekranın aşağı yukarı yarısını boyuyor. ortada karmaşığı geçtim iki tane loop dışında hesap bile yok. Ama hepsi hepsi 29-30 fps alabiliyorum. Birşeyi yanlış mı yapıyorum ağalar beyler?

Kod: [Seç]
#include <stdio.h>

#include &quot;minimal.h&quot;


int
main (int argc, char* argv[])
{
    gp2x_init(1000, 16, 11025,16,0,60,1);
    long ticks=0;
    int x,y,r=0,fps=0;
    while(1)
    {
        for (y=50;y<190;y++) {
            for (x=50;x<270;x++) {
                gp2x_video_RGB[0].screen16[x+(y*320)]=gp2x_video_RGB_color15(255,y,0,0);
            }
        }
        fps++;
        if (ticks<gp2x_timer_read()) {
            printf (&quot;%d fps\n&quot;,fps);
            fps = 0;
            ticks = gp2x_timer_read()+1000;
        }
        gp2x_video_RGB_flip(0);
    }
}


void gp2x_sound_frame(void *blah, void *buff, int samples) {}
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 14.03.2007 16:39:16
ilginc.. bir de sunu deneyebilirmisin? kafadan yazdim, umarim calisir..

Kod: [Seç]
#include &quot;minimal.h&quot;

int main(int argc, char *argv[]) {
    gp2x_init(1000, 16, 44100,16,1,60, 1);
    gp2x_timer_init(0);

    unsigned int ret = 1;
    unsigned long pad;

    register unsigned int x,y=0;
    unsigned short *ekran = (unsigned short *)gp2x_video_RGB[0].screen;

    while (ret) {
        gp2x_timer_start(0);
        for (y=50;y<190;y++) {
            for (x=50;x<270;x++) {
                ekran[x+y*320] = gp2x_video_RGB_color15(255,y,0,0);
            }
        }
        gp2x_timer_stop(0);

          pad = gp2x_joystick_read(0);
        if (pad & GP2X_START) ret=0;

        gp2x_video_RGB_flip(0);

        printf(&quot;%d %%\n&quot;, gp2x_timer_cpu_usage_per_frame(0));
    }
}

void gp2x_sound_frame(void *blah, void *buff, int samples) { }

ama sanirim ben normal kosullarda soyle bisi yazardim:
Kod: [Seç]
       for (y=190-50;y--;) {
            for (x=270-50;x--;) {
                register unsigned int foo = y+50;
                ekran[(x+50)+(foo*320)] = gp2x_video_RGB_color15(255,foo,0,0);
            }
        }
Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 14.03.2007 16:53:33
abi ilk yazdigin koddaki gp2x_timer fonksiyonlari 0.C'de gelmis sanirim. bendeki library 0.B. Bende derlemiyor ne yazik ki.
ilk kodunda facia flicker vardi. Sanirim flipten sonra screen pointer degistigi icin update etmek gerekiyordu. Asagidaki hale getirdim kodu.
Screen pointeri degiskende tutmak bir sey degistirmedi hiz olarak.
foo'yu registerda tutmak kodu biraz hizlandirdi 36 fps aliyorum su anda.
Normal hizi bu mudur? 8 bit mod daha mi hizli olur?
Abi sizin demo nasil bu kadar akici oluyor cildiricam :) (respect respect)
Kod: [Seç]
#include <stdio.h>

#include &quot;minimal.h&quot;


int
main (int argc, char* argv[])
{
    gp2x_init(1000, 16, 11025,16,0,60,1);
    long ticks=0;
    int x,y,r=0,fps=0;
    unsigned short *ekran;
    while(1)
    {
        ekran = (unsigned short *)gp2x_video_RGB[0].screen16;
    for (y=190-50;y--;) {
            for (x=270-50;x--;) {
                register unsigned int foo = y+50;
                ekran[(x+50)+(foo*320)] = gp2x_video_RGB_color15(255,foo,0,0);
            }
        }
        fps++;
        if (ticks<gp2x_timer_read()) {
            printf (&quot;%d fps\n&quot;,fps);
            fps = 0;
            ticks = gp2x_timer_read()+1000;
        }
        gp2x_video_RGB_flip(0);
    }
}


void gp2x_sound_frame(void *blah, void *buff, int samples) {}

Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 14.03.2007 17:09:07
evet, timer fonksiyonlari profiling islemleri icin (ozellikle amiga emulasyonu icin ihtiyacim vardi (gp2x_profile_exec)) eklendi 0.c'de..

daha dogru duzgun ornek code aksam gonderebilirim, su an yanimda mevcut degil.. ve mmuhack + hw blitter kullaninca hersey daha guzel oluyor :)
Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 14.03.2007 17:13:53
heyecanla bekliyorum :)
Başlık: gp2x rlyeh's minimal lib
Gönderen: Ragnor - 14.03.2007 20:44:35
Kod: [Seç]
#include <stdio.h>

#include &quot;minimal.h&quot;


int
main (int argc, char* argv[])
{
    gp2x_init(1000, 16, 11025,16,0,60,1);
    long ticks=0;
    int x,y,r=0,fps=0;
    unsigned short *ekran=(unsigned short *)gp2x_video_RGB[0].screen16;
    while(1)
    {
    for (y=190-50;y--;) {
            for (x=270-50;x--;) {
                register unsigned int foo = y+50;
                ekran[(x+50)+(foo*320)] = gp2x_video_RGB_color16(255,foo,0);
            }
        }
        fps++;
        if (ticks<gp2x_timer_read()) {
            printf (&quot;%d fps\n&quot;,fps);
            fps = 0;
            ticks = gp2x_timer_read()+1000;
        }
        gp2x_video_RGB_flip(0);
    }
}


void gp2x_sound_frame(void *blah, void *buff, int samples) {}


Kodu birde şu şekilde dene istersen, yaptığım değişiklikler ekran pixellerinin pointer'ını while'dan önce tanımladım, birde color15 yerine color16 kullanıyorum. Açıkcası daha önce denemedim ama aklıma gelen yapılabilecek bir iki değişiklik bunlardı, işe yarar umarım.
Başlık: gp2x rlyeh's minimal lib
Gönderen: tesla - 14.03.2007 20:52:17
Hmm, hazır alakalı konular dönüyor bende 1-2 soru sıkıştırayım. Ama sadede  gelmeden önce biraz kafa şişircem :rolleyes:

 Wiki hardware blitter (http://wiki.gp2x.org/wiki/Using_the_hardware_blitter) 'taki bilgiler ışığında gene aynı sayfada bulunan forum (http://www.gp32x.com/board/index.php?showtopic=23182) linki yardımı ile hardware blit yapabildik(comrade spritus :) ile). Yalnız linkteki forumda birden bire sanki bu konu ile uğraşan tüm adamları susturmuşlar, bıçak gibi kesilmiş  konuşmalar. :)  .. Neyse forumdaki örnek kodlar hardware blit yapmaya yeterli. Sorun şu ki; wiki  (http://wiki.gp2x.org/wiki/Using_the_upper_32MB_of_memory)sayfaları arasında bir tutarsızlık var.  ılk wiki linkindeki adam  bu kod  2. frame buffer 'ı  1. frame buffer'a kopyalar demiş. Ve
1. FrameBuffer = 0x3101000 ,  
     2. FrameBuffer =0x3101000 + 320*2*240    demiş.

Ama başka bir wiki sayfasında dediği üzere
1. FrameBuffer = 0x3101000
2. FrameBuffer = 0x3381000

Yani  0x3101000 + 320*2*240  ,  0x3381000'e eşit olmuyor.
2. FrameBuffer adreslerinde bir tutarsızlık var.

Biz örnek kodu 2. FrameBuffer 0x3381000 olacak şekilde ayarladık
ve blitter çalıştı. Bu durumu aynı sayfadaki talk (http://wiki.gp2x.org/wiki/Talk:Using_the_hardware_blitter) kısmında ifade ettim ama bir geri bildirim alamadım kimseden.

Ama sorunlar bitmedi, hız forumda denildiği gibi 10 kat filan artmadı :) , sadece 20fps lik bir artış oldu.

Neyse bu kadar gevezelikten sonra asıl sorularımı sorayım.

1- En doğru hardware blit nasıl yapılır? Yukardaki karmaşıklık mmu hack yüzünden mi oluyor? (32 MB'ı bütün gibi ele almak)
2- SDL kullanmak istersek hangi paketi seçmeliyiz.
Ben şu ana kadar Full Devkit 2006/03/06 (http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,14,1362) kullanıyordum. En geçerli olan bu sanıyordum?
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 14.03.2007 21:20:36
@tesla: ok, ornegi hw blitter uzerine kurarim. :)

@ragnor:
buffer flip oldugunda pointer degisecegi icin while disinda olursa sadece tek bufferda islem yapilir. sonucta dolu ekran, siyah ekran gibi gosterilir ve bu sebeple de flicker..
Alıntı yapılan: Ragnor;13101
Kodu birde şu şekilde dene istersen, yaptığım
değişiklikler ekran pixellerinin pointer'ını while'dan önce tanımladım,
Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 14.03.2007 21:48:13
Bendeki sorunu cozdum. Sorun benim eşşek olmammış. -O3 ile compile ettim ve 88-90 FPS aldım. Herhalde alınabilecek olan anca budur. :) Yardımlarınız için teşekkürler.
Başlık: gp2x rlyeh's minimal lib
Gönderen: Ragnor - 14.03.2007 23:19:27
@tesla, senin kullandığın devkit iyi sanırım. Lib'lerle ilgili bir sıkıntı yaşarsan şunu indirmeyi deneyebilirsin. http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,19,1875

@gnostic, hmmz, aklıma gelmemişti. SDL'de fazla rahata alıştım ya :).
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 14.03.2007 23:47:06
tabi hic makefile'i hic dusunmedik.. benim makefile'dan flag'ler kismi.. ihtiyacina gore parametrelerden cikartabilirsin/ekleyebilirsin:
Kod: [Seç]
MORE_CFLAGS  = -O3 -mcpu=arm9 -mtune=arm920t
MORE_CFLAGS += -msoft-float -ffast-math -fomit-frame-pointer -Wno-unused -Wno-format -DGCCCONSTFUNC=__attribute__((const))&quot;
//MORE_CFLAGS += -mthumb-interwork
MORE_CFLAGS += -DUSE_UNDERSCORE -fno-exceptions -DREGPARAM=  -DOPTIMIZED_FLAGS -D__inline__=__inline__
MORE_CFLAGS += -DSHM_SUPPORT_LINKS=0
MORE_CFLAGS += -Ie:/devkitGP2X/include -Ie:/devkitGP2X/include/SDL -Le:/devkitGP2X/lib
MORE_CFLAGS += -ftracer -fstrict-aliasing -mstructure-size-boundary=32 -fexpensive-optimizations
MORE_CFLAGS += -falign-functions=32 -falign-loops -falign-labels -falign-jumps
MORE_CFLAGS += -finline -finline-functions -fno-builtin -funroll-loops -floop-optimize2

[quote="jimqode;13104]Bendeki sorunu cozdum. Sorun benim eşşek olmammış. -O3 ile compile ettim ve 88-90 FPS aldım. Herhalde alınabilecek olan anca budur. :) Yardımlarınız için teşekkürler.[/quote]
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 15.03.2007 01:57:41
Alıntı yapılan: tesla;13102
Ama başka bir wiki sayfasında dediği üzere
1. FrameBuffer = 0x3101000
2. FrameBuffer = 0x3381000
dogrusu bu..

Alıntı yapılan: tesla;13102
1- En doğru hardware blit nasıl yapılır? Yukardaki karmaşıklık mmu hack yüzünden mi oluyor? (32 MB'ı bütün gibi ele almak)
2- SDL kullanmak istersek hangi paketi seçmeliyiz.
Ben şu ana kadar Full Devkit 2006/03/06 kullanıyordum. En geçerli olan bu sanıyordum?

1. SDL kullandigin icin, HW_SURFACE (uppermem) kullandigin surece sdl'de blit islemleri mmuhack ile (uppermem cacheleme) hizli olacaktir. (madde 2ye bak)

2. sectigin paket guzel ANCAK bildigim kadari ile o paket icinden cikan SDL lib'leri HW lib destekli degil. bu sebeple, o paketi kurduktan sonra HW blit destekli sdl lib'lerini kullandiginda sorun yasamazsin.
ayrica 2 farkli hw sdl lib'i var.. biri 6, digeri 16mb'lik sanirim.. (framebuffer size alloc size)

---

peki bunlari bir kenara atip, kendimiz hardware blit nasil yapariz?

aslinda olay oldukca kolay, zamaninda konu ile ilgili yapilan ve olayin zormus gibi gozumesine sebep olan tartismalarin ozu sudur ki;
elimizde bir hw blitter oldugunu biliyorduk ama bunun registerlarini set ettigimizde istedigimiz sonuc cikmiyordu.. paeryn sanirim FAST_IO 'yu set etmemiz gerektigini farkedinceye kadar herkes birseyler denedi..

simdii.. bu noktada, mame, noiz2a, SDL lib vs'nin source'larini cekip incelediginizde nasil yapildigini gorme sansiniz var..

ama ben yinede (biraz minilib uyumlu olarak ama tek basina calisabilecek sekilde) adim adim bir anlatayim;

1) once HW registerlara felan ulasmak icin memory device
Kod: [Seç]
memfd = open(&quot;/dev/mem&quot;, O_RDWR);
gp2x_memregl = (unsigned long *)mmap(0, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, memfd, 0xc0000000);
gp2x_memregs = (unsigned short *)gp2x_memregl;
gp2x_2dregs = (unsigned long *)mmap(0, 0x118, PROT_READ|PROT_WRITE, MAP_SHARED, memfd, 0xe0024000);

2) meshur blitter enable olayi
Kod: [Seç]
gp2x_memregs[0x90a >> 1] = 0xffff; // Enable all video and sound devices
gp2x_memregs[0x904 >> 1] |= (1 << 10); // Enable FASTIO for the hardware blitter

vee.. ve'si yok bu kadar :)

ornek bir code:
Kod: [Seç]
void hw_blit(unsigned short *src, int xc, int yc, int w, int h) {
    unsigned short *dst;
    unsigned short offset;

    dst = (unsigned short*)[B]0x3101000[/B] + (yc*320) + xc;
    offset = (unsigned short)((unsigned long)dst & 2);

    gp2x_2dregs[MESGDSTCTRL] = (1 << 5) | (0 << 6) | (offset << 3);
    gp2x_2dregs[MESGDSTADDR] = (unsigned long)dst & 0xfffffffc;
    gp2x_2dregs[MESGDSTSTRIDE] = 320*2;
    gp2x_2dregs[MESGSRCCTRL] = (1 << 8) | (1 << 7) | (1 << 5);
    gp2x_2dregs[MESGSRCADDR] = [B]0x3101000[/B];
    gp2x_2dregs[MESGSRCSTRIDE] = 64;
    gp2x_2dregs[MESGPATCTRL] = 0;
    gp2x_2dregs[MESGSIZE] = (h << 16) | (w << 0);
    gp2x_2dregs[MESGCTRL] = (0 << 10) | (1 << 9) | (1 << 8) | 0xCC;
    gp2x_2dregs[MESGSTATUS] = 0x0;
    do {} while (gp2x_2dregs[MESGSTATUS] & 1);
}

bunu hardwaresiz yapmak isteseydi:
Kod: [Seç]
   fb0 = open("/dev/fb0", O_RDWR);

void sw_blit(unsigned short *src, int xc, int yc, int w, int h) {
    unsigned int x, y;
    unsigned short *dst;

    dst = fb0 + (yc*320) + xc;
    for (y=0; y        for (x=0; x            *dst++ = *src++;
        }
        dst += 320-w;
    }
}
Başlık: gp2x rlyeh's minimal lib
Gönderen: Ragnor - 15.03.2007 04:55:22
Abi sağol oldukça faydalı oldu, banada sonunda oturup sıfırdan kendi kodumu yazma konusunda ilham verdin...
Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 15.03.2007 17:01:32
gnostic, abi seni paso yoruyoruz ama verdigin ornek direk birinci fb'i ikinciye kopyaliyor sanirsam. fonksiyona giren src parametresi hicbir yerde kullanilmiyor. ben oraya kendi yukledigim bir resmin adresini verince program blit fonksiyonundan bir daha geri donmedi.
Sanirim ust hafizayi kullanmak gerekiyor. bu konuda hic ornek bulamadim.  Elinde kisa bir ornek varsa alabilir miyiz?
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 15.03.2007 17:14:40
benim hatam, src'yi MESGSRCADDR icin kullanacagiz ama absolute (fiziksel) adresini vermemiz gerekiyor ve evet ust hafizayi kullanacagiz..

calisan komple bir ornek yazip, gondereyim en temizi.. :)
Başlık: gp2x rlyeh's minimal lib
Gönderen: skate - 15.03.2007 18:04:30
Ben de anca girebiliyorum GP2X coding olaylarına. Bu tartışılanlar benim de çok işime yarayacak, teşekkürler.
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 15.03.2007 23:41:50
evet.. ekteki test1 ornegini mumkun oldugunca kucuk tutmaya calistim..
SDL, minilib vs kullanmadan tek basina compile edebilirsiniz..

compile edip calistirdiginizda, ekranda plasma benzeri bir efekt goreceksiniz.
ustundede 32*32 lik bir beyaz kutu.. joystick ile bu kutuyu ekranda dolastirabilirsiniz.. (kutunun hafif flicker etmesi dogal keza double buffer yapmadan direkt framebuffer'a yaziyoruz)

code'da da goreceginiz uzere;
fb0 = ekranda aktif olarak gorunun buffer (plasma bufferi)
fb1 = bembeyaz bir ekran, buradan sadece 32*32'lik bir kismi kopyalayip ekranda dolastiriyoruz.

yapilabilecekler:
* farkli ROP islemleri ile neler yapilabiliyor onu deneyin..
* fb1 'a bir imaj koyup, onu blit edin..
*
a) 0x200000 adresinden daha yukarida bir adrese imaj yukleyin (wiki: upper memory)
b) fb0/fb1'i olmasi gerektigi gibi double buffer icin kullanin

simdi bu b maddesi icin iki yolunuz var..
1) fb0 aktif ekran.. fb1 buffer'iniz.. fb1'e cizer ve burayi komple fb0'a blit edersiniz. blit denemesi acisindan uygun.
2) fb adreslerini switch edebilirsiniz. (bkz. minilib flip)
Başlık: gp2x rlyeh's minimal lib
Gönderen: jimqode - 16.03.2007 23:16:52
@gnostic: son yolladigin ornek acayip faydali oldu. Neredeyse half-screen blitting = 750fps. Hardware blitter gercekten hizliymis. Tesekkurler bu kadar ugrastigin icin ;)

Bu arada dikkatleri bir konuya cekmek istiyorum. usleep galiba gp2x'de bozuk. usleep(1) anlamsiz uzun bir sure uyuyor. Duzgun bir karsiligini bilen var mi?
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 17.03.2007 00:00:17
Kod: [Seç]
while (gp2x_blitter[0x0034 >> 2] & 1) {
        asm volatile (&quot;nop&quot;);
        asm volatile (&quot;nop&quot;);
        asm volatile (&quot;nop&quot;);
        asm volatile (&quot;nop&quot;);
}
asm volatile (&quot;&quot; ::: &quot;memory&quot;);
:)

Alıntı yapılan: jimqode;13142
@gnostic: son yolladigin ornek acayip faydali oldu. Neredeyse half-screen blitting = 750fps. Hardware blitter gercekten hizliymis. Tesekkurler bu kadar ugrastigin icin ;)

Bu arada dikkatleri bir konuya cekmek istiyorum. usleep galiba gp2x'de bozuk. usleep(1) anlamsiz uzun bir sure uyuyor. Duzgun bir karsiligini bilen var mi?
Başlık: gp2x rlyeh's minimal lib
Gönderen: skate - 28.05.2007 11:17:32
Evet, ben de sonunda GP2X coding olayına girmiş bulundum (thx to Ragnor). I.F.O'yu Ragnor ile birlikte GP2X'e port ettik. şu anda yavaş da olsa çalışıyor, hem de hiç eksiksiz. Ama yavaşlık da göze epey bir batıyor. ışin en dandik tarafı ise yavaşlık stable değil. Kesik kesik yavaşlayıp hızlanma durumları söz konusu. sadece mmu hack kullanıyorum ki onu da ne derece düzgün kullandığımdan emin değilim. Makefile, optimization level v.s. olayları inceliicem, bakalım oradan birkaç FPS kazanabilirmiyiz. Ama SDL'in hızının yeteceğini hiç sanmıyorum. Eninde sonunda bu topicde geçen yöntemlere bir bir başvurmaya başliicam. Bakalım sonuç ne olacak...
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 28.05.2007 11:53:37
hayirli olsun, super haber :D

Alıntı yapılan: skate;15185
Evet, ben de sonunda GP2X coding olayına girmiş bulundum (thx to Ragnor).
Başlık: gp2x rlyeh's minimal lib
Gönderen: Decipher - 28.05.2007 19:48:04
ellerine sağlık Gnos, çok güzel bir tutorial olmuş, afiyetle okudum uyguladım, "20fps artıyo la bu" diyen Spritus'a da göstermek lazım :)
Başlık: gp2x rlyeh's minimal lib
Gönderen: skate - 29.05.2007 17:05:16
Ya şu minimal library'i bir test ediim dedim, en basit 3-5 satırlık exampleları (sadece init mesela) 675 KB output verdi şok oldum (v0.B kullanıyorum). bunun neresi "minimal" ya ;) Yani demek istediğim 675 KB bu olayın minimumu mu? SDL örnekleri de zaten 2 MB falan compile ediyordu. 64K olayını unutalım yani GP2X'de? :)
 
Not: Sanki daha önceleri birileri bu konudan bahsetmişti ama üşenmez tekrar cevaplarsınız ümidiyle history okumaya üşendim.
Başlık: gp2x rlyeh's minimal lib
Gönderen: GnoStiC - 29.05.2007 17:29:20
static olarak compile ettigimiz icin buyuk dosyalar elde etmek dogal..
niye static? cunku firmware gcc 2.95, biz toolkit'lerde 4.x kullaniyoruz vs..

okunmasi gereken bir kac thread:

GP2X Demo Development
http://www.gp32x.com/board/index.php?showtopic=27433

Thumb life (412 bytes)
http://www.gp32x.com/board/index.php?showtopic=31637

Tiny Pong (512 bytes)
http://www.gp32x.com/board/index.php?showtopic=31248
Başlık: gp2x rlyeh's minimal lib
Gönderen: skate - 29.05.2007 17:51:49
Çok saol dostum, anlaşılmıştır. Anladığım kadarıyla en iyi yöntem low size introlar/demolar için büyük olasılıkla
 
demo.gpe (ya da demo.gp2xe)
ve
demo-safe.gpe (static linked)
 
gibi iki dosya şeklinde release etmek en mantıklısı. Aynı Win32 1k ve 4k'larda sık sık kullanıldığı gibi. Bunun yanı sıra örneğin bir oyun yayınlayacak olursam her halikarda static linking kullanıcam. Tekrar sağol.
 
Az önce PC harddiskinden bir folder'ı GP2X'den mount etme ve doğrudan PC harddiskinden execution ile ilgili konuları okudum. Bu akşam evde deniicem (yaklaşık 1.5-2 saat sonra). Her defasında sd-card sök, PC'ye aparatla bağla, dosyayı kopyala, apartı durdur ve çek, sd-card'ı tekrar GP2X'e tak, boot etmesini bekle, menüden ilerle ve programı execute et, hatayı gör, gp2x'i kapat, tekrar sd-card'ı sök... şeklinde süre gelen kısırdöngü işkenceden kurtulmak niyetindeyim ;)