bufSize:=$6400 buf:=AllocMem(bufSize, MEMF_ANY) (...) ->ustawiamy cały bufor na $FFFF... FOR i:=0 TO bufSize-1 buf[i] := $FF ENDFOR
@vojo, post #1
MOVEQ #-1,D0 -> Ustawia rejestr D0 na wartość $FFFFFFFF MOVE.W #bufSize,D1 LSR.W #2,D1 SUBQ.W #1,D1 -> Licznik dla instrukcji DBF loop: MOVE.L D0,(A0)+ DBF D1,loop
@Don_Adan, post #8
@Don_Adan, post #10
MOVEQ #-1,D0 MOVE.W bufSize,D1 LSR.W #2,D1 MOVEA.L buf,A0 BRA.S .next .loop: MOVE.L D0,(A0)+ .next: DBF D1,.loop
@vojo, post #13
@vojo, post #16
clear: ;a0=buffer, d0=size movem.l d2-d7/a2-a6,-(sp) move.l a0,a6 add.l d0,a6 move.l #123-1,d0 moveq #-1,d1 moveq #-1,d2 moveq #-1,d3 moveq #-1,d4 moveq #-1,d5 moveq #-1,d6 moveq #-1,d7 move.l d1,a0 move.l d2,a1 move.l d3,a2 move.l d4,a3 move.l d5,a4 move.l d6,a5 movem.l d1-d3,-(a6) .loop movem.l d1-a5,-(a6) movem.l d1-a5,-(a6) movem.l d1-a5,-(a6) movem.l d1-a5,-(a6) dbf d0,.loop ;123*(52+52+52+52)+16 movem.l (sp)+,d2-d7/a2-a6 rts
@teh_KaiN, post #14
- każdemu elementowi nadaj wartość 0xFFFFFFFF czy tam -1
@mateusz_s, post #20
@Don_Adan, post #21
; clears memory 'box'. width has to be a multiple of 16 ;asm void memsetboxaligned16(REG( a0 , UBYTE *mem) , ; REG( d0 , UBYTE value), ; REG( d1 , int stride), ; REG( d2 , int width), ; REG( d3 , int height) ); ; _memsetboxaligned16: movem.l d0/d1/d2/d3-d4/a0/a1/d5, -(sp) muls.l #$01010101, d0 sub.l d2, d1 ; how many bytes to skip after each line lea clearvalue16, a1 add.l #15, a1 move.l a1, d4 and.l #$fffffff0, d4 move.l d4, a1 move.l d0, (a1) move.l d0, 4(a1) move.l d0, 8(a1) move.l d0, 12(a1) move.l d0, 16(a1) move.l d0, 20(a1) move.l d0, 24(a1) move.l d0, 28(a1) move.l d0, 32(a1) lsr.l #5, d2 move.l #32, d5 .loopy: tst.l 0(a1) ; make sure it is in the cache! tst.l 16(a1) move.l d2, d4 .loopx: move16 (a1)+, (a0)+ move16 (a1)+, (a0)+ sub.l d5, a1 subq #1, d4 bgt.b .loopx add.l d1, a0 ; skip to next line subq #1, d3 bgt.b .loopy movem.l (sp)+, d0/d1/d2/a0/a1/d3-d4/d5 rts clearvalue16: ds.l 96
@mateusz_s, post #24
@Hexmage960, post #25
@kiero, post #22
@mateusz_s, post #28