Subversion Repositories Kolibri OS

Rev

Rev 239 | Rev 243 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
205 heavyiron 1
;
2
; Ghost Monitor - утилита (стресс) тестирования и мониторинга системы
3
; ВОЗМОЖНА ПОРЧА ОБОРУДОВАНИЯ!
4
; ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК!
5
;
6
; Заметки :
7
;	Дописать запуск тестов (rtst) (нет реакции на ошибку запуска)
8
;	Переделать обновление графика (сделать отдельным процессом)
9
;	Добавить реакцию на параметры датчиков
10
;
11
; История :
12
;         09/2005 - начало
13
;      04/10/2005 - откомментировал код
14
;      09/11/2005 - дописаны тесты (пока нет теста памяти)
15
;      30/01/2006 - добавленны графики
16
;      02/02/2006 - Добавлена настройка времени обновления
17
;      10/02/2006 - добавленна еще информация с датчиков, опт. wb_get_chip_name
18
;      01/03/2006 - добавленна еще информация с датчиков
19
;      16/03/2006 - оптимизирована по размеру
20
;      17/03/2006 - подсветка изменённых параметров, оптимизация, about
21
;      20/03/2006 - Публикация
22
;               ---  v 0.2 ---
23
;      24/03/2006 - Добавленна поддержка IT8705F, IT8712F и SIS950
24
;      25/03/2006 - Вывод трёх температур и трёх вентилей
25
;      28/03/2006 - График temp3 и изменение цвета графиков, обработка отрицательных значений графика
26
;      30/03/2006 - Оптимизация по размеру версии от 28/03/2006, переписал рисование графика
27
;      14/04/2006 - Исправил график (jle -> jbe), добавил mem usage, вычисление длинны чисел, закрытие по Esc
28
;      19/04/2006 - Очистка неинициализированных данных
29
;               ---  v 0.3 ---
30
;      01/07/2006 - Различие ITE 8705F, ITE 8712F и IT8716F
31
;      04/07/2006 - Добавленны напруги для чипов Winbond
32
;      10/07/2006 - добавленны напруги для чипов ITE, множители для AMD K6, Intel P6, P7, оптимизация по размеру
33
;      11/07/2006 - Реакция на изменение напруги, оптимизация по размеру
34
;      12/07/2006 - it87_get_fan_speed bug fix, завершение теста по 18/18
35
;      13/07/2006 - it87_get_fan_speed bug fix, исправлен вывод чисел с плавающей точкой
36
;      14/07/2006 - исправленны показания -12V для Winbond, осталась пробленма с -5V
37
;      17/07/2006 - исправленна ошибка определения множителя для P6, добавленны множители
38
;      18/07/2006 - Уличшил вывод множителя, исправленны множители для P6 Tualatin, config.inc
39
;      22/07/2006 - P6 multiplier bugfix
40
;      30/07/2006 - P6 multiplier bugfix
223 Ghost 41
;               --- v 0.4 ---
42
;      10/08/2006 - начата работа по поддержке SMBus, переписаны функции для чипов мониторинга
43
;      24/08/2006 - добавленна частота процессора
44
;      10/09/2006 - bugfix
45
;      25/11/2006 - добавлен ABIT uGuru
241 Ghost 46
;      20/12/2006 - W83627DHG, W83627EHF, W83627EHG, mutipliers for AthonXP-M, Athlon64, Athlon64-M,
47
;            Intel Dothan, Yonah, Conroe, Merom
205 heavyiron 48
;
49
;    Эй! У меня нет много времени.
50
 
51
; Внешние файлы :
52
;	hwm*.inc	- процедуры работы с датчиками мониторинга
53
;	system.inc	- вычисление загрузки процессора, завершение теста, etc...
54
;	tests.inc	- тесты ;-)
55
;	diag.inc	- поддержка диаграм
223 Ghost 56
;	tab_*.inc	- процедуры отрисовки соответствуюших вкладок
205 heavyiron 57
 
