Voilà: pour faire plaisir à un ami (qui lance déjà un lanceur après chaque reset), j'ai voulu essayer de faire une commande Exec qui referme tous les dossiers (rigolez pas).
Donc je l'ai fait en _nostub, tout beau, tout propre (enfin...), mais quand je le lance (même avant sa conversion en chaîne exec): il fait rien (c'est frustrant d'ailleurs).
J'ai testé bset avec tous les numéros de bits possibles, il se passe jamais rien.
Quelqu'un veut-il m'aider?
Au passage, si une personne voulait bien perdre son temps à me montrer comment je peut optimiser (ici en taille, la chaîne exec doit être courte) ce programme... Histoire que j'apprenne (c'est optimiser qui m'amuse dans la programation).
;Le source:
include "OS.h"
xdef _nostub
xdef _ti92plus
move.l a5,-(a7) ;on sauvegarde a5 dans la pile
move.l $C8,a5 ;adresse de la table des ROM_CALLs mise en a5
move.l SymFindFirst*4(a5),a0 ;SymFindFirst emplacement:calcul
clr.w -(a7) ;SymFindFirst mode: 0 (liste tous les dossiers)
;SymFindFirst 1er argument ignoré en mode 0
jsr (a0) ;SymFindFirst lancement
lea 2(a7),a7 ;on restaure le pointeur de pile
move.l SymFindNext*4(a5),a5 ;SymFindNext emplacement:calcul
ffn:
bset #5,9(a0) ;on referme le dossier (active le 5eme bit d'état)
jsr (a5) ;SymFindNext lancement
move a0,d0 ;on met a0 dans d0 pour pouvoir le tester
tst d0 ;on regarde si a0 pointe vers 0 -> y'avait plus de dossiers
bne ffn ;si yavait encore des dossiers, on loop
move.l (a7)+,a5 ;on restaure a5
rts
END