From 63531bfca1b0329b5a767aab021abfc8ef215822 Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Fri, 23 Sep 2011 04:14:41 +0000 Subject: [PATCH] Board 1) Optimize redrawing 2) Clearing of source code git-svn-id: svn://kolibrios.org@2234 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/system/board/trunk/board.asm | 572 +++++++++++------------ programs/system/board/trunk/build_en.bat | 1 + programs/system/board/trunk/build_ge.bat | 1 + programs/system/board/trunk/build_ru.bat | 1 + 4 files changed, 283 insertions(+), 292 deletions(-) diff --git a/programs/system/board/trunk/board.asm b/programs/system/board/trunk/board.asm index 1cad77785f..cdb10c3eee 100644 --- a/programs/system/board/trunk/board.asm +++ b/programs/system/board/trunk/board.asm @@ -23,272 +23,254 @@ include 'debug.inc' purge newline MAXSTRINGS = 16 TMP = 80*(MAXSTRINGS+1) - +;------------------------------------------------------------------------------ START: ; start of execution - mov edi, filename - cmp byte [edi], 0 + mov edi,filename + cmp [edi],byte 0 jnz param - mov esi, default_filename + mov esi,default_filename @@: lodsb stosb - test al, al + test al,al jnz @b param: ; allow user to see messages written before start -; mov ecx,4096 -; flush: -; mov eax,63 -; mov ebx,2 -; mcall -; loop flush - - mov ecx, TMP - xor eax, eax - mov edi, [targ] - rep stosb - - mov [tmp1],'x' - mov [tmp2],'x' - - mov eax,14 - mcall - and eax,0xffff0000 - sub eax,399 shl 16 - add eax,399 - mov [xstart],eax - - mov eax,48 - mov ebx,3 - mov ecx,sc - mov edx,sizeof.system_colors - mcall - if WRITE_LOG - mov esi, filename - call CreateFile - end if - - red: - call draw_window +; mov ecx,4096 +;flush: +; mcall 63,2 +; loop flush + + mov ecx,TMP + xor eax,eax + mov edi,[targ] + rep stosb + mov [tmp1],'x' + mov [tmp2],'x' + + mcall 14 + and eax,0xffff0000 + sub eax,399 shl 16 + add eax,399 + mov [xstart],eax + mcall 48,3,sc,sizeof.system_colors +if WRITE_LOG + mov esi,filename + call CreateFile +end if +;------------------------------------------------------------------------------ +red: + call draw_window +;------------------------------------------------------------------------------ still: + mcall 23,1 ; wait here for event + cmp eax,1 ; redraw request ? + je red - mov eax,23 ; wait here for event - mov ebx,1 - mcall + cmp eax,2 ; key in buffer ? + je key - cmp eax,1 ; redraw request ? - je red - cmp eax,2 ; key in buffer ? - je key - cmp eax,3 ; button in buffer ? - je button + cmp eax,3 ; button in buffer ? + je button - mov eax,63 - mov ebx,2 - mcall + mcall 63,2 + cmp ebx,1 + jne still - cmp ebx,1 - jne still +new_data: +if WRITE_LOG + pusha + mov [tmp],al + mov edx,tmp + mov ecx,1 + mov esi,filename +.write_to_logfile: + call WriteToFile + cmp eax,5 + jne @f + mov esi,filename + mov [filepos],0 + call CreateFile + jnc .write_to_logfile +@@: + inc [filepos] + popa +end if + mov ebp,[targ] +.no4: + cmp al,13 + jne no13 + and [ebp-8],dword 0 + jmp new_check +;------------------------------------------ +no13: + cmp al,10 + jne no10 + and [ebp-8],dword 0 + inc dword [ebp-4] + cmp [ebp-4],dword MAXSTRINGS + jbe .noypos + mov [ebp-4],dword MAXSTRINGS + lea esi,[ebp+80] + mov edi,ebp + mov ecx,80*(MAXSTRINGS) + cld + rep movsb - new_data: - if WRITE_LOG - pusha - mov [tmp], al - mov edx, tmp - mov ecx, 1 - mov esi, filename - .write_to_logfile: - call WriteToFile - cmp eax, 5 - jne @f - mov esi, filename - mov [filepos], 0 - call CreateFile - jnc .write_to_logfile - @@: - inc [filepos] - popa - end if - - mov ebp,[targ] - .no4: - cmp al,13 - jne no13 - and dword[ebp-8],0 - jmp new_check - no13: - cmp al,10 - jne no10 - and dword[ebp-8],0 - inc dword[ebp-4] - cmp dword[ebp-4],MAXSTRINGS - jbe .noypos - mov dword[ebp-4],MAXSTRINGS - lea esi,[ebp+80] - mov edi,ebp - mov ecx,80*(MAXSTRINGS) - cld - rep movsb - - mov esi,[ebp-4] - imul esi,80 - add esi,[ebp-8] - add esi,ebp - mov ecx,80 - xor al,al - rep stosb - .noypos: - mov [targ],text2 - and [krnl_cnt],0 - jmp new_check - no10: - cmp ebp,text1 - je add2 - mov ecx,[krnl_cnt] - cmp al,[krnl_msg+ecx] - jne .noknl - inc [krnl_cnt] - cmp [krnl_cnt],4 - jne new_check - mov [targ],text1 - .noknl: - mov ebp,[targ] - jecxz .add - push eax - mov esi,krnl_msg - .l1: - lodsb - call add_char - loop .l1 - pop eax - .add: - and [krnl_cnt],0 - add2: - call add_char - - new_check: - - mov eax,63 - mov ebx,2 - mcall - - cmp ebx,1 - je new_data - - call draw_window - - jmp still - - key: ; key - mov al,2 ; just read it and ignore - mcall - cmp ah,' ' - je button.noclose - jmp still - - button: ; button - mov al,17 ; get id - mcall - - cmp ah,1 ; button id=1 ? - jne .noclose - - or eax,-1 ; close this program - mcall - .noclose: - xor [vmode],1 - jmp red + mov esi,[ebp-4] + imul esi,80 + add esi,[ebp-8] + add esi,ebp + mov ecx,80 + xor al,al + rep stosb +.noypos: + mov [targ],text2 + and [krnl_cnt],0 + jmp new_check +;------------------------------------------ +no10: + cmp ebp,text1 + je add2 + mov ecx,[krnl_cnt] + cmp al,[krnl_msg+ecx] + jne .noknl + inc [krnl_cnt] + cmp [krnl_cnt],4 + jne new_check + mov [targ],text1 +.noknl: + mov ebp,[targ] + jecxz .add + push eax + mov esi,krnl_msg +.l1: + lodsb + call add_char + loop .l1 + pop eax +.add: + and [krnl_cnt],0 +add2: + call add_char +new_check: + mcall 63,2 + cmp ebx,1 + je new_data + call draw_text + jmp still +;------------------------------------------------------------------------------ +key: + mcall 2 + cmp ah,' ' + je button.noclose + jmp still +;------------------------------------------------------------------------------ +button: + mcall 17 ; get id + cmp ah,1 ; button id=1 ? + jne .noclose + or eax,-1 ; close this program + mcall +.noclose: + xor [vmode],1 + jmp red +;------------------------------------------------------------------------------ add_char: - push esi - mov esi,[ebp-4] - imul esi,80 - add esi,[ebp-8] - mov [ebp+esi],al - inc dword[ebp-8] - cmp dword[ebp-8],80 - jb .ok - mov dword[ebp-8],79 - .ok: - pop esi - ret - + push esi + mov esi,[ebp-4] + imul esi,80 + add esi,[ebp-8] + mov [ebp+esi],al + inc dword[ebp-8] + cmp dword[ebp-8],80 + jb .ok + mov dword[ebp-8],79 +.ok: + pop esi + ret +;------------------------------------------------------------------------------ ; ********************************************* ; ******* WINDOW DEFINITIONS AND DRAW ******** ; ********************************************* - - draw_window: - - mov eax,12 ; function 12:tell os about windowdraw - mov ebx,1 ; 1, start of draw - mcall - - ; DRAW WINDOW - xor eax,eax ; function 0 : define and draw window -; mov ebx,50*65536+400 ; [x start] *65536 + [x size] - mov ebx,[xstart] - mov ecx,MAXSTRINGS*10+45 ; [y start] *65536 + [y size] - mov edx,[sc.work] ; color of work area RRGGBB,8->color gl - or edx,0x13000000 - mov edi,title ; WINDOW LABEL - mcall - - mov ecx,4 - mov esi,[sc.work] - mov ebx,296 shl 16+5*6 - mov edx,3;+1 shl 30 - mcall 8,,<5,12> - mov edx,[vmode] - lea edx,[edx*4+duk] - mcall 4,<300,8>,,,4 - - mov ebx,15*65536+33 ; draw info text with function 4 - mov ecx,[sc.work_text] - mov edx,text1 - cmp [vmode],0 - je .kern - mov edx,text2 - .kern: - mov esi,80 - mov eax,4 - newline: - mcall - add ebx,10 - add edx,80 - cmp [edx],byte 'x' - jne newline - mov eax,12 ; function 12:tell os about windowdraw - mov ebx,2 ; 2, end of draw - mcall - - ret - - + mcall 12,1 ; 1, start of draw + xor eax,eax ; function 0 : define and draw window + mov ecx,MAXSTRINGS*10+45 ; [y start] *65536 + [y size] + mov edx,[sc.work] ; color of work area RRGGBB,8->color gl + or edx,0x13000000 + xor esi,esi + mcall ,[xstart],,,,title + mov ebx,296 shl 16+5*6 + mcall 8,,<5,12>,3,[sc.work] + mov edx,[vmode] + lea edx,[edx*4+duk] + mcall 4,<300,8>,,,4 + call draw_text + mcall 12,2 ; 2, end of draw + ret +;------------------------------------------------------------------------------ +draw_text: + mov ebx,15*65536+30 ; draw info text with function 4 + mov ecx,[sc.work_text] + or ecx,0x40000000 + mov edi,[sc.work] + mov edx,text1 + cmp [vmode],0 + je .kern + mov edx,text2 +.kern: + push ebx ecx edx + mcall 9,procinfo,-1 + mov eax,[ebx+42] + xor edx,edx + mov ebx,6 + div ebx + pop edx ecx ebx + mov esi,80 + cmp eax,esi + ja @f + mov esi,eax +@@: + cmp esi,5 + ja @f + mov esi,5 +@@: + sub esi,4 + mov eax,4 +newline: + mcall + add ebx,10 + add edx,80 + cmp [edx],byte 'x' + jne newline + ret +;------------------------------------------------------------------------------ if WRITE_LOG ;******************************************** ;* input: esi = pointer to the file name * ;******************************************** CreateFile: - pusha - mov dword [InfoStructure], 2 ; create file - mov dword [InfoStructure+4], 0 ; reserved - mov dword [InfoStructure+8], 0 ; reserved - mov dword [InfoStructure+12], 0 ; 0 bytes to write (just create) - mov dword [InfoStructure+16], 0 ; NULL data pointer (no data) - mov dword [InfoStructure+20], 0 ; reserved - mov dword [InfoStructure+21], esi ; pointer to the file name - mcall 70, InfoStructure - test eax, eax - jz .out - stc - .out: - popa - ret - + pusha + mov dword [InfoStructure],2 ; create file + mov dword [InfoStructure+4],0 ; reserved + mov dword [InfoStructure+8],0 ; reserved + mov dword [InfoStructure+12],0 ; 0 bytes to write (just create) + mov dword [InfoStructure+16],0 ; NULL data pointer (no data) + mov dword [InfoStructure+20],0 ; reserved + mov dword [InfoStructure+21],esi ; pointer to the file name + mcall 70, InfoStructure + test eax,eax + jz .out + stc +.out: + popa + ret +;------------------------------------------------ ;******************************************** ;* input: esi = pointer to the file name * ;* edx = pointer to data buffer * @@ -296,42 +278,38 @@ CreateFile: ;******************************************** WriteToFile: - push ebx - mov dword [InfoStructure], 3 ; write to file - mov eax, [filepos] - mov dword [InfoStructure+4], eax ; lower position addr - mov dword [InfoStructure+8], 0 ; upper position addr (0 for FAT) - mov dword [InfoStructure+12], ecx ; number of bytes to write - mov dword [InfoStructure+16], edx ; pointer to data buffer - mov dword [InfoStructure+20], 0 ; reserved - mov dword [InfoStructure+21], esi ; pointer to the file name - mcall 70, InfoStructure - clc - test eax, eax - jz .out - stc - .out: - pop ebx - ret - - + push ebx + mov dword [InfoStructure],3 ; write to file + mov eax, [filepos] + mov dword [InfoStructure+4],eax ; lower position addr + mov dword [InfoStructure+8],0 ; upper position addr (0 for FAT) + mov dword [InfoStructure+12],ecx ; number of bytes to write + mov dword [InfoStructure+16],edx ; pointer to data buffer + mov dword [InfoStructure+20],0 ; reserved + mov dword [InfoStructure+21],esi ; pointer to the file name + mcall 70, InfoStructure + clc + test eax,eax + jz .out + stc +.out: + pop ebx + ret +;-------------------------------------------------- InfoStructure: - dd 0x0 ; subfunction number - dd 0x0 ; position in the file in bytes - dd 0x0 ; upper part of the position address - dd 0x0 ; number of bytes to read - dd 0x0 ; pointer to the buffer to write data - db 0 - dd 0 ; pointer to the filename + dd 0x0 ; subfunction number + dd 0x0 ; position in the file in bytes + dd 0x0 ; upper part of the position address + dd 0x0 ; number of bytes to read + dd 0x0 ; pointer to the buffer to write data + db 0 + dd 0 ; pointer to the filename -filepos dd 0 +filepos dd 0 default_filename db '/sys/boardlog.txt',0 -tmp db 0 +tmp db 0 end if - - - - +;------------------------------------------------------------------------------ krnl_msg db 'K : ' duk db 'KernUser' @@ -340,33 +318,43 @@ duk db 'KernUser' ; 11,11 > 0,-1 ; 5,11 > 0,-1 if lang eq ru - title db 'Доска отладки и сообщений',0 + title db 'Доска отладки и сообщений',0 else if lang eq en - title db 'General debug & message board',0 + title db 'General debug & message board',0 else - title db 'Allgemeines debug- & nachrichtenboard',0 + title db 'Allgemeines debug- & nachrichtenboard',0 end if - krnl_cnt dd 0 - vmode dd 1 - targ dd text2 +krnl_cnt dd 0 +vmode dd 1 +targ dd text2 +;------------------------------------------------------------------------------ I_END: - offs dd ? - flag rb 1 - rd 2 -; x1pos dd ? -; y1pos dd ? - text1 rb 80*(MAXSTRINGS+1) - tmp1 db ? - rd 2 -; x2pos dd ? -; y2pos dd ? - text2 rb 80*(MAXSTRINGS+1) - tmp2 db ? - xstart dd ? - sc system_colors +;------------------------------------------------------------------------------ +offs dd ? +flag rb 1 + rd 2 +;x1pos dd ? +;y1pos dd ? +text1 rb 80*(MAXSTRINGS+1) +tmp1 db ? + rd 2 +;x2pos dd ? +;y2pos dd ? +text2 rb 80*(MAXSTRINGS+1) +tmp2 db ? +xstart dd ? + +sc system_colors + i_end: -filename rb 256 +filename rb 256 +;------------------------------------------------------------------------------ align 4 -stackbuf rb 2000h +procinfo: + rb 1024 +;------------------------------------------------------------------------------ +align 4 +stackbuf rb 2000h +;------------------------------------------------------------------------------ mem: diff --git a/programs/system/board/trunk/build_en.bat b/programs/system/board/trunk/build_en.bat index a043e94d57..0af1a32536 100644 --- a/programs/system/board/trunk/build_en.bat +++ b/programs/system/board/trunk/build_en.bat @@ -1,5 +1,6 @@ @erase lang.inc @echo lang fix en >lang.inc @fasm board.asm board +@kpack board @erase lang.inc @pause \ No newline at end of file diff --git a/programs/system/board/trunk/build_ge.bat b/programs/system/board/trunk/build_ge.bat index 17e23bf955..f5433a7008 100644 --- a/programs/system/board/trunk/build_ge.bat +++ b/programs/system/board/trunk/build_ge.bat @@ -1,5 +1,6 @@ @erase lang.inc @echo lang fix ge >lang.inc @fasm board.asm board +@kpack board @erase lang.inc @pause \ No newline at end of file diff --git a/programs/system/board/trunk/build_ru.bat b/programs/system/board/trunk/build_ru.bat index ee17d4a7ad..0b5add3414 100644 --- a/programs/system/board/trunk/build_ru.bat +++ b/programs/system/board/trunk/build_ru.bat @@ -1,5 +1,6 @@ @erase lang.inc @echo lang fix ru >lang.inc @fasm board.asm board +@kpack board @erase lang.inc @pause \ No newline at end of file