Le 04/06/2007 à 20:12
Salut,

Je voudrais me lancer dans la programmation sur GP32, mais le problème c'est que je ne trouve aucun tutorial.
Les liens qui était sur le site son HS.

Connaissez-vous un site ou lien qui explique un peu tout?

J'ai d'autre questions à poser aussi (j'en profite tongue) :

Quel est le meilleur OS pour programmer ca GP32, linux ou Windows?
On peut programmer avec n'importe quel logiciel de programmation?

Merci d'avoir pris le temps de lire ce posten et je suis désolé si ces questions ont déjà été posé.


Le 04/06/2007 à 22:48
Le SDK de mirko contient des samples : http://sourceforge.net/projects/mirkosdk/

Tu peux essayé le portage de la SDL de chui (ya des sample SDL un peu partout : www.libsdl.org).

Le kit de dev (compilo/lib/linker) : http://www.devkitpro.org

J'utilise pour ma part Eclipse sous windows avec le plug-in CDT

J'ai du code source gp32 sur ma page : http://four.fsphost.com/sodthor

Have fun

Thor
Le 05/06/2007 à 04:52
rtb7 toujours de bon conceil il y a toujours le sdk d origine une peu plus high level mais beaucoup plus lente
Le 05/06/2007 à 11:49
Merci pour vos réponses les gars :-)
Le 07/06/2007 à 20:42
oui s est ce cas l air de dire rov tongue
Le 11/06/2007 à 11:36
Hum le sdk de gp est pas mal limité quand même !
Pas de lecture de midi ou de mod. ( pour la musique c'est sympa quand même )
Pas de lecture de mp3.
Pas d'affichage de jpg, png, bmp...
Pas de gestion de l'opacité, de rotation, de zoom de l'image...
Et puis un peu lent quand même.
C'est sûr on peut faire des trucs mais ce sera moins chouette quand même tongue
Le 14/06/2007 à 15:50
> et surtout aucun soucis avec les blu+

faux, au final il y a bien + de bleme qu'avec le sdk de mirko
le sdk de mirko monte a bien plus de fps également!!

> le sdk de mirko a des problèmes avec la lecture de fichier sur smc

non, seulement avec l'ecriture, par contre la lecture est un poil plus lente visiblement

et les fonctions de blit officielle utilise un format pas vraiment standard au final
ce qui pose des blemes si tu veut faire un jeux multiplateforme (ac juste l'exe et non des fichier externes)
elle sont aussi tres lentes (notament pour la transparence)
bon c sur quelle sont 1000 fois plus rapide que celle de mirko, mais ca c pas dur smile

par contre il n'y a que sur le sdk de gp que le player mod de chn tourne

> Pas de gestion de l'opacité, de rotation, de zoom de l'image...

rien ne t'empeche de ne l'utiliser que comme un framebuffer et ainsi utiliser les routines de matkeupon qui font tout ca


et le sdk officiel fait des fichiers assez gros, le code de mirko est vraiment plus léger
Le 14/06/2007 à 22:52
tes fixes blu+ sur le sdk de mirko m'interesse r043v !
fait passer ! j'ai qu'une flu et on me repproche souvent le fait que mes programmes marchent pas bien sur blu+.

Le 15/06/2007 à 02:11
en fait de base le sdk de mirko fonctionne tres bien sur blu+ smile
le probleme doit venir de la detection du type d'ecran
mirko le fait en mattant qq octet ds le bios, mais si les gens l'on flashé sans savoir quel bios il mette ou avec un bios exotique ou une nouvelle version ...
il faudrais trouver un trik hardware



voila mon code, tu aurra certainement qq truc a modifier ou des fct externe à virer ou faire pointer

le set cpu,
pour le 50 et 66mhz, le clock mode etait (je crois) à 1,
la sur ma blu+, en mettant 0, l'ecran supporte tres bien de doubler les fps pour monter a 70, sur gp classique il faudra peu etre redescendre mais il faut tester smile
la fonction gp_setCpu appellée, est le code asm de mirko, lui non modifié
     void gpSetCpuSpeed(u32 frequency)
     {   switch(frequency)
          {     case 166: { CLKDIV=0x4B011; MCLK=166000000; CLKMODE=3; break;}
               case 164: { CLKDIV=0x4a011; MCLK=164000000; CLKMODE=3; break;}
               case 160: { CLKDIV=0x48011; MCLK=160000000; CLKMODE=3; break;}
               case 156: { CLKDIV=0x2c001; MCLK=156000000; CLKMODE=3; break;}
               case 144: { CLKDIV=0x28001; MCLK=144000000; CLKMODE=3; break;}
               case 133: { CLKDIV=0x3a011; MCLK=132000000; CLKMODE=2; break;}
               case 100: { CLKDIV=0x2b011; MCLK=102000000; CLKMODE=0; break;}
               case  66: { CLKDIV=0x25002; MCLK= 67500000; CLKMODE=0; break;}
               case  50: { CLKDIV=0x2a012; MCLK= 50000000; CLKMODE=0; break;}
               case  40: { CLKDIV=0x48013; MCLK= 40000000; CLKMODE=0; break;}
               case  33: { CLKDIV=0x25003; MCLK= 33750000; CLKMODE=0; break;}
               case  22: { CLKDIV=0x33023; MCLK= 22125000; CLKMODE=0; break;}
          };
          
        switch(CLKMODE)
          {     case 0 : HCLK=MCLK;               PCLK=MCLK;          break;
               case 1 : HCLK=MCLK;               PCLK=MCLK>>1;     break;
               case 2 : HCLK=MCLK>>1;     PCLK=MCLK>>1;     break;
               case 3 : HCLK=MCLK>>1;     PCLK=MCLK>>2;     break;
          };
          
          gp_setCpu(MCLK,CLKDIV,CLKMODE);
          inikey();
          currentFrequency = frequency;
     }


la fonction d'init d'ecran en elle meme, ce sont les 2 de mirko, fusionnée et simplifié
u32 gp_initFramebuffer(u32 refreshrate)
{     u32 GPHCLK = gp_getHCLK();
     u32 ratio;
     
     // is a blu+ ?
     u32 bluplus = ( (*(int*)0x1014) >= 0x01030606 );
     
     // invert screen detection with L key
     if(keyPush(kl)) bluplus ^= 1;
     
     if(bluplus) ratio = 109850; else ratio = 83385;
     
     // limit refresrate
     if (refreshrate <  50) refreshrate = 50;     if (refreshrate > 120) refreshrate = 120;
     
     // Get the correct CLKVAL for refreshrate
     u32 CLKVAL = (GPHCLK/(ratio*2*refreshrate))-1;     if (!CLKVAL) CLKVAL=1;
     
     // Get real refreshrate
     refreshrate = GPHCLK / (ratio*2*(CLKVAL+1));
     
     // set lcd registers
     rLCDCON1 = (CLKVAL<<8) | (0<<7) | (3<<5) | (12<<1) | 1;
     
     if(bluplus)
     {     rLCDCON2 = 0; rLCDCON2 = (8<<24) | (319<<14) | (2<<6) | 5;
          rLCDCON3 = 0; rLCDCON3 = (50<<19) | (239<<8) | 2;
          rLCDCON4 = 0; rLCDCON4 = 30;
     }
      else
     {     rLCDCON2 = 0; rLCDCON2 = (1<<24) | (319<<14) | (2<<6) | 1;
          rLCDCON3 = 0; rLCDCON3 = (6<<19) | (239<< 8) | 2;
          rLCDCON4 = 0; rLCDCON4 = 4;
     }
     
     rLCDCON5 = 1793;
     Gdl_flip();
     return refreshrate;
}


et la fonction de flip d'ecran, la les buffer d'ecran sont definis ailleur en global, modifi en concequence..
u32 flipVar[4] = {0,0,0,0};

void Gdl_flip(void) // flip the framebuffer
{     #ifdef GP32
          if(drawGdlShell) shell.draw();
           //gp_waitDMA(0);
          //gp_waitDMA(1);
          if(!flipVar[nflip])
          {     flipVar[0] = ((u32)(screenBuffer[0]))>>22; flipVar[0] <<= 21;
               flipVar[0]  |= ( (((u32)(screenBuffer[0]))&0x3FFFFF)>>1 );

               flipVar[1] = ((u32)(screenBuffer[1]))>>22; flipVar[1] <<= 21;
               flipVar[1]  |= ( (((u32)(screenBuffer[1]))&0x3FFFFF)>>1 );

               flipVar[2] = (((u32)(screenBuffer[0]))&0x3FFFFF)>>1;
               flipVar[3] = (((u32)(screenBuffer[1]))&0x3FFFFF)>>1;
               flipVar[2] += 320*240;
               flipVar[3] += 320*240;
               rLCDSADDR3 = (0<<11) | 240 ;
          }

           while(((rLCDCON5>>17)&3)==2); // wait for active line  
           while(((rLCDCON5>>17)&3)!=2); // wait for active line to end - start of front porch and hsync

          rLCDSADDR1 = flipVar[nflip];
          rLCDSADDR2 = flipVar[2+nflip] ;
 
          //u32 miss = (rLCDCON1 >> 18);
          //if(currentFrequency<=80) if(miss > currentFrequency) gp_setCpuspeed(133);
          while ((rLCDCON1 >> 18) !=   1) asm volatile("nop\n""nop\n""nop\n");
          while ((rLCDCON1 >> 18) != 319) asm volatile("nop\n""nop\n""nop\n");
          //if(currentFrequency<=80) if(miss > currentFrequency) gp_setCpuspeed(currentFrequency);
          
          nflip ^= 1 ;
          pixel = screenBuffer[nflip];
          //fullBlitLimit();
          tick = GetTickCount();
      #endif
}

Le 25/07/2007 à 02:47
rov regarde dans la doc du smdk2400 dans mon autre post dans la section lcd il me semble avoir vue un truc dsl pas trop le temps de mate en cemoment mais bientot en vacance bonne lecture tongue