home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / GFX / Misc / FASTMC.LHA / fastmc / src / showline.s < prev    next >
Encoding:
Text File  |  1995-10-31  |  5.4 KB  |  418 lines

  1.     XDEF    _showline
  2.     XDEF    _showlines
  3.  
  4. _showlines
  5.  
  6.     movem.l    d0-a6,-(a7)    ;60 bytes
  7.  
  8. ;-------------------------------------
  9. ; step 1: 24bit to 8bit chunky
  10.  
  11.     lea    (rtab+1,pc),a4
  12.     lea    (gtab+1,pc),a5
  13.     lea    (btab,pc),a6
  14.  
  15.     move.l    (60+4,a7),a0    ;*data 60
  16.     move.l    (chunkypt,pc),a1
  17.     move.l    (72+4,a7),d0    ;bpr
  18.     lea    (a1,d0*8),a2
  19.  
  20.     move.l    (80+4,a7),d7    ;width
  21.     subq    #1,d7
  22.  
  23.     moveq    #0,d0
  24.     moveq    #0,d1
  25.     moveq    #0,d2
  26. .loop0    move.b    (a0)+,d0
  27.     move.b    (a0)+,d1
  28.     move.b    (a0)+,d2
  29.     move.b    (a4,d0.l*2),(a1)+    r
  30.     move.b    (a5,d1.l*2),(a1)+    g
  31.     move    (a6,d2.l*2),(a2)+    b
  32.     dbf    d7,.on0
  33.     bra.b    .end0
  34. .on0    addq.l    #3,a0
  35.     dbf    d7,.loop0
  36. .end0
  37.  
  38.  
  39. ;-------------------------------------
  40. ; step 2: 8bit chunky to planar
  41.     move.l    (chunkypt,pc),a0
  42.     move.l    (64+4,a7),a1    ;*bm0
  43.     move.l    (72+4,a7),d1    ;bpr
  44.     move.l    (68+4,a7),d0    ;line
  45.     mulu    d1,d0
  46.     lea    (a1,d0.l),a1
  47.  
  48.     move    d1,d6
  49.     subq    #1,d6
  50.  
  51.     move.l    (76+4,a7),a6    ;psize
  52.     lea    (a1,a6.l*2),a2
  53.     lea    (a2,a6.l),a2
  54.  
  55.     move.l    #$0f0f0f0f,a3
  56.     move.l    #$33333333,a4
  57.     move.l    #$5555aaaa,a5
  58.  
  59. .c2p_loop    **16 pixels per loop**
  60.     swap    d6
  61.  
  62.     move    (a0)+,d0
  63.     move    d0,d4
  64.     lsl    #8,d4
  65.     move    (a0)+,d1
  66.     move    d1,d5
  67.     lsl    #8,d5
  68.     move    (a0)+,d2
  69.     move    d2,d6
  70.     lsl    #8,d6
  71.     move    (a0)+,d3
  72.     move    d3,d7
  73.     lsl    #8,d7
  74.     move.b    (a0)+,d0
  75.     swap    d0
  76.     move.b    (a0)+,d4
  77.     move    d4,d0
  78.     move.b    (a0)+,d1
  79.     swap    d1
  80.     move.b    (a0)+,d5
  81.     move    d5,d1
  82.     move.b    (a0)+,d2
  83.     swap    d2
  84.     move.b    (a0)+,d6
  85.     move    d6,d2
  86.     move.b    (a0)+,d3
  87.     swap    d3
  88.     move.b    (a0)+,d7
  89.     move    d7,d3
  90.  
  91.     move.l    a3,d7
  92.     move.l    d0,d4
  93.     and.l    d7,d0
  94.     eor.l    d0,d4
  95.     lsl.l    #4,d0
  96.     move.l    d2,d5
  97.     and.l    d7,d5
  98.     eor.l    d5,d2
  99.     lsr.l    #4,d2
  100.     or.l    d5,d0
  101.     or.l    d4,d2
  102.     move.l    d1,d4
  103.     and.l    d7,d1
  104.     eor.l    d1,d4
  105.     lsl.l    #4,d1
  106.     move.l    d3,d5
  107.     and.l    d7,d5
  108.     eor.l    d5,d3
  109.     lsr.l    #4,d3
  110.     or.l    d5,d1
  111.     or.l    d4,d3
  112.  
  113.     move.l    a4,d7
  114.     move.l    d0,d4
  115.     and.l    d7,d0
  116.     eor.l    d0,d4
  117.     lsl.l    #2,d0
  118.     move.l    d1,d5
  119.     and.l    d7,d5
  120.     eor.l    d5,d1
  121.     lsr.l    #2,d1
  122.     or.l    d5,d0
  123.     or.l    d4,d1
  124.     move.l    d2,d4
  125.     and.l    d7,d2
  126.     eor.l    d2,d4
  127.     lsl.l    #2,d2
  128.     move.l    d3,d5
  129.     and.l    d7,d5
  130.     eor.l    d5,d3
  131.     lsr.l    #2,d3
  132.     or.l    d5,d2
  133.     or.l    d4,d3
  134.  
  135.     move.l    a5,d7
  136.     move.l    d0,d4
  137.     and.l    d7,d0
  138.     eor.l    d0,d4
  139.     lsr    d0
  140.     swap    d0
  141.     add    d0,d0
  142.     or.l    d0,d4
  143.     move    d4,(a1)+        plane 1
  144.     swap    d4
  145.     move    d4,(-2,a1,a6.l)        plane 2
  146.     move.l    d1,d5
  147.     and.l    d7,d1
  148.     eor.l    d1,d5
  149.     lsr    d1
  150.     swap    d1
  151.     add    d1,d1
  152.     or.l    d1,d5
  153.     move    d5,(-2,a1,a6.l*2)    plane 3
  154.     swap    d5
  155.     move    d5,(a2)+        plane 4
  156.     move.l    d2,d4
  157.     and.l    d7,d2
  158.     eor.l    d2,d4
  159.     lsr    d2
  160.     swap    d2
  161.     add    d2,d2
  162.     or.l    d2,d4
  163.     move    d4,(-2,a1,a6.l*4)    plane 5
  164.     swap    d4
  165.     move    d4,(-2,a2,a6.l*2)    plane 6
  166.     move.l    d3,d5
  167.     and.l    d7,d3
  168.     eor.l    d3,d5
  169.     lsr    d3
  170.     swap    d3
  171.     add    d3,d3
  172.     or.l    d3,d5
  173.     move.l    a1,d0
  174.     lea    (a1,a6.l*2),a1
  175.     move    d5,(-2,a1,a6.l*4)    plane 7
  176.     move.l    d0,a1
  177.     swap    d5
  178.     move    d5,(-2,a2,a6.l*4)    plane 8
  179.     swap    d6
  180.     dbf    d6,.c2p_loop
  181.  
  182.  
  183.     movem.l    (a7)+,d0-a6
  184.     rts
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191. _showline
  192.  
  193.     movem.l    d0-a6,-(a7)    ;60 bytes
  194.  
  195. ;-------------------------------------
  196. ; step 1: 24bit to 8bit chunky
  197.  
  198.     lea    (rtab+1,pc),a4
  199.     lea    (gtab+1,pc),a5
  200.     lea    (btab,pc),a6
  201.  
  202.     move.l    (60+4,a7),a0    ;*data 60
  203.     move.l    (chunkypt,pc),a1
  204.     move.l    (72+4,a7),d0    ;bpr
  205.     lea    (a1,d0*8),a2
  206.  
  207.     move.l    (80+4,a7),d7    ;width
  208.     subq    #1,d7
  209.  
  210.     moveq    #0,d0
  211.     moveq    #0,d1
  212.     moveq    #0,d2
  213. .loop0    move.b    (a0)+,d0
  214.     move.b    (a0)+,d1
  215.     move.b    (a0)+,d2
  216.     move.b    (a4,d0.l*2),(a1)+    r
  217.     move.b    (a5,d1.l*2),(a1)+    g
  218.     move    (a6,d2.l*2),(a2)+    b
  219.     dbf    d7,.loop0
  220. .end0
  221.  
  222.  
  223. ;-------------------------------------
  224. ; step 2: 8bit chunky to planar
  225.     move.l    (chunkypt,pc),a0
  226.     move.l    (64+4,a7),a1    ;*bm0
  227.     move.l    (72+4,a7),d1    ;bpr
  228.     move.l    (68+4,a7),d0    ;line
  229.     mulu    d1,d0
  230.     lea    (a1,d0.l),a1
  231.  
  232.     move    d1,d6
  233.     subq    #1,d6
  234.  
  235.     move.l    (76+4,a7),a6    ;psize
  236.     lea    (a1,a6.l*2),a2
  237.     lea    (a2,a6.l),a2
  238.  
  239.     move.l    #$0f0f0f0f,a3
  240.     move.l    #$33333333,a4
  241.     move.l    #$5555aaaa,a5
  242.  
  243. .c2p_loop    **16 pixels per loop**
  244.     swap    d6
  245.  
  246.     move    (a0)+,d0
  247.     move    d0,d4
  248.     lsl    #8,d4
  249.     move    (a0)+,d1
  250.     move    d1,d5
  251.     lsl    #8,d5
  252.     move    (a0)+,d2
  253.     move    d2,d6
  254.     lsl    #8,d6
  255.     move    (a0)+,d3
  256.     move    d3,d7
  257.     lsl    #8,d7
  258.     move.b    (a0)+,d0
  259.     swap    d0
  260.     move.b    (a0)+,d4
  261.     move    d4,d0
  262.     move.b    (a0)+,d1
  263.     swap    d1
  264.     move.b    (a0)+,d5
  265.     move    d5,d1
  266.     move.b    (a0)+,d2
  267.     swap    d2
  268.     move.b    (a0)+,d6
  269.     move    d6,d2
  270.     move.b    (a0)+,d3
  271.     swap    d3
  272.     move.b    (a0)+,d7
  273.     move    d7,d3
  274.  
  275.     move.l    a3,d7
  276.     move.l    d0,d4
  277.     and.l    d7,d0
  278.     eor.l    d0,d4
  279.     lsl.l    #4,d0
  280.     move.l    d2,d5
  281.     and.l    d7,d5
  282.     eor.l    d5,d2
  283.     lsr.l    #4,d2
  284.     or.l    d5,d0
  285.     or.l    d4,d2
  286.     move.l    d1,d4
  287.     and.l    d7,d1
  288.     eor.l    d1,d4
  289.     lsl.l    #4,d1
  290.     move.l    d3,d5
  291.     and.l    d7,d5
  292.     eor.l    d5,d3
  293.     lsr.l    #4,d3
  294.     or.l    d5,d1
  295.     or.l    d4,d3
  296.  
  297.     move.l    a4,d7
  298.     move.l    d0,d4
  299.     and.l    d7,d0
  300.     eor.l    d0,d4
  301.     lsl.l    #2,d0
  302.     move.l    d1,d5
  303.     and.l    d7,d5
  304.     eor.l    d5,d1
  305.     lsr.l    #2,d1
  306.     or.l    d5,d0
  307.     or.l    d4,d1
  308.     move.l    d2,d4
  309.     and.l    d7,d2
  310.     eor.l    d2,d4
  311.     lsl.l    #2,d2
  312.     move.l    d3,d5
  313.     and.l    d7,d5
  314.     eor.l    d5,d3
  315.     lsr.l    #2,d3
  316.     or.l    d5,d2
  317.     or.l    d4,d3
  318.  
  319.     move.l    a5,d7
  320.     move.l    d0,d4
  321.     and.l    d7,d0
  322.     eor.l    d0,d4
  323.     lsr    d0
  324.     swap    d0
  325.     add    d0,d0
  326.     or.l    d0,d4
  327.     move    d4,(a1)+        plane 1
  328.     swap    d4
  329.     move    d4,(-2,a1,a6.l)        plane 2
  330.     move.l    d1,d5
  331.     and.l    d7,d1
  332.     eor.l    d1,d5
  333.     lsr    d1
  334.     swap    d1
  335.     add    d1,d1
  336.     or.l    d1,d5
  337.     move    d5,(-2,a1,a6.l*2)    plane 3
  338.     swap    d5
  339.     move    d5,(a2)+        plane 4
  340.     move.l    d2,d4
  341.     and.l    d7,d2
  342.     eor.l    d2,d4
  343.     lsr    d2
  344.     swap    d2
  345.     add    d2,d2
  346.     or.l    d2,d4
  347.     move    d4,(-2,a1,a6.l*4)    plane 5
  348.     swap    d4
  349.     move    d4,(-2,a2,a6.l*2)    plane 6
  350.     move.l    d3,d5
  351.     and.l    d7,d3
  352.     eor.l    d3,d5
  353.     lsr    d3
  354.     swap    d3
  355.     add    d3,d3
  356.     or.l    d3,d5
  357.     move.l    a1,d0
  358.     lea    (a1,a6.l*2),a1
  359.     move    d5,(-2,a1,a6.l*4)    plane 7
  360.     move.l    d0,a1
  361.     swap    d5
  362.     move    d5,(-2,a2,a6.l*4)    plane 8
  363.     swap    d6
  364.     dbf    d6,.c2p_loop
  365.  
  366.  
  367.     movem.l    (a7)+,d0-a6
  368.     rts
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376. ;colors 0-75
  377. rtab
  378. i set 0
  379.     rept    255
  380. i set i+1
  381.     dc    i*76/256
  382.     endr
  383.     dc    75
  384.  
  385.  
  386. ;colors 76-225
  387. gtab
  388. i set 0
  389.     rept    255
  390. i set i+1
  391.     dc    i*150/256+76
  392.     endr
  393.     dc    225
  394.  
  395.  
  396. ;colors 226-255
  397. btab
  398. i set 0
  399.     rept    255
  400. i set i+1
  401.     dc    i*30/256+226
  402.     endr
  403.     dc    255
  404.  
  405.  
  406.  
  407. chunkypt    dc.l    chunkybuffer
  408.  
  409.     section    bbbb,bss
  410. chunkybuffer    ds.b    50*1024
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.