1

un peu de promo pour la RGC2010
exe: tromb Fichier joint : rgc2010.o
bouton A, B et option1 /* promotion rgc 2010 - LYNX - kit BLL (newcc65) beauregard - philippe H. 13/11/2010 LYNX-image */ #include <stdlib.h> #include <lynx.h> #include <lynxlib.h> char palj[]={ 0x00,0x00,0x00,0x04,0x00,0x06,0x02,0x08,0x00,0x05,0x00,0x07,0x09,0x0C,0x0E,0x0F, 0x00,0x02,0x15,0x36,0x2A,0x5A,0x4A,0x7D,0x3D,0x6D,0x4E,0x8E,0x9F,0xBF,0xDF,0xFF}; char pal[]={ 0x00,0x01,0x02,0x03,0x03,0x05,0x04,0x08,0x06,0x0A,0x08,0x0A,0x0B,0x0D,0x0E,0x0F, 0x00,0x11,0x13,0x23,0x14,0x56,0x26,0x78,0x29,0x9A,0x3B,0x2D,0x5D,0x2E,0x4F,0xEF}; /* LYNX-specific #defines: */ #define JOY_RIGHT 0x10 #define JOY_LEFT 0x20 #define JOY_DOWN 0x40 #define JOY_UP 0x80 #define BUTTON_OPTION1 0x08 #define BUTTON_OPTION2 0x04 #define BUTTON_LEFT 0x02 #define BUTTON_RIGHT 0x01 #define BUTTON_PAUSE 0x01 char SCREEN[8160] at (MEMTOP-16320); char RENDER[8160] at (MEMTOP-8160); // ------------------------------------ extern char rgc[]; extern char lj[]; char SCB[]; #asm _SCB dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // ------------------------------------ //char acteurs[]; // extern char ac000000[]; extern char ac000001[]; extern char ac000002[]; extern char ac000003[]; extern char ac000004[]; extern char ac000005[]; char *acteurtab[6] = {ac000000, ac000001, ac000002, ac000003, ac000004, ac000005}; char SCBacteur[]; // déclaration d'un nouveau controleur de sprite //char SCBacteur1[]; // déclaration d'un nouveau controleur de sprite #asm _SCBacteur dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ int etape,posx,posy,goacteurs,nacteur,yacteur; int i; int tempa,tempr,aromeo,drap1; int actscx,actscy; int rgcscx,rgcscy; // assembler vertical retrace syncronisation routine void Vsync() { #asm vretrace: lda $fd0a bne vretrace #endasm } /************************************************************************** ** ** ** ** **************************************************************************/ char main() { InitIRQ(); CLI; SetBuffers(SCREEN, RENDER ,0); /* set the palette */ SetRGB(palj); // Ceci sert à changer la palette de la Lynx. DrawFBox(0,0,160,102,0); posx=0; posy=0; nacteur=5; etape=-1; SCBX(SCB) = 0; SCBY(SCB) = 0; SCBDATA(SCB) = lj; //jaguar et rgc; SCBNEXT(SCB) = SCBacteur; // chainage de sprite SCBX(SCBacteur) = 200; SCBY(SCBacteur) = 0; SCBDATA(SCBacteur) = acteurtab[5%6]; /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for( ; ; ) { // DrawFBox(0,0,160,102,0); // affichage d'une boite couleur 0 (noire) SCBX(SCB) = posx; SCBY(SCB) = posy; if (etape>-1) { if (joystick & JOY_RIGHT) // direction Droite posx++; if (joystick & JOY_LEFT) // direction Gauche posx--; if (joystick & JOY_UP) // direction Haut posy--; if (joystick & JOY_DOWN) // direction Bas posy++; if (posx<-160) posx=-160; // limit va à gauche if (posx>0) posx=0; // limit va à gauche if (posy>0) posy=0; // limit haut if (posy<-102) posy=-102; // limit bas } // ********************************************************************************************* if (etape==-1) // écran titre jaguar { SetRGB(palj); SCBDATA(SCB) = lj; rgcscx=0;rgcscy=0; if (joystick & (BUTTON_RIGHT)) { etape=0;SCBDATA(SCB) = rgc;SetRGB(pal); } } // ********************************************************************************************* if (etape==0) // écran titre rgc { //SCBDATA(SCB) = rgc rgcscx=0;rgcscy=0; if (joystick & (BUTTON_LEFT)) etape=1; if (joystick & (BUTTON_OPTION1)) { etape=-1; posx=0;posy=0;nacteur=5; actscx=0;actscy=0; rgcscx=0;rgcscy=0; } } // ********************************************************************************************* if (etape==1) // écran titre { DrawFBox(0,0,160,102,0); // affichage d'une boite couleur 0 (noire) if (rgcscx<256) { ++rgcscx; } if (rgcscy<256) { ++rgcscy; } SCBHS(SCB) = rgcscx; SCBVS(SCB) = rgcscy; if (rgcscy==256 & rgcscy==256) etape=0; } /************************************************************************** ** présentation acteurs RGC 2010 ** **************************************************************************/ if (goacteurs==0 & (joystick & (BUTTON_RIGHT))) {goacteurs=1;yacteur = 50;} if (goacteurs==1) { SCBX(SCBacteur) = 66; if (tempa<150 ) ++tempa;actscx=actscx+4;actscy=actscy+4; if (tempa>149 ) { --nacteur;tempa=1;actscx=0;actscy=0; if (nacteur>-1) { SCBDATA(SCBacteur) = acteurtab[nacteur%6]; } else { nacteur=5;tempa=0;goacteurs=0;SCBX(SCBacteur) = 200; SCBDATA(SCBacteur) = acteurtab[nacteur%6]; } } SCBY(SCBacteur) = yacteur-(actscy/4); SCBY(SCBacteur) = SCBY(SCBacteur) + 16; SCBHS(SCBacteur) = actscx; SCBVS(SCBacteur) = actscy; } DrawSprite(SCB); Vsync(); SwapBuffers(); } /************************************************************************** ** FIN de la BOUCLE PRINCIPALE ** **************************************************************************/ }

