Pages : [01] [02] [03] [04] [05] [06] [07] [08] [09] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21]


En utilisant le registre D, nous pouvons modifier notre routine de la facon suivante :

  LDD ,Y
  ANDA #$E1  
  ORA #$1E  
  ANDB #$FF  
  ORB #$00
  STD ,Y  
  LDD ,X
  ANDA #$E1  
  ORA #$00  
  ANDB #$FF  
  ORB #$00
  STD ,X  

Cette solution est générique, mais beaucoup plus performante que la précédente. Cependant, elle n'est toujours pas encore tres performante si on applique les trois optimisations vues lors de l'affichage de la ball 0. Pour rappels, ces trois optimisations consistaient à :
  • Retirer les AND lorsqu'ils etaient complémentaires avec le OR
  • Retirer les OR #$00
  • Utiliser le registre D
Or, nous avons ici des opérations inutiles si l'on prend on compte les deux premières optimisations. Une nouvelle optimisation porte sur un AND #$FF qui est lui aussi inutile. La routine optimisée serait donc :

  LDD #$1EE1
  ORA ,Y  
  STA ,Y  
  ANDB ,X  
  STB ,X  

Cela fait donc une belle optimisation par rapport a la routine de la page précédente puisque nous sommes reduit a 5 mnemoniques au lieu de 16, d'ou un gain de temps assez conséquent.

© PULS 2004-2019