Subversion Repositories Kolibri OS

Rev

Rev 551 | Rev 5950 | 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.