PAS DE REDITESOn a vu que le format du PLAY est de taille fixe à 14 octets. Quand on regarde un morceau, on voit que souvent 11 des 14 octets sont identiques. Typiquement une seule voix a changée. C'est un peu idiot ca: on répète des trucs qu'on a dit juste au dessus. Si on pouvait faire evoluer le PLAY pour que seules les voix changées soient indiquées, on gagnerait beaucoup de place. Or il se touve qu'on a 6 bits de dispo dans l'octet flag. Reservons alors 1 bit pour indiquer si l'on doit changer la voix correspondante:
Code:
[1 chg1 chg2 chg3 chg4 0 0 bruit]
On a ainsi une commande PLAY de longueur variable.
En supprimant les redites, le format a pas mal diminué. Il y a rarement plus de 2 voix qui changent à la fois. Le pattern passe alors d'une taille de 14 octets à 8 octets. On a gagné un facteur deux. La Toccata et Fugue ne fait plus que 12ko. Elle tient dans une banque ram. Super!
Code:
* Bach_Toccate_Fugue_BWV565.mid
zik
fcb $82,$20,$80,$16,$56,$00,$00,$00,$00,$00,$00,$00,$00,$00
fcb $ba,$20,$80,$13,$e7
fdb SXM103-zik
fcb $ba,$20,$00,$00,$00
fcb $82,$10,$80,$13,$e7,$00,$00,$00,$00,$00,$00,$00,$00,$00
fcb $ba,$10,$80,$11,$ba
fcb $ba,$10,$80,$10,$bc
fcb $ba,$10,$80,$0e,$e9
fcb $ba,$20,$80,$0e,$14
fcb $82,$20,$80,$0e,$e9,$00,$00,$00,$00,$00,$00,$00,$00,$00
fdb SXM61-zik
fdb SXM211-zik
fdb SXM60-zik
fdb SXM59-zik
fdb SXM209-zik
fcb $ba,$20,$80,$07,$0a
fcb $82,$40,$80,$07,$74,$00,$00,$00,$00,$00,$00,$00,$00,$00
fcb $ba,$e0,$00,$00,$00
fcb $ba,$20,$80,$05,$91
fcb $ba,$20,$80,$04,$f5
fcb $82,$40,$80,$05,$91,$00,$00,$00,$00,$00,$00,$00,$00,$00
...
SXM0
fdb SXM164-zik
fdb SXM164-zik
fdb SXM163-zik
fdb SXM163-zik
fdb 0
SXM1
fdb SXM165-zik
fdb SXM165-zik
fdb SXM166-zik
fdb SXM166-zik
fdb 0
SXM2
fdb SXM167-zik
fdb SXM167-zik
fdb SXM168-zik
fdb SXM168-zik
fdb 0
SXM3
fcb $ba,$20,$80,$08,$dd
fcb $ba,$20,$80,$0b,$ce
fcb $ba,$20,$80,$08,$dd
fdb SXM208-zik
fcb $ba,$20,$80,$0b,$2b
fcb $ba,$20,$80,$08,$5a
fcb $ba,$20,$80,$05,$e3
fcb $ba,$20,$80,$07,$74
fcb $ba,$20,$80,$09,$f3
fcb $ba,$20,$80,$07,$74
fdb SXM180-zik
fdb SXM233-zik
fcb $ba,$40,$80,$0b,$ce
fdb 0
SXM4
fdb SXM260-zik
fdb SXM196-zik
fdb SXM260-zik
fdb SXM173-zik
fcb $ba,$40,$80,$16,$56
fdb SXM189-zik
fcb $ba,$40,$80,$16,$56
fdb 0
...