home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / grafix / boards / a2410src.lha / Public / Source / CopyP2C.a < prev    next >
Encoding:
Text File  |  1994-12-14  |  3.7 KB  |  148 lines

  1.  
  2.     SECTION __MERGED,DATA
  3.  
  4. ; Prototype see gfx.c
  5. ; a2 : Planes[8];
  6. ; a3 : chunky buffer
  7. ; d6 : Bitmap depth
  8. ; d7 : BitMap Size
  9.  
  10.     XDEF _CopyPlane2Chunky
  11.  
  12.     SECTION CODE
  13.  
  14. _CopyPlane2Chunky:
  15.  
  16.     movem   d0-d7/a0-a3,-(sp)
  17.  
  18. ; backup the planepointers
  19.     move.l  a2,a0    ; a2 = planebase !
  20.     move.l  (a0)+,-(sp)
  21.     move.l  (a0)+,-(sp)
  22.     move.l  (a0)+,-(sp)
  23.     move.l  (a0)+,-(sp)
  24.     move.l  (a0)+,-(sp)
  25.     move.l  (a0)+,-(sp)
  26.     move.l  (a0)+,-(sp)
  27.     move.l  (a0),-(sp)
  28.  
  29.     subq.w  #1,d6
  30.  
  31. next_pixel:
  32.     
  33.     move.l  a2,a0    ; a2 = planebase !
  34.     move.l  (a0),a1
  35.     move.w  d6,d5    ;            - 4
  36.     sub.l   d0,d0
  37.     move.l  d0,d1
  38.     move.l  d0,d2
  39.     move.l  d0,d3
  40.     move.l  d0,d4
  41.  
  42. ; ********* Copy PlanesData in Chunky Pixel
  43.  
  44. next_plane:
  45.  
  46.     move.b  (a1),d0  ; erste 8 Bit nach d0.low      - 8
  47.  
  48.     ror.w   #1,d0  ; high            - 6+2x = 8
  49.     move.b  d0,d4  ;                 - 4
  50.     swap.w  d0     ;                 - 4
  51.     move.b  d4,d0  ;                 - 4
  52.     ror.w   #1,d0  ; low             - 8
  53.     move.b  d0,d1  ;                 - 4
  54.     swap.w  d0     ;                 - 4
  55.  
  56.     ror.w   #1,d1  ; high            - 8
  57.     move.b  d1,d4  ;                 - 4
  58.     swap.w  d1     ;                 - 4
  59.     move.b  d4,d1  ;                 - 4
  60.     ror.w   #1,d1  ; low             - 8
  61.     move.b  d1,d2  ;                 - 4
  62.     swap.w  d1     ;                 - 4
  63.  
  64.     ror.w   #1,d2  ; high            - 8
  65.     move.b  d2,d4  ;                 - 4
  66.     swap.w  d2     ;                 - 4
  67.     move.b  d4,d2  ;                 - 4
  68.     ror.w   #1,d2  ; low             - 8
  69.     move.b  d2,d3  ;                 - 4
  70.     swap.w  d2     ;                 - 4
  71.  
  72.     ror.w   #1,d3  ; high            - 8
  73.     move.b  d3,d4  ;                 - 4
  74.     swap.w  d3     ;                 - 4
  75.     move.b  d4,d3  ;                 - 4
  76.     ror.w   #1,d3  ; low             - 4
  77.     swap.w  d3     ;                 - 4
  78.  
  79.     addq.l  #1,a1  
  80.     move.l  a1,(a0)+ ; Plane[i++] += 1;
  81.  
  82.     move.l  (a0),a1  ; a1 = planes[i] - 12
  83.     dbra    d5,next_plane   ; --depth >= 0 ? jmp next_plane; - 12
  84.  
  85.     cmp.w   #7,d6
  86.     beq     WriteBack
  87.  
  88. ; if (depth < 8)
  89.  
  90.     move.w  #7,d4
  91.     sub.w   d6,d4
  92.     move.l  #$ff00ff00,d5
  93.     and.l   d5,d0
  94.     lsr.l   d4,d0
  95.     and.l   d5,d1
  96.     lsr.l   d4,d1
  97.     and.l   d5,d2
  98.     lsr.l   d4,d2
  99.     and.l   d5,d3
  100.     lsr.l   d4,d3
  101.  
  102. ; ******** WriteBack the Chunky Data
  103.  
  104. WriteBack:
  105.     lsr.l   #8,d3     ;             - 8+2x = 24 ( +2) 
  106.     swap.w  d3        ;             - 4 ( +4)
  107.     move.b  d3,(a3)+  ; pixel[0]    - 8
  108.     swap.w  d3        ;             - 4  ( -18 !)
  109.     move.b  d3,(a3)+  ; pixel[1]    - 8
  110.  
  111.     lsr.l   #8,d2     ;             - 24 ( +2)
  112.     swap.w  d2        ;             - 4
  113.     move.b  d2,(a3)+  ; pixel[2]    - 8
  114.     swap.w  d2        ;             - 4  ( -18 !)
  115.     move.b  d2,(a3)+  ; pixel[3]    - 8
  116.  
  117.     lsr.l   #8,d1     ;             - 24 ( +2)
  118.     swap.w  d1        ;             - 4
  119.     move.b  d1,(a3)+  ; pixel[4]    - 8
  120.     swap.w  d1        ;             - 4  ( -18 !)
  121.     move.b  d1,(a3)+  ; pixel[5]    - 8
  122.  
  123.     lsr.l   #8,d0     ;             - 24 ( +2)
  124.     swap.w  d0        ;             - 4
  125.     move.b  d0,(a3)+  ; pixel[6]    - 8
  126.     swap.w  d0        ;             - 4  ( -18 !)
  127.     move.b  d0,(a3)+  ; pixel[7]    - 8
  128.    
  129.     subq.l  #1,d7     ; d7 is a long !
  130.     bne     next_pixel  ; --BMSize >= 0 ? jmp next_pixel;  - 12
  131.  
  132. ; reinstall the plamepointers !
  133.     move.l  a2,a0     ; a2 = planebase !
  134.     add.l   #28,a0      ; plane[8] !!!
  135.     move.l  (sp)+,(a0)  ; plane[--i] !!!
  136.     move.l  (sp)+,-(a0)
  137.     move.l  (sp)+,-(a0)
  138.     move.l  (sp)+,-(a0)
  139.     move.l  (sp)+,-(a0)
  140.     move.l  (sp)+,-(a0)
  141.     move.l  (sp)+,-(a0)
  142.     move.l  (sp)+,-(a0)
  143.  
  144.     movem   (sp)+,d0-d7/a0-a3
  145.     rts
  146.  
  147.     END
  148.