Subversion Repositories Kolibri OS

Rev

Rev 5920 | Rev 6353 | 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 - утилита (стресс) тестирования и мониторинга системы
313 Ghost 3
; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru)
4
; All Right Reserved
5
;
205 heavyiron 6
; ВОЗМОЖНА ПОРЧА ОБОРУДОВАНИЯ!
7
; ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК!
8
;
9
; Заметки :
10
;	Дописать запуск тестов (rtst) (нет реакции на ошибку запуска)
11
;	Переделать обновление графика (сделать отдельным процессом)
12
;	Добавить реакцию на параметры датчиков
13
;
14
 
15
; Внешние файлы :
16
;	hwm*.inc	- процедуры работы с датчиками мониторинга
17
;	system.inc	- вычисление загрузки процессора, завершение теста, etc...
18
;	tests.inc	- тесты ;-)
19
;	diag.inc	- поддержка диаграм
223 Ghost 20
;	tab_*.inc	- процедуры отрисовки соответствуюших вкладок
205 heavyiron 21
 
22
 
23
; Идентификаторы кнопок :
24
;	01 - Exit
25
;	02 - Info tab
26
;	03 - Tests tab
27
;	04 - Config tab
28
;	05 - About tab
500 Ghost 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)
205 heavyiron 36
;	13..17 - Изменение цвета CPU_load, Mem_usage, Temp1, Temp2, Temp3
37
 
3604 fedesco 38
include 'lang.inc'
205 heavyiron 39
include 'config.inc'
40
include 'macros.inc'
41
 
42
tcol	equ	0x5080d0
43
atcol	equ	0x4070c0
5950 pathoswith 44
val_mod equ	0x3090
205 heavyiron 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
3604 fedesco 74
 
205 heavyiron 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:
5950 pathoswith 111
	mov	eax, 17 		; get id
205 heavyiron 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
5950 pathoswith 118
@@:	mov	eax, -1 	; close this program
205 heavyiron 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
3604 fedesco 133
	; если кнопка активного теста - останавливаем тест, иначе ничего не делаем
205 heavyiron 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
5950 pathoswith 148
	cmp	eax, 0xFFFFFFF0 ; -16
205 heavyiron 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]
223 Ghost 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]
205 heavyiron 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
223 Ghost 194
	mov	ecx, 150 * 65536 + 450
551 spraid 195
	mov	edx, tcol + 0x14000000	; color of work area RRGGBB,8->color
340 heavyiron 196
	mov	edi, title		; color of frames    RRGGBB
205 heavyiron 197
	int	0x40
198
	; Создаём рамку графика
199
	mov	eax, 13
200
	mov	ebx, 10 * 65536 + 290
223 Ghost 201
	mov	ecx, 138 * 65536 + 105
205 heavyiron 202
	mov	edx, atcol
203
	int	0x40
204
	mov	ebx, 12 * 65536 + 286
223 Ghost 205
	mov	ecx, 140 * 65536 + 101
205 heavyiron 206
	mov	edx, tcol
207
	int	0x40
208
	mov	eax, 38
209
	mov	edx, atcol
210
	mov	ebx, 12 * 65536 + 286 + 12
223 Ghost 211
	mov	ecx, 140 * 65536 + 140
205 heavyiron 212
@@:	add	ecx, 10 * 65536 + 10
213
	int	0x40
5950 pathoswith 214
	cmp	cx, 230 		; привязано к координатам окна
205 heavyiron 215
	jl	@b
3604 fedesco 216
 
205 heavyiron 217
	; Пишим названия параметров (Cpu load, temper, etc...)
218
	mov	edx, msgs_mon
219
	mov	ebx, 17 * 65536 + 30
220
	call	show_text
3604 fedesco 221
 
205 heavyiron 222
	mov	edx, msgs_mon2
223
	mov	ebx, 156 * 65536 + 30
224
	call	show_text
3604 fedesco 225
 
205 heavyiron 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
3604 fedesco 238
 
205 heavyiron 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
3604 fedesco 252
 
205 heavyiron 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
3604 fedesco 266
 