58
 
59
; Идентификаторы кнопок :
60
;	01 - Exit
61
;	02 - Info tab
62
;	03 - Tests tab
63
;	04 - Config tab
64
;	05 - About tab
65
;	06 - P5 test
66
;	07 - P6 test
67
;	08 - K6 test
68
;	09 - K7 test
69
;	10 - MMX test	- not used
70
;	11 - Update time increment
71
;	12 - Update time decriment
72
;	13..17 - Изменение цвета CPU_load, Mem_usage, Temp1, Temp2, Temp3
73
 
74
include 'config.inc'
75
include 'macros.inc'
76
 
77
tcol	equ	0x5080d0
78
atcol	equ	0x4070c0
79
val_mod	equ	0x3090
80
 
81
MEOS_APP_START
82
include "tests.inc"	; <-- Много выравниваний, лучше здесь
83
CODE
84
;--- Init ------------------------------------------------------------
85
	; Очищаем неинициализированные данные
86
	mov	ecx, __memory - __udata
87
	mov	edi, __udata
88
	xor	eax, eax
89
	rep	stosb
90
 
91
	xor	eax, eax
92
	cpuid					; Узнаём производителя проца
93
	mov	[Vendor + 0], ebx
94
	mov	[Vendor + 4], edx
95
	mov	[Vendor + 8], ecx
96
	mov	eax, 1
97
	cpuid					; Есть ли MMX ?
98
	mov	ecx, eax
99
	shr	al, 4
100
	and	ax, 0x0F0F
101
	mov	[CPU_fam], ah
102
	mov	[CPU_mod], al
103
	shr	edx, 23
104
	and	dl, 1
105
	mov	[CPU_mmx], dl
106
	shr	ecx, 12
107
	and	cl, 11b
108
	mov	[CPU_type], cl
109
 
110
	; ! Цвета из массива colors
111
	mov	dword[d_cpu_load], 0xFF00	; инициализируем график загрузки АЛУ
112
	mov	dword[d_mem_usage], 0x8BA169	; -- mem usega
113
	mov	dword[d_temp1], 0xFF0000	; -- график температуры ЦПУ
114
	mov	dword[d_temp2], 0xFF		; -- график температуры МП
115
	mov	dword[d_temp3], 0xFF7E23
116
 
117
	call	hwm_init			; Инициализируем чип мониторинга
118
 
119
	jmp	draw_window
120
;--- Wait & translate event ------------------------------------------
121
wait_for_event:
122
	mov	byte[diag_add_v], 0	; добавляем данные к графику только по таймеру
123
	mov	ebx, [update_time]
124
	mov	eax, 23
125
	int	0x40
126
	test	eax, eax
127
	jnz	@f
128
	inc	byte [diag_add_v]
129
	inc	eax			; перерисуем окно (eax := 1)
130
@@:	dec	eax			; redraw request ?
131
	jz	draw_window
132
	dec	eax			; key in buffer ?
133
	jz	key
134
	dec	eax			; button in buffer ?
135
	jz	button
136
	jmp	wait_for_event
137
;--- Key pressed -----------------------------------------------------
138
key:
139
	mov	eax, 2
140
	int	0x40
141
	cmp	ah, 27			; Esc - завершение работы
142
	je	exit
143
	jmp	wait_for_event
144
;--- Button down -----------------------------------------------------
145
button:
146
	mov	eax, 17			; get id
147
	int	0x40
148
	cmp	ah, 1			; button id == 1 ?
149
	jne	noexit
150
exit:	cmp	byte[test_id], 0
151
	je	@f
152
	call	stop_test
153
@@:	mov	eax, -1		; close this program
154
	int	0x40
155
noexit:
156
	; кнопки вкладок (2 .. 5)
157
	cmp	ah, 5
158
	jg	no_tabs
159
	mov	byte[act_tab], ah
160
	jmp	draw_window
161
no_tabs:
162
	; кнопки запуска тество (6 .. 10)
