Subversion Repositories Kolibri OS

Rev

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