home *** CD-ROM | disk | FTP | other *** search
- * FlipBits.asm Kirk A. Baker
- * Flips bitmaps on X and Y axis 10-16-89
-
- * =================================================================================
- *
- * FlipBitMapY
- * Given a pointer to the above FlipData and a pointer to a BitMap, FlipBitMapY
- * will flip all planes of a bitmap on their Y-axis.
- *
- * =================================================================================
-
- bm_BytesPerRow EQU 0
- bm_Rows EQU 2
- bm_Depth EQU 5
- bm_Planes EQU 8
-
-
- PUBLIC _FlipYData
-
- * FlipBitMapY(&myBitmap);
-
- PUBLIC _FlipBitMapY
-
- _FlipBitMapY:
- movem.l d3-d5/a2-a4,-(sp)
- move.l 28(sp),a2 ;BitMap addr in a2
- lea _FlipYData,a3 ;FlipYData pointer in a3
- move.w bm_Rows(a2),d0 ;
- subq.l #1,d0 ;# rows in d0
- move.l d0,d5 ;safe keeping of # rows
- moveq.l #0,d1 ;
- move.w bm_BytesPerRow(a2),d1 ;
- moveq.l #0,d2 ;
- move.b bm_Depth(a2),d2 ;
- subq.l #1,d2 ;depth in d2
- addq.l #bm_Planes,a2 ;start of array of ptrs to planes
- moveq.l #0,d3
- moveq.l #0,d4
- 4$: move.l (a2)+,a4 ;plane in a4
- 3$: move.l a4,a0 ;start of plane in a0
- move.l a4,a1
- adda.l d1,a1 ;end of row in a1
- 1$: move.b -(a1),d3 ;byte to flip in d3
- move.b 0(a3,d3.w),d3 ;flipped byte in d3
- move.b (a0),d4 ;byte to flip in d4
- move.b 0(a3,d4.w),(a1) ;put a0's flipped byte in (a1)
- move.b d3,(a0)+ ;put a1's flipped byte in (a0)
- cmp.l a0,a1 ;
- bgt.s 1$ ;if a1 > a0 then flip again
- 2$: adda.l d1,a4 ; index into next row
- dbf.w d0,3$
- move.l d5,d0 ;restore #rows
- dbf.w d2,4$
- movem.l (sp)+,d3-d5/a2-a4
- rts
-
-
- _FlipYData:
- dc.b %00000000
- dc.b %10000000
- dc.b %01000000
- dc.b %11000000
- dc.b %00100000
- dc.b %10100000
- dc.b %01100000
- dc.b %11100000
- dc.b %00010000
- dc.b %10010000
- dc.b %01010000
- dc.b %11010000
- dc.b %00110000
- dc.b %10110000
- dc.b %01110000
- dc.b %11110000
- dc.b %00001000
- dc.b %10001000
- dc.b %01001000
- dc.b %11001000
- dc.b %00101000
- dc.b %10101000
- dc.b %01101000
- dc.b %11101000
- dc.b %00011000
- dc.b %10011000
- dc.b %01011000
- dc.b %11011000
- dc.b %00111000
- dc.b %10111000
- dc.b %01111000
- dc.b %11111000
- dc.b %00000100
- dc.b %10000100
- dc.b %01000100
- dc.b %11000100
- dc.b %00100100
- dc.b %10100100
- dc.b %01100100
- dc.b %11100100
- dc.b %00010100
- dc.b %10010100
- dc.b %01010100
- dc.b %11010100
- dc.b %00110100
- dc.b %10110100
- dc.b %01110100
- dc.b %11110100
- dc.b %00001100
- dc.b %10001100
- dc.b %01001100
- dc.b %11001100
- dc.b %00101100
- dc.b %10101100
- dc.b %01101100
- dc.b %11101100
- dc.b %00011100
- dc.b %10011100
- dc.b %01011100
- dc.b %11011100
- dc.b %00111100
- dc.b %10111100
- dc.b %01111100
- dc.b %11111100
- dc.b %00000010
- dc.b %10000010
- dc.b %01000010
- dc.b %11000010
- dc.b %00100010
- dc.b %10100010
- dc.b %01100010
- dc.b %11100010
- dc.b %00010010
- dc.b %10010010
- dc.b %01010010
- dc.b %11010010
- dc.b %00110010
- dc.b %10110010
- dc.b %01110010
- dc.b %11110010
- dc.b %00001010
- dc.b %10001010
- dc.b %01001010
- dc.b %11001010
- dc.b %00101010
- dc.b %10101010
- dc.b %01101010
- dc.b %11101010
- dc.b %00011010
- dc.b %10011010
- dc.b %01011010
- dc.b %11011010
- dc.b %00111010
- dc.b %10111010
- dc.b %01111010
- dc.b %11111010
- dc.b %00000110
- dc.b %10000110
- dc.b %01000110
- dc.b %11000110
- dc.b %00100110
- dc.b %10100110
- dc.b %01100110
- dc.b %11100110
- dc.b %00010110
- dc.b %10010110
- dc.b %01010110
- dc.b %11010110
- dc.b %00110110
- dc.b %10110110
- dc.b %01110110
- dc.b %11110110
- dc.b %00001110
- dc.b %10001110
- dc.b %01001110
- dc.b %11001110
- dc.b %00101110
- dc.b %10101110
- dc.b %01101110
- dc.b %11101110
- dc.b %00011110
- dc.b %10011110
- dc.b %01011110
- dc.b %11011110
- dc.b %00111110
- dc.b %10111110
- dc.b %01111110
- dc.b %11111110
- dc.b %00000001
- dc.b %10000001
- dc.b %01000001
- dc.b %11000001
- dc.b %00100001
- dc.b %10100001
- dc.b %01100001
- dc.b %11100001
- dc.b %00010001
- dc.b %10010001
- dc.b %01010001
- dc.b %11010001
- dc.b %00110001
- dc.b %10110001
- dc.b %01110001
- dc.b %11110001
- dc.b %00001001
- dc.b %10001001
- dc.b %01001001
- dc.b %11001001
- dc.b %00101001
- dc.b %10101001
- dc.b %01101001
- dc.b %11101001
- dc.b %00011001
- dc.b %10011001
- dc.b %01011001
- dc.b %11011001
- dc.b %00111001
- dc.b %10111001
- dc.b %01111001
- dc.b %11111001
- dc.b %00000101
- dc.b %10000101
- dc.b %01000101
- dc.b %11000101
- dc.b %00100101
- dc.b %10100101
- dc.b %01100101
- dc.b %11100101
- dc.b %00010101
- dc.b %10010101
- dc.b %01010101
- dc.b %11010101
- dc.b %00110101
- dc.b %10110101
- dc.b %01110101
- dc.b %11110101
- dc.b %00001101
- dc.b %10001101
- dc.b %01001101
- dc.b %11001101
- dc.b %00101101
- dc.b %10101101
- dc.b %01101101
- dc.b %11101101
- dc.b %00011101
- dc.b %10011101
- dc.b %01011101
- dc.b %11011101
- dc.b %00111101
- dc.b %10111101
- dc.b %01111101
- dc.b %11111101
- dc.b %00000011
- dc.b %10000011
- dc.b %01000011
- dc.b %11000011
- dc.b %00100011
- dc.b %10100011
- dc.b %01100011
- dc.b %11100011
- dc.b %00010011
- dc.b %10010011
- dc.b %01010011
- dc.b %11010011
- dc.b %00110011
- dc.b %10110011
- dc.b %01110011
- dc.b %11110011
- dc.b %00001011
- dc.b %10001011
- dc.b %01001011
- dc.b %11001011
- dc.b %00101011
- dc.b %10101011
- dc.b %01101011
- dc.b %11101011
- dc.b %00011011
- dc.b %10011011
- dc.b %01011011
- dc.b %11011011
- dc.b %00111011
- dc.b %10111011
- dc.b %01111011
- dc.b %11111011
- dc.b %00000111
- dc.b %10000111
- dc.b %01000111
- dc.b %11000111
- dc.b %00100111
- dc.b %10100111
- dc.b %01100111
- dc.b %11100111
- dc.b %00010111
- dc.b %10010111
- dc.b %01010111
- dc.b %11010111
- dc.b %00110111
- dc.b %10110111
- dc.b %01110111
- dc.b %11110111
- dc.b %00001111
- dc.b %10001111
- dc.b %01001111
- dc.b %11001111
- dc.b %00101111
- dc.b %10101111
- dc.b %01101111
- dc.b %11101111
- dc.b %00011111
- dc.b %10011111
- dc.b %01011111
- dc.b %11011111
- dc.b %00111111
- dc.b %10111111
- dc.b %01111111
- dc.b %11111111
-
-
- * FlipBitMapX(&myBitmap)
-
- PUBLIC _FlipBitMapX
-
- _FlipBitMapX
- movem.l d3-d6/a2,-(sp)
- move.l 24(sp),a2 ;bitmap addr in a2
- moveq.l #0,d1 ;
- move.b bm_Depth(a2),d1 ;
- subq.l #1,d1 ;depth in d1
- moveq.l #0,d2 ;
- move.w bm_Rows(a2),d2 ;
- subq.l #1,d2 ;#rows in d2
- moveq.l #0,d4 ;
- move.w bm_BytesPerRow(a2),d4 ;
- move.l d4,d5 ;
- move.l d4,d6 ;BytesPerRow in d6
- asl.l #1,d5 ;"backup" offset in d5
- subq.l #1,d4 ;adjusted BytesPerRow in d4
- move.l d4,d3 ;safe keeping of counter
- mulu.w d2,d6 ;index to last row
- addq.l #bm_Planes,a2 ; a2 is now PlanePtr
- 2$: move.l (a2)+,a0 ;beginning of plane
- move.l a0,a1
- adda.l d6,a1 ;index a1 to begining of last row
- 1$: move.b (a0),d0
- move.b (a1),(a0)+ ;swap bytes in rows
- move.b d0,(a1)+
- dbf.w d4,1$
- suba.l d5,a1 ;"backup" a1
- move.l d3,d4 ;get BytesPerRow again
- cmp.l a1,a0
- blt.s 1$
- dbf.w d1,2$
- movem.l (sp)+,d3-d6/a2
- rts
-
- * EOF
-