[NTVDM][FAST486]
[reactos.git] / reactos / subsystems / mvdm / ntvdm / ems.h
1 /*
2 * COPYRIGHT: GPLv2+ - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: ems.h
5 * PURPOSE: Expanded Memory Support
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 */
8
9 #ifndef _EMS_H_
10 #define _EMS_H_
11
12 /* DEFINITIONS ****************************************************************/
13
14 #define EMS_INTERRUPT_NUM 0x67
15 #define EMS_SEGMENT 0xD000
16 #define EMS_MAX_HANDLES 16
17 #define EMS_TOTAL_PAGES 256
18 #define EMS_PAGE_BITS 14
19 #define EMS_PAGE_SIZE (1 << EMS_PAGE_BITS)
20 #define EMS_ADDRESS 0xA00000
21 #define EMS_PHYSICAL_PAGES 4
22
23 #define EMS_STATUS_OK 0x00
24 #define EMS_STATUS_INTERNAL_ERROR 0x80
25 #define EMS_STATUS_INVALID_HANDLE 0x83
26 #define EMS_STATUS_NO_MORE_HANDLES 0x85
27 #define EMS_STATUS_INSUFFICIENT_PAGES 0x88
28 #define EMS_STATUS_ZERO_PAGES 0x89
29 #define EMS_STATUS_INV_LOGICAL_PAGE 0x8A
30 #define EMS_STATUS_INV_PHYSICAL_PAGE 0x8B
31 #define EMS_STATUS_UNKNOWN_FUNCTION 0x8F
32
33 #define ARRAY_INDEX(ptr, array) ((ULONG)(((ULONG_PTR)(ptr) - (ULONG_PTR)(array)) / sizeof(*array)))
34
35 typedef struct _EMS_HANDLE
36 {
37 BOOLEAN Allocated;
38 USHORT PageCount;
39 LIST_ENTRY PageList;
40 } EMS_HANDLE, *PEMS_HANDLE;
41
42 typedef struct _EMS_PAGE
43 {
44 LIST_ENTRY Entry;
45 USHORT Handle;
46 } EMS_PAGE, *PEMS_PAGE;
47
48 #pragma pack(push, 1)
49
50 typedef struct _EMS_COPY_DATA
51 {
52 ULONG RegionLength;
53 UCHAR SourceType;
54 USHORT SourceHandle;
55 USHORT SourceOffset;
56 USHORT SourceSegment;
57 UCHAR DestType;
58 USHORT DestHandle;
59 USHORT DestOffset;
60 USHORT DestSegment;
61 } EMS_COPY_DATA, *PEMS_COPY_DATA;
62
63 #pragma pack(pop)
64
65 /* FUNCTIONS ******************************************************************/
66
67 VOID EmsInitialize(VOID);
68 VOID EmsCleanup(VOID);
69
70 #endif // _EMS_H_
71
72 /* EOF */