]> 4ch.mooo.com Git - 16.git/blob - 16/xw_/mxpg.asm
wwww
[16.git] / 16 / xw_ / mxpg.asm
1                 PUBLIC  MXGOURAUDPOLY
2                 EXTRN   MX_BYTESPERLINE:BYTE
3                 EXTRN   MX_CLIPX1:BYTE
4                 EXTRN   MX_CLIPX2:BYTE
5                 EXTRN   MX_CLIPY1:BYTE
6                 EXTRN   MX_CLIPY2:BYTE
7                 EXTRN   MX_CODESEGMENT:BYTE
8                 EXTRN   MX_SCANBUFFER:BYTE
9                 EXTRN   MX_VIDEOSEGMENT:BYTE
10 MX_TEXT         SEGMENT PARA PUBLIC USE16 'CODE'
11                 ASSUME CS:MX_TEXT, DS:DGROUP, SS:DGROUP
12 L$1:
13         mov             cx,word ptr [si]
14         sub             cx,word ptr [bx]
15         jg              L$2
16         ret
17 L$2:
18         push            bp
19         push            di
20         push            cx
21         push            ax
22         push            dx
23         mov             ax,word ptr 2[si]
24         mov             bx,word ptr 2[bx]
25         sub             ax,bx
26         jg              L$4
27         jl              L$6
28         mov             ax,bx
29 L$3:
30         mov             word ptr es:[di],ax
31         add             di,8
32         dec             cx
33         jne             L$3
34         jmp             L$8
35 L$4:
36         cwd
37         div             cx
38         mov             bp,ax
39         xor             ax,ax
40         div             cx
41         xchg            ax,bx
42         mov             dx,8000H
43 L$5:
44         mov             word ptr es:[di],ax
45         add             di,8
46         add             dx,bx
47         adc             ax,bp
48         dec             cx
49         jne             L$5
50         jmp             L$8
51 L$6:
52         neg             ax
53         cwd
54         div             cx
55         mov             bp,ax
56         xor             ax,ax
57         div             cx
58         xchg            ax,bx
59         mov             dx,8000H
60 L$7:
61         mov             word ptr es:[di],ax
62         add             di,8
63         sub             dx,bx
64         sbb             ax,bp
65         dec             cx
66         jne             L$7
67 L$8:
68         pop             bx
69         pop             ax
70         pop             cx
71         pop             di
72         sub             ax,bx
73         jg              L$10
74         jl              L$12
75         mov             ah,bl
76         mov             al,80H
77 L$9:
78         mov             word ptr es:2[di],ax
79         add             di,8
80         dec             cx
81         jne             L$9
82         jmp             L$14
83 L$10:
84         cwd
85         div             cx
86         mov             bp,ax
87         xor             ax,ax
88         div             cx
89         xchg            ax,bx
90         mov             dx,8000H
91 L$11:
92         mov             byte ptr es:3[di],al
93         mov             byte ptr es:2[di],dh
94         add             di,8
95         add             dx,bx
96         adc             ax,bp
97         dec             cx
98         jne             L$11
99         jmp             L$14
100 L$12:
101         neg             ax
102         cwd
103         div             cx
104         mov             bp,ax
105         xor             ax,ax
106         div             cx
107         xchg            ax,bx
108         mov             dx,8000H
109 L$13:
110         mov             byte ptr es:3[di],al
111         mov             byte ptr es:2[di],dh
112         add             di,8
113         sub             dx,bx
114         sbb             ax,bp
115         dec             cx
116         jne             L$13
117 L$14:
118         pop             bp
119         ret
120 L$15:
121         mov             ax,word ptr 6[si]
122         mov             bx,word ptr 2[si]
123         cmp             ah,bh
124         jg              L$17
125         jl              L$19
126         add             ax,dx
127         mov             dx,word ptr cs:MX_BYTESPERLINE
128 L$16:
129         mov             byte ptr es:[di],ah
130         add             di,dx
131         dec             cx
132         jne             L$16
133         ret
134 L$17:
135         push            bp
136         push            si
137         mov             si,bx
138         add             si,dx
139         sub             ax,bx
140         xor             dx,dx
141         div             cx
142         mov             bp,ax
143         xor             ax,ax
144         div             cx
145         mov             bx,ax
146         mov             dx,8000H
147         mov             ax,word ptr cs:MX_BYTESPERLINE
148         xchg            ax,si
149 L$18:
150         mov             byte ptr es:[di],ah
151         add             dx,bx
152         adc             ax,bp
153         add             di,si
154         dec             cx
155         jne             L$18
156         pop             si
157         pop             bp
158         ret
159 L$19:
160         push            bp
161         push            si
162         mov             si,bx
163         add             si,dx
164         sub             ax,bx
165         neg             ax
166         xor             dx,dx
167         div             cx
168         mov             bp,ax
169         xor             ax,ax
170         div             cx
171         mov             bx,ax
172         mov             dx,8000H
173         mov             ax,word ptr cs:MX_BYTESPERLINE
174         xchg            ax,si
175 L$20:
176         mov             byte ptr es:[di],ah
177         sub             dx,bx
178         sbb             ax,bp
179         add             di,si
180         dec             cx
181         jne             L$20
182         pop             si
183         pop             bp
184         ret
185 MXGOURAUDPOLY:
186         push            bp
187         mov             bp,sp
188         sub             sp,1eH
189         push            ds
190         push            si
191         push            es
192         push            di
193         mov             cx,word ptr 14H[bp]
194         cmp             cx,3
195         jae             L$21
196         jmp             near ptr L$47
197 L$21:
198         les             di,dword ptr 10H[bp]
199         lds             si,dword ptr 0cH[bp]
200         mov             word ptr -16H[bp],7fffH
201         mov             word ptr -1aH[bp],8000H
202         mov             word ptr -18H[bp],7fffH
203         mov             word ptr -1eH[bp],8000H
204         xor             dx,dx
205 L$22:
206         mov             bx,word ptr es:[di]
207         shl             bx,1
208         shl             bx,1
209         add             bx,si
210         mov             ax,word ptr [bx]
211         cmp             ax,word ptr -16H[bp]
212         jge             L$23
213         mov             word ptr -16H[bp],ax
214         mov             word ptr -0eH[bp],dx
215         mov             word ptr -10H[bp],dx
216 L$23:
217         cmp             ax,word ptr -1aH[bp]
218         jle             L$24
219         mov             word ptr -1aH[bp],ax
220         mov             word ptr -12H[bp],dx
221 L$24:
222         mov             ax,word ptr 2[bx]
223         cmp             ax,word ptr -18H[bp]
224         jge             L$25
225         mov             word ptr -18H[bp],ax
226 L$25:
227         cmp             ax,word ptr -1eH[bp]
228         jle             L$26
229         mov             word ptr -1eH[bp],ax
230 L$26:
231         inc             di
232         inc             di
233         inc             dx
234         inc             dx
235         dec             cx
236         jne             L$22
237         mov             ax,word ptr -1aH[bp]
238         cmp             ax,word ptr cs:MX_CLIPX1
239         jge             L$27
240         jmp             near ptr L$47
241 L$27:
242         mov             bx,word ptr -16H[bp]
243         cmp             bx,word ptr cs:MX_CLIPX2
244         jle             L$28
245         jmp             near ptr L$47
246 L$28:
247         sub             ax,bx
248         jg              L$29
249         jmp             near ptr L$47
250 L$29:
251         mov             ax,word ptr -1eH[bp]
252         cmp             ax,word ptr cs:MX_CLIPY1
253         jge             L$30
254         jmp             near ptr L$47
255 L$30:
256         mov             bx,word ptr -18H[bp]
257         cmp             bx,word ptr cs:MX_CLIPY2
258         jle             L$31
259         jmp             near ptr L$47
260 L$31:
261         sub             ax,bx
262         jg              L$32
263         jmp             near ptr L$47
264 L$32:
265         dec             word ptr 14H[bp]
266         shl             word ptr 14H[bp],1
267         mov             es,word ptr cs:MX_CODESEGMENT
268         mov             ax,offset MX_TEXT:MX_SCANBUFFER
269         mov             word ptr -4[bp],ax
270         mov             si,word ptr -0eH[bp]
271 L$33:
272         lds             bx,dword ptr 10H[bp]
273         mov             di,word ptr [bx+si]
274         dec             si
275         dec             si
276         test            si,si
277         jge             L$34
278         mov             si,word ptr 14H[bp]
279 L$34:
280         mov             word ptr -0eH[bp],si
281         mov             si,word ptr [bx+si]
282         lds             bx,dword ptr 8[bp]
283         shl             di,1
284         shl             si,1
285         mov             ax,word ptr [bx+si]
286         mov             dx,word ptr [bx+di]
287         lds             bx,dword ptr 0cH[bp]
288         shl             si,1
289         shl             di,1
290         add             si,bx
291         add             bx,di
292         mov             di,word ptr -4[bp]
293         call            near ptr L$1
294         mov             word ptr -4[bp],di
295         mov             si,word ptr -0eH[bp]
296         cmp             si,word ptr -12H[bp]
297         jne             L$33
298         mov             ax,offset MX_TEXT:MX_SCANBUFFER+4
299         mov             word ptr -6[bp],ax
300         mov             si,word ptr -10H[bp]
301 L$35:
302         lds             bx,dword ptr 10H[bp]
303         mov             di,word ptr [bx+si]
304         inc             si
305         inc             si
306         cmp             si,word ptr 14H[bp]
307         jbe             L$36
308         xor             si,si
309 L$36:
310         mov             word ptr -10H[bp],si
311         mov             si,word ptr [bx+si]
312         lds             bx,dword ptr 8[bp]
313         shl             di,1
314         shl             si,1
315         mov             ax,word ptr [bx+si]
316         mov             dx,word ptr [bx+di]
317         lds             bx,dword ptr 0cH[bp]
318         shl             si,1
319         shl             di,1
320         add             si,bx
321         add             bx,di
322         mov             di,word ptr -6[bp]
323         call            near ptr L$1
324         mov             word ptr -6[bp],di
325         mov             si,word ptr -10H[bp]
326         cmp             si,word ptr -12H[bp]
327         jne             L$35
328         mov             si,offset MX_TEXT:MX_SCANBUFFER
329         mov             ax,word ptr -16H[bp]
330         mov             cx,word ptr -1aH[bp]
331         sub             cx,ax
332         mov             bx,word ptr cs:MX_CLIPX1
333         sub             bx,ax
334         jle             L$37
335         sub             cx,bx
336         add             ax,bx
337         mov             word ptr -16H[bp],ax
338         shl             bx,1
339         shl             bx,1
340         shl             bx,1
341         add             si,bx
342 L$37:
343         mov             bx,ax
344         add             bx,cx
345         sub             bx,word ptr cs:MX_CLIPX2
346         jle             L$38
347         sub             cx,bx
348 L$38:
349         test            cx,cx
350         jg              L$39
351         jmp             near ptr L$47
352 L$39:
353         mov             word ptr -8[bp],cx
354         mov             word ptr -4[bp],si
355         mov             ds,word ptr cs:MX_CODESEGMENT
356         mov             ax,word ptr -18H[bp]
357         cmp             ax,word ptr cs:MX_CLIPY1
358         jl              L$40
359         mov             ax,word ptr -1eH[bp]
360         cmp             ax,word ptr cs:MX_CLIPY2
361         jg              L$40
362         jmp             L$44
363 L$40:
364         mov             di,cx
365         inc             di
366         sub             si,8
367 L$41:
368         dec             di
369         je              L$44
370         add             si,8
371         mov             ax,word ptr [si]
372         mov             cx,word ptr 4[si]
373         mov             dx,word ptr cs:MX_CLIPY2
374         cmp             ax,dx
375         jg              L$43
376         cmp             cx,dx
377         jle             L$42
378         mov             word ptr 4[si],dx
379         mov             bx,cx
380         sub             bx,dx
381         sub             cx,ax
382         jle             L$43
383         mov             ax,word ptr 2[si]
384         sub             ax,word ptr 6[si]
385         imul            bx
386         idiv            cx
387         add             word ptr 6[si],ax
388         mov             ax,word ptr [si]
389         mov             cx,word ptr 4[si]
390 L$42:
391         mov             dx,word ptr cs:MX_CLIPY1
392         cmp             cx,dx
393         jl              L$43
394         sub             cx,ax
395         jle             L$43
396         cmp             ax,dx
397         jge             L$41
398         mov             word ptr [si],dx
399         sub             dx,ax
400         cmp             cx,dx
401         jbe             L$43
402         mov             ax,word ptr 6[si]
403         sub             ax,word ptr 2[si]
404         imul            dx
405         idiv            cx
406         add             word ptr 2[si],ax
407         jmp             L$41
408 L$43:
409         mov             word ptr [si],0ffffH
410         jmp             L$41
411 L$44:
412         mov             es,word ptr cs:MX_VIDEOSEGMENT
413         mov             si,word ptr -4[bp]
414         mov             cl,byte ptr -16H[bp]
415         and             cl,3
416         mov             al,11H
417         shl             al,cl
418         mov             byte ptr -2[bp],al
419         shr             word ptr -16H[bp],1
420         shr             word ptr -16H[bp],1
421         mov             ax,word ptr 6[bp]
422         mov             ah,al
423         xor             al,al
424         mov             word ptr 6[bp],ax
425 L$45:
426         mov             ax,word ptr [si]
427         test            ax,ax
428         js              L$46
429         mov             cx,word ptr 4[si]
430         sub             cx,ax
431         jle             L$46
432         mul             word ptr cs:MX_BYTESPERLINE
433         add             ax,word ptr -16H[bp]
434         mov             di,ax
435         mov             ah,byte ptr -2[bp]
436         mov             al,2
437         mov             dx,3c4H
438         out             dx,ax
439         mov             dx,word ptr 6[bp]
440         call            near ptr L$15
441 L$46:
442         rol             byte ptr -2[bp],1
443         adc             word ptr -16H[bp],0
444         add             si,8
445         dec             word ptr -8[bp]
446         jne             L$45
447 L$47:
448         xor             ax,ax
449         pop             di
450         pop             es
451         pop             si
452         pop             ds
453         mov             sp,bp
454         pop             bp
455         retf            10H
456 MX_TEXT         ENDS
457                 END