Subversion Repositories Kolibri OS

Rev

Rev 1245 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1245 Rev 1776
1
;CATMULL_SHIFT equ 8
1
;CATMULL_SHIFT equ 8
2
;TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1
2
;TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1
3
;ROUND equ 8
3
;ROUND equ 8
4
;Ext = NON
4
;Ext = NON
5
;MMX = 1
5
;MMX = 1
6
;NON = 0
6
;NON = 0
7
;------- Big thanks to Majuma (www.majuma.xt.pl) for absolutely great---
7
;------- Big thanks to Majuma (www.majuma.xt.pl) for absolutely great---
8
;------- DOS 13h mode demos --------------------------------------------
8
;------- DOS 13h mode demos --------------------------------------------
9
;------- Procedure draws bump triangle with texture, I use -------------
9
;------- Procedure draws bump triangle with texture, I use -------------
10
;--------Catmull Z-buffer algorithm- (Z coordinate interpolation)-------
10
;--------Catmull Z-buffer algorithm- (Z coordinate interpolation)-------
11
;--------I calc texture pixel by this way: col1*col2/256 ---------------
11
;--------I calc texture pixel by this way: col1*col2/256 ---------------
12
bump_tex_triangle_z:
12
bump_tex_triangle_z:
13
;------------------in - eax - x1 shl 16 + y1 -----------
13
;------------------in - eax - x1 shl 16 + y1 -----------
14
;---------------------- ebx - x2 shl 16 + y2 -----------
14
;---------------------- ebx - x2 shl 16 + y2 -----------
15
;---------------------- ecx - x3 shl 16 + y3 -----------
15
;---------------------- ecx - x3 shl 16 + y3 -----------
16
;---------------------- edx - pointer to bump map-------
16
;---------------------- edx - pointer to bump map-------
17
;---------------------- esi - pointer to env map--------
17
;---------------------- esi - pointer to env map--------
18
;---------------------- edi - pointer to screen buffer--
18
;---------------------- edi - pointer to screen buffer--
19
;---------------------- stack : bump coordinates--------
19
;---------------------- stack : bump coordinates--------
20
;----------------------         environment coordinates-
20
;----------------------         environment coordinates-
21
;----------------------         Z position coordinates--
21
;----------------------         Z position coordinates--
22
;----------------------         pointer to Z buffer-----
22
;----------------------         pointer to Z buffer-----
23
;----------------------         pointer to texture------
23
;----------------------         pointer to texture------
24
;----------------------         texture coordinates-----
24
;----------------------         texture coordinates-----
25
;-- Z-buffer - filled with coordinates as dword --------
25
;-- Z-buffer - filled with coordinates as dword --------
26
;-- (Z coor. as word) shl CATMULL_SHIFT ----------------
26
;-- (Z coor. as word) shl CATMULL_SHIFT ----------------
27
.b_x1	equ ebp+4   ; procedure don't save registers !!!
27
.b_x1	equ ebp+4   ; procedure don't save registers !!!
28
.b_y1	equ ebp+6   ; each coordinate as word
28
.b_y1	equ ebp+6   ; each coordinate as word
29
.b_x2	equ ebp+8
29
.b_x2	equ ebp+8
30
.b_y2	equ ebp+10	 ; b - bump map coords
30
.b_y2	equ ebp+10	 ; b - bump map coords
31
.b_x3	equ ebp+12	 ; e - env map coords
31
.b_x3	equ ebp+12	 ; e - env map coords
32
.b_y3	equ ebp+14
32
.b_y3	equ ebp+14
33
.e_x1	equ ebp+16
33
.e_x1	equ ebp+16
34
.e_y1	equ ebp+18
34
.e_y1	equ ebp+18
35
.e_x2	equ ebp+20
35
.e_x2	equ ebp+20
36
.e_y2	equ ebp+22
36
.e_y2	equ ebp+22
37
.e_x3	equ ebp+24
37
.e_x3	equ ebp+24
38
.e_y3	equ ebp+26
38
.e_y3	equ ebp+26
39
.z1	equ word[ebp+28]
39
.z1	equ word[ebp+28]
40
.z2	equ word[ebp+30]
40
.z2	equ word[ebp+30]
41
.z3	equ word[ebp+32]
41
.z3	equ word[ebp+32]
42
.z_buff equ dword[ebp+34]	; pointer to Z-buffer
42
.z_buff equ dword[ebp+34]	; pointer to Z-buffer
43
.tex_ptr equ dword[ebp+38]	; ptr to texture
43
.tex_ptr equ dword[ebp+38]	; ptr to texture
44
.t_x1	equ ebp+42		; texture coords
44
.t_x1	equ ebp+42		; texture coords
45
.t_y1	equ ebp+44
45
.t_y1	equ ebp+44
46
.t_x2	equ ebp+46
46
.t_x2	equ ebp+46
47
.t_y2	equ ebp+48
47
.t_y2	equ ebp+48
48
.t_x3	equ ebp+50
48
.t_x3	equ ebp+50
49
.t_y3	equ ebp+52
49
.t_y3	equ ebp+52
50
 
50
 
51
 
51
 
52
 
52
 
53
.t_bmap equ dword[ebp-4]	; pointer to bump map
53
.t_bmap equ dword[ebp-4]	; pointer to bump map
54
.t_emap equ dword[ebp-8]	; pointer to env map
54
.t_emap equ dword[ebp-8]	; pointer to env map
55
.x1	equ word[ebp-10]
55
.x1	equ word[ebp-10]
56
.y1	equ word[ebp-12]
56
.y1	equ word[ebp-12]
57
.x2	equ word[ebp-14]
57
.x2	equ word[ebp-14]
58
.y2	equ word[ebp-16]
58
.y2	equ word[ebp-16]
59
.x3	equ word[ebp-18]
59
.x3	equ word[ebp-18]
60
.y3	equ word[ebp-20]
60
.y3	equ word[ebp-20]
61
 
61
 
62
.dx12	equ dword[ebp-24]
62
.dx12	equ dword[ebp-24]
63
.dz12	equ	 [ebp-28]
63
.dz12	equ	 [ebp-28]
64
.dbx12	equ dword[ebp-32]
64
.dbx12	equ dword[ebp-32]
65
.dby12	equ	 [ebp-36]
65
.dby12	equ	 [ebp-36]
66
.dex12	equ dword[ebp-40]
66
.dex12	equ dword[ebp-40]
67
.dey12	equ	 [ebp-44]
67
.dey12	equ	 [ebp-44]
68
.dtx12	equ dword[ebp-48]
68
.dtx12	equ dword[ebp-48]
69
.dty12	equ	 [ebp-52]
69
.dty12	equ	 [ebp-52]
70
 
70
 
71
.dx13  equ dword[ebp-52-4*1]
71
.dx13  equ dword[ebp-52-4*1]
72
.dz13  equ	[ebp-52-4*2]
72
.dz13  equ	[ebp-52-4*2]
73
.dbx13 equ dword[ebp-52-4*3]
73
.dbx13 equ dword[ebp-52-4*3]
74
.dby13 equ	[ebp-52-4*4]
74
.dby13 equ	[ebp-52-4*4]
75
.dex13 equ dword[ebp-52-4*5]
75
.dex13 equ dword[ebp-52-4*5]
76
.dey13 equ	[ebp-52-4*6]
76
.dey13 equ	[ebp-52-4*6]
77
.dtx13 equ dword[ebp-52-4*7]
77
.dtx13 equ dword[ebp-52-4*7]
78
.dty13 equ	[ebp-52-4*8]
78
.dty13 equ	[ebp-52-4*8]
79
 
79
 
80
 
80
 
81
.dx23  equ dword[ebp-(52+4*9)]
81
.dx23  equ dword[ebp-(52+4*9)]
82
.dz23  equ	[ebp-(52+4*10)]
82
.dz23  equ	[ebp-(52+4*10)]
83
.dbx23 equ dword[ebp-(52+4*11)]
83
.dbx23 equ dword[ebp-(52+4*11)]
84
.dby23 equ	[ebp-(52+4*12)]
84
.dby23 equ	[ebp-(52+4*12)]
85
.dex23 equ dword[ebp-(52+4*13)]
85
.dex23 equ dword[ebp-(52+4*13)]
86
.dey23 equ	[ebp-(52+4*14)]
86
.dey23 equ	[ebp-(52+4*14)]
87
.dtx23 equ dword[ebp-(52+4*15)]
87
.dtx23 equ dword[ebp-(52+4*15)]
88
.dty23 equ	[ebp-(52+4*16)]
88
.dty23 equ	[ebp-(52+4*16)]
89
 
89
 
90
.cx1   equ dword[ebp-(52+4*17)] 	; current variables
90
.cx1   equ dword[ebp-(52+4*17)] 	; current variables
91
.cz1   equ	[ebp-(52+4*18)]
91
.cz1   equ	[ebp-(52+4*18)]
92
.cx2   equ dword[ebp-(52+4*19)]
92
.cx2   equ dword[ebp-(52+4*19)]
93
.cz2   equ	[ebp-(52+4*20)]
93
.cz2   equ	[ebp-(52+4*20)]
94
.cbx1  equ dword[ebp-(52+4*21)]
94
.cbx1  equ dword[ebp-(52+4*21)]
95
.cby1  equ	[ebp-(52+4*22)]
95
.cby1  equ	[ebp-(52+4*22)]
96
.cbx2  equ dword[ebp-(52+4*23)]
96
.cbx2  equ dword[ebp-(52+4*23)]
97
.cby2  equ	[ebp-(52+4*24)]
97
.cby2  equ	[ebp-(52+4*24)]
98
.cex1  equ dword[ebp-(52+4*25)]
98
.cex1  equ dword[ebp-(52+4*25)]
99
.cey1  equ	[ebp-(52+4*26)]
99
.cey1  equ	[ebp-(52+4*26)]
100
.cex2  equ dword[ebp-(52+4*27)]
100
.cex2  equ dword[ebp-(52+4*27)]
101
.cey2  equ	[ebp-(52+4*28)]
101
.cey2  equ	[ebp-(52+4*28)]
102
 
102
 
103
.ctx1  equ dword[ebp-(52+4*29)]
103
.ctx1  equ dword[ebp-(52+4*29)]
104
.cty1  equ	[ebp-(52+4*30)]
104
.cty1  equ	[ebp-(52+4*30)]
105
.ctx2  equ dword[ebp-(52+4*31)]
105
.ctx2  equ dword[ebp-(52+4*31)]
106
.cty2  equ	[ebp-(52+4*32)]
106
.cty2  equ	[ebp-(52+4*32)]
107
 
107
 
108
       cld
108
       cld
109
       mov     ebp,esp
109
       mov     ebp,esp
110
       push    edx	  ; store bump map
110
       push    edx	  ; store bump map
111
       push    esi	  ; store e. map
111
       push    esi	  ; store e. map
112
     ; sub     esp,120
112
     ; sub     esp,120
113
 .sort3:		  ; sort triangle coordinates...
113
 .sort3:		  ; sort triangle coordinates...
114
       cmp     ax,bx
114
       cmp     ax,bx
115
       jle     .sort1
115
       jle     .sort1
116
       xchg    eax,ebx
116
       xchg    eax,ebx
117
       mov     edx,dword[.b_x1]
117
       mov     edx,dword[.b_x1]
118
       xchg    edx,dword[.b_x2]
118
       xchg    edx,dword[.b_x2]
119
       mov     dword[.b_x1],edx
119
       mov     dword[.b_x1],edx
120
       mov     edx,dword[.e_x1]
120
       mov     edx,dword[.e_x1]
121
       xchg    edx,dword[.e_x2]
121
       xchg    edx,dword[.e_x2]
122
       mov     dword[.e_x1],edx
122
       mov     dword[.e_x1],edx
123
       mov     edx,dword[.t_x1]
123
       mov     edx,dword[.t_x1]
124
       xchg    edx,dword[.t_x2]
124
       xchg    edx,dword[.t_x2]
125
       mov     dword[.t_x1],edx
125
       mov     dword[.t_x1],edx
126
       mov     dx,.z1
126
       mov     dx,.z1
127
       xchg    dx,.z2
127
       xchg    dx,.z2
128
       mov     .z1,dx
128
       mov     .z1,dx
129
 .sort1:
129
 .sort1:
130
       cmp	bx,cx
130
       cmp	bx,cx
131
       jle	.sort2
131
       jle	.sort2
132
       xchg	ebx,ecx
132
       xchg	ebx,ecx
133
       mov	edx,dword[.b_x2]
133
       mov	edx,dword[.b_x2]
134
       xchg	edx,dword[.b_x3]
134
       xchg	edx,dword[.b_x3]
135
       mov	dword[.b_x2],edx
