]> 4ch.mooo.com Git - plz.git/blob - copper.asm
dots for a simple port but damn it!
[plz.git] / copper.asm
1         IDEAL\r
2         MODEL huge\r
3         8087\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    AX\r
90         push    CX\r
91         push    DX\r
92         push    BX\r
93         push    SP\r
94         push    BP\r
95         push    SI\r
96         push    DI\r
97 \r
98         push    ds\r
99 \r
100         inc     [cs:frame_count]\r
101 \r
102         cmp     [cs:do_pal], 0d\r
103         je      @@no_pal\r
104         lds     si, [cs:cop_pal]\r
105         mov     cx, 768d\r
106         mov     dx, 3c8h\r
107         mov     al, 0d\r
108         out     dx, al\r
109         inc     dx\r
110         ;rep    outsb\r
111         movsb\r
112         movsb\r
113         mov     [cs:do_pal], 0d\r
114 @@no_pal:\r
115         cmp     [cs:cop_plz], 0d\r
116         je      @@l3\r
117         call    pompota\r
118         call    moveplz\r
119 @@l3:\r
120         cmp     [cs:cop_drop], 0d\r
121         je      @@l1\r
122         call    do_drop\r
123 @@l1:\r
124         pop     ds\r
125         ;popa\r
126         pop     AX\r
127         pop     CX\r
128         pop     DX\r
129         pop     BX\r
130         pop     SP\r
131         pop     BP\r
132         pop     SI\r
133         pop     DI\r
134 \r
135         retf\r
136 ENDP\r
137 \r
138 PROC    copper3\r
139         retf\r
140 ENDP\r
141 \r
142 pompi   db       0\r
143 \r
144 PUBLIC C pompota\r
145 \r
146 PROC    pompota\r
147 \r
148         mov     [cs:cop_scrl], 4d\r
149         mov     dx, 3d4h\r
150         mov     ax, 3c18h\r
151         out     dx, ax\r
152         mov     ax, 0f07h\r
153         out     dx, ax                  ; 8th bit\r
154         mov     ax, 3c18h\r
155         inc     [cs:pompi]\r
156         test    [cs:pompi], 1d\r
157         jz       @@l1\r
158         mov     [cs:cop_scrl], 0d\r
159         mov     ax, 3d18h\r
160 @@l1:\r
161         out     dx, ax\r
162         ret\r
163 ENDP\r
164 \r
165 PUBLIC C moveplz\r
166 \r
167 PROC moveplz\r
168 \r
169         push    ds\r
170         ;;;;push    SEG k1\r
171         pop     ds\r
172 \r
173         add     [ds:k1], -3d\r
174         and     [ds:k1], 4095d\r
175         add     [ds:k2], -2d\r
176         and     [ds:k2], 4095d\r
177         add     [ds:k3], 1d\r
178         and     [ds:k3], 4095d\r
179         add     [ds:k4], 2d\r
180         and     [ds:k4], 4095d\r
181 \r
182         add     [ds:l1], -1d\r
183         and     [ds:l1], 4095d\r
184         add     [ds:l2], -2d\r
185         and     [ds:l2], 4095d\r
186         add     [ds:l3], 2d\r
187         and     [ds:l3], 4095d\r
188         add     [ds:l4], 3d\r
189         and     [ds:l4], 4095d\r
190 \r
191         pop     ds\r
192         ret\r
193 ENDP\r
194 \r
195 LABEL   dtau Word\r
196 ccc=0\r
197 cccc=0\r
198 REPT    65                              ; 43=dy*512/dt\r
199         dw      ccc*ccc/4*43/128+60\r
200 ccc=ccc+1\r
201 ENDM\r
202 \r
203 PUBLIC C fadepal\r
204 fadepal         db      768*2 dup(?)\r
205 \r
206 PUBLIC C cop_fadepal\r
207 cop_fadepal     dd      0\r
208 \r
209 PROC    do_drop\r
210 \r
211         inc     [cs:cop_drop]\r
212         cmp     [cs:cop_drop], 64d\r
213         ja      @@over\r
214 \r
215         push    bx\r
216         mov     bx, [cs:cop_drop]\r
217         shl     bx, 1d\r
218         add     bx, OFFSET dtau\r
219 \r
220         mov     bx, [cs:bx]\r
221         mov     dx, 3d4h\r
222         mov     al, 18h         ; linecompare\r
223         mov     ah, bl\r
224         out     dx, ax\r
225         mov     al, 07h\r
226         mov     ah, bh\r
227         shl     ah, 1d\r
228         shl     ah, 1d\r
229         shl     ah, 1d\r
230         shl     ah, 1d\r
231         and     ah, 10h\r
232         or      ah, 0fh\r
233         out     dx, ax                  ; 8th bit\r
234 \r
235         pop     bx\r
236         ret\r
237 \r
238 @@over:\r
239         cmp     [cs:cop_drop], 256d\r
240         jae     end_\r
241         cmp     [cs:cop_drop], 128\r
242         jae     @@lll\r
243         cmp     [cs:cop_drop], 64+32d\r
244         ja      end_\r
245 \r
246 @@lll:  mov     [Word cs:cop_pal], OFFSET fadepal\r
247         mov     [Word cs:cop_pal+2], SEG fadepal\r
248         mov     [do_pal], 1d\r
249 \r
250         cmp     [cs:cop_drop], 65\r
251         je      l5\r
252 \r
253         mov     dx, 3d4h\r
254         mov     ax, 3c18h\r
255         out     dx, ax\r
256         mov     ax, 0f07h\r
257         out     dx, ax                  ; 8th bit\r
258 \r
259         push    ds\r
260         push si\r
261         push di\r
262         push cx\r
263 \r
264         lds     si, [cs:cop_fadepal]\r
265         mov     di, OFFSET fadepal\r
266         mov     cx, 768/16d\r
267 @@l4:\r
268         ccc=0\r
269         REPT    16\r
270         mov     ax, [ds:si+ccc*2]\r
271         add     [cs:di+ccc+768], al\r
272         adc     [cs:di+ccc], ah\r
273         ccc=ccc+1\r
274         ENDM\r
275         add     di, 16d\r
276         add     si, 32d\r
277         dec     cx\r
278         jnz     @@l4\r
279 \r
280         pop     cx\r
281         pop     di\r
282         pop     si\r
283         pop     ds\r
284         ret\r
285 l5:\r
286         mov     dx, 3d4h\r
287         mov     ax, 9018h\r
288         out     dx, ax\r
289         mov     ax, 1f07h\r
290         out     dx, ax                  ; 8th bit\r
291 \r
292         call    initpparas\r
293         ret\r
294 end_:\r
295         mov     [cs:cop_drop], 0d\r
296         ret\r
297 ENDP\r
298 \r
299 PROC    initpparas\r
300         push    ax\r
301         push    ds\r
302         ;;;;push    SEG k1\r
303         pop     ds\r
304 \r
305         mov     ax, [ds:il1]\r
306         mov     [ds:l1], ax\r
307         mov     ax, [ds:il2]\r
308         mov     [ds:l2], ax\r
309         mov     ax, [ds:il3]\r
310         mov     [ds:l3], ax\r
311         mov     ax, [ds:il4]\r
312         mov     [ds:l4], ax\r
313 \r
314         mov     ax, [ds:ik1]\r
315         mov     [ds:k1], ax\r
316         mov     ax, [ds:ik2]\r
317         mov     [ds:k2], ax\r
318         mov     ax, [ds:ik3]\r
319         mov     [ds:k3], ax\r
320         mov     ax, [ds:ik4]\r
321         mov     [ds:k4], ax\r
322 \r
323         pop     ds\r
324         pop     ax\r
325         ret\r
326 ENDP\r
327 \r
328 END\r
329 \r