Subversion Repositories Kolibri OS

Rev

Rev 6769 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6769 Rev 8014
Line 1... Line 1...
1
do_sinus:
1
do_sinus:
2
   .x	   equ	[ebp-8]
2
   .x      equ  [ebp-8]
3
   .y	   equ	[ebp-12]
3
   .y      equ  [ebp-12]
4
   .new_y  equ	[ebp-16]
4
   .new_y  equ  [ebp-16]
5
   .temp   equ	[ebp-20]
5
   .temp   equ  [ebp-20]
6
   push    ebp
6
   push    ebp
7
   mov	   ebp,esp
7
   mov     ebp,esp
8
   sub	   esp,64
8
   sub     esp,64
9
   mov	   dword .x,0
9
   mov     dword .x,0
10
   mov	   dword .y,0
10
   mov     dword .y,0
11
   mov	   esi,[screen_ptr]
11
   mov     esi,[screen_ptr]
12
   mov	   edi,[Zbuffer_ptr]
12
   mov     edi,[Zbuffer_ptr]
13
   push    edi
13
   push    edi
14
   ;  clear Zbuffer temporally used as image buffer
14
   ;  clear Zbuffer temporally used as image buffer
15
   movzx   ecx,word[size_x_var]
15
   movzx   ecx,word[size_x_var]
16
   movzx   eax,word[size_y_var]
16
   movzx   eax,word[size_y_var]
17
   imul    ecx,eax  ;SIZE_X*SIZE_Y
17
   imul    ecx,eax  ;SIZE_X*SIZE_Y
18
   xor	   eax,eax
18
   xor     eax,eax
19
   cld
19
   cld
20
   rep	   stosd
20
   rep     stosd
21
   pop	   edi
21
   pop     edi
22
;   movzx   eax,[sinus_flag]
22
;   movzx   eax,[sinus_flag]
23
;   mov     edx,10
23
;   mov     edx,10
24
;   mul     edx
24
;   mul     edx
25
;   mov     [sin_amplitude],eax
25
;   mov     [sin_amplitude],eax
26
;   mov     [sin_frq],eax
26
;   mov     [sin_frq],eax
Line 43... Line 43...
43
   fistp   dword .new_y
43
   fistp   dword .new_y
44
else
44
else
45
   fild    dword .x
45
   fild    dword .x
46
   fmul    [sin_frq]
46
   fmul    [sin_frq]
47
   fistp   dword .temp
47
   fistp   dword .temp
48
   mov	   eax, .temp
48
   mov     eax, .temp
49
;   mov     bx, [angle_x]
49
;   mov     bx, [angle_x]
50
;   add     bx, [angle_y]
50
;   add     bx, [angle_y]
51
;   movzx   ebx,bx
51
;   movzx   ebx,bx
52
;   shr     ebx,1       ; change phase
52
;   shr     ebx,1       ; change phase
53
;   add     eax,ebx
53
;   add     eax,ebx
Line 54... Line 54...
54
 
54
 
Line 55... Line 55...
55
 
55
 
56
   and	   eax, 0x000000ff
56
   and     eax, 0x000000ff
57
 
57
 
58
;   cdq
58
;   cdq
59
 ;  mul     [sin_frq]
59
 ;  mul     [sin_frq]
Line 60... Line 60...
60
;   and      eax,0x000000ff
60
;   and      eax,0x000000ff
61
;   and     ax,0x00ff
61
;   and     ax,0x00ff
62
;   cwde
62
;   cwde
63
 
63
 
64
   fld	   dword [sin_tab+eax*4]
64
   fld     dword [sin_tab+eax*4]
65
   fimul   dword [sin_amplitude]
65
   fimul   dword [sin_amplitude]
66
   fiadd   dword .y
66
   fiadd   dword .y
67
   fistp   dword .new_y
67
   fistp   dword .new_y
68
end if
68
end if
69
   mov	   eax,.new_y
69
   mov     eax,.new_y
70
   or	   eax,eax
70
   or      eax,eax
71
   jl	   .skip
71
   jl      .skip
72
   movzx   ebx,word[size_y_var]
72
   movzx   ebx,word[size_y_var]
73
   cmp	   eax,ebx  ;SIZE_Y
73
   cmp     eax,ebx  ;SIZE_Y
74
   jg	   .skip
74
   jg      .skip
75
   movzx   edx,word[size_x_var]
75
   movzx   edx,word[size_x_var]
76
   mul	   edx
76
   mul     edx
77
;   shl     eax,9
77
;   shl     eax,9
78
   add	   eax,dword .x
78
   add     eax,dword .x
79
   lea	   ebx,[eax*3]
79
   lea     ebx,[eax*3]
80
   mov	   eax,[esi]
80
   mov     eax,[esi]
81
   mov	   [edi+ebx],eax
81
   mov     [edi+ebx],eax
82
 .skip:
82
 .skip:
83
   add	   esi,3
83
   add     esi,3
84
   inc	   dword .x
84
   inc     dword .x
85
   movzx   edx,word[size_x_var]
