Rev 2881 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2881 | Rev 6619 | ||
---|---|---|---|
1 | CATMULL_SHIFT equ 16 |
1 | CATMULL_SHIFT equ 16 |
2 | 2 | ||
3 | 3 | ||
4 | flat_triangle_z: |
4 | flat_triangle_z: |
5 | ; procedure drawing triangle with Z cordinate interpolation ------ |
5 | ; procedure drawing triangle with Z cordinate interpolation ------ |
6 | ; (Catmull alghoritm)-------------------------------------------- |
6 | ; (Catmull alghoritm)-------------------------------------------- |
7 | ; ----------------in - eax - x1 shl 16 + y1 ---------------------- |
7 | ; ----------------in - eax - x1 shl 16 + y1 ---------------------- |
8 | ; -------------------- ebx - x2 shl 16 + y2 ---------------------- |
8 | ; -------------------- ebx - x2 shl 16 + y2 ---------------------- |
9 | ; -------------------- ecx - x3 shl 16 + y3 ---------------------- |
9 | ; -------------------- ecx - x3 shl 16 + y3 ---------------------- |
10 | ; -------------------- edx - color 0x00RRGGBB -------------------- |
10 | ; -------------------- edx - color 0x00RRGGBB -------------------- |
11 | ; -------------------- esi - pointer to Z-buffer ----------------- |
11 | ; -------------------- esi - pointer to Z-buffer ----------------- |
12 | ; -------------------- edi - pointer to screen buffer------------- |
12 | ; -------------------- edi - pointer to screen buffer------------- |
13 | ; -------------------- stack : z coordinates |
13 | ; -------------------- stack : z coordinates |
14 | ; -------------------- Z-buffer : each z variable as dword |
14 | ; -------------------- Z-buffer : each z variable as dword |
15 | ; -------------------- (Z coor. as word) shl CATMULL_SHIFT |
15 | ; -------------------- (Z coor. as word) shl CATMULL_SHIFT |
16 | .z1 equ word[ebp+4] |
16 | .z1 equ word[ebp+4] |
17 | .z2 equ word[ebp+6] ; each z coordinate as word integer |
17 | .z2 equ word[ebp+6] ; each z coordinate as word integer |
18 | .z3 equ word[ebp+8] |
18 | .z3 equ word[ebp+8] |
19 | 19 | ||
20 | .col equ dword[ebp-4] |
20 | .col equ dword[ebp-4] |
21 | .x1 equ word[ebp-6] |
21 | .x1 equ word[ebp-6] |
22 | .y1 equ word[ebp-8] |
22 | .y1 equ word[ebp-8] |
23 | .x2 equ word[ebp-10] |
23 | .x2 equ word[ebp-10] |
24 | .y2 equ word[ebp-12] |
24 | .y2 equ word[ebp-12] |
25 | .x3 equ word[ebp-14] |
25 | .x3 equ word[ebp-14] |
26 | .y3 equ word[ebp-16] |
26 | .y3 equ word[ebp-16] |
27 | 27 | ||
28 | .dx12 equ dword[ebp-20] |
28 | .dx12 equ dword[ebp-20] |
29 | ;.dz12 equ dword[ebp-24] |
29 | ;.dz12 equ dword[ebp-24] |
30 | .dx13 equ dword[ebp-24] |
30 | .dx13 equ dword[ebp-24] |
31 | .dz13 equ dword[ebp-28] |
31 | .dz13 equ dword[ebp-28] |
32 | .dz12 equ dword[ebp-32] |
32 | .dz12 equ dword[ebp-32] |
33 | ;.dz13 equ dword[ebp-32] |
33 | ;.dz13 equ dword[ebp-32] |
34 | .dx23 equ dword[ebp-36] |
34 | .dx23 equ dword[ebp-36] |
35 | .dz13M equ [ebp-40] |
35 | .dz13M equ [ebp-40] |
36 | .dz23 equ dword[ebp-44] |
36 | .dz23 equ dword[ebp-44] |
37 | .zz1 equ dword[ebp-48] |
37 | .zz1 equ dword[ebp-48] |
38 | .zz2 equ dword[ebp-52] |
38 | .zz2 equ dword[ebp-52] |
39 | .zz2M equ qword[ebp-52] |
39 | .zz2M equ qword[ebp-52] |
40 | .dz12M equ qword[ebp-32] |
40 | .dz12M equ qword[ebp-32] |
41 | .dz23M equ qword[ebp-44] |
41 | .dz23M equ qword[ebp-44] |
42 | ;if Ext>=MMX |
42 | ;if Ext>=MMX |
43 | ; emms |
43 | ; emms |
44 | ;end if |
44 | ;end if |
45 | mov ebp,esp |
45 | mov ebp,esp |
46 | 46 | ||
47 | push edx ; store edx in variable .col |
47 | push edx ; store edx in variable .col |
48 | .sort2: |
48 | .sort2: |
49 | cmp ax,bx |
49 | cmp ax,bx |
50 | jle .sort1 |
50 | jle .sort1 |
51 | xchg eax,ebx |
51 | xchg eax,ebx |
52 | mov dx,.z1 |
52 | mov dx,.z1 |
53 | xchg dx,.z2 |
53 | xchg dx,.z2 |
54 | mov .z1,dx |
54 | mov .z1,dx |
55 | .sort1: |
55 | .sort1: |
56 | cmp bx,cx |
56 | cmp bx,cx |
57 | jle .sort3 |
57 | jle .sort3 |
58 | xchg ebx,ecx |
58 | xchg ebx,ecx |
59 | mov dx,.z2 |
59 | mov dx,.z2 |
60 | xchg dx,.z3 |
60 | xchg dx,.z3 |
61 | mov .z2,dx |
61 | mov .z2,dx |
62 | jmp .sort2 |
62 | jmp .sort2 |
63 | .sort3: |
63 | .sort3: |
64 | push eax ; store triangle coordinates in user friendly variables |
64 | push eax ; store triangle coordinates in user friendly variables |
65 | push ebx |
65 | push ebx |
66 | push ecx |
66 | push ecx |
67 | mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that |
67 | mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that |
68 | and edx,ebx ; if *all* of them are negative a sign flag is raised |
68 | and edx,ebx ; if *all* of them are negative a sign flag is raised |
69 | and edx,ecx |
69 | and edx,ecx |
70 | and edx,eax |
70 | and edx,eax |
71 | test edx,80008000h ; Check both X&Y at once |
71 | test edx,80008000h ; Check both X&Y at once |
72 | jne .ft_loop2_end |
72 | jne .ft_loop2_end |
73 | ; cmp ax,SIZE_Y |
73 | ; cmp ax,SIZE_Y |
74 | ; jle @f |
74 | ; jle @f |
75 | ; cmp bx,SIZE_Y |
75 | ; cmp bx,SIZE_Y |
76 | ; jle @f |
76 | ; jle @f |
77 | ; cmp cx,SIZE_Y |
77 | ; cmp cx,SIZE_Y |
78 | ; jge @f |
78 | ; jge @f |
79 | ; ror eax,16 |
79 | ; ror eax,16 |
80 | ; ror ebx,16 |
80 | ; ror ebx,16 |
81 | ; ror ecx,16 |
81 | ; ror ecx,16 |
82 | ; cmp ax,SIZE_X |
82 | ; cmp ax,SIZE_X |
83 | ; jle @f |
83 | ; jle @f |
84 | ; cmp bx,SIZE_X |
84 | ; cmp bx,SIZE_X |
85 | ; jle @f |
85 | ; jle @f |
86 | ; cmp cx,SIZE_X |
86 | ; cmp cx,SIZE_X |
87 | ; jle @f |
87 | ; jle @f |
88 | ; jmp .ft_loop2_end |
88 | ; jmp .ft_loop2_end |
89 | ;@@: |
89 | ;@@: |
90 | sub esp,52-12 |
90 | sub esp,52-12 |
91 | 91 | ||
92 | mov bx,.y2 ; calc delta 12 |
92 | mov bx,.y2 ; calc delta 12 |
93 | sub bx,.y1 |
93 | sub bx,.y1 |
94 | jnz .ft_dx12_make |
94 | jnz .ft_dx12_make |
95 | mov .dx12,0 |
95 | mov .dx12,0 |
96 | mov .dz12,0 |
96 | mov .dz12,0 |
97 | jmp .ft_dx12_done |
97 | jmp .ft_dx12_done |
98 | .ft_dx12_make: |
98 | .ft_dx12_make: |
99 | mov ax,.x2 |
99 | mov ax,.x2 |
100 | sub ax,.x1 |
100 | sub ax,.x1 |
101 | cwde |
101 | cwde |
102 | movsx ebx,bx |
102 | movsx ebx,bx |
103 | shl eax,ROUND |
103 | shl eax,ROUND |
104 | cdq |
104 | cdq |
105 | idiv ebx |
105 | idiv ebx |
106 | mov .dx12,eax |
106 | mov .dx12,eax |
107 | 107 | ||
108 | mov ax,.z2 |
108 | mov ax,.z2 |
109 | sub ax,.z1 |
109 | sub ax,.z1 |
110 | cwde |
110 | cwde |
111 | shl eax,CATMULL_SHIFT |
111 | shl eax,CATMULL_SHIFT |
112 | cdq |
112 | cdq |
113 | idiv ebx |
113 | idiv ebx |
114 | mov .dz12,eax |
114 | mov .dz12,eax |
115 | .ft_dx12_done: |
115 | .ft_dx12_done: |
116 | mov bx,.y3 ; calc delta 13 |
116 | mov bx,.y3 ; calc delta 13 |
117 | sub bx,.y1 |
117 | sub bx,.y1 |
118 | jnz .ft_dx13_make |
118 | jnz .ft_dx13_make |
119 | mov .dx13,0 |
119 | mov .dx13,0 |
120 | mov .dz13,0 |
120 | mov .dz13,0 |
121 | mov dword .dz13M,0 |
121 | mov dword .dz13M,0 |
122 | jmp .ft_dx13_done |
122 | jmp .ft_dx13_done |
123 | .ft_dx13_make: |
123 | .ft_dx13_make: |
124 | mov ax,.x3 |
124 | mov ax,.x3 |
125 | sub ax,.x1 |
125 | sub ax,.x1 |
126 | cwde |
126 | cwde |
127 | movsx ebx,bx |
127 | movsx ebx,bx |
128 | shl eax,ROUND |
128 | shl eax,ROUND |
129 | cdq |
129 | cdq |
130 | idiv ebx |
130 | idiv ebx |
131 | mov .dx13,eax |
131 | mov .dx13,eax |
132 | 132 | ||
133 | mov ax,.z3 |
133 | mov ax,.z3 |
134 | sub ax,.z1 |
134 | sub ax,.z1 |
135 | cwde |
135 | cwde |
136 | shl eax,CATMULL_SHIFT |
136 | shl eax,CATMULL_SHIFT |
137 | cdq |
137 | cdq |
138 | idiv ebx |
138 | idiv ebx |
139 | mov .dz13,eax |
139 | mov .dz13,eax |
140 | mov dword .dz13M,eax |
140 | mov dword .dz13M,eax |
141 | .ft_dx13_done: |
141 | .ft_dx13_done: |
142 | mov bx,.y3 ; calc delta 23 |
142 | mov bx,.y3 ; calc delta 23 |
143 | sub bx,.y2 |
143 | sub bx,.y2 |
144 | jnz .gt_dx23_make |
144 | jnz .gt_dx23_make |
145 | mov .dx23,0 |
145 | mov .dx23,0 |
146 | mov .dz23,0 |
146 | mov .dz23,0 |
147 | jmp .gt_dx23_done |
147 | jmp .gt_dx23_done |
148 | .gt_dx23_make: |
148 | .gt_dx23_make: |
149 | mov ax,.x3 |
149 | mov ax,.x3 |
150 | sub ax,.x2 |
150 | sub ax,.x2 |
151 | cwde |
151 | cwde |
152 | movsx ebx,bx |
152 | movsx ebx,bx |
153 | shl eax,ROUND |
153 | shl eax,ROUND |
154 | cdq |
154 | cdq |
155 | idiv ebx |
155 | idiv ebx |
156 | mov .dx23,eax |
156 | mov .dx23,eax |
157 | 157 | ||
158 | mov ax,.z3 |
158 | mov ax,.z3 |
159 | sub ax,.z2 |
159 | sub ax,.z2 |
160 | cwde |
160 | cwde |
161 | shl eax,CATMULL_SHIFT |
161 | shl eax,CATMULL_SHIFT |
162 | cdq |
162 | cdq |
163 | idiv ebx |
163 | idiv ebx |
164 | mov .dz23,eax |
164 | mov .dz23,eax |
165 | .gt_dx23_done: |
165 | .gt_dx23_done: |
166 | 166 | ||
167 | movsx edx,.z1 |
167 | movsx edx,.z1 |
168 | shl edx,CATMULL_SHIFT |
168 | shl edx,CATMULL_SHIFT |
169 | mov .zz1,edx |
169 | mov .zz1,edx |
170 | mov .zz2,edx |
170 | mov .zz2,edx |
171 | movsx eax,.x1 |
171 | movsx eax,.x1 |
172 | shl eax,ROUND ; eax - x1 |
172 | shl eax,ROUND ; eax - x1 |
173 | mov ebx,eax ; ebx - x2 |
173 | mov ebx,eax ; ebx - x2 |
174 | ;if Ext>=MMX |
174 | ;if Ext>=MMX |
175 | ; movq mm0,.zz2M |
175 | ; movq mm0,.zz2M |
176 | ;end if |
176 | ;end if |
177 | mov cx,.y1 |
177 | mov cx,.y1 |
178 | cmp cx,.y2 |
178 | cmp cx,.y2 |
179 | jge .ft_loop1_end |
179 | jge .ft_loop1_end |
180 | .ft_loop1: |
180 | .ft_loop1: |
181 | 181 | ||
182 | pushad |
182 | pushad |
183 | 183 | ||
184 | push .col |
184 | push .col |
185 | push cx ; y |
185 | push cx ; y |
186 | sar ebx,ROUND |
186 | sar ebx,ROUND |
187 | push bx ; x2 |
187 | push bx ; x2 |
188 | sar eax,ROUND |
188 | sar eax,ROUND |
189 | push ax ; x1 |
189 | push ax ; x1 |
190 | ;if Ext>=MMX |
190 | ;if Ext>=MMX |
191 | ; sub esp,8 |
191 | ; sub esp,8 |
192 | ; movq [esp],mm0 |
192 | ; movq [esp],mm0 |
193 | ;else |
193 | ;else |
194 | push .zz2 ; z2 shl CATMULL_SHIFT |
194 | push .zz2 ; z2 shl CATMULL_SHIFT |
195 | push .zz1 ; z1 shl CATMULL_SHIFT |
195 | push .zz1 ; z1 shl CATMULL_SHIFT |
196 | ;end if |
196 | ;end if |
197 | call flat_line_z |
197 | call flat_line_z |
198 | 198 | ||
199 | popad |
199 | popad |
200 | 200 | ||
201 | add eax,.dx13 |
201 | add eax,.dx13 |
202 | add ebx,.dx12 |
202 | add ebx,.dx12 |
203 | ;if Ext>=MMX |
203 | ;if Ext>=MMX |
204 | ; paddd mm0,.dz12M |
204 | ; paddd mm0,.dz12M |
205 | ;else |
205 | ;else |
206 | 206 | ||
207 | mov edx,.dz13 |
207 | mov edx,.dz13 |
208 | add .zz1,edx |
208 | add .zz1,edx |
209 | mov edx,.dz12 |
209 | mov edx,.dz12 |
210 | add .zz2,edx |
210 | add .zz2,edx |
211 | ;end if |
211 | ;end if |
212 | inc cx |
212 | inc cx |
213 | cmp cx,.y2 |
213 | cmp cx,.y2 |
214 | jl .ft_loop1 |
214 | jl .ft_loop1 |
215 | .ft_loop1_end: |
215 | .ft_loop1_end: |
216 | 216 | ||
217 | movsx edx,.z2 |
217 | movsx edx,.z2 |
218 | shl edx,CATMULL_SHIFT |
218 | shl edx,CATMULL_SHIFT |
219 | mov .zz2,edx |
219 | mov .zz2,edx |
220 | movsx ebx,.x2 |
220 | movsx ebx,.x2 |
221 | shl ebx,ROUND |
221 | shl ebx,ROUND |
222 | ;if Ext>=MMX |
222 | ;if Ext>=MMX |
223 | ; movq mm0,.zz2M |
223 | ; movq mm0,.zz2M |
224 | ;; push .dz13 ; exchange |
224 | ;; push .dz13 ; exchange |
225 | ;; pop .dz12 |
225 | ;; pop .dz12 |
226 | ;; push .dz23 ; exchange |
226 | ;; push .dz23 ; exchange |
227 | ;; pop .dz13 |
227 | ;; pop .dz13 |
228 | ;end if |
228 | ;end if |
229 | mov cx,.y2 |
229 | mov cx,.y2 |
230 | cmp cx,.y3 |
230 | cmp cx,.y3 |
231 | jge .ft_loop2_end |
231 | jge .ft_loop2_end |
232 | .ft_loop2: |
232 | .ft_loop2: |
233 | pushad |
233 | pushad |
234 | 234 | ||
235 | push .col |
235 | push .col |
236 | push cx |
236 | push cx |
237 | sar ebx,ROUND |
237 | sar ebx,ROUND |
238 | push bx |
238 | push bx |
239 | sar eax,ROUND |
239 | sar eax,ROUND |
240 | push ax ; x1 |
240 | push ax ; x1 |
241 | ;if Ext>=MMX |
241 | ;if Ext>=MMX |
242 | ; sub esp,8 |
242 | ; sub esp,8 |
243 | ; movq [esp],mm0 |
243 | ; movq [esp],mm0 |
244 | ;else |
244 | ;else |
245 | push .zz2 ; z2 shl CATMULL_SHIFT |
245 | push .zz2 ; z2 shl CATMULL_SHIFT |
246 | push .zz1 ; z1 shl CATMULL_SHIFT |
246 | push .zz1 ; z1 shl CATMULL_SHIFT |
247 | ;end if |
247 | ;end if |
248 | call flat_line_z |
248 | call flat_line_z |
249 | 249 | ||
250 | popad |
250 | popad |
251 | 251 | ||
252 | add eax,.dx13 |
252 | add eax,.dx13 |
253 | add ebx,.dx23 |
253 | add ebx,.dx23 |
254 | ;if Ext>=MMX |
254 | ;if Ext>=MMX |
255 | ; paddd mm0,.dz23M |
255 | ; paddd mm0,.dz23M |
256 | ;else |
256 | ;else |
257 | mov edx,.dz13 |
257 | mov edx,.dz13 |
258 | add .zz1,edx |
258 | add .zz1,edx |
259 | mov edx,.dz23 |
259 | mov edx,.dz23 |
260 | add .zz2,edx |
260 | add .zz2,edx |
261 | 261 | ||
262 | ; mov edx,.dz13 |
262 | ; mov edx,.dz13 |
263 | ; add .zz1,edx |
263 | ; add .zz1,edx |
264 | ; mov edx,.dz12 |
264 | ; mov edx,.dz12 |
265 | ; add .zz2,edx |
265 | ; add .zz2,edx |
266 | ;end if |
266 | ;end if |
267 | inc cx |
267 | inc cx |
268 | cmp cx,.y3 |
268 | cmp cx,.y3 |
269 | jl .ft_loop2 |
269 | jl .ft_loop2 |
270 | .ft_loop2_end: |
270 | .ft_loop2_end: |
271 | 271 | ||
272 | mov esp,ebp |
272 | mov esp,ebp |
273 | ret 6 |
273 | ret 6 |
274 | 274 | ||
275 | flat_line_z: |
275 | flat_line_z: |
276 | ;---------------- |
276 | ;---------------- |
277 | ;-------------in edi - pointer to screen buffer ---------------------------------- |
277 | ;-------------in edi - pointer to screen buffer ---------------------------------- |
278 | ;--------------- esi - pointer to z-buffer (each Z varible dword)----------------- |
278 | ;--------------- esi - pointer to z-buffer (each Z varible dword)----------------- |
279 | ;----------stack - (each z coordinate shifted shl CATMULL_SHIFT)------------------ |
279 | ;----------stack - (each z coordinate shifted shl CATMULL_SHIFT)------------------ |
280 | .z1 equ dword [ebp+4] |
280 | .z1 equ dword [ebp+4] |
281 | .z2 equ dword [ebp+8] |
281 | .z2 equ dword [ebp+8] |
282 | .x1 equ word [ebp+12] |
282 | .x1 equ word [ebp+12] |
283 | .x2 equ word [ebp+14] |
283 | .x2 equ word [ebp+14] |
284 | .y equ word [ebp+16] |
284 | .y equ word [ebp+16] |
285 | .col equ dword [ebp+18] |
285 | .col equ dword [ebp+18] |
286 | 286 | ||
287 | .dz equ dword [ebp-4] |
287 | .dz equ dword [ebp-4] |
288 | 288 | ||
289 | mov ebp,esp |
289 | mov ebp,esp |
290 | ;; sub esp,4 |
290 | ;; sub esp,4 |
291 | mov ax,.y |
291 | mov ax,.y |
292 | or ax,ax |
292 | or ax,ax |
293 | jl .fl_quit |
293 | jl .fl_quit |
294 | ;; mov bx,[size_y] |
294 | mov bx,[size_y_var] |
295 | ;; dec bx |
295 | dec bx |
296 | cmp ax,[size_y] |
296 | cmp ax,bx ;[size_y_var] |
297 | cmp ax,SIZE_Y-1 |
297 | ; cmp ax,SIZE_Y-1 |
298 | jg .fl_quit |
298 | jg .fl_quit |
299 | 299 | ||
300 | ; cmp .x1,0 |
300 | ; cmp .x1,0 |
301 | ; jge .fl_ok1 |
301 | ; jge .fl_ok1 |
302 | ; cmp .x2,0 |
302 | ; cmp .x2,0 |
303 | ; jl .fl_quit |
303 | ; jl .fl_quit |
304 | ; .fl_ok1: |
304 | ; .fl_ok1: |
305 | ; cmp .x1,SIZE_X |
305 | ; cmp .x1,SIZE_X |
306 | ; jle .fl_ok2 |
306 | ; jle .fl_ok2 |
307 | ; cmp .x2,SIZE_X |
307 | ; cmp .x2,SIZE_X |
308 | ; jg .fl_quit |
308 | ; jg .fl_quit |
309 | ; .fl_ok2: |
309 | ; .fl_ok2: |
310 | mov ax,.x1 |
310 | mov ax,.x1 |
311 | cmp ax,.x2 |
311 | cmp ax,.x2 |
312 | je .fl_quit |
312 | je .fl_quit |
313 | jl .fl_ok |
313 | jl .fl_ok |
314 | 314 | ||
315 | xchg ax,.x2 |
315 | xchg ax,.x2 |
316 | mov .x1,ax |
316 | mov .x1,ax |
317 | mov edx,.z1 |
317 | mov edx,.z1 |
318 | xchg edx,.z2 |
318 | xchg edx,.z2 |
319 | mov .z1,edx |
319 | mov .z1,edx |
320 | .fl_ok: |
320 | .fl_ok: |
321 | ;; mov bx,[size_x] |
321 | mov bx,[size_x_var] |
322 | ;; dec bx |
322 | dec bx |
323 | cmp .x1,SIZE_X-1 |
323 | cmp .x1,bx ;SIZE_X-1 |
324 | jg .fl_quit |
324 | jg .fl_quit |
325 | cmp .x2,0 |
325 | cmp .x2,0 |
326 | jle .fl_quit |
326 | jle .fl_quit |
327 | 327 | ||
328 | mov eax,.z2 |
328 | mov eax,.z2 |
329 | sub eax,.z1 |
329 | sub eax,.z1 |
330 | cdq |
330 | cdq |
331 | mov bx,.x2 |
331 | mov bx,.x2 |
332 | sub bx,.x1 |
332 | sub bx,.x1 |
333 | movsx ebx,bx |
333 | movsx ebx,bx |
334 | idiv ebx |
334 | idiv ebx |
335 | ;; mov .dz,eax ; calculated delta - shifted .dz |
335 | ;; mov .dz,eax ; calculated delta - shifted .dz |
336 | push eax |
336 | push eax |
337 | 337 | ||
338 | cmp .x1,0 |
338 | cmp .x1,0 |
339 | jge @f |
339 | jge @f |
340 | movsx ebx,.x1 |
340 | movsx ebx,.x1 |
341 | neg ebx |
341 | neg ebx |
342 | imul ebx |
342 | imul ebx |
343 | add .z1,eax |
343 | add .z1,eax |
344 | mov .x1,0 |
344 | mov .x1,0 |
345 | @@: |
345 | @@: |
- | 346 | movzx edx,word[size_x_var] |
|
346 | cmp .x2,SIZE_X |
347 | cmp .x2,dx ;[size_x_var] ;SIZE_X |
347 | jl @f |
348 | jl @f |
348 | mov .x2,SIZE_X |
349 | mov .x2,dx ;[size_x_var] ;SIZE_X |
349 | @@: |
350 | @@: |
350 | mov edx,SIZE_X |
351 | ; movzx edx,[size_x_var] ;SIZE_X |
351 | movsx eax,.y |
352 | movsx eax,.y |
352 | mul edx ; edi = edi + (SIZE_X * y + x1)*3 |
353 | mul edx ; edi = edi + (SIZE_X * y + x1)*3 |
353 | movsx edx,.x1 |
354 | movsx edx,.x1 |
354 | add eax,edx |
355 | add eax,edx |
355 | push eax |
356 | push eax |
356 | lea eax,[eax*3] |
357 | lea eax,[eax*3] |
357 | add edi,eax ; esi = esi + (SIZE_X * y + x1)*4 |
358 | add edi,eax ; esi = esi + (SIZE_X * y + x1)*4 |
358 | pop eax |
359 | pop eax |
359 | shl eax,2 |
360 | shl eax,2 |
360 | add esi,eax |
361 | add esi,eax |
361 | 362 | ||
362 | mov cx,.x2 |
363 | mov cx,.x2 |
363 | sub cx,.x1 |
364 | sub cx,.x1 |
364 | movzx ecx,cx |
365 | movzx ecx,cx |
365 | 366 | ||
366 | mov eax,.col |
367 | mov eax,.col |
367 | mov ebx,.z1 ; ebx : curr. z |
368 | mov ebx,.z1 ; ebx : curr. z |
368 | mov edx,.dz |
369 | mov edx,.dz |
369 | dec ecx |
370 | dec ecx |
370 | jecxz .draw_last |
371 | jecxz .draw_last |
371 | .ddraw: |
372 | .ddraw: |
372 | cmp ebx,dword[esi] |
373 | cmp ebx,dword[esi] |
373 | ; cmovl [edi],eax |
374 | ; cmovl [edi],eax |
374 | ; cmovl [esi],ebx |
375 | ; cmovl [esi],ebx |
375 | jge @f |
376 | jge @f |
376 | stosd |
377 | stosd |
377 | dec edi |
378 | dec edi |
378 | mov dword[esi],ebx |
379 | mov dword[esi],ebx |
379 | jmp .no_skip |
380 | jmp .no_skip |
380 | @@: |
381 | @@: |
381 | add edi,3 |
382 | add edi,3 |
382 | .no_skip: |
383 | .no_skip: |
383 | add esi,4 |
384 | add esi,4 |
384 | add ebx,edx |
385 | add ebx,edx |
385 | loop .ddraw |
386 | loop .ddraw |
386 | 387 | ||
387 | .draw_last: |
388 | .draw_last: |
388 | cmp ebx,dword[esi] |
389 | cmp ebx,dword[esi] |
389 | jge .fl_quit |
390 | jge .fl_quit |
390 | stosw |
391 | stosw |
391 | shr eax,16 |
392 | shr eax,16 |
392 | stosb |
393 | stosb |
393 | mov dword[esi],ebx |
394 | mov dword[esi],ebx |
394 | 395 | ||
395 | .fl_quit: |
396 | .fl_quit: |
396 | 397 | ||
397 | mov esp,ebp |
398 | mov esp,ebp |
398 | ret 18 |
399 | ret 18 |