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 |