1

En étudiant la démo sprdemo1 de Matthias Domin je l'ai traduite et j'ai rajouté quelques commentaires de ce qu'il me semble avoir compris. Voici le fichier, merci de me dire ce que vous en pensez et s'il faut que j'y apporte des corrections.

Aussi, il y a des choses qui ne sont pas claires pour moi :
- à quoi sert cette ligne : SetBuffers(0x9000,0,0);
- comment fonctionne ceci : _SetRGB(pal); ? Je l'ai bien trouvé dans lynxlib.h mais comme je ne m'y connais pas trop en programmation je n'ai pas été plus loin.
#include <lynx.h>
#include <lynxlib.h>
#include <stdlib.h>

// Bug dans cc65? Besoin d'instructions avant les commentaires?



// SPRDEMO1 de Matthias Domin (http://http://home.t-online.de/home/Matthias.Domin/lynx_eng.htm)
// 1er Avril 2000
// traduction et ajout de commentaires par D@md@m
// 13 Juin 2003
// Montre l'utilisation de SPRPCK pour créer 8 sprites (2 lignes et 4 colonnes)
// Tous les sprites partagent les mêmes index de palette de couleurs
//
// ----------------------------------------------------------------------
//
// Crée les 8 sprites en lançant SPRPCK avec ces paramètres :
// sprpck -t6 -S040051 -r004002 -p0 yx.bmp
//
// -t6      --> la source est un fichier MS Windows BMP
// -Swwwhhh --> grand S, définit la largeur et la taille du sprite créé (w: largeur ; h: hauteur)
// -rxxxyyy --> découpe l'image source en yyy*xxx sprites (de taille -Swwwhhh)
// -p0      --> crée des fichiers OBJ à partir des fichiers SPR
// yx.bmp   --> le fichier source est un BMP de 160*102 pixels
//
// Les sprites ainsi créé auront une profondeur de couleur de 4 bits


// Accès aux 8 sprites créés:

// Les 4 sprites de la 1ère ligne
extern char yx000000[];
extern char yx000001[];
extern char yx000002[];
extern char yx000003[];

// Les 4 sprites de la seconde ligne
extern char yx001000[];
extern char yx001001[];
extern char yx001002[];
extern char yx001003[];

char *sprtab[2][4] = {{yx000000, yx000001, yx000002, yx000003},
                      {yx001000, yx001001, yx001002, yx001003}};

extern char SCB1[];
#asm
_SCB1     dc.b $c0,$10,$20
          dc.w 0,0
          dc.w 0,0,$100,$100
          ; Puisque nous n'avons pas employé -C en lançant SPRPCK
          ; nous pouvons employer les mêmes index de palette de couleurs pour tous les sprites
          dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef
#endasm


// La palette de couleur
#include "yx.pal"


/***********************/
/* Attente d'un bouton */
/***********************/
uchar WaitButton()
{
   uchar key;
   while ( !(key = joystick))
      ;
   /* attend que le bouton soit relaché */
   while ( joystick )
      ;
   return key;
}


/***********************/
/* programme principal */
/***********************/
main()
{
register uchar x,y;                     // demande au compilateur que les variables déclarées
                                        // soient placées dans un registre du processeur

  CLI;                                  // autorise les interruptions
  SetBuffers(0x9000,0,0);

  _SetRGB(pal);                         // Définit la palette de couleurs

  for (;;)
     {
     DrawFBox(0, 0, 160, 102, 15);      // La couleur 15 est le blanc

     for (y=0; y<2; ++y)                // 2 lignes
        {
        for (x=0; x<4; ++x)             // 4 colonnes
           {
           SCBX(SCB1) = 40*x;           // coordonnées x du sprite à afficher
           SCBY(SCB1) = 51*y;           // coordonnées y du sprite à afficher
           SCBDATA(SCB1) = sprtab[y][x];   // sprite
           DrawSprite(SCB1);            // affiche le sprite
           WaitButton();
           }
        }
     } // boucle infinie
}


Edit : j'ai remplacé les "tuiles" par sprites embarrassed
Previously known as Damdam

2

1) c pas des tuiles, c des sprites (pas de traduction valable à ma connaissance dans ce domaine à part icone peut-être et encore...) grin

2) demande au compilateur que les variables déclarées soient placées dans un registre du processeur => déclare des variables en spécifiant le fait qu'elle seront utilisées comme des registres (accès fréquents en RW...) (elles ne peuvent en l'occurence pas s'assigner de registre CPU, le processeur n'en possédant pas assez...)

3) SetBuffers(0x9000,0,0); => Alloue les buffers mémoire de zone écran, l'adresse 0x9000 pour l'écran (suivi du double buffer non utilisé et du buffer de collision non utilisé lui non plus...

4) _SetRGB(pal); => Copie le contenu du tableau externe "pal" dans les zones mémoire réservées aux définitions de couleur du driver écran (SetRGB est la fonction d'origine, _SetRGB en étant une version optimisée)
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

3

Merci bien Vince chinois

J'ai pas mal étudié les programmes de Matthias Domin ces derniers jours et j'avais déduit quelques trucs mais tes explications sont beaucoup plus claires smile

Je suis en train de faire un pong pour continuer mon apprentissage, ce sera mon 1er jeu toutes plateformes confondues, et je m'aperçois que j'ai beaucoup de travail embarrassed

HS : ça avance bien les travaux?
Previously known as Damdam

4

ouais je suis à bout de forces...

je repasse ce soir...

j'espère que l'électricien sera passé...
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