Depannage Gottlieb 80B "Bad Girls"

Aide, Dépannage, pour les flippers numérique ou alpha-numérique (lettre + chiffre)

Flipper concerné :

Si necessaire, merci de proposer un flipper en relation avec ce sujet.
Avatar du membre
victormaria
Dept: 26
Rech/Achete: 0 flip
Messages : 542
Enregistré le : 30/05/2012
Niveau : Confirmé
Pro / revendeur : non

Re: Depannage Gottlieb 80B "Bad Girls"

Message par victormaria » jeu. 27 01, 2022 10:17

salut a tous ben Jai lu ce tuto et Jai du prendre 6 dolipranes ::)): , vraiment trop technique, vire la 5101 et tu pourras jouer a nouveau :x26:

Ryno Monster
Dept: 94
Rech/Achete: 0 flip
Messages : 20
Enregistré le : 19/04/2020
Pas vu depuis 6 mois
Niveau : Initié
Pro / revendeur : non
Contact :

Re: Depannage Gottlieb 80B "Bad Girls"

Message par Ryno Monster » ven. 28 01, 2022 00:41

:-) ok, je vais changer la RAM. C'est une 5101E, j'ai de la 5101P en stock ça à l'air d’être très semblable...

Ryno Monster
Dept: 94
Rech/Achete: 0 flip
Messages : 20
Enregistré le : 19/04/2020
Pas vu depuis 6 mois
Niveau : Initié
Pro / revendeur : non
Contact :

Re: Depannage Gottlieb 80B "Bad Girls"

Message par Ryno Monster » sam. 01 06, 2024 11:29

Bon, j'avais toujours en tete d'essayer d'avancer sur cette analyse du code mais les outils disponibles nécessitaient trop d'investissement (essentiellement en temps)... jusqu'a la démocratisation des IA :-)
C'est bluffant ! Je ne vais pas faire la promo d'une solution parmi toutes les offres dispo mais voici ce que j'ai obtenu en moins de 10 min: En plus d'une analyse complète du code et la génération d'un synopsis de fonctionnement général, les détails sur la partie qui m'intéressait précisément (la gestion des "high scores"):

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 :

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”
Ces chaînes de caractères semblent indiquer les positions des high scores dans la mémoire.

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:

Code : 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
Entrée des Initiales

Code : 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
Affichage des High Scores

Code : 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
Adresses et Stockage Spécifique
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.

Répondre