Comme exemple j'ai pris SDPLAY 2016 : http://dcmoto.free.fr/programmes/sdplay-2016/index.html
Ce programme joue de la musique en streaming à partir d'une carte SD. La boucle de lecture d'un octet est "déroulée" pour optimiser la vitesse, mais le basculement du bit d'horloge nécessite deux LDB, soit quatre cycles. En utilisant alternativement les registres B et E, on économise ces deux LDB à chaque bit, on gagne ainsi 24 cycles par octet. Le gain de vitesse est environ 12%, sans gros changement du programme et en laissant le 6309 en mode émulation.
Si on passe le 6309 en mode natif, on gagne en plus un cycle sur chaque instruction, soit 4 cycles par bit et 32 cycles par octet. Dans ce cas le gain de vitesse est environ 33% par rapport au 6809, ce qui permet de passer de 5,6kHZ à plus de 8kHz pour le streaming audio.
Le qualité audio est incontestablement bien meilleure.
Code : Tout sélectionner
*------------------------------------------------------
* LECTURE D'UN OCTET AVEC SDMO
* Le registre B n'est pas preserve
* Valeur de l'octet dans le registre A en sortie
*------------------------------------------------------
RBYTEMO
LDB #$7F (2)
LDE #$36 (3)
* premier bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
* deuxieme bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
* troisieme bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
* quatrieme bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
* cinquieme bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
* sixieme bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
* septieme bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
* huitieme bit
STB <$C2 clock high (3/4)
CMPB <$C0 PA b7 (bit lu) -> carry (3/4)
STE <$C2 clock low (4/5)
ROLA C (bit lu) -> b0 reg A (1/2)
*
RTS retour (octet dans A) (4/5)