Je suis en cours de test sur la version d'hier soir (sans les répétition type LZ).
J'ai fait qq modifs car il y avait un problème quand on avait des offsets entre 64 et 255, dans ce cas on était sur la balise 11000000 qui nous branchait sur le mask left.
Du coup j'ai modifié le format et on utilise le 10000000 pour le mask left
ça implique d'avoir un comptage n et non plus n+1 pour les nombre de répétitions, du coup j'ai remplacé les bcc par des bne pour le point de sortie du compteur.
// 00 000000 => end of data
// 00 nnnnnn => write ptr offset n:1,63 (6 bits unsigned)
// 01 000000 vvvvvvvv => right pixel is transparent, v : byte to add
// 01 nnnnnn vvvvvvvv => n : number of byte to repeat (6 bits unsigned), v : value
// 10 000000 vvvvvvvv => left pixel is transparent, v : byte to add
// 10 nnnnnn vvvvvvvv ... => n : number of bytes to write (6 bits unsigned), v : value, ...
// 11 nnnnnn nnnnnnnn => write ptr offset n:-8192,8191 (14 bits signed)
J'ai encore qq bugs a corriger, je verrai demain.
Pour le moment on est à 90ko sur mon jeu de test au lieu de 114ko sur la précédente version (premier format RLE) et au lieu de 242ko pour la version sprite compilé.
C'est une super nouvelle ! ça a l'air de tourner a une vitesse exploitable.
Je donnerai le rapport de temps d'exécution avec la version sprite compilé quand j'aurai corrigé tous les bugs.
Je verrai par la suite pour la version avec répétition de motifs, je pense que ça va bien compresser de ce que je vois dans les données (pris au hasard):
Code:
fdb $CE4E
fcb 128,$03
fcb $22
fcb 65,$33
fcb $04
fcb 128,$03
fcb $22
fcb 65,$33
fcb $27
fcb 64,$30
fcb $04
fcb 128,$01
fcb $22
fcb 128,$01
fcb $04
fcb 65,$01
fcb $22
fcb 128,$01
fcb $04
fcb 65,$01
fcb $22
fcb 128,$01
fcb $04
fcb 65,$01
fcb $22
fcb 128,$01
fcb $04
fcb 128,$01
fcb $22
fcb 128,$01
fcb $04
fcb 128,$01
fcb $22
fcb 128,$01
fcb 0