2 /*
\83V
\83X
\83e
\83\80\92è
\90\94\90é
\8c¾*/
\r
5 #define CHNOSPROJECT_DEBUG /*
\92è
\8b`
\82·
\82é
\82Æ
\83f
\83o
\83b
\83O
\83\82\81[
\83h
\82Å
\8eÀ
\8ds
\81B
\82»
\82ê
\82¼
\82ê
\82Ì
\83f
\83o
\83b
\83O
\83I
\83v
\83V
\83\87\83\93\82à
\97L
\8cø
\82É
\82·
\82é
\95K
\97v
\82ª
\82 \82é*/
\r
7 #ifdef CHNOSPROJECT_DEBUG
\r
8 //#define CHNOSPROJECT_DEBUG_CALLLINK
\r
9 //#define CHNOSPROJECT_DEBUG_MEMORY
\r
10 //#define CHNOSPROJECT_DEBUG_MEMORY_ALLOCATE_AND_FREE
\r
11 //#define CHNOSPROJECT_DEBUG_EMULATOR_X86
\r
12 //#define CHNOSPROJECT_DEBUG_CALLBIOS
\r
13 //#define CHNOSPROJECT_DEBUG_FIFO
\r
14 //#define CHNOSPROJECT_DEBUG_KBCT
\r
15 //#define CHNOSPROJECT_DEBUG_MCT
\r
16 //#define CHNOSPROJECT_DEBUG_MOUSE
\r
17 //#define CHNOSPROJECT_DEBUG_DISPLAY
\r
18 //#define CHNOSPROJECT_DEBUG_DRAWING
\r
19 //#define CHNOSPROJECT_DEBUG_SHEET
\r
20 //#define CHNOSPROJECT_DEBUG_TIMER
\r
21 //#define CHNOSPROJECT_DEBUG_MULTITASK
\r
22 //#define CHNOSPROJECT_DEBUG_PCI
\r
23 //#define CHNOSPROJECT_DEBUG_COMMON_STRUCT
\r
24 //#define CHNOSPROJECT_DEBUG_TEXTBOX
\r
25 #define CHNOSPROJECT_DEBUG_CONSOLE
\r
37 #define AR_DATA32_RW 0x4092 //AR_32+AR_PRESENT+AR_CODE_OR_DATA+AR_TYPE_DATA_RW
\r
38 #define AR_CODE32_ER 0x409a //AR_32+AR_PRESENT+AR_CODE_OR_DATA+AR_TYPE_CODE_ER
\r
39 #define AR_LDT 0x0082 //AR_PRESENT+AR_SYSTEM_DESCRIPTOR+AR_TYPE_LDT
\r
40 #define AR_TSS32 0x0089 //AR_PRESENT+AR_SYSTEM_DESCRIPTOR+AR_TYPE_TSS32_READY
\r
41 #define AR_INTGATE32 0x008e //AR_PRESENT+AR_SYSTEM_DESCRIPTOR+AR_TYPE_INTGATE32
\r
43 #define AR_GRANULARITY_BYTE 0x0000 //G=0
\8aÖ
\90\94\82Å
\8e©
\93®
\90Ý
\92è
\82·
\82é
\82Ì
\82Å
\82±
\82Ì
\83r
\83b
\83g
\82Í
\8fí
\82É0
\r
44 #define AR_GRANULARITY_4KB 0x8000 //G=1
\r
45 #define AR_16 0x0000 //D/B=0
\r
46 #define AR_32 0x4000 //D/B=1
\r
47 #define AR_NOTPRESENT 0x0000 //P=0
\r
48 #define AR_PRESENT 0x0080 //P=1
\r
49 #define AR_SYSTEM 0x0000 //DPL=0
\r
50 #define AR_USER 0x0060 //DPL=3
\r
51 #define AR_SYSTEM_DESCRIPTOR 0x0000 //S=0
\r
52 #define AR_CODE_OR_DATA 0x0010 //S=1
\r
54 #define AR_TYPE_TSS16_READY 0x0001
\r
55 #define AR_TYPE_LDT 0x0002
\r
56 #define AR_TYPE_TSS16_BUSY 0x0003
\r
57 #define AR_TYPE_CALLGATE16 0x0004
\r
58 #define AR_TYPE_TASKGATE 0x0005
\r
59 #define AR_TYPE_INTGATE16 0x0006
\r
60 #define AR_TYPE_TRAPGATE16 0x0007
\r
61 #define AR_TYPE_TSS32_READY 0x0009
\r
62 #define AR_TYPE_TSS32_BUSY 0x000b
\r
63 #define AR_TYPE_CALLGATE32 0x000c
\r
64 #define AR_TYPE_INTGATE32 0x000e
\r
65 #define AR_TYPE_TRAPGATE32 0x000f
\r
67 #define AR_TYPE_ACCESSED 0x0001 //
\8aÖ
\90\94\90Ý
\92è
\8e\9e\82É
\82Í
\83N
\83\8a\83A
\81A
\93Ç
\82Ý
\8fo
\82µ
\8e\9e\82Í
\83A
\83N
\83Z
\83X
\8dÏ
\82Ý
\82È
\82ç
\83Z
\83b
\83g
\r
69 #define AR_TYPE_DATA_R 0x0000
\r
70 #define AR_TYPE_DATA_RW 0x0002
\r
71 #define AR_TYPE_DATA_R_EXPAND_DOWN 0x0004
\r
72 #define AR_TYPE_DATA_RW_EXPAND_DOWN 0x0006
\r
74 #define AR_TYPE_CODE_E 0x0008
\r
75 #define AR_TYPE_CODE_ER 0x000a
\r
76 #define AR_TYPE_CODE_E_CONFORMING 0x000c
\r
77 #define AR_TYPE_CODE_ER_CONFORMING 0x000e
\r
79 /*DebugRegister Settings*/
\r
80 #define DR7_RW_EXECUTE_INSTRUCTION 0
\r
81 #define DR7_RW_WRITE_DATA 1
\r
82 #define DR7_RW_IO_RW 2
\r
83 #define DR7_RW_DATA_RW 3
\r
85 #define DR7_LEN_BYTE 0
\r
86 #define DR7_LEN_WORD 1
\r
87 #define DR7_LEN_DWORD 3
\r
90 #define OPCODE_REG_EAX 0
\r
91 #define OPCODE_REG_ECX 1
\r
92 #define OPCODE_REG_EDX 2
\r
93 #define OPCODE_REG_EBX 3
\r
94 #define OPCODE_REG_ESP 4
\r
95 #define OPCODE_REG_EBP 5
\r
96 #define OPCODE_REG_ESI 6
\r
97 #define OPCODE_REG_EDI 7
\r
99 #define OPCODE_W_BYTE 0
\r
100 #define OPCODE_W_16BIT_OR_32BIT 1
\r
102 #define OPCODE_REG_BYTE_AL 0
\r
103 #define OPCODE_REG_BYTE_CL 1
\r
104 #define OPCODE_REG_BYTE_DL 2
\r
105 #define OPCODE_REG_BYTE_BL 3
\r
106 #define OPCODE_REG_BYTE_AH 4
\r
107 #define OPCODE_REG_BYTE_CH 5
\r
108 #define OPCODE_REG_BYTE_DH 6
\r
109 #define OPCODE_REG_BYTE_BH 7
\r
111 #define OPCODE_SREG2_ES 0
\r
112 #define OPCODE_SREG2_CS 1
\r
113 #define OPCODE_SREG2_SS 2
\r
114 #define OPCODE_SREG2_DS 3
\r
116 #define OPCODE_SREG3_ES 0
\r
117 #define OPCODE_SREG3_CS 1
\r
118 #define OPCODE_SREG3_SS 2
\r
119 #define OPCODE_SREG3_DS 3
\r
120 #define OPCODE_SREG3_FS 4
\r
121 #define OPCODE_SREG3_GS 5
\r
123 #define OPCODE_EEE_CR0 0
\r
124 #define OPCODE_EEE_CR2 2
\r
125 #define OPCODE_EEE_CR3 3
\r
126 #define OPCODE_EEE_CR4 4
\r
128 #define OPCODE_EEE_DR0 0
\r
129 #define OPCODE_EEE_DR1 1
\r
130 #define OPCODE_EEE_DR2 2
\r
131 #define OPCODE_EEE_DR3 3
\r
132 #define OPCODE_EEE_DR6 6
\r
133 #define OPCODE_EEE_DR7 7
\r
135 #define OPCODE_TTTN_OVERFLOW 0
\r
136 #define OPCODE_TTTN_NO_OVERFLOW 1
\r
137 #define OPCODE_TTTN_BELOW 2
\r
138 #define OPCODE_TTTN_NOT_BELOW 3
\r
139 #define OPCODE_TTTN_EQUAL_OR_ZERO 4
\r
140 #define OPCODE_TTTN_NOT_EQUAL_OR_ZERO 5
\r
141 #define OPCODE_TTTN_NOT_ABOVE 6
\r
142 #define OPCODE_TTTN_ABOVE 7
\r
143 #define OPCODE_TTTN_SIGN 8
\r
144 #define OPCODE_TTTN_NOT_SIGN 9
\r
145 #define OPCODE_TTTN_PARITY 10
\r
146 #define OPCODE_TTTN_NOT_PARITY 10
\r
147 #define OPCODE_TTTN_LESS_THAN 10
\r
148 #define OPCODE_TTTN_NOT_LESS_THAN 10
\r
149 #define OPCODE_TTTN_NOT_GREATER_THAN 10
\r
150 #define OPCODE_TTTN_GREATER_THAN 10
\r
152 #define OPCODE_D_REG_SOURCE 0
\r
153 #define OPCODE_D_REG_DESTINATION 1
\r
155 #define OPCODE_MOD_INDEXONLY 0
\r
156 #define OPCODE_MOD_INDEX_AND_DISP_BYTE 1
\r
157 #define OPCODE_MOD_INDEX_AND_DISP_FULL 2
\r
158 #define OPCODE_MOD_REGISTER 3
\r
160 #define OPCODE_RM32_ADDR_EAX 0
\r
161 #define OPCODE_RM32_ADDR_ECX 1
\r
162 #define OPCODE_RM32_ADDR_EDX 2
\r
163 #define OPCODE_RM32_ADDR_EBX 3
\r
164 #define OPCODE_RM32_ADDR_SIB 4
\r
165 #define OPCODE_RM32_ADDR_EBP 5
\r
166 #define OPCODE_RM32_MOD00_ADDR_DISP32 5
\r
167 #define OPCODE_RM32_ADDR_ESI 6
\r
168 #define OPCODE_RM32_ADDR_EDI 7
\r
170 #define OPCODE_RM16_ADDR_BX_SI 0
\r
171 #define OPCODE_RM16_ADDR_BX_DI 1
\r
172 #define OPCODE_RM16_ADDR_BP_SI 2
\r
173 #define OPCODE_RM16_ADDR_BP_DI 3
\r
174 #define OPCODE_RM16_ADDR_SI 4
\r
175 #define OPCODE_RM16_ADDR_DI 5
\r
176 #define OPCODE_RM16_ADDR_BP 6
\r
177 #define OPCODE_RM16_MOD00_ADDR_DISP16 6
\r
178 #define OPCODE_RM16_ADDR_BX 7
\r
180 #define OPCODE_PREFIX_NONE 0
\r
182 #define OPCODE_PREFIX_LOCK 0xf0
\r
183 #define OPCODE_PREFIX_REPNE_REPNZ 0xf2
\r
184 #define OPCODE_PREFIX_REP_REPE_REPZ 0xf3
\r
186 //#define OPCODE_PREFIX_CS 0x2e
\r
187 //#define OPCODE_PREFIX_SS 0x36
\r
188 //#define OPCODE_PREFIX_DS 0x3e
\r
189 //#define OPCODE_PREFIX_ES 0x26
\r
190 //#define OPCODE_PREFIX_FS 0x64
\r
191 //#define OPCODE_PREFIX_GS 0x65
\r
192 #define OPCODE_PREFIX_BRANCH_NOT_TAKEN 0x2e
\r
193 #define OPCODE_PREFIX_BRANCH_TAKEN 0x3e
\r
195 #define OPCODE_PREFIX_OPERAND_SIZE 0x66
\r
197 #define OPCODE_PREFIX_ADDRESS_SIZE 0x67
\r
200 #define PIC0_ICW1 0x0020
\r
201 #define PIC0_OCW2 0x0020
\r
202 #define PIC0_IMR 0x0021
\r
203 #define PIC0_ICW2 0x0021
\r
204 #define PIC0_ICW3 0x0021
\r
205 #define PIC0_ICW4 0x0021
\r
206 #define PIC1_ICW1 0x00a0
\r
207 #define PIC1_OCW2 0x00a0
\r
208 #define PIC1_IMR 0x00a1
\r
209 #define PIC1_ICW2 0x00a1
\r
210 #define PIC1_ICW3 0x00a1
\r
211 #define PIC1_ICW4 0x00a1
\r
214 #define PORT_KEYDATA 0x0060
\r
215 #define PORT_KEYSTA 0x0064
\r
216 #define PORT_KEYCMD 0x0064
\r
217 #define KBC_MODE 0x47 //Keyboard and Mouse Interrupt Enable.
\r
218 #define KEYSTA_SEND_NOTREADY 0x02
\r
219 #define KEYDATA_ACK 0xfa
\r
220 #define KEYDATA_RESEND 0xfe
\r
221 #define KEYDATA_TEST_SUCCEEDED 0xaa
\r
222 #define KEYDATA_TEST_FAILED 0xfc
\r
223 #define KEYCMD_WRITE_8042_MODE_REG 0x60
\r
224 #define KEYCMD_SENDTO_MOUSE 0xd4
\r
225 #define KEYCMD_LED 0xed
\r
228 #define MOUSECMD_RESET 0xff
\r
229 //#define MOUSECMD_SET_DEFAULTS 0xf6
\r
230 //#define MOUSECMD_DISABLE_DATA_REPORTING 0xf5
\r
231 #define MOUSECMD_ENABLE_DATA_REPORTING 0xf4
\r
232 #define MOUSECMD_SET_SAMPLE_RATE 0xf3
\r
233 #define MOUSECMD_GET_DEVICE_ID 0xf2
\r
234 #define MOUSE_TYPE_3BUTTON 0x00
\r
235 #define MOUSE_TYPE_3BUTTON_SCROLL 0x03
\r
238 #define COM1_RX 0x03f8
\r
239 #define COM1_TX 0x03f8
\r
240 #define COM1_BAUD_LSB 0x03f8
\r
241 #define COM1_BAUD_MSB 0x03f9
\r
242 #define COM1_INTR_ENBL 0x03f9
\r
243 #define COM1_INTR_ID 0x03fa
\r
244 #define COM1_CTRL_FIFO 0x03fa
\r
245 #define COM1_CTRL_LINE 0x03fb
\r
246 #define COM1_CTRL_MODEM 0x03fc
\r
247 #define COM1_STA_LINE 0x03fd
\r
248 #define COM1_STA_MODEM 0x03fe
\r
251 #define PIT_CTRL 0x0043
\r
252 #define PIT_CNT0 0x0040
\r
255 #define VGA_CRTC_R_NUMBER 0x03d4
\r
256 #define VGA_CRTC_R_DATA 0x03d5
\r
257 #define VGA_CRTC_R_CURSOR_LOCATION_HIGH 0x0e
\r
258 #define VGA_CRTC_R_CURSOR_LOCATION_LOW 0x0f
\r
259 #define VGA_TEXTMODE_ADR 0xb8000
\r
260 #define VGA_VDAC_DATA 0x03c9
\r
261 #define VGA_VDAC_WRITE_ADR 0x03c8
\r
262 #define VGA_VRAM_ADR (void *)0x000a0000
\r
263 #define VGA08_VRAM_XSIZE 320
\r
264 #define VGA08_VRAM_YSIZE 200
\r
266 #define VESA_LINEAR_ACCESS 0x4000
\r
267 #define VESA_OMIT_CLEARING_VRAM 0x8000
\r
269 #define VBE_REALMODE_RETVALUE_ADDRESS (void *)0x00000e00;
\r
270 #define DISPLAYMODE_BIOS 0x0000
\r
271 #define DISPLAYMODE_VBE_WINDOW 0x0001
\r
272 #define DISPLAYMODE_VBE_LINEAR 0x0002
\r
276 #define ADR_DISKIMG (void *)0x00100000
\r
278 /*system segments*/
\r
279 #define SYSTEM_DS 0x01
\r
280 #define SYSTEM_CS 0x02
\r
282 /*descriptor tables*/
\r
283 #define ADR_IDT 0x0026f800
\r
284 #define LIMIT_IDT 0x000007ff
\r
285 #define ADR_GDT 0x00270000
\r
286 #define LIMIT_GDT 0x0000ffff
\r
287 #define ADR_BOOTPACK 0x00280000
\r
288 #define LIMIT_BOOTPACK 0x0007ffff
\r
291 #define ERROR_CPU_EXCEPTION_00 0x00000000 //int *esp
\r
292 #define ERROR_CPU_EXCEPTION_01 0x00000001 //int *esp
\r
293 #define ERROR_CPU_EXCEPTION_02 0x00000002 //int *esp
\r
294 #define ERROR_CPU_EXCEPTION_03 0x00000003 //int *esp
\r
295 #define ERROR_CPU_EXCEPTION_04 0x00000004 //int *esp
\r
296 #define ERROR_CPU_EXCEPTION_05 0x00000005 //int *esp
\r
297 #define ERROR_CPU_EXCEPTION_06 0x00000006 //int *esp
\r
298 #define ERROR_CPU_EXCEPTION_07 0x00000007 //int *esp
\r
299 #define ERROR_CPU_EXCEPTION_08 0x00000008 //int *esp
\r
300 #define ERROR_CPU_EXCEPTION_09 0x00000009 //int *esp
\r
301 #define ERROR_CPU_EXCEPTION_0A 0x0000000a //int *esp
\r
302 #define ERROR_CPU_EXCEPTION_0B 0x0000000b //int *esp
\r
303 #define ERROR_CPU_EXCEPTION_0C 0x0000000c //int *esp
\r
304 #define ERROR_CPU_EXCEPTION_0D 0x0000000d //int *esp
\r
305 #define ERROR_CPU_EXCEPTION_0E 0x0000000e //int *esp
\r
306 #define ERROR_CPU_EXCEPTION_0F 0x0000000f //int *esp
\r
307 #define ERROR_CPU_EXCEPTION_10 0x00000010 //int *esp
\r
308 #define ERROR_CPU_EXCEPTION_11 0x00000011 //int *esp
\r
309 #define ERROR_CPU_EXCEPTION_12 0x00000012 //int *esp
\r
310 #define ERROR_CPU_EXCEPTION_13 0x00000013 //int *esp
\r
311 #define ERROR_CPU_EXCEPTION_14 0x00000014 //int *esp
\r
312 #define ERROR_CPU_EXCEPTION_15 0x00000015 //int *esp
\r
313 #define ERROR_CPU_EXCEPTION_16 0x00000016 //int *esp
\r
314 #define ERROR_CPU_EXCEPTION_17 0x00000017 //int *esp
\r
315 #define ERROR_CPU_EXCEPTION_18 0x00000018 //int *esp
\r
316 #define ERROR_CPU_EXCEPTION_19 0x00000019 //int *esp
\r
317 #define ERROR_CPU_EXCEPTION_1A 0x0000001a //int *esp
\r
318 #define ERROR_CPU_EXCEPTION_1B 0x0000001b //int *esp
\r
319 #define ERROR_CPU_EXCEPTION_1C 0x0000001c //int *esp
\r
320 #define ERROR_CPU_EXCEPTION_1D 0x0000001d //int *esp
\r
321 #define ERROR_CPU_EXCEPTION_1E 0x0000001e //int *esp
\r
322 #define ERROR_CPU_EXCEPTION_1F 0x0000001f //int *esp
\r
323 #define ERROR_CPU_EXCEPTIONS 0x0000001f
\r
325 #define ERROR_NO_MORE_SEGMENT 0x00000020 //uint *retaddr
\r
326 #define ERROR_NOT_ENOUGH_FREE_MEMORY 0x00000021 //IO_MemoryControl ctrl, uint size
\r
327 #define ERROR_MEMORY_FREE_RANGE_OVERLAPPED 0x00000022 //IO_MemoryControl ctrl, uint tagno
\r
328 #define ERROR_NO_MORE_FREE_TAG 0x00000023 //IO_MemoryControl ctrl
\r
329 #define ERROR_INVALID_FREE_MEMORY_INDEX 0x00000024 //IO_MemoryControl ctrl, uint tagno
\r
330 #define ERROR_FIFO_BUFFER_OVERFLOW 0x00000025 //DATA_FIFO32 *fifo
\r
333 #define SIGNAL_ARGUMENTS_END 0xfefe1234
\r
335 #define TASK_FIFOSIZE (4 * 64)
\r
337 /*exceptions esp[] data with errorcode*/
\r
338 #define EXCEPTION_INFO_EDI 0x00
\r
339 #define EXCEPTION_INFO_ESI 0x01
\r
340 #define EXCEPTION_INFO_EBP 0x02
\r
341 #define EXCEPTION_INFO_ESP 0x03
\r
342 #define EXCEPTION_INFO_EBX 0x04
\r
343 #define EXCEPTION_INFO_EDX 0x05
\r
344 #define EXCEPTION_INFO_ECX 0x06
\r
345 #define EXCEPTION_INFO_EAX 0x07
\r
346 #define EXCEPTION_INFO_DS 0x08
\r
347 #define EXCEPTION_INFO_ES 0x09
\r
348 #define EXCEPTION_INFO_ERRORCODE 0x0a
\r
349 #define EXCEPTION_INFO_EIP 0x0b
\r
350 #define EXCEPTION_INFO_CS 0x0c
\r
351 #define EXCEPTION_INFO_EFLAGS 0x0d
\r
352 #define EXCEPTION_INFO_USER_ESP 0x0e
\r
353 #define EXCEPTION_INFO_USER_SS 0x0f
\r
356 #define SHEET_MAX_XSIZE 65535
\r
357 #define SHEET_MAX_YSIZE 65535
\r
358 #define SHEET_MAX_CHILDREN 255
\r
359 #define SHEET_LOCATION_NOCHANGE 0x7ffffffe
\r
362 #define CONSOLE_PRINTF_BUFFER_SIZE 1024
\r
365 #define FLOPPYDISK_FAT0_OFFSET 0x000200
\r
366 #define FLOPPYDISK_FAT1_OFFSET 0x001400
\r
367 #define FLOPPYDISK_RDE_OFFSET 0x002600
\r
368 #define FLOPPYDISK_RDE_ENTRIES 224
\r
369 #define FLOPPYDISK_SECTORS (1440 * 2)
\r
372 #define FILE_PATH_LENGTH_MAX (256 - 1)
\r