]> 4ch.mooo.com Git - 16.git/blob - src/lib/exmm/MEMORY.ASM
ems workings~
[16.git] / src / lib / exmm / MEMORY.ASM
1 .387\r
2                 PUBLIC  _OpenEMM\r
3                 PUBLIC  _CloseEMM\r
4                 PUBLIC  _EMMInstalled\r
5                 PUBLIC  _EMMCoreLeft\r
6                 PUBLIC  _EMMalloc\r
7                 PUBLIC  _EMMRealloc\r
8                 PUBLIC  _EMMFree\r
9                 PUBLIC  _MapEMM\r
10                 PUBLIC  _UnmapEMM\r
11                 PUBLIC  _UseEMM\r
12                 PUBLIC  _SaveEMM\r
13                 EXTRN   `F_LXLSH@`:BYTE\r
14                 EXTRN   `F_SCOPY@`:BYTE\r
15 MEMORY_TEXT             SEGMENT BYTE PUBLIC USE16 'CODE'\r
16                 ASSUME CS:MEMORY_TEXT, DS:DGROUP, SS:DGROUP\r
17 _OpenEMM:\r
18     push        bp \r
19     mov         bp,sp \r
20     push        ds \r
21     mov         ax,MEMORY_DATA \r
22     mov         ds,ax \r
23     call        far ptr L$59 \r
24     or          ax,ax \r
25     je          L$1 \r
26     call        far ptr L$65 \r
27     or          ax,ax \r
28     jne         L$2 \r
29 L$1:\r
30     xor         ax,ax \r
31     jmp         L$4 \r
32 L$2:\r
33     call        far ptr L$68 \r
34     mov         word ptr L$89,ax \r
35     or          ax,ax \r
36     jne         L$3 \r
37     xor         ax,ax \r
38     jmp         L$4 \r
39 L$3:\r
40     mov         ax,1 \r
41     jmp         L$4 \r
42 L$4:\r
43     pop         ds \r
44     pop         bp \r
45     retf        \r
46 _CloseEMM:\r
47     push        bp \r
48     mov         bp,sp \r
49     push        si \r
50     push        ds \r
51     mov         ax,MEMORY_DATA \r
52     mov         ds,ax \r
53     cmp         word ptr L$89,0 \r
54     jne         L$5 \r
55     jmp         L$9 \r
56 L$5:\r
57     xor         si,si \r
58     jmp         L$8 \r
59 L$6:\r
60     mov         bx,si \r
61     shl         bx,1 \r
62     cmp         word ptr L$88[bx],0 \r
63     je          L$7 \r
64     mov         bx,si \r
65     shl         bx,1 \r
66     push        word ptr L$88[bx] \r
67     call        far ptr L$77 \r
68     inc         sp \r
69     inc         sp \r
70     mov         bx,si \r
71     shl         bx,1 \r
72     mov         word ptr L$88[bx],0 \r
73 L$7:\r
74     inc         si \r
75 L$8:\r
76     cmp         si,40H \r
77     jl          L$6 \r
78     mov         word ptr L$89,0 \r
79 L$9:\r
80     pop         ds \r
81     pop         si \r
82     pop         bp \r
83     retf        \r
84 _EMMInstalled:\r
85     push        bp \r
86     mov         bp,sp \r
87     push        ds \r
88     mov         ax,MEMORY_DATA \r
89     mov         ds,ax \r
90     cmp         word ptr L$89,0 \r
91     je          L$10 \r
92     mov         ax,1 \r
93     jmp         L$11 \r
94 L$10:\r
95     xor         ax,ax \r
96 L$11:\r
97     jmp         L$12 \r
98 L$12:\r
99     pop         ds \r
100     pop         bp \r
101     retf        \r
102 _EMMCoreLeft:\r
103     push        bp \r
104     mov         bp,sp \r
105     sub         sp,6 \r
106     push        ds \r
107     mov         ax,MEMORY_DATA \r
108     mov         ds,ax \r
109     mov         word ptr -4[bp],0 \r
110     mov         word ptr -6[bp],0 \r
111     mov         ah,42H \r
112     int         67H \r
113     or          ah,ah \r
114     js          L$13 \r
115     mov         word ptr -2[bp],bx \r
116     mov         ax,word ptr -2[bp] \r
117     xor         dx,dx \r
118     mov         cl,0eH \r
119     call        far ptr `F_LXLSH@` \r
120     mov         word ptr -4[bp],dx \r
121     mov         word ptr -6[bp],ax \r
122 L$13:\r
123     mov         dx,word ptr -4[bp] \r
124     mov         ax,word ptr -6[bp] \r
125     jmp         L$14 \r
126 L$14:\r
127     pop         ds \r
128     mov         sp,bp \r
129     pop         bp \r
130     retf        \r
131 _EMMalloc:\r
132     push        bp \r
133     mov         bp,sp \r
134     sub         sp,4 \r
135     push        si \r
136     push        di \r
137     push        ds \r
138     mov         ax,MEMORY_DATA \r
139     mov         ds,ax \r
140     mov         di,word ptr 0aH[bp] \r
141     mov         word ptr -2[bp],0 \r
142     mov         word ptr -4[bp],0 \r
143     cmp         word ptr L$89,0 \r
144     jne         L$15 \r
145     les         bx,dword ptr 6[bp] \r
146     mov         word ptr es:[bx],0 \r
147     xor         dx,dx \r
148     xor         ax,ax \r
149     jmp         L$23 \r
150 L$15:\r
151     cmp         di,1 \r
152     jl          L$16 \r
153     cmp         di,3fcH \r
154     jle         L$17 \r
155 L$16:\r
156     les         bx,dword ptr 6[bp] \r
157     mov         word ptr es:[bx],0f440H \r
158     xor         dx,dx \r
159     xor         ax,ax \r
160     jmp         L$23 \r
161 L$17:\r
162     xor         si,si \r
163     jmp         L$19 \r
164 L$18:\r
165     inc         si \r
166 L$19:\r
167     cmp         si,40H \r
168     jge         L$20 \r
169     mov         bx,si \r
170     shl         bx,1 \r
171     cmp         word ptr L$88[bx],0 \r
172     jne         L$18 \r
173 L$20:\r
174     cmp         si,40H \r
175     jne         L$21 \r
176     les         bx,dword ptr 6[bp] \r
177     mov         word ptr es:[bx],0f443H \r
178     xor         dx,dx \r
179     xor         ax,ax \r
180     jmp         L$23 \r
181 L$21:\r
182     push        di \r
183     call        far ptr L$71 \r
184     inc         sp \r
185     inc         sp \r
186     mov         bx,si \r
187     shl         bx,1 \r
188     mov         word ptr L$88[bx],ax \r
189     or          ax,ax \r
190     jle         L$22 \r
191     mov         ax,word ptr L$89 \r
192     mov         word ptr -2[bp],ax \r
193     mov         word ptr -4[bp],0 \r
194 L$22:\r
195     mov         bx,si \r
196     shl         bx,1 \r
197     mov         ax,word ptr L$88[bx] \r
198     les         bx,dword ptr 6[bp] \r
199     mov         word ptr es:[bx],ax \r
200     mov         dx,word ptr -2[bp] \r
201     mov         ax,word ptr -4[bp] \r
202     jmp         L$23 \r
203 L$23:\r
204     pop         ds \r
205     pop         di \r
206     pop         si \r
207     mov         sp,bp \r
208     pop         bp \r
209     retf        \r
210 _EMMRealloc:\r
211     push        bp \r
212     mov         bp,sp \r
213     push        si \r
214     push        ds \r
215     mov         ax,MEMORY_DATA \r
216     mov         ds,ax \r
217     xor         si,si \r
218     cmp         word ptr L$89,0 \r
219     je          L$24 \r
220     cmp         word ptr 8[bp],0 \r
221     jl          L$24 \r
222     cmp         word ptr 8[bp],3fcH \r
223     jle         L$25 \r
224 L$24:\r
225     xor         ax,ax \r
226     jmp         L$27 \r
227 L$25:\r
228     mov         ah,51H \r
229     mov         bx,word ptr 8[bp] \r
230     mov         dx,word ptr 6[bp] \r
231     int         67H \r
232     or          ah,ah \r
233     js          L$26 \r
234     mov         si,1 \r
235 L$26:\r
236     mov         ax,si \r
237     jmp         L$27 \r
238 L$27:\r
239     pop         ds \r
240     pop         si \r
241     pop         bp \r
242     retf        \r
243 _EMMFree:\r
244     push        bp \r
245     mov         bp,sp \r
246     dec         sp \r
247     dec         sp \r
248     push        si \r
249     push        di \r
250     push        ds \r
251     mov         ax,MEMORY_DATA \r
252     mov         ds,ax \r
253     mov         di,word ptr 6[bp] \r
254     cmp         word ptr L$89,0 \r
255     jne         L$28 \r
256     jmp         L$36 \r
257 L$28:\r
258     xor         si,si \r
259     jmp         L$30 \r
260 L$29:\r
261     inc         si \r
262 L$30:\r
263     cmp         si,40H \r
264     jge         L$31 \r
265     mov         bx,si \r
266     shl         bx,1 \r
267     cmp         word ptr L$88[bx],di \r
268     jne         L$29 \r
269 L$31:\r
270     cmp         si,40H \r
271     jl          L$32 \r
272     jmp         L$36 \r
273 L$32:\r
274     mov         word ptr -2[bp],10H \r
275     jmp         L$34 \r
276 L$33:\r
277     mov         bx,si \r
278     shl         bx,1 \r
279     push        word ptr L$88[bx] \r
280     call        far ptr L$77 \r
281     inc         sp \r
282     inc         sp \r
283     or          ax,ax \r
284     je          L$34 \r
285     jmp         L$35 \r
286 L$34:\r
287     mov         ax,word ptr -2[bp] \r
288     dec         word ptr -2[bp] \r
289     or          ax,ax \r
290     jne         L$33 \r
291 L$35:\r
292     mov         bx,si \r
293     shl         bx,1 \r
294     mov         word ptr L$88[bx],0 \r
295 L$36:\r
296     pop         ds \r
297     pop         di \r
298     pop         si \r
299     mov         sp,bp \r
300     pop         bp \r
301     retf        \r
302 _MapEMM:\r
303     push        bp \r
304     mov         bp,sp \r
305     push        si \r
306     push        di \r
307     push        ds \r
308     mov         ax,MEMORY_DATA \r
309     mov         ds,ax \r
310     mov         di,word ptr 6[bp] \r
311     cmp         word ptr L$89,0 \r
312     jne         L$37 \r
313     xor         ax,ax \r
314     jmp         L$47 \r
315 L$37:\r
316     xor         si,si \r
317     jmp         L$39 \r
318 L$38:\r
319     inc         si \r
320 L$39:\r
321     cmp         si,40H \r
322     jge         L$40 \r
323     mov         bx,si \r
324     shl         bx,1 \r
325     cmp         word ptr L$88[bx],di \r
326     jne         L$38 \r
327 L$40:\r
328     cmp         si,40H \r
329     jne         L$41 \r
330     xor         ax,ax \r
331     jmp         L$47 \r
332 L$41:\r
333     push        di \r
334     call        far ptr L$80 \r
335     inc         sp \r
336     inc         sp \r
337     cmp         ax,word ptr 0aH[bp] \r
338     jl          L$42 \r
339     cmp         word ptr 0aH[bp],1 \r
340     jl          L$42 \r
341     cmp         word ptr 0aH[bp],4 \r
342     jle         L$43 \r
343 L$42:\r
344     mov         ax,0f440H \r
345     jmp         L$47 \r
346 L$43:\r
347     mov         si,word ptr 8[bp] \r
348     jmp         L$46 \r
349 L$44:\r
350     mov         ax,si \r
351     sub         ax,word ptr 8[bp] \r
352     push        ax \r
353     push        si \r
354     push        di \r
355     call        far ptr L$74 \r
356     add         sp,6 \r
357     or          ax,ax \r
358     jne         L$45 \r
359     xor         ax,ax \r
360     jmp         L$47 \r
361 L$45:\r
362     inc         si \r
363 L$46:\r
364     mov         ax,word ptr 8[bp] \r
365     add         ax,word ptr 0aH[bp] \r
366     cmp         ax,si \r
367     jg          L$44 \r
368     mov         ax,1 \r
369     jmp         L$47 \r
370 L$47:\r
371     pop         ds \r
372     pop         di \r
373     pop         si \r
374     pop         bp \r
375     retf        \r
376 _UnmapEMM:\r
377     push        bp \r
378     mov         bp,sp \r
379     dec         sp \r
380     dec         sp \r
381     push        si \r
382     push        di \r
383     push        ds \r
384     mov         ax,MEMORY_DATA \r
385     mov         ds,ax \r
386     mov         di,word ptr 6[bp] \r
387     cmp         word ptr L$89,0 \r
388     jne         L$48 \r
389     jmp         L$57 \r
390 L$48:\r
391     xor         si,si \r
392     jmp         L$50 \r
393 L$49:\r
394     inc         si \r
395 L$50:\r
396     cmp         si,40H \r
397     jge         L$51 \r
398     mov         bx,si \r
399     shl         bx,1 \r
400     cmp         word ptr L$88[bx],di \r
401     jne         L$49 \r
402 L$51:\r
403     cmp         si,40H \r
404     jne         L$52 \r
405     jmp         L$57 \r
406 L$52:\r
407     mov         ax,word ptr 8[bp] \r
408     add         ax,word ptr 0aH[bp] \r
409     mov         word ptr -2[bp],ax \r
410     cmp         word ptr 0aH[bp],1 \r
411     jl          L$53 \r
412     cmp         word ptr -2[bp],4 \r
413     jle         L$54 \r
414 L$53:\r
415     jmp         L$57 \r
416 L$54:\r
417     mov         si,word ptr 8[bp] \r
418     jmp         L$56 \r
419 L$55:\r
420     push        si \r
421     mov         ax,0ffffH \r
422     push        ax \r
423     push        di \r
424     call        far ptr L$74 \r
425     add         sp,6 \r
426     inc         si \r
427 L$56:\r
428     cmp         si,word ptr -2[bp] \r
429     jl          L$55 \r
430 L$57:\r
431     pop         ds \r
432     pop         di \r
433     pop         si \r
434     mov         sp,bp \r
435     pop         bp \r
436     retf        \r
437 _UseEMM:\r
438     push        bp \r
439     mov         bp,sp \r
440     push        si \r
441     push        ds \r
442     mov         ax,MEMORY_DATA \r
443     mov         ds,ax \r
444     mov         si,word ptr 6[bp] \r
445     push        si \r
446     call        far ptr L$83 \r
447     inc         sp \r
448     inc         sp \r
449     push        word ptr 0aH[bp] \r
450     push        word ptr 8[bp] \r
451     push        si \r
452     push        cs \r
453     call        near ptr _MapEMM \r
454     add         sp,6 \r
455     jmp         L$58 \r
456 L$58:\r
457     pop         ds \r
458     pop         si \r
459     pop         bp \r
460     retf        \r
461 _SaveEMM:\r
462     push        bp \r
463     mov         bp,sp \r
464     push        si \r
465     push        ds \r
466     mov         ax,MEMORY_DATA \r
467     mov         ds,ax \r
468     mov         si,word ptr 6[bp] \r
469     push        word ptr 0aH[bp] \r
470     push        word ptr 8[bp] \r
471     push        si \r
472     push        cs \r
473     call        near ptr _UnmapEMM \r
474     add         sp,6 \r
475     push        si \r
476     call        far ptr L$86 \r
477     inc         sp \r
478     inc         sp \r
479     pop         ds \r
480     pop         si \r
481     pop         bp \r
482     retf        \r
483 L$59:\r
484     push        bp \r
485     mov         bp,sp \r
486     sub         sp,14H \r
487     push        si \r
488     push        ds \r
489     mov         ax,MEMORY_DATA \r
490     mov         ds,ax \r
491     push        ss \r
492     lea         ax,-0cH[bp] \r
493     push        ax \r
494     push        ds \r
495     mov         ax,offset L$87 \r
496     push        ax \r
497     mov         cx,9 \r
498     call        far ptr `F_SCOPY@` \r
499     push        es \r
500     mov         ax,3567H \r
501     int         21H \r
502     mov         ax,es \r
503     mov         word ptr -2[bp],ax \r
504     pop         es \r
505     mov         ax,word ptr -2[bp] \r
506     mov         word ptr -12H[bp],ax \r
507     mov         word ptr -14H[bp],0aH \r
508     lea         ax,-0cH[bp] \r
509     mov         word ptr -0eH[bp],ss \r
510     mov         word ptr -10H[bp],ax \r
511     xor         si,si \r
512     jmp         L$61 \r
513 L$60:\r
514     inc         si \r
515 L$61:\r
516     cmp         si,8 \r
517     jge         L$62 \r
518     les         bx,dword ptr -10H[bp] \r
519     inc         word ptr -10H[bp] \r
520     mov         al,byte ptr es:[bx] \r
521     les         bx,dword ptr -14H[bp] \r
522     inc         word ptr -14H[bp] \r
523     cmp         al,byte ptr es:[bx] \r
524     je          L$60 \r
525 L$62:\r
526     cmp         si,8 \r
527     jne         L$63 \r
528     mov         ax,1 \r
529     jmp         L$64 \r
530 L$63:\r
531     xor         ax,ax \r
532     jmp         L$64 \r
533 L$64:\r
534     pop         ds \r
535     pop         si \r
536     mov         sp,bp \r
537     pop         bp \r
538     retf        \r
539 L$65:\r
540     push        bp \r
541     mov         bp,sp \r
542     push        ds \r
543     mov         ax,MEMORY_DATA \r
544     mov         ds,ax \r
545     mov         ah,40H \r
546     int         67H \r
547     or          ah,ah \r
548     jns         L$66 \r
549     xor         ax,ax \r
550     jmp         L$67 \r
551 L$66:\r
552     mov         ax,1 \r
553     jmp         L$67 \r
554 L$67:\r
555     pop         ds \r
556     pop         bp \r
557     retf        \r
558 L$68:\r
559     push        bp \r
560     mov         bp,sp \r
561     dec         sp \r
562     dec         sp \r
563     push        ds \r
564     mov         ax,MEMORY_DATA \r
565     mov         ds,ax \r
566     mov         ah,41H \r
567     int         67H \r
568     or          ah,ah \r
569     js          L$69 \r
570     mov         word ptr -2[bp],bx \r
571     mov         ax,word ptr -2[bp] \r
572     jmp         L$70 \r
573 L$69:\r
574     xor         ax,ax \r
575     jmp         L$70 \r
576 L$70:\r
577     pop         ds \r
578     mov         sp,bp \r
579     pop         bp \r
580     retf        \r
581 L$71:\r
582     push        bp \r
583     mov         bp,sp \r
584     dec         sp \r
585     dec         sp \r
586     push        ds \r
587     mov         ax,MEMORY_DATA \r
588     mov         ds,ax \r
589     mov         ah,43H \r
590     mov         bx,word ptr 6[bp] \r
591     int         67H \r
592     or          ah,ah \r
593     js          L$72 \r
594     mov         word ptr -2[bp],dx \r
595     mov         ax,word ptr -2[bp] \r
596     jmp         L$73 \r
597 L$72:\r
598     xor         ax,ax \r
599     jmp         L$73 \r
600 L$73:\r
601     pop         ds \r
602     mov         sp,bp \r
603     pop         bp \r
604     retf        \r
605 L$74:\r
606     push        bp \r
607     mov         bp,sp \r
608     push        si \r
609     push        ds \r
610     mov         ax,MEMORY_DATA \r
611     mov         ds,ax \r
612     xor         si,si \r
613     mov         ax,word ptr 0aH[bp] \r
614     mov         ah,44H \r
615     mov         bx,word ptr 8[bp] \r
616     mov         dx,word ptr 6[bp] \r
617     int         67H \r
618     or          ah,ah \r
619     js          L$75 \r
620     mov         si,1 \r
621 L$75:\r
622     mov         ax,si \r
623     jmp         L$76 \r
624 L$76:\r
625     pop         ds \r
626     pop         si \r
627     pop         bp \r
628     retf        \r
629 L$77:\r
630     push        bp \r
631     mov         bp,sp \r
632     push        ds \r
633     mov         ax,MEMORY_DATA \r
634     mov         ds,ax \r
635     mov         ah,45H \r
636     mov         dx,word ptr 6[bp] \r
637     int         67H \r
638     or          ah,ah \r
639     js          L$78 \r
640     mov         ax,1 \r
641     jmp         L$79 \r
642 L$78:\r
643     xor         ax,ax \r
644     jmp         L$79 \r
645 L$79:\r
646     pop         ds \r
647     pop         bp \r
648     retf        \r
649 L$80:\r
650     push        bp \r
651     mov         bp,sp \r
652     dec         sp \r
653     dec         sp \r
654     push        ds \r
655     mov         ax,MEMORY_DATA \r
656     mov         ds,ax \r
657     mov         word ptr -2[bp],0 \r
658     mov         ah,4cH \r
659     mov         dx,word ptr 6[bp] \r
660     int         67H \r
661     or          ah,ah \r
662     js          L$81 \r
663     mov         word ptr -2[bp],bx \r
664 L$81:\r
665     mov         ax,word ptr -2[bp] \r
666     jmp         L$82 \r
667 L$82:\r
668     pop         ds \r
669     mov         sp,bp \r
670     pop         bp \r
671     retf        \r
672 L$83:\r
673     push        bp \r
674     mov         bp,sp \r
675     push        si \r
676     push        ds \r
677     mov         ax,MEMORY_DATA \r
678     mov         ds,ax \r
679     mov         si,0f442H \r
680     mov         ah,47H \r
681     mov         dx,word ptr 6[bp] \r
682     int         67H \r
683     or          ah,ah \r
684     js          L$84 \r
685     mov         si,1 \r
686 L$84:\r
687     mov         ax,si \r
688     jmp         L$85 \r
689 L$85:\r
690     pop         ds \r
691     pop         si \r
692     pop         bp \r
693     retf        \r
694 L$86:\r
695     push        bp \r
696     mov         bp,sp \r
697     push        ds \r
698     mov         ax,MEMORY_DATA \r
699     mov         ds,ax \r
700     mov         ah,48H \r
701     mov         dx,word ptr 6[bp] \r
702     int         67H \r
703     pop         ds \r
704     pop         bp \r
705     retf        \r
706 MEMORY_TEXT             ENDS\r
707 MEMORY_DATA             SEGMENT WORD PUBLIC USE16 'FAR_DATA'\r
708 L$87:\r
709     DB  45H, 4dH, 4dH, 58H, 58H, 58H, 58H, 30H\r
710     DB  0, 0\r
711 L$88:\r
712     DB  0FH DUP(0,0,0,0,0,0,0,0)\r
713     DB  0, 0, 0, 0, 0, 0, 0, 0\r
714 L$89:\r
715     DB  0, 0\r
716 \r
717 MEMORY_DATA             ENDS\r
718                 END\r