tromb Fichier joint : rgc.bmp
tromb Fichier joint : acteurs.bmp
tromb Fichier joint : lj.bmp
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

2

Sympa cette démo smile
Mon site sur la LYNX :ZoneLynx

3

Merci, ça m'a permis d'apprendre à utiliser les fonctions de zoom (du genre, "tiens, c'est de 1 à 256").

La LYNX est vraiment la reine du zoom. love princess love

Par contre, je ne sais toujours pas comment retourner/inverser une image. cry
Et parce que rire fait du bien : je ne sais pas faire un simple hello world. lol
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

4

Une petite video pour ceux qui n'ont pas de Lynx ? ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

beauregard (./3) :
Par contre, je ne sais toujours pas comment retourner/inverser une image. cry


Cf la structure des données d'un sprite ( http://devlynx.ti-fr.com/?pag=9&cat=43 ), dans SPRCTL0 http://devlynx.ti-fr.com/?pag=17&act=dtl&adr=0xFC80 H FLIP et V FLIP servent à ça...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

6

Godzil (./4) :
Une petite video pour ceux qui n'ont pas de Lynx ? ^^
il y a des émulateurs, car voir c'est bien, jouer c'est mieux smile
vince (./5) :
beauregard (./3) :
Par contre, je ne sais toujours pas comment retourner/inverser une image. cry


Cf la structure des données d'un sprite ( http://devlynx.ti-fr.com/?pag=9&cat=43 ), dans SPRCTL0 http://devlynx.ti-fr.com/?pag=17&act=dtl&adr=0xFC80 H FLIP et V FLIP servent à ça...
oui mais il me faut un ptit code déjà tout fait avec les bonnes valeurs.
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

7

