Subversion Repositories Kolibri OS

Rev

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