d82bb1a74c645ab6e714865f042ae8d718e201b9
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
5 * PURPOSE: VDM DOS Kernel
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
12 /* INCLUDES *******************************************************************/
16 /**/ #include "callback.h" /**/
18 /* DEFINES ********************************************************************/
21 // We are DOS 5.00 (reported by INT 21h, AH=30h)
22 // and DOS 5.50 (reported by INT 21h, AX=3306h) for Windows NT Compatibility
24 #define DOS_VERSION MAKEWORD(5, 00)
25 #define NTDOS_VERSION MAKEWORD(5, 50)
27 #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
28 #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
29 #define FIRST_MCB_SEGMENT 0x1000
30 #define USER_MEMORY_SIZE 0x8FFE
31 #define SYSTEM_PSP 0x08
32 #define SYSTEM_ENV_BLOCK 0x800
33 #define INVALID_DOS_HANDLE 0xFFFF
34 #define DOS_INPUT_HANDLE 0
35 #define DOS_OUTPUT_HANDLE 1
36 #define DOS_ERROR_HANDLE 2
37 #define DOS_SFT_SIZE 255
38 #define SEGMENT_TO_MCB(seg) ((PDOS_MCB)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
39 #define SEGMENT_TO_PSP(seg) ((PDOS_PSP)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
40 #define UMB_START_SEGMENT 0xC000
41 #define UMB_END_SEGMENT 0xDFFF
42 #define DOS_ALLOC_HIGH 0x40
43 #define DOS_ALLOC_HIGH_LOW 0x80
44 #define DOS_CMDLINE_LENGTH 127
45 #define DOS_DIR_LENGTH 64
46 #define NUM_DRIVES ('Z' - 'A' + 1)
47 #define DOS_CHAR_ATTRIBUTE 0x07
49 enum DOS_ALLOC_STRATEGY
58 typedef struct _DOS_MCB
67 typedef struct _DOS_FCB
82 typedef struct _DOS_PSP
87 DWORD TerminateAddress
;
89 DWORD CriticalAddress
;
103 BYTE CommandLineSize
;
104 CHAR CommandLine
[DOS_CMDLINE_LENGTH
];
105 } DOS_PSP
, *PDOS_PSP
;
107 typedef struct _DOS_INPUT_BUFFER
111 CHAR Buffer
[ANYSIZE_ARRAY
];
112 } DOS_INPUT_BUFFER
, *PDOS_INPUT_BUFFER
;
114 typedef struct _DOS_DRIVER_HEADER
121 } DOS_DRIVER_HEADER
, *PDOS_DRIVER_HEADER
;
123 typedef struct _DOS_FIND_FILE_BLOCK
131 /* The following part of the structure is documented */
137 } DOS_FIND_FILE_BLOCK
, *PDOS_FIND_FILE_BLOCK
;
141 /* FUNCTIONS ******************************************************************/
143 extern CALLBACK16 DosContext
;
144 #define RegisterDosInt32(IntNumber, IntHandler) \
146 DosContext.NextOffset += RegisterInt32(MAKELONG(DosContext.NextOffset, \
147 DosContext.Segment), \
148 (IntNumber), (IntHandler), NULL); \
155 CHAR
DosReadCharacter(VOID
);
156 BOOLEAN
DosCheckInput(VOID
);
157 VOID
DosPrintCharacter(CHAR Character
);
159 BOOLEAN
DosBIOSInitialize(VOID
);
163 * DOS Kernel Functions
166 BOOL
IsConsoleHandle(HANDLE hHandle
);
167 HANDLE
DosGetRealHandle(WORD DosHandle
);
168 WORD
DosReadFile(WORD FileHandle
, LPVOID Buffer
, WORD Count
, LPWORD BytesRead
);
169 WORD
DosWriteFile(WORD FileHandle
, LPVOID Buffer
, WORD Count
, LPWORD BytesWritten
);
171 VOID
DosInitializePsp(WORD PspSegment
, LPCSTR CommandLine
, WORD ProgramSize
, WORD Environment
);
172 BOOLEAN
DosCreateProcess(LPCSTR CommandLine
, WORD EnvBlock
);
173 VOID
DosTerminateProcess(WORD Psp
, BYTE ReturnCode
);
174 BOOLEAN
DosHandleIoctl(BYTE ControlCode
, WORD FileHandle
);
176 VOID WINAPI
DosInt20h(LPWORD Stack
);
177 VOID WINAPI
DosInt21h(LPWORD Stack
);
178 VOID WINAPI
DosBreakInterrupt(LPWORD Stack
);
179 VOID WINAPI
DosInt2Fh(LPWORD Stack
);
181 BOOLEAN
DosKRNLInitialize(VOID
);