1,26 → 1,26 |
; |
; Ghost Monitor - утилита (стресс) тестирования и мониторинга системы |
; Ghost Monitor - óòèëèòà (ñòðåññ) òåñòèðîâàíèÿ è ìîíèòîðèíãà ñèñòåìû |
; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru) |
; All Right Reserved |
; |
; ВОЗМОЖНА ПОРЧА ОБОРУДОВАНИЯ! |
; ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК! |
; ÂÎÇÌÎÆÍÀ ÏÎÐ×À ÎÁÎÐÓÄÎÂÀÍÈß! |
; ÈÑÏÎËÜÇÓÉÒÅ ÍÀ ÑÂÎÉ ÑÒÐÀÕ È ÐÈÑÊ! |
; |
; Заметки : |
; Дописать запуск тестов (rtst) (нет реакции на ошибку запуска) |
; Переделать обновление графика (сделать отдельным процессом) |
; Добавить реакцию на параметры датчиков |
; Çàìåòêè : |
; Äîïèñàòü çàïóñê òåñòîâ (rtst) (íåò ðåàêöèè íà îøèáêó çàïóñêà) |
; Ïåðåäåëàòü îáíîâëåíèå ãðàôèêà (ñäåëàòü îòäåëüíûì ïðîöåññîì) |
; Äîáàâèòü ðåàêöèþ íà ïàðàìåòðû äàò÷èêîâ |
; |
|
; Внешние файлы : |
; hwm*.inc - процедуры работы с датчиками мониторинга |
; system.inc - вычисление загрузки процессора, завершение теста, etc... |
; tests.inc - тесты ;-) |
; diag.inc - поддержка диаграм |
; tab_*.inc - процедуры отрисовки соответствуюших вкладок |
; Âíåøíèå ôàéëû : |
; hwm*.inc - ïðîöåäóðû ðàáîòû ñ äàò÷èêàìè ìîíèòîðèíãà |
; system.inc - âû÷èñëåíèå çàãðóçêè ïðîöåññîðà, çàâåðøåíèå òåñòà, etc... |
; tests.inc - òåñòû ;-) |
; diag.inc - ïîääåðæêà äèàãðàì |
; tab_*.inc - ïðîöåäóðû îòðèñîâêè ñîîòâåòñòâóþøèõ âêëàäîê |
|
|
; Identifier buttons : |
; Èäåíòèôèêàòîðû êíîïîê : |
; 01 - Exit |
; 02 - Info tab |
; 03 - Tests tab |
33,7 → 33,7 |
; 10 - MMX test - not used (tab_test.inc) |
; 11 - Update time increment (tab_conf.inc) |
; 12 - Update time decriment (tab_conf.inc) |
; 13..17 - Color Changing buttons CPU_load, Mem_usage, Temp1, Temp2, Temp3 |
; 13..17 - Èçìåíåíèå öâåòà CPU_load, Mem_usage, Temp1, Temp2, Temp3 |
|
include 'lang.inc' |
include 'config.inc' |
44,10 → 44,10 |
val_mod equ 0x3090 |
|
MEOS_APP_START |
include "tests.inc" ; <-- Много выравниваний, лучше здесь |
include "tests.inc" ; <-- Ìíîãî âûðàâíèâàíèé, ëó÷øå çäåñü |
CODE |
;--- Init ------------------------------------------------------------ |
; Очищаем неинициализированные данные |
; Î÷èùàåì íåèíèöèàëèçèðîâàííûå äàííûå |
mov ecx, __memory - __udata |
mov edi, __udata |
xor eax, eax |
54,12 → 54,12 |
rep stosb |
|
xor eax, eax |
cpuid ; Узнаём производителя проца |
cpuid ; Óçíà¸ì ïðîèçâîäèòåëÿ ïðîöà |
mov [Vendor + 0], ebx |
mov [Vendor + 4], edx |
mov [Vendor + 8], ecx |
mov eax, 1 |
cpuid ; Есть ли MMX ? |
cpuid ; Åñòü ëè MMX ? |
mov ecx, eax |
shr al, 4 |
and ax, 0x0F0F |
72,19 → 72,19 |
and cl, 11b |
mov [CPU_type], cl |
|
; ! Цвета из массива colors |
mov dword[d_cpu_load], 0xFF00 ; инициализируем график загрузки АЛУ |
; ! Öâåòà èç ìàññèâà colors |
mov dword[d_cpu_load], 0xFF00 ; èíèöèàëèçèðóåì ãðàôèê çàãðóçêè ÀËÓ |
mov dword[d_mem_usage], 0x8BA169 ; -- mem usega |
mov dword[d_temp1], 0xFF0000 ; -- график температуры ЦПУ |
mov dword[d_temp2], 0xFF ; -- график температуры МП |
mov dword[d_temp1], 0xFF0000 ; -- ãðàôèê òåìïåðàòóðû ÖÏÓ |
mov dword[d_temp2], 0xFF ; -- ãðàôèê òåìïåðàòóðû ÌÏ |
mov dword[d_temp3], 0xFF7E23 |
|
call hwm_init ; Initialize monitoring chip |
call hwm_init ; Èíèöèàëèçèðóåì ÷èï ìîíèòîðèíãà |
|
jmp draw_window |
;--- Wait & translate event ------------------------------------------ |
wait_for_event: |
mov byte[diag_add_v], 0 ; добавляем данные к графику только по таймеру |
mov byte[diag_add_v], 0 ; äîáàâëÿåì äàííûå ê ãðàôèêó òîëüêî ïî òàéìåðó |
mov ebx, [update_time] |
mov eax, 23 |
int 0x40 |
91,7 → 91,7 |
test eax, eax |
jnz @f |
inc byte [diag_add_v] |
jmp redraw |
inc eax ; ïåðåðèñóåì îêíî (eax := 1) |
@@: dec eax ; redraw request ? |
jz draw_window |
dec eax ; key in buffer ? |
103,7 → 103,7 |
key: |
mov eax, 2 |
int 0x40 |
cmp ah, 27 ; Esc - shutdown |
cmp ah, 27 ; Esc - çàâåðøåíèå ðàáîòû |
je exit |
jmp wait_for_event |
;--- Button down ----------------------------------------------------- |
118,25 → 118,25 |
@@: mov eax, -1 ; close this program |
int 0x40 |
noexit: |
; button tabs (2 .. 5) |
; êíîïêè âêëàäîê (2 .. 5) |
cmp ah, 5 |
jg no_tabs |
mov byte[act_tab], ah |
jmp redraw_tabs |
jmp draw_window |
no_tabs: |
; кнопки запуска тество (6 .. 10) |
; êíîïêè çàïóñêà òåñòâî (6 .. 10) |
cmp ah, 10 |
jg no_test_bt |
; если нет запущеных тестов - запускаем выбранный |
; åñëè íåò çàïóùåíûõ òåñòîâ - çàïóñêàåì âûáðàííûé |
cmp byte[test_id], 0 |
je run_test |
; если кнопка активного теста - останавливаем тест, иначе ничего не делаем |
; åñëè êíîïêà àêòèâíîãî òåñòà - îñòàíàâëèâàåì òåñò, èíà÷å íè÷åãî íå äåëàåì |
cmp [test_id], ah |
jne wait_for_event |
call stop_test |
jmp redraw_tabs |
jmp draw_window |
|
tsts: dd p5, p6, k6_, k7_ |
tsts: dd p5, p6, k6, k7 |
run_test: |
push eax |
movzx ecx, ah |
146,18 → 146,18 |
mov ebx, 1 |
int 0x40 |
cmp eax, 0xFFFFFFF0 ; -16 |
je wait_for_event ; <-- ошибка запуска теста, ПЕРЕПИСАТЬ |
je wait_for_event ; <-- îøèáêà çàïóñêà òåñòà, ÏÅÐÅÏÈÑÀÒÜ |
mov [test_pid], eax |
pop eax |
mov byte [test_id], ah |
jmp redraw_tabs |
jmp draw_window |
;------------------------- |
; кнопки изменения времени обновления |
; êíîïêè èçìåíåíèÿ âðåìåíè îáíîâëåíèÿ |
no_test_bt: |
cmp ah, 11 |
jne no_ut_inc |
add dword[update_time], 10 |
jmp redraw_tabs |
jmp draw_window |
no_ut_inc: |
cmp ah, 12 |
jne no_ut_dec |
164,10 → 164,10 |
cmp dword[update_time], 10 |
jng wait_for_event |
sub dword[update_time], 10 |
jmp redraw_tabs |
jmp draw_window |
no_ut_dec: |
;------------------------- |
; color change button schedules (13..17) |
; êíîïêè èçìåíåíèÿ öâåòà ãðàôèêîâ (13..17) |
cmp ah, 17 |
jg no_change_color |
sub ah, 13 |
174,13 → 174,13 |
movzx ecx, ah |
mov esi, [d_colors + ecx * 4] |
mov eax, [esi] |
mov ecx, (colors_end - colors) / 4 ; number of colors |
mov ecx, (colors_end - colors) / 4 ; êîëè÷åñòâî öâåòîâ |
@@: dec ecx |
cmp eax, [colors + ecx * 4] |
jne @b |
mov ebx, [colors + ecx * 4 - 4] |
mov [esi], ebx |
jmp redraw_tabs |
jmp draw_window |
no_change_color: |
jmp wait_for_event |
;--------------------------------------------------------------------- |
188,7 → 188,7 |
mov eax,12 |
mov ebx,1 |
int 0x40 |
; Создаём окно |
; Ñîçäà¸ì îêíî |
xor eax, eax |
mov ebx, 300 * 65536 + 309 |
mov ecx, 150 * 65536 + 450 |
195,156 → 195,50 |
mov edx, tcol + 0x14000000 ; color of work area RRGGBB,8->color |
mov edi, title ; color of frames RRGGBB |
int 0x40 |
; Create a graphic frame (not for graph) |
; Ñîçäà¸ì ðàìêó ãðàôèêà |
mov eax, 13 |
mov ebx, 10 * 65536 + 290 |
mov ecx, 138 * 65536 + 105 |
mov edx, atcol |
int 0x40 |
mov ebx, 12 * 65536 + 286 |
mov ecx, 140 * 65536 + 101 |
mov edx, tcol |
int 0x40 |
mov eax, 38 |
mov edx, atcol |
mov ebx, 12 * 65536 + 286 + 12 |
mov ecx, 140 * 65536 + 140 |
@@: add ecx, 10 * 65536 + 10 |
int 0x40 |
cmp cx, 230 ; ïðèâÿçàíî ê êîîðäèíàòàì îêíà |
jl @b |
|
; write parameter names (Cpu load, temper, etc ...) |
mov edx, msgs_mon ; text for indicators |
; Ïèøèì íàçâàíèÿ ïàðàìåòðîâ (Cpu load, temper, etc...) |
mov edx, msgs_mon |
mov ebx, 17 * 65536 + 30 |
call show_text |
|
mov edx, msgs_mon2 |
mov ebx, 166 * 65536 + 30 |
mov ebx, 156 * 65536 + 30 |
call show_text |
|
jmp draw_tabs ; draw tabs for the first time |
|
redraw_tabs: ; delete previously created tabs |
|
mov ecx, 4 |
; Ðèñóåì êíîïêè ñìåíû öâåòà |
mov eax, 8 |
mov edx, 0x80000000 + 2 |
del_tabs: |
int 0x40 |
inc edx |
loop del_tabs |
|
; Delete color change buttons |
mov eax, 8 |
mov edx, 0x80000000 + 13 |
@@: |
int 0x40 |
inc edx |
cmp edx, 0x80000000 + 13 + 5 ; 5 (buttons) |
jne @b |
|
draw_tabs: |
|
; Drawing color change buttons |
mov eax, 8 |
mov ebx, 112 * 65536 + 5 |
mov ecx, 30 * 65536 + 6 |
mov edx, 13 |
|
@@: |
mov esi, [d_colors - 13 * 4 + edx * 4] |
@@: mov esi, [d_colors - 13 * 4 + edx * 4] |
mov esi, [esi] |
int 0x40 |
add ecx, 10 * 65536 |
inc edx |
cmp edx, 13 + 5 ; 5 (buttons) |
cmp edx, 13 + 5 ; 5 êíîïîê |
jne @b |
|
; info, test, config, about buttons |
; Create 4 buttons |
mov edi, 250 * 65536 + 25 |
mov ecx, 4 |
mov eax, 8 |
mov ebx, 10 * 65536 + 70 |
mov edx, 2 |
n_bt: |
push ecx |
mov ecx, edi |
mov esi, tcol |
cmp byte [act_tab], dl |
jne na1 |
mov esi, atcol |
na1: |
int 0x40 |
inc edx |
add ebx, 73 * 65536 |
pop ecx |
loop n_bt |
|
; write name tabs |
mov eax, 4 |
mov ebx, (18 shl 16) + 256 |
mov edx, tab_lab |
mov ecx, 0x10000000 |
mov esi, 4 |
int 0x40 |
add ebx, (72 shl 16) |
mov edx, tab_lab.2 |
mov esi, 5 |
int 0x40 |
add ebx, (72 shl 16) |
mov edx, tab_lab.3 |
mov esi, 7 |
int 0x40 |
add ebx, (72 shl 16) |
mov edx, tab_lab.4 |
mov esi, 5 |
int 0x40 |
|
; create a frame at the bottom of the screen |
mov eax, 13 |
mov ebx, 10 * 65536 + 290 |
mov ecx, 275 * 65536 + 160 |
mov edx, atcol |
int 0x40 |
mov ebx, 12 * 65536 + 286 |
mov ecx, 277 * 65536 + 156 |
mov edx, tcol |
int 0x40 |
|
; draw the selected tab |
mov al, [act_tab] |
cmp al, 2 |
je info_tab |
cmp al, 3 |
je test_tab |
cmp al, 4 |
je config_tab |
jmp about_tab |
|
;--- Drow Info tab --------------- |
info_tab: |
include "tab_info.inc" |
;--- Drow test tab --------------- |
test_tab: |
include "tab_test.inc" |
;--- Drow Config tab ------------- |
config_tab: |
include "tab_conf.inc" |
;--- Drow About tab -------------- |
about_tab: |
include "tab_about.inc" |
|
redraw: |
|
; frame for graph |
|
mov eax, 13 |
mov ebx, 12 * 65536 + 286 |
mov ecx, 140 * 65536 + 101 |
mov edx, tcol |
int 0x40 |
mov eax, 38 |
mov edx, atcol |
mov ebx, 12 * 65536 + 286 + 12 |
mov ecx, 140 * 65536 + 140 |
@@: add ecx, 10 * 65536 + 10 |
int 0x40 |
cmp cx, 230 ; привязано к координатам окна |
jl @b |
|
; write CPU usage |
; Ïèøèì çàãðóçêó ïðîöåññîðà |
call cpu_usage |
;--- добавляем на график --- |
;--- äîáàâëÿåì íà ãðàôèê --- |
mov esi, d_cpu_load |
call d_add |
call d_show |
354,12 → 248,11 |
mov edx, 121 * 65536 + 30 |
xor esi, esi |
call digit_len |
clear_prev_no edx |
int 0x40 |
|
; write used memory |
; Ïèøèì èñïîëüçóåìóþ ïàìÿòü |
call mem_usage |
;--- добавляем на график --- |
;--- äîáàâëÿåì íà ãðàôèê --- |
mov esi, d_mem_usage |
call d_add |
call d_show |
369,13 → 262,12 |
mov edx, 121 * 65536 + 40 |
xor esi, esi |
call digit_len |
clear_prev_no edx |
int 0x40 |
|
cmp byte[hwm_enable], 0 |
jne show_mon |
; Нет датчиков - пишем NO |
mov ecx, 8 ;<- number of parameters |
; Íåò äàò÷èêîâ - ïèøåì NO |
mov ecx, 8 ;<- êîëè÷åñòâî ïàðàìåòðîâ |
mov eax, 4 |
mov ebx, 121 * 65536 + 50 |
mov edx, msg_no |
384,7 → 276,7 |
add ebx, 10 |
loop @b |
|
mov ecx, 7 ;<- number of parameters |
mov ecx, 7 ;<- êîëè÷åñòâî ïàðàìåòðîâ |
mov ebx, 260 * 65536 + 30 |
@@: int 0x40 |
add ebx, 10 |
392,10 → 284,10 |
|
jmp no_monitor |
show_mon: |
;Есть датчики пишим инфу |
;Åñòü äàò÷èêè ïèøèì èíôó |
call hwm_get_params |
;--------------------------- |
; Температуру |
; Òåìïåðàòóðó |
mov ecx, 3 |
mov esi, hwm_temps |
mov edx, 121 * 65536 + 50 |
403,7 → 295,7 |
sh_temp:push ecx |
lodsw |
push esi |
; реакция на изменения |
; ðåàêöèÿ íà èçìåíåíèÿ |
xor esi, esi |
cmp [old_t1 + ecx * 4 - 4], eax |
je @f |
413,7 → 305,6 |
push eax |
mov eax, 47 |
mov ebx, 0x20000 |
clear_prev_no edx |
int 0x40 |
pop eax |
mov cl, ah |
425,17 → 316,17 |
pop esi |
pop ecx |
loop sh_temp |
;;--- Add to the chart temp1 --- |
;;--- äîáàâëÿåì íà ãðàôèê temp1 --- |
movzx eax, word[hwm_temps] |
mov esi, d_temp1 |
call d_add |
call d_show |
;;--- Add to the chart temp2 --- |
;;--- äîáàâëÿåì íà ãðàôèê temp2 --- |
movzx eax, word[hwm_temps + 2] |
mov esi, d_temp2 |
call d_add |
call d_show |
;;--- Add to the chart temp3 --- |
;;--- äîáàâëÿåì íà ãðàôèê temp3 --- |
movzx eax, word[hwm_temps + 4] |
mov esi, d_temp3 |
call d_add |
442,7 → 333,7 |
call d_show |
|
;--------------------------- |
; Скорости врашения вентилей |
; Ñêîðîñòè âðàøåíèÿ âåíòèëåé |
mov ecx, 5 |
mov esi, hwm_rpms |
mov edx, 121 * 65536 + 80 |
449,7 → 340,7 |
sh_fan: push ecx |
lodsd |
push esi |
;реакция на изменения |
;ðåàêöèÿ íà èçìåíåíèÿ |
xor esi, esi |
cmp [old_f1 + ecx * 4 - 4], eax |
je @f |
458,7 → 349,6 |
@@: mov ecx, eax |
call digit_len |
mov eax, 47 |
clear_prev_no edx |
int 0x40 |
add edx, 10 |
pop esi |
466,7 → 356,7 |
loop sh_fan |
|
;--------------------------- |
; Напруги |
; Íàïðóãè |
mov esi, hwm_voltages |
mov edi, old_volts |
mov ecx, 7 |
476,7 → 366,7 |
push ecx |
push esi |
call ftoa |
;реакция на изменения |
;ðåàêöèÿ íà èçìåíåíèÿ |
xor ecx, ecx |
fld dword [esi] |
fsub dword [edi] |
491,7 → 381,7 |
sahf |
jc @f |
mov ecx, val_mod |
@@: mov esi, Data_String ; считаем кол-во символов |
@@: mov esi, Data_String ; ñ÷èòàåì êîë-âî ñèìâîëîâ |
@@: lodsb |
test al, al |
jnz @b |
507,16 → 397,78 |
|
no_monitor: |
;--------------------------- |
mov al, [act_tab] ; check if info tab is active |
; Ñîçäà¸ì êíîïêè âêëàäîê |
mov edi, 250 * 65536 + 25 |
mov ecx, 4 |
mov eax, 8 |
mov ebx, 10 * 65536 + 70 |
mov edx, 2 |
n_bt: push ecx |
mov ecx, edi |
mov esi, tcol |
cmp byte [act_tab], dl |
jne na1 |
mov esi, atcol |
na1: int 0x40 |
inc edx |
add ebx, 73 * 65536 |
pop ecx |
loop n_bt |
; Ïèøèì íàçâàíèÿ âêëàäîê |
mov eax, 4 |
mov ebx, (18 shl 16) + 256 |
mov edx, tab_lab |
mov ecx, 0x10000000 |
mov esi, 4 |
int 0x40 |
add ebx, (72 shl 16) |
mov edx, tab_lab.2 |
mov esi, 5 |
int 0x40 |
add ebx, (72 shl 16) |
mov edx, tab_lab.3 |
mov esi, 7 |
int 0x40 |
add ebx, (72 shl 16) |
mov edx, tab_lab.4 |
mov esi, 5 |
int 0x40 |
; ñîçäà¸ì ðàìêó âíèçó ýêðàíà |
mov eax, 13 |
mov ebx, 10 * 65536 + 290 |
mov ecx, 275 * 65536 + 160 |
mov edx, atcol |
int 0x40 |
mov ebx, 12 * 65536 + 286 |
mov ecx, 277 * 65536 + 156 |
mov edx, tcol |
int 0x40 |
; ðèñóåì âûáðàííóþ âêëàäêó |
mov al, [act_tab] |
cmp al, 2 |
jne end_drow_tab |
jmp free_mem ; in tab_info.inc |
|
je info_tab |
cmp al, 3 |
je test_tab |
cmp al, 4 |
je config_tab |
jmp about_tab |
end_drow_tab: |
mov eax, 12 |
mov ebx, 2 |
int 0x40 |
jmp wait_for_event |
;--- Drow Info tab --------------- |
info_tab: |
include "tab_info.inc" |
;--- Drow test tab --------------- |
test_tab: |
include "tab_test.inc" |
;--- Drow Config tab ------------- |
config_tab: |
include "tab_conf.inc" |
;--- Drow About tab -------------- |
about_tab: |
include "tab_about.inc" |
;--------------------------------------------------------------------- |
include "system.inc" |
include "hwm.inc" |
524,7 → 476,7 |
|
|
DATA |
act_tab db 2 ; active tab number |
act_tab db 2 ; Íîìåð àêòèâíîé âêëàäêè |
tab_lab: |
.1: db 'Info' |
.2: db 'Tests' |
556,19 → 508,19 |
msg_yes db 'Yes' |
msg_no db 'N/A' |
|
update_time dd 300 ; период обновления в сотых долях секунды |
update_time dd 300 ; ïåðèîä îáíîâëåíèÿ â ñîòûõ äîëÿõ ñåêóíäû |
d_colors dd d_cpu_load, d_mem_usage, d_temp1, d_temp2, d_temp3 |
c_eps dd 0.01 |
|
; Цвета графиков |
colors: dd 0xff0000, 0xff00, 0xff, 0xffffff, tcol, 0xFF7E23, 0x8BA169, 0xff0000 ; первый и последний равны |
; Öâåòà ãðàôèêîâ |
colors: dd 0xff0000, 0xff00, 0xff, 0xffffff, tcol, 0xFF7E23, 0x8BA169, 0xff0000 ; ïåðâûé è ïîñëåäíèé ðàâíû |
colors_end: |
;--------------------------------------------------------------------- |
UDATA |
|
test_pid dd ? ; если test_id == 0 - не имеет смысла |
test_id db ? ; 0 - тест не запушен (соответствует № кнопки 6..10) |
diag_add_v db ? ; 0 - не добавлять данные на график, !0 - добавлять |
test_pid dd ? ; åñëè test_id == 0 - íå èìååò ñìûñëà |
test_id db ? ; 0 - òåñò íå çàïóøåí (ñîîòâåòñòâóåò ¹ êíîïêè 6..10) |
diag_add_v db ? ; 0 - íå äîáàâëÿòü äàííûå íà ãðàôèê, !0 - äîáàâëÿòü |
|
Vendor: times 12 db ? |
CPU_fam: db ? |
576,8 → 528,8 |
CPU_type: db ? |
CPU_mmx: db ? |
|
; Для реакции на изменения |
old_t1: dd ? ; последнее значение temp1 |
; Äëÿ ðåàêöèè íà èçìåíåíèÿ |
old_t1: dd ? ; ïîñëåäíåå çíà÷åíèå temp1 |
old_t2: dd ? ; ... |
old_t3: dd ? |
old_f1: dd ? |
585,7 → 537,7 |
old_f3: dd ? |
old_volts: times 7 dd ? |
|
; Грфики |
; Ãðôèêè |
diag_beg: |
d_cpu_load: dd ? |
times 286 db ? |
603,7 → 555,7 |
times 286 db ? |
diag_end: |
|
; --- стек теста, воизбежание глюков не переносить в другое место ---- |
; --- ñòåê òåñòà, âîèçáåæàíèå ãëþêîâ íå ïåðåíîñèòü â äðóãîå ìåñòî ---- |
th_stack: times 1024 db ? |
stp: |
;--------------------------------------------------------------------- |