Subversion Repositories Kolibri OS

Rev

Rev 228 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. format MS COFF
  2.  
  3. include "proc32.inc"
  4.  
  5. section '.text' code readable executable
  6.  
  7. public _InitHeap@4
  8. public _UserAlloc@4
  9. public _CreateThread@8
  10. public _GetMousePos@4
  11. public _get_fileinfo@8
  12. public _read_file@20
  13. public _get_key@4
  14. public _get_button_id
  15. public _DrawWindow@36
  16. public _make_button@24
  17. public _draw_bar@20
  18. public _write_text@20
  19. public _debug_out@4
  20. public _debug_out_hex@4
  21.  
  22. public _memset
  23.  
  24. struc FILEIO
  25. {   .cmd            dd ?
  26.     .offset         dd ?
  27.                     dd ?
  28.     .count          dd ?
  29.     .buff           dd ?
  30.                     db ?
  31.     .name           dd ?
  32. };
  33.  
  34. align 4
  35. proc _get_button_id
  36.            mov   eax,17
  37.            int   0x40
  38.            test  al,al
  39.            jnz   @F
  40.            shr   eax,8
  41.            ret
  42. @@:
  43.            xor   eax,eax
  44.            dec   eax
  45.            ret
  46. endp
  47.  
  48. align 4
  49. proc _get_fileinfo@8 stdcall, name:dword, info:dword
  50.            push ebx
  51.            push esi
  52.            push edi
  53.            xor eax, eax
  54.            mov ebx, [name]
  55.            mov ecx, [info]
  56.  
  57.            mov [fileio.cmd], 5
  58.            mov [fileio.offset], eax
  59.            mov [fileio.offset+4], eax
  60.            mov [fileio.count], eax
  61.            mov [fileio.buff], ecx
  62.            mov byte [fileio.buff+4], al
  63.            mov [fileio.name], ebx
  64.  
  65.            mov eax, 70
  66.            lea ebx, [fileio]
  67.            int 0x40
  68.            pop edi
  69.            pop esi
  70.            pop ebx
  71.            ret
  72. endp
  73.  
  74. align 4
  75. proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\
  76.                                      count:dword,reads:dword
  77.            push ebx
  78.            push esi
  79.            push edi
  80.            xor eax, eax
  81.            mov ebx, [name]
  82.            mov edx, [offset]
  83.            mov esi, [buff]
  84.            mov edi, [count]
  85.  
  86.            mov [fileio.cmd], eax
  87.            mov [fileio.offset], edx
  88.            mov [fileio.offset+4], eax
  89.            mov [fileio.count], edi
  90.            mov [fileio.buff], esi
  91.            mov byte [fileio.buff+4], al
  92.            mov [fileio.name], ebx
  93.  
  94.            mov eax, 70
  95.            lea ebx, [fileio]
  96.            int 0x40
  97.            mov esi, [reads]
  98.            test esi, esi
  99.            jz @f
  100.            mov [esi], ebx
  101. @@:
  102.            pop edi
  103.            pop esi
  104.            pop ebx
  105.            ret
  106. endp
  107.  
  108. align 4
  109. proc _get_key@4 stdcall, key:dword
  110.            push ebx
  111.            push ecx
  112.            mov eax, 2
  113.            int 0x40
  114.            mov ebx, [key]
  115.            mov ecx, eax
  116.            shr ecx, 8
  117.            mov [ebx], ecx
  118.            movzx eax, al
  119.            pop ecx
  120.            pop ebx
  121.            ret
  122. endp
  123.  
  124.  
  125. align 4
  126. proc _InitHeap@4 stdcall, heap_size:dword
  127.                   push ebx
  128.                   mov eax, 68
  129.                   mov ebx, 11
  130.               mov ecx, [heap_size]
  131.                   int 0x40
  132.                   pop ebx
  133.                   ret
  134. endp
  135.  
  136. align 4
  137. proc _UserAlloc@4 stdcall, alloc_size:dword
  138.                   push ebx
  139.                   mov eax, 68
  140.                   mov ebx, 12
  141.               mov ecx, [alloc_size]
  142.                   int 0x40
  143.                   pop ebx
  144.                   ret
  145. endp
  146.  
  147. align 4
  148. proc _CreateThread@8 stdcall, fn:dword, p_stack:dword
  149.               push ebx
  150.               mov eax, 51
  151.               mov ebx, 1
  152.               mov ecx, [fn]
  153.               mov edx,[p_stack]
  154.                   int 0x40
  155.                   pop ebx
  156.                   ret
  157. endp
  158.  
  159. align 4
  160. proc _GetMousePos@4 stdcall,rel_type:dword
  161.            push ebx  
  162.            mov eax, 37
  163.            mov ebx, [rel_type]
  164.            int 0x40
  165.            pop ebx
  166.            ret
  167. endp
  168.  
  169.  
  170. align 4
  171. proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
  172.                                workcolor:dword, style:dword, captioncolor:dword,\
  173.                                windowtype:dword, bordercolor:dword  
  174.            push ebx edi esi
  175.            mov ebx, [x]
  176.            mov ecx, [y]
  177.            shl ebx, 16
  178.            shl ecx, 16
  179.            mov bx, word [sx]
  180.            mov cx,  word [sy]
  181.            mov  edx,[style]
  182.            shl  edx,24
  183.            add  edx,[workcolor]
  184.            mov  esi,[windowtype]
  185.            shl  esi,24
  186.            add  esi,[captioncolor]
  187.            mov  edi,[bordercolor]
  188.            xor  eax,eax
  189.            int  0x40
  190.            pop esi edi ebx
  191.            ret
  192. endp
  193.  
  194. align 4
  195. _make_button@24:
  196. ;arg1 - x
  197. ;arg2 - y
  198. ;arg3 - xsize
  199. ;arg4 - ysize
  200. ;arg5 - id
  201. ;arg6 - color
  202.      
  203.   push  ebx esi
  204.   mov   ebx,[esp+12]
  205.   shl   ebx,16
  206.   mov   bx,[esp+20]
  207.   mov   ecx,[esp+16]
  208.   shl   ecx,16
  209.   mov   cx,[esp+24]
  210.   mov   edx,[esp+28]
  211.   mov   esi,[esp+32]
  212.   mov   eax,8
  213.   int   0x40
  214.   pop   esi ebx
  215.   ret   24
  216.  
  217. align 4
  218. _draw_bar@20:
  219. ;arg1 - x
  220. ;arg2 - y
  221. ;arg3 - xsize
  222. ;arg4 - ysize
  223. ;arg5 - color
  224.   push  ebx
  225.   mov   eax,13
  226.   mov   ebx,[esp+8]
  227.   shl   ebx,16
  228.   mov   bx,[esp+16]
  229.   mov   ecx,[esp+12]
  230.   shl   ecx,16
  231.   mov   cx,[esp+20]
  232.   mov   edx,[esp+24]
  233.   int   0x40
  234.   pop   ebx
  235.   ret   20
  236.  
  237. _write_text@20:
  238. ;arg1 - x
  239. ;arg2 - y
  240. ;arg3 - color
  241. ;arg4 - text
  242. ;arg5 - len
  243.   push  ebx esi
  244.   mov   eax,4
  245.   mov   ebx,[esp+12]
  246.   shl   ebx,16
  247.   mov   bx,[esp+16]
  248.   mov   ecx,[esp+20]
  249.   mov   edx,[esp+24]
  250.   mov   esi,[esp+28]
  251.   int   0x40
  252.   pop   esi ebx
  253.   ret   20
  254.  
  255. align 4
  256. proc _debug_out@4 stdcall, val:dword
  257.            push ebx
  258.            mov  ecx,[val]
  259.            mov  ebx,1
  260.            mov  eax,63
  261.            int  0x40
  262.            pop ebx
  263.            ret
  264. endp          
  265.  
  266. align 4
  267. proc _debug_out_hex@4 stdcall val:dword
  268.            locals
  269.              count dd ?
  270.            endl
  271.  
  272.            mov [count], 8
  273. .new_char:
  274.            rol [val], 4
  275.            mov ecx, [val]
  276.            and ecx, 0x0f
  277.            mov cl,byte [__hexdigits+ecx]
  278.            mov eax, 63
  279.            mov ebx, 1
  280.            int 0x40
  281.            dec [count]
  282.            jnz .new_char
  283.            ret
  284. endp
  285.                    
  286. align 4
  287. _memset:
  288.            mov     edx,[esp + 0ch]
  289.            mov     ecx,[esp + 4]
  290.  
  291.            test    edx,edx        
  292.            jz      short toend    
  293.        
  294.            xor     eax,eax
  295.            mov     al,[esp + 8]
  296.  
  297.            push    edi            
  298.            mov     edi,ecx      
  299.  
  300.            cmp     edx,4
  301.            jb      tail    
  302.            
  303.            neg     ecx
  304.            and     ecx,3          
  305.            jz      short dwords  
  306.            
  307.            sub     edx,ecx  
  308. adjust_loop:
  309.            mov     [edi],al
  310.            add     edi,1
  311.            sub     ecx,1
  312.            jnz     adjust_loop
  313.  
  314. dwords:
  315.         mov     ecx,eax        
  316.         shl     eax,8          
  317.         add     eax,ecx        
  318.         mov     ecx,eax        
  319.         shl     eax,10h        
  320.         add     eax,ecx        
  321.        
  322.         mov     ecx,edx        
  323.         and     edx,3          
  324.         shr     ecx,2          
  325.         jz      tail        
  326.  
  327.                 cld    
  328.         rep     stosd
  329. main_loop_tail:
  330.         test    edx,edx    
  331.         jz      finish        
  332.  
  333.  
  334. tail:
  335.         mov     [edi],al      
  336.         add     edi,1
  337.  
  338.         sub     edx,1        
  339.         jnz     tail            
  340.  
  341. finish:
  342.         mov     eax,[esp + 8]
  343.         pop     edi            
  344.  
  345.         ret
  346.  
  347. toend:
  348.         mov     eax,[esp + 4]
  349.  
  350.         ret
  351.  
  352. public _allmul
  353.  
  354. _allmul:
  355.         mov eax, [esp+8]
  356.         mov ecx, [esp+16]
  357.         or ecx,eax        
  358.         mov ecx, [esp+12]
  359.         jnz .hard    
  360.         mov eax, [esp+4]
  361.         mul ecx
  362.         ret 16  
  363. .hard:
  364.         push ebx
  365.         mul ecx      
  366.         mov ebx,eax
  367.         mov eax, [esp+8]
  368.         mul dword [esp+20]
  369.         add ebx,eax        
  370.         mov eax,[esp+8]
  371.         mul ecx            
  372.         add edx,ebx      
  373.         pop ebx
  374.         ret 16    
  375.  
  376. align 4
  377. _allshr:
  378.         cmp cl,64
  379.         jae .sign
  380.  
  381.         cmp cl, 32
  382.         jae .MORE32
  383.         shrd eax,edx,cl
  384.         sar edx,cl
  385.         ret
  386. .MORE32:
  387.         mov     eax,edx
  388.         sar     edx,31
  389.         and     cl,31
  390.         sar     eax,cl
  391.         ret
  392. .sign:
  393.         sar     edx,31
  394.         mov     eax,edx
  395.         ret
  396.  
  397. public __ftol2_sse
  398.  
  399. align 4
  400. __ftol2_sse:
  401.            push ebp
  402.            mov ebp, esp
  403.            sub esp, 20
  404.            and esp, 0xFFFFFFF0
  405.            fld st0
  406.            fst dword [esp+18]
  407.            fistp qword [esp+10]
  408.            fild qword [esp+10]
  409.            mov edx, [esp+18]
  410.            mov eax, [esp+10]
  411.            test eax, eax
  412.            jz .QnaNZ
  413.            
  414. .not_QnaNZ:
  415.            fsubp st1, st0
  416.            test edx, edx
  417.            jns .pos
  418.            fstp dword [esp]
  419.            mov ecx, [esp]
  420.            xor ecx, 0x80000000
  421.            add ecx, 0x7FFFFFFF
  422.            adc eax, 0
  423.            mov edx, [esp+14]
  424.            adc edx, 0
  425.            jmp .exit
  426. .pos:
  427.            fstp dword [esp]
  428.            mov ecx, [esp]
  429.            add ecx, 0x7FFFFFFF
  430.            sbb eax, 0
  431.            jmp .exit
  432. .QnaNZ:
  433.            mov edx, [esp+14]
  434.            test edx, 0x7FFFFFFF
  435.            jne .not_QnaNZ
  436.            fstp dword [esp+18]
  437.            fstp dword [esp+18]
  438. .exit:          
  439.            leave
  440.            ret
  441.  
  442. public __fltused
  443. __fltused    dd 0
  444.            
  445. align 4
  446. __hexdigits db '0123456789ABCDEF'
  447.  
  448. align 4
  449. fileio FILEIO
  450.  
  451.