Hi tlm,
je voudrais executer un petit programme après la trap 4. Comme je m'emmele les pinceaux entre a7, usp et autres, vous auriez un chtit exemple svp?
pea.l return_address(PC) move.w SR,-(a7) move.l $90,-(a7) rts return_address:
move.l Trap4Address,OldTrap move.l #EndNewTrap-NewTrap,d6 move.l d6,-(a7) ROM_CALL HeapAllocHigh move.w d0,(a7) ROM_CALL HeapDeref addq.l #4,a7 add.l #$40000,a0 ;faut-il le mettre ou non, m'en fous j'ai une hwd1 move.l a0,a5 lea NewTrap(pc),a1 subq.l #1,d6 loop_copy_tsr: move.b (a1)+,(a0)+ dbf d6,loop_copy_tsr bclr.b #2,$600001 move.l a5,Trap4Address bset #2,$600001
pea.l return_address(PC) move.w SR,-(a7) move.l OldTrap4(PC),-(a7) rts return_address:
NewTrap: OldTrap4 dc.l 0 pea.l return_address(PC) ...
include "Os.h" xdef _nostub xdef _ti89 xdef _ti92plus xdef _main STR_TAG equ $2D Trap4Address equ $90 _main: movem.l d0-d7/a0-a6,-(a7) ROM_CALL2 top_estack move.l (a4),a0 ;On regarde si l'argument est un chaine de caractère cmp.b #STR_TAG,(a0) bne bad_arg_error subq.l #2,a0 loop_search_start: tst.b -(a0) bne loop_search_start lea Text(pc),a1 addq.l #1,a0 loop_copy_text: move.b (a0)+,(a1)+ bne loop_copy_text move.l Trap4Address,OldTrap move.l #EndNewTrap-NewTrap,d6 move.l d6,-(a7) ROM_CALL HeapAllocHigh move.w d0,(a7) ROM_CALL HeapDeref addq.l #4,a7 add.l #$40000,a0 move.l a0,a5 lea NewTrap(pc),a1 subq.l #1,d6 loop_copy_tsr: move.b (a1)+,(a0)+ dbf d6,loop_copy_tsr bclr.b #2,$600001 move.l a5,Trap4Address bset #2,$600001 pea Success(pc) bra affmsg bad_arg_error: pea BadArgError(pc) affmsg ROM_CALL ST_helpMsg addq.l #4,a7 movem.l (a7)+,a0-a6/d0-d7 rts BadArgError dc.b "Erreur: mauvais argument",0 Success dc.b "Programme installé avec succès",0 NewTrap: ;On va à l'ancienne trap ;a7 : SR / Address Prog Appel pea.l return_address(PC) move.w SR,-(a7) move.l OldTrap(pc),-(a7) rts return_address: Suite ;On sauve les registres ;a7 : SR / Address Prog Appel addq.l #2,a7 ;a7 : Address Prog Appel movem.l a0-a6/d0-d7,-(a7) ;a7 : Registres / Adress Prog Appel pea Text(pc) ROM_CALL push_parse_text ;Text transformé ROM_CALL2 top_estack move.l (a4),(a7) ROM_CALL NG_rationalESI ;Execution addq.l #4,a7 movem.l (a7)+,a0-a6/d0-d7 rts OldTrap dc.l 0 Text dcb.b 256,0 EndNewTrap end