Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ; Ghost Monitor - óòèëèòà (ñòðåññ) òåñòèðîâàíèÿ è ìîíèòîðèíãà ñèñòåìû
  3. ; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru)
  4. ; All Right Reserved
  5. ;
  6. ; ÂÎÇÌÎÆÍÀ ÏÎÐ×À ÎÁÎÐÓÄÎÂÀÍÈß!
  7. ; ÈÑÏÎËÜÇÓÉÒÅ ÍÀ ÑÂÎÉ ÑÒÐÀÕ È ÐÈÑÊ!
  8. ;
  9. ; Çàìåòêè :
  10. ;       Äîïèñàòü çàïóñê òåñòîâ (rtst) (íåò ðåàêöèè íà îøèáêó çàïóñêà)
  11. ;       Ïåðåäåëàòü îáíîâëåíèå ãðàôèêà (ñäåëàòü îòäåëüíûì ïðîöåññîì)
  12. ;       Äîáàâèòü ðåàêöèþ íà ïàðàìåòðû äàò÷èêîâ
  13. ;
  14.  
  15. ; Âíåøíèå ôàéëû :
  16. ;       hwm*.inc        - ïðîöåäóðû ðàáîòû ñ äàò÷èêàìè ìîíèòîðèíãà
  17. ;       system.inc      - âû÷èñëåíèå çàãðóçêè ïðîöåññîðà, çàâåðøåíèå òåñòà, etc...
  18. ;       tests.inc       - òåñòû ;-)
  19. ;       diag.inc        - ïîääåðæêà äèàãðàì
  20. ;       tab_*.inc       - ïðîöåäóðû îòðèñîâêè ñîîòâåòñòâóþøèõ âêëàäîê
  21.  
  22.  
  23. ; Èäåíòèôèêàòîðû êíîïîê :
  24. ;       01 - Exit
  25. ;       02 - Info tab
  26. ;       03 - Tests tab
  27. ;       04 - Config tab
  28. ;       05 - About tab
  29. ;       06 - P5 test (tab_test.inc)
  30. ;       07 - P6 test (tab_test.inc)
  31. ;       08 - K6 test (tab_test.inc)
  32. ;       09 - K7 test (tab_test.inc)
  33. ;       10 - MMX test   - not used (tab_test.inc)
  34. ;       11 - Update time increment (tab_conf.inc)
  35. ;       12 - Update time decriment (tab_conf.inc)
  36. ;       13..17 - Èçìåíåíèå öâåòà CPU_load, Mem_usage, Temp1, Temp2, Temp3
  37.  
  38. include 'lang.inc'
  39. include 'config.inc'
  40. include 'macros.inc'
  41.  
  42. tcol    equ     0x5080d0
  43. atcol   equ     0x4070c0
  44. val_mod equ     0x3090
  45.  
  46. MEOS_APP_START
  47. include "tests.inc"     ; <-- Ìíîãî âûðàâíèâàíèé, ëó÷øå çäåñü
  48. CODE
  49. ;--- Init ------------------------------------------------------------
  50.         ; Î÷èùàåì íåèíèöèàëèçèðîâàííûå äàííûå
  51.         mov     ecx, __memory - __udata
  52.         mov     edi, __udata
  53.         xor     eax, eax
  54.         rep     stosb
  55.  
  56.         xor     eax, eax
  57.         cpuid                                   ; Óçíà¸ì ïðîèçâîäèòåëÿ ïðîöà
  58.         mov     [Vendor + 0], ebx
  59.         mov     [Vendor + 4], edx
  60.         mov     [Vendor + 8], ecx
  61.         mov     eax, 1
  62.         cpuid                                   ; Åñòü ëè MMX ?
  63.         mov     ecx, eax
  64.         shr     al, 4
  65.         and     ax, 0x0F0F
  66.         mov     [CPU_fam], ah
  67.         mov     [CPU_mod], al
  68.         shr     edx, 23
  69.         and     dl, 1
  70.         mov     [CPU_mmx], dl
  71.         shr     ecx, 12
  72.         and     cl, 11b
  73.         mov     [CPU_type], cl
  74.  
  75.         ; ! Öâåòà èç ìàññèâà colors
  76.         mov     dword[d_cpu_load], 0xFF00       ; èíèöèàëèçèðóåì ãðàôèê çàãðóçêè ÀËÓ
  77.         mov     dword[d_mem_usage], 0x8BA169    ; -- mem usega
  78.         mov     dword[d_temp1], 0xFF0000        ; -- ãðàôèê òåìïåðàòóðû ÖÏÓ
  79.         mov     dword[d_temp2], 0xFF            ; -- ãðàôèê òåìïåðàòóðû ÌÏ
  80.         mov     dword[d_temp3], 0xFF7E23
  81.  
  82.         call    hwm_init                        ; Èíèöèàëèçèðóåì ÷èï ìîíèòîðèíãà
  83.  
  84.         jmp     draw_window
  85. ;--- Wait & translate event ------------------------------------------
  86. wait_for_event:
  87.         mov     byte[diag_add_v], 0     ; äîáàâëÿåì äàííûå ê ãðàôèêó òîëüêî ïî òàéìåðó
  88.         mov     ebx, [update_time]
  89.         mov     eax, 23
  90.         int     0x40
  91.         test    eax, eax
  92.         jnz     @f
  93.         inc     byte [diag_add_v]
  94.         inc     eax                     ; ïåðåðèñóåì îêíî (eax := 1)
  95. @@:     dec     eax                     ; redraw request ?
  96.         jz      draw_window
  97.         dec     eax                     ; key in buffer ?
  98.         jz      key
  99.         dec     eax                     ; button in buffer ?
  100.         jz      button
  101.         jmp     wait_for_event
  102. ;--- Key pressed -----------------------------------------------------
  103. key:
  104.         mov     eax, 2
  105.         int     0x40
  106.         cmp     ah, 27                  ; Esc - çàâåðøåíèå ðàáîòû
  107.         je      exit
  108.         jmp     wait_for_event
  109. ;--- Button down -----------------------------------------------------
  110. button:
  111.         mov     eax, 17                 ; get id
  112.         int     0x40
  113.         cmp     ah, 1                   ; button id == 1 ?
  114.         jne     noexit
  115. exit:   cmp     byte[test_id], 0
  116.         je      @f
  117.         call    stop_test
  118. @@:     mov     eax, -1         ; close this program
  119.         int     0x40
  120. noexit:
  121.         ; êíîïêè âêëàäîê (2 .. 5)
  122.         cmp     ah, 5
  123.         jg      no_tabs
  124.         mov     byte[act_tab], ah
  125.         jmp     draw_window
  126. no_tabs:
  127.         ; êíîïêè çàïóñêà òåñòâî (6 .. 10)
  128.         cmp     ah, 10
  129.         jg      no_test_bt
  130.         ; åñëè íåò çàïóùåíûõ òåñòîâ - çàïóñêàåì âûáðàííûé
  131.         cmp     byte[test_id], 0
  132.         je      run_test
  133.         ; åñëè êíîïêà àêòèâíîãî òåñòà - îñòàíàâëèâàåì òåñò, èíà÷å íè÷åãî íå äåëàåì
  134.         cmp     [test_id], ah
  135.         jne     wait_for_event
  136.         call    stop_test
  137.         jmp     draw_window
  138.  
  139. tsts:   dd      p5, p6, k6, k7
  140. run_test:
  141.         push    eax
  142.         movzx   ecx, ah
  143.         mov     ecx, [tsts + (ecx * 4) - (6 * 4)]
  144. rtst:   mov     eax, 51
  145.         mov     edx, stp
  146.         mov     ebx, 1
  147.         int     0x40
  148.         cmp     eax, 0xFFFFFFF0 ; -16
  149.         je      wait_for_event  ; <-- îøèáêà çàïóñêà òåñòà, ÏÅÐÅÏÈÑÀÒÜ
  150.         mov     [test_pid], eax
  151.         pop     eax
  152.         mov     byte [test_id], ah
  153.         jmp     draw_window
  154.         ;-------------------------
  155.         ; êíîïêè èçìåíåíèÿ âðåìåíè îáíîâëåíèÿ
  156. no_test_bt:
  157.         cmp     ah, 11
  158.         jne     no_ut_inc
  159.         add     dword[update_time], 10
  160.         jmp     draw_window
  161. no_ut_inc:
  162.         cmp     ah, 12
  163.         jne     no_ut_dec
  164.         cmp     dword[update_time], 10
  165.         jng     wait_for_event
  166.         sub     dword[update_time], 10
  167.         jmp     draw_window
  168. no_ut_dec:
  169.         ;-------------------------
  170.         ; êíîïêè èçìåíåíèÿ öâåòà ãðàôèêîâ (13..17)
  171.         cmp     ah, 17
  172.         jg      no_change_color
  173.         sub     ah, 13
  174.         movzx   ecx, ah
  175.         mov     esi, [d_colors + ecx * 4]
  176.         mov     eax, [esi]
  177.         mov     ecx, (colors_end - colors) / 4  ; êîëè÷åñòâî öâåòîâ
  178. @@:     dec     ecx
  179.         cmp     eax, [colors + ecx * 4]
  180.         jne     @b
  181.         mov     ebx, [colors + ecx * 4 - 4]
  182.         mov     [esi], ebx
  183.         jmp     draw_window
  184. no_change_color:
  185.         jmp     wait_for_event
  186. ;---------------------------------------------------------------------
  187. draw_window:
  188.         mov     eax,12
  189.         mov     ebx,1
  190.         int     0x40
  191.         ; Ñîçäà¸ì îêíî
  192.         xor     eax, eax
  193.         mov     ebx, 300 * 65536 + 309
  194.         mov     ecx, 150 * 65536 + 450
  195.         mov     edx, tcol + 0x14000000  ; color of work area RRGGBB,8->color
  196.         mov     edi, title              ; color of frames    RRGGBB
  197.         int     0x40
  198.         ; Ñîçäà¸ì ðàìêó ãðàôèêà
  199.         mov     eax, 13
  200.         mov     ebx, 10 * 65536 + 290
  201.         mov     ecx, 138 * 65536 + 105
  202.         mov     edx, atcol
  203.         int     0x40
  204.         mov     ebx, 12 * 65536 + 286
  205.         mov     ecx, 140 * 65536 + 101
  206.         mov     edx, tcol
  207.         int     0x40
  208.         mov     eax, 38
  209.         mov     edx, atcol
  210.         mov     ebx, 12 * 65536 + 286 + 12
  211.         mov     ecx, 140 * 65536 + 140
  212. @@:     add     ecx, 10 * 65536 + 10
  213.         int     0x40
  214.         cmp     cx, 230                 ; ïðèâÿçàíî ê êîîðäèíàòàì îêíà
  215.         jl      @b
  216.  
  217.         ; Ïèøèì íàçâàíèÿ ïàðàìåòðîâ (Cpu load, temper, etc...)
  218.         mov     edx, msgs_mon
  219.         mov     ebx, 17 * 65536 + 30
  220.         call    show_text
  221.  
  222.         mov     edx, msgs_mon2
  223.         mov     ebx, 156 * 65536 + 30
  224.         call    show_text
  225.  
  226.         ; Ðèñóåì êíîïêè ñìåíû öâåòà
  227.         mov     eax, 8
  228.         mov     ebx, 112 * 65536 + 5
  229.         mov     ecx, 30 * 65536 + 6
  230.         mov     edx, 13
  231. @@:     mov     esi, [d_colors - 13 * 4 + edx * 4]
  232.         mov     esi, [esi]
  233.         int     0x40
  234.         add     ecx, 10 * 65536
  235.         inc     edx
  236.         cmp     edx, 13 + 5             ; 5 êíîïîê
  237.         jne     @b
  238.  
  239.         ; Ïèøèì çàãðóçêó ïðîöåññîðà
  240.         call    cpu_usage
  241.         ;--- äîáàâëÿåì íà ãðàôèê ---
  242.         mov     esi, d_cpu_load
  243.         call    d_add
  244.         call    d_show
  245.         ;---------------------------
  246.         movzx   ecx, al
  247.         mov     eax, 47
  248.         mov     edx, 121 * 65536 + 30
  249.         xor     esi, esi
  250.         call    digit_len
  251.         int     0x40
  252.  
  253.         ; Ïèøèì èñïîëüçóåìóþ ïàìÿòü
  254.         call    mem_usage
  255.         ;--- äîáàâëÿåì íà ãðàôèê ---
  256.         mov     esi, d_mem_usage
  257.         call    d_add
  258.         call    d_show
  259.         ;---------------------------
  260.         movzx   ecx, al
  261.         mov     eax, 47
  262.         mov     edx, 121 * 65536 + 40
  263.         xor     esi, esi
  264.         call    digit_len
  265.         int     0x40
  266.  
  267.         cmp     byte[hwm_enable], 0
  268.         jne     show_mon
  269.         ; Íåò äàò÷èêîâ - ïèøåì NO
  270.         mov     ecx, 8  ;<- êîëè÷åñòâî ïàðàìåòðîâ
  271.         mov     eax, 4
  272.         mov     ebx, 121 * 65536 + 50
  273.         mov     edx, msg_no
  274.         mov     esi, 3
  275. @@:     int     0x40
  276.         add     ebx, 10
  277.         loop    @b
  278.  
  279.         mov     ecx, 7  ;<- êîëè÷åñòâî ïàðàìåòðîâ
  280.         mov     ebx, 260 * 65536 + 30
  281. @@:     int     0x40
  282.         add     ebx, 10
  283.         loop    @b
  284.  
  285.         jmp     no_monitor
  286. show_mon:
  287.         ;Åñòü äàò÷èêè ïèøèì èíôó
  288.         call    hwm_get_params
  289.         ;---------------------------
  290.         ; Òåìïåðàòóðó
  291.         mov     ecx, 3
  292.         mov     esi, hwm_temps
  293.         mov     edx, 121 * 65536 + 50
  294.         xor     eax, eax
  295. sh_temp:push    ecx
  296.         lodsw
  297.         push    esi
  298.         ; ðåàêöèÿ íà èçìåíåíèÿ
  299.         xor     esi, esi
  300.         cmp     [old_t1 + ecx * 4 - 4], eax
  301.         je      @f
  302.         mov     [old_t1 + ecx * 4 - 4], eax
  303.         mov     esi, val_mod
  304. @@:     movzx   ecx, al
  305.         push    eax
  306.         mov     eax, 47
  307.         mov     ebx, 0x20000
  308.         int     0x40
  309.         pop     eax
  310.         mov     cl, ah
  311.         mov     eax, 47
  312.         mov     ebx, 0x10000
  313.         add     edx, 15 * 65536
  314.         int     0x40
  315.         sub     edx, 15 * 65536 - 10
  316.         pop     esi
  317.         pop     ecx
  318.         loop    sh_temp
  319.         ;;--- äîáàâëÿåì íà ãðàôèê temp1 ---
  320.         movzx   eax, word[hwm_temps]
  321.         mov     esi, d_temp1
  322.         call    d_add
  323.         call    d_show
  324.         ;;--- äîáàâëÿåì íà ãðàôèê temp2 ---
  325.         movzx   eax, word[hwm_temps + 2]
  326.         mov     esi, d_temp2
  327.         call    d_add
  328.         call    d_show
  329.         ;;--- äîáàâëÿåì íà ãðàôèê temp3 ---
  330.         movzx   eax, word[hwm_temps + 4]
  331.         mov     esi, d_temp3
  332.         call    d_add
  333.         call    d_show
  334.  
  335.         ;---------------------------
  336.         ; Ñêîðîñòè âðàøåíèÿ âåíòèëåé
  337.         mov     ecx, 5
  338.         mov     esi, hwm_rpms
  339.         mov     edx, 121 * 65536 + 80
  340. sh_fan: push    ecx
  341.         lodsd
  342.         push    esi
  343.         ;ðåàêöèÿ íà èçìåíåíèÿ
  344.         xor     esi, esi
  345.         cmp     [old_f1 + ecx * 4 - 4], eax
  346.         je      @f
  347.         mov     [old_f1 + ecx * 4 - 4], eax
  348.         mov     esi, val_mod
  349. @@:     mov     ecx, eax
  350.         call    digit_len
  351.         mov     eax, 47
  352.         int     0x40
  353.         add     edx, 10
  354.         pop     esi
  355.         pop     ecx
  356.         loop    sh_fan
  357.  
  358.         ;---------------------------
  359.         ; Íàïðóãè
  360.         mov     esi, hwm_voltages
  361.         mov     edi, old_volts
  362.         mov     ecx, 7
  363.         mov     ebx, 260 * 65536 + 30
  364.         mov     edx, Data_String
  365. volt_nxt:
  366.         push    ecx
  367.         push    esi
  368.         call    ftoa
  369.         ;ðåàêöèÿ íà èçìåíåíèÿ
  370.         xor     ecx, ecx
  371.         fld     dword [esi]
  372.         fsub    dword [edi]
  373.         fabs
  374.  
  375.         ; fcomp dword [c_eps]   ; bug in MeOsEmul
  376.         ; fstsw ax
  377.         fcom    dword [c_eps]   ; 0xBADCODE
  378.         fstsw   ax
  379.         finit
  380.  
  381.         sahf
  382.         jc      @f
  383.         mov     ecx, val_mod
  384. @@:     mov     esi, Data_String        ; ñ÷èòàåì êîë-âî ñèìâîëîâ
  385. @@:     lodsb
  386.         test    al, al
  387.         jnz     @b
  388.         sub     esi, Data_String
  389.  
  390.         mov     eax, 4
  391.         int     0x40
  392.         add     ebx, 10
  393.         pop     esi
  394.         pop     ecx
  395.         movsd
  396.         loop    volt_nxt
  397.  
  398. no_monitor:
  399.         ;---------------------------
  400.         ; Ñîçäà¸ì êíîïêè âêëàäîê
  401.         mov     edi, 250 * 65536 + 25
  402.         mov     ecx, 4
  403.         mov     eax, 8
  404.         mov     ebx, 10 * 65536 + 70
  405.         mov     edx, 2
  406. n_bt:   push    ecx
  407.         mov     ecx, edi
  408.         mov     esi, tcol
  409.         cmp     byte [act_tab], dl
  410.         jne     na1
  411.         mov     esi, atcol
  412. na1:    int     0x40
  413.         inc     edx
  414.         add     ebx, 73 * 65536
  415.         pop     ecx
  416.         loop    n_bt
  417.         ; Ïèøèì íàçâàíèÿ âêëàäîê
  418.         mov     eax, 4
  419.         mov     ebx, 35 * 65536 + 260
  420.         mov     edx, tab_lab
  421.         mov     ecx, 0x10000000
  422.         mov     esi, 39
  423.         int     0x40
  424.         ; ñîçäà¸ì ðàìêó âíèçó ýêðàíà
  425.         mov     eax, 13
  426.         mov     ebx, 10 * 65536 + 290
  427.         mov     ecx, 275 * 65536 + 160
  428.         mov     edx, atcol
  429.         int     0x40
  430.         mov     ebx, 12 * 65536 + 286
  431.         mov     ecx, 277 * 65536 + 156
  432.         mov     edx, tcol
  433.         int     0x40
  434.         ; ðèñóåì âûáðàííóþ âêëàäêó
  435.         mov     al, [act_tab]
  436.         cmp     al, 2
  437.         je      info_tab
  438.         cmp     al, 3
  439.         je      test_tab
  440.         cmp     al, 4
  441.         je      config_tab
  442.         jmp     about_tab
  443. end_drow_tab:
  444.         mov     eax, 12
  445.         mov     ebx, 2
  446.         int     0x40
  447.         jmp     wait_for_event
  448. ;--- Drow Info tab ---------------
  449. info_tab:
  450.         include "tab_info.inc"
  451. ;--- Drow test tab ---------------
  452. test_tab:
  453.         include "tab_test.inc"
  454. ;--- Drow Config tab -------------
  455. config_tab:
  456.         include "tab_conf.inc"
  457. ;--- Drow About tab --------------
  458. about_tab:
  459.         include "tab_about.inc"
  460. ;---------------------------------------------------------------------
  461.         include "system.inc"
  462.         include "hwm.inc"
  463.         include "diag.inc"
  464.  
  465.  
  466. DATA
  467. act_tab         db      2                       ; Íîìåð àêòèâíîé âêëàäêè
  468. tab_lab         db      'Info       Tests      Configs     About'
  469. title           db      'Ghost Monitor v0.4 [23/05/07]',0
  470.  
  471. msgs_mon mls \
  472.         'CPU Load (%)',\
  473.         'Mem Usage(%)',\
  474.         'Temp1',\
  475.         'Temp2',\
  476.         'Temp3',\
  477.         'Fan1',\
  478.         'Fan2',\
  479.         'Fan3',\
  480.         'Fan4',\
  481.         'Fan5'
  482.  
  483. msgs_mon2 mls \
  484.         'Vcore',\
  485.         'AGP',\
  486.         '+3.3V',\
  487.         'AVcc (+5V)',\
  488.         '+12V',\
  489.         '-12V',\
  490.         '-5V'
  491.  
  492. msg_yes         db      'Yes'
  493. msg_no          db      'N/A'
  494.  
  495. update_time     dd      300                     ; ïåðèîä îáíîâëåíèÿ â ñîòûõ äîëÿõ ñåêóíäû
  496. d_colors        dd      d_cpu_load, d_mem_usage, d_temp1, d_temp2, d_temp3
  497. c_eps           dd      0.01
  498.  
  499. ; Öâåòà ãðàôèêîâ
  500. colors:         dd      0xff0000, 0xff00, 0xff, 0xffffff, tcol, 0xFF7E23, 0x8BA169, 0xff0000    ; ïåðâûé è ïîñëåäíèé ðàâíû
  501. colors_end:
  502. ;---------------------------------------------------------------------
  503. UDATA
  504.  
  505. test_pid        dd      ?                       ; åñëè test_id == 0 - íå èìååò ñìûñëà
  506. test_id         db      ?                       ; 0 - òåñò íå çàïóøåí (ñîîòâåòñòâóåò ¹ êíîïêè 6..10)
  507. diag_add_v      db      ?                       ; 0 - íå äîáàâëÿòü äàííûå íà ãðàôèê, !0 - äîáàâëÿòü
  508.  
  509. Vendor:         times   12 db ?
  510. CPU_fam:        db      ?
  511. CPU_mod:        db      ?
  512. CPU_type:       db      ?
  513. CPU_mmx:        db      ?
  514.  
  515. ; Äëÿ ðåàêöèè íà èçìåíåíèÿ
  516. old_t1:         dd      ?       ; ïîñëåäíåå çíà÷åíèå temp1
  517. old_t2:         dd      ?       ; ...
  518. old_t3:         dd      ?
  519. old_f1:         dd      ?
  520. old_f2:         dd      ?
  521. old_f3:         dd      ?
  522. old_volts:      times   7 dd ?
  523.  
  524. ; Ãðôèêè
  525. diag_beg:
  526. d_cpu_load:     dd      ?
  527.                 times 286 db ?
  528.  
  529. d_mem_usage:    dd      ?
  530.                 times 286 db ?
  531.  
  532. d_temp1:        dd      ?
  533.                 times 286 db ?
  534.  
  535. d_temp2:        dd      ?
  536.                 times 286 db ?
  537.  
  538. d_temp3:        dd      ?
  539.                 times 286 db ?
  540. diag_end:
  541.  
  542. ; --- ñòåê òåñòà, âîèçáåæàíèå ãëþêîâ íå ïåðåíîñèòü â äðóãîå ìåñòî ----
  543. th_stack:       times   1024 db ?
  544. stp:
  545. ;---------------------------------------------------------------------
  546. MEOS_APP_END
  547.