Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 17 Apr 2005 14:35:25

EpiCas
Membre
Lieu: ANDRESY (Yvelines)
Date d'inscription: 16 Feb 2005
Messages: 37

Probleme de double buffering

Voila je fais un petit prog qui affiche déja plein de sprites en DB.
J'essaye alors d'afficher une ligne verticale qui ne depasse pas de l'ecran (j'en suis sure) avec la fonction de db-lib bvline.
Le fait d'afficher en double buffering cette ligne en plus des autres sprites ne fait pas bugger directement la calculatrice mais quand on quitte le programme, soit la calto se bloque ou au redemarrage de celle ci, j'ai la memoire principale effacée. :x
(J'affiche tout sur les segments 5 et 6 et je recopie tout sur 1 et 3 avec copyscreen)
Quand j'affiche la ligne verticale directement sur 1 et 3 (SEG) sans donc le double buffering, y'a pas de prob de bug et de plantage de calto.
C'est etonnant. J'affiche peut être trop de sprites ou d'éléments? sad
Enfin, j'en sais rien après tout. Il y a un bug connu?
Merci.

Hors ligne

 

#2 17 Apr 2005 14:39:52

Bija
Membre Communauté Graph100
Lieu: Nord de la France
Date d'inscription: 20 Apr 2004
Messages: 240
Site web

Re: Probleme de double buffering

poste le code source de ton programme (s'il est trop long simplifie le)
tu as peut etre faire des erreurs d'arguments avec copyscreen (t'as pas fait un truc du genre copyscreen(1,5) ?)
en tt cas tu as du écrire ds la mémoire de la calculatrice


" Ignorer l'impossiblité de ce que l'on tente reste l'un des ingrédients essentiels de la réussite "

Hors ligne

 

#3 17 Apr 2005 14:53:36

EpiCas
Membre
Lieu: ANDRESY (Yvelines)
Date d'inscription: 16 Feb 2005
Messages: 37

Re: Probleme de double buffering

Ok je vous poste ca dès que possible, mais ca marchait très bien avant que je mette la ligne verticale et ca marche tjs bien quand je l'enlève.
C'est elle qui pose le prb.

voila :
 

Code:

copyscreen(SEG1,SEG4); 
  copyscreen(SEG1,SEG5);
  copyscreen(SEG2,SEG6); 

  d8_and(i,j,Chag[16],SEG1);     
  d8_and(i,j,Chag[16],SEG3);
  d8_or(i,j,Chag[vg],SEG1);      
  d8_or(i,j,Chag[vg+1],SEG3);
  d8_and(x,y,Chad[16],SEG1);      
  d8_and(x,y,Chad[16],SEG3);
  d8_or(x,y,Chad[vd],SEG1);
  d8_or(x,y,Chad[vd+1],SEG3);

Boucle   // c'est une vraie boucle dans le programme hein
       

        copyscreen(SEG4,SEG5);
        copyscreen(SEG2,SEG6);

          bvline(0,degg,63,SEG5);             
          bvline(0,degg,63,SEG6);          
          bvline(127,degd,63,SEG5);
          bvline(127,degd,63,SEG6);

/*AFFICHAGE DU SPRITE*/
        d8_and(i,j,Chag[16],SEG5);  
        d8_and(i,j,Chag[16],SEG6);     
        d8_or(i,j,Chag[vg],SEG5);
        d8_or(i,j,Chag[vg+1],SEG6);
        d8_and(x,y,Chad[16],SEG5);  
        d8_and(x,y,Chad[16],SEG6);   
        d8_or(x,y,Chad[vd],SEG5);
        d8_or(x,y,Chad[vd+1],SEG6);
        copyscreen(SEG5,SEG1); 
        copyscreen(SEG6,SEG3); 

Evidemment, c'est hyper simplifié mais j'ai mis tous ce qui touchait au double buffering.
Merci

Hors ligne

 

#4 17 Apr 2005 15:30:36

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Probleme de double buffering

En fait c'est toi qui utilise mal la fonction bvline... (Faut avouer que la doc n'est pas particulièrement précise)
Pour tracer une ligne noire, tu ne dois pas appeler cette fonction pour chacun des deux buffers du mode DB, mais uniquement pour le premier des deux...
Si tu fais bvline(0,degg,63,SEG6); tu écris à la fois sur le 6eme buffer et sur le 8eme, or ce dernier n'est pas un buffer video mais la table d'allocation des zones mémoires dans ta calc... (Autrement dit si tu modifies mal le contenu tu risques de perdre toutes les données comme tu t'en es rendu compte).
Donc pour afficher une ligne, n'utilise que le buffer 5 wink

PS: t'as l'air de bien t'amuser pour afficher tes sprites dis-moi :P


Pensez à surveiller mes releases wink

Hors ligne

 

#5 17 Apr 2005 15:44:06

EpiCas
Membre
Lieu: ANDRESY (Yvelines)
Date d'inscription: 16 Feb 2005
Messages: 37

Re: Probleme de double buffering

Effectivement Merci beaucoup d'ailleurs.
Mais je veux afficher sur le buffer 5 et 6 et non pas sur le buffer 5 et 7 car ça en saute un non?
Comment je peut modifier la fonction pour qu'elle remplisse le 5 et 6 en mettant SEG5 et non la 5 et 7?
Sinon ca me fait modifier tout le prog et j'en ais pour un bout de temps.

Effectivement, j'apprend beaucoup a programmer avec les sprites en C. J'essaye de faire un prog mais on verra... Pour le moment c'est le bordel.

Merci encore

Hors ligne

 

#6 18 Apr 2005 13:17:19

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Probleme de double buffering

Tu vas devoir remplacer toutes les lignes du genre

Code:

or es:[di+0x800],dh

par

Code:

or es:[di+0x400],dh

pour que ça écrive sur le buffer qui suit et pas sur celui encore après...


Pensez à surveiller mes releases wink

Hors ligne

 

#7 18 Apr 2005 14:00:43

EpiCas
Membre
Lieu: ANDRESY (Yvelines)
Date d'inscription: 16 Feb 2005
Messages: 37

Re: Probleme de double buffering

Ouais! ca marche, pas de prob
Merci encore.

Hors ligne

 

#8 18 Apr 2005 17:45:08

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Probleme de double buffering

À propos du double buffering: il faut mieux utiliser le page flipping (pas besoin de copier d'écrans): on affiche un buffer pendant qu'on dessine dans un autre, quand ce dernier est fini on l'affiche et on écrit dans l'autre, on peut faire ça très facilement avec la calc (en utilisant les ports pour changer l'adresse du buffer affiché). Le seul inconvennient c'est qu'on ne peut pas utiliser les fonctions du genre printf() et compagnie parce qu'on ne peut pas les rediriger vers un buffer choisi...

(je n'ai pas lu tout le topic, je me suis arrêté à "copyscreen")


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#9 19 Apr 2005 08:36:19

Swifter
Programmeur Graph100
Lieu: Niort (79)
Date d'inscription: 06 Aug 2002
Messages: 980
Site web

Re: Probleme de double buffering

en meme temps, si tu utilise printf uniquement pour afficher du texte...
tu peux utiliser les fonctions de db-lib : locate() et text(), qui elle te permettent de rediriger vers le buffer choisi...

evidemment comme tout n'est pas parfait, si tu veux afficher des nombres a partir d'une variable, faudra te creer tes fonction


Swifter, avec un T, n'attrapes pas la poussière mais toutes les remarques débiles :mrgreen:
              ** Swifter68@hotmail.com **

Hors ligne

 

#10 19 Apr 2005 09:52:55

Bija
Membre Communauté Graph100
Lieu: Nord de la France
Date d'inscription: 20 Apr 2004
Messages: 240
Site web

Re: Probleme de double buffering

ou utiliser sprintf wink


" Ignorer l'impossiblité de ce que l'on tente reste l'un des ingrédients essentiels de la réussite "

Hors ligne

 

#11 19 Apr 2005 10:34:58

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Probleme de double buffering

me semblait que le page flipping posait des problèmes, j'sais plus qui m'a dit ça mais quand j'avais fait le test j'ai aussi eu des problèmes, ça clignotait... et ça semblait pas venir de mon code...
à retester peut etre encore?


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#12 19 Apr 2005 14:08:14

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Probleme de double buffering

J'avais fait les mêmes essais, et ça clignotait neutral


Pensez à surveiller mes releases wink

Hors ligne

 

#13 19 Apr 2005 18:22:50

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Probleme de double buffering

C'est peut-être qu'il faut "flipper" les écrans au bon moment (en cadence avec la fréquence de rafraîchissement).


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#14 20 Apr 2005 04:46:25

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Probleme de double buffering

On pourrait hooker une fonction sur l'interruption, où, à l'aide d'une variable globale, on ferait en sorte que ça bascule au moment voulu...


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#15 20 Apr 2005 06:36:51

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Probleme de double buffering

A ma connaissance on n'a aucun moyen de savoir à quel moment l'écran est raffraichi... (je le rappelle, l'int 53 n'a rien à voir dans cette histoire)


Pensez à surveiller mes releases wink

Hors ligne

 

#16 21 Apr 2005 03:58:44

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Probleme de double buffering

le moyen de le savoir serait de mettre la vitesse de rafraichissement au minimum (ou on voit le défilement) via les ports et de monitorer toutes les interruptions afin de savoir si certaines auraient un rapport avec le rafraichissement

bien entendu faudrait faire des tests de fréquences et mesurer à l'oeil la fréquence du balayage


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#17 21 Apr 2005 04:58:36

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Probleme de double buffering

Le problème c'est qu'on n'est même pas sûrs qu'une interruption logique soit bien générée lorsque le contrôleur de l'écran envoie une interruption matérielle au processeur (faut pas oublier non plus que ce n'est pas le processeur qui fait passer les données de la mémoire vidéo vers l'écran)...


Pensez à surveiller mes releases wink

Hors ligne

 

#18 24 Apr 2005 05:04:36

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Probleme de double buffering

ouais mais faut tenter quand meme wink


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr