Visual Studio Code et BartmanAbyss

Forum Amiga Coding Visual Studio Code et BartmanAbyss

  • Ce sujet contient 21 réponses, 5 participants et a été mis à jour pour la dernière fois par stephbb75, le il y a 1 mois et 3 semaines.
  • Créateur
    Sujet
  • #177260
    stephbb75
      • Level 10
      • Messages : 1104

      Salut,

      Je tente de faire un peut de C pour Amiga mais sur mon PC (pour des raisons pratique  pour moi !).
      Mais j’arrive pas à grand choses :wacko:
      J’ai les dernière version de tout.

      Si je prend se code :
      http://www.pjhutchison.org/tutorial/graphics.html
      Qui ma fois est tout con (rien de très spécial) cela compile sans problème sur Amiga avec StormC mais pas sur le PC.
      Il ne connais pas #include <stdlib.h> (un comble !)
      Du coup la fonction rand() bas il ne la connais pas !

      si je retire l’include et la fonction il compile :yahoo:

      mais il explose au link :rant:
      undefined reference to `IntuitionBase’
      undefined reference to `GfxBase’
      undefined reference to `SysBase’

      et j’en passe !!!!

      J’ai tester plusieurs petit programme (ouvrir un simple fenêtre !) et j’ai toujours des erreurs :negative:

      Quelqu’un a réussit à compiler un autre truc que le code d’exemple ?

       

      P.S.
      J’ai tenté d’ajouter les définitions qu’il y a dans le code de démos …
      // We need to declare the libraries as “externally_visible” since we are using the option -fwhole-program in the Makefile
      __attribute__((externally_visible)) struct ExecBase *SysBase;
      Pareil des erreurs…

      https://youtube.com/@stephbb75

    Affichage de 15 réponses de 1 à 15 (sur un total de 21)

    Partager sur vos réseaux sociaux préférés :
    Facebooktwitterredditpinterestlinkedintumblrmail

    • Auteur
      Réponses
    • #177297
      Jeeg
        • Level 5
        • Messages : 212

        Salut,

        L’extension BartmanAbyss pour vscode c’est fait pour faire de la démo ou des jeux en très bas niveau, il n’y a les les bibliothèques standards comme amiga.lib & co.

        Il existe un fork fait par jyoberle qui devrait t’aller mieux pour ce que tu veux faire.
        https://github.com/jyoberle/vscode-amiga-debug

        Sinon tu as toujours la possibilité d’utiliser des compilateurs sur Amiga comme SAS-C ;-)

        https://www.amigapassion.fr/abbaye/



        #177300
        slack
          • Level 7
          • Messages : 459

          @stephbb75,

          Quelle configuration utilises-tu exactement ? Peux-tu publier un source C et les commandes exactes que tu lances ?

          Pour compiler sur un PC, un source C destiné à l’amiga, il te faut un cros-compilateur. Quel(s) logiciel(s) utilises-tu ?

          #177301
          abzalon56
            • Level 4
            • Messages : 115

            S’il trouve pas stdlib, il te manque peut etre un include path dans la conf ?

            Quand tu dis “sur PC” tu cross compile ou tu passes par un émulateur ?

            Bartman Abyss, la réponse est dans le titre :) Je connais pas mais ca m’intéresse , je vais jeter un coup d’oeil !

            #177304
            stephbb75
              • Level 10
              • Messages : 1104

              Salut @Jeeg,

              Il existe un fork fait par jyoberle qui devrait t’aller mieux pour ce que tu veux faire.

              Oui je l’ai testé, le problème c’est que je ne comprend rien a ce qu’il faut faire pour que WinUae (ou FS_UAE) fonctionne, il me dit toujours que les assign ne sont pas bon !
              Le programme compilé fonctionne bien sur Amiga (ou émulateur) mais le but est aussi de pouvoir faire du debug ;-)

              Sinon tu as toujours la possibilité d’utiliser des compilateurs sur Amiga comme SAS-C

              Oui j’en fait aussi, mais pour des raisons pratique, j’ai le clavier du 2000 sur les genoux, c’est pas simple d’écrire longtemps du code comme cela :negative:

              https://youtube.com/@stephbb75

              #177305
              stephbb75
                • Level 10
                • Messages : 1104

                Salut @slack

                Quelle configuration utilises-tu exactement ?

                C’est dans le titre ;-)
                Visual Studio Code et l’extension BartmanAbyss.
                J’ai testé avec l’extension de jyoberle (lien dans le message de Jeeg), voire ma réponse :mail:

                Peux-tu publier un source C

                Il est dans le lien donnée dans mon 1er message, rien de spécial, ouverture d’un fenêtre et dessin de 10 carres.
                Il compile très bien sur Amiga.

                il te faut un cros-compilateur. Quel(s) logiciel(s) utilises-tu ?

                Oui, c’est GCC qui compile…

                 

                https://youtube.com/@stephbb75

                #177317
                stephbb75
                  • Level 10
                  • Messages : 1104

                  Pour info :

                  Si vous utilisez le fork fait par jyoberle sur un A500 en 1.3, il faut ajouter sur la disquette de boot (1.3) un répertoire “Locale” car sa startup-sequence fait un assign dessus.

                  J’avance un peut :lol:

                  https://youtube.com/@stephbb75

                  #177376
                  Jeeg
                    • Level 5
                    • Messages : 212

                    @stephbb75, effectivement, en plus de pointer vers un fichier rom kickstart, il faut aussi pointer vers un disque système de type floppy ou même un dossier qui est un HDF pour WinUae, c’est ce que je fais et cela fonctionne bien.

                    Bonne continuation.

                    https://www.amigapassion.fr/abbaye/

                    #177385
                    stephbb75
                      • Level 10
                      • Messages : 1104

                      Salut @Jeeg,

                      Oui cela fonctionne, pareil pour le 3.1 il faut ajouter à la disquette de boot un rep Font et Locale pour que cela fonctionne.

                      Maintenant je compile de débug le programme d’exemple sans problème :good:

                      Mais pas un autre code :rant:

                      Code qui compile sur Amiga avec SAS et StromC !!!!

                      Si qq’un arrive a compiler et exécuter ce programme :

                      /* Graphics Example 1 */
                      #include <proto/intuition.h>
                      #include <proto/gadtools.h>
                      #include <proto/graphics.h>
                      #include <proto/layers.h>
                      #include <proto/exec.h>
                      #include <proto/dos.h>
                      #include <intuition/intuition.h>
                      #include <stdlib.h>

                      /* Random no between 0 and n */
                      int randomNum(int n) {
                      return (rand() % n);
                      }

                      int main(void) {
                      struct Window *myWindow;
                      struct RastPort *rp;
                      int closewin = FALSE, num;
                      struct IntuiMessage *msg;
                      ULONG msgClass;
                      long startx,starty,width;

                      myWindow = OpenWindowTags(NULL,
                      WA_Left, 20, WA_Top, 20,
                      WA_Width, 200, WA_Height, 150,
                      WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW,
                      WA_Flags, WFLG_SIZEGADGET | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_ACTIVATE |
                      WFLG_SMART_REFRESH,
                      WA_Title, “My Window”,
                      WA_PubScreenName, “Workbench”,
                      TAG_DONE);
                      /* Get Window’s Rastport */
                      rp = myWindow->RPort;

                      /* Draw some random colour boxes */
                      for(num=1; num<=10; num++) {
                      /* Set foreground colour */
                      SetAPen(rp, (ULONG)randomNum(32)+1);
                      startx = 10 + randomNum(50);
                      starty = 10 + randomNum(50);
                      width = 20 + randomNum(50);
                      /* Move to start position and draw 4 lines */
                      Move(rp, startx, starty);
                      Draw(rp, startx + width, starty + 0);
                      Draw(rp, startx + width, starty + width);
                      Draw(rp, startx + 0, starty + width);
                      Draw(rp, startx + 0, starty + 0);
                      }

                      while (closewin == FALSE) {
                      Wait(1L << myWindow->UserPort->mp_SigBit);
                      msg = GT_GetIMsg(myWindow->UserPort);
                      msgClass = msg->Class;
                      GT_ReplyIMsg(msg);
                      if (msgClass == IDCMP_CLOSEWINDOW) {
                      CloseWindow(myWindow);
                      closewin = TRUE;
                      }
                      if (msgClass == IDCMP_REFRESHWINDOW)
                      RefreshWindowFrame(myWindow);
                      }

                      return(0);
                      }

                      moi j’y arrive pas, ente les include qu’il ne trouve pas, puis au link cela merde aussi !!!

                       

                      https://youtube.com/@stephbb75

                      #177459
                      JOB
                        • Level 0 - Newbie
                        • Messages : 5

                        Bonsoir @stephbb75,

                        Le code suivant compile et ouvre la jolie fenêtre (sous 3.1) :

                        /* Graphics Example 1 */
                        #include <proto/intuition.h>
                        #include <proto/gadtools.h>
                        #include <proto/graphics.h>
                        #include <proto/layers.h>
                        #include <proto/exec.h>
                        #include <proto/dos.h>
                        #include <intuition/intuition.h>
                        #include <stdlib.h>

                        // We need to declare the libraries as “externally_visible” since we are using the option -fwhole-program in the Makefile
                        __attribute__((externally_visible)) struct ExecBase *SysBase;
                        __attribute__((externally_visible)) struct IntuitionBase *IntuitionBase = NULL;
                        __attribute__((externally_visible)) struct UtilityBase *UtilityBase = NULL;
                        __attribute__((externally_visible)) struct GfxBase *GfxBase = NULL;
                        __attribute__((externally_visible)) struct Library *GadToolsBase = NULL;

                        /* Random no between 0 and n */
                        int randomNum(int n) {
                        return (rand() % n);
                        }

                        int main(void) {
                        struct Window *myWindow;
                        struct RastPort *rp;
                        int closewin = FALSE, num;
                        struct IntuiMessage *msg;
                        ULONG msgClass;
                        long startx,starty,width;

                        SysBase = *((struct ExecBase**)4UL);
                        IntuitionBase = (struct IntuitionBase *)OpenLibrary((CONST_STRPTR)”intuition.library”,0L);
                        UtilityBase = (struct UtilityBase *)OpenLibrary((CONST_STRPTR)”utility.library”,0L);
                        GfxBase = (struct GfxBase *)OpenLibrary(“graphics.library”,0L);
                        GadToolsBase = OpenLibrary(“gadtools.library”,0L);

                        if(IntuitionBase && UtilityBase && GfxBase && GadToolsBase)
                        {
                        myWindow = OpenWindowTags(NULL,
                        WA_Left, 20, WA_Top, 20,
                        WA_Width, 200, WA_Height, 150,
                        WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW,
                        WA_Flags, WFLG_SIZEGADGET | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_ACTIVATE |
                        WFLG_SMART_REFRESH,
                        WA_Title,”My Window”,
                        WA_PubScreenName, “Workbench”,
                        TAG_DONE);

                        /* Get Window’s Rastport */
                        rp = myWindow->RPort;

                        /* Draw some random colour boxes */
                        for(num=1; num<=10; num++) {
                        // Set foreground colour
                        SetAPen(rp, (ULONG)randomNum(32)+1);
                        startx = 10 + randomNum(50);
                        starty = 10 + randomNum(50);
                        width = 20 + randomNum(50);
                        /* Move to start position and draw 4 lines */
                        Move(rp, startx, starty);
                        Draw(rp, startx + width, starty + 0);
                        Draw(rp, startx + width, starty + width);
                        Draw(rp, startx + 0, starty + width);
                        Draw(rp, startx + 0, starty + 0);
                        }

                        while (closewin == FALSE) {
                        Wait(1L << myWindow->UserPort->mp_SigBit);
                        msg = GT_GetIMsg(myWindow->UserPort);
                        msgClass = msg->Class;
                        GT_ReplyIMsg(msg);
                        if (msgClass == IDCMP_CLOSEWINDOW) {
                        CloseWindow(myWindow);
                        closewin = TRUE;
                        }
                        if (msgClass == IDCMP_REFRESHWINDOW)
                        RefreshWindowFrame(myWindow);
                        }
                        }

                        if(IntuitionBase != NULL)
                        CloseLibrary((struct Library *)IntuitionBase);

                        if(UtilityBase != NULL)
                        CloseLibrary((struct Library *)UtilityBase);

                        if(GfxBase != NULL)
                        CloseLibrary((struct Library *)GfxBase);

                        if(GadToolsBase != NULL)
                        CloseLibrary(GadToolsBase);

                        return(0);
                        }

                        __attribute__((used)) __attribute__((section(“.text.unlikely”))) void _start(int argc, char **argv)
                        {
                        main();
                        }

                        Pour ceci  (je préfère détailler pour être sûr que cela soit reproductible) :

                        • j’ai utilisé la dernière version de l’extension (https://marketplace.visualstudio.com/items?itemName=JOB.amiga-debug-job)
                        • j’ai ouvert un projet sur un répertoire vide puis après Ctrl+Shift+P, j’ai choisi la commande “Amiga: Init Project with Libs”
                        • pour l’Amiga 500, j’ai renseigné les chemins vers un kickstart et un workbench dans launch.json
                        • puis j’ai remplacé tout le code dans main.c par celui ci-dessus

                        Quelques remarques :

                        • Il n’y a pas de code de startup qui ouvre par exemple la dos.library (contrairement au comportement par défaut de SAS). Il faut donc ouvrir toutes les bibliothèques dont on a besoin “à la main”
                        • Le linker trouve la fonction “rand” dans la bibliothèque (statique) clib2. Toutes les fonctions accessibles de la clib2 sont décrites sur la page https://github.com/jyoberle/clib2. La fonction “rand” est très simple et il n’est pas nécessaire d’initialiser la clib2 avant d’appeler cette fonction
                        • Normalement, il faut en effet initialiser la clib2 avant d’appeler ses fonctions

                        Pour cette dernière raison, je conseille de partir du squelette de code qu’on obtient avec la commande “Amiga: Init Project with Libs” puis :

                        • de modifier OPTION_USE_CLIB2 pour le mettre à 1 (#define OPTION_USE_CLIB2 1)
                        • d’insérer son propre code en remplacement de l’appel à la fonction “MUIShowHide”

                        Cette approche assure aussi que MUI fonctionnera correctement. J’ai passé pas mal de temps à débugger ce dernier cas, car les versions récentes de gcc (contrairement à SAS par exemple) réalisent des optimisations assez poussées qui font que les fonctions variadiques de MUI comme “MUI_NewObject” voyaient leurs paramètres disparaître purement et simplement (gcc ne les voyait pas être utilisés et donc ne les passait pas dans la pile !). D’où ma redéfinition de certaines fonctions de MUI dans les fichiers main.c et misc.c.

                        Je travaille sur une version améliorée de la clib2 et il y aura donc aussi une nouvelle version de l’extension. Si les Amigaïstes du forum ont des idées d’amélioration ou des questions d’utilisation, qu’ils n’hésitent pas à revenir vers moi !

                        #177460
                        stephbb75
                          • Level 10
                          • Messages : 1104

                          Salut @JOB

                          Merci, je vais tester et donnerais le résultat ;-)

                          Mais se seras que la semaine prochaine, je n’aurais pas d’ordi se WE :whistle:

                          https://youtube.com/@stephbb75



                          #177571
                          stephbb75
                            • Level 10
                            • Messages : 1104

                            Salut,

                            J’ai refait comme indiqué (pour 500 en 1.3, 500 3.1 et 1200 3.1).
                            (plusieurs fois…)

                            Cela compile et exécute WinUae. :rant:

                            MAIS…

                            Il lui manque un librairie, la utility.library pour exécuter le a.exe ! :rant:
                            (et je ne sais même pas ou la trouver, mais j’ai chercher moins de 5 minutes!)

                            Je vais arrêter la pour le moment tout en suivant les futures versions ;-)
                            La je passe trop de temps a tenter de simplement compiler (bien que maintenant celui ci est ok) et exécuter (la fonctionne pas encore pour moi) un simple code.

                            je pense qu’il faudrait fournir un DH0 bootable, même s’il faut au préalable lui copier quelques fichier système (bien que je ne suis pas sur, je ne connais pas suffisamment, qu’il serais possible de filer un boot qui fonctionne, les ROM ne son pas distribuables, mais une disquette bootable elle oui, donc un DD aussi je suppose)

                            En tout K cela semble pas mal pour faire un dev qui n’utilise pas le système (type demo) mais pour faire un programme qui utilise le système il faut encore trop bidouiller, autant le faire sur l’Amiga :lol:

                            https://youtube.com/@stephbb75

                            #177576
                            slack
                              • Level 7
                              • Messages : 459

                              @stephbb75,

                              La bibliothèque utility.library est apparue avec le système 2.0.

                              Tu peux consulter http://amigadev.elowar.com/read/ADCD_2.1/Libraries_Manual_guide/node04A8.html

                              Est-ce que ton programme fonctionne sur la version  3.1 de l’OS ?

                              #177582
                              stephbb75
                                • Level 10
                                • Messages : 1104

                                Salut,

                                Est-ce que ton programme fonctionne sur la version 3.1 de l’OS ?

                                non il me demande la même lib, qui n’est pas présente sur mes systèmes 1.3, 3.1 et 3.2 !

                                https://youtube.com/@stephbb75

                                #177589
                                slack
                                  • Level 7
                                  • Messages : 459

                                  @stephbb75,

                                  Je n’ai pas d’amiga sous la main mais je pense que cette bibliothèque est en ROM, dans le kickstart. Je testerai sur mon 1200 en 3.0.

                                  #177591
                                  stephbb75
                                    • Level 10
                                    • Messages : 1104

                                    @slack,

                                    Je ne sais pas, mais sur mon install 3.2 voici ce que j’ai en tentent d’exécuter le programme compilé avec VSC :

                                    Pareil en 3.1, 3.9 et 3.2

                                    https://youtube.com/@stephbb75

                                  Partager sur vos réseaux sociaux préférés :
                                  Facebooktwitterredditpinterestlinkedintumblrmail
                                  Affichage de 15 réponses de 1 à 15 (sur un total de 21)
                                  • Vous devez être connecté pour répondre à ce sujet.