Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
9108 Doczom 1
use32
2
  org    0
3
 
4
  db     'MENUET01'
5
  dd     1
6
  dd     START
7
  dd     I_END       ; а §¬Ґа Їа®Ја ¬¬л
8
  dd     MEM         ; Є®«ЁзҐбвў® Ї ¬пвЁ
9
  dd     STACKTOP
9771 Doczom 10
  dd     PATH
9108 Doczom 11
  dd     0
12
include '..\..\macros.inc'
13
include '..\..\KOSfuncs.inc'
9199 Doczom 14
 
9108 Doczom 15
START:
16
;;установка маска событий на получение переписовки и нажатия на кнопку
17
       mcall SF_SET_EVENTS_MASK,0x05
18
;load driver
19
       mcall SF_SYS_MISC, SSF_LOAD_DRIVER_PE, path_drv, 0
20
       mov dword[drv_struct.handl],eax
21
       test eax,eax ;проверка загрузки
9771 Doczom 22
       jz  error_drv
9760 Doczom 23
main:
24
       mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
9771 Doczom 25
       cmp   byte[PATH], 0
26
       jz    still
9760 Doczom 27
       call add_file
9108 Doczom 28
still:           ;void main()
29
       call draw
30
;;ожидание события в течении 2000мс
31
       mcall SF_WAIT_EVENT_TIMEOUT,200 ;2 second
32
       dec eax                   ; redraw request ?
33
       je   still
34
       cmp eax,2             ;button
35
       jz button
36
       jmp still
37
 
38
button:
39
       mcall SF_GET_BUTTON
40
 
41
       cmp eax,1
42
       jz still
43
       dec ah
44
       je exit
45
;; id button micro_info = 8
46
       cmp ah,7 ;// ah-1=7
47
       jnz still
48
       xor byte[flag_micro_info],1
49
       jmp still
9771 Doczom 50
 
51
align 4
9108 Doczom 52
draw:
53
       mcall SF_REDRAW, SSF_BEGIN_DRAW
9771 Doczom 54
       mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
9108 Doczom 55
 
56
       mov eax,SF_CREATE_WINDOW
57
       mov ebx,0x00ff013f
58
       mov ecx,0x001500cc
59
       mov edx,0x14000000
60
       add edx,[sc.work]
61
       mov edi,title
62
       mcall
63
 
64
       mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
65
 
9771 Doczom 66
       cmp       byte[PATH], 0
67
       jz        @f
9760 Doczom 68
       dec       dword[update_flag]
9771 Doczom 69
       jnz       @f
9760 Doczom 70
       call      add_new_item
71
       mov       dword[update_flag], 30
72
@@:
73
 
9108 Doczom 74
       cmp byte[flag_micro_info],1
75
       mov eax,SF_CHANGE_WINDOW
76
       mov ebx,-1
77
       mov ecx,ebx;-1
78
       jz draw.micro
79
 
80
       mov esi,0x000000cc
81
       mov edx,0x0000013f
82
       mcall
83
;;создание кнопки переключения режима
84
       mov eax,SF_DEFINE_BUTTON
85
       mov ebx,0x01250010
86
       mov ecx,0x001d0015
87
       mov edx,0x00000008
88
       mov esi,[sc.work_button]
89
       mcall
90
;;вывод знака на кнопку
91
;;так как функция writeText не должна изменять регистры
92
;;присвоения в регистры eax и ecx происходят только 1 раз
93
;; Далее, так как текст выводится почти всегда с одинаковым
94
;; смещением вниз(равным 15)  дынные(строки) имеют одинаковый
95
;; размер , то используется инструкция add
96
       mov eax,SF_DRAW_TEXT
97
       mov ebx,0x01290020
98
       mov ecx,0x81000000
99
       add ecx,[sc.work_text]
100
       mov edx,_up
101
       mcall
102
 
103
       ;вывод "Tctl:"
104
       mov ebx,0x000a0020
105
       mov ecx,0x90000000
106
       add ecx,[sc.work_text]
107
       mov edx,_Tctl
108
       mcall
109
 
110
       ;вывод "Tmax:"
111
       add ebx,0x15
112
       add edx,7
113
       mcall
114
 
115
       ;вывод "Tcrit:"
116
       add ebx,0x2a
117
       add edx,7
118
       mcall
119
 
120
       ;вывод "Tccd1:"
121
       add ebx,0x19
122
       add edx,7
123
       mcall
124
 
125
       ;вывод "Tccd2:"
126
       add ebx,0x15
127
       add edx,7
128
       mcall
129
 
130
       ;вывод "Tccd3:"
131
       add ebx,0x15
132
       add edx,7
133
       mcall
134
 
135
       ;вывод "Tccd4:"
136
       add ebx,0x15
137
       add edx,7
138
       mcall
139
 
140
       ;вывод "Tccd5:"
141
       mov ebx,0x00a50078
142
       add edx,7
143
       mcall
144
 
145
       ;вывод "Tccd6:"
146
       add ebx,0x15
147
       add edx,7
148
       mcall
149
 
150
       ;вывод "Tccd7:"
151
       add ebx,0x15
152
       add edx,7
153
       mcall
154
 
155
       ;вывод "Tccd8:"
156
       add ebx,0x15
157
       add edx,7
158
       mcall
159
 
160
       ;вывод "Tdie:"
161
       mov ebx,0x00a5005f
162
       add edx,7
163
       mcall
164
 
165
       ;вывод "Tcrit hyst:"
166
       mov ebx,0x000a004a
167
       add edx,7
168
       mcall
169
;;;;;;input data driver;;;;;;;;;
170
       mov eax,0x004a0020
9771 Doczom 171
       mov ebx, drv_data.Tctl  ;вывод данных от драйвера
9108 Doczom 172
       call write_data
173
 
174
       add eax,0x15
9771 Doczom 175
       mov ebx, drv_data.Tmax
9108 Doczom 176
       call write_data
177
 
178
       add eax,0x2a
9771 Doczom 179
       mov ebx, drv_data.Tcrit
9108 Doczom 180
       call write_data
181
 
182
       add eax,0x19
9771 Doczom 183
       mov ebx, drv_data.Tccd1
9108 Doczom 184
       call write_data
185
 
186
       add eax,0x15
187
       add ebx,4
188
       call write_data
189
 
190
       add eax,0x15
191
       add ebx,4
192
       call write_data
193
 
194
       add eax,0x15
195
       add ebx,4
196
       call write_data
197
 
198
       mov eax,0x00E50078
199
       add ebx,4
200
       call write_data
201
 
202
       add eax,0x15
203
       add ebx,4
204
       call write_data
205
 
206
       add eax,0x15
207
       add ebx,4
208
       call write_data
209
 
210
       add eax,0x15
211
       add ebx,4
212
       call write_data
213
 
214
       mov eax,0x00E5005f
9771 Doczom 215
       mov ebx, drv_data.Tdie
9108 Doczom 216
       call write_data
217
 
218
       mov eax,0x007a004a
9771 Doczom 219
       mov ebx, drv_data.Tcrit_hyst
9108 Doczom 220
       call write_data
221
       jmp @f
222
.micro:
223
       mov esi,0x00000035
224
       mov edx,0x000000c0
225
       mcall
226
 
227
       mov eax,SF_DEFINE_BUTTON
228
       mov ebx,0x00a70010
229
       mov ecx,0x001d0015
230
       mov edx,eax;0x00000008
231
       mov esi,[sc.work_button]
9120 Doczom 232
       mcall
9108 Doczom 233
 
234
       mov eax,SF_DRAW_TEXT;4
235
       mov ebx,0x000a0020
236
       mov ecx,0x90000000
237
       add ecx,[sc.work_text]
238
       mov edx,_Tctl
239
       mcall
240
 
241
       add ebx,0x00a00000
242
       mov ecx,0x81000000
243
       add ecx,[sc.work_text]
244
       mov edx,_down
245
       mcall
246
 
247
       mov eax,0x004a0020
9771 Doczom 248
       mov ebx, drv_data.Tctl
9108 Doczom 249
       call write_data
250
@@:
251
       mcall SF_REDRAW, SSF_END_DRAW
252
       ret
