330

1.
Fiou.

331

ok, l'adresse error vient parce que j'en met 4 a la suite, c'est pas normal...

bon, pour ceux que ca interresse vala, les fonctions sprite de extgraph 0.76

/*---------------------------------------------------*/
/*SPRITES FONCTIONS DEFINITION FROM EXTGRAPH LIB 0.76*/
/*---------------------------------------------------*/


/*-----Sprite16 AND Fonction-----*/
Sprite16_AND( x, y, h, sprite, dest)short x; short y; short h; unsigned short* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = 16-(x&15);

for (;h;h--,addr+=30) *(long*)addr&=~((long)~((*sprite++) & 0xffff)<<cnt);
}


/*-----Sprite16 OR Fonction-----*/
Sprite16_OR( x, y, h, sprite, dest)short x; short y; short h; unsigned short* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = 16-(x&15);
for (;h;h--,addr+=30) *(long*)addr|=(long)((*sprite++) & 0xffff)<<cnt;
}


/*-----Sprite16 XOR Fonction-----*/
Sprite16_XOR( x, y, h, sprite, dest)short x; short y; short h; unsigned short* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = 16-(x&15);
for (;h;h--,addr+=30) *(long*)addr^=(long)((*sprite++) & 0xffff)<<cnt;
}


/*-----Sprite32 AND Fonction-----*/
Sprite32_AND( x, y, h, sprite, dest)short x; short y;short h; unsigned long* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = x&15;
register unsigned short ccnt = 32-cnt;
register unsigned long data;

for (;h;h--,addr+=30) {
data=~(*sprite++);
*(long*)addr&=~(data>>cnt),*(long*)(addr+4)&=~(data<<ccnt);
}
}


/*-----Sprite32 OR Fonction-----*/
Sprite32_OR( x, y, h, sprite, dest)short x; short y; short h; unsigned long* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = x&15;
register unsigned short ccnt = 32-cnt;
register unsigned long data;
for (;h;h--,addr+=30) {
data=*sprite++;
*(long*)addr|=(data>>cnt),*(long*)(addr+4)|=(data<<ccnt);
}
}


/*-----Sprite32 XOR Fonction-----*/
Sprite32_XOR( x, y, h, sprite, dest)short x; short y; short h; unsigned long* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = x&15;
register unsigned short ccnt = 32-cnt;
register unsigned long data;
for (;h;h--,addr+=30) {
data=*sprite++;
*(long*)addr^=(data>>cnt),*(long*)(addr+4)^=(data<<ccnt);
}
}


il suffit de l'enregistrer dans un text "sprite.89t" et de mettre #include "sprite" en debut de prog....

332

une ptite question :

quand je marque
main()
{
usigned curs[8); // le n qui manque c fait expres.
}

cc me cree un fichier cc_error de plusieurs dizaines de ko.
il reecrit plusieurs fois memes erreurs.
ca arrive qu'à moi ou non ?
(config : hw1 2.05 unios 1.30)
Fiou.

333

TachMan: c'est normal oui, mais dans une version ancienne... il me semble que je l'ai corrigé depuis. Essaie de retélécharger.
So much code to write, so little time.

334

oué parce que chez moi ca le fait pas....

ok, sinon, j'ssaye d'implémenter ces putain de gray, j'en chie !! mais j'y arriverais !!!

335

j'ai pris la derniere version et c'est bon.
Fiou.

336

voila les chose sérieuse !!

j'ai fait quelque truc....pas grand chose...voir plus bas....
Bon y a un bug quand on fait DrawLine 4 fois de suite....je vé encore voir ca...
Pour les grays, ca me saoul, j'y arrive pô....j'essayerais ce soir de nouveau...
Voila, bon amusement...
Posté aussi vos créations !!!!




Voila ma AMS_C

nolist
old_ams


;/*-----GRAPH.H-----*/
_BitmapGet = -389
_BitmapInit = -390
_BitmapPut = -391
_BitmapSize = 392
_clrscr = -414
_DrawClipChar = -401
_DrawClipEllipse = -402
_DrawClipLine = -403
_DrawClipPix = -404
_DrawClipRect = -405
_DrawMultiLines = -406
_DrawStrWith = -407
_DrawChar = -420
_DrawFkey = -421
_DrawIcon = -422
_DrawLine = -423
_DrawPix = -424
_DrawStr = -425
_DrawStrXY = -425
_FillLines2 = -409
_FillTriangle = -408
_FontGetSys = -398
_FontSetSys = -399
_GetPix = -415
_MakeWinRect = -44
_MoveTo = -413
_PortRestore = -419
_PortSet = -418 //PortSet(vscreen,239,127);
_QScrRectOverlap = -397
_RestoreScrState = -417
_SaveScrState = -416
_ScrRectFill = -393
_ScrRectOverlap = -394
_ScrRectScroll = -395
_ScrRectShift = -396
_ScrToHome = -46
_ScrToWin = -45
_ScrRect = -47
_SetCurAttr = -410
_SetCurClip = -411


