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 *******************************************************************/
16 /**/ #include "int32.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 (0x9FFE - FIRST_MCB_SEGMENT)
31 #define SYSTEM_PSP 0x08
32 #define SYSTEM_ENV_BLOCK 0x800
33 #define DOS_CODE_SEGMENT 0x70
34 #define DOS_DATA_SEGMENT 0xA0
36 #define DOS_DATA_OFFSET(x) FIELD_OFFSET(DOS_DATA, x)
38 #define INVALID_DOS_HANDLE 0xFFFF
39 #define DOS_INPUT_HANDLE 0
40 #define DOS_OUTPUT_HANDLE 1
41 #define DOS_ERROR_HANDLE 2
43 #define DOS_SFT_SIZE 255
44 #define UMB_START_SEGMENT 0xC000
45 #define UMB_END_SEGMENT 0xDFFF
46 #define DOS_ALLOC_HIGH 0x40
47 #define DOS_ALLOC_HIGH_LOW 0x80
48 #define DOS_DIR_LENGTH 64
49 #define NUM_DRIVES ('Z' - 'A' + 1)
50 #define DOS_CHAR_ATTRIBUTE 0x07
52 /* 16 MB of EMS memory */
53 #define EMS_TOTAL_PAGES 1024
57 typedef struct _DOS_FCB
72 typedef struct _DOS_SYSVARS
82 /* This is where the SYSVARS really start */
83 DWORD FirstDpb
; // 0x00
84 DWORD FirstSft
; // 0x04
85 DWORD ActiveClock
; // 0x08
86 DWORD ActiveCon
; // 0x0c
87 BYTE Reserved0
[6]; // 0x10
88 DWORD CurrentDirs
; // 0x16
89 BYTE Reserved1
[6]; // 0x1a
90 BYTE NumBlockDevices
; // 0x20
91 BYTE NumLocalDrives
; // 0x21 - Set by LASTDRIVE
92 DOS_DRIVER NullDevice
; // 0x22
93 BYTE Reserved2
; // 0x34
94 WORD ProgramVersionTable
; // 0x35
95 DWORD SetVerTable
; // 0x37
96 WORD Reserved3
[2]; // 0x3b
97 WORD BuffersNumber
; // 0x3f - 'x' parameter in "BUFFERS=x,y" command
98 WORD BuffersLookaheadNumber
; // 0x41 - 'y' parameter in "BUFFERS=x,y" command
99 BYTE BootDrive
; // 0x43
100 BYTE UseDwordMoves
; // 0x44
101 WORD ExtMemSize
; // 0x45
102 } DOS_SYSVARS
, *PDOS_SYSVARS
;
104 typedef struct _DOS_CLOCK_TRANSFER_RECORD
111 } DOS_CLOCK_TRANSFER_RECORD
, *PDOS_CLOCK_TRANSFER_RECORD
;
113 typedef struct _DOS_INPUT_BUFFER
117 CHAR Buffer
[ANYSIZE_ARRAY
];
118 } DOS_INPUT_BUFFER
, *PDOS_INPUT_BUFFER
;
120 typedef struct _DOS_FIND_FILE_BLOCK
128 /* The following part of the structure is documented */
134 } DOS_FIND_FILE_BLOCK
, *PDOS_FIND_FILE_BLOCK
;
136 typedef struct _DOS_SDA
138 BYTE PrinterEchoFlag
;
139 CHAR CurrentSwitchChar
;
143 /* This is where the SDA really starts */
149 BYTE LastErrorAction
;
151 DWORD LastErrorPointer
;
152 DWORD DiskTransferArea
;
154 WORD Int23StackPointer
;
157 BYTE ExtendedBreakFlag
;
159 /* This part is only valid while in DOS */
162 WORD NetworkMachineNumber
;
167 WORD LastSearchDirEntry
;
178 BYTE ConsoleSwappedFlag
;
181 DOS_RW_REQUEST Request
;
182 DWORD DriverEntryPoint
;
189 DOS_CLOCK_TRANSFER_RECORD ClockTransferRecord
;
192 CHAR FileNameBuffer
[256];
194 CHAR CurrentDirectory
[81];
195 CHAR FcbFilename
[12];
196 CHAR FcbRenameDest
[12];
198 BYTE ExtendedAttribute
;
200 BYTE DirSearchAttributes
;
203 BYTE DeviceNameFound
;
208 BYTE ParsedFcbExists
;
210 BYTE TerminationType
;
212 BYTE FileDeletedChar
;
213 DWORD CriticalErrorDpb
;
214 DWORD UserRegistersStack
;
215 WORD Int24StackPointer
;
219 DWORD CurrentDirPointer
;
234 } DOS_SDA
, *PDOS_SDA
;
236 typedef struct _DOS_DATA
239 BYTE NullDriverRoutine
[7];
240 WORD DosVersion
; // DOS version to report to programs (can be different from the true one)
242 CHAR CurrentDirectories
[NUM_DRIVES
][DOS_DIR_LENGTH
];
243 BYTE Sft
[ANYSIZE_ARRAY
];
244 } DOS_DATA
, *PDOS_DATA
;
248 /* VARIABLES ******************************************************************/
250 extern BOOLEAN DoEcho
;
251 extern PDOS_DATA DosData
;
252 extern PDOS_SYSVARS SysVars
;
255 /* FUNCTIONS ******************************************************************/
257 extern CALLBACK16 DosContext
;
258 #define RegisterDosInt32(IntNumber, IntHandler) \
260 DosContext.NextOffset += RegisterInt32(MAKELONG(DosContext.NextOffset, \
261 DosContext.Segment), \
262 (IntNumber), (IntHandler), NULL); \
269 CHAR
DosReadCharacter(WORD FileHandle
);
270 BOOLEAN
DosCheckInput(VOID
);
271 VOID
DosPrintCharacter(WORD FileHandle
, CHAR Character
);
273 BOOLEAN
DosBIOSInitialize(VOID
);
274 VOID
ConDrvInitialize(VOID
);
275 VOID
ConDrvCleanup(VOID
);
278 * DOS Kernel Functions
282 BOOLEAN
DosKRNLInitialize(VOID
);