163
	cmp	ah, 10
164
	jg	no_test_bt
165
	; если нет запущеных тестов - запускаем выбранный
166
	cmp	byte[test_id], 0
167
	je	run_test
168
	; если кнопка активного теста - останавливаем тест, иначе ничего не делаем
169
	cmp	[test_id], ah
170
	jne	wait_for_event
171
	call	stop_test
172
	jmp	draw_window
173
 
174
tsts:	dd	p5, p6, k6, k7
175
run_test:
176
	push	eax
177
	movzx	ecx, ah
178
	mov	ecx, [tsts + (ecx * 4) - (6 * 4)]
179
rtst:	mov	eax, 51
180
	mov	edx, stp
181
	mov	ebx, 1
182
	int	0x40
183
	cmp	eax, 0xFFFFFFF0	; -16
184
	je	wait_for_event	; <-- ошибка запуска теста, ПЕРЕПИСАТЬ
185
	mov	[test_pid], eax
186
	pop	eax
187
	mov	byte [test_id], ah
188
	jmp	draw_window
189
	;-------------------------
190
	; кнопки изменения времени обновления
191
no_test_bt:
192
	cmp	ah, 11
193
	jne	no_ut_inc
194
	add	dword[update_time], 10
195
	jmp	draw_window
196
no_ut_inc:
197
	cmp	ah, 12
198
	jne	no_ut_dec
199
	cmp	dword[update_time], 10
200
	jng	wait_for_event
201
	sub	dword[update_time], 10
202
	jmp	draw_window
203
no_ut_dec:
204
	;-------------------------
205
	; кнопки изменения цвета графиков (13..17)
206
	cmp	ah, 17
207
	jg	no_change_color
208
	sub	ah, 13
209
	movzx	ecx, ah
210
	mov	esi, [d_colors + ecx * 4]
211
	mov	eax, [esi]
223 Ghost 212
	mov	ecx, (colors_end - colors) / 4	; количество цветов
213
@@:	dec	ecx
214
	cmp	eax, [colors + ecx * 4]
215
	jne	@b
216
	mov	ebx, [colors + ecx * 4 - 4]
205 heavyiron 217
	mov	[esi], ebx
218
	jmp	draw_window
219
no_change_color:
220
	jmp	wait_for_event
221
;---------------------------------------------------------------------
222
draw_window:
223
	mov	eax,12
224
	mov	ebx,1
225
	int	0x40
226
	; Создаём окно
227
	xor	eax, eax
228
	mov	ebx, 300 * 65536 + 309
223 Ghost 229
	mov	ecx, 150 * 65536 + 450
205 heavyiron 230
	mov	edx, tcol + 0x3000000	; color of work area RRGGBB,8->color
231
	mov	esi, 0x805080d0		; color of grab bar  RRGGBB,8->color
232
	mov	edi, 0x005080d0		; color of frames    RRGGBB
233
	int	0x40
234
	; Создаём рамку графика
235
	mov	eax, 13
236
	mov	ebx, 10 * 65536 + 290
223 Ghost 237
	mov	ecx, 138 * 65536 + 105
205 heavyiron 238
	mov	edx, atcol
239
	int	0x40
240
	mov	ebx, 12 * 65536 + 286
223 Ghost 241
	mov	ecx, 140 * 65536 + 101
205 heavyiron 242
	mov	edx, tcol
243
	int	0x40
244
	mov	eax, 38
245
	mov	edx, atcol
246
	mov	ebx, 12 * 65536 + 286 + 12
223 Ghost 247
	mov	ecx, 140 * 65536 + 140
205 heavyiron 248
@@:	add	ecx, 10 * 65536 + 10
249
	int	0x40
223 Ghost 250
	cmp	cx, 230			; привязано к координатам окна
205 heavyiron 251
	jl	@b
252
	; Пишим заголовок
253
	mov	eax, 4
254
	mov	ebx, 8 * 65536 + 8
255
	mov	edx, title
