π
<-

Jetpack Impossible

C, C++, ASM...

Re: Jetpack Impossible

Unread postby pierrotdu18 » 01 Jun 2014, 13:54

Bah c'est ce que je pensais, mais bon...
static void* DEFAULT_BUFFER;
DEFAULT_BUFFER = SCREEN_BASE_ADDRESS;
Code: Select all
if (buf != ((volatile unsigned*)(DEFAULT_BUFFER)))
   {
      free(buf);
   }
   else
   {
      buf = *((volatile unsigned**)0xC0000010);
      *((volatile unsigned**)0xC0000010) = ((volatile unsigned*)(DEFAULT_BUFFER));
      free(buf);
   }


Donc à part si vraiment je suis débile léger, DEFAULT_BUFFER est bien initialisé comme étant le buffer par défaut (son initialisation est dans le initDoubleBuffering() qui n'est lancé qu'une seule fois et avant toute modification des buffers).
Et ensuite, dans la fonction quit(), si le buffer sur lequel on est entrain de dessiner n'est pas le buffer par défaut, alors on le free (et du coup le buffer final est bien le buffer de départ), et sinon, on se débrouille pour remettre le buffer courant au buffer de départ, et on free, on retombe toujours bien sur le bon buffer...
C'est pour ça que je ne comprends pas...
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

Re: Jetpack Impossible

Unread postby Excale » 01 Jun 2014, 15:20

Tu te casserais moins la tête si tu ne passais pas d'argument à flip().*

*ça n'est pas la seule bonne solution
User avatar
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 3.9%
 
Posts: 2955
Images: 3
Joined: 10 Sep 2010, 00:00
Gender: Male
Calculator(s):
MyCalcs profile

Re: Jetpack Impossible

Unread postby pierrotdu18 » 01 Jun 2014, 15:21

Parce que comme c'est limité au double buffering, il n'y a que deux possibilités :
- Le LCD lit le buffer par défaut
- Le LCD lit le deuxième buffer

Donc si le LCD ne lit pas le deuxième buffer, alors il lit le buffer par défaut et il suffit de libérer le deuxième buffer pour quitter... non?

EDIT : Ah bah j'ai répondu à ta question mais comme tu l'as éditée et supprimée... :p

Et sinon, oui, mais je voulais pas faire avec des globales...
C'est vraiment pas possible de faire marcher mon code?
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

Re: Jetpack Impossible

Unread postby matref » 01 Jun 2014, 23:12

C'est bon mon double buffering marche, pour toutes Nspires. J'ai juste trois fonctions, testé sur écran monochrome et couleur, ça marche :

Code: Select all
int currentBuf = 0;
unsigned short *bufCX[2];
unsigned char *bufMono[2];

#define BUFF_BASE_ADDRESS (is_cx ? bufCX[currentBuf] : bufMono[currentBuf])

int initDoubleBuff()
{
   if(is_cx)
   {
      bufCX[0] = (unsigned short *)SCREEN_BASE_ADDRESS;
      bufCX[1] = (unsigned short *)malloc(SCREEN_BYTES_SIZE);
      return !bufCX[1];
   }
   else
   {
      bufMono[0] = (unsigned char *)SCREEN_BASE_ADDRESS;
      bufMono[1] = (unsigned char *)malloc(SCREEN_BYTES_SIZE);
      return !bufMono[1];
   }
}

void switchBuffers()
{
   if(is_cx)
      *(unsigned short**)0xC0000010 = bufCX[currentBuf];
   else
      *(unsigned char**)0xC0000010 = bufMono[currentBuf];
   currentBuf ^= 1;
}

void deinitDoubleBuff()
{
   if(is_cx)
   {
      *(unsigned short**)0xC0000010 = bufCX[0];
      free(bufCX[1]);
   }
   else
   {
      *(unsigned char**)0xC0000010 = bufMono[0];
      free(bufMono[1]);
   }
}

On a juste à dessiner sur BUFF_BASE_ADDRESS comme on le ferait sur SCREEN_BASE_ADDRESS et appeler switchBuffers() à chaque frame et c'est bon.
Last edited by matref on 01 Jun 2014, 23:14, edited 1 time in total.
User avatar
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 25%
 
Posts: 506
Joined: 11 Dec 2011, 03:08
Location: France, Châteaurenard
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prépa MPSI

Re: Jetpack Impossible

Unread postby pierrotdu18 » 01 Jun 2014, 23:14

Je préfère vraiment mes fonctions.
Je ne suis pas sur PC mais je les upload demain ;)
je n'utilise qu'une variable globale, et qu'un buffer, pas deux.
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

Re: Jetpack Impossible

Unread postby matref » 01 Jun 2014, 23:29

P'tit update, c'est vraiment les casts qui me faisaient peur, mais apparemment comme ça ça marche (testé sur couleur et monochrome, je vais pas le dire à chaque fois :P ) :

Code: Select all
int currentBuf = 0;
void *doubleBuf[2];

#define BUFF_BASE_ADDRESS doubleBuf[currentBuf]

int initDoubleBuff()
{
   doubleBuf[0] = (void*)SCREEN_BASE_ADDRESS;
   doubleBuf[1] = malloc(SCREEN_BYTES_SIZE);
   return !doubleBuf[1];
}

void switchBuffers()
{
   *(volatile unsigned**)0xC0000010 = doubleBuf[currentBuf];
   currentBuf ^= 1;
}

void deinitDoubleBuff()
{
   *(volatile unsigned**)0xC0000010 = doubleBuf[0];
   free(doubleBuf[1]);
}
User avatar
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 25%
 
Posts: 506
Joined: 11 Dec 2011, 03:08
Location: France, Châteaurenard
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prépa MPSI

Previous

Return to Native: Ndless, Linux, ...

Who is online

Users browsing this forum: ClaudeBot [spider] and 6 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1524 utilisateurs:
>1504 invités
>14 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)