;/*-----ESTACK.H-----*/
_push_parse_text = -970
_HS_popEStack = -580
_NG_execute = -592


;/*-----STRING.H-----*/
__memset = -635
_memchr = -627
_memcmp = -624
_memcpy = -618
_memmove = -619
_memset = -636
_sprintf = -83
_strcat = -622
_strchr = -628
_strcmp = -625
_strcpy = -620


;/*-----ALLOC.H-----*/
_HeapAlloc = -144
_HeapAllocESTACK = -145
_HeapAllocHigh = -146
_HeapAllocThrow = -147
_HeapAllocHighTrow = -148
_HeapCompress = -149
_HeapDeref = -150
_HeapFree = -151


;/*-----KBD.H-----*/
_kbhit = -82
_ngetchx = -81
_OSGetStatKeys = -665
_OSInitKeyInitDelay = -584
_OSInitBetweenKeyDelay = -585
_pushkey = -80


;/*-----STATLINE.H-----*/
_ST_helpMsg = -230


;/*-----SYSTEM.H-----*/
_OSContrastDn = -663
_OSContrastUp = -662
_off = -666
list

[edit]Edité par misato le 10-02-2002 à 17:22:21[/edit]

337


Un petit exemple de source(deplacement de sprite pour 92+, les 89 doivent changer quelque trucs...la routines quoi)

#include "sprite" /*inclu la gestion des sprites*/
#include "datagfx" /*inclu les sprites externes*/

typedef unsigned char LCD_BUFFER[3840];

main()
{
/*-------------------------DATA-------------------------*/
int x=88, y=32, keya=0;
char buffer[50];
char *str1 = "Nitro`s CC Sprite Demo Bye Iceman89";
LCD_BUFFER ecran;
/* static unsigned int spritedata[16] = {0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555};*/
/*-------------------------DATA-------------------------*/

/*-----Copie l`ecran-----*/
memcpy(ecran,(void*)0x4C00,(unsigned long)3840);

/*-----Accelere l`auto-repetition des touches-----*/
OSInitKeyInitDelay(200);
OSInitBetweenKeyDelay(20);

/*-----Efface, et affiche une chaine de carateres-----*/
clrscr();
sprintf(buffer, "%s", str1);
DrawStr(15,60, buffer,1);
ngetchx();

/*-----Efface, et affiche l`image de 64x64-----*/
clrscr();
Sprite32_XOR( x, y, 32, sprite1, (void*)0x4C00);
x+=32;
Sprite32_XOR( x, y, 32, sprite2, (void*)0x4C00);
y+=32;
Sprite32_XOR( x, y, 32, sprite3, (void*)0x4C00);
x-=32;
Sprite32_XOR( x, y, 32, sprite4, (void*)0x4C00);
y-=32;

/*-----Boucle de detection de touches-----*/
do
{keya=ngetchx();
switch(keya)
{ case 344: /*-----bas(pour 92+)-----*/
if(y<126)
y+=2;
break;

case 338: /*-----haut(pour92+)-----*/
if(y>1)
y-=2;
break;

case 337: /*-----gauche(pour92+)-----*/
if(x>1)
x-=2;
break;

case 340: /*-----droite(pour92+)-----*/
if(x<238)
x+=2;
break;
}

/*-----Efface, et affiche l`image de 64x64-----*/
clrscr();
Sprite32_XOR( x, y, 32, sprite1, (void*)0x4C00);
x+=32;
Sprite32_XOR( x, y, 32, sprite2, (void*)0x4C00);
y+=32;
Sprite32_XOR( x, y, 32, sprite3, (void*)0x4C00);
x-=32;
Sprite32_XOR( x, y, 32, sprite4, (void*)0x4C00);
y-=32;
}while(keya != 264); /*Si esc presse alors on quitte*/

/*-----Restaure les valeurs par defaut-----*/
OSInitKeyInitDelay(336);
OSInitBetweenKeyDelay(48);

/*-----Restaure l`ecran-----*/
memcpy((void*)0x4C00,ecran,(unsigned long)3840);
}




L'include 2 de ma source: datagfx

static unsigned long sprite1[32] = {0x00000000,0x0000000F,0x0000007F,0x000001FC,0x000003B8,0x00000791,0x00000FCC,0x00001FDF,0x00001FBF,0x00003FBF,0x00003FFF,0x01E07FFF,0x03F8FFFF,0x07FDFFFF,0x07FFFFFF,0x07FFFFFF,0x07FFFFFF,0x07FFFFFF,0x07FFFFFF,0x07FFFFFF,0x07FFFFFF,0x07FFFFFF,0x07FFFFFC,0x03FFFFF8,0x01FFFFF0,0x01FFFFE0,0x01FFFFC0,0x00FFFFC0,0x00FFFFC7,0x007FFFC8,0x007DFFC0,0x0039FFC0};

static unsigned long sprite2[32] = {0x00000000,0xFFC00000,0xFBE00000,0x707C0000,0x2F220000,0x8FCD0000,0xF3D98000,0xF83F8000,0xFFFFC000,0xFFFFC000,0xFFFFF800,0xDBFBFC00,0xA7FCFC00,0xCFFE7C00,0xDFFB3E00,0xFFFD1E00,0xFFFD1E00,0xFFBE4E00,0xF79F6D00,0xE78FFD00,0x4707FE00,0xE70FFE00,0x1713FE00,0x0601FE00,0x0601FE00,0x0400FC00,0x0400FC00,0x0000D800,0xC01C9000,0x2022C000,0x0000C000,0x0080E000};

static unsigned long sprite3[32] = {0x0040E000,0x0040F000,0x0001F000,0x0001F800,0x7183F800,0x4307FC00,0x220FFC00,0x101FFE00,0x003FFE00,0xC0FFFF00,0x3F7FFE00,0x087FF000,0x0F7F8000,0x8E8F0000,0xCF400000,0xE7A00000,0xF7A00000,0xFFD00000,0xFFD00000,0x7FA80000,0x3FA80000,0x1F940000,0x0F920000,0x8F920000,0x87D10000,0x83D08000,0x43F48000,0xC1F24000,0x60FD2000,0xA0F3F000,0x707C4800,0xF3E3B400};

static unsigned long sprite4[32] = {0x0003FFE0,0x0003FFE0,0x0003FFF0,0x0003FFFC,0x0007FFF8,0x0007FFE0,0x0007FFF0,0x0007FFF8,0x000FFFF6,0x000FFFF9,0x000FFFFC,0x000FFFFE,0x000FFC3F,0x000F880F,0x00001007,0x00001007,0x00002003,0x00002003,0x00002002,0x00002001,0x00001001,0x00001011,0x00001809,0x00001404,0x00001002,0x00001000,0x00001000,0x0000084F,0x0000083C,0x00000FFB,0x00000C8C,0x00000B77};

338



L'include 1 de ma source, les fonctions sprite de extgraph 0.86(posté plus haut)

/*---------------------------------------------------*/
/*SPRITES FONCTIONS DEFINITION FROM EXTGRAPH LIB 0.86*/
/*---------------------------------------------------*/


/*-----Sprite16 AND Fonction-----*/
Sprite16_AND( x, y, h, sprite, dest)short x; short y; short h; unsigned short* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = 16-(x&15);

for (;h;h--,addr+=30) *(long*)addr&=~((long)~((*sprite++) & 0xffff)<<cnt);
}


/*-----Sprite16 OR Fonction-----*/
Sprite16_OR( x, y, h, sprite, dest)short x; short y; short h; unsigned short* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = 16-(x&15);
for (;h;h--,addr+=30) *(long*)addr|=(long)((*sprite++) & 0xffff)<<cnt;
}


/*-----Sprite16 XOR Fonction-----*/
Sprite16_XOR( x, y, h, sprite, dest)short x; short y; short h; unsigned short* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = 16-(x&15);
for (;h;h--,addr+=30) *(long*)addr^=(long)((*sprite++) & 0xffff)<<cnt;
}


/*-----Sprite32 AND Fonction-----*/
Sprite32_AND( x, y, h, sprite, dest)short x; short y;short h; unsigned long* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = x&15;
register unsigned short ccnt = 32-cnt;
register unsigned long data;

for (;h;h--,addr+=30) {
data=~(*sprite++);
*(long*)addr&=~(data>>cnt),*(long*)(addr+4)&=~(data<<ccnt);
}
}


/*-----Sprite32 OR Fonction-----*/
Sprite32_OR( x, y, h, sprite, dest)short x; short y; short h; unsigned long* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = x&15;
register unsigned short ccnt = 32-cnt;
register unsigned long data;
for (;h;h--,addr+=30) {
data=*sprite++;
*(long*)addr|=(data>>cnt),*(long*)(addr+4)|=(data<<ccnt);
}
}


/*-----Sprite32 XOR Fonction-----*/
Sprite32_XOR( x, y, h, sprite, dest)short x; short y; short h; unsigned long* sprite; void* dest;
{ register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
register unsigned short cnt = x&15;
register unsigned short ccnt = 32-cnt;
register unsigned long data;
for (;h;h--,addr+=30) {
data=*sprite++;
*(long*)addr^=(data>>cnt),*(long*)(addr+4)^=(data<<ccnt);
}

339

excusez pur les 4 post, mais on a pas le droit de poster plus de 5Korage

340

et excusez aussi pour les sources, je les ai faites sur ma 92+ les comment seront ptet un peut grand sur 89 !!

341

Au lieu de faire a chaque fois (void*)0x4c00 tu pourrais faire char *ptr;
puis remplacer (void*)0x4c00 par ptr .
Fiou.

342

ben si deja je mettrai LCD_MEM a la place de ptr !!

oué, mais j'y avait pensé puis apres jé oublié !!

343

KKun a deja essaye d'implementer rowread ?
j'avais pas reussi .
Fiou.

344

_rowread n'est pas un ROM_CALL... et nécessite de l'ASM...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

345

ce me les casse des qu'il y a de l'asm qui rentre en compte...et vu que cc ne ger pas l'asm...

346

en tout cas avec le ams_c que j'ai mis la en haut en plus des fonctions d'affichage de sprite de extgraph, je pense qu'on deja faire pas mal de truc...

347

rowread doit pouvoir être parfaitement traduisible en C, même si ça ne donnera pas un truc super optimisé.

348

Comment fait-on un NOT avec CC?
Et comment écrit-on un nombre en binaire?

349

>Comment fait-on un NOT avec CC?

[2nd][CHAR][3][D], je suppose.

>Et comment écrit-on un nombre en binaire?

On l'écrit en hexa. Je ne pense pas que CC supporte les nombres binaires.
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é

350

Kevin, [<>]+[:] (divisé) donne aussi ! mais c'est plus court wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

351

J'ai donné le code pour '~', pas pour '!' !
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é

352

voila un pseudo printf qui supporte 2 instruction apres le ""


printf_XY( x, y, string1, string2,)int x; int y; char *string1; char *string2;
{ char buffer[50];
sprintf( buffer, string1, string2);
DrawStr( x, y, buffer, 1);
}

c'est a dire que ca marche
printf_XY( 50, 50"%d + %d", x,y);
mais ca pas:
printf_XY( 50, 50"%d + %d = %d", x,y, x+y);

353

CC ne gère pas encore les fonctions recevant un nombre variable d'arguments ?

354

Kevin :ah oui, merci, je ne savais pas qu'il y avait ce symbole dans l'ams.

Alors rowread donnerais ça:

unsigned char rowread(mask) short mask; {
register unsigned char a=10;
*(short*)0x600018=mask;
while (--a);
return ~*(unsigned char*)0x60001B;
}

C'est une fonction, puisque CC ne gère pas encore les macros. Je ne sais pas si on peut faire plus optimisé.


J'ai toujours un gros problème avec SIDE qui arrive assez souvent, j'en avais dejà parlé. Il crashe parfois quand on compile ou que l'on quitte et qu'on sauve une source archivée. Quand la calc a resetée, la source a disparu. Et le plus souvent il y a eu une Garbage Collection, et on ne peux plus la retrouver. Peut-être que le crashe a un rapport avec la Garbage Collection, parce qu'une GC n'arrive pas trop souvent normalement. Par contre PreOS réccupère ce crash parfaitement. Mais malheureusement je n'installe pas toujours PreOS.

Un truc qui serait bien dans SIDE, j'en avais dejà parlé dans un autre topic, c'est un système qui gère la tabulation, pour pouvoir séparer instructions et opérandes facilement en asm.
Ah oui, encore un autre truc dans SIDE : quand il demande si on veut sauvegarder ou non quand on quitte, il faudrait ne permettre que l'appuie sur ESC ou ENTER, car ça m'est arrivé plusieurs fois d'être un peu trop nerveux et d'appuyer sur une autre touche.

355

Pour la dernière phrase, même expérience chez moi sad

356

erf. On est pas doué quand même smile Ou peut-être si il y avait une option "sauvegarder" à l'interieur de SIDE...

Dans ma routine de rowread, register unsigned char a=4 devrait suffire pour que ca marche su HW2, théoriquement.

357

>Un truc qui serait bien dans SIDE, j'en avais dejà parlé dans un autre topic, c'est un système qui gère la tabulation, pour pouvoir séparer instructions et opérandes facilement en asm.

Pourquoi des tabulations? Un espace suffit!
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é

358

je pense que la tab serait quand meme bien....

voila, maintenant, il reste encore les grays a implementer

359

>Kevin : Pourquoi des tabulations? Un espace suffit!
Non, vraiment, une grosse source sans tabs, c'est vraiment crade, je supporte pas ça.

360

kler ...