Un seul octet pour le delta me semble trop courts lorsque les changements sont très éloignés les uns des autres dans l'image. Typiquement s'il y a 2 groupes de changements : un en haut à gauche et l'autre en bas à droite, il faut introduire plein de delta à +127 pour aller du 1er groupe à l'autre. Il serait peut-être intéressant d'introduire un mode "gros-delta" avec un saut sur 2 octets.
Quelques idées d'encodage:
- idée 1) si b7=0, on a un petit delta sur un octet. Si b7=1, c'est un gros delta de deux octets. Dans les deux cas, le signe est donné par b6 qu'il faut recopier en b7: (lsl + asr). Le test entre petit et gros delta est simple: c'est juste un bmi sur le 1er octet.
- idée 2) travailler par bloc de 8x8, le delta travaillerait au niveau bloc et serait suivi par 8 octets pour le bloc à remplacer.
Il y a une optimisation possible dans le mode gros delta. Seuls 13 bits sont utiles pour décrire le déplacement. Les 2 bits restants (1 est perdu pour décrire le mode petit ou gros delta) pourrait décrire le nb d'octets de la même colonne à recopier (de 1 à 5). C'est un compromis entre l'idée 1 et l'idée 2 car je pense que lorsqu'un changement a lieu sur un octets, les octets en dessous sont assez souvent affectés eux aussi. Au niveau ASM cela ne doit pas être tellement plus gros que le décodage actuel. A la louche
Code : Tout sélectionner
PLAY1
BSR RBYTE lecture octet deplacement
BMI BIG
LSLA
ASRA
LEAY A,Y incrementation index ecran
BSR RBYTE lecture octet image
STA ,Y affichage de l'octet
SUITE
...
BIG
STA ,-S
BSR RBYTE lecture word deplacement
TFR A,B
LDA #%00011111
ANDA ,S
LEAY D,Y déplacement (8K non signé, mais on pourrait le rendre signé)
LDB #%01100000 compte: 1 à 5 octets
ANDB ,S+
BIG2:
BSR RBYTE
STA ,Y
LEAY 40,Y
SUBB #%00100000
BGE BIG2
BRA SUITE