diff --git a/data/eng/3d/3dspiral b/data/eng/3d/3dspiral deleted file mode 100644 index 58d26dfef..000000000 Binary files a/data/eng/3d/3dspiral and /dev/null differ diff --git a/data/eng/Makefile b/data/eng/Makefile index 4503f60b0..9141c217d 100644 --- a/data/eng/Makefile +++ b/data/eng/Makefile @@ -80,6 +80,7 @@ FASM_PROGRAMS:=\ 3d/crownscr:3D/CROWNSCR:$(PROGS)/demos/crownscr/trunk/crownscr.asm \ 3d/free3d04:3D/FREE3D04:$(PROGS)/demos/free3d04/trunk/free3d04.asm \ 3d/view3ds:3D/VIEW3DS:$(PROGS)/demos/3DS/VIEW3DS.ASM \ + 3d/3dspiral:3D/3DSPIRAL:$(PROGS)/demos/3dspiral/trunk/3dspiral.asm \ demos/bcdclk:DEMOS/BCDCLK:$(PROGS)/demos/bcdclk/bcdclk/bcdclk.asm \ demos/circle:DEMOS/CIRCLE:$(PROGS)/develop/examples/circle/trunk/circle.asm \ demos/colorref:DEMOS/COLORREF:$(PROGS)/demos/colorref/trunk/colorref.asm \ @@ -214,7 +215,7 @@ OTHER_FILES:=asciivju:ASCIIVJU autorun.dat:AUTORUN.DAT \ panel.dat:PANEL.DAT setup.dat:SETUP.DAT \ shell:SHELL spanel:SPANEL table:TABLE test:TEST \ vmode:VMODE \ - 3d/3dsheart:3D/3DSHEART 3d/3dspiral:3D/3DSPIRAL 3d/cubeline:3D/CUBELINE \ + 3d/3dsheart:3D/3DSHEART 3d/cubeline:3D/CUBELINE \ 3d/flatwav:3D/FLATWAV 3d/gears:3D/GEARS 3d/house.3ds:3D/HOUSE.3DS \ demos/ak47.lif:DEMOS/AK47.LIF \ demos/barge.lif:DEMOS/BARGE.LIF demos/life2:DEMOS/LIFE2 \ diff --git a/data/rus/3d/3dspiral b/data/rus/3d/3dspiral deleted file mode 100644 index 58d26dfef..000000000 Binary files a/data/rus/3d/3dspiral and /dev/null differ diff --git a/data/rus/Makefile b/data/rus/Makefile index 6912aca1e..2007bc349 100644 --- a/data/rus/Makefile +++ b/data/rus/Makefile @@ -80,6 +80,7 @@ FASM_PROGRAMS:=\ 3d/crownscr:3D/CROWNSCR:$(PROGS)/demos/crownscr/trunk/crownscr.asm \ 3d/free3d04:3D/FREE3D04:$(PROGS)/demos/free3d04/trunk/free3d04.asm \ 3d/view3ds:3D/VIEW3DS:$(PROGS)/demos/3DS/VIEW3DS.ASM \ + 3d/3dspiral:3D/3DSPIRAL:$(PROGS)/demos/3dspiral/trunk/3dspiral.asm \ demos/bcdclk:DEMOS/BCDCLK:$(PROGS)/demos/bcdclk/bcdclk/bcdclk.asm \ demos/circle:DEMOS/CIRCLE:$(PROGS)/develop/examples/circle/trunk/circle.asm \ demos/colorref:DEMOS/COLORREF:$(PROGS)/demos/colorref/trunk/colorref.asm \ @@ -94,7 +95,7 @@ FASM_PROGRAMS:=\ demos/trantest:DEMOS/TRANTEST:$(PROGS)/demos/trantest/trunk/trantest.asm \ demos/tube:DEMOS/TUBE:$(PROGS)/demos/tube/trunk/tube.asm \ demos/unvwater:DEMOS/UNVWATER:$(PROGS)/demos/unvwater/trunk/unvwater.asm \ - demos/web:DEMOS/WEB:$(PROGS)/demos/web/trunk/web.asm \ + demos/web:DEMOS/WEB:$(PROGS)/demos/web/trunk/web.asm \ develop/board:DEVELOP/BOARD:$(PROGS)/system/board/trunk/board.asm \ develop/cObj:DEVELOP/cObj:$(PROGS)/develop/cObj/trunk/cObj.asm \ develop/fasm:DEVELOP/FASM:$(PROGS)/develop/fasm/trunk/fasm.asm \ @@ -214,7 +215,7 @@ OTHER_FILES:=asciivju:ASCIIVJU autorun.dat:AUTORUN.DAT \ panel.dat:PANEL.DAT pipetka:PIPETKA setup.dat:SETUP.DAT \ shell:SHELL spanel:SPANEL table:TABLE test:TEST \ vmode:VMODE \ - 3d/3dsheart:3D/3DSHEART 3d/3dspiral:3D/3DSPIRAL 3d/cubeline:3D/CUBELINE \ + 3d/3dsheart:3D/3DSHEART 3d/cubeline:3D/CUBELINE \ 3d/flatwav:3D/FLATWAV 3d/gears:3D/GEARS 3d/house.3ds:3D/HOUSE.3DS \ demos/ak47.lif:DEMOS/AK47.LIF \ demos/barge.lif:DEMOS/BARGE.LIF demos/life2:DEMOS/LIFE2 \ diff --git a/programs/demos/3dspiral/trunk/3dspiral.asm b/programs/demos/3dspiral/trunk/3dspiral.asm new file mode 100644 index 000000000..d5dec36d8 --- /dev/null +++ b/programs/demos/3dspiral/trunk/3dspiral.asm @@ -0,0 +1,447 @@ +; +; application : 3d shaking waved spiral +; compilator : fasm +; system : MenuetOS +; author : macgub +; email : macgub3@wp + +timeout equ 3 +maxx equ 600 ; window size +maxy equ 420 +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 0xbffff ; 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 + mov eax,11 ; check for event no wait + 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: + +; mov eax,13 +; mov ebx,20*65536+maxx-25 +; mov ecx,20*65536+maxy-25 +; xor edx,edx +; int 0x40 + + mov edi,screen_buf + mov ecx,maxx*maxy*3/4 + xor eax,eax + cld + rep stosd + + + call calc_deg + mov [z],0 + mov [sin_counter],0 + finit +oopz: + mov [x],0 + push [z] + call calc_sin_variable +oop: + push [x] +; call getcol ;(x,z) + call fun ; calculates y and y1 +; call rotateY + mov eax,[sin_variable] + add eax,[vector_x] ; vector_x + add [x],eax + mov eax,[vector_y] + add [y],eax ; vector_y + add [y1],eax + call point_perspective + call draw_point_3d + pop [x] + inc [x] + mov eax,[x] + cmp eax,[loop_counter] + jne oop + inc [sin_counter] + pop [z] + inc [z] + cmp [z],200 + jne oopz + + mov eax,7 + mov ebx,screen_buf + mov ecx,maxx*65536+maxy + mov edx,20*65536+20 + int 0x40 + + call set_elipse_dim + call set_vectors + +jmp still +;-----------------++++++PROCEDURES +getcol: + mov eax,[x_resolution] + mul [z] + add eax,[x] + mov ebx,eax + mov eax,35 + int 0x40 + mov [col],eax +ret + +set_vectors: + cmp [vector_x],55 + jne vec1 + mov [vector_dir_x],1 + vec1: + cmp [vector_x],250 + jne vec2 + mov [vector_dir_x],0 + vec2: + cmp [vector_dir_x],1 + jne vec3 + inc [vector_x] + jmp end_x + vec3: + dec [vector_x] + end_x: + cmp [vector_y],195 + jne vec4 + mov [vector_dir_y],1 + vec4: + cmp [vector_y],205 + jne vec5 + mov [vector_dir_y],0 + vec5: + cmp [vector_dir_y],1 + jne vec6 + inc [vector_y] + ret + vec6: + dec [vector_y] +ret +set_elipse_dim: + cmp [b],60 + jne go11 + mov [elipse_dir],0 + go11: + cmp [b],10 + jne go12 + mov [elipse_dir],1 + go12: + cmp [elipse_dir],1 + jne go13 + inc [b] + dec [a] + mov eax,[a] + mov [xo],eax + shl eax,1 + inc eax + mov [loop_counter],eax + ret + go13: + dec [b] + inc [a] + mov eax,[a] + mov [xo],eax + shl eax,1 + inc eax + mov [loop_counter],eax +ret + +calc_deg: + cmp [deg_counter], 360 + jne go_deg + mov [deg_counter],0 + go_deg: + fldpi + fidiv [deg_div] + fimul [deg_counter] + fstp [current_deg] +; fsincos +; fstp [cosbeta] +; fstp [sinbeta] + inc [deg_counter] + ret + +;rotateY: +; mov eax,[z] +; sub eax,[zoo] +; mov [subz],eax +; mov eax,[x] +; sub eax,[xoo] +; mov [subx],eax +; +; fld [sinbeta] +; fimul [subz] +; fchs +; fld [cosbeta] +; fimul[subx] +; faddp +; fiadd [xoo] +; fistp [x] + +; fld [sinbeta] +; fimul [subx] +; fld [cosbeta] +; fimul [subz] +; faddp +; fiadd [zoo] +; fistp [z] +; finit + +; ret + +point_perspective: + mov eax,[x] + sub eax,[xobs] + mov [xobssub],eax + mov eax,[z] + sub eax,[zobs] + mov [zobssub],eax + + mov eax,[y] + sub eax,[yobs] + mov [yobssub],eax + mov eax,[y1] + sub eax,[yobs] + mov [y1obssub],eax + + finit + fild [xobssub] + fidiv [zobssub] + fimul [zobs] + fchs + fiadd [xobs] + fistp [x] + fild [yobssub] + fidiv [zobssub] + fimul [zobs] + fchs + fiadd [yobs] + fistp [y] + +; mov eax,[xobssub] +; idiv [zobssub] +;; mov eax,edx +; imul [zobs] +; neg eax +; add eax,[xobs] +; mov [x],eax +; mov eax,[yobssub] +; idiv [zobssub] +;; mov eax,edx +; imul [zobs] +; neg eax +; add eax,[yobs] +; mov [y],eax + + fild [y1obssub] + fidiv [zobssub] + fimul [zobs] + fchs + fiadd [yobs] + fistp [y1] +ret +calc_sin_variable: + ;calculate sinus variable + fldpi + fidiv [sin_gran] + fimul [sin_counter] + fadd [current_deg] + fsin + fimul [sin_mul] + fistp [sin_variable] +ret + +fun: +; finit + fild [x] + fisub [xo] +; fchs +; faddp + fild [a] + fdivp st1,st + fmul st,st0 + fchs + fld1 + faddp + fsqrt + fimul [b] + fld st + fchs + fiadd [yo] + fistp [y] + fiadd [yo] + fistp [y1] +ret +draw_point_3d: + mov eax,[z] + imul [sq] + shr eax,10 + mov ebx,eax + neg eax + push eax + add eax,[y] + mov [y],eax + pop eax + add eax,[y1] + mov [y1],eax + mov eax,ebx + add eax,[x] + mov [x],eax + ;mov eax,1 + ;mov ebx,[x] + ;mov ecx,[y] + ;mov edx,[col] + ;int 0x40 + ;mov ecx,[y1] + ;int 0x40 + mov eax,maxx + mul [y] + add eax,[x] + mov ebx,eax + shl ebx,1 + add eax,ebx + add eax,screen_buf + mov ebx,[col] + or [eax],ebx + mov eax,maxx + mul [y1] + add eax,[x] + mov ebx,eax + shl ebx,1 + add eax,ebx + add eax,screen_buf + 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 + ; DRAW WINDOW + mov eax,0 ; function 0 : define and draw window + mov ebx,100*65536+maxx+25 ; [x start] *65536 + [x size] + mov ecx,100*65536+maxy+25 ; [y start] *65536 + [y size] + mov edx,0x02000000 ; color of work area RRGGBB,8->color gl + mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color gl + mov edi,0x005080d0 ; color of frames RRGGBB + int 0x40 + ; WINDOW LABEL + mov eax,4 ; function 4 : write text to window + mov ebx,8*65536+8 ; [x start] *65536 + [y start] + mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) + mov edx,labelt ; pointer to text beginning + mov esi,labellen-labelt ; text length + int 0x40 + ; CLOSE BUTTON + mov eax,8 ; function 8 : define and draw button + mov ebx,(maxx+25-19)*65536+12 ; [x start] *65536 + [x size] + mov ecx,5*65536+12 ; [y start] *65536 + [y size] + mov edx,1 ; button id + mov esi,0x6688dd ; button color RRGGBB + int 0x40 + + mov eax,12 ; function 12:tell os about windowdraw + mov ebx,2 ; 2, end of draw + int 0x40 + + ret + +x_resolution dd 800 +vector_x dd 200 +vector_y dd 200 +vector_dir_x db 1 +vector_dir_y db 1 +elipse_dir db 1 + +deg_counter dd ? ; rotation variables +deg_div dd 20 +current_deg dd ? +;cosbeta dd ? +;sinbeta dd ? +;zoo dd 100 ; rotation axle +;xoo dd 40 +;yoo dd 20 +;subx dd ? +;suby dd ? +;subz dd ? + +xobs dd maxx/2 ; 320 observer variables +yobs dd maxy/2 ; 175 +zobs dd -200 +xobssub dd ? +yobssub dd ? +y1obssub dd ? +zobssub dd ? + +sin_variable dd ? +sin_mul dd 60 +sin_gran dd 30 +sin_counter dd 0 +sq dd 724 ; round( (sqrt2)/2*1024 ) +z dd ? +x dd ? +y dd ? +y1 dd ? +xo dd 70 ; center point , (loop counter-1)/2 +yo dd 20 +a dd 70 ; vertical half-axle +b dd 20 ; horizontal half-axle +loop_counter dd 141 ; axle granularity +col dd 0x00ffffff + +labelt: + db ' 3D SHAKING WAVED SPIRAL' +labellen: +screen_buf: + +I_END: + + + + diff --git a/programs/demos/3dspiral/trunk/build.bat b/programs/demos/3dspiral/trunk/build.bat new file mode 100644 index 000000000..bf2640cda --- /dev/null +++ b/programs/demos/3dspiral/trunk/build.bat @@ -0,0 +1 @@ +fasm 3dspiral.asm 3dspiral \ No newline at end of file