Flanker
:
Et pour le cas de A qui veut effacer B qui veut effacer C (non, pas A qui veut effacer B et C, mais le cas où il y a demande d'effacement transitive!), ça marche? J'ai été obligé de m'inventer des trampolines complexes pour permettre ça dans mon code et la simplicité de ton code sur ce point-là me rend (peut-être à tort!) sceptique.
oui, ça marche sans problème
je viens de modifier un tsr pour faire le test
Et maintenant essaye avec 4 (A qui efface B qui efface C qui efface D). Tôt ou tard, tu vas avoir des problèmes avec tes variables globales
sauv_usp et
sauv_usp2. Tu ne peux pas stocker une infinité de valeurs là-dedans. C'est pour ça que je travaille avec des trampolines sur la pile pour restaurer la bonne valeur de %a7 à chaque fois.
avec une fonction moins complexe 
... dont tu n'as toujours pas démontré la correction.
En effet, ton code est souvent illisible (et pas seulement à cause de ça).
je trouve mes sources de TSR particulièrement lisibles, pourtant 
Compare par exemple:
clr.w -(a7)
move.l d4,-(a7)
move.w d7,-(a7)
move.l 284(a5),a0;PopupDo
jsr (a0)
addq.l #8,a7
tst.w d0
beq _effacement_popup
include "tsr_delete.h"
_effacement_popup:
move.w d7,-(a7)
move.l 604(a5),a0;HeapFree
jsr (a0)
addq.l #2,a7
pea success_str(pc)
à:
clr.w -(a7)
move.l #$ffffffff,-(a7)
move.w d4,-(a7)
ROM_CALL PopupDo ;show the popup menu
move.w d0,d5 ;save the return value to d5
ROM_CALL HeapFree ;delete the popup menu
addq.l #8,a7
tst.w d5 ;check if ESC presses
beq displayappname ;if yes, display the app name
cmp.w #4095,d5 ;check if "incompatible" selected
beq incompatible3 ;display "incompatible" error message
ROM_CALL2 EV_hook
skip:
move.l (a4),a5 ;get the address of the event hook
move.l a5,a3 ;save the address of EV_hook to change to a3
sub.l #$40010,a5 ;remove: * $40000 for HW2 AMS 2.0x
; without HW2Patch
; * $10 to get the begin of the
; handle (if compatible)
lea.l 12(a5),a4 ;move the "old event hook" placeholder to
;a4 (this is the EV_hook replacement)
subq.w #1,d5 ;remove 1 from the number of the event hook
bne skip ;continue until the correct event hook is reached
move.l a4,a6 ;save the old event hook
uninstall_now:
Chez moi, presque toutes les instructions sont commentées. Chez toi, c'est loin d'être le cas.