Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » J'aimerai vraiment m'améliorer... (139 réponse(s))
./REPRISE DU POST PRECEDENT (post n°38)   Marquer comme non lu.
geogeo Ecrit le: Jeudi 6 avril 2006 à 18:51 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Kroma :
Geogeo, continue comme ça. C'est quoi le prochain jeu que tu comptes faire ?


Je ne dirais rien même sous la torture. ^^


Kroma :
Encore une petite question de débutant...( je suis désolé de vous embêter mais bon, vous en savez plus que moi... :s )
Qu'est ce que c'est exactemement une "Interruption" -> Interrupt ?


http://www.tigen.org/pws_move/index.php?mod=articles&ac=commentaires&id=7

[EDI] Je viens de me rendre compte qu'un nouvel article sur les ints doit être écrit, parce que celui là beurk niveau orthographe et explications. :D

Bon je résume:
Dans un processeur tu as 3 grands types d'interruptions (matérielles, programmables et internes). Une interruption est un événement asynchrone (sauf pour les timers) déclenché par un évenement externe (E/S des périphériques) et internes (programmables et erreurs du processeur).
Lorsqu'une interruption se déclenche, une routine est executée. Pour connaitre quelle routine executée il existe en mémoire centrale une table de vecteurs. (Sur PC c'est la même chose sauf que cette table contient les drivers de tes périphériques en gros).

Interruptions matérielles:
- Sur TI il existe 7 interruptions de ce type. Physiquement sur ton processeur il existe 7 broches où les périphériques peuvent se connecter dessus. L'envoi d'une tension par le périphérique par le biais d'un fil d'interruption déclenche une routine d'interruption.
Pour les horloges par exemple celle qui gère les niveaux de gris, ce sont des périphériques simple qui envoi périodiquement une tension dans un fil d'interruption donc déclenche périodiquement une interruption.

Interruptions internes:
- Elles sont simplement déclenchée lorsque le processeur détecte une erreur de traitement (Division par zéro, Accès à une zone mémoire protégée, instruction inconnue...)

Interruptions programmables (Trap):
- Le but de ce genre d'interruptions est de permettre au programmeur de faire un appel système (executer une routine du système d'exploitation). Cela se fait par l'intermédiare d'une simple instruction en assembleur. Sur TI il existe 11 Trap donc 11 sous routines qui peuvent être utilisées par n'importe qui. genre sur TI un trap pour éteindre la machine, un pour lancer le self test...

Une des idée que j'ai lancé est d'exploiter ce genre de trap pour permettre l'utilisation de DLL. (Idée à implanter dans GFA Basic %)).
-Edité le Jeudi 6 avril 2006 à 19:12 par geogeo-
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°39   Marquer comme non lu.
Kroma Ecrit le: Jeudi 6 avril 2006 à 19:32 Déconnecté(e)    Voir le profil de Kroma Envoyer un email à Kroma Visiter le site WEB de Kroma Envoyer un message privé à Kroma  

Donc, si j'ai bien compris:

Pour faire un affichage des secondes, il faudrait qu'a chaque fois que je capte l'AUTO_INT 3
je fasse seconde++, je me trompes ?
Et si on supprime l'AUTO_INT 1 alors on ne pourra plus faire apparaître des niveaux de gris

Sinon, j'avais pas vu que t'avais fait des Tutos... T'es vraiment le programmeur de la situation!!! =)
#idea# SHIP TOURNAMENT 2006 -> 5% #idea#
    
./Post n°40   Marquer comme non lu.
geogeo Ecrit le: Jeudi 6 avril 2006 à 19:37 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


l'AUTO INT 3 est réservé à l'USB. Pour afficher les secondes utilises l'AUTO INT 1 ou 5.
Si tu veux pas te casser la tête regardes du côté de la fonction OSRegisterTimer
Si tu veux te casser un peu la tête, il faut faire ce genre de chose

INT_HANDLER OldInt5 = NULL;
volatile int Counter = 0;

DEFINE_INT_HANDLER(MyInt5)
{
  Counter++;
  ExecuteHandler (OldInt5);
}

void _main(void)
{
  OldInt5 = GetIntVec (AUTO_INT_5);
  SetIntVec (AUTO_INT_5, MyInt5);
  while (!kbhit()) printf_xy (50, 50, "Counter = %d  ", Counter);
  SetIntVec (AUTO_INT_5, OldInt5);
  GKeyFlush ();
}

