home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 298.lha / flip / flipbits.asm < prev    next >
Encoding:
Assembly Source File  |  1980-12-02  |  9.1 KB  |  355 lines

  1. * FlipBits.asm                                          Kirk A. Baker
  2. * Flips bitmaps on X and Y axis                         10-16-89
  3.  
  4. * =================================================================================
  5. *
  6. * FlipBitMapY
  7. *   Given a pointer to the above FlipData and a pointer to a BitMap, FlipBitMapY
  8. * will flip all planes of a  bitmap on their Y-axis.
  9. *
  10. * =================================================================================
  11.  
  12. bm_BytesPerRow EQU 0
  13. bm_Rows        EQU 2
  14. bm_Depth       EQU 5
  15. bm_Planes      EQU 8
  16.  
  17.  
  18.     PUBLIC _FlipYData
  19.  
  20. * FlipBitMapY(&myBitmap);
  21.  
  22.     PUBLIC _FlipBitMapY
  23.  
  24. _FlipBitMapY:
  25.             movem.l     d3-d5/a2-a4,-(sp)
  26.             move.l      28(sp),a2                   ;BitMap addr in a2
  27.             lea         _FlipYData,a3               ;FlipYData pointer in a3
  28.             move.w      bm_Rows(a2),d0              ;
  29.             subq.l      #1,d0                       ;# rows in d0
  30.             move.l      d0,d5                       ;safe keeping of # rows
  31.             moveq.l     #0,d1                       ;
  32.             move.w      bm_BytesPerRow(a2),d1       ;
  33.             moveq.l     #0,d2                       ;
  34.             move.b      bm_Depth(a2),d2             ;
  35.             subq.l      #1,d2                       ;depth in d2
  36.             addq.l      #bm_Planes,a2               ;start of array of ptrs to planes
  37.             moveq.l     #0,d3
  38.             moveq.l     #0,d4
  39. 4$:         move.l      (a2)+,a4                    ;plane in a4
  40. 3$:          move.l     a4,a0                       ;start of plane in a0
  41.              move.l     a4,a1
  42.              adda.l     d1,a1                       ;end of row in a1
  43. 1$:           move.b    -(a1),d3                    ;byte to flip in d3
  44.               move.b    0(a3,d3.w),d3               ;flipped byte in d3
  45.               move.b    (a0),d4                     ;byte to flip in d4
  46.               move.b    0(a3,d4.w),(a1)             ;put a0's flipped byte in (a1)
  47.               move.b    d3,(a0)+                    ;put a1's flipped byte in (a0)
  48.               cmp.l     a0,a1                       ;
  49.               bgt.s     1$                          ;if a1 > a0 then flip again
  50. 2$:          adda.l     d1,a4                       ; index into next row
  51.              dbf.w      d0,3$
  52.              move.l     d5,d0                       ;restore #rows
  53.             dbf.w       d2,4$
  54.             movem.l     (sp)+,d3-d5/a2-a4
  55.             rts
  56.  
  57.  
  58. _FlipYData:
  59.    dc.b   %00000000
  60.    dc.b   %10000000
  61.    dc.b   %01000000
  62.    dc.b   %11000000
  63.    dc.b   %00100000
  64.    dc.b   %10100000
  65.    dc.b   %01100000
  66.    dc.b   %11100000
  67.    dc.b   %00010000
  68.    dc.b   %10010000
  69.    dc.b   %01010000
  70.    dc.b   %11010000
  71.    dc.b   %00110000
  72.    dc.b   %10110000
  73.    dc.b   %01110000
  74.    dc.b   %11110000
  75.    dc.b   %00001000
  76.    dc.b   %10001000
  77.    dc.b   %01001000
  78.    dc.b   %11001000
  79.    dc.b   %00101000
  80.    dc.b   %10101000
  81.    dc.b   %01101000
  82.    dc.b   %11101000
  83.    dc.b   %00011000
  84.    dc.b   %10011000
  85.    dc.b   %01011000
  86.    dc.b   %11011000
  87.    dc.b   %00111000
  88.    dc.b   %10111000
  89.    dc.b   %01111000
  90.    dc.b   %11111000
  91.    dc.b   %00000100
  92.    dc.b   %10000100
  93.    dc.b   %01000100
  94.    dc.b   %11000100
  95.    dc.b   %00100100
  96.    dc.b   %10100100
  97.    dc.b   %01100100
  98.    dc.b   %11100100
  99.    dc.b   %00010100
  100.    dc.b   %10010100
  101.    dc.b   %01010100
  102.    dc.b   %11010100
  103.    dc.b   %00110100
  104.    dc.b   %10110100
  105.    dc.b   %01110100
  106.    dc.b   %11110100
  107.    dc.b   %00001100
  108.    dc.b   %10001100
  109.    dc.b   %01001100
  110.    dc.b   %11001100
  111.    dc.b   %00101100
  112.    dc.b   %10101100
  113.    dc.b   %01101100
  114.    dc.b   %11101100
  115.    dc.b   %00011100
  116.    dc.b   %10011100
  117.    dc.b   %01011100
  118.    dc.b   %11011100
  119.    dc.b   %00111100
  120.    dc.b   %10111100
  121.    dc.b   %01111100
  122.    dc.b   %11111100
  123.    dc.b   %00000010
  124.    dc.b   %10000010
  125.    dc.b   %01000010
  126.    dc.b   %11000010
  127.    dc.b   %00100010
  128.    dc.b   %10100010
  129.    dc.b   %01100010
  130.    dc.b   %11100010
  131.    dc.b   %00010010
  132.    dc.b   %10010010
  133.    dc.b   %01010010
  134.    dc.b   %11010010
  135.    dc.b   %00110010
  136.    dc.b   %10110010
  137.    dc.b   %01110010
  138.    dc.b   %11110010
  139.    dc.b   %00001010
  140.    dc.b   %10001010
  141.    dc.b   %01001010
  142.    dc.b   %11001010
  143.    dc.b   %00101010
  144.    dc.b   %10101010
  145.    dc.b   %01101010
  146.    dc.b   %11101010
  147.    dc.b   %00011010
  148.    dc.b   %10011010
  149.    dc.b   %01011010
  150.    dc.b   %11011010
  151.    dc.b   %00111010
  152.    dc.b   %10111010
  153.    dc.b   %01111010
  154.    dc.b   %11111010
  155.    dc.b   %00000110
  156.    dc.b   %10000110
  157.    dc.b   %01000110
  158.    dc.b   %11000110
  159.    dc.b   %00100110
  160.    dc.b   %10100110
  161.    dc.b   %01100110
  162.    dc.b   %11100110
  163.    dc.b   %00010110
  164.    dc.b   %10010110
  165.    dc.b   %01010110
  166.    dc.b   %11010110
  167.    dc.b   %00110110
  168.    dc.b   %10110110
  169.    dc.b   %01110110
  170.    dc.b   %11110110
  171.    dc.b   %00001110
  172.    dc.b   %10001110
  173.    dc.b   %01001110
  174.    dc.b   %11001110
  175.    dc.b   %00101110
  176.    dc.b   %10101110
  177.    dc.b   %01101110
  178.    dc.b   %11101110
  179.    dc.b   %00011110
  180.    dc.b   %10011110
  181.    dc.b   %01011110
  182.    dc.b   %11011110
  183.    dc.b   %00111110
  184.    dc.b   %10111110
  185.    dc.b   %01111110
  186.    dc.b   %11111110
  187.    dc.b   %00000001
  188.    dc.b   %10000001
  189.    dc.b   %01000001
  190.    dc.b   %11000001
  191.    dc.b   %00100001
  192.    dc.b   %10100001
  193.    dc.b   %01100001
  194.    dc.b   %11100001
  195.    dc.b   %00010001
  196.    dc.b   %10010001
  197.    dc.b   %01010001
  198.    dc.b   %11010001
  199.    dc.b   %00110001
  200.    dc.b   %10110001
  201.    dc.b   %01110001
  202.    dc.b   %11110001
  203.    dc.b   %00001001
  204.    dc.b   %10001001
  205.    dc.b   %01001001
  206.    dc.b   %11001001
  207.    dc.b   %00101001
  208.    dc.b   %10101001
  209.    dc.b   %01101001
  210.    dc.b   %11101001
  211.    dc.b   %00011001
  212.    dc.b   %10011001
  213.    dc.b   %01011001
  214.    dc.b   %11011001
  215.    dc.b   %00111001
  216.    dc.b   %10111001
  217.    dc.b   %01111001
  218.    dc.b   %11111001
  219.    dc.b   %00000101
  220.    dc.b   %10000101
  221.    dc.b   %01000101
  222.    dc.b   %11000101
  223.    dc.b   %00100101
  224.    dc.b   %10100101
  225.    dc.b   %01100101
  226.    dc.b   %11100101
  227.    dc.b   %00010101
  228.    dc.b   %10010101
  229.    dc.b   %01010101
  230.    dc.b   %11010101
  231.    dc.b   %00110101
  232.    dc.b   %10110101
  233.    dc.b   %01110101
  234.    dc.b   %11110101
  235.    dc.b   %00001101
  236.    dc.b   %10001101
  237.    dc.b   %01001101
  238.    dc.b   %11001101
  239.    dc.b   %00101101
  240.    dc.b   %10101101
  241.    dc.b   %01101101
  242.    dc.b   %11101101
  243.    dc.b   %00011101
  244.    dc.b   %10011101
  245.    dc.b   %01011101
  246.    dc.b   %11011101
  247.    dc.b   %00111101
  248.    dc.b   %10111101
  249.    dc.b   %01111101
  250.    dc.b   %11111101
  251.    dc.b   %00000011
  252.    dc.b   %10000011
  253.    dc.b   %01000011
  254.    dc.b   %11000011
  255.    dc.b   %00100011
  256.    dc.b   %10100011
  257.    dc.b   %01100011
  258.    dc.b   %11100011
  259.    dc.b   %00010011
  260.    dc.b   %10010011
  261.    dc.b   %01010011
  262.    dc.b   %11010011
  263.    dc.b   %00110011
  264.    dc.b   %10110011
  265.    dc.b   %01110011
  266.    dc.b   %11110011
  267.    dc.b   %00001011
  268.    dc.b   %10001011
  269.    dc.b   %01001011
  270.    dc.b   %11001011
  271.    dc.b   %00101011
  272.    dc.b   %10101011
  273.    dc.b   %01101011
  274.    dc.b   %11101011
  275.    dc.b   %00011011
  276.    dc.b   %10011011
  277.    dc.b   %01011011
  278.    dc.b   %11011011
  279.    dc.b   %00111011
  280.    dc.b   %10111011
  281.    dc.b   %01111011
  282.    dc.b   %11111011
  283.    dc.b   %00000111
  284.    dc.b   %10000111
  285.    dc.b   %01000111
  286.    dc.b   %11000111
  287.    dc.b   %00100111
  288.    dc.b   %10100111
  289.    dc.b   %01100111
  290.    dc.b   %11100111
  291.    dc.b   %00010111
  292.    dc.b   %10010111
  293.    dc.b   %01010111
  294.    dc.b   %11010111
  295.    dc.b   %00110111
  296.    dc.b   %10110111
  297.    dc.b   %01110111
  298.    dc.b   %11110111
  299.    dc.b   %00001111
  300.    dc.b   %10001111
  301.    dc.b   %01001111
  302.    dc.b   %11001111
  303.    dc.b   %00101111
  304.    dc.b   %10101111
  305.    dc.b   %01101111
  306.    dc.b   %11101111
  307.    dc.b   %00011111
  308.    dc.b   %10011111
  309.    dc.b   %01011111
  310.    dc.b   %11011111
  311.    dc.b   %00111111
  312.    dc.b   %10111111
  313.    dc.b   %01111111
  314.    dc.b   %11111111
  315.  
  316.  
  317. * FlipBitMapX(&myBitmap)
  318.  
  319.     PUBLIC _FlipBitMapX
  320.  
  321. _FlipBitMapX
  322.             movem.l     d3-d6/a2,-(sp)
  323.             move.l      24(sp),a2                   ;bitmap addr in a2
  324.             moveq.l     #0,d1                       ;
  325.             move.b      bm_Depth(a2),d1             ;
  326.             subq.l      #1,d1                       ;depth in d1
  327.             moveq.l     #0,d2                       ;
  328.             move.w      bm_Rows(a2),d2              ;
  329.             subq.l      #1,d2                       ;#rows in d2
  330.             moveq.l     #0,d4                       ;
  331.             move.w      bm_BytesPerRow(a2),d4       ;
  332.             move.l      d4,d5                       ;
  333.             move.l      d4,d6                       ;BytesPerRow in d6
  334.             asl.l       #1,d5                       ;"backup" offset in d5
  335.             subq.l      #1,d4                       ;adjusted BytesPerRow in d4
  336.             move.l      d4,d3                       ;safe keeping of counter
  337.             mulu.w      d2,d6                       ;index to last row
  338.             addq.l      #bm_Planes,a2               ; a2 is now PlanePtr
  339. 2$:         move.l      (a2)+,a0                    ;beginning of plane
  340.             move.l      a0,a1
  341.             adda.l      d6,a1                       ;index a1 to begining of last row
  342. 1$:          move.b     (a0),d0
  343.              move.b     (a1),(a0)+                  ;swap bytes in rows
  344.              move.b     d0,(a1)+
  345.              dbf.w      d4,1$
  346.              suba.l     d5,a1                       ;"backup" a1
  347.              move.l     d3,d4                       ;get BytesPerRow again
  348.              cmp.l      a1,a0
  349.              blt.s      1$
  350.             dbf.w       d1,2$
  351.             movem.l     (sp)+,d3-d6/a2
  352.             rts
  353.  
  354. * EOF
  355.