c28f9414e8
git-svn-id: svn://kolibrios.org@6210 a494cfbc-eb01-0410-851d-a64ba20cac60
1222 lines
24 KiB
PHP
1222 lines
24 KiB
PHP
;
|
||
;*** äãªæ¨¨ à¨á®¢ ¨ï ¢ ¡ãä¥à¥ ***
|
||
;
|
||
|
||
align 16
|
||
proc buf_draw_buf, buf_struc:dword
|
||
pushad
|
||
mov edi,dword[buf_struc]
|
||
cmp buf2d_bits,24
|
||
jne .error
|
||
mov eax,7
|
||
mov ebx,buf2d_data
|
||
|
||
mov ecx,buf2d_w
|
||
ror ecx,16
|
||
mov edx,buf2d_h
|
||
mov cx,dx
|
||
|
||
mov edx,buf2d_size_lt
|
||
ror edx,16
|
||
int 0x40
|
||
jmp .end_draw_24
|
||
.error:
|
||
stdcall print_err,sz_buf2d_draw,txt_err_n24b
|
||
.end_draw_24:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
align 4
|
||
txt_err_size_w16 db 'image width < 16 pixels',13,10,0
|
||
|
||
;input:
|
||
; ebx = coord x
|
||
; ecx = coord y
|
||
; edx = pixel color
|
||
; edi = pointer to buffer struct
|
||
align 4
|
||
draw_pixel:
|
||
;cmp buf2d_bits,24
|
||
;jne @f
|
||
bt ebx,31
|
||
jc @f
|
||
bt ecx,31
|
||
jc @f
|
||
cmp ebx,buf2d_w
|
||
jge @f
|
||
cmp ecx,buf2d_h
|
||
jge @f
|
||
push esi
|
||
mov esi,buf2d_w ;size x
|
||
imul esi,ecx ;size_x*y
|
||
add esi,ebx ;size_x*y+x
|
||
cmp buf2d_bits,8
|
||
je .beg8
|
||
cmp buf2d_bits,32
|
||
je .beg32
|
||
lea esi,[esi+esi*2] ;(size_x*y+x)*3
|
||
add esi,buf2d_data ;ptr+(size_x*y+x)*3
|
||
mov word[esi],dx ;copy pixel color
|
||
ror edx,16
|
||
mov byte[esi+2],dl
|
||
ror edx,16
|
||
jmp .end_draw
|
||
.beg8: ;à¨á®¢ ¨¥ â®çª¨ ¢ 8 ¡¨â®¬ ¡ãä¥à¥
|
||
add esi,buf2d_data ;ptr+(size_x*y+x)
|
||
mov byte[esi],dl
|
||
jmp .end_draw
|
||
.beg32: ;à¨á®¢ ¨¥ â®çª¨ ¢ 32 ¡¨â®¬ ¡ãä¥à¥
|
||
shl esi,2
|
||
add esi,buf2d_data ;ptr+(size_x*y+x)
|
||
mov dword[esi],edx
|
||
.end_draw:
|
||
pop esi
|
||
@@:
|
||
ret
|
||
|
||
;input:
|
||
; ebx = coord x
|
||
; ecx = coord y
|
||
; edi = pointer to buffer struct
|
||
;output:
|
||
; eax = 梥â â®çª¨
|
||
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
|
||
align 4
|
||
get_pixel_8:
|
||
mov eax,0xffffffff
|
||
|
||
bt ebx,31
|
||
jc @f
|
||
bt ecx,31
|
||
jc @f
|
||
cmp ebx,buf2d_w
|
||
jge @f
|
||
cmp ecx,buf2d_h
|
||
jge @f
|
||
push esi
|
||
mov esi,buf2d_w ;size x
|
||
imul esi,ecx ;size_x*y
|
||
add esi,ebx ;size_x*y+x
|
||
add esi,buf2d_data ;ptr+(size_x*y+x)
|
||
|
||
movzx eax,byte[esi] ;copy pixel color
|
||
pop esi
|
||
@@:
|
||
ret
|
||
|
||
;input:
|
||
; ebx = coord x
|
||
; ecx = coord y
|
||
; edi = pointer to buffer struct
|
||
;output:
|
||
; eax = 梥â â®çª¨
|
||
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
|
||
align 4
|
||
get_pixel_24:
|
||
mov eax,0xffffffff
|
||
|
||
bt ebx,31
|
||
jc @f
|
||
bt ecx,31
|
||
jc @f
|
||
cmp ebx,buf2d_w
|
||
jge @f
|
||
cmp ecx,buf2d_h
|
||
jge @f
|
||
push esi
|
||
mov esi,buf2d_w ;size x
|
||
imul esi,ecx ;size_x*y
|
||
add esi,ebx ;size_x*y+x
|
||
lea esi,[esi+esi*2] ;(size_x*y+x)*3
|
||
add esi,buf2d_data ;ptr+(size_x*y+x)*3
|
||
|
||
xor eax,eax
|
||
mov ax,word[esi] ;copy pixel color
|
||
ror eax,16
|
||
mov al,byte[esi+2]
|
||
ror eax,16
|
||
pop esi
|
||
@@:
|
||
ret
|
||
|
||
;input:
|
||
; ebx = coord x
|
||
; ecx = coord y
|
||
; edi = pointer to buffer struct
|
||
;output:
|
||
; eax = 梥â â®çª¨
|
||
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
|
||
align 4
|
||
get_pixel_32:
|
||
mov eax,0xffffffff
|
||
|
||
bt ebx,31
|
||
jc @f
|
||
bt ecx,31
|
||
jc @f
|
||
cmp ebx,buf2d_w
|
||
jge @f
|
||
cmp ecx,buf2d_h
|
||
jge @f
|
||
push esi
|
||
mov esi,buf2d_w ;size x
|
||
imul esi,ecx ;size_x*y
|
||
add esi,ebx ;size_x*y+x
|
||
shl esi,2
|
||
add esi,buf2d_data ;ptr+(size_x*y+x)*4
|
||
|
||
mov eax,dword[esi] ;copy pixel color
|
||
pop esi
|
||
@@:
|
||
ret
|
||
|
||
;input:
|
||
; ebx = coord x
|
||
; ecx = coord y
|
||
; edx = pixel color + transparent
|
||
; edi = pointer to buffer struct
|
||
; t_prop, m_prop - ª®íä¨æ¨¥âë ¥®¡å®¤¨¬ë¥ ¤«ï ¢ëç¨á«¥¨ï á⥯¥¨ ¯à®§à ç®áâ¨
|
||
align 16
|
||
proc draw_pixel_transp, t_prop:dword, m_prop:dword
|
||
locals
|
||
transp_32 dd 0 ;梥â à¨á㥬®© â®çª¨ + ¯à®§à ç®áâì
|
||
endl
|
||
;cmp buf2d_bits,24
|
||
;jne @f
|
||
bt ebx,31
|
||
jc @f
|
||
bt ecx,31
|
||
jc @f
|
||
cmp ebx,buf2d_w
|
||
jge @f
|
||
cmp ecx,buf2d_h
|
||
jge @f
|
||
push eax ebx edx edi esi
|
||
mov esi,buf2d_w ;size x
|
||
imul esi,ecx ;size_x*y
|
||
add esi,ebx ;size_x*y+x
|
||
lea esi,[esi+esi*2] ;(size_x*y+x)*3
|
||
add esi,buf2d_data ;ptr+(size_x*y+x)*3
|
||
|
||
mov edi,esi ;㪠§ ⥫ì 梥â ä®
|
||
mov [transp_32],edx ;梥â à¨á㥬®© â®çª¨
|
||
|
||
xor edx,edx
|
||
mov eax,[t_prop]
|
||
shl eax,8 ;*=256
|
||
mov ebx,[m_prop]
|
||
div ebx ;¢ëç¨á«ï¥¬ ª®íä. ¯à®§à ç®á⨠(¤®«¦¥ ¡ëâì ®â 0 ¤® 255)
|
||
bt ax,8
|
||
jnc .over_255
|
||
;¥á«¨ ª®¥ä. ¯à®§à ç®á⨠>=256 ⮠㬥ìè ¥¬ ¥£® ¤® 255
|
||
mov al,0xff
|
||
.over_255:
|
||
|
||
mov esi,ebp
|
||
sub esi,4 ;㪠§ ⥫ì transp_32
|
||
mov byte[esi+3],al ;¯à®§à ç®áâì à¨á㥬®© â®çª¨
|
||
|
||
call combine_colors_0
|
||
pop esi edi edx ebx eax
|
||
@@:
|
||
ret
|
||
endp
|
||
|
||
align 4
|
||
proc buf_clear, buf_struc:dword, color:dword ;®ç¨á⪠¡ãä¥à § ¤ ë¬ æ¢¥â®¬
|
||
pushad
|
||
mov edi,dword[buf_struc]
|
||
|
||
mov ecx,buf2d_w
|
||
mov ebx,buf2d_h
|
||
imul ecx,ebx
|
||
|
||
cld
|
||
|
||
cmp buf2d_bits,8
|
||
jne .end_clear_8
|
||
mov edi,buf2d_data
|
||
mov al,byte[color]
|
||
rep stosb
|
||
jmp .end_clear_32
|
||
.end_clear_8:
|
||
|
||
cmp buf2d_bits,24
|
||
jne .end_clear_24
|
||
mov edi,buf2d_data
|
||
mov eax,dword[color]
|
||
mov ebx,eax
|
||
shr ebx,16
|
||
@@:
|
||
stosw
|
||
mov byte[edi],bl
|
||
inc edi
|
||
loop @b
|
||
jmp .end_clear_32
|
||
.end_clear_24:
|
||
|
||
cmp buf2d_bits,32
|
||
jne .end_clear_32
|
||
mov edi,buf2d_data
|
||
mov eax,dword[color]
|
||
rep stosd
|
||
;jmp .end_clear_32
|
||
.end_clear_32:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
align 4
|
||
proc buf_line_brs, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, coord_y1:dword, color:dword
|
||
locals
|
||
loc_1 dd ?
|
||
loc_2 dd ?
|
||
napravl db ?
|
||
endl
|
||
pushad
|
||
mov eax,dword[coord_x1]
|
||
sub eax,dword[coord_x0]
|
||
bt eax,31
|
||
jae @f
|
||
neg eax
|
||
inc eax
|
||
@@:
|
||
mov ebx,dword[coord_y1]
|
||
sub ebx,dword[coord_y0]
|
||
jnz @f
|
||
;¥á«¨ § ¤ £®à¨§®â «ì ï «¨¨ï y0=y1
|
||
stdcall buf_line_h, [buf_struc], [coord_x0], [coord_y0], [coord_x1], [color]
|
||
jmp .coord_end
|
||
@@:
|
||
bt ebx,31
|
||
jae @f
|
||
neg ebx
|
||
inc ebx
|
||
@@:
|
||
mov edx,dword[color]
|
||
|
||
mov [napravl],byte 0 ;bool steep=false
|
||
cmp eax,ebx
|
||
jle @f
|
||
mov [napravl],byte 1 ;bool steep=true
|
||
swap dword[coord_x0],dword[coord_y0] ;swap(x0, y0);
|
||
swap dword[coord_x1],dword[coord_y1] ;swap(x1, y1);
|
||
@@:
|
||
mov eax,dword[coord_y0] ;x0
|
||
cmp eax,dword[coord_y1] ;if(x0>x1)
|
||
jle @f
|
||
swap dword[coord_y0],dword[coord_y1] ;swap(x0, x1);
|
||
swap dword[coord_x0],dword[coord_x1] ;swap(y0, y1);
|
||
@@:
|
||
|
||
; int deltax esi
|
||
; int deltay edi
|
||
; int error ebp-6
|
||
; int ystep ebp-8
|
||
|
||
mov eax,dword[coord_y0]
|
||
mov esi,dword[coord_y1]
|
||
sub esi,eax ;deltax = y1-y0
|
||
mov ebx,esi
|
||
shr ebx,1
|
||
mov [loc_1],ebx ;error = deltax/2
|
||
|
||
mov eax,dword[coord_x0]
|
||
mov edi,dword[coord_x1]
|
||
mov [loc_2],dword -1 ;ystep = -1
|
||
cmp eax,edi ;if (x0<x1) ystep = 1;
|
||
jge @f
|
||
mov [loc_2],dword 1 ;ystep = 1
|
||
@@:
|
||
sub edi,eax ;x1-x0
|
||
|
||
bts edi,31
|
||
jae @f
|
||
neg edi
|
||
inc edi
|
||
@@:
|
||
and edi,0x7fffffff ;deltay = abs(x1-x0)
|
||
|
||
mov eax,edi
|
||
mov edi,[buf_struc]
|
||
cmp buf2d_bits,8
|
||
je @f
|
||
cmp buf2d_bits,24
|
||
je @f
|
||
jmp .coord_end
|
||
@@:
|
||
|
||
cmp [napravl],0
|
||
jne .coord_yx
|
||
mov ebx,dword[coord_x0]
|
||
mov ecx,dword[coord_y0]
|
||
|
||
@@: ;for (x=x0 ; x<x1; x++) ;------------------------------------
|
||
cmp ecx,dword[coord_y1]
|
||
jg @f ;jge ???
|
||
call draw_pixel
|
||
|
||
sub dword[loc_1],eax ;error -= deltay
|
||
cmp dword[loc_1],0 ;if(error<0)
|
||
jge .if0
|
||
add ebx,[loc_2] ;y += ystep
|
||
add [loc_1],esi ;error += deltax
|
||
.if0:
|
||
inc ecx
|
||
jmp @b
|
||
@@:
|
||
jmp .coord_end
|
||
.coord_yx:
|
||
mov ebx,dword[coord_y0]
|
||
mov ecx,dword[coord_x0]
|
||
|
||
@@: ;for (x=x0 ; x<x1; x++) ;------------------------------------
|
||
cmp ebx,dword[coord_y1]
|
||
jg @f ;jge ???
|
||
call draw_pixel
|
||
|
||
sub dword[loc_1],eax ;error -= deltay
|
||
cmp dword[loc_1],0 ;if(error<0)
|
||
jge .if1
|
||
add ecx,[loc_2] ;y += ystep
|
||
add [loc_1],esi ;error += deltax
|
||
.if1:
|
||
inc ebx
|
||
jmp @b
|
||
@@:
|
||
.coord_end:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
;à¨á®¢ ¨¥ ᣫ ¦¥®© «¨¨¨
|
||
align 4
|
||
proc buf_line_brs_sm, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, coord_y1:dword, color:dword
|
||
locals
|
||
loc_1 dd ?
|
||
loc_2 dd ?
|
||
napravl db ?
|
||
endl
|
||
pushad
|
||
mov eax,dword[coord_x1]
|
||
sub eax,dword[coord_x0]
|
||
bt eax,31
|
||
jae @f
|
||
neg eax
|
||
inc eax
|
||
@@:
|
||
mov ebx,dword[coord_y1]
|
||
sub ebx,dword[coord_y0]
|
||
jnz @f
|
||
;¥á«¨ § ¤ £®à¨§®â «ì ï «¨¨ï y0=y1
|
||
stdcall buf_line_h, [buf_struc], [coord_x0], [coord_y0], [coord_x1], [color]
|
||
jmp .coord_end
|
||
@@:
|
||
bt ebx,31
|
||
jae @f
|
||
neg ebx
|
||
inc ebx
|
||
@@:
|
||
mov edx,dword[color]
|
||
|
||
mov [napravl],byte 0 ;bool steep=false
|
||
cmp eax,ebx
|
||
jle @f
|
||
mov [napravl],byte 1 ;bool steep=true
|
||
swap dword[coord_x0],dword[coord_y0] ;swap(x0, y0);
|
||
swap dword[coord_x1],dword[coord_y1] ;swap(x1, y1);
|
||
@@:
|
||
mov eax,dword[coord_y0] ;x0
|
||
cmp eax,dword[coord_y1] ;if(x0>x1)
|
||
jle @f
|
||
swap dword[coord_y0],dword[coord_y1] ;swap(x0, x1);
|
||
swap dword[coord_x0],dword[coord_x1] ;swap(y0, y1);
|
||
@@:
|
||
|
||
; int deltax esi
|
||
; int deltay edi
|
||
; int error ebp-6
|
||
; int ystep ebp-8
|
||
|
||
mov eax,dword[coord_y0]
|
||
mov esi,dword[coord_y1]
|
||
sub esi,eax ;deltax = y1-y0
|
||
mov ebx,esi
|
||
shr ebx,1
|
||
mov [loc_1],ebx ;error = deltax/2
|
||
|
||
mov eax,dword[coord_x0]
|
||
mov edi,dword[coord_x1]
|
||
mov [loc_2],dword -1 ;ystep = -1
|
||
cmp eax,edi ;if (x0<x1) ystep = 1;
|
||
jge @f
|
||
mov [loc_2],dword 1 ;ystep = 1
|
||
@@:
|
||
sub edi,eax ;x1-x0
|
||
|
||
bts edi,31
|
||
jae @f
|
||
neg edi
|
||
inc edi
|
||
@@:
|
||
and edi,0x7fffffff ;deltay = abs(x1-x0)
|
||
|
||
mov eax,edi
|
||
mov edi,[buf_struc]
|
||
cmp buf2d_bits,24
|
||
jne .coord_end
|
||
|
||
cmp [napravl],0
|
||
jne .coord_yx
|
||
mov ebx,dword[coord_x0]
|
||
mov ecx,dword[coord_y0]
|
||
|
||
@@: ;for (x=x0 ; x<x1; x++) ;------------------------------------
|
||
cmp ecx,dword[coord_y1]
|
||
jg @f ;jge ???
|
||
push eax
|
||
mov eax,esi
|
||
sub eax,[loc_1]
|
||
stdcall draw_pixel_transp, eax,esi
|
||
pop eax
|
||
add ebx,[loc_2]
|
||
stdcall draw_pixel_transp, [loc_1],esi
|
||
sub ebx,[loc_2]
|
||
|
||
sub dword[loc_1],eax ;error -= deltay
|
||
cmp dword[loc_1],0 ;if(error<0)
|
||
jge .if0
|
||
add ebx,[loc_2] ;y += ystep
|
||
add [loc_1],esi ;error += deltax
|
||
.if0:
|
||
inc ecx
|
||
jmp @b
|
||
@@:
|
||
jmp .coord_end
|
||
.coord_yx:
|
||
mov ebx,dword[coord_y0]
|
||
mov ecx,dword[coord_x0]
|
||
|
||
@@: ;for (x=x0 ; x<x1; x++) ;------------------------------------
|
||
cmp ebx,dword[coord_y1]
|
||
jg @f ;jge ???
|
||
push eax
|
||
mov eax,esi
|
||
sub eax,[loc_1]
|
||
stdcall draw_pixel_transp, eax,esi
|
||
pop eax
|
||
add ecx,[loc_2]
|
||
stdcall draw_pixel_transp, [loc_1],esi
|
||
sub ecx,[loc_2]
|
||
|
||
sub dword[loc_1],eax ;error -= deltay
|
||
cmp dword[loc_1],0 ;if(error<0)
|
||
jge .if1
|
||
add ecx,[loc_2] ;y += ystep
|
||
add [loc_1],esi ;error += deltax
|
||
.if1:
|
||
inc ebx
|
||
jmp @b
|
||
@@:
|
||
.coord_end:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
;à¨á®¢ ¨¥ £®à¨§®â «ì®© «¨¨¨, ¯®â®¬ã ¥â ¯ à ¬¥âà coord_y1
|
||
align 4
|
||
proc buf_line_h, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, color:dword
|
||
pushad
|
||
pushfd
|
||
mov edi,[buf_struc]
|
||
cmp buf2d_bits,8
|
||
je @f
|
||
cmp buf2d_bits,24
|
||
je @f
|
||
jmp .end24
|
||
@@: ;®¯à¥¤¥«¥¨¥ ª®®à¤¨ â «¨¨¨ ®â®á¨â¥«ì® ¡ãä¥à
|
||
|
||
mov ecx,dword[coord_y0]
|
||
bt ecx,31
|
||
jc .end24 ;¥á«¨ ª®®à¤¨ â y0 ®âà¨æ ⥫ì ï
|
||
cmp ecx,buf2d_h
|
||
jge .end24 ;¥á«¨ ª®®à¤¨ â y0 ¡®«ìè¥ ¢ëá®âë ¡ãä¥à
|
||
|
||
mov ebx,dword[coord_x0]
|
||
mov esi,dword[coord_x1]
|
||
cmp ebx,esi
|
||
jle @f
|
||
xchg ebx,esi ;¥á«¨ x0 > x1 â® ¬¥ï¥¬ ¬¥áâ ¬¨ x0 ¨ x1
|
||
@@:
|
||
bt ebx,31
|
||
jae @f
|
||
;¥á«¨ ª®®à¤¨ â x0 ®âà¨æ ⥫ì ï
|
||
xor ebx,ebx
|
||
@@:
|
||
cmp esi,buf2d_w
|
||
jl @f
|
||
;¥á«¨ ª®®à¤¨ â x0 ¡®«ìè¥ è¨à¨ë ¡ãä¥à
|
||
mov esi,buf2d_w
|
||
dec esi
|
||
@@:
|
||
cmp ebx,esi
|
||
jg .end24 ;¥á«¨ x0 > x1 ¬®¦¥â ¢®§¨ªãâì ª®£¤ ®¡¥ ª®®à¤¨ âë x0, x1 室¨«¨áì § ®¤¨¬ ¨§ ¯à¥¤¥«®¢ ¡ãä¥à
|
||
|
||
cmp buf2d_bits,24
|
||
je .beg24
|
||
;à¨á®¢ ¨¥ ¢ 8 ¡¨â®¬ ¡ãä¥à¥
|
||
;¢ edx ¢ëç¨á«ï¥¬ ç «® 1-© â®çª¨ «¨¨¨ ¢ ¡ãä¥à¥ ¨§®¡à ¦¥¨ï
|
||
mov edx,buf2d_w ;size x
|
||
imul edx,ecx ;size_x*y
|
||
add edx,ebx ;size_x*y+x
|
||
add edx,buf2d_data ;ptr+(size_x*y+x)
|
||
mov edi,edx ;⥯¥àì ¬®¦¥¬ ¯®àâ¨âì 㪠§ â¥«ì ¡ãä¥à
|
||
|
||
mov ecx,esi
|
||
sub ecx,ebx ;¢ ecx ª®««¨ç¥á⢮ â®ç¥ª «¨¨¨ ¢ë¢®¤¨¬ëå ¢ ¡ãä¥à
|
||
inc ecx ;çâ®-¡ë ¯®á«¥¤ïï â®çª «¨¨¨ â ª¦¥ ®â®¡à ¦ « áì
|
||
mov eax,dword[color] ;¡ã¤¥¬ ¨á¯®«ì§®¢ âì ⮫쪮 § 票¥ ¢ al
|
||
cld
|
||
rep stosb ;横« ¯® ®á¨ x ®â x0 ¤® x1 (¢ª«îç ï x1)
|
||
jmp .end24
|
||
|
||
.beg24: ;à¨á®¢ ¨¥ ¢ 24 ¡¨â®¬ ¡ãä¥à¥
|
||
;¢ eax ¢ëç¨á«ï¥¬ ç «® 1-© â®çª¨ «¨¨¨ ¢ ¡ãä¥à¥ ¨§®¡à ¦¥¨ï
|
||
mov eax,buf2d_w ;size x
|
||
imul eax,ecx ;size_x*y
|
||
add eax,ebx ;size_x*y+x
|
||
lea eax,[eax+eax*2] ;(size_x*y+x)*3
|
||
add eax,buf2d_data ;ptr+(size_x*y+x)*3
|
||
|
||
mov ecx,esi
|
||
sub ecx,ebx ;¢ ecx ª®««¨ç¥á⢮ â®ç¥ª «¨¨¨ ¢ë¢®¤¨¬ëå ¢ ¡ãä¥à
|
||
inc ecx ;çâ®-¡ë ¯®á«¥¤ïï â®çª «¨¨¨ â ª¦¥ ®â®¡à ¦ « áì
|
||
mov edx,dword[color]
|
||
mov ebx,edx ;ª®®à¤¨ â x0 ¢ ebx 㦥 ¥ ã¦
|
||
ror edx,16 ;¯®¢®à 稢 ¥¬ ॣ¨áâà çâ® ¡ë 3-© ¡ ©â ¯®¯ « ¢ dl
|
||
cld
|
||
@@: ;横« ¯® ®á¨ x ®â x0 ¤® x1 (¢ª«îç ï x1)
|
||
mov word[eax],bx ;copy pixel color
|
||
mov byte[eax+2],dl
|
||
add eax,3
|
||
loop @b
|
||
.end24:
|
||
popfd
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
align 4
|
||
proc buf_rect_by_size, buf_struc:dword, coord_x:dword,coord_y:dword,w:dword,h:dword, color:dword
|
||
pushad
|
||
mov edi,[buf_struc]
|
||
cmp buf2d_bits,8
|
||
je @f
|
||
cmp buf2d_bits,24
|
||
je @f
|
||
jmp .coord_end
|
||
@@:
|
||
|
||
mov eax,[coord_x]
|
||
mov ebx,[coord_y]
|
||
mov ecx,[w]
|
||
;cmp ecx,1
|
||
;jl .coord_end
|
||
cmp ecx,0
|
||
je .coord_end
|
||
jg @f
|
||
add eax,ecx
|
||
inc eax
|
||
neg ecx
|
||
@@:
|
||
add ecx,eax
|
||
dec ecx
|
||
mov edx,[h]
|
||
;cmp edx,1
|
||
;jl .coord_end
|
||
cmp edx,0
|
||
je .coord_end
|
||
jg @f
|
||
add ebx,edx
|
||
inc ebx
|
||
neg edx
|
||
@@:
|
||
|
||
add edx,ebx
|
||
dec edx
|
||
mov esi,dword[color]
|
||
stdcall buf_line_h, edi, eax, ebx, ecx, esi ;«¨¨ï -
|
||
stdcall buf_line_brs, edi, eax, ebx, eax, edx, esi ;«¨¨ï |
|
||
stdcall buf_line_h, edi, eax, edx, ecx, esi ;«¨¨ï -
|
||
stdcall buf_line_brs, edi, ecx, ebx, ecx, edx, esi ;«¨¨ï |
|
||
.coord_end:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
align 4
|
||
proc buf_filled_rect_by_size, buf_struc:dword, coord_x:dword,coord_y:dword,w:dword,h:dword, color:dword
|
||
pushad
|
||
mov edi,[buf_struc]
|
||
cmp buf2d_bits,8
|
||
je @f
|
||
cmp buf2d_bits,24
|
||
je @f
|
||
jmp .coord_end
|
||
@@:
|
||
mov eax,[coord_x]
|
||
mov ebx,[coord_y]
|
||
mov edx,[w]
|
||
cmp edx,0
|
||
je .coord_end ;¥á«¨ ¢ëá®â 0 ¯¨ªá¥«¥©
|
||
jg @f ;¥á«¨ ¢ëá®â ¯®«®¦¨â¥«ì ï
|
||
add eax,edx
|
||
inc eax
|
||
neg edx ;è¨à¨ã ¤¥« ¥¬ ¯®«®¦¨â¥«ì®©
|
||
;inc edx ;¯®ç¥¬ã âãâ ¥ ¤®¡ ¢«ï¥¬ 1-æã ï ¥ § î, ® á ¥© à ¡®â ¥â ¥ ¯à ¢¨«ì®
|
||
@@:
|
||
add edx,eax
|
||
dec edx
|
||
mov ecx,[h]
|
||
cmp ecx,0
|
||
je .coord_end ;¥á«¨ ¢ëá®â 0 ¯¨ªá¥«¥©
|
||
jg @f ;¥á«¨ ¢ëá®â ¯®«®¦¨â¥«ì ï
|
||
add ebx,ecx ;ᤢ¨£ ¥¬ ¢¥àåîî ª®®à¤¨ âã ¯àאַ㣮«ì¨ª
|
||
inc ebx
|
||
neg ecx ;¢ëá®âã ¤¥« ¥¬ ¯®«®¦¨â¥«ì®©
|
||
;inc ecx ;¯®ç¥¬ã âãâ ¥ ¤®¡ ¢«ï¥¬ 1-æã ï ¥ § î, ® á ¥© à ¡®â ¥â ¥ ¯à ¢¨«ì®
|
||
@@:
|
||
mov esi,dword[color]
|
||
cld
|
||
@@:
|
||
stdcall buf_line_h, edi, eax, ebx, edx, esi ;«¨¨ï -
|
||
inc ebx
|
||
loop @b
|
||
.coord_end:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
align 4
|
||
proc buf_circle, buf_struc:dword, coord_x:dword, coord_y:dword, r:dword, color:dword
|
||
locals
|
||
po_x dd ?
|
||
po_y dd ?
|
||
endl
|
||
pushad
|
||
mov edi,dword[buf_struc]
|
||
cmp buf2d_bits,8
|
||
je @f
|
||
cmp buf2d_bits,24
|
||
je @f
|
||
jmp .error
|
||
@@:
|
||
mov edx,dword[color]
|
||
|
||
finit
|
||
fild dword[coord_x]
|
||
fild dword[coord_y]
|
||
fild dword[r]
|
||
fldz ;px=0
|
||
fld st1 ;py=r
|
||
|
||
fldpi
|
||
fmul st0,st3
|
||
fistp dword[po_x]
|
||
mov esi,dword[po_x] ;esi=pi*r
|
||
shl esi,1 ;esi=2*pi*r
|
||
|
||
;st0 = py
|
||
;st1 = px
|
||
;st2 = r
|
||
;st3 = y
|
||
;st4 = x
|
||
|
||
@@:
|
||
;Point(px + x, y - py)
|
||
fld st1 ;st0=px
|
||
fadd st0,st5 ;st0=px+x
|
||
fistp dword[po_x]
|
||
mov ebx,dword[po_x]
|
||
fld st3 ;st0=y
|
||
fsub st0,st1 ;st0=y-py
|
||
fistp dword[po_y]
|
||
mov ecx,dword[po_y]
|
||
call draw_pixel
|
||
;px += py/r
|
||
fld st0 ;st0=py
|
||
fdiv st0,st3 ;st0=py/r
|
||
faddp st2,st0 ;st3+=st0
|
||
;py -= px/r
|
||
fld st1 ;st0=px
|
||
fdiv st0,st3 ;st0=px/r
|
||
fsubp st1,st0 ;st2-=st0
|
||
|
||
dec esi
|
||
cmp esi,0
|
||
jge @b
|
||
jmp .exit_fun
|
||
.error:
|
||
stdcall print_err,sz_buf2d_circle,txt_err_n8_24b
|
||
.exit_fun:
|
||
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
;äãªæ¨ï ¤«ï § «¨¢ª¨ ®¡« á⨠¢ë¡à ë¬ æ¢¥â®¬
|
||
align 4
|
||
proc buf_flood_fill, buf_struc:dword, coord_x:dword, coord_y:dword, mode:dword, color_f:dword, color_b:dword
|
||
pushad
|
||
mov edi,[buf_struc]
|
||
cmp buf2d_bits,24
|
||
jne .end24
|
||
|
||
mov ebx,dword[coord_x]
|
||
mov ecx,dword[coord_y]
|
||
mov edx,dword[color_f]
|
||
mov esi,dword[color_b]
|
||
|
||
cmp dword[mode],1 ;¢ § ¢¨á¨¬®á⨠®â 'mode' ®¯à¥¤¥«ï¥¬ ª ª¨¬ «£®à¨â¬®¬ ¡ã¤¥¬ ¯®«ì§®¢ âìáï
|
||
je @f
|
||
call buf_flood_fill_recurs_0 ;§ «¨¢ ¥¬ ¤® ¯¨ªá¥«¥© 梥â esi
|
||
jmp .end24
|
||
@@:
|
||
call buf_flood_fill_recurs_1 ;§ «¨¢ ¥¬ ¯¨ªá¥«¨ ¨¬¥î騥 梥â esi
|
||
|
||
.end24:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
;input:
|
||
; ebx = coord_x
|
||
; ecx = coord_y
|
||
; edx = 梥⠧ «¨¢ª¨
|
||
; esi = æ¢¥â £à ¨æë, ¤® ª®â®à®© ¡ã¤¥â ¨â¨ § «¨¢ª
|
||
; edi = buf_struc
|
||
;output:
|
||
; eax = ¯®àâ¨âáï
|
||
align 4
|
||
buf_flood_fill_recurs_0:
|
||
call get_pixel_24
|
||
cmp eax,0xffffffff ;if error coords
|
||
je .end_fun
|
||
cmp eax,edx ;¥á«¨ 梥⠯¨ªá¥«ï ᮢ¯ « á 梥⮬ § «¨¢ª¨, § ç¨â § «¨¢ª ¢ í⮩ ®¡« á⨠㦥 ¡ë« ᤥ«
|
||
je .end_fun
|
||
|
||
call draw_pixel
|
||
|
||
dec ebx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
je @f
|
||
call buf_flood_fill_recurs_0
|
||
@@:
|
||
inc ebx
|
||
|
||
|
||
inc ebx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
je @f
|
||
call buf_flood_fill_recurs_0
|
||
@@:
|
||
dec ebx
|
||
|
||
dec ecx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
je @f
|
||
call buf_flood_fill_recurs_0
|
||
@@:
|
||
inc ecx
|
||
|
||
inc ecx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
je @f
|
||
call buf_flood_fill_recurs_0
|
||
@@:
|
||
dec ecx
|
||
|
||
.end_fun:
|
||
ret
|
||
|
||
;input:
|
||
; ebx = coord_x
|
||
; ecx = coord_y
|
||
; edx = 梥⠧ «¨¢ª¨
|
||
; esi = 梥⠯¨ªá¥«¥©, ¯® ª®â®àë¬ ¡ã¤¥â ¨â¨ § «¨¢ª
|
||
; edi = buf_struc
|
||
;output:
|
||
; eax = ¯®àâ¨âáï
|
||
align 4
|
||
buf_flood_fill_recurs_1:
|
||
call get_pixel_24
|
||
cmp eax,0xffffffff ;if error coords
|
||
je .end_fun
|
||
cmp eax,edx ;¥á«¨ 梥⠯¨ªá¥«ï ᮢ¯ « á 梥⮬ § «¨¢ª¨, § ç¨â § «¨¢ª ¢ í⮩ ®¡« á⨠㦥 ¡ë« ᤥ«
|
||
je .end_fun
|
||
cmp eax,esi ;¥á«¨ 梥⠯¨ªá¥«ï ¥ ᮢ¯ « á § «¨¢ ¥¬ë¬ 梥⮬ § «¨¢ª¨, â® ¯à¥ªà é ¥¬ § «¨¢ªã
|
||
jne .end_fun
|
||
|
||
call draw_pixel
|
||
|
||
dec ebx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
jne @f
|
||
call buf_flood_fill_recurs_1
|
||
@@:
|
||
inc ebx
|
||
|
||
|
||
inc ebx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
jne @f
|
||
call buf_flood_fill_recurs_1
|
||
@@:
|
||
dec ebx
|
||
|
||
dec ecx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
jne @f
|
||
call buf_flood_fill_recurs_1
|
||
@@:
|
||
inc ecx
|
||
|
||
inc ecx
|
||
call get_pixel_24
|
||
cmp eax,esi
|
||
jne @f
|
||
call buf_flood_fill_recurs_1
|
||
@@:
|
||
dec ecx
|
||
|
||
.end_fun:
|
||
ret
|
||
|
||
;äãªæ¨ï ¤«ï à¨á®¢ ¨ï â®çª¨
|
||
align 4
|
||
proc buf_set_pixel uses ebx ecx edx edi, buf_struc:dword, coord_x:dword, coord_y:dword, color:dword
|
||
mov edi,dword[buf_struc]
|
||
mov ebx,dword[coord_x]
|
||
mov ecx,dword[coord_y]
|
||
mov edx,dword[color]
|
||
call draw_pixel
|
||
ret
|
||
endp
|
||
|
||
;output:
|
||
; eax = 梥â â®çª¨
|
||
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
|
||
align 4
|
||
proc buf_get_pixel uses ebx ecx edi, buf_struc:dword, coord_x:dword, coord_y:dword
|
||
mov edi,dword[buf_struc]
|
||
mov ebx,[coord_x]
|
||
mov ecx,[coord_y]
|
||
|
||
cmp buf2d_bits,8
|
||
jne @f
|
||
call get_pixel_8
|
||
jmp .end_fun
|
||
@@:
|
||
cmp buf2d_bits,24
|
||
jne @f
|
||
call get_pixel_24
|
||
jmp .end_fun
|
||
@@:
|
||
cmp buf2d_bits,32
|
||
jne @f
|
||
call get_pixel_32
|
||
;jmp .end_fun
|
||
@@:
|
||
.end_fun:
|
||
ret
|
||
endp
|
||
|
||
;¯à¥®¡à §®¢ ¨¥ 8-¡¨â®£® ¡ãä¥à à §¬¥à®¬ 16*16 ¢ à §¬¥à 1*256 ᨬ¢®«®¢
|
||
align 4
|
||
proc buf_convert_text_matrix, buf_struc:dword
|
||
locals
|
||
tmp_mem dd ?
|
||
c1 dw ?
|
||
c2 dd ?
|
||
c3 dw ?
|
||
endl
|
||
pushad
|
||
mov edi,dword[buf_struc]
|
||
cmp buf2d_bits,8
|
||
jne .error0
|
||
mov ecx,buf2d_h
|
||
mov ebx,ecx
|
||
shr ebx,4 ;¯à¥¤¯®« £ ¥¬ çâ® ¢ ¡ãä¥à¥ 16 áâப á ᨬ¢®« ¬¨, ¯®â®¬ã ¤¥«¨¬ 2^4
|
||
or ebx,ebx
|
||
jz .error1
|
||
mov edx,buf2d_w
|
||
imul ecx,edx ;ecx = size 8 b
|
||
invoke mem.alloc,ecx ;¢ë¤¥«ï¥¬ ¢à¥¬¥ãî ¯ ¬ïâì
|
||
mov [tmp_mem],eax ;eax - new memory
|
||
|
||
shr edx,4 ;¯à¥¤¯®« £ ¥¬ çâ® ¢ ¡ãä¥à¥ 16 ª®«®®ª á ᨬ¢®« ¬¨, ¯®â®¬ã ¤¥«¨¬ 2^4
|
||
mov eax,ebx
|
||
imul ebx,edx ;¢ëç¨á«ï¥¬ ª®®«¨ç¥á⢮ ¯¨ªá¥«¥© 1 ᨬ¢®«
|
||
;eax = bhe - ¢ëá®â ¡ãª¢ë
|
||
;ebx = bwi*bhe - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ¢ 1-© ¡ãª¢¥
|
||
;edx = bwi - è¨à¨ ¡ãª¢ë
|
||
;ecx,esi,edi - ¨á¯®«ì§ãîâáï ¢ 横«¥ .c_0
|
||
shr buf2d_w,4
|
||
shl buf2d_h,4 ;¯à¥®¡à §®¢ë¢ ¥¬ à §¬¥àë ¡ãä¥à
|
||
|
||
cld
|
||
mov esi,buf2d_data
|
||
mov edi,[tmp_mem]
|
||
mov word[c3],16
|
||
.c_3:
|
||
mov dword[c2],eax
|
||
.c_2:
|
||
mov word[c1],16
|
||
.c_1:
|
||
mov ecx,edx ;.c_0:
|
||
rep movsb
|
||
add edi,ebx
|
||
sub edi,edx ;edi+=(bwi*bhe-bwi)
|
||
dec word[c1]
|
||
cmp word[c1],0
|
||
jg .c_1
|
||
add edi,edx
|
||
shl ebx,4
|
||
sub edi,ebx ;edi-=(16*bwi*bhe-bwi)
|
||
shr ebx,4
|
||
dec dword[c2]
|
||
cmp dword[c2],0
|
||
jg .c_2
|
||
sub edi,ebx
|
||
shl ebx,4
|
||
add edi,ebx ;edi+=(15*bwi*bhe)
|
||
shr ebx,4
|
||
dec word[c3]
|
||
cmp word[c3],0
|
||
jg .c_3
|
||
|
||
mov edi,dword[buf_struc] ;ª®¯¨à®¢ ¨¥ ®¢®© ¬ âà¨æë ¢ ®á®¢®© ¡ãä¥à
|
||
mov edi,buf2d_data
|
||
mov esi,[tmp_mem]
|
||
mov ecx,ebx
|
||
shl ecx,8
|
||
rep movsb
|
||
invoke mem.free,[tmp_mem] ;ç¨á⨬ ¢à¥¬¥ãî ¯ ¬ïâì
|
||
jmp .end_conv
|
||
.error0:
|
||
stdcall print_err,sz_buf2d_convert_text_matrix,txt_err_n8b
|
||
jmp .end_conv
|
||
.error1:
|
||
stdcall print_err,sz_buf2d_convert_text_matrix,txt_err_size_w16
|
||
.end_conv:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
align 4
|
||
proc buf_draw_text, buf_struc:dword, buf_t_matr:dword, text:dword, coord_x:dword, coord_y:dword, color:dword
|
||
locals
|
||
buf_t_matr_offs dd ?
|
||
buf_s_matr buf_2d_header ? ;ebp-BUF_STRUCT_SIZE «®ª «ì ï ¬ âà¨æ ᨬ¢®«
|
||
endl
|
||
pushad
|
||
mov edi,dword[buf_struc]
|
||
cmp buf2d_bits,24
|
||
jne .error2
|
||
mov edi,dword[buf_t_matr]
|
||
cmp buf2d_bits,8
|
||
jne .error1
|
||
mov edx,buf2d_data
|
||
mov [buf_t_matr_offs],edx
|
||
mov ecx,BUF_STRUCT_SIZE ;ª®¯¨à㥬 áâàãªâãàã ⥪á⮢®© ¬ âà¨æë
|
||
mov esi,edi
|
||
mov edi,ebp
|
||
sub edi,BUF_STRUCT_SIZE ;&buf_s_matr
|
||
cld
|
||
rep movsb
|
||
sub edi,BUF_STRUCT_SIZE ;&buf_s_matr
|
||
shr buf2d_h,8 ;¤¥«¨¬ ¢ëá®âã ᨬ¢®«ì®£® ¡ãä¥à 256, ¤«ï 宦¤¥¨ï ¢ëá®âë 1-£® ᨬ¢®«
|
||
mov ebx,buf2d_h ;¡¥à¥¬ ¢ëá®âã ᨬ¢®«
|
||
mov ecx,buf2d_w ;¡¥à¥¬ è¨à¨ã ᨬ¢®«
|
||
|
||
mov eax,[coord_x]
|
||
mov esi,[text]
|
||
cmp byte[esi],0
|
||
je .end_draw ;¥á«¨ ¯ãáâ ï áâப
|
||
@@:
|
||
xor edx,edx
|
||
mov dl,byte[esi] ;¡¥à¥¬ ª®¤ ᨬ¢®«
|
||
imul edx,ebx ;㬮¦ ¥¬ ¥£® ¢ëá®âã ᨬ¢®«
|
||
imul edx,ecx ;㬮¦ ¥¬ è¨à¨ã ᨬ¢®«
|
||
add edx,[buf_t_matr_offs] ;¯à¨¡ ¢«ï¥¬ ᬥ饨¥ 0-£® ᨬ¢®« , â. ¥. ¯®«ãç ¥âáï ᬥ饨¥ ¢ë¢®¤¨¬®£® ᨬ¢®«
|
||
mov buf2d_data,edx ;¢ «®ª «ìë© ¡ãä¥à ᨬ¢®« , áâ ¢¨¬ 㪠§ ⥫ì ã¦ë© ᨬ¢®« ¨§ ¡ãä¥à buf_t_matr
|
||
stdcall buf_bit_blt_alpha, [buf_struc], eax,[coord_y], edi,[color]
|
||
add eax,ecx
|
||
.new_s:
|
||
inc esi
|
||
cmp byte[esi],13
|
||
jne .no_13
|
||
mov eax,[coord_x]
|
||
add [coord_y],ebx
|
||
jmp .new_s
|
||
.no_13:
|
||
cmp byte[esi],0
|
||
jne @b
|
||
jmp .end_draw
|
||
.error1:
|
||
stdcall print_err,sz_buf2d_draw_text,txt_err_n8b
|
||
jmp .end_draw
|
||
.error2:
|
||
stdcall print_err,sz_buf2d_draw_text,txt_err_n24b
|
||
.end_draw:
|
||
popad
|
||
ret
|
||
endp
|
||
|
||
;input:
|
||
; ebp+8 = p0
|
||
; ebp+12 = p1
|
||
align 4
|
||
line_len4i:
|
||
push ebp
|
||
mov ebp,esp
|
||
fild word [ebp+8]
|
||
fisub word [ebp+12]
|
||
fmul st0,st0 ;st0=x^2
|
||
fild word [ebp+10]
|
||
fisub word [ebp+14]
|
||
fmul st0,st0 ;st0=y^2
|
||
faddp
|
||
fsqrt
|
||
fstp dword [ebp+12]
|
||
pop ebp
|
||
ret 4 ;8
|
||
|
||
align 4
|
||
proc buf_curve_bezier, buffer:dword, coord_p0:dword,coord_p1:dword,coord_p2:dword, color:dword
|
||
locals
|
||
delt_t dd ?
|
||
opr_param dd ?
|
||
v_poi_0 dd ?
|
||
endl
|
||
pushad
|
||
|
||
;float t, xt,yt;
|
||
;for(t=.0;t<1.;t+=.005){
|
||
; xt=pow(1.-t,2)*x0+2*t*(1.-t)*x1+pow(t,2)*x2;
|
||
; yt=pow(1.-t,2)*y0+2*t*(1.-t)*y1+pow(t,2)*y2;
|
||
; dc.SetPixel(xt,yt,255L);
|
||
;}
|
||
|
||
mov edx,[color] ;set curve color
|
||
mov edi,[buffer]
|
||
xor ebx,ebx
|
||
xor ecx,ecx
|
||
|
||
finit
|
||
fldz
|
||
|
||
; calculate delta t
|
||
stdcall line_len4i, dword[coord_p1],dword[coord_p0]
|
||
fadd dword[esp]
|
||
add esp,4 ;pop ...
|
||
|
||
stdcall line_len4i, dword[coord_p2],dword[coord_p1]
|
||
fadd dword[esp]
|
||
add esp,4 ;pop ...
|
||
|
||
fadd st0,st0 ; len*=2
|
||
ftst
|
||
fstsw ax
|
||
|
||
fld1
|
||
sahf
|
||
jle @f ;¨§¡¥£ ¥¬ ¤¥«¥¨ï 0
|
||
fdiv st0,st1
|
||
@@:
|
||
fstp dword[delt_t]
|
||
|
||
ffree st0 ;1.0
|
||
fincstp
|
||
|
||
;fild word[coord_p2+2] ;y2
|
||
fild word[coord_p1+2] ;y1
|
||
fild word[coord_p0+2] ;y0
|
||
fild word[coord_p2] ;x2
|
||
fild word[coord_p1] ;x1
|
||
fild word[coord_p0] ;x0
|
||
fld dword[delt_t]
|
||
fldz ;t=.0
|
||
|
||
@@:
|
||
fld1
|
||
fsub st0,st1 ;1.-t
|
||
fmul st0,st0 ;pow(1.-t,2)
|
||
fmul st0,st3 ;...*x0
|
||
fstp dword[opr_param]
|
||
|
||
fld1
|
||
fsub st0,st1 ;1.-t
|
||
fmul st0,st1 ;(1.-t)*t
|
||
fadd st0,st0
|
||
fmul st0,st4 ;...*x1
|
||
mov esi,dword[opr_param]
|
||
fstp dword[opr_param]
|
||
|
||
fld st0 ;st0=t
|
||
fmul st0,st0 ;t^2
|
||
fmul st0,st5 ;(t^2)*x2
|
||
|
||
fadd dword[opr_param]
|
||
mov dword[opr_param],esi
|
||
fadd dword[opr_param]
|
||
fistp word[v_poi_0] ;x
|
||
|
||
fld1
|
||
fsub st0,st1 ;1.-t
|
||
fmul st0,st0 ;pow(1.-t,2)
|
||
fmul st0,st6 ;...*y0
|
||
fstp dword[opr_param]
|
||
|
||
fld1
|
||
fsub st0,st1 ;1.-t
|
||
fmul st0,st1 ;(1.-t)*t
|
||
fadd st0,st0
|
||
fmul st0,st7 ;...*y1
|
||
mov esi,dword[opr_param]
|
||
fstp dword[opr_param]
|
||
|
||
fld st0 ;st0=t
|
||
fmul st0,st0 ;t^2
|
||
fimul word[coord_p2+2] ;(t^2)*y2
|
||
|
||
fadd dword[opr_param]
|
||
mov dword[opr_param],esi
|
||
fadd dword[opr_param]
|
||
fistp word[v_poi_0+2] ;y
|
||
|
||
mov eax,1
|
||
mov bx,word[v_poi_0+2]
|
||
mov cx,word[v_poi_0]
|
||
call draw_pixel
|
||
|
||
fadd st0,st1 ;t+dt
|
||
|
||
fld1
|
||
fcomp
|
||
fstsw ax
|
||
sahf
|
||
jae @b
|
||
|
||
popad
|
||
ret
|
||
endp
|