Utiliser les includes Commodore en assembleur avec asmone

15 sujets de 16 à 30 (sur un total de 33)

  • slack

      #376878

      @piark,

      Merci pour tes conseils et tes questions. Voici quelques mots pour te répondre et partager mon expérience.

      Je souhaite découvrir la programmation en assembleur sur amiga en respectant le système d’exploitation.

      J’ai déjà programmé en assembleur x86, en assembleur msp430 (un microcontroleur de Texas Instrument) et en C. En fonction du projet et des contraintes, l’assembleur ou le C peut être plus adapté que l’autre.

      J’ai une expérience très limitée des includes de Commodore mais actuellement, je préfère utiliser les includes que de retaper les offsets qui me sont nécessaires. Les inclusions multiples et les macros mal définies sont de vrais problèmes. Je verrai à l’utilisation.

      En assembleur sur msp430, j’avais programmé en bare metal, sans aucune bibliothèque. Le microcontorleur devait dialoguer avec un capteur et un afficheur texte. Donc j’ai déjà programmé :
      – la manipulation de chaines de caractères ;
      – les conversions entier binaire vers chaine hexadécimale ou chaine décimale ;
      – le dialogue avec les autres composants électroniques.

      Les 2 permiers points m’ont demandé de la reflexion et du temps de codage, de deboguage. Mais finalement, ces algorithmes sont classiques et faciles. Le 3 ème point a été bien plus difficile que les 2 autres : il faut parfois insérer dans le code, quelques instructions NOP (exactement le nombre nécessaire) pour respecter le timing des autres composants électroniques.

      Mes projets ? Actuellement, je m’inspire de programmes publiés par JEL dans ses tutoriels et de programmes publiés sur Obligement. J’aimerais écrire sur amiga un équivalent du programme syslog sur Linux, qui centralise et sauvegarde les messages que lui envoient les programmes.

      kamelito

        #376896

        Un syslog en C est dispo sur Aminet
        Sinon nouvel version d’Asmpro http://aminet.net/package/dev/asm/ASMPro1.20

        slack

          #376897

          @kamelito,

          Penses-tu à https://aminet.net/package/util/moni/SysLog ? Je.ne connaissais pas ce logiciel. Mon projet est moins ambitieux.

          Quelles différences entre asmoons et asmpro ?

          kamelito

            #376898

            Asmpro est toujours développé même si le cycle est lent, donc il contient moins de bugs et a plus de fonctionnalités. J’aime bien la coloration syntaxique sur Asmpro. Asmpro est basé sur AsmOne donc ils sont identique côté utilisation.

            piark

              #376910

              @slack pour de l’utilitaire, je partirais plutôt sur du C, mais je crois qu’il y à même d’autres langages que je ne maitrise pas, mais j’éviterais l’asm en tout cas.

              Rien qu’en debug tu comprendra vite que vouloir afficher les structures système avec le debug assembleur, c’est pas la joie.

              A mon avis, fais simple, du C pour de l’utilitaire système, et au pire, tu recode la partie critique en assembleur une fois ton algo déjà optimisé sous son fonctionnement et sa structure, ça sert à rien d’avoir du code rapide mais pas performant car mal étudié, et l’assembleur ça rajoute de la complexité pour rien je trouve dans ton cas.

              Et c’est un fan d’assembleur 68k qui te dis ça.

              Regarde du coté utilitaire snoopdos à mon avis si tu veux savoir un peu plus comment on debug des applis sur amiga, sachant qu’en général y’a pas de logs de sortie sur les applis autres qu’en mode console.

              a++
              piark

              thellier

                #376912

                Un jour il faudra que je vous montre comment avec gcc et mes propres outils j’arrive à générer un listing mixte assembleur/C depuis du C, ainsi on peut finement ajuster son C pour que l’ASM généré soit le meilleur possible voire même modifier une partie de l’ASM généré pour une plus grande optimisation, pour l’intégrer au projet à compiler
                Pour revenir au sujet: y a 30 ans déjà j’utilisais DevPac et ses macros pour avoir des appels systèmes propres (macros) en ASM

                piark

                  #376924

                  une autre idée aussi : J’ai oublié, BlitzBasic, qui permet d’utiliser directement bon nombre de fonctions système avec de bonnes performances au run, et qui lance compilé directement avec je crois un débogueur en plus (que j’ai pas testé), et ça c’est cool.
                  ( voire page 227 ) -> https://daemonbite.com/files/linked/BB21Manual.pdf

                  Donc je dirais , pour faire un « POC » (proof of concept), te fais pas chier, teste avec blitz en premier, et quand ça fonctionne ensuite, choix d’un autre langage.

                  Sachant qu’en blitz basic, on peut insérer du code assembleur directement dans le source basic, un peu adapté certes, mais assez proche et à priori aussi performant que de l’assembleur codé directement dans un environnement dédié (mais je ne sais pas si on peut spécifier le cpu cible).

                  slack

                    #376927

                    @piark,

                    J’ai débuté la programmation en basic sur Apple IIe. Cela ne nous rajeuni pas.

                    Le blizbasic est un langage que je connais pas. A découvrir un jour. Merci pour l’idée et le lien.

                    bob1969

                      #376936

                      Je te conseille aussi ce blitzbasic qui a revolutionné la programmation des l’amiga pour les non-professionnels.
                      le full assembleur, C’est pour les demos.. de nos jours…les jeunes appellent çà du BareMetal 🙂

                      slack

                        #376938

                        La programmation baremetal est celle qui se passe du système d’exploitation pour utiliser directement toute la puissance de l’ordinateur sans noyau, sans couche d’abstraction, sans pilote externe au programme.

                        On peut programmer en assembleur tout en respectant le système d’exploitation. Comme on peut programmer en baremetal en C.

                        Peut-on revenir à la question fondamentale : comment utiliser les includes de Commodore en assembleur ?

                        Pour quelle raison, Commodore a-t-il fourni 2 versions des includes pour le système 1.3 : des includes avec des commentaires et d’autres sans commentaires ? Seuls les seconds sont utilisables avec asm-one. J’ai le sentiment que pour cette version du système d’exploitation, Commodore a utilisé un assembleur incompatible avec asm-one.

                        kamelito

                          #376954

                          C’est une question à poser à un développeur comme Olaf “Olsen” Barthel qui traîne sur EAB.abime.net

                          __sam__

                            #376957

                            J’ai le sentiment que pour cette version du système d’exploitation, Commodore a utilisé un assembleur incompatible avec asm-one.

                            Ou c’est l’inverse: ASM-One qui est arrivé après la sortie des includes officiels ne supporte pas les includes « lourds » (avec commentaires).

                            Juste une hypothèse: Fondamentalement pour compiler on a pas besoin de commentaires. La place se fait rare sur les diskettes et le temps de compilation important. Donc C= a fournit 2 versions: Une avec les commentaires pour l’humain(ca sert de doc), l’autre pour mettre sur la diskette du projet asm. Elle prends moins de place et se compile plus vite.

                            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.)

                            slack

                              #376960

                              @sam
                              >Ou c’est l’inverse: ASM-One qui est arrivé après la sortie des includes officiels ne supporte pas les includes « lourds » (avec commentaires).

                              Effectivement, asm-one est arrivé après. J’ai essayé les includes du 1.3 car JEL se place sur 500 avec cette version de l’OS. Puis j’ai essayé les includes du 2.0.4, qui fonctionnent bien, avant d’utiliser les includes stripés du 1.3, qui fonctionnent bien aussi. Depuis, je utilise uniquement ces derniers pour mes projets qui sont dérivés des informations fournies par JEL.

                              Il me semble que dans les includes du 1.3 non stripés, les commentaires débutent par une étoile et non par un point virgule, comme les commentaires des includes des versions suivantes. Et cela bloque asm-one. Je pense que pour les versions 1.X d’amigaOS, Commodore a utilisé un assembleur incompatible avec les standards actuels.

                              Avec asm-one, on n’est pas obligé de copier les includes dans le répertoire des sources. Personnellement, je les ai copiées dans mon répertoire programmation-assembleur et j’indique en début de source, où trouver les includes. Cela fonctionne très bien.

                              La question de la puissance informatique se pose effectivement. Est-ce pour économiser de la puissance que Commodore a fourni 2 types d’includes pour le 1.3 ? Peut-être. Ma configuration ne me permet pas de répondre à cette question.
                              Sur mon 1200 avec son 68030, ses 8 Mo de FAST et son disque dur, les assemblages de mes sources actuels, sont quasiment instantanés et durent une fraction de seconde ou quelques secondes. Cela serait-il le cas sur un 500 non acceleré avec seulement 1 Mo de RAM et un lecteur de disquette ?

                              __sam__

                                #376962

                                Je pense que pour les versions 1.X d’amigaOS, Commodore a utilisé un assembleur incompatible avec les standards actuels.

                                Il me semble que dans les années 80 la syntaxe des instructions 68k n’était pas complètement standardisée (souvenez vous des syntaxes MIT et MOT(orola)), alors celles des commentaires suivant que ce sont des commentaires en début de ligne ou en cours de lignes étaient très variables (sur Sun on utilisait ‘|’ si le commentaire était sur la même ligne qu’une instruction, et un ‘#’ si le commentaire était en début de ligne si je me souviens bien).

                                C= a utilisé un format que certains compilos « actuels » ne supportent pas. C’est à ceux là de voir pourquoi ils ne supportent pas le format historique choisi par C=. Pour info, les exemples du Hardware Reference Manual utilisent indifféremment le ‘*’ ou le ‘;’ en début de ligne. Un assembleur amiga devrait accepter les deux formats de commentaires puisqu’on les trouve ensemble dans les fichiers ASM de référence.

                                La documentation sur les assembleurs Amiga indique au sujet des commentaires:

                                Assemblers vary in how they delimit comments but usually lines which begin with an asterisk will be treated as a whole line comment, any characters after a semicolon will similarly be ignored, and any text after the operands field will, providing it is separated by one or more spaces, usually also be treated as a comment.

                                Bref ya pas vraiment de délimiteur officiel puisqu’il peut ne pas avoir de délimiteur du tout ! Exemple:

                                  OpenLib move.l  library_name,a1             get library name
                                          move.l  _IntuitionBase,d0           get library base value
                                          beq     EXIT                        test result for success
                                          CALLSYS CloseLibrary,_AbsExecBase
                                  EXIT    rts                                 logical end of program

                                Pour info, le Hardware Manual indique:

                                Except as noted, 68000 assembly language examples have been assembled under the Innovatronics CAPE assembler V2.x, the HiSoft Devpac assembler V1.2, and the Lake Forest Logic ADAPT assembler 1.0. No substantial changes should be required to switch between assemblers.

                                Peut-être qu’au lieu d’utiliser ASM-One, il faudrait utiliser un de ces assembleurs ou au moins compatible avec ceux-là.

                                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.)

                                slack

                                  #376972

                                  @sam,

                                  Merci pour cette quantité impressionnante d’informations.

                                  Je découvre le format MIT. Quelle idée de faire aussi compliqué ?

                                  Lorque l’on débute, on utilise le matériel de tutoriels. C’est pour cette raison que j’utilise asm-one. Ce dernier est éditeur/assembleur/déboguer et j’en passe. Ce côté tout intégré edt agréable lorsque l’on débute.

                                  Il a me falloir rechercher les assembleurs cités dans le hardware manuel. J’espère qu’il y en a au moins un qui fonctionne sous amigaOS. Comme amigaOS a été développé sur station SUN, il n’est pas exclu que certains des logiciels cités fonctionne sur SunOS.

                                  J’ignorais que le monde de l’assembleur 68k était aussi riche.

                                15 sujets de 16 à 30 (sur un total de 33)

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

                                Forums AmigaOS, MorphOS et AROS Développement Utiliser les includes Commodore en assembleur avec asmone

                                Amiga Impact