Subversion Repositories Kolibri OS

Rev

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