Subversion Repositories Kolibri OS

Rev

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