Subversion Repositories Kolibri OS

Rev

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

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