]> 4ch.mooo.com Git - 16.git/blob - src/lib/doslib/dos/emm.h
added a bunch of things~ and midi stuff~
[16.git] / src / lib / doslib / dos / 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 /* FIXME: 32-bit protected mode: Who the fuck keeps changing the
20           value of ES?!? Watcom and our code rely on ES == DS! */
21 #if TARGET_MSDOS == 32
22 # define sanity() _sanity(__LINE__,__FILE__)
23 static inline void _sanity(unsigned int line,const char *f) {
24         uint16_t d=0,e=0;
25
26         __asm {
27                 mov     ax,ds
28                 mov     d,ax
29                 mov     ax,es
30                 mov     e,ax
31         }
32
33         if (d != e) {
34                 fprintf(stderr,"%s(%u) DS(%X) != ES(%X)\n",f,line,d,e);
35                 abort();
36         }
37 }
38 #else
39 # define sanity()
40 #endif
41
42 #pragma pack(push,1)
43 struct emm_phys_page_map {
44         uint16_t        segment;
45         uint16_t        number;
46 };
47 #pragma pack(pop)
48
49 extern unsigned char emm_status;
50 extern unsigned char emm_present;
51 extern unsigned char emm_version;
52 extern unsigned char emm_phys_pages;
53 extern unsigned short emm_total_pages;
54 extern unsigned int emm_page_frame_segment;
55 extern unsigned short emm_unallocated_pages;
56 extern struct emm_phys_page_map *emm_phys_map;
57
58 int probe_emm();
59 void emm_phys_pages_sort();
60 void emm_update_page_count();
61 int emm_alloc_pages(unsigned int pages);
62 int emm_free_pages(unsigned int handle);
63 unsigned short emm_last_phys_page_segment(unsigned int phys_page);
64 int emm_map_page(unsigned int handle,unsigned int phys_page,unsigned int log_page);
65
66 #define emm_was_probed() (emm_status != 0xFF)
67
68 #endif /* !defined(TARGET_OS2) && !defined(TARGET_WINDOWS) */
69
70 #endif /* __HW_DOS_EMM_H */
71