256
	mov	ecx, 0x10FFFFFF
257
	mov	esi, 29
258
	int	0x40
259
 
260
	; Пишим названия параметров (Cpu load, temper, etc...)
261
	mov	edx, msgs_mon
262
	mov	ebx, 17 * 65536 + 30
263
	call	show_text
264
 
265
	mov	edx, msgs_mon2
266
	mov	ebx, 156 * 65536 + 30
267
	call	show_text
268
 
269
	; Рисуем кнопки смены цвета
270
	mov	eax, 8
271
	mov	ebx, 112 * 65536 + 5
272
	mov	ecx, 30 * 65536 + 6
273
	mov	edx, 13
274
@@:	mov	esi, [d_colors - 13 * 4 + edx * 4]
275
	mov	esi, [esi]
276
	int	0x40
277
	add	ecx, 10 * 65536
278
	inc	edx
279
	cmp	edx, 13 + 5		; 5 кнопок
280
	jne	@b
281
 
282
	; Пишим загрузку процессора
283
	call	cpu_usage
284
	;--- добавляем на график ---
285
	mov	esi, d_cpu_load
286
	call	d_add
287
	call	d_show
288
	;---------------------------
289
	movzx	ecx, al
290
	mov	eax, 47
291
	mov	edx, 121 * 65536 + 30
292
	xor	esi, esi
293
	call	digit_len
294
	int	0x40
295
 
296
	; Пишим используемую память
297
	call	mem_usage
298
	;--- добавляем на график ---
299
	mov	esi, d_mem_usage
300
	call	d_add
301
	call	d_show
302
	;---------------------------
303
	movzx	ecx, al
304
	mov	eax, 47
305
	mov	edx, 121 * 65536 + 40
306
	xor	esi, esi
307
	call	digit_len
308
	int	0x40
309
 
310
	cmp	byte[hwm_enable], 0
311
	jne	show_mon
312
	; Нет датчиков - пишем NO
223 Ghost 313
	mov	ecx, 8	;<- количество параметров
205 heavyiron 314
	mov	eax, 4
315
	mov	ebx, 121 * 65536 + 50
316
	mov	edx, msg_no
317
	mov	esi, 3
318
@@:	int	0x40
319
	add	ebx, 10
320
	loop	@b
321
 
322
	mov	ecx, 7	;<- количество параметров
323
	mov	ebx, 260 * 65536 + 30
324
@@:	int	0x40
325
	add	ebx, 10
326
	loop	@b
327
 
328
	jmp	no_monitor
329
show_mon:
330
	;Есть датчики пишим инфу
331
	call	hwm_get_params
332
	;---------------------------
333
	; Температуру
334
	mov	ecx, 3
223 Ghost 335
	mov	esi, hwm_temps
205 heavyiron 336
	mov	edx, 121 * 65536 + 50
337
	xor	eax, eax
338
sh_temp:push	ecx
339
	lodsw
340
	push	esi
341
	; реакция на изменения
342
	xor	esi, esi
343
	cmp	[old_t1 + ecx * 4 - 4], eax
344
	je	@f
345
	mov	[old_t1 + ecx * 4 - 4], eax
346
	mov	esi, val_mod
347
@@:	movzx	ecx, al
348
	push	eax
349
	mov	eax, 47
350
	mov	ebx, 0x20000
351
	int	0x40
352
	pop	eax
353
	mov	cl, ah
354
	mov	eax, 47
355
	mov	ebx, 0x10000
356
	add	edx, 15 * 65536
357
	int	0x40
358
	sub	edx, 15 * 65536 - 10
359
	pop	esi
360
	pop	ecx
361
	loop	sh_temp
362
	;;--- добавляем на график temp1 ---
223 Ghost 363
	movzx	eax, word[hwm_temps]
205 heavyiron 364
	mov	esi, d_temp1
365
	call	d_add
366
	call	d_show
367
	;;--- добавляем на график temp2 ---
223 Ghost 368
	movzx	eax, word[hwm_temps + 2]
