home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 25 / GNOME_DEMO.iso / amiga / games / testment.lzx / c2p / source / c2p_020_optimized.s next >
Text File  |  1997-02-18  |  5KB  |  396 lines

  1. ;Notice :     All branches and variables must be position-independent
  2. ;        Variables must be acessed via PC
  3.  
  4.         ;for safety ;-)
  5.         rts
  6.  
  7.         ;Identify string !
  8.         dc.b        'C2P',0
  9.         
  10.         ;Main routine        
  11.         ;a0 - chunkybuffer
  12.         ;a1 - planes
  13. Begin        dc.l        Chunky1x1-Begin        ;offset to routine
  14.  
  15.         ;Init routine
  16.         ;d0 - Width
  17.         ;d1 - Height
  18.         ;d2 - PlaneSize
  19.         dc.l        InitChunky-Begin    ;offset to routine
  20.  
  21.         dc.l        Support-Begin
  22.         
  23. BPLSIZE        equ    10240
  24.     
  25. InitChunky
  26.     movem.l    d2-d3,-(sp)
  27.     lea    c2p_pixels(pc),a0
  28.     mulu.w    d0,d1
  29.     move.l    d1,(a0)
  30.     movem.l    (sp)+,d2-d3
  31.     rts
  32.  
  33. ; a0    c2pscreen
  34. ; a1    bitplanes
  35.  
  36. Chunky1x1    
  37.     movem.l    d2-d7/a2-a6,-(sp)
  38.  
  39.     lea    c2p_pixels(pc),a2
  40.  
  41.     move.l    #$33333333,d5
  42.     move.l    #$55555555,d6
  43.     move.l    #$00ff00ff,a6
  44.  
  45.     add.w    #BPLSIZE,a1
  46.  
  47.     movem.l    a0-a1,-(sp)
  48.  
  49.     move.l    (a2),a2
  50.     add.l    a0,a2
  51.     cmp.l    a0,a2
  52.     beq    .none
  53.  
  54.     move.l    (a0)+,d0
  55.     move.l    (a0)+,d2
  56.     move.l    (a0)+,d1
  57.     move.l    (a0)+,d3
  58.  
  59.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 1
  60.     and.l    d4,d0
  61.     and.l    d4,d2
  62.     lsl.l    #4,d0
  63.     or.l    d2,d0
  64.  
  65.     and.l    d4,d1
  66.     and.l    d4,d3
  67.     lsl.l    #4,d1
  68.     or.l    d3,d1
  69.  
  70.     move.l    d1,a3
  71.  
  72.     move.l    (a0)+,d2
  73.     move.l    (a0)+,d1
  74.     move.l    (a0)+,d3
  75.     move.l    (a0)+,d7
  76.  
  77.     and.l    d4,d1            ; Merge 4x1, part 2
  78.     and.l    d4,d2
  79.     lsl.l    #4,d2
  80.     or.l    d1,d2
  81.  
  82.     and.l    d4,d3
  83.     and.l    d4,d7
  84.     lsl.l    #4,d3
  85.     or.l    d7,d3
  86.  
  87.     move.l    a3,d1
  88.  
  89.     swap    d2            ; Swap 16x2
  90.     move.w    d0,d7
  91.     move.w    d2,d0
  92.     move.w    d7,d2
  93.     swap    d2
  94.  
  95.     swap    d3
  96.     move.w    d1,d7
  97.     move.w    d3,d1
  98.     move.w    d7,d3
  99.     swap    d3
  100.  
  101.     bra.s    .start1
  102. .x1
  103.     move.l    (a0)+,d0
  104.     move.l    (a0)+,d2
  105.     move.l    (a0)+,d1
  106.     move.l    (a0)+,d3
  107.  
  108.     move.l    d7,BPLSIZE(a1)
  109.  
  110.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 1
  111.     and.l    d4,d0
  112.     and.l    d4,d2
  113.     lsl.l    #4,d0
  114.     or.l    d2,d0
  115.  
  116.     and.l    d4,d1
  117.     and.l    d4,d3
  118.     lsl.l    #4,d1
  119.     or.l    d3,d1
  120.  
  121.     move.l    d1,a3
  122.  
  123.     move.l    (a0)+,d2
  124.     move.l    (a0)+,d1
  125.     move.l    (a0)+,d3
  126.     move.l    (a0)+,d7
  127.  
  128.     move.l    a4,(a1)+
  129.  
  130.     and.l    d4,d1            ; Merge 4x1, part 2
  131.     and.l    d4,d2
  132.     lsl.l    #4,d2
  133.     or.l    d1,d2
  134.  
  135.     and.l    d4,d3
  136.     and.l    d4,d7
  137.     lsl.l    #4,d3
  138.     or.l    d7,d3
  139.  
  140.     move.l    a3,d1
  141.  
  142.     swap    d2            ; Swap 16x2
  143.     move.w    d0,d7
  144.     move.w    d2,d0
  145.     move.w    d7,d2
  146.     swap    d2
  147.  
  148.     swap    d3
  149.     move.w    d1,d7
  150.     move.w    d3,d1
  151.     move.w    d7,d3
  152.     swap    d3
  153.  
  154.     move.l    a5,-BPLSIZE-4(a1)
  155. .start1
  156.     move.l    a6,d4
  157.  
  158.     move.l    d2,d7            ; Swap 2x2
  159.     lsr.l    #2,d7
  160.     eor.l    d0,d7
  161.     and.l    d5,d7
  162.     eor.l    d7,d0
  163.     lsl.l    #2,d7
  164.     eor.l    d7,d2
  165.  
  166.     move.l    d3,d7
  167.     lsr.l    #2,d7
  168.     eor.l    d1,d7
  169.     and.l    d5,d7
  170.     eor.l    d7,d1
  171.     lsl.l    #2,d7
  172.     eor.l    d7,d3
  173.  
  174.     move.l    d1,d7
  175.     lsr.l    #8,d7
  176.     eor.l    d0,d7
  177.     and.l    d4,d7
  178.     eor.l    d7,d0
  179.     lsl.l    #8,d7
  180.     eor.l    d7,d1
  181.  
  182.     move.l    d1,d7
  183.     lsr.l    d7
  184.     eor.l    d0,d7
  185.     and.l    d6,d7
  186.     eor.l    d7,d0
  187.     move.l    d0,BPLSIZE*2(a1)
  188.     add.l    d7,d7
  189.     eor.l    d1,d7
  190.  
  191.     move.l    d3,d1
  192.     lsr.l    #8,d1
  193.     eor.l    d2,d1
  194.     and.l    d4,d1
  195.     eor.l    d1,d2
  196.     lsl.l    #8,d1
  197.     eor.l    d1,d3
  198.  
  199.     move.l    d3,d1
  200.     lsr.l    d1
  201.     eor.l    d2,d1
  202.     and.l    d6,d1
  203.     eor.l    d1,d2
  204.     add.l    d1,d1
  205.     eor.l    d1,d3
  206.  
  207.     move.l    d2,a4
  208.     move.l    d3,a5
  209.  
  210.     cmpa.l    a0,a2
  211.     bne    .x1
  212.  
  213.     move.l    d7,BPLSIZE(a1)
  214.     move.l    a4,(a1)+
  215.     move.l    a5,-BPLSIZE-4(a1)
  216.  
  217.     movem.l    (sp)+,a0-a1
  218.     add.l    #BPLSIZE*4,a1
  219.  
  220.     move.l    (a0)+,d0
  221.     move.l    (a0)+,d2
  222.     move.l    (a0)+,d1
  223.     move.l    (a0)+,d3
  224.  
  225.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 1
  226.     and.l    d4,d0
  227.     and.l    d4,d2
  228.     lsr.l    #4,d2
  229.     or.l    d2,d0
  230.  
  231.     and.l    d4,d1
  232.     and.l    d4,d3
  233.     lsr.l    #4,d3
  234.     or.l    d3,d1
  235.  
  236.     move.l    d1,a3
  237.  
  238.     move.l    (a0)+,d2
  239.     move.l    (a0)+,d1
  240.     move.l    (a0)+,d3
  241.     move.l    (a0)+,d7
  242.  
  243.     and.l    d4,d1            ; Merge 4x1, part 2
  244.     and.l    d4,d2
  245.     lsr.l    #4,d1
  246.     or.l    d1,d2
  247.  
  248.     and.l    d4,d3
  249.     and.l    d4,d7
  250.     lsr.l    #4,d7
  251.     or.l    d7,d3
  252.  
  253.     move.l    a3,d1
  254.  
  255.     swap    d2            ; Swap 16x2
  256.     move.w    d0,d7
  257.     move.w    d2,d0
  258.     move.w    d7,d2
  259.     swap    d2
  260.  
  261.     swap    d3
  262.     move.w    d1,d7
  263.     move.w    d3,d1
  264.     move.w    d7,d3
  265.     swap    d3
  266.  
  267.     bra.s    .start2
  268. .x2
  269.     move.l    (a0)+,d0
  270.     move.l    (a0)+,d2
  271.     move.l    (a0)+,d1
  272.     move.l    (a0)+,d3
  273.  
  274.     move.l    d7,BPLSIZE(a1)
  275.  
  276.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 1
  277.     and.l    d4,d0
  278.     and.l    d4,d2
  279.     lsr.l    #4,d2
  280.     or.l    d2,d0
  281.  
  282.     and.l    d4,d1
  283.     and.l    d4,d3
  284.     lsr.l    #4,d3
  285.     or.l    d3,d1
  286.  
  287.     move.l    d1,a3
  288.  
  289.     move.l    (a0)+,d2
  290.     move.l    (a0)+,d1
  291.     move.l    (a0)+,d3
  292.     move.l    (a0)+,d7
  293.  
  294.     move.l    a4,(a1)+
  295.  
  296.     and.l    d4,d1            ; Merge 4x1, part 2
  297.     and.l    d4,d2
  298.     lsr.l    #4,d1
  299.     or.l    d1,d2
  300.  
  301.     and.l    d4,d3
  302.     and.l    d4,d7
  303.     lsr.l    #4,d7
  304.     or.l    d7,d3
  305.  
  306.     move.l    a3,d1
  307.  
  308.     swap    d2            ; Swap 16x2
  309.     move.w    d0,d7
  310.     move.w    d2,d0
  311.     move.w    d7,d2
  312.     swap    d2
  313.  
  314.     swap    d3
  315.     move.w    d1,d7
  316.     move.w    d3,d1
  317.     move.w    d7,d3
  318.     swap    d3
  319.  
  320.     move.l    a5,-BPLSIZE-4(a1)
  321. .start2
  322.     move.l    a6,d4
  323.  
  324.     move.l    d2,d7            ; Swap 2x2
  325.     lsr.l    #2,d7
  326.     eor.l    d0,d7
  327.     and.l    d5,d7
  328.     eor.l    d7,d0
  329.     lsl.l    #2,d7
  330.     eor.l    d7,d2
  331.  
  332.     move.l    d3,d7
  333.     lsr.l    #2,d7
  334.     eor.l    d1,d7
  335.     and.l    d5,d7
  336.     eor.l    d7,d1
  337.     lsl.l    #2,d7
  338.     eor.l    d7,d3
  339.  
  340.     move.l    d1,d7
  341.     lsr.l    #8,d7
  342.     eor.l    d0,d7
  343.     and.l    d4,d7
  344.     eor.l    d7,d0
  345.     lsl.l    #8,d7
  346.     eor.l    d7,d1
  347.  
  348.     move.l    d1,d7
  349.     lsr.l    d7
  350.     eor.l    d0,d7
  351.     and.l    d6,d7
  352.     eor.l    d7,d0
  353.     move.l    d0,BPLSIZE*2(a1)
  354.     add.l    d7,d7
  355.     eor.l    d1,d7
  356.  
  357.     move.l    d3,d1
  358.     lsr.l    #8,d1
  359.     eor.l    d2,d1
  360.     and.l    d4,d1
  361.     eor.l    d1,d2
  362.     lsl.l    #8,d1
  363.     eor.l    d1,d3
  364.  
  365.     move.l    d3,d1
  366.     lsr.l    d1
  367.     eor.l    d2,d1
  368.     and.l    d6,d1
  369.     eor.l    d1,d2
  370.     add.l    d1,d1
  371.     eor.l    d1,d3
  372.  
  373.     move.l    d2,a4
  374.     move.l    d3,a5
  375.  
  376.     cmpa.l    a0,a2
  377.     bne    .x2
  378.  
  379.     move.l    d7,BPLSIZE(a1)
  380.     move.l    a4,(a1)+
  381.     move.l    a5,-BPLSIZE-4(a1)
  382.  
  383. .none
  384.     movem.l    (sp)+,d2-d7/a2-a6
  385.     rts
  386.  
  387.     cnop    0,4
  388.  
  389. c2p_pixels dc.l 0
  390.  
  391. Support        dc.b    1    ;full-sreen
  392.         dc.b    0
  393.         dc.b    0
  394.         dc.b    0
  395.         dc.b    0    ;small-screen
  396.