Subversion Repositories Kolibri OS

Rev

Rev 577 | Go to most recent revision | Blame | Compare with Previous | 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. public _create_thread@12
  22. public _init_ipc@0
  23. public _recieve_ipc@0
  24. public _send_ipc@8
  25.  
  26.  
  27. public _memset
  28.  
  29. struc FILEIO
  30. {   .cmd            dd ?
  31.     .offset         dd ?
  32.                     dd ?
  33.     .count          dd ?
  34.     .buff           dd ?
  35.                     db ?
  36.     .name           dd ?
  37. };
  38.  
  39. align 4
  40. _create_thread@12:
  41. .thr_proc    equ esp+4
  42. .param       equ esp+8
  43. .stack_size  equ esp+12
  44.  
  45.            mov eax, 68
  46.            mov ebx, 12
  47.            mov ecx, [.stack_size]
  48.            add ecx, 4095
  49.            and ecx, -4096
  50.            int 0x40
  51.            test eax, eax
  52.            jz .fail
  53.  
  54.            lea edx, [eax+ecx-12]
  55.            mov [edx], dword .exit_point
  56.            mov ebx, [.param]
  57.            mov [edx+4], ebx
  58.            mov [edx+8], ecx
  59.  
  60.            mov eax, 51
  61.            mov ebx, 1
  62.            mov ecx, [.thr_proc]
  63.            int 0x40
  64.            ret 12
  65. .fail:
  66.            not eax
  67.            ret 12
  68. align 4
  69. .exit_point:
  70.            pop ecx
  71.            mov eax, 68
  72.            mov ebx, 13
  73.            int 0x40
  74.            mov eax, -1
  75.            int 0x40
  76.  
  77. restore .thr_proc
  78. restore .param
  79. restore .stack_size
  80.  
  81.  
  82. align 4
  83. proc _get_button_id
  84.            mov   eax,17
  85.            int   0x40
  86.            test  al,al
  87.            jnz   @F
  88.            shr   eax,8
  89.            ret
  90. @@:
  91.            xor   eax,eax
  92.            dec   eax
  93.            ret
  94. endp
  95.  
  96. align 4
  97. proc _get_fileinfo@8 stdcall, name:dword, info:dword
  98.            push ebx
  99.            push esi
  100.            push edi
  101.            xor eax, eax
  102.            mov ebx, [name]
  103.            mov ecx, [info]
  104.  
  105.            mov [fileio.cmd], 5
  106.            mov [fileio.offset], eax
  107.            mov [fileio.offset+4], eax
  108.            mov [fileio.count], eax
  109.            mov [fileio.buff], ecx
  110.            mov byte [fileio.buff+4], al
  111.            mov [fileio.name], ebx
  112.  
  113.            mov eax, 70
  114.            lea ebx, [fileio]
  115.            int 0x40
  116.            pop edi
  117.            pop esi
  118.            pop ebx
  119.            ret
  120. endp
  121.  
  122. align 4
  123. proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\
  124.                                      count:dword,reads:dword
  125.            push ebx
  126.            push esi
  127.            push edi
  128.            xor eax, eax
  129.            mov ebx, [name]
  130.            mov edx, [offset]
  131.            mov esi, [buff]
  132.            mov edi, [count]
  133.  
  134.            mov [fileio.cmd], eax
  135.            mov [fileio.offset], edx
  136.            mov [fileio.offset+4], eax
  137.            mov [fileio.count], edi
  138.            mov [fileio.buff], esi
  139.            mov byte [fileio.buff+4], al
  140.            mov [fileio.name], ebx
  141.  
  142.            mov eax, 70
  143.            lea ebx, [fileio]
  144.            int 0x40
  145.            mov esi, [reads]
  146.            test esi, esi
  147.            jz @f
  148.            mov [esi], ebx
  149. @@:
  150.            pop edi
  151.            pop esi
  152.            pop ebx
  153.            ret
  154. endp
  155.  
  156. align 4
  157. proc _get_key@4 stdcall, key:dword
  158.            push ebx
  159.            push ecx
  160.            mov eax, 2
  161.            int 0x40
  162.            mov ebx, [key]
  163.            mov ecx, eax
  164.            shr ecx, 8
  165.            mov [ebx], ecx
  166.            movzx eax, al
  167.            pop ecx
  168.            pop ebx
  169.            ret
  170. endp
  171.  
  172.  
  173. align 4
  174. proc _InitHeap@4 stdcall, heap_size:dword
  175.                   push ebx
  176.                   mov eax, 68
  177.                   mov ebx, 11
  178.               mov ecx, [heap_size]
  179.                   int 0x40
  180.                   pop ebx
  181.                   ret
  182. endp
  183.  
  184. align 4
  185. proc _UserAlloc@4 stdcall, alloc_size:dword
  186.                   push ebx
  187.                   mov eax, 68
  188.                   mov ebx, 12
  189.               mov ecx, [alloc_size]
  190.                   int 0x40
  191.                   pop ebx
  192.                   ret
  193. endp
  194.  
  195. align 4
  196. proc _CreateThread@8 stdcall, fn:dword, p_stack:dword
  197.               push ebx
  198.               mov eax, 51
  199.               mov ebx, 1
  200.               mov ecx, [fn]
  201.               mov edx,[p_stack]
  202.                   int 0x40
  203.                   pop ebx
  204.                   ret
  205. endp
  206.  
  207. align 4
  208. proc _GetMousePos@4 stdcall,rel_type:dword
  209.            push ebx
  210.            mov eax, 37
  211.            mov ebx, [rel_type]
  212.            int 0x40
  213.            pop ebx
  214.            ret
  215. endp
  216.  
  217.  
  218. align 4
  219. proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
  220.                                workcolor:dword, style:dword, captioncolor:dword,\
  221.                                windowtype:dword, bordercolor:dword
  222.            push ebx edi esi
  223.            mov ebx, [x]
  224.            mov ecx, [y]
  225.            shl ebx, 16
  226.            shl ecx, 16
  227.            mov bx, word [sx]
  228.            mov cx,  word [sy]
  229.            mov  edx,[style]
  230.            shl  edx,24
  231.            add  edx,[workcolor]
  232.            mov  esi,[windowtype]
  233.            shl  esi,24
  234.            add  esi,[captioncolor]
  235.            mov  edi,[bordercolor]
  236.            xor  eax,eax
  237.            int  0x40
  238.            pop esi edi ebx
  239.            ret
  240. endp
  241.  
  242. align 4
  243. _make_button@24:
  244. ;arg1 - x
  245. ;arg2 - y
  246. ;arg3 - xsize
  247. ;arg4 - ysize
  248. ;arg5 - id
  249. ;arg6 - color
  250.  
  251.   push  ebx esi
  252.   mov   ebx,[esp+12]
  253.   shl   ebx,16
  254.   mov   bx,[esp+20]
  255.   mov   ecx,[esp+16]
  256.   shl   ecx,16
  257.   mov   cx,[esp+24]
  258.   mov   edx,[esp+28]
  259.   mov   esi,[esp+32]
  260.   mov   eax,8
  261.   int   0x40
  262.   pop   esi ebx
  263.   ret   24
  264.  
  265. align 4
  266. _draw_bar@20:
  267. ;arg1 - x
  268. ;arg2 - y
  269. ;arg3 - xsize
  270. ;arg4 - ysize
  271. ;arg5 - color
  272.   push  ebx
  273.   mov   eax,13
  274.   mov   ebx,[esp+8]
  275.   shl   ebx,16
  276.   mov   bx,[esp+16]
  277.   mov   ecx,[esp+12]
  278.   shl   ecx,16
  279.   mov   cx,[esp+20]
  280.   mov   edx,[esp+24]
  281.   int   0x40
  282.   pop   ebx
  283.   ret   20
  284.  
  285. _write_text@20:
  286. ;arg1 - x
  287. ;arg2 - y
  288. ;arg3 - color
  289. ;arg4 - text
  290. ;arg5 - len
  291.   push  ebx esi
  292.   mov   eax,4
  293.   mov   ebx,[esp+12]
  294.   shl   ebx,16
  295.   mov   bx,[esp+16]
  296.   mov   ecx,[esp+20]
  297.   mov   edx,[esp+24]
  298.   mov   esi,[esp+28]
  299.   int   0x40
  300.   pop   esi ebx
  301.   ret   20
  302.  
  303. align 4
  304. proc _debug_out@4 stdcall, val:dword
  305.            push ebx
  306.            mov  ecx,[val]
  307.            mov  ebx,1
  308.            mov  eax,63
  309.            int  0x40
  310.            pop ebx
  311.            ret
  312. endp
  313.  
  314. align 4
  315. proc _debug_out_hex@4 stdcall val:dword
  316.            locals
  317.              count dd ?
  318.            endl
  319.  
  320.            mov [count], 8
  321. .new_char:
  322.            rol [val], 4
  323.            mov ecx, [val]
  324.            and ecx, 0x0f
  325.            mov cl,byte [__hexdigits+ecx]
  326.            mov eax, 63
  327.            mov ebx, 1
  328.            int 0x40
  329.            dec [count]
  330.            jnz .new_char
  331.            ret
  332. endp
  333.  
  334. align 4
  335. _memset:
  336.            mov     edx,[esp + 0ch]
  337.            mov     ecx,[esp + 4]
  338.  
  339.            test    edx,edx
  340.            jz      short toend
  341.  
  342.            xor     eax,eax
  343.            mov     al,[esp + 8]
  344.  
  345.            push    edi
  346.            mov     edi,ecx
  347.  
  348.            cmp     edx,4
  349.            jb      tail
  350.  
  351.            neg     ecx
  352.            and     ecx,3
  353.            jz      short dwords
  354.  
  355.            sub     edx,ecx
  356. adjust_loop:
  357.            mov     [edi],al
  358.            add     edi,1
  359.            sub     ecx,1
  360.            jnz     adjust_loop
  361.  
  362. dwords:
  363.         mov     ecx,eax
  364.         shl     eax,8
  365.         add     eax,ecx
  366.         mov     ecx,eax
  367.         shl     eax,10h
  368.         add     eax,ecx
  369.  
  370.         mov     ecx,edx
  371.         and     edx,3
  372.         shr     ecx,2
  373.         jz      tail
  374.  
  375.                 cld
  376.         rep     stosd
  377. main_loop_tail:
  378.         test    edx,edx
  379.         jz      finish
  380.  
  381.  
  382. tail:
  383.         mov     [edi],al
  384.         add     edi,1
  385.  
  386.         sub     edx,1
  387.         jnz     tail
  388.  
  389. finish:
  390.         mov     eax,[esp + 8]
  391.         pop     edi
  392.  
  393.         ret
  394.  
  395. toend:
  396.         mov     eax,[esp + 4]
  397.  
  398.         ret
  399.  
  400. public _allmul
  401.  
  402. _allmul:
  403.         mov eax, [esp+8]
  404.         mov ecx, [esp+16]
  405.         or ecx,eax
  406.         mov ecx, [esp+12]
  407.         jnz .hard
  408.         mov eax, [esp+4]
  409.         mul ecx
  410.         ret 16
  411. .hard:
  412.         push ebx
  413.         mul ecx
  414.         mov ebx,eax
  415.         mov eax, [esp+8]
  416.         mul dword [esp+20]
  417.         add ebx,eax
  418.         mov eax,[esp+8]
  419.         mul ecx
  420.         add edx,ebx
  421.         pop ebx
  422.         ret 16
  423.  
  424. align 4
  425. _allshr:
  426.         cmp cl,64
  427.         jae .sign
  428.  
  429.         cmp cl, 32
  430.         jae .MORE32
  431.         shrd eax,edx,cl
  432.         sar edx,cl
  433.         ret
  434. .MORE32:
  435.         mov     eax,edx
  436.         sar     edx,31
  437.         and     cl,31
  438.         sar     eax,cl
  439.         ret
  440. .sign:
  441.         sar     edx,31
  442.         mov     eax,edx
  443.         ret
  444.  
  445. public __ftol2_sse
  446.  
  447. align 4
  448. __ftol2_sse:
  449.            push ebp
  450.            mov ebp, esp
  451.            sub esp, 20
  452.            and esp, 0xFFFFFFF0
  453.            fld st0
  454.            fst dword [esp+18]
  455.            fistp qword [esp+10]
  456.            fild qword [esp+10]
  457.            mov edx, [esp+18]
  458.            mov eax, [esp+10]
  459.            test eax, eax
  460.            jz .QnaNZ
  461.  
  462. .not_QnaNZ:
  463.            fsubp st1, st0
  464.            test edx, edx
  465.            jns .pos
  466.            fstp dword [esp]
  467.            mov ecx, [esp]
  468.            xor ecx, 0x80000000
  469.            add ecx, 0x7FFFFFFF
  470.            adc eax, 0
  471.            mov edx, [esp+14]
  472.            adc edx, 0
  473.            jmp .exit
  474. .pos:
  475.            fstp dword [esp]
  476.            mov ecx, [esp]
  477.            add ecx, 0x7FFFFFFF
  478.            sbb eax, 0
  479.            jmp .exit
  480. .QnaNZ:
  481.            mov edx, [esp+14]
  482.            test edx, 0x7FFFFFFF
  483.            jne .not_QnaNZ
  484.            fstp dword [esp+18]
  485.            fstp dword [esp+18]
  486. .exit:
  487.            leave
  488.            ret
  489.  
  490. public __fltused
  491. __fltused    dd 0
  492.  
  493. align 4
  494. __hexdigits db '0123456789ABCDEF'
  495.  
  496. align 4
  497. fileio FILEIO
  498.  
  499.  
  500. align 4
  501. _init_ipc@0:
  502.            push ebx
  503.            mov eax, 60
  504.            mov ebx, 1
  505.            mov ecx, ipc_buff
  506.            mov edx, (5*4+1024)
  507.            int 0x40
  508.            pop ebx
  509.            ret  
  510.  
  511. align 4
  512. _recieve_ipc@0:
  513.            mov [ipc_buff.size], 8  
  514.            mov eax, ipc_buff.sender
  515.            ret
  516. align 4
  517. proc _send_ipc@8 stdcall, dst:dword, code:dword
  518.            push ebx
  519.            push esi
  520.            
  521.            mov eax, 60
  522.            mov ebx, 2
  523.            mov ecx, [dst]
  524.            lea edx, [code]
  525.            mov esi, 4
  526.            int 0x40
  527.            pop esi
  528.            pop ebx
  529.            ret
  530. endp
  531.  
  532. ;align 4
  533. ;ipc_ctrl:
  534. ;  .pid        dd ?
  535. ;  .size       dd 4
  536. ;  .msg        dd ?
  537.        
  538. align 4
  539. ipc_buff:
  540.   .lock       dd 0
  541.   .size       dd 8
  542.   .sender     dd ?
  543.   .msg_size   dd ?
  544.   .msg        dd ?
  545.   .data       rb 1024