forked from KolibriOS/kolibrios
4daae89053
updated sysfunc.txt *programs new icons and logo for CPUID and ICON added new version of @ICON and ICONMNGR fixes in iconedit and calendar from DedOK new algoritm of fill background in pic4 all apps (fasm-writen only) rewriten to use common macros.inc for easy recompile in fastcall mode (there is a bug in https; run need rewrite to use common macros.inc) small fixes in build_all.bat script git-svn-id: svn://kolibrios.org@485 a494cfbc-eb01-0410-851d-a64ba20cac60
419 lines
5.6 KiB
PHP
419 lines
5.6 KiB
PHP
;
|
||
; <EFBFBD> ¡®â á ª à⨪ ¬¨ ¨«¨ ¨å ®¡à § ¬¨
|
||
;
|
||
; Author: Trans
|
||
; Date: 08.03.2005
|
||
; Compiler: FASM
|
||
; Target: Hunter - MeOS game
|
||
;
|
||
|
||
;
|
||
; In: DS:ESI - 㪠§ â¥«ì ®¡à § ª à⨪¨ ¢ RGB
|
||
; EAX - X ª®®à¤¨ â * 65536 + Y ª®®à¤¨ â
|
||
; //EBX - Z ª®®à¤¨ â
|
||
; Out:
|
||
draw_pict:
|
||
pusha
|
||
mov edx,eax
|
||
shr edx,16
|
||
xor edi,edi
|
||
mov di,ax
|
||
shl di,3 ; *8
|
||
shl ax,1 ; *2
|
||
add ax,di ; = *10
|
||
shl ax,5 ; = *320
|
||
mov di,ax
|
||
shr eax,16
|
||
add di,ax ; di=Y*320+X
|
||
mov eax,edi
|
||
shl eax,1 ; = *2
|
||
add edi,eax ; = (Y*320+X)*3
|
||
add edi,buffer00
|
||
lodsw
|
||
shl eax,16
|
||
lodsw
|
||
ror eax,16
|
||
xor ecx,ecx
|
||
mov cx,320
|
||
sub cx,dx
|
||
xor edx,edx
|
||
cmp cx,ax
|
||
jae dp_loc_00
|
||
sub ax,cx
|
||
mov dx,ax
|
||
shl ax,1
|
||
add dx,ax ; invisible part for X
|
||
mov ax,cx
|
||
dp_loc_00:
|
||
mov cx,ax
|
||
xor ebx,ebx
|
||
mov bx,320
|
||
sub bx,ax
|
||
mov ax,bx
|
||
shl ax,1
|
||
add bx,ax ; additional offset for X
|
||
shr eax,16
|
||
xchg ecx,eax
|
||
dp_loc_01:
|
||
push ecx
|
||
push eax
|
||
mov ecx,eax
|
||
dp_loc_02:
|
||
mov eax,[esi]
|
||
and eax,00FFFFFFh
|
||
cmp eax,00FFFFFFh
|
||
jnz dp_loc_03_next
|
||
add esi,3
|
||
add edi,3
|
||
jmp dp_loc_04
|
||
dp_loc_03_next:
|
||
movsb
|
||
movsw
|
||
dp_loc_04:
|
||
loop dp_loc_02
|
||
add esi,edx
|
||
add edi,ebx
|
||
pop eax
|
||
pop ecx
|
||
loop dp_loc_01
|
||
popa
|
||
retn
|
||
|
||
;
|
||
; In: DS:ESI - 㪠§ â¥«ì ®¡à § ª à⨪¨ ¢ RGB
|
||
; EAX - X ª®®à¤¨ â * 65536 + Y ª®®à¤¨ â
|
||
; //EBX - Z ª®®à¤¨ â
|
||
; Out:
|
||
draw_pict_scale_div_2:
|
||
pusha
|
||
mov edi,buffer01
|
||
lodsd
|
||
xor ebx,ebx
|
||
xor ebp,ebp
|
||
mov bx,ax
|
||
mov bp,ax
|
||
shl ebp,1
|
||
add ebp,ebx
|
||
shr ax,1
|
||
stosw
|
||
mov bx,ax
|
||
shr eax,17
|
||
stosw
|
||
xor ecx,ecx
|
||
mov cx,ax
|
||
dpsd2_loc_00:
|
||
push ecx
|
||
mov ecx,ebx
|
||
dpsd2_loc_01:
|
||
push ecx
|
||
mov ecx,3
|
||
dpsd2_loc_02:
|
||
xor eax,eax
|
||
mov edx,eax
|
||
mov al,[esi]
|
||
mov dl,[esi+3]
|
||
add eax,edx
|
||
mov dl,[esi+ebp]
|
||
add eax,edx
|
||
mov dl,[esi+ebp+3]
|
||
add eax,edx
|
||
shr eax,2
|
||
stosb
|
||
inc esi
|
||
loop dpsd2_loc_02
|
||
add esi,3
|
||
pop ecx
|
||
loop dpsd2_loc_01
|
||
add esi,ebp
|
||
pop ecx
|
||
loop dpsd2_loc_00
|
||
popa
|
||
pusha
|
||
mov esi,buffer01
|
||
call draw_pict
|
||
popa
|
||
retn
|
||
|
||
|
||
;
|
||
; In:
|
||
; Out:
|
||
draw_backside:
|
||
pusha
|
||
mov edi,buffer00
|
||
mov ecx,50
|
||
mov eax,00FFFFFFh
|
||
dbs_loc_00:
|
||
push ecx
|
||
mov ecx,320
|
||
dbs_loc_01:
|
||
mov ebx,eax
|
||
stosw
|
||
shr eax,16
|
||
stosb
|
||
mov eax,ebx
|
||
stosw
|
||
shr eax,16
|
||
stosb
|
||
mov eax,ebx
|
||
loop dbs_loc_01
|
||
sub eax,00010100h
|
||
pop ecx
|
||
loop dbs_loc_00
|
||
mov ecx,100
|
||
mov eax,0000C000h
|
||
dbs_loc_02:
|
||
push ecx
|
||
mov ecx,320
|
||
dbs_loc_03:
|
||
mov ebx,eax
|
||
stosw
|
||
shr eax,16
|
||
stosb
|
||
mov eax,ebx
|
||
loop dbs_loc_03
|
||
add eax,00010001h
|
||
pop ecx
|
||
loop dbs_loc_02
|
||
popa
|
||
retn
|
||
|
||
;
|
||
; In:
|
||
; Out:
|
||
buffer_scale_on_2:
|
||
pusha
|
||
mov esi,buffer00
|
||
mov edi,buffer02
|
||
mov ecx,200
|
||
bso2_loc_00:
|
||
push ecx
|
||
mov ecx,2
|
||
bso2_loc_01:
|
||
push ecx
|
||
push esi
|
||
mov ecx,320
|
||
bso2_loc_02:
|
||
mov eax,[esi]
|
||
and eax,00FFFFFFh
|
||
mov ebx,eax
|
||
stosw
|
||
shr eax,16
|
||
stosb
|
||
mov eax,ebx
|
||
stosw
|
||
shr eax,16
|
||
stosb
|
||
add esi,3
|
||
loop bso2_loc_02
|
||
pop esi
|
||
pop ecx
|
||
loop bso2_loc_01
|
||
add esi,320*3
|
||
pop ecx
|
||
loop bso2_loc_00
|
||
popa
|
||
retn
|
||
|
||
|
||
;
|
||
; In: EAX = X coordinate * 65536 + Y coordinate
|
||
; EBX = Number
|
||
; Out:
|
||
number_print:
|
||
pusha
|
||
mov edi,buf_local
|
||
mov ebp,eax
|
||
mov eax,ebx
|
||
or eax,eax
|
||
jz np_loc_null
|
||
mov ebx,100
|
||
mov ecx,5
|
||
np_loc_00:
|
||
xor edx,edx
|
||
div ebx
|
||
xchg eax,edx
|
||
aam
|
||
stosw
|
||
mov eax,edx
|
||
loop np_loc_00
|
||
dec edi
|
||
mov eax,ebp
|
||
mov ecx,10
|
||
np_loc_01:
|
||
cmp byte [edi],0
|
||
jnz np_loc_02
|
||
dec edi
|
||
loop np_loc_01
|
||
np_loc_02:
|
||
xor ebx,ebx
|
||
mov bl,[edi]
|
||
shl ebx,2
|
||
add ebx,pointer_digit_table
|
||
mov esi,[ebx]
|
||
call draw_pict
|
||
add eax,10*65536+0
|
||
dec edi
|
||
loop np_loc_02
|
||
popa
|
||
retn
|
||
np_loc_null:
|
||
mov eax,ebp
|
||
mov esi,[pointer_digit_table]
|
||
call draw_pict
|
||
popa
|
||
retn
|
||
pointer_digit_table:
|
||
dd buf_num0, buf_num1, buf_num2, buf_num3, buf_num4
|
||
dd buf_num5, buf_num6, buf_num7, buf_num8, buf_num9
|
||
buf_local:
|
||
times 12 db 0
|
||
|
||
|
||
;
|
||
; In: EAX = X*65536+Y
|
||
; Out:
|
||
draw_lives:
|
||
pusha
|
||
mov esi,buf_heart
|
||
xor ecx,ecx
|
||
mov cl,[lives_count]
|
||
cmp cl,0
|
||
jz dl_loc_01
|
||
dl_loc_00:
|
||
call draw_pict
|
||
add eax,16*65536+0
|
||
loop dl_loc_00
|
||
dl_loc_01:
|
||
popa
|
||
retn
|
||
|
||
;
|
||
; In:
|
||
; Out:
|
||
draw_mushka:
|
||
mov esi,buf_mushka
|
||
mov eax,[mouse_coord]
|
||
ror eax,16
|
||
cmp ax,16
|
||
jae dm_loc_00
|
||
mov ax,16
|
||
dm_loc_00:
|
||
sub ax,16
|
||
rol eax,16
|
||
cmp ax,16
|
||
jae dm_loc_01
|
||
mov ax,16
|
||
dm_loc_01:
|
||
sub ax,16
|
||
call draw_pict
|
||
retn
|
||
|
||
;
|
||
; In: eax - hole coordinate
|
||
; Out:
|
||
draw_hole:
|
||
mov esi,buf_hole
|
||
; mov eax,[current_hole]
|
||
cmp eax,0
|
||
jz dh_loc_02
|
||
ror eax,16
|
||
cmp ax,8
|
||
jae dh_loc_00
|
||
mov ax,8
|
||
dh_loc_00:
|
||
sub ax,8
|
||
rol eax,16
|
||
cmp ax,8
|
||
jae dh_loc_01
|
||
mov ax,8
|
||
dh_loc_01:
|
||
sub ax,8
|
||
call draw_pict_scale_div_2
|
||
dh_loc_02:
|
||
retn
|
||
|
||
;
|
||
;
|
||
;
|
||
draw_promakh:
|
||
mov esi,buf_hole
|
||
xor ecx,ecx
|
||
mov cl,[promakh_count]
|
||
cmp cl,0
|
||
jz dpr_loc_exit
|
||
mov ebx,current_hole
|
||
mov eax,dword [ebx] ;300*65536+180
|
||
dpr_loc_00:
|
||
call draw_hole
|
||
; call draw_pict_scale_div_2
|
||
; sub ax,16
|
||
add ebx,4
|
||
mov eax,dword [ebx]
|
||
loop dpr_loc_00
|
||
dpr_loc_exit:
|
||
retn
|
||
|
||
|
||
;
|
||
; In:
|
||
; Out:
|
||
clear_buffer:
|
||
push eax
|
||
push ecx
|
||
push edi
|
||
mov edi,buffer00
|
||
mov ecx,(320*201*3)/4
|
||
xor eax,eax
|
||
rep stosd
|
||
pop edi
|
||
pop ecx
|
||
pop eax
|
||
retn
|
||
|
||
;
|
||
; In: AX - X ª®®à¤¨ â [0,639]
|
||
; BX - Y ª®®à¤¨ â [0,479]
|
||
; Out:
|
||
refresh_screen:
|
||
pusha
|
||
popa
|
||
retn
|
||
|
||
|
||
;
|
||
; In:
|
||
; Out:
|
||
smooth_filter:
|
||
pusha
|
||
mov ecx,320*200*3
|
||
mov edi,buffer00
|
||
sf_loc_00:
|
||
xor ax,ax
|
||
xor dx,dx ;áç¥â稪
|
||
mov al,[edi]
|
||
shl ax,2 ;*4
|
||
mov dx,ax
|
||
xor ax,ax
|
||
mov al,[edi-320*3]
|
||
add dx,ax
|
||
mov al,[edi-3]
|
||
add dx,ax
|
||
mov al,[edi+3]
|
||
add dx,ax
|
||
mov al,[edi+320*3]
|
||
add dx,ax
|
||
xchg dx,ax
|
||
shr ax,3 ;/8
|
||
mov byte [edi],al
|
||
inc edi
|
||
loop sf_loc_00
|
||
popa
|
||
retn
|
||
;smooth_matrix:
|
||
; db 0, 1, 0 /
|
||
; db 1, 4, 1 / 8
|
||
; db 0, 1, 0 /
|
||
|
||
|