Un score (1)

Cet article fait suite à l’article Les players (2), dans lequel nous avons vu comment placer et imbriquer les deux players de façon à obtenir un affichage en 6 positions. Cet affichage pourra servir pour un score, un timer, voire un logo, bref une image « haute résolution » de 48 pixels de large.

Dans cet article, nous allons voir comment stocker une valeur numérique en 6 positions et comment la manipuler.

Vous devez tout d’abord savoir que le 6507 dispose nativement d’un mode décimal codé binaire (BCD) pour les additions et les soustractions, ce qui était à l’époque une quasi exclusivité !
Ainsi si vous ajoutez 1 à la valeur $19, vous n’obtiendrez pas $1A mais $20.

Un octet pouvant représenter 2 chiffres de notre affichage, nous avons besoin de 3 octets. Il nous faut également un pointeur par chiffre à afficher, cela nous fait donc 12 octets supplémentaires :

Score        ds 3
PtrDigits    ds 12

Pour illustrer notre exercice, nous allons réaliser un compteur d’images. Initialisons ce compteur à 0 :

   lda #$00    ; initialisation du compteur
   sta Score
   sta Score+1
   sta Score+2

A chaque image, nous incrémentons notre compteur d’une unité :

   ; incrémentation du compteur
   clc     ; raz de la retenue
   sed   ; on active le mode décimal
   lda Score+2  ; chiffres 5 et 6
   adc #1
   sta Score+2
   lda Score+1  ; chiffres 3 et 4
   adc #0
   sta Score+1
   lda Score    ; chiffres 1 et 2
   adc #0
   sta Score
   cld   ; on annule le mode décimal

Lorsque la première addition donne un résultat supérieur à 99, la retenue (carry) est activée et cet octet revient à 00. La retenue est alors ajoutée lors de l’addition suivante.
Si vous souhaitez augmenter votre compteur d’une valeur supérieure, par exemple un score augmenté de 150, il suffit d’ajouter d’abord 50 (adc #$50), ensuite 1 (adc #1), et enfin 0.
Notre score contient maintenant la valeur du compteur augmentée de 1, chaque octet représentant 2 chiffres.
Affectons ensuite les chiffres correspondants aux pointeurs :

   ; compléter le buffer score
   ldx #3     ; les 3 octets de score
   lda #11    ; les 6 pointeurs (12 octets) de chiffres
   sta Temp   ; emplacement mémoire à ajouter   
BufferScore
   lda Score-1,x        ; -1 car x va de 3 à 1
   and #%00001111       ; d'abord la partie droite de l'octet
   tay
   lda LowDigits,y      ; on va voir dans la table des pointeurs
   pha                  ; en pile, évite d'utiliser un symbôle
   lda HiDigits,y
   ldy Temp
   sta PtrDigit1,y   
   pla
   sta PtrDigit1-1,y 

   lda Score-1,x        ; ensuite la partie gauche de l'octet
   lsr                  ; 4 décalages vers la droite,
   lsr                  ; quatre 0 rentrent à gauche
   lsr
   lsr
   tay
   lda LowDigits,y
   pha
   lda HiDigits,y
   ldy Temp
   sta PtrDigit1-2,y   
   pla
   sta PtrDigit1-3,y 
   
   dey                  ; on recule de 2 pointeurs
   dey
   dey
   dey
   sty Temp

   dex
   bne BufferScore   

NB : LowDigits et HiDigits sont 10 pointeurs vers les graphiques des chiffres de 0 à 9, séparés en partie basse et partie haute :

LowDigits   
   .byte #<Data0
   .byte #<Data1
   .byte #<Data2
   .byte #<Data3
   .byte #<Data4
   .byte #<Data5
   .byte #<Data6
   .byte #<Data7
   .byte #<Data8
   .byte #<Data9
   
HiDigits   
   .byte #>Data0
   .byte #>Data1
   .byte #>Data2
   .byte #>Data3
   .byte #>Data4
   .byte #>Data5
   .byte #>Data6
   .byte #>Data7
   .byte #>Data8
   .byte #>Data9

Ceci clôture la première partie, l’article suivant s’attaquera l’affichage de notre compteur à l’aide des players imbriqués. A bientôt !

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :