]> 4ch.mooo.com Git - plz.git/blob - copper.asm
wwwwwwwwwwww
[plz.git] / copper.asm
1         IDEAL\r
2         MODEL large\r
3         P386\r
4 \r
5 EXTRN C l1:word, C l2:word, C l3:word, C l4:word, C k1:word, C k2:word, C k3:word, C k4:word\r
6 EXTRN C il1:word, C il2:word, C il3:word, C il4:word, C ik1:word, C ik2:word, C ik3:word, C ik4:word\r
7 \r
8 CODESEG\r
9 \r
10 PUBLIC  C frame_count, C init_copper, C close_copper, C cop_drop, C cop_pal, C do_pal\r
11 PUBLIC  C cop_scrl, C cop_start, C cop_plz\r
12 \r
13 frame_count     dw      0\r
14 cop_drop        dw      0\r
15 cop_pal         dd      0\r
16 do_pal          dw      0\r
17 cop_start       dw      0\r
18 cop_scrl        dw      0\r
19 cop_plz         dw      1\r
20 \r
21 PROC    close_copper\r
22 \r
23         mov     bx, 7\r
24         mov     ax, 0\r
25         mov     cx, 0\r
26         mov     dx, 0\r
27         int     0fch\r
28 \r
29         mov     bx, 7\r
30         mov     ax, 1\r
31         mov     cx, 0\r
32         mov     dx, 0\r
33         int     0fch\r
34 \r
35         mov     bx, 7\r
36         mov     ax, 2\r
37         mov     cx, 0\r
38         mov     dx, 0\r
39         int     0fch\r
40 \r
41         ret\r
42 ENDP\r
43 \r
44 PROC    init_copper\r
45 \r
46         mov     bx, 7\r
47         mov     ax, 1\r
48         mov     cx, OFFSET copper1\r
49         mov     dx, SEG copper1\r
50         int     0fch\r
51 \r
52         mov     bx, 7\r
53         mov     ax, 2\r
54         mov     cx, OFFSET copper2\r
55         mov     dx, SEG copper2\r
56         int     0fch\r
57 \r
58         mov     bx, 7\r
59         mov     ax, 0\r
60         mov     cx, OFFSET copper3\r
61         mov     dx, SEG copper3\r
62         int     0fch\r
63 \r
64         ret\r
65 ENDP\r
66 \r
67 PROC    copper1\r
68 \r
69         mov     dx, 03d4h\r
70         mov     al, 0dh\r
71         mov     ah, [Byte cs:cop_start]\r
72         out     dx, ax\r
73         mov     al, 0ch\r
74         mov     ah, [Byte cs:cop_start+1]\r
75         out     dx, ax\r
76 \r
77         mov     dx, 3c0h\r
78         mov     al, 33h\r
79         out     dx, al\r
80         mov     ax, [cs:cop_scrl]\r
81         out     dx, al\r
82 \r
83         retf\r
84 ENDP\r
85 \r
86 PROC    copper2\r
87 \r
88         pusha\r
89         push    ds\r
90 \r
91         inc     [cs:frame_count]\r
92 \r
93         cmp     [cs:do_pal], 0d\r
94         je      @@no_pal\r
95         lds     si, [cs:cop_pal]\r
96         mov     cx, 768d\r
97         mov     dx, 3c8h\r
98         mov     al, 0d\r
99         out     dx, al\r
100         inc     dx\r
101         rep     outsb\r
102         mov     [cs:do_pal], 0d\r
103 @@no_pal:\r
104         cmp     [cs:cop_plz], 0d\r
105         je      @@l3\r
106         call    pompota\r
107         call    moveplz\r
108 @@l3:\r
109         cmp     [cs:cop_drop], 0d\r
110         je      @@l1\r
111         call    do_drop\r
112 @@l1:\r
113         pop     ds\r
114         popa\r
115         retf\r
116 ENDP\r
117 \r
118 PROC    copper3\r
119         retf\r
120 ENDP\r
121 \r
122 pompi   db      0\r
123 \r
124 PUBLIC C pompota\r
125 \r
126 PROC    pompota\r
127 \r
128         mov     [cs:cop_scrl], 4d\r
129         mov     dx, 3d4h\r
130         mov     ax, 3c18h\r
131         out     dx, ax\r
132         mov     ax, 0f07h\r
133         out     dx, ax                  ; 8th bit\r
134         mov     ax, 3c18h\r
135         inc     [cs:pompi]\r
136         test    [cs:pompi], 1d\r
137         jz      @@l1\r
138         mov     [cs:cop_scrl], 0d\r
139         mov     ax, 3d18h\r
140 @@l1:\r
141         out     dx, ax\r
142         ret\r
143 ENDP\r
144 \r
145 PUBLIC C moveplz\r
146 \r
147 PROC moveplz\r
148 \r
149         push    ds\r
150         push    SEG k1\r
151         pop     ds\r
152 \r
153         add     [ds:k1], -3d\r
154         and     [ds:k1], 4095d\r
155         add     [ds:k2], -2d\r
156         and     [ds:k2], 4095d\r
157         add     [ds:k3], 1d\r
158         and     [ds:k3], 4095d\r
159         add     [ds:k4], 2d\r
160         and     [ds:k4], 4095d\r
161 \r
162         add     [ds:l1], -1d\r
163         and     [ds:l1], 4095d\r
164         add     [ds:l2], -2d\r
165         and     [ds:l2], 4095d\r
166         add     [ds:l3], 2d\r
167         and     [ds:l3], 4095d\r
168         add     [ds:l4], 3d\r
169         and     [ds:l4], 4095d\r
170 \r
171         pop     ds\r
172         ret\r
173 ENDP\r
174 \r
175 LABEL   dtau Word\r
176 ccc=0\r
177 cccc=0\r
178 REPT    65                              ; 43=dy*512/dtý\r
179         dw      ccc*ccc/4*43/128+60\r
180 ccc=ccc+1\r
181 ENDM\r
182 \r
183 PUBLIC C fadepal\r
184 fadepal         db      768*2 dup(?)\r
185 \r
186 PUBLIC C cop_fadepal\r
187 cop_fadepal     dd      0\r
188 \r
189 PROC    do_drop\r
190 \r
191         inc     [cs:cop_drop]\r
192         cmp     [cs:cop_drop], 64d\r
193         ja      @@over\r
194 \r
195         push    bx\r
196         mov     bx, [cs:cop_drop]\r
197         shl     bx, 1d\r
198         add     bx, OFFSET dtau\r
199 \r
200         mov     bx, [cs:bx]\r
201         mov     dx, 3d4h\r
202         mov     al, 18h         ; linecompare\r
203         mov     ah, bl\r
204         out     dx, ax\r
205         mov     al, 07h\r
206         mov     ah, bh\r
207         shl     ah, 4d\r
208         and     ah, 10h\r
209         or      ah, 0fh\r
210         out     dx, ax                  ; 8th bit\r
211 \r
212         pop     bx\r
213         ret\r
214 \r
215 @@over:\r
216         cmp     [cs:cop_drop], 256d\r
217         jae     @@end\r
218         cmp     [cs:cop_drop], 128\r
219         jae     @@lll\r
220         cmp     [cs:cop_drop], 64+32d\r
221         ja      @@end\r
222 \r
223 @@lll:  mov     [Word cs:cop_pal], OFFSET fadepal\r
224         mov     [Word cs:cop_pal+2], SEG fadepal\r
225         mov     [do_pal], 1d\r
226 \r
227         cmp     [cs:cop_drop], 65\r
228         je      @@l5\r
229 \r
230         mov     dx, 3d4h\r
231         mov     ax, 3c18h\r
232         out     dx, ax\r
233         mov     ax, 0f07h\r
234         out     dx, ax                  ; 8th bit\r
235 \r
236         push    ds si di cx\r
237 \r
238         lds     si, [cs:cop_fadepal]\r
239         mov     di, OFFSET fadepal\r
240         mov     cx, 768/16d\r
241 @@l4:\r
242         ccc=0\r
243         REPT    16\r
244         mov     ax, [ds:si+ccc*2]\r
245         add     [cs:di+ccc+768], al\r
246         adc     [cs:di+ccc], ah\r
247         ccc=ccc+1\r
248         ENDM\r
249         add     di, 16d\r
250         add     si, 32d\r
251         dec     cx\r
252         jnz     @@l4\r
253 \r
254         pop     cx di si ds\r
255         ret\r
256 @@l5:\r
257         mov     dx, 3d4h\r
258         mov     ax, 9018h\r
259         out     dx, ax\r
260         mov     ax, 1f07h\r
261         out     dx, ax                  ; 8th bit\r
262 \r
263         call    initpparas\r
264         ret\r
265 @@end:\r
266         mov     [cs:cop_drop], 0d\r
267         ret\r
268 ENDP\r
269 \r
270 PROC    initpparas\r
271         push    ax\r
272         push    ds\r
273         push    SEG k1\r
274         pop     ds\r
275 \r
276         mov     ax, [ds:il1]\r
277         mov     [ds:l1], ax\r
278         mov     ax, [ds:il2]\r
279         mov     [ds:l2], ax\r
280         mov     ax, [ds:il3]\r
281         mov     [ds:l3], ax\r
282         mov     ax, [ds:il4]\r
283         mov     [ds:l4], ax\r
284 \r
285         mov     ax, [ds:ik1]\r
286         mov     [ds:k1], ax\r
287         mov     ax, [ds:ik2]\r
288         mov     [ds:k2], ax\r
289         mov     ax, [ds:ik3]\r
290         mov     [ds:k3], ax\r
291         mov     ax, [ds:ik4]\r
292         mov     [ds:k4], ax\r
293 \r
294         pop     ds\r
295         pop     ax\r
296         ret\r
297 ENDP\r
298 \r
299 END\r
300 \r