85
   movzx   edx,word[size_x_var]
86
   cmp	   dword .x,edx  ;SIZE_X
86
   cmp     dword .x,edx  ;SIZE_X
87
   jl	   .again
87
   jl      .again
88
   mov	   dword .x,0
88
   mov     dword .x,0
Line 89... Line 89...
89
   inc	   dword .y
89
   inc     dword .y
90
   movzx   edx,word[size_y_var]
90
   movzx   edx,word[size_y_var]
91
   cmp	   dword .y,edx   ;SIZE_Y
91
   cmp     dword .y,edx   ;SIZE_Y
92
   jl	   .again
92
   jl      .again
93
 
93
 
94
   ; copy from temporary buffer -> Zbuffer to screen
94
   ; copy from temporary buffer -> Zbuffer to screen
95
   mov	   esi,[Zbuffer_ptr]
95
   mov     esi,[Zbuffer_ptr]
96
   mov	   edi,[screen_ptr]
96
   mov     edi,[screen_ptr]
97
   movzx   ecx,word[size_x_var]
97
   movzx   ecx,word[size_x_var]
98
   movzx   eax,word[size_y_var]
98
   movzx   eax,word[size_y_var]
99
   imul    ecx,eax
99
   imul    ecx,eax
Line 100... Line 100...
100
   lea	   ecx,[ecx*3]
100
   lea     ecx,[ecx*3]
101
   shr	   ecx,2
101
   shr     ecx,2
102
 ;  mov     ecx,SIZE_X*SIZE_Y*3/4
102
 ;  mov     ecx,SIZE_X*SIZE_Y*3/4
Line 103... Line 103...
103
   cld
103
   cld
104
   rep	   movsd
104
   rep     movsd
105
 
105
 
106
 
106
 
107
   mov	   esp,ebp
107
   mov     esp,ebp
108
   pop	   ebp
108
   pop     ebp
109
ret
109
ret
110
 
110
 
111
 
111
 
112
draw_dots:
112
draw_dots:
113
   mov	   esi,[points_translated_ptr]
113
   mov     esi,[points_translated_ptr]
114
   movzx   ecx,[points_count_var]
114
   mov     ecx,[points_count_var]
115
 .drw:
115
 .drw:
116
 @@:
116
 @@:
117
   lodsd
117
   lodsd
118
   add	   esi,2	   ; skip z
118
   add     esi,2           ; skip z
119
   movzx   ebx,ax
119
   movzx   ebx,ax
120
   shr	   eax,16	   ; bx = x , ax = y
120
   shr     eax,16          ; bx = x , ax = y
121
   or	   ax,ax
121
   or      ax,ax
122
   jl	   @f
122
   jl      @f
123
   or	   bx,bx
123
   or      bx,bx
124
   jl	   @f
124
   jl      @f
125
   cmp	   ax,[size_y_var]  ;SIZE_Y
125
   cmp     ax,[size_y_var]  ;SIZE_Y
126
   jge	   @f
126
   jge     @f
127
   cmp	   bx,[size_x_var]  ;SIZE_X
127
   cmp     bx,[size_x_var]  ;SIZE_X
128
   jge	   @f
128
   jge     @f
129
   movzx   edx,word[size_x_var]  ;SIZE_X      ; SIZE_X not only power of 2   -> 256,512,...
129
   movzx   edx,word[size_x_var]  ;SIZE_X      ; SIZE_X not only power of 2   -> 256,512,...
130
   mul	   edx
130
   mul     edx
Line 131... Line 131...
131
   add	   eax,ebx
131
   add     eax,ebx
Line 174... Line 174...
174
 movlps     xmm4,[edx]
174
 movlps     xmm4,[edx]
175
 movhps     xmm4,[edx+3]
175
 movhps     xmm4,[edx+3]
176
 punpcklbw  xmm3,xmm0
176
 punpcklbw  xmm3,xmm0
177
 punpcklbw  xmm4,xmm0
177
 punpcklbw  xmm4,xmm0
178
 psubsw     xmm1,xmm2
178
 psubsw     xmm1,xmm2
179
 paddw	    xmm1,[emboss_bias]
179
 paddw      xmm1,[emboss_bias]
180
 psubsw     xmm3,xmm4
180
 psubsw     xmm3,xmm4
181
 paddw	    xmm3,[emboss_bias]
181
 paddw      xmm3,[emboss_bias]
182
 pmulhw     xmm1,xmm3
182
 pmulhw     xmm1,xmm3
183
 movaps      xmm7,xmm1
183
 movaps      xmm7,xmm1
184
 movaps      xmm6,xmm1
184
 movaps      xmm6,xmm1
185
 psrlq	     xmm7,2*8
185
 psrlq       xmm7,2*8
186
 psrlq	     xmm6,4*8
186
 psrlq       xmm6,4*8
187
 pmaxsw      xmm1,xmm7
187
 pmaxsw      xmm1,xmm7
188
 pmaxsw      xmm1,xmm6
188
 pmaxsw      xmm1,xmm6
Line 189... Line 189...
189
 
