Subversion Repositories Kolibri OS

Rev

Rev 518 | Rev 3604 | 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.