1,5 → 1,5 |
|
; application : View3ds ver. 0.060 - tiny .3ds files viewer. |
; application : View3ds ver. 0.061 - tiny .3ds files viewer. |
; compiler : FASM |
; system : KolibriOS |
; author : Macgub aka Maciej Guba |
35,7 → 35,7 |
MMX = 1 |
SSE = 2 |
SSE2 = 3 |
Ext = MMX ;Ext={ NON | MMX | SSE | SSE2 } |
Ext = SSE2 ;Ext={ NON | MMX | SSE | SSE2 } |
|
; 0 for short names (Menuet-compatible), 1 for long names (Kolibri features) |
USE_LFN = 1 |
93,7 → 93,6 |
call calc_bumpmap_coords ; bump and texture mapping |
call draw_window |
|
|
still: |
|
mov eax,23 ; wait here for event with timeout |
457,6 → 456,180 |
@@: |
|
|
cmp [inc_bright_flag],0 ; increase brightness |
je .no_inc_bright |
movzx ebx,[inc_bright_flag] |
shl ebx,4 |
mov esi,screen |
mov ecx,SIZE_X*SIZE_Y*3 |
if (Ext = MMX)|(Ext = SSE) |
mov bh,bl |
push bx |
shl ebx,16 |
pop bx |
push ebx |
push ebx |
movq mm0,[esp] |
add esp,8 |
else if Ext >= SSE2 |
mov bh,bl |
push bx |
shl ebx,16 |
pop bx |
movd xmm0,ebx |
shufps xmm0,xmm0,0 |
end if |
.oop: |
if Ext=NON |
lodsb |
add al,bl |
jnc @f |
mov byte[esi-1],255 |
loop .oop |
@@: |
mov [esi-1],al |
loop .oop |
else if (Ext=MMX)|(Ext=SSE) |
movq mm1,[esi] |
movq mm2,[esi+8] |
paddusb mm1,mm0 |
paddusb mm2,mm0 |
movq [esi],mm1 |
movq [esi+8],mm2 |
add esi,16 |
sub ecx,16 |
jnz .oop |
else |
movaps xmm1,[esi] |
paddusb xmm1,xmm0 |
movaps [esi],xmm1 |
add esi,16 |
sub ecx,16 |
jnz .oop |
end if |
|
.no_inc_bright: |
|
|
cmp [dec_bright_flag],0 |
je .no_dec_bright |
movzx ebx,[dec_bright_flag] |
shl ebx,4 |
mov esi,screen |
mov ecx,SIZE_X*SIZE_Y*3 |
if (Ext = MMX)|(Ext = SSE) |
mov bh,bl |
push bx |
shl ebx,16 |
pop bx |
push ebx |
push ebx |
movq mm0,[esp] |
add esp,8 |
else if Ext >=SSE2 |
mov bh,bl |
push bx |
shl ebx,16 |
pop bx |
movd xmm0,ebx |
shufps xmm0,xmm0,0 |
end if |
.oop1: |
if Ext=NON |
lodsb |
sub al,bl |
jb @f |
mov [esi-1],al |
loop .oop1 |
@@: |
mov byte[esi-1],0 |
loop .oop1 |
else if (Ext = MMX)|(Ext=SSE) |
movq mm1,[esi] |
psubusb mm1,mm0 |
movq [esi],mm1 |
add esi,8 |
sub ecx,8 |
jnz .oop1 |
else |
movaps xmm1,[esi] |
psubusb xmm1,xmm0 |
movaps [esi],xmm1 |
add esi,16 |
sub ecx,16 |
jnz .oop1 |
end if |
.no_dec_bright: |
;======================================commmented==================== |
if 0 |
if Ext >= SSE |
cmp [max_flag],0 |
je .no_max |
;movzx ebx,[max_flag] |
.again_max: |
; push ecx |
mov edi,screen |
mov ecx,SIZE_X*3/4 |
; ; pxor mm5,mm5 |
xor eax,eax |
rep stosd |
|
mov ecx,(SIZE_X*(SIZE_Y-3))*3/8 |
.calc_max: |
@@: |
movq mm0,[edi+SIZE_X*3] |
movq mm1,[edi-SIZE_X*3] |
movq mm2,[edi-3] |
movq mm3,[edi+3] |
|
pmaxub mm0,mm1 |
pmaxub mm2,mm3 |
pmaxub mm0,mm2 |
|
movq [edi],mm0 |
add edi,8 |
loop @b |
|
xor eax,eax |
mov ecx,SIZE_X*3/4 |
rep stosd |
end if |
|
.no_max: |
|
if Ext >= SSE |
cmp [min_flag],0 |
je .no_min |
; push ecx |
mov edi,screen |
mov ecx,SIZE_X*3/4 |
; ; pxor mm5,mm5 |
xor eax,eax |
rep stosd |
|
mov ecx,(SIZE_X*(SIZE_Y-3))*3/8 |
@@: |
movq mm0,[edi+SIZE_X*3] |
movq mm1,[edi-SIZE_X*3] |
movq mm2,[edi-3] |
movq mm3,[edi+3] |
|
pminub mm0,mm1 |
pminub mm2,mm3 |
pminub mm0,mm2 |
|
movq [edi],mm0 |
add edi,8 |
loop @b |
|
xor eax,eax |
|
mov ecx,SIZE_X*3/4 |
rep stosd |
end if |
.no_min: |
end if |
;========================commented===================================== |
RDTSC |
sub eax,[esp] |
sub eax,41 |
478,10 → 651,15 |
mov edx,5 shl 16 + 23 |
int 0x40 |
|
mov eax,13 |
mov ebx,530*65536+60 |
mov ecx,510*65536+9 |
xor edx,edx |
int 40h |
|
mov eax,4 ; function 4 : write text to window |
mov ebx,5*65536+23 ; [x start] *65536 + [y start] |
mov ecx,0x00ffffff ;-1 |
mov ebx,530*65536+510 ; [x start] *65536 + [y start] |
mov ecx,0x00888888 |
mov edx,STRdata ; pointer to text beginning |
mov esi,10 ; text length |
int 40h |
508,6 → 686,7 |
include "GRD_TEX.INC" |
include "TWO_TEX.INC" |
|
|
alloc_buffer_mem: |
movzx ecx,[size_x] |
movzx eax,[size_y] |