189
 
190
if 0
190
if 0
191
 movaps      xmm7,xmm3
191
 movaps      xmm7,xmm3
192
 movaps      xmm6,xmm3
192
 movaps      xmm6,xmm3
193
 psrlq	     xmm7,2*8
193
 psrlq       xmm7,2*8
194
 psrlq	     xmm6,4*8
194
 psrlq       xmm6,4*8
195
 pmaxsw      xmm3,xmm7
195
 pmaxsw      xmm3,xmm7
196
 pmaxsw      xmm3,xmm6
196
 pmaxsw      xmm3,xmm6
197
end if
197
end if
Line 198... Line 198...
198
 pmaxsw      xmm1,xmm3
198
 pmaxsw      xmm1,xmm3
199
 
199
 
200
 movd	     eax,xmm1
200
 movd        eax,xmm1
201
 movzx	     eax,al
201
 movzx       eax,al
202
 lea	     eax,[eax*3+envmap_cub]
202
 lea         eax,[eax*3+envmap_cub]
203
 mov	     eax,[eax]
203
 mov         eax,[eax]
204
 mov	    [edi],eax  ;xmm1
204
 mov        [edi],eax  ;xmm1
205
 psrldq     xmm1,8
205
 psrldq     xmm1,8
206
 movd	    eax,xmm1
206
 movd       eax,xmm1
207
 movzx	    eax,al
207
 movzx      eax,al
208
 lea	    eax,[eax*3+envmap_cub]
208
 lea        eax,[eax*3+envmap_cub]
209
 mov	    eax,[eax]
209
 mov        eax,[eax]
210
 mov	    [edi+4],eax
210
 mov        [edi+4],eax
211
 
211
 
212
 
212
 
213
 add	edi,8
213
 add    edi,8
214
 add	esi,6
214
 add    esi,6
215
 add	ebx,6
215
 add    ebx,6
216
 add	edx,6
216
 add    edx,6
217
 sub	ecx,2
217
 sub    ecx,2
218
 jnc	@b
218
 jnc    @b
219
 
219
 
220
 
220
 
221
 pop	ecx  ;,eax
221
 pop    ecx  ;,eax
222
 mov	edi,[screen_ptr]
222
 mov    edi,[screen_ptr]
223
 mov	esi,[Zbuffer_ptr]
223
 mov    esi,[Zbuffer_ptr]
224
@@:
224
@@:
225
 movsd
225
 movsd
226
 dec	edi
226
 dec    edi
227
 loop	@b
227
 loop   @b
Line 228... Line 228...
228
end if
228
end if
229
ret
229
ret
Line 236... Line 236...
236
 
236
 
237
 ;  emboss -  after drawing all,
237
 ;  emboss -  after drawing all,
238
 ;  transfer screen buffer into bump map
238
 ;  transfer screen buffer into bump map
239
 ;  and draw two bump triangles
239
 ;  and draw two bump triangles
240
 ; *************************************
240
 ; *************************************
241
	mov	esi,screen
241
        mov     esi,screen
242
	mov	edi,bumpmap2
242
        mov     edi,bumpmap2
243
	mov	ecx,TEXTURE_SIZE/3
243
        mov     ecx,TEXTURE_SIZE/3
244
	cld
244
        cld
245
if  Ext=NON
245
if  Ext=NON
246
	xor	eax,eax
246
        xor     eax,eax
247
	xor	bh,bh
247
        xor     bh,bh
248
	xor	dh,dh
248
        xor     dh,dh
249
      @@:
249
      @@:
250
	lodsb
250
        lodsb
251
	movzx	bx,al
251
        movzx   bx,al
252
	lodsb
252
        lodsb
253
	movzx	dx,al
253
        movzx   dx,al
254
	lodsb
254
        lodsb
255
	add	ax,bx
255
        add     ax,bx
256
	add	ax,dx
256
        add     ax,dx
257
      ;  cwd
257
      ;  cwd
258
      ;  div     [i3]
258
      ;  div     [i3]
259
 ;;       push    ax
259
 ;;       push    ax
260
 ;;       pop     bx
260
 ;;       pop     bx
261
 ;;       shr     bx,3
261
 ;;       shr     bx,3
262
 ;;       shr     ax,2
262
 ;;       shr     ax,2
Line 263... Line 263...
263
 ;;       add     ax,bx
263
 ;;       add     ax,bx
264
 
264
 
Line 265... Line 265...
265
	lea	 eax,[eax*5]
265
        lea      eax,[eax*5]
266
	shr	 ax,4
266
        shr      ax,4
267
 
267
 
268
	stosb
268
        stosb
269
	loop	@b
269
        loop    @b
270
else
270
else
271
	emms
271
        emms
272
	pxor	      mm1,mm1
272
        pxor          mm1,mm1
273
	mov	      ebx,0x0000ffff
273
        mov           ebx,0x0000ffff
274
      @@:
274
      @@:
275
	movd	      mm0,[esi]
275
        movd          mm0,[esi]
276
	punpcklbw     mm0,mm1
