home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / Kasumi / source / a_bltrgb.asm < prev    next >
Encoding:
Assembly Source File  |  2009-09-14  |  13.4 KB  |  813 lines

  1.         section    .text
  2.  
  3.         global    _vdasm_pixblt_RGB565_to_XRGB1555
  4. _vdasm_pixblt_RGB565_to_XRGB1555:
  5.         push    ebp
  6.         push    edi
  7.         push    esi
  8.         push    ebx
  9.  
  10.         mov        ebp, [esp+20+16]
  11.         mov        edi, [esp+24+16]
  12.         add        ebp, ebp
  13.         mov        edx, [esp+4+16]
  14.         mov        ecx, [esp+12+16]
  15.         lea        edx, [edx+ebp-2]
  16.         lea        ecx, [ecx+ebp-2]
  17.         neg        ebp
  18.         mov        [esp+20+16], ebp
  19.  
  20. .yloop:
  21.         mov        ebp, [esp+20+16]
  22.         add        ebp, 2
  23.         jbe        .odd
  24.  
  25. .xloop:
  26.         mov        eax, [ecx+ebp]
  27.         mov        ebx, 0ffc0ffc0h
  28.  
  29.         and        ebx, eax
  30.         and        eax, 0001f001fh
  31.  
  32.         shr        ebx, 1
  33.  
  34.         add        eax, ebx
  35.  
  36.         mov        [edx+ebp], eax
  37.         add        ebp, 4
  38.  
  39.         jnc        .xloop
  40.         jnz        .noodd
  41. .odd:
  42.         movzx    eax, word [ecx]
  43.         mov        ebx, 0ffc0ffc0h
  44.         and        ebx, eax
  45.         and        eax, 0001f001fh
  46.         shr        ebx, 1
  47.         add        eax, ebx
  48.         mov        [edx], ax
  49. .noodd:
  50.         add        ecx, [esp+16+16]
  51.         add        edx, [esp+8+16]
  52.         dec        edi
  53.         jne        .yloop
  54.  
  55.         pop        ebx
  56.         pop        esi
  57.         pop        edi
  58.         pop        ebp
  59.         ret
  60.  
  61.  
  62.         global    _vdasm_pixblt_RGB888_to_XRGB1555
  63. _vdasm_pixblt_RGB888_to_XRGB1555:
  64.         push    ebp
  65.         push    edi
  66.         push    esi
  67.         push    ebx
  68.  
  69.         mov        esi,[esp+12+16]
  70.         mov        edi,[esp+4+16]
  71.  
  72.         mov        ebp,[esp+20+16]
  73.         lea        eax,[ebp+ebp]
  74.         lea        ebx,[ebp+eax]
  75.         sub        [esp+8+16],eax
  76.         sub        [esp+16+16],ebx
  77.  
  78.         mov        edx,[esp+24+16]
  79. .yloop:
  80.         mov        ebp,[esp+20+16]
  81.         push    ebp
  82.         push    edx
  83.         shr        ebp,1
  84.         jz        .checkodd
  85. .xloop:
  86.         mov        eax,[esi+2]        ;u
  87.         add        esi,6            ;v
  88.  
  89.         mov        ebx,eax            ;u
  90.         mov        ecx,eax            ;v
  91.         shr        ebx,11            ;u
  92.         and        ecx,00f80000h    ;v
  93.         shr        eax,17            ;u
  94.         and        ebx,0000001fh    ;v
  95.         shr        ecx,14            ;u
  96.         and        eax,00007c00h    ;v
  97.         or        ebx,ecx            ;u
  98.         add        edi,4            ;v
  99.         or        ebx,eax            ;u
  100.  
  101.         mov        ecx,[esi-6]        ;v
  102.         mov        edx,ebx            ;u
  103.         mov        eax,ecx            ;v
  104.  
  105.         shl        edx,16            ;u
  106.         mov        ebx,ecx            ;v
  107.         shr        ebx,3            ;u
  108.         and        ecx,0000f800h    ;v
  109.         shr        eax,9            ;u
  110.         and        ebx,0000001fh    ;v
  111.         shr        ecx,6            ;u
  112.         and        eax,00007c00h    ;v
  113.         or        eax,ecx            ;u
  114.         or        edx,ebx            ;v
  115.         or        edx,eax            ;u
  116.         sub        ebp,1            ;v
  117.         mov        [edi-4],edx        ;u
  118.         jne        .xloop            ;v
  119. .checkodd:
  120.         pop        edx
  121.         pop        ebp
  122.         and        ebp,1
  123.         jz        .noodd
  124.         movzx    eax,word [esi]
  125.         movzx    ebx,byte [esi+2]
  126.         shl        ebx,16
  127.         add        esi,3
  128.         add        eax,ebx
  129.  
  130.         mov        ebx,eax
  131.         mov        ecx,eax
  132.         shr        ebx,3
  133.         and        ecx,0000f800h
  134.         shr        eax,9
  135.         and        ebx,0000001fh
  136.         shr        ecx,6
  137.         and        eax,00007c00h
  138.         or        ebx,ecx
  139.         or        ebx,eax
  140.         mov        [edi+0],bl
  141.         mov        [edi+1],bh
  142.         add        edi,2
  143. .noodd:
  144.  
  145.         add        esi,[esp+16+16]
  146.         add        edi,[esp+ 8+16]
  147.  
  148.         sub        edx,1
  149.         jne        .yloop
  150.  
  151.         pop        ebx
  152.         pop        esi
  153.         pop        edi
  154.         pop        ebp
  155.  
  156.         ret
  157.  
  158.         global    _vdasm_pixblt_XRGB8888_to_XRGB1555
  159. _vdasm_pixblt_XRGB8888_to_XRGB1555:
  160.         push    ebp
  161.         push    edi
  162.         push    esi
  163.         push    ebx
  164.  
  165.         mov        ebp, [esp+20+16]
  166.         mov        edx, [esp+4+16]
  167.         add        ebp, ebp
  168.         mov        ecx, [esp+12+16]
  169.         lea        edx, [edx+ebp-2]
  170.         lea        ecx, [ecx+ebp*2-4]
  171.         neg        ebp
  172.         mov        [esp+20+16], ebp
  173.  
  174. .yloop:
  175.         mov        ebp, [esp+20+16]
  176.         add        ebp, 2
  177.         jbe        .odd
  178.  
  179. .xloop:
  180.         mov        eax, [ecx+ebp*2]
  181.         mov        ebx, 00f80000h
  182.         and        ebx, eax
  183.         mov        esi, eax
  184.         shr        ebx, 9
  185.         and        esi, 0000f800h
  186.         shr        esi, 6
  187.         and        eax, 000000f8h
  188.         shr        eax, 3
  189.         add        ebx, esi
  190.         mov        esi, [ecx+ebp*2+4]
  191.         add        eax, ebx
  192.         mov        ebx, esi
  193.         and        esi, 00f80000h
  194.         shl        esi, 7
  195.         mov        edi, ebx
  196.         and        edi, 0000f800h
  197.         add        eax, esi
  198.         shl        edi, 10
  199.         and        ebx, 000000f8h
  200.         shl        ebx, 13
  201.         add        eax, edi
  202.         add        eax, ebx
  203.         mov        [edx+ebp], eax
  204.         add        ebp, 4
  205.         jnc        .xloop
  206.         jnz        .noodd
  207. .odd:
  208.         mov        eax, [ecx]
  209.         mov        ebx, 00f80000h
  210.         and        ebx, eax
  211.         mov        esi, eax
  212.         shr        ebx, 9
  213.         and        esi, 0000f800h
  214.         shr        esi, 6
  215.         and        eax, 000000f8h
  216.         shr        eax, 3
  217.         add        ebx, esi
  218.         add        eax, ebx
  219.         mov        [edx], ax
  220. .noodd:
  221.         add        ecx, [esp+16+16]
  222.         add        edx, [esp+8+16]
  223.         dec        dword [esp+24+16]
  224.         jne        .yloop
  225.  
  226.         pop        ebx
  227.         pop        esi
  228.         pop        edi
  229.         pop        ebp
  230.         ret
  231.  
  232.         global    _vdasm_pixblt_XRGB1555_to_RGB565
  233. _vdasm_pixblt_XRGB1555_to_RGB565:
  234.         push    ebp
  235.         push    edi
  236.         push    esi
  237.         push    ebx
  238.  
  239.         mov        ebp, [esp+20+16]
  240.         mov        edi, [esp+24+16]
  241.         add        ebp, ebp
  242.         mov        edx, [esp+4+16]
  243.         mov        ecx, [esp+12+16]
  244.         lea        edx, [edx+ebp-2]
  245.         lea        ecx, [ecx+ebp-2]
  246.         neg        ebp
  247.         mov        [esp+20+16], ebp
  248.  
  249. .yloop:
  250.         mov        ebp, [esp+20+16]
  251.         add        ebp, 2
  252.         jbe        .odd
  253.  
  254. .xloop:
  255.         mov        eax, [ecx+ebp]
  256.         mov        ebx, 02000200h
  257.  
  258.         mov        esi, eax
  259.         and        ebx, eax
  260.  
  261.         shr        ebx, 4
  262.         and        esi, 0ffe0ffe0h
  263.  
  264.         add        eax, esi
  265.  
  266.         add        eax, ebx
  267.  
  268.         mov        [edx+ebp], eax
  269.         add        ebp, 4
  270.  
  271.         jnc        .xloop
  272.         jnz        .noodd
  273. .odd:
  274.         movzx    eax, word [ecx]
  275.         mov        ebx, 02000200h
  276.         mov        esi, eax
  277.         and        ebx, eax
  278.         shr        ebx, 4
  279.         and        esi, 0ffe0ffe0h
  280.         add        eax, esi
  281.         add        eax, ebx
  282.         mov        [edx], ax
  283. .noodd:
  284.         add        ecx, [esp+16+16]
  285.         add        edx, [esp+8+16]
  286.         dec        edi
  287.         jne        .yloop
  288.  
  289.         pop        ebx
  290.         pop        esi
  291.         pop        edi
  292.         pop        ebp
  293.         ret
  294.  
  295.         global    _vdasm_pixblt_RGB888_to_RGB565
  296. _vdasm_pixblt_RGB888_to_RGB565:
  297.         push    ebp
  298.         push    edi
  299.         push    esi
  300.         push    ebx
  301.  
  302.         mov        esi,[esp+12+16]
  303.         mov        edi,[esp+4+16]
  304.  
  305.         mov        ebp,[esp+20+16]
  306.         lea        eax,[ebp+ebp]
  307.         lea        ebx,[ebp+eax]
  308.         sub        [esp+8+16],eax
  309.         sub        [esp+16+16],ebx
  310.  
  311.         mov        edx,[esp+24+16]
  312. .yloop:
  313.         mov        ebp,[esp+20+16]
  314.         push    ebp
  315.         push    edx
  316.         shr        ebp,1
  317.         jz        .checkodd
  318. .xloop:
  319.         mov        eax,[esi+2]        ;u
  320.         add        esi,6            ;v
  321.  
  322.         mov        ebx,eax            ;u
  323.         mov        ecx,eax            ;v
  324.         shr        ebx,11            ;u
  325.         and        ecx,00fc0000h    ;v
  326.         shr        eax,16            ;u
  327.         and        ebx,0000001fh    ;v
  328.         shr        ecx,13            ;u
  329.         and        eax,0000f800h    ;v
  330.         or        ebx,ecx            ;u
  331.         add        edi,4            ;v
  332.         or        ebx,eax            ;u
  333.  
  334.         mov        ecx,[esi-6]        ;v
  335.         mov        edx,ebx            ;u
  336.         mov        eax,ecx            ;v
  337.  
  338.         shl        edx,16            ;u
  339.         mov        ebx,ecx            ;v
  340.         shr        ebx,3            ;u
  341.         and        ecx,0000fc00h    ;v
  342.         shr        eax,8            ;u
  343.         and        ebx,0000001fh    ;v
  344.         shr        ecx,5            ;u
  345.         and        eax,0000f800h    ;v
  346.         or        eax,ecx            ;u
  347.         or        edx,ebx            ;v
  348.         or        edx,eax            ;u
  349.         sub        ebp,1            ;v
  350.         mov        [edi-4],edx        ;u
  351.         jne        .xloop            ;v
  352. .checkodd:
  353.         pop        edx
  354.         pop        ebp
  355.         and        ebp,1
  356.         jz        .noodd
  357.         movzx    eax,word [esi]
  358.         movzx    ebx,byte [esi+2]
  359.         shl        ebx,16
  360.         add        esi,3
  361.         add        eax,ebx
  362.  
  363.         mov        ebx,eax
  364.         mov        ecx,eax
  365.         shr        ebx,3
  366.         and        ecx,0000fc00h
  367.         shr        eax,8
  368.         and        ebx,0000001fh
  369.         shr        ecx,5
  370.         and        eax,0000f800h
  371.         or        ebx,ecx
  372.         or        ebx,eax
  373.         mov        [edi+0],bl
  374.         mov        [edi+1],bh
  375.         add        edi,2
  376. .noodd:
  377.  
  378.         add        esi,[esp+16+16]
  379.         add        edi,[esp+ 8+16]
  380.  
  381.         sub        edx,1
  382.         jne        .yloop
  383.  
  384.         pop        ebx
  385.         pop        esi
  386.         pop        edi
  387.         pop        ebp
  388.  
  389.         ret
  390.  
  391.         global    _vdasm_pixblt_XRGB8888_to_RGB565
  392. _vdasm_pixblt_XRGB8888_to_RGB565:
  393.         push    ebp
  394.         push    edi
  395.         push    esi
  396.         push    ebx
  397.  
  398.         mov        ebp, [esp+20+16]
  399.         mov        edx, [esp+4+16]
  400.         add        ebp, ebp
  401.         mov        ecx, [esp+12+16]
  402.         lea        edx, [edx+ebp-2]
  403.         lea        ecx, [ecx+ebp*2-4]
  404.         neg        ebp
  405.         mov        [esp+20+16], ebp
  406.  
  407. .yloop:
  408.         mov        ebp, [esp+20+16]
  409.         add        ebp, 2
  410.         jbe        .odd
  411.  
  412. .xloop:
  413.         mov        eax, [ecx+ebp*2]
  414.         mov        ebx, 00f80000h
  415.         and        ebx, eax
  416.         mov        esi, eax
  417.         shr        ebx, 8
  418.         and        esi, 0000fc00h
  419.         shr        esi, 5
  420.         and        eax, 000000f8h
  421.         shr        eax, 3
  422.         add        ebx, esi
  423.         mov        esi, [ecx+ebp*2+4]
  424.         add        eax, ebx
  425.         mov        ebx, esi
  426.         and        esi, 00f80000h
  427.         shl        esi, 8
  428.         mov        edi, ebx
  429.         and        edi, 0000fc00h
  430.         add        eax, esi
  431.         shl        edi, 11
  432.         and        ebx, 000000f8h
  433.         shl        ebx, 13
  434.         add        eax, edi
  435.         add        eax, ebx
  436.         mov        [edx+ebp], eax
  437.         add        ebp, 4
  438.         jnc        .xloop
  439.         jnz        .noodd
  440. .odd:
  441.         mov        eax, [ecx]
  442.         mov        ebx, 00f80000h
  443.         and        ebx, eax
  444.         mov        esi, eax
  445.         shr        ebx, 8
  446.         and        esi, 0000fc00h
  447.         shr        esi, 5
  448.         and        eax, 000000f8h
  449.         shr        eax, 3
  450.         add        ebx, esi
  451.         add        eax, ebx
  452.         mov        [edx], ax
  453. .noodd:
  454.         add        ecx, [esp+16+16]
  455.         add        edx, [esp+8+16]
  456.         dec        dword [esp+24+16]
  457.         jne        .yloop
  458.  
  459.         pop        ebx
  460.         pop        esi
  461.         pop        edi
  462.         pop        ebp
  463.         ret
  464.  
  465.  
  466.         global    _vdasm_pixblt_XRGB8888_to_RGB888
  467. _vdasm_pixblt_XRGB8888_to_RGB888:
  468.         push    ebp
  469.         push    edi
  470.         push    esi
  471.         push    ebx
  472.  
  473.         mov        esi,[esp+12+16]
  474.         mov        edi,[esp+4+16]
  475.  
  476.         mov        ecx,[esp+20+16]
  477.         lea        eax,[ecx+ecx*2]
  478.         lea        ebx,[ecx*4]
  479.         sub        [esp+8+16],eax
  480.         sub        [esp+16+16],ebx
  481.  
  482.         mov        edx,[esp+24+16]
  483. .yloop:
  484.         mov        ecx,[esp+20+16]
  485.         push    ecx
  486.         push    edx
  487.         shr        ecx,2
  488.         jz        .checkodd
  489. .xloop:
  490.         mov        eax,[esi]        ;EAX = xxr0g0b0
  491.         mov        ebx,[esi+4]        ;EBX = xxr1g1b1
  492.         mov        edx,ebx            ;EDX = xxr1g1b1
  493.         mov        ebp,[esi+8]        ;EBP = xxr2g2b2
  494.         shl        ebx,24            ;EBX = b1000000
  495.         and        eax,00ffffffh        ;EAX = 00r0g0b0
  496.         shr        edx,8            ;EDX = 00xxr1g1
  497.         or        eax,ebx            ;EAX = b1r0g0b0
  498.         mov        [edi],eax
  499.         mov        ebx,ebp            ;EBX = xxr2g2b2
  500.         shl        ebp,16            ;EBP = g2b20000
  501.         and        edx,0000ffffh        ;EDX = 0000r1g1
  502.         or        ebp,edx            ;EBP = g2b2r1g1
  503.         mov        eax,[esi+12]        ;EAX = xxr3g3b3
  504.         shr        ebx,16            ;EBX = 0000xxr2
  505.         add        edi,12
  506.         shl        eax,8            ;EAX = r3g3b300
  507.         and        ebx,000000ffh        ;EBX = 000000r2
  508.         or        eax,ebx            ;EAX = r3g3b3r2
  509.         mov        [edi+4-12],ebp
  510.         add        esi,16
  511.         mov        [edi+8-12],eax
  512.         sub        ecx,1
  513.         jne        .xloop
  514. .checkodd:
  515.         pop        edx
  516.         pop        ecx
  517.         and        ecx,3
  518.         jz        .noodd
  519. .oddloop:
  520.         mov        eax,[esi]
  521.         add        esi,4
  522.         mov        [edi],ax
  523.         shr        eax,16
  524.         mov        [edi+2],al
  525.         add        edi,3
  526.         sub        ecx,1
  527.         jnz        .oddloop
  528. .noodd:
  529.         add        esi,[esp+16+16]
  530.         add        edi,[esp+ 8+16]
  531.  
  532.         sub        edx,1
  533.         jne        .yloop
  534.  
  535.         pop        ebx
  536.         pop        esi
  537.         pop        edi
  538.         pop        ebp
  539.         ret
  540.  
  541.         global    _vdasm_pixblt_XRGB1555_to_XRGB8888
  542. _vdasm_pixblt_XRGB1555_to_XRGB8888:
  543.         push    ebp
  544.         push    edi
  545.         push    esi
  546.         push    ebx
  547.  
  548.         mov        ebp, [esp+20+16]
  549.         add        ebp, ebp
  550.         mov        edx, [esp+4+16]
  551.         mov        ecx, [esp+12+16]
  552.         lea        edx, [edx+ebp*2-4]
  553.         lea        ecx, [ecx+ebp-2]
  554.         neg        ebp
  555.         mov        [esp+20+16], ebp
  556.  
  557. .yloop:
  558.         mov        ebp, [esp+20+16]
  559.         add        ebp, 2
  560.         jbe        .odd
  561.  
  562. .xloop:
  563.         mov        eax, [ecx+ebp]
  564.         mov        ebx, 00007c00h
  565.         and        ebx, eax
  566.         mov        esi, eax
  567.         shl        ebx, 9
  568.         and        esi, 000003e0h
  569.         shl        esi, 6
  570.         mov        edi, eax
  571.         and        eax, 0000001fh
  572.         add        ebx, esi
  573.         shl        eax, 3
  574.         mov        esi, edi
  575.         shr        edi, 7
  576.         add        eax, ebx
  577.         and        edi, 00f80000h
  578.         mov        ebx, esi
  579.         shr        esi, 13
  580.         and        ebx, 03e00000h
  581.         shr        ebx, 10
  582.         and        esi, 000000f8h
  583.         add        ebx, edi
  584.         add        ebx, esi
  585.         mov        edi, eax
  586.         and        eax, 00e0e0e0h
  587.         shr        eax, 5
  588.         mov        esi, ebx
  589.         shr        ebx, 5
  590.         add        eax, edi
  591.         and        ebx, 00070707h
  592.         add        ebx, esi
  593.         mov        [edx+ebp*2], eax
  594.         mov        [edx+ebp*2+4], ebx
  595.         add        ebp, 4
  596.         jnc        .xloop
  597.         jnz        .noodd
  598. .odd:
  599.         movzx    eax, word [ecx]
  600.         mov        ebx, 00007c00h
  601.         and        ebx, eax
  602.         mov        esi, eax
  603.         shl        ebx, 9
  604.         and        esi, 000003e0h
  605.         shl        esi, 6
  606.         and        eax, 0000001fh
  607.         shl        eax, 3
  608.         add        ebx, esi
  609.         add        eax, ebx
  610.         mov        ebx, 00e0e0e0h
  611.         and        ebx, eax
  612.         shr        ebx, 5
  613.         add        eax, ebx
  614.         mov        [edx], eax
  615. .noodd:
  616.         add        ecx, [esp+16+16]
  617.         add        edx, [esp+8+16]
  618.         dec        dword [esp+24+16]
  619.         jne        .yloop
  620.  
  621.         pop        ebx
  622.         pop        esi
  623.         pop        edi
  624.         pop        ebp
  625.         ret
  626.  
  627.  
  628.         global    _vdasm_pixblt_RGB565_to_XRGB8888
  629. _vdasm_pixblt_RGB565_to_XRGB8888:
  630.         push    ebp
  631.         push    edi
  632.         push    esi
  633.         push    ebx
  634.  
  635.         mov        ebp, [esp+20+16]
  636.         add        ebp, ebp
  637.         mov        edx, [esp+4+16]
  638.         mov        ecx, [esp+12+16]
  639.         lea        edx, [edx+ebp*2-4]
  640.         lea        ecx, [ecx+ebp-2]
  641.         neg        ebp
  642.         mov        [esp+20+16], ebp
  643.  
  644. .yloop:
  645.         mov        ebp, [esp+20+16]
  646.         add        ebp, 2
  647.         jbe        .odd
  648.  
  649. .xloop:
  650.         movzx    eax, word [ecx+ebp]
  651.         mov        ebx, 0000f800h
  652.         and        ebx, eax
  653.         mov        esi, eax
  654.         shl        ebx, 8
  655.         mov        edi, eax
  656.         shl        eax, 3
  657.         and        esi, 000007e0h
  658.         and        eax, 000000f8h
  659.         add        ebx, eax
  660.         shl        esi, 5
  661.         mov        eax, ebx
  662.         shr        ebx, 5
  663.         and        edi, 00000600h
  664.         shr        edi, 1
  665.         and        ebx, 00070007h
  666.         add        esi, edi
  667.         add        eax, ebx
  668.         add        eax, esi
  669.         mov        [edx+ebp*2], eax
  670.  
  671.         movzx    eax, word [ecx+ebp+2]
  672.         mov        ebx, 0000f800h
  673.         and        ebx, eax
  674.         mov        esi, eax
  675.         shl        ebx, 8
  676.         mov        edi, eax
  677.         shl        eax, 3
  678.         and        esi, 000007e0h
  679.         and        eax, 000000f8h
  680.         add        ebx, eax
  681.         shl        esi, 5
  682.         mov        eax, ebx
  683.         shr        ebx, 5
  684.         and        edi, 00000600h
  685.         shr        edi, 1
  686.         and        ebx, 00070007h
  687.         add        esi, edi
  688.         add        eax, ebx
  689.         add        eax, esi
  690.         mov        [edx+ebp*2+4], eax
  691.  
  692.         add        ebp, 4
  693.  
  694.         jnc        .xloop
  695.         jnz        .noodd
  696. .odd:
  697.         movzx    eax, word [ecx]
  698.         mov        ebx, 0000f800h
  699.         and        ebx, eax
  700.         mov        esi, eax
  701.         shl        ebx, 8
  702.         mov        edi, eax
  703.         shl        eax, 3
  704.         and        esi, 000007e0h
  705.         and        eax, 000000f8h
  706.         add        ebx, eax
  707.         shl        esi, 5
  708.         mov        eax, ebx
  709.         shr        ebx, 5
  710.         and        edi, 00000600h
  711.         shr        edi, 1
  712.         and        ebx, 00070007h
  713.         add        esi, edi
  714.         add        eax, ebx
  715.         add        eax, esi
  716.         mov        [edx], eax
  717. .noodd:
  718.         add        ecx, [esp+16+16]
  719.         add        edx, [esp+8+16]
  720.         dec        dword [esp+24+16]
  721.         jne        .yloop
  722.  
  723.         pop        ebx
  724.         pop        esi
  725.         pop        edi
  726.         pop        ebp
  727.         ret
  728.  
  729.  
  730.         global    _vdasm_pixblt_RGB888_to_XRGB8888
  731. _vdasm_pixblt_RGB888_to_XRGB8888:
  732.         push    ebp
  733.         push    edi
  734.         push    esi
  735.         push    ebx
  736.  
  737.         mov        esi,[esp+12+16]
  738.         mov        edi,[esp+4+16]
  739.  
  740.         mov        ecx,[esp+20+16]
  741.         lea        eax,[ecx+ecx*2]
  742.         lea        ebx,[ecx*4]
  743.         sub        [esp+8+16],ebx
  744.         sub        [esp+16+16],eax
  745.  
  746.         mov        edx,[esp+24+16]
  747. .yloop:
  748.         mov        ebp,[esp+20+16]
  749.         shr        ebp,2
  750.         push    edx
  751.         jz        .checkodd
  752. .xloop:
  753.         mov        eax,[esi]            ;EAX: b1r0g0b0
  754.         mov        ebx,[esi+4]            ;EBX: g2b2r1g1
  755.  
  756.         mov        [edi],eax
  757.         mov        ecx,ebx                ;ECX: g2b2r1g1
  758.  
  759.         shr        eax,24                ;EAX: ------b1
  760.         mov        edx,[esi+8]            ;EDX: r3g3b3r2
  761.  
  762.         shr        ecx,16                ;ECX: ----g2b2
  763.         add        edi,16
  764.  
  765.         shl        ebx,8                ;EBX: b2r1g1--
  766.         add        esi,12
  767.  
  768.         or        eax,ebx                ;EAX: b2r1g1b1
  769.         mov        ebx,edx                ;EBX: r3g3b3r2
  770.  
  771.         shr        ebx,8                ;EBX: --r3g3b3
  772.         mov        [edi+4-16],eax
  773.  
  774.         shl        edx,16                ;EDX: b3r2----
  775.         mov        [edi+12-16],ebx
  776.  
  777.         or        edx,ecx                ;EDX: b3r2g2b2
  778.         sub        ebp,1
  779.  
  780.         mov        [edi+8-16],edx
  781.         jne        .xloop
  782.  
  783. .checkodd:
  784.         pop        edx
  785.         mov        ebx,[esp+20+16]
  786.         and        ebx,3
  787.         jz        .noodd
  788. .oddloop:
  789.         mov        ax,[esi]
  790.         mov        cl,[esi+2]
  791.         mov        [edi],ax
  792.         mov        [edi+2],cl
  793.         add        esi,3
  794.         add        edi,4
  795.         sub        ebx,1
  796.         jne        .oddloop
  797. .noodd:
  798.  
  799.         add        esi,[esp+16+16]
  800.         add        edi,[esp+ 8+16]
  801.  
  802.         sub        edx,1
  803.         jne        .yloop
  804.  
  805.         pop        ebx
  806.         pop        esi
  807.         pop        edi
  808.         pop        ebp
  809.  
  810.         ret
  811.  
  812.         end
  813.