2011-03-30 12:46:40 +00:00
|
|
|
/*
|
|
|
|
* Memory and machine-specific definitions. Used in C and assembler.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Sizes
|
|
|
|
*/
|
|
|
|
#define BI2BY 8 /* bits per byte */
|
|
|
|
#define BI2WD 32 /* bits per word */
|
|
|
|
#define BY2WD 4 /* bytes per word */
|
|
|
|
#define BY2PG 4096 /* bytes per page */
|
|
|
|
#define WD2PG (BY2PG/BY2WD) /* words per page */
|
|
|
|
#define PGSHIFT 12 /* log(BY2PG) */
|
|
|
|
#define PGROUND(s) (((s)+(BY2PG-1))&~(BY2PG-1))
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Fundamental addresses
|
|
|
|
*/
|
2011-05-14 17:06:27 +00:00
|
|
|
#define CONFADDR 0x1200 /* info passed from boot loader */
|
|
|
|
#define BIOSXCHG 0x6000 /* To exchange data with the BIOS */
|
2011-03-30 12:46:40 +00:00
|
|
|
|
|
|
|
#define SELGDT (0<<3) /* selector is in gdt */
|
|
|
|
#define SELLDT (1<<3) /* selector is in ldt */
|
|
|
|
|
|
|
|
#define SELECTOR(i, t, p) (((i)<<3) | (t) | (p))
|
|
|
|
|
|
|
|
/*
|
|
|
|
* fields in segment descriptors
|
|
|
|
*/
|
|
|
|
#define SEGDATA (0x10<<8) /* data/stack segment */
|
|
|
|
#define SEGEXEC (0x18<<8) /* executable segment */
|
|
|
|
#define SEGTSS (0x9<<8) /* TSS segment */
|
|
|
|
#define SEGCG (0x0C<<8) /* call gate */
|
|
|
|
#define SEGIG (0x0E<<8) /* interrupt gate */
|
|
|
|
#define SEGTG (0x0F<<8) /* task gate */
|
|
|
|
#define SEGTYPE (0x1F<<8)
|
|
|
|
|
|
|
|
#define SEGP (1<<15) /* segment present */
|
|
|
|
#define SEGPL(x) ((x)<<13) /* priority level */
|
|
|
|
#define SEGB (1<<22) /* granularity 1==4k (for expand-down) */
|
|
|
|
#define SEGG (1<<23) /* granularity 1==4k (for other) */
|
|
|
|
#define SEGE (1<<10) /* expand down */
|
|
|
|
#define SEGW (1<<9) /* writable (for data/stack) */
|
|
|
|
#define SEGR (1<<9) /* readable (for code) */
|
|
|
|
#define SEGD (1<<22) /* default 1==32bit (for code) */
|
|
|
|
|