home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 2 / MECOMP-CD-II.iso / amiga / emulation / shapeshifter / videodrivers / turboevd / sources / c2p2.s < prev    next >
Encoding:
Text File  |  1996-11-23  |  4.1 KB  |  169 lines

  1. * $VER: c2p2.s (22.11.96) 33.2
  2. *
  3. * - c2p for chunky duplets
  4. * - this routine is public domain, use it as you want
  5. * - based on the new merge rout by Mikael Kalms
  6. *
  7. * Version history:
  8. *
  9. * 33.1  21.11.96    Aki Laukkanen (amlaukka@cc.helsinki.fi)
  10. *
  11. *       should work, not tested
  12. *
  13. * 33.2  22.11.96    laukkanen
  14. *
  15. *       - now it even works. :=)
  16. *       - misc cleanups
  17. *
  18.  
  19.     xdef    _c2p2
  20.  
  21. ; from:
  22. ; 0    2    4    6    8    10   12   14   16   18   20   22   24   26   28   30
  23. ; a1a0 b1b0 c1c0 d1d0 e1e0 f1f0 g1g0 h1h0 i1i0 j1j0 k1k0 l1l0 m1m0 n1n0 o1o0 p1p0
  24. ; q1q0 r1r0 s1s0 t1t0 u1u0 v1v0 w1w0 x1x0 y1y0 z1z0 A1A0 B1B0 C1C0 D1D0 E1E0 F1F0
  25.  
  26. ; 1st pass 16x1
  27. ; a1a0 b1b0 c1c0 d1d0 e1e0 f1f0 g1g0 h1h0 q1q0 r1r0 s1s0 t1t0 u1u0 v1v0 w1w0 x1x0
  28. ; i1i0 j1j0 k1k0 l1l0 m1m0 n1n0 o1o0 p1p0 y1y0 z1z0 A1A0 B1B0 C1C0 D1D0 E1E0 F1F0
  29.  
  30. ; 2nd pass 8x1
  31.  
  32. ; a1a0 b1b0 c1c0 d1d0 i1i0 j1j0 k1k0 l1l0 q1q0 r1r0 s1s0 t1t0 y1y0 z1z0 A1A0 B1B0
  33. ; e1e0 f1f0 g1g0 h1h0 m1m0 n1n0 o1o0 p1p0 u1u0 v1v0 w1w0 x1x0 C1C0 D1D0 E1E0 F1F0
  34.  
  35. ; 3rd pass 4x1
  36.  
  37. ; a1a0 b1b0 e1e0 f1f0 i1i0 j1j0 m1m0 n1n0 q1q0 r1r0 u1u0 v1v0 y1y0 z1z0 C1C0 D1D0
  38. ; c1c0 d1d0 g1g0 h1h0 k1k0 l1l0 o1o0 p1p0 s1s0 t1t0 w1w0 x1x0 A1A0 B1B0 E1E0 F1F0
  39.  
  40. ; 4th pass 2x1
  41. ; a1a0 c1c0 e1e0 g1g0 i1i0 k1k0 m1m0 o1o0 q1q0 s1s0 u1u0 w1w0 y1y0 A1A0 C1C0 E1E0
  42. ; b1b0 d1d0 f1f0 h1h0 j1j0 l1l0 n1n0 p1p0 r1r0 t1t0 v1v0 x1x0 z1z0 B1B0 D1D0 F1F0
  43.  
  44. ; last pass 1x1
  45. ; to:
  46. ; a1b1 c1d1 e1f1 g1h1 i1j1 k1l1 m1n1 o1p1 q1r1 s1t1 u1v1 w1x1 y1z1 A1B1 C1D1 E1F1
  47. ; a0b0 c0d0 e0f0 g0h0 i0j0 k0l0 m0n0 o0p0 q0r0 s0t0 u0v0 w0x0 y0z0 A0B0 C0D0 E0F0
  48.  
  49.     include "exec/types.i"
  50.  
  51. ; a0 - chunky start
  52. ; a1 - bitplane1
  53. ; a2 - bitplane2
  54. ; a3 - chunky end
  55.  
  56. c2p2
  57.     movem.l d2-d7/a2-a3,-(sp)
  58.  
  59.     move.l  #$00FF00FF,d2
  60.     move.l  #$0F0F0F0F,d3
  61.     move.l  #$33333333,d4
  62.     move.l  #$55555555,d5
  63.  
  64. .start
  65.     move.l  (a0)+,d0
  66.     move.l  (a0)+,d1
  67.  
  68.     swap    d1                  ; 1st pass
  69.     move.w  d0,d7
  70.     move.w  d1,d0
  71.     move.w  d7,d1
  72.     swap    d1
  73.  
  74.     move.l  d1,d7               ; 2nd pass
  75.     lsr.l   #8,d7
  76.     eor.l   d0,d7
  77.     and.l   d2,d7
  78.     eor.l   d7,d0
  79.     lsl.l   #8,d7
  80.     eor.l   d7,d1
  81.  
  82.     move.l  d1,d7               ; 3rd pass
  83.     lsr.l   #4,d7
  84.     eor.l   d0,d7
  85.     and.l   d3,d7
  86.     eor.l   d7,d0
  87.     lsl.l   #4,d7
  88.     eor.l   d7,d1
  89.  
  90.     move.l  d1,d7               ; 4th pass
  91.     lsr.l   #2,d7
  92.     eor.l   d0,d7
  93.     and.l   d4,d7
  94.     eor.l   d7,d0
  95.     lsl.l   #2,d7
  96.     eor.l   d7,d1
  97.  
  98.     move.l  d1,d7               ; 5th pass
  99.     lsr.l   #1,d7
  100.     eor.l   d0,d7
  101.     and.l   d5,d7
  102.     eor.l   d7,d0
  103.     add.l   d7,d7
  104.     eor.l   d7,d1
  105.  
  106.     move.l  d0,d6
  107.     move.l  d1,a4   
  108.  
  109.     cmp.l   a0,a3
  110.     beq.s   .end
  111. .loop
  112.     move.l  (a0)+,d0
  113.     move.l  (a0)+,d1
  114.  
  115.     move.l  d6,(a2)+
  116.  
  117.     swap    d1                  ; 1st pass  1
  118.     move.w  d0,d7               ;           1
  119.     move.w  d1,d0               ;           sOEP
  120.     move.w  d7,d1               ;           1
  121.     swap    d1                  ;           1
  122.  
  123.     move.l  d1,d7               ; 2nd pass  1
  124.     lsr.l   #8,d7               ;           1
  125.     eor.l   d0,d7               ;           1
  126.     and.l   d2,d7               ;           1
  127.     eor.l   d7,d0               ;           1
  128.     lsl.l   #8,d7               ;           1
  129.     eor.l   d7,d1               ;           1
  130.  
  131.     move.l  d1,d7               ; 3rd pass  1
  132.     lsr.l   #4,d7               ;           1
  133.     eor.l   d0,d7               ;           1
  134.     and.l   d3,d7               ;           1
  135.     eor.l   d7,d0               ;           1
  136.     lsl.l   #4,d7               ;           1
  137.     eor.l   d7,d1               ;           1 = 18 cycles between chip writes
  138.                                 ; should be free from 040/25 upwards
  139.     move.l  a4,(a1)+
  140.  
  141.     move.l  d1,d7               ; 4th pass
  142.     lsr.l   #2,d7
  143.     eor.l   d0,d7
  144.     and.l   d4,d7
  145.     eor.l   d7,d0
  146.     lsl.l   #2,d7
  147.     eor.l   d7,d1
  148.  
  149.     move.l  d1,d7               ; 5th pass
  150.     lsr.l   #1,d7
  151.     eor.l   d0,d7
  152.     and.l   d5,d7
  153.     eor.l   d7,d0
  154.     add.l   d7,d7
  155.     eor.l   d7,d1
  156.  
  157.     move.l  d0,d6
  158.     move.l  d1,a4   
  159.  
  160.     cmp.l   a0,a3
  161.     bne     .loop
  162. .end
  163.     move.l  d6,(a2)
  164.     move.l  a4,(a1)
  165.  
  166.     movem.l (sp)+,d2-d7/a2-a3
  167.  
  168.     rts
  169.