home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / CDRom / PHOTOC12.LZX / src / photocdaga / WritePixelPos.asm < prev   
Encoding:
Assembly Source File  |  1995-10-15  |  4.2 KB  |  301 lines

  1. *** new WritePixelLine8 (c) 1995 by Pawel Hernik, Günther Röhrich and others ***
  2.  
  3.     include "graphics/rastport.i"
  4.     XREF _GfxBase
  5.     XREF _linebuf
  6.     XREF _WPBitMap
  7.     XREF _WPPlane
  8.    
  9.         
  10.     XDEF _newWPL8Pos
  11.  
  12.     cseg
  13.  
  14.  
  15.  
  16. _newWPL8Pos:
  17.     movem.l    d0-a6,-(sp)
  18.     sub.w    #16,sp
  19.     move.l    a2,a0            ;chunky
  20.     
  21.     move.l    rp_BitMap(a1),a1
  22.     move.l    _WPBitMap,a2
  23. *    move.b    bm_Depth(a1),bm_Depth(a2)
  24.  
  25.     move.l    _linebuf,a1
  26.     move.l    a1,a2
  27.     move.l    2*4+16(sp),d0
  28.     add.w    #$1f,d0
  29.     and.w    #~$1f,d0
  30.     add.w    d0,a2
  31.     move.l    #$00ff00ff,a3
  32.     move.l    #$0f0f0f0f,a4
  33.     
  34. .sweep1st:
  35.     movem.l (a0),d0-d7
  36.     move.l  d4,a6
  37.     move.w  d0,d4
  38.     swap    d4   
  39.     move.w  d4,d0
  40.     move.w  a6,d4
  41.     move.l  d5,a6
  42.     move.w  d1,d5
  43.     swap    d5   
  44.     move.w  d5,d1
  45.     move.w  a6,d5
  46.     move.l  d6,a6
  47.     move.w  d2,d6
  48.     swap    d6   
  49.     move.w  d6,d2
  50.     move.w  a6,d6
  51.     move.l  d7,a6
  52.     move.w  d3,d7
  53.     swap    d7   
  54.     move.w  d7,d3
  55.     move.w  a6,d7
  56.     move.l  d7,a6
  57.     move.l  d6,a5
  58.     move.l  a3,d6
  59.     move.l  a3,d7
  60.     and.l   d0,d6
  61.     and.l   d2,d7
  62.     eor.l   d6,d0
  63.     eor.l   d7,d2
  64.     lsl.l   #8,d6
  65.     lsr.l   #8,d2
  66.     or.l    d2,d0
  67.     or.l    d7,d6
  68.     move.l  a3,d7
  69.     move.l  a3,d2
  70.     and.l   d1,d7
  71.     and.l   d3,d2
  72.     eor.l   d7,d1
  73.     eor.l   d2,d3
  74.     lsl.l   #8,d7
  75.     lsr.l   #8,d3
  76.     or.l    d3,d1
  77.     or.l    d2,d7
  78.  
  79.     move.l  a4,d2
  80.     move.l  a4,d3
  81.     and.l   d0,d2
  82.     and.l   d1,d3
  83.     eor.l   d2,d0
  84.     eor.l   d3,d1
  85.     lsr.l   #4,d1
  86.     or.l    d1,d0
  87.     move.l  d0,(a1)+
  88.     lsl.l    #4,d2
  89.     or.l    d3,d2
  90.     move.l    d2,(a1)+
  91.  
  92.     move.l  a4,d3
  93.     move.l  a4,d1
  94.     and.l   d6,d3
  95.     and.l   d7,d1
  96.     eor.l   d3,d6
  97.     eor.l   d1,d7
  98.     lsr.l   #4,d7
  99.     or.l    d7,d6
  100.     move.l    d6,(a1)+
  101.     lsl.l    #4,d3
  102.     or.l    d1,d3
  103.     move.l    d3,(a1)+
  104.  
  105.     move.l  a6,d7
  106.     move.l  a5,d6
  107.     move.l  a3,d0
  108.     move.l  a3,d1
  109.     and.l   d4,d0
  110.     and.l   d6,d1
  111.     eor.l   d0,d4
  112.     eor.l   d1,d6
  113.     lsl.l   #8,d0
  114.     lsr.l   #8,d6
  115.     or.l    d6,d4
  116.     or.l    d1,d0
  117.     move.l  a3,d1
  118.     move.l  a3,d6
  119.     and.l   d5,d1
  120.     and.l   d7,d6
  121.     eor.l   d1,d5
  122.     eor.l   d6,d7
  123.     lsl.l   #8,d1
  124.     lsr.l   #8,d7
  125.     or.l    d7,d5
  126.     or.l    d6,d1
  127.     move.l  a4,d6
  128.     move.l  a4,d7
  129.     and.l   d4,d6
  130.     and.l   d5,d7
  131.     eor.l   d6,d4
  132.     eor.l   d7,d5
  133.     lsr.l   #4,d5
  134.     or.l    d5,d4
  135.     move.l  d4,(a1)+
  136.     lsl.l   #4,d6
  137.     or.l    d7,d6
  138.     move.l  d6,(a1)+
  139.  
  140.     move.l  a4,d7
  141.     move.l  a4,d5
  142.     and.l   d0,d7
  143.     and.l   d1,d5
  144.     eor.l   d7,d0
  145.     eor.l    d5,d1
  146.     lsr.l    #4,d1
  147.     or.l    d1,d0
  148.     move.l    d0,(a1)+
  149.     lsl.l    #4,d7
  150.     or.l    d5,d7
  151.     move.l    d7,(a1)+
  152.     add.w    #32,a0
  153.     cmp.l    a2,a1
  154.     bne    .sweep1st
  155.  
  156.     move.l    _linebuf,a0
  157.     move.l    _WPPlane,a1
  158.     move.l  #$33333333,a5
  159.     move.l  #$55555555,a6
  160.  
  161. .sweep2nd:
  162.     move.l    (a0),d0
  163.     move.l    8(a0),d1
  164.     move.l    16(a0),d2
  165.     move.l    24(a0),d3
  166.  
  167.     move.l    a5,d6
  168.     move.l    a5,d7
  169.     and.l    d0,d6
  170.     and.l    d2,d7
  171.     eor.l    d6,d0
  172.     eor.l    d7,d2
  173.     lsl.l    #2,d6
  174.     lsr.l    #2,d2
  175.     or.l    d2,d0
  176.     or.l    d7,d6
  177.     move.l    a5,d7
  178.     move.l    a5,d2
  179.     and.l    d1,d7
  180.     and.l    d3,d2
  181.     eor.l    d7,d1
  182.     eor.l    d2,d3
  183.     lsl.l    #2,d7
  184.     lsr.l    #2,d3
  185.     or.l    d3,d1
  186.     or.l    d2,d7
  187.     move.l    a6,d2
  188.     move.l    a6,d3
  189.     and.l    d0,d2
  190.     and.l    d1,d3
  191.     eor.l    d2,d0
  192.     eor.l    d3,d1
  193.     lsr.l    #1,d1
  194.     or.l    d1,d0
  195.     move.l    d0,256*7(a1)
  196.     add.l    d2,d2
  197.     or.l    d3,d2
  198.     move.l    d2,256*6(a1)
  199.  
  200.     move.l    a6,d3
  201.     move.l    a6,d1
  202.     and.l    d6,d3
  203.     and.l    d7,d1
  204.     eor.l    d3,d6
  205.     eor.l    d1,d7
  206.     lsr.l    #1,d7
  207.     or.l    d7,d6
  208.     move.l    d6,256*5(a1)
  209.     add.l    d3,d3
  210.     or.l    d1,d3
  211.     move.l    d3,256*4(a1)
  212.  
  213.     move.l    4(a0),d0
  214.     move.l    12(a0),d1
  215.     move.l    20(a0),d2
  216.     move.l    28(a0),d3
  217.  
  218.     move.l    a5,d6
  219.     move.l    a5,d7
  220.     and.l    d0,d6
  221.     and.l    d2,d7
  222.     eor.l    d6,d0
  223.     eor.l    d7,d2
  224.     lsl.l    #2,d6
  225.     lsr.l    #2,d2
  226.     or.l    d2,d0
  227.     or.l    d7,d6
  228.     move.l    a5,d7
  229.     move.l    a5,d2
  230.     and.l    d1,d7
  231.     and.l    d3,d2
  232.     eor.l    d7,d1
  233.     eor.l    d2,d3
  234.     lsl.l    #2,d7
  235.     lsr.l    #2,d3
  236.     or.l    d3,d1
  237.     or.l    d2,d7
  238.     move.l    a6,d2
  239.     move.l    a6,d3
  240.     and.l    d0,d2
  241.     and.l    d1,d3
  242.     eor.l    d2,d0
  243.     eor.l    d3,d1
  244.     lsr.l    #1,d1
  245.     or.l    d1,d0
  246.     move.l    d0,256*3(a1)
  247.     add.l    d2,d2
  248.     or.l    d3,d2
  249.     move.l    d2,256*2(a1)
  250.     
  251.     move.l    a6,d3
  252.     move.l    a6,d1
  253.     and.l    d6,d3
  254.     and.l    d7,d1
  255.     eor.l    d3,d6
  256.     eor.l    d1,d7
  257.     lsr.l    #1,d7
  258.     or.l    d7,d6
  259.     move.l    d6,256*1(a1)
  260.     add.l    d3,d3
  261.     or.l    d1,d3
  262.     move.l    d3,(a1)+
  263.  
  264.     add.w    #32,a0
  265.     cmp.l    a2,a0
  266.     bne    .sweep2nd
  267.  
  268.     move.l    _WPBitMap,a0    ;src bm (_mybitmap)
  269.     move.l    8*4+16(sp),a1        ;screen rp (rp=a0)
  270.     moveq    #0,d0
  271.     moveq    #0,d1
  272.     move.l    2*4+16(sp),d4        ;size x (d2)
  273.     moveq    #1,d5            ;size y
  274.     move.l    0*4+16(sp),d2        ;dest x (d0)
  275.     move.l    1*4+16(sp),d3        ;dest y (d1)
  276.     move.b    #$c0,d6
  277.     move.l  _GfxBase,a6
  278.     jsr    -$25e(a6)   ;BltBitMapRastPort
  279.  
  280.     add.w    #16,sp
  281.     movem.l    (sp)+,d0-a6
  282.     move.l    d2,d0
  283.     rts
  284.  
  285.  
  286.  
  287. wd        =0
  288. wd16        =2
  289. htm1        =4
  290. row        =6
  291. chunkytmp    =8
  292. ret        =12
  293. ;^ 16 bytes on stack
  294.  
  295. ;wd:        dc.w    0
  296. ;wd16:        dc.w    0
  297. ;htm1:        dc.w    0
  298. ;row:        dc.w    0
  299. ;chunkytmp:    dc.l    0    ;tmp address
  300. ;ret:        dc.l    0
  301.