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

Concept d'affichage

Le concept d'animation se passe de la facon suivante :
  • Affichage de l'objet
  • Effacement de l'objet
  • Affichage de l'objet à la nouvelle position
  • Effacement de l'objet de sa nouvelle position
  • ...etc...

Si l'on travail sur le meme écran, nous verrons un clignotement du au fait que l'on efface un objet pour le ré-afficher à une autre position (ou sous un angle different). Pour cacher ce fait, nous travaillerons avec 2 écrans et nous commuterons l'un ou l'autre en temps voulu. La nouvelle génération des Thomson (MO6, TO8, TO8D, et TO9+) nous permet d'utiliser d'autres zones mémoire utilisateur afin d'y stocker nos écrans, et d'indiquer au Thomson quel écran afficher. Ceci va donc nous permettre d'afficher un écran pendant que l'on prépare un autre. L'organigramme ci dessus se modifera de la facon suivante :

  • Affichage de l'écran A
  • Effacement de l'objet dans l'écran B
  • Affichage de l'objet dans l'écran B
  • Affichage de l'écran B
  • Effacement de l'objet dans l'écran A
  • Affichage de l'objet dans l'écran A
  • Retour au départ
Nous avons le choix de pouvoir utiliser l'espace cartouche (&H0000 -> &H4FFF) ou l'espace en BANK (&HA000 -> &HDFFF). Cependant, notre cachier des charges indique que un fichier binaire contenant les offsets des balls sera chargé en mémoire. Il est donc preferable de garder la zone mémoire en BANK libre. Nous travailleront donc dans l'espace cartouche. Son initialisation en tete de programme s'effectuera de la facon suivante :

 LDB$6181 
 ORB#$10 
 STB$6081 
 CLR$616D 

Pour passer d'un écran à l'autre, nous utiliserons la fonction suivante :

SCRC      
  LDB SCRCO+1  
  ANDB #$80  
  STB $E7DD  
  COM SCRC0+1  
SCRC0      
  LDB #$00  
  ANDB #$02  
  ORB #$60  
  STB $E7E6  
  CLR $E7CF  
  RTS    
Comment cette routine fonctionne-t-elle ?

Premierement, il convient de noter que SCRC0+1 est l'adresse en mémoire de la valeur du LDB #$00. Plutot que d'utiliser une variable et de charger et décharger (par les LDB / STB), nous modifions directement le programme lui meme. Cette technique va nous permettre de sauver du temps lors de l'exécution du programme.

A la première exécution de cette routine, nous allons charger dans B la valeur qui se trouve dans SCRC0 LDB #$00, soit $00. Nous appliquons un ET logique qui ne changera pas le résultat, la valeur stockée dans $E7DD sera $00.
Nous complémentons la valeur du LDB #$00. Le programme va donc s'auto-modifier et le LDB #$00 va se transformer en LDB #$FF (Une complémentation met les bits 0 à 1 et les bits 1 à 0) Le programme continu sont exécution et trouve un LDB #$FF, et charge donc $FF dans B naturellement. Le reste sont des opérations logique qui produisent au final la valeur $62.

A la deuxième exécution de cette routine, notre ligne était restée à l'état LDB #$FF. Un COM SCRC0+1 complémentera donc le $FF ce qui modifera le programme et changera cette ligne en LDB #$00. La valeur qui résultera des opérations qui suivent sera $60. Nous avons donc une routine qui permute entre les valeurs $00/$80, et $60/$62 à chaque fois qu'elle est exécutée.


L'appel a cette fonction se fera par un JSR SCRC. Aucun parametre n'est à preciser, car elle commutera automatiquement les écrans à afficher et à utiliser pour écrire les données.


© PULS 2004-2019