276
        punpcklbw     mm0,mm1
277
	movq	      mm2,mm0
277
        movq          mm2,mm0
278
	psrlq	      mm2,16
278
        psrlq         mm2,16
279
	movq	      mm3,mm0
279
        movq          mm3,mm0
280
	psrlq	      mm3,32
280
        psrlq         mm3,32
281
	paddw	      mm0,mm2
281
        paddw         mm0,mm2
282
	paddw	      mm0,mm3
282
        paddw         mm0,mm3
283
 
283
 
284
 
284
 
285
	movd	      eax,mm0
285
        movd          eax,mm0
286
	and	      eax,ebx
286
        and           eax,ebx
287
	lea	      eax,[eax*5]
287
        lea           eax,[eax*5]
288
	shr	      ax,4
288
        shr           ax,4
Line 289... Line 289...
289
	stosb
289
        stosb
290
	add	      esi,3
290
        add           esi,3
Line 291... Line 291...
291
	loop	      @b
291
        loop          @b
292
 
292
 
293
end if
293
end if
294
	push	ebp
294
        push    ebp
295
 
295
 
296
	push	dword 0 	 ; env coords
296
        push    dword 0          ; env coords
297
	push	word 0
297
        push    word 0
298
	push	word SIZE_X
298
        push    word SIZE_X
299
	push	word SIZE_Y
299
        push    word SIZE_Y
300
	push	dword 0
300
        push    dword 0
301
	push	dword 0 	 ; bump coords
301
        push    dword 0          ; bump coords
302
	push	word SIZE_X
302
        push    word SIZE_X
303
	push	word SIZE_Y
303
        push    word SIZE_Y
304
	push	word 0
304
        push    word 0
305
	mov	eax,SIZE_Y
305
        mov     eax,SIZE_Y
306
	mov	ebx,SIZE_X*65536+0
306
        mov     ebx,SIZE_X*65536+0
307
	xor	ecx,ecx
307
        xor     ecx,ecx
308
	mov	edx,bumpmap2
308
        mov     edx,bumpmap2
309
	mov	esi,envmap
309
        mov     esi,envmap
310
	mov	edi,screen
310
        mov     edi,screen
311
	call	bump_triangle
311
        call    bump_triangle
312
 
312
 
313
	push	dword SIZE_X shl 16 + SIZE_Y	   ; env coords
313
        push    dword SIZE_X shl 16 + SIZE_Y       ; env coords
314
	push	word 0
314
        push    word 0
315
	push	word SIZE_X
315
        push    word SIZE_X
316
	push	word SIZE_Y
316
        push    word SIZE_Y
317
	push	word 0
317
        push    word 0
318
	push	dword SIZE_X shl 16 + SIZE_Y	    ; bump coords
318
        push    dword SIZE_X shl 16 + SIZE_Y        ; bump coords
319
	push	word 0
319
        push    word 0
320
	push	word SIZE_X
320
        push    word SIZE_X
321
	push	word SIZE_Y
321
        push    word SIZE_Y
322
	push	word 0
322
        push    word 0
323
	mov	eax,SIZE_Y
323
        mov     eax,SIZE_Y
324
	mov	ebx,SIZE_X * 65536+0
324
        mov     ebx,SIZE_X * 65536+0
Line 325... Line 325...
325
	mov	ecx,SIZE_X shl 16 + SIZE_Y
325
        mov     ecx,SIZE_X shl 16 + SIZE_Y
326
	mov	edx,bumpmap2
326
        mov     edx,bumpmap2
327
	mov	esi,envmap
327
        mov     esi,envmap
328
	mov	edi,screen
328
        mov     edi,screen
Line 340... Line 340...
340
;   counter dw ?
340
;   counter dw ?
341
;   sin     dd ?
341
;   sin     dd ?
342
;   cos     dd ?
342
;   cos     dd ?
343
;endl
343
;endl
344
.counter equ  word[ebp-2]
344
.counter equ  word[ebp-2]
345
.sin	 equ  dword[ebp-6]
345
.sin     equ  dword[ebp-6]
346
.cos	 equ  dword[ebp-10]
346
.cos     equ  dword[ebp-10]
347
.sin2	 equ  dword[ebp-14]
347
.sin2    equ  dword[ebp-14]
348
.cos2	 equ  dword[ebp-18]
348
.cos2    equ  dword[ebp-18]
349
.piD180m3 equ dword[ebp-22]
349
.piD180m3 equ dword[ebp-22]
350
.cD2	  equ word[ebp-24]
350
.cD2      equ word[ebp-24]
351
	push  ebp
351
        push  ebp
352
	mov   ebp,esp
352
        mov   ebp,esp
353
	sub   esp,24
353
        sub   esp,24
354
 
354
 
355
	push  ax
355
        push  ax
356
 
356
 
357
	fninit
357
        fninit
358
	mov	edi,[points_ptr]
358
        mov     edi,[points_ptr]
359
	xor	eax,eax
359
        xor     eax,eax
360
				    ; init seed -> 4   3d points