Un exemple ? Tu veux quoi comme exemple, un truc prêt à être copiécollé ? Il y a juste un masque à faire... SCBCTL0(machin)=SCBCTL0(machin) | 0x10; pour VFLIP à 1 ou 0x20 pour HFLIP à 1, quand je te conseillais de lire ça c'était vraiment parce que c'est utile !
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

8

vince (./7) :
Un exemple ? Tu veux quoi comme exemple, un truc prêt à être copiécollé ? Il y a juste un masque à faire... SCBCTL0(machin)=SCBCTL0(machin) | 0x10; pour VFLIP à 1 ou 0x20 pour HFLIP à 1, quand je te conseillais de lire ça c'était vraiment parce que c'est utile !
oui ce sont ces (précieux) machins que je voulais voir (0x10) oui merci.
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

9

ces "machins" comme tu les appelles, ce sont des valeurs 0x10, c'est 16 en hexadécimal, les puissances de deux quoi... 0001 0000 en binaire vaut 16 soit 0x10 en hexa
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

10

vince (./9) :
ces "machins" comme tu les appelles, ce sont des valeurs 0x10, c'est 16 en hexadécimal, les puissances de deux quoi... 0001 0000 en binaire vaut 16 soit 0x10 en hexa

j'ai regardé le code sprdemo3, la soluce est très différente: SCB[0] = 0xd0; // Determine quadrant --> horizontal à l'envers SCB[0] = 0xc0; // Determine quadrant --> horizontal à l'endroit SCB[0] = 0xe0; // Determine quadrant --> vertical à l'envers SCB[0] = 0xf0; // Determine quadrant --> vertical à l'endroit
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

11

là ça marche bien: SCBCTL0(machin)=SCBCTL0(machin) | 0x10; // pour VFLIP à 1 SCBCTL0(machin)=SCBCTL0(machin) | 0x20; // pour HFLIP à 1



Par contre je n'arrive pas à mettre à 0 le bit 1 et 0:
SCBCTL0(machin)=SCBCTL0(machin) | 0x00; // pour VFLIP à 0 SCBCTL0(machin)=SCBCTL0(machin) | 0x00; // pour HFLIP à 0
mur
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

12

Attention, SCBCTL0 ne sert pas qu'à indiquer les infos hflip/vflip, il contient également les infos de transparence par exemple.
Outre le super site de Vince, tu peux jeter in oeil ici :
http://fadest.free.fr/spip/article.php?id_article=5

Les infos hflip et vflip, ce n'est que 1 bit chacun sur les 8 de l'octer scbctl0. Le mieux pour les modifier sans toucher au reste, c'est de passer par des masques et opérations logiques C.
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2024 ?
https://yastuna-games.com

13

beauregard (./11) :

Par contre je n'arrive pas à mettre à 0 le bit 1 et 0:


normal : quelque chose OU (opérateur |) 0x00 donne toujours quelquechose


l'inverse bit à bit de 0x10 est 0xEF, celui de 0x20 est 0xDF

SCBCTL0(machin)=SCBCTL0(machin) & 0xEF; // pour VFLIP à 0
SCBCTL0(machin)=SCBCTL0(machin) & 0xDF; // pour HFLIP à 0

chaque bit gardera sa valeur sauf celui qui n'est pas à 1 dans 0xEF (ou 0xDF)
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

14

@Fadest
Oui j'avais lu, et relu cette page, c'est intéressant et compréhensible. Je ne suis hélas pas doué pour transcrire en langage C un fonctionnement binaire. Je te remercie pour ton travail pédagogique.

@vince.
Merci vince, cela marche bien et ça fait plaisir, testé sur le glouton et le dragon, c'est bien mieux maintenant question mémoire.




Grâce à vous deux, je suis maintenant capable de faire un long scrolling économe + animation de personnage économe, cela me donne une perspective nouvelle pour un développement plus complexe.


[URL=http://imageshack.us][IMG]http://img212.imageshack.us/img212/530/yoyo0147vt7.gif[/IMG][/URL]
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx