Utiliser les includes Commodore en assembleur avec asmone
-
Bonjour,
Les tutoriels de JEL, comme
m’ont fait découvrir le plaisir de coder en assembleur sur amiga avec asm-one.
J’ai trouvé dans une image Iso d’un CDROM des fichiers includes de Commodore.
Actuellement, j’indique les offsets des fonctions des bibliothèques au début de mon source. Parfois, j’ajoute dans mon source l’inclusion du fichier proposé par JEL. Je préférerais utiliser les includes de Commodore, mais je n’ai pas trouvé comment faire : toutes mes recherches ont été vaines. Un gourou d’asm-one peut-il me donner un coup de main ? Merci d’avance.
Bonjour
Prend exemple sur les sources sur obligement.
J’avais retapé celui là car il était en image.
http://obligement.free.fr/articles/assembleur_visionneur_images_iff.phpL’exemple est bien dense. pour debuter mieux vaut ouvrir exec,open lib, intuition ou gfx library
et tu ecris « hello » au centre de l’ecranSi je me souviens,
openlib,
il faut charger les registres avec les parametres de la fonction avant l’appeller
ex OpenScreen de la graphicslibrary
D0 = position de l’ecran x
D1 =position de l’ecran y
D2 = Largeur w
D3 =hauteur h
D4 profondeur de couleur ( en bitplan)la fonction openscreen te renvoie l’adresse du rasport ouvert pour plot, draw, circle…
.
.
A0 adresse renvoyée avec openlib() puis jump de l’offsetJ utilisais que intuition et gfxlibrary avec assembleur Seka
mais c’est pareil.
cdlt,c’est assez simple, il te faut les autodocs avec les includes.
après tu fais de l’include des fichiers prévus pour l’assembleur dans ton source,
et tu utilise leurs macros et defines.
si tu les veux, si j’y pense ce week end quand je reprendrais le code sur le miga, j’essaierais de te trouver ça.
ça à cette tronche:
http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node00D8.htmlsi tu trouve le lha des includes and autodocs, tu aura gagné.
ensuite faudra bien inclure le nécéssaire, si tu en met trop tu va juste passer ta vie à compiler du rien…..
et si tu veux un exemple je ferais ça à l’occaze, c’est pas très compliqué.
envoi moi un MP si je réponds pas d’ici dimanche, je vais avoir un week end un peu chargé c’est possible que j’oublie…
Merci à tous pour vos réponses.
J’ai l’iso d’un CD-ROM amidev_12.iso qui contient des includes.
Je connais le site amigadev.elowar.com qui me permet de trouver des informations sur les fonctions des bibliothèques, les offests de ces fonctions et les structures qu’elles utilisent.
La partie programmation du site d’obligement est une de mes sources d’informations. Mais j’étais passé à côté de cette page : http://obligement.free.fr/articles/assembleur_visionneur_images_iff.php
Ce programme est effectivement trop complexe pour débuter avec les includes mais en simplifiant, je devrais pouvoir apprendre à coder avec les includes.
JEL fait un super travail. Sa progression est très pédagogique. Il m’a beaucoup apporté. J’essaye de créer quelques codes personnels.
Si quelqu’un pouvait m’indiquer comment modifier le fichier tuto45.s de JEL pour utiliser les includes, cela serait top. Pas besoin de créer un autre programme de toute pièce.
Salut,
Perso je ne me souvient pas avoir vraiment utilisé les include en ASM 😉
On faisais plus comme JEL.
J’ai pas encore eu le temps de voire cette vidéo….Et même bien plus crade, appelé directement l’adresse dans la ROM (du coup ce n’était plus compatible avec d’autre version …)
https://youtube.com/@stephbb75
Merci à vous tous pour vos précieux messages.
Voici où j’en suis.
En m’inspirant de http://obligement.free.fr/articles/assembleur_visionneur_images_iff.php
, j’ai tapé au début de mon source assembleur :FUNCDEF MACRO *function \1 EQU FUNC_CNT FUNC_CNT SET FUNC_CNT-6 ENDM FUNC_CNT SET 5*-6 incdir "chemin/vers/amidev_cd_12/ndk/ndk1.3/includes1.3/include.i/" include "exec/exec_lib.i"
Et je peux utiliser les offsets de la bibliothèque exec.library sans devoir tout retaper. Je n’ai pas préfixé par _LVO les appels de la bibliothèque pour ne pas devoir modifier mon code. Et cela marche, en tout cas pour exec.
Mais impossible de faire de même avec ma bibliothèque intuition : pas d’intuition_lib.i. donc j’ai défini dans mon source, les quelques offsets utilisés de cette bibliothèque.
Je n’ai pas de temps de fouiller davantage ce soir.
Si un gourou de l’assembleur passe par là, peut-il me dire si je suis dans la bonne voie ? Merci d’avance.
Une première question : pourquoi certaines bibliothèques possèdent un fichier « _lib.i » et pas d’autres ?
Une seconde question : pourquoi la macro et la variable ne sont pas définies dans le fichier exec_lib.i ? Elles n’ont rien à faire dans mon fichier source. Pour le moment, je laisse les fichiers includes tels qu’ils sont mais l’envie de les modifier me démange.
@stephbb75.
Je sais que certains jeux sautaient directement en ROM. Effectivement, c’est plus rapide mais pas portable en cas de changement dans la ROM.Il me semble que FUNCDEF est défini dans les includes CBM mais les lignes sont mis en commentaires.
Il suffirait de décommenter les lignes
http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node009F.htmlOn est pas sur C64 pour faire des saut en ROM.
Prends plutôt les derniers includes en date.
https://www.hyperion-entertainment.com/index.php/downloads?view=files&parent=40Merci pour le lien pour FUNCDEF.
Il y a des situations où faire un saut en ROM s’impose. Comme je ne suis pas dans ce cas, personnellement j’utiliserai les offsets des bibliothèques. Et je comprends que d’autres puissent faire autrement.
JEL utilise un 500 sous 1.3. Donc dans l’extrait des sources que j’ai publié, j’ai utilisé ce système. Je testerai aussi le 3.1 pour mon 1200 sous 3.0. Comme je n’ai pas de machine en 3.2, j’éviterai ces includes pour le moment : pour ne pas utiliser des fonctions inexistantes sur mon système.
Admettons qu’un saut en ROM soit indispensable même si j’en doute, cela peut être fait différemment. Tu ouvres la lib qui t’intéresse tu récupère le pointeur de la fonction voulue tu la stocke et après tu fait un jmp.
Comme ça tu as la bonne adresse pour chaque OS car tu récupères le/les adresses dynamiquement.Nous sommes d’accord.
Quelqu’un a-t-il déjà lu le livre « Mastering Amiga assembler » disponible à l’adresse https://commodore.bombjack.org/amiga/amiga-books.htm ?
Ce livre est un petit bijou. Il est actuellement mon livre de chevet. Très riche, c’est une mine d’informations. Il me conforte dans l’idée d’utiliser les includes de Commodore. La macro STRUCTURE permet de définir les offsets des champs d’une structure. L’utilisation des offsets symboliques a la place de leur equivalent numérique limite les erreurs de recopie et facilite la lecture du code.Non mais Total Amiga Assembler du même auteur est plus récent. https://amigasourcepres.gitlab.io/page/books/assembler/
Et oui les tutos de Jel sont très bien.@slack , faudrait déjà savoir un peu ce que tu compte faire avec tout ça.
La programmation système en assembleur c’est sympa deux minutes, mais dès que tu va avoir à manipuler des chaînes, ou autre, tu va vite déchanter.
Je veux dire par la qu’a un moment donné, pose toi la question de savoir si c’est pas plus avantageux de mélanger du C et de l’assembleur par exemple, ou faire du full asm.
Pour les includes, ça devient valable dès que tu va manipuler des structures, et enchainer les appels, par exemple si tu veux faire un setup complet d’ouverture d’écran, avec timer gestion d’irq, tout ça en système friendly.
Si c’est pour faire un utilitaire ou tu aurais une gui complète, dans ton cas, je ferais ça en C directement.
L’assembleur peut se brancher en compilant en fichier objet, puis en l’intégrant dans le projet C, ou en créant une librairie directement en assembleur (avec l’avantage de pouvoir s’utiliser avec d’autres langages même du basic).
L’avantage de l’assembleur je trouve, est qu’on ne s’encombre pas de tous ces détails liés à l’os et autres composants, c’est plutôt adapté à un usage de la machine en direct, ou avec peu d’intermédiaires.
Dès que tu commence à avoir des dépendances, tu va vite comprendre que même avec seulement quelques includes, ça devient chiant, par exemple ton compilo peut mal accepter les macros définies (certains codes utilisent upprecase=lowercase, commentaire si caractère 1ere colonne, tu peux avoir des soucis d’include jam avec les sections si c’est mal géré, etc etc) , il va manquer un truc ici, une double définition ailleurs, tu va te tromper dans l’utilisation d’une valeur définie qui au lieu de te donner la taille de la structure à allouer tu va prendre un offset et tu va pas comprendre pourquoi ça marche pas toujours, etc etc…..
Donc juste pour être certain que tu veux bien partir sur ce chemin, sinon explique un peu le projet, au pire tu va avoir des volontaires pour te filer un gros fichier de defines d’offsets de fonctions, qui suffit très souvent.
a++
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Utiliser les includes Commodore en assembleur avec asmone