205 heavyiron 267
	cmp	byte[hwm_enable], 0
268
	jne	show_mon
269
	; Нет датчиков - пишем NO
223 Ghost 270
	mov	ecx, 8	;<- количество параметров
205 heavyiron 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
223 Ghost 292
	mov	esi, hwm_temps
205 heavyiron 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 ---
223 Ghost 320
	movzx	eax, word[hwm_temps]
205 heavyiron 321
	mov	esi, d_temp1
322
	call	d_add
323
	call	d_show
324
	;;--- добавляем на график temp2 ---
223 Ghost 325
	movzx	eax, word[hwm_temps + 2]
205 heavyiron 326
	mov	esi, d_temp2
327
	call	d_add
328
	call	d_show
329
	;;--- добавляем на график temp3 ---
223 Ghost 330
	movzx	eax, word[hwm_temps + 4]
205 heavyiron 331
	mov	esi, d_temp3
332
	call	d_add
333
	call	d_show
334
 
335
	;---------------------------
336
	; Скорости врашения вентилей
223 Ghost 337
	mov	ecx, 5
338
	mov	esi, hwm_rpms
205 heavyiron 339
	mov	edx, 121 * 65536 + 80
5950 pathoswith 340
sh_fan: push	ecx
205 heavyiron 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
3604 fedesco 353
	add	edx, 10
205 heavyiron 354
	pop	esi
355
	pop	ecx
356
	loop	sh_fan
3604 fedesco 357
 
205 heavyiron 358
	;---------------------------
359
	; Напруги
223 Ghost 360
	mov	esi, hwm_voltages
205 heavyiron 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
3604 fedesco 374
 
5950 pathoswith 375
	; fcomp dword [c_eps]	; bug in MeOsEmul
376
	; fstsw ax
205 heavyiron 377
	fcom	dword [c_eps]	; 0xBADCODE
378
	fstsw	ax
3604 fedesco 379
	finit
380
 
205 heavyiron 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
3604 fedesco 389
 
205 heavyiron 390
	mov	eax, 4
391
	int	0x40
392
	add	ebx, 10
393
	pop	esi
394
	pop	ecx
395
	movsd
396
	loop	volt_nxt
3604 fedesco 397
 
205 heavyiron 398
no_monitor:
399
	;---------------------------
400
	; Создаём кнопки вкладок
223 Ghost 401
	mov	edi, 250 * 65536 + 25
205 heavyiron 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
5920 IgorA 419
	mov	ebx, (18 shl 16) + 256
205 heavyiron 420
	mov	edx, tab_lab
421
	mov	ecx, 0x10000000
5920 IgorA 422
	mov	esi, 4
205 heavyiron 423
	int	0x40
5920 IgorA 424
	add ebx, (72 shl 16)
425
	mov edx, tab_lab.2
426
	mov	esi, 5
427
	int	0x40
428
	add ebx, (72 shl 16)
429
	mov edx, tab_lab.3
430
	mov	esi, 7
431
	int	0x40
432
	add ebx, (72 shl 16)
433
	mov edx, tab_lab.4
434
	mov	esi, 5
435
	int	0x40
205 heavyiron 436
	; создаём рамку внизу экрана
437
	mov	eax, 13
438
	mov	ebx, 10 * 65536 + 290
223 Ghost 439
	mov	ecx, 275 * 65536 + 160
205 heavyiron 440
	mov	edx, atcol
441
	int	0x40
442
	mov	ebx, 12 * 65536 + 286
223 Ghost 443
	mov	ecx, 277 * 65536 + 156
205 heavyiron 444
	mov	edx, tcol
445
	int	0x40
446
	; рисуем выбранную вкладку
447
	mov	al, [act_tab]
448
	cmp	al, 2
449
	je	info_tab
450
	cmp	al, 3
451
	je	test_tab
452
	cmp	al, 4
453
	je	config_tab
454
	jmp	about_tab
455
end_drow_tab:
456
	mov	eax, 12
457
	mov	ebx, 2
458
	int	0x40
459
	jmp	wait_for_event
460
;--- Drow Info tab ---------------
461
info_tab:
5950 pathoswith 462
	include "tab_info.inc"
