Subversion Repositories Kolibri OS

Rev

Rev 7676 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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