-Edité le Jeudi 6 avril 2006 à 19:38 par geogeo-
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°41   Marquer comme non lu.
Link Ecrit le: Jeudi 6 avril 2006 à 22:53 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

Au fait: si je me souviens bien, quand tu utiliseras les niveaux de gris, il ne faudra plus utiliser SetIntVec() pour l'auto-int 1, mais GraySetInt1Handler() (car les gris utilisent l'auto-int1).

Mais il est encore possible que cela ait changé depuis...
    
./Post n°42   Marquer comme non lu.
Kevin Kofler Ecrit le: Vendredi 7 avril 2006 à 00:22 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Il y a quand-même ~10-20% du code de PolySnd qui est de Pollux ou de moi.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°43   Marquer comme non lu.
Kevin Kofler Ecrit le: Vendredi 7 avril 2006 à 00:25 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Kroma :
Pour faire un affichage des secondes, il faudrait qu'a chaque fois que je capte l'AUTO_INT 3
je fasse seconde++, je me trompes ?

geogeo :
l'AUTO INT 3 est réservé à l'USB.

Ça dépend de la version matérielle, en fait. :) Mais il en découle que l'AI3 n'est pas un bon moyen de compter des secondes.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°44   Marquer comme non lu.
Kevin Kofler Ecrit le: Vendredi 7 avril 2006 à 00:26 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Link :
Au fait: si je me souviens bien, quand tu utiliseras les niveaux de gris, il ne faudra plus utiliser SetIntVec() pour l'auto-int 1, mais GraySetInt1Handler() (car les gris utilisent l'auto-int1).

Soit ça, soit tu rediriges l'AI1 avant d'activer les gris.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°45   Marquer comme non lu.
geogeo Ecrit le: Vendredi 7 avril 2006 à 16:04 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Kevin Kofler :
Il y a quand-même ~10-20% du code de PolySnd qui est de Pollux ou de moi.


Certe je l'avoue mais autaut ouvrir un topic sur ce sujet et non polluer ce topic avec ce genre d'histoire qui n'a absolument aucun interêt!
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°46   Marquer comme non lu.
240-185 Ecrit le: Vendredi 7 avril 2006 à 16:54 Déconnecté(e)    Voir le profil de 240-185 Envoyer un email à 240-185 Envoyer un message privé à 240-185  

Pour en revenir a Kroma et aux interruptions (et pour simplifier un peu :p), il faut savoir qu'en C, une interruption est de type INT_HANDLER (d'ou le DEFINE_INT_HANDLER de geogeo)

Ce qui fait qu'on a le code suivant :


//Sauvegarde des interruptions
INT_HANDLER old_int_1,old_int_5;

old_int_1=GetIntVec(AUTO_INT_1);
old_int_5=GetIntVec(AUTO_INT_5);

//Code plus ou moins foireux qui fait le programme

//Restauration (Miam)
SetIntVec(AUTO_INT_1,old_int_1);
SetIntVec(AUTO_INT_5,old_int_5);


Je precise au cas ou : ce code doit etre dans une fonction... De preference juste au debut du main()...
Tel un automate, le dinosaure noir s'avance vers le chef des Chomp et dit : "euh..."
    
./Post n°47   Marquer comme non lu.
Sasume Ecrit le: Vendredi 7 avril 2006 à 17:33 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

240-185 :
Pour en revenir a Kroma et aux interruptions (et pour simplifier un peu :p), il faut savoir qu'en C, une interruption est de type INT_HANDLER (d'ou le DEFINE_INT_HANDLER de geogeo)

Mouais, enfin c'est mal dit. En C il n'y a pas d'interruptions. INT_HANDLER, c'est le type défini par tigcclib pour les manipuler.
    
./Post n°48   Marquer comme non lu.
Kroma Ecrit le: Vendredi 7 avril 2006 à 19:17 Déconnecté(e)    Voir le profil de Kroma Envoyer un email à Kroma Visiter le site WEB de Kroma Envoyer un message privé à Kroma  

Merci à tous pour les infos, je viens de rentrer de stage et j'ai pu tester, c'est fabuleux ce qu'un forum peut être instructif, merci à tous !

