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