; Blitter-Compilation pour Sweetel version 2 ; ½Xavier ROCHE '94 ; ; ~C:BlitC%(L:V:AdrStr%(0),L:V:Len%(0),Nb_ligne&,Line_pos& ; ,L:Blk%,L:Pos_blk%,L:V:Max_len_blk%) Opt a+,o+,p+,o1+,o2+ AdrStr: equr a1 AdrLen: equr a2 Bloc_adr: equr a3 Bloc_pos: equr a4 Src_max: equr d4 Src_pos: equr d5 Bloc_max: equr d7 Move.L 4(Sp),AdrStr ; Adr des adrs.L de chaines Move.L 8(Sp),AdrLen ; Adr des des longueurs.W Move.W 12(Sp),Src_max ; Nombre de lignes en gros Move.W 14(Sp),Src_pos ; Pos ds source (0...) Move.L 16(Sp),Bloc_adr ; Adresse du pointeur bloc Move.L 20(Sp),Bloc_pos ; Pos actuelle (incr‚ment) (0..) Move.L 24(Sp),Bloc_max ; Len max incr‚ment Sub.L Src_pos,Src_max ; Lignes max a parcourrir Do: Move.L Src_pos,D0 ; +lignes Lsl.L #1,D0 ; .W Move.W (AdrLen,D0),D1 ; len Beq.s Loop ; Ligne vide!! Lsl.L #1,D0 ; .L Move.L (AdrStr,D0),A0 ; adr Comp4: Cmp.B #"'",(A0) ; commentaire! Beq.s Loop Cmpi.W #4,D1 Blt.S Comp3 Cmp.L #'TXT ',(A0) Beq.s Txt Comp3: Cmpi.W #3,D1 Blt.S Comp2 Cmp.L #'CLS',(A0) Beq.s Cls Comp2: Cmpi.W #2,D1 Blt Comp1 Comp1: Cmp.B #'{',(A0) Beq.s Loop Cmp.B #'}',(A0) Beq.s Loop Bra.s End ; on ne sait pas traiter ; inconnu ou trop complexe.. ; **Sous routines sp‚ciales** Txt: Bra.s End Cls: Lea _Cls,A0 ; Cls, effacer l'‚cran Bsr.s Copy ; Copier! Bra.s Loop Copy: Move.W (A0)+,D0 ; len: 2 premiers octets Move.L (Bloc_pos),D2 ; position incr‚ment du bloc Add.L D0,D2 ; +longueue … copier? Cmp.L D2,Bloc_max ; ca fait pas trop gros? Bgt.s End ; si, trop gros! ; Subi.W #1,D0 ; dbra Move.L (Bloc_pos),D2 _Cpy: Move.B (A0)+,(Bloc_adr,D2) ; copier Addq.L #1,D2 ; +1 octet Addq.L #1,A0 ; +1 octet Dbra D0,_Cpy Move.L D2,(Bloc_pos) RTS ; fini ; **Fin sous routines** Loop: Addi.L #1,Src_pos ; pos+1 Subi.L #1,Src_max Blt.s End ; fin source Bra Do ; Again! End: Move.W Src_pos,D0 ; Renvoyer pos actuelle Ext.L D0 RTS _Cls: Dc.w 1 ; longueur=1 Dc.b 12