1

Bonjour à tous,

Encore une question concernant les effets graphiques sur TI.
Est-il possible de faire des fondus (contrast qui baisse ou qui monte par programmation)?
Si oui, où puis-je trouver un exemple?

D'avance merci.

Fred.

There is no spoon.

2

oui, dans les sources de flahz par exemple, sinon de memoire ça doit etre le TRAP 9 (mais vraiment de memoire..)
-> je viens de verifier : http://tigcc.ticalc.org/doc/system.html#OSContrastDn et http://tigcc.ticalc.org/doc/system.html#OSContrastUp
sinon tu peux aussi faire plein d'autre types de fondus (tu peux utiliser fondulib (2/4/7 gris) par exemple, une bibliotheque de fondus fa_bu_leuse tripo)

3

4

*Il y a des effets de transitions dans Extgraph 2 beta 5: de tête il me semble que tu dois regarder dans le header vers la ligne 1025 pour voir les prototypes.

*En ce qui concerne le changement de contraste, n'utilise pas bêtement les fonctions osContrastDn/osContrastUp parceque tu risques de dérégler le contrast. Il y a moyen de lire la valeur du contrast mais je ne sais pas où il faut la lire.

*Une version amélioré par Travis Fisher de l'effet qu'on trouve sur le site de la TICT:
/*	Original by Thomas Nussbaumer, added fading options	 */
void Dissolve(const short Flag) {
	unsigned short seq = 1, offset;
	unsigned char mask;
	
	do 
	{
		mask   = seq & 0x7;
		offset = seq >> 3;
		
		if (seq & 1)
			seq = (seq>>1)^0x6000;
    else seq = seq>>1;
    mask = 0x80 >> mask;
    
		if (offset >= LCD_SIZE)
			continue;
		
		if (Flag == 1) {     // Fade to Black
			*(unsigned char*)(Activel + offset) |= mask;
			*(unsigned char*)(Actived + offset) |= mask;
		} else if (!Flag) {  // Fade to White
			*(unsigned char*)(Activel + offset) &= ~mask;
			*(unsigned char*)(Actived + offset) &= ~mask;
		} else {             // Fade to a new screen
			
			/* -------------------------------------------------------------------------
			   If Flag == 2, the fade will act like a strange double buffer toggle.  The 
			   contents of the Hidden planes will be faded onto the Active gray planes! 
			   ------------------------------------------------------------------------- */
			
			// Light
			if (*(unsigned char*)(Hiddenl + offset) & mask)
				*(unsigned char*)(Activel + offset) |= mask;
			else *(unsigned char*)(Activel + offset) &= ~mask;
			// Dark
			if (*(unsigned char*)(Hiddend + offset) & mask)
				*(unsigned char*)(Actived + offset) |= mask;
			else *(unsigned char*)(Actived + offset) &= ~mask;
		}
    
	} while (seq != 1);
}

Je crois qu'il y a aussi une version en asm qui traine quelque part... mais bon, gagner 50 octets sur un projet qui rempli la mémoire de la calculette tritop

5

moveq #4,d0
trap #9
move.b (a0), d0
-> contraste dans d0.b (là c'est pas de memoire par contre... => regarde dans les sources html de http://ti-isard.tripod.com/francais/doc/interrupt.html )

6

7

à noter que la derniere ligne de ./5 est facultative (elle renvoit la valeur au lieu d'un pointeur...)

en adaptant la source de PpHd vue sur le lien du ./6 :

unsigned char value_contrast2(void);
asm("xdef value_contrast\n"
"value_contrast:\n"
"moveq #4,%d0\n"
"trap #9\n"
"move.b (%a0),%d0\n"
"rts\n");

8

Code utilisé dans Nebulus:
unsigned char *contraste(void) ;
asm("	contraste:
		move.w	%d0,-(%a7)
		move.w  #4,%d0
		trap    #9
		move.w (%a7)+,%d0
		rts"		) ;

void set_contraste (int value_contrast)
{
  unsigned char *contrast=contraste();
 	*contrast=value_contrast+1;
 	OSContrastDn ();
}


avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

9

ok, merci bien smile
There is no spoon.

10

Remontage de topic.
Ce code pose pb sous Pedrom.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

11

Ce code est parfaitement valide, d'ailleurs dans la TIGCCLIB actuelle, il y a ça:
#define OSContrastAddress ({unsigned char* __addr; asm volatile ("moveq #4,%%d0; trap #9; move.l %%a0,%0" : "=a"(__addr):: "d0","a0"); __addr; })
C'est d'ailleurs encore plus strict, ça présuppose que seuls %d0 et %a0 sont détruits, ton code permet à l'OS de détruire aussi %d1, %d2 et %a1.

Il y a aussi kbd_queue qui présuppose depuis longtemps que le trap #9 ne détruit pas n'importe quels registres.

!call PpHd
--- Call : PpHd appelé(e) sur ce topic ...
PpHd, je suis désolé, mais ton "workaround pour Nebulus" est en fait le comportement correct, le trap #9 n'est pas censé détruire autre chose que %d0 et %a0.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

Et il ne fait que çà sur PedroM. Je ne vois pas où est le problème.

13

Autant pour moi.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.