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