diff --git a/programs/build_all.bat b/programs/build_all.bat index b381d37ab..ddebcc326 100644 --- a/programs/build_all.bat +++ b/programs/build_all.bat @@ -203,7 +203,7 @@ echo Building demos echo * fasm demos\3dcube2\3dcube2.asm %BIN%\3d\3dcube2 rem fasm demos\3detx60b\3detx60b.asm %BIN%\3d\3detx60b -fasm demos\3dtcub10\trunk\3dtcub10.asm %BIN%\3d\3dtcub10 +fasm demos\3dtcub10\3dtcub10.asm %BIN%\3d\3dtcub10 cd demos\aclock\trunk\ nasmw -t -f bin -o ..\..\..\%BIN%\demos\aclock aclock.asm cd ..\..\.. diff --git a/programs/demos/3dtcub10/trunk/3DTCUB10.ASM b/programs/demos/3dtcub10/3DTCUB10.ASM similarity index 93% rename from programs/demos/3dtcub10/trunk/3DTCUB10.ASM rename to programs/demos/3dtcub10/3DTCUB10.ASM index bd1776280..2fd9912b2 100644 --- a/programs/demos/3dtcub10/trunk/3DTCUB10.ASM +++ b/programs/demos/3dtcub10/3DTCUB10.ASM @@ -1,939 +1,942 @@ -; -; 9 Ver Screen saver -; 5 Ver 24 bit texture. -; 23/8/2004 -; Pavlushin Evgeni 3d cube screen saver -; mail: waptap@mail.ru site: www.deck4.narod.ru -; -; This programm develop on sample text3d to Mikolaj Felix 25/5/2001 -; mfelix@polbox.com -; - -use32 - org 0x0 - db 'MENUET01' ; 8 byte id - dd 0x01 ; header version - dd START ; start of code - dd I_END ; size of image - dd 0x200000 ; memory for app - dd 0x200000 ; esp - dd 0x0 , 0x0 ; I_Param , I_Icon - -include 'lang.inc' -include '..\..\..\macros.inc' -MAX_DEGS equ 512 ;quantity of angels 2^n.Minimize for speedup -MAX_POINTS equ 8 ;quantity of points -MAX_FACES equ 6 ;quantity of points - -START: - finit - call draw_window - call clear_screen - call init_sincos - -still: - mov eax,23 ; wait for system event with 2 ms timeout - mov ebx,2 ; wait 2 ms, then continue - mcall - -; mov eax,11 ;If you want maximum speed! :) -; mcall - - dec eax ; window redraw request ? - je red - dec eax ; key in buffer ? - je key - dec eax ; button in buffer ? - je button - -main_loop: - call fade_texture - - mov esi,cube - mov edi,cube_rotated - mov ecx,MAX_POINTS*3 -copy_object: - fild word [esi] - fstp dword [edi] - add esi,2 - add edi,4 - dec ecx - jnz copy_object - - mov esi,angle_x - mov edi,cube_rotated - mov ecx,MAX_POINTS - call rotate_points - - mov esi,cube_rotated - mov edi,coord2d - mov ecx,MAX_POINTS - call translate_points - - call draw_textured_faces - call clear_screen_buffer - - add [angle_x],1 - add [angle_y],3 - add [angle_z],1 - - jmp still - -red: - call draw_window - jmp still -key: - mov eax,2 - jmp exit -button: - mov eax,17 - mcall - cmp ah,1 - jne still -exit: - mov eax,-1 - mcall - -;Draw window -draw_window: - mov eax,12 ;Start - mov ebx,1 - mcall - - mov eax,0 ;Draw window - mov ebx,0*65536+(799) ;x start*65536+x size - mov ecx,0*65536+(599) ;y start*65536+y size - mov edx,0x00000000 ;0x03 use skinned window - mcall - - call clear_screen - - mov eax,12 ;End - mov ebx,2 - mcall - ret - -head_label: db "3D TEXTURED CUBE THE LITTLE SCREEN SAVER FOR MENUETOS. USE " - db "800x600 SCREEN MODE FROM VIEW. PRESS ANY KEY FOR EXIT" -hl_end: - -;FADE IN FADE OUT TEXTURE - -x_step db 0 -x_num db 1 - -fade_texture: - mov ecx,0 -loox: - mov al,[file_texture+ecx] - mov [texture+ecx],al - inc ecx - cmp ecx,128*128*3 - jnae loox - - mov ecx,0 -loox2: - mov al,[file_texture+ecx] - cmp [x_step],al - jae xxx - sub al,[x_step] - jmp nnn -xxx: - mov al,0 -nnn: - mov [texture+ecx],al - inc ecx - cmp ecx,128*128*3 - jnae loox2 - - cmp [x_step],255 - jne no_max - mov [x_num],-1 -no_max: - cmp [x_step],0 - jne no_min - mov [x_num],1 -no_min: - mov al,[x_num] - add [x_step],al - ret - -; Clear Screen -clear_screen: - mov eax,13 - mov ebx,0*65536+800 - mov ecx,0*65536+600 - mov edx,0 - mcall - - mov eax,4 ;Out Text - mov ebx,8*65536+8 ;x start*65536+y start - mov ecx,0x00ffffff ;color White - mov edx,head_label - mov esi,hl_end-head_label - mcall - ret - -clear_screen_buffer: - mov ebx,scrbuf - mov ecx,800*65536+(600-40) ;sub 40 for antiflickering title - mov edx,0*65536+40 - mov eax,7 - mcall - - mov eax,4 ;Out Text - mov ebx,8*65536+580 ;x start*65536+y start - mov ebp,[n_step] - shl ebp,16 - sub ebx,ebp - mov ecx,0x0000ff00 ;color White - mov edx,move_text - add edx,[step] - mov esi,130 ;mt_end-move_text - mcall - - inc [n_step] - cmp [n_step],6 - jna t_ok - mov [n_step],0 - inc [step] - cmp [step],mt_end-move_text-130 - jng t_ok - mov [step],0 -t_ok: - - mov edi,scrbuf - mov eax,0 ;black background - mov ecx,800*600*3/4 ; 16000 - cld - rep stosd - ret - -n_step dd 0 -step dd 0 - -move_text: db " " - db " " - db " " - db "***** 3D TEXTURED CUBE THE LITTLE SCREEN SAVER FOR " - db "MENUET OS. SET 800x600 SCREEN MODE FROM VIEW THIS SCREEN " - db "SAVER ***** " - db "SITE OF THE RUSSIAN DEVELOPERS TO MENUETOS: " - db "www.menuet.narod.ru " - db "RUSSIAN MENUET APLICATION ARCHIVE PAGE ON: " - db "www.meosfiles.narod.ru " - db "AUTOR OF THIS SCREEN SAVER Pavlushin Evgeni " - db "MY SITE: www.deck4.narod.ru (Slow update) " - db "AND MAIL BOX: waptap@mail.ru " - db "THANK YOU FOR USE! " - db " " - db " " - db " " -mt_end: - - -;include graphlib.asm Mikolaj Felix 9/12/2000 mfelix@polbox.com -;Draw textured faces proc - -@@rx1 dw 0 ;equ [bp-2] -@@ry1 dw 0 ;equ [bp-4] -@@rx2 dw 0 ;equ [bp-6] -@@ry2 dw 0 ;equ [bp-8] -@@rx3 dw 0 ;equ [bp-10] -@@ry3 dw 0 ;equ [bp-12] -@@rx4 dw 0 ;equ [bp-14] -@@ry4 dw 0 ;equ [bp-16] - -draw_textured_faces: - - mov esi,link - mov ecx,MAX_FACES -dtf_loop: - push ecx - - xor ebx,ebx - mov bl,byte [esi] ; point 1 - shl bx,2 - mov eax,dword [coord2d+bx] ;COPY 1 FOURANGLE POINT - mov dword [@@rx1],eax - - xor ebx,ebx - mov bl,byte [esi+1] ; point 2 - shl bx,2 - mov eax,dword [coord2d+bx] ;COPY 2 FOURANGLE POINT - mov dword [@@rx2],eax - - xor ebx,ebx - mov bl,byte [esi+2] ; point 3 - shl bx,2 - mov eax,dword [coord2d+bx] ;COPY 3 FOURANGLE POINT - mov dword [@@rx3],eax - - xor bh,bh ; point 4 - mov bl,byte [esi+3] - shl bx,2 - mov eax,dword [coord2d+bx] ;COPY 4 FOURANGLE POINT - mov dword [@@rx4],eax - - mov ax,[@@ry1] - sub ax,[@@ry3] - mov bx,[@@rx2] - sub bx,[@@rx1] - imul bx - shl edx,16 - mov dx,ax - push edx - mov ax,[@@rx1] - sub ax,[@@rx3] - mov bx,[@@ry2] - sub bx,[@@ry1] - imul bx - shl edx,16 - mov dx,ax - pop ebx - sub ebx,edx ; normal_z = (y1-y3)*(x2-x1)-(x1-x3)*(y2-y1) - or ebx,ebx - jl dtf_next_face ; normal_z < 0 - - ; FIRST PICE OF FOUR ANGLE - - ; Set 3 triangel puts for texture ycoord*65536+xcoord - mov dword [@@tex_x3],127*65536+127 ;3 point - mov dword [@@tex_x2],0*65536+127 ;2 point - mov dword [@@tex_x1],0*65536+0 ;1 point - ; Set texture bitmap offset - mov [@@tex_off],texture - ; Set 3 triangel puts coordinates - mov eax,dword [@@rx3] - mov dword [@@x3],eax - mov eax,dword [@@rx2] - mov dword [@@x2],eax - mov eax,dword [@@rx1] - mov dword [@@x1],eax - call textured_triangle - - ; SECOND PICE OF FOUR ANGLE - - ; Set 3 triangel puts for texture ycoord*65536+xcoord - mov dword [@@tex_x3],127*65536+0 ;3 point - mov dword [@@tex_x2],127*65536+127 ;2 point - mov dword [@@tex_x1],0*65536+0 ;1 point - ; Set texture bitmap offset - mov [@@tex_off],texture - ; Set 3 triangel puts coordinates - mov eax,dword [@@rx4] - mov dword [@@x3],eax - mov eax,dword [@@rx3] - mov dword [@@x2],eax - mov eax,dword [@@rx1] - mov dword [@@x1],eax - call textured_triangle - -dtf_next_face: - add esi,4 - pop ecx - dec ecx - jnz dtf_loop - ret - -;include tex3.asm Mikolaj Felix 15/5/2001 mfelix@polbox.com - -@@x1 dw 0 ;equ [bp+4] -@@y1 dw 0 ;equ [bp+6] -@@x2 dw 0 ;equ [bp+8] -@@y2 dw 0 ;equ [bp+10] -@@x3 dw 0 ;equ [bp+12] -@@y3 dw 0 ;equ [bp+14] - -@@tex_off dd 0 ;equ [bp+16] -@@tex_x1 dw 0 ;equ [bp+18] -@@tex_y1 dw 0 ;equ [bp+20] -@@tex_x2 dw 0 ;equ [bp+22] -@@tex_y2 dw 0 ;equ [bp+24] -@@tex_x3 dw 0 ;equ [bp+26] -@@tex_y3 dw 0 ;equ [bp+28] - -@@dx12 dw 0 ;equ [bp-2] -@@dx13 dw 0 ;equ [bp-4] -@@dx23 dw 0 ;equ [bp-6] - -@@tex_dx12 dw 0 ;equ [bp-8] -@@tex_dy12 dw 0 ;equ [bp-10] -@@tex_dx13 dw 0 ;equ [bp-12] -@@tex_dy13 dw 0 ;equ [bp-14] -@@tex_dx23 dw 0 ;equ [bp-16] -@@tex_dy23 dw 0 ;equ [bp-18] - -@@scan_x1 dw 0 ;equ [bp-20] -@@scan_y1 dw 0 ;equ [bp-22] -@@scan_x2 dw 0 ;equ [bp-24] -@@scan_y2 dw 0 ;equ [bp-26] - - -textured_triangle: - - mov ax,[@@y1] - cmp ax,[@@y3] - jb tt_check1 - - xchg ax,[@@y3] - mov [@@y1],ax - - mov ax,[@@x1] - xchg ax,[@@x3] - mov [@@x1],ax - - mov ax,[@@tex_y1] - xchg ax,[@@tex_y3] - mov [@@tex_y1],ax - - mov ax,[@@tex_x1] - xchg ax,[@@tex_x3] - mov [@@tex_x1],ax -tt_check1: - mov ax,[@@y2] - cmp ax,[@@y3] - jb tt_check2 - - xchg ax,[@@y3] - mov [@@y2],ax - - mov ax,[@@x2] - xchg ax,[@@x3] - mov [@@x2],ax - - mov ax,[@@tex_y2] - xchg ax,[@@tex_y3] - mov [@@tex_y2],ax - - mov ax,[@@tex_x2] - xchg ax,[@@tex_x3] - mov [@@tex_x2],ax -tt_check2: - mov ax,[@@y1] - cmp ax,[@@y2] - jb tt_check3 - - xchg ax,[@@y2] - mov [@@y1],ax - - mov ax,[@@x1] - xchg ax,[@@x2] - mov [@@x1],ax - - mov ax,[@@tex_y1] - xchg ax,[@@tex_y2] - mov [@@tex_y1],ax - - mov ax,[@@tex_x1] - xchg ax,[@@tex_x2] - mov [@@tex_x1],ax -tt_check3: - - mov bx,[@@y2] - sub bx,[@@y1] - jnz tt_dx12_make - - mov word [@@dx12],0 - mov word [@@tex_dx12],0 - mov word [@@tex_dy12],0 - jmp tt_dx12_done -tt_dx12_make: - mov ax,[@@x2] - sub ax,[@@x1] - shl ax,7 - cwd - idiv bx - mov [@@dx12],ax ; dx12 = (x2-x1)/(y2-y1) - - mov ax,[@@tex_x2] - sub ax,[@@tex_x1] - shl ax,7 - cwd - idiv bx - mov [@@tex_dx12],ax ; tex_dx12 = (tex_x2-tex_x1)/(y2-y1) - - mov ax,[@@tex_y2] - sub ax,[@@tex_y1] - shl ax,7 - cwd - idiv bx - mov [@@tex_dy12],ax ; tex_dy12 = (tex_y2-tex_y1)/(y2-y1) -tt_dx12_done: - - mov bx,[@@y3] - sub bx,[@@y1] - jnz tt_dx13_make - - mov word [@@dx13],0 - mov word [@@tex_dx13],0 - mov word [@@tex_dy13],0 - jmp tt_dx13_done -tt_dx13_make: - mov ax,[@@x3] - sub ax,[@@x1] - shl ax,7 - cwd - idiv bx - mov [@@dx13],ax ; dx13 = (x3-x1)/(y3-y1) - - mov ax,[@@tex_x3] - sub ax,[@@tex_x1] - shl ax,7 - cwd - idiv bx - mov [@@tex_dx13],ax ; tex_dx13 = (tex_x3-tex_x1)/(y3-y1) - - mov ax,[@@tex_y3] - sub ax,[@@tex_y1] - shl ax,7 - cwd - idiv bx - mov [@@tex_dy13],ax ; tex_dy13 = (tex_y3-tex_x1)/(y3-y1) -tt_dx13_done: - - mov bx,[@@y3] - sub bx,[@@y2] - jnz tt_dx23_make - - mov word [@@dx23],0 - mov word [@@tex_dx23],0 - mov word [@@tex_dy23],0 - jmp tt_dx23_done -tt_dx23_make: - mov ax,[@@x3] - sub ax,[@@x2] - shl ax,7 - cwd - idiv bx - mov [@@dx23],ax ; dx23 = (x3-x2)/(y3-y2) - - mov ax,[@@tex_x3] - sub ax,[@@tex_x2] - shl ax,7 - cwd - idiv bx - mov [@@tex_dx23],ax ; tex_dx23 = (tex_x3-tex_x2)/(y3-y2) - - mov ax,[@@tex_y3] - sub ax,[@@tex_y2] - shl ax,7 - cwd - idiv bx - mov [@@tex_dy23],ax ; tex_dy23 = (tex_y3-tex_y2)/(y3-y2) -tt_dx23_done: - - - mov ax,[@@x1] - shl ax,7 - mov bx,ax - mov cx,[@@y1] - - mov dx,[@@tex_x1] - shl dx,7 - mov [@@scan_x1],dx - mov [@@scan_x2],dx - mov dx,[@@tex_y1] - shl dx,7 - mov [@@scan_y1],dx - mov [@@scan_y2],dx -tt_loop1: - pushad -; push ax -; push bx -; push cx - - mov dx,[@@scan_y2] - shr dx,7 - mov [@@tex_ly2],dx ;push dx - mov dx,[@@scan_x2] - shr dx,7 - mov [@@tex_lx2],dx ;push dx - mov dx,[@@scan_y1] - shr dx,7 - mov [@@tex_ly1],dx ;push dx - mov dx,[@@scan_x1] - shr dx,7 - mov [@@tex_lx1],dx ;push dx - mov ebp,dword [@@tex_off] ;push word ptr @@tex_off - mov [@@tex_loff],ebp - - mov [@@ly],cx ;push cx - mov dx,bx - shr dx,7 - mov [@@lx2],dx ;push dx - mov dx,ax - shr dx,7 - mov [@@lx1],dx ; push dx - call textured_horizontal_line - -; pop cx -; pop bx -; pop ax - popad - - mov dx,[@@tex_dx13] - add [@@scan_x1],dx - mov dx,[@@tex_dx12] - add [@@scan_x2],dx - mov dx,[@@tex_dy13] - add [@@scan_y1],dx - mov dx,[@@tex_dy12] - add [@@scan_y2],dx - - add ax,[@@dx13] - add bx,[@@dx12] - inc cx - cmp cx,[@@y2] - jb tt_loop1 - - mov bx,[@@x2] - shl bx,7 - mov cx,[@@y2] - - mov dx,[@@tex_x2] - shl dx,7 - mov [@@scan_x2],dx - mov dx,[@@tex_y2] - shl dx,7 - mov [@@scan_y2],dx -tt_loop2: - - pushad -; push ax -; push bx -; push cx - - mov dx,[@@scan_y2] - shr dx,7 - mov [@@tex_ly2],dx ;push dx - mov dx,[@@scan_x2] - shr dx,7 - mov [@@tex_lx2],dx ;push dx - mov dx,[@@scan_y1] - shr dx,7 - mov [@@tex_ly1],dx ;push dx - mov dx,[@@scan_x1] - shr dx,7 - mov [@@tex_lx1],dx ;push dx - mov ebp,dword [@@tex_off] ;push word ptr @@tex_off - mov [@@tex_loff],ebp - - mov [@@ly],cx ;push cx - mov dx,bx - shr dx,7 - mov [@@lx2],dx ;push dx - mov dx,ax - shr dx,7 - mov [@@lx1],dx ; push dx - call textured_horizontal_line - -; pop cx -; pop bx -; pop ax - popad - - mov dx,[@@tex_dx13] - add [@@scan_x1],dx - mov dx,[@@tex_dx23] - add [@@scan_x2],dx - mov dx,[@@tex_dy13] - add [@@scan_y1],dx - mov dx,[@@tex_dy23] - add [@@scan_y2],dx - - add ax,[@@dx13] - add bx,[@@dx23] - inc cx - cmp cx,[@@y3] - jb tt_loop2 - ret - -@@lx1 dw 0 ;equ [bp+4] -@@lx2 dw 0 ;equ [bp+6] -@@ly dw 0 ;equ [bp+8] - -@@tex_loff dd 0 ;equ [bp+10] -@@tex_lx1 dw 0 ;equ [bp+12] -@@tex_ly1 dw 0 ;equ [bp+14] -@@tex_lx2 dw 0 ;equ [bp+16] -@@tex_ly2 dw 0 ;equ [bp+18] - -@@tex_ldx dw 0 ;equ [bp-2] -@@tex_ldy dw 0 ;equ [bp-4] - -textured_horizontal_line: - - mov ax,[@@lx1] - cmp ax,[@@lx2] - je thl_quit - jb thl_ok - - xchg ax,[@@lx2] - mov [@@lx1],ax - - mov ax,[@@tex_lx1] - xchg ax,[@@tex_lx2] - mov [@@tex_lx1],ax - - mov ax,[@@tex_ly1] - xchg ax,[@@tex_ly2] - mov [@@tex_ly1],ax -thl_ok: - - ; Fast method -; mov edi,0 -; mov di,[@@ly] ;edi = calculating start of line -; mov ax,di -; shl di,6 ;ly*64 -; shl ax,8 ;ly*256 -; add di,ax ;di = (ly*64)+(ly*256) -; add di,[@@lx1] ;di = ly*320+lx1 -; mov eax,edi -; shl eax,1 -; add edi,eax -; add edi,scrbuf - - ; Uneversal method - movsx edi,[@@ly] - mov eax,800 ;di = ly*320+lx1 - mul edi - movsx ebx,[@@lx1] - add eax,ebx ;[@@lx1] - mov edi,3 - mul edi - mov edi,eax - add edi,scrbuf - - mov cx,[@@lx2] - sub cx,[@@lx1] - - mov ax,[@@tex_lx2] - sub ax,[@@tex_lx1] - shl ax,7 - cwd - idiv cx - mov [@@tex_ldx],ax ; tex_dx = (tex_x2-tex_x1)/(x2-x1) - - mov ax,[@@tex_ly2] - sub ax,[@@tex_ly1] - shl ax,7 - cwd - idiv cx - mov [@@tex_ldy],ax ; tex_dy = (tex_y2-tex_y1)/(x2-x1) - - cld - inc cx - mov ax,[@@tex_lx1] - shl ax,7 - mov bx,[@@tex_ly1] - shl bx,7 - -thl_loop: - mov dx,ax - push bx - - and bx,0ff80h - shr ax,7 - add bx,ax - mov ebp,0 - mov bp,bx - mov eax,ebp - shl eax,1 - add ebp,eax - add ebp,[@@tex_loff] - - mov al,byte [ebp+2] - stosb - mov al,byte [ebp+1] - stosb - mov al,byte [ebp] - stosb - - pop bx - mov ax,dx - - add ax,[@@tex_ldx] - add bx,[@@tex_ldy] - dec cx - jnz thl_loop -thl_quit: - ret - -;include math3d_2.asm -; Mikolaj Felix 20/06/2001 -; mfelix@polbox.com - -;------------------------------------------------------------ -; ds:si - offset to angles (int) -; ds:di - offset to array of 3d points -; cx - number of points -;------------------------------------------------------------ - -@@sin_x dd 0 ;equ dword ptr [bp-4] -@@cos_x dd 0 ;equ dword ptr [bp-8] -@@sin_y dd 0 ;equ dword ptr [bp-12] -@@cos_y dd 0 ;equ dword ptr [bp-16] -@@sin_z dd 0 ;equ dword ptr [bp-20] -@@cos_z dd 0 ;equ dword ptr [bp-24] - -@@x equ dword [edi] -@@y equ dword [edi+4] -@@z equ dword [edi+8] - -rotate_points: - - push edi - mov edi,@@sin_x - mov edx,3 -rp_sin_cos: - mov bx,word [esi] - and bx,MAX_DEGS-1 - shl bx,2 - mov eax,dword [sintab+bx] - mov dword [edi],eax - mov eax,dword [costab+bx] - mov dword [edi+4],eax - add edi,8 - add esi,2 - dec edx - jnz rp_sin_cos - pop edi - -rp_rotate: - fld @@y - fmul [@@cos_x] - fld @@z - fmul [@@sin_x] - fsubp st1,st - fld @@y - fxch st1 - fstp @@y ; Yrotated = Cos (A)*Y - Sin (A)*Z - fmul [@@sin_x] - fld @@z - fmul [@@cos_x] - faddp st1,st - fstp @@z ; Zrotated = Sin (A)*Y + Cos (A)*Z - - fld @@x - fmul [@@cos_y] - fld @@z - fmul [@@sin_y] - fsubp st1,st - fld @@x - fxch st1 - fstp @@x ; Xrotated = Cos (A)*X - Sin (A)*Z - fmul [@@sin_y] - fld @@z - fmul [@@cos_y] - faddp st1,st - fstp @@z ; Zrotated = Sin (A)*X + Cos (A)*Z - - fld @@x - fmul [@@cos_z] - fld @@y - fmul [@@sin_z] - fsubp st1,st - fld @@x - fxch st1 - fstp @@x ; Xrotated = Cos (A)*X - Sin (A)*Y - fmul [@@sin_z] - fld @@y - fmul [@@cos_z] - faddp st1,st - fstp @@y ; Yrotated = Sin (A)*X + Cos (A)*Y - - add edi,12 - dec ecx - jnz rp_rotate - ret - -;------------------------------------------------------------ -; ds:si - offset to array of 3d points -; ds:di - offset to 2d points -; cx - number of points -;------------------------------------------------------------ - -translate_points: - - fld dword [esi+8] - fadd [perspective] - - fld dword [esi] - fmul [perspective] - fdiv st,st1 - fadd [correct_x] - fistp word [edi] ; x2d = (x*persp)/(z+persp)+correct_x - - fld dword [esi+4] - fmul [perspective] - fdivrp st1,st - fadd [correct_y] - fistp word [edi+2] ; y2d = (y*persp)/(z+persp)+correct_y - - add esi,12 - add edi,4 - dec ecx - jnz translate_points - ret - -; initalize SIN&COS table - -@@temp1 dd 0 ;dword ptr [bp-4] -@@temp2 dd 0 ;dword ptr [bp-8] - -init_sincos: - mov [@@temp1],0 - fldpi - mov [@@temp2],MAX_DEGS/2 - fidiv [@@temp2] - fstp [@@temp2] - - xor edi,edi - mov ecx,MAX_DEGS -isc_loop: - fld [@@temp1] - fld st0 - fld st0 - fsin - fstp dword [sintab+edi] - fcos - fstp dword [costab+edi] - fadd [@@temp2] - fstp [@@temp1] - - add edi,4 - dec ecx - jnz isc_loop - ret - -perspective dd 256.0 -correct_x dd 400.0 -correct_y dd 300.0 - -angle_x dw 0 -angle_y dw 0 -angle_z dw 0 - -file_texture: -file 'texture.raw' - -cube dw -50,-50,50, 50,-50,50, 50,50,50, -50,50,50 - dw -50,-50,-50, 50,-50,-50, 50,50,-50, -50,50,-50 - -link db 0,1,2,3, 5,4,7,6, 1,5,6,2, 4,0,3,7, 4,5,1,0, 3,2,6,7 - -sintab: -rd MAX_DEGS -costab: -rd MAX_DEGS - -cube_rotated: -rd MAX_POINTS*3 -coord2d: -rw MAX_POINTS*2 -texture: -rb 128*128*3 -scrbuf: - -I_END: \ No newline at end of file +; SPDX-License-Identifier: NOASSERTION +; + +; +; 9 Ver Screen saver +; 5 Ver 24 bit texture. +; 23/8/2004 +; Pavlushin Evgeni 3d cube screen saver +; mail: waptap@mail.ru site: www.deck4.narod.ru +; +; This programm develop on sample text3d to Mikolaj Felix 25/5/2001 +; mfelix@polbox.com +; + +use32 + org 0x0 + db 'MENUET01' ; 8 byte id + dd 0x01 ; header version + dd START ; start of code + dd I_END ; size of image + dd 0x200000 ; memory for app + dd 0x200000 ; esp + dd 0x0 , 0x0 ; I_Param , I_Icon + +include 'lang.inc' +include '..\..\macros.inc' +MAX_DEGS equ 512 ;quantity of angels 2^n.Minimize for speedup +MAX_POINTS equ 8 ;quantity of points +MAX_FACES equ 6 ;quantity of points + +START: + finit + call draw_window + call clear_screen + call init_sincos + +still: + mov eax,23 ; wait for system event with 2 ms timeout + mov ebx,2 ; wait 2 ms, then continue + mcall + +; mov eax,11 ;If you want maximum speed! :) +; mcall + + dec eax ; window redraw request ? + je red + dec eax ; key in buffer ? + je key + dec eax ; button in buffer ? + je button + +main_loop: + call fade_texture + + mov esi,cube + mov edi,cube_rotated + mov ecx,MAX_POINTS*3 +copy_object: + fild word [esi] + fstp dword [edi] + add esi,2 + add edi,4 + dec ecx + jnz copy_object + + mov esi,angle_x + mov edi,cube_rotated + mov ecx,MAX_POINTS + call rotate_points + + mov esi,cube_rotated + mov edi,coord2d + mov ecx,MAX_POINTS + call translate_points + + call draw_textured_faces + call clear_screen_buffer + + add [angle_x],1 + add [angle_y],3 + add [angle_z],1 + + jmp still + +red: + call draw_window + jmp still +key: + mov eax,2 + jmp exit +button: + mov eax,17 + mcall + cmp ah,1 + jne still +exit: + mov eax,-1 + mcall + +;Draw window +draw_window: + mov eax,12 ;Start + mov ebx,1 + mcall + + mov eax,0 ;Draw window + mov ebx,0*65536+(799) ;x start*65536+x size + mov ecx,0*65536+(599) ;y start*65536+y size + mov edx,0x00000000 ;0x03 use skinned window + mcall + + call clear_screen + + mov eax,12 ;End + mov ebx,2 + mcall + ret + +head_label: db "3D TEXTURED CUBE THE LITTLE SCREEN SAVER FOR MENUETOS. USE " + db "800x600 SCREEN MODE FROM VIEW. PRESS ANY KEY FOR EXIT" +hl_end: + +;FADE IN FADE OUT TEXTURE + +x_step db 0 +x_num db 1 + +fade_texture: + mov ecx,0 +loox: + mov al,[file_texture+ecx] + mov [texture+ecx],al + inc ecx + cmp ecx,128*128*3 + jnae loox + + mov ecx,0 +loox2: + mov al,[file_texture+ecx] + cmp [x_step],al + jae xxx + sub al,[x_step] + jmp nnn +xxx: + mov al,0 +nnn: + mov [texture+ecx],al + inc ecx + cmp ecx,128*128*3 + jnae loox2 + + cmp [x_step],255 + jne no_max + mov [x_num],-1 +no_max: + cmp [x_step],0 + jne no_min + mov [x_num],1 +no_min: + mov al,[x_num] + add [x_step],al + ret + +; Clear Screen +clear_screen: + mov eax,13 + mov ebx,0*65536+800 + mov ecx,0*65536+600 + mov edx,0 + mcall + + mov eax,4 ;Out Text + mov ebx,8*65536+8 ;x start*65536+y start + mov ecx,0x00ffffff ;color White + mov edx,head_label + mov esi,hl_end-head_label + mcall + ret + +clear_screen_buffer: + mov ebx,scrbuf + mov ecx,800*65536+(600-40) ;sub 40 for antiflickering title + mov edx,0*65536+40 + mov eax,7 + mcall + + mov eax,4 ;Out Text + mov ebx,8*65536+580 ;x start*65536+y start + mov ebp,[n_step] + shl ebp,16 + sub ebx,ebp + mov ecx,0x0000ff00 ;color White + mov edx,move_text + add edx,[step] + mov esi,130 ;mt_end-move_text + mcall + + inc [n_step] + cmp [n_step],6 + jna t_ok + mov [n_step],0 + inc [step] + cmp [step],mt_end-move_text-130 + jng t_ok + mov [step],0 +t_ok: + + mov edi,scrbuf + mov eax,0 ;black background + mov ecx,800*600*3/4 ; 16000 + cld + rep stosd + ret + +n_step dd 0 +step dd 0 + +move_text: db " " + db " " + db " " + db "***** 3D TEXTURED CUBE THE LITTLE SCREEN SAVER FOR " + db "MENUET OS. SET 800x600 SCREEN MODE FROM VIEW THIS SCREEN " + db "SAVER ***** " + db "SITE OF THE RUSSIAN DEVELOPERS TO MENUETOS: " + db "www.menuet.narod.ru " + db "RUSSIAN MENUET APLICATION ARCHIVE PAGE ON: " + db "www.meosfiles.narod.ru " + db "AUTOR OF THIS SCREEN SAVER Pavlushin Evgeni " + db "MY SITE: www.deck4.narod.ru (Slow update) " + db "AND MAIL BOX: waptap@mail.ru " + db "THANK YOU FOR USE! " + db " " + db " " + db " " +mt_end: + + +;include graphlib.asm Mikolaj Felix 9/12/2000 mfelix@polbox.com +;Draw textured faces proc + +@@rx1 dw 0 ;equ [bp-2] +@@ry1 dw 0 ;equ [bp-4] +@@rx2 dw 0 ;equ [bp-6] +@@ry2 dw 0 ;equ [bp-8] +@@rx3 dw 0 ;equ [bp-10] +@@ry3 dw 0 ;equ [bp-12] +@@rx4 dw 0 ;equ [bp-14] +@@ry4 dw 0 ;equ [bp-16] + +draw_textured_faces: + + mov esi,link + mov ecx,MAX_FACES +dtf_loop: + push ecx + + xor ebx,ebx + mov bl,byte [esi] ; point 1 + shl bx,2 + mov eax,dword [coord2d+bx] ;COPY 1 FOURANGLE POINT + mov dword [@@rx1],eax + + xor ebx,ebx + mov bl,byte [esi+1] ; point 2 + shl bx,2 + mov eax,dword [coord2d+bx] ;COPY 2 FOURANGLE POINT + mov dword [@@rx2],eax + + xor ebx,ebx + mov bl,byte [esi+2] ; point 3 + shl bx,2 + mov eax,dword [coord2d+bx] ;COPY 3 FOURANGLE POINT + mov dword [@@rx3],eax + + xor bh,bh ; point 4 + mov bl,byte [esi+3] + shl bx,2 + mov eax,dword [coord2d+bx] ;COPY 4 FOURANGLE POINT + mov dword [@@rx4],eax + + mov ax,[@@ry1] + sub ax,[@@ry3] + mov bx,[@@rx2] + sub bx,[@@rx1] + imul bx + shl edx,16 + mov dx,ax + push edx + mov ax,[@@rx1] + sub ax,[@@rx3] + mov bx,[@@ry2] + sub bx,[@@ry1] + imul bx + shl edx,16 + mov dx,ax + pop ebx + sub ebx,edx ; normal_z = (y1-y3)*(x2-x1)-(x1-x3)*(y2-y1) + or ebx,ebx + jl dtf_next_face ; normal_z < 0 + + ; FIRST PICE OF FOUR ANGLE + + ; Set 3 triangel puts for texture ycoord*65536+xcoord + mov dword [@@tex_x3],127*65536+127 ;3 point + mov dword [@@tex_x2],0*65536+127 ;2 point + mov dword [@@tex_x1],0*65536+0 ;1 point + ; Set texture bitmap offset + mov [@@tex_off],texture + ; Set 3 triangel puts coordinates + mov eax,dword [@@rx3] + mov dword [@@x3],eax + mov eax,dword [@@rx2] + mov dword [@@x2],eax + mov eax,dword [@@rx1] + mov dword [@@x1],eax + call textured_triangle + + ; SECOND PICE OF FOUR ANGLE + + ; Set 3 triangel puts for texture ycoord*65536+xcoord + mov dword [@@tex_x3],127*65536+0 ;3 point + mov dword [@@tex_x2],127*65536+127 ;2 point + mov dword [@@tex_x1],0*65536+0 ;1 point + ; Set texture bitmap offset + mov [@@tex_off],texture + ; Set 3 triangel puts coordinates + mov eax,dword [@@rx4] + mov dword [@@x3],eax + mov eax,dword [@@rx3] + mov dword [@@x2],eax + mov eax,dword [@@rx1] + mov dword [@@x1],eax + call textured_triangle + +dtf_next_face: + add esi,4 + pop ecx + dec ecx + jnz dtf_loop + ret + +;include tex3.asm Mikolaj Felix 15/5/2001 mfelix@polbox.com + +@@x1 dw 0 ;equ [bp+4] +@@y1 dw 0 ;equ [bp+6] +@@x2 dw 0 ;equ [bp+8] +@@y2 dw 0 ;equ [bp+10] +@@x3 dw 0 ;equ [bp+12] +@@y3 dw 0 ;equ [bp+14] + +@@tex_off dd 0 ;equ [bp+16] +@@tex_x1 dw 0 ;equ [bp+18] +@@tex_y1 dw 0 ;equ [bp+20] +@@tex_x2 dw 0 ;equ [bp+22] +@@tex_y2 dw 0 ;equ [bp+24] +@@tex_x3 dw 0 ;equ [bp+26] +@@tex_y3 dw 0 ;equ [bp+28] + +@@dx12 dw 0 ;equ [bp-2] +@@dx13 dw 0 ;equ [bp-4] +@@dx23 dw 0 ;equ [bp-6] + +@@tex_dx12 dw 0 ;equ [bp-8] +@@tex_dy12 dw 0 ;equ [bp-10] +@@tex_dx13 dw 0 ;equ [bp-12] +@@tex_dy13 dw 0 ;equ [bp-14] +@@tex_dx23 dw 0 ;equ [bp-16] +@@tex_dy23 dw 0 ;equ [bp-18] + +@@scan_x1 dw 0 ;equ [bp-20] +@@scan_y1 dw 0 ;equ [bp-22] +@@scan_x2 dw 0 ;equ [bp-24] +@@scan_y2 dw 0 ;equ [bp-26] + + +textured_triangle: + + mov ax,[@@y1] + cmp ax,[@@y3] + jb tt_check1 + + xchg ax,[@@y3] + mov [@@y1],ax + + mov ax,[@@x1] + xchg ax,[@@x3] + mov [@@x1],ax + + mov ax,[@@tex_y1] + xchg ax,[@@tex_y3] + mov [@@tex_y1],ax + + mov ax,[@@tex_x1] + xchg ax,[@@tex_x3] + mov [@@tex_x1],ax +tt_check1: + mov ax,[@@y2] + cmp ax,[@@y3] + jb tt_check2 + + xchg ax,[@@y3] + mov [@@y2],ax + + mov ax,[@@x2] + xchg ax,[@@x3] + mov [@@x2],ax + + mov ax,[@@tex_y2] + xchg ax,[@@tex_y3] + mov [@@tex_y2],ax + + mov ax,[@@tex_x2] + xchg ax,[@@tex_x3] + mov [@@tex_x2],ax +tt_check2: + mov ax,[@@y1] + cmp ax,[@@y2] + jb tt_check3 + + xchg ax,[@@y2] + mov [@@y1],ax + + mov ax,[@@x1] + xchg ax,[@@x2] + mov [@@x1],ax + + mov ax,[@@tex_y1] + xchg ax,[@@tex_y2] + mov [@@tex_y1],ax + + mov ax,[@@tex_x1] + xchg ax,[@@tex_x2] + mov [@@tex_x1],ax +tt_check3: + + mov bx,[@@y2] + sub bx,[@@y1] + jnz tt_dx12_make + + mov word [@@dx12],0 + mov word [@@tex_dx12],0 + mov word [@@tex_dy12],0 + jmp tt_dx12_done +tt_dx12_make: + mov ax,[@@x2] + sub ax,[@@x1] + shl ax,7 + cwd + idiv bx + mov [@@dx12],ax ; dx12 = (x2-x1)/(y2-y1) + + mov ax,[@@tex_x2] + sub ax,[@@tex_x1] + shl ax,7 + cwd + idiv bx + mov [@@tex_dx12],ax ; tex_dx12 = (tex_x2-tex_x1)/(y2-y1) + + mov ax,[@@tex_y2] + sub ax,[@@tex_y1] + shl ax,7 + cwd + idiv bx + mov [@@tex_dy12],ax ; tex_dy12 = (tex_y2-tex_y1)/(y2-y1) +tt_dx12_done: + + mov bx,[@@y3] + sub bx,[@@y1] + jnz tt_dx13_make + + mov word [@@dx13],0 + mov word [@@tex_dx13],0 + mov word [@@tex_dy13],0 + jmp tt_dx13_done +tt_dx13_make: + mov ax,[@@x3] + sub ax,[@@x1] + shl ax,7 + cwd + idiv bx + mov [@@dx13],ax ; dx13 = (x3-x1)/(y3-y1) + + mov ax,[@@tex_x3] + sub ax,[@@tex_x1] + shl ax,7 + cwd + idiv bx + mov [@@tex_dx13],ax ; tex_dx13 = (tex_x3-tex_x1)/(y3-y1) + + mov ax,[@@tex_y3] + sub ax,[@@tex_y1] + shl ax,7 + cwd + idiv bx + mov [@@tex_dy13],ax ; tex_dy13 = (tex_y3-tex_x1)/(y3-y1) +tt_dx13_done: + + mov bx,[@@y3] + sub bx,[@@y2] + jnz tt_dx23_make + + mov word [@@dx23],0 + mov word [@@tex_dx23],0 + mov word [@@tex_dy23],0 + jmp tt_dx23_done +tt_dx23_make: + mov ax,[@@x3] + sub ax,[@@x2] + shl ax,7 + cwd + idiv bx + mov [@@dx23],ax ; dx23 = (x3-x2)/(y3-y2) + + mov ax,[@@tex_x3] + sub ax,[@@tex_x2] + shl ax,7 + cwd + idiv bx + mov [@@tex_dx23],ax ; tex_dx23 = (tex_x3-tex_x2)/(y3-y2) + + mov ax,[@@tex_y3] + sub ax,[@@tex_y2] + shl ax,7 + cwd + idiv bx + mov [@@tex_dy23],ax ; tex_dy23 = (tex_y3-tex_y2)/(y3-y2) +tt_dx23_done: + + + mov ax,[@@x1] + shl ax,7 + mov bx,ax + mov cx,[@@y1] + + mov dx,[@@tex_x1] + shl dx,7 + mov [@@scan_x1],dx + mov [@@scan_x2],dx + mov dx,[@@tex_y1] + shl dx,7 + mov [@@scan_y1],dx + mov [@@scan_y2],dx +tt_loop1: + pushad +; push ax +; push bx +; push cx + + mov dx,[@@scan_y2] + shr dx,7 + mov [@@tex_ly2],dx ;push dx + mov dx,[@@scan_x2] + shr dx,7 + mov [@@tex_lx2],dx ;push dx + mov dx,[@@scan_y1] + shr dx,7 + mov [@@tex_ly1],dx ;push dx + mov dx,[@@scan_x1] + shr dx,7 + mov [@@tex_lx1],dx ;push dx + mov ebp,dword [@@tex_off] ;push word ptr @@tex_off + mov [@@tex_loff],ebp + + mov [@@ly],cx ;push cx + mov dx,bx + shr dx,7 + mov [@@lx2],dx ;push dx + mov dx,ax + shr dx,7 + mov [@@lx1],dx ; push dx + call textured_horizontal_line + +; pop cx +; pop bx +; pop ax + popad + + mov dx,[@@tex_dx13] + add [@@scan_x1],dx + mov dx,[@@tex_dx12] + add [@@scan_x2],dx + mov dx,[@@tex_dy13] + add [@@scan_y1],dx + mov dx,[@@tex_dy12] + add [@@scan_y2],dx + + add ax,[@@dx13] + add bx,[@@dx12] + inc cx + cmp cx,[@@y2] + jb tt_loop1 + + mov bx,[@@x2] + shl bx,7 + mov cx,[@@y2] + + mov dx,[@@tex_x2] + shl dx,7 + mov [@@scan_x2],dx + mov dx,[@@tex_y2] + shl dx,7 + mov [@@scan_y2],dx +tt_loop2: + + pushad +; push ax +; push bx +; push cx + + mov dx,[@@scan_y2] + shr dx,7 + mov [@@tex_ly2],dx ;push dx + mov dx,[@@scan_x2] + shr dx,7 + mov [@@tex_lx2],dx ;push dx + mov dx,[@@scan_y1] + shr dx,7 + mov [@@tex_ly1],dx ;push dx + mov dx,[@@scan_x1] + shr dx,7 + mov [@@tex_lx1],dx ;push dx + mov ebp,dword [@@tex_off] ;push word ptr @@tex_off + mov [@@tex_loff],ebp + + mov [@@ly],cx ;push cx + mov dx,bx + shr dx,7 + mov [@@lx2],dx ;push dx + mov dx,ax + shr dx,7 + mov [@@lx1],dx ; push dx + call textured_horizontal_line + +; pop cx +; pop bx +; pop ax + popad + + mov dx,[@@tex_dx13] + add [@@scan_x1],dx + mov dx,[@@tex_dx23] + add [@@scan_x2],dx + mov dx,[@@tex_dy13] + add [@@scan_y1],dx + mov dx,[@@tex_dy23] + add [@@scan_y2],dx + + add ax,[@@dx13] + add bx,[@@dx23] + inc cx + cmp cx,[@@y3] + jb tt_loop2 + ret + +@@lx1 dw 0 ;equ [bp+4] +@@lx2 dw 0 ;equ [bp+6] +@@ly dw 0 ;equ [bp+8] + +@@tex_loff dd 0 ;equ [bp+10] +@@tex_lx1 dw 0 ;equ [bp+12] +@@tex_ly1 dw 0 ;equ [bp+14] +@@tex_lx2 dw 0 ;equ [bp+16] +@@tex_ly2 dw 0 ;equ [bp+18] + +@@tex_ldx dw 0 ;equ [bp-2] +@@tex_ldy dw 0 ;equ [bp-4] + +textured_horizontal_line: + + mov ax,[@@lx1] + cmp ax,[@@lx2] + je thl_quit + jb thl_ok + + xchg ax,[@@lx2] + mov [@@lx1],ax + + mov ax,[@@tex_lx1] + xchg ax,[@@tex_lx2] + mov [@@tex_lx1],ax + + mov ax,[@@tex_ly1] + xchg ax,[@@tex_ly2] + mov [@@tex_ly1],ax +thl_ok: + + ; Fast method +; mov edi,0 +; mov di,[@@ly] ;edi = calculating start of line +; mov ax,di +; shl di,6 ;ly*64 +; shl ax,8 ;ly*256 +; add di,ax ;di = (ly*64)+(ly*256) +; add di,[@@lx1] ;di = ly*320+lx1 +; mov eax,edi +; shl eax,1 +; add edi,eax +; add edi,scrbuf + + ; Uneversal method + movsx edi,[@@ly] + mov eax,800 ;di = ly*320+lx1 + mul edi + movsx ebx,[@@lx1] + add eax,ebx ;[@@lx1] + mov edi,3 + mul edi + mov edi,eax + add edi,scrbuf + + mov cx,[@@lx2] + sub cx,[@@lx1] + + mov ax,[@@tex_lx2] + sub ax,[@@tex_lx1] + shl ax,7 + cwd + idiv cx + mov [@@tex_ldx],ax ; tex_dx = (tex_x2-tex_x1)/(x2-x1) + + mov ax,[@@tex_ly2] + sub ax,[@@tex_ly1] + shl ax,7 + cwd + idiv cx + mov [@@tex_ldy],ax ; tex_dy = (tex_y2-tex_y1)/(x2-x1) + + cld + inc cx + mov ax,[@@tex_lx1] + shl ax,7 + mov bx,[@@tex_ly1] + shl bx,7 + +thl_loop: + mov dx,ax + push bx + + and bx,0ff80h + shr ax,7 + add bx,ax + mov ebp,0 + mov bp,bx + mov eax,ebp + shl eax,1 + add ebp,eax + add ebp,[@@tex_loff] + + mov al,byte [ebp+2] + stosb + mov al,byte [ebp+1] + stosb + mov al,byte [ebp] + stosb + + pop bx + mov ax,dx + + add ax,[@@tex_ldx] + add bx,[@@tex_ldy] + dec cx + jnz thl_loop +thl_quit: + ret + +;include math3d_2.asm +; Mikolaj Felix 20/06/2001 +; mfelix@polbox.com + +;------------------------------------------------------------ +; ds:si - offset to angles (int) +; ds:di - offset to array of 3d points +; cx - number of points +;------------------------------------------------------------ + +@@sin_x dd 0 ;equ dword ptr [bp-4] +@@cos_x dd 0 ;equ dword ptr [bp-8] +@@sin_y dd 0 ;equ dword ptr [bp-12] +@@cos_y dd 0 ;equ dword ptr [bp-16] +@@sin_z dd 0 ;equ dword ptr [bp-20] +@@cos_z dd 0 ;equ dword ptr [bp-24] + +@@x equ dword [edi] +@@y equ dword [edi+4] +@@z equ dword [edi+8] + +rotate_points: + + push edi + mov edi,@@sin_x + mov edx,3 +rp_sin_cos: + mov bx,word [esi] + and bx,MAX_DEGS-1 + shl bx,2 + mov eax,dword [sintab+bx] + mov dword [edi],eax + mov eax,dword [costab+bx] + mov dword [edi+4],eax + add edi,8 + add esi,2 + dec edx + jnz rp_sin_cos + pop edi + +rp_rotate: + fld @@y + fmul [@@cos_x] + fld @@z + fmul [@@sin_x] + fsubp st1,st + fld @@y + fxch st1 + fstp @@y ; Yrotated = Cos (A)*Y - Sin (A)*Z + fmul [@@sin_x] + fld @@z + fmul [@@cos_x] + faddp st1,st + fstp @@z ; Zrotated = Sin (A)*Y + Cos (A)*Z + + fld @@x + fmul [@@cos_y] + fld @@z + fmul [@@sin_y] + fsubp st1,st + fld @@x + fxch st1 + fstp @@x ; Xrotated = Cos (A)*X - Sin (A)*Z + fmul [@@sin_y] + fld @@z + fmul [@@cos_y] + faddp st1,st + fstp @@z ; Zrotated = Sin (A)*X + Cos (A)*Z + + fld @@x + fmul [@@cos_z] + fld @@y + fmul [@@sin_z] + fsubp st1,st + fld @@x + fxch st1 + fstp @@x ; Xrotated = Cos (A)*X - Sin (A)*Y + fmul [@@sin_z] + fld @@y + fmul [@@cos_z] + faddp st1,st + fstp @@y ; Yrotated = Sin (A)*X + Cos (A)*Y + + add edi,12 + dec ecx + jnz rp_rotate + ret + +;------------------------------------------------------------ +; ds:si - offset to array of 3d points +; ds:di - offset to 2d points +; cx - number of points +;------------------------------------------------------------ + +translate_points: + + fld dword [esi+8] + fadd [perspective] + + fld dword [esi] + fmul [perspective] + fdiv st,st1 + fadd [correct_x] + fistp word [edi] ; x2d = (x*persp)/(z+persp)+correct_x + + fld dword [esi+4] + fmul [perspective] + fdivrp st1,st + fadd [correct_y] + fistp word [edi+2] ; y2d = (y*persp)/(z+persp)+correct_y + + add esi,12 + add edi,4 + dec ecx + jnz translate_points + ret + +; initalize SIN&COS table + +@@temp1 dd 0 ;dword ptr [bp-4] +@@temp2 dd 0 ;dword ptr [bp-8] + +init_sincos: + mov [@@temp1],0 + fldpi + mov [@@temp2],MAX_DEGS/2 + fidiv [@@temp2] + fstp [@@temp2] + + xor edi,edi + mov ecx,MAX_DEGS +isc_loop: + fld [@@temp1] + fld st0 + fld st0 + fsin + fstp dword [sintab+edi] + fcos + fstp dword [costab+edi] + fadd [@@temp2] + fstp [@@temp1] + + add edi,4 + dec ecx + jnz isc_loop + ret + +perspective dd 256.0 +correct_x dd 400.0 +correct_y dd 300.0 + +angle_x dw 0 +angle_y dw 0 +angle_z dw 0 + +file_texture: +file 'texture.raw' + +cube dw -50,-50,50, 50,-50,50, 50,50,50, -50,50,50 + dw -50,-50,-50, 50,-50,-50, 50,50,-50, -50,50,-50 + +link db 0,1,2,3, 5,4,7,6, 1,5,6,2, 4,0,3,7, 4,5,1,0, 3,2,6,7 + +sintab: +rd MAX_DEGS +costab: +rd MAX_DEGS + +cube_rotated: +rd MAX_POINTS*3 +coord2d: +rw MAX_POINTS*2 +texture: +rb 128*128*3 +scrbuf: + +I_END: diff --git a/programs/demos/3dtcub10/trunk/Tupfile.lua b/programs/demos/3dtcub10/Tupfile.lua similarity index 79% rename from programs/demos/3dtcub10/trunk/Tupfile.lua rename to programs/demos/3dtcub10/Tupfile.lua index d51936b61..ea973e423 100644 --- a/programs/demos/3dtcub10/trunk/Tupfile.lua +++ b/programs/demos/3dtcub10/Tupfile.lua @@ -1,5 +1,5 @@ if tup.getconfig("NO_FASM") ~= "" then return end -HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR") +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.include(HELPERDIR .. "/use_fasm.lua") add_include(tup.getvariantdir()) diff --git a/programs/demos/3dtcub10/trunk/build_en.bat b/programs/demos/3dtcub10/build_en.bat similarity index 100% rename from programs/demos/3dtcub10/trunk/build_en.bat rename to programs/demos/3dtcub10/build_en.bat diff --git a/programs/demos/3dtcub10/trunk/build_ru.bat b/programs/demos/3dtcub10/build_ru.bat similarity index 100% rename from programs/demos/3dtcub10/trunk/build_ru.bat rename to programs/demos/3dtcub10/build_ru.bat diff --git a/programs/demos/3dtcub10/trunk/texture.raw b/programs/demos/3dtcub10/texture.raw similarity index 100% rename from programs/demos/3dtcub10/trunk/texture.raw rename to programs/demos/3dtcub10/texture.raw