
voici ce que j'ai fait ce matin: ( comme je n'y connais rien l'optimisation je pense que l'on peut faire mieux )
line_hrz: move.l d3,-(a7) cmp.w d0,d2 bhi line_hrz_d2 exg.l d0,d2 line_hrz_d2: sub.w d0,d2 ;recupere la longueur de la ligne bsr calc_octet hrz_loop: ;============================================== bset.b d3,(a0) tst.w d3 beq reinit_d3 subq.w #1,d3 bra hrz_loop_2 reinit_d3: moveq.w #7,d3 hrz_2: cmp.w #8,d2 ; if d2 > 8 bcs hrz_3 ; non addq.l #1,a0 move.b #$FF,(a0) subq.w #8,d2 bra hrz_2 ;teste encore hrz_3: addq.l #1,a0 hrz_loop_2: dbf.w d2,hrz_loop ;============================================== exit_hrz: move.l (a7)+,d3 rts [3] Labels [/3] ;=========== RECHERCHE UN OCTET ================ calc_octet: ; d0 = x // d1 = y // a0 = mem_video ; outputs: d3=bit a allumée sur cet octet move.w d1,d3 lsl.w #5,d1 add.w d3,d3 sub.w d3,d1 add.w d1,a0 move.w d0,d3 lsr.w #3,d3 add.w d3,a0 and.w #7,d0 moveq.w #7,d3 sub.w d0,d3 rts
[edit]Edité par ParadiZe le 16-12-2001 à 13:41:25[/edit]