360
                                    ; init seed -> 4   3d points
361
	mov	dword[edi],-1.0     ; x
361
        mov     dword[edi],-1.0     ; x
362
	add	edi,4
362
        add     edi,4
363
	stosd			    ; y
363
        stosd                       ; y
364
	stosd			    ; z
364
        stosd                       ; z
365
	mov	dword[edi],-0.9     ; x1
365
        mov     dword[edi],-0.9     ; x1
366
	mov	dword[edi+4],0.1    ; y1
366
        mov     dword[edi+4],0.1    ; y1
367
	add	edi,8
367
        add     edi,8
368
	stosd			    ; z1
368
        stosd                       ; z1
369
	mov	dword[edi],-0.8
369
        mov     dword[edi],-0.8
370
	add	edi,4
370
        add     edi,4
371
	stosd
371
        stosd
372
	stosd
372
        stosd
373
	mov	dword[edi],-0.9     ; x3
373
        mov     dword[edi],-0.9     ; x3
374
	mov	dword[edi+4],-0.1   ; y3
374
        mov     dword[edi+4],-0.1   ; y3
375
	add	edi,8
375
        add     edi,8
376
	stosd			    ; z3
376
        stosd                       ; z3
377
	mov	[points_count_var],4
377
        mov     [points_count_var],4
378
 
378
 
379
	fld	[piD180]
379
        fld     [piD180]
380
	fidiv	[i3]
380
        fidiv   [i3]
381
	fstp	.piD180m3
381
        fstp    .piD180m3
382
	mov	.cD2,5
382
        mov     .cD2,5
383
 
383
 
384
	pop	ax
384
        pop     ax
385
	mov	ecx,1
385
        mov     ecx,1
386
	mov	edx,9
386
        mov     edx,9
387
      .next:			  ; calc angle and rotate seed 4 points
387
      .next:                      ; calc angle and rotate seed 4 points
388
	mov	.counter,cx
388
        mov     .counter,cx
389
	mov	ebx,[points_ptr]
389
        mov     ebx,[points_ptr]
390
	fld	.piD180m3
390
        fld     .piD180m3
391
	fimul	.counter
391
        fimul   .counter
392
	fld	st
392
        fld     st
393
	fsincos
393
        fsincos
394
	fstp	.sin
394
        fstp    .sin
395
	fstp	.cos
395
        fstp    .cos
396
	fadd	st,st0
396
        fadd    st,st0
397
	fsincos
397
        fsincos
398
	fstp	.sin2
398
        fstp    .sin2
399
	fstp	.cos2
399
        fstp    .cos2
400
 
400
 
401
      .rotor:			       ; next 4
401
      .rotor:                          ; next 4
402
	; rotary y
402
        ; rotary y
403
	fld	dword[ebx]	   ; x
403
        fld     dword[ebx]         ; x
404
	fld	.sin
404
        fld     .sin
405
	fmul	dword[ebx+8]	   ; z * sinbeta
405
        fmul    dword[ebx+8]       ; z * sinbeta
406
	fchs
406
        fchs
407
	fld	.cos
407
        fld     .cos
408
	fmul	dword[ebx]	   ; x * cosbeta
408
        fmul    dword[ebx]         ; x * cosbeta
409
	faddp
409
        faddp
410
	fstp	dword[edi]	   ; new x
410
        fstp    dword[edi]         ; new x
411
	fmul	.sin		 ; old x * sinbeta
411
        fmul    .sin             ; old x * sinbeta
412
	fld	.cos
412
        fld     .cos
413
	fmul	dword[ebx+8]	   ; z * cosbeta
413
        fmul    dword[ebx+8]       ; z * cosbeta
414
	faddp
414
        faddp
415
	dec	dx
415
        dec     dx
416
	or	dx,dx
416
        or      dx,dx
417
	jnz	@f
417
        jnz     @f
418
;        mov     .counter,dx
418
;        mov     .counter,dx
419
	fld	st
419
        fld     st
420
	fidiv	[i3]
420
        fidiv   [i3]
421
	faddp
421
        faddp
422
    @@:
422
    @@:
423
	fstp	dword[edi+8]	   ; new z
423
        fstp    dword[edi+8]       ; new z
424
	fld	dword[ebx+4]
424
        fld     dword[ebx+4]
425
	or	dx,dx
425
        or      dx,dx
426
	jnz	@f
426
        jnz     @f
427
  ;      fld1
427
  ;      fld1
428
  ;      faddp
428
  ;      faddp
429
;        fld     st
429
;        fld     st
430
	fadd	st,st0
430
        fadd    st,st0
431
	fadd	st,st0
431
        fadd    st,st0
432
;        fxch
432
;        fxch
433
;        fimul   [i3]
433
;        fimul   [i3]
434
;        fsin
434
;        fsin
435
;        faddp
435
;        faddp
436
	mov	dx,9
436
        mov     dx,9
437
    @@:
437
    @@:
438
	fstp	dword[edi+4]
438
        fstp    dword[edi+4]
439
	; rotary x
439
        ; rotary x
