From 9d68b668069d287fa012a226cc4caafc797bf55d Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Sun, 18 Mar 2012 21:54:01 +0000 Subject: [PATCH] ICON - The program uses only 140 Kb memory is now. Some speedup. git-svn-id: svn://kolibrios.org@2476 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/system/icon/trunk/icon.asm | 190 ++++++++++++---------------- 1 file changed, 78 insertions(+), 112 deletions(-) diff --git a/programs/system/icon/trunk/icon.asm b/programs/system/icon/trunk/icon.asm index 4b7ba43dfa..8b81b07a6a 100644 --- a/programs/system/icon/trunk/icon.asm +++ b/programs/system/icon/trunk/icon.asm @@ -5,6 +5,11 @@ ;* Compile with flat assembler * ;* * ;******************************** +; version: 2.11 +; last update: 19/03/2012 +; changed by: Marat Zakiyanov aka Mario79, aka Mario +; changes: The program uses only 140 Kb memory is now. +; Some speedup. ;--------------------------------------------------------------------- ; version: 2.1 ; last update: 17/03/2012 @@ -33,8 +38,8 @@ ; changes: modified for work with new multi-thread ICON. ;****************************************************************************** ICON_SIZE equ 32*32*3 -RAW_SIZE equ ICON_SIZE*32 ;350000 -GIF_SIZE equ 12*1024 ;45000 +;RAW_SIZE equ ICON_SIZE*32 ;350000 +;GIF_SIZE equ 12*1024 ;45000 REC_SIZE equ 80 ICONS_DAT equ '/sys/ICONS.DAT' ICON_APP equ '/sys/ICON' @@ -59,16 +64,40 @@ include 'gif_lite.inc' purge newline ;------------------------------------------------------------------------------ START: ; start of execution + mcall 68,11 +; get size of file ICONSTRP.GIF mcall 70,finfo - cmp ebx,GIF_SIZE - ja close - mov esi,gif_file - mov edi,strip_file - mov eax,icon_data + test eax,eax + jnz close +; get memory for ICONSTRP.GIF + mov ecx,[process_table+32] + mov [finfo.size],ecx + mcall 68,12 + mov [finfo.point],eax +; load ICONSTRP.GIF + mov [finfo],dword 0 + mcall 70,finfo + test eax,eax + jnz close +; calculate and get memory for RAW data + mov esi,[finfo.point] + movzx eax,word [esi+6] ;x + movzx edi,word [esi+8] ;y + imul eax,edi ;x*y + lea edi,[eax+eax*2] ; multiply x3 + mov ecx,edi + mcall 68,12 + mov [strip_file],eax + mov edi,eax +; convert GIF to RAW call ReadGIF +; back memeory to system + mcall 68,13,[finfo.point] + mov eax,dword[edi+4] shr eax,5 mov [icon_count],eax +; load ICON.DAT call load_ic boot_str: cmp [I_Param],dword 'BOOT' @@ -237,11 +266,11 @@ finfo_start: ;------------------------------------------------------------------------------ align 4 finfo: + dd 5 dd 0 dd 0 - dd 0 - dd GIF_SIZE - dd gif_file +.size dd 0 ;GIF_SIZE +.point dd process_table ;gif_file .path: db ICON_STRIP,0 rb 31-($-.path) @@ -327,7 +356,7 @@ no_add_icon: mcall 10 cmp eax,3 - jne no_f;ound + jne no_f mcall 17 shr eax,8 @@ -475,7 +504,6 @@ align 4 ldl1: movzx ebx,byte [esi+1] sub ebx,65 -; imul ebx,10 ; multiply x10 shl ebx,1 ; multiply x2 lea ebx,[ebx+ebx*4] ; multiply x5 @@ -747,7 +775,8 @@ align 4 and eax,0xfffffff8 push eax imul eax,ICON_SIZE - lea ebx,[strip_file+8+eax] + mov ebx,[strip_file] + lea ebx,[ebx+8+eax] mov ecx,8 mov edx,(33-18) shl 16+238 ;-------------------------------------- @@ -944,7 +973,6 @@ start_new: mov dword[ebp-4],esi mcall 51,1,thread add ebp,0x100 - ; change to next thread if mutex is blocked mov eax,68 mov ebx,1 @@ -971,7 +999,7 @@ close: ; esp-28 = start of thread stack ; esp-24 = ??? ; esp-20 = 'AA-F' or... -; esp-16 = ??? SHL greedy maniac mode on! +; esp-16 = ebp-4 - area of f. 15.6 ; esp-12 = ebp+0 = X ; esp-8 = ebp+4 = Y ; esp-4 = ebp+8 = adress of icon_data @@ -981,7 +1009,6 @@ thread: sub esp,12 mov ebp,esp sub esp,16 - call shape_window call draw_window2 mov [create_thread_event],1 mcall 40,010101b @@ -1069,7 +1096,6 @@ align 4 align 4 fill_paths: push esi edi -; dps '>' movzx ecx,byte[str_lens+ebx] add esi,[positions+ebx*4] push esi @@ -1094,8 +1120,6 @@ align 4 align 4 .noms: and byte[edi],0 -; call debug_outstr -; dps <'<',13,10> pop edi esi ret ;-------------------------------------- @@ -1143,6 +1167,13 @@ align 4 ;------------------------------------------------------------------------------ align 4 draw_picture: + mcall 15,6 + test eax,eax + jnz @f + mcall 68,1 + jmp draw_picture +@@: + mov [ebp-4],eax mov [image],image_area mov edi,[ebp+8] @@ -1154,18 +1185,24 @@ draw_picture: lea eax,[eax+eax*2] ; multiply x3 shl eax,10 ; multiply x1024 - lea edi,[eax+strip_file+8] - xor ebx,ebx + mov edi,[strip_file] + lea edi,[eax+edi+8] xor ecx,ecx mov esi,edi mov [pixpos],0 ;-------------------------------------- -; loop start +; loop Y start +align 4 +new_line: + push ecx ; Y + xor ebx,ebx +;-------------------------------------- +; loop X start align 4 newb: - push ebx - push ecx + mov ecx,[esp] + push ebx ; X cmp ebx,10 jb yesbpix @@ -1204,7 +1241,7 @@ stretch: imul eax,[bgrx] push eax mov eax,[ebp+0] - add eax,[esp+8] + add eax,[esp+4] imul eax,[bgrx] cdq movzx ebx,word [scrxy+2] @@ -1226,7 +1263,7 @@ nostretch: imul eax,[bgrx] push eax mov eax,[ebp+0] - add eax,[esp+8] + add eax,[esp+4] movzx ebx,word [bgrxy+2] cdq div ebx @@ -1237,13 +1274,11 @@ nostretch: align 4 notiled: lea ecx,[eax+eax*2] - mcall 39,2 + add ecx,[ebp-4] + mov eax,[ecx] ;-------------------------------------- align 4 nobpix: - pop ecx - pop ebx - mov edx,eax mov eax,[image] @@ -1259,14 +1294,17 @@ nobpix: inc eax mov [image],eax + + pop ebx + inc ebx mov eax,[yw] inc eax cmp ebx,eax jb newb - - xor ebx,ebx + + pop ecx inc ecx mov eax,[ya] @@ -1281,10 +1319,16 @@ nobpix: align 4 notop: cmp ecx,52 - jnz newb + jnz new_line ;-------------------------------------- align 4 toponly: + mcall 15,7,[ebp-4] + test eax,eax + jnz @f + mcall 68,1 + jmp toponly +@@: xor edx,edx mcall 7,image_area,<52,52> ;-------------------------------------- @@ -1364,7 +1408,6 @@ founde: align 4 draw_window2: mcall 12,1 - ; DRAW WINDOW xor eax,eax ; function 0 : define and draw window mov ebx,[ebp+0-2] @@ -1411,74 +1454,6 @@ draw_icon_end_2: mcall 12,2 ret ;------------------------------------------------------------------------------ -shape_window: -; give the shape reference area - mcall 50,0,shape_reference -; give the shape scale 32 x 32 -> 128 x 128 ecx = 2 -; you dont have to give this, scale is 1:1 by default -; mcall 50,1,2 - ret -;------------------------------------------------------------------------------ -shape_reference: ; 32 x 32 ( window_size_X + 1 ) * ( window_size_Y + 1 ) - -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 - -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 - -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 - -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -;------------------------------------------------------------------------------ tl dd 8 yw: dd 51 ya dd 0 @@ -1517,17 +1492,12 @@ cur_str dd ? cur_band dd ? sel_icon1 rd 1 icon_count rd 1 +strip_file rd 1 ;------------------------------------------------------------------------------ align 4 param_str rb 31 ;------------------------------------------------------------------------------ align 4 -gif_file rb GIF_SIZE -;------------------------------------------------------------------------------ -align 4 -strip_file rb RAW_SIZE -;------------------------------------------------------------------------------ -align 4 process_table: rb 0x400 ;------------------------------------------------------------------------------ @@ -1551,8 +1521,4 @@ align 4 image_area: rb 52*52*3 ;------------------------------------------------------------------------------ -;align 4 -;shape_reference_0: -; rb 52*52 ; ( window_size_X + 1 ) * ( window_size_Y + 1 ) -;------------------------------------------------------------------------------ I_END: