Subversion Repositories Kolibri OS

Rev

Rev 9217 | Rev 9771 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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'
  14.  
  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 ;ïðîâåðêà çàãðóçêè
  22.        jnz  main
  23.        jmp error_drv
  24. main:
  25.        mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
  26.        call add_file
  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
  51.        mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sc,sizeof.system_colors
  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.  
  63.        dec       dword[update_flag]
  64.        jnz       @F
  65.        call      add_new_item
  66.        mov       dword[update_flag], 30
  67. @@:
  68.  
  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]
  227.        mcall
  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:
  344.        mcall SF_FILE,run_notify
  345. exit:
  346.        mcall SF_TERMINATE_PROCESS
  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
  422. ;Data_program;
  423. title       db 'AMDtemp',0
  424. path_drv    db '/kolibrios/drivers/sensors/k10temp.sys',0
  425. Error_text  db '"Error load driver\nk10temp.sys was not found or is faulty " -tdE ',0
  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
  465. .sizeof = $ - drv_data ;
  466.  
  467. drv_struct:
  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
  481.                  db '/sys/@notify',0 ,0,0,0 ;âûðàâíèâàíèå
  482.  
  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.  
  494. sc      system_colors
  495. I_END:
  496.    rd 256
  497. STACKTOP:
  498. MEM: