5,11 → 5,6 |
;* 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 |
38,8 → 33,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' |
64,40 → 59,16 |
purge newline |
;------------------------------------------------------------------------------ |
START: ; start of execution |
mcall 68,11 |
; get size of file ICONSTRP.GIF |
mcall 70,finfo |
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 |
cmp ebx,GIF_SIZE |
ja close |
mov esi,gif_file |
mov edi,strip_file |
mov eax,icon_data |
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' |
266,11 → 237,11 |
;------------------------------------------------------------------------------ |
align 4 |
finfo: |
dd 5 |
dd 0 |
dd 0 |
.size dd 0 ;GIF_SIZE |
.point dd process_table ;gif_file |
dd 0 |
dd GIF_SIZE |
dd gif_file |
.path: |
db ICON_STRIP,0 |
rb 31-($-.path) |
356,7 → 327,7 |
|
mcall 10 |
cmp eax,3 |
jne no_f |
jne no_f;ound |
|
mcall 17 |
shr eax,8 |
504,6 → 475,7 |
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 |
775,8 → 747,7 |
and eax,0xfffffff8 |
push eax |
imul eax,ICON_SIZE |
mov ebx,[strip_file] |
lea ebx,[ebx+8+eax] |
lea ebx,[strip_file+8+eax] |
mov ecx,8 |
mov edx,(33-18) shl 16+238 |
;-------------------------------------- |
973,6 → 944,7 |
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 |
999,7 → 971,7 |
; esp-28 = start of thread stack |
; esp-24 = ??? |
; esp-20 = 'AA-F' or... |
; esp-16 = ebp-4 - area of f. 15.6 |
; esp-16 = ??? SHL greedy maniac mode on! |
; esp-12 = ebp+0 = X |
; esp-8 = ebp+4 = Y |
; esp-4 = ebp+8 = adress of icon_data |
1009,6 → 981,7 |
sub esp,12 |
mov ebp,esp |
sub esp,16 |
call shape_window |
call draw_window2 |
mov [create_thread_event],1 |
mcall 40,010101b |
1096,6 → 1069,7 |
align 4 |
fill_paths: |
push esi edi |
; dps '>' |
movzx ecx,byte[str_lens+ebx] |
add esi,[positions+ebx*4] |
push esi |
1120,6 → 1094,8 |
align 4 |
.noms: |
and byte[edi],0 |
; call debug_outstr |
; dps <'<',13,10> |
pop edi esi |
ret |
;-------------------------------------- |
1167,13 → 1143,6 |
;------------------------------------------------------------------------------ |
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] |
1185,24 → 1154,18 |
lea eax,[eax+eax*2] ; multiply x3 |
shl eax,10 ; multiply x1024 |
|
mov edi,[strip_file] |
lea edi,[eax+edi+8] |
lea edi,[eax+strip_file+8] |
xor ebx,ebx |
xor ecx,ecx |
mov esi,edi |
|
mov [pixpos],0 |
;-------------------------------------- |
; loop Y start |
; loop start |
align 4 |
new_line: |
push ecx ; Y |
xor ebx,ebx |
;-------------------------------------- |
; loop X start |
align 4 |
newb: |
mov ecx,[esp] |
push ebx ; X |
push ebx |
push ecx |
|
cmp ebx,10 |
jb yesbpix |
1241,7 → 1204,7 |
imul eax,[bgrx] |
push eax |
mov eax,[ebp+0] |
add eax,[esp+4] |
add eax,[esp+8] |
imul eax,[bgrx] |
cdq |
movzx ebx,word [scrxy+2] |
1263,7 → 1226,7 |
imul eax,[bgrx] |
push eax |
mov eax,[ebp+0] |
add eax,[esp+4] |
add eax,[esp+8] |
movzx ebx,word [bgrxy+2] |
cdq |
div ebx |
1274,11 → 1237,13 |
align 4 |
notiled: |
lea ecx,[eax+eax*2] |
add ecx,[ebp-4] |
mov eax,[ecx] |
mcall 39,2 |
;-------------------------------------- |
align 4 |
nobpix: |
pop ecx |
pop ebx |
|
mov edx,eax |
mov eax,[image] |
|
1294,9 → 1259,6 |
|
inc eax |
mov [image],eax |
|
pop ebx |
|
inc ebx |
|
mov eax,[yw] |
1304,7 → 1266,7 |
cmp ebx,eax |
jb newb |
|
pop ecx |
xor ebx,ebx |
|
inc ecx |
mov eax,[ya] |
1319,16 → 1281,10 |
align 4 |
notop: |
cmp ecx,52 |
jnz new_line |
jnz newb |
;-------------------------------------- |
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> |
;-------------------------------------- |
1408,6 → 1364,7 |
align 4 |
draw_window2: |
mcall 12,1 |
|
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,[ebp+0-2] |
1454,6 → 1411,74 |
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 |
1492,12 → 1517,17 |
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 |
;------------------------------------------------------------------------------ |
1521,4 → 1551,8 |
image_area: |
rb 52*52*3 |
;------------------------------------------------------------------------------ |
;align 4 |
;shape_reference_0: |
; rb 52*52 ; ( window_size_X + 1 ) * ( window_size_Y + 1 ) |
;------------------------------------------------------------------------------ |
I_END: |