home *** CD-ROM | disk | FTP | other *** search
-
- SECTION __MERGED,DATA
-
- ; Prototype see gfx.c
- ; a2 : Planes[8];
- ; a3 : chunky buffer
- ; d6 : Bitmap depth
- ; d7 : BitMap Size
-
- XDEF _CopyPlane2Chunky
-
- SECTION CODE
-
- _CopyPlane2Chunky:
-
- movem d0-d7/a0-a3,-(sp)
-
- ; backup the planepointers
- move.l a2,a0 ; a2 = planebase !
- move.l (a0)+,-(sp)
- move.l (a0)+,-(sp)
- move.l (a0)+,-(sp)
- move.l (a0)+,-(sp)
- move.l (a0)+,-(sp)
- move.l (a0)+,-(sp)
- move.l (a0)+,-(sp)
- move.l (a0),-(sp)
-
- subq.w #1,d6
-
- next_pixel:
-
- move.l a2,a0 ; a2 = planebase !
- move.l (a0),a1
- move.w d6,d5 ; - 4
- sub.l d0,d0
- move.l d0,d1
- move.l d0,d2
- move.l d0,d3
- move.l d0,d4
-
- ; ********* Copy PlanesData in Chunky Pixel
-
- next_plane:
-
- move.b (a1),d0 ; erste 8 Bit nach d0.low - 8
-
- ror.w #1,d0 ; high - 6+2x = 8
- move.b d0,d4 ; - 4
- swap.w d0 ; - 4
- move.b d4,d0 ; - 4
- ror.w #1,d0 ; low - 8
- move.b d0,d1 ; - 4
- swap.w d0 ; - 4
-
- ror.w #1,d1 ; high - 8
- move.b d1,d4 ; - 4
- swap.w d1 ; - 4
- move.b d4,d1 ; - 4
- ror.w #1,d1 ; low - 8
- move.b d1,d2 ; - 4
- swap.w d1 ; - 4
-
- ror.w #1,d2 ; high - 8
- move.b d2,d4 ; - 4
- swap.w d2 ; - 4
- move.b d4,d2 ; - 4
- ror.w #1,d2 ; low - 8
- move.b d2,d3 ; - 4
- swap.w d2 ; - 4
-
- ror.w #1,d3 ; high - 8
- move.b d3,d4 ; - 4
- swap.w d3 ; - 4
- move.b d4,d3 ; - 4
- ror.w #1,d3 ; low - 4
- swap.w d3 ; - 4
-
- addq.l #1,a1
- move.l a1,(a0)+ ; Plane[i++] += 1;
-
- move.l (a0),a1 ; a1 = planes[i] - 12
- dbra d5,next_plane ; --depth >= 0 ? jmp next_plane; - 12
-
- cmp.w #7,d6
- beq WriteBack
-
- ; if (depth < 8)
-
- move.w #7,d4
- sub.w d6,d4
- move.l #$ff00ff00,d5
- and.l d5,d0
- lsr.l d4,d0
- and.l d5,d1
- lsr.l d4,d1
- and.l d5,d2
- lsr.l d4,d2
- and.l d5,d3
- lsr.l d4,d3
-
- ; ******** WriteBack the Chunky Data
-
- WriteBack:
- lsr.l #8,d3 ; - 8+2x = 24 ( +2)
- swap.w d3 ; - 4 ( +4)
- move.b d3,(a3)+ ; pixel[0] - 8
- swap.w d3 ; - 4 ( -18 !)
- move.b d3,(a3)+ ; pixel[1] - 8
-
- lsr.l #8,d2 ; - 24 ( +2)
- swap.w d2 ; - 4
- move.b d2,(a3)+ ; pixel[2] - 8
- swap.w d2 ; - 4 ( -18 !)
- move.b d2,(a3)+ ; pixel[3] - 8
-
- lsr.l #8,d1 ; - 24 ( +2)
- swap.w d1 ; - 4
- move.b d1,(a3)+ ; pixel[4] - 8
- swap.w d1 ; - 4 ( -18 !)
- move.b d1,(a3)+ ; pixel[5] - 8
-
- lsr.l #8,d0 ; - 24 ( +2)
- swap.w d0 ; - 4
- move.b d0,(a3)+ ; pixel[6] - 8
- swap.w d0 ; - 4 ( -18 !)
- move.b d0,(a3)+ ; pixel[7] - 8
-
- subq.l #1,d7 ; d7 is a long !
- bne next_pixel ; --BMSize >= 0 ? jmp next_pixel; - 12
-
- ; reinstall the plamepointers !
- move.l a2,a0 ; a2 = planebase !
- add.l #28,a0 ; plane[8] !!!
- move.l (sp)+,(a0) ; plane[--i] !!!
- move.l (sp)+,-(a0)
- move.l (sp)+,-(a0)
- move.l (sp)+,-(a0)
- move.l (sp)+,-(a0)
- move.l (sp)+,-(a0)
- move.l (sp)+,-(a0)
- move.l (sp)+,-(a0)
-
- movem (sp)+,d0-d7/a0-a3
- rts
-
- END
-