Derniers sujets
Qui est en ligne ?
Il y a en tout 3 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 3 Invités Aucun
Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion
Statistiques
Nous avons 242 membres enregistrésL'utilisateur enregistré le plus récent est AIRBUS44
Nos membres ont posté un total de 8922 messages dans 811 sujets
Résultat inattendu en langage machine
4 participants
Forum Oric :: Forums :: Forum Public :: Assembleur
Page 1 sur 1
Résultat inattendu en langage machine
Salut la Communauté,
Je refais appel à vous pour solutionner un résultat inattendu en langage machine.
Toujours pour les besoins du jeu 'Black Mamba', j'ai programmé le code ci-dessous qui gère l'affichage de pièges à l'écran :
LTRAP ldx TRAP_NUMBER
bmi LTRAP_FLASH ; pas de tirage aléatoire si déjà 10 pièges affichés
lda #100
jsr LRANDOM ; génère un entier compris entre 1 et 100 et le place dans Y
cpy #99 ; si tirage aléatoire > 99 (niveau 1) alors afficher piège
bcc LTRAP_FLASH ; sinon passer à l'animation 'flash' du piège
lda #33 ; caractère à afficher = piège
jsr LGENERATE_CHAR ; positionne le piège de manière aléatoire à l'écran
dec TRAP_NUMBER ; diminue le nombre de pièges affichables
La variable TRAP_NUMBER est initialisée à 9 en début de jeu: on ne peut donc normalement avoir qu'un maximum de 10 pièges affichés à l'écran.
Il se trouve que le résultat obtenu est un affichage en continu de pièges à l'écran, comme si la variable TRAP_NUMBER n'était jamais décrémentée.
C'est d'ailleurs un peu ce qui se passe après vérification au débuggeur d'Euphoric.
Une idée de la manière de percer ce mystère ?
Je refais appel à vous pour solutionner un résultat inattendu en langage machine.
Toujours pour les besoins du jeu 'Black Mamba', j'ai programmé le code ci-dessous qui gère l'affichage de pièges à l'écran :
LTRAP ldx TRAP_NUMBER
bmi LTRAP_FLASH ; pas de tirage aléatoire si déjà 10 pièges affichés
lda #100
jsr LRANDOM ; génère un entier compris entre 1 et 100 et le place dans Y
cpy #99 ; si tirage aléatoire > 99 (niveau 1) alors afficher piège
bcc LTRAP_FLASH ; sinon passer à l'animation 'flash' du piège
lda #33 ; caractère à afficher = piège
jsr LGENERATE_CHAR ; positionne le piège de manière aléatoire à l'écran
dec TRAP_NUMBER ; diminue le nombre de pièges affichables
La variable TRAP_NUMBER est initialisée à 9 en début de jeu: on ne peut donc normalement avoir qu'un maximum de 10 pièges affichés à l'écran.
Il se trouve que le résultat obtenu est un affichage en continu de pièges à l'écran, comme si la variable TRAP_NUMBER n'était jamais décrémentée.
C'est d'ailleurs un peu ce qui se passe après vérification au débuggeur d'Euphoric.
Une idée de la manière de percer ce mystère ?
Dernière édition par Sheld67 le Mar 29 Mar 2016 - 22:09, édité 2 fois
Sheld67- Messages : 73
Date d'inscription : 06/04/2014
Re: Résultat inattendu en langage machine
Tout dépend ou est stocké TRAP_NUMBER....
Si on utilise un emplacement mémoire, il ne faut pas que le système l utilise et si on laisse la valeur dans X il faut faire un empilage-depilage avant de faire un saut dans une routine du système, ou A, X et Y on de grandes chances d être modifiés pour les besoins de la routine.
Si on utilise un emplacement mémoire, il ne faut pas que le système l utilise et si on laisse la valeur dans X il faut faire un empilage-depilage avant de faire un saut dans une routine du système, ou A, X et Y on de grandes chances d être modifiés pour les besoins de la routine.
kenneth- Modérateur
- Messages : 879
Date d'inscription : 13/01/2013
Age : 56
Localisation : 63
Re: Résultat inattendu en langage machine
Hello,
A la lecture, ce qui me paraît très bizarre c'est la logique d'affichage des pièges, avec des sauts effectués vers un même label (LTRAP_FLASH) dans 2 cas complètement différents:
1) si le nb de pièges à afficher est atteint on fait un saut vers LTRAP_FLASH) (BMI LTRAP_FLASH)... A ce sujet d'ailleurs, je m'attendais à trouver un "BEQ" ici plutôt qu'un "BMI"... J'avoue ne pas voir ce que fait un "BMI" ici ??
2) si le tirage aléatoire est inférieur à un seuil donné, tu fais aussi un saut vers LTRAP_FLASH (bcc LTRAP_FLASH)
Du coup, lorsque tu atteins ce fameux label LTRAP_FLASH:
- comment distingues tu si l'appel provient du cas 1) ou du cas 2)
- comment boucles-tu (dans le cas 2) sur l'affichage du prochain piège, puisqu'il te faut en toute logique te tebrancher à un moment donné vers l'instruction "dec TRAP_NUMBER"... D'ailleurs ce qui n'est pas très clair non plus, c'est si tu affiches exactement TRAP_NUMBER pièges , ou AU MAXIMUM, TRAP_NUMBER pièges ??
Dernière remarque, au sujet de ce "bMI" qui m'intrigue... Personnellement, j'évite de mélanger des instructions traitant de nombres signés (BMI) et celles traitant de nombres non signés (BCC), sinon ça complique la lecture, on ne sait plus si on manipule des nombres signés sur 7 bits ou des nombres non signés sur 8 bits...
Enfin, difficile de toutes façons de donner un diagnostic plus précis car tu ne donnes qu'une partie de ton code, il faudrait avoir la totalité de la boucle de traitement d'affichage des pièges pour identifier les problèmes possibles...
Quoi qu'il en soit... une bonne manière de percer le mystère" est comme tu l'indiques d'utiliser un débogueur, en mode pas à pas pour bien voir ce qui se passe à chaque étape... Tu dis que tu as essayé et qu'effectivement ta variable TRAP_NUMBER n'était pas décrémentée, mais as-tu réellement débuggé les instructions pas à pas ??
En espérant que ça pourra t'aider à trouver le pb dans ton code...
Bon courage,
Laurent
PS - je suis impatient d'en savoir plus sur ce "Black Mamba" en préparation !!! ;-)
A la lecture, ce qui me paraît très bizarre c'est la logique d'affichage des pièges, avec des sauts effectués vers un même label (LTRAP_FLASH) dans 2 cas complètement différents:
1) si le nb de pièges à afficher est atteint on fait un saut vers LTRAP_FLASH) (BMI LTRAP_FLASH)... A ce sujet d'ailleurs, je m'attendais à trouver un "BEQ" ici plutôt qu'un "BMI"... J'avoue ne pas voir ce que fait un "BMI" ici ??
2) si le tirage aléatoire est inférieur à un seuil donné, tu fais aussi un saut vers LTRAP_FLASH (bcc LTRAP_FLASH)
Du coup, lorsque tu atteins ce fameux label LTRAP_FLASH:
- comment distingues tu si l'appel provient du cas 1) ou du cas 2)
- comment boucles-tu (dans le cas 2) sur l'affichage du prochain piège, puisqu'il te faut en toute logique te tebrancher à un moment donné vers l'instruction "dec TRAP_NUMBER"... D'ailleurs ce qui n'est pas très clair non plus, c'est si tu affiches exactement TRAP_NUMBER pièges , ou AU MAXIMUM, TRAP_NUMBER pièges ??
Dernière remarque, au sujet de ce "bMI" qui m'intrigue... Personnellement, j'évite de mélanger des instructions traitant de nombres signés (BMI) et celles traitant de nombres non signés (BCC), sinon ça complique la lecture, on ne sait plus si on manipule des nombres signés sur 7 bits ou des nombres non signés sur 8 bits...
Enfin, difficile de toutes façons de donner un diagnostic plus précis car tu ne donnes qu'une partie de ton code, il faudrait avoir la totalité de la boucle de traitement d'affichage des pièges pour identifier les problèmes possibles...
Quoi qu'il en soit... une bonne manière de percer le mystère" est comme tu l'indiques d'utiliser un débogueur, en mode pas à pas pour bien voir ce qui se passe à chaque étape... Tu dis que tu as essayé et qu'effectivement ta variable TRAP_NUMBER n'était pas décrémentée, mais as-tu réellement débuggé les instructions pas à pas ??
En espérant que ça pourra t'aider à trouver le pb dans ton code...
Bon courage,
Laurent
PS - je suis impatient d'en savoir plus sur ce "Black Mamba" en préparation !!! ;-)
Re: Résultat inattendu en langage machine
Bonjour,
A vu de nez, il n'y a pas d'anomalies.
Soit tes autres routines perturbent ce fonctionnement, soit effectivement la variable n'est pas à un endroit sécurisé du systeme.
Un petit rappel pour vérifier des cas de fonctionnement du 6502 :
http://skilldrick.github.io/easy6502/
Didier
A vu de nez, il n'y a pas d'anomalies.
Soit tes autres routines perturbent ce fonctionnement, soit effectivement la variable n'est pas à un endroit sécurisé du systeme.
Un petit rappel pour vérifier des cas de fonctionnement du 6502 :
http://skilldrick.github.io/easy6502/
Didier
Re: Résultat inattendu en langage machine
Merci de vous être penché sur mon sujet qui n'en était finalement pas vraiment un.
En effet, ma programmation (défectueuse) faisait que je renvoyais sans cesse à une zone d'initialisation des variables dont la variable TRAP_NUMBER qui reprenait à tout coup la valeur 9.
Pas étonnant, de fait, que le nombre de pièges s'affichant à l'écran devienne rapidement insurmontable !
Allez hop, encore un sujet résolu.
En effet, ma programmation (défectueuse) faisait que je renvoyais sans cesse à une zone d'initialisation des variables dont la variable TRAP_NUMBER qui reprenait à tout coup la valeur 9.
Pas étonnant, de fait, que le nombre de pièges s'affichant à l'écran devienne rapidement insurmontable !
Allez hop, encore un sujet résolu.
Sheld67- Messages : 73
Date d'inscription : 06/04/2014
Forum Oric :: Forums :: Forum Public :: Assembleur
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Dim 31 Mar 2024 - 14:35 par kenneth
» Bla Bla général du Jury
Jeu 21 Mar 2024 - 8:51 par Dom50
» carte mère Oric (re)tracée
Mar 5 Mar 2024 - 18:54 par kenneth
» Meurtre à Grande Vitesse
Dim 25 Fév 2024 - 5:09 par Iurius
» ORIC-1 sur LE BON COIN
Ven 23 Fév 2024 - 23:01 par Mcar
» ORIC ATMOS sur LE BON COIN
Dim 4 Fév 2024 - 12:06 par kiwilevrai
» Problème d'affichage des couleurs avec un Oric Atmos
Sam 27 Jan 2024 - 1:26 par pierbail
» Bienvenue dans le Forum des Oriciens
Mar 9 Jan 2024 - 12:33 par Dom50
» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Ven 29 Déc 2023 - 14:13 par Arcade-des-Monts
» Bonnes fêtes
Mar 26 Déc 2023 - 10:21 par Dom50
» Murders in Venice / Meutres à Venise
Sam 18 Nov 2023 - 22:44 par retroric
» Un clavier PS/2 pour tester un ORIC
Dim 27 Aoû 2023 - 9:49 par Voyageur
» Disquette 3" Sedoric
Mar 1 Aoû 2023 - 14:22 par AtomeX
» faire un 6502 avec des phototransistor
Dim 16 Juil 2023 - 17:26 par Voyageur
» Oricutron linux et DSK
Jeu 29 Juin 2023 - 18:34 par Voyageur