Subversion Repositories Kolibri OS

Rev

Rev 223 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;--------------------------------------------------------------------
  2. ; Çàãðóçêà ïðîöåññîðà
  3. ; OUT : AL - çàãðóçêà â ïðîöåíòàõ
  4. cpu_usage:
  5.         pusha
  6.         mov     byte [c_u_t], 0
  7.         mov     eax, 18         ; TSC / SEC
  8.         mov     ebx, 5
  9.         int     0x40
  10.         shr     eax, 20
  11.         push    eax
  12.  
  13.         mov     eax, 18         ; IDLE / SEC
  14.         mov     ebx, 4
  15.         int     0x40            ; eax - ïóñòûõ öèêëîâ â ñåêóíäó
  16.         shr     eax, 20         ; eax = IDLE / 1048576
  17.         pop     ebx
  18.         cmp     eax, ebx        ; BUG : time to time ICPS > TSCPS
  19.         jnl     c_u_o
  20.         push    ebx
  21.         xor     edx, edx
  22.         mov     ebx, 100
  23.         mul     ebx             ; eax =(IDLE / 1048576) * 100
  24.  
  25.         xor     edx, edx
  26.         pop     ebx             ; ebx = (TSC/1048576)+1
  27.         inc     ebx
  28.         div     ebx             ; eax = ((IDLE / 1048576) * 100) / ((TSC/1048576)+1)
  29.  
  30.         mov     bl, 100
  31.         sub     bl, al
  32.         cmp     bl, 101
  33.         jnl     c_u_o
  34.         mov     [c_u_t], bl
  35.  
  36. c_u_o:  popa
  37.         mov     al, [c_u_t]
  38.         ret
  39. uglobal
  40.         c_u_t:  db      0
  41. endg
  42. ;--------------------------------------------------------------------
  43. mem_usage:
  44. ; Èñïðîëüçîâàíèå ïàìÿòè
  45. ; OUT : al - ïðîöåòí èñïðîëüçóåìîé ïàìÿòè
  46. display nl, 'Memory usage : '
  47. if (OS_version >= 0x0530)
  48.         display 'yes'
  49.         pusha
  50.         mov     byte [m_u_t], 0
  51.  
  52.         mov     eax, 18         ; full mem
  53.         mov     ebx, 17
  54.         int     0x40
  55.         shr     eax, 10
  56.         push    eax
  57.  
  58.         mov     eax, 18         ; free mem
  59.         mov     ebx, 16
  60.         int     0x40            ; eax - free mem
  61.         shr     eax, 10         ; eax = fmem / 1024
  62.         xor     edx, edx
  63.         mov     ebx, 100
  64.         mul     ebx             ; eax =(free mem / 1024) * 100
  65.  
  66.         xor     edx, edx
  67.         pop     ebx             ; ebx = (full mem/1024)+1
  68.         inc     ebx
  69.         div     ebx             ; eax = ((free mem / 1024) * 100) / ((full mem/1024)+1)
  70.  
  71.         mov     bl, 100
  72.         sub     bl, al
  73.         cmp     bl, 101
  74.         jnb     m_u_o
  75.         mov     [m_u_t], bl
  76.  
  77. m_u_o:  popa
  78.         mov     al, [m_u_t]
  79.         ret
  80. uglobal
  81.         m_u_t:  db      0
  82. endg
  83. else
  84.         display 'no'
  85.         xor     eax, eax
  86.         ret
  87. end if
  88.  
  89. ;#######################################################################
  90. stop_test:
  91.         ; ïîðòÿòñÿ ðåãèñòðû
  92.         display nl, 'Kill process type : '
  93. if (OS_version < 0x0400)
  94.         ; êîä äëÿ Menuet
  95.         display 'Menuet'
  96.         mov     eax, 18
  97.         mov     ebx, 2
  98.         mov     ecx, [test_pid]
  99.         int     0x40
  100.         mov     byte[test_id], 0
  101.         ret
  102.         ; -------------------------------
  103. else if (OS_version >= 0x0400)
  104. if (OS_version < 0x0580)
  105.         display 'old Kolibri'
  106.         ; -- ñëåäóéøèé êîä óáèâàåò ïðîöåññ â Kolibri 4 è ñòàðøå
  107.         mov     ebx, Buf
  108.         xor     ecx, ecx
  109. find_th:mov     eax, 9
  110.         int     0x40
  111.         mov     edx, dword [Buf + 30]
  112.         cmp     edx, dword [test_pid]
  113.         je      kill_t
  114.         inc     ecx
  115.         cmp     ecx, eax                ; eax - êîëè÷åñòâî ïðîöåññîâ
  116.         jle     find_th
  117.         jmp     cl_tinf                 ; ÎØÈÁÊÀ !!!! ïîòîê íå íàéäåí !!!!
  118. kill_t: mov     ebx, 2                  ; óáèâàåì òåñòîâûé ïîòîê
  119.         mov     eax, 18
  120.         int     0x40
  121. cl_tinf:
  122.         mov     byte[test_id], 0
  123.         ret
  124.         uglobal
  125.         Buf:            times   1024 db ?       ; Áóôåð äëÿ íàõîæäåíèÿ PID`à çàïóùåííîãî òåñòà
  126.         endg
  127. else
  128.         ; -------------------------------
  129.         ; êîä äëÿ Kolibri 0.5.8.0 è ñòàðøå
  130.         display 'Kolibri 0.5.8.0'
  131.         mov     eax, 18
  132.         mov     ebx, 18
  133.         mov     ecx, [test_pid]
  134.         int     0x40
  135.         mov     byte [test_id], 0
  136.         ret
  137.         ; -------------------------------
  138. end if
  139. end if
  140. ;#######################################################################
  141.  
  142. ; Âûâîäèò ñòðîêè òåêñòà
  143. ; in : edx - óêàçàòåëü íà mls
  144. ;      ebx - êîîðäèíàòû : X << 16 + Y
  145. show_text:
  146.         mov     eax, 4
  147.         mov     ecx, 0x10000000
  148. @@:
  149.         movzx   esi, byte[edx]
  150.         inc     edx
  151.         int     0x40
  152.         add     ebx, 10
  153.         add     edx, esi
  154.         cmp     byte[edx], -1
  155.         jne     @b
  156.         ret
  157. ;--------------------------------------------------------------------- 
  158. multiplier:
  159. ;--- âû÷èñëåíèå êîýôôèöèåíòà óìíîæåíèÿ -
  160. ; ïîðòèò ðåãèñòðû
  161. ; out : CL = êîýôô.óìíîæåíèÿ * 10, èëè 0
  162.         xor     ecx, ecx
  163. if (OS_version >= 0x0510)
  164.         display nl, 'Multiplier : yes'
  165.         cmp     dword [Vendor + 8], 'cAMD'      ; Check for Advanced Micro Devices CPU
  166.         jne     noAMD
  167.         cmp     byte [CPU_fam], 5
  168.         jne     noAMDK6
  169.         mov     eax, 68         ; AMD-K6 (p.30)
  170.         mov     ebx, 3
  171.         mov     edx, 0x0C0000087
  172.         int     0x40            ; eax - low dword
  173.         and     eax, 111b
  174.         mov     cl, [athloncoef3 + eax]
  175.         cmp     eax, 6
  176.         jne     @f
  177.         cmp     byte[CPU_mod], 8
  178.         jae     @f
  179.         mov     cl, 20
  180. @@:     ret    
  181.        
  182. noAMDK6:cmp     byte [CPU_fam], 6
  183.         jne     noAMDK7
  184.         mov     eax, 68         ; Athlon/AthlonXP
  185.         mov     ebx, 3
  186.         mov     edx, 0x0C0010015
  187.         int     0x40
  188.         mov     ebx, eax
  189.         shr     ebx, 24
  190.         and     ebx, 0x0F
  191.         shr     eax, 20
  192.         jc      @f
  193.         mov     cl, [athloncoef + ebx]
  194.         ret
  195. @@:     mov     cl, [athloncoef2 + ebx]
  196.         ret
  197.        
  198. noAMD:  cmp     dword [Vendor + 8], 'ntel'      ; Check for International Electronics CPU
  199.         jne     noIntel
  200.         cmp     byte[CPU_fam], 0x0F
  201.         jne     noIntelP4
  202.         cmp     byte [CPU_type], 6
  203.         jne     @f
  204.         mov     eax, 68         ; Pentium M
  205.         mov     ebx, 3
  206.         mov     edx, 0x2A
  207.         int     0x40
  208.         shr     eax, 22
  209.         and     eax, 0x1F
  210.         mov     dl, 10
  211.         mul     dl
  212.         mov     cl, al
  213.         ret
  214. @@:     cmp     byte [CPU_mod], 2
  215.         jae     @f
  216.         mov     eax, 68         ; Pentium 4 / Xeon (model < 2)
  217.         mov     ebx, 3
  218.         mov     edx, 0x2A
  219.         int     0x40
  220.         shr     eax, 8
  221.         and     eax, 0x0F
  222.         mov     cl, [p4coef + eax]
  223.         ret
  224. @@:     mov     eax, 68         ; Pentium 4 / Xeon (model >= 2)
  225.         mov     ebx, 3
  226.         mov     edx, 0x2C
  227.         int     0x40
  228.        
  229.         ; shr   eax, 24
  230.         ; and   eax, 0x1F
  231.         shr     eax, 27
  232.         and     al, 0Fh
  233.         add     al, 8
  234.        
  235.         mov     dl, 10
  236.         mul     dl
  237.         mov     cl, al
  238.         ret    
  239. noIntelP4:
  240.         cmp     byte[CPU_fam], 6
  241.         jne     noIntelP6
  242.         mov     eax, 68         ; Pentium Pro / Pentium II / Pentium III
  243.         mov     ebx, 3
  244.         mov     edx, 0x2A
  245.         int     0x40
  246.         shr     eax, 22
  247.         test    al, 0x20
  248.         jz      @f
  249.         or      al, 0x10
  250. @@:     and     eax, 0x1f
  251.  
  252.         cmp     byte[CPU_mod], 0x06 ; ? 7
  253.         ja      @f
  254.         and     al, 0x0f
  255. @@:
  256.         mov     cl, [coppercoeff + eax]
  257.         cmp     byte[CPU_mod], 0x0B
  258.         jb      @f
  259.         mov     cl, [tualatcoeff + eax]
  260. @@:     ret
  261.  
  262. noIntel:
  263. noIntelP6:
  264. noAMDK7:
  265.         ret
  266.  
  267. athloncoef      db      110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105
  268. athloncoef2     db      120, 190, 120, 200, 130, 135, 140, 210, 150, 220, 160, 165, 170, 180, 230, 240
  269. athloncoef3     db      45, 50, 40, 55, 25, 30, 60, 35
  270. p4coef          db      160, 170, 180, 190, 200, 210, 220, 230, 80, 90, 100, 110, 120, 130, 140, 150    ; Pentium 4
  271. coppercoeff     db       50, 30, 40, 20, 55, 35,  45, 25,  35, 70, 80, 60, 20, 75, 15, 65, 90, 110, 120, 20, 95, 115, 85, 25, 35, 70,  80, 100,  20, 75,  15, 105
  272. tualatcoeff     db      120, 35, 35, 40, 55, 35, 115, 35, 160, 70, 80, 60, 40, 75, 35, 65, 90, 110,  35, 35, 95,  35, 85, 35, 35, 35, 130, 100, 140, 35, 150, 105
  273. else
  274.         display nl, 'Multiplier : no'
  275.         ret
  276. end if
  277. ;---------------------------------------------------------------------
  278. digit_len:
  279.         ; Âû÷èñëåíèå äëèííû ÷èñëà äëÿ ôóíê. 47
  280.         ; ecx - ÷èñëî
  281.         ; ebx - äëèííà * 65536
  282.         pusha
  283.         xor     ebx, ebx
  284.         mov     eax, ecx
  285.         mov     esi, 10
  286. @@:     xor     edx, edx
  287.         inc     ebx
  288.         div     esi
  289.         test    eax, eax
  290.         jnz     @b
  291.         mov     [tdl], ebx
  292.         popa
  293.         mov     ebx, [tdl]
  294.         shl     ebx, 16
  295.         ret
  296. uglobal
  297.         tdl     dd      0
  298. endg
  299.  
  300.  
  301. ;--------------------------------------------------------------------
  302. ftoa:
  303. ; esi - ïðåîáðàçóåìîå ÷èñëî;
  304. ; Data_String - ñòðîêà-ðåçóëüòàò.
  305.  
  306.         pusha
  307.         mov     edi, Data_String
  308.         fninit
  309.         fld     dword [esi]
  310.         fmul    dword [MConst]
  311.         fbstp   [Data_BCD]
  312.         mov     ax, word[Data_BCD + 8]
  313.         cmp     ax, 0xFFFF
  314.         je      @@Overflow
  315.         mov     al, byte[Data_BCD + 9]
  316.         and     al, al
  317.         jz      @@NoSign
  318.         mov     AL,'-'
  319.         stosb
  320. @@NoSign:
  321.         mov     ebx, 8
  322.         mov     ecx, 9
  323.         mov     edx, 18 - 2     ; 2 çíàêà ïîñëå çàïÿòîé
  324. @@NextPair:
  325.         mov     al, byte[Data_BCD + ebx]
  326.         mov     AH,AL
  327.         shr     AL,4
  328.         add     AL,'0'
  329.         stosb
  330.         dec     edx
  331.         jnz     @@N0
  332.         mov     AL,'.'
  333.         stosb
  334. @@N0:   mov     AL,AH
  335.         and     AL,0Fh
  336.         add     AL,'0'
  337.         stosb
  338.         dec     edx
  339.         jnz     @@N1
  340.         mov     AL,'.'
  341.         stosb
  342. @@N1:   dec     ebx
  343.         loop    @@NextPair
  344.         xor     al, al
  345.         stosb
  346.         mov     edi, Data_String
  347.         mov     esi, Data_String
  348.         cmp     byte[esi], '-'
  349.         jne     @@N2
  350.         inc     esi
  351.         inc     edi
  352. @@N2:   mov     ecx, 18+1+1
  353. @@N3:   cmp     byte[esi], '0'
  354.         jne     @@N4
  355.         inc     esi
  356.         loop    @@N3
  357.         jmp     @@Error
  358. @@N4:   rep movsb
  359.         jmp     @@End
  360. @@Overflow:
  361. @@Error:mov     eax, 'ERR'
  362.         stosd
  363. @@End:  popa
  364.         ret
  365. MConst: dd 1.0E2        ; 2 çíàêà ïîñëå çàïÿòîé
  366.  
  367. uglobal
  368.         Data_BCD:       DT ?
  369.         Data_String:    times 20 db 0   ; ASCIIZ ñòîðêà ñ ïðåîáðàçîâàííûì ÷èñëîì
  370. endg
  371. ;--------------------------------------------------------------------
  372.