2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: dos/dos32krnl/dos.h
5 * PURPOSE: DOS32 Kernel
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
12 /* INCLUDES *******************************************************************/
17 /**/ #include "int32.h" /**/
19 /* DEFINES ********************************************************************/
22 // We are DOS 5.00 (reported by INT 21h, AH=30h)
23 // and DOS 5.50 (reported by INT 21h, AX=3306h) for Windows NT Compatibility
25 #define DOS_VERSION MAKEWORD(5, 00)
26 #define NTDOS_VERSION MAKEWORD(5, 50)
28 #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
29 #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
30 #define FIRST_MCB_SEGMENT 0x1000
31 #define USER_MEMORY_SIZE (0x9FFE - FIRST_MCB_SEGMENT)
32 #define SYSTEM_PSP 0x08
33 #define SYSTEM_ENV_BLOCK 0x800
35 #define INVALID_DOS_HANDLE 0xFFFF
36 #define DOS_INPUT_HANDLE 0
37 #define DOS_OUTPUT_HANDLE 1
38 #define DOS_ERROR_HANDLE 2
40 #define DOS_SFT_SIZE 255
41 #define SEGMENT_TO_MCB(seg) ((PDOS_MCB)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
42 #define SEGMENT_TO_PSP(seg) ((PDOS_PSP)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
43 #define UMB_START_SEGMENT 0xC000
44 #define UMB_END_SEGMENT 0xDFFF
45 #define DOS_ALLOC_HIGH 0x40
46 #define DOS_ALLOC_HIGH_LOW 0x80
47 #define DOS_CMDLINE_LENGTH 127
48 #define DOS_DIR_LENGTH 64
49 #define NUM_DRIVES ('Z' - 'A' + 1)
50 #define DOS_CHAR_ATTRIBUTE 0x07
51 #define DOS_PROGRAM_NAME_TAG 0x0001
52 #define DEFAULT_JFT_SIZE 20
56 DOS_LOAD_AND_EXECUTE
= 0x00,
58 DOS_LOAD_OVERLAY
= 0x03
68 typedef struct _DOS_SFT_ENTRY
70 DOS_SFT_ENTRY_TYPE Type
;
76 PDOS_DEVICE_NODE DeviceNode
;
78 } DOS_SFT_ENTRY
, *PDOS_SFT_ENTRY
;
82 typedef struct _DOS_FCB
97 typedef struct _DOS_PSP
102 DWORD TerminateAddress
;
104 DWORD CriticalAddress
;
106 BYTE HandleTable
[20];
109 WORD HandleTableSize
;
110 DWORD HandleTablePtr
;
118 BYTE CommandLineSize
;
119 CHAR CommandLine
[DOS_CMDLINE_LENGTH
];
120 } DOS_PSP
, *PDOS_PSP
;
122 typedef struct _DOS_INPUT_BUFFER
126 CHAR Buffer
[ANYSIZE_ARRAY
];
127 } DOS_INPUT_BUFFER
, *PDOS_INPUT_BUFFER
;
129 typedef struct _DOS_DRIVER_HEADER
136 } DOS_DRIVER_HEADER
, *PDOS_DRIVER_HEADER
;
138 typedef struct _DOS_FIND_FILE_BLOCK
146 /* The following part of the structure is documented */
152 } DOS_FIND_FILE_BLOCK
, *PDOS_FIND_FILE_BLOCK
;
154 typedef struct _DOS_EXEC_PARAM_BLOCK
156 /* Input variables */
162 /* Output variables */
165 } DOS_EXEC_PARAM_BLOCK
, *PDOS_EXEC_PARAM_BLOCK
;
167 typedef struct _DOS_COUNTRY_CODE_BUFFER
173 } DOS_COUNTRY_CODE_BUFFER
, *PDOS_COUNTRY_CODE_BUFFER
;
177 /* VARIABLES ******************************************************************/
179 extern BOOLEAN DoEcho
;
180 extern WORD CurrentPsp
;
181 extern WORD DosLastError
;
183 /* FUNCTIONS ******************************************************************/
185 extern CALLBACK16 DosContext
;
186 #define RegisterDosInt32(IntNumber, IntHandler) \
188 DosContext.NextOffset += RegisterInt32(MAKELONG(DosContext.NextOffset, \
189 DosContext.Segment), \
190 (IntNumber), (IntHandler), NULL); \
197 CHAR
DosReadCharacter(WORD FileHandle
);
198 BOOLEAN
DosCheckInput(VOID
);
199 VOID
DosPrintCharacter(WORD FileHandle
, CHAR Character
);
201 BOOLEAN
DosBIOSInitialize(VOID
);
202 VOID
EmsDrvInitialize(VOID
);
203 VOID
EmsDrvCleanup(VOID
);
204 VOID
ConDrvInitialize(VOID
);
205 VOID
ConDrvCleanup(VOID
);
208 * DOS Kernel Functions
211 WORD
DosOpenHandle(HANDLE Handle
);
212 PDOS_SFT_ENTRY
DosGetSftEntry(WORD DosHandle
);
214 WORD
DosCreateFileEx(LPWORD Handle
,
215 LPWORD CreationStatus
,
217 BYTE AccessShareModes
,
218 WORD CreateActionFlags
,
220 WORD
DosCreateFile(LPWORD Handle
,
222 DWORD CreationDisposition
,
224 WORD
DosOpenFile(LPWORD Handle
,
226 BYTE AccessShareModes
);
227 WORD
DosReadFile(WORD FileHandle
,
231 WORD
DosWriteFile(WORD FileHandle
,
234 LPWORD BytesWritten
);
235 WORD
DosSeekFile(WORD FileHandle
,
239 BOOL
DosFlushFileBuffers(WORD FileHandle
);
241 VOID
DosInitializePsp(WORD PspSegment
, LPCSTR CommandLine
, WORD ProgramSize
, WORD Environment
);
242 DWORD
DosLoadExecutable(
243 IN DOS_EXEC_TYPE LoadType
,
244 IN LPCSTR ExecutablePath
,
245 IN LPCSTR CommandLine
,
246 IN LPCSTR Environment OPTIONAL
,
247 OUT PDWORD StackLocation OPTIONAL
,
248 OUT PDWORD EntryPoint OPTIONAL
250 WORD
DosCreateProcess(
251 DOS_EXEC_TYPE LoadType
,
253 PDOS_EXEC_PARAM_BLOCK Parameters
255 DWORD
DosStartProcess(
256 IN LPCSTR ExecutablePath
,
257 IN LPCSTR CommandLine
,
258 IN LPCSTR Environment OPTIONAL
260 VOID
DosTerminateProcess(WORD Psp
, BYTE ReturnCode
, WORD KeepResident
);
261 BOOLEAN
DosHandleIoctl(BYTE ControlCode
, WORD FileHandle
);
263 BOOLEAN
DosKRNLInitialize(VOID
);