135
       mov	dword[.b_x2],edx
136
       mov	edx,dword[.e_x2]
136
       mov	edx,dword[.e_x2]
137
       xchg	edx,dword[.e_x3]
137
       xchg	edx,dword[.e_x3]
138
       mov	dword[.e_x2],edx
138
       mov	dword[.e_x2],edx
139
       mov	edx,dword[.t_x2]
139
       mov	edx,dword[.t_x2]
140
       xchg	edx,dword[.t_x3]
140
       xchg	edx,dword[.t_x3]
141
       mov	dword[.t_x2],edx
141
       mov	dword[.t_x2],edx
142
       mov     dx,.z2
142
       mov     dx,.z2
143
       xchg    dx,.z3
143
       xchg    dx,.z3
144
       mov     .z2,dx
144
       mov     .z2,dx
145
       jmp	.sort3
145
       jmp	.sort3
146
 .sort2:
146
 .sort2:
147
       push	eax	; store triangle coords in variables
147
       push	eax	; store triangle coords in variables
148
       push	ebx
148
       push	ebx
149
       push	ecx
149
       push	ecx
150
	 mov	  edx,80008000h  ; eax,ebx,ecx are ANDd together into edx which means that
150
	 mov	  edx,80008000h  ; eax,ebx,ecx are ANDd together into edx which means that
151
	 and	  edx,ebx	 ; if *all* of them are negative a sign flag is raised
151
	 and	  edx,ebx	 ; if *all* of them are negative a sign flag is raised
152
	 and	  edx,ecx
152
	 and	  edx,ecx
153
	 and	  edx,eax
153
	 and	  edx,eax
154
	 test	  edx,80008000h  ; Check both X&Y at once
154
	 test	  edx,80008000h  ; Check both X&Y at once
155
	 jne	  .loop23_done
155
	 jne	  .loop23_done
156
    ;   mov     edx,eax         ; eax,ebx,ecx are ORd together into edx which means that
156
    ;   mov     edx,eax         ; eax,ebx,ecx are ORd together into edx which means that
157
    ;   or      edx,ebx         ; if any *one* of them is negative a sign flag is raised
157
    ;   or      edx,ebx         ; if any *one* of them is negative a sign flag is raised
158
    ;   or      edx,ecx
158
    ;   or      edx,ecx
159
    ;   test    edx,80000000h   ; Check only X
159
    ;   test    edx,80000000h   ; Check only X
160
    ;   jne     .loop23_done
160
    ;   jne     .loop23_done
161
 
161
 