205 heavyiron 369
	mov	esi, d_temp2
370
	call	d_add
371
	call	d_show
372
	;;--- добавляем на график temp3 ---
223 Ghost 373
	movzx	eax, word[hwm_temps + 4]
205 heavyiron 374
	mov	esi, d_temp3
375
	call	d_add
376
	call	d_show
377
 
378
	;---------------------------
379
	; Скорости врашения вентилей
223 Ghost 380
	mov	ecx, 5
381
	mov	esi, hwm_rpms
205 heavyiron 382
	mov	edx, 121 * 65536 + 80
383
sh_fan:	push	ecx
384
	lodsd
385
	push	esi
386
	;реакция на изменения
387
	xor	esi, esi
388
	cmp	[old_f1 + ecx * 4 - 4], eax
389
	je	@f
390
	mov	[old_f1 + ecx * 4 - 4], eax
391
	mov	esi, val_mod
392
@@:	mov	ecx, eax
393
	call	digit_len
394
	mov	eax, 47
395
	int	0x40
396
	add	edx, 10
397
	pop	esi
398
	pop	ecx
399
	loop	sh_fan
400
 
401
	;---------------------------
402
	; Напруги
223 Ghost 403
	mov	esi, hwm_voltages
205 heavyiron 404
	mov	edi, old_volts
405
	mov	ecx, 7
406
	mov	ebx, 260 * 65536 + 30
407
	mov	edx, Data_String
408
volt_nxt:
409
	push	ecx
410
	push	esi
411
	call	ftoa
412
	;реакция на изменения
413
	xor	ecx, ecx
414
	fld	dword [esi]
415
	fsub	dword [edi]
416
	fabs
417
 
418
	; fcomp	dword [c_eps]	; bug in MeOsEmul
419
	; fstsw	ax
420
	fcom	dword [c_eps]	; 0xBADCODE
421
	fstsw	ax
422
	finit
423
 
424
	sahf
425
	jc	@f
426
	mov	ecx, val_mod
427
@@:	mov	esi, Data_String	; считаем кол-во символов
428
@@:	lodsb
429
	test	al, al
430
	jnz	@b
431
	sub	esi, Data_String
432
 
433
	mov	eax, 4
434
	int	0x40
435
	add	ebx, 10
436
	pop	esi
437
	pop	ecx
438
	movsd
439
	loop	volt_nxt
440
 
441
no_monitor:
442
	;---------------------------
443
	; Создаём кнопки вкладок
223 Ghost 444
	mov	edi, 250 * 65536 + 25
205 heavyiron 445
	mov	ecx, 4
446
	mov	eax, 8
447
	mov	ebx, 10 * 65536 + 70
448
	mov	edx, 2
449
n_bt:	push	ecx
450
	mov	ecx, edi
451
	mov	esi, tcol
452
	cmp	byte [act_tab], dl
453
	jne	na1
454
	mov	esi, atcol
455
na1:	int	0x40
456
	inc	edx
457
	add	ebx, 73 * 65536
458
	pop	ecx
459
	loop	n_bt
460
	; Пишим названия вкладок
461
	mov	eax, 4
223 Ghost 462
	mov	ebx, 35 * 65536 + 260
205 heavyiron 463
	mov	edx, tab_lab
464
	mov	ecx, 0x10000000
465
	mov	esi, 39
466
	int	0x40
467
	; создаём рамку внизу экрана
468
	mov	eax, 13
469
	mov	ebx, 10 * 65536 + 290
223 Ghost 470
	mov	ecx, 275 * 65536 + 160
205 heavyiron 471
	mov	edx, atcol
472
	int	0x40
473
	mov	ebx, 12 * 65536 + 286
223 Ghost 474
	mov	ecx, 277 * 65536 + 156
205 heavyiron 475
	mov	edx, tcol
476
	int	0x40
477
	; рисуем выбранную вкладку
478
	mov	al, [act_tab]
479
	cmp	al, 2
480
	je	info_tab
481
	cmp	al, 3
482
	je	test_tab
483
	cmp	al, 4
484
	je	config_tab
485
	jmp	about_tab
486
end_drow_tab:
487
	mov	eax, 12
488
	mov	ebx, 2
489
	int	0x40
490
	jmp	wait_for_event
491
;--- Drow Info tab ---------------
492
info_tab:
223 Ghost 493
	include	"tab_info.inc"
205 heavyiron 494
;--- Drow test tab ---------------
495
test_tab:
223 Ghost 496
	include "tab_test.inc"
205 heavyiron 497
;--- Drow Config tab -------------
498
config_tab:
223 Ghost 499
	include "tab_conf.inc"
205 heavyiron 500
;--- Drow About tab --------------
501
about_tab:
223 Ghost 502
	include "tab_about.inc"
205 heavyiron 503
;---------------------------------------------------------------------
504
	include	"system.inc"
505
	include "hwm.inc"
506
	include "diag.inc"
507
 
508
 
509
DATA
510
act_tab		db	2 			; Номер активной вкладки
511
tab_lab		db	'Info       Tests      Configs     About'
239 Ghost 512
title		db	'Ghost Monitor v0.4 [20/12/06]'
205 heavyiron 513
 
514
msgs_mon mls \
515
	'CPU Load (%)',\
516
	'Mem Usage(%)',\
517
	'Temp1',\
518
	'Temp2',\
519
	'Temp3',\
520
	'Fan1',\
521
	'Fan2',\
223 Ghost 522
	'Fan3',\
523
	'Fan4',\
524
	'Fan5'
205 heavyiron 525
 
526
msgs_mon2 mls \
527
	'Vcore',\
528
	'AGP',\
529
	'+3.3V',\
530
	'AVcc (+5V)',\
531
	'+12V',\
532
	'-12V',\
533
	'-5V'
534
 
535
msg_yes		db	'Yes'
536
msg_no		db	'N/A'
537
 
538
update_time	dd	300			; период обновления в сотых долях секунды
539
d_colors	dd	d_cpu_load, d_mem_usage, d_temp1, d_temp2, d_temp3
540
c_eps		dd	0.01
223 Ghost 541
 
542
; Цвета графиков
543
colors:		dd	0xff0000, 0xff00, 0xff, 0xffffff, tcol, 0xFF7E23, 0x8BA169, 0xff0000	; первый и последний равны
544
colors_end:
205 heavyiron 545
;---------------------------------------------------------------------
546
UDATA
547
 
548
test_pid	dd	?			; если test_id == 0 - не имеет смысла
549
test_id		db	?			; 0 - тест не запушен (соответствует № кнопки 6..10)
550
diag_add_v	db	?			; 0 - не добавлять данные на график, !0 - добавлять
551
 
552
Vendor:		times	12 db ?
553
CPU_fam:	db	?
554
CPU_mod:	db	?
555
CPU_type:	db	?
556
CPU_mmx:	db	?
557
 
558
; Для реакции на изменения
559
old_t1:		dd	?	; последнее значение temp1
560
old_t2:		dd	?	; ...
561
old_t3:		dd	?
562
old_f1:		dd	?
563
old_f2:		dd	?
564
old_f3:		dd	?
565
old_volts:	times	7 dd ?
566
 
567
; Грфики
568
diag_beg:
569
d_cpu_load:	dd	?
570
		times 286 db ?
571
 
572
d_mem_usage:	dd	?
573
		times 286 db ?
574
 
575
d_temp1:	dd	?
576
		times 286 db ?
577
 
578
d_temp2:	dd	?
579
		times 286 db ?
580
 
581
d_temp3:	dd	?
582
		times 286 db ?
583
diag_end:
584
 
585
; --- стек теста, воизбежание глюков не переносить в другое место ----
586
th_stack:	times	1024 db ?
587
stp:
588
;---------------------------------------------------------------------
589
MEOS_APP_END