Programmer l’amiga 68k bouts de code IDE langages, astuces
11 sujets de 16 à 26 (sur un total de 26)
- 1
- 2
-
/* easy.c : a complete example of how to open an Amiga function library inc. In this case the function library is Intuition. * function library is open, any Intuition function can be called. Once the Intuition This example uses the DisplayBeep() function of Intuition to flash the screen. With SAS/C (Lattice), compile with lc -L easy.c */ /* Declare the return type of the functions we will use. */ /* En premier, ajout des includes qui ne sont pas dans l'exemple */ #include <stdlib.h> #include <proto/exec.h> #include <proto/intuition.h> struct IntuitionBase *IntuitionBase; /* Get storage for the library base. The base name MUST be IntuitionBase */ int main() { IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",33L); if (IntuitionBase) { /* Check to see if it actually opened. The Intuition library is now open so. any of its functions may be used. */ DisplayBeep(0L); /* la fonction simple de la mort */ CloseLibrary((struct Library *)IntuitionBase); /* Always close a library if not in use. */ } else{ /* The library did not open so return an error code. The exit() function is not part of the 0S, it is part of the compiler link library. */ exit(20); } } /* 1) prototypes */ /* 2) OL remplacé par 0L, NULL aurait été préférable */ /* 3) comme on a inclu le prototype de CloseLibrary, et que struct IntuitionBase * n'est pas un struct Library *, on le cast */
Il me semble que si tu déclares
IntuitionBase
envoid*
, tu n’as plus besoin de caster. Tant que tu ne va pas chercher des data dedans (99.9% du temps), ca marche.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.)/* 1) prototypes */
/* 2) OL remplacé par 0L, NULL aurait été préférable */
/* 3) comme on a inclu le prototype de CloseLibrary, et que struct IntuitionBase * n’est pas un struct Library *, on le cast */Bravo à Gilloo pour avoir réussi à corriger le code précédent qui avait 2 gros problèmes :
C’est l’exemple d’un copié collé de PDF qui tourne mal. En plus des includes qu’il fallait rajouter et enlever,le copié collé dans le PDF a transformé le début du source C en instructions au lieu de commentaireset DisplayBeep(0L); en DisplayBeep(OL); (un grand O à la place d’un zéro)Pour la signification de cast (conversion) :
Exemple : (« warning: initialization makes pointer from integer without a cast »), sont liés à des conversions de types, ou « casts », en langage C.
Un « cast » est une opération qui vous permet de convertir une valeur d’un type de données en un autre. En C, les castings peuvent être explicites ou implicites…La fonction DisplayBeep() n’est pas semble t-il une fonction sonore mais graphique. Du coup DisplayBeep(1000L); provoque une erreur ou un warning…
https://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node03A4.html/* easy2.c Un exemple de code qui fonctionne avec DisplayBeep() */ #include <dos/dos.h> #include <proto/dos.h> #include <proto/intuition.h> #include <stdio.h> #include <libraries/dos.h> struct Library *OpenLibrary(); /* void CloseLibrary(struct Library *); */ struct IntuitionBase *IntuitionBase; int main() { IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 33L); if (IntuitionBase) { struct Screen *screen = NULL; /* Déclarez un pointeur vers la structure Screen */ int numFlashes =7; /* Nombre de clignotements souhaité */ int i; /* Déclarez la variable i en dehors de la boucle */ for (i = 0; i < numFlashes; i++) { Delay(50); DisplayBeep(screen); /* Appelez DisplayBeep() avec le pointeur Screen */ } CloseLibrary((struct Library *)IntuitionBase); } else { exit(20); } }
Vite, un panneau solaire.
Encore un bout de code intéressant qu’il est recommandé d’améliorer pour des raisons précises, l’affichage infini de la suite de Fibonacci. C’est un algorithme très simple sans pointeurs :peur qui calcule cette célèbre suite : « chaque nombre est la somme des deux nombres qui le précèdent. »
// fibonacci6.c #include <stdio.h> #include <unistd.h> int main() { unsigned long a = 0, b = 1, next; while (1) { printf("%lu\n", a); next = a + b; a = b; b = next; sleep(1); } return 0; }
Avec ce simple calcul infini, on atteint les limites des processeurs 32 bits qui finissent pas indiquer des nombres incorrects vers la 48e itération. Il semble après des tests que gcc 2.95.3 ne peut pas afficher de unsigned long long Le problème se posera aussi sur un processeur 64 bits mais l’affichage faux se produit plus tard dans la boucle.
A noter que Frontier Elite utilise une génération procédurale à base de suite de Fibonacci pour générer ses galaxies de millions de planètes en 3D vectorielle en Assembleur 68k :peur.
Vite, un panneau solaire.
News « programmer l’amiga 68k » :
Relance de ce sujet histoire de faire de la concurrence gratuite aux bots/data miners assignés à amigaimpact.* Codecraft, IDE en « Reaction » d’une des principales codeuses de l’amigaOS 3.2 (Mise à jour)
http://boemann.dk/codecraft/
http://obligement.free.fr/articles/itwcamillaboemann.php* Cubic IDE – Le soft de départ, GoldED a 31 ans, arf, les dates de création des logiciels amiga deviennent… (au choix, délirants, terribles, drôles, te forcent à faire le bilan, hm)
https://en.wikipedia.org/wiki/Cubic_IDE
https://www.softwareandcircuits.com/division/amiga/products/cubic/Et surtout : (Nouveau : 2024)
* AmigaMicropython
https://aminet.net/package/dev/misc/AmigaMicropythonUne version « early alpha » minimale (pas d’ide ni de possibilité de faire des interfaces graphiques) de Python à l’origine pour microcontroleurs mais qui fonctionne sur amigaOS 3.x (68K)
Les versions antérieures de Python pour amigaOS sont problématiques.Vite, un panneau solaire.
en effet, très intéressant,
1 A500 2mo, 1 A500 512ko +ACA500+, 1 A 1200 quasi neuf, 1 Atari 520Ste 4mo + UltraSatan dual, 1 Falcon030 avec DFB1X , 1 MSX2 8235 avec Carnivore2, 1 MSX28250 (fmstéréopack, music mode, MegaFlashRom et quelques D7 et KTouche ).
maxime perpétuelle : si je cours en zigzag ce n'est pas pour éviter le balles, mais les c..s, et si un cachalot vient sur ton babord, il est prioritaire, sur tribord aussi... (B.M.)effectivement on peut aussi manipuler IntuitionBase comme un void* (cad un pointeur quelconque= juste une adresse mémoire) en terminologie Amiga on appelle aussi ça un APTR (adresse pointeur) ou même en en LibraryBase standard car IntuitionBase en fait contient aussi une LibraryBase standard mais a aussi plusieurs champs spécifiques à intuition qui sont assez utiles
Parmi ceux ci le champ ActiveWindow du premier exemplePour illustrer les infos de Thellier, le programme d’exemple de départ qui magouille avec les pointeurs intuition, un peu amélioré. Soyez prudents, surtout si vous êtes sur le 3.2, hé hé hé :
Permettez que l’on rajoute vos définitions au fur et à mesure au doc. pdf qui grossit et va avoir bientôt besoin d’un sommaire. Vos pseudos seront intégrés avec le texte cité./* erratic5.c (C99 - ISO/IEC 9899:1999) Une modification du programme bougefenetre.c qui fait des choses bizarres sur le workbench - Compile avec gcc-2.95 du package ADE. */ #include <intuition/intuitionbase.h> #include <proto/exec.h> #include <proto/intuition.h> #include <proto/dos.h> #include <proto/graphics.h> // Inclure le bon fichier d'en-tête pour les graphiques #include <stdlib.h> #include <time.h> int main(void) { int i; int dx = 5; // Vitesse de déplacement en X int dy = 5; // Vitesse de déplacement en Y int screenWidth = 640; int screenHeight = 256; // Enregistrer la position initiale de la fenêtre int initialX = IntuitionBase->ActiveWindow->LeftEdge; int initialY = IntuitionBase->ActiveWindow->TopEdge; // Boucle de mouvement struct RastPort *rp = IntuitionBase->ActiveWindow->RPort; // Déclaration ici pour éviter le mélange for (i = 0; i < 10; i++) // Réduit à 10 itérations { // Déplacer la fenêtre MoveWindow(IntuitionBase->ActiveWindow, initialX + dx * i, initialY + dy * i); // Dessiner le texte SetAPen(rp, 1); // Couleur de l'encre (1 = noir) SetBPen(rp, 0); // Couleur de fond (0 = blanc) RectFill(rp, 0, 0, screenWidth, screenHeight); // Effacer l'écran Move(rp, initialX + dx * i + 10, initialY + dy * i + 20); // Positionner le texte Text(rp, "AH AH AH la fenetre fantome", 27); // Afficher le texte // Vérifier les collisions avec les bords if (initialX + dx * i <= 0 || initialX + dx * i >= screenWidth - 100) dx = -dx; // Inverser la direction X if (initialY + dy * i <= 0 || initialY + dy * i >= screenHeight - 50) dy = -dy; // Inverser la direction Y Delay(50); } // Ramener la fenêtre à sa position d'origine - Ne fonctionne pas MoveWindow(IntuitionBase->ActiveWindow, initialX, initialY); // Position d'origine return 0; }
Vite, un panneau solaire.
Super l’entrevue avec Camilla Boemann, on apprend plein de choses, j’avais raté celui la moi 😉
Ils sont très lents les devs de l’amigaOS 3.2, c’est explicable par le fait qu’ils sont bénévoles, okay !
pas de revenus, pas de pression, mais, avec les outils modernes à disposition, cette lenteur est peu justifiée. Ils sont fatigués, certainement.
Leur base d’utilisateurs risque de casser sa pipe avant la sortie du 3.3 🙂 (rire guttural)Vite, un panneau solaire.
Salut,
Ils sont très lents les devs de l’amigaOS 3.2, c’est explicable par le fait qu’ils sont bénévoles,
Oui c’est compréhensible, le dev type open source (c’est un peut leur principe) peut prendre du temps.
Ils doivent tous avoir un job et se remettre à dev le soir n’est pas toujours simple après une journée de boulot et le WE c’est un peut pareil.pas de revenus, pas de pression, mais, avec les outils modernes à disposition, cette lenteur est peu justifiée.
Oui, mais si revenue cela veut dire que le prix de vente s’en ressent.
La tu achète une version dans les 40€ et tu peut l’utiliser sur autant de machine que tu veut.
Je prend mon exemple, installé sur le 4000, 2000, 500+ et WinUae.
Si j’avais du payer 4 fois le prix je ne l’aurais surement pas fait.Et le piratage est très important à mon avis, tu peut pas imaginé combien m’ont demandé une copie de mon CD !!! (pour tester !!)
Je dit toujours non, mais vue la facilité à le trouver sur le net …Et une dizaine de développeurs il faut s’accorder, parfois attendre qu’un dev soit fait pour finir le sien, enfin c’est tout une gestion.
Ensuite a ce qu’elle dit dans l’article ils ne souhaite pas ajouter des choses (type pile TCP, utilitaires, …) mais se concentre sur le système ce qui ne doit pas être si simple que cela (et entre nous je ne voie pas ce qui pourrais être ajouté au système pure)
Il bosse sur des outils annexe, elle parle d’un client git.
D’un RKM mis à jour (cela doit prendre du temps)Leur base d’utilisateurs risque de casser sa pipe avant la sortie du 3.3
Oui c’est sur qu’il y a un risque :-O
https://youtube.com/@stephbb75
11 sujets de 16 à 26 (sur un total de 26)
- 1
- 2
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Programmer l’amiga 68k bouts de code IDE langages, astuces