440
	cmp	al,3
440
        cmp     al,3
441
	jl	.end_rot
441
        jl      .end_rot
442
	fld	dword[edi+4]	;y
442
        fld     dword[edi+4]    ;y
443
	fld	.sin2
443
        fld     .sin2
444
	fmul	dword[edi+8]	;z
444
        fmul    dword[edi+8]    ;z
445
	fld	.cos2
445
        fld     .cos2
446
	fmul	dword[edi+4]	;y
446
        fmul    dword[edi+4]    ;y
447
	faddp
447
        faddp
448
	fstp	dword[edi+4]	; new y
448
        fstp    dword[edi+4]    ; new y
449
	fmul	.sin2	    ; sinbeta * old y
449
        fmul    .sin2       ; sinbeta * old y
450
	fchs
450
        fchs
451
	fld	.cos2
451
        fld     .cos2
452
	fmul	dword[edi+8]
452
        fmul    dword[edi+8]
453
	faddp
453
        faddp
454
	fstp	dword[edi+8]
454
        fstp    dword[edi+8]
455
	; rotary z
455
        ; rotary z
456
	cmp	al,4
456
        cmp     al,4
457
	jl	.end_rot
457
        jl      .end_rot
458
	fld	dword[edi]	;x
458
        fld     dword[edi]      ;x
459
	fld	.sin
459
        fld     .sin
460
	fmul	dword[edi+4]	;y
460
        fmul    dword[edi+4]    ;y
461
	fld	.cos
461
        fld     .cos
462
	fmul	dword[edi]	;x
462
        fmul    dword[edi]      ;x
463
	faddp
463
        faddp
464
	fstp	dword[edi]	;new x
464
        fstp    dword[edi]      ;new x
465
	fmul	.sin	   ; sinbeta * old x
465
        fmul    .sin       ; sinbeta * old x
466
	fchs
466
        fchs
467
	fld	.cos
467
        fld     .cos
468
	fmul	dword[edi+4]	     ; cosbeta * y
468
        fmul    dword[edi+4]         ; cosbeta * y
469
	faddp
469
        faddp
470
	fstp	dword[edi+4]	; new y
470
        fstp    dword[edi+4]    ; new y
Line 471... Line 471...
471
 
471
 
Line 472... Line 472...
472
 
472
 
473
 
473
 
474
      .end_rot:
474
      .end_rot:
475
 
475
 
476
	add	edi,12
476
        add     edi,12
477
	add	ebx,12
477
        add     ebx,12
478
	mov	esi,[points_ptr]
478
        mov     esi,[points_ptr]
479
	add	esi,12*4
479
        add     esi,12*4
480
	cmp	ebx,esi
480
        cmp     ebx,esi
481
	jl	.rotor
481
        jl      .rotor
482
 
482
 
483
	add	[points_count_var],4
483
        add     [points_count_var],4
484
	add	cx,18
484
        add     cx,18
485
	cmp	cx,(18*21*3)+1
485
        cmp     cx,(18*21*3)+1
486
	jle	.next
486
        jle     .next
487
 
487
 
Line 488... Line 488...
488
	mov	edi,[triangles_ptr]
488
        mov     edi,[triangles_ptr]
489
	mov	ax,4
489
        mov     eax,4
490
	mov	bx,4+4
490
        mov     ebx,4+4
491
	mov	[triangles_count_var],164*3   ;140
491
        mov     [triangles_count_var],160*3    ;164*3   ;140
492
 
492
 
493
	mov	cx,80*3  ;68
493
        mov     ecx,80*3  ;68
494
      @@:
494
      @@:
495
	stosw		      ;----
495
        stosd                 ;----
496
	mov	[edi],bx      ;    |
496
        mov     [edi],ebx      ;    |
497
	add	edi,2	      ;    |
497
        add     edi,4         ;    |
498
	inc	ax	      ;    |
498
        inc     eax            ;    |
499
	stosw		      ;    |repeat 4 times
499
        stosd                 ;    |repeat 4 times
500
 
500
 
501
	mov	[edi],bx      ;    |
501
        mov     [edi],ebx      ;    |
502
	inc	bx
502
        inc     ebx
Line 503... Line 503...
503
	add	edi,2
503
        add     edi,4
504
	stosw		      ;    |
504
        stosd                 ;    |
Line 505... Line 505...
505
	mov	[edi],bx      ;    |
505
        mov     [edi],ebx      ;    |
506
	add	edi,2	      ;----
506
        add     edi,4         ;----
Line 507... Line 507...
507
	loop	 @b
507
        loop     @b
Line 508... Line 508...
508
 
508
 
