Fonction en amiblitz3 avec code ASM

6 sujets de 1 à 6 (sur un total de 6)

  • kawa600

      #332638

      Bonjour,

      Quelqu’un est-il déjà parvenu à faire une fonction en blitz3 avec uniquement du code assembleur et à récupérer le résultat à la sortie en l’assignant directement à une variable?

      J’ai fait des essais, mais sans succès, la fonction fait bien son boulot, mais à la sortie de la fonction le résultat n’est pas récupéré dans la variable. Je suis obligé de pousser le contenu de d0 dans ma variable avec un PutReg. Alors que d’après la doc, les fonctions pure assembleur retourne le contenu du registre d0 à la sortie.


      Function ReadRawKeyASM{}
      MOVE.b    $bfec01,d0
      ROR.b     #1,d0
      NOT.b     d0
      AsmExit
      End Function

      et dans le programme on devrait avoir


      k = ReadRawKeyASM{}

      mais comme ça ne fonctionne pas, je suis obligé de faire


      ReadRawKeyASM{}
      PutReg d0, k

      Je sais que ce n’est qu’une ligne de code en plus, mais c’est pas vraiment dans l’optique d’une fonction…
      Si quelqu’un a la solution je suis preneur.

      Merci!!!

      Amiga 4000/040/CyberstormPPC604e/CybervisionPPC - CD32+SX1 - Vampire V4 - Amiga500 - Amiga1200

      __sam__

        #332643

        Je me demande: ne faudrait-il pas spécifier la taille de la donnée retournée et faire [code]k.b = ReadRawKeyASM{}[/code] En effet sans spécifier le type de variable, k est ar défaut un “.q” c’est à dire un fixed-point et le LSByte de d0 ne vaudrait alors une fraction d’entier. Si tu print k avec pas assez de chiffres après la virgule, tu ne verra que du 0 indépendamment de la valeur du LSB.

        Enfin, c’est une hypothèse car je ne connais pas spécialement le blitz basic, mais j’ai survolé: https://fr.scribd.com/document/253917981/Blitz-Basic

        Samuel.

        Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
        A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
        A500 Vampire V2+ ^8^ 🙂
        (mais aussi TO8, TO8D, TO9. Groupe PULS.)

        kawa600

          #332656

          Merci __sam__ pour ta réponse, j’ai testé en spécifiant la taille de la donnée, mais sans résultat!!!

          Je vais réinstaller blitzbasic2 et faire un essai. Peut-être qu’il y a une différence entre blitz2 et blitz3.

          Amiga 4000/040/CyberstormPPC604e/CybervisionPPC - CD32+SX1 - Vampire V4 - Amiga500 - Amiga1200

          kamelito

            #332742

            Trace ton exe avec Monam  par exemple pour voir le code généré.

            Anonyme

              #332745

              Tu utilises qu’elle version d’amiblitz ?

              J’ai pas mal de soucis avec la 3.6 et 3.6.1 , je suis retourné en 3.5 .

              kawa600

                #332779

                @kamelito

                Merci pour le conseille

                @Mister JBAM

                C’est la version 3.6.1 que j’utilise, c’est vrai que j’ai eu quelques petits plantages de l’IDE, mais pour le reste je trouve que ça va.

                Pour mon problème, j’ai touvé. C’est la remarque de __sam__ qui m’a incité à relire la doc.

                Il y a un petit paragraphe qui parle des types retourner par une fonction et un seul exemple. Je crois que c’est un des reproches que je pourrais faire au manuel du blitzbasic2.1 que j’ai sur le bord de mon bureau, c’est le peu d’explication et le manque d’exemples. Par contre sur le site AmiBlitz3 c’est bien expliqué, mais je n’ai pas eu le réflexe de commencer par là. Je sens que je vais mettre tout ça en PDF et m’imprimer le manuel de la version3 pour le mettre aussi sur mon bureau.

                En fait le type retourné doit être spécifier avec le mot clé Function lors de la déclaration de la fonction

                la bonne syntaxe, c’est

                Function.b ReadRawKeyASM{}
                MOVE.b    $bfec01,d0
                ROR.b     #1,d0
                NOT.b     d0
                AsmExit
                End Function

                encore merci à tous pour votre aide et vos idées. Je pouvoir continuer à avancer sur mon jeu… 😉

                Amiga 4000/040/CyberstormPPC604e/CybervisionPPC - CD32+SX1 - Vampire V4 - Amiga500 - Amiga1200

              6 sujets de 1 à 6 (sur un total de 6)

              • Vous devez être connecté pour répondre à ce sujet.

              Forums AmigaOS, MorphOS et AROS Développement Fonction en amiblitz3 avec code ASM

              Amiga Impact