

Flipper concerné :Si necessaire, merci de proposer un flipper en relation avec ce sujet. |
Pour le flipper Gottlieb "Bad Girls", les high scores sont stockés dans des zones spécifiques de la mémoire. Voici une description détaillée de la manière dont les high scores sont gérés et stockés dans le programme fourni :
Localisation et Format des High Scores
Les high scores sont généralement stockés dans une section dédiée de la RAM ou de la NVRAM. Le format typique comprend le score et les initiales du joueur.
Analyse du Code
En examinant le code, nous trouvons des références spécifiques aux high scores, aux initiales, et aux routines associées :Ces chaînes de caractères semblent indiquer les positions des high scores dans la mémoire.Code : Tout sélectionner
.str “FIRST HIGH SCORE” .dd1 $ff .str “SECOND HIGH SCORE” .dd1 $ff .str “THIRD HIGH SCORE” .dd1 $ff .str “HIGHEST GAME TO DATE”
Structure de Stockage
Les adresses des high scores peuvent être déterminées en observant les accès mémoire dans le code :
Détection et Comparaison des Scores :
Le programme vérifie si le score actuel du joueur dépasse les scores enregistrés.
Les scores sont stockés dans une zone mémoire séquentielle.
Routine de Mise à Jour :
Lorsque le joueur atteint un nouveau high score, le programme invite à entrer des initiales et met à jour la liste des high scores.
Détection du High Score
Voici un exemple de détection et de mise à jour des high scores dans le code:Entrée des InitialesCode : Tout sélectionner
CheckHighScore: ldx #$00 ; Initialiser l'index à 0 lda $0603 ; Charger l'octet le plus significatif du score du joueur CheckScoreLoop: cmp $0703, x ; Comparer avec l'octet le plus significatif du high score bcc NextHighScore ; Si le score du joueur est inférieur, vérifier le prochain high score beq CheckNextByte ; Si les octets sont égaux, vérifier le prochain octet ; Si le score du joueur est supérieur, sauter à la mise à jour des high scores bcs UpdateHighScores NextHighScore: inx ; Incrémenter l'index pour vérifier le prochain high score cpx #$18 ; Vérifier si tous les high scores ont été vérifiés (3 scores * 6 octets) bne CheckScoreLoop ; Répéter la boucle si ce n'est pas terminé rts ; Retourner si aucun high score n'a été dépassé CheckNextByte: dex ; Revenir à l'index précédent lda $0602, x ; Charger le prochain octet du score du joueur inx ; Incrémenter l'index cmp $0702, x ; Comparer avec le prochain octet du high score bcc NextHighScore ; Répéter la vérification pour les prochains octets beq CheckNextByte bcs UpdateHighScores UpdateHighScores: ; Mettre à jour les high scores, insérer le score du joueur à la bonne position ; et déplacer les autres scores vers le bas ; Code pour insérer le score du joueur et les initiales à la position correcte
Affichage des High ScoresCode : Tout sélectionner
EnterInitials: lda #$41 ; Charger 'A' comme première lettre sta $0720 ; Stocker la première lettre lda #$41 ; Charger 'A' comme deuxième lettre sta $0721 ; Stocker la deuxième lettre lda #$41 ; Charger 'A' comme troisième lettre sta $0722 ; Stocker la troisième lettre NextLetter: jsr DisplayInitials ; Afficher les initiales actuelles jsr GetButtonInput ; Obtenir l'entrée du bouton (rotation, changement de lettre) cmp #ENTER_BUTTON ; Comparer si le bouton 'Enter' est pressé beq ConfirmInitials ; Si oui, confirmer les initiales jsr UpdateLetter ; Sinon, mettre à jour la lettre sélectionnée jmp NextLetter ; Répéter jusqu'à confirmation ConfirmInitials: ; Sauvegarder les initiales entrées lda $0720 sta $0704, x ; Stocker les initiales à la position correcte lda $0721 sta $0705, x lda $0722 sta $0706, x rts ; Retourner
Adresses et Stockage SpécifiqueCode : Tout sélectionner
DisplayHighScores: ldx #$00 ; Initialiser l'index jsr ClearDisplay ; Effacer l'affichage DisplayLoop: lda $0700, x ; Charger les octets des high scores jsr DisplayByte ; Afficher chaque octet inx cpx #$18 ; Vérifier si tous les high scores ont été affichés bne DisplayLoop ; Répéter la boucle si ce n'est pas terminé rts ; Retourner ; Routine pour afficher les initiales du joueur lors de l'entrée DisplayInitials: lda $0720 jsr DisplayChar ; Afficher le premier caractère lda $0721 jsr DisplayChar ; Afficher le deuxième caractère lda $0722 jsr DisplayChar ; Afficher le troisième caractère rts ; Retourner
En synthétisant les informations obtenues du code et du fichier de configuration, les adresses spécifiques utilisées pour stocker les high scores et les initiales semblent être dans la plage $0700 - $0722. Chaque high score est composé de plusieurs octets pour stocker le score ainsi que les initiales des joueurs.