et avec du code auto modifié dans ce genre ?
xdef _ti89
xdef _nostub
; ---------------------------------
BSRS MACRO ; func,retFunc
move.b #(\@suiteDuCode-\2-2),\2+1
bra.s \1
\@suiteDuCode:
ENDM
RTSS MACRO ; retFunc
\1 bra.s *
ENDM
BSRW MACRO ; func,retFunc
move.w #(\@suiteDuCode-\2-2),\2+2
bra.w \1
\@suiteDuCode:
ENDM
RTSW MACRO ; retFunc
\1 bra.w *+$FFE ; pour contrer l'optim forcée de bra.w * vers bra.s * avec les switchs par défaut #grrrr#
ENDM
; ---------------------------------
_ti89:
_nostub:
; bra.s *
BSRS func1,retFunc1
BSRW func2,retFunc2
rts
ds.l 10
func1:
move.l #-1,($4c00+50*30+8).w
RTSS retFunc1
ds.b 300
func2:
move.l #$FF00FF00,($4c00+49*30+8).w
move.l #$00FF00FF,($4c00+50*30+8).w
move.l #$FF00FF00,($4c00+51*30+8).w
RTSW retFunc2
END
Ça ne bouffe pas de registre du tout, et ça se contente d'un accès mémoire en écriture, ça devrait être mieux qu'un bsr+rts non ?

(à priori ça fonctionne, mais vu mes souvenirs, ça demande à être vérifié

)
PS : par contre ça modifie les flags à cause du move, alors que bsr ne modifie rien...