0,0 → 1,401 |
use32 |
org 0 |
|
db 'MENUET01' |
dd 1 |
dd START |
dd I_END ; à §¬¥à ¯à®£à ¬¬ë |
dd MEM ; ª®«¨ç¥á⢮ ¯ ¬ï⨠|
dd STACKTOP |
dd 0 |
dd 0 |
include '..\..\macros.inc' |
include '..\..\KOSfuncs.inc' |
START: |
;;óñòàíîâêà ìàñêà ñîáûòèé íà ïîëó÷åíèå ïåðåïèñîâêè è íàæàòèÿ íà êíîïêó |
mcall SF_SET_EVENTS_MASK,0x05 |
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sc,sizeof.system_colors |
;load driver |
mcall SF_SYS_MISC, SSF_LOAD_DRIVER_PE, path_drv, 0 |
mov dword[drv_struct.handl],eax |
test eax,eax ;ïðîâåðêà çàãðóçêè |
jnz still |
jmp error_drv |
still: ;void main() |
call draw |
;;îæèäàíèå ñîáûòèÿ â òå÷åíèè 2000ìñ |
mcall SF_WAIT_EVENT_TIMEOUT,200 ;2 second |
dec eax ; redraw request ? |
je still |
cmp eax,2 ;button |
jz button |
jmp still |
|
button: |
mcall SF_GET_BUTTON |
|
cmp eax,1 |
jz still |
dec ah |
je exit |
;; id button micro_info = 8 |
cmp ah,7 ;// ah-1=7 |
jnz still |
xor byte[flag_micro_info],1 |
jmp still |
draw: |
mcall SF_REDRAW, SSF_BEGIN_DRAW |
|
mov eax,SF_CREATE_WINDOW |
mov ebx,0x00ff013f |
mov ecx,0x001500cc |
mov edx,0x14000000 |
add edx,[sc.work] |
mov edi,title |
mcall |
|
mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct |
|
cmp byte[flag_micro_info],1 |
mov eax,SF_CHANGE_WINDOW |
mov ebx,-1 |
mov ecx,ebx;-1 |
jz draw.micro |
|
mov esi,0x000000cc |
mov edx,0x0000013f |
mcall |
;;ñîçäàíèå êíîïêè ïåðåêëþ÷åíèÿ ðåæèìà |
mov eax,SF_DEFINE_BUTTON |
mov ebx,0x01250010 |
mov ecx,0x001d0015 |
mov edx,0x00000008 |
mov esi,[sc.work_button] |
mcall |
;;âûâîä çíàêà íà êíîïêó |
;;ïîÿñíåíèå ê ïðåäñòîÿùåìó óæàñó(ïèç..åöó) |
;;òàê êàê ôóíêöèÿ writeText íå äîëæíà èçìåíÿòü ðåãèñòðû |
;;ïðèñâîåíèÿ â ðåãèñòðû eax è ecx ïðîèñõîäÿò òîëüêî 1 ðàç |
;; Äàëåå, òàê êàê òåêñò âûâîäèòñÿ ïî÷òè âñåãäà ñ îäèíàêîâûì |
;; ñìåùåíèåì âíèç(ðàâíûì 15) äûííûå(ñòðîêè) èìåþò îäèíàêîâûé |
;; ðàçìåð , òî èñïîëüçóåòñÿ èíñòðóêöèÿ add |
mov eax,SF_DRAW_TEXT |
mov ebx,0x01290020 |
mov ecx,0x81000000 |
add ecx,[sc.work_text] |
mov edx,_up |
mcall |
|
;âûâîä "Tctl:" |
mov ebx,0x000a0020 |
mov ecx,0x90000000 |
add ecx,[sc.work_text] |
mov edx,_Tctl |
mcall |
|
;âûâîä "Tmax:" |
add ebx,0x15 |
add edx,7 |
mcall |
|
;âûâîä "Tcrit:" |
add ebx,0x2a |
add edx,7 |
mcall |
|
;âûâîä "Tccd1:" |
add ebx,0x19 |
add edx,7 |
mcall |
|
;âûâîä "Tccd2:" |
add ebx,0x15 |
add edx,7 |
mcall |
|
;âûâîä "Tccd3:" |
add ebx,0x15 |
add edx,7 |
mcall |
|
;âûâîä "Tccd4:" |
add ebx,0x15 |
add edx,7 |
mcall |
|
;âûâîä "Tccd5:" |
mov ebx,0x00a50078 |
add edx,7 |
mcall |
|
;âûâîä "Tccd6:" |
add ebx,0x15 |
add edx,7 |
mcall |
|
;âûâîä "Tccd7:" |
add ebx,0x15 |
add edx,7 |
mcall |
|
;âûâîä "Tccd8:" |
add ebx,0x15 |
add edx,7 |
mcall |
|
;âûâîä "Tdie:" |
mov ebx,0x00a5005f |
add edx,7 |
mcall |
|
;âûâîä "Tcrit hyst:" |
mov ebx,0x000a004a |
add edx,7 |
mcall |
;;;;;;input data driver;;;;;;;;; |
mov eax,0x004a0020 |
mov ebx,drv_data.Tctl ;âûâîä äàííûõ îò äðàéâåðà |
call write_data |
|
add eax,0x15 |
mov ebx,drv_data.Tmax |
call write_data |
|
add eax,0x2a |
mov ebx,drv_data.Tcrit |
call write_data |
|
add eax,0x19 |
mov ebx,drv_data.Tccd1 |
call write_data |
|
add eax,0x15 |
add ebx,4 |
call write_data |
|
add eax,0x15 |
add ebx,4 |
call write_data |
|
add eax,0x15 |
add ebx,4 |
call write_data |
|
mov eax,0x00E50078 |
add ebx,4 |
call write_data |
|
add eax,0x15 |
add ebx,4 |
call write_data |
|
add eax,0x15 |
add ebx,4 |
call write_data |
|
add eax,0x15 |
add ebx,4 |
call write_data |
|
mov eax,0x00E5005f |
mov ebx,drv_data.Tdie |
call write_data |
|
mov eax,0x007a004a |
mov ebx,drv_data.Tcrit_hyst |
call write_data |
jmp @f |
.micro: |
mov esi,0x00000035 |
mov edx,0x000000c0 |
mcall |
|
mov eax,SF_DEFINE_BUTTON |
mov ebx,0x00a70010 |
mov ecx,0x001d0015 |
mov edx,eax;0x00000008 |
mov esi,[sc.work_button] |
int 0x40 |
|
mov eax,SF_DRAW_TEXT;4 |
mov ebx,0x000a0020 |
mov ecx,0x90000000 |
add ecx,[sc.work_text] |
mov edx,_Tctl |
mcall |
|
add ebx,0x00a00000 |
mov ecx,0x81000000 |
add ecx,[sc.work_text] |
mov edx,_down |
mcall |
|
mov eax,0x004a0020 |
mov ebx,drv_data.Tctl |
call write_data |
@@: |
mcall SF_REDRAW, SSF_END_DRAW |
ret |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; procedure write_data(eax, ebx); |
;; eax=x*65536+y |
;; ebx=pointer on value |
;; ecx register don`t save |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
write_data: |
push eax |
push ebx |
;mov edx,[ebx] ;edx=value |
mov esi,ebx |
cmp dword[ebx],-1 ; flag ziro data |
mov ecx,0x90000000 |
mov ebx,eax |
jnz @f |
;write n/a |
add ecx,[sc.work_text] |
mov eax,SF_DRAW_TEXT |
mov edx,_NA |
mcall |
pop ebx |
pop eax |
ret |
@@: |
;write_value |
; value / 1000 =value_in_1 |
;input value_in_1,koord_start |
; if value >=100 then dot_kord=4 ; =0x20 |
; if value >10 then dot_kord=3; =0x18 |
; dot_kord=2 |
;input ".", koord_start+dot_koord*size_w(char) |
;value-value_in_1 = value_in_2 |
;input value_in_2, koord_start+dot_kord+1*size_w(char=8) |
push eax |
mov eax,[esi] |
xor edx,edx |
mov ebx,1000 |
div ebx |
cmp eax,100 |
jae .dot_4 |
cmp eax,10 |
jae .dot_3 ; ----| |
mov edi,0x0c;0x10; | |
jmp .write ; | |
.dot_4: ; | |
mov edi,0x1c;0x20; | |
jmp .write ; | |
.dot_3: ; <-| |
mov edi,0x14;0x18 |
.write: |
mov ecx,edx |
pop edx |
push ecx |
|
mov ecx,eax |
mov ebx,0x80030000 |
mov eax,SF_DRAW_NUMBER |
mov esi,0x10000000 |
add esi,[sc.work_text] |
mcall |
shl edi,16 |
mov eax,SF_DRAW_TEXT |
add edx,edi |
mov ebx,edx |
|
mov ecx,0x90000000 |
add ecx,[sc.work_text] |
mov edx,_dot |
mcall |
mov eax,SF_DRAW_NUMBER |
mov edx,ebx |
mov esi,0x10000000 |
add esi,[sc.work_text] |
mov ebx,0x00030000 |
|
add edx,0x80000 |
pop ecx |
mcall |
mov eax,SF_DRAW_TEXT |
mov ebx,edx |
mov ecx,0x80000000 |
add ecx,[sc.work_text] |
add ebx,0x180000 |
mov edx,_t |
mcall |
|
mov ecx,0x90000000 |
add ecx,[sc.work_text] |
add ebx,0x60000 |
mov edx,_C |
mcall |
pop ebx |
pop eax |
ret |
|
error_drv: |
mov edx,Error_text |
mov eax,SF_BOARD |
mov ebx,SSF_DEBUG_WRITE |
@@: |
mov cl,[edx] |
mcall |
inc edx |
cmp cl,0 |
jnz @b |
exit: |
mcall SF_TERMINATE_PROCESS |
;Data_program; |
title db ' amd temp view',0 |
path_drv db '/sys/drivers/k10temp.sys',0 |
Error_text db 'Error load driver',0 |
_NA db 'N/A',0 |
_dot db '.',0 |
_t db 0x1d,0x00 |
_C db 'C',0x00 |
_down db 0x1f,0x00 |
_up db 0x1e,0x00 |
|
|
_Tctl db 'Tctl: ',0 |
_Tmax db 'Tmax: ',0 |
_Tcrit db 'Tcrit:',0 |
_Tccd1 db 'Tccd1:',0 |
_Tccd2 db 'Tccd2:',0 |
_Tccd3 db 'Tccd3:',0 |
_Tccd4 db 'Tccd4:',0 |
_Tccd5 db 'Tccd5:',0 |
_Tccd6 db 'Tccd6:',0 |
_Tccd7 db 'Tccd7:',0 |
_Tccd8 db 'Tccd8:',0 |
_Tdie db 'Tdie: ',0 |
_Tcrit_hyst db 'Tcrit hyst:',0 |
|
;;flag mode input data |
flag_micro_info db 1 |
drv_data: |
.Tctl dd -1 |
.Tdie dd -1 |
.Tccd1 dd -1 |
.Tccd2 dd -1 |
.Tccd3 dd -1 |
.Tccd4 dd -1 |
.Tccd5 dd -1 |
.Tccd6 dd -1 |
.Tccd7 dd -1 |
.Tccd8 dd -1 |
|
.Tmax dd -1 |
.Tcrit dd -1 |
.Tcrit_hyst dd -1 |
|
drv_struct: |
.handl dd 0 |
dd 0 |
dd 0 |
dd 0 |
dd drv_data |
dd 52 ; 13*4 |
sc system_colors |
I_END: |
rd 256 |
STACKTOP: |
MEM: |