1

J'ai fait un essai de grayscale avec des écrans virtuels. Seulement voilà, le gris foncé s'affiche en noir, et je ne vois pas pourquoi. J'utilise TIGCC 0.94. Merci de vos réponses.

La source:
// C Source File // Created 27/09/03; 22:06:17 #define USE_TI92PLUS          // Compile for TI-92 Plus #define USE_V200              // Compile for V200 #define OPTIMIZE_ROM_CALLS    // Use ROM Call Optimization #define MIN_AMS 100           // Compile for AMS 1.00 or higher #define SAVE_SCREEN           // Save/Restore LCD Contents #include <tigcclib.h>         // Include All Header Files void *Vscreenl = NULL; void *Vscreend = NULL; // Main Function void _main(void) {  // Préparation: sprites  INT_HANDLER save_int_1;   static unsigned short Imagel[]={0x7E0, 0x1F18, 0x3F04, 0x7F42, 0x7F42, 0xFF41, 0xFF41, 0xFF01, 0xFF01, 0xFFF1, 0xFA51, 0x7A52, 0x7E62, 0x3FC4, 0x1F18, 0x7E0};  static unsigned short Imaged[]={0x7E0, 0x18F8, 0x20FC, 0x42FE, 0x42FE, 0x82FF, 0x82FF, 0x80FF, 0x80FF, 0x8FFF, 0x8A5F, 0x4A5E, 0x467E, 0x23FC, 0x18F8, 0x7E0};    // Ecrans virtuels  void *Vscreenl = malloc(3840);  void *Vscreend = malloc(3840);    // Row read  save_int_1 = GetIntVec (AUTO_INT_1);  SetIntVec (AUTO_INT_1, DUMMY_HANDLER);    // Variables  short quitter = 0;  short x = 0;  short y = 0;    // Niveaux de gris  GrayOn();    do  {         // Effacer EV light- dark   // Afficher Sprites L - D   PortSet(Vscreenl, 239, 127);   clrscr();   Sprite16(x, y, 16, Imagel, Vscreenl, SPRT_XOR);   PortSet(Vscreend, 239, 127);   clrscr();   Sprite16(x, y, 16, Imaged, Vscreend, SPRT_XOR);            // Afficher écrans virtuels       memcpy(GetPlane(DARK_PLANE),  Vscreend, 3840);        memcpy(GetPlane(LIGHT_PLANE), Vscreenl, 3840);                                              // Touche gauche       if(_rowread(0x3FE)&0x10 && x > 0)       {        x--;       }              // Touche droite       if(_rowread(0x3FE)&0x40 && x < 223)       {        x++;       }              // Touche haut       if(_rowread(0x3FE)&0x20 && y > 0)       {        y--;            }              // Touche bas       if(_rowread(0x3FE)&0x80 && y < 111)       {        y++;       }              // Touche Esc       if(_rowread(0x2FF)&0x40)       {        quitter = 1;       }               }while(quitter != 1);     // Libérer les EVs  free(Vscreenl);  free(Vscreend);    // Désactiver les gris  GrayOff();    //Rétablir l'Auto int 1  SetIntVec(AUTO_INT_1, save_int_1);     // Rétablir l'écran   PortRestore();  }
Sega Rulez!

2

Je ne vois pas d'où pourrait venir le pb.
Sinon, un détail : tu ne vérifies pas que les allocations de tes buffers (Vscreenl et Vscreend) aient réussi ! Ça peut être source de plantage.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

Essaye aussi de remplacer toutes les macros "Deprecated" (GetPlane par exemple) par les plus récentes, mais à priori tout est compatible donc ça n'a aucune raison d'empecher le prog de fonctionner.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

* Redirige aussi l'AI5 pour _rowread. (Et en passant, pourquoi pas utiliser _keytest, c'est plus lisible que _rowread?)
* Utilise ClrScr (de graph.h) plutôt que clrscr (de stdio.h).
* Tu passes une grande partie de ton temps à réafficher, donc l'écran n'a pas le temps de réagir, et donc c'est normal que les "couleurs" (les gris) soient faussé(e)s. Essaye de ne réafficher que si x et/ou y a changé.
* Pourquoi ne pas utiliser le double-buffering par échange de pointeurs intégré à TIGCCLIB plutôt que ton double-buffering par recopie de plans?
* Pourquoi ne pas se synchroniser avec l'écran (cf. WaitNSwitches) avant ta recopie de plans? Ça réduirait les clignotements et peut-être aussi l'effet bizarre que tu constates.
* Et enfin, ça n'a rien à voir avec ton problème, mais pourquoi ne pas utiliser TIGCC 0.95 bêta 1?
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é

5

Parcequ'elle est aussi boguée que les premières bêtas de GTC tongue
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.

6

Pas du tout. Il n'y a aucun bogue vraiment grave (celui de A68k ayant déjà été corrigé par une mise à jour séparée).
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é

7

En tout cas j'attend la version non-bêta pour le télécharger. Je reste avec la .94 en attendant (j'ai GTC si je veux optimiser en taille).
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.

8

Mais tu l'utilises avec la dernière version de gcc ? parce que la précédente, celle qui est distribuée avec tigcc 0.94 (la 3.2 je crois), est buguée. (Elle ne compile pas correctement si tu utilises des variables globales dans des registres.)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

9

Oué c'est la version d'origine. Aucun pb pour moi avec.
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.

10

Ben t'as de la chance grin
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

11

En effet, j'ai corrigé certains bogues dans GCC 3.3(.1), les développeurs GNU en ont corrigé d'autres, et j'ai arrêté de porter ces corrections de bogues vers GCC 3.2.1 dès la première prerelease de GCC 3.3. Si vous voulez les dernières corrections de bogues, utilisez la version la plus récente. D'ailleurs, ça concerne aussi les autres composants: nous ne corrigeons plus les bogues des autres composants de TIGCC 0.94 non plus.
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

Merci de votre aide. Ca vient peut-être du fait que j'utilise le tuto C de Ti-Rex.org, qui ne m'a pas l'air tout récent.

Sinon, inclure ngetchx(); ne change pas grand chose. Sinon, je sauvegarde l'INT 5 de la même facon que l'int 1? Dans ca cas là, ce n'est encore pas ca.

Sinon comment spécifier l'utilisation du clrscr(); de graph.h?
Sega Rulez!

13

Tu le fais déjà. Le C est un language sensible à la casse. La fonction de l'AMS est ClrScr et celle de tigcclib est clrscr smile
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

14

KK> Pourquoi préférer ClrScr à clrscr ? moi j'utilise toujours clrscr scotch
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

15

Bon, vlrsrc(); ne change rien, je vais voir le reste...
Sega Rulez!

16

Bah ClrScr, c'est juste la romcall, donc ça prend juste la place de l'appel, tandis que clrscr, c'est la fonction de tigcclib, qui remet la position du curseur à (0,0) donc qui prend plus de place. Si tu utilises pas printf, qui affiche à la position du curseur, c'est mieux d'utiliser la ROMCALL.
avatar
;)

17

Ok, c'est ce que j'avais compris du tutorial. Merci.
Sega Rulez!

18

Ecco92
: Sinon, je sauvegarde l'INT 5 de la même facon que l'int 1?

Oui.
Sasume :
KK> Pourquoi préférer ClrScr à clrscr ? moi j'utilise toujours clrscr scotch

Parce que clrscr est faite pour être utilisée avec les fonctions de stdio.h, pas pour les graphismes. Cf. l'explication de BiHi, que je ne vais pas répéter.
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é