**************************** * FLAG:petite demo * * par COCOHP le d‚scotch‚ * **************************** Il ‚tait une foi un vendredi, une r‚union de programmeur et utilisateur HP au BISTRO ROMAIN. La bas je rencontre ‚videmment toutes les STARS francaises de la HP. Parmis elle il y avais ce brave ATLAS auteur de TRUECOLOR et autre. Il m'a montr‚ un petit truc qui m'a fait halluciner. Je me disais que c'‚tait carement balaise et quand il m'a espliqu‚ en 1 phrase que c'‚tait un truc hyper connu de d‚mo et que c'‚tait hyper facile j'‚tait d‚gout‚. J'ai donc d‚cid‚ de le refaire pour vous. J'ai cod‚ ca a peu pres en 2 heures et demi tellement la technique est simple. Si vous n'avez pas encore vu le source, courez le chercher et executez le, sinon on peu commencer. LA TECHNIQUE QUI TUE: Si vous n'avez pas ‚t‚ trop hypnotis‚, vous avez peut-ˆtre remarqu‚ que toutes les boules d‚crivent des cercles parfait. Cependant elle ne le d‚crive pas en mˆme temps. Elles sont toutes d‚cal‚es. Supposons que je fasse tourner une boule toute seule. C'est quand mˆme relativement simple(enfin quand on sait le faire). Pour faire tourner un point il suffit de faire varier un angle x de 0 a 360 degre, on prend le cosinus de x(ca donne l'absice), et le sinus(ca donne l'ordon‚e). Pour les rois du RPN voici un prog qui vous fait tourner la boule pour bien que vous compreniez: \<< {#0 #0} PVIEW 0 330 for X 'COS(X)*4+5' EVAL R->B 'SIN(X)*4+5' EVAL R->B 2 ->LIST PICT SWAP GROB E0F17131E0 ERASE REPL 30 STEP CIRCLE \>> 'CIRCLE' STO Voila ceci fait tourner une boule. Je fait juste Cosinus et Sinus pour les coordon‚es(enfin je multiplie par 5 parce que mon cercle fait un rayon de 4 et j'ajoute 5 parce que sinon ca d‚conne(quand cos=-1 ca ferait -4 et il n'y a pas d'absice -4 a l'‚cran)) Voici le cercle trigonom‚trique: __|__ / | \ / |___\M / s| /|\ | i| / | | | n|/x | | --------------- | |cos | | | | \ | / \ | / \__|__/ Un point M sur le cercle trigonom‚trique(rayon=1) fait un angle x avec l'axe des absices (regardez le dessin et pis regardez le bien car j'en ferai pas des centaines moi je travaille en 60 lignes alors peut etre que votre cercle ca sera un ballon de rugby) Vous pouvez repŠrer M en coordonez "normales" par / cos(x) \ M | | \ sin(x) / (absice=cos(x), ordonn‚e=sin(x)) Bon maintenant si vous comprenez toujours pas comment ca marche et bah alors c'est vraiment que vous etes bouch‚s. Je suis d‚sol‚ pour ceux pour qui ca semble trops facile mais bon tout le monde n'est pas en TERMINALE, en FAC, ou en MAT SUP. COMMENT FAIRE LA MEME CHOSE EN ASM: Mise a part Flag qui fait le drapeau, je vous ai mis un r‚pertoire "UNE", avec dedan un source qui fait la mˆme chose que le petit prog RPL(mais en plus fluide). Il fait juste tourner une boule. Assemblez le et lancez le. Le probleme en assembleur, c'est que l'on ne peut pas(ou alors avec des suites mais c'est carement trops chiant) faire cosinus et sinus. Alors, il y a une premiŠre solution qui consiste a se tirer une balle, et une deuximeme qui consiste a r‚fl‚chir. (moi je prend la deuxieme) Si on ne peut pas faire SINUS est ce que l'on ne pourait pas faire tous les calculs avant, et ensuite juste lire les valeurs, dans notre programme assembleur. CODER LES DONNEES: Oh la la mais alors ca c'est balaise et tout. En fait c'est les doigts dans le nez. Un petit programme RPN me calcule toutes les valeurs des Cosinus, et des sinus de l'autre petit programme RPN du d‚but. Il me met tout en HEXA, il me retourne aussi les donn‚es. Le resultat est une chaine. J'apelle cette chaine SINUSDATA(les datas sinus et cosinus). Voyons comment elle se structure: "$905080707080.... le $ indique a ASMFLASH qu'il s'agit de donn‚es a mettre texto dans le source Pour chaque angle x je prend 4 quartets(4 chiffres hexa), ainsi: x=0 :"9050" signifie absice(pour x=0) ->09(cos(0)*4+5=4+5=9) ordon‚(pour x=0) ->05(sin(0)*4+5=5) x=30:"8070" signifie absice(pour x=30)->08(cos(30)*4+5) ordon‚(pour x=30)->07(sin(30)*4+5) et les 4 suivant sont pour x=60 degres, jusqu'a x=330 degr‚s(pas 360 car 360 degr‚ c'est pareil que 0 degr‚ donc on en veut pas) A la limite j'aurais mˆme pu prendre 2 quartets par angles car la valeur ne d‚passe jamais 09). LIRE CES DONNEES: Maintenant qu'on a faut cela, il faut les lire ces putain de donn‚s. Bah c'est pas dur, si on a l'adresse du d‚but de ces donn‚es, il suffira d'ajouter a cette adresse 4 ou 8 ou 12(etc.., toujours +4), pour obtenir les donn‚es souhait‚es. Dans mon source, R0 sert de compteur pour les donn‚es sinus. A chaque boucle je l'incremente de 4. Ensuite je l'additionne a l'addresse du d‚but des donn‚es et la je pointe sur 4 quartets qui vont contenir une absice et une ordonne pour un angle X. Pour ceux qui ont bien compris on a l'angle X par: X=(R0/4)*30 en degr‚s Bon ensuite que je pointe sur addresse_de d‚but_des_data_sinus+R0 je lis l'absice(2 quatets) et l'ordonn‚e(2 quartets plus loin). Je n'ai plus qu'a afficher mon graph a ces coordonn‚es. C‚ Ti pas simple. Quand R0 arrive a une certaine valeur, la boule a fait un tour et je remet R0 a 0: elle repard pour un autre tour. Les ‚tapes sont donc -label DEBUT -met R0 a 0 -label BOUCLE -on charge l'addresse du d‚but des donn‚es sinus -on y ajoute R0 -on lit a cette addresse absice et ordonn‚ -on affiche le graph a ces coordonn‚es -on incr‚mente R0 de 4 -on teste si R0=30h -si non on saute a BOUCLE -si oui on suate a DEBUT AFFICHER le GRAPH: On a lu les coordonn‚es, il faut maintenant y afficher le graph. Pour calculer la position dans l'‚cran, c'est exactement pareil que pour TRON: position = addresse_du_debut_de_l'‚cran + absice/4 + ordonn‚e*34 rappel:on divise l'absice par 4 parce que chaque case code pour 4 pixels on multiplie l'ordonn‚ par 34 parce que une ligne fait 34 cases et que si on veut aller a la ligne 10 par exemple,il faut sauter 10*34 cases. Ensuite pour positionner le graph au pixel pres, c'est tres facile. Comme dans TRON, on ne s'est pas servi des 2 premier bits de l'absice(vu qu'on a divis‚ par 4). Je vais donc faire 4 dessins de boules. L'un non d‚cal‚, le suivant d‚cal‚ d'un bit, puis de 2 bits et enfin de 3 bits. Regardez les, il sont dans 'BOULE'. Avec la valeur qu'il y a dans les deux premiers bits de l'absice(de 0 a 3) je vais choisir mon dessin: 0:dessin non d‚cal‚ 1:dessin d‚cal‚ de 1 bit 2:dessin d‚cal‚ de 2 bits 3:dessin d‚cal‚ de 3 bits Ainsi je peu facilement afficher mon dessin au pixel pres. Cette technique est de loin la plus rapide mais elle prend beaucoups de m‚moire(il faut 4 dessin au lieu d'un). Il en existe d'autre plus classique, mais on revera tout ca. ConcrŠtement les graph sont a la suite les uns des autres dans le programme ASM. Ils font tous 20 quartets de long. Si on a l'addresse de d‚but du premier graph, pour acceder au second, il suffit de faire +20 quartets. Dans le programme ASM on va donc faire: addresse_graph = addresse_premier_graph + les_2_premiers_bits_de_l'absice * 20 resum‚ pour ecrire le dessin: -se positionner dans l'‚cran grace a position= addresse debut ‚cran+absice/4+ordonn‚*34 on met ca dans D0 par exemple -se positionner a l'adresse de d‚but d'un des 4 graphs suivant la valeur des deux premiers bits de l'absice dont on ne s'est pas servi pr‚c‚demment on met cette addresse dans D1 par exemple -recopier le graph dans l'ecran (lire le contenu de D1 et le recopier dans D0 en incrementant D0 a chaque ligne) Voila, je n'expliquerais pas trops ca en d‚tail car la semaine prochaine, je fais un topo sur les graph, comment les afficher, les GOINA qui serve a savoir l'addresse du graph etc.. LE SOURCE QUI FAIT TOURNER UNE BOULE: "!PC !0-15 'PRO sauvegarde des registres %menus on line D0= 00128 on ‚cris 37 dans les menus LC 37 rien ne change(c'est deja la valeur qu'il y a) DAT0=C B sauf que si on le fait pas la hbl ne marchera pas C=0 A,R0=C compteur "d'angle" a 0 *main_boucle GOSUB efface efface tout l'‚cran GOSUB calculoffset calcule la position dans l'‚cran GOSUB pointegraph pointe sur le bon des 4 graphs GOSUB ecrisboule ecris la boule a l'ecran GOSUB incR0 incr‚mente R0 de 4 et le teste GOSUB hbl attend la HBL 3 fois(sinon ca speede trops) GOSUB hbl GOSUB hbl LC 010,OUT=C 010 en sortie GOSBVL 01160 on lit l'entr‚e dans C ?CBIT=0 4 test du bit 4 de ce qu'on a lu(touche ENTER) GOYES main_boucle si non appuy‚e on continue 'ENDE sinon on se barre, lecture des registres et fin *efface D0= 7050E %GX:8068D la ou est l'addresse du d‚but de l'‚cran(sur 5 cases) A=DAT0 A,D0=A on lit ces 5 cases et on les remet dans D0 LC 76 un petit compteur A=0 W on met a 0 toutes les cases de A *effboucle DAT0=A W on ecris 16 cases blanches a l'ecran D0=D0+ 16 on passe au 16 suivante C=C-1 B on d‚cr‚mante le petit compteur GONC effboucle s'il n'est pas d‚pass‚ on recommence RTN retour du gosub note: on ecris 77h*16 quartets=770h=56*34 on efface donc 56 lignes *calculoffset C=PC,GOINA sinusdata,A=A+C A A=addresse sinusdata C=R0,A=A+C A,D1=A on y ajoute comme pr‚vu R0 A=0 A,A=DAT1 B A mis a 0(5 cases) puis on charge sur 2 cases l'absice D1=D1+ 2 on pointe sur l'ordonn‚e C=0 A,C=DAT1 B C mis a 0(5 cases), on charge l'ordonn‚(2 cases) C=C+C A,B=C A multiplie l'ordonn‚ par 34(*2 ici) CSL A,C=C+B A (*16 encore ici puis on ajoute les *2 precedent) B=A A,BSRB A,BSRB A on divise l'absice par 4 B=B+C A on ajoute absice/4 et ordonn‚*34 D1= 7050E,C=DAT1 A on lit l'adresse du d‚but de l'ecran en 7050E(GX:8068D) C=C+B A on y additione B(B=absice/4+ordonn‚*34) D1=C r‚sultat final dans D1 RTN retour du GOSUB calculoffset *pointegraph LC 00003,A=A&C A on efface tout A sauf les 2 premiers bit le & ne prend que les bits communs(3=0011 binaire) B=A A,A=A+A A,A=A+A A on multiplie A par 20 BSL A,B=B+A A resultat dans B C=PC,GOINA bouledata,A=A+C A A=addresse des graph A=A+B A,D0=A on y additionne B et r‚sultat final dans D0 RTN retour a la mainboucle *ecrisboule LC 04 C=nombre de lignes - 1 *ecris A=DAT0 X on lit 3 cases dans le dessin DAT0=C X on les recopie dans l'‚cran D0=D0+ 4 on passe a la ligne suivante du graph D1=D1+ 16 passe a la ligne suivante dans l'‚cran(16+16+2=+34) D1=D1+ 16,D1=D1+ 2 C=C-1 B d‚cr‚mente le compteur GONC ecris si il n'est pas d‚pass‚ on recommence RTN retour de sous routine %incremente R0 *incR0 C=R0 A sans commentaire C=C+4 A sans commentaire LA 00030 valeur critique a compar‚e dans A ?C#A A si R0 est different de 30h GOYES nonR0depasse alors on le sauve et on recommence C=0 A sinon on a fait un tour complet et on le met a 0 *nonR0depasse R0=C sauve R0 RTN comme back *hbl la hbl D0= 00128 addresse de la hbl dans D0 C=DAT0 B on lit 2 cases ?C=0 B,GOYES hbl si on est sur la ligne 0 on attend de l'avoir d‚pass‚e *hbl2 C=DAT0 B on relit 2 cases ?C#0 B,GOYES hbl2 on attend d'ˆtre revenu sur la ligne 0 RTN retour de hbl *sinusdata label pour le GOINA(on vera tout ca) 'SINUSDATA on merge les donn‚es sinus *bouledata meme chose pour la boule 'BOULEDATA @" LES CHOSES SERIEUSES COMMENCE: Si vous avez compris comment je fais tourner la boule, alors le reste c'est vraiment de la GNOGNOTE. Pour faire ce magnifique drapeau qui bouge dans tous les sens, c'est les doigts dans le nez. Je fait tourner plein de boules a l'ecran, sauf qu'elles sont toutes d‚synchronis‚es. Chaque boule affich‚e est en retard dans sa rotation de 30 degr‚s par rappord a la pr‚cedente. Comment r‚aliser ce tour de force. Bas c'est simple on d‚cale la lecture de +4 dans les datas sinus. Ainsi c'est comme si on lisait l'absice et l'ordonn‚e d'un angle 30 degr‚s superieur. Donc tout se fait par rappord a la boule en haut de l'‚cran. Son compteur est en R0. voici donc le shema qui tue(les +.. sont a additionner a R0): un chiffre represente une boule et les nombre, la position de la boule dans la table sinus. Pour avoir la position de la boule en haut a droite par exem- ple, il faut faire: D1= addresse_d‚but_table_sinus + R0 + 20 ensuite on lit 4 quartets a cette addresse(2 pour l'absice et 2 pour l'ordonn‚e: R0 +4 +8 +12 +16 +20 +4 +8 +12 +16 +20 +24 +8 +12 +16 +20 +24 +28 +12 +16 +20 +24 +28 +32 +16 +20 +24 +28 +32 +36 +20 +24 +28 +32 +36 +40 la mon drapeau fait 6 boules de large et 6 de haut. ca y est vous avez compris. On va donc avoir 2 compteur -un en absice R1 -un en ordonn‚ R2 en effet quand on va faire varier ces compteur on va d‚crire tout le drapeau Pour avoir le d‚calage d'une boule dans la table sinus, il suffit d'adionner son d‚calage en absice et sont d‚calage en ordonn‚e: R0 +4 +8 +12 +16 +20 +4 | | +8 8+4=12 | +12 | +16 - - - 16+16=+32 +20 Donc je vais faire -varier R1 de 0 a 20 en laissant R2 a 0 -varier R1 de 0 a 20 en laissant R2 a 4 -varier R1 de 0 a 20 en laissant R2 a 8 -varier R1 de 0 a 20 en laissant R2 a 12... (R1 varie par incr‚ment de +4) Et voila tout le drapeau est d‚cris. On va donc faire deux boucles inbriqu‚es l'une dans l'autre: -R2=0 -label incR2 - R1=0 - label incR1 - calcule le d‚calage dans la table sinus=R0+R1+R2 - calcule la position dans l'‚cran R1*2 en absice(au pixel pres: une boule tous les 8 pixels) R2*2 en ordonn‚(une boule toutes les 8 lignes) - R1=R1+4 - test si R1=30h(12 boules 30h=4*12),si "non" saute en incR1 -R2=R2+4 -test si R2=18h(6 boules 18h=4*6),si "non" saute en incR2 Voila et on a fait la tout l'‚cran. Vous remarquerez l'astuce pour avoir la position dans l'‚cran. Les compteur R1 et R2, donnent non seulement la position de la boule dans la table sinus mais aussi la position dans l'‚cran. Analysez bien cette double boucle imbriqu‚. Elle se fait a chaque balayage de l'‚cran. C‚ ti pas les doigts dans le nez. En r‚alit‚e il y a 3 boucles inbriqu‚ les unes dans les autres car a chaque foi qu'on a rempli l'‚cran avec des boules, on incr‚mente R0 de 4(comme si on ne faisait tourner qu'une boule) et on recommence tout. LE SWAP ECRAN: Si on affichait les boules directement a l'ecran, ca se verrait et ca ferait naze. Ca ferait saccad‚ et tout. On utilise donc une technique bateau. On prend deux ‚crans, on ‚cris dans l'un pendant qu'on affiche l'autre puis on interverti. Moi j'utilise l'‚cran graphique pour simplifier. Au d‚but je fait un PDIM qui me r‚serve un ‚cran de 131 sur 128 de hauteur. C'est donc un ‚cran deux fois plus haut que l'ecran physique. J'appele donc la partie haute ‚cran1 et la basse ecran2. Regardez dans le source comment je fait le SWAPecran. Si vous ne pigez pas, c'est vraiment que vous z'y mettez pas du votre. R3=ecran de travail R4=ecran affich‚ en ce moment Je me sert de R3 dans tout mes calculs pour afficher les boules. Puis quand j'ai fini de toutes les afficher, je fait passer R3 dans R4 et vice-versa. L'‚cran sur lequel je viens de travailler s'affiche donc et l'ecran qui ‚tait en train de s'afficher passe en ‚cran de travail. APRES LA TECHNIQUE QUI TUE,LE SOURCE QUI TUE: Le source c'est le mˆme qu'avant, seul quelques petits trucs changent. "!PC !0-15 'PRO sauv registres INTOFF interutions coup‚es %menus off D0= 00128,LC 3F DAT0=C B C=0 A,R0=C,R1=C,R2=C tout a zero:R0,R1,R2 D0= 7050E,A=DAT0 A on lit l'addresse de l'ecran (GX:8068D) R3=A A on la sauv en R3(‚cran 1) LC 00880,A=A+C A on passe a la partie basse de l'‚cran PICT R4=A A on sauve en R4(‚cran 2) GOSUB efface a votre avis *main_boucle GOSUB calculoffset Comme tout a l'heure GOSUB pointegraph Idem GOSUB ecrisboule Encore idem GOSUB incR1 on incremente R1 de 4 et on test GONC main_boucle si R1 est pass‚ a 0 le flag a ‚t‚ mis(par la routine) sinon on retourne en main_boucle GOSUB incR2 meme chose pour R2 GONC main_boucle GOSUB incR0 ca y est toutes les boules on ‚t‚ dessin‚es on incr‚mente R0 de 4 GOSUB swap on swappe les ‚crans(1 et 2) GOSUB hbl attend la hbl GOSUB efface efface l'‚cran LC 010,OUT=C teste la touche ENTER GOSBVL 01160 ?CBIT=0 4 GOYES main_boucle si non_appuy‚e saute en main_boucle INTON interuption remises 'ENDE quitte *efface A=R3 A,D0=A A=addresse ‚cran de travail LC 87 seule diff‚rence avec tout a l'heure A=0 W compteur=87, on ‚fface tout l'‚cran(88*16=880=64*34) *effboucle les 64 lignes DAT0=A W D0=D0+ 16 C=C-1 B GONC effboucle RTN *calculoffset %position ds la table %sinus C=PC,GOINA sinusdata,A=A+C A A=addresse de d‚but des sinus datas C=R0 A,B=C A Au lieu de n'additionner que R0 C=R1 A,B=B+C A On additionne aussi R1 et R2 C=R2 A,B=B+C A Voir explications A=A+B A D1=A D1=position dans la table sinus(y a plus qu'a lire) D1=addresse_d‚but_table_sinus +R0+R1+R2 %lit le cosinus A=0 A,A=DAT1 B lit l'absice dans A %additionne la position %de la boule C=R1 A,C=C+C A On multiplie R1 par 2(une boule tout les 8 pixels) A=A+C A et on l'additionne aux absices lues:A=absices A= absice totale de la boule a l'‚cran C=R2 A,C=C+C A On multiplie R2 par 2(une boule toutes les 8 lignes) B=C A On sauve R2*2 dans B B= ordon‚ de la boule mais sans encore l'ordon‚ sinus %lit et add le sinus D1=D1+ 2 saute 2 cases C=0 A,C=DAT1 B on lit l'ordonn‚e dans la table sinus C=C+B A addtionne l'ordonn‚ sinus … l'ordonn‚ position de la boule(2*R2) C=C+C A,B=C A on multiplie cette valeur par 34 CSL A,C=C+B A on obtient l'ordonn‚ finale C=ordon‚ finale B=A A,BSRB A,BSRB A on divise l'absice par 4 B=B+C A on y additionne l'ordonne*34 B=(absice/4+ordonn‚e*34) %lit l'add de l'ecran %et se positionne dedan C=R3 A C=addresse de l'ecran de travail C=C+B A on y additionne tous nos calculs B=(R2*2 + ordonn‚_table)*34 + (R1*2 + absice_table)/4 D1=C voila D1= position dans l'ecran de travail RTN return *pointegraph Idem que le premier source LC 00003,A=A&C A D0= addresse_premier_graph + 2_fist_bits_absice*20 B=A A,A=A+A A,A=A+A A BSL A,B=B+A A C=PC,GOINA bouledata,A=A+C A A=A+B A,D0=A RTN *ecrisboule LC 04 Nombre de ligne-1(le graph a 5 lignes) B=C B *ecrisboucl A=DAT0 X On lit 3 cases du graph C=DAT1 X On lit 3 cases de l'‚cran A=A!C X On fait un OU entre les deux(tous les bits alum‚s dans A ou C sont pris(comme ca on efface pas l'‚cran) DAT1=A X On r‚‚cris le resultat dans l'‚cran D0=D0+ 4 On passe a la ligne suivante dans le graph D1=D1+ 16,D1=D1+ 16 On passe a la ligne suivante dans l'‚cran(+34) D1=D1+ 2 B=B-1 B D‚cr‚mentation du compteur GONC ecrisboucl Si non d‚pass‚ on recommence RTN retour de routine %incremente R0 *incR0 C=R0 A pareil que dans le premier source C=C+4 A LA 30 ?Cpasse en ‚cran de travail R4=A A ‚cran de travail ->passe en ‚cran d'affichage D0= 00120 D0=addresse ou ‚crire pour afficher un ‚cran DAT0=A A On affiche l'ancien ‚cran de travail RTN *sinusdata 'SINUSDATA *bouledata 'BOULEDATA @" AMELIORATONS: Ne vous inquiŠtez pas si vous ne comprenez pas a la premiŠre lecture. Je vous assure que la technique est hyper simple. Si vous avez compris la boucle ou R2 et R1 sont inbriqu‚s, c'est gagn‚. Les GX mans me change juste 7050E dans le source. Ils le remplace par 8068D. Il serait bon aussi qu'ils rajoutent des GOSUB hbl(apres celui qu'il y a deja parce que sinon ca speede trops. Mais est-il possible d'am‚liorer une telle merveille. La r‚ponse est bien ‚videmment OUI, vous avez qu'a regarder la minidemo que j'ai faite avec. En fait, j'ai honte de le dire mais j'ai compliqu‚ le source pour bien que vous compreniez. Par exemple dans mes versions personnelles, je lis dans la table directement ordonn‚*34+absice/4 et 2_premier_bit_d'absice*20. De plus, je n'utilise plus R1 et R2 pour sauver les valeur de d‚calage absice, mais plutot l'ancienne position dans l'‚cran et dans la table sinus(plus de calculs). Enfin l'‚cran s'efface au code generer: je reserve de la m‚moire dans laquelle je recopi tout le temps les meme instruction machine (DAT0=A W,D0=D0+16), ca ‚vite de perdre du temps avec un compteur. CONCLUSION: Nan mais que celui qui trouve ca balaise me le dise. Je vous ai proposer ca parce que c'est hyper beau, que c'est pas trops dur a comprendre comment ca marche et surtout que c'est pas du code prise de tŠte. Ca se code facile quand le principe est simple. Je tiens a remercier tous les mecs qui suivent mes cours avec attention, c'est a dire dans le d‚sordre HPGX,RICO,WOOD,KANEDA,ANGEL FUCK,,FILL (les autres avaient qu'a se presenter en *CRS, c'est bien fait pour eux) un petit coucou a BLOP que j'aime bien et je remerci enfin notre g‚nial sysop (ou sysopette parce que avec les revelations que nous a fait RICO moi je sais pu bien hihi) pour le truc g‚nial qu'il a dit qu'il sortirait en DECEMBRE sur RTC-ONE et pis aussi parce qu'il participe en CRS. Pour ceux qui ne sont pas du coin, tous les cours sont disponible sur le minitel au 48-70-10-29 (c'est un RTC vous ne payez que la communication) et si vous avez des question c'est aussi la, en *CRS.