1

Comment réaliser dans un programme en C, une sauvegarde de l'écran entier de la TI89, en vue d'un réaffichage ultétieur de cette sauvegarde. Quelles sont les fonctions que je doit utiliser, si il en existe des toutes faites ?

2

Tu peux utiliser LCD_save, LCD_restore
Avec un LCD_BUFFER en argument.
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

3

Perso j'utilise memcpy; ça fait toujours 2 fonctions en moins à retenir.

4

J'y arrive pas : je dois taper quoi exactement svp ? LCD_save(LCD_BUFFER); ça fait une erreur.

5

Jyaif :
Perso j'utilise memcpy; ça fait toujours 2 fonctions en moins à retenir.

Moi j'utilise mes macros à base de memcpy tongue, mais bon je voulais pas l'embrouiller.
tismaster :
J'y arrive pas : je dois taper quoi exactement svp ? LCD_save(LCD_BUFFER); ça fait une erreur.

LCD_BUFFER est un type de données (un char [LCD_SIZE] en fait).
LCD_BUFFER buf; //déclare un buffer
LCD_save(&buf); //sauve l'écran dans buf
ClrScr();
DrawStr(0,0,"Hello World!",A_NORMAL);
ngetchx();
LCD_restore(&buf); //restaure l'écran
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

6

Ok, merci ça marche !

7

8

Ouais c'est sur la pile que ca se passe.
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

9

10

Non, smile
Mais généralement moi j'alloue plutôt sur le tas (pour pas utiliser la pile pour rien)
void *buf;
if(!(buf=malloc(LCD_SIZE)))
{
   // erreur
   return 0;
}

memcpy(buf,LCD_MEM,LCD_SIZE); // ou bien LCD_save(buf);
//et avant de quitter
memcpy(LCD_MEM,buf,LCD_SIZE); // ou bien LCD_restore(buf);
free(buf);
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

11

12

La mémoire accessible au travers de HeapAlloc, etc...
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

13

("heap" = tas en anglais...)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

14

15

Est ce que le code ci-dessous marche aussi lorsqu'on a plusieurs plans (échelles de gris) ?
LCD_BUFFER buf; //déclare un buffer 
LCD_save(&buf); //sauve l'écran dans buf 
ClrScr(); 
DrawStr(0,0,"Hello World!",A_NORMAL); 
ngetchx(); 
LCD_restore(&buf); //restaure l'écran 


Au lieu de restaurer l'écran à 0,0 , est-ce qu'il existe une fonction permettant de le restaurer, mais en dépassant de l'écran (par exemple, à -10, 0). En fait c'est pour faire une sorte de scrolling (mais qui a pas besoin d'être super rapide). Au lieu de retracer tout à chaque fois avec des fonctions mathématiques, je trace que le petit bout qui manque.

16

Le LCD_save tu n'as qu'à le faire avant le GrayOn et le restore après le GrayOff.

Mais si c'est pour scroller tu peux faire avec les fonctions de scroll graph.h.
Sinon tu peux te le faire avec memcpy/memmove.
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

17

Au fait, j'ai une fois lu que 2 memcpy étaient plus rapide qu'un memmove. C'est vrai?

18

j'ai du lire ça moi aussi .... c'est pas dans une source de David Coz? grin
Cyril Mottier [Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
Tuto sur l'utilisation de Vertel3 : Cliquez ici

19

oui, mais le mieux étant quand même de reprogrammer un memmove() qui gérerait uniquement le cas où toutes les adresses sont paires ^^ (si c'est bien fait ça va à peu près aussi vite qu'un seul memcpy())

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

20

21

Jyaif :
Au fait, j'ai une fois lu que 2 memcpy étaient plus rapide qu'un memmove. C'est vrai?

ouais ouais j'avais testé cf ici.
Pollux :
oui, mais le mieux étant quand même de reprogrammer un memmove() qui gérerait uniquement le cas où toutes les adresses sont paires ^^ (si c'est bien fait ça va à peu près aussi vite qu'un seul memcpy())

tu me l'avais passé (cf le lien juste au dessus)
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

22

Thor :
j'ai du lire ça moi aussi .... c'est pas dans une source de David Coz? grin

Ouai wink

23

Twindruff :
Si c'est pour scroller tu peux faire avec les fonctions de scroll graph.h.


Tu fais allusion à quelles fonctions de scroll dans graph.h : BitmapGet et BitmapPut ?

24

25

Non, mais dans graph.h, c'est quoi les fonctions de scroll ?
Moi je pensais faire un BitmapGet, puis un BitmapPut à des coordonnées différentes de celles de BitmapGet. On calcule la partie qui manque et on l'affiche. Et ça fait une sorte de scroll non ? A moins que ça soit pas assez rapide.

26

27

L'idée des memmove est meilleure.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

28

29

Oulala, là je suis encore plus pommé. Donc sasume, tu me dis qu'il faut utiliser les memmove.
Je lis "Copies a block of len bytes from src to dest, with possibility of overlaping of source and destination block. " C'est un peu du chinois ça pour moi. Mais d'après ce que j'ai compris, ça copie une série de bits (il y en a en tout len) de src dans dest. Ok, mais comment "capter" les bits affichés par l'écran ?
Prenons un exemple concret. J'ai mon écran qui affiche des pixels, assimilables à des bits. Si je veux tous les décaler de deux bits vers la droite, il faut d'abord stoker ces bits quelque part. Avec quelles fonction ?
Ensuite, il faut les traiter : avec quelle fonction.
Puis il faut les afficher : avec quelle fonction ?

30

Il ne faut pas parler en "bits", il faut parler en "octets".
Avec memmove, tu ne peux pas décaller de 1 bit, tu peux juste décaller de 1 octet (ou 2, ou 3, ou x...)
exemple:
memmove(LCD_MEM,LCD_MEM+1,LCD_SIZE-1); //j'ai peut etre inversé les 2 premiers arguments...