162
    ;   cmp     .x1,SIZE_X    ; {
162
    ;   cmp     .x1,SIZE_X    ; {
163
    ;   jg      .loop23_done
163
    ;   jg      .loop23_done
164
    ;   cmp     .x2,SIZE_X     ; This can be optimized with effort
164
    ;   cmp     .x2,SIZE_X     ; This can be optimized with effort
165
    ;   jg      .loop23_done
165
    ;   jg      .loop23_done
166
    ;   cmp     .x3,SIZE_X
166
    ;   cmp     .x3,SIZE_X
167
    ;   jg      .loop23_done    ; {
167
    ;   jg      .loop23_done    ; {
168
 
168
 
169
 
169
 
170
       mov	bx,.y2	     ; calc delta 12
170
       mov	bx,.y2	     ; calc delta 12
171
       sub	bx,.y1
171
       sub	bx,.y1
172
       jnz	.bt_dx12_make
172
       jnz	.bt_dx12_make
173
       mov	ecx,8
173
       mov	ecx,8
174
       xor	edx,edx
174
       xor	edx,edx
175
     @@:
175
     @@:
176
       push	edx   ;dword 0
176
       push	edx   ;dword 0
177
       loop	@b
177
       loop	@b
178
       jmp	.bt_dx12_done
178
       jmp	.bt_dx12_done
179
 .bt_dx12_make:
179
 .bt_dx12_make:
180
 
180
       movsx	ebx,bx
-
 
181
 
181
       mov	ax,.x2
182
       mov	ax,.x2
182
       sub	ax,.x1
183
       sub	ax,.x1
183
       cwde
184
       cwde
184
       movsx	ebx,bx
185
       shl	eax,ROUND
185
       shl	eax,ROUND
-
 
186
       cdq
186
       cdq
187
       idiv	ebx
187
       idiv	ebx
188
 ;     mov      .dx12,eax
188
 ;     mov      .dx12,eax
189
       push	 eax
189
       push	 eax
190
 
190
 
191
       mov     ax,.z2
-
 
192
       sub     ax,.z1
-
 
193
       cwde
-
 
194
       shl     eax,CATMULL_SHIFT
-
 
195
       cdq
-
 
196
       idiv    ebx
-
 
197
       push    eax
-
 
198
 
-
 
199
if Ext>=SSE
191
if Ext>=SSE
200
 
192
 
201
       sub	 esp,16
193
       sub	 esp,28
202
   ;    mov       eax,256
194
   ;    mov       eax,256
203
       cvtsi2ss  xmm4,[i255d]
195
       cvtsi2ss  xmm4,[i255d]
204
       cvtsi2ss  xmm3,ebx	     ;rcps
196
       cvtsi2ss  xmm3,ebx	     ;rcps
205
       divss	 xmm3,xmm4
197
       divss	 xmm3,xmm4
206
       shufps	 xmm3,xmm3,0
198
       shufps	 xmm3,xmm3,0
207
 
199
 
208
       movd	 mm0,[.b_x1]
200
       movd	 mm0,[.b_x1]
209
       movd	 mm1,[.b_x2]
201
       movd	 mm1,[.b_x2]
210
       movd	 mm2,[.e_x1]
202
       movd	 mm2,[.e_x1]
211
       movd	 mm3,[.e_x2]
203
       movd	 mm3,[.e_x2]
212
 
204
 
213
       pxor	  mm4,mm4
205
       pxor	  mm4,mm4
214
       punpcklwd  mm0,mm4
206
       punpcklwd  mm0,mm4
215
       punpcklwd  mm1,mm4
207
       punpcklwd  mm1,mm4
216
       punpcklwd  mm2,mm4
208
       punpcklwd  mm2,mm4
217
       punpcklwd  mm3,mm4
209
       punpcklwd  mm3,mm4
218
 
210
 
219
       psubd	  mm1,mm0
211
       psubd	  mm1,mm0
220
       psubd	  mm3,mm2
212
       psubd	  mm3,mm2
221
 
213
 
222
       cvtpi2ps  xmm1,mm1
214
       cvtpi2ps  xmm1,mm1
223
       movlhps	 xmm1,xmm1
215
       movlhps	 xmm1,xmm1
224
       cvtpi2ps  xmm1,mm3
216
       cvtpi2ps  xmm1,mm3
225
 
217
 
226
       divps	 xmm1,xmm3   ;xmm1--> | dby | dbx | dey | dex |
218
       divps	 xmm1,xmm3   ;xmm1--> | dby | dbx | dey | dex |
227
 
219
 
228
       shufps	 xmm1,xmm1,10110001b
220
       shufps	 xmm1,xmm1,10110001b
229
			     ;xmm1--> | dbx | dby | dex | dey |
221
			     ;xmm1--> | dbx | dby | dex | dey |
230
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
222
       cvtps2pi  mm0,xmm1 ;mm0,xmm1          ; mm0 -> 2 delta dwords
231
       movhlps	 xmm1,xmm1
223
       movhlps	 xmm1,xmm1
232
       cvtps2pi  mm1,xmm1
224
       cvtps2pi  mm1,xmm1 ;mm1,xmm1
233
       movq	 .dey12,mm0
225
       movq	 .dey12,mm0
234
       movq	 .dby12,mm1
226
       movq	 .dby12,mm1
235
;-------------
227
;-------------
236
;       mov       ax,.z2
228
  ;    pxor      mm0,mm0
-
 
229
  ;    pxor      mm1,mm1
-
 
230
   ;/   pinsrw    mm0,.z1,1
-
 
231
   ;/   pinsrw    mm0,.x1,0
-
 
232
   ;/   pinsrw    mm1,.z2,1
-
 
233
   ;/   pinsrw    mm1,.x2,0
-
 
234
       mov	 ax,.z2
-
 
235
       sub	 ax,.z1
-
 
236
       cwde
-
 
237
   ;/    movd      mm1,eax
-
 
238
 
-
 
239
   ;/    punpcklwd  mm0,mm4
-
 
240
   ;/    punpcklwd  mm1,mm4
-
 
241
 
-
 
242
  ;     cvtpi2ps   xmm1,mm1
-
 
243
  ;     cvtpi2ps   xmm2,mm0
-
 
244
  ;     subps      xmm1,xmm2
-
 
245
 
-
 
246
   ;/   psubd      mm1,mm0
-
 
247
 
-
 
248
       movd	  mm2,[.t_x1]
-
 
249
       movd	  mm3,[.t_x2]
-
 
250
 
-
 
251
       punpcklwd  mm2,mm4
-
 
252
       punpcklwd  mm3,mm4
-
 
253
       psubd	  mm3,mm2
-
 
254
 
-
 
255
   ;/  cvtpi2ps  xmm1,mm1
-
 
256
       cvtsi2ss  xmm1,eax
-
 
257
       movlhps	 xmm1,xmm1
-
 
258
       cvtpi2ps  xmm1,mm3
-
 
259
 
-
 
260
       divps	 xmm1,xmm3   ; xmm1--> | xxx | dz | dty | dtx |
-
 
261
 
-
 
262
       shufps	 xmm1,xmm1,11100001b
-
 
263
			     ; xmm1--> | xxx | dz | dtx | dty |
-
 
264
       cvtps2pi  mm0,xmm1    ; mm0 -> 2 delta dwords  | dtx | dty |
-
 
265
       movhlps	 xmm1,xmm1
-
 
266
       cvtss2si  eax,xmm1    ; eax --> 1 delta dword | dz |
-
 
267
       movq	 .dty12,mm0
-
 
268
       mov	 .dz12,eax
-
 
269
;----
-
 
270
;       mov       ax,.z2
237
;       sub       ax,.z1
271
;       sub       ax,.z1
238
;       cwde
272
;       cwde
239
;       mov       bx,.x2
273
;       mov       bx,.x2
240
;       sub       bx,.x1
274
;       sub       bx,.x1
241
;       movsx     ebx,bx
275
;       movsx     ebx,bx
242
;       movd      mm1,eax
276
;       movd      mm1,eax
243
;       psllq     mm1,32
277
;       psllq     mm1,32
244
;       movd      mm1,ebx
278
;       movd      mm1,ebx
245
;;       push      ebx
279
 
-
 
280
;;       push      ebx
246
;;       push      eax
281
;;       push      eax
247
;;       movq      mm1,[esp]
282
;;       movq      mm1,[esp]
248
;;       add       esp,8
283
;;       add       esp,8
249
;;;       mov       ax,.z1
284
;;;       mov       ax,.z1
250
;;;       mov       bx,.z2
285
;;;       mov       bx,.z2
251
;;;       shl       eax,16
286
;;;       shl       eax,16
252
;;;       shl       ebx,16
287
;;;       shl       ebx,16
253
;;;       mov       ax,.x1
288
;;;       mov       ax,.x1
254
;;;       mov       bx,.x2
289
;;;       mov       bx,.x2
255
;       movd       mm2,[.t_x1]
290
;       movd       mm2,[.t_x1]
256
;       movd       mm3,[.t_x2]
291
;       movd       mm3,[.t_x2]
257
;;       movd      mm0,eax
292
;;       movd      mm0,eax
258
;;       movd      mm1,ebx
293
;;       movd      mm1,ebx
259
 
294
 
260
;       pxor       mm4,mm4
295
;       pxor       mm4,mm4
261
;;       punpcklwd  mm0,mm4
296
;;       punpcklwd  mm0,mm4
262
;;       punpcklwd  mm1,mm4
297
;;       punpcklwd  mm1,mm4
263
;       punpcklwd  mm2,mm4
298
;       punpcklwd  mm2,mm4
264
;       punpcklwd  mm3,mm4
299
;       punpcklwd  mm3,mm4
265
 
300
 
266
;;       psubd    mm1,mm0
301
;;       psubd    mm1,mm0
267
;       psubd      mm3,mm2
302
;       psubd      mm3,mm2
268
 
303
 
269
 
304
 
270
;       cvtpi2ps  xmm1,mm1
305
;       cvtpi2ps  xmm1,mm1
271
;       movlhps   xmm1,xmm1
306
;       movlhps   xmm1,xmm1
272
;       cvtpi2ps  xmm1,mm3
307
;       cvtpi2ps  xmm1,mm3
273
 
308
 
274
;       divps     xmm1,xmm3   ; xmm1--> | dz | dx | dty | dtx |
309
;       divps     xmm1,xmm3   ; xmm1--> | dz | dx | dty | dtx |
275
 
310
 
276
;       shufps    xmm1,xmm1,10110001b
311
;       shufps    xmm1,xmm1,10110001b
277
			     ; xmm1--> | dx | dz | dtx | dty |
312
			     ; xmm1--> | dx | dz | dtx | dty |
278
;       cvtps2pi  mm0,xmm1    ; mm0 -> 2 delta dwords  | dtx | dty |
313
;       cvtps2pi  mm0,xmm1    ; mm0 -> 2 delta dwords  | dtx | dty |
279
;       movhlps   xmm1,xmm1
314
;       movhlps   xmm1,xmm1
280
;       cvtps2pi  mm1,xmm1    ; mm1 --> 2 delta dwords | dx | dz |
315
;       cvtps2pi  mm1,xmm1    ; mm1 --> 2 delta dwords | dx | dz |
281
;       movq      .dty12,mm0
316
;       movq      .dty12,mm0
282
;       movq      .dz12,mm1
317
;       movq      .dz12,mm1
283
else
318
else
284
 
319
       mov     ax,.z2
-
 
320
       sub     ax,.z1
-
 
321
       cwde
-
 
322
       shl     eax,CATMULL_SHIFT
-
 
323
       cdq
-
 
324
       idiv    ebx
-
 
325
       push    eax
-
 
326
 
285
       mov	ax,word[.b_x2]
327
       mov	ax,word[.b_x2]
286
       sub	ax,word[.b_x1]
328
       sub	ax,word[.b_x1]
287
       cwde
329
       cwde
288
       shl	eax,ROUND
330
       shl	eax,ROUND
289
       cdq
331
       cdq
290
       idiv	ebx
332
       idiv	ebx
291
 ;     mov      .dbx12,eax
333
 ;     mov      .dbx12,eax
292
       push	 eax
334
       push	 eax
293
 
335
 
294
       mov	ax,word[.b_y2]
336
       mov	ax,word[.b_y2]
295
       sub	ax,word[.b_y1]
337
       sub	ax,word[.b_y1]
296
       cwde
338
       cwde
297
       shl	eax,ROUND
339
       shl	eax,ROUND
298
       cdq
340
       cdq
299
       idiv	ebx
341
       idiv	ebx
300
 ;     mov      .dby12,eax
342
 ;     mov      .dby12,eax
301
       push	 eax
343
       push	 eax
302
 
344
 
303
       mov	ax,word[.e_x2]
345
       mov	ax,word[.e_x2]
304
       sub	ax,word[.e_x1]
346
       sub	ax,word[.e_x1]
305
       cwde
347
       cwde
306
       shl	eax,ROUND
348
       shl	eax,ROUND
307
       cdq
349
       cdq
308
       idiv	ebx
350
       idiv	ebx
309
 ;     mov      .dex12,eax
351
 ;     mov      .dex12,eax
310
       push	 eax
352
       push	 eax
311
 
353
 
312
       mov	ax,word[.e_y2]
354
       mov	ax,word[.e_y2]
313
       sub	ax,word[.e_y1]
355
       sub	ax,word[.e_y1]
314
       cwde
356
       cwde
315
       shl	eax,ROUND
357
       shl	eax,ROUND
316
       cdq
358
       cdq
317
       idiv	ebx
359
       idiv	ebx
318
 ;     mov      .dey12,eax
360
 ;     mov      .dey12,eax
319
       push	 eax
361
       push	 eax
320
 
362
 
321
end if
363
;end if
322
 
364
 
323
       mov	ax,word[.t_x2]
365
       mov	ax,word[.t_x2]
324
       sub	ax,word[.t_x1]
366
       sub	ax,word[.t_x1]
325
       cwde
367
       cwde
326
       shl	eax,ROUND
368
       shl	eax,ROUND
327
       cdq
369
       cdq
328
       idiv	ebx
370
       idiv	ebx
329
 ;     mov      .dtx12,eax
371
 ;     mov      .dtx12,eax
330
       push	 eax
372
       push	 eax
331
 
373
 
332
       mov	ax,word[.t_y2]
374
       mov	ax,word[.t_y2]
333
       sub	ax,word[.t_y1]
375
       sub	ax,word[.t_y1]
334
       cwde
376
       cwde
335
       shl	eax,ROUND
377
       shl	eax,ROUND
336
       cdq
378
       cdq
337
       idiv	ebx
379
       idiv	ebx
338
 ;     mov      .dty12,eax
380
 ;     mov      .dty12,eax
339
       push	 eax
381
       push	 eax
340
 
382
end if
341
   .bt_dx12_done:
383
   .bt_dx12_done:
342
 
384
 
343
       mov	bx,.y3	     ; calc delta13
385
       mov	bx,.y3	     ; calc delta13
344
       sub	bx,.y1
386
       sub	bx,.y1
345
       jnz	.bt_dx13_make
387
       jnz	.bt_dx13_make
346
       mov	ecx,8
388
       mov	ecx,8
347
       xor	edx,edx
389
       xor	edx,edx
348
     @@:
390
     @@:
349
       push	edx   ;dword 0
391
       push	edx   ;dword 0
350
       loop	@b
392
       loop	@b
351
       jmp	.bt_dx13_done
393
       jmp	.bt_dx13_done
352
 .bt_dx13_make:
394
 .bt_dx13_make:
353
       mov	ax,.x3
395
       mov	ax,.x3
354
       sub	ax,.x1
396
       sub	ax,.x1
355
       cwde
397
       cwde
356
       movsx	ebx,bx
398
       movsx	ebx,bx
357
       shl	eax,ROUND
399
       shl	eax,ROUND
358
       cdq
400
       cdq
359
       idiv	ebx
401
       idiv	ebx
360
 ;     mov      .dx13,eax
402
 ;     mov      .dx13,eax
361
       push	 eax
403
       push	 eax
362
 
404
 
363
       mov     ax,.z3
-
 
364
       sub     ax,.z1
-
 
365
       cwde
-
 
366
       shl     eax,CATMULL_SHIFT
-
 
367
       cdq
-
 
368
       idiv    ebx
-
 
369
  ;    mov    .dz13,eax
-
 
370
       push    eax
-
 
371
 
-
 
372
if Ext>=SSE
405
if Ext>=SSE
373
 
406
 
374
       sub	 esp,16
407
       sub	 esp,28
375
   ;    mov       eax,255
408
   ;    mov       eax,255
376
       cvtsi2ss  xmm4,[i255d]
409
       cvtsi2ss  xmm4,[i255d]
377
       cvtsi2ss  xmm3,ebx	     ;rcps
410
       cvtsi2ss  xmm3,ebx	     ;rcps
378
       divss	 xmm3,xmm4
411
       divss	 xmm3,xmm4
379
       shufps	 xmm3,xmm3,0
412
       shufps	 xmm3,xmm3,0
380
 
413
 
381
       movd	 mm0,[.b_x1]
414
       movd	 mm0,[.b_x1]
382
       movd	 mm1,[.b_x3]
415
       movd	 mm1,[.b_x3]
383
       movd	 mm2,[.e_x1]
416
       movd	 mm2,[.e_x1]
384
       movd	 mm3,[.e_x3]
417
       movd	 mm3,[.e_x3]
385
 
418
 
386
       pxor	  mm4,mm4
419
       pxor	  mm4,mm4
387
       punpcklwd  mm0,mm4
420
       punpcklwd  mm0,mm4
388
       punpcklwd  mm1,mm4
421
       punpcklwd  mm1,mm4
389
       punpcklwd  mm2,mm4
422
       punpcklwd  mm2,mm4
390
       punpcklwd  mm3,mm4
423
       punpcklwd  mm3,mm4
391
 
424
 
392
       psubd	  mm1,mm0
425
       psubd	  mm1,mm0
393
       psubd	  mm3,mm2
426
       psubd	  mm3,mm2
394
 
427
 
395
       cvtpi2ps  xmm1,mm1
428
       cvtpi2ps  xmm1,mm1
396
       movlhps	 xmm1,xmm1
429
       movlhps	 xmm1,xmm1
397
       cvtpi2ps  xmm1,mm3
430
       cvtpi2ps  xmm1,mm3
398
 
431
 
399
       divps	 xmm1,xmm3   ;xmm1--> | dby | dbx | dey | dex |
432
       divps	 xmm1,xmm3   ;xmm1--> | dby | dbx | dey | dex |
400
 
433
 
401
       shufps	 xmm1,xmm1,10110001b
434
       shufps	 xmm1,xmm1,10110001b
402
			     ;xmm1--> | dbx | dby | dex | dey |
435
			     ;xmm1--> | dbx | dby | dex | dey |
403
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
436
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
404
       movhlps	 xmm1,xmm1
437
       movhlps	 xmm1,xmm1
405
       cvtps2pi  mm1,xmm1
438
       cvtps2pi  mm1,xmm1
406
       movq	 .dey13,mm0
439
       movq	 .dey13,mm0
407
       movq	 .dby13,mm1
440
       movq	 .dby13,mm1
408
else
441
;----------
-
 
442
       mov	 ax,.z3
-
 
443
       sub	 ax,.z1
-
 
444
       cwde
-
 
445
 
-
 
446
       movd	  mm2,[.t_x1]
-
 
447
       movd	  mm3,[.t_x3]
-
 
448
 
-
 
449
       punpcklwd  mm2,mm4
-
 
450
       punpcklwd  mm3,mm4
-
 
451
       psubd	  mm3,mm2
-
 
452
 
-
 
453
       cvtsi2ss  xmm1,eax
-
 
454
       movlhps	 xmm1,xmm1
-
 
455
       cvtpi2ps  xmm1,mm3
-
 
456
 
-
 
457
       divps	 xmm1,xmm3   ; xmm1--> | xxx | dz | dty | dtx |
-
 
458
 
-
 
459
       shufps	 xmm1,xmm1,11100001b
-
 
460
			     ; xmm1--> | xxx | dz | dtx | dty |
-
 
461
       cvtps2pi  mm0,xmm1    ; mm0 -> 2 delta dwords  | dtx | dty |
-
 
462
       movhlps	 xmm1,xmm1
-
 
463
       cvtss2si  eax,xmm1    ; eax --> 1 delta dword | dz |
-
 
464
       movq	 .dty13,mm0
-
 
465
       mov	 .dz13,eax
-
 
466
else
409
       mov	ax,word[.b_x3]
467
       mov     ax,.z3
-
 
468
       sub     ax,.z1
-
 
469
       cwde
-
 
470
       shl     eax,CATMULL_SHIFT
-
 
471
       cdq
-
 
472
       idiv    ebx
-
 
473
  ;    mov    .dz13,eax
-
 
474
       push    eax
-
 
475
 
-
 
476
 
-
 
477
       mov	ax,word[.b_x3]
410
       sub	ax,word[.b_x1]
478
       sub	ax,word[.b_x1]
411
       cwde
479
       cwde
412
       shl	eax,ROUND
480
       shl	eax,ROUND
413
       cdq
481
       cdq
414
       idiv	ebx
482
       idiv	ebx
415
 ;     mov      .dbx13,eax
483
 ;     mov      .dbx13,eax
416
       push	 eax
484
       push	 eax
417
 
485
 
418
       mov	ax,word[.b_y3]
486
       mov	ax,word[.b_y3]
419
       sub	ax,word[.b_y1]
487
       sub	ax,word[.b_y1]
420
       cwde
488
       cwde
421
       shl	eax,ROUND
489
       shl	eax,ROUND
422
       cdq
490
       cdq
423
       idiv	ebx
491
       idiv	ebx
424
 ;     mov      .dby13,eax
492
 ;     mov      .dby13,eax
425
       push	 eax
493
       push	 eax
426
 
494
 
427
       mov	ax,word[.e_x3]
495
       mov	ax,word[.e_x3]
428
       sub	ax,word[.e_x1]
496
       sub	ax,word[.e_x1]
429
       cwde
497
       cwde
430
       shl	eax,ROUND
498
       shl	eax,ROUND
431
       cdq
499
       cdq
432
       idiv	ebx
500
       idiv	ebx
433
 ;     mov      .dex13,eax
501
 ;     mov      .dex13,eax
434
       push	 eax
502
       push	 eax
435
 
503
 
436
       mov	ax,word[.e_y3]
504
       mov	ax,word[.e_y3]
437
       sub	ax,word[.e_y1]
505
       sub	ax,word[.e_y1]
438
       cwde
506
       cwde
439
       shl	eax,ROUND
507
       shl	eax,ROUND
440
       cdq
508
       cdq
441
       idiv	ebx
509
       idiv	ebx
442
 ;     mov      .dey13,eax
510
 ;     mov      .dey13,eax
443
       push	 eax
511
       push	 eax
444
end if
512
 
445
 
-
 
446
       mov	ax,word[.t_x3]
513
       mov	ax,word[.t_x3]
447
       sub	ax,word[.t_x1]
514
       sub	ax,word[.t_x1]
448
       cwde
515
       cwde
449
       shl	eax,ROUND
516
       shl	eax,ROUND
450
       cdq
517
       cdq
451
       idiv	ebx
518
       idiv	ebx
452
 ;     mov      .dtx13,eax
519
 ;     mov      .dtx13,eax
453
       push	 eax
520
       push	 eax
454
 
521
 
455
       mov	ax,word[.t_y3]
522
       mov	ax,word[.t_y3]
456
       sub	ax,word[.t_y1]
523
       sub	ax,word[.t_y1]
457
       cwde
524
       cwde
458
       shl	eax,ROUND
525
       shl	eax,ROUND
459
       cdq
526
       cdq
460
       idiv	ebx
527
       idiv	ebx
461
 ;     mov      .dty13,eax
528
 ;     mov      .dty13,eax
462
       push	 eax
529
       push	 eax
463
 
530
end if
464
   .bt_dx13_done:
531
   .bt_dx13_done:
465
 
532
 
466
       mov	bx,.y3	     ; calc delta23
533
       mov	bx,.y3	     ; calc delta23
467
       sub	bx,.y2
534
       sub	bx,.y2
468
       jnz	.bt_dx23_make
535
       jnz	.bt_dx23_make
469
       mov	ecx,8
536
       mov	ecx,8
470
       xor	edx,edx
537
       xor	edx,edx
471
     @@:
538
     @@:
472
       push	edx   ;dword 0
539
       push	edx   ;dword 0
473
       loop	@b
540
       loop	@b
474
       jmp	.bt_dx23_done
541
       jmp	.bt_dx23_done
475
 .bt_dx23_make:
542
 .bt_dx23_make:
476
       mov	ax,.x3
543
       mov	ax,.x3
477
       sub	ax,.x2
544
       sub	ax,.x2
478
       cwde
545
       cwde
479
       movsx	ebx,bx
546
       movsx	ebx,bx
480
       shl	eax,ROUND
547
       shl	eax,ROUND
481
       cdq
548
       cdq
482
       idiv	ebx
549
       idiv	ebx
483
 ;     mov      .dx23,eax
550
 ;     mov      .dx23,eax
484
       push	 eax
551
       push	 eax
485
 
552
 
486
       mov     ax,.z3
-
 
487
       sub     ax,.z2
-
 
488
       cwde
-
 
489
       shl     eax,CATMULL_SHIFT
-
 
490
       cdq
-
 
491
       idiv    ebx
-
 
492
     ; mov     .dz23,eax
-
 
493
       push    eax
-
 
494
 
-
 
495
if Ext>=SSE
553
if Ext>=SSE
496
 
554
 
497
       sub	 esp,16
555
       sub	 esp,28
498
    ;   mov       eax,255
556
    ;   mov       eax,255
499
       cvtsi2ss  xmm4,[i255d]
557
       cvtsi2ss  xmm4,[i255d]
500
       cvtsi2ss  xmm3,ebx	     ;rcps
558
       cvtsi2ss  xmm3,ebx	     ;rcps
501
       divss	 xmm3,xmm4
559
       divss	 xmm3,xmm4
502
       shufps	 xmm3,xmm3,0
560
       shufps	 xmm3,xmm3,0
503
 
561
 
504
       movd	 mm0,[.b_x2]
562
       movd	 mm0,[.b_x2]
505
       movd	 mm1,[.b_x3]
563
       movd	 mm1,[.b_x3]
506
       movd	 mm2,[.e_x2]
564
       movd	 mm2,[.e_x2]
507
       movd	 mm3,[.e_x3]
565
       movd	 mm3,[.e_x3]
508
 
566
 
509
       pxor	  mm4,mm4
567
       pxor	  mm4,mm4
510
       punpcklwd  mm0,mm4
568
       punpcklwd  mm0,mm4
511
       punpcklwd  mm1,mm4
569
       punpcklwd  mm1,mm4
512
       punpcklwd  mm2,mm4
570
       punpcklwd  mm2,mm4
513
       punpcklwd  mm3,mm4
571
       punpcklwd  mm3,mm4
514
 
572
 
515
       psubd	  mm1,mm0
573
       psubd	  mm1,mm0
516
       psubd	  mm3,mm2
574
       psubd	  mm3,mm2
517
 
575
 
518
       cvtpi2ps  xmm1,mm1
576
       cvtpi2ps  xmm1,mm1
519
       movlhps	 xmm1,xmm1
577
       movlhps	 xmm1,xmm1
520
       cvtpi2ps  xmm1,mm3
578
       cvtpi2ps  xmm1,mm3
521
 
579
 
522
       divps	 xmm1,xmm3   ;xmm1--> | dby | dbx | dey | dex |
580
       divps	 xmm1,xmm3   ;xmm1--> | dby | dbx | dey | dex |
523
 
581
 
524
       shufps	 xmm1,xmm1,10110001b
582
       shufps	 xmm1,xmm1,10110001b
525
			     ;xmm1--> | dbx | dby | dex | dey |
583
			     ;xmm1--> | dbx | dby | dex | dey |
526
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
584
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
527
       movhlps	 xmm1,xmm1
585
       movhlps	 xmm1,xmm1
528
       cvtps2pi  mm1,xmm1
586
       cvtps2pi  mm1,xmm1
529
       movq	 .dey23,mm0
587
       movq	 .dey23,mm0
530
       movq	 .dby23,mm1
588
       movq	 .dby23,mm1
531
else
589
;----------
-
 
590
       mov	 ax,.z3
-
 
591
       sub	 ax,.z2
-
 
592
       cwde
-
 
593
 
-
 
594
       movd	  mm2,[.t_x2]
-
 
595
       movd	  mm3,[.t_x3]
-
 
596
 
-
 
597
       punpcklwd  mm2,mm4
-
 
598
       punpcklwd  mm3,mm4
-
 
599
       psubd	  mm3,mm2
-
 
600
 
-
 
601
       cvtsi2ss  xmm1,eax
-
 
602
       movlhps	 xmm1,xmm1
-
 
603
       cvtpi2ps  xmm1,mm3
-
 
604
 
-
 
605
       divps	 xmm1,xmm3   ; xmm1--> | xxx | dz | dty | dtx |
-
 
606
 
-
 
607
       shufps	 xmm1,xmm1,11100001b
-
 
608
			     ; xmm1--> | xxx | dz | dtx | dty |
-
 
609
       cvtps2pi  mm0,xmm1    ; mm0 -> 2 delta dwords  | dtx | dty |
-
 
610
       movhlps	 xmm1,xmm1
-
 
611
       cvtss2si  eax,xmm1    ; eax --> 1 delta dword | dz |
-
 
612
       movq	 .dty23,mm0
-
 
613
       mov	 .dz23,eax
-
 
614
else
532
       mov	ax,word[.b_x3]
615
 
-
 
616
       mov     ax,.z3
-
 
617
       sub     ax,.z2
-
 
618
       cwde
-
 
619
       shl     eax,CATMULL_SHIFT
-
 
620
       cdq
-
 
621
       idiv    ebx
-
 
622
     ; mov     .dz23,eax
-
 
623
       push    eax
-
 
624
 
-
 
625
       mov	ax,word[.b_x3]
533
       sub	ax,word[.b_x2]
626
       sub	ax,word[.b_x2]
534
       cwde
627
       cwde
535
       shl	eax,ROUND
628
       shl	eax,ROUND
536
       cdq
629
       cdq
537
       idiv	ebx
630
       idiv	ebx
538
 ;     mov      .dbx23,eax
631
 ;     mov      .dbx23,eax
539
       push	 eax
632
       push	 eax
540
 
633
 
541
       mov	ax,word[.b_y3]
634
       mov	ax,word[.b_y3]
542
       sub	ax,word[.b_y2]
635
       sub	ax,word[.b_y2]
543
       cwde
636
       cwde
544
       shl	eax,ROUND
637
       shl	eax,ROUND
545
       cdq
638
       cdq
546
       idiv	ebx
639
       idiv	ebx
547
 ;     mov      .dby23,eax
640
 ;     mov      .dby23,eax
548
       push	 eax
641
       push	 eax
549
 
642
 
550
       mov	ax,word[.e_x3]
643
       mov	ax,word[.e_x3]
551
       sub	ax,word[.e_x2]
644
       sub	ax,word[.e_x2]
552
       cwde
645
       cwde
553
       shl	eax,ROUND
646
       shl	eax,ROUND
554
       cdq
647
       cdq
555
       idiv	ebx
648
       idiv	ebx
556
 ;     mov      .dex23,eax
649
 ;     mov      .dex23,eax
557
       push	 eax
650
       push	 eax
558
 
651
 
559
       mov	ax,word[.e_y3]
652
       mov	ax,word[.e_y3]
560
       sub	ax,word[.e_y2]
653
       sub	ax,word[.e_y2]
561
       cwde
654
       cwde
562
       shl	eax,ROUND
655
       shl	eax,ROUND
563
       cdq
656
       cdq
564
       idiv	ebx
657
       idiv	ebx
565
 ;     mov      .dey23,eax
658
 ;     mov      .dey23,eax
566
       push	 eax
659
       push	 eax
567
end if
660
 
568
 
661
 
569
       mov	ax,word[.t_x3]
662
       mov	ax,word[.t_x3]
570
       sub	ax,word[.t_x2]
663
       sub	ax,word[.t_x2]
571
       cwde
664
       cwde
572
       shl	eax,ROUND
665
       shl	eax,ROUND
573
       cdq
666
       cdq
574
       idiv	ebx
667
       idiv	ebx
575
 ;     mov      .dtx23,eax
668
 ;     mov      .dtx23,eax
576
       push	 eax
669
       push	 eax
577
 
670
 
578
       mov	ax,word[.t_y3]
671
       mov	ax,word[.t_y3]
579
       sub	ax,word[.t_y2]
672
       sub	ax,word[.t_y2]
580
       cwde
673
       cwde
581
       shl	eax,ROUND
674
       shl	eax,ROUND
582
       cdq
675
       cdq
583
       idiv	ebx
676
       idiv	ebx
584
 ;     mov      .dty23,eax
677
 ;     mov      .dty23,eax
585
       push	 eax
678
       push	 eax
586
 
679
end if
587
      ;  sub     esp,40
680
      ;  sub     esp,40
588
   .bt_dx23_done:
681
   .bt_dx23_done:
589
       sub	 esp,64
682
       sub	 esp,64
590
       movsx	eax,.x1
683
       movsx	eax,.x1
591
       shl	eax,ROUND
684
       shl	eax,ROUND
592
       mov	.cx1,eax
685
       mov	.cx1,eax
593
       mov	.cx2,eax
686
       mov	.cx2,eax
594
  ;     push     eax
687
  ;     push     eax
595
  ;     push     eax
688
  ;     push     eax
596
 
689
 
597
       movsx	ebx,word[.b_x1]
690
       movsx	ebx,word[.b_x1]
598
       shl	ebx,ROUND
691
       shl	ebx,ROUND
599
       mov	.cbx1,ebx
692
       mov	.cbx1,ebx
600
       mov	.cbx2,ebx
693
       mov	.cbx2,ebx
601
      ; push     ebx
694
      ; push     ebx
602
      ; push     ebx
695
      ; push     ebx
603
 
696
 
604
       movsx	ecx,word[.b_y1]
697
       movsx	ecx,word[.b_y1]
605
       shl	ecx,ROUND
698
       shl	ecx,ROUND
606
       mov	.cby1,ecx
699
       mov	.cby1,ecx
607
       mov	.cby2,ecx
700
       mov	.cby2,ecx
608
      ; push     ecx
701
      ; push     ecx
609
      ; push     ecx
702
      ; push     ecx
610
 
703
 
611
       movsx	edx,word[.e_x1]
704
       movsx	edx,word[.e_x1]
612
       shl	edx,ROUND
705
       shl	edx,ROUND
613
       mov	.cex1,edx
706
       mov	.cex1,edx
614
       mov	.cex2,edx
707
       mov	.cex2,edx
615
    ;   push     edx
708
    ;   push     edx
616
    ;   push     edx
709
    ;   push     edx
617
 
710
 
618
       movsx	eax,word[.e_y1]
711
       movsx	eax,word[.e_y1]
619
       shl	eax,ROUND
712
       shl	eax,ROUND
620
       mov	.cey1,eax
713
       mov	.cey1,eax
621
       mov	.cey2,eax
714
       mov	.cey2,eax
622
    ;   push     eax
715
    ;   push     eax
623
    ;   push     eax
716
    ;   push     eax
624
 
717
 
625
       movsx	ebx,.z1
718
       movsx	ebx,.z1
626
       shl	ebx,CATMULL_SHIFT
719
       shl	ebx,CATMULL_SHIFT
627
       mov	.cz1,ebx
720
       mov	.cz1,ebx
628
       mov	.cz2,ebx
721
       mov	.cz2,ebx
629
   ;    push     ebx
722
   ;    push     ebx
630
   ;    push     ebx
723
   ;    push     ebx
631
 
724
 
632
      ; sub      esp,16
725
      ; sub      esp,16
633
       movsx	ecx,word[.t_x1]
726
       movsx	ecx,word[.t_x1]
634
       shl	ecx,ROUND
727
       shl	ecx,ROUND
635
       mov	.ctx1,ecx
728
       mov	.ctx1,ecx
636
       mov	.ctx2,ecx
729
       mov	.ctx2,ecx
637
       ;push     ecx
730
       ;push     ecx
638
       ;push     ecx
731
       ;push     ecx
639
 
732
 
640
       movsx	edx,word[.t_y1]
733
       movsx	edx,word[.t_y1]
641
       shl	edx,ROUND
734
       shl	edx,ROUND
642
       mov	.cty1,edx
735
       mov	.cty1,edx
643
       mov	.cty2,edx
736
       mov	.cty2,edx
644
      ; push     edx
737
      ; push     edx
645
      ; push     edx
738
      ; push     edx
646
 
739
 
647
 
740
 
648
       movsx	ecx,.y1
741
       movsx	ecx,.y1
649
       cmp	cx,.y2
742
       cmp	cx,.y2
650
       jge	.loop12_done
743
       jge	.loop12_done
651
  .loop12:
744
  .loop12:
652
       call	.call_line
745
       call	.call_line
653
 
746
 
654
if Ext >= MMX
747
if Ext >= MMX
655
       movq	mm0,.cby2
748
       movq	mm0,.cby2
656
       movq	mm1,.cby1
749
       movq	mm1,.cby1
657
       movq	mm2,.cey2
750
       movq	mm2,.cey2
658
       movq	mm3,.cey1
751
       movq	mm3,.cey1
659
       movq	mm4,.cty1
752
       movq	mm4,.cty1
660
       movq	mm5,.cty2
753
       movq	mm5,.cty2
661
       movq	mm6,.cz1
754
       movq	mm6,.cz1
662
       movq	mm7,.cz2
755
       movq	mm7,.cz2
663
       paddd	mm0,.dby12
756
       paddd	mm0,.dby12
664
       paddd	mm1,.dby13
757
       paddd	mm1,.dby13
665
       paddd	mm2,.dey12
758
       paddd	mm2,.dey12
666
       paddd	mm3,.dey13
759
       paddd	mm3,.dey13
667
       paddd	mm4,.dty13
760
       paddd	mm4,.dty13
668
       paddd	mm5,.dty12
761
       paddd	mm5,.dty12
669
       paddd	mm6,.dz13
762
       paddd	mm6,.dz13
670
       paddd	mm7,.dz12
763
       paddd	mm7,.dz12
671
       movq	.cby2,mm0
764
       movq	.cby2,mm0
672
       movq	.cby1,mm1
765
       movq	.cby1,mm1
673
       movq	.cey1,mm3
766
       movq	.cey1,mm3
674
       movq	.cey2,mm2
767
       movq	.cey2,mm2
675
       movq	.cty1,mm4
768
       movq	.cty1,mm4
676
       movq	.cty2,mm5
769
       movq	.cty2,mm5
677
       movq	.cz1,mm6
770
       movq	.cz1,mm6
678
       movq	.cz2,mm7
771
       movq	.cz2,mm7
679
else
772
else
680
       mov	edx,.dbx13
773
       mov	edx,.dbx13
681
       add	.cbx1,edx
774
       add	.cbx1,edx
682
       mov	eax,.dbx12
775
       mov	eax,.dbx12
683
       add	.cbx2,eax
776
       add	.cbx2,eax
684
       mov	ebx,.dby13
777
       mov	ebx,.dby13
685
       add	.cby1,ebx
778
       add	.cby1,ebx
686
       mov	edx,.dby12
779
       mov	edx,.dby12
687
       add	.cby2,edx
780
       add	.cby2,edx
688
 
781
 
689
       mov	eax,.dex13
782
       mov	eax,.dex13
690
       add	.cex1,eax
783
       add	.cex1,eax
691
       mov	ebx,.dex12
784
       mov	ebx,.dex12
692
       add	.cex2,ebx
785
       add	.cex2,ebx
693
       mov	edx,.dey13
786
       mov	edx,.dey13
694
       add	.cey1,edx
787
       add	.cey1,edx
695
       mov	eax,.dey12
788
       mov	eax,.dey12
696
       add	.cey2,eax
789
       add	.cey2,eax
697
 
790
 
698
       mov	eax,.dtx13
791
       mov	eax,.dtx13
699
       add	.ctx1,eax
792
       add	.ctx1,eax
700
       mov	ebx,.dtx12
793
       mov	ebx,.dtx12
701
       add	.ctx2,ebx
794
       add	.ctx2,ebx
702
       mov	edx,.dty13
795
       mov	edx,.dty13
703
       add	.cty1,edx
796
       add	.cty1,edx
704
       mov	eax,.dty12
797
       mov	eax,.dty12
705
       add	.cty2,eax
798
       add	.cty2,eax
706
 
799
 
707
       mov	eax,.dx13
800
       mov	eax,.dx13
708
       add	.cx1,eax
801
       add	.cx1,eax
709
       mov	ebx,.dx12
802
       mov	ebx,.dx12
710
       add	.cx2,ebx
803
       add	.cx2,ebx
711
       mov	ebx,.dz13
804
       mov	ebx,.dz13
712
       add	.cz1,ebx
805
       add	.cz1,ebx
713
       mov	edx,.dz12
806
       mov	edx,.dz12
714
       add	.cz2,edx
807
       add	.cz2,edx
715
end if
808
end if
716
       inc	ecx
809
       inc	ecx
717
       cmp	cx,.y2
810
       cmp	cx,.y2
718
       jl	.loop12
811
       jl	.loop12
719
    .loop12_done:
812
    .loop12_done:
720
 
813
 
721
       movsx	ecx,.y2
814
       movsx	ecx,.y2
722
       cmp	cx,.y3
815
       cmp	cx,.y3
723
       jge	.loop23_done
816
       jge	.loop23_done
724
 
817
 
725
       movsx	eax,.z2
818
       movsx	eax,.z2
726
       shl	eax,CATMULL_SHIFT
819
       shl	eax,CATMULL_SHIFT
727
       mov	.cz2,eax
820
       mov	.cz2,eax
728
 
821
 
729
       movsx	ebx,.x2
822
       movsx	ebx,.x2
730
       shl	ebx,ROUND
823
       shl	ebx,ROUND
731
       mov	.cx2,ebx
824
       mov	.cx2,ebx
732
 
825
 
733
       movzx	edx,word[.b_x2]
826
       movzx	edx,word[.b_x2]
734
       shl	edx,ROUND
827
       shl	edx,ROUND
735
       mov	.cbx2,edx
828
       mov	.cbx2,edx
736
 
829
 
737
       movzx	eax,word[.b_y2]
830
       movzx	eax,word[.b_y2]
738
       shl	eax,ROUND
831
       shl	eax,ROUND
739
       mov	.cby2,eax
832
       mov	.cby2,eax
740
 
833
 
741
       movzx	ebx,word[.e_x2]
834
       movzx	ebx,word[.e_x2]
742
       shl	ebx,ROUND
835
       shl	ebx,ROUND
743
       mov	.cex2,ebx
836
       mov	.cex2,ebx
744
 
837
 
745
       movzx	edx,word[.e_y2]
838
       movzx	edx,word[.e_y2]
746
       shl	edx,ROUND
839
       shl	edx,ROUND
747
       mov	.cey2,edx
840
       mov	.cey2,edx
748
 
841
 
749
       movzx	eax,word[.t_x2]
842
       movzx	eax,word[.t_x2]
750
       shl	eax,ROUND
843
       shl	eax,ROUND
751
       mov	.ctx2,eax
844
       mov	.ctx2,eax
752
 
845
 
753
       movzx	ebx,word[.t_y2]
846
       movzx	ebx,word[.t_y2]
754
       shl	ebx,ROUND
847
       shl	ebx,ROUND
755
       mov	.cty2,ebx
848
       mov	.cty2,ebx
756
 
849
 
757
     .loop23:
850
     .loop23:
758
       call	.call_line
851
       call	.call_line
759
 
852
 
760
if Ext >= MMX
853
if Ext >= MMX
761
       movq	mm0,.cby2
854
       movq	mm0,.cby2
762
       movq	mm1,.cby1
855
       movq	mm1,.cby1
763
       movq	mm2,.cey2
856
       movq	mm2,.cey2
764
       movq	mm3,.cey1
857
       movq	mm3,.cey1
765
       movq	mm4,.cty1
858
       movq	mm4,.cty1
766
       movq	mm5,.cty2
859
       movq	mm5,.cty2
767
       movq	mm6,.cz1
860
       movq	mm6,.cz1
768
       movq	mm7,.cz2
861
       movq	mm7,.cz2
769
       paddd	mm0,.dby23
862
       paddd	mm0,.dby23
770
       paddd	mm1,.dby13
863
       paddd	mm1,.dby13
771
       paddd	mm2,.dey23
864
       paddd	mm2,.dey23
772
       paddd	mm3,.dey13
865
       paddd	mm3,.dey13
773
       paddd	mm4,.dty13
866
       paddd	mm4,.dty13
774
       paddd	mm5,.dty23
867
       paddd	mm5,.dty23
775
       paddd	mm6,.dz13
868
       paddd	mm6,.dz13
776
       paddd	mm7,.dz23
869
       paddd	mm7,.dz23
777
       movq	.cby2,mm0
870
       movq	.cby2,mm0
778
       movq	.cby1,mm1
871
       movq	.cby1,mm1
779
       movq	.cey2,mm2
872
       movq	.cey2,mm2
780
       movq	.cey1,mm3
873
       movq	.cey1,mm3
781
       movq	.cty1,mm4
874
       movq	.cty1,mm4
782
       movq	.cty2,mm5
875
       movq	.cty2,mm5
783
       movq	.cz1,mm6
876
       movq	.cz1,mm6
784
       movq	.cz2,mm7
877
       movq	.cz2,mm7
785
else
878
else
786
       mov	edx,.dbx13
879
       mov	edx,.dbx13
787
       add	.cbx1,edx
880
       add	.cbx1,edx
788
       mov	eax,.dbx23
881
       mov	eax,.dbx23
789
       add	.cbx2,eax
882
       add	.cbx2,eax
790
       mov	ebx,.dby13
883
       mov	ebx,.dby13
791
       add	.cby1,ebx
884
       add	.cby1,ebx
792
       mov	edx,.dby23
885
       mov	edx,.dby23
793
       add	.cby2,edx
886
       add	.cby2,edx
794
 
887
 
795
       mov	eax,.dex13
888
       mov	eax,.dex13
796
       add	.cex1,eax
889
       add	.cex1,eax
797
       mov	ebx,.dex23
890
       mov	ebx,.dex23
798
       add	.cex2,ebx
891
       add	.cex2,ebx
799
       mov	edx,.dey13
892
       mov	edx,.dey13
800
       add	.cey1,edx
893
       add	.cey1,edx
801
       mov	eax,.dey23
894
       mov	eax,.dey23
802
       add	.cey2,eax
895
       add	.cey2,eax
803
 
896
 
804
       mov	eax,.dx13
897
       mov	eax,.dx13
805
       add	.cx1,eax
898
       add	.cx1,eax
806
       mov	ebx,.dx23
899
       mov	ebx,.dx23
807
       add	.cx2,ebx
900
       add	.cx2,ebx
808
       mov	ebx,.dz13
901
       mov	ebx,.dz13
809
       add	.cz1,ebx
902
       add	.cz1,ebx
810
       mov	edx,.dz23
903
       mov	edx,.dz23
811
       add	.cz2,edx
904
       add	.cz2,edx
812
 
905
 
813
       mov	eax,.dtx13
906
       mov	eax,.dtx13
814
       add	.ctx1,eax
907
       add	.ctx1,eax
815
       mov	ebx,.dtx23
908
       mov	ebx,.dtx23
816
       add	.ctx2,ebx
909
       add	.ctx2,ebx
817
       mov	edx,.dty13
910
       mov	edx,.dty13
818
       add	.cty1,edx
911
       add	.cty1,edx
819
       mov	eax,.dty23
912
       mov	eax,.dty23
820
       add	.cty2,eax
913
       add	.cty2,eax
821
 
914
 
822
end if
915
end if
823
       inc	ecx
916
       inc	ecx
824
       cmp	cx,.y3
917
       cmp	cx,.y3
825
       jl	.loop23
918
       jl	.loop23
826
    .loop23_done:
919
    .loop23_done:
827
 
920
 
828
       mov	esp,ebp
921
       mov	esp,ebp
829
ret   50
922
ret   50
830
 
923
 
831
.call_line:
924
.call_line:
832
 
925
 
833
       pushad
926
       pushad
834
       push	.tex_ptr
927
       push	.tex_ptr
835
       push	dword .cty2
928
       push	dword .cty2
836
       push	.ctx2
929
       push	.ctx2
837
       push	dword .cty1
930
       push	dword .cty1
838
       push	.ctx1
931
       push	.ctx1
839
       push	dword .cz1
932
       push	dword .cz1
840
       push	dword .cz2
933
       push	dword .cz2
841
       push	.z_buff
934
       push	.z_buff
842
       push	.t_emap
935
       push	.t_emap
843
       push	.t_bmap
936
       push	.t_bmap
844
       push	dword .cey2
937
       push	dword .cey2
845
       push	.cex2
938
       push	.cex2
846
       push	dword .cey1
939
       push	dword .cey1
847
       push	.cex1
940
       push	.cex1
848
       push	dword .cby2
941
       push	dword .cby2
849
       push	.cbx2
942
       push	.cbx2
850
       push	dword .cby1
943
       push	dword .cby1
851
       push	.cbx1
944
       push	.cbx1
852
       push	ecx
945
       push	ecx
853
 
946
 
854
       mov	eax,.cx1
947
       mov	eax,.cx1
855
       sar	eax,ROUND
948
       sar	eax,ROUND
856
       mov	ebx,.cx2
949
       mov	ebx,.cx2
857
       sar	ebx,ROUND
950
       sar	ebx,ROUND
858
 
951
 
859
       call	bump_tex_line_z
952
       call	bump_tex_line_z
860
 
953
 
861
       popad
954
       popad
862
ret
955
ret
863
bump_tex_line_z:
956
bump_tex_line_z:
864
;--------------in: eax - x1
957
;--------------in: eax - x1
865
;--------------    ebx - x2
958
;--------------    ebx - x2
866
;--------------    edi - pointer to screen buffer
959
;--------------    edi - pointer to screen buffer
867
;stack - another parameters :
960
;stack - another parameters :
868
.y	equ dword [ebp+4]
961
.y	equ dword [ebp+4]
869
.bx1q	equ	  [ebp+8]
962
.bx1q	equ	  [ebp+8]
870
.bx2q	equ	  [ebp+16]
963
.bx2q	equ	  [ebp+16]
871
.ex1q	equ	  [ebp+24]
964
.ex1q	equ	  [ebp+24]
872
.ex2q	equ	  [ebp+32]
965
.ex2q	equ	  [ebp+32]
873
.tx1q	equ	  [ebp+60]
966
.tx1q	equ	  [ebp+60]
874
.tx2q	equ	  [ebp+68]
967
.tx2q	equ	  [ebp+68]
875
;.bx1q   equ       [ebp+8]
968
;.bx1q   equ       [ebp+8]
876
;.bx2q   equ       [ebp+16]
969
;.bx2q   equ       [ebp+16]
877
;.ex1q   equ       [ebp+24]
970
;.ex1q   equ       [ebp+24]
878
;.exyq   equ       [ebp+32]
971
;.exyq   equ       [ebp+32]
879
.bx1	equ dword [ebp+8]   ;   ---
972
.bx1	equ dword [ebp+8]   ;   ---
880
.by1	equ dword [ebp+12]  ;       |
973
.by1	equ dword [ebp+12]  ;       |
881
.bx2	equ dword [ebp+16]  ;       |
974
.bx2	equ dword [ebp+16]  ;       |
882
.by2	equ dword [ebp+20]  ;       |>   b. map and e. map coords
975
.by2	equ dword [ebp+20]  ;       |>   b. map and e. map coords
883
.ex1	equ dword [ebp+24]  ;       |>   shifted shl ROUND
976
.ex1	equ dword [ebp+24]  ;       |>   shifted shl ROUND
884
.ey1	equ dword [ebp+28]  ;       |
977
.ey1	equ dword [ebp+28]  ;       |
885
.ex2	equ dword [ebp+32]  ;       |
978
.ex2	equ dword [ebp+32]  ;       |
886
.ey2	equ dword [ebp+36]  ;   ---
979
.ey2	equ dword [ebp+36]  ;   ---
887
.bmap	equ dword [ebp+40]  ; bump map offset
980
.bmap	equ dword [ebp+40]  ; bump map offset
888
.emap	equ dword [ebp+44]  ; env map offset
981
.emap	equ dword [ebp+44]  ; env map offset
889
.z_buff equ dword [ebp+48]
982
.z_buff equ dword [ebp+48]
890
.z2	equ dword [ebp+52]  ;   -- |>   z coords shifted
983
.z2	equ dword [ebp+52]  ;   -- |>   z coords shifted
891
.z1	equ dword [ebp+56]  ;   --       shl  CATMULL_SHIFT
984
.z1	equ dword [ebp+56]  ;   --       shl  CATMULL_SHIFT
892
 
985
 
893
.tx1	equ dword [ebp+60]  ;  -----
986
.tx1	equ dword [ebp+60]  ;  -----
894
.ty1	equ dword [ebp+64]  ;       |>   shifted shl ROUND
987
.ty1	equ dword [ebp+64]  ;       |>   shifted shl ROUND
895
.tx2	equ dword [ebp+68]  ;       |
988
.tx2	equ dword [ebp+68]  ;       |
896
.ty2	equ dword [ebp+72]  ;   ---
989
.ty2	equ dword [ebp+72]  ;   ---
897
.tex_map equ dword [ebp+76]  ; texture offset  ( pointer )
990
.tex_map equ dword [ebp+76]  ; texture offset  ( pointer )
898
 
991
 
899
 
992
 
900
.x1	equ dword [ebp-4]
993
.x1	equ dword [ebp-4]
901
.x2	equ dword [ebp-8]
994
.x2	equ dword [ebp-8]
902
.dbx	equ dword [ebp-12]
995
.dbx	equ dword [ebp-12]
903
.dby	equ dword [ebp-16]
996
.dby	equ dword [ebp-16]
904
.dbyq	equ qword [ebp-16]  ; - new
997
.dbyq	equ qword [ebp-16]  ; - new
905
.dex	equ dword [ebp-20]
998
.dex	equ dword [ebp-20]
906
.dey	equ dword [ebp-24]
999
.dey	equ dword [ebp-24]
907
.deyq	equ qword [ebp-24]  ; - new
1000
.deyq	equ qword [ebp-24]  ; - new
908
.dz	equ dword [ebp-28]
1001
.dz	equ dword [ebp-28]
909
.dtx	equ dword [ebp-32]
1002
.dtx	equ dword [ebp-32]
910
.dty	equ dword [ebp-36]
1003
.dty	equ dword [ebp-36]
911
.dtyq	equ qword [ebp-36]
1004
.dtyq	equ qword [ebp-36]
912
 
1005
 
913
.cbx	equ dword [ebp-40]
1006
.cbx	equ dword [ebp-40]
914
.cby	equ dword [ebp-44]
1007
.cby	equ dword [ebp-44]
915
.cbyq	equ qword [ebp-44]  ; - new
1008
.cbyq	equ qword [ebp-44]  ; - new
916
.cex	equ dword [ebp-48]
1009
.cex	equ dword [ebp-48]
917
.cey	equ dword [ebp-52]
1010
.cey	equ dword [ebp-52]
918
.ceyq	equ qword [ebp-52]  ; - new
1011
.ceyq	equ qword [ebp-52]  ; - new
919
.cz	equ dword [ebp-56]
1012
.cz	equ dword [ebp-56]
920
.czbuff equ dword [ebp-60]
1013
.czbuff equ dword [ebp-60]
921
.ctx	equ dword [ebp-64]
1014
.ctx	equ dword [ebp-64]
922
.cty	equ dword [ebp-68]
1015
.cty	equ dword [ebp-68]
923
.ctyq	equ qword [ebp-68]
1016
.ctyq	equ qword [ebp-68]
924
.c_scr	equ dword [ebp-72]
1017
.c_scr	equ dword [ebp-72]
925
 
1018
 
926
.temp1	equ	   ebp-80
1019
.temp1	equ	   ebp-80
927
.temp2	equ	   ebp-88
1020
.temp2	equ	   ebp-88
928
.temp3	equ	   ebp-76
1021
.temp3	equ	   ebp-76
929
.temp4	equ	   ebp-84
1022
.temp4	equ	   ebp-84
930
.temp5	equ	   ebp-92
1023
.temp5	equ	   ebp-92
931
 
1024
 
932
	mov	ebp,esp
1025
	mov	ebp,esp
933
 
1026
 
934
 
1027
 
935
 
1028
 
936
	mov	ecx,.y
1029
	mov	ecx,.y
937
	or	ecx,ecx
1030
	or	ecx,ecx
938
	jl	.bl_end
1031
	jl	.bl_end
939
	cmp	ecx,SIZE_Y
1032
	cmp	ecx,SIZE_Y
940
	jge	.bl_end
1033
	jge	.bl_end
941
 
1034
 
942
	cmp	eax,ebx
1035
	cmp	eax,ebx
943
	jl	.bl_ok
1036
	jl	.bl_ok
944
	je	.bl_end
1037
	je	.bl_end
945
 
1038
 
946
	xchg	eax,ebx
1039
	xchg	eax,ebx
947
if Ext=NON
1040
if Ext=NON
948
	mov	edx,.bx1
1041
	mov	edx,.bx1
949
	xchg	edx,.bx2
1042
	xchg	edx,.bx2
950
	mov	.bx1,edx
1043
	mov	.bx1,edx
951
	mov	edx,.by1
1044
	mov	edx,.by1
952
	xchg	edx,.by2
1045
	xchg	edx,.by2
953
	mov	.by1,edx
1046
	mov	.by1,edx
954
 
1047
 
955
	mov	edx,.ex1
1048
	mov	edx,.ex1
956
	xchg	edx,.ex2
1049
	xchg	edx,.ex2
957
	mov	.ex1,edx
1050
	mov	.ex1,edx
958
	mov	edx,.ey1
1051
	mov	edx,.ey1
959
	xchg	edx,.ey2
1052
	xchg	edx,.ey2
960
	mov	.ey1,edx
1053
	mov	.ey1,edx
961
 
1054
 
962
	mov	edx,.tx1
1055
	mov	edx,.tx1
963
	xchg	edx,.tx2
1056
	xchg	edx,.tx2
964
	mov	.tx1,edx
1057
	mov	.tx1,edx
965
	mov	edx,.ty1
1058
	mov	edx,.ty1
966
	xchg	edx,.ty2
1059
	xchg	edx,.ty2
967
	mov	.ty1,edx
1060
	mov	.ty1,edx
968
else
1061
else
969
	movq	mm0,.bx1q
1062
	movq	mm0,.bx1q
970
	movq	mm1,.bx2q
1063
	movq	mm1,.bx2q
971
	movq	mm2,.ex1q
1064
	movq	mm2,.ex1q
972
	movq	mm3,.ex2q
1065
	movq	mm3,.ex2q
973
	movq	mm4,.tx1q
1066
	movq	mm4,.tx1q
974
	movq	mm5,.tx2q
1067
	movq	mm5,.tx2q
975
	movq	.bx2q,mm0
1068
	movq	.bx2q,mm0
976
	movq	.bx1q,mm1
1069
	movq	.bx1q,mm1
977
	movq	.ex1q,mm3
1070
	movq	.ex1q,mm3
978
	movq	.ex2q,mm2
1071
	movq	.ex2q,mm2
979
	movq	.tx1q,mm5
1072
	movq	.tx1q,mm5
980
	movq	.tx2q,mm4
1073
	movq	.tx2q,mm4
981
end if
1074
end if
982
 
1075
 
983
	mov	edx,.z1
1076
	mov	edx,.z1
984
	xchg	edx,.z2
1077
	xchg	edx,.z2
985
	mov	.z1,edx
1078
	mov	.z1,edx
986
  .bl_ok:
1079
  .bl_ok:
987
	push	eax
1080
	push	eax
988
	push	ebx	      ;store x1, x2
1081
	push	ebx	      ;store x1, x2
989
	cmp	.x1,SIZE_X
1082
	cmp	.x1,SIZE_X
990
	jge	.bl_end
1083
	jge	.bl_end
991
	cmp	.x2,0
1084
	cmp	.x2,0
992
	jle	.bl_end
1085
	jle	.bl_end
993
 
1086
 
994
	mov	ebx,.x2
1087
	mov	ebx,.x2
995
	sub	ebx,.x1
1088
	sub	ebx,.x1
996
 
1089
 
997
if Ext>=SSE
1090
if Ext>=SSE
998
 
1091
 
999
       sub	 esp,28
1092
       sub	 esp,28
1000
       cvtsi2ss  xmm3,ebx	     ;rcps
1093
       cvtsi2ss  xmm3,ebx	     ;rcps
1001
       shufps	 xmm3,xmm3,0
1094
       shufps	 xmm3,xmm3,0
1002
 
1095
 
1003
       cvtpi2ps  xmm0,.bx1q ;mm0
1096
       cvtpi2ps  xmm0,.bx1q ;mm0
1004
       movlhps	 xmm0,xmm0
1097
       movlhps	 xmm0,xmm0
1005
       cvtpi2ps  xmm0,.ex1q ;mm2
1098
       cvtpi2ps  xmm0,.ex1q ;mm2
1006
       cvtpi2ps  xmm1,.bx2q ;mm1
1099
       cvtpi2ps  xmm1,.bx2q ;mm1
1007
       movlhps	 xmm1,xmm1
1100
       movlhps	 xmm1,xmm1
1008
       cvtpi2ps  xmm1,.ex2q ;mm3
1101
       cvtpi2ps  xmm1,.ex2q ;mm3
1009
       subps	 xmm1,xmm0
1102
       subps	 xmm1,xmm0
1010
 
1103
 
1011
       divps	 xmm1,xmm3
1104
       divps	 xmm1,xmm3
1012
 
1105
 
1013
       shufps	 xmm1,xmm1,10110001b
1106
       shufps	 xmm1,xmm1,10110001b
1014
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
1107
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
1015
       movhlps	 xmm1,xmm1
1108
       movhlps	 xmm1,xmm1
1016
       cvtps2pi  mm1,xmm1
1109
       cvtps2pi  mm1,xmm1
1017
       movq	 .deyq,mm0
1110
       movq	 .deyq,mm0
1018
       movq	 .dbyq,mm1
1111
       movq	 .dbyq,mm1
1019
 
1112
 
1020
       movd	 mm2,.z1
1113
       movd	 mm2,.z1
1021
       movd	 mm3,.z2
1114
       movd	 mm3,.z2
1022
 
1115
 
1023
       cvtpi2ps  xmm0,.tx1q ;mm0
1116
       cvtpi2ps  xmm0,.tx1q ;mm0
1024
       movlhps	 xmm0,xmm0
1117
       movlhps	 xmm0,xmm0
1025
       cvtpi2ps  xmm0,mm2
1118
       cvtpi2ps  xmm0,mm2
1026
       cvtpi2ps  xmm1,.tx2q ;mm1
1119
       cvtpi2ps  xmm1,.tx2q ;mm1
1027
       movlhps	 xmm1,xmm1
1120
       movlhps	 xmm1,xmm1
1028
       cvtpi2ps  xmm1,mm3
1121
       cvtpi2ps  xmm1,mm3
1029
       subps	 xmm1,xmm0
1122
       subps	 xmm1,xmm0
1030
 
1123
 
1031
       divps	 xmm1,xmm3
1124
       divps	 xmm1,xmm3
1032
 
1125
 
1033
       shufps	 xmm1,xmm1,10110100b
1126
       shufps	 xmm1,xmm1,10110100b
1034
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
1127
       cvtps2pi  mm0,xmm1	   ; mm0 -> 2 delta dwords
1035
       movhlps	 xmm1,xmm1
1128
       movhlps	 xmm1,xmm1
1036
       cvtps2pi  mm1,xmm1
1129
       cvtps2pi  mm1,xmm1
1037
       movd	 .dz,mm0
1130
       movd	 .dz,mm0
1038
       movq	 .dtyq,mm1
1131
       movq	 .dtyq,mm1
1039
 
1132
 
1040
else
1133
else
1041
 
1134
 
1042
	mov	eax,.bx2       ; calc .dbx
1135
	mov	eax,.bx2       ; calc .dbx
1043
	sub	eax,.bx1
1136
	sub	eax,.bx1
1044
	cdq
1137
	cdq
1045
	idiv	ebx
1138
	idiv	ebx
1046
	push	eax
1139
	push	eax
1047
 
1140
 
1048
	mov	eax,.by2       ; calc .dby
1141
	mov	eax,.by2       ; calc .dby
1049
	sub	eax,.by1
1142
	sub	eax,.by1
1050
	cdq
1143
	cdq
1051
	idiv	ebx
1144
	idiv	ebx
1052
	push	eax
1145
	push	eax
1053
 
1146
 
1054
	mov	eax,.ex2       ; calc .dex
1147
	mov	eax,.ex2       ; calc .dex
1055
	sub	eax,.ex1
1148
	sub	eax,.ex1
1056
	cdq
1149
	cdq
1057
	idiv	ebx
1150
	idiv	ebx
1058
	push	eax
1151
	push	eax
1059
 
1152
 
1060
	mov	eax,.ey2       ; calc .dey
1153
	mov	eax,.ey2       ; calc .dey
1061
	sub	eax,.ey1
1154
	sub	eax,.ey1
1062
	cdq
1155
	cdq
1063
	idiv	ebx
1156
	idiv	ebx
1064
	push	eax
1157
	push	eax
1065
 
1158
 
1066
 
1159
 
1067
	mov	eax,.z2        ; calc .dz
1160
	mov	eax,.z2        ; calc .dz
1068
	sub	eax,.z1
1161
	sub	eax,.z1
1069
	cdq
1162
	cdq
1070
	idiv	ebx
1163
	idiv	ebx
1071
	push	eax
1164
	push	eax
1072
 
1165
 
1073
	mov	eax,.tx2       ; calc .dtx
1166
	mov	eax,.tx2       ; calc .dtx
1074
	sub	eax,.tx1
1167
	sub	eax,.tx1
1075
	cdq
1168
	cdq
1076
	idiv	ebx
1169
	idiv	ebx
1077
	push	eax
1170
	push	eax
1078
 
1171
 
1079
	mov	eax,.ty2       ; calc .dty
1172
	mov	eax,.ty2       ; calc .dty
1080
	sub	eax,.ty1
1173
	sub	eax,.ty1
1081
	cdq
1174
	cdq
1082
	idiv	ebx
1175
	idiv	ebx
1083
	push	eax
1176
	push	eax
1084
 
1177
 
1085
end if
1178
end if
1086
	cmp	.x1,0	      ; set correctly begin variable
1179
	cmp	.x1,0	      ; set correctly begin variable
1087
	jge	@f	      ; CLIPPING ON FUNCTION
1180
	jge	@f	      ; CLIPPING ON FUNCTION
1088
			      ; cutting triangle exceedes screen
1181
			      ; cutting triangle exceedes screen
1089
	mov	ebx,.x1
1182
	mov	ebx,.x1
1090
	neg	ebx
1183
	neg	ebx
1091
	imul	ebx	      ; eax = .dz * abs(.x1)
1184
	imul	ebx	      ; eax = .dz * abs(.x1)
1092
	add	.z1,eax
1185
	add	.z1,eax
1093
	mov	.x1,0
1186
	mov	.x1,0
1094
 
1187
 
1095
	mov	eax,.dbx
1188
	mov	eax,.dbx
1096
	imul	ebx
1189
	imul	ebx
1097
	add    .bx1,eax
1190
	add    .bx1,eax
1098
 
1191
 
1099
	mov	eax,.dby
1192
	mov	eax,.dby
1100
	imul	ebx
1193
	imul	ebx
1101
	add	.by1,eax
1194
	add	.by1,eax
1102
 
1195
 
1103
	mov	eax,.dex
1196
	mov	eax,.dex
1104
	imul	ebx
1197
	imul	ebx
1105
	add	.ex1,eax
1198
	add	.ex1,eax
1106
 
1199
 
1107
	mov	eax,.dey
1200
	mov	eax,.dey
1108
	imul	ebx
1201
	imul	ebx
1109
	add	.ey1,eax
1202
	add	.ey1,eax
1110
 
1203
 
1111
	mov	eax,.dtx
1204
	mov	eax,.dtx
1112
	imul	ebx
1205
	imul	ebx
1113
	add	.tx1,eax
1206
	add	.tx1,eax
1114
 
1207
 
1115
	mov	eax,.dty
1208
	mov	eax,.dty
1116
	imul	ebx
1209
	imul	ebx
1117
	add	.ty1,eax
1210
	add	.ty1,eax
1118
 
1211
 
1119
      @@:
1212
      @@:
1120
	cmp	.x2,SIZE_X
1213
	cmp	.x2,SIZE_X
1121
	jl	@f
1214
	jl	@f
1122
	mov	.x2,SIZE_X
1215
	mov	.x2,SIZE_X
1123
      @@:
1216
      @@:
1124
	mov	eax,SIZE_X	 ;calc memory begin in buffers
1217
	mov	eax,SIZE_X	 ;calc memory begin in buffers
1125
	mul	.y
1218
	mul	.y
1126
	add	eax,.x1
1219
	add	eax,.x1
1127
	lea	esi,[4*eax]
1220
	lea	esi,[4*eax]
1128
	add	esi,.z_buff	  ; z-buffer filled with dd variables
1221
	add	esi,.z_buff	  ; z-buffer filled with dd variables
1129
	lea	eax,[eax*3]
1222
	lea	eax,[eax*3]
1130
	add	edi,eax
1223
	add	edi,eax
1131
 
1224
 
1132
 
1225
 
1133
	mov	ecx,.x2
1226
	mov	ecx,.x2
1134
	sub	ecx,.x1
1227
	sub	ecx,.x1
1135
	; init current variables
1228
	; init current variables
1136
	push	.bx1   ; current b, e and t shifted shl ROUND   .cbx
1229
	push	.bx1   ; current b, e and t shifted shl ROUND   .cbx
1137
	push	.by1					     ;  .cby
1230
	push	.by1					     ;  .cby
1138
	push	.ex1					     ;  .cex
1231
	push	.ex1					     ;  .cex
1139
	push	.ey1					     ;  .cey
1232
	push	.ey1					     ;  .cey
1140
 
1233
 
1141
	push	.z1    ; current z shl CATMULL_SHIFT         ; .cz
1234
	push	.z1    ; current z shl CATMULL_SHIFT         ; .cz
1142
	push	esi					     ; .czbuff
1235
	push	esi					     ; .czbuff
1143
 
1236
 
1144
	push	.tx1	  ;         .ctx
1237
	push	.tx1	  ;         .ctx
1145
	push	.ty1	  ;         .cty
1238
	push	.ty1	  ;         .cty
1146
	push	edi	  ;         .c_scr
1239
	push	edi	  ;         .c_scr
1147
if Ext>=MMX
1240
if Ext>=MMX
1148
	movq	mm7,.ctyq
1241
	movq	mm7,.ctyq
1149
	movq	mm6,.cbyq
1242
	movq	mm6,.cbyq
1150
	movq	mm5,.ceyq
1243
	movq	mm5,.ceyq
1151
;        movq    mm4,.dtyq
1244
;        movq    mm4,.dtyq
1152
;        movq    mm3,.dbyq
1245
;        movq    mm3,.dbyq
1153
end if
1246
end if
1154
 
1247
 
1155
     .draw:
1248
     .draw:
1156
    ; if TEX = SHIFTING   ;bump drawing only in shifting mode
1249
    ; if TEX = SHIFTING   ;bump drawing only in shifting mode
1157
	mov	esi,.czbuff	 ; .czbuff current address in buffer
1250
	mov	esi,.czbuff	 ; .czbuff current address in buffer
1158
	mov	ebx,.cz 	 ; .cz - cur z position
1251
	mov	ebx,.cz 	 ; .cz - cur z position
1159
	cmp	ebx,dword[esi]
1252
	cmp	ebx,dword[esi]
1160
	jge	.skip
1253
	jge	.skip
1161
if Ext=NON
1254
if Ext=NON
1162
	mov	eax,.cby
1255
	mov	eax,.cby
1163
	shr	eax,ROUND
1256
	shr	eax,ROUND
1164
	mov	esi,.cbx
1257
	mov	esi,.cbx
1165
	shr	esi,ROUND
1258
	shr	esi,ROUND
1166
else
1259
else
1167
	movq	mm1,mm6
1260
	movq	mm1,mm6
1168
	psrld	mm1,ROUND
1261
	psrld	mm1,ROUND
1169
	movd	eax,mm1
1262
	movd	eax,mm1
1170
	psrlq	mm1,32
1263
	psrlq	mm1,32
1171
	movd	esi,mm1
1264
	movd	esi,mm1
1172
end if
1265
end if
1173
 
1266
 
1174
 
1267
 
1175
 
1268
 
1176
	shl	eax,TEX_SHIFT
1269
	shl	eax,TEX_SHIFT
1177
	add	esi,eax 	;-  ; esi - current bump map index
1270
	add	esi,eax 	;-  ; esi - current bump map index
1178
 
1271
 
1179
	mov	ebx,esi
1272
	mov	ebx,esi
1180
	dec	ebx
1273
	dec	ebx
1181
	and	ebx,TEXTURE_SIZE
1274
	and	ebx,TEXTURE_SIZE
1182
	add	ebx,.bmap
1275
	add	ebx,.bmap
1183
	movzx	eax,byte [ebx]
1276
	movzx	eax,byte [ebx]
1184
 
1277
 
1185
	mov	ebx,esi
1278
	mov	ebx,esi
1186
	inc	ebx
1279
	inc	ebx
1187
	and	ebx,TEXTURE_SIZE
1280
	and	ebx,TEXTURE_SIZE
1188
	add	ebx,.bmap
1281
	add	ebx,.bmap
1189
	movzx	ebx,byte [ebx]
1282
	movzx	ebx,byte [ebx]
1190
	sub	eax,ebx
1283
	sub	eax,ebx
1191
 
1284
 
1192
	mov	ebx,esi
1285
	mov	ebx,esi
1193
	sub	ebx,TEX_X
1286
	sub	ebx,TEX_X
1194
	and	ebx,TEXTURE_SIZE
1287
	and	ebx,TEXTURE_SIZE
1195
	add	ebx,.bmap
1288
	add	ebx,.bmap
1196
	movzx	edx,byte [ebx]
1289
	movzx	edx,byte [ebx]
1197
 
1290
 
1198
	mov	ebx,esi
1291
	mov	ebx,esi
1199
	add	ebx,TEX_X
1292
	add	ebx,TEX_X
1200
	and	ebx,TEXTURE_SIZE
1293
	and	ebx,TEXTURE_SIZE
1201
	add	ebx,.bmap
1294
	add	ebx,.bmap
1202
	movzx	ebx,byte [ebx]
1295
	movzx	ebx,byte [ebx]
1203
	sub	edx,ebx
1296
	sub	edx,ebx
1204
 
1297
 
1205
     ;  eax - horizontal sub    modificated x coord
1298
     ;  eax - horizontal sub    modificated x coord
1206
     ;  edx - vertical   sub    modificated y coord
1299
     ;  edx - vertical   sub    modificated y coord
1207
if Ext=NON
1300
if Ext=NON
1208
	mov	ebx,.cex       ;.cex - current env map X
1301
	mov	ebx,.cex       ;.cex - current env map X
1209
	shr	ebx,ROUND
1302
	shr	ebx,ROUND
1210
	add	eax,ebx
1303
	add	eax,ebx
1211
 
1304
 
1212
 
1305
 
1213
	mov	ebx,.cey       ;.cey - current  env map y
1306
	mov	ebx,.cey       ;.cey - current  env map y
1214
	shr	ebx,ROUND
1307
	shr	ebx,ROUND
1215
	add	edx,ebx
1308
	add	edx,ebx
1216
 
1309
 
1217
else
1310
else
1218
	movq	mm1,mm5        ; mm5 - copy of cur env coords
1311
	movq	mm1,mm5        ; mm5 - copy of cur env coords
1219
	psrld	mm1,ROUND
1312
	psrld	mm1,ROUND
1220
	movd	ebx,mm1
1313
	movd	ebx,mm1
1221
	psrlq	mm1,32
1314
	psrlq	mm1,32
1222
	add	eax,ebx
1315
	add	eax,ebx
1223
	movd	ebx,mm1
1316
	movd	ebx,mm1
1224
	add	edx,ebx
1317
	add	edx,ebx
1225
;        movq    qword[.temp1],mm3
1318
;        movq    qword[.temp1],mm3
1226
;        add     eax,dword [.temp1]
1319
;        add     eax,dword [.temp1]
1227
;        add     edx,dword [.temp1+4]
1320
;        add     edx,dword [.temp1+4]
1228
end if
1321
end if
1229
 
1322
 
1230
	or	eax,eax
1323
	or	eax,eax
1231
	jl	.black
1324
	jl	.black
1232
	cmp	eax,TEX_X
1325
	cmp	eax,TEX_X
1233
	jg	.black
1326
	jg	.black
1234
	or	edx,edx
1327
	or	edx,edx
1235
	jl	.black
1328
	jl	.black
1236
	cmp	edx,TEX_Y
1329
	cmp	edx,TEX_Y
1237
	jg	.black
1330
	jg	.black
1238
 
1331
 
1239
	shl	edx,TEX_SHIFT	; zaburzenie w emapie = zaburzenie w teksturze
1332
	shl	edx,TEX_SHIFT	; zaburzenie w emapie = zaburzenie w teksturze
1240
	add	edx,eax 	; proponuje nie stawiac czarnego pixela tylko
1333
	add	edx,eax 	; proponuje nie stawiac czarnego pixela tylko
1241
	lea	esi,[edx*3]	; niezaburzony.
1334
	lea	esi,[edx*3]	; niezaburzony.
1242
	add	esi,.emap	;
1335
	add	esi,.emap	;
1243
	lodsd
1336
	lodsd
1244
 
1337
 
1245
if Ext=NON
1338
if Ext=NON
1246
	mov	edx,.cty
1339
	mov	edx,.cty
1247
	shr	edx,ROUND  ; sar
1340
	shr	edx,ROUND  ; sar
1248
 
1341
 
1249
	mov	edi,.ctx
1342
	mov	edi,.ctx
1250
	shr	edi,ROUND  ; sar
1343
	shr	edi,ROUND  ; sar
1251
else
1344
else
1252
	movq	mm1,mm7
1345
	movq	mm1,mm7
1253
	psrld	mm1,ROUND
1346
	psrld	mm1,ROUND
1254
	movd	edx,mm1
1347
	movd	edx,mm1
1255
	psrlq	mm1,32
1348
	psrlq	mm1,32
1256
	movd	edi,mm1
1349
	movd	edi,mm1
1257
 
1350
 
1258
end if
1351
end if
1259
 
1352
 
1260
	shl	edx,TEX_SHIFT
1353
	shl	edx,TEX_SHIFT
1261
	add	edi,edx
1354
	add	edi,edx
1262
	and	edi,TEXTURE_SIZE
1355
	and	edi,TEXTURE_SIZE
1263
	lea	esi,[edi*3]
1356
	lea	esi,[edi*3]
1264
	add	esi,.tex_map
1357
	add	esi,.tex_map
1265
 
1358
 
1266
if Ext=NON
1359
if Ext=NON
1267
	mov	edx,eax
1360
	mov	edx,eax
1268
	lodsd
1361
	lodsd
1269
	push	ax
1362
	push	ax
1270
	mul	dl
1363
	mul	dl
1271
	mov	dl,ah
1364
	mov	dl,ah
1272
	pop	ax
1365
	pop	ax
1273
	shr	ax,8
1366
	shr	ax,8
1274
	mul	dh
1367
	mul	dh
1275
	mov	al,dl
1368
	mov	al,dl
1276
	mov	edi,.c_scr
1369
	mov	edi,.c_scr
1277
	stosw
1370
	stosw
1278
	shr	edx,16
1371
	shr	edx,16
1279
	shr	eax,16
1372
	shr	eax,16
1280
	mul	dl
1373
	mul	dl
1281
	shr	ax,8
1374
	shr	ax,8
1282
	stosb
1375
	stosb
1283
else
1376
else
1284
	movd	   mm0,eax
1377
	movd	   mm0,eax
1285
	pxor	   mm1,mm1
1378
	pxor	   mm1,mm1
1286
	punpcklbw  mm0,mm1
1379
	punpcklbw  mm0,mm1
1287
	movd	   mm2,[esi]
1380
	movd	   mm2,[esi]
1288
	punpcklbw  mm2,mm1
1381
	punpcklbw  mm2,mm1
1289
	pmullw	   mm0,mm2
1382
	pmullw	   mm0,mm2
1290
	psrlw	   mm0,8
1383
	psrlw	   mm0,8
1291
	packuswb   mm0,mm1
1384
	packuswb   mm0,mm1
1292
	mov	   edi,.c_scr
1385
	mov	   edi,.c_scr
1293
	movd	   [edi],mm0
1386
	movd	   [edi],mm0
1294
 
1387
 
1295
end if
1388
end if
1296
 
1389
 
1297
	jmp	.actual_zbuff	; actualize z buffer
1390
	jmp	.actual_zbuff	; actualize z buffer
1298
     @@:
1391
     @@:
1299
     .black:
1392
     .black:
1300
	xor	eax,eax
1393
	xor	eax,eax
1301
	mov	edi,.c_scr
1394
	mov	edi,.c_scr
1302
	stosd
1395
	stosd
1303
     .actual_zbuff:
1396
     .actual_zbuff:
1304
	mov	eax,.cz
1397
	mov	eax,.cz
1305
	mov	edi,.czbuff
1398
	mov	edi,.czbuff
1306
	stosd
1399
	stosd
1307
 
1400
 
1308
      .skip:
1401
      .skip:
1309
	add	.czbuff,4
1402
	add	.czbuff,4
1310
	add	.c_scr,3
1403
	add	.c_scr,3
1311
 
1404
 
1312
if Ext=NON
1405
if Ext=NON
1313
	mov	eax,.dbx
1406
	mov	eax,.dbx
1314
	add	.cbx,eax
1407
	add	.cbx,eax
1315
	mov	ebx,.dby
1408
	mov	ebx,.dby
1316
	add	.cby,ebx
1409
	add	.cby,ebx
1317
 
1410
 
1318
	mov	edx,.dex
1411
	mov	edx,.dex
1319
	add	.cex,edx
1412
	add	.cex,edx
1320
	mov	eax,.dey
1413
	mov	eax,.dey
1321
	add	.cey,eax
1414
	add	.cey,eax
1322
 
1415
 
1323
	mov	ebx,.dtx
1416
	mov	ebx,.dtx
1324
	add	.ctx,ebx
1417
	add	.ctx,ebx
1325
	mov	edx,.dty
1418
	mov	edx,.dty
1326
	add	.cty,edx
1419
	add	.cty,edx
1327
 
1420
 
1328
else
1421
else
1329
	paddd	mm7,.dtyq
1422
	paddd	mm7,.dtyq
1330
	paddd	mm6,.dbyq
1423
	paddd	mm6,.dbyq
1331
	paddd	mm5,.deyq
1424
	paddd	mm5,.deyq
1332
end if
1425
end if
1333
	mov	eax,.dz
1426
	mov	eax,.dz
1334
	add	.cz,eax
1427
	add	.cz,eax
1335
 
1428
 
1336
	dec	ecx
1429
	dec	ecx
1337
	jnz	.draw
1430
	jnz	.draw
1338
 
1431
 
1339
  .bl_end:
1432
  .bl_end:
1340
	mov	esp,ebp
1433
	mov	esp,ebp
1341
ret 76
1434
ret 76
1342
;Ext = MMX
1435
;Ext = MMX
1343
 
1436
 
1344
;     else
1437
;     else
1345
;        movq    mm5, qword[.temp1]  ;-
1438
;        movq    mm5, qword[.temp1]  ;-
1346
;        paddd   mm5, qword[.temp5]  ; .temp5 == low dword = TEX_X, high dword = -TEX_X
1439
;        paddd   mm5, qword[.temp5]  ; .temp5 == low dword = TEX_X, high dword = -TEX_X
1347
;        pand    mm5, qword[.temp3]  ; .temp3 == low = high dword = TEX_SIZE
1440
;        pand    mm5, qword[.temp3]  ; .temp3 == low = high dword = TEX_SIZE
1348
;        paddd   mm5, qword[.temp4]  ; .temp4 == low = high dword = offset .bmap
1441
;        paddd   mm5, qword[.temp4]  ; .temp4 == low = high dword = offset .bmap
1349
;        movd    ebx,mm5
1442
;        movd    ebx,mm5
1350
;        psrlq   mm5,32
1443
;        psrlq   mm5,32
1351
;     end if
1444
;     end if