2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
5 * PURPOSE: Header file to define commonly used stuff
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
9 /* INCLUDES *******************************************************************/
18 /* DEFINES ********************************************************************/
20 #define TO_LINEAR(seg, off) (((seg) << 4) + (off))
21 #define MAX_SEGMENT 0xFFFF
22 #define MAX_OFFSET 0xFFFF
23 #define MAX_ADDRESS TO_LINEAR(MAX_SEGMENT, MAX_OFFSET)
24 #define ROM_AREA_START 0xC0000
25 #define ROM_AREA_END 0xFFFFF
26 #define BIOS_SEGMENT 0xF000
27 #define VIDEO_BIOS_INTERRUPT 0x10
28 #define SPECIAL_INT_NUM 0xFF
29 #define SEGMENT_TO_MCB(seg) ((PDOS_MCB)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
30 #define SEGMENT_TO_PSP(seg) ((PDOS_PSP)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
33 #define DOS_VERSION 0x0600
34 #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
35 #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
36 #define FIRST_MCB_SEGMENT 0x1000
37 #define USER_MEMORY_SIZE 0x8FFFF
38 #define SYSTEM_PSP 0x08
39 #define SYSTEM_ENV_BLOCK 0x800
41 /* System console constants */
42 #define CONSOLE_FONT_HEIGHT 8
43 #define CONSOLE_VIDEO_MEM_START 0xB8000
44 #define CONSOLE_VIDEO_MEM_END 0xBFFFF
46 #define EMULATOR_FLAG_CF (1 << 0)
47 #define EMULATOR_FLAG_PF (1 << 2)
48 #define EMULATOR_FLAG_AF (1 << 4)
49 #define EMULATOR_FLAG_ZF (1 << 6)
50 #define EMULATOR_FLAG_SF (1 << 7)
51 #define EMULATOR_FLAG_TF (1 << 8)
52 #define EMULATOR_FLAG_IF (1 << 9)
53 #define EMULATOR_FLAG_DF (1 << 10)
54 #define EMULATOR_FLAG_OF (1 << 11)
55 #define EMULATOR_FLAG_NT (1 << 14)
56 #define EMULATOR_FLAG_RF (1 << 16)
57 #define EMULATOR_FLAG_VM (1 << 17)
58 #define EMULATOR_FLAG_AC (1 << 18)
59 #define EMULATOR_FLAG_VIF (1 << 19)
60 #define EMULATOR_FLAG_VIP (1 << 20)
61 #define EMULATOR_FLAG_ID (1 << 21)
83 typedef struct _DOS_MCB
92 typedef struct _DOS_FCB
104 BYTE RecordNumber
[3];
105 } DOS_FCB
, *PDOS_FCB
;
107 typedef struct _DOS_PSP
112 DWORD TerminateAddress
;
114 DWORD CriticalAddress
;
116 BYTE HandleTable
[20];
119 WORD HandleTableSize
;
120 DWORD HandleTablePtr
;
128 BYTE CommandLineSize
;
129 CHAR CommandLine
[127];
130 } DOS_PSP
, *PDOS_PSP
;
132 typedef struct _DOS_SFT_ENTRY
138 DWORD DriveParamBlock
;
144 WORD LastClusterAccessed
;
151 } DOS_SFT_ENTRY
, *PDOS_SFT_ENTRY
;
153 typedef struct _DOS_SFT
157 DOS_SFT_ENTRY Entry
[ANYSIZE_ARRAY
];
158 } DOS_SFT
, *PDOS_SFT
;
160 typedef struct _DOS_INPUT_BUFFER
162 BYTE MaxLength
, Length
;
163 CHAR Buffer
[ANYSIZE_ARRAY
];
164 } DOS_INPUT_BUFFER
, *PDOS_INPUT_BUFFER
;
168 /* FUNCTIONS ******************************************************************/
170 extern LPVOID BaseAddress
;
171 extern BOOLEAN VdmRunning
;
172 extern LPCWSTR ExceptionName
[];
174 VOID
DisplayMessage(LPCWSTR Format
, ...);
175 BOOLEAN
BiosInitialize();
176 VOID
BiosUpdateConsole(ULONG StartAddress
, ULONG EndAddress
);
177 VOID
BiosPrintCharacter(CHAR Character
, BYTE Attribute
);
178 BOOLEAN
DosInitialize();
179 WORD
DosAllocateMemory(WORD Size
);
180 BOOLEAN
DosFreeMemory(WORD Segment
);
181 WORD
DosResizeMemory(WORD Segment
, WORD NewSize
);
182 BOOLEAN
DosCreateProcess(LPCSTR CommandLine
, WORD EnvBlock
);
183 VOID
DosInt20h(WORD CodeSegment
);
184 VOID
DosInt21h(WORD CodeSegment
);
185 VOID
DosBreakInterrupt();
186 VOID
BiosVideoService();
187 VOID
EmulatorSetStack(WORD Segment
, WORD Offset
);
188 VOID
EmulatorExecute(WORD Segment
, WORD Offset
);
189 VOID
EmulatorInterrupt(BYTE Number
);
190 ULONG
EmulatorGetRegister(ULONG Register
);
191 VOID
EmulatorSetRegister(ULONG Register
, ULONG Value
);
192 VOID
EmulatorSetFlag(ULONG Flag
);
193 VOID
EmulatorClearFlag(ULONG Flag
);
194 BOOLEAN
EmulatorGetFlag(ULONG Flag
);
195 BOOLEAN
EmulatorInitialize();
197 VOID
EmulatorCleanup();