Line 521... Line 521...
521
;   counter dw ?
521
;   counter dw ?
522
;   sin     dd ?
522
;   sin     dd ?
523
;   cos     dd ?
523
;   cos     dd ?
524
;endl
524
;endl
525
.counter equ  word[ebp-2]
525
.counter equ  word[ebp-2]
526
.sin	 equ  dword[ebp-6]
526
.sin     equ  dword[ebp-6]
527
.cos	 equ  dword[ebp-10]
527
.cos     equ  dword[ebp-10]
528
.sin2	 equ  dword[ebp-14]
528
.sin2    equ  dword[ebp-14]
529
.cos2	 equ  dword[ebp-18]
529
.cos2    equ  dword[ebp-18]
530
.piD180m3 equ dword[ebp-22]
530
.piD180m3 equ dword[ebp-22]
531
.cD2	  equ word[ebp-24]
531
.cD2      equ word[ebp-24]
532
	push  ebp
532
        push  ebp
533
	mov   ebp,esp
533
        mov   ebp,esp
534
	sub   esp,24
534
        sub   esp,24
535
 
535
 
536
	fninit
536
        fninit
537
	mov	edi,[points_ptr]
537
        mov     edi,[points_ptr]
538
	xor	eax,eax
538
        xor     eax,eax
539
			       ; init seed -> eight   3d points
539
                               ; init seed -> eight   3d points
540
	mov	dword[edi],2.0
540
        mov     dword[edi],2.0
541
	add	edi,4
541
        add     edi,4
542
	stosd
542
        stosd
543
	stosd
543
        stosd
544
 
544
 
545
	mov	dword[edi],2.0
545
        mov     dword[edi],2.0
546
	mov	dword[edi+4],-0.5
546
        mov     dword[edi+4],-0.5
547
	add	edi,8
547
        add     edi,8
548
	stosd
548
        stosd
549
 
549
 
550
	mov	dword[edi],1.5
550
        mov     dword[edi],1.5
551
	mov	dword[edi+4],-1.5
551
        mov     dword[edi+4],-1.5
552
	add	edi,8
552
        add     edi,8
553
	stosd
553
        stosd
554
	mov	dword[edi],1.0
554
        mov     dword[edi],1.0
555
	mov	dword[edi+4],-2.0
555
        mov     dword[edi+4],-2.0
556
	add	edi,8
556
        add     edi,8
557
	stosd
557
        stosd
558
 
558
 
559
	stosd
559
        stosd
560
	mov	dword[edi],-2.5
560
        mov     dword[edi],-2.5
561
	add	edi,4
561
        add     edi,4
562
	stosd
562
        stosd
563
 
563
 
564
	mov	[points_count_var],5
564
        mov     [points_count_var],5
565
 
565
 
566
	mov	ecx,1
566
        mov     ecx,1
567
      .next:			  ; calc angle and rotate seed 4 points
567
      .next:                      ; calc angle and rotate seed 4 points
568
	mov	.counter,cx
568
        mov     .counter,cx
569
	mov	ebx,[points_ptr]
569
        mov     ebx,[points_ptr]
570
	fld	[piD180]
570
        fld     [piD180]
571
	fimul	.counter
571
        fimul   .counter
572
	fsincos
572
        fsincos
573
	fstp	.sin
573
        fstp    .sin
574
	fstp	.cos
574
        fstp    .cos
575
 
575
 
576
      .rotor:			       ; next 4
576
      .rotor:                          ; next 4
577
	; rotary y
577
        ; rotary y
578
	fld	dword[ebx]	   ; x
578
        fld     dword[ebx]         ; x
579
	fld	.sin
579
        fld     .sin
580
	fmul	dword[ebx+8]	   ; z * sinbeta
580
        fmul    dword[ebx+8]       ; z * sinbeta
581
	fchs
581
        fchs
582
	fld	.cos
582
        fld     .cos
583
	fmul	dword[ebx]	   ; x * cosbeta
583
        fmul    dword[ebx]         ; x * cosbeta
584
	faddp
584
        faddp
585
	fidiv	[i3]
585
        fidiv   [i3]
586
	fstp	dword[edi]	   ; new x
586
        fstp    dword[edi]         ; new x
587
	fmul	.sin		   ; old x * sinbeta
587
        fmul    .sin               ; old x * sinbeta
588
	fld	.cos
588
        fld     .cos
589
	fmul	dword[ebx+8]	   ; z * cosbeta
589
        fmul    dword[ebx+8]       ; z * cosbeta
590
	faddp
590
        faddp
591
	fstp	dword[edi+8]	   ; new z
591
        fstp    dword[edi+8]       ; new z
Line 592... Line 592...
592
 
592
 
593
	fld	dword[ebx+4]   ;y
593
        fld     dword[ebx+4]   ;y
Line 594... Line 594...
594
	fstp	dword[edi+4]
594
        fstp    dword[edi+4]
Line 595... Line 595...
595
 
595
 
596
 
596
 
597
      .end_rot:
597
      .end_rot:
598
 
598
 
599
	add	edi,12
599
        add     edi,12
600
	add	ebx,12
600
        add     ebx,12
601
	mov	esi,[points_ptr]
601
        mov     esi,[points_ptr]
602
	add	esi,12*5
602
        add     esi,12*5
603
	cmp	ebx,esi  ;real_points + (12*5)
603
        cmp     ebx,esi  ;real_points + (12*5)
604
	jl	.rotor
604
        jl      .rotor
605
 
