forked from KolibriOS/kolibrios
3dwav src added
git-svn-id: svn://kolibrios.org@2269 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
822829ea70
commit
b8d187f6cd
256
programs/demos/3dwav/trunk/3dwav.asm
Normal file
256
programs/demos/3dwav/trunk/3dwav.asm
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
;
|
||||||
|
; application : WAVED 3D FORM SIN(SQRT(x*x+y*y))
|
||||||
|
; author : macgub
|
||||||
|
; email : macgub3@wp.pl
|
||||||
|
; system : MenuetOS
|
||||||
|
; compiler : fasm
|
||||||
|
;
|
||||||
|
;
|
||||||
|
TIMEOUT EQU 2
|
||||||
|
use32
|
||||||
|
|
||||||
|
org 0x0
|
||||||
|
|
||||||
|
db 'MENUET01' ; 8 byte id
|
||||||
|
dd 0x01 ; header version
|
||||||
|
dd START ; start of code
|
||||||
|
dd I_END ; size of image
|
||||||
|
dd 0x100000 ; memory for app
|
||||||
|
dd 0x7fff0 ; esp
|
||||||
|
dd 0x0 , 0x0 ; I_Param , I_Icon
|
||||||
|
|
||||||
|
START: ; start of execution
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
|
||||||
|
mov eax,23 ; wait here for event
|
||||||
|
mov ebx,TIMEOUT
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw request ?
|
||||||
|
je red
|
||||||
|
cmp eax,2 ; key in buffer ?
|
||||||
|
je key
|
||||||
|
cmp eax,3 ; button in buffer ?
|
||||||
|
je button
|
||||||
|
|
||||||
|
jmp noclose
|
||||||
|
|
||||||
|
red: ; redraw
|
||||||
|
call draw_window
|
||||||
|
jmp still
|
||||||
|
|
||||||
|
key: ; key
|
||||||
|
mov eax,2 ; just read it and ignore
|
||||||
|
int 0x40
|
||||||
|
jmp still
|
||||||
|
|
||||||
|
button: ; button
|
||||||
|
mov eax,17 ; get id
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp ah,1 ; button id=1 ?
|
||||||
|
jne noclose
|
||||||
|
|
||||||
|
mov eax,-1 ; close this program
|
||||||
|
int 0x40
|
||||||
|
noclose:
|
||||||
|
|
||||||
|
call calc_deg
|
||||||
|
|
||||||
|
; mov eax,13 ;clear screen
|
||||||
|
; mov ebx,5*65536 + 517
|
||||||
|
; mov ecx,20*65536 + 345
|
||||||
|
; xor edx,edx
|
||||||
|
; int 0x40
|
||||||
|
|
||||||
|
mov edi,the_mem ;clear buffer
|
||||||
|
mov ecx,512*384*3/4
|
||||||
|
xor eax,eax
|
||||||
|
cld
|
||||||
|
rep stosd
|
||||||
|
|
||||||
|
mov eax,1 ;main loop
|
||||||
|
oop:
|
||||||
|
mov ebx,1
|
||||||
|
oop1:
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
mov [x],eax
|
||||||
|
mov [z],ebx
|
||||||
|
call fun
|
||||||
|
add [y],260
|
||||||
|
add [x],40
|
||||||
|
call rotateY
|
||||||
|
call put3dpixel
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
add ebx,4
|
||||||
|
cmp ebx,201
|
||||||
|
jne oop1
|
||||||
|
inc eax
|
||||||
|
cmp eax,300
|
||||||
|
jne oop
|
||||||
|
|
||||||
|
mov eax,7 ;put image
|
||||||
|
mov ebx,the_mem
|
||||||
|
mov ecx,512*65536+384
|
||||||
|
mov edx,0
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
jmp still
|
||||||
|
;-------------------PROCEDURES-------------------------------
|
||||||
|
calc_deg:
|
||||||
|
cmp [deg_counter], 360
|
||||||
|
jne go_deg
|
||||||
|
mov [deg_counter],0
|
||||||
|
go_deg:
|
||||||
|
fldpi
|
||||||
|
fidiv [deg_div]
|
||||||
|
fimul [deg_counter]
|
||||||
|
fst [current_deg]
|
||||||
|
fsincos
|
||||||
|
fstp [cosbeta]
|
||||||
|
fstp [sinbeta]
|
||||||
|
inc [deg_counter]
|
||||||
|
ret
|
||||||
|
;-----------------
|
||||||
|
rotateY:
|
||||||
|
mov eax,[z]
|
||||||
|
sub eax,[zo]
|
||||||
|
mov [subz],eax
|
||||||
|
mov eax,[x]
|
||||||
|
sub eax,[xo]
|
||||||
|
mov [subx],eax
|
||||||
|
|
||||||
|
fld [sinbeta]
|
||||||
|
fimul [subz]
|
||||||
|
fchs
|
||||||
|
fld [cosbeta]
|
||||||
|
fimul[subx]
|
||||||
|
faddp
|
||||||
|
fiadd [xo]
|
||||||
|
fistp [x]
|
||||||
|
|
||||||
|
fld [sinbeta]
|
||||||
|
fimul [subx]
|
||||||
|
fld [cosbeta]
|
||||||
|
fimul [subz]
|
||||||
|
faddp
|
||||||
|
fiadd [zo]
|
||||||
|
fistp [z]
|
||||||
|
ret
|
||||||
|
;-----------------------------
|
||||||
|
fun:
|
||||||
|
finit
|
||||||
|
fild [x]
|
||||||
|
fisub [i150]
|
||||||
|
fidiv [xdiv]
|
||||||
|
fmul st,st0
|
||||||
|
fld st0
|
||||||
|
fild [z]
|
||||||
|
fisub [i100]
|
||||||
|
fidiv [zdiv]
|
||||||
|
fmul st,st0
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
|
||||||
|
fld [current_deg]
|
||||||
|
fimul [cur_deg_mul]
|
||||||
|
faddp
|
||||||
|
fsin
|
||||||
|
fimul [ymul]
|
||||||
|
fistp [y]
|
||||||
|
ret
|
||||||
|
;--------------------------
|
||||||
|
put3dpixel:
|
||||||
|
fild [z]
|
||||||
|
fmul [sq]
|
||||||
|
fchs
|
||||||
|
fiadd [y]
|
||||||
|
fistp [y]
|
||||||
|
fild [z]
|
||||||
|
fmul [sq]
|
||||||
|
fiadd [x]
|
||||||
|
fistp [x]
|
||||||
|
;mov eax,1
|
||||||
|
;mov ebx,[x]
|
||||||
|
;mov ecx,[y]
|
||||||
|
;mov edx,[col]
|
||||||
|
;int 0x40
|
||||||
|
mov eax,[y] ; calculating pixel position in buffer
|
||||||
|
dec eax
|
||||||
|
shl eax,9
|
||||||
|
add eax,[x]
|
||||||
|
mov ebx,eax
|
||||||
|
shl eax,1
|
||||||
|
add eax,ebx
|
||||||
|
add eax,the_mem
|
||||||
|
mov ebx,[col]
|
||||||
|
or [eax],ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
; *********************************************
|
||||||
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
||||||
|
; *********************************************
|
||||||
|
|
||||||
|
|
||||||
|
draw_window:
|
||||||
|
|
||||||
|
|
||||||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
|
mov ebx,1 ; 1, start of draw
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,48
|
||||||
|
mov ebx,4
|
||||||
|
int 0x40
|
||||||
|
mov esi, eax
|
||||||
|
; DRAW WINDOW
|
||||||
|
mov eax,0 ; function 0 : define and draw window
|
||||||
|
mov ebx,100*65536+512+9 ; [x start] *65536 + [x size]
|
||||||
|
mov ecx,100*65536+384+4 ; [y start] *65536 + [y size]
|
||||||
|
add ecx, esi
|
||||||
|
mov edx,0x74000000 ; color of work area RRGGBB,8->color gl
|
||||||
|
mov edi,labelt
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
|
mov ebx,2 ; 2, end of draw
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
; DATA AREA
|
||||||
|
deg_div dd 90
|
||||||
|
deg_counter dd ?
|
||||||
|
col dd 0x00ffffff
|
||||||
|
sq dd 0.707 ;sin pi/4
|
||||||
|
cosbeta dd ?
|
||||||
|
sinbeta dd ?
|
||||||
|
x dd ?
|
||||||
|
y dd ?
|
||||||
|
z dd ?
|
||||||
|
xo dd 200 ;axle variables
|
||||||
|
;yo dd 110
|
||||||
|
zo dd 80
|
||||||
|
xdiv dd 20
|
||||||
|
zdiv dd 20
|
||||||
|
ymul dd 20
|
||||||
|
subx dd ?
|
||||||
|
;suby dd ?
|
||||||
|
subz dd ?
|
||||||
|
current_deg dd ? ;real
|
||||||
|
cur_deg_mul dd 12
|
||||||
|
i100 dd 100
|
||||||
|
i150 dd 150
|
||||||
|
labelt:
|
||||||
|
db 'Waved 3d form',0
|
||||||
|
the_mem:
|
||||||
|
I_END:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
1
programs/demos/3dwav/trunk/build.bat
Normal file
1
programs/demos/3dwav/trunk/build.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
fasm 3dwav.asm 3dwav
|
Loading…
Reference in New Issue
Block a user