205 heavyiron 463
;--- Drow test tab ---------------
464
test_tab:
223 Ghost 465
	include "tab_test.inc"
205 heavyiron 466
;--- Drow Config tab -------------
467
config_tab:
223 Ghost 468
	include "tab_conf.inc"
205 heavyiron 469
;--- Drow About tab --------------
470
about_tab:
223 Ghost 471
	include "tab_about.inc"
205 heavyiron 472
;---------------------------------------------------------------------
5950 pathoswith 473
	include "system.inc"
205 heavyiron 474
	include "hwm.inc"
475
	include "diag.inc"
476
 
3604 fedesco 477
 
205 heavyiron 478
DATA
5950 pathoswith 479
act_tab 	db	2			; Номер активной вкладки
5920 IgorA 480
tab_lab:
481
.1: db 'Info'
482
.2: db 'Tests'
483
.3: db 'Configs'
484
.4: db 'About'
485
title		db	'Ghost Monitor v0.4 [18/11/15]',0
205 heavyiron 486
 
487
msgs_mon mls \
488
	'CPU Load (%)',\
489
	'Mem Usage(%)',\
490
	'Temp1',\
491
	'Temp2',\
492
	'Temp3',\
493
	'Fan1',\
494
	'Fan2',\
223 Ghost 495
	'Fan3',\
496
	'Fan4',\
497
	'Fan5'
3604 fedesco 498
 
205 heavyiron 499
msgs_mon2 mls \
500
	'Vcore',\
501
	'AGP',\
502
	'+3.3V',\
503
	'AVcc (+5V)',\
504
	'+12V',\
505
	'-12V',\
506
	'-5V'
507
 
5950 pathoswith 508
msg_yes 	db	'Yes'
205 heavyiron 509
msg_no		db	'N/A'
510
 
511
update_time	dd	300			; период обновления в сотых долях секунды
512
d_colors	dd	d_cpu_load, d_mem_usage, d_temp1, d_temp2, d_temp3
513
c_eps		dd	0.01
223 Ghost 514
 
515
; Цвета графиков
5950 pathoswith 516
colors: 	dd	0xff0000, 0xff00, 0xff, 0xffffff, tcol, 0xFF7E23, 0x8BA169, 0xff0000	; первый и последний равны
223 Ghost 517
colors_end:
205 heavyiron 518
;---------------------------------------------------------------------
519
UDATA
520
 
521
test_pid	dd	?			; если test_id == 0 - не имеет смысла
5950 pathoswith 522
test_id 	db	?			; 0 - тест не запушен (соответствует № кнопки 6..10)
205 heavyiron 523
diag_add_v	db	?			; 0 - не добавлять данные на график, !0 - добавлять
524
 
5950 pathoswith 525
Vendor: 	times	12 db ?
205 heavyiron 526
CPU_fam:	db	?
527
CPU_mod:	db	?
528
CPU_type:	db	?
529
CPU_mmx:	db	?
530
 
531
; Для реакции на изменения
5950 pathoswith 532
old_t1: 	dd	?	; последнее значение temp1
533
old_t2: 	dd	?	; ...
534
old_t3: 	dd	?
535
old_f1: 	dd	?
536
old_f2: 	dd	?
537
old_f3: 	dd	?
205 heavyiron 538
old_volts:	times	7 dd ?
539
 
540
; Грфики
541
diag_beg:
542
d_cpu_load:	dd	?
543
		times 286 db ?
3604 fedesco 544
 
205 heavyiron 545
d_mem_usage:	dd	?
546
		times 286 db ?
3604 fedesco 547
 
205 heavyiron 548
d_temp1:	dd	?
549
		times 286 db ?
3604 fedesco 550
 
205 heavyiron 551
d_temp2:	dd	?
552
		times 286 db ?
553
 
554
d_temp3:	dd	?
555
		times 286 db ?
556
diag_end:
557
 
558
; --- стек теста, воизбежание глюков не переносить в другое место ----
559
th_stack:	times	1024 db ?
560
stp:
561
;---------------------------------------------------------------------
562
MEOS_APP_END