Subversion Repositories Kolibri OS

Rev

Rev 9760 | Rev 9858 | 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     PATH
  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.        jz  error_drv
  23. main:
  24.        mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
  25.        cmp   byte[PATH], 0
  26.        jz    still
  27.        call add_file
  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
  50.  
  51. align 4
  52. draw:
  53.        mcall SF_REDRAW, SSF_BEGIN_DRAW
  54.        mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  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.  
  66.        cmp       byte[PATH], 0
  67.        jz        @f
  68.        dec       dword[update_flag]
  69.        jnz       @f
  70.        call      add_new_item
  71.        mov       dword[update_flag], 30
  72. @@:
  73.  
  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
  171.        mov ebx, drv_data.Tctl  ;âûâîä äàííûõ îò äðàéâåðà
  172.        call write_data
  173.  
  174.        add eax,0x15
  175.        mov ebx, drv_data.Tmax
  176.        call write_data
  177.  
  178.        add eax,0x2a
  179.        mov ebx, drv_data.Tcrit
  180.        call write_data
  181.  
  182.        add eax,0x19
  183.        mov ebx, drv_data.Tccd1
  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
  215.        mov ebx, drv_data.Tdie
  216.        call write_data
  217.  
  218.        mov eax,0x007a004a
  219.        mov ebx, drv_data.Tcrit_hyst
  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]
  232.        mcall
  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
  248.        mov ebx, drv_data.Tctl
  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. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  259. align 4
  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:
  350.        mcall SF_FILE,run_notify
  351. exit:
  352.        mcall SF_TERMINATE_PROCESS
  353.  
  354. align 4
  355. add_file:
  356.         mcall SF_FILE, graph_temp
  357.         mov     dword[graph_temp], 3
  358.         mov     dword[graph_temp.size], 10
  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.  
  366.         mov     dword[graph_temp.index], 19
  367.         mov     dword[graph_temp.size], 20
  368.         ret
  369. align 4
  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
  377.         mcall SF_FILE, graph_koord_x2 ;save x2=index_item
  378.         inc     dword[index_item]
  379.  
  380.         mov     eax,[drv_data.Tctl]
  381.         mov     ebx, graph_start.new_data_2
  382.         call    int_to_str
  383.         mcall SF_FILE, graph_temp
  384.         add     dword[graph_temp.index], 20
  385.         ret
  386.  
  387. ;eax = int   value / 1000
  388. ;ebx = *str
  389. ; èç çà êîíêðåòèêè äàííîãî ïðèëàæåíèÿ(à èìåííî èçìåðåíèå òåìïåðàòóðû ïðîöà), ñîìíèâàþñü
  390. ; ÷òî ïîòðåáóåòñÿ áîëüøå 3 öèôð íà çíà÷åíèå(õõõ.õõõ) òàê ÷òî áóäåò êîñòûëü
  391. align 4
  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
  405.         and     eax, 0x3ff ; 1023
  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
  430. ;Data_program;
  431. title       db 'AMDtemp',0
  432. path_drv    db '/kolibrios/drivers/sensors/k10temp.sys',0
  433. Error_text  db '"Error load driver\nk10temp.sys was not found or is faulty " -tdE ',0
  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
  473. .sizeof = $ - drv_data ;
  474.  
  475. align 4
  476. drv_struct:
  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
  483. align 4
  484. run_notify:
  485.                  dd 7
  486.                  dd 0
  487.                  dd Error_text
  488.                  dd 0
  489.                  dd 0
  490.                  db '/sys/@notify',0 ,0,0,0 ;âûðàâíèâàíèå
  491.  
  492. align 4
  493. update_flag:    dd 30 ;1 minut
  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
  499. graph_temp:
  500.                 dd 2
  501. .index:         dd 0
  502.                 dd 0
  503. .size:          dd 19 ;size 4 first value for Graph
  504. .str:           dd graph_start ; çàìåíèòü
  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.
  519. sc      system_colors
  520. I_END:
  521.    rd 256
  522. STACKTOP:
  523. MEM: