mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.0 KiB
138 lines
3.0 KiB
/*[
|
|
|
|
c_bsic.h
|
|
|
|
Basic Protected Mode Support and Flag Support.
|
|
----------------------------------------------
|
|
|
|
LOCAL CHAR SccsID[]="@(#)c_bsic.h 1.5 09/01/94";
|
|
|
|
]*/
|
|
|
|
|
|
/*
|
|
Define descriptor 'super' types.
|
|
*/
|
|
#define INVALID 0x00
|
|
#define AVAILABLE_TSS 0x01
|
|
#define LDT_SEGMENT 0x02
|
|
#define BUSY_TSS 0x03
|
|
#define CALL_GATE 0x04
|
|
#define TASK_GATE 0x05
|
|
#define INTERRUPT_GATE 0x06
|
|
#define TRAP_GATE 0x07
|
|
#define XTND_AVAILABLE_TSS 0x09
|
|
#define XTND_BUSY_TSS 0x0b
|
|
#define XTND_CALL_GATE 0x0c
|
|
#define XTND_INTERRUPT_GATE 0x0e
|
|
#define XTND_TRAP_GATE 0x0f
|
|
#define EXPANDUP_READONLY_DATA 0x11
|
|
#define EXPANDUP_WRITEABLE_DATA 0x13
|
|
#define EXPANDDOWN_READONLY_DATA 0x15
|
|
#define EXPANDDOWN_WRITEABLE_DATA 0x17
|
|
#define NONCONFORM_NOREAD_CODE 0x19
|
|
#define NONCONFORM_READABLE_CODE 0x1b
|
|
#define CONFORM_NOREAD_CODE 0x1d
|
|
#define CONFORM_READABLE_CODE 0x1f
|
|
|
|
|
|
/*
|
|
Macros for access to SELECTOR bit fields.
|
|
|
|
15 3 2 1 0
|
|
=================================
|
|
SELECTOR | INDEX |T|RPL|
|
|
| |I| |
|
|
=================================
|
|
*/
|
|
#define GET_SELECTOR_INDEX_TIMES8(x) ((x) & 0xfff8)
|
|
#define GET_SELECTOR_INDEX(x) (((x) & 0xfff8) >> 3)
|
|
#define GET_SELECTOR_TI(x) (((x) & 0x0004) >> 2)
|
|
#define GET_SELECTOR_RPL(x) ((x) & 0x3)
|
|
#define SET_SELECTOR_RPL(x,y) (x = ((x) & ~0x3) | y)
|
|
|
|
/*
|
|
Macros for access to ACCESS RIGHTS bit fields.
|
|
|
|
1 1 1 1 1 1
|
|
5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
|
|
=================================
|
|
ACCESS RIGHTS |-|X|-|-|-|-|-|-|P|DPL| SUPER |
|
|
=================================
|
|
|
|
Code Segment: Data Segment:
|
|
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
|
================= =================
|
|
|P|DPL|1|1|C|R|A| |P|DPL|1|0|E|W|A|
|
|
================= =================
|
|
|
|
*/
|
|
#define GET_AR_P(x) (((x) & BIT7_MASK) != 0) /* present */
|
|
#define GET_AR_E(x) (((x) & BIT2_MASK) != 0) /* expand down */
|
|
#define GET_AR_C(x) (((x) & BIT2_MASK) != 0) /* conforming */
|
|
#define GET_AR_W(x) (((x) & BIT1_MASK) != 0) /* writeable */
|
|
#define GET_AR_R(x) (((x) & BIT1_MASK) != 0) /* readable */
|
|
#define GET_AR_X(x) (((x) & BIT14_MASK) != 0) /* big/default */
|
|
|
|
#define GET_AR_DPL(x) (((x) & 0x60) >> 5)
|
|
#define GET_AR_SUPER(x) ((x) & 0x1f)
|
|
|
|
#define NOT_PRESENT 0
|
|
#define PRESENT 1
|
|
#define ACCESSED 1
|
|
|
|
|
|
IMPORT ISM32 descriptor_super_type
|
|
|
|
IPT1(
|
|
IU16, AR
|
|
|
|
);
|
|
|
|
IMPORT VOID do_multiple_shiftrot_of
|
|
|
|
IPT1(
|
|
ISM32, new_of
|
|
|
|
);
|
|
|
|
|
|
IMPORT IU32 getFLAGS IPT0();
|
|
|
|
IMPORT VOID read_descriptor_linear
|
|
|
|
IPT2(
|
|
IU32, addr,
|
|
CPU_DESCR *, descr
|
|
|
|
);
|
|
|
|
IMPORT BOOL selector_is_null
|
|
|
|
IPT1(
|
|
IU16, selector
|
|
|
|
);
|
|
|
|
IMPORT BOOL selector_outside_GDT
|
|
|
|
IPT2(
|
|
IU16, selector,
|
|
IU32 *, descr_addr
|
|
|
|
);
|
|
|
|
IMPORT BOOL selector_outside_GDT_LDT
|
|
|
|
IPT2(
|
|
IU16, selector,
|
|
IU32 *, descr_addr
|
|
|
|
);
|
|
|
|
IMPORT VOID setFLAGS
|
|
|
|
IPT1(
|
|
IU32, flags
|
|
|
|
);
|