]> 4ch.mooo.com Git - 16.git/blob - src/lib/dl/emm.h
meh
[16.git] / src / lib / dl / emm.h
1 /* emm.h
2  *
3  * Expanded Memory Manager library.
4  * (C) 2009-2012 Jonathan Campbell.
5  * Hackipedia DOS library.
6  *
7  * This code is licensed under the LGPL.
8  * <insert LGPL legal text here>
9  */
10
11 #ifndef __HW_DOS_EMM_H
12 #define __HW_DOS_EMM_H
13
14 #if !defined(TARGET_OS2) && !defined(TARGET_WINDOWS)
15
16 #include <stdio.h>
17 #include <stdint.h>
18
19 #include <stdlib.h>
20 #include <string.h>
21 #include <stdint.h>
22 #include <assert.h>
23 #include <stdio.h>
24 #include <conio.h>
25 #include <dos.h>
26
27 //#include "src/lib/doslib/cpu.h"
28 #include "src/lib/doslib/dos.h"
29
30 extern byte emm_status;
31 extern byte emm_present;
32 extern byte emm_version;
33 extern byte emm_phys_pages;
34 extern word emm_total_pages;
35 extern unsigned int emm_page_frame_segment;
36 extern word emm_unallocated_pages;
37 extern struct emm_phys_page_map *emm_phys_map;
38
39 /* FIXME: 32-bit protected mode: Who the fuck keeps changing the
40           value of ES?!? Watcom and our code rely on ES == DS! */
41 #if TARGET_MSDOS == 32
42 # define sanity() _sanity(__LINE__,__FILE__)
43 static inline void _sanity(unsigned int line,const char *f) {
44         uint16_t d=0,e=0;
45
46         __asm {
47                 mov     ax,ds
48                 mov     d,ax
49                 mov     ax,es
50                 mov     e,ax
51         }
52
53         if (d != e) {
54                 fprintf(stderr,"%s(%u) DS(%X) != ES(%X)\n",f,line,d,e);
55                 abort();
56         }
57 }
58 #else
59 # define sanity()
60 #endif
61
62 #pragma pack(push,1)
63 struct emm_phys_page_map {
64         uint16_t        segment;
65         uint16_t        number;
66 };
67 #pragma pack(pop)
68
69 int probe_emm();
70 void emm_phys_pages_sort();
71 void emm_update_page_count();
72 int emm_alloc_pages(unsigned int pages);
73 int emm_free_pages(unsigned int handle);
74 word emm_last_phys_page_segment(unsigned int phys_page);
75 int emm_map_page(unsigned int handle,unsigned int phys_page,unsigned int log_page);
76
77 #define emm_was_probed() (emm_status != 0xFF)
78
79 #endif /* !defined(TARGET_OS2) && !defined(TARGET_WINDOWS) */
80
81 #endif /* __HW_DOS_EMM_H */
82