J'ai une autre question (et oui ça ne fait que commencer)... C'est au sujet du... Tadaaa Scrolling.
Je voudrai savoir s'il est possible de faire du scroll sans passer par des librairie ( à vrai dire, j'aime pas trop utiliser les librairies autre que celles fourni avec TIGCC ).

Voilà c'est tout.

Ah oui, voilà mon code, c'est pour savoir si c'est ok comme ça ou s'il y a moyen de faire mieux:

#include <tigcclib.h>

static unsigned short VsoLight[]={0x7C0, 0xAA0, 0x1FF0, 0xEE0, 0x540, 0x540, 0x540, 0x6C0, 0x6C0, 0x540, 0x540, 0x540, 0xEE0, 0x1FF0, 0xAA0, 0x7C0};
static unsigned short VsoDark[]={0x7C0, 0xC60, 0x1FF0, 0xFE0, 0x6C0, 0x6C0, 0x6C0, 0x440, 0x440, 0x6C0, 0x6C0, 0x6C0, 0xFE0, 0x1FF0, 0xC60, 0x7C0};

static unsigned short BkLight[16]={0x0};
static unsigned short BkDark[16]={0x0};

void AffVso(int x, int y)//La j'affiche mes vaisseaux.
{
Sprite16(x,y,16,VsoLight,GrayGetPlane(LIGHT_PLANE),SPRT_OR);
Sprite16(x,y,16,VsoDark,GrayGetPlane(DARK_PLANE),SPRT_OR);
}

void EraseSprt16(int x, int y)//La j'efface un sprite16 ( à l'aide d'un sprite vide)
{
Sprite16(x,y,16,BkLight,GrayGetPlane(LIGHT_PLANE),SPRT_AND);
Sprite16(x,y,16,BkDark,GrayGetPlane(DARK_PLANE),SPRT_AND);
}

int MooveVso(int *ptrX,int *ptrY,int up,int down)//pour faire bouger les vaisseaux
{
if((!up && !down) || (up && down) || (up && *ptrY<=0) || (down && *ptrY>=100-16))
return 0;

EraseSprt16(*ptrX,*ptrY);

if(up && *ptrY>0)
*ptrY = *ptrY - 1;

if(down && *ptrY<100-16)
*ptrY = *ptrY + 1;

AffVso(*ptrX,*ptrY);
return 0;
}


// Main Function
void _main(void)
{
INT_HANDLER SavedInt_1=NULL, SavedInt_5=NULL;
SavedInt_1 = GetIntVec(AUTO_INT_1);
SavedInt_5 = GetIntVec(AUTO_INT_5);
SetIntVec(AUTO_INT_1,DUMMY_HANDLER);
SetIntVec(AUTO_INT_5,DUMMY_HANDLER);
/* Bon, j'ai redirigé les AUTO_INT 1 & 5 */

int up=0,down=0,up2=0,down2=0,exit=0,x1=1,y1=(100-16)/2,x2=158-16,y2=(100-16)/2;//mes variables
int *_y1=&y1,*_y2=&y2;

ClrScr();
GrayOn();
AffVso(x1,y1);
AffVso(x2,y2);

while(!exit)
{
// je teste les touches
up=(_keytest(RR_UP));
down=(_keytest(RR_DOWN));
up2=(_keytest(RR_2ND));
down2=(_keytest(RR_DIAMOND));
exit = (_keytest(RR_ESC));
// je bouge les vaisseaux
MooveVso(&x1,_y1,up2,down2);
MooveVso(&x2,_y2,up,down);
}


//je restaure tout
GrayOff();
SetIntVec(AUTO_INT_1,SavedInt_1);
SetIntVec(AUTO_INT_5,SavedInt_1);
}


Voilà, c'est pour savoir si je suis sur la bonne voie ou si y'a plus simple...
#idea# SHIP TOURNAMENT 2006 -> 5% #idea#
    
./Post n°49   Marquer comme non lu.
Kroma Ecrit le: Vendredi 7 avril 2006 à 20:14 Déconnecté(e)    Voir le profil de Kroma Envoyer un email à Kroma Visiter le site WEB de Kroma Envoyer un message privé à Kroma  

Oups! je retire ce que j'ai dit pour le scroll, par contre pour mon code, ça tient toujours...
#idea# SHIP TOURNAMENT 2006 -> 5% #idea#
    
./Post n°50   Marquer comme non lu.
Sasume Ecrit le: Vendredi 7 avril 2006 à 22:53 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

