* * Wygodne i przejrzyste C2P. * * Wejscie: A0 - adres 16 pikseli * * opc: D4 - maska * D5 - maska * A6 - maska * * Wynik: D0 - bitplany 4/0 * D1 - bitplany 5/1 * D2 - bitplany 6/2 * D3 - bitplany 7/3 * xdef @writePixelLine8 incdir 'includes:' include 'graphics/gfx.i' * A0 - piksele * A1 - bitmapa interleaved * D0 - wiersz @writePixelLine8: movem.l d2-d7/a2-a6,-(a7) mulu.w (bm_BytesPerRow,a1),d0 lea (bm_Planes,a1),a1 movea.l (a1)+,a2 ; Planes[0] movea.l (a1),a4 ; Planes[1] movea.l a4,a5 suba.l a2,a4 ; Bytes per row adda.l d0,a2 adda.l d0,a5 move.l #$0f0ff0f0,d4 move.l #$33333333,d5 move.l #$55555555,a6 .loop: bsr.s c2p move.w d0,(a2) movea.w a4,a3 move.w d1,(a2,a3.w) adda.w a4,a3 move.w d2,(a2,a3.w) adda.w a4,a3 move.w d3,(a2,a3.w) adda.w a4,a3 swap d0 swap d1 swap d2 swap d3 move.w d0,(a2,a3.w) adda.w a4,a3 move.w d1,(a2,a3.w) adda.w a4,a3 move.w d2,(a2,a3.w) adda.w a4,a3 move.w d3,(a2,a3.w) adda.l #2,a2 cmpa.l a5,a2 blt.s .loop movem.l (a7)+,d2-d7/a2-a6 rts c2p: lea (8,a0),a1 move.b (a0)+,d0 ; piksel 0 lsl.w #8,d0 move.b (a1)+,d0 ; piksel 8 swap d0 move.b (a0)+,d1 ; piksel 1 lsl.w #8,d1 move.b (a1)+,d1 ; piksel 9 swap d1 move.b (a0)+,d2 ; piksel 2 lsl.w #8,d2 move.b (a1)+,d2 ; piksel 10 swap d2 move.b (a0)+,d3 lsl.w #8,d3 move.b (a1)+,d3 swap d3 move.b (a0)+,d0 ; piksel 4 lsl.w #8,d0 move.b (a1)+,d0 ; piksel 12 swap d0 move.b (a0)+,d1 ; piksel 5 lsl.w #8,d1 move.b (a1)+,d1 ; piksel 13 swap d1 move.b (a0)+,d2 ; piksel 6 lsl.w #8,d2 move.b (a1)+,d2 ; piksel 14 swap d2 move.b (a0)+,d3 lsl.w #8,d3 move.b (a1)+,d3 swap d3 movea.l a1,a0 ; Aktualizacja move.l d0,d6 ; 0, 8, 4, 12 and.l d4,d0 eor.l d0,d6 lsr.w #4,d0 swap d0 lsl.w #4,d0 or.l d6,d0 ; 0, 4, 8, 12 (bity 7-4/3-0) move.l d1,d6 ; 1, 9, 5, 13 and.l d4,d1 eor.l d1,d6 lsr.w #4,d1 swap d1 lsl.w #4,d1 or.l d6,d1 move.l d2,d6 ; 2, 10, 6, 14 and.l d4,d2 eor.l d2,d6 lsr.w #4,d2 swap d2 lsl.w #4,d2 or.l d6,d2 move.l d3,d6 ; 3, 11, 7, 15 and.l d4,d3 eor.l d3,d6 lsr.w #4,d3 swap d3 lsl.w #4,d3 or.l d6,d3 move.l d0,d6 move.l d2,d7 and.l d5,d0 and.l d5,d7 eor.l d0,d6 eor.l d7,d2 lsl.l #2,d0 lsr.l #2,d2 or.l d7,d0 ; 0, 2, 4, 6, 8, 10, 12, 14 (bity 5-4/1-0) or.l d6,d2 ; 0, 2, 4, 6, 8, 10, 12, 14 (bity 7-6/3-2) move.l d1,d6 move.l d3,d7 and.l d5,d1 and.l d5,d7 eor.l d1,d6 eor.l d7,d3 lsl.l #2,d1 lsr.l #2,d3 or.l d7,d1 ; 1, 3, 5, 7, 9, 11, 13, 15 (bity 5-4/1-0) or.l d6,d3 ; 1, 3, 5, 7, 9, 11, 13, 15 (bity 7-6/3-2) exg d5,a6 move.l d0,d6 move.l d1,d7 and.l d5,d0 and.l d5,d7 eor.l d0,d6 eor.l d7,d1 add.l d0,d0 lsr.l #1,d1 or.l d7,d0 ; 0-15 (bity 4/0) or.l d6,d1 ; 0-15 (bity 5/1) move.l d2,d6 move.l d3,d7 and.l d5,d2 and.l d5,d7 eor.l d2,d6 eor.l d7,d3 add.l d2,d2 lsr.l #1,d3 or.l d7,d2 ; 0-15 (bity 6/2) or.l d6,d3 ; 0-15 (bity 7/3) exg d5,a6 ; Wynik w d0-d3 rts