253
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
254
;; procedure write_data(eax, ebx);
255
;; eax=x*65536+y
256
;; ebx=pointer on value
257
;; ecx register don`t save
258
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9771 Doczom 259
align 4
9108 Doczom 260
write_data:
261
       push eax
262
       push ebx
263
       ;mov edx,[ebx]  ;edx=value
264
       mov esi,ebx
265
       cmp dword[ebx],-1   ; flag ziro data
266
       mov ecx,0x90000000
267
       mov ebx,eax
268
       jnz @f
269
       ;write n/a
270
       add ecx,[sc.work_text]
271
       mov eax,SF_DRAW_TEXT
272
       mov edx,_NA
273
       mcall
274
       pop ebx
275
       pop eax
276
       ret
277
@@:
278
       ;write_value
279
; value / 1000 =value_in_1
280
;input value_in_1,koord_start
281
; if value >=100 then dot_kord=4 ; =0x20
282
;   if value >10 then  dot_kord=3; =0x18
283
;     dot_kord=2
284
;input ".", koord_start+dot_koord*size_w(char)
285
;value-value_in_1 = value_in_2
286
;input value_in_2, koord_start+dot_kord+1*size_w(char=8)
287
       push eax
288
       mov eax,[esi]
289
       xor edx,edx
290
       mov ebx,1000
291
       div ebx
292
       cmp eax,100
293
       jae .dot_4
294
       cmp eax,10
295
       jae .dot_3       ; ----|
296
       mov edi,0x0c;0x10;     |
297
       jmp .write       ;     |
298
.dot_4:                 ;     |
299
       mov edi,0x1c;0x20;     |
300
       jmp .write       ;     |
301
.dot_3:                 ;   <-|
302
       mov edi,0x14;0x18
303
.write:
304
       mov ecx,edx
305
       pop edx
306
       push ecx
307
 
308
       mov ecx,eax
309
       mov ebx,0x80030000
310
       mov eax,SF_DRAW_NUMBER
311
       mov esi,0x10000000
312
       add esi,[sc.work_text]
313
       mcall
314
       shl edi,16
315
       mov eax,SF_DRAW_TEXT
316
       add edx,edi
317
       mov ebx,edx
318
 
319
       mov ecx,0x90000000
320
       add ecx,[sc.work_text]
321
       mov edx,_dot
322
       mcall
323
       mov eax,SF_DRAW_NUMBER
324
       mov edx,ebx
325
       mov esi,0x10000000
326
       add esi,[sc.work_text]
327
       mov ebx,0x00030000
328
 
329
       add edx,0x80000
330
       pop ecx
331
       mcall
332
       mov eax,SF_DRAW_TEXT
333
       mov ebx,edx
334
       mov ecx,0x80000000
335
       add ecx,[sc.work_text]
336
       add ebx,0x180000
337
       mov edx,_t
338
       mcall
339
 
340
       mov ecx,0x90000000
341
       add ecx,[sc.work_text]
342
       add ebx,0x60000
343
       mov edx,_C
344
       mcall
345
       pop ebx
346
       pop eax
347
       ret
348
 
349
error_drv:
9199 Doczom 350
       mcall SF_FILE,run_notify
9108 Doczom 351
exit:
352
       mcall SF_TERMINATE_PROCESS
9760 Doczom 353
 
9771 Doczom 354
align 4
9760 Doczom 355
add_file:
356
        mcall SF_FILE, graph_temp
357
        mov     dword[graph_temp], 3
9771 Doczom 358
        mov     dword[graph_temp.size], 10
9760 Doczom 359
        mov     dword[graph_temp.str], graph_start.new_data
360
        mov     eax,[drv_data.Tmax]
361
        mov     dword[graph_temp.index], 9
362
        mov     ebx, graph_start.new_data
363
        call    int_to_str
364
        mcall SF_FILE, graph_temp
365
 
9771 Doczom 366
        mov     dword[graph_temp.index], 19
367
        mov     dword[graph_temp.size], 20
9760 Doczom 368
        ret
9771 Doczom 369
align 4
9760 Doczom 370
index_item:
371
        dd    1
372
add_new_item:
373
        mov     eax,[index_item]
374
        imul    eax,1000
375
        mov     ebx, graph_start.new_data
376
        call    int_to_str
9771 Doczom 377
        mcall SF_FILE, graph_koord_x2 ;save x2=index_item
9760 Doczom 378
        inc     dword[index_item]
9771 Doczom 379
 
9760 Doczom 380
        mov     eax,[drv_data.Tctl]
9771 Doczom 381
        mov     ebx, graph_start.new_data_2
9760 Doczom 382
        call    int_to_str
383
        mcall SF_FILE, graph_temp
9771 Doczom 384
        add     dword[graph_temp.index], 20
9760 Doczom 385
        ret
386
 
387
;eax = int   value / 1000
388
;ebx = *str
389
; из за конкретики данного прилажения(а именно измерение температуры проца), сомниваюсь
390
; что потребуется больше 3 цифр на значение(ххх.ххх) так что будет костыль
9771 Doczom 391
align 4
9760 Doczom 392
int_to_str:
393
        push    ecx edx esi
394
        mov     ecx, '0000'
395
        mov     [ebx], ecx
396
        mov     [ebx+5], ecx
397
 
398
        xor     edx, edx
399
        mov     esi, 1000
400
        div     esi
401
        push    edx
402
        mov     esi, 10
403
        push    ebx
404
        add     ebx, 3
9771 Doczom 405
        and     eax, 0x3ff ; 1023
9760 Doczom 406
.loop:
407
        test    eax, eax
408
        jz      @f
409
        xor     edx, edx
410
        div     esi
411
        add     edx, '0'
412
        mov     byte[ebx], dl
413
        dec     ebx
414
        jmp     .loop
415
@@:
416
        pop     ebx
417
        add     ebx, 8;4
418
        pop     edx
419
        test    edx, edx
420
        jz      @f
421
        mov     eax, edx
422
        imul    eax, 10
423
        xor     edx, edx
424
        push    edx
425
        push    ebx
426
        jmp     .loop
427
@@:
428
        pop     esi edx ecx
429
        ret
9108 Doczom 430
;Data_program;
9116 Doczom 431
title       db 'AMDtemp',0
9120 Doczom 432
path_drv    db '/kolibrios/drivers/sensors/k10temp.sys',0
9199 Doczom 433
Error_text  db '"Error load driver\nk10temp.sys was not found or is faulty " -tdE ',0
9108 Doczom 434
_NA         db 'N/A',0
435
_dot        db '.',0
436
_t          db 0x1d,0x00
437
_C          db 'C',0x00
438
_down       db 0x1f,0x00
439
_up         db 0x1e,0x00
440
 
441
 
442
_Tctl       db 'Tctl: ',0
443
_Tmax       db 'Tmax: ',0
444
_Tcrit      db 'Tcrit:',0
445
_Tccd1      db 'Tccd1:',0
446
_Tccd2      db 'Tccd2:',0
447
_Tccd3      db 'Tccd3:',0
448
_Tccd4      db 'Tccd4:',0
449
_Tccd5      db 'Tccd5:',0
450
_Tccd6      db 'Tccd6:',0
451
_Tccd7      db 'Tccd7:',0
452
_Tccd8      db 'Tccd8:',0
453
_Tdie       db 'Tdie: ',0
454
_Tcrit_hyst db 'Tcrit hyst:',0
455
 
456
;;flag mode input data
457
flag_micro_info db 1
458
drv_data:
459
.Tctl            dd -1
460
.Tdie            dd -1
461
.Tccd1           dd -1
462
.Tccd2           dd -1
463
.Tccd3           dd -1
464
.Tccd4           dd -1
465
.Tccd5           dd -1
466
.Tccd6           dd -1
467
.Tccd7           dd -1
468
.Tccd8           dd -1
469
 
470
.Tmax            dd -1
471
.Tcrit           dd -1
472
.Tcrit_hyst      dd -1
9120 Doczom 473
.sizeof = $ - drv_data ;
9108 Doczom 474
 
9771 Doczom 475
align 4
9108 Doczom 476
drv_struct:
9199 Doczom 477
.handl           dd 0
478
                 dd 0
479
                 dd 0
480
                 dd 0
481
                 dd drv_data
482
                 dd drv_data.sizeof;52 ; 13*4
9771 Doczom 483
align 4
9199 Doczom 484
run_notify:
485
                 dd 7
486
                 dd 0
487
                 dd Error_text
488
                 dd 0
489
                 dd 0
9760 Doczom 490
                 db '/sys/@notify',0 ,0,0,0 ;выравнивание
9199 Doczom 491
 
9771 Doczom 492
align 4
9760 Doczom 493
update_flag:    dd 30 ;1 minut
9771 Doczom 494
graph_start:    db '0 0000 0 '  ; 9 byte
495
.new_data:      db '0000.0000 ' ;  10-19 byte  10 byte
496
.new_data_2:    db '0000.0000 ' ;  20-29 byte  10 byte
497
 
498
align 4
9760 Doczom 499
graph_temp:
500
                dd 2
501
.index:         dd 0
502
                dd 0
9771 Doczom 503
.size:          dd 19 ;size 4 first value for Graph
9760 Doczom 504
.str:           dd graph_start ; заменить
9771 Doczom 505
                db 0
506
                dd PATH
507
align 4
508
graph_koord_x2:
509
                dd 3
510
                dd 2 ;index for rewrite 2 value
511
                dd 0
512
                dd 4
513
                dd graph_start.new_data ; заменить
514
                db 0
515
                dd PATH
516
align 4
517
PATH:
518
   rb 512 ; buffer for command line. string for save log.
9108 Doczom 519
sc      system_colors
520
I_END:
521
   rd 256
522
STACKTOP:
523
MEM: