AtariUn accessoire en GFAJean-Luc Antoine - 25/07/2002Accessoirement vôtre... Voici un grand saut en arrière, d'il y a plus de 10 ans. Un langage de programmation reignait sur le monde Atari, le GFA. Pour les nostalgiques, voici comment créer un accessoire GEM pour y implanter n'importe quel utilitaire... Vous venez d'écrire l'utilitaire du siècle en GFA, mais hélas c'est un programme à part entière ? Qu'importe, vous pourrez bientôt le transformer pour qu'il devienne utilisable depuis n'importe quelle application depuis la barre de menu. Le principe est assez complexe, mais le GFA permet d'y remédier en très peu de lignes. Par commodité, votre programme devra figurer dans une procédure qui sera exécutée dès que l'accessoire sera appelé. Il vous faut commencer par réserver suffisamment de place mémoire (par défaut, le GFA réserve toute la mémoire disponible) pour la bonne exécution de votre programme, grâce à la commande de compilation $m. Nous allons réserver dans notre cas 35 Ko de mémoire, ce qui est bien plus qu'il n'en faut. Notre accessoire sera un player de musique soundship, qui permettra de rejouer en interruption sous le bureau des musiques crées avec Megatizer, le super éditeur soundchip qui était fourni sur une des disquettes de STMag. Il sera donc possible de programmer en GFA tout en continuant d'entendre une splendide musique de Mad Max... Mais revenons à nos moutons... Les bibliothèques AES disposent de la fonction APPL_INIT() (dans la bibliothèque d'application) qui fournit le handle (numéro d'identification) du programme en GFA. Si une erreur se produit, l'appel de cette fonction renvoie -1. Une fois l'identification de notre application effectuée, une fonction de la bibliothèque des menus permet d'installer notre application dans la barre de menus, et de lui assigner un nom qui y apparaîtra. De même, cette fonction nous renvoie la valeur -1 si une erreur s'est produite, comme par exemple lorsque toutes les entrées prévues pour les accessoires sont déjà remplies. Si ces préliminaires se sont bien déroulés, il nous suffit d'attendre en scruttant indéfiniment les évènements qui se produisent, grâce à la bibliothèque d'évènements qui dispose de la fonction EVNT_MESAG(0). Le résultat de l'évènement est stocké dans le buffer du GFA de menu(1) à menu(8). Si l'on peut détecter que menu(1)=40, alors c'est que notre accessoire vient d'être sélectionné dans la barre du menu. Nous pouvons alors passer la main à notre programme.
Je vous présente donc une petite adaptation des routines de Megatizer. Le Inline fait office de buffer, mais il aurait très bien pu être remplacé par un Malloc pour alouer de la place mémoire pour charger la musique. Nous n'avons besoin que de peu de fonctions pour notre accessoire: charger et jouer une musique, ainsi que de la stopper. Je vous laisse étudier par vous-même la suite du programme qui ne présente aucune difficulté. $ m35000 !On réserve suffisamment de mémoire: 35 Ko playing!=FALSE identifiant&=APPL_INIT() IF identifiant&<>-1 !Erreur avec APPL_INIT registre&=MENU_REGISTER(identifiant&," ST Magazine nø67") IF registre&<>-1 !Tout s'est bien passé DO !Boucle sans fin ~EVNT_MESAG(0) !Attend un évènement IF MENU(1)=40 !Accessoire sélectionné GOSUB mon_programme ENDIF LOOP ELSE !Pas assez de place dans le menu ALERT 4,"Faites-moi |de la place ! ",1,"OK",tmp ENDIF ENDIF PROCEDURE mon_programme ' Ici se loge le programme proprement dit que l'accessoire va exécuter ALERT 4,"Exemple d'accessoire | en GFA !!!",1,"Super!",tmp ALERT 4," Zike Soundship en |interruption sous GEM ",1-(playing!=TRUE),"Load|STOP|Exit",tmp ' on réserve de la place pour la zike INLINE buffer%,30000 IF (tmp=1) AND (playing!=FALSE) ' On charge et on joue une zike de Megatizer FILESELECT CHR$(GEMDOS(25)+65)+":"+DIR$(0)+"\*.THK","",nomfichier$ OPEN "i",#1,nomfichier$ ! Charge un fichier au format BGET #1,buffer%,LOF(#1) ! du génialissime Megatizer CLOSE #1 ~XBIOS(&H26,L:buffer%) ! Initialise la musique SLPOKE &H4D2,buffer%+8 ! la rejoue à chaque VBL playing!=TRUE ELSE IF (tmp=2) AND (playing!=TRUE) SLPOKE &H4D2,0 !Stop la zike ~XBIOS(&H26,L:buffer%+4) !Eteind toutes les voix et remet en place le interruptions SPOKE &H484,15 !Réactive le stupide "Biiip" du clavier playing!=FALSE ENDIF RETURN |
|||||
![]()
|
|