Les sprites proposent deux modes d'affichage : Litéral (c'est à dire un beau tableau de pixels) ou Normal (combinaison de mode compact et de litéral), on le définit dans le bit n°7 de SPRCTL1
Le mode compact se base sur la répététion de pixels à l'horizontal. Si vous avez une ligne horizontale de 5 pixels, en litéral, vous allez utiliser 5x4bits = 20 bits alors qu'en compact, ça sera 4 bits de longueur et 4bits de couleur, 8bits.
Donc, prenons un sprite "simple" (un smiley en 7x7 pixels) :
0011100
0122210
1222221
1212121
1222221
0122210
0011100
(et la palette est simple : 0 pour le gris, 1 pour le noir et 2 pour le jaune mais on restera sur du 4 bits de couleurs)
En mode litéral, on aura ceci :
5,0x00,0x11,0x10,0x03,
5,0x01,0x22,0x21,0x03,
5,0x12,0x22,0x22,0x13,
5,0x12,0x12,0x12,0x13,
5,0x12,0x22,0x22,0x13,
5,0x01,0x22,0x21,0x03,
5,0x00,0x11,0x10,0x03,
0
à chaque ligne, on commence par l'offset de la ligne suivante (soit le nombre de paire de pixels + 1) suivi des paires de pixel et on termine par un 0 pour dire qu'il n'y a plus d'autres lignes. L'inconvénient, c'est qu'il faut des paires de pixel, donc comme notre sprite fait 7 pixels de large, j'ai du compléter avec la couleur n°3 qu'on supposera être la couleur de fond.
En mode normal on aura ça :
5,0x08,0x08,0x42,0x00,
6,0x88,0x08,0x8A,0x22,0x00,
5,0x80,0x90,0xA0,0x20,
6,0xB0,0x90,0x90,0x90,0x80,
5,0x80,0x90,0xA0,0x20,
6,0x88,0x08,0x8A,0x22,0x00,
5,0x08,0x08,0x42,0x00,
0
Le principe est le même, chaque ligne commence par l'offset de la suivante suivi des données "codées". Le format est disponible dans la doc fr/en
ligne1, on a mode compact+répété 1 fois+couleur 0+mode compact+répété 2 fois+couleur 1
ligne2, on a mode litéral+répété 1 fois+couleur 0+couleur 1+mode compact+répété 2 fois+couleur 2+mode litéral+répété 1 fois+couleur 1+couleur 0
ligne3, on a mode litéral+répété 0 fois+couleur 1+mode compact+répété 4 fois+couleur 2+mode litéral+répété 0 fois+couleur 1
ligne4, on a mode litéral+répété 6 fois+couleur 1+couleur 2+couleur 1+couleur 2+couleur 1+couleur 2+couleur 1
ligne5, on a mode litéral+répété 0 fois+couleur 1+mode compact+répété 4 fois+couleur 2+mode litéral+répété 0 fois+couleur 1
ligne6, on a mode litéral+répété 1 fois+couleur 0+couleur 1+mode compact+répété 2 fois+couleur 2+mode litéral+répété 1 fois+couleur 1+couleur 0
ligne7, on a mode compact+répété 1 fois+couleur 0+mode compact+répété 2 fois+couleur 1
(et on complète avec des bits à 0)
ligne 1 MRRR RCCC CMRR RRCC CCMR RRRC CCC* **** 0000 1000 0000 1000 0100 0010 0000 0000 hex0 hex8 hex0 hex8 hex4 hex2 hex0 hex0 ligne 2 MRRR RCCC CCCC CMRR RRCC CCMR RRRC CCCC CCC* 1000 1000 0000 1000 1000 1010 0010 0010 0000 hex8 hex8 hex0 hex8 hex8 hexA hex2 hex2 hex0 ligne 3 MRRR RCCC CMRR RRCC CCMR RRRC CCC* **** 1000 0000 1001 0000 1010 0000 0010 0000 hex8 hex0 hex9 hex0 hexA hex0 hex2 hex0 ligne 4 MRRR RCCC CCCC CCCC CCCC CCCC CCCC CCCC C*** **** 1011 0000 1001 0000 1001 0000 1001 0000 1000 0000 hexB hex0 hex9 hex0 hex9 hex0 hex9 hex0 hex8 hex0 ligne 5 MRRR RCCC CMRR RRCC CCMR RRRC CCC* **** 1000 0000 1001 0000 1010 0000 0010 0000 hex8 hex0 hex9 hex0 hexA hex0 hex2 hex0 ligne 6 MRRR RCCC CCCC CMRR RRCC CCMR RRRC CCCC CCC* 1000 1000 0000 1000 1000 1010 0010 0010 0000 hex8 hex8 hex0 hex8 hex8 hexA hex2 hex2 hex0 ligne 7 MRRR RCCC CMRR RRCC CCMR RRRC CCC* **** 0000 1000 0000 1000 0100 0010 0000 0000 hex0 hex8 hex0 hex8 hex4 hex2 hex0 hex0
M pour Mode (un bit)
R pour répétition (4 bits)
C pour couleur (4 bits)
* pour les bits de complétion
Pour votre code, dans le cas du mode normal, SPRCTL1 vaudra 0x10 (mode normal+redimensionnement de type ajout+rechargement Hsize&Vsize+rechargement palette+utiliser ce sprite+dessin vers le bas+dessin vers la droite) et en mode litéral il vaudra 0x90 (mode litéral+redimensionnement de type ajout+rechargement Hsize&Vsize+rechargement palette+utiliser ce sprite+dessin vers le bas+dessin vers la droite)