605
 
606
	add	[points_count_var],5
606
        add     [points_count_var],5
Line 607... Line 607...
607
	add	cx,18
607
        add     cx,18
Line 608... Line 608...
608
	cmp	cx,(18*21)+1
608
        cmp     cx,(18*21)+1
609
	jle	.next
609
        jle     .next
610
;last points
610
;last points
611
 
611
 
612
	xor	eax,eax
612
        xor     eax,eax
613
 
613
 
614
	mov	dword[edi],0.22
614
        mov     dword[edi],0.22
615
	mov	dword[edi+4],0.77
615
        mov     dword[edi+4],0.77
616
	mov	dword[edi+8],1.25
616
        mov     dword[edi+8],1.25
617
	add	edi,12
617
        add     edi,12
Line 618... Line 618...
618
 
618
 
Line 619... Line 619...
619
	mov	dword[edi],0.22
619
        mov     dword[edi],0.22
Line 620... Line 620...
620
	mov	dword[edi+4],0.77
620
        mov     dword[edi+4],0.77
621
	mov	dword[edi+8],-1.25
621
        mov     dword[edi+8],-1.25
622
	add	edi,12
622
        add     edi,12
623
	stosd
623
        stosd
Line 624... Line 624...
624
 
624
 
625
	add	[points_count_var],2
625
        add     [points_count_var],2
626
 
626
 
627
; init triangles list
627
; init triangles list
628
 
628
 
629
	mov	edi,[triangles_ptr]
629
        mov     edi,[triangles_ptr]
630
	mov	ax,5
630
        mov     eax,5
631
	mov	bx,5+5
631
        mov     ebx,5+5
632
	mov	[triangles_count_var],204
632
        mov     [triangles_count_var],200  ;204
633
 
633
 
634
	mov	cx,100
634
        mov     ecx,100
635
      @@:
635
      @@:
636
	stosw		      ;----
636
        stosd                 ;----
637
	mov	[edi],bx      ;    |
637
        mov     [edi],ebx      ;    |
638
	add	edi,2	      ;    |
638
        add     edi,4         ;    |
639
	inc	ax	      ;    |
639
        inc     eax            ;    |
640
	stosw		      ;    |repeat
640
        stosd                 ;    |repeat
641
 
641
 
642
	mov	[edi],bx      ;    |
642
        mov     [edi],ebx      ;    |
643
	inc	bx
643
        inc     ebx
644
	add	edi,2
644
        add     edi,4
645
	stosw		      ;    |
645
        stosd                 ;    |
646
	mov	[edi],bx      ;    |
646
        mov     [edi],ebx      ;    |
647
	add	edi,2	      ;----
647
        add     edi,4         ;----
648
	loop	 @b
648
        loop     @b
649
 
649
 
650
	mov	ax,5
650
        mov     eax,5
651
	mov	bx,[points_count_var]
651
        mov     ebx,[points_count_var]
652
	sub	bx,2
652
        sub     ebx,2
653
	mov	dl,2
653
        mov     dl,2
Line 654... Line 654...
654
    .nx:
654
    .nx:
655
	mov	cx,5
655
        mov     ecx,5
Line 656... Line 656...
656
	add	[triangles_count_var],cx
656
        add     [triangles_count_var],ecx
657
    @@:
657
    @@:
658
	stosw
658
        stosd
659
	add	ax,5
659
        add     eax,5
660
	stosw
660
        stosd
661
	mov	word[edi],bx
661
        mov     dword[edi],ebx
662
	add	edi,2
662
        add     edi,4
663
	loop	@b
663
        loop    @b
664
 
664
 
665
	cmp	dl,1
665
        cmp     dl,1
666
	je	@f
666
        je      @f
667
 
667
 
668
	inc	bx
668
        inc     ebx
669
	jmp	.lab
669
        jmp     .lab
670
     @@:
670
     @@:
671
	dec	bx
671
        dec     ebx
672
     .lab:
672
     .lab:
673
	mov	cx,5
673
        mov     ecx,5
674
	add	[triangles_count_var],cx
674
        add     [triangles_count_var],ecx
675
     @@:
675
     @@:
676
	stosw
676
        stosd
677
	add	ax,5
677
        add     eax,5
678
	stosw
678
        stosd
679
	mov	word[edi],bx
679
        mov     dword[edi],ebx
680
	add	edi,2
680
        add     edi,4
681
	loop	@b
681
        loop    @b
682
 
682
 
683
	dec	dl
683
        dec     dl
684
	or	dl,dl
684
        or      dl,dl
685
	jnz	.nx
685
        jnz     .nx
686
 
686
 
687
	sub	ax,25
687
        sub     eax,25
688
	stosw
688
        stosd
Line 689... Line 689...
689
	sub	ax,50
689
        sub     eax,50
690
	stosw
690
        stosd
Line 691... Line 691...
691
	mov	word[edi],bx
691
        mov     dword[edi],ebx
692
	add	edi,2
692
        add     edi,4
Line 693... Line 693...
693
 
693
 
-
 
694
        stosd