Logicielsmoto.com

Nous sommes le 18 Avr 2024, 09:24

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 281 messages ]  Aller à la page Précédente  1 ... 11, 12, 13, 14, 15, 16, 17 ... 19  Suivante
Auteur Message
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 01 Déc 2020, 03:47 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
Je tourne en rond ! je comprend pas pourquoi ça fonctionne pas !

sujet : stocker la valeur (16bits) la plus petite des (DG_UP, DG_RIGHT, DG_DOWN, DG_LEFT) à l'adresse $blinky_G_smaller_dist, puis $pinky_G_smaller_dist
(le principe de trouver la plus petite valeur fonctionne, pas de soucis)

problème : sauvegarder la valeur 16bits à l'adresse $blinky_G_smaller_dist puis $pinky_G_smaller_dist

donc je réserve les adresses
Code:
DG_UP           RMB     2    ;* carreX + carreY up    (DiSTAnce Ghost/Player).  va contenir une valeur 16bits
DG_RIGHT      RMB     2    ;* carreX + carreY right (DiSTAnce Ghost/Player).  va contenir une valeur 16bits
DG_DOWN      RMB     2    ;* carreX + carreY down  (DiSTAnce Ghost/Player). va contenir une valeur 16bits
DG_LEFT         RMB     2    ;* carreX + carreY left  (DiSTAnce Ghost/Player).     va contenir une valeur 16bits
   
blinky_G_smaller_dist    RMB     2       ; adresse($9811 $9812) qui va contenir la valeur 16bits de blinky     
pinky_G_smaller_dist     RMB     2        ; adresse($981B $981C) qui va contenir la valeur 16bits de pinky     

ghost_G_smaller_dist    RMB     2        ; adresse($9807 $9808) qui va pointé sur blinky_G_smaller_dist ou pinky_G_smaller_dist


je définie l'emplacement de ghost_G_smaller_dist pour y stocker la valeur 16bits dedans plutard !
Code:
            LDD #blinky_G_smaller_dist             <--- là D=$9811 (donc A=$98 et B=$11)
            STD ghost_G_smaller_dist                <--- donc ici ghost_G_smaller_dist   pointe   $9811


1 - trouver la plus petite entre ces 4 valeur 16bit (DG_UP, DG_RIGHT, DG_DOWN, DG_LEFT) (on va dire que c'est déjà calculé !)
2 - puis la stocker dans ghost_G_smaller_dist (qui sera donc l'adresse blinky_G_smaller_dist)
Code:
            LDD  DG_UP
            CMPD DG_RIGHT
            BLO smaller1a
            LDD  DG_RIGHT
smaller1a   STD  ghost_G_smaller_dist            <--- ici je stock bien la valeur qui est en(DG_UP ou DG_RIGHT) dans $9811 $9812 ??
            LDD  ghost_G_smaller_dist
            CMPD DG_DOWN
            BLO smaller2a
            LDD  DG_DOWN
smaller2a   STD  ghost_G_smaller_dist           
            LDD  ghost_G_smaller_dist
            CMPD DG_LEFT
            BLO smaller3a
            LDD  DG_LEFT
smaller3a   STD  ghost_G_smaller_dist

donc ici je devrais avoir la plus petite valeur qui sera contenu dans ghost_G_smaller_dist donc au adresse $9811 $9812 donc en blinky_G_smaller_dist ??




- le but est de faire varier l'adresse ghost_G_smaller_dist à chaque boucle (ici 2 boucles) pour stocker 2 valeurs 16bits différentes (pour mettre à jour les valeurs qui sont en blinky_G_smaller_dist puis pinky_G_smaller_dist).


-Pour qu'au final je définissent la direction à prendre en faite.
-Donc [ ghost_G_smaller_dist est blinky_G_smaller_dist ] puis [ ghost_G_smaller_dist est pinky_G_smaller_dist ] (puis on loop)
Code:
    LDD  DG_UP
    CMPD ghost_G_smaller_dist           
    BEQ ghost_move_up
    LDD  DG_RIGHT
    CMPD ghost_G_smaller_dist
    BEQ ghost_move_right
    LDD  DG_DOWN
    CMPD ghost_G_smaller_dist
    BEQ ghost_move_down
    LDD  DG_LEFT
    CMPD ghost_G_smaller_dist
    BEQ ghost_move_left





Désoler si c'est le bordel, pas évident d'expliquer !
merci

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 01 Déc 2020, 07:33 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1804
Localisation: Brest
Oui c'est compliqué. J'arrive pas à comprendre. Parfois tu parles de l'adresse ghost_G_smaller_dist, et parfois d'une la valeur en ghost_G_smaller_dist. C'est pas clair. Il me semble qu'il y a une confusion?

Qu'est supposé contenir ghost_G_smaller_dist ? Une adresse ou une valeur ? Si c'est une adresse il faut utiliser une double indirection alors que toi tu y stockes une valeur.
Code:
LDD  DG_UP
            CMPD DG_RIGHT
            BLO smaller1a
            LDD  DG_RIGHT
smaller1a   STD  ghost_G_smaller_dist            <--- ici je stock bien la valeur qui est en(DG_UP ou DG_RIGHT) dans $9811 $9812 ??
Je pense que le code devrait ressembler à
Code:
            LDD  #DG_UP
            STD   ghost_G_smaller_dist
            LDD  DG_UP
            CMPD DG_RIGHT
            BLO smaller1a
            LDD  #DG_RIGHT
            STD  ghost_G_smaller_dist
smaller1a
            ...suite...
si tu veux y stocker une adresse. Note: ce code est moche et pas optimal, il pourrait être plus court en utilisant X pour y stocker une adresse, mais on s'en fiche pour le moment.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 01 Déc 2020, 12:48 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
oui je dois certainement cafouiller entre valeur et adresse !
je sais j'aurai du utiliser X pour les adresses, je vais changer ça, j'y verrais plus clair ...

merci.

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 07:32 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Je ne comprends pas très bien ce que tu cherches à expliquer mais tes routines peuvent être grandement simplifiées. Comme par exemple:

Code:
            LDD  DG_UP
            CMPD DG_RIGHT
            BLO smaller1a
            LDD  DG_RIGHT
            Ici ghost_G_smaller_dist prend la valeur DG_UP ou DG_RIGHT. Inutile de la stocker pour la recharger ensuite
smaller1a   CMPD  DG_DOWN           
            BLO smaller2a
            LDD  DG_DOWN
smaller2a   CMPD DG_LEFT           
            BLO smaller3a
            LDD  DG_LEFT
smaller3a   STD  ghost_G_smaller_dist

            En fin de routine tu sauvegardes ghost_G_smaller_dist donc aux adresses $9811 $9812


Et

Code:
    LDD  ghost_G_smaller_dist
    CMPD DG_UP           
    BEQ ghost_move_up
    CMPD DG_RIGHT
    BEQ ghost_move_right
    CMPD DG_DOWN
    BEQ ghost_move_down
    CMPD DG_LEFT
    BEQ ghost_move_left


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 08:38 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1804
Localisation: Brest
Attention, le soucis est qu'ici on ne veut pas trouver la valeur la plus petite, mais son adresse (pour autant que j'ai bien compris.) Cela complique un peu les choses.

Je ne comprends pas non plus pourquoi tu remplaces les BLO par des BEQ. Ca n'est pas équivalent.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 13:21 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
J'ai super simplifié ce que je cherche à traduire en ASM qui va résoudre mon soucis.

voila ce que j'essaye de faire en asm :

a = $00 (valeur 8bits)
blinky = $1111 (valeur 16bits)
pinky = $2222 (valeur 16bits)
ghost = $0000 (valeur 16bits)


if a=1 then ghost=blinky
if a=2 then ghost=pinky

compare ghost à $2222
BEQ branchement


Donc un coup "ghost" = valeur de blinky et l'autre coup "ghost" = valeur de pinky.

ps: le code n'a pas d'intérêt en soit, c'est juste pour trouver les bonnes syntaxes en asm que j'ai besoin en faite.

:voyons:

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 15:21 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1804
Localisation: Brest
Ah oui donc c'est bel et bien les BEQ dont jasz parle dont tu as besoin.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 15:35 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
je test ce que jasz m'a expliqué ! pour voir ....

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 17:21 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
adnz a écrit:
voila ce que j'essaye de faire en asm :

a = $00 (valeur 8bits)
blinky = $1111 (valeur 16bits)
pinky = $2222 (valeur 16bits)
ghost = $0000 (valeur 16bits)


if a=1 then ghost=blinky
if a=2 then ghost=pinky


Je suppose que A (valeur 8bits) est issue de D.

En supposant ceci on peut dire
blinky = #0111
pinky = #FF22

Donc si A>0 then ghost=blinky et si A<0 then ghost=pinky

Code:
     LDA ghost_G_smaller_dist   ; on a besoin que de A
     BGT blinky
     BLT Pinky


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 17:30 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
ici "a" represente l'index de mes fantômes. (1 blinky, 2 pinky, 3 inky, 4 clyde)

et en fonction de a=1 ou 2 ou 3 ou 4
ghost = blinky ou pinky ou inky ou clyde

c'est juste que mon algo de calcul que j'appel va utiliser "ghost" mais en tant que blinky pinky inky et clyde.
mais avant d'appeler j'ai besoin d'initialiser ghost en tant que blinky ou pinky ou inky ou clyde.

je fais ça car j'ai besoin de garder quelque part chaque valeur de : blinky pinky inky et clyde pour l'appel suivant...


je pense que ce que j'arrive pas à faire c'est faire pointé "ghost" sur adresse1, puis au tour suivant faire pointé "ghost" sur adresse2, pour qu'a chaque tour je récupére la valeur stocké en adresse1 ou adresse2 ! :voyons:

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 03 Déc 2020, 18:57 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Ah ok, je comprends un peu mieux.

Donc partons du principe binaire que
A=1 pour blinky
A=2 pour pinky
A=4 pour inky
A=8 pour clyde

Pour
Code:
     LDA  ghost_in_the_shell
     ANDA #$F           ;je réserve que le poids faible de l'octet (facultatif)
     LSRA
     BEQ  .blinky
     LSRA
     BEQ  .pinky
     LSRA
     BEQ  .inky
     LDD  clyde_G_smaller_dist
     RTS
.blinky
     LDD  blinky_G_smaller_dist
     RTS
.pinky
     LDD  pinky_G_smaller_dist
     RTS
.inky
     LDD  inky_G_smaller_dist
     RTS

     Et au retour du RTS tu as

     STD  ghost_G_smaller_dist


D'après ce que je comprends c'est ce que tu cherches... ou presque.

Par la même occasion tu peux garder A=1, 2, 3 ou 4 et remplacer LSRA par DECA. C'est la même chose mais avec un ANDA #7 ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 04 Déc 2020, 00:25 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
j'ai du mal là, j'ai fais un truc sur papier pour voir où est mon erreur de compréhension.

Est ce qu'il y a un truc faux dans cette enchainement ?

Image

[modif]
ok j'ai capté ce qu'il me manque (je crois) ...

c'est au niveau de STD ghost , dans les 2 cas STD ghost execute STD $9808

alors que je voudrais que le premier STD ghost soit STD $9800
puis le 2eme STD ghost soit STD $9802
tout en gardant la syntaxe STD ghost (changer le pointage de ghost en faite)

je pense que STD ghost c'est pas bon.

je dois faire un truc du genre :
STY ghost (pour mettre $9800 dans Y)
puis mettre D -> $9800 (STY ,D)
.... c'est là que je cafouille.!

je crois que je dois faire un truc comme ça :

LDY ghost
STD ,Y

OK : bon j'ai testé avec le debugger pas à pas ! c'est bon j'ai la bonne valeur où il faut ! oufff
ça fait depuis ce weekend que je galère là dessus.
bon maintenant je vais appliquer ça à mon code....

_________________
Image


Dernière édition par adnz le 05 Déc 2020, 03:30, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 04 Déc 2020, 07:59 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Si dans ta séquence
LEAX, #blinki
STX, #ghost
...
LEAX, #pinky
STX, #ghost
...
STD, #ghost

Ici si D renvoie toujours la même adresse c'est que tu as cafouillé quelque part dans le calcul.
Mais pourquoi réserver X (STX)? Si tu en as besoin dans ton calcul le couple PSHS X / PULS D (récupération de X dans D) ne mange pas de pain ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 04 Déc 2020, 08:29 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1804
Localisation: Brest
Oui LDX/STX est plus rapide et plus court que LDY/STY.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 05 Déc 2020, 04:05 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
Merci les gars, le problème précédent est résolu :good:

Dernier problème à résoudre pour que l'IA soit fonctionnelle pour tous les fantômes.

- on considère que valeur dans D : OK (vérifié dans le debugger) peut importe la valeur, ex: D = $1234
- valeur à comparer : fausse !

Image

1 - en ghost_DG_UP (ici $97CA) j'ai stocké l'adresse $97D4 (qui correspond à blinky_DG_UP)
2 - en $97D4(blinky_DG_UP) j'ai stocké la valeur $7777(variable selon le calcul IA)

Donc je dois comparer D à #$7777 mais en utilisant ghost_DG_UP seulement, comme ça.
CMPD ghost_DG_UP (CMPD #$7777)

mais je me retrouve actuellement avec :

CMPD ghost_DG_UP (CMPD $97D4)

_________________
Image


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 281 messages ]  Aller à la page Précédente  1 ... 11, 12, 13, 14, 15, 16, 17 ... 19  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 33 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com