La fonction erasesprite est bizarre. Pourquoi ne pas tracer un rectangle blanc plutôt ? Cette opération serait plus rapide qu'afficher un sprite en mode AND.
    
./Post n°51   Marquer comme non lu.
Kroma Ecrit le: Samedi 8 avril 2006 à 07:26 Déconnecté(e)    Voir le profil de Kroma Envoyer un email à Kroma Visiter le site WEB de Kroma Envoyer un message privé à Kroma  

c'est clair, je n'y avais jamais pensé... Vraiment #tsss#
Sinon pour le reste c'est bon?
#idea# SHIP TOURNAMENT 2006 -> 5% #idea#
    
./Post n°52   Marquer comme non lu.
Kroma Ecrit le: Samedi 8 avril 2006 à 07:55 Déconnecté(e)    Voir le profil de Kroma Envoyer un email à Kroma Visiter le site WEB de Kroma Envoyer un message privé à Kroma  

Bon, voilà j'ai utilisé le rectangle, mais bon, il s'avère que cette technique ralenti mon jeu, c'est bien ça la fonction ?


void EraseSprtX(int x, int y,int size)//La j'efface une zone
{
GraySetAMSPlane(LIGHT_PLANE);
ScrRectFill(&(SCR_RECT){{x,y,x+size,y+size}}, &(SCR_RECT){{0, 0, 159, 99}}, A_REVERSE);
GraySetAMSPlane(DARK_PLANE);
ScrRectFill(&(SCR_RECT){{x,y,x+size,y+size}}, &(SCR_RECT){{0, 0, 159, 99}}, A_REVERSE);
}


Mince, je me suis rendu compte que je métais planté en fin de code:

SetIntVec(AUTO_INT_5,SavedInt_5) à la place de SavedInt_1.
-Edité le Samedi 8 avril 2006 à 08:00 par Kroma-
#idea# SHIP TOURNAMENT 2006 -> 5% #idea#
    
./Post n°53   Marquer comme non lu.
FpgForce Ecrit le: Samedi 8 avril 2006 à 09:55 Déconnecté(e)    Voir le profil de FpgForce Envoyer un email à FpgForce Envoyer un message privé à FpgForce  

Quand tu utilise les ROM_CALLs pour faire du dessin c'est normal que ça rame, ces fonctions sont extraordinairement lentes... ( ScrRectFill )
Si tu veux accélerer ton jeu tu peux utiliser une librairie comme Extgraph par exemple pour la partie graphique.
    
./Post n°54   Marquer comme non lu.
Kroma Ecrit le: Samedi 8 avril 2006 à 10:46 Déconnecté(e)    Voir le profil de Kroma Envoyer un email à Kroma Visiter le site WEB de Kroma Envoyer un message privé à Kroma  

Bon, ok, je vais voir ce que donne Extgraph.
-Edité le Samedi 8 avril 2006 à 11:09 par Kroma-
#idea# SHIP TOURNAMENT 2006 -> 5% #idea#
    
./Post n°55   Marquer comme non lu.
Kroma Ecrit le: Samedi 8 avril 2006 à 12:56 Déconnecté(e)    Voir le profil de Kroma Envoyer un email à Kroma Visiter le site WEB de Kroma Envoyer un message privé à Kroma  

Pensez vous que n'importe quel jeu de Game Boy (je parle bien de la classique) soit réalisable sur TI89 ?
#idea# SHIP TOURNAMENT 2006 -> 5% #idea#
    
./Post n°56   Marquer comme non lu.
Jfg Ecrit le: Samedi 8 avril 2006 à 13:06 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Oui, le seul problème c'est la taille de l'écran TI89 qui fait qlq pixels de moins.
Kill Mario
    
./Post n°57   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 8 avril 2006 à 13:50 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


ScrRectFill n'est pas si lent que ça, mais effectivement, c'est probablement plus rapide d'utiliser un sprite en AND et son expérience vient de le montrer. Bref, le conseil de Sasume a été un mauvais conseil. (Et pas la peine de passer par ExtGraph, il suffit de revenir au code que tu avais.)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
  :: Index » Forum Ti68K » Programmation C » J'aimerai vraiment m'améliorer... (139 réponse(s))
Pages : 3/8     « 1 2 [3] 4 5 6 